Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 1/Scripts/Title/Logo.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Logo Object
4
// Script Author: Christian Whitehead/Simon Thomley
5
// Unpacked by Rubberduckycooly's script unpacker
6
// ----------------------------------
7
8
// ========================
9
// Aliases
10
// ========================
11
12
private alias object.value0 : object.timer
13
private alias object.value1 : object.playerPos.x
14
private alias object.value2 : object.playerPos.y
15
private alias object.value3 : object.paletteTimer
16
private alias object.value4 : object.arrayPos
17
private alias object.value5 : object.armFrame
18
private alias object.value6 : object.armPos.x
19
private alias object.value7 : object.armPos.y
20
private alias object.value8 : object.charTitlePos
21
private alias object.value9 : object.speedPercent
22
private alias object.value10 : object.disablePaletteRotation // Not actually used as far as I can tell
23
private alias object.value11 : object.player2Pos.x
24
private alias object.value12 : object.player2Pos.y
25
private alias object.value13 : object.p2Frame
26
private alias object.value14 : object.levelSelectCheatPos
27
private alias object.value15 : object.debugModeCheatPos
28
private alias object.value16 : object.regionSwitchCheatPos
29
private alias object.value17 : object.character
30
31
// Alias for the character workaround
32
private alias temp1 : temp.titleCharacter
33
34
// States
35
// The first 3 states are identical so there's really not much reason to have em seperate but it is what it is
36
37
// Sonic States
38
private alias 0 : LOGO_SETUP_SONIC
39
private alias 1 : LOGO_FADEIN_SONIC
40
private alias 2 : LOGO_RISEDELAY_SONIC
41
private alias 3 : LOGO_RISE_SONIC
42
private alias 4 : LOGO_ANIMATE_SONIC
43
private alias 5 : LOGO_FINGERWIGGLE_SONIC
44
private alias 6 : LOGO_P2TEXTAPPEAR_SONIC
45
private alias 7 : LOGO_MOVELEFT_SONIC
46
private alias 8 : LOGO_RISEP2_SONIC
47
private alias 9 : LOGO_ANIMATEP2_SONIC
48
private alias 10 : LOGO_ARMAPPEARP2_SONIC
49
private alias 11 : LOGO_ANIMATEP1_SONIC
50
51
// Tails States
52
private alias 0 : LOGO_SETUP_TAILS
53
private alias 1 : LOGO_FADEIN_TAILS
54
private alias 2 : LOGO_RISEDELAY_TAILS
55
private alias 3 : LOGO_RISE_TAILS
56
private alias 4 : LOGO_ANIMATE_TAILS
57
private alias 5 : LOGO_ARMAPPEAR_TAILS
58
private alias 6 : LOGO_PREPLOGOAPPEAR_TAILS
59
private alias 7 : LOGO_SHOWLOGO_TAILS
60
private alias 8 : LOGO_IDLE_TAILS
61
62
// Knux States
63
private alias 0 : LOGO_SETUP_KNUX
64
private alias 1 : LOGO_FADEIN_KNUX
65
private alias 2 : LOGO_RISEDELAY_KNUX
66
private alias 3 : LOGO_RISE_KNUX
67
private alias 4 : LOGO_ANIMATE_KNUX
68
private alias 5 : LOGO_ARMAPPEAR_KNUX
69
private alias 6 : LOGO_ANIMATEARM_KNUX
70
private alias 7 : LOGO_MOVEARM_KNUX
71
private alias 8 : LOGO_PREPLOGOAPPEAR_KNUX
72
private alias 9 : LOGO_ARMAPPEAR2_KNUX
73
private alias 10 : LOGO_ANIMATEARM2_KNUX
74
private alias 11 : LOGO_MOVEARM2_KNUX
75
private alias 12 : LOGO_SHOWLOGO_KNUX
76
private alias 13 : LOGO_IDLE_KNUX
77
78
// Game Modes
79
private alias 0 : MODE_NOSAVE
80
81
// Player List Pos Aliases
82
private alias 0 : PLAYER_SONIC_A
83
private alias 1 : PLAYER_TAILS_A
84
private alias 2 : PLAYER_KNUCKLES_A
85
private alias 3 : PLAYER_SONIC_TAILS_A
86
private alias 4 : PLAYER_KNUCKLES_TAILS_A // (not used in this script, but left here for reference)
87
private alias 5 : PLAYER_AMY_A
88
private alias 6 : PLAYER_AMY_TAILS_A
89
90
91
// ========================
92
// Function Declarations
93
// ========================
94
95
reserve function Logo_CheckButtonCheatCodes
96
97
98
// ========================
99
// Tables
100
// ========================
101
102
private table Logo_playerPalette
103
0x6060A0, 0x80A0E0, 0xE08000, 0xE0C080, 0xA04000, 0x600000, 0xE02080, 0xE00040, 0x800000, 0x806080, 0xA08060, 0xE0C0A0, 0x80A0A0, 0xA04020
104
end table
105
106
private table Logo_tailsBodyOffsets
107
-50, -40, -53, -56, -58, -68, -60, -74, -62, -78, -63, -79, -64, -80
108
end table
109
110
private table Logo_tailsArmOffsets
111
5, -32, 6, -31
112
end table
113
114
115
// ========================
116
// Function Definitions
117
// ========================
118
119
private function Logo_CheckButtonCheatCodes
120
temp0 = 0 // keyID
121
122
if keyPress[0].up == true
123
temp0 = 1
124
end if
125
126
if keyPress[0].down == true
127
temp0 = 2
128
end if
129
130
if keyPress[0].left == true
131
temp0 = 3
132
end if
133
134
if keyPress[0].right == true
135
temp0 = 4
136
end if
137
138
if keyPress[0].buttonA == true
139
temp0 = 5
140
end if
141
142
if keyPress[0].buttonB == true
143
temp0 = 6
144
end if
145
146
if keyPress[0].buttonC == true
147
temp0 = 7
148
end if
149
150
// Level Select Cheat
151
// 1, 2, 3, 4
152
// up, down, left, right
153
switch object.levelSelectCheatPos
154
case 0
155
if temp0 == 1
156
object.levelSelectCheatPos++
157
else
158
if temp0 != 0
159
object.levelSelectCheatPos = 0
160
end if
161
end if
162
break
163
164
case 1
165
if temp0 == 2
166
object.levelSelectCheatPos++
167
else
168
if temp0 != 0
169
object.levelSelectCheatPos = 0
170
end if
171
end if
172
break
173
174
case 2
175
if temp0 == 3
176
object.levelSelectCheatPos++
177
else
178
if temp0 != 0
179
object.levelSelectCheatPos = 0
180
end if
181
end if
182
break
183
184
case 3
185
if temp0 == 4
186
object.levelSelectCheatPos++
187
object.levelSelectCheatPos = 0
188
options.stageSelectFlag = true
189
PlaySfx(SfxName[Ring L], false)
190
else
191
if temp0 != 0
192
object.levelSelectCheatPos = 0
193
end if
194
end if
195
break
196
197
end switch
198
199
// Debug Mode Cheat
200
// 1, 7, 2, 7, 3, 7, 4, 7
201
// up, C, down, C, left, C, right, C
202
switch object.debugModeCheatPos
203
case 0
204
if temp0 == 1
205
object.debugModeCheatPos++
206
else
207
if temp0 != 0
208
object.debugModeCheatPos = 0
209
end if
210
end if
211
break
212
213
case 1
214
if temp0 == 7
215
object.debugModeCheatPos++
216
else
217
if temp0 != 0
218
object.debugModeCheatPos = 0
219
end if
220
end if
221
break
222
223
case 2
224
if temp0 == 2
225
object.debugModeCheatPos++
226
else
227
if temp0 != 0
228
object.debugModeCheatPos = 0
229
end if
230
end if
231
break
232
233
case 3
234
if temp0 == 7
235
object.debugModeCheatPos++
236
else
237
if temp0 != 0
238
object.debugModeCheatPos = 0
239
end if
240
end if
241
break
242
243
case 4
244
if temp0 == 3
245
object.debugModeCheatPos++
246
else
247
if temp0 != 0
248
object.debugModeCheatPos = 0
249
end if
250
end if
251
break
252
253
case 5
254
if temp0 == 7
255
object.debugModeCheatPos++
256
else
257
if temp0 != 0
258
object.debugModeCheatPos = 0
259
end if
260
end if
261
break
262
263
case 6
264
if temp0 == 4
265
object.debugModeCheatPos++
266
else
267
if temp0 != 0
268
object.debugModeCheatPos = 0
269
end if
270
end if
271
break
272
273
case 7
274
if temp0 == 7
275
object.debugModeCheatPos = 0
276
stage.debugMode = true
277
PlaySfx(SfxName[Ring L], false)
278
else
279
if temp0 != 0
280
object.debugModeCheatPos = 0
281
end if
282
end if
283
break
284
285
end switch
286
287
// Region Switch Cheat
288
// 1, 2, 2, 2, 2, 1
289
// up, down, down, down, down, up
290
switch object.regionSwitchCheatPos
291
case 0
292
if temp0 == 1
293
object.regionSwitchCheatPos++
294
else
295
if temp0 != 0
296
object.regionSwitchCheatPos = 0
297
end if
298
end if
299
break
300
301
case 1
302
case 2
303
case 3
304
case 4
305
if temp0 == 2
306
object.regionSwitchCheatPos++
307
else
308
if temp0 != 0
309
object.regionSwitchCheatPos = 0
310
end if
311
end if
312
break
313
314
case 5
315
if temp0 == 1
316
object.regionSwitchCheatPos++
317
object.regionSwitchCheatPos = 0
318
options.region ^= 1
319
PlaySfx(SfxName[Ring L], false)
320
else
321
if temp0 != 0
322
object.regionSwitchCheatPos = 0
323
end if
324
end if
325
break
326
327
end switch
328
end function
329
330
331
// ========================
332
// Events
333
// ========================
334
335
event ObjectUpdate
336
#platform: USE_ORIGINS
337
if object.state <= LOGO_FADEIN_SONIC
338
object.character = stage.playerListPos
339
end if
340
#endplatform
341
342
#platform: USE_STANDALONE
343
if stage.player2Enabled == true
344
stage.playerListPos = PLAYER_SONIC_TAILS_A
345
end if
346
#endplatform
347
348
if object.disablePaletteRotation == false
349
object.paletteTimer++
350
if object.paletteTimer == 6
351
object.paletteTimer = 0
352
RotatePalette(0, 192, 195, true)
353
end if
354
end if
355
356
#platform: USE_STANDALONE
357
// Check for cheat codes in No Save Mode
358
if options.gameMode == MODE_NOSAVE
359
#endplatform
360
if object.state > LOGO_RISE_SONIC
361
CallFunction(Logo_CheckButtonCheatCodes)
362
end if
363
#platform: USE_STANDALONE
364
end if
365
#endplatform
366
end event
367
368
369
event ObjectDraw
370
temp0 = true
371
372
// Have to use a temp value workaround due to compiler shenanigans
373
// Normally, it's just `switch stage.playerListPos` or `switch object.character`, but we can't wrap a switch start with platform checks so this is the next best thing
374
#platform: USE_STANDALONE
375
temp.titleCharacter = stage.playerListPos
376
#endplatform
377
#platform: USE_ORIGINS
378
temp.titleCharacter = object.character
379
#endplatform
380
381
switch temp.titleCharacter
382
case PLAYER_TAILS_A
383
#platform: USE_ORIGINS
384
case PLAYER_AMY_A
385
case PLAYER_AMY_TAILS_A
386
#endplatform
387
if object.state == LOGO_P2TEXTAPPEAR_SONIC
388
temp0 = false
389
end if
390
break
391
392
case PLAYER_KNUCKLES_A
393
if object.state == LOGO_IDLE_TAILS
394
temp0 = false
395
end if
396
break
397
case PLAYER_SONIC_TAILS_A
398
if object.state == LOGO_ANIMATEARM_KNUX
399
temp0 = false
400
end if
401
break
402
end switch
403
404
// Draw Logo (Top Half)
405
if temp0 != false
406
DrawSpriteScreenXY(9, screen.xcenter, object.ypos)
407
end if
408
409
switch temp.titleCharacter
410
case PLAYER_SONIC_A
411
case PLAYER_SONIC_TAILS_A
412
#platform: USE_ORIGINS
413
case PLAYER_AMY_A // amy just uses sonic's title screen
414
case PLAYER_AMY_TAILS_A
415
#endplatform
416
switch object.state
417
case LOGO_SETUP_SONIC
418
screen.xoffset = 0
419
420
object.priority = PRIORITY_ACTIVE
421
object.timer = 0x100
422
stage.activeLayer[0] = 1 //set bg to lowest layer
423
object.state++
424
425
SetScreenFade(0x00, 0x00, 0x00, 0xFF)
426
break
427
428
case LOGO_FADEIN_SONIC
429
screen.xoffset += 2
430
431
if object.timer > 0
432
object.timer -= 8
433
else
434
PlayMusic(0)
435
object.state++
436
end if
437
438
SetScreenFade(0x00, 0x00, 0x00, object.timer)
439
break
440
441
case LOGO_RISEDELAY_SONIC
442
screen.xoffset += 2
443
444
object.timer++
445
if object.timer == 38
446
object.timer = 0
447
object.playerPos.y = 186
448
object.frame = 0
449
object.state++
450
end if
451
break
452
453
case LOGO_RISE_SONIC
454
screen.xoffset += 2
455
456
object.playerPos.y -= 8
457
if object.playerPos.y < 144
458
object.frame = 1
459
end if
460
461
if object.playerPos.y <= 112
462
object.playerPos.y = 112
463
object.state++
464
end if
465
466
DrawSpriteScreenXY(object.frame, screen.xcenter, object.playerPos.y)
467
break
468
469
case LOGO_ANIMATE_SONIC
470
screen.xoffset += 2
471
472
object.timer++
473
if object.timer == 8
474
object.frame++
475
if object.frame >= 7
476
object.frame = 7
477
object[+1].type = TypeName[Start Message]
478
object[+1].priority = PRIORITY_ACTIVE
479
object[+1].xpos = screen.xcenter
480
481
if temp.titleCharacter == 3
482
object[+1].ypos = 216
483
object.state = LOGO_P2TEXTAPPEAR_SONIC
484
else
485
object[+1].ypos = 192
486
object.state++
487
end if
488
end if
489
object.timer = 0
490
end if
491
492
DrawSpriteScreenXY(object.frame, screen.xcenter, object.playerPos.y)
493
break
494
495
case LOGO_FINGERWIGGLE_SONIC
496
screen.xoffset += 2
497
498
object.timer++
499
if object.timer == 8
500
object.frame++
501
if object.frame > 8
502
object.frame = 7
503
end if
504
object.timer = 0
505
end if
506
507
DrawSpriteScreenXY(9, screen.xcenter, object.ypos)
508
DrawSpriteScreenXY(object.frame, screen.xcenter, object.playerPos.y)
509
break
510
511
case LOGO_P2TEXTAPPEAR_SONIC
512
screen.xoffset += 2
513
514
object.ypos -= 2
515
object.playerPos.y -= 2
516
if object.ypos <= -24
517
object.charTitlePos = screen.xsize
518
object.charTitlePos += 108
519
object.state++
520
object.playerPos.x = screen.xcenter
521
end if
522
523
DrawSpriteScreenXY(9, screen.xcenter, object.ypos)
524
DrawSpriteScreenXY(object.frame, screen.xcenter, object.playerPos.y)
525
break
526
527
case LOGO_MOVELEFT_SONIC
528
screen.xoffset += 2
529
530
object.timer++
531
object.playerPos.x++
532
object.charTitlePos -= 8
533
temp0 = screen.xcenter
534
temp0 += 12
535
if object.charTitlePos <= temp0
536
object.charTitlePos = temp0
537
object.p2Frame = 12
538
object.state++
539
end if
540
541
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
542
543
if options.region == 1
544
DrawSpriteScreenXY(33, object.charTitlePos, 228)
545
else
546
DrawSpriteScreenXY(31, object.charTitlePos, 228)
547
end if
548
549
DrawSpriteScreenXY(36, object.charTitlePos, 228)
550
break
551
552
case LOGO_RISEP2_SONIC
553
screen.xoffset += 2
554
555
temp0 = object.arrayPos
556
GetTableValue(object.player2Pos.x, temp0, Logo_tailsBodyOffsets)
557
object.player2Pos.x += screen.xcenter
558
object.player2Pos.x -= 24
559
560
temp0++
561
GetTableValue(object.player2Pos.y, temp0, Logo_tailsBodyOffsets)
562
object.player2Pos.y += screen.ycenter
563
object.player2Pos.y -= 24
564
565
object.timer++
566
object.timer &= 3
567
if object.timer == 0
568
object.arrayPos += 2
569
if object.arrayPos == 14
570
object.state++
571
end if
572
end if
573
574
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
575
DrawSpriteScreenXY(object.p2Frame, object.player2Pos.x, object.player2Pos.y)
576
577
if options.region == 1
578
DrawSpriteScreenXY(33, object.charTitlePos, 228)
579
else
580
DrawSpriteScreenXY(31, object.charTitlePos, 228)
581
end if
582
583
DrawSpriteScreenXY(36, object.charTitlePos, 228)
584
break
585
586
case LOGO_ANIMATEP2_SONIC
587
screen.xoffset += 2
588
589
object.timer++
590
if object.timer == 2
591
object.p2Frame++
592
if object.p2Frame >= 16
593
object.p2Frame = 16
594
object.armPos.x = 8
595
object.armPos.x += screen.xcenter
596
object.armPos.y = -27
597
object.armPos.y += screen.ycenter
598
object.arrayPos = 0
599
object.state++
600
end if
601
object.timer = 0
602
end if
603
604
DrawSpriteScreenXY(object.p2Frame, object.player2Pos.x, object.player2Pos.y)
605
606
if object.p2Frame == 16
607
DrawSpriteScreenXY(17, object.armPos.x, object.armPos.y)
608
end if
609
610
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
611
612
if options.region == 1
613
DrawSpriteScreenXY(33, object.charTitlePos, 228)
614
else
615
DrawSpriteScreenXY(31, object.charTitlePos, 228)
616
end if
617
618
DrawSpriteScreenXY(36, object.charTitlePos, 228)
619
break
620
621
case LOGO_ARMAPPEARP2_SONIC
622
screen.xoffset += 2
623
624
temp0 = object.arrayPos
625
GetTableValue(object.armPos.x, temp0, Logo_tailsArmOffsets)
626
object.armPos.x += screen.xcenter
627
object.armPos.x -= 24
628
629
temp0++
630
GetTableValue(object.armPos.y, temp0, Logo_tailsArmOffsets)
631
object.armPos.y += screen.ycenter
632
object.armPos.y -= 24
633
634
object.timer++
635
object.timer &= 3
636
if object.timer == 0
637
object.arrayPos += 2
638
if object.arrayPos == 4
639
object.state++
640
end if
641
end if
642
643
DrawSpriteScreenXY(object.p2Frame, object.player2Pos.x, object.player2Pos.y)
644
DrawSpriteScreenXY(17, object.armPos.x, object.armPos.y)
645
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
646
647
if options.region == 1
648
DrawSpriteScreenXY(33, object.charTitlePos, 228)
649
else
650
DrawSpriteScreenXY(31, object.charTitlePos, 228)
651
end if
652
653
DrawSpriteScreenXY(36, object.charTitlePos, 228)
654
break
655
656
case LOGO_ANIMATEP1_SONIC
657
screen.xoffset += 2
658
659
object.timer++
660
if object.timer == 8
661
object.frame++
662
if object.frame > 8
663
object.frame = 7
664
end if
665
object.timer = 0
666
end if
667
668
DrawSpriteScreenXY(object.p2Frame, object.player2Pos.x, object.player2Pos.y)
669
DrawSpriteScreenXY(17, object.armPos.x, object.armPos.y)
670
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
671
672
if options.region == 1
673
DrawSpriteScreenXY(33, object.charTitlePos, 228)
674
else
675
DrawSpriteScreenXY(31, object.charTitlePos, 228)
676
end if
677
678
DrawSpriteScreenXY(36, object.charTitlePos, 228)
679
break
680
681
end switch
682
break
683
684
case PLAYER_TAILS_A
685
switch object.state
686
case LOGO_SETUP_TAILS
687
screen.xoffset = 0
688
689
object.priority = PRIORITY_ACTIVE
690
object.timer = 0x100
691
stage.activeLayer[0] = 1
692
object.state++
693
694
SetScreenFade(0x00, 0x00, 0x00, 0xFF)
695
break
696
697
case LOGO_FADEIN_TAILS
698
screen.xoffset += 2
699
700
if object.timer > 0
701
object.timer -= 8
702
else
703
PlayMusic(0)
704
object.state++
705
end if
706
707
SetScreenFade(0x00, 0x00, 0x00, object.timer)
708
break
709
710
case LOGO_RISEDELAY_TAILS
711
screen.xoffset += 2
712
713
object.timer++
714
if object.timer == 38
715
object.timer = 0
716
object.frame = 12
717
object.state++
718
end if
719
break
720
721
case LOGO_RISE_TAILS
722
screen.xoffset += 2
723
724
temp0 = object.arrayPos
725
GetTableValue(object.playerPos.x, temp0, Logo_tailsBodyOffsets)
726
object.playerPos.x += screen.xcenter
727
temp0++
728
729
GetTableValue(object.playerPos.y, temp0, Logo_tailsBodyOffsets)
730
object.playerPos.y += screen.ycenter
731
732
object.timer++
733
object.timer &= 3
734
if object.timer == 0
735
object.arrayPos += 2
736
if object.arrayPos == 14
737
object.state++
738
end if
739
end if
740
741
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
742
break
743
744
case LOGO_ANIMATE_TAILS
745
screen.xoffset += 2
746
747
object.timer++
748
if object.timer == 2
749
object.frame++
750
if object.frame >= 16
751
object.frame = 16
752
object[+1].type = TypeName[Start Message]
753
object[+1].priority = PRIORITY_ACTIVE
754
object[+1].xpos = screen.xcenter
755
object[+1].ypos = 216
756
object.armPos.x = 8
757
object.armPos.x += screen.xcenter
758
object.armPos.y = -27
759
object.armPos.y += screen.ycenter
760
object.arrayPos = 0
761
object.state++
762
end if
763
object.timer = 0
764
end if
765
766
if object.frame == 16
767
DrawSpriteScreenXY(17, object.armPos.x, object.armPos.y)
768
end if
769
770
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
771
break
772
773
case LOGO_ARMAPPEAR_TAILS
774
screen.xoffset += 2
775
776
temp0 = object.arrayPos
777
GetTableValue(object.armPos.x, temp0, Logo_tailsArmOffsets)
778
object.armPos.x += screen.xcenter
779
780
temp0++
781
GetTableValue(object.armPos.y, temp0, Logo_tailsArmOffsets)
782
object.armPos.y += screen.ycenter
783
784
object.timer++
785
object.timer &= 3
786
if object.timer == 0
787
object.arrayPos += 2
788
if object.arrayPos == 4
789
object.state++
790
end if
791
end if
792
793
DrawSpriteScreenXY(17, object.armPos.x, object.armPos.y)
794
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
795
break
796
797
case LOGO_PREPLOGOAPPEAR_TAILS
798
screen.xoffset += 2
799
800
object.ypos++
801
object.playerPos.y++
802
object.armPos.y++
803
if object.ypos >= 24
804
object.state++
805
end if
806
807
DrawSpriteScreenXY(9, screen.xcenter, object.ypos)
808
DrawSpriteScreenXY(17, object.armPos.x, object.armPos.y)
809
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
810
break
811
812
case LOGO_SHOWLOGO_TAILS
813
screen.xoffset += 2
814
815
if object.charTitlePos >= 89
816
if object.speedPercent == 0
817
object.timer++
818
if object.timer == 3
819
object.charTitlePos = 89
820
object.state++
821
end if
822
object.speedPercent = 1
823
end if
824
825
object.yvel -= 0x4000
826
if object.yvel > 0
827
object.yvel -= 0x8000
828
end if
829
else
830
object.speedPercent = 0
831
object.yvel += 0x6000
832
if object.yvel < 0
833
object.yvel += 0x8000
834
end if
835
end if
836
837
object.speedPercent += object.yvel
838
temp0 = object.speedPercent
839
temp0 >>= 16
840
object.charTitlePos += temp0
841
object.speedPercent &= 0xFFFF
842
843
DrawSpriteScreenXY(17, object.armPos.x, object.armPos.y)
844
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
845
846
if options.region == 1
847
DrawSpriteScreenXY(33, screen.xcenter, object.charTitlePos)
848
DrawSpriteScreenXY(34, screen.xcenter, object.charTitlePos)
849
else
850
DrawSpriteScreenXY(31, screen.xcenter, object.charTitlePos)
851
DrawSpriteScreenXY(32, screen.xcenter, object.charTitlePos)
852
end if
853
854
DrawSpriteScreenXY(35, screen.xcenter, object.charTitlePos)
855
break
856
857
case LOGO_IDLE_TAILS
858
screen.xoffset += 2
859
860
DrawSpriteScreenXY(17, object.armPos.x, object.armPos.y)
861
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
862
863
if options.region == 1
864
DrawSpriteScreenXY(33, screen.xcenter, object.charTitlePos)
865
DrawSpriteScreenXY(34, screen.xcenter, object.charTitlePos)
866
else
867
DrawSpriteScreenXY(31, screen.xcenter, object.charTitlePos)
868
DrawSpriteScreenXY(32, screen.xcenter, object.charTitlePos)
869
end if
870
871
DrawSpriteScreenXY(35, screen.xcenter, object.charTitlePos)
872
break
873
874
end switch
875
break
876
877
case PLAYER_KNUCKLES_A
878
switch object.state
879
case LOGO_SETUP_KNUX
880
screen.xoffset = 0
881
882
object.priority = PRIORITY_ACTIVE
883
object.timer = 0x100
884
stage.activeLayer[0] = 1
885
object.state++
886
887
SetScreenFade(0x00, 0x00, 0x00, 0xFF)
888
break
889
890
case LOGO_FADEIN_KNUX
891
screen.xoffset += 2
892
893
if object.timer > 0
894
object.timer -= 8
895
else
896
PlayMusic(0)
897
object.state++
898
end if
899
900
SetScreenFade(0x00, 0x00, 0x00, object.timer)
901
break
902
903
case LOGO_RISEDELAY_KNUX
904
screen.xoffset += 2
905
906
object.timer++
907
if object.timer == 38
908
object.timer = 0
909
object.playerPos.x = -44
910
object.playerPos.x += screen.xcenter
911
object.playerPos.y = -22
912
object.playerPos.y += screen.ycenter
913
object.frame = 18
914
object.state++
915
end if
916
break
917
918
case LOGO_RISE_KNUX
919
screen.xoffset += 2
920
921
object.playerPos.y -= 8
922
temp0 = screen.ycenter
923
temp0 -= 94
924
if object.playerPos.y <= temp0
925
object.state++
926
end if
927
928
temp0 += 32
929
if object.playerPos.y == temp0
930
object.frame++
931
object.armFrame = 24
932
object.armPos.x = -44
933
object.armPos.x += screen.xcenter
934
object.armPos.y = -46
935
object.armPos.y += screen.ycenter
936
end if
937
938
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
939
break
940
941
case LOGO_ANIMATE_KNUX
942
screen.xoffset += 2
943
944
object.timer++
945
if object.timer == 8
946
object.frame++
947
if object.frame >= 23
948
object.frame = 23
949
object[+1].type = TypeName[Start Message]
950
object[+1].priority = PRIORITY_ACTIVE
951
object[+1].xpos = screen.xcenter
952
object[+1].ypos = 216
953
object.state++
954
end if
955
956
object.timer = 0
957
end if
958
959
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
960
if object.frame >= 23
961
DrawSpriteScreenXY(object.armFrame, object.armPos.x, object.armPos.y)
962
end if
963
break
964
965
case LOGO_ARMAPPEAR_KNUX
966
case LOGO_ARMAPPEAR2_KNUX
967
screen.xoffset += 2
968
969
object.armPos.y--
970
object.timer++
971
if object.timer == 4
972
object.timer = 0
973
object.state++
974
end if
975
976
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
977
DrawSpriteScreenXY(object.armFrame, object.armPos.x, object.armPos.y)
978
break
979
980
case LOGO_ANIMATEARM_KNUX
981
case LOGO_ANIMATEARM2_KNUX
982
screen.xoffset += 2
983
984
object.timer++
985
if object.timer == 4
986
object.timer = 0
987
object.armFrame++
988
if object.armFrame == 29
989
object.armFrame = 24
990
object.state++
991
end if
992
end if
993
994
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
995
DrawSpriteScreenXY(object.armFrame, object.armPos.x, object.armPos.y)
996
break
997
998
case LOGO_MOVEARM_KNUX
999
case LOGO_MOVEARM2_KNUX
1000
screen.xoffset += 2
1001
1002
object.armPos.y++
1003
object.timer++
1004
if object.timer == 4
1005
object.timer = 0
1006
object.state++
1007
end if
1008
1009
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
1010
DrawSpriteScreenXY(object.armFrame, object.armPos.x, object.armPos.y)
1011
break
1012
1013
case LOGO_PREPLOGOAPPEAR_KNUX
1014
screen.xoffset += 2
1015
1016
object.yvel += 0x4000
1017
object.speedPercent += object.yvel
1018
temp0 = object.speedPercent
1019
temp0 >>= 16
1020
object.ypos += temp0
1021
object.playerPos.y += temp0
1022
object.armPos.y += temp0
1023
object.speedPercent &= 0xFFFF
1024
1025
if object.yvel > 0
1026
if object.ypos >= 24
1027
object.yvel >>= 1
1028
temp0 = object.yvel
1029
temp0 >>= 1
1030
object.yvel += temp0
1031
object.timer++
1032
if object.timer != 3
1033
FlipSign(object.yvel)
1034
else
1035
object.timer = 0
1036
object.yvel = 0
1037
object.state++
1038
end if
1039
end if
1040
end if
1041
1042
DrawSpriteScreenXY(9, screen.xcenter, object.ypos) // Logo (Top Half)
1043
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
1044
DrawSpriteScreenXY(object.armFrame, object.armPos.x, object.armPos.y)
1045
break
1046
1047
case LOGO_SHOWLOGO_KNUX
1048
screen.xoffset += 2
1049
1050
object.yvel += 0x4000
1051
object.speedPercent += object.yvel
1052
temp0 = object.speedPercent
1053
temp0 >>= 16
1054
object.charTitlePos += temp0
1055
object.speedPercent &= 0xFFFF
1056
1057
if object.yvel > 0
1058
if object.charTitlePos >= 89
1059
object.yvel >>= 2
1060
temp0 = object.yvel
1061
temp0 >>= 1
1062
object.yvel += temp0
1063
object.timer++
1064
if object.timer != 2
1065
FlipSign(object.yvel)
1066
else
1067
object.timer = 0
1068
object.yvel = 0
1069
object.state++
1070
end if
1071
end if
1072
end if
1073
1074
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
1075
DrawSpriteScreenXY(object.armFrame, object.armPos.x, object.armPos.y)
1076
DrawSpriteScreenXY(30, screen.xcenter, object.charTitlePos) // "Knux In" sprite
1077
break
1078
1079
case LOGO_IDLE_KNUX
1080
screen.xoffset += 2
1081
1082
DrawSpriteScreenXY(object.frame, object.playerPos.x, object.playerPos.y)
1083
DrawSpriteScreenXY(object.armFrame, object.armPos.x, object.armPos.y)
1084
DrawSpriteScreenXY(30, screen.xcenter, object.charTitlePos) // "Knux In" sprite
1085
break
1086
1087
end switch
1088
break
1089
1090
end switch
1091
1092
// Logo (Bottom Half)
1093
DrawSpriteScreenXY(10, screen.xcenter, object.ypos)
1094
1095
// Copyright Sprite
1096
temp0 = screen.xsize
1097
temp0 -= 96
1098
DrawSpriteScreenXY(11, temp0, 216)
1099
end event
1100
1101
1102
event ObjectStartup
1103
LoadSpriteSheet("Title/Title.gif")
1104
SetMusicTrack("Titlescreen.ogg", 0, false)
1105
1106
SpriteFrame(-33, -74, 65, 64, 1, 1) // Sonic - Frame 1 - #0
1107
SpriteFrame(-33, -74, 65, 88, 1, 1) // Sonic - Frame 2 - #1
1108
SpriteFrame(-34, -66, 74, 88, 67, 1) // Sonic - Frame 3 - #2
1109
SpriteFrame(-34, -66, 74, 88, 142, 1) // Sonic - Frame 4 - #3
1110
SpriteFrame(-32, -72, 79, 88, 217, 1) // Sonic - Frame 5 - #4
1111
SpriteFrame(-24, -74, 72, 88, 297, 1) // Sonic - Frame 6 - #5
1112
SpriteFrame(-36, -76, 81, 88, 370, 1) // Sonic - Frame 7 - #6
1113
SpriteFrame(-36, -76, 81, 88, 1, 90) // Sonic - Frame 8 - #7
1114
SpriteFrame(-36, -76, 81, 88, 83, 90) // Sonic - Frame 9 - #8
1115
SpriteFrame(-128, 42, 256, 74, 255, 90) // Logo (Top) - #9
1116
SpriteFrame(-128, 112, 256, 74, 255, 167) // Logo (Bottom) - #10
1117
SpriteFrame(0, 0, 71, 17, 182, 210) // Copyright Sprite - #11
1118
SpriteFrame(24, 16, 56, 64, 276, 360) // Tails - Frame 1 - #12
1119
SpriteFrame(3, 21, 89, 57, 165, 90) // Tails - Frame 2 - #13
1120
SpriteFrame(8, 16, 88, 61, 165, 148) // Tails - Frame 3 - #14
1121
SpriteFrame(6, 17, 89, 59, 333, 360) // Tails - Frame 4 - #15
1122
SpriteFrame(6, 12, 87, 65, 423, 360) // Tails - Frame 5 - #16
1123
SpriteFrame(8, 5, 16, 19, 452, 5) // Tails' Arm - #17
1124
SpriteFrame(3, 15, 101, 47, 2, 439) // Knux - Frame 1 - #18
1125
SpriteFrame(3, 15, 101, 73, 2, 439) // Knux - Frame 2 - #19
1126
SpriteFrame(0, 9, 95, 79, 104, 433) // Knux - Frame 3 - #20
1127
SpriteFrame(1, 6, 105, 82, 200, 430) // Knux - Frame 4 - #21
1128
SpriteFrame(1, 4, 102, 84, 306, 428) // Knux - Frame 5 - #22
1129
SpriteFrame(5, 2, 91, 86, 409, 426) // Knux - Frame 6 - #23
1130
SpriteFrame(8, 5, 42, 43, 469, 5) // Knux' Arm - Frame 1 - #24
1131
SpriteFrame(8, 3, 40, 53, 218, 310) // Knux' Arm - Frame 2 - #25
1132
SpriteFrame(8, 8, 40, 39, 471, 49) // Knux' Arm - Frame 3 - #26
1133
SpriteFrame(8, 8, 40, 39, 471, 49) // Knux' Arm - Frame 4 - #27
1134
SpriteFrame(8, 3, 40, 53, 218, 310) // Knux' Arm - Frame 5 - #28
1135
SpriteFrame(8, 5, 42, 43, 469, 5) // Knux' Arm - Frame 6 - #29
1136
SpriteFrame(-124, -66, 248, 65, 1, 364) // Knux In - #30
1137
SpriteFrame(-77, -66, 153, 42, 1, 222) // "Tails" - #31
1138
SpriteFrame(-77, -19, 93, 10, 155, 231) // "Miles Prower" - #32
1139
SpriteFrame(-77, -66, 153, 42, 1, 179) // "Miles" - #33
1140
SpriteFrame(-77, -19, 103, 10, 155, 242) // "Tails Prower" - #34
1141
SpriteFrame(52, -19, 24, 18, 165, 411) // "In" - #35
1142
SpriteFrame(-101, -66, 28, 42, 189, 321) // "&" - #36
1143
1144
// Setup Player Palette Colors
1145
temp0 = 208
1146
temp1 = 0
1147
while temp1 < 14
1148
GetTableValue(temp2, temp1, Logo_playerPalette)
1149
SetPaletteEntry(0, temp0, temp2)
1150
temp0++
1151
temp1++
1152
loop
1153
end event
1154
1155
1156
// ========================
1157
// Editor Events
1158
// ========================
1159
1160
event RSDKDraw
1161
DrawSprite(0)
1162
DrawSprite(1)
1163
end event
1164
1165
1166
event RSDKLoad
1167
LoadSpriteSheet("Title/Title.gif")
1168
SpriteFrame(-128, 42, 256, 74, 255, 90) // Logo (Top) - #0
1169
SpriteFrame(-128, 112, 256, 74, 255, 167) // Logo (Bottom) - #1
1170
1171
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
1172
end event
1173