Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R8/EggMobile.txt
1319 views
1
//----------------Sonic CD Egg Mobile Script------------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value0 : Object.Timer
7
#alias Object.Value1 : Object.XVelocity
8
#alias Object.Value2 : Object.YVelocity
9
#alias Object.Value3 : Object.Oscillation
10
#alias Object.Value4 : Object.WingOffset
11
#alias Object.Value6 : Object.OscillationValue
12
#alias Object.Value7 : Object.InvulnerableTimer
13
14
// Helper 1 Aliases
15
#alias Object[+1].Value0 : Helper1.BossHealth
16
#alias Object[+1].Value1 : Helper1.Controller // This handles the boss movement
17
#alias Object[+1].Value2 : Helper1.ControllerState
18
#alias Object[+1].Value3 : Helper1.ControllerDisabled
19
#alias Object[+1].Value4 : Helper1.LeftBound
20
#alias Object[+1].Value5 : Helper1.RightBound
21
#alias Object[+1].Value6 : Helper1.CenterBound
22
#alias Object[+1].Value7 : Helper1.TargetPos // Depending of what the boss needs this target is for X or Y Positions
23
24
// Helper 2 Aliases
25
#alias Object[+2].State : Helper2.BossInvincible // Checks if Eggman can be hit during his patterns
26
#alias Object[+2].Value0 : Helper2.SecondaryState // Sets the preparation of the Wing Throw Attack
27
#alias Object[+2].Value1 : Helper2.StopTimer // How much time eggman will stop moving during the intro/ground spin attack
28
#alias Object[+2].Value2 : Helper2.AnimSpeedState
29
#alias Object[+2].Value3 : Helper2.WingSpawnXPos
30
#alias Object[+2].Value4 : Helper2.MaxOscillation
31
#alias Object[+2].Value6 : Helper2.CutsceneRightBound
32
#alias Object[+2].Value7 : Helper2.SfxState
33
#alias Object[+2].AnimationTimer : Helper2.SfxTimer
34
#alias Object[+2].AnimationSpeed : Helper2.SfxUsed
35
36
// Boss Wing Aliases
37
#alias Object.XPos : BossWing.XPos
38
#alias Object.YPos : BossWing.YPos
39
#alias Object.Value0 : BossWing.Timer
40
#alias Object.Value1 : BossWing.XVelocity
41
#alias Object.Value2 : BossWing.YVelocity
42
#alias Object.Value5 : BossWing.Attached
43
#alias Object.Frame : BossWing.Frame
44
#alias Object.Rotation : BossWing.Rotation
45
#alias Object.State : BossWing.State
46
#alias Object.Type : BossWing.Type
47
#alias Object.Priority : BossWing.Priority
48
49
// HUD Alias
50
#alias Object[24].PropertyValue : HUD.CurrentTimePeriod
51
52
// Helper 2 States
53
#alias 0 : HELPER2_PREPARE_DETACH
54
#alias 1 : HELPER2_CENTER_WINGS
55
#alias 2 : HELPER2_DETACH_WINGS
56
#alias 3 : HELPER2_PREPARE_THROW
57
#alias 4 : HELPER2_THROW_WINGS
58
59
// Boss Wing States
60
#alias 1 : BOSSWING_DETACH
61
#alias 2 : BOSSWING_FALL_VERTICAL
62
#alias 5 : BOSSWING_FALL_DIAGONAL
63
64
// Eggman animations
65
#alias 0 : EGGANI_IDLE
66
#alias 1 : EGGANI_HURT
67
#alias 2 : EGGANI_LAUGH
68
#alias 3 : EGGANI_DEFEAT
69
70
// Cutscene
71
#alias 1 : CUTSCENE_FINALFEVER
72
73
// Players
74
#alias 0 : PLAYER_SONIC_A
75
76
// Collision Sides
77
#alias 0 : CSIDE_FLOOR
78
79
// Ink Effects
80
#alias 0 : INK_NONE
81
82
// Time Periods
83
#alias 3 : TIME_BAD_FUTURE
84
85
// Global SFX
86
#alias 22 : SFX_G_EXPLOSION
87
88
// Stage SFX
89
#alias 5 : SFX_S_BOSSHIT
90
#alias 6 : SFX_S_WINGROTATE
91
#alias 7 : SFX_S_MECHSTEP
92
#alias 8 : SFX_S_IMPACT1
93
#alias 9 : SFX_S_MSCHARGE
94
95
// Control Mode
96
#alias -1 : CONTROLMODE_NONE
97
#alias 0 : CONTROLMODE_NORMAL
98
99
// Priority
100
#alias 1 : PRIORITY_ACTIVE
101
102
// Function declarations
103
#function EggMobile_StopMovement
104
#function EggMobile_MoveToLeft
105
#function EggMobile_MoveToRight
106
#function EggMobile_GroundSpinAscend
107
#function EggMobile_GroundSpinDescend
108
#function EggMobile_MoveLeftToCenter
109
#function EggMobile_MoveRightToCenter
110
#function EggMobile_GroundSpinLeft
111
#function EggMobile_GroundSpinRight
112
#function EggMobile_HandleWingThrowATK
113
#function EggMobile_WingThrowVertical
114
#function EggMobile_WingThrowDiagonal
115
#function EggMobile_RestoreWings
116
#function EggMobile_SetTargetDestiny
117
#function EggMobile_ApproachPlayer
118
#function EggMobile_ExtendWings
119
#function EggMobile_RetractWings
120
#function EggMobile_Hit
121
#function EggMobile_PreparePogoAttack
122
#function EggMobile_PogoAttackDescend
123
#function EggMobile_PogoAttackAscend
124
#function EggMobile_PogoAttackMoveLeft
125
#function EggMobile_PogoAttackMoveRight
126
127
#function Helper1Controller_FourWings
128
#function Helper1Controller_ThreeWings
129
#function Helper1Controller_TwoWings
130
#function Helper1Controller_OneWing
131
132
#function EggMobile_Destroyed
133
#function EggMobile_Destroyed_FinalFever
134
#function EggMobile_HandleWingRotation
135
#function EggMobile_DropDamagedWing
136
#function EggMobile_HandleAnimations
137
138
function EggMobile_StopMovement
139
Object.Timer++
140
if Object.Timer == Helper2.StopTimer
141
Object.Timer = 0
142
Helper1.ControllerDisabled = false
143
end if
144
end function
145
146
147
function EggMobile_MoveToLeft
148
Object.XPos -= Object.XVelocity
149
if Object.XPos <= Helper1.LeftBound
150
Helper1.ControllerDisabled = false
151
end if
152
end function
153
154
155
function EggMobile_MoveToRight
156
Object.XPos += Object.XVelocity
157
if Object.XPos >= Helper1.RightBound
158
Helper1.ControllerDisabled = false
159
end if
160
end function
161
162
163
function EggMobile_GroundSpinAscend
164
Object.YPos -= Object.YVelocity
165
if Object.YPos <= Helper1.TargetPos
166
Object.YPos = Helper1.TargetPos
167
Helper1.ControllerDisabled = false
168
end if
169
end function
170
171
172
function EggMobile_GroundSpinDescend
173
Object.YPos += Object.YVelocity
174
if Object.YPos >= Helper1.TargetPos
175
Object.YPos = Helper1.TargetPos
176
Helper1.ControllerDisabled = false
177
end if
178
if Object.OscillationValue != 0
179
if Helper1.BossHealth < 4
180
TempValue0 = Object.Oscillation
181
TempValue0 >>= 6
182
if TempValue0 == Helper2.MaxOscillation
183
Object.OscillationValue = 0
184
Object.Oscillation = TempValue0
185
Object.Oscillation <<= 6
186
end if
187
else
188
TempValue0 = Object.Oscillation
189
TempValue0 %= 1280
190
if TempValue0 == 0
191
Object.OscillationValue = 0
192
end if
193
end if
194
end if
195
end function
196
197
198
function EggMobile_MoveLeftToCenter // Fun fact, the chance of this one triggering is really small
199
Object.XPos -= Object.XVelocity
200
if Object.XPos <= Helper1.CenterBound
201
Object.XPos = Helper1.CenterBound
202
Helper1.ControllerDisabled = false
203
end if
204
end function
205
206
207
function EggMobile_MoveRightToCenter
208
Object.XPos += Object.XVelocity
209
if Object.XPos >= Helper1.CenterBound
210
Object.XPos = Helper1.CenterBound
211
Helper1.ControllerDisabled = false
212
end if
213
end function
214
215
216
function EggMobile_GroundSpinLeft
217
Object.XPos -= 0x14CCC
218
if Object.XPos <= Helper1.TargetPos
219
Object.XPos = Helper1.TargetPos
220
Object.OscillationValue = 0
221
Helper1.ControllerDisabled = false
222
end if
223
TempValue0 = Object.Rotation
224
TempValue0 <<= 1
225
TempValue0 &= 511
226
Sin(TempValue1, TempValue0)
227
if TempValue1 < 0
228
FlipSign(TempValue1)
229
end if
230
TempValue1 >>= 7
231
TempValue1 += 64
232
ObjectTileGrip(CSIDE_FLOOR, 0, TempValue1, 0)
233
end function
234
235
236
function EggMobile_GroundSpinRight
237
Object.XPos += 0x14CCC
238
if Object.XPos >= Helper1.TargetPos
239
Object.XPos = Helper1.TargetPos
240
Object.OscillationValue = 0
241
Helper1.ControllerDisabled = false
242
end if
243
TempValue0 = Object.Rotation
244
TempValue0 <<= 1
245
TempValue0 &= 511
246
Sin(TempValue1, TempValue0)
247
if TempValue1 < 0
248
FlipSign(TempValue1)
249
end if
250
TempValue1 >>= 7
251
TempValue1 += 64
252
ObjectTileGrip(CSIDE_FLOOR, 0, TempValue1, 0)
253
end function
254
255
256
function EggMobile_HandleWingThrowATK
257
switch Helper2.SecondaryState
258
case HELPER2_PREPARE_DETACH
259
Object.Timer++
260
if Object.Timer == 20
261
Object.Timer = 0
262
Helper2.SecondaryState++
263
end if
264
break
265
266
case HELPER2_CENTER_WINGS
267
if Object.OscillationValue != 0
268
TempValue0 = Object.Oscillation
269
TempValue0 >>= 7
270
if TempValue0 == 0
271
TempValue0 <<= 7
272
Object.Oscillation = TempValue0
273
Object.OscillationValue = 0
274
Helper2.SecondaryState++
275
end if
276
end if
277
break
278
279
case HELPER2_DETACH_WINGS
280
Object.Timer++
281
Object.WingOffset += 0x80
282
if Object.Timer == 22
283
BossWing[-4].Frame = 1
284
BossWing[-3].Frame = 1
285
BossWing[-2].Frame = 1
286
BossWing[-1].Frame = 1
287
end if
288
if Object.Timer == 26
289
BossWing[-4].Frame = 2
290
BossWing[-3].Frame = 2
291
BossWing[-2].Frame = 2
292
BossWing[-1].Frame = 2
293
end if
294
if Object.Timer == 36
295
Object.Timer = 0
296
Helper2.SecondaryState++
297
end if
298
break
299
300
case HELPER2_PREPARE_THROW
301
Object.Timer++
302
if Object.Timer == 10
303
Object.Timer = 0
304
Helper2.SecondaryState++
305
Object.OscillationValue = -64
306
Helper1.TargetPos = Object[+3].YPos
307
Helper1.TargetPos -= 0x440000
308
end if
309
break
310
311
case HELPER2_THROW_WINGS
312
TempValue0 = 0
313
ArrayPos0 = Object.EntityNo
314
ArrayPos0 -= 4
315
while TempValue0 < 4
316
if BossWing[ArrayPos0].Attached == true
317
TempValue0 = BossWing[ArrayPos0].Rotation
318
TempValue0 >>= 4
319
if TempValue0 == 0
320
BossWing[ArrayPos0].Rotation = 0
321
BossWing[ArrayPos0].Attached = false
322
BossWing[ArrayPos0].State = BOSSWING_DETACH
323
BossWing[ArrayPos0].YVelocity = 0x28000
324
end if
325
end if
326
ArrayPos0++
327
TempValue0++
328
loop
329
if Object.YPos <= Helper1.TargetPos
330
Object.YPos = Helper1.TargetPos
331
Object.Timer++
332
if Object.Timer == 60
333
Object.Timer = 0
334
Object.OscillationValue = 0
335
Object.Oscillation = 0
336
Helper1.ControllerDisabled = false
337
end if
338
else
339
Object.YPos -= 0x14000
340
end if
341
break
342
end switch
343
end function
344
345
346
function EggMobile_WingThrowVertical
347
if Helper2.AnimSpeedState < Helper1.BossHealth
348
if Object.Timer == 0
349
ArrayPos0 = Object.EntityNo
350
ArrayPos0 -= 4
351
ArrayPos0 += Helper2.AnimSpeedState
352
Object[ArrayPos0].Type = TypeName[Boss Wing]
353
BossWing[ArrayPos0].State = BOSSWING_FALL_VERTICAL
354
BossWing[ArrayPos0].Rotation = 0
355
BossWing[ArrayPos0].Timer = 0
356
if Helper1.BossHealth > 2
357
BossWing[ArrayPos0].Frame = 4
358
else
359
BossWing[ArrayPos0].Frame = 3
360
end if
361
BossWing[ArrayPos0].YPos = Object[+3].YPos
362
BossWing[ArrayPos0].YPos -= 0x800000
363
BossWing[ArrayPos0].XVelocity = 0
364
BossWing[ArrayPos0].YVelocity = 0x38000
365
switch Helper2.WingSpawnXPos
366
case 0
367
BossWing[ArrayPos0].XPos = -0x400000
368
break
369
case 1
370
BossWing[ArrayPos0].XPos = 0x400000
371
break
372
case 2
373
BossWing[ArrayPos0].XPos = 0x800000
374
break
375
case 3
376
BossWing[ArrayPos0].XPos = -0x800000
377
break
378
case 4
379
BossWing[ArrayPos0].XPos = -0x800000
380
break
381
case 5
382
BossWing[ArrayPos0].XPos = -0x400000
383
break
384
case 6
385
BossWing[ArrayPos0].XPos = 0
386
break
387
case 7
388
BossWing[ArrayPos0].XPos = 0x400000
389
break
390
case 8
391
BossWing[ArrayPos0].XPos = 0x800000
392
break
393
case 9
394
BossWing[ArrayPos0].XPos = 0x400000
395
break
396
case 10
397
BossWing[ArrayPos0].XPos = 0
398
break
399
case 11
400
BossWing[ArrayPos0].XPos = -0x800000
401
break
402
case 12
403
BossWing[ArrayPos0].XPos = -0x500000
404
break
405
case 13
406
BossWing[ArrayPos0].XPos = 0x500000
407
break
408
case 14
409
BossWing[ArrayPos0].XPos = -0x300000
410
break
411
case 15
412
BossWing[ArrayPos0].XPos = 0xA0000
413
break
414
end switch
415
BossWing[ArrayPos0].XPos += Object[+3].XPos
416
Object.Timer++
417
else
418
if Object.Timer < 30
419
Object.Timer++
420
else
421
Object.Timer = 0
422
Helper2.AnimSpeedState++
423
Helper2.WingSpawnXPos++
424
end if
425
end if
426
else
427
if Object[-4].Type == TypeName[Blank Object]
428
if Object[-3].Type == TypeName[Blank Object]
429
if Object[-2].Type == TypeName[Blank Object]
430
if Object[-1].Type == TypeName[Blank Object]
431
Helper1.ControllerDisabled = false
432
end if
433
end if
434
end if
435
end if
436
end if
437
end function
438
439
440
function EggMobile_WingThrowDiagonal
441
if Helper2.AnimSpeedState < 1
442
Object[-1].Type = TypeName[Boss Wing]
443
BossWing[-1].State = BOSSWING_FALL_VERTICAL
444
BossWing[-1].Timer = 0
445
BossWing[-1].Frame = 3
446
if Player.XPos < Object[+3].XPos
447
BossWing[-1].YPos = Object[+3].iXPos
448
BossWing[-1].YPos += 248
449
TempValue0 = Player.XPos
450
TempValue0 >>= 16
451
BossWing[-1].YPos -= TempValue0
452
BossWing[-1].YPos *= -0x6A0A
453
BossWing[-1].YPos >>= 16
454
BossWing[-1].YPos &= 0xFFFF
455
BossWing[-1].YPos <<= 16
456
BossWing[-1].YPos += Object[+3].YPos
457
BossWing[-1].YPos += 0x600000
458
BossWing[-1].XPos = Object[+3].XPos
459
BossWing[-1].XPos += 0xC80000
460
461
BossWing[-1].Rotation = 96
462
BossWing[-1].XVelocity = -0x33BBA
463
BossWing[-1].YVelocity = 0x156CF
464
else
465
BossWing[-1].YPos = Player.XPos
466
BossWing[-1].YPos >>= 16
467
TempValue0 = Object[+3].iXPos
468
TempValue0 -= 248
469
BossWing[-1].YPos -= TempValue0
470
BossWing[-1].YPos *= -0x6A0A
471
BossWing[-1].YPos >>= 16
472
BossWing[-1].YPos &= 0xFFFF
473
BossWing[-1].YPos <<= 16
474
BossWing[-1].YPos += Object[+3].YPos
475
BossWing[-1].YPos += 0x600000
476
BossWing[-1].XPos = Object[+3].XPos
477
BossWing[-1].XPos -= 0xC80000
478
479
BossWing[-1].Rotation = 416
480
BossWing[-1].XVelocity = 0x33BBA
481
BossWing[-1].YVelocity = 0x156CF
482
end if
483
Helper2.AnimSpeedState++
484
else
485
if Object[-4].Type == TypeName[Blank Object]
486
if Object[-3].Type == TypeName[Blank Object]
487
if Object[-2].Type == TypeName[Blank Object]
488
if Object[-1].Type == TypeName[Blank Object]
489
Helper1.ControllerDisabled = false
490
end if
491
end if
492
end if
493
end if
494
end if
495
end function
496
497
498
function EggMobile_RestoreWings
499
if Object.Timer == 0
500
switch Helper1.BossHealth
501
case 1
502
Object[-2].Type = TypeName[Boss Wing]
503
BossWing[-2].Frame = 0
504
BossWing[-2].Attached = 1
505
break
506
case 2
507
Object[-2].Type = TypeName[Boss Wing]
508
BossWing[-2].Frame = 0
509
BossWing[-2].Attached = 1
510
Object[-1].Type = TypeName[Boss Wing]
511
BossWing[-1].Frame = 0
512
BossWing[-1].Attached = 1
513
break
514
case 3
515
Object[-3].Type = TypeName[Boss Wing]
516
BossWing[-3].Frame = 0
517
BossWing[-3].Attached = 1
518
Object[-2].Type = TypeName[Boss Wing]
519
BossWing[-2].Frame = 0
520
BossWing[-2].Attached = 1
521
Object[-1].Type = TypeName[Boss Wing]
522
BossWing[-1].Frame = 0
523
BossWing[-1].Attached = 1
524
break
525
case 4
526
Object[-4].Type = TypeName[Boss Wing]
527
BossWing[-4].Frame = 0
528
BossWing[-4].Attached = 1
529
Object[-3].Type = TypeName[Boss Wing]
530
BossWing[-3].Frame = 0
531
BossWing[-3].Attached = 1
532
Object[-2].Type = TypeName[Boss Wing]
533
BossWing[-2].Frame = 0
534
BossWing[-2].Attached = 1
535
Object[-1].Type = TypeName[Boss Wing]
536
BossWing[-1].Frame = 0
537
BossWing[-1].Attached = 1
538
break
539
end switch
540
Object.WingOffset = 0
541
Object.Timer++
542
else
543
Object.Timer++
544
if Object.Timer < 120
545
Object.WingOffset += 0x70
546
if Object.WingOffset >= 0x1000
547
Object.WingOffset = 0x1000
548
end if
549
else
550
Object.Timer = 0
551
Helper1.ControllerDisabled = false
552
end if
553
end if
554
end function
555
556
557
function EggMobile_SetTargetDestiny
558
Object.XVelocity = Player.XPos
559
Object.XVelocity -= Object.XPos
560
Object.XVelocity >>= 16
561
TempValue0 = Object.XVelocity
562
if TempValue0 < 0
563
FlipSign(TempValue0)
564
end if
565
566
if TempValue0 < 64
567
Object.XVelocity <<= 4
568
Object.XVelocity /= 90
569
Object.XVelocity <<= 12
570
Object.YVelocity = Object[+3].YPos
571
Object.YVelocity -= 0x40000
572
Helper1.TargetPos = Object.YVelocity
573
Object.YVelocity -= Object.YPos
574
Object.YVelocity >>= 16
575
Object.YVelocity <<= 4
576
Object.YVelocity /= 90
577
Object.YVelocity <<= 12
578
if Helper1.BossHealth == 2
579
Helper2.MaxOscillation = 4480
580
else
581
Helper2.MaxOscillation = 3840
582
end if
583
else
584
if Object.XVelocity >= 0
585
Object.XVelocity -= 16
586
else
587
Object.XVelocity += 16
588
end if
589
Object.XVelocity <<= 4
590
Object.XVelocity /= 90
591
Object.XVelocity <<= 12
592
Object.YVelocity = Object[+3].YPos
593
Object.YVelocity += 0xA0000
594
Helper1.TargetPos = Object.YVelocity
595
Object.YVelocity -= Object.YPos
596
Object.YVelocity >>= 16
597
Object.YVelocity <<= 4
598
Object.YVelocity /= 90
599
Object.YVelocity <<= 12
600
if Helper1.BossHealth == 2
601
Helper2.MaxOscillation = 4480
602
else
603
Helper2.MaxOscillation = 3200
604
end if
605
end if
606
end function
607
608
609
function EggMobile_ApproachPlayer
610
Object.XPos += Object.XVelocity
611
Object.YPos += Object.YVelocity
612
if Object.Timer > 10
613
if Object.Oscillation == Helper2.MaxOscillation
614
Object.OscillationValue = 0
615
end if
616
else
617
Object.Timer++
618
end if
619
620
if Object.YPos >= Helper1.TargetPos
621
Object.Timer = 0
622
Object.YPos = Helper1.TargetPos
623
Helper1.TargetPos = Object[+3].YPos
624
Helper1.TargetPos -= 0x440000
625
FlipSign(Object.XVelocity)
626
FlipSign(Object.YVelocity)
627
Helper1.ControllerDisabled = false
628
PlayStageSFX(SFX_S_MSCHARGE, false)
629
end if
630
end function
631
632
633
function EggMobile_ExtendWings
634
Object.WingOffset += 0x120
635
if Object.WingOffset > 0x2200
636
Object.WingOffset = 0x2200
637
end if
638
Object.Timer++
639
if Object.Timer == 120
640
Object.Timer = 0
641
Helper1.ControllerDisabled = false
642
end if
643
end function
644
645
646
function EggMobile_RetractWings
647
Object.XPos += Object.XVelocity
648
Object.YPos += Object.YVelocity
649
Object.WingOffset -= 0x80
650
if Object.WingOffset < 0x1000
651
Object.WingOffset = 0x1000
652
end if
653
if Object.YPos <= Helper1.TargetPos
654
Object.YPos = Helper1.TargetPos
655
Helper1.ControllerDisabled = false
656
end if
657
end function
658
659
660
function EggMobile_Hit
661
Object.WingOffset -= 0x80
662
if Object.WingOffset < 0x1000
663
Object.WingOffset = 0x1000
664
end if
665
Object.YPos -= Object.YVelocity
666
TempValue0 = Object[+3].YPos
667
TempValue0 -= 0x440000
668
if Object.YPos <= TempValue0
669
Object.YPos = TempValue0
670
Helper1.ControllerDisabled = false
671
end if
672
end function
673
674
675
function EggMobile_PreparePogoAttack
676
if Object.Timer < 20
677
Object.Timer++
678
else
679
TempValue0 = Object.Oscillation
680
TempValue0 >>= 7
681
if TempValue0 == 0
682
Object.Timer = 0
683
BossWing[-2].Rotation = 256
684
Object.Oscillation = 0
685
Object.OscillationValue = 0
686
Helper1.ControllerDisabled = false
687
end if
688
end if
689
end function
690
691
692
function EggMobile_PogoAttackDescend
693
TempValue0 = Object.Timer
694
TempValue0 <<= 8
695
TempValue0 /= 60
696
Sin(Object.YPos, TempValue0)
697
Object.YPos *= -0x3200
698
Object.YPos += Object[+3].YPos
699
Object.YPos += 0x200000
700
Object.Timer++
701
if Object.Timer > 29
702
Object.Timer = 0
703
Object.YPos = Object[+3].YPos
704
Object.YPos -= 0x440000
705
Helper1.ControllerDisabled = false
706
end if
707
end function
708
709
710
function EggMobile_PogoAttackAscend
711
TempValue0 = Object.Timer
712
TempValue0 += 30
713
TempValue0 <<= 8
714
TempValue0 /= 60
715
Sin(Object.YPos, TempValue0)
716
Object.YPos *= -0x3200
717
Object.YPos += Object[+3].YPos
718
Object.YPos += 0x200000
719
Object.Timer++
720
if Object.Timer > 29
721
Object.Timer = 0
722
Helper1.ControllerDisabled = false
723
PlayStageSFX(SFX_S_IMPACT1, false)
724
end if
725
end function
726
727
728
function EggMobile_PogoAttackMoveLeft
729
TempValue0 = Object.Timer
730
TempValue0 <<= 8
731
TempValue0 /= 60
732
Cos(Object.XPos, TempValue0)
733
Object.XPos *= 0x1480
734
Object.XPos += Helper1.TargetPos
735
Sin(Object.YPos, TempValue0)
736
Object.YPos *= -0x3400
737
Object.YPos += Object[+3].YPos
738
Object.YPos += 0x200000
739
TempValue0 = Object[+3].YPos
740
TempValue0 += 0x200000
741
TempValue0 -= Object.YPos
742
TempValue0 >>= 9
743
Object.WingOffset = 0x1000
744
Object.WingOffset += TempValue0
745
if Object.WingOffset > 0x2200
746
Object.WingOffset = 0x2200
747
end if
748
Object.Timer++
749
if Object.Timer > 59
750
Object.Timer = 0
751
Helper1.ControllerDisabled = false
752
PlayStageSFX(SFX_S_IMPACT1, false)
753
end if
754
end function
755
756
757
function EggMobile_PogoAttackMoveRight
758
TempValue0 = Object.Timer
759
TempValue0 <<= 8
760
TempValue0 /= 60
761
Cos(Object.XPos, TempValue0)
762
Object.XPos *= -0x1480
763
Object.XPos += Helper1.TargetPos
764
Sin(Object.YPos, TempValue0)
765
Object.YPos *= -0x3400
766
Object.YPos += Object[+3].YPos
767
Object.YPos += 0x200000
768
TempValue0 = Object[+3].YPos
769
TempValue0 += 0x200000
770
TempValue0 -= Object.YPos
771
TempValue0 >>= 9
772
Object.WingOffset = 0x1000
773
Object.WingOffset += TempValue0
774
if Object.WingOffset > 0x2200
775
Object.WingOffset = 0x2200
776
end if
777
Object.Timer++
778
if Object.Timer > 59
779
Object.Timer = 0
780
Helper1.ControllerDisabled = false
781
PlayStageSFX(SFX_S_IMPACT1, false)
782
end if
783
end function
784
785
786
function Helper1Controller_FourWings
787
switch Helper1.ControllerState
788
case 0
789
Object.State = EggMobile_StopMovement
790
Helper2.StopTimer = 120
791
Helper2.BossInvincible = true
792
break
793
case 1
794
Object.State = EggMobile_MoveToRight
795
Object.OscillationValue = -64
796
Object.XVelocity = 0x16000
797
Helper2.BossInvincible = true
798
break
799
case 2
800
Object.State = EggMobile_MoveToLeft
801
break
802
case 3
803
Object.State = EggMobile_MoveRightToCenter
804
break
805
case 4
806
Object.State = EggMobile_GroundSpinDescend
807
Object.YVelocity = 0xA000
808
Helper1.TargetPos = Object[+3].YPos
809
Helper1.TargetPos += 0x200000
810
Helper2.BossInvincible = false
811
break
812
case 5
813
Object.State = EggMobile_StopMovement
814
Helper2.StopTimer = 20
815
break
816
case 6
817
if Player.XPos > Object.XPos
818
Object.Direction = FACING_LEFT
819
Object.State = EggMobile_GroundSpinRight
820
Helper1.TargetPos = Helper1.CenterBound
821
Helper1.TargetPos += 0x680000
822
Object.OscillationValue = 16
823
else
824
Object.Direction = FACING_RIGHT
825
Object.State = EggMobile_GroundSpinLeft
826
Helper1.TargetPos = Helper1.CenterBound
827
Helper1.TargetPos -= 0x680000
828
Object.OscillationValue = -16
829
end if
830
Helper2.SfxState = 1
831
Helper2.SfxUsed = 0
832
Helper2.SfxTimer = 0
833
break
834
case 7
835
Object.State = EggMobile_StopMovement
836
Helper2.StopTimer = 60
837
Object.OscillationValue = 0
838
break
839
case 8
840
if Object.XPos < Object[+3].XPos
841
Object.State = EggMobile_GroundSpinRight
842
Helper1.TargetPos = Helper1.CenterBound
843
Helper1.TargetPos += 0x680000
844
Object.OscillationValue = 16
845
else
846
Object.State = EggMobile_GroundSpinLeft
847
Helper1.TargetPos = Helper1.CenterBound
848
Helper1.TargetPos -= 0x680000
849
Object.OscillationValue = -16
850
end if
851
Helper2.SfxTimer = 0
852
break
853
case 9
854
Object.State = EggMobile_StopMovement
855
Helper2.StopTimer = 60
856
Object.OscillationValue = 0
857
Helper2.SfxState = 0
858
Helper2.SfxTimer = 0
859
break
860
case 10
861
Object.State = EggMobile_GroundSpinAscend
862
Object.OscillationValue = -64
863
Helper1.TargetPos = Object[+3].YPos
864
Helper1.TargetPos -= 0x240000
865
break
866
case 11
867
Object.State = EggMobile_StopMovement
868
Helper2.StopTimer = 90
869
break
870
case 12
871
if Object.Direction == FACING_RIGHT
872
Object.State = EggMobile_MoveToLeft
873
else
874
Object.State = EggMobile_MoveToRight
875
end if
876
break
877
case 13
878
if Object.Direction == FACING_RIGHT
879
Object.State = EggMobile_MoveToRight
880
else
881
Object.State = EggMobile_MoveToLeft
882
end if
883
break
884
case 14
885
if Object.Direction == FACING_RIGHT
886
Object.State = EggMobile_MoveLeftToCenter
887
else
888
Object.State = EggMobile_MoveRightToCenter
889
end if
890
break
891
case 15
892
Object.State = EggMobile_HandleWingThrowATK
893
Helper2.SecondaryState = 0
894
Helper2.BossInvincible = true
895
break
896
case 16
897
Object.State = EggMobile_WingThrowVertical
898
Helper2.AnimSpeedState = 0
899
Helper2.WingSpawnXPos = Player.XPos
900
Helper2.WingSpawnXPos >>= 16
901
Helper2.WingSpawnXPos &= 3
902
Helper2.WingSpawnXPos <<= 2
903
BossWing[-4].Type = TypeName[Blank Object]
904
BossWing[-3].Type = TypeName[Blank Object]
905
BossWing[-2].Type = TypeName[Blank Object]
906
BossWing[-1].Type = TypeName[Blank Object]
907
Helper2.BossInvincible = true
908
break
909
case 17
910
Object.State = EggMobile_RestoreWings
911
Helper2.BossInvincible = true
912
break
913
case 18
914
CallFunction(EggMobile_SetTargetDestiny)
915
Object.State = EggMobile_ApproachPlayer
916
Object.OscillationValue = -64
917
Helper2.BossInvincible = false
918
break
919
case 19
920
Object.State = EggMobile_ExtendWings
921
break
922
case 20
923
Object.State = EggMobile_RetractWings
924
break
925
case 21
926
CallFunction(EggMobile_SetTargetDestiny)
927
Object.State = EggMobile_ApproachPlayer
928
Object.OscillationValue = -64
929
break
930
case 22
931
Object.State = EggMobile_ExtendWings
932
break
933
case 23
934
Object.State = EggMobile_RetractWings
935
break
936
end switch
937
938
if Helper1.ControllerState < 23
939
Helper1.ControllerState++
940
else
941
Helper1.ControllerState = 1
942
end if
943
Helper1.ControllerDisabled = true
944
end function
945
946
947
function Helper1Controller_ThreeWings
948
switch Helper1.ControllerState
949
case 0
950
Object.State = EggMobile_MoveToRight
951
Object.OscillationValue = -80
952
Object.XVelocity = 0x18000
953
Helper2.BossInvincible = true
954
break
955
case 1
956
Object.State = EggMobile_MoveToLeft
957
break
958
case 2
959
Object.State = EggMobile_MoveRightToCenter
960
break
961
case 3
962
if Player.XPos > Object.XPos
963
Object.State = EggMobile_MoveToLeft
964
Object.Direction = FACING_LEFT
965
else
966
Object.State = EggMobile_MoveToRight
967
Object.Direction = FACING_RIGHT
968
end if
969
break
970
case 4
971
Object.Oscillation /= 160
972
Object.Oscillation *= 160
973
Object.State = EggMobile_GroundSpinDescend
974
Object.YVelocity = 0xC000
975
Helper1.TargetPos = Object[+3].YPos
976
Helper1.TargetPos += 0x200000
977
Helper2.BossInvincible = false
978
TempValue0 = 4
979
ArrayPos0 = Object.EntityNo
980
ArrayPos0 -= 4
981
while TempValue0 > 0
982
if BossWing[ArrayPos0].Attached == false
983
Helper2.MaxOscillation = TempValue0
984
if Object.Direction == FACING_LEFT
985
Helper2.MaxOscillation += 3
986
else
987
Helper2.MaxOscillation++
988
end if
989
Helper2.MaxOscillation *= 20
990
Helper2.MaxOscillation %= 80
991
TempValue0 = 0
992
end if
993
ArrayPos0++
994
TempValue0--
995
loop
996
break
997
case 5
998
Object.State = EggMobile_StopMovement
999
Helper2.StopTimer = 20
1000
break
1001
case 6
1002
if Object.XPos < Object[+3].XPos
1003
Object.State = EggMobile_GroundSpinRight
1004
Helper1.TargetPos = Object[+3].XPos
1005
Helper1.TargetPos -= 0x140000
1006
Object.OscillationValue = 16
1007
else
1008
Object.State = EggMobile_GroundSpinLeft
1009
Helper1.TargetPos = Object[+3].XPos
1010
Helper1.TargetPos += 0x140000
1011
Object.OscillationValue = -16
1012
end if
1013
Helper2.SfxState = 1
1014
Helper2.SfxUsed = 0
1015
Helper2.SfxTimer = 0
1016
break
1017
case 7
1018
Object.State = EggMobile_StopMovement
1019
Helper2.StopTimer = 60
1020
Object.OscillationValue = 0
1021
break
1022
case 8
1023
if Object.XPos < Helper1.CenterBound
1024
Object.Direction = FACING_LEFT
1025
Object.State = EggMobile_GroundSpinLeft
1026
Helper1.TargetPos = Helper1.LeftBound
1027
Object.OscillationValue = -16
1028
else
1029
Object.Direction = FACING_RIGHT
1030
Object.State = EggMobile_GroundSpinRight
1031
Helper1.TargetPos = Helper1.RightBound
1032
Object.OscillationValue = 16
1033
end if
1034
Helper2.SfxTimer = 0
1035
break
1036
case 9
1037
Object.State = EggMobile_StopMovement
1038
Helper2.StopTimer = 60
1039
Object.OscillationValue = 0
1040
Helper2.SfxState = 2
1041
Helper2.SfxTimer = 0
1042
break
1043
case 10
1044
Object.State = EggMobile_GroundSpinAscend
1045
Object.OscillationValue = -80
1046
Helper1.TargetPos = Object[+3].YPos
1047
Helper1.TargetPos -= 0x240000
1048
break
1049
case 11
1050
Object.State = EggMobile_StopMovement
1051
Helper2.StopTimer = 90
1052
break
1053
case 12
1054
if Object.Direction == FACING_RIGHT
1055
Object.State = EggMobile_MoveToLeft
1056
else
1057
Object.State = EggMobile_MoveToRight
1058
end if
1059
break
1060
case 13
1061
if Object.Direction == FACING_RIGHT
1062
Object.State = EggMobile_MoveToRight
1063
else
1064
Object.State = EggMobile_MoveToLeft
1065
end if
1066
break
1067
case 14
1068
if Object.Direction == FACING_RIGHT
1069
Object.State = EggMobile_MoveLeftToCenter
1070
else
1071
Object.State = EggMobile_MoveRightToCenter
1072
end if
1073
break
1074
case 15
1075
Object.State = EggMobile_HandleWingThrowATK
1076
Helper2.SecondaryState = 0
1077
Helper2.BossInvincible = true
1078
break
1079
case 16
1080
Object.State = EggMobile_WingThrowVertical
1081
Helper2.AnimSpeedState = 0
1082
Helper2.WingSpawnXPos = Player.XPos
1083
Helper2.WingSpawnXPos >>= 16
1084
Helper2.WingSpawnXPos &= 3
1085
Helper2.WingSpawnXPos <<= 2
1086
BossWing[-4].Type = TypeName[Blank Object]
1087
BossWing[-3].Type = TypeName[Blank Object]
1088
BossWing[-2].Type = TypeName[Blank Object]
1089
BossWing[-1].Type = TypeName[Blank Object]
1090
Helper2.BossInvincible = true
1091
break
1092
case 17
1093
Object.State = EggMobile_RestoreWings
1094
Helper2.BossInvincible = true
1095
break
1096
case 18
1097
CallFunction(EggMobile_SetTargetDestiny)
1098
Object.State = EggMobile_ApproachPlayer
1099
Object.OscillationValue = -64
1100
Helper2.BossInvincible = false
1101
break
1102
case 19
1103
Object.State = EggMobile_ExtendWings
1104
break
1105
case 20
1106
Object.State = EggMobile_RetractWings
1107
break
1108
case 21
1109
CallFunction(EggMobile_SetTargetDestiny)
1110
Object.State = EggMobile_ApproachPlayer
1111
Object.OscillationValue = -64
1112
break
1113
case 22
1114
Object.State = EggMobile_ExtendWings
1115
break
1116
case 23
1117
Object.State = EggMobile_RetractWings
1118
break
1119
end switch
1120
1121
if Helper1.ControllerState < 23
1122
Helper1.ControllerState++
1123
else
1124
Helper1.ControllerState = 0
1125
end if
1126
Helper1.ControllerDisabled = true
1127
end function
1128
1129
1130
function Helper1Controller_TwoWings
1131
switch Helper1.ControllerState
1132
case 0
1133
Object.State = EggMobile_MoveToRight
1134
Object.OscillationValue = -106
1135
Object.XVelocity = 0x1A000
1136
Helper2.BossInvincible = true
1137
break
1138
case 1
1139
Object.State = EggMobile_MoveToLeft
1140
break
1141
case 2
1142
Object.State = EggMobile_MoveRightToCenter
1143
break
1144
case 3
1145
Object.State = EggMobile_HandleWingThrowATK
1146
Helper2.SecondaryState = 0
1147
break
1148
case 4
1149
Object.State = EggMobile_WingThrowVertical
1150
Helper2.AnimSpeedState = 0
1151
Helper2.WingSpawnXPos = Player.XPos
1152
Helper2.WingSpawnXPos >>= 16
1153
Helper2.WingSpawnXPos &= 3
1154
Helper2.WingSpawnXPos <<= 2
1155
BossWing[-4].Type = TypeName[Blank Object]
1156
BossWing[-3].Type = TypeName[Blank Object]
1157
BossWing[-2].Type = TypeName[Blank Object]
1158
BossWing[-1].Type = TypeName[Blank Object]
1159
Helper2.BossInvincible = true
1160
break
1161
case 5
1162
Object.State = EggMobile_RestoreWings
1163
Helper2.BossInvincible = true
1164
break
1165
case 6
1166
CallFunction(EggMobile_SetTargetDestiny)
1167
Object.State = EggMobile_ApproachPlayer
1168
Object.OscillationValue = -64
1169
Helper2.BossInvincible = false
1170
break
1171
case 7
1172
Object.State = EggMobile_ExtendWings
1173
break
1174
case 8
1175
Object.State = EggMobile_RetractWings
1176
break
1177
case 9
1178
CallFunction(EggMobile_SetTargetDestiny)
1179
Object.State = EggMobile_ApproachPlayer
1180
Object.OscillationValue = -64
1181
break
1182
case 10
1183
Object.State = EggMobile_ExtendWings
1184
break
1185
case 11
1186
Object.State = EggMobile_RetractWings
1187
break
1188
end switch
1189
1190
if Helper1.ControllerState < 11
1191
Helper1.ControllerState++
1192
else
1193
Helper1.ControllerState = 0
1194
end if
1195
Helper1.ControllerDisabled = true
1196
end function
1197
1198
1199
function Helper1Controller_OneWing
1200
switch Helper1.ControllerState
1201
case 0
1202
Object.State = EggMobile_MoveToRight
1203
Object.OscillationValue = -160
1204
Object.XVelocity = 0x1A000
1205
Helper2.BossInvincible = true
1206
break
1207
case 1
1208
Object.State = EggMobile_MoveToLeft
1209
break
1210
case 2
1211
Object.State = EggMobile_MoveRightToCenter
1212
break
1213
case 3
1214
Object.State = EggMobile_HandleWingThrowATK
1215
Helper2.SecondaryState = 4
1216
Object.Oscillation >>= 6
1217
Object.Oscillation <<= 6
1218
Object.Timer = 0
1219
Helper1.TargetPos = Object[+3].YPos
1220
Helper1.TargetPos -= 0x440000
1221
break
1222
case 4
1223
Object.State = EggMobile_WingThrowDiagonal
1224
Helper2.AnimSpeedState = 0
1225
BossWing[-4].Type = TypeName[Blank Object]
1226
BossWing[-3].Type = TypeName[Blank Object]
1227
BossWing[-2].Type = TypeName[Blank Object]
1228
BossWing[-1].Type = TypeName[Blank Object]
1229
Object.Timer = 0
1230
Object.WingOffset = 0
1231
break
1232
case 5
1233
Object.State = EggMobile_RestoreWings
1234
break
1235
case 6
1236
Object.State = EggMobile_MoveToRight
1237
Object.OscillationValue = -160
1238
break
1239
case 7
1240
Object.State = EggMobile_MoveToLeft
1241
break
1242
case 8
1243
Object.State = EggMobile_MoveRightToCenter
1244
break
1245
case 9
1246
if Player.XPos > Object.XPos
1247
Object.State = EggMobile_MoveToLeft
1248
Object.Direction = FACING_LEFT
1249
else
1250
Object.State = EggMobile_MoveToRight
1251
Object.Direction = FACING_RIGHT
1252
end if
1253
break
1254
case 10
1255
Object.State = EggMobile_PreparePogoAttack
1256
break
1257
case 11
1258
Object.State = EggMobile_PogoAttackAscend
1259
Helper2.BossInvincible = false
1260
break
1261
case 12
1262
if Object.Direction == FACING_RIGHT
1263
Object.State = EggMobile_PogoAttackMoveLeft
1264
Helper1.TargetPos = Object.XPos
1265
Helper1.TargetPos -= 0x290000
1266
else
1267
Object.State = EggMobile_PogoAttackMoveRight
1268
Helper1.TargetPos = Object.XPos
1269
Helper1.TargetPos += 0x290000
1270
end if
1271
break
1272
case 13
1273
if Object.Direction == FACING_RIGHT
1274
Object.State = EggMobile_PogoAttackMoveLeft
1275
Helper1.TargetPos -= 0x520000
1276
else
1277
Object.State = EggMobile_PogoAttackMoveRight
1278
Helper1.TargetPos += 0x520000
1279
end if
1280
break
1281
case 14
1282
if Object.Direction == FACING_RIGHT
1283
Object.State = EggMobile_PogoAttackMoveLeft
1284
Helper1.TargetPos -= 0x520000
1285
else
1286
Object.State = EggMobile_PogoAttackMoveRight
1287
Helper1.TargetPos += 0x520000
1288
end if
1289
break
1290
case 15
1291
if Object.Direction == FACING_RIGHT
1292
Object.State = EggMobile_PogoAttackMoveRight
1293
else
1294
Object.State = EggMobile_PogoAttackMoveLeft
1295
end if
1296
break
1297
case 16
1298
if Object.Direction == FACING_RIGHT
1299
Object.State = EggMobile_PogoAttackMoveRight
1300
Helper1.TargetPos += 0x520000
1301
else
1302
Object.State = EggMobile_PogoAttackMoveLeft
1303
Helper1.TargetPos -= 0x520000
1304
end if
1305
break
1306
case 17
1307
if Object.Direction == FACING_RIGHT
1308
Object.State = EggMobile_PogoAttackMoveRight
1309
Helper1.TargetPos += 0x520000
1310
else
1311
Object.State = EggMobile_PogoAttackMoveLeft
1312
Helper1.TargetPos -= 0x520000
1313
end if
1314
break
1315
case 18
1316
Object.State = EggMobile_PogoAttackDescend
1317
break
1318
end switch
1319
1320
if Helper1.ControllerState < 18
1321
Helper1.ControllerState++
1322
else
1323
Helper1.ControllerState = 0
1324
end if
1325
Helper1.ControllerDisabled = true
1326
end function
1327
1328
1329
function EggMobile_Destroyed
1330
switch Helper2.SecondaryState
1331
case 0
1332
Object.Timer++
1333
if Object.Timer == 90
1334
Object.Timer = 0
1335
Object.XVelocity = 0x14000
1336
Helper1.TargetPos = Object.YPos
1337
1338
Player.ControlMode = CONTROLMODE_NONE
1339
Player.JumpHold = false
1340
Player.Right = true
1341
Player.Left = false
1342
Player.Up = false
1343
Player.Down = false
1344
1345
Helper2.SecondaryState++
1346
if Stage.PlayerListPos == PLAYER_SONIC_A // PLAYER_SONIC in origins
1347
if Stage.DebugMode == false
1348
SetAchievement(9, 100)
1349
end if
1350
end if
1351
end if
1352
break
1353
1354
case 1
1355
Object.XPos += Object.XVelocity
1356
Sin(Object.YPos, Object.Timer)
1357
Object.YPos <<= 9
1358
Object.YPos += Helper1.TargetPos
1359
Helper1.TargetPos += 0x4000
1360
Object.Timer += 4
1361
Object.Timer &= 511
1362
1363
TempValue0 = Helper1.RightBound
1364
TempValue0 += 0x800000
1365
if Object.XPos > TempValue0
1366
Object.Timer = 0
1367
Object[+4].Type = TypeName[Amy Rose]
1368
Helper2.SecondaryState++
1369
end if
1370
1371
if Player.Right == true
1372
TempValue0 = Player.CollisionRight
1373
TempValue0 <<= 16
1374
TempValue0 += Player.XPos
1375
1376
TempValue1 = Helper2.CutsceneRightBound
1377
TempValue1 <<= 16
1378
if TempValue0 > TempValue1
1379
Player.Left = true
1380
Player.Right = false
1381
end if
1382
else
1383
TempValue0 = Helper1.CenterBound
1384
TempValue0 += 0x400000
1385
if Player.XPos < TempValue0
1386
Player.XPos = TempValue0
1387
Player.Speed = 0
1388
Player.Left = false
1389
end if
1390
end if
1391
break
1392
1393
case 2
1394
TempValue0 = Helper1.CenterBound
1395
TempValue0 += 0x400000
1396
if Player.XPos < TempValue0
1397
Player.XPos = TempValue0
1398
Player.Speed = 0
1399
Player.Left = false
1400
end if
1401
break
1402
end switch
1403
1404
TempValue0 = Object.AnimationTimer
1405
TempValue0 &= 1
1406
if TempValue0 == 0
1407
if Helper2.SecondaryState > 0
1408
Screen.ShakeY = 2
1409
end if
1410
Rand(TempValue0, 300)
1411
TempValue0 -= 150
1412
TempValue0 <<= 16
1413
TempValue0 += Object[+3].XPos
1414
Rand(TempValue1, 200)
1415
TempValue1 -= 100
1416
TempValue1 <<= 16
1417
TempValue1 += Object[+3].YPos
1418
CreateTempObject(TypeName[Explosion], 0, TempValue0, TempValue1)
1419
if Object.AnimationTimer == 0
1420
if Object[+5].Type == TypeName[Blank Object]
1421
PlaySfx(SFX_G_EXPLOSION, false)
1422
end if
1423
end if
1424
end if
1425
Object.AnimationTimer++
1426
Object.AnimationTimer &= 7
1427
end function
1428
1429
1430
function EggMobile_Destroyed_FinalFever
1431
switch Helper2.SecondaryState
1432
case 0
1433
Object.Timer++
1434
if Object.Timer == 30
1435
Object.Timer = 0
1436
Object.XVelocity = 0x20000
1437
Helper1.TargetPos = Object.YPos
1438
Helper2.SecondaryState++
1439
end if
1440
break
1441
1442
case 1
1443
Object.XPos += Object.XVelocity
1444
Sin(Object.YPos, Object.Timer)
1445
Object.YPos <<= 9
1446
Object.YPos += Helper1.TargetPos
1447
Helper1.TargetPos += 0x4000
1448
Object.Timer += 4
1449
Object.Timer &= 511
1450
TempValue0 = Helper1.RightBound
1451
TempValue0 += 0x580000
1452
if Object.XPos > TempValue0
1453
Helper2.SecondaryState++
1454
Object.Timer = 0
1455
Helper2.CutsceneRightBound += 64
1456
Player.ControlMode = CONTROLMODE_NONE
1457
Player.JumpHold = false
1458
Player.Right = true
1459
Player.Left = false
1460
Player.Up = false
1461
Player.Down = false
1462
end if
1463
break
1464
1465
case 2
1466
Player.Right = true
1467
Object.Timer++
1468
if Object.Timer == 120
1469
Object[+5].Type = TypeName[Fade Screen]
1470
Object[+5].PropertyValue = CUTSCENE_FINALFEVER
1471
end if
1472
break
1473
end switch
1474
1475
TempValue0 = Object.AnimationTimer
1476
TempValue0 &= 3
1477
if TempValue0 == 0
1478
Rand(TempValue0, 64)
1479
TempValue0 -= 32
1480
TempValue0 <<= 16
1481
TempValue0 += Object.XPos
1482
1483
Rand(TempValue1, 64)
1484
TempValue1 -= 32
1485
TempValue1 <<= 16
1486
TempValue1 += Object.YPos
1487
CreateTempObject(TypeName[Explosion], 0, TempValue0, TempValue1)
1488
if Object.AnimationTimer == 0
1489
if Object[+5].Type == TypeName[Blank Object]
1490
PlaySfx(SFX_G_EXPLOSION, false)
1491
end if
1492
end if
1493
end if
1494
Object.AnimationTimer++
1495
Object.AnimationTimer &= 7
1496
end function
1497
1498
1499
function EggMobile_HandleWingRotation
1500
ArrayPos0 = Object.EntityNo
1501
ArrayPos0 -= 4
1502
TempValue0 = 0
1503
TempValue1 = Object.Rotation
1504
while TempValue0 < 4
1505
if BossWing[ArrayPos0].Attached == true
1506
Object[ArrayPos0].Rotation = TempValue1
1507
Sin(Object[ArrayPos0].XPos, TempValue1)
1508
Object[ArrayPos0].XPos *= Object.WingOffset
1509
Object[ArrayPos0].XPos &= 0xFFFF0000 // Truncate the value
1510
Object[ArrayPos0].XPos += Object.XPos
1511
Cos(Object[ArrayPos0].YPos, TempValue1)
1512
TempValue2 = Object.WingOffset
1513
FlipSign(TempValue2)
1514
Object[ArrayPos0].YPos *= TempValue2
1515
Object[ArrayPos0].YPos &= 0xFFFF0000 // Truncate the value
1516
Object[ArrayPos0].YPos += Object.YPos
1517
end if
1518
TempValue1 += 128
1519
TempValue1 &= 511
1520
ArrayPos0++
1521
TempValue0++
1522
loop
1523
end function
1524
1525
1526
function EggMobile_DropDamagedWing
1527
TempValue6 = Object[ArrayPos0].XPos
1528
TempValue6 -= Object.XPos
1529
TempValue6 -= 0x180000
1530
if TempValue0 < 0
1531
FlipSign(TempValue6)
1532
end if
1533
1534
TempValue7 = Object[ArrayPos0].YPos
1535
TempValue7 -= Object.YPos
1536
TempValue7 -= 0x440000
1537
if TempValue7 < 0
1538
FlipSign(TempValue7)
1539
end if
1540
TempValue6 += TempValue7
1541
TempValue6 >>= 16
1542
end function
1543
1544
1545
function EggMobile_HandleAnimations
1546
TempValue0 = Object[+1].AnimationTimer
1547
TempValue0 >>= 2
1548
TempValue0 &= 1
1549
if TempValue0 == 1
1550
TempValue0 = Object[+1].AnimationTimer
1551
TempValue0 >>= 3
1552
TempValue0 += 11
1553
DrawSprite(TempValue0)
1554
TempValue0 += 5
1555
DrawSprite(TempValue0)
1556
TempValue0 += 5
1557
DrawSprite(TempValue0)
1558
TempValue0 += 5
1559
DrawSprite(TempValue0)
1560
TempValue0 += 5
1561
DrawSprite(TempValue0)
1562
TempValue0 += 5
1563
DrawSprite(TempValue0)
1564
TempValue0 += 5
1565
DrawSprite(TempValue0)
1566
end if
1567
Object[+1].AnimationTimer++
1568
Object[+1].AnimationTimer %= 40
1569
end function
1570
1571
1572
sub ObjectMain
1573
Object.Oscillation += Object.OscillationValue
1574
if Object.Oscillation < 0
1575
Object.Oscillation += 5120
1576
end if
1577
Object.Oscillation %= 5120
1578
1579
Object.Rotation = Object.Oscillation
1580
Object.Rotation /= 10
1581
1582
if Helper1.ControllerDisabled == false
1583
CallFunction(Helper1.Controller)
1584
end if
1585
1586
CallFunction(Object.State)
1587
CallFunction(EggMobile_HandleWingRotation)
1588
if Object.InvulnerableTimer > 0
1589
if Object.InvulnerableTimer > 20
1590
TempValue0 = Object.InvulnerableTimer
1591
TempValue0 &= 15
1592
if TempValue0 == 0
1593
1594
Rand(TempValue0, 48)
1595
TempValue0 -= 24
1596
TempValue0 <<= 16
1597
TempValue0 += Object.XPos
1598
1599
Rand(TempValue1, 48)
1600
TempValue1 -= 32
1601
TempValue1 <<= 16
1602
TempValue1 += Object.YPos
1603
1604
CreateTempObject(TypeName[Boss Spark], 0, TempValue0, TempValue1)
1605
Object[TempObjectPos].InkEffect = INK_NONE
1606
Object[TempObjectPos].Alpha = 248
1607
1608
Rand(TempValue0, 48)
1609
TempValue0 -= 24
1610
TempValue0 <<= 16
1611
TempValue0 += Object.XPos
1612
1613
Rand(TempValue1, 48)
1614
TempValue1 -= 32
1615
TempValue1 <<= 16
1616
TempValue1 += Object.YPos
1617
1618
CreateTempObject(TypeName[Boss Spark], 0, TempValue0, TempValue1)
1619
Object[TempObjectPos].InkEffect = INK_NONE
1620
Object[TempObjectPos].Alpha = 248
1621
end if
1622
end if
1623
Object.InvulnerableTimer--
1624
end if
1625
1626
if Object.OscillationValue != 0
1627
switch Helper2.SfxState
1628
case 0
1629
Helper2.SfxTimer += 6
1630
if Helper2.SfxTimer == 42
1631
PlayStageSFX(SFX_S_WINGROTATE, false)
1632
end if
1633
if Helper2.SfxTimer > 59
1634
Helper2.SfxTimer -= 60
1635
PlayStageSFX(SFX_S_WINGROTATE, false)
1636
end if
1637
break
1638
1639
case 1
1640
Helper2.SfxTimer += 3
1641
if Helper2.SfxTimer > 59
1642
Helper2.SfxTimer -= 60
1643
if Helper2.SfxUsed == 0
1644
PlayStageSFX(SFX_S_WINGROTATE, false)
1645
Helper2.SfxUsed = 1
1646
else
1647
PlayStageSFX(SFX_S_MECHSTEP, false)
1648
Helper2.SfxUsed = 0
1649
end if
1650
end if
1651
break
1652
1653
case 2
1654
Helper2.SfxTimer += 8
1655
if Helper2.SfxTimer > 59
1656
Helper2.SfxTimer -= 60
1657
PlayStageSFX(SFX_S_WINGROTATE, false)
1658
end if
1659
break
1660
1661
case 3
1662
Helper2.SfxTimer += 10
1663
if Helper2.SfxTimer > 59
1664
Helper2.SfxTimer -= 60
1665
PlayStageSFX(SFX_S_WINGROTATE, false)
1666
end if
1667
break
1668
1669
case 4
1670
Helper2.SfxTimer += 16
1671
if Helper2.SfxTimer > 59
1672
Helper2.SfxTimer -= 60
1673
PlayStageSFX(SFX_S_WINGROTATE, false)
1674
end if
1675
break
1676
end switch
1677
end if
1678
end sub
1679
1680
1681
sub ObjectPlayerInteraction
1682
if Helper2.BossInvincible == false
1683
if Object.InvulnerableTimer == 0
1684
#platform: Use_Standalone
1685
PlayerObjectCollision(C_TOUCH, -24, -24, 24, 24)
1686
#endplatform
1687
#platform: Use_Origins
1688
PlayerObjectCollision(C_ENEMY, -24, -24, 24, 24)
1689
#endplatform
1690
if CheckResult == true
1691
CheckResult = false
1692
if Player.Animation == ANI_JUMPING
1693
CheckResult = true
1694
end if
1695
if Player.Animation == ANI_SPINDASH
1696
CheckResult = true
1697
end if
1698
#platform: Use_Origins
1699
if Stage.PlayerListPos == PLAYER_AMY
1700
if Player.Animation == ANI_HAMMER_JUMP
1701
CheckResult = true
1702
end if
1703
if Player.Animation == ANI_HAMMER_DASH
1704
CheckResult = true
1705
end if
1706
end if
1707
TempValue0 = false
1708
if Stage.PlayerListPos == PLAYER_KNUCKLES
1709
if Player.Animation == ANI_GLIDING
1710
CheckResult = true
1711
TempValue0 = true
1712
end if
1713
if Player.Animation == ANI_GLIDING_STOP
1714
CheckResult = true
1715
TempValue0 = true
1716
end if
1717
end if
1718
#endplatform
1719
if CheckResult == false
1720
CallFunction(Player_Hit)
1721
if Player.State == Player_State_GotHit
1722
Object.Animation = EGGANI_LAUGH
1723
end if
1724
else
1725
Object.Oscillation >>= 5
1726
Object.Oscillation <<= 5
1727
#platform: Use_Standalone
1728
FlipSign(Player.Speed)
1729
FlipSign(Player.XVelocity)
1730
FlipSign(Player.YVelocity)
1731
#endplatform
1732
#platform: Use_Origins
1733
if TempValue0 == false
1734
FlipSign(Player.Speed)
1735
FlipSign(Player.XVelocity)
1736
FlipSign(Player.YVelocity)
1737
else
1738
FlipSign(Player.YVelocity)
1739
Player.XVelocity = 0x30000
1740
if Player.XPos < Object.XPos
1741
FlipSign(Player.XVelocity)
1742
end if
1743
1744
Player.Speed = Player.XVelocity
1745
if Player.Animation == ANI_GLIDING
1746
Player.Animation = ANI_GLIDING_DROP
1747
Player.State = Player_State_GlideDrop
1748
end if
1749
end if
1750
#endplatform
1751
TempValue0 = 0
1752
ArrayPos0 = Object.EntityNo
1753
ArrayPos0--
1754
TempValue1 = 0x10000
1755
while TempValue0 < 4
1756
if BossWing[ArrayPos0].Attached == true
1757
CallFunction(EggMobile_DropDamagedWing)
1758
if TempValue6 < TempValue1
1759
ArrayPos1 = ArrayPos0
1760
TempValue1 = TempValue6
1761
end if
1762
end if
1763
ArrayPos0--
1764
TempValue0++
1765
loop
1766
1767
if TempValue1 < 0x10000
1768
BossWing[ArrayPos1].Attached = false
1769
BossWing[ArrayPos1].State = BOSSWING_FALL_DIAGONAL
1770
BossWing[ArrayPos1].Priority = PRIORITY_ACTIVE
1771
if BossWing[ArrayPos1].XPos > Object.XPos
1772
BossWing[ArrayPos1].XVelocity = 0x10000
1773
else
1774
BossWing[ArrayPos1].XVelocity = -0x10000
1775
end if
1776
BossWing[ArrayPos1].YVelocity = -0x30000
1777
end if
1778
Helper1.BossHealth--
1779
switch Helper1.BossHealth
1780
case 0
1781
#platform: Use_Origins
1782
EngineCallback(NOTIFY_KILL_BOSS)
1783
#endplatform
1784
Stage.TimeEnabled = false
1785
Player.Score += 1000
1786
Helper2.BossInvincible = true
1787
Object.Animation = EGGANI_DEFEAT
1788
Object.Timer = 0
1789
1790
if HUD.CurrentTimePeriod == TIME_BAD_FUTURE
1791
Object.State = EggMobile_Destroyed
1792
else
1793
// Before Final Fever was cut, this would have set the state to EggMobile_Destroyed_FinalFever instead
1794
// Now there's a redundant time period check, what a shame
1795
Object.State = EggMobile_Destroyed
1796
end if
1797
1798
Object[+3].State++
1799
Object[+3].Alpha >>= 1
1800
Object[+3].Alpha <<= 1
1801
Helper2.SecondaryState = 0
1802
Object.AnimationTimer = 0
1803
Helper1.ControllerDisabled = true
1804
Helper2.SfxState = 5
1805
1806
#platform: Use_Haptics
1807
HapticEffect(90, 0, 0, 0)
1808
#endplatform
1809
1810
break
1811
case 1
1812
Object.InvulnerableTimer = 120
1813
Helper1.ControllerState = 0
1814
Helper1.ControllerDisabled = true
1815
Object.State = EggMobile_Hit
1816
Object.YVelocity = 0x10000
1817
Helper1.Controller = Helper1Controller_OneWing
1818
Object.Timer = 0
1819
Object.Animation = EGGANI_HURT
1820
Helper2.SfxState = 4
1821
PlayStageSFX(SFX_S_BOSSHIT, false)
1822
1823
#platform: Use_Haptics
1824
HapticEffect(75, 0, 0, 0)
1825
#endplatform
1826
1827
break
1828
case 2
1829
Object.InvulnerableTimer = 120
1830
Helper1.ControllerState = 0
1831
Helper1.ControllerDisabled = true
1832
Object.State = EggMobile_Hit
1833
Object.YVelocity = 0xE000
1834
Helper1.Controller = Helper1Controller_TwoWings
1835
Object.Timer = 0
1836
Object.Animation = EGGANI_HURT
1837
Helper2.SfxState = 3
1838
PlayStageSFX(SFX_S_BOSSHIT, false)
1839
1840
#platform: Use_Haptics
1841
HapticEffect(75, 0, 0, 0)
1842
#endplatform
1843
1844
break
1845
case 3
1846
Object.InvulnerableTimer = 120
1847
Helper1.ControllerState = 0
1848
Helper1.ControllerDisabled = true
1849
Object.State = EggMobile_Hit
1850
Object.YVelocity = 0xC000
1851
Helper1.Controller = Helper1Controller_ThreeWings
1852
Object.Timer = 0
1853
Object.Animation = EGGANI_HURT
1854
Helper2.SfxState = 2
1855
PlayStageSFX(SFX_S_BOSSHIT, false)
1856
1857
#platform: Use_Haptics
1858
HapticEffect(75, 0, 0, 0)
1859
#endplatform
1860
1861
break
1862
end switch
1863
end if
1864
end if
1865
end if
1866
end if
1867
1868
TempValue0 = Player.CollisionRight
1869
TempValue0 <<= 16
1870
TempValue0 += Player.XPos
1871
TempValue1 = Helper2.CutsceneRightBound
1872
TempValue1 <<= 16
1873
if TempValue0 > TempValue1
1874
Player.XVelocity = 0
1875
Player.Speed = 0
1876
1877
Player.XPos = TempValue1
1878
TempValue0 = Player.CollisionRight
1879
TempValue0 <<= 16
1880
Player.XPos -= TempValue0
1881
end if
1882
end sub
1883
1884
1885
sub ObjectDraw
1886
TempValue0 = Object.InvulnerableTimer
1887
TempValue0 &= 1
1888
if TempValue0 == 0
1889
switch Object.Animation
1890
case EGGANI_IDLE
1891
DrawSprite(0)
1892
CallFunction(EggMobile_HandleAnimations)
1893
if Object.OscillationValue != 0
1894
TempValue0 = Oscillation
1895
TempValue0 &= 7
1896
TempValue0 >>= 2
1897
TempValue0 += 2
1898
DrawSprite(TempValue0)
1899
end if
1900
DrawSprite(6)
1901
DrawSprite(10)
1902
break
1903
1904
case EGGANI_HURT
1905
DrawSprite(0)
1906
CallFunction(EggMobile_HandleAnimations)
1907
if Object.OscillationValue != 0
1908
TempValue0 = Oscillation
1909
TempValue0 &= 7
1910
TempValue0 >>= 2
1911
TempValue0 += 2
1912
DrawSprite(TempValue0)
1913
end if
1914
DrawSprite(9)
1915
DrawSprite(10)
1916
if Object.AnimationTimer < 120
1917
Object.AnimationTimer++
1918
else
1919
Object.AnimationTimer = 0
1920
Object.Animation = EGGANI_IDLE
1921
end if
1922
break
1923
1924
case EGGANI_LAUGH
1925
DrawSprite(0)
1926
CallFunction(EggMobile_HandleAnimations)
1927
if Object.OscillationValue != 0
1928
TempValue0 = Oscillation
1929
TempValue0 &= 7
1930
TempValue0 >>= 2
1931
TempValue0 += 2
1932
DrawSprite(TempValue0)
1933
end if
1934
TempValue0 = Object.AnimationTimer
1935
TempValue0 &= 15
1936
TempValue0 >>= 3
1937
TempValue0 += 6
1938
DrawSprite(TempValue0)
1939
if Object.AnimationTimer < 120
1940
Object.AnimationTimer++
1941
else
1942
Object.AnimationTimer = 0
1943
Object.Animation = EGGANI_IDLE
1944
end if
1945
DrawSprite(10)
1946
break
1947
1948
case EGGANI_DEFEAT
1949
DrawSprite(1)
1950
DrawSprite(8)
1951
break
1952
end switch
1953
end if
1954
end sub
1955
1956
1957
sub ObjectStartup
1958
LoadSpriteSheet("R8/Objects3.gif")
1959
SpriteFrame(-36, -60, 88, 112, 1, 1) // #0 - Egg Spinner
1960
SpriteFrame(-36, -36, 72, 72, 1, 114) // #1 - Egg Spinner Destroyed
1961
SpriteFrame(-36, -36, 32, 16, 90, 1) // #2 - Egg Spinner Details frame 0
1962
SpriteFrame(-36, -36, 32, 16, 123, 1) // #3 - Egg Spinner Details frame 1
1963
1964
SpriteFrame(-18, -28, 36, 32, 90, 67) // #4 - Eggman Reveal frame 0
1965
SpriteFrame(-18, -28, 36, 32, 127, 67) // #5 - Eggman Reveal frame 1
1966
SpriteFrame(-18, -28, 36, 32, 164, 67) // #6 - Eggman Idle frame 0
1967
SpriteFrame(-18, -28, 36, 32, 201, 67) // #7 - Eggman Idle frame 1
1968
SpriteFrame(-22, -28, 44, 32, 166, 100) // #8 - Eggman Hurt frame 0
1969
SpriteFrame(-22, -28, 44, 32, 211, 100) // #9 - Eggman Hurt frame 1
1970
SpriteFrame(-12, -28, 32, 32, 133, 100) // #10 - Egg Spinner Cockpit
1971
1972
SpriteFrame(-8, 28, 25, 17, 26, 237) // #11 - Egg Spinner Bottom Lights frame 0
1973
SpriteFrame(-8, 28, 25, 17, 52, 237) // #12 - Egg Spinner Bottom Lights frame 1
1974
SpriteFrame(-8, 28, 25, 17, 78, 237) // #13 - Egg Spinner Bottom Lights frame 2
1975
SpriteFrame(-8, 28, 25, 17, 104, 237) // #14 - Egg Spinner Bottom Lights frame 3
1976
SpriteFrame(-8, 28, 25, 17, 112, 219) // #15 - Egg Spinner Bottom Lights frame 4
1977
1978
SpriteFrame(-30, 23, 12, 11, 42, 225) // #16 - Egg Spinner Bottom Left Lights frame 0
1979
SpriteFrame(-30, 23, 12, 11, 55, 225) // #17 - Egg Spinner Bottom Left Lights frame 1
1980
SpriteFrame(-30, 23, 12, 11, 68, 225) // #18 - Egg Spinner Bottom Left Lights frame 2
1981
SpriteFrame(-30, 23, 12, 11, 81, 225) // #19 - Egg Spinner Bottom Left Lights frame 3
1982
SpriteFrame(-30, 23, 12, 11, 94, 225) // #20 - Egg Spinner Bottom Left Lights frame 4
1983
1984
SpriteFrame(49, -9, 2, 2, 27, 247) // #21 - Egg Spinner Right Lights frame 0
1985
SpriteFrame(49, -9, 2, 2, 53, 247) // #22 - Egg Spinner Right Lights frame 1
1986
SpriteFrame(49, -9, 2, 2, 79, 247) // #23 - Egg Spinner Right Lights frame 2
1987
SpriteFrame(49, -9, 2, 2, 105, 247) // #24 - Egg Spinner Right Lights frame 3
1988
SpriteFrame(49, -9, 2, 2, 113, 229) // #25 - Egg Spinner Right Lights frame 4
1989
1990
SpriteFrame(-19, -19, 8, 20, 42, 204) // #26 - Egg Spinner Cockpit Left Lights frame 0
1991
SpriteFrame(-19, -19, 8, 20, 51, 204) // #27 - Egg Spinner Cockpit Left Lights frame 1
1992
SpriteFrame(-19, -19, 8, 20, 60, 204) // #28 - Egg Spinner Cockpit Left Lights frame 2
1993
SpriteFrame(-19, -19, 8, 20, 69, 204) // #29 - Egg Spinner Cockpit Left Lights frame 3
1994
SpriteFrame(-19, -19, 8, 20, 78, 204) // #30 - Egg Spinner Cockpit Left Lights frame 4
1995
1996
SpriteFrame(17, -13, 4, 10, 87, 206) // #31 - Egg Spinner Cockpit Right Lights frame 0
1997
SpriteFrame(17, -13, 4, 10, 92, 206) // #32 - Egg Spinner Cockpit Right Lights frame 1
1998
SpriteFrame(17, -13, 4, 10, 97, 206) // #33 - Egg Spinner Cockpit Right Lights frame 2
1999
SpriteFrame(17, -13, 4, 10, 102, 206) // #34 - Egg Spinner Cockpit Right Lights frame 3
2000
SpriteFrame(17, -13, 4, 10, 107, 206) // #35 - Egg Spinner Cockpit Right Lights frame 4
2001
2002
SpriteFrame(14, -59, 4, 3, 107, 217) // #36 - Egg Spinner Top Lights frame 0
2003
SpriteFrame(14, -59, 4, 3, 107, 221) // #37 - Egg Spinner Top Lights frame 1
2004
SpriteFrame(14, -59, 4, 3, 107, 225) // #38 - Egg Spinner Top Lights frame 2
2005
SpriteFrame(14, -59, 4, 3, 107, 229) // #39 - Egg Spinner Top Lights frame 3
2006
SpriteFrame(14, -59, 4, 3, 107, 233) // #40 - Egg Spinner Top Lights frame 4
2007
2008
SpriteFrame(32, -47, 5, 3, 112, 215) // #41 - Egg Spinner Top Right Lights frame 0
2009
SpriteFrame(32, -47, 5, 3, 117, 215) // #42 - Egg Spinner Top Right Lights frame 1
2010
SpriteFrame(32, -47, 5, 3, 122, 215) // #43 - Egg Spinner Top Right Lights frame 2
2011
SpriteFrame(32, -47, 5, 3, 127, 215) // #44 - Egg Spinner Top Right Lights frame 3
2012
SpriteFrame(32, -47, 5, 3, 132, 215) // #45 - Egg Spinner Top Right Lights frame 4
2013
2014
ArrayPos0 = 32
2015
while ArrayPos0 < 1056
2016
if Object[ArrayPos0].Type == TypeName[Egg Mobile]
2017
Object[ArrayPos0].DrawOrder = 2
2018
Object[ArrayPos0].Type = TypeName[Blank Object]
2019
2020
ArrayPos0--
2021
Object[ArrayPos0].Type = TypeName[Blank Object]
2022
BossWing[ArrayPos0].Attached = true
2023
Object[ArrayPos0].DrawOrder = 2
2024
2025
ArrayPos0--
2026
Object[ArrayPos0].Type = TypeName[Blank Object]
2027
BossWing[ArrayPos0].Attached = true
2028
Object[ArrayPos0].DrawOrder = 2
2029
2030
ArrayPos0--
2031
Object[ArrayPos0].Type = TypeName[Blank Object]
2032
BossWing[ArrayPos0].Attached = true
2033
Object[ArrayPos0].DrawOrder = 2
2034
2035
ArrayPos0--
2036
Object[ArrayPos0].Type = TypeName[Blank Object]
2037
BossWing[ArrayPos0].Attached = true
2038
Object[ArrayPos0].DrawOrder = 2
2039
ArrayPos0 += 4
2040
end if
2041
ArrayPos0++
2042
loop
2043
end sub
2044
2045
2046
// ========================
2047
// Editor Subs
2048
// ========================
2049
2050
sub RSDKDraw
2051
DrawSprite(0)
2052
DrawSprite(2)
2053
DrawSprite(6)
2054
DrawSprite(10)
2055
DrawSprite(11)
2056
DrawSprite(16)
2057
DrawSprite(21)
2058
DrawSprite(26)
2059
DrawSprite(31)
2060
DrawSprite(36)
2061
DrawSprite(41)
2062
end sub
2063
2064
2065
sub RSDKLoad
2066
LoadSpriteSheet("R8/Objects3.gif")
2067
SpriteFrame(-36, -60, 88, 112, 1, 1) // #0 - Egg Spinner
2068
SpriteFrame(-36, -36, 72, 72, 1, 114) // #1 - Egg Spinner Destroyed
2069
SpriteFrame(-36, -36, 32, 16, 90, 1) // #2 - Egg Spinner Details frame 0
2070
SpriteFrame(-36, -36, 32, 16, 123, 1) // #3 - Egg Spinner Details frame 1
2071
2072
SpriteFrame(-18, -28, 36, 32, 90, 67) // #4 - Eggman Reveal frame 0
2073
SpriteFrame(-18, -28, 36, 32, 127, 67) // #5 - Eggman Reveal frame 1
2074
SpriteFrame(-18, -28, 36, 32, 164, 67) // #6 - Eggman Idle frame 0
2075
SpriteFrame(-18, -28, 36, 32, 201, 67) // #7 - Eggman Idle frame 1
2076
SpriteFrame(-22, -28, 44, 32, 166, 100) // #8 - Eggman Hurt frame 0
2077
SpriteFrame(-22, -28, 44, 32, 211, 100) // #9 - Eggman Hurt frame 1
2078
SpriteFrame(-12, -28, 32, 32, 133, 100) // #10 - Egg Spinner Cockpit
2079
2080
SpriteFrame(-8, 28, 25, 17, 26, 237) // #11 - Egg Spinner Bottom Lights frame 0
2081
SpriteFrame(-8, 28, 25, 17, 52, 237) // #12 - Egg Spinner Bottom Lights frame 1
2082
SpriteFrame(-8, 28, 25, 17, 78, 237) // #13 - Egg Spinner Bottom Lights frame 2
2083
SpriteFrame(-8, 28, 25, 17, 104, 237) // #14 - Egg Spinner Bottom Lights frame 3
2084
SpriteFrame(-8, 28, 25, 17, 112, 219) // #15 - Egg Spinner Bottom Lights frame 4
2085
2086
SpriteFrame(-30, 23, 12, 11, 42, 225) // #16 - Egg Spinner Bottom Left Lights frame 0
2087
SpriteFrame(-30, 23, 12, 11, 55, 225) // #17 - Egg Spinner Bottom Left Lights frame 1
2088
SpriteFrame(-30, 23, 12, 11, 68, 225) // #18 - Egg Spinner Bottom Left Lights frame 2
2089
SpriteFrame(-30, 23, 12, 11, 81, 225) // #19 - Egg Spinner Bottom Left Lights frame 3
2090
SpriteFrame(-30, 23, 12, 11, 94, 225) // #20 - Egg Spinner Bottom Left Lights frame 4
2091
2092
SpriteFrame(49, -9, 2, 2, 27, 247) // #21 - Egg Spinner Right Lights frame 0
2093
SpriteFrame(49, -9, 2, 2, 53, 247) // #22 - Egg Spinner Right Lights frame 1
2094
SpriteFrame(49, -9, 2, 2, 79, 247) // #23 - Egg Spinner Right Lights frame 2
2095
SpriteFrame(49, -9, 2, 2, 105, 247) // #24 - Egg Spinner Right Lights frame 3
2096
SpriteFrame(49, -9, 2, 2, 113, 229) // #25 - Egg Spinner Right Lights frame 4
2097
2098
SpriteFrame(-19, -19, 8, 20, 42, 204) // #26 - Egg Spinner Cockpit Left Lights frame 0
2099
SpriteFrame(-19, -19, 8, 20, 51, 204) // #27 - Egg Spinner Cockpit Left Lights frame 1
2100
SpriteFrame(-19, -19, 8, 20, 60, 204) // #28 - Egg Spinner Cockpit Left Lights frame 2
2101
SpriteFrame(-19, -19, 8, 20, 69, 204) // #29 - Egg Spinner Cockpit Left Lights frame 3
2102
SpriteFrame(-19, -19, 8, 20, 78, 204) // #30 - Egg Spinner Cockpit Left Lights frame 4
2103
2104
SpriteFrame(17, -13, 4, 10, 87, 206) // #31 - Egg Spinner Cockpit Right Lights frame 0
2105
SpriteFrame(17, -13, 4, 10, 92, 206) // #32 - Egg Spinner Cockpit Right Lights frame 1
2106
SpriteFrame(17, -13, 4, 10, 97, 206) // #33 - Egg Spinner Cockpit Right Lights frame 2
2107
SpriteFrame(17, -13, 4, 10, 102, 206) // #34 - Egg Spinner Cockpit Right Lights frame 3
2108
SpriteFrame(17, -13, 4, 10, 107, 206) // #35 - Egg Spinner Cockpit Right Lights frame 4
2109
2110
SpriteFrame(14, -59, 4, 3, 107, 217) // #36 - Egg Spinner Top Lights frame 0
2111
SpriteFrame(14, -59, 4, 3, 107, 221) // #37 - Egg Spinner Top Lights frame 1
2112
SpriteFrame(14, -59, 4, 3, 107, 225) // #38 - Egg Spinner Top Lights frame 2
2113
SpriteFrame(14, -59, 4, 3, 107, 229) // #39 - Egg Spinner Top Lights frame 3
2114
SpriteFrame(14, -59, 4, 3, 107, 233) // #40 - Egg Spinner Top Lights frame 4
2115
2116
SpriteFrame(32, -47, 5, 3, 112, 215) // #41 - Egg Spinner Top Right Lights frame 0
2117
SpriteFrame(32, -47, 5, 3, 117, 215) // #42 - Egg Spinner Top Right Lights frame 1
2118
SpriteFrame(32, -47, 5, 3, 122, 215) // #43 - Egg Spinner Top Right Lights frame 2
2119
SpriteFrame(32, -47, 5, 3, 127, 215) // #44 - Egg Spinner Top Right Lights frame 3
2120
SpriteFrame(32, -47, 5, 3, 132, 215) // #45 - Egg Spinner Top Right Lights frame 4
2121
2122
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
2123
end sub
2124
2125