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/GHZ/GHZSetup.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: GHZ Setup 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.frame : object.sunFlowerFrame
13
private alias object.value0 : object.sunFlowerTimer
14
private alias object.value1 : object.extendFlowerTimer
15
private alias object.value2 : object.extendFlowerFrame
16
private alias object.value3 : object.paletteTimer
17
private alias object.value4 : object.waterfallLoopTimer
18
private alias object.value5 : object.playingWaterfallLoop
19
20
// Tracks
21
private alias 0 : TRACK_STAGE
22
private alias 2 : TRACK_INVINCIBLE
23
private alias 4 : TRACK_BOSS
24
25
// Reserved object slots
26
private alias 10 : SLOT_ZONESETUP
27
private alias 25 : SLOT_MUSICEVENT_CHANGE
28
29
// Music Events
30
private alias 0 : MUSICEVENT_FADETOBOSS
31
private alias 1 : MUSICEVENT_FADETOSTAGE
32
private alias 2 : MUSICEVENT_TRANSITION
33
34
private alias 0 : MUSICEVENT_FLAG_NOCHANGE
35
private alias 1 : MUSICEVENT_FLAG_SPEEDUP
36
private alias 2 : MUSICEVENT_FLAG_SLOWDOWN
37
38
// Music loops
39
private alias 635050 : MUSIC_LOOP_GHZ // Interestingly, this loop point was instead 635970 in older S1 versions...
40
private alias 502294 : MUSIC_LOOP_GHZ_F // ...but this sped-up version had its loop point stay the same...
41
42
private alias 39528 : MUSIC_LOOP_INV
43
private alias 30436 : MUSIC_LOOP_INV_F
44
45
46
// ========================
47
// Function Declarations
48
// ========================
49
50
reserve function GHZSetup_SpeedUpMusic
51
reserve function GHZSetup_SlowDownMusic
52
53
54
// ========================
55
// Static Values
56
// ========================
57
58
public value GHZSetup_spikeLogsCounter = 0
59
60
// These next two values are used to transmit values from [Waterfall Sound] Objects
61
public value GHZSetup_playWaterfallSfx = 0
62
public value GHZSetup_waterfallPan = 0
63
64
65
// ========================
66
// Tables
67
// ========================
68
69
private table GHZSetup_replay_attract_S
70
0x00500000, 0x3B00000
71
0x00, 11
72
0x08, 91
73
0x38, 1
74
0x28, 7
75
0x08, 87
76
0x38, 1
77
0x28, 8
78
0x08, 47
79
0x38, 1
80
0x28, 7
81
0x08, 204
82
0x38, 1
83
0x28, 7
84
0x08, 32
85
0x38, 1
86
0x28, 9
87
0x08, 43
88
0x38, 1
89
0x28, 28
90
0x08, 61
91
0x38, 1
92
0x28, 24
93
0x08, 30
94
0x38, 1
95
0x28, 44
96
0x08, 22
97
0x38, 1
98
0x28, 21
99
0x08, 42
100
0x38, 1
101
0x28, 107
102
0x08, 255
103
0x08, 33
104
0x00, 203
105
0x04, 44
106
0x00, 12
107
0x04, 11
108
0x00, 23
109
0x08, 20
110
0x00, 15
111
0x04, 4
112
0x00, 19
113
0x08, 16
114
0x38, 1
115
0x28, 10
116
0x08, 39
117
0x38, 1
118
0x28, 8
119
0x08, 42
120
0x38, 1
121
end table
122
123
private table GHZSetup_replay_attract_T
124
0x00500000, 0x3B40000
125
0x00, 11
126
0x08, 91
127
0x38, 1
128
0x28, 10
129
0x08, 75
130
0x04, 12
131
0x34, 1
132
0x24, 24
133
0x04, 19
134
0x34, 1
135
0x24, 7
136
0x04, 8
137
0x00, 27
138
0x08, 55
139
0x38, 1
140
0x28, 4
141
0x20, 5
142
0x00, 29
143
0x04, 25
144
0x00, 11
145
0x08, 34
146
0x00, 11
147
0x08, 30
148
0x38, 1
149
0x28, 9
150
0x08, 202
151
0x38, 1
152
0x28, 9
153
0x08, 35
154
0x38, 1
155
0x28, 8
156
0x08, 45
157
0x38, 1
158
0x280, 14
159
0x08, 17
160
0x00, 7
161
0x08, 52
162
0x38, 1
163
0x28, 17
164
0x08, 33
165
0x38, 1
166
0x28, 33
167
0x08, 2
168
0x00, 29
169
0x08, 14
170
0x38, 1
171
0x28, 6
172
0x08, 5
173
0x00, 13
174
0x04, 9
175
0x00, 11
176
0x30, 1
177
0x20, 6
178
0x08, 6
179
0x38, 1
180
0x28, 6
181
0x08, 16
182
0x38, 1
183
0x28, 5
184
0x08, 33
185
0x00, 8
186
0x04, 11
187
0x00, 21
188
0x08, 9
189
0x00, 31
190
0x30, 1
191
0x20, 6
192
0x00, 2
193
0x08, 28
194
0x00, 28
195
0x04, 5
196
0x00, 5
197
0x08, 25
198
0x38, 1
199
0x28, 2
200
0x08, 28
201
0x00, 6
202
0x04, 9
203
0x00, 6
204
0x08, 31
205
0x00, 45
206
0x38, 1
207
0x28, 5
208
0x00, 2
209
0x08, 9
210
0x00, 7
211
0x08, 10
212
0x00, 30
213
0x08, 12
214
0x00, 37
215
0x04, 17
216
0x00, 22
217
0x08, 20
218
0x38, 1
219
0x28, 11
220
0x08, 52
221
0x38, 1
222
0x28, 12
223
end table
224
225
private table GHZSetup_replay_attract_K
226
0x00500000, 0x3B00000
227
0x00, 11
228
0x08, 92
229
0x38, 1
230
0x28, 12
231
0x08, 82
232
0x02, 12
233
0x00, 24
234
0x30, 1
235
0x20, 26
236
0x00, 3
237
0x08, 2
238
0x38, 1
239
0x28, 88
240
0x08, 2
241
0x00, 28
242
0x02, 16
243
0x32, 1
244
0x22, 7
245
0x02, 5
246
0x32, 1
247
0x22, 2
248
0x02, 5
249
0x32, 1
250
0x22, 3
251
0x02, 3
252
0x32, 1
253
0x22, 2
254
0x02, 4
255
0x08, 105
256
0x00, 109
257
0x08, 12
258
0x38, 1
259
0x28, 44
260
0x08, 51
261
0x38, 1
262
0x28, 33
263
0x08, 17
264
0x38, 1
265
0x28, 40
266
0x08, 31
267
0x38, 1
268
0x28, 39
269
0x08, 24
270
0x38, 1
271
0x28, 64
272
0x08, 17
273
0x38, 1
274
0x28, 15
275
0x08, 241
276
0x00, 29
277
0x30, 1
278
0x20, 18
279
0x00, 4
280
0x30, 1
281
0x20, 30
282
0x21, 3
283
0x01, 171
284
0x00, 15
285
0x02, 12
286
0x32, 1
287
0x22, 7
288
0x02, 4
289
0x32, 1
290
0x22, 2
291
0x02, 6
292
0x32, 1
293
0x22, 2
294
0x02, 4
295
0x32, 1
296
0x22, 5
297
0x02, 22
298
0x00, 2
299
0x08, 47
300
0x00, 6
301
end table
302
303
private table GHZSetup_replay_credits_STK_1
304
0x00500000, 0x3B00000
305
0x08, 91
306
0x38, 1
307
0x28, 9
308
0x08, 83
309
0x38, 1
310
0x28, 5
311
0x08, 52
312
0x38, 1
313
0x28, 8
314
0x08, 160
315
0x00, 8
316
0x08, 26
317
0x38, 1
318
0x28, 3
319
0x20, 2
320
0x00, 6
321
0x04, 5
322
0x00, 13
323
0x08, 44
324
0x38, 1
325
0x28, 5
326
0x08, 17
327
0x00, 16
328
0x08, 13
329
0x08, 5
330
0x08, 42
331
0x00, 52
332
0x08, 30
333
end table
334
335
private table GHZSetup_replay_credits_STK_2
336
0x13E80000, 0x2AC0000
337
0x00, 17
338
0x08, 255
339
0x08, 31
340
0x00, 219
341
end table
342
343
344
// ========================
345
// Function Definitions
346
// ========================
347
348
private function GHZSetup_SpeedUpMusic
349
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])
350
temp0 = checkResult
351
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)
352
temp0 &= checkResult
353
CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)
354
temp0 &= checkResult
355
if temp0 == false
356
switch music.currentTrack
357
case TRACK_STAGE
358
SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)
359
SwapMusicTrack("GreenHill_F.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ_F, 7920)
360
break
361
362
case TRACK_INVINCIBLE
363
SetMusicTrack("GreenHill_F.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ_F)
364
SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)
365
break
366
367
case TRACK_BOSS
368
SetMusicTrack("GreenHill_F.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ_F)
369
SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)
370
break
371
372
end switch
373
else
374
stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP
375
end if
376
end function
377
378
379
private function GHZSetup_SlowDownMusic
380
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])
381
temp0 = checkResult
382
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)
383
temp0 &= checkResult
384
CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)
385
temp0 &= checkResult
386
if temp0 == false
387
switch music.currentTrack
388
case TRACK_STAGE
389
SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)
390
SwapMusicTrack("GreenHill.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ, 12650)
391
break
392
393
case TRACK_INVINCIBLE
394
SetMusicTrack("GreenHill.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ)
395
SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12650)
396
break
397
398
case TRACK_BOSS
399
SetMusicTrack("GreenHill.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ)
400
SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)
401
break
402
403
end switch
404
else
405
stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN
406
end if
407
end function
408
409
410
// ========================
411
// Events
412
// ========================
413
414
event ObjectUpdate
415
if GHZSetup_playWaterfallSfx != false
416
GHZSetup_playWaterfallSfx = false
417
object.waterfallLoopTimer--
418
if object.waterfallLoopTimer <= 0
419
object.waterfallLoopTimer = 31
420
if object.playingWaterfallLoop == false
421
if credits.screen == 0
422
PlaySfx(SfxName[Waterfall], false)
423
StopSfx(SfxName[Waterfall Loop])
424
end if
425
object.playingWaterfallLoop = true
426
else
427
if credits.screen == 0
428
StopSfx(SfxName[Waterfall])
429
PlaySfx(SfxName[Waterfall Loop], false)
430
end if
431
end if
432
end if
433
434
SetSfxAttributes(SfxName[Waterfall], -1, GHZSetup_waterfallPan)
435
SetSfxAttributes(SfxName[Waterfall Loop], -1, GHZSetup_waterfallPan)
436
else
437
object.playingWaterfallLoop = false
438
object.waterfallLoopTimer = 0
439
end if
440
441
// This object's state never changes...
442
if object.state < 5
443
object.paletteTimer++
444
if object.paletteTimer == 6
445
object.paletteTimer = 0
446
RotatePalette(0, 168, 171, true)
447
448
GHZSetup_spikeLogsCounter++
449
GHZSetup_spikeLogsCounter &= 15
450
end if
451
end if
452
453
if object.sunFlowerTimer == 0
454
object.sunFlowerTimer = 20
455
temp0 = 768
456
temp0 += object.sunFlowerFrame
457
Copy16x16Tile(427, temp0)
458
temp0++
459
Copy16x16Tile(428, temp0)
460
temp0++
461
Copy16x16Tile(429, temp0)
462
temp0++
463
Copy16x16Tile(430, temp0)
464
object.sunFlowerFrame += 4
465
object.sunFlowerFrame &= 7
466
else
467
object.sunFlowerTimer--
468
end if
469
470
if object.extendFlowerTimer == 0
471
switch object.extendFlowerFrame
472
case 0
473
object.extendFlowerTimer = 160
474
temp0 = 0
475
break
476
477
case 1
478
object.extendFlowerTimer = 10
479
temp0 = 6
480
break
481
482
case 2
483
object.extendFlowerTimer = 160
484
temp0 = 12
485
break
486
487
case 3
488
object.extendFlowerTimer = 10
489
temp0 = 6
490
break
491
492
end switch
493
494
temp0 += 776
495
Copy16x16Tile(431, temp0)
496
temp0++
497
Copy16x16Tile(432, temp0)
498
temp0++
499
Copy16x16Tile(433, temp0)
500
temp0++
501
Copy16x16Tile(434, temp0)
502
temp0++
503
Copy16x16Tile(435, temp0)
504
temp0++
505
Copy16x16Tile(436, temp0)
506
object.extendFlowerFrame++
507
object.extendFlowerFrame &= 3
508
else
509
object.extendFlowerTimer--
510
end if
511
end event
512
513
514
event ObjectStartup
515
SetMusicTrack("GreenHill.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ)
516
SpeedUpMusic = GHZSetup_SpeedUpMusic
517
SlowDownMusic = GHZSetup_SlowDownMusic
518
519
animalType1 = TypeName[Pocky]
520
animalType2 = TypeName[Flicky]
521
522
// Scroll values stored in scenes are unsigned and can't be negative, so we have to reverse the value manually ourselves in script instead
523
Abs(tileLayer[1].parallaxFactor)
524
FlipSign(tileLayer[1].parallaxFactor)
525
tileLayer[1].scrollPos = 0x180000
526
527
object[SLOT_ZONESETUP].type = TypeName[GHZ Setup]
528
object[SLOT_ZONESETUP].priority = PRIORITY_ACTIVE
529
530
GHZSetup_spikeLogsCounter = 0
531
532
if options.attractMode == true
533
switch stage.playerListPos
534
case PLAYER_SONIC_A
535
#platform: USE_ORIGINS
536
case PLAYER_AMY_A
537
#endplatform
538
539
switch credits.screen
540
case 0
541
Player_attractTable = GHZSetup_replay_attract_S
542
Player_attractTableSize = 102
543
Player_attractDuration = 1800
544
break
545
546
case 1
547
Player_attractTable = GHZSetup_replay_credits_STK_1
548
Player_attractTableSize = 58
549
Player_attractDuration = 540
550
break
551
552
case 8
553
Player_attractTable = GHZSetup_replay_credits_STK_2
554
Player_attractTableSize = 10
555
Player_attractDuration = 540
556
break
557
558
end switch
559
break
560
561
case PLAYER_TAILS_A
562
switch credits.screen
563
case 0
564
Player_attractTable = GHZSetup_replay_attract_T
565
Player_attractTableSize = 198
566
Player_attractDuration = 1800
567
break
568
569
case 1
570
Player_attractTable = GHZSetup_replay_credits_STK_1
571
Player_attractTableSize = 58
572
Player_attractDuration = 540
573
break
574
575
case 8
576
Player_attractTable = GHZSetup_replay_credits_STK_2
577
Player_attractTableSize = 10
578
Player_attractDuration = 540
579
break
580
581
end switch
582
break
583
584
case PLAYER_KNUCKLES_A
585
switch credits.screen
586
case 0
587
Player_attractTable = GHZSetup_replay_attract_K
588
Player_attractTableSize = 150
589
Player_attractDuration = 1800
590
break
591
592
case 1
593
Player_attractTable = GHZSetup_replay_credits_STK_1
594
Player_attractTableSize = 58
595
Player_attractDuration = 540
596
break
597
598
case 8
599
Player_attractTable = GHZSetup_replay_credits_STK_2
600
Player_attractTableSize = 10
601
Player_attractDuration = 540
602
break
603
604
end switch
605
break
606
607
end switch
608
609
CallFunction(Player_SetupAttractDemo)
610
end if
611
end event
612
613
614
// ========================
615
// Editor Events
616
// ========================
617
618
event RSDKDraw
619
DrawSprite(0)
620
end event
621
622
623
event RSDKLoad
624
LoadSpriteSheet("Global/Display.gif")
625
SpriteFrame(-16, -16, 32, 32, 1, 143)
626
627
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
628
end event
629
630