bastd.actor.spazappearance

Appearance functionality for spazzes.

  1# Released under the MIT License. See LICENSE for details.
  2#
  3"""Appearance functionality for spazzes."""
  4from __future__ import annotations
  5
  6from typing import TYPE_CHECKING
  7
  8import ba
  9import ba.internal
 10
 11if TYPE_CHECKING:
 12    pass
 13
 14
 15def get_appearances(include_locked: bool = False) -> list[str]:
 16    """Get the list of available spaz appearances."""
 17    # pylint: disable=too-many-statements
 18    # pylint: disable=too-many-branches
 19    get_purchased = ba.internal.get_purchased
 20    disallowed = []
 21    if not include_locked:
 22        # hmm yeah this'll be tough to hack...
 23        if not get_purchased('characters.santa'):
 24            disallowed.append('Santa Claus')
 25        if not get_purchased('characters.frosty'):
 26            disallowed.append('Frosty')
 27        if not get_purchased('characters.bones'):
 28            disallowed.append('Bones')
 29        if not get_purchased('characters.bernard'):
 30            disallowed.append('Bernard')
 31        if not get_purchased('characters.pixie'):
 32            disallowed.append('Pixel')
 33        if not get_purchased('characters.pascal'):
 34            disallowed.append('Pascal')
 35        if not get_purchased('characters.actionhero'):
 36            disallowed.append('Todd McBurton')
 37        if not get_purchased('characters.taobaomascot'):
 38            disallowed.append('Taobao Mascot')
 39        if not get_purchased('characters.agent'):
 40            disallowed.append('Agent Johnson')
 41        if not get_purchased('characters.jumpsuit'):
 42            disallowed.append('Lee')
 43        if not get_purchased('characters.assassin'):
 44            disallowed.append('Zola')
 45        if not get_purchased('characters.wizard'):
 46            disallowed.append('Grumbledorf')
 47        if not get_purchased('characters.cowboy'):
 48            disallowed.append('Butch')
 49        if not get_purchased('characters.witch'):
 50            disallowed.append('Witch')
 51        if not get_purchased('characters.warrior'):
 52            disallowed.append('Warrior')
 53        if not get_purchased('characters.superhero'):
 54            disallowed.append('Middle-Man')
 55        if not get_purchased('characters.alien'):
 56            disallowed.append('Alien')
 57        if not get_purchased('characters.oldlady'):
 58            disallowed.append('OldLady')
 59        if not get_purchased('characters.gladiator'):
 60            disallowed.append('Gladiator')
 61        if not get_purchased('characters.wrestler'):
 62            disallowed.append('Wrestler')
 63        if not get_purchased('characters.operasinger'):
 64            disallowed.append('Gretel')
 65        if not get_purchased('characters.robot'):
 66            disallowed.append('Robot')
 67        if not get_purchased('characters.cyborg'):
 68            disallowed.append('B-9000')
 69        if not get_purchased('characters.bunny'):
 70            disallowed.append('Easter Bunny')
 71        if not get_purchased('characters.kronk'):
 72            disallowed.append('Kronk')
 73        if not get_purchased('characters.zoe'):
 74            disallowed.append('Zoe')
 75        if not get_purchased('characters.jackmorgan'):
 76            disallowed.append('Jack Morgan')
 77        if not get_purchased('characters.mel'):
 78            disallowed.append('Mel')
 79        if not get_purchased('characters.snakeshadow'):
 80            disallowed.append('Snake Shadow')
 81    return [
 82        s for s in list(ba.app.spaz_appearances.keys()) if s not in disallowed
 83    ]
 84
 85
 86class Appearance:
 87    """Create and fill out one of these suckers to define a spaz appearance"""
 88
 89    def __init__(self, name: str):
 90        self.name = name
 91        if self.name in ba.app.spaz_appearances:
 92            raise Exception(
 93                'spaz appearance name "' + self.name + '" already exists.'
 94            )
 95        ba.app.spaz_appearances[self.name] = self
 96        self.color_texture = ''
 97        self.color_mask_texture = ''
 98        self.icon_texture = ''
 99        self.icon_mask_texture = ''
100        self.head_model = ''
101        self.torso_model = ''
102        self.pelvis_model = ''
103        self.upper_arm_model = ''
104        self.forearm_model = ''
105        self.hand_model = ''
106        self.upper_leg_model = ''
107        self.lower_leg_model = ''
108        self.toes_model = ''
109        self.jump_sounds: list[str] = []
110        self.attack_sounds: list[str] = []
111        self.impact_sounds: list[str] = []
112        self.death_sounds: list[str] = []
113        self.pickup_sounds: list[str] = []
114        self.fall_sounds: list[str] = []
115        self.style = 'spaz'
116        self.default_color: tuple[float, float, float] | None = None
117        self.default_highlight: tuple[float, float, float] | None = None
118
119
120def register_appearances() -> None:
121    """Register our builtin spaz appearances."""
122
123    # this is quite ugly but will be going away so not worth cleaning up
124    # pylint: disable=invalid-name
125    # pylint: disable=too-many-locals
126    # pylint: disable=too-many-statements
127
128    # Spaz #######################################
129    t = Appearance('Spaz')
130    t.color_texture = 'neoSpazColor'
131    t.color_mask_texture = 'neoSpazColorMask'
132    t.icon_texture = 'neoSpazIcon'
133    t.icon_mask_texture = 'neoSpazIconColorMask'
134    t.head_model = 'neoSpazHead'
135    t.torso_model = 'neoSpazTorso'
136    t.pelvis_model = 'neoSpazPelvis'
137    t.upper_arm_model = 'neoSpazUpperArm'
138    t.forearm_model = 'neoSpazForeArm'
139    t.hand_model = 'neoSpazHand'
140    t.upper_leg_model = 'neoSpazUpperLeg'
141    t.lower_leg_model = 'neoSpazLowerLeg'
142    t.toes_model = 'neoSpazToes'
143    t.jump_sounds = ['spazJump01', 'spazJump02', 'spazJump03', 'spazJump04']
144    t.attack_sounds = [
145        'spazAttack01',
146        'spazAttack02',
147        'spazAttack03',
148        'spazAttack04',
149    ]
150    t.impact_sounds = [
151        'spazImpact01',
152        'spazImpact02',
153        'spazImpact03',
154        'spazImpact04',
155    ]
156    t.death_sounds = ['spazDeath01']
157    t.pickup_sounds = ['spazPickup01']
158    t.fall_sounds = ['spazFall01']
159    t.style = 'spaz'
160
161    # Zoe #####################################
162    t = Appearance('Zoe')
163    t.color_texture = 'zoeColor'
164    t.color_mask_texture = 'zoeColorMask'
165    t.default_color = (0.6, 0.6, 0.6)
166    t.default_highlight = (0, 1, 0)
167    t.icon_texture = 'zoeIcon'
168    t.icon_mask_texture = 'zoeIconColorMask'
169    t.head_model = 'zoeHead'
170    t.torso_model = 'zoeTorso'
171    t.pelvis_model = 'zoePelvis'
172    t.upper_arm_model = 'zoeUpperArm'
173    t.forearm_model = 'zoeForeArm'
174    t.hand_model = 'zoeHand'
175    t.upper_leg_model = 'zoeUpperLeg'
176    t.lower_leg_model = 'zoeLowerLeg'
177    t.toes_model = 'zoeToes'
178    t.jump_sounds = ['zoeJump01', 'zoeJump02', 'zoeJump03']
179    t.attack_sounds = [
180        'zoeAttack01',
181        'zoeAttack02',
182        'zoeAttack03',
183        'zoeAttack04',
184    ]
185    t.impact_sounds = [
186        'zoeImpact01',
187        'zoeImpact02',
188        'zoeImpact03',
189        'zoeImpact04',
190    ]
191    t.death_sounds = ['zoeDeath01']
192    t.pickup_sounds = ['zoePickup01']
193    t.fall_sounds = ['zoeFall01']
194    t.style = 'female'
195
196    # Ninja ##########################################
197    t = Appearance('Snake Shadow')
198    t.color_texture = 'ninjaColor'
199    t.color_mask_texture = 'ninjaColorMask'
200    t.default_color = (1, 1, 1)
201    t.default_highlight = (0.55, 0.8, 0.55)
202    t.icon_texture = 'ninjaIcon'
203    t.icon_mask_texture = 'ninjaIconColorMask'
204    t.head_model = 'ninjaHead'
205    t.torso_model = 'ninjaTorso'
206    t.pelvis_model = 'ninjaPelvis'
207    t.upper_arm_model = 'ninjaUpperArm'
208    t.forearm_model = 'ninjaForeArm'
209    t.hand_model = 'ninjaHand'
210    t.upper_leg_model = 'ninjaUpperLeg'
211    t.lower_leg_model = 'ninjaLowerLeg'
212    t.toes_model = 'ninjaToes'
213    ninja_attacks = ['ninjaAttack' + str(i + 1) + '' for i in range(7)]
214    ninja_hits = ['ninjaHit' + str(i + 1) + '' for i in range(8)]
215    ninja_jumps = ['ninjaAttack' + str(i + 1) + '' for i in range(7)]
216    t.jump_sounds = ninja_jumps
217    t.attack_sounds = ninja_attacks
218    t.impact_sounds = ninja_hits
219    t.death_sounds = ['ninjaDeath1']
220    t.pickup_sounds = ninja_attacks
221    t.fall_sounds = ['ninjaFall1']
222    t.style = 'ninja'
223
224    # Barbarian #####################################
225    t = Appearance('Kronk')
226    t.color_texture = 'kronk'
227    t.color_mask_texture = 'kronkColorMask'
228    t.default_color = (0.4, 0.5, 0.4)
229    t.default_highlight = (1, 0.5, 0.3)
230    t.icon_texture = 'kronkIcon'
231    t.icon_mask_texture = 'kronkIconColorMask'
232    t.head_model = 'kronkHead'
233    t.torso_model = 'kronkTorso'
234    t.pelvis_model = 'kronkPelvis'
235    t.upper_arm_model = 'kronkUpperArm'
236    t.forearm_model = 'kronkForeArm'
237    t.hand_model = 'kronkHand'
238    t.upper_leg_model = 'kronkUpperLeg'
239    t.lower_leg_model = 'kronkLowerLeg'
240    t.toes_model = 'kronkToes'
241    kronk_sounds = [
242        'kronk1',
243        'kronk2',
244        'kronk3',
245        'kronk4',
246        'kronk5',
247        'kronk6',
248        'kronk7',
249        'kronk8',
250        'kronk9',
251        'kronk10',
252    ]
253    t.jump_sounds = kronk_sounds
254    t.attack_sounds = kronk_sounds
255    t.impact_sounds = kronk_sounds
256    t.death_sounds = ['kronkDeath']
257    t.pickup_sounds = kronk_sounds
258    t.fall_sounds = ['kronkFall']
259    t.style = 'kronk'
260
261    # Chef ###########################################
262    t = Appearance('Mel')
263    t.color_texture = 'melColor'
264    t.color_mask_texture = 'melColorMask'
265    t.default_color = (1, 1, 1)
266    t.default_highlight = (0.1, 0.6, 0.1)
267    t.icon_texture = 'melIcon'
268    t.icon_mask_texture = 'melIconColorMask'
269    t.head_model = 'melHead'
270    t.torso_model = 'melTorso'
271    t.pelvis_model = 'kronkPelvis'
272    t.upper_arm_model = 'melUpperArm'
273    t.forearm_model = 'melForeArm'
274    t.hand_model = 'melHand'
275    t.upper_leg_model = 'melUpperLeg'
276    t.lower_leg_model = 'melLowerLeg'
277    t.toes_model = 'melToes'
278    mel_sounds = [
279        'mel01',
280        'mel02',
281        'mel03',
282        'mel04',
283        'mel05',
284        'mel06',
285        'mel07',
286        'mel08',
287        'mel09',
288        'mel10',
289    ]
290    t.attack_sounds = mel_sounds
291    t.jump_sounds = mel_sounds
292    t.impact_sounds = mel_sounds
293    t.death_sounds = ['melDeath01']
294    t.pickup_sounds = mel_sounds
295    t.fall_sounds = ['melFall01']
296    t.style = 'mel'
297
298    # Pirate #######################################
299    t = Appearance('Jack Morgan')
300    t.color_texture = 'jackColor'
301    t.color_mask_texture = 'jackColorMask'
302    t.default_color = (1, 0.2, 0.1)
303    t.default_highlight = (1, 1, 0)
304    t.icon_texture = 'jackIcon'
305    t.icon_mask_texture = 'jackIconColorMask'
306    t.head_model = 'jackHead'
307    t.torso_model = 'jackTorso'
308    t.pelvis_model = 'kronkPelvis'
309    t.upper_arm_model = 'jackUpperArm'
310    t.forearm_model = 'jackForeArm'
311    t.hand_model = 'jackHand'
312    t.upper_leg_model = 'jackUpperLeg'
313    t.lower_leg_model = 'jackLowerLeg'
314    t.toes_model = 'jackToes'
315    hit_sounds = [
316        'jackHit01',
317        'jackHit02',
318        'jackHit03',
319        'jackHit04',
320        'jackHit05',
321        'jackHit06',
322        'jackHit07',
323    ]
324    sounds = ['jack01', 'jack02', 'jack03', 'jack04', 'jack05', 'jack06']
325    t.attack_sounds = sounds
326    t.jump_sounds = sounds
327    t.impact_sounds = hit_sounds
328    t.death_sounds = ['jackDeath01']
329    t.pickup_sounds = sounds
330    t.fall_sounds = ['jackFall01']
331    t.style = 'pirate'
332
333    # Santa ######################################
334    t = Appearance('Santa Claus')
335    t.color_texture = 'santaColor'
336    t.color_mask_texture = 'santaColorMask'
337    t.default_color = (1, 0, 0)
338    t.default_highlight = (1, 1, 1)
339    t.icon_texture = 'santaIcon'
340    t.icon_mask_texture = 'santaIconColorMask'
341    t.head_model = 'santaHead'
342    t.torso_model = 'santaTorso'
343    t.pelvis_model = 'kronkPelvis'
344    t.upper_arm_model = 'santaUpperArm'
345    t.forearm_model = 'santaForeArm'
346    t.hand_model = 'santaHand'
347    t.upper_leg_model = 'santaUpperLeg'
348    t.lower_leg_model = 'santaLowerLeg'
349    t.toes_model = 'santaToes'
350    hit_sounds = ['santaHit01', 'santaHit02', 'santaHit03', 'santaHit04']
351    sounds = ['santa01', 'santa02', 'santa03', 'santa04', 'santa05']
352    t.attack_sounds = sounds
353    t.jump_sounds = sounds
354    t.impact_sounds = hit_sounds
355    t.death_sounds = ['santaDeath']
356    t.pickup_sounds = sounds
357    t.fall_sounds = ['santaFall']
358    t.style = 'santa'
359
360    # Snowman ###################################
361    t = Appearance('Frosty')
362    t.color_texture = 'frostyColor'
363    t.color_mask_texture = 'frostyColorMask'
364    t.default_color = (0.5, 0.5, 1)
365    t.default_highlight = (1, 0.5, 0)
366    t.icon_texture = 'frostyIcon'
367    t.icon_mask_texture = 'frostyIconColorMask'
368    t.head_model = 'frostyHead'
369    t.torso_model = 'frostyTorso'
370    t.pelvis_model = 'frostyPelvis'
371    t.upper_arm_model = 'frostyUpperArm'
372    t.forearm_model = 'frostyForeArm'
373    t.hand_model = 'frostyHand'
374    t.upper_leg_model = 'frostyUpperLeg'
375    t.lower_leg_model = 'frostyLowerLeg'
376    t.toes_model = 'frostyToes'
377    frosty_sounds = ['frosty01', 'frosty02', 'frosty03', 'frosty04', 'frosty05']
378    frosty_hit_sounds = ['frostyHit01', 'frostyHit02', 'frostyHit03']
379    t.attack_sounds = frosty_sounds
380    t.jump_sounds = frosty_sounds
381    t.impact_sounds = frosty_hit_sounds
382    t.death_sounds = ['frostyDeath']
383    t.pickup_sounds = frosty_sounds
384    t.fall_sounds = ['frostyFall']
385    t.style = 'frosty'
386
387    # Skeleton ################################
388    t = Appearance('Bones')
389    t.color_texture = 'bonesColor'
390    t.color_mask_texture = 'bonesColorMask'
391    t.default_color = (0.6, 0.9, 1)
392    t.default_highlight = (0.6, 0.9, 1)
393    t.icon_texture = 'bonesIcon'
394    t.icon_mask_texture = 'bonesIconColorMask'
395    t.head_model = 'bonesHead'
396    t.torso_model = 'bonesTorso'
397    t.pelvis_model = 'bonesPelvis'
398    t.upper_arm_model = 'bonesUpperArm'
399    t.forearm_model = 'bonesForeArm'
400    t.hand_model = 'bonesHand'
401    t.upper_leg_model = 'bonesUpperLeg'
402    t.lower_leg_model = 'bonesLowerLeg'
403    t.toes_model = 'bonesToes'
404    bones_sounds = ['bones1', 'bones2', 'bones3']
405    bones_hit_sounds = ['bones1', 'bones2', 'bones3']
406    t.attack_sounds = bones_sounds
407    t.jump_sounds = bones_sounds
408    t.impact_sounds = bones_hit_sounds
409    t.death_sounds = ['bonesDeath']
410    t.pickup_sounds = bones_sounds
411    t.fall_sounds = ['bonesFall']
412    t.style = 'bones'
413
414    # Bear ###################################
415    t = Appearance('Bernard')
416    t.color_texture = 'bearColor'
417    t.color_mask_texture = 'bearColorMask'
418    t.default_color = (0.7, 0.5, 0.0)
419    t.icon_texture = 'bearIcon'
420    t.icon_mask_texture = 'bearIconColorMask'
421    t.head_model = 'bearHead'
422    t.torso_model = 'bearTorso'
423    t.pelvis_model = 'bearPelvis'
424    t.upper_arm_model = 'bearUpperArm'
425    t.forearm_model = 'bearForeArm'
426    t.hand_model = 'bearHand'
427    t.upper_leg_model = 'bearUpperLeg'
428    t.lower_leg_model = 'bearLowerLeg'
429    t.toes_model = 'bearToes'
430    bear_sounds = ['bear1', 'bear2', 'bear3', 'bear4']
431    bear_hit_sounds = ['bearHit1', 'bearHit2']
432    t.attack_sounds = bear_sounds
433    t.jump_sounds = bear_sounds
434    t.impact_sounds = bear_hit_sounds
435    t.death_sounds = ['bearDeath']
436    t.pickup_sounds = bear_sounds
437    t.fall_sounds = ['bearFall']
438    t.style = 'bear'
439
440    # Penguin ###################################
441    t = Appearance('Pascal')
442    t.color_texture = 'penguinColor'
443    t.color_mask_texture = 'penguinColorMask'
444    t.default_color = (0.3, 0.5, 0.8)
445    t.default_highlight = (1, 0, 0)
446    t.icon_texture = 'penguinIcon'
447    t.icon_mask_texture = 'penguinIconColorMask'
448    t.head_model = 'penguinHead'
449    t.torso_model = 'penguinTorso'
450    t.pelvis_model = 'penguinPelvis'
451    t.upper_arm_model = 'penguinUpperArm'
452    t.forearm_model = 'penguinForeArm'
453    t.hand_model = 'penguinHand'
454    t.upper_leg_model = 'penguinUpperLeg'
455    t.lower_leg_model = 'penguinLowerLeg'
456    t.toes_model = 'penguinToes'
457    penguin_sounds = ['penguin1', 'penguin2', 'penguin3', 'penguin4']
458    penguin_hit_sounds = ['penguinHit1', 'penguinHit2']
459    t.attack_sounds = penguin_sounds
460    t.jump_sounds = penguin_sounds
461    t.impact_sounds = penguin_hit_sounds
462    t.death_sounds = ['penguinDeath']
463    t.pickup_sounds = penguin_sounds
464    t.fall_sounds = ['penguinFall']
465    t.style = 'penguin'
466
467    # Ali ###################################
468    t = Appearance('Taobao Mascot')
469    t.color_texture = 'aliColor'
470    t.color_mask_texture = 'aliColorMask'
471    t.default_color = (1, 0.5, 0)
472    t.default_highlight = (1, 1, 1)
473    t.icon_texture = 'aliIcon'
474    t.icon_mask_texture = 'aliIconColorMask'
475    t.head_model = 'aliHead'
476    t.torso_model = 'aliTorso'
477    t.pelvis_model = 'aliPelvis'
478    t.upper_arm_model = 'aliUpperArm'
479    t.forearm_model = 'aliForeArm'
480    t.hand_model = 'aliHand'
481    t.upper_leg_model = 'aliUpperLeg'
482    t.lower_leg_model = 'aliLowerLeg'
483    t.toes_model = 'aliToes'
484    ali_sounds = ['ali1', 'ali2', 'ali3', 'ali4']
485    ali_hit_sounds = ['aliHit1', 'aliHit2']
486    t.attack_sounds = ali_sounds
487    t.jump_sounds = ali_sounds
488    t.impact_sounds = ali_hit_sounds
489    t.death_sounds = ['aliDeath']
490    t.pickup_sounds = ali_sounds
491    t.fall_sounds = ['aliFall']
492    t.style = 'ali'
493
494    # cyborg ###################################
495    t = Appearance('B-9000')
496    t.color_texture = 'cyborgColor'
497    t.color_mask_texture = 'cyborgColorMask'
498    t.default_color = (0.5, 0.5, 0.5)
499    t.default_highlight = (1, 0, 0)
500    t.icon_texture = 'cyborgIcon'
501    t.icon_mask_texture = 'cyborgIconColorMask'
502    t.head_model = 'cyborgHead'
503    t.torso_model = 'cyborgTorso'
504    t.pelvis_model = 'cyborgPelvis'
505    t.upper_arm_model = 'cyborgUpperArm'
506    t.forearm_model = 'cyborgForeArm'
507    t.hand_model = 'cyborgHand'
508    t.upper_leg_model = 'cyborgUpperLeg'
509    t.lower_leg_model = 'cyborgLowerLeg'
510    t.toes_model = 'cyborgToes'
511    cyborg_sounds = ['cyborg1', 'cyborg2', 'cyborg3', 'cyborg4']
512    cyborg_hit_sounds = ['cyborgHit1', 'cyborgHit2']
513    t.attack_sounds = cyborg_sounds
514    t.jump_sounds = cyborg_sounds
515    t.impact_sounds = cyborg_hit_sounds
516    t.death_sounds = ['cyborgDeath']
517    t.pickup_sounds = cyborg_sounds
518    t.fall_sounds = ['cyborgFall']
519    t.style = 'cyborg'
520
521    # Agent ###################################
522    t = Appearance('Agent Johnson')
523    t.color_texture = 'agentColor'
524    t.color_mask_texture = 'agentColorMask'
525    t.default_color = (0.3, 0.3, 0.33)
526    t.default_highlight = (1, 0.5, 0.3)
527    t.icon_texture = 'agentIcon'
528    t.icon_mask_texture = 'agentIconColorMask'
529    t.head_model = 'agentHead'
530    t.torso_model = 'agentTorso'
531    t.pelvis_model = 'agentPelvis'
532    t.upper_arm_model = 'agentUpperArm'
533    t.forearm_model = 'agentForeArm'
534    t.hand_model = 'agentHand'
535    t.upper_leg_model = 'agentUpperLeg'
536    t.lower_leg_model = 'agentLowerLeg'
537    t.toes_model = 'agentToes'
538    agent_sounds = ['agent1', 'agent2', 'agent3', 'agent4']
539    agent_hit_sounds = ['agentHit1', 'agentHit2']
540    t.attack_sounds = agent_sounds
541    t.jump_sounds = agent_sounds
542    t.impact_sounds = agent_hit_sounds
543    t.death_sounds = ['agentDeath']
544    t.pickup_sounds = agent_sounds
545    t.fall_sounds = ['agentFall']
546    t.style = 'agent'
547
548    # Jumpsuit ###################################
549    t = Appearance('Lee')
550    t.color_texture = 'jumpsuitColor'
551    t.color_mask_texture = 'jumpsuitColorMask'
552    t.default_color = (0.3, 0.5, 0.8)
553    t.default_highlight = (1, 0, 0)
554    t.icon_texture = 'jumpsuitIcon'
555    t.icon_mask_texture = 'jumpsuitIconColorMask'
556    t.head_model = 'jumpsuitHead'
557    t.torso_model = 'jumpsuitTorso'
558    t.pelvis_model = 'jumpsuitPelvis'
559    t.upper_arm_model = 'jumpsuitUpperArm'
560    t.forearm_model = 'jumpsuitForeArm'
561    t.hand_model = 'jumpsuitHand'
562    t.upper_leg_model = 'jumpsuitUpperLeg'
563    t.lower_leg_model = 'jumpsuitLowerLeg'
564    t.toes_model = 'jumpsuitToes'
565    jumpsuit_sounds = ['jumpsuit1', 'jumpsuit2', 'jumpsuit3', 'jumpsuit4']
566    jumpsuit_hit_sounds = ['jumpsuitHit1', 'jumpsuitHit2']
567    t.attack_sounds = jumpsuit_sounds
568    t.jump_sounds = jumpsuit_sounds
569    t.impact_sounds = jumpsuit_hit_sounds
570    t.death_sounds = ['jumpsuitDeath']
571    t.pickup_sounds = jumpsuit_sounds
572    t.fall_sounds = ['jumpsuitFall']
573    t.style = 'spaz'
574
575    # ActionHero ###################################
576    t = Appearance('Todd McBurton')
577    t.color_texture = 'actionHeroColor'
578    t.color_mask_texture = 'actionHeroColorMask'
579    t.default_color = (0.3, 0.5, 0.8)
580    t.default_highlight = (1, 0, 0)
581    t.icon_texture = 'actionHeroIcon'
582    t.icon_mask_texture = 'actionHeroIconColorMask'
583    t.head_model = 'actionHeroHead'
584    t.torso_model = 'actionHeroTorso'
585    t.pelvis_model = 'actionHeroPelvis'
586    t.upper_arm_model = 'actionHeroUpperArm'
587    t.forearm_model = 'actionHeroForeArm'
588    t.hand_model = 'actionHeroHand'
589    t.upper_leg_model = 'actionHeroUpperLeg'
590    t.lower_leg_model = 'actionHeroLowerLeg'
591    t.toes_model = 'actionHeroToes'
592    action_hero_sounds = [
593        'actionHero1',
594        'actionHero2',
595        'actionHero3',
596        'actionHero4',
597    ]
598    action_hero_hit_sounds = ['actionHeroHit1', 'actionHeroHit2']
599    t.attack_sounds = action_hero_sounds
600    t.jump_sounds = action_hero_sounds
601    t.impact_sounds = action_hero_hit_sounds
602    t.death_sounds = ['actionHeroDeath']
603    t.pickup_sounds = action_hero_sounds
604    t.fall_sounds = ['actionHeroFall']
605    t.style = 'spaz'
606
607    # Assassin ###################################
608    t = Appearance('Zola')
609    t.color_texture = 'assassinColor'
610    t.color_mask_texture = 'assassinColorMask'
611    t.default_color = (0.3, 0.5, 0.8)
612    t.default_highlight = (1, 0, 0)
613    t.icon_texture = 'assassinIcon'
614    t.icon_mask_texture = 'assassinIconColorMask'
615    t.head_model = 'assassinHead'
616    t.torso_model = 'assassinTorso'
617    t.pelvis_model = 'assassinPelvis'
618    t.upper_arm_model = 'assassinUpperArm'
619    t.forearm_model = 'assassinForeArm'
620    t.hand_model = 'assassinHand'
621    t.upper_leg_model = 'assassinUpperLeg'
622    t.lower_leg_model = 'assassinLowerLeg'
623    t.toes_model = 'assassinToes'
624    assassin_sounds = ['assassin1', 'assassin2', 'assassin3', 'assassin4']
625    assassin_hit_sounds = ['assassinHit1', 'assassinHit2']
626    t.attack_sounds = assassin_sounds
627    t.jump_sounds = assassin_sounds
628    t.impact_sounds = assassin_hit_sounds
629    t.death_sounds = ['assassinDeath']
630    t.pickup_sounds = assassin_sounds
631    t.fall_sounds = ['assassinFall']
632    t.style = 'spaz'
633
634    # Wizard ###################################
635    t = Appearance('Grumbledorf')
636    t.color_texture = 'wizardColor'
637    t.color_mask_texture = 'wizardColorMask'
638    t.default_color = (0.2, 0.4, 1.0)
639    t.default_highlight = (0.06, 0.15, 0.4)
640    t.icon_texture = 'wizardIcon'
641    t.icon_mask_texture = 'wizardIconColorMask'
642    t.head_model = 'wizardHead'
643    t.torso_model = 'wizardTorso'
644    t.pelvis_model = 'wizardPelvis'
645    t.upper_arm_model = 'wizardUpperArm'
646    t.forearm_model = 'wizardForeArm'
647    t.hand_model = 'wizardHand'
648    t.upper_leg_model = 'wizardUpperLeg'
649    t.lower_leg_model = 'wizardLowerLeg'
650    t.toes_model = 'wizardToes'
651    wizard_sounds = ['wizard1', 'wizard2', 'wizard3', 'wizard4']
652    wizard_hit_sounds = ['wizardHit1', 'wizardHit2']
653    t.attack_sounds = wizard_sounds
654    t.jump_sounds = wizard_sounds
655    t.impact_sounds = wizard_hit_sounds
656    t.death_sounds = ['wizardDeath']
657    t.pickup_sounds = wizard_sounds
658    t.fall_sounds = ['wizardFall']
659    t.style = 'spaz'
660
661    # Cowboy ###################################
662    t = Appearance('Butch')
663    t.color_texture = 'cowboyColor'
664    t.color_mask_texture = 'cowboyColorMask'
665    t.default_color = (0.3, 0.5, 0.8)
666    t.default_highlight = (1, 0, 0)
667    t.icon_texture = 'cowboyIcon'
668    t.icon_mask_texture = 'cowboyIconColorMask'
669    t.head_model = 'cowboyHead'
670    t.torso_model = 'cowboyTorso'
671    t.pelvis_model = 'cowboyPelvis'
672    t.upper_arm_model = 'cowboyUpperArm'
673    t.forearm_model = 'cowboyForeArm'
674    t.hand_model = 'cowboyHand'
675    t.upper_leg_model = 'cowboyUpperLeg'
676    t.lower_leg_model = 'cowboyLowerLeg'
677    t.toes_model = 'cowboyToes'
678    cowboy_sounds = ['cowboy1', 'cowboy2', 'cowboy3', 'cowboy4']
679    cowboy_hit_sounds = ['cowboyHit1', 'cowboyHit2']
680    t.attack_sounds = cowboy_sounds
681    t.jump_sounds = cowboy_sounds
682    t.impact_sounds = cowboy_hit_sounds
683    t.death_sounds = ['cowboyDeath']
684    t.pickup_sounds = cowboy_sounds
685    t.fall_sounds = ['cowboyFall']
686    t.style = 'spaz'
687
688    # Witch ###################################
689    t = Appearance('Witch')
690    t.color_texture = 'witchColor'
691    t.color_mask_texture = 'witchColorMask'
692    t.default_color = (0.3, 0.5, 0.8)
693    t.default_highlight = (1, 0, 0)
694    t.icon_texture = 'witchIcon'
695    t.icon_mask_texture = 'witchIconColorMask'
696    t.head_model = 'witchHead'
697    t.torso_model = 'witchTorso'
698    t.pelvis_model = 'witchPelvis'
699    t.upper_arm_model = 'witchUpperArm'
700    t.forearm_model = 'witchForeArm'
701    t.hand_model = 'witchHand'
702    t.upper_leg_model = 'witchUpperLeg'
703    t.lower_leg_model = 'witchLowerLeg'
704    t.toes_model = 'witchToes'
705    witch_sounds = ['witch1', 'witch2', 'witch3', 'witch4']
706    witch_hit_sounds = ['witchHit1', 'witchHit2']
707    t.attack_sounds = witch_sounds
708    t.jump_sounds = witch_sounds
709    t.impact_sounds = witch_hit_sounds
710    t.death_sounds = ['witchDeath']
711    t.pickup_sounds = witch_sounds
712    t.fall_sounds = ['witchFall']
713    t.style = 'spaz'
714
715    # Warrior ###################################
716    t = Appearance('Warrior')
717    t.color_texture = 'warriorColor'
718    t.color_mask_texture = 'warriorColorMask'
719    t.default_color = (0.3, 0.5, 0.8)
720    t.default_highlight = (1, 0, 0)
721    t.icon_texture = 'warriorIcon'
722    t.icon_mask_texture = 'warriorIconColorMask'
723    t.head_model = 'warriorHead'
724    t.torso_model = 'warriorTorso'
725    t.pelvis_model = 'warriorPelvis'
726    t.upper_arm_model = 'warriorUpperArm'
727    t.forearm_model = 'warriorForeArm'
728    t.hand_model = 'warriorHand'
729    t.upper_leg_model = 'warriorUpperLeg'
730    t.lower_leg_model = 'warriorLowerLeg'
731    t.toes_model = 'warriorToes'
732    warrior_sounds = ['warrior1', 'warrior2', 'warrior3', 'warrior4']
733    warrior_hit_sounds = ['warriorHit1', 'warriorHit2']
734    t.attack_sounds = warrior_sounds
735    t.jump_sounds = warrior_sounds
736    t.impact_sounds = warrior_hit_sounds
737    t.death_sounds = ['warriorDeath']
738    t.pickup_sounds = warrior_sounds
739    t.fall_sounds = ['warriorFall']
740    t.style = 'spaz'
741
742    # Superhero ###################################
743    t = Appearance('Middle-Man')
744    t.color_texture = 'superheroColor'
745    t.color_mask_texture = 'superheroColorMask'
746    t.default_color = (0.3, 0.5, 0.8)
747    t.default_highlight = (1, 0, 0)
748    t.icon_texture = 'superheroIcon'
749    t.icon_mask_texture = 'superheroIconColorMask'
750    t.head_model = 'superheroHead'
751    t.torso_model = 'superheroTorso'
752    t.pelvis_model = 'superheroPelvis'
753    t.upper_arm_model = 'superheroUpperArm'
754    t.forearm_model = 'superheroForeArm'
755    t.hand_model = 'superheroHand'
756    t.upper_leg_model = 'superheroUpperLeg'
757    t.lower_leg_model = 'superheroLowerLeg'
758    t.toes_model = 'superheroToes'
759    superhero_sounds = ['superhero1', 'superhero2', 'superhero3', 'superhero4']
760    superhero_hit_sounds = ['superheroHit1', 'superheroHit2']
761    t.attack_sounds = superhero_sounds
762    t.jump_sounds = superhero_sounds
763    t.impact_sounds = superhero_hit_sounds
764    t.death_sounds = ['superheroDeath']
765    t.pickup_sounds = superhero_sounds
766    t.fall_sounds = ['superheroFall']
767    t.style = 'spaz'
768
769    # Alien ###################################
770    t = Appearance('Alien')
771    t.color_texture = 'alienColor'
772    t.color_mask_texture = 'alienColorMask'
773    t.default_color = (0.3, 0.5, 0.8)
774    t.default_highlight = (1, 0, 0)
775    t.icon_texture = 'alienIcon'
776    t.icon_mask_texture = 'alienIconColorMask'
777    t.head_model = 'alienHead'
778    t.torso_model = 'alienTorso'
779    t.pelvis_model = 'alienPelvis'
780    t.upper_arm_model = 'alienUpperArm'
781    t.forearm_model = 'alienForeArm'
782    t.hand_model = 'alienHand'
783    t.upper_leg_model = 'alienUpperLeg'
784    t.lower_leg_model = 'alienLowerLeg'
785    t.toes_model = 'alienToes'
786    alien_sounds = ['alien1', 'alien2', 'alien3', 'alien4']
787    alien_hit_sounds = ['alienHit1', 'alienHit2']
788    t.attack_sounds = alien_sounds
789    t.jump_sounds = alien_sounds
790    t.impact_sounds = alien_hit_sounds
791    t.death_sounds = ['alienDeath']
792    t.pickup_sounds = alien_sounds
793    t.fall_sounds = ['alienFall']
794    t.style = 'spaz'
795
796    # OldLady ###################################
797    t = Appearance('OldLady')
798    t.color_texture = 'oldLadyColor'
799    t.color_mask_texture = 'oldLadyColorMask'
800    t.default_color = (0.3, 0.5, 0.8)
801    t.default_highlight = (1, 0, 0)
802    t.icon_texture = 'oldLadyIcon'
803    t.icon_mask_texture = 'oldLadyIconColorMask'
804    t.head_model = 'oldLadyHead'
805    t.torso_model = 'oldLadyTorso'
806    t.pelvis_model = 'oldLadyPelvis'
807    t.upper_arm_model = 'oldLadyUpperArm'
808    t.forearm_model = 'oldLadyForeArm'
809    t.hand_model = 'oldLadyHand'
810    t.upper_leg_model = 'oldLadyUpperLeg'
811    t.lower_leg_model = 'oldLadyLowerLeg'
812    t.toes_model = 'oldLadyToes'
813    old_lady_sounds = ['oldLady1', 'oldLady2', 'oldLady3', 'oldLady4']
814    old_lady_hit_sounds = ['oldLadyHit1', 'oldLadyHit2']
815    t.attack_sounds = old_lady_sounds
816    t.jump_sounds = old_lady_sounds
817    t.impact_sounds = old_lady_hit_sounds
818    t.death_sounds = ['oldLadyDeath']
819    t.pickup_sounds = old_lady_sounds
820    t.fall_sounds = ['oldLadyFall']
821    t.style = 'spaz'
822
823    # Gladiator ###################################
824    t = Appearance('Gladiator')
825    t.color_texture = 'gladiatorColor'
826    t.color_mask_texture = 'gladiatorColorMask'
827    t.default_color = (0.3, 0.5, 0.8)
828    t.default_highlight = (1, 0, 0)
829    t.icon_texture = 'gladiatorIcon'
830    t.icon_mask_texture = 'gladiatorIconColorMask'
831    t.head_model = 'gladiatorHead'
832    t.torso_model = 'gladiatorTorso'
833    t.pelvis_model = 'gladiatorPelvis'
834    t.upper_arm_model = 'gladiatorUpperArm'
835    t.forearm_model = 'gladiatorForeArm'
836    t.hand_model = 'gladiatorHand'
837    t.upper_leg_model = 'gladiatorUpperLeg'
838    t.lower_leg_model = 'gladiatorLowerLeg'
839    t.toes_model = 'gladiatorToes'
840    gladiator_sounds = ['gladiator1', 'gladiator2', 'gladiator3', 'gladiator4']
841    gladiator_hit_sounds = ['gladiatorHit1', 'gladiatorHit2']
842    t.attack_sounds = gladiator_sounds
843    t.jump_sounds = gladiator_sounds
844    t.impact_sounds = gladiator_hit_sounds
845    t.death_sounds = ['gladiatorDeath']
846    t.pickup_sounds = gladiator_sounds
847    t.fall_sounds = ['gladiatorFall']
848    t.style = 'spaz'
849
850    # Wrestler ###################################
851    t = Appearance('Wrestler')
852    t.color_texture = 'wrestlerColor'
853    t.color_mask_texture = 'wrestlerColorMask'
854    t.default_color = (0.3, 0.5, 0.8)
855    t.default_highlight = (1, 0, 0)
856    t.icon_texture = 'wrestlerIcon'
857    t.icon_mask_texture = 'wrestlerIconColorMask'
858    t.head_model = 'wrestlerHead'
859    t.torso_model = 'wrestlerTorso'
860    t.pelvis_model = 'wrestlerPelvis'
861    t.upper_arm_model = 'wrestlerUpperArm'
862    t.forearm_model = 'wrestlerForeArm'
863    t.hand_model = 'wrestlerHand'
864    t.upper_leg_model = 'wrestlerUpperLeg'
865    t.lower_leg_model = 'wrestlerLowerLeg'
866    t.toes_model = 'wrestlerToes'
867    wrestler_sounds = ['wrestler1', 'wrestler2', 'wrestler3', 'wrestler4']
868    wrestler_hit_sounds = ['wrestlerHit1', 'wrestlerHit2']
869    t.attack_sounds = wrestler_sounds
870    t.jump_sounds = wrestler_sounds
871    t.impact_sounds = wrestler_hit_sounds
872    t.death_sounds = ['wrestlerDeath']
873    t.pickup_sounds = wrestler_sounds
874    t.fall_sounds = ['wrestlerFall']
875    t.style = 'spaz'
876
877    # OperaSinger ###################################
878    t = Appearance('Gretel')
879    t.color_texture = 'operaSingerColor'
880    t.color_mask_texture = 'operaSingerColorMask'
881    t.default_color = (0.3, 0.5, 0.8)
882    t.default_highlight = (1, 0, 0)
883    t.icon_texture = 'operaSingerIcon'
884    t.icon_mask_texture = 'operaSingerIconColorMask'
885    t.head_model = 'operaSingerHead'
886    t.torso_model = 'operaSingerTorso'
887    t.pelvis_model = 'operaSingerPelvis'
888    t.upper_arm_model = 'operaSingerUpperArm'
889    t.forearm_model = 'operaSingerForeArm'
890    t.hand_model = 'operaSingerHand'
891    t.upper_leg_model = 'operaSingerUpperLeg'
892    t.lower_leg_model = 'operaSingerLowerLeg'
893    t.toes_model = 'operaSingerToes'
894    opera_singer_sounds = [
895        'operaSinger1',
896        'operaSinger2',
897        'operaSinger3',
898        'operaSinger4',
899    ]
900    opera_singer_hit_sounds = ['operaSingerHit1', 'operaSingerHit2']
901    t.attack_sounds = opera_singer_sounds
902    t.jump_sounds = opera_singer_sounds
903    t.impact_sounds = opera_singer_hit_sounds
904    t.death_sounds = ['operaSingerDeath']
905    t.pickup_sounds = opera_singer_sounds
906    t.fall_sounds = ['operaSingerFall']
907    t.style = 'spaz'
908
909    # Pixie ###################################
910    t = Appearance('Pixel')
911    t.color_texture = 'pixieColor'
912    t.color_mask_texture = 'pixieColorMask'
913    t.default_color = (0, 1, 0.7)
914    t.default_highlight = (0.65, 0.35, 0.75)
915    t.icon_texture = 'pixieIcon'
916    t.icon_mask_texture = 'pixieIconColorMask'
917    t.head_model = 'pixieHead'
918    t.torso_model = 'pixieTorso'
919    t.pelvis_model = 'pixiePelvis'
920    t.upper_arm_model = 'pixieUpperArm'
921    t.forearm_model = 'pixieForeArm'
922    t.hand_model = 'pixieHand'
923    t.upper_leg_model = 'pixieUpperLeg'
924    t.lower_leg_model = 'pixieLowerLeg'
925    t.toes_model = 'pixieToes'
926    pixie_sounds = ['pixie1', 'pixie2', 'pixie3', 'pixie4']
927    pixie_hit_sounds = ['pixieHit1', 'pixieHit2']
928    t.attack_sounds = pixie_sounds
929    t.jump_sounds = pixie_sounds
930    t.impact_sounds = pixie_hit_sounds
931    t.death_sounds = ['pixieDeath']
932    t.pickup_sounds = pixie_sounds
933    t.fall_sounds = ['pixieFall']
934    t.style = 'pixie'
935
936    # Robot ###################################
937    t = Appearance('Robot')
938    t.color_texture = 'robotColor'
939    t.color_mask_texture = 'robotColorMask'
940    t.default_color = (0.3, 0.5, 0.8)
941    t.default_highlight = (1, 0, 0)
942    t.icon_texture = 'robotIcon'
943    t.icon_mask_texture = 'robotIconColorMask'
944    t.head_model = 'robotHead'
945    t.torso_model = 'robotTorso'
946    t.pelvis_model = 'robotPelvis'
947    t.upper_arm_model = 'robotUpperArm'
948    t.forearm_model = 'robotForeArm'
949    t.hand_model = 'robotHand'
950    t.upper_leg_model = 'robotUpperLeg'
951    t.lower_leg_model = 'robotLowerLeg'
952    t.toes_model = 'robotToes'
953    robot_sounds = ['robot1', 'robot2', 'robot3', 'robot4']
954    robot_hit_sounds = ['robotHit1', 'robotHit2']
955    t.attack_sounds = robot_sounds
956    t.jump_sounds = robot_sounds
957    t.impact_sounds = robot_hit_sounds
958    t.death_sounds = ['robotDeath']
959    t.pickup_sounds = robot_sounds
960    t.fall_sounds = ['robotFall']
961    t.style = 'spaz'
962
963    # Bunny ###################################
964    t = Appearance('Easter Bunny')
965    t.color_texture = 'bunnyColor'
966    t.color_mask_texture = 'bunnyColorMask'
967    t.default_color = (1, 1, 1)
968    t.default_highlight = (1, 0.5, 0.5)
969    t.icon_texture = 'bunnyIcon'
970    t.icon_mask_texture = 'bunnyIconColorMask'
971    t.head_model = 'bunnyHead'
972    t.torso_model = 'bunnyTorso'
973    t.pelvis_model = 'bunnyPelvis'
974    t.upper_arm_model = 'bunnyUpperArm'
975    t.forearm_model = 'bunnyForeArm'
976    t.hand_model = 'bunnyHand'
977    t.upper_leg_model = 'bunnyUpperLeg'
978    t.lower_leg_model = 'bunnyLowerLeg'
979    t.toes_model = 'bunnyToes'
980    bunny_sounds = ['bunny1', 'bunny2', 'bunny3', 'bunny4']
981    bunny_hit_sounds = ['bunnyHit1', 'bunnyHit2']
982    t.attack_sounds = bunny_sounds
983    t.jump_sounds = ['bunnyJump']
984    t.impact_sounds = bunny_hit_sounds
985    t.death_sounds = ['bunnyDeath']
986    t.pickup_sounds = bunny_sounds
987    t.fall_sounds = ['bunnyFall']
988    t.style = 'bunny'
def get_appearances(include_locked: bool = False) -> list[str]:
16def get_appearances(include_locked: bool = False) -> list[str]:
17    """Get the list of available spaz appearances."""
18    # pylint: disable=too-many-statements
19    # pylint: disable=too-many-branches
20    get_purchased = ba.internal.get_purchased
21    disallowed = []
22    if not include_locked:
23        # hmm yeah this'll be tough to hack...
24        if not get_purchased('characters.santa'):
25            disallowed.append('Santa Claus')
26        if not get_purchased('characters.frosty'):
27            disallowed.append('Frosty')
28        if not get_purchased('characters.bones'):
29            disallowed.append('Bones')
30        if not get_purchased('characters.bernard'):
31            disallowed.append('Bernard')
32        if not get_purchased('characters.pixie'):
33            disallowed.append('Pixel')
34        if not get_purchased('characters.pascal'):
35            disallowed.append('Pascal')
36        if not get_purchased('characters.actionhero'):
37            disallowed.append('Todd McBurton')
38        if not get_purchased('characters.taobaomascot'):
39            disallowed.append('Taobao Mascot')
40        if not get_purchased('characters.agent'):
41            disallowed.append('Agent Johnson')
42        if not get_purchased('characters.jumpsuit'):
43            disallowed.append('Lee')
44        if not get_purchased('characters.assassin'):
45            disallowed.append('Zola')
46        if not get_purchased('characters.wizard'):
47            disallowed.append('Grumbledorf')
48        if not get_purchased('characters.cowboy'):
49            disallowed.append('Butch')
50        if not get_purchased('characters.witch'):
51            disallowed.append('Witch')
52        if not get_purchased('characters.warrior'):
53            disallowed.append('Warrior')
54        if not get_purchased('characters.superhero'):
55            disallowed.append('Middle-Man')
56        if not get_purchased('characters.alien'):
57            disallowed.append('Alien')
58        if not get_purchased('characters.oldlady'):
59            disallowed.append('OldLady')
60        if not get_purchased('characters.gladiator'):
61            disallowed.append('Gladiator')
62        if not get_purchased('characters.wrestler'):
63            disallowed.append('Wrestler')
64        if not get_purchased('characters.operasinger'):
65            disallowed.append('Gretel')
66        if not get_purchased('characters.robot'):
67            disallowed.append('Robot')
68        if not get_purchased('characters.cyborg'):
69            disallowed.append('B-9000')
70        if not get_purchased('characters.bunny'):
71            disallowed.append('Easter Bunny')
72        if not get_purchased('characters.kronk'):
73            disallowed.append('Kronk')
74        if not get_purchased('characters.zoe'):
75            disallowed.append('Zoe')
76        if not get_purchased('characters.jackmorgan'):
77            disallowed.append('Jack Morgan')
78        if not get_purchased('characters.mel'):
79            disallowed.append('Mel')
80        if not get_purchased('characters.snakeshadow'):
81            disallowed.append('Snake Shadow')
82    return [
83        s for s in list(ba.app.spaz_appearances.keys()) if s not in disallowed
84    ]

Get the list of available spaz appearances.

class Appearance:
 87class Appearance:
 88    """Create and fill out one of these suckers to define a spaz appearance"""
 89
 90    def __init__(self, name: str):
 91        self.name = name
 92        if self.name in ba.app.spaz_appearances:
 93            raise Exception(
 94                'spaz appearance name "' + self.name + '" already exists.'
 95            )
 96        ba.app.spaz_appearances[self.name] = self
 97        self.color_texture = ''
 98        self.color_mask_texture = ''
 99        self.icon_texture = ''
100        self.icon_mask_texture = ''
101        self.head_model = ''
102        self.torso_model = ''
103        self.pelvis_model = ''
104        self.upper_arm_model = ''
105        self.forearm_model = ''
106        self.hand_model = ''
107        self.upper_leg_model = ''
108        self.lower_leg_model = ''
109        self.toes_model = ''
110        self.jump_sounds: list[str] = []
111        self.attack_sounds: list[str] = []
112        self.impact_sounds: list[str] = []
113        self.death_sounds: list[str] = []
114        self.pickup_sounds: list[str] = []
115        self.fall_sounds: list[str] = []
116        self.style = 'spaz'
117        self.default_color: tuple[float, float, float] | None = None
118        self.default_highlight: tuple[float, float, float] | None = None

Create and fill out one of these suckers to define a spaz appearance

Appearance(name: str)
 90    def __init__(self, name: str):
 91        self.name = name
 92        if self.name in ba.app.spaz_appearances:
 93            raise Exception(
 94                'spaz appearance name "' + self.name + '" already exists.'
 95            )
 96        ba.app.spaz_appearances[self.name] = self
 97        self.color_texture = ''
 98        self.color_mask_texture = ''
 99        self.icon_texture = ''
100        self.icon_mask_texture = ''
101        self.head_model = ''
102        self.torso_model = ''
103        self.pelvis_model = ''
104        self.upper_arm_model = ''
105        self.forearm_model = ''
106        self.hand_model = ''
107        self.upper_leg_model = ''
108        self.lower_leg_model = ''
109        self.toes_model = ''
110        self.jump_sounds: list[str] = []
111        self.attack_sounds: list[str] = []
112        self.impact_sounds: list[str] = []
113        self.death_sounds: list[str] = []
114        self.pickup_sounds: list[str] = []
115        self.fall_sounds: list[str] = []
116        self.style = 'spaz'
117        self.default_color: tuple[float, float, float] | None = None
118        self.default_highlight: tuple[float, float, float] | None = None
def register_appearances() -> None:
121def register_appearances() -> None:
122    """Register our builtin spaz appearances."""
123
124    # this is quite ugly but will be going away so not worth cleaning up
125    # pylint: disable=invalid-name
126    # pylint: disable=too-many-locals
127    # pylint: disable=too-many-statements
128
129    # Spaz #######################################
130    t = Appearance('Spaz')
131    t.color_texture = 'neoSpazColor'
132    t.color_mask_texture = 'neoSpazColorMask'
133    t.icon_texture = 'neoSpazIcon'
134    t.icon_mask_texture = 'neoSpazIconColorMask'
135    t.head_model = 'neoSpazHead'
136    t.torso_model = 'neoSpazTorso'
137    t.pelvis_model = 'neoSpazPelvis'
138    t.upper_arm_model = 'neoSpazUpperArm'
139    t.forearm_model = 'neoSpazForeArm'
140    t.hand_model = 'neoSpazHand'
141    t.upper_leg_model = 'neoSpazUpperLeg'
142    t.lower_leg_model = 'neoSpazLowerLeg'
143    t.toes_model = 'neoSpazToes'
144    t.jump_sounds = ['spazJump01', 'spazJump02', 'spazJump03', 'spazJump04']
145    t.attack_sounds = [
146        'spazAttack01',
147        'spazAttack02',
148        'spazAttack03',
149        'spazAttack04',
150    ]
151    t.impact_sounds = [
152        'spazImpact01',
153        'spazImpact02',
154        'spazImpact03',
155        'spazImpact04',
156    ]
157    t.death_sounds = ['spazDeath01']
158    t.pickup_sounds = ['spazPickup01']
159    t.fall_sounds = ['spazFall01']
160    t.style = 'spaz'
161
162    # Zoe #####################################
163    t = Appearance('Zoe')
164    t.color_texture = 'zoeColor'
165    t.color_mask_texture = 'zoeColorMask'
166    t.default_color = (0.6, 0.6, 0.6)
167    t.default_highlight = (0, 1, 0)
168    t.icon_texture = 'zoeIcon'
169    t.icon_mask_texture = 'zoeIconColorMask'
170    t.head_model = 'zoeHead'
171    t.torso_model = 'zoeTorso'
172    t.pelvis_model = 'zoePelvis'
173    t.upper_arm_model = 'zoeUpperArm'
174    t.forearm_model = 'zoeForeArm'
175    t.hand_model = 'zoeHand'
176    t.upper_leg_model = 'zoeUpperLeg'
177    t.lower_leg_model = 'zoeLowerLeg'
178    t.toes_model = 'zoeToes'
179    t.jump_sounds = ['zoeJump01', 'zoeJump02', 'zoeJump03']
180    t.attack_sounds = [
181        'zoeAttack01',
182        'zoeAttack02',
183        'zoeAttack03',
184        'zoeAttack04',
185    ]
186    t.impact_sounds = [
187        'zoeImpact01',
188        'zoeImpact02',
189        'zoeImpact03',
190        'zoeImpact04',
191    ]
192    t.death_sounds = ['zoeDeath01']
193    t.pickup_sounds = ['zoePickup01']
194    t.fall_sounds = ['zoeFall01']
195    t.style = 'female'
196
197    # Ninja ##########################################
198    t = Appearance('Snake Shadow')
199    t.color_texture = 'ninjaColor'
200    t.color_mask_texture = 'ninjaColorMask'
201    t.default_color = (1, 1, 1)
202    t.default_highlight = (0.55, 0.8, 0.55)
203    t.icon_texture = 'ninjaIcon'
204    t.icon_mask_texture = 'ninjaIconColorMask'
205    t.head_model = 'ninjaHead'
206    t.torso_model = 'ninjaTorso'
207    t.pelvis_model = 'ninjaPelvis'
208    t.upper_arm_model = 'ninjaUpperArm'
209    t.forearm_model = 'ninjaForeArm'
210    t.hand_model = 'ninjaHand'
211    t.upper_leg_model = 'ninjaUpperLeg'
212    t.lower_leg_model = 'ninjaLowerLeg'
213    t.toes_model = 'ninjaToes'
214    ninja_attacks = ['ninjaAttack' + str(i + 1) + '' for i in range(7)]
215    ninja_hits = ['ninjaHit' + str(i + 1) + '' for i in range(8)]
216    ninja_jumps = ['ninjaAttack' + str(i + 1) + '' for i in range(7)]
217    t.jump_sounds = ninja_jumps
218    t.attack_sounds = ninja_attacks
219    t.impact_sounds = ninja_hits
220    t.death_sounds = ['ninjaDeath1']
221    t.pickup_sounds = ninja_attacks
222    t.fall_sounds = ['ninjaFall1']
223    t.style = 'ninja'
224
225    # Barbarian #####################################
226    t = Appearance('Kronk')
227    t.color_texture = 'kronk'
228    t.color_mask_texture = 'kronkColorMask'
229    t.default_color = (0.4, 0.5, 0.4)
230    t.default_highlight = (1, 0.5, 0.3)
231    t.icon_texture = 'kronkIcon'
232    t.icon_mask_texture = 'kronkIconColorMask'
233    t.head_model = 'kronkHead'
234    t.torso_model = 'kronkTorso'
235    t.pelvis_model = 'kronkPelvis'
236    t.upper_arm_model = 'kronkUpperArm'
237    t.forearm_model = 'kronkForeArm'
238    t.hand_model = 'kronkHand'
239    t.upper_leg_model = 'kronkUpperLeg'
240    t.lower_leg_model = 'kronkLowerLeg'
241    t.toes_model = 'kronkToes'
242    kronk_sounds = [
243        'kronk1',
244        'kronk2',
245        'kronk3',
246        'kronk4',
247        'kronk5',
248        'kronk6',
249        'kronk7',
250        'kronk8',
251        'kronk9',
252        'kronk10',
253    ]
254    t.jump_sounds = kronk_sounds
255    t.attack_sounds = kronk_sounds
256    t.impact_sounds = kronk_sounds
257    t.death_sounds = ['kronkDeath']
258    t.pickup_sounds = kronk_sounds
259    t.fall_sounds = ['kronkFall']
260    t.style = 'kronk'
261
262    # Chef ###########################################
263    t = Appearance('Mel')
264    t.color_texture = 'melColor'
265    t.color_mask_texture = 'melColorMask'
266    t.default_color = (1, 1, 1)
267    t.default_highlight = (0.1, 0.6, 0.1)
268    t.icon_texture = 'melIcon'
269    t.icon_mask_texture = 'melIconColorMask'
270    t.head_model = 'melHead'
271    t.torso_model = 'melTorso'
272    t.pelvis_model = 'kronkPelvis'
273    t.upper_arm_model = 'melUpperArm'
274    t.forearm_model = 'melForeArm'
275    t.hand_model = 'melHand'
276    t.upper_leg_model = 'melUpperLeg'
277    t.lower_leg_model = 'melLowerLeg'
278    t.toes_model = 'melToes'
279    mel_sounds = [
280        'mel01',
281        'mel02',
282        'mel03',
283        'mel04',
284        'mel05',
285        'mel06',
286        'mel07',
287        'mel08',
288        'mel09',
289        'mel10',
290    ]
291    t.attack_sounds = mel_sounds
292    t.jump_sounds = mel_sounds
293    t.impact_sounds = mel_sounds
294    t.death_sounds = ['melDeath01']
295    t.pickup_sounds = mel_sounds
296    t.fall_sounds = ['melFall01']
297    t.style = 'mel'
298
299    # Pirate #######################################
300    t = Appearance('Jack Morgan')
301    t.color_texture = 'jackColor'
302    t.color_mask_texture = 'jackColorMask'
303    t.default_color = (1, 0.2, 0.1)
304    t.default_highlight = (1, 1, 0)
305    t.icon_texture = 'jackIcon'
306    t.icon_mask_texture = 'jackIconColorMask'
307    t.head_model = 'jackHead'
308    t.torso_model = 'jackTorso'
309    t.pelvis_model = 'kronkPelvis'
310    t.upper_arm_model = 'jackUpperArm'
311    t.forearm_model = 'jackForeArm'
312    t.hand_model = 'jackHand'
313    t.upper_leg_model = 'jackUpperLeg'
314    t.lower_leg_model = 'jackLowerLeg'
315    t.toes_model = 'jackToes'
316    hit_sounds = [
317        'jackHit01',
318        'jackHit02',
319        'jackHit03',
320        'jackHit04',
321        'jackHit05',
322        'jackHit06',
323        'jackHit07',
324    ]
325    sounds = ['jack01', 'jack02', 'jack03', 'jack04', 'jack05', 'jack06']
326    t.attack_sounds = sounds
327    t.jump_sounds = sounds
328    t.impact_sounds = hit_sounds
329    t.death_sounds = ['jackDeath01']
330    t.pickup_sounds = sounds
331    t.fall_sounds = ['jackFall01']
332    t.style = 'pirate'
333
334    # Santa ######################################
335    t = Appearance('Santa Claus')
336    t.color_texture = 'santaColor'
337    t.color_mask_texture = 'santaColorMask'
338    t.default_color = (1, 0, 0)
339    t.default_highlight = (1, 1, 1)
340    t.icon_texture = 'santaIcon'
341    t.icon_mask_texture = 'santaIconColorMask'
342    t.head_model = 'santaHead'
343    t.torso_model = 'santaTorso'
344    t.pelvis_model = 'kronkPelvis'
345    t.upper_arm_model = 'santaUpperArm'
346    t.forearm_model = 'santaForeArm'
347    t.hand_model = 'santaHand'
348    t.upper_leg_model = 'santaUpperLeg'
349    t.lower_leg_model = 'santaLowerLeg'
350    t.toes_model = 'santaToes'
351    hit_sounds = ['santaHit01', 'santaHit02', 'santaHit03', 'santaHit04']
352    sounds = ['santa01', 'santa02', 'santa03', 'santa04', 'santa05']
353    t.attack_sounds = sounds
354    t.jump_sounds = sounds
355    t.impact_sounds = hit_sounds
356    t.death_sounds = ['santaDeath']
357    t.pickup_sounds = sounds
358    t.fall_sounds = ['santaFall']
359    t.style = 'santa'
360
361    # Snowman ###################################
362    t = Appearance('Frosty')
363    t.color_texture = 'frostyColor'
364    t.color_mask_texture = 'frostyColorMask'
365    t.default_color = (0.5, 0.5, 1)
366    t.default_highlight = (1, 0.5, 0)
367    t.icon_texture = 'frostyIcon'
368    t.icon_mask_texture = 'frostyIconColorMask'
369    t.head_model = 'frostyHead'
370    t.torso_model = 'frostyTorso'
371    t.pelvis_model = 'frostyPelvis'
372    t.upper_arm_model = 'frostyUpperArm'
373    t.forearm_model = 'frostyForeArm'
374    t.hand_model = 'frostyHand'
375    t.upper_leg_model = 'frostyUpperLeg'
376    t.lower_leg_model = 'frostyLowerLeg'
377    t.toes_model = 'frostyToes'
378    frosty_sounds = ['frosty01', 'frosty02', 'frosty03', 'frosty04', 'frosty05']
379    frosty_hit_sounds = ['frostyHit01', 'frostyHit02', 'frostyHit03']
380    t.attack_sounds = frosty_sounds
381    t.jump_sounds = frosty_sounds
382    t.impact_sounds = frosty_hit_sounds
383    t.death_sounds = ['frostyDeath']
384    t.pickup_sounds = frosty_sounds
385    t.fall_sounds = ['frostyFall']
386    t.style = 'frosty'
387
388    # Skeleton ################################
389    t = Appearance('Bones')
390    t.color_texture = 'bonesColor'
391    t.color_mask_texture = 'bonesColorMask'
392    t.default_color = (0.6, 0.9, 1)
393    t.default_highlight = (0.6, 0.9, 1)
394    t.icon_texture = 'bonesIcon'
395    t.icon_mask_texture = 'bonesIconColorMask'
396    t.head_model = 'bonesHead'
397    t.torso_model = 'bonesTorso'
398    t.pelvis_model = 'bonesPelvis'
399    t.upper_arm_model = 'bonesUpperArm'
400    t.forearm_model = 'bonesForeArm'
401    t.hand_model = 'bonesHand'
402    t.upper_leg_model = 'bonesUpperLeg'
403    t.lower_leg_model = 'bonesLowerLeg'
404    t.toes_model = 'bonesToes'
405    bones_sounds = ['bones1', 'bones2', 'bones3']
406    bones_hit_sounds = ['bones1', 'bones2', 'bones3']
407    t.attack_sounds = bones_sounds
408    t.jump_sounds = bones_sounds
409    t.impact_sounds = bones_hit_sounds
410    t.death_sounds = ['bonesDeath']
411    t.pickup_sounds = bones_sounds
412    t.fall_sounds = ['bonesFall']
413    t.style = 'bones'
414
415    # Bear ###################################
416    t = Appearance('Bernard')
417    t.color_texture = 'bearColor'
418    t.color_mask_texture = 'bearColorMask'
419    t.default_color = (0.7, 0.5, 0.0)
420    t.icon_texture = 'bearIcon'
421    t.icon_mask_texture = 'bearIconColorMask'
422    t.head_model = 'bearHead'
423    t.torso_model = 'bearTorso'
424    t.pelvis_model = 'bearPelvis'
425    t.upper_arm_model = 'bearUpperArm'
426    t.forearm_model = 'bearForeArm'
427    t.hand_model = 'bearHand'
428    t.upper_leg_model = 'bearUpperLeg'
429    t.lower_leg_model = 'bearLowerLeg'
430    t.toes_model = 'bearToes'
431    bear_sounds = ['bear1', 'bear2', 'bear3', 'bear4']
432    bear_hit_sounds = ['bearHit1', 'bearHit2']
433    t.attack_sounds = bear_sounds
434    t.jump_sounds = bear_sounds
435    t.impact_sounds = bear_hit_sounds
436    t.death_sounds = ['bearDeath']
437    t.pickup_sounds = bear_sounds
438    t.fall_sounds = ['bearFall']
439    t.style = 'bear'
440
441    # Penguin ###################################
442    t = Appearance('Pascal')
443    t.color_texture = 'penguinColor'
444    t.color_mask_texture = 'penguinColorMask'
445    t.default_color = (0.3, 0.5, 0.8)
446    t.default_highlight = (1, 0, 0)
447    t.icon_texture = 'penguinIcon'
448    t.icon_mask_texture = 'penguinIconColorMask'
449    t.head_model = 'penguinHead'
450    t.torso_model = 'penguinTorso'
451    t.pelvis_model = 'penguinPelvis'
452    t.upper_arm_model = 'penguinUpperArm'
453    t.forearm_model = 'penguinForeArm'
454    t.hand_model = 'penguinHand'
455    t.upper_leg_model = 'penguinUpperLeg'
456    t.lower_leg_model = 'penguinLowerLeg'
457    t.toes_model = 'penguinToes'
458    penguin_sounds = ['penguin1', 'penguin2', 'penguin3', 'penguin4']
459    penguin_hit_sounds = ['penguinHit1', 'penguinHit2']
460    t.attack_sounds = penguin_sounds
461    t.jump_sounds = penguin_sounds
462    t.impact_sounds = penguin_hit_sounds
463    t.death_sounds = ['penguinDeath']
464    t.pickup_sounds = penguin_sounds
465    t.fall_sounds = ['penguinFall']
466    t.style = 'penguin'
467
468    # Ali ###################################
469    t = Appearance('Taobao Mascot')
470    t.color_texture = 'aliColor'
471    t.color_mask_texture = 'aliColorMask'
472    t.default_color = (1, 0.5, 0)
473    t.default_highlight = (1, 1, 1)
474    t.icon_texture = 'aliIcon'
475    t.icon_mask_texture = 'aliIconColorMask'
476    t.head_model = 'aliHead'
477    t.torso_model = 'aliTorso'
478    t.pelvis_model = 'aliPelvis'
479    t.upper_arm_model = 'aliUpperArm'
480    t.forearm_model = 'aliForeArm'
481    t.hand_model = 'aliHand'
482    t.upper_leg_model = 'aliUpperLeg'
483    t.lower_leg_model = 'aliLowerLeg'
484    t.toes_model = 'aliToes'
485    ali_sounds = ['ali1', 'ali2', 'ali3', 'ali4']
486    ali_hit_sounds = ['aliHit1', 'aliHit2']
487    t.attack_sounds = ali_sounds
488    t.jump_sounds = ali_sounds
489    t.impact_sounds = ali_hit_sounds
490    t.death_sounds = ['aliDeath']
491    t.pickup_sounds = ali_sounds
492    t.fall_sounds = ['aliFall']
493    t.style = 'ali'
494
495    # cyborg ###################################
496    t = Appearance('B-9000')
497    t.color_texture = 'cyborgColor'
498    t.color_mask_texture = 'cyborgColorMask'
499    t.default_color = (0.5, 0.5, 0.5)
500    t.default_highlight = (1, 0, 0)
501    t.icon_texture = 'cyborgIcon'
502    t.icon_mask_texture = 'cyborgIconColorMask'
503    t.head_model = 'cyborgHead'
504    t.torso_model = 'cyborgTorso'
505    t.pelvis_model = 'cyborgPelvis'
506    t.upper_arm_model = 'cyborgUpperArm'
507    t.forearm_model = 'cyborgForeArm'
508    t.hand_model = 'cyborgHand'
509    t.upper_leg_model = 'cyborgUpperLeg'
510    t.lower_leg_model = 'cyborgLowerLeg'
511    t.toes_model = 'cyborgToes'
512    cyborg_sounds = ['cyborg1', 'cyborg2', 'cyborg3', 'cyborg4']
513    cyborg_hit_sounds = ['cyborgHit1', 'cyborgHit2']
514    t.attack_sounds = cyborg_sounds
515    t.jump_sounds = cyborg_sounds
516    t.impact_sounds = cyborg_hit_sounds
517    t.death_sounds = ['cyborgDeath']
518    t.pickup_sounds = cyborg_sounds
519    t.fall_sounds = ['cyborgFall']
520    t.style = 'cyborg'
521
522    # Agent ###################################
523    t = Appearance('Agent Johnson')
524    t.color_texture = 'agentColor'
525    t.color_mask_texture = 'agentColorMask'
526    t.default_color = (0.3, 0.3, 0.33)
527    t.default_highlight = (1, 0.5, 0.3)
528    t.icon_texture = 'agentIcon'
529    t.icon_mask_texture = 'agentIconColorMask'
530    t.head_model = 'agentHead'
531    t.torso_model = 'agentTorso'
532    t.pelvis_model = 'agentPelvis'
533    t.upper_arm_model = 'agentUpperArm'
534    t.forearm_model = 'agentForeArm'
535    t.hand_model = 'agentHand'
536    t.upper_leg_model = 'agentUpperLeg'
537    t.lower_leg_model = 'agentLowerLeg'
538    t.toes_model = 'agentToes'
539    agent_sounds = ['agent1', 'agent2', 'agent3', 'agent4']
540    agent_hit_sounds = ['agentHit1', 'agentHit2']
541    t.attack_sounds = agent_sounds
542    t.jump_sounds = agent_sounds
543    t.impact_sounds = agent_hit_sounds
544    t.death_sounds = ['agentDeath']
545    t.pickup_sounds = agent_sounds
546    t.fall_sounds = ['agentFall']
547    t.style = 'agent'
548
549    # Jumpsuit ###################################
550    t = Appearance('Lee')
551    t.color_texture = 'jumpsuitColor'
552    t.color_mask_texture = 'jumpsuitColorMask'
553    t.default_color = (0.3, 0.5, 0.8)
554    t.default_highlight = (1, 0, 0)
555    t.icon_texture = 'jumpsuitIcon'
556    t.icon_mask_texture = 'jumpsuitIconColorMask'
557    t.head_model = 'jumpsuitHead'
558    t.torso_model = 'jumpsuitTorso'
559    t.pelvis_model = 'jumpsuitPelvis'
560    t.upper_arm_model = 'jumpsuitUpperArm'
561    t.forearm_model = 'jumpsuitForeArm'
562    t.hand_model = 'jumpsuitHand'
563    t.upper_leg_model = 'jumpsuitUpperLeg'
564    t.lower_leg_model = 'jumpsuitLowerLeg'
565    t.toes_model = 'jumpsuitToes'
566    jumpsuit_sounds = ['jumpsuit1', 'jumpsuit2', 'jumpsuit3', 'jumpsuit4']
567    jumpsuit_hit_sounds = ['jumpsuitHit1', 'jumpsuitHit2']
568    t.attack_sounds = jumpsuit_sounds
569    t.jump_sounds = jumpsuit_sounds
570    t.impact_sounds = jumpsuit_hit_sounds
571    t.death_sounds = ['jumpsuitDeath']
572    t.pickup_sounds = jumpsuit_sounds
573    t.fall_sounds = ['jumpsuitFall']
574    t.style = 'spaz'
575
576    # ActionHero ###################################
577    t = Appearance('Todd McBurton')
578    t.color_texture = 'actionHeroColor'
579    t.color_mask_texture = 'actionHeroColorMask'
580    t.default_color = (0.3, 0.5, 0.8)
581    t.default_highlight = (1, 0, 0)
582    t.icon_texture = 'actionHeroIcon'
583    t.icon_mask_texture = 'actionHeroIconColorMask'
584    t.head_model = 'actionHeroHead'
585    t.torso_model = 'actionHeroTorso'
586    t.pelvis_model = 'actionHeroPelvis'
587    t.upper_arm_model = 'actionHeroUpperArm'
588    t.forearm_model = 'actionHeroForeArm'
589    t.hand_model = 'actionHeroHand'
590    t.upper_leg_model = 'actionHeroUpperLeg'
591    t.lower_leg_model = 'actionHeroLowerLeg'
592    t.toes_model = 'actionHeroToes'
593    action_hero_sounds = [
594        'actionHero1',
595        'actionHero2',
596        'actionHero3',
597        'actionHero4',
598    ]
599    action_hero_hit_sounds = ['actionHeroHit1', 'actionHeroHit2']
600    t.attack_sounds = action_hero_sounds
601    t.jump_sounds = action_hero_sounds
602    t.impact_sounds = action_hero_hit_sounds
603    t.death_sounds = ['actionHeroDeath']
604    t.pickup_sounds = action_hero_sounds
605    t.fall_sounds = ['actionHeroFall']
606    t.style = 'spaz'
607
608    # Assassin ###################################
609    t = Appearance('Zola')
610    t.color_texture = 'assassinColor'
611    t.color_mask_texture = 'assassinColorMask'
612    t.default_color = (0.3, 0.5, 0.8)
613    t.default_highlight = (1, 0, 0)
614    t.icon_texture = 'assassinIcon'
615    t.icon_mask_texture = 'assassinIconColorMask'
616    t.head_model = 'assassinHead'
617    t.torso_model = 'assassinTorso'
618    t.pelvis_model = 'assassinPelvis'
619    t.upper_arm_model = 'assassinUpperArm'
620    t.forearm_model = 'assassinForeArm'
621    t.hand_model = 'assassinHand'
622    t.upper_leg_model = 'assassinUpperLeg'
623    t.lower_leg_model = 'assassinLowerLeg'
624    t.toes_model = 'assassinToes'
625    assassin_sounds = ['assassin1', 'assassin2', 'assassin3', 'assassin4']
626    assassin_hit_sounds = ['assassinHit1', 'assassinHit2']
627    t.attack_sounds = assassin_sounds
628    t.jump_sounds = assassin_sounds
629    t.impact_sounds = assassin_hit_sounds
630    t.death_sounds = ['assassinDeath']
631    t.pickup_sounds = assassin_sounds
632    t.fall_sounds = ['assassinFall']
633    t.style = 'spaz'
634
635    # Wizard ###################################
636    t = Appearance('Grumbledorf')
637    t.color_texture = 'wizardColor'
638    t.color_mask_texture = 'wizardColorMask'
639    t.default_color = (0.2, 0.4, 1.0)
640    t.default_highlight = (0.06, 0.15, 0.4)
641    t.icon_texture = 'wizardIcon'
642    t.icon_mask_texture = 'wizardIconColorMask'
643    t.head_model = 'wizardHead'
644    t.torso_model = 'wizardTorso'
645    t.pelvis_model = 'wizardPelvis'
646    t.upper_arm_model = 'wizardUpperArm'
647    t.forearm_model = 'wizardForeArm'
648    t.hand_model = 'wizardHand'
649    t.upper_leg_model = 'wizardUpperLeg'
650    t.lower_leg_model = 'wizardLowerLeg'
651    t.toes_model = 'wizardToes'
652    wizard_sounds = ['wizard1', 'wizard2', 'wizard3', 'wizard4']
653    wizard_hit_sounds = ['wizardHit1', 'wizardHit2']
654    t.attack_sounds = wizard_sounds
655    t.jump_sounds = wizard_sounds
656    t.impact_sounds = wizard_hit_sounds
657    t.death_sounds = ['wizardDeath']
658    t.pickup_sounds = wizard_sounds
659    t.fall_sounds = ['wizardFall']
660    t.style = 'spaz'
661
662    # Cowboy ###################################
663    t = Appearance('Butch')
664    t.color_texture = 'cowboyColor'
665    t.color_mask_texture = 'cowboyColorMask'
666    t.default_color = (0.3, 0.5, 0.8)
667    t.default_highlight = (1, 0, 0)
668    t.icon_texture = 'cowboyIcon'
669    t.icon_mask_texture = 'cowboyIconColorMask'
670    t.head_model = 'cowboyHead'
671    t.torso_model = 'cowboyTorso'
672    t.pelvis_model = 'cowboyPelvis'
673    t.upper_arm_model = 'cowboyUpperArm'
674    t.forearm_model = 'cowboyForeArm'
675    t.hand_model = 'cowboyHand'
676    t.upper_leg_model = 'cowboyUpperLeg'
677    t.lower_leg_model = 'cowboyLowerLeg'
678    t.toes_model = 'cowboyToes'
679    cowboy_sounds = ['cowboy1', 'cowboy2', 'cowboy3', 'cowboy4']
680    cowboy_hit_sounds = ['cowboyHit1', 'cowboyHit2']
681    t.attack_sounds = cowboy_sounds
682    t.jump_sounds = cowboy_sounds
683    t.impact_sounds = cowboy_hit_sounds
684    t.death_sounds = ['cowboyDeath']
685    t.pickup_sounds = cowboy_sounds
686    t.fall_sounds = ['cowboyFall']
687    t.style = 'spaz'
688
689    # Witch ###################################
690    t = Appearance('Witch')
691    t.color_texture = 'witchColor'
692    t.color_mask_texture = 'witchColorMask'
693    t.default_color = (0.3, 0.5, 0.8)
694    t.default_highlight = (1, 0, 0)
695    t.icon_texture = 'witchIcon'
696    t.icon_mask_texture = 'witchIconColorMask'
697    t.head_model = 'witchHead'
698    t.torso_model = 'witchTorso'
699    t.pelvis_model = 'witchPelvis'
700    t.upper_arm_model = 'witchUpperArm'
701    t.forearm_model = 'witchForeArm'
702    t.hand_model = 'witchHand'
703    t.upper_leg_model = 'witchUpperLeg'
704    t.lower_leg_model = 'witchLowerLeg'
705    t.toes_model = 'witchToes'
706    witch_sounds = ['witch1', 'witch2', 'witch3', 'witch4']
707    witch_hit_sounds = ['witchHit1', 'witchHit2']
708    t.attack_sounds = witch_sounds
709    t.jump_sounds = witch_sounds
710    t.impact_sounds = witch_hit_sounds
711    t.death_sounds = ['witchDeath']
712    t.pickup_sounds = witch_sounds
713    t.fall_sounds = ['witchFall']
714    t.style = 'spaz'
715
716    # Warrior ###################################
717    t = Appearance('Warrior')
718    t.color_texture = 'warriorColor'
719    t.color_mask_texture = 'warriorColorMask'
720    t.default_color = (0.3, 0.5, 0.8)
721    t.default_highlight = (1, 0, 0)
722    t.icon_texture = 'warriorIcon'
723    t.icon_mask_texture = 'warriorIconColorMask'
724    t.head_model = 'warriorHead'
725    t.torso_model = 'warriorTorso'
726    t.pelvis_model = 'warriorPelvis'
727    t.upper_arm_model = 'warriorUpperArm'
728    t.forearm_model = 'warriorForeArm'
729    t.hand_model = 'warriorHand'
730    t.upper_leg_model = 'warriorUpperLeg'
731    t.lower_leg_model = 'warriorLowerLeg'
732    t.toes_model = 'warriorToes'
733    warrior_sounds = ['warrior1', 'warrior2', 'warrior3', 'warrior4']
734    warrior_hit_sounds = ['warriorHit1', 'warriorHit2']
735    t.attack_sounds = warrior_sounds
736    t.jump_sounds = warrior_sounds
737    t.impact_sounds = warrior_hit_sounds
738    t.death_sounds = ['warriorDeath']
739    t.pickup_sounds = warrior_sounds
740    t.fall_sounds = ['warriorFall']
741    t.style = 'spaz'
742
743    # Superhero ###################################
744    t = Appearance('Middle-Man')
745    t.color_texture = 'superheroColor'
746    t.color_mask_texture = 'superheroColorMask'
747    t.default_color = (0.3, 0.5, 0.8)
748    t.default_highlight = (1, 0, 0)
749    t.icon_texture = 'superheroIcon'
750    t.icon_mask_texture = 'superheroIconColorMask'
751    t.head_model = 'superheroHead'
752    t.torso_model = 'superheroTorso'
753    t.pelvis_model = 'superheroPelvis'
754    t.upper_arm_model = 'superheroUpperArm'
755    t.forearm_model = 'superheroForeArm'
756    t.hand_model = 'superheroHand'
757    t.upper_leg_model = 'superheroUpperLeg'
758    t.lower_leg_model = 'superheroLowerLeg'
759    t.toes_model = 'superheroToes'
760    superhero_sounds = ['superhero1', 'superhero2', 'superhero3', 'superhero4']
761    superhero_hit_sounds = ['superheroHit1', 'superheroHit2']
762    t.attack_sounds = superhero_sounds
763    t.jump_sounds = superhero_sounds
764    t.impact_sounds = superhero_hit_sounds
765    t.death_sounds = ['superheroDeath']
766    t.pickup_sounds = superhero_sounds
767    t.fall_sounds = ['superheroFall']
768    t.style = 'spaz'
769
770    # Alien ###################################
771    t = Appearance('Alien')
772    t.color_texture = 'alienColor'
773    t.color_mask_texture = 'alienColorMask'
774    t.default_color = (0.3, 0.5, 0.8)
775    t.default_highlight = (1, 0, 0)
776    t.icon_texture = 'alienIcon'
777    t.icon_mask_texture = 'alienIconColorMask'
778    t.head_model = 'alienHead'
779    t.torso_model = 'alienTorso'
780    t.pelvis_model = 'alienPelvis'
781    t.upper_arm_model = 'alienUpperArm'
782    t.forearm_model = 'alienForeArm'
783    t.hand_model = 'alienHand'
784    t.upper_leg_model = 'alienUpperLeg'
785    t.lower_leg_model = 'alienLowerLeg'
786    t.toes_model = 'alienToes'
787    alien_sounds = ['alien1', 'alien2', 'alien3', 'alien4']
788    alien_hit_sounds = ['alienHit1', 'alienHit2']
789    t.attack_sounds = alien_sounds
790    t.jump_sounds = alien_sounds
791    t.impact_sounds = alien_hit_sounds
792    t.death_sounds = ['alienDeath']
793    t.pickup_sounds = alien_sounds
794    t.fall_sounds = ['alienFall']
795    t.style = 'spaz'
796
797    # OldLady ###################################
798    t = Appearance('OldLady')
799    t.color_texture = 'oldLadyColor'
800    t.color_mask_texture = 'oldLadyColorMask'
801    t.default_color = (0.3, 0.5, 0.8)
802    t.default_highlight = (1, 0, 0)
803    t.icon_texture = 'oldLadyIcon'
804    t.icon_mask_texture = 'oldLadyIconColorMask'
805    t.head_model = 'oldLadyHead'
806    t.torso_model = 'oldLadyTorso'
807    t.pelvis_model = 'oldLadyPelvis'
808    t.upper_arm_model = 'oldLadyUpperArm'
809    t.forearm_model = 'oldLadyForeArm'
810    t.hand_model = 'oldLadyHand'
811    t.upper_leg_model = 'oldLadyUpperLeg'
812    t.lower_leg_model = 'oldLadyLowerLeg'
813    t.toes_model = 'oldLadyToes'
814    old_lady_sounds = ['oldLady1', 'oldLady2', 'oldLady3', 'oldLady4']
815    old_lady_hit_sounds = ['oldLadyHit1', 'oldLadyHit2']
816    t.attack_sounds = old_lady_sounds
817    t.jump_sounds = old_lady_sounds
818    t.impact_sounds = old_lady_hit_sounds
819    t.death_sounds = ['oldLadyDeath']
820    t.pickup_sounds = old_lady_sounds
821    t.fall_sounds = ['oldLadyFall']
822    t.style = 'spaz'
823
824    # Gladiator ###################################
825    t = Appearance('Gladiator')
826    t.color_texture = 'gladiatorColor'
827    t.color_mask_texture = 'gladiatorColorMask'
828    t.default_color = (0.3, 0.5, 0.8)
829    t.default_highlight = (1, 0, 0)
830    t.icon_texture = 'gladiatorIcon'
831    t.icon_mask_texture = 'gladiatorIconColorMask'
832    t.head_model = 'gladiatorHead'
833    t.torso_model = 'gladiatorTorso'
834    t.pelvis_model = 'gladiatorPelvis'
835    t.upper_arm_model = 'gladiatorUpperArm'
836    t.forearm_model = 'gladiatorForeArm'
837    t.hand_model = 'gladiatorHand'
838    t.upper_leg_model = 'gladiatorUpperLeg'
839    t.lower_leg_model = 'gladiatorLowerLeg'
840    t.toes_model = 'gladiatorToes'
841    gladiator_sounds = ['gladiator1', 'gladiator2', 'gladiator3', 'gladiator4']
842    gladiator_hit_sounds = ['gladiatorHit1', 'gladiatorHit2']
843    t.attack_sounds = gladiator_sounds
844    t.jump_sounds = gladiator_sounds
845    t.impact_sounds = gladiator_hit_sounds
846    t.death_sounds = ['gladiatorDeath']
847    t.pickup_sounds = gladiator_sounds
848    t.fall_sounds = ['gladiatorFall']
849    t.style = 'spaz'
850
851    # Wrestler ###################################
852    t = Appearance('Wrestler')
853    t.color_texture = 'wrestlerColor'
854    t.color_mask_texture = 'wrestlerColorMask'
855    t.default_color = (0.3, 0.5, 0.8)
856    t.default_highlight = (1, 0, 0)
857    t.icon_texture = 'wrestlerIcon'
858    t.icon_mask_texture = 'wrestlerIconColorMask'
859    t.head_model = 'wrestlerHead'
860    t.torso_model = 'wrestlerTorso'
861    t.pelvis_model = 'wrestlerPelvis'
862    t.upper_arm_model = 'wrestlerUpperArm'
863    t.forearm_model = 'wrestlerForeArm'
864    t.hand_model = 'wrestlerHand'
865    t.upper_leg_model = 'wrestlerUpperLeg'
866    t.lower_leg_model = 'wrestlerLowerLeg'
867    t.toes_model = 'wrestlerToes'
868    wrestler_sounds = ['wrestler1', 'wrestler2', 'wrestler3', 'wrestler4']
869    wrestler_hit_sounds = ['wrestlerHit1', 'wrestlerHit2']
870    t.attack_sounds = wrestler_sounds
871    t.jump_sounds = wrestler_sounds
872    t.impact_sounds = wrestler_hit_sounds
873    t.death_sounds = ['wrestlerDeath']
874    t.pickup_sounds = wrestler_sounds
875    t.fall_sounds = ['wrestlerFall']
876    t.style = 'spaz'
877
878    # OperaSinger ###################################
879    t = Appearance('Gretel')
880    t.color_texture = 'operaSingerColor'
881    t.color_mask_texture = 'operaSingerColorMask'
882    t.default_color = (0.3, 0.5, 0.8)
883    t.default_highlight = (1, 0, 0)
884    t.icon_texture = 'operaSingerIcon'
885    t.icon_mask_texture = 'operaSingerIconColorMask'
886    t.head_model = 'operaSingerHead'
887    t.torso_model = 'operaSingerTorso'
888    t.pelvis_model = 'operaSingerPelvis'
889    t.upper_arm_model = 'operaSingerUpperArm'
890    t.forearm_model = 'operaSingerForeArm'
891    t.hand_model = 'operaSingerHand'
892    t.upper_leg_model = 'operaSingerUpperLeg'
893    t.lower_leg_model = 'operaSingerLowerLeg'
894    t.toes_model = 'operaSingerToes'
895    opera_singer_sounds = [
896        'operaSinger1',
897        'operaSinger2',
898        'operaSinger3',
899        'operaSinger4',
900    ]
901    opera_singer_hit_sounds = ['operaSingerHit1', 'operaSingerHit2']
902    t.attack_sounds = opera_singer_sounds
903    t.jump_sounds = opera_singer_sounds
904    t.impact_sounds = opera_singer_hit_sounds
905    t.death_sounds = ['operaSingerDeath']
906    t.pickup_sounds = opera_singer_sounds
907    t.fall_sounds = ['operaSingerFall']
908    t.style = 'spaz'
909
910    # Pixie ###################################
911    t = Appearance('Pixel')
912    t.color_texture = 'pixieColor'
913    t.color_mask_texture = 'pixieColorMask'
914    t.default_color = (0, 1, 0.7)
915    t.default_highlight = (0.65, 0.35, 0.75)
916    t.icon_texture = 'pixieIcon'
917    t.icon_mask_texture = 'pixieIconColorMask'
918    t.head_model = 'pixieHead'
919    t.torso_model = 'pixieTorso'
920    t.pelvis_model = 'pixiePelvis'
921    t.upper_arm_model = 'pixieUpperArm'
922    t.forearm_model = 'pixieForeArm'
923    t.hand_model = 'pixieHand'
924    t.upper_leg_model = 'pixieUpperLeg'
925    t.lower_leg_model = 'pixieLowerLeg'
926    t.toes_model = 'pixieToes'
927    pixie_sounds = ['pixie1', 'pixie2', 'pixie3', 'pixie4']
928    pixie_hit_sounds = ['pixieHit1', 'pixieHit2']
929    t.attack_sounds = pixie_sounds
930    t.jump_sounds = pixie_sounds
931    t.impact_sounds = pixie_hit_sounds
932    t.death_sounds = ['pixieDeath']
933    t.pickup_sounds = pixie_sounds
934    t.fall_sounds = ['pixieFall']
935    t.style = 'pixie'
936
937    # Robot ###################################
938    t = Appearance('Robot')
939    t.color_texture = 'robotColor'
940    t.color_mask_texture = 'robotColorMask'
941    t.default_color = (0.3, 0.5, 0.8)
942    t.default_highlight = (1, 0, 0)
943    t.icon_texture = 'robotIcon'
944    t.icon_mask_texture = 'robotIconColorMask'
945    t.head_model = 'robotHead'
946    t.torso_model = 'robotTorso'
947    t.pelvis_model = 'robotPelvis'
948    t.upper_arm_model = 'robotUpperArm'
949    t.forearm_model = 'robotForeArm'
950    t.hand_model = 'robotHand'
951    t.upper_leg_model = 'robotUpperLeg'
952    t.lower_leg_model = 'robotLowerLeg'
953    t.toes_model = 'robotToes'
954    robot_sounds = ['robot1', 'robot2', 'robot3', 'robot4']
955    robot_hit_sounds = ['robotHit1', 'robotHit2']
956    t.attack_sounds = robot_sounds
957    t.jump_sounds = robot_sounds
958    t.impact_sounds = robot_hit_sounds
959    t.death_sounds = ['robotDeath']
960    t.pickup_sounds = robot_sounds
961    t.fall_sounds = ['robotFall']
962    t.style = 'spaz'
963
964    # Bunny ###################################
965    t = Appearance('Easter Bunny')
966    t.color_texture = 'bunnyColor'
967    t.color_mask_texture = 'bunnyColorMask'
968    t.default_color = (1, 1, 1)
969    t.default_highlight = (1, 0.5, 0.5)
970    t.icon_texture = 'bunnyIcon'
971    t.icon_mask_texture = 'bunnyIconColorMask'
972    t.head_model = 'bunnyHead'
973    t.torso_model = 'bunnyTorso'
974    t.pelvis_model = 'bunnyPelvis'
975    t.upper_arm_model = 'bunnyUpperArm'
976    t.forearm_model = 'bunnyForeArm'
977    t.hand_model = 'bunnyHand'
978    t.upper_leg_model = 'bunnyUpperLeg'
979    t.lower_leg_model = 'bunnyLowerLeg'
980    t.toes_model = 'bunnyToes'
981    bunny_sounds = ['bunny1', 'bunny2', 'bunny3', 'bunny4']
982    bunny_hit_sounds = ['bunnyHit1', 'bunnyHit2']
983    t.attack_sounds = bunny_sounds
984    t.jump_sounds = ['bunnyJump']
985    t.impact_sounds = bunny_hit_sounds
986    t.death_sounds = ['bunnyDeath']
987    t.pickup_sounds = bunny_sounds
988    t.fall_sounds = ['bunnyFall']
989    t.style = 'bunny'

Register our builtin spaz appearances.