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

Register our builtin spaz appearances.