Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 2/Scripts/HTZ/Eggman.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Eggman Object
4
// Script Author: Christian Whitehead/Simon Thomley
5
// Unpacked by Rubberduckycooly's script unpacker
6
// ----------------------------------
7
8
// Using HTZEggman as a prefix here because there's like 12 "Eggman" objects in the game so its less confusing this way
9
10
// ========================
11
// Aliases
12
// ========================
13
14
// value0 is, suprisingly, unused
15
private alias object.value1 : object.originPos.y
16
private alias object.value2 : object.oscillationAngle
17
// value3 is unused too
18
private alias object.value4 : object.timer
19
private alias object.value5 : object.flamethrowerFrame
20
private alias object.value6 : object.flamethrowerTimer
21
22
private alias object.value7 : object.health
23
private alias object.value8 : object.invincibilityTimer
24
private alias object.value9 : object.exploding
25
26
// Position values used for boss behaviours, see the init state
27
private alias object.value10 : object.pits.halfpoint
28
29
private alias object.value11 : object.pitL.x
30
private alias object.value13 : object.pitL.y
31
32
private alias object.value12 : object.pitR.x
33
private alias object.value14 : object.pitR.y
34
35
private alias object.value15 : object.cannonFrame
36
private alias object.value16 : object.nonStopBopCount
37
38
// States
39
private alias 0 : HTZEGGMAN_AWAITPLAYER
40
private alias 1 : HTZEGGMAN_RISE
41
private alias 2 : HTZEGGMAN_HOVER
42
private alias 3 : HTZEGGMAN_SINK
43
private alias 4 : HTZEGGMAN_EXPLODING
44
private alias 5 : HTZEGGMAN_DESTROYED
45
46
// Animations
47
private alias 1 : HTZEGGANI_IDLE
48
private alias 2 : HTZEGGANI_LAUGH
49
private alias 3 : HTZEGGANI_HIT
50
private alias 4 : HTZEGGANI_DEFEATED
51
private alias 5 : HTZEGGANI_TOASTED
52
53
// Music Events
54
private alias 26 : SLOT_MUSICEVENT_BOSS
55
56
private alias 0 : MUSICEVENT_FADETOBOSS
57
private alias 1 : MUSICEVENT_FADETOSTAGE
58
59
// Player Aliases
60
private alias object.xpos : player.xpos
61
private alias object.xvel : player.xvel
62
private alias object.speed : player.speed
63
private alias object.gravity : player.gravity
64
private alias object.animation : player.animation
65
private alias object.collisionRight : player.collisionRight
66
67
private alias object.value40 : player.hitboxLeft
68
private alias object.value38 : player.hitboxTop
69
private alias object.value41 : player.hitboxRight
70
private alias object.value39 : player.hitboxBottom
71
72
// Achievement Aliases
73
private alias 5 : ACHIEVEMENT_BOBNONSTOP
74
75
76
// ========================
77
// Function Declarations
78
// ========================
79
80
reserve function HTZEggman_Oscillate
81
82
83
// ========================
84
// Tables
85
// ========================
86
87
private table HTZEggman_FlameThrowerHitboxes
88
-32, -40, -48, -64, -80, -96, -112, -120, -119, -120
89
end table
90
91
92
// ========================
93
// Function Definitions
94
// ========================
95
96
private function HTZEggman_Oscillate
97
// Used when hovering in order to make Robotnik bounce a bit
98
99
object.ypos = object.originPos.y
100
Sin256(temp0, object.oscillationAngle)
101
temp0 <<= 9
102
object.ypos += temp0
103
object.oscillationAngle += 4
104
object.oscillationAngle &= 255
105
end function
106
107
108
// ========================
109
// Events
110
// ========================
111
112
event ObjectUpdate
113
switch object.state
114
case HTZEGGMAN_AWAITPLAYER
115
temp0 = object.ixpos
116
temp0 -= 352
117
stage.newXBoundary1 = temp0
118
119
temp0 = object.ixpos
120
temp0 += 96
121
stage.newXBoundary2 = temp0
122
123
temp0 = object.xpos
124
temp0 -= 0xC00000
125
if player[0].xpos >= temp0 // Only activate when the player's past the trigger point
126
object.animation = HTZEGGANI_IDLE
127
ResetObjectEntity(SLOT_MUSICEVENT_BOSS, TypeName[Music Event], MUSICEVENT_FADETOBOSS, 0, 0)
128
object[SLOT_MUSICEVENT_BOSS].priority = PRIORITY_ACTIVE
129
object.originPos.y = object.ypos
130
131
// Init arena values
132
133
// X Position of right lava pit
134
object.pitR.x = object.xpos
135
136
// X Position of left lava pit
137
object.pitL.x = object.pitR.x
138
object.pitL.x -= 0x1000000
139
140
// Halfpoint between the two
141
object.pits.halfpoint = object.pitL.x
142
object.pits.halfpoint += 0x800000
143
144
// Y Position to start from when in left lava pit
145
object.pitL.y = object.ypos
146
object.pitL.y += 0x260000
147
148
// Y Position of where to start from when in right lava pit
149
object.pitR.y = object.ypos
150
object.pitR.y += 0xF0000
151
152
object.timer = 144
153
object.oscillationAngle = 128
154
object.cannonFrame = 7
155
156
#platform: USE_STANDALONE
157
object.health = 8
158
#endplatform
159
#platform: USE_ORIGINS
160
if game.bossOneLife == false
161
object.health = 8
162
else
163
object.health = 1
164
end if
165
#endplatform
166
167
object.priority = PRIORITY_ACTIVE
168
object.state++
169
end if
170
break
171
172
case HTZEGGMAN_RISE
173
// Rising from a lava pit
174
object.originPos.y -= 0xE000
175
object.ypos -= 0xE000
176
177
object.timer--
178
if object.timer == 0
179
object.state = HTZEGGMAN_HOVER
180
end if
181
break
182
183
case HTZEGGMAN_HOVER
184
// Hovering above a lava pit, firing the flamethrower
185
CallFunction(HTZEggman_Oscillate)
186
if object.oscillationAngle == 64
187
if object.timer == 0
188
object.timer++
189
else
190
object.state = HTZEGGMAN_SINK
191
end if
192
end if
193
194
if object.timer == 1
195
object.flamethrowerTimer++
196
switch object.flamethrowerTimer
197
case 1
198
PlaySfx(SfxName[Fire Dash], false)
199
object.flamethrowerFrame = 9
200
break
201
202
case 3
203
object.flamethrowerFrame = 10
204
break
205
206
case 6
207
object.flamethrowerFrame = 11
208
break
209
210
case 9
211
object.flamethrowerFrame = 12
212
break
213
214
case 13
215
object.flamethrowerFrame = 13
216
break
217
218
case 17
219
object.flamethrowerFrame = 14
220
break
221
222
case 22
223
object.flamethrowerFrame = 15
224
break
225
226
case 25
227
CreateTempObject(TypeName[Eggman Fireball1], 0, object.xpos, object.ypos)
228
if object.direction == FLIP_NONE
229
object[tempObjectPos].xpos -= 0x680000
230
object[tempObjectPos].xvel = -0x40000
231
else
232
object[tempObjectPos].xpos += 0x680000
233
object[tempObjectPos].xvel = 0x40000
234
end if
235
object[tempObjectPos].ypos -= 0x1D0000
236
object[tempObjectPos].direction = object.direction
237
break
238
239
case 27
240
object.flamethrowerFrame = 16
241
break
242
243
case 33
244
object.flamethrowerFrame = 17
245
break
246
247
case 39
248
object.flamethrowerFrame = 18
249
break
250
251
case 46
252
object.timer = 2
253
object.flamethrowerTimer = 0
254
break
255
end switch
256
end if
257
break
258
259
case HTZEGGMAN_SINK
260
// Sinking back into the lava, not to be confused with his defeat sink state
261
object.originPos.y += 0xE000
262
object.ypos += 0xE000
263
object.timer++
264
265
if object.xpos < object.pits.halfpoint
266
temp0 = 36
267
temp1 = -0x54000
268
else
269
temp0 = 84
270
temp1 = -0x64000
271
end if
272
273
if object.timer == temp0
274
PlaySfx(SfxName[Small Fireball], false)
275
CreateTempObject(TypeName[Eggman Fireball2], 0, object.xpos, object.ypos)
276
object[tempObjectPos].xvel = -0x1C000
277
object[tempObjectPos].yvel = temp1
278
CreateTempObject(TypeName[Eggman Fireball2], 0, object.xpos, object.ypos)
279
object[tempObjectPos].xvel = 0x1C000
280
object[tempObjectPos].yvel = temp1
281
end if
282
283
if object.timer == 160
284
if player[0].xpos < object.pits.halfpoint
285
object.xpos = object.pitL.x
286
object.ypos = object.pitL.y
287
object.originPos.y = object.pitL.y
288
else
289
object.xpos = object.pitR.x
290
object.ypos = object.pitR.y
291
object.originPos.y = object.pitR.y
292
end if
293
294
if player[0].xpos < object.xpos
295
object.direction = FLIP_NONE
296
else
297
object.direction = FLIP_X
298
end if
299
300
object.oscillationAngle = 128
301
object.state = HTZEGGMAN_RISE
302
end if
303
break
304
305
case HTZEGGMAN_EXPLODING
306
object.timer++
307
if object.timer == 120
308
// Turn the cannon frame into the broken variant
309
object.cannonFrame = 8
310
end if
311
312
if object.timer == 180
313
object.timer = 0
314
object.animation = HTZEGGANI_TOASTED
315
object.exploding = false
316
object.state++
317
ResetObjectEntity(SLOT_MUSICEVENT_BOSS, TypeName[Music Event], MUSICEVENT_FADETOSTAGE, 0, 0)
318
object[SLOT_MUSICEVENT_BOSS].priority = PRIORITY_ACTIVE
319
320
// Restore normal stage XBounds
321
temp0 = tileLayer[0].xsize
322
temp0 <<= 7
323
stage.newXBoundary2 = temp0
324
end if
325
break
326
327
case HTZEGGMAN_DESTROYED
328
// Taking one final dip in the lava before disappearing one final time, object deletion gets done here
329
object.originPos.y += 0x10000
330
CallFunction(HTZEggman_Oscillate)
331
if object.outOfBounds == true
332
object.type = TypeName[Blank Object]
333
object.priority = PRIORITY_BOUNDS
334
end if
335
break
336
337
end switch
338
339
if player[0].gravity == GRAVITY_GROUND
340
// If the player's touched the ground, they are have stopped Non-Stop Bopping
341
object.nonStopBopCount = 0
342
end if
343
344
if object.health != 0
345
if object.invincibilityTimer > 0
346
object.invincibilityTimer--
347
GetBit(temp0, object.invincibilityTimer, 0)
348
if temp0 == true
349
SetPaletteEntry(0, 192, 0xE0E0E0)
350
else
351
SetPaletteEntry(0, 192, 0x000000)
352
end if
353
end if
354
355
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
356
if object.invincibilityTimer == 0
357
CheckEqual(player[currentPlayer].animation, ANI_HURT)
358
temp0 = checkResult
359
CheckEqual(player[currentPlayer].animation, ANI_DYING)
360
temp0 |= checkResult
361
CheckEqual(player[currentPlayer].animation, ANI_DROWNING)
362
temp0 |= checkResult
363
if temp0 != false
364
if object.animation != HTZEGGANI_LAUGH
365
object.animation = HTZEGGANI_LAUGH
366
object.animationTimer = 0
367
end if
368
end if
369
370
BoxCollisionTest(C_TOUCH, object.entityPos, -24, -24, 24, 22, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)
371
if checkResult == true
372
CallFunction(Player_CheckHit)
373
if checkResult == true
374
object.health--
375
if object.health == 0
376
#platform: USE_ORIGINS
377
CallNativeFunction2(NotifyCallback, NOTIFY_KILL_BOSS, 0)
378
CallNativeFunction2(NotifyCallback, NOTIFY_BOSS_END, 1)
379
#endplatform
380
381
player.score += 1000
382
object.animation = HTZEGGANI_DEFEATED
383
object.animationTimer = 0
384
object.exploding = true
385
object.originPos.y = object.ypos
386
object.state = HTZEGGMAN_EXPLODING
387
object.flamethrowerTimer = 0
388
object.flamethrowerFrame = 0
389
390
if object.nonStopBopCount >= 7
391
if stage.debugMode == false
392
// Grant the "Bob Non-stop" Achievement
393
CallNativeFunction2(SetAchievement, ACHIEVEMENT_BOBNONSTOP, 100)
394
end if
395
end if
396
else
397
object.animation = HTZEGGANI_HIT
398
object.animationTimer = 0
399
object.invincibilityTimer = 32
400
PlaySfx(SfxName[Boss Hit], false)
401
402
if currentPlayer == 0
403
if player[0].gravity == GRAVITY_AIR
404
object.nonStopBopCount++
405
end if
406
end if
407
end if
408
end if
409
else
410
if object.flamethrowerTimer != 0
411
temp1 = object.flamethrowerFrame
412
temp1 -= 8
413
if temp1 <= 7
414
GetTableValue(temp0, temp1, HTZEggman_FlameThrowerHitboxes)
415
if object.direction == FLIP_NONE
416
BoxCollisionTest(C_TOUCH, object.entityPos, temp0, -32, -24, -29, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
417
else
418
FlipSign(temp0)
419
BoxCollisionTest(C_TOUCH, object.entityPos, 24, -32, temp0, -29, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
420
end if
421
422
if checkResult == true
423
CallFunction(Player_FireHit)
424
end if
425
end if
426
end if
427
end if
428
end if
429
next
430
end if
431
432
if object.state != HTZEGGMAN_DESTROYED
433
// Enforce the arena right wall on players
434
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
435
temp0 = player[currentPlayer].collisionRight
436
temp0 <<= 16
437
temp0 += player[currentPlayer].xpos
438
temp1 = stage.curXBoundary2
439
temp1 <<= 16
440
if temp0 > temp1
441
player[currentPlayer].xvel = 0
442
player[currentPlayer].speed = 0
443
player[currentPlayer].xpos = temp1
444
temp0 = player[currentPlayer].collisionRight
445
temp0 <<= 16
446
player[currentPlayer].xpos -= temp0
447
end if
448
next
449
end if
450
451
if object.exploding != false
452
temp0 = oscillation
453
temp0 &= 7
454
if temp0 == 0
455
Rand(temp0, 48)
456
temp0 -= 24
457
temp0 <<= 16
458
temp0 += object.xpos
459
Rand(temp1, 48)
460
temp1 -= 24
461
temp1 <<= 16
462
temp1 += object.ypos
463
CreateTempObject(TypeName[Explosion], 0, temp0, temp1)
464
object[tempObjectPos].drawOrder = 5
465
PlaySfx(SfxName[Explosion], false)
466
end if
467
end if
468
469
if object.cannonFrame == 8
470
// If the cannon's destroyed, then spawn Smoke Puffs too
471
temp0 = oscillation
472
temp0 &= 31
473
if temp0 == 0
474
CreateTempObject(TypeName[Eggman SmokePuff], 0, object.xpos, object.ypos)
475
object[tempObjectPos].ypos -= 0x280000
476
object[tempObjectPos].xvel -= 0x6000
477
object[tempObjectPos].yvel -= 0xC000
478
end if
479
end if
480
end event
481
482
483
event ObjectDraw
484
if object.flamethrowerTimer != 0
485
DrawSpriteFX(object.flamethrowerFrame, FX_FLIP, object.xpos, object.ypos)
486
end if
487
488
switch object.animation
489
case HTZEGGANI_IDLE
490
temp0 = object.animationTimer
491
temp0 >>= 3
492
object.animationTimer++
493
object.animationTimer &= 15
494
DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)
495
break
496
497
case HTZEGGANI_LAUGH
498
temp0 = object.animationTimer
499
temp0 &= 15
500
temp0 >>= 3
501
temp0 += 2
502
object.animationTimer++
503
if object.animationTimer == 50
504
object.animationTimer = 0
505
506
if player[0].animation != ANI_DYING
507
object.animation = HTZEGGANI_IDLE
508
end if
509
end if
510
DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)
511
break
512
513
case HTZEGGANI_HIT
514
temp0 = object.animationTimer
515
temp0 &= 1
516
temp0 += 2
517
object.animationTimer++
518
if object.animationTimer == 50
519
object.animationTimer = 0
520
object.animation = HTZEGGANI_IDLE
521
end if
522
DrawSpriteFX(4, FX_FLIP, object.xpos, object.ypos)
523
break
524
525
case HTZEGGANI_DEFEATED
526
temp0 = object.animationTimer
527
temp0 >>= 5
528
temp0 += 4
529
temp0 %= 5
530
object.animationTimer++
531
object.animationTimer &= 63
532
DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)
533
break
534
535
case HTZEGGANI_TOASTED
536
DrawSpriteFX(5, FX_FLIP, object.xpos, object.ypos)
537
break
538
539
end switch
540
541
DrawSpriteFX(6, FX_FLIP, object.xpos, object.ypos)
542
DrawSpriteFX(object.cannonFrame, FX_FLIP, object.xpos, object.ypos)
543
end event
544
545
546
event ObjectStartup
547
CheckCurrentStageFolder("Zone05")
548
549
if checkResult == true
550
LoadSpriteSheet("HTZ/Objects.gif")
551
552
SpriteFrame(-15, -10, 17, 7, 66, 108) // #0 - Visor frame 1
553
SpriteFrame(-15, -10, 17, 7, 66, 116) // #1 - Visor frame 2 (seems to be a duplicate?)
554
SpriteFrame(-15, -10, 17, 7, 66, 124) // #2 - Laugh frame 1
555
SpriteFrame(-15, -10, 17, 7, 66, 132) // #3 - Laugh frame 2
556
SpriteFrame(-15, -10, 17, 7, 66, 140) // #4 - Hurt frame
557
SpriteFrame(-15, -10, 17, 7, 66, 148) // #5 - Burnt frame
558
SpriteFrame(-32, -12, 64, 45, 1, 210) // #6 - Eggmobile main frame (cropped from larger sprite)
559
SpriteFrame(-24, -36, 40, 24, 9, 186) // #7 - Eggmobile cannon (croped from same larger sprite as above)
560
SpriteFrame(-16, -20, 32, 8, 17, 132) // #8 - Destroyed Eggmobile cannon (again cropped frome larger sprite)
561
562
// #9 -> #18 - Flamethrower frames
563
SpriteFrame(-32, -32, 8, 6, 1, 124)
564
SpriteFrame(-40, -33, 16, 7, 10, 124)
565
SpriteFrame(-48, -33, 24, 8, 1, 54)
566
SpriteFrame(-64, -33, 40, 8, 1, 63)
567
SpriteFrame(-80, -33, 56, 8, 1, 72)
568
SpriteFrame(-96, -33, 72, 8, 1, 81)
569
SpriteFrame(-112, -33, 88, 8, 1, 90)
570
SpriteFrame(-120, -33, 88, 8, 1, 99)
571
SpriteFrame(-119, -33, 63, 8, 1, 108)
572
SpriteFrame(-120, -32, 31, 6, 1, 117)
573
574
if options.vsMode == true
575
foreach (TypeName[Eggman], arrayPos0, ALL_ENTITIES)
576
// No Eggmen to interfere in 2P mode
577
object[arrayPos0].type = TypeName[Blank Object]
578
next
579
end if
580
else
581
LoadSpriteSheet("MBZ/Objects.gif")
582
583
SpriteFrame(-15, -10, 17, 7, 1007, 34) // #0 - Visor frame 1
584
SpriteFrame(-15, -10, 17, 7, 1007, 42) // #1 - Visor frame 2 (seems to be a duplicate?)
585
SpriteFrame(-15, -10, 17, 7, 1007, 50) // #2 - Laugh frame 1
586
SpriteFrame(-15, -10, 17, 7, 1007, 58) // #3 - Laugh frame 2
587
SpriteFrame(-15, -10, 17, 7, 1007, 66) // #4 - Hurt frame
588
SpriteFrame(-15, -10, 17, 7, 1007, 74) // #5 - Burnt frame
589
590
// While the flame and visor sprites are all the way on the left of the sheet, these Eggmobile ones are over in the middle, separated...
591
SpriteFrame(-32, -12, 64, 45, 415, 154) // #6 - Eggmobile main frame (cropped from larger sprite)
592
SpriteFrame(-24, -36, 40, 24, 423, 130) // #7 - Eggmobile cannon (croped from same larger sprite as above)
593
594
// Broken cannon frame with another fun difference - while the HTZ sheet has a duplicate Eggmobile attached to this sprite, MBZ optimises it and crops the unnecessary sprite off
595
SpriteFrame(-16, -20, 32, 8, 480, 170) // #8 - Destroyed Eggmobile cannon (again cropped frome larger sprite)
596
597
// #9 -> #18 - Flamethrower frames
598
SpriteFrame(-32, -32, 8, 6, 877, 116)
599
SpriteFrame(-40, -33, 16, 7, 886, 116)
600
SpriteFrame(-48, -33, 24, 8, 982, 46)
601
SpriteFrame(-64, -33, 40, 8, 966, 55)
602
SpriteFrame(-80, -33, 56, 8, 950, 64)
603
SpriteFrame(-96, -33, 72, 8, 934, 73)
604
SpriteFrame(-112, -33, 88, 8, 919, 82)
605
SpriteFrame(-120, -33, 88, 8, 919, 91)
606
SpriteFrame(-119, -33, 63, 8, 877, 100)
607
SpriteFrame(-120, -32, 31, 6, 877, 109)
608
end if
609
end event
610
611
612
// ========================
613
// Editor Events
614
// ========================
615
616
event RSDKDraw
617
DrawSprite(0)
618
DrawSprite(1)
619
DrawSprite(2)
620
621
if editor.showGizmos == true
622
editor.drawingOverlay = true
623
624
// We're gonna draw out all the arena details here
625
626
// First, draw the overall boss arena bounds
627
temp0 = 352; temp1 = 272; temp2 = 96; temp3 = 32
628
CallFunction(EditorHelpers_DrawHitbox)
629
630
// X Position of right lava pit
631
object.pitR.x = object.xpos
632
633
// X Position of left lava pit
634
object.pitL.x = object.pitR.x
635
object.pitL.x -= 0x1000000
636
637
// Y Position to start from when in left lava pit
638
object.pitL.y = object.ypos
639
object.pitL.y += 0x260000
640
641
// Y Position of where to start from when in right lava pit
642
object.pitR.y = object.ypos
643
object.pitR.y += 0xF0000
644
645
// Lava->Sky on left lava pit
646
temp0 = object.pitL.y
647
temp0 -= 0x8C0000
648
DrawArrow(object.pitL.x, object.pitL.y, object.pitL.x, temp0, 0, 255, 0)
649
650
// Lava->Sky on right lava pit
651
temp0 = object.pitR.y
652
temp0 -= 0x8C0000
653
DrawArrow(object.pitR.x, object.pitR.y, object.pitR.x, temp0, 0, 255, 0)
654
655
DrawLine(object.pitL.x, object.pitL.y, object.pitR.x, object.pitR.y, 0, 255, 0)
656
657
editor.drawingOverlay = false
658
end if
659
end event
660
661
662
event RSDKLoad
663
CheckCurrentStageFolder("Zone05")
664
if checkResult == true
665
LoadSpriteSheet("HTZ/Objects.gif")
666
SpriteFrame(-15, -10, 17, 7, 66, 108) // Eggman peeking through the visor frame
667
SpriteFrame(-32, -12, 64, 45, 1, 210) // Eggmobile
668
SpriteFrame(-24, -36, 40, 24, 9, 186) // Cannon
669
670
// The last two SpriteFrames could be combined here to simply use the entire sprite, but for the sake of clarity (+ MBZ support), they shall be left alone...
671
else
672
LoadSpriteSheet("MBZ/Objects.gif")
673
SpriteFrame(-15, -10, 17, 7, 1007, 34)
674
SpriteFrame(-32, -12, 64, 45, 415, 154)
675
SpriteFrame(-24, -36, 40, 24, 423, 130)
676
end if
677
678
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
679
end event
680
681