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/MZ/MZSetup.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: MZ 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.value1 : object.lavaTileFrame
13
private alias object.value2 : object.lavaAniTileID
14
private alias object.value3 : object.lavaAnimTimer
15
private alias object.value4 : object.candleAnimTimer
16
17
// Player Aliases
18
private alias object.xpos : player.xpos
19
private alias object.ypos : player.ypos
20
private alias object.value37 : player.shield
21
22
// Tile Info ID Aliases
23
private alias 8 : TILEINFO_ANGLEB
24
25
// Tile Flag Aliases
26
private alias 1 : TILE_LAVA
27
28
// Shields
29
private alias 3 : SHIELD_FIRE
30
31
// Tracks
32
private alias 0 : TRACK_STAGE
33
private alias 2 : TRACK_INVINCIBLE
34
private alias 4 : TRACK_BOSS
35
36
// Reserved object slots
37
private alias 10 : SLOT_ZONESETUP
38
private alias 25 : SLOT_MUSICEVENT_CHANGE
39
40
private alias 0 : MUSICEVENT_FADETOBOSS
41
private alias 1 : MUSICEVENT_FADETOSTAGE
42
private alias 2 : MUSICEVENT_TRANSITION
43
44
private alias 0 : MUSICEVENT_FLAG_NOCHANGE
45
private alias 1 : MUSICEVENT_FLAG_SPEEDUP
46
private alias 2 : MUSICEVENT_FLAG_SLOWDOWN
47
48
// Music loops
49
private alias 99380 : MUSIC_LOOP_MZ
50
private alias 79537 : MUSIC_LOOP_MZ_F
51
52
private alias 39528 : MUSIC_LOOP_INV
53
private alias 30436 : MUSIC_LOOP_INV_F
54
55
56
// ========================
57
// Function Declarations
58
// ========================
59
60
reserve function MZSetup_SpeedUpMusic
61
reserve function MZSetup_SlowDownMusic
62
63
64
// ========================
65
// Tables
66
// ========================
67
68
private table MZSetup_replay_attract_S
69
0x0300000, 0x2640000
70
0x00, 8
71
0x08, 137
72
0x38, 1
73
0x28, 4
74
0x08, 14
75
0x00, 18
76
0x08, 18
77
0x38, 1
78
0x28, 7
79
0x08, 2
80
0x00, 32
81
0x02, 13
82
0x00, 3
83
0x30, 1
84
0x20, 8
85
0x00, 3
86
0x08, 49
87
0x38, 1
88
0x28, 7
89
0x08, 37
90
0x38, 1
91
0x28, 8
92
0x08, 2
93
0x00, 18
94
0x04, 16
95
0x00, 5
96
0x30, 1
97
0x20, 11
98
0x08, 11
99
0x00, 7
100
0x04, 16
101
0x00, 4
102
0x08, 6
103
0x00, 22
104
0x08, 5
105
0x38, 1
106
0x28, 12
107
0x08, 16
108
0x00, 17
109
0x08, 31
110
0x00, 13
111
0x38, 1
112
0x28, 9
113
0x00, 36
114
0x08, 2
115
0x38, 1
116
0x28, 9
117
0x08, 36
118
0x00, 66
119
0x30, 1
120
0x20, 8
121
0x04, 37
122
0x00, 6
123
0x04, 17
124
0x34, 1
125
0x24, 6
126
0x04, 68
127
0x00, 28
128
0x02, 12
129
0x32, 1
130
0x22, 8
131
0x02, 50
132
0x00, 32
133
0x08, 83
134
0x38, 1
135
0x28, 8
136
0x08, 9
137
0x00, 21
138
0x38, 1
139
0x28, 7
140
0x08, 5
141
0x00, 98
142
0x08, 69
143
0x00, 25
144
0x08, 21
145
0x38, 1
146
0x28, 6
147
0x08, 4
148
0x00, 15
149
0x04, 16
150
0x00, 4
151
0x08, 18
152
0x38, 1
153
0x28, 7
154
0x08, 5
155
0x00, 27
156
0x08, 23
157
0x00, 9
158
0x30, 1
159
0x20, 6
160
0x00, 19
161
0x08, 19
162
0x00, 20
163
0x38, 4
164
0x28, 9
165
0x08, 4
166
end table
167
168
private table MZSetup_replay_attract_T
169
0x0300000, 0x2680000
170
0x00, 8
171
0x08, 41
172
0x38, 1
173
0x28, 3
174
0x08, 80
175
0x38, 1
176
0x28, 6
177
0x08, 7
178
0x00, 23
179
0x08, 21
180
0x38, 1
181
0x28, 5
182
0x08, 6
183
0x00, 15
184
0x08, 8
185
0x00, 17
186
0x38, 1
187
0x28, 5
188
0x08, 46
189
0x38, 1
190
0x28, 12
191
0x08, 30
192
0x00, 9
193
0x30, 1
194
0x20, 3
195
0x28, 3
196
0x00, 25
197
0x04, 4
198
0x00, 7
199
0x08, 3
200
0x38, 1
201
0x28, 7
202
0x00, 14
203
0x04, 18
204
0x00, 5
205
0x08, 5
206
0x38, 1
207
0x28, 9
208
0x08, 7
209
0x00, 24
210
0x08, 17
211
0x00, 12
212
0x08, 19
213
0x00, 3
214
0x30, 1
215
0x20, 7
216
0x28, 4
217
0x08, 12
218
0x00, 20
219
0x08, 17
220
0x38, 1
221
0x28, 10
222
0x08, 98
223
0x00, 7
224
0x04, 80
225
0x34, 1
226
0x24, 20
227
0x04, 2
228
0x00, 14
229
0x08, 21
230
0x38, 1
231
0x28, 10
232
0x08, 15
233
0x38, 1
234
0x28, 7
235
0x08, 59
236
0x00, 23
237
0x08, 6
238
0x38, 1
239
0x28, 6
240
0x08, 56
241
0x00, 27
242
0x08, 24
243
0x00, 17
244
0x08, 73
245
0x38, 1
246
0x28, 8
247
0x08, 23
248
0x00, 5
249
0x04, 25
250
0x00, 24
251
0x04, 36
252
0x00, 77
253
0x04, 35
254
0x34, 1
255
0x24, 7
256
0x04, 7
257
0x00, 13
258
0x08, 19
259
0x00, 53
260
0x04, 10
261
0x34, 1
262
0x24, 4
263
0x04, 16
264
0x00, 14
265
0x04, 8
266
0x00, 101
267
0x04, 4
268
0x34, 1
269
0x24, 2
270
0x04, 32
271
0x00, 14
272
end table
273
274
private table MZSetup_replay_attract_K
275
0x0300000, 0x2640000
276
0x00, 22
277
0x08, 137
278
0x38, 1
279
0x28, 7
280
0x08, 6
281
0x00, 40
282
0x08, 9
283
0x38, 1
284
0x28, 6
285
0x08, 18
286
0x00, 3
287
0x04, 16
288
0x08, 5
289
0x38, 1
290
0x28, 8
291
0x08, 22
292
0x38, 1
293
0x28, 27
294
0x08, 32
295
0x38, 1
296
0x28, 15
297
0x08, 9
298
0x00, 27
299
0x30, 1
300
0x20, 10
301
0x28, 2
302
0x08, 18
303
0x00, 21
304
0x08, 2
305
0x38, 1
306
0x28, 14
307
0x20, 3
308
0x00, 8
309
0x04, 16
310
0x00, 3
311
0x08, 40
312
0x38, 1
313
0x28, 24
314
0x08, 4
315
0x00, 18
316
0x08, 11
317
0x38, 1
318
0x28, 13
319
0x08, 86
320
0x38, 1
321
0x28, 5
322
0x08, 6
323
0x38, 1
324
0x28, 201
325
0x08, 31
326
0x38, 1
327
0x28, 6
328
0x08, 11
329
0x00, 17
330
0x08, 29
331
0x00, 47
332
0x30, 1
333
0x20, 14
334
0x00, 24
335
0x04, 15
336
0x00, 16
337
0x08, 9
338
0x00, 47
339
0x30, 1
340
0x20, 13
341
0x28, 2
342
0x08, 8
343
0x38, 1
344
0x28, 20
345
0x09, 3
346
0x01, 83
347
0x09, 2
348
0x08, 91
349
0x00, 29
350
0x30, 1
351
0x20, 13
352
0x00, 7
353
0x30, 1
354
0x20, 15
355
0x21, 1
356
end table
357
358
private table MZSetup_replay_credits_ST
359
0x0EA00000, 0x46C0000
360
0x00, 23
361
0x04, 40
362
0x00, 5
363
0x08, 31
364
0x38, 1
365
0x28, 30
366
0x08, 24
367
0x38, 1
368
0x28, 3
369
0x2C, 2
370
0x24, 8
371
0x04, 13
372
0x00, 15
373
0x04, 16
374
0x00, 5
375
0x04, 22
376
0x34, 1
377
0x24, 3
378
0x04, 4
379
0x00, 16
380
0x04, 121
381
0x00, 42
382
0x08, 8
383
0x00, 19
384
0x00, 8
385
0x04, 1
386
0x00, 64
387
end table
388
389
private table MZSetup_replay_credits_K
390
0x0EA00000, 0x46C0000
391
0x00, 25
392
0x04, 29
393
0x34, 1
394
0x24, 15
395
0x04, 5
396
0x00, 18
397
0x08, 17
398
0x38, 1
399
0x28, 10
400
0x08, 4
401
0x38, 1
402
0x28, 43
403
0x08, 4
404
0x00, 17
405
0x04, 4
406
0x34, 1
407
0x24, 5
408
0x04, 3
409
0x00, 33
410
0x04, 109
411
0x00, 34
412
0x08, 9
413
0x00, 15
414
0x04, 5
415
0x00, 255
416
0x00, 40
417
0x30, 1
418
0x20, 8
419
0x00, 7
420
0x04, 12
421
end table
422
423
424
// ========================
425
// Function Definitions
426
// ========================
427
428
private function MZSetup_SpeedUpMusic
429
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])
430
temp0 = checkResult
431
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)
432
temp0 &= checkResult
433
CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)
434
temp0 &= checkResult
435
if temp0 == false
436
switch music.currentTrack
437
case TRACK_STAGE
438
SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)
439
SwapMusicTrack("Marble_F.ogg", TRACK_STAGE, MUSIC_LOOP_MZ_F, 8000)
440
break
441
442
case TRACK_INVINCIBLE
443
SetMusicTrack("Marble_F.ogg", TRACK_STAGE, MUSIC_LOOP_MZ_F)
444
SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)
445
break
446
447
case TRACK_BOSS
448
SetMusicTrack("Marble_F.ogg", TRACK_STAGE, MUSIC_LOOP_MZ_F)
449
SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)
450
break
451
452
end switch
453
else
454
stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP
455
end if
456
end function
457
458
459
private function MZSetup_SlowDownMusic
460
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])
461
temp0 = checkResult
462
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)
463
temp0 &= checkResult
464
CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)
465
temp0 &= checkResult
466
if temp0 == false
467
switch music.currentTrack
468
case TRACK_STAGE
469
SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)
470
SwapMusicTrack("Marble.ogg", TRACK_STAGE, MUSIC_LOOP_MZ, 12500)
471
break
472
473
case TRACK_INVINCIBLE
474
SetMusicTrack("Marble.ogg", TRACK_STAGE, MUSIC_LOOP_MZ)
475
SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)
476
break
477
478
case TRACK_BOSS
479
SetMusicTrack("Marble.ogg", TRACK_STAGE, MUSIC_LOOP_MZ)
480
SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)
481
break
482
483
end switch
484
else
485
stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN
486
end if
487
end function
488
489
490
// ========================
491
// Events
492
// ========================
493
494
event ObjectUpdate
495
object.frame = object.animationTimer
496
object.frame /= 20
497
object.animationTimer++
498
object.animationTimer %= 60
499
500
object.lavaAniTileID = object.frame
501
object.lavaAniTileID <<= 1
502
object.lavaAniTileID += 440
503
Copy16x16Tile(366, object.lavaAniTileID)
504
505
object.lavaAniTileID++
506
Copy16x16Tile(367, object.lavaAniTileID)
507
508
switch object.frame
509
case 0
510
object.lavaAniTileID = 460
511
break
512
513
case 1
514
object.lavaAniTileID = 528
515
break
516
517
case 2
518
object.lavaAniTileID = 596
519
break
520
521
end switch
522
523
object.lavaAnimTimer++
524
object.lavaAnimTimer &= 0x1FF
525
Sin(object.lavaTileFrame, object.lavaAnimTimer)
526
object.lavaTileFrame += 0x200
527
object.lavaTileFrame >>= 2
528
object.lavaTileFrame &= 0x1F
529
if object.lavaTileFrame > 0xF
530
object.lavaTileFrame &= 15
531
object.lavaTileFrame <<= 2
532
533
object.lavaAniTileID += object.lavaTileFrame
534
Copy16x16Tile(363, object.lavaAniTileID)
535
536
object.lavaAniTileID++
537
Copy16x16Tile(362, object.lavaAniTileID)
538
539
object.lavaAniTileID++
540
Copy16x16Tile(365, object.lavaAniTileID)
541
542
object.lavaAniTileID++
543
Copy16x16Tile(364, object.lavaAniTileID)
544
else
545
object.lavaTileFrame <<= 2
546
547
object.lavaAniTileID += object.lavaTileFrame
548
Copy16x16Tile(362, object.lavaAniTileID)
549
550
object.lavaAniTileID++
551
Copy16x16Tile(363, object.lavaAniTileID)
552
553
object.lavaAniTileID++
554
Copy16x16Tile(364, object.lavaAniTileID)
555
556
object.lavaAniTileID++
557
Copy16x16Tile(365, object.lavaAniTileID)
558
end if
559
560
// BG Candles
561
temp0 = object.candleAnimTimer
562
temp0 >>= 4
563
temp0 <<= 1
564
temp0 += 446
565
Copy16x16Tile(360, temp0)
566
temp0++
567
Copy16x16Tile(361, temp0)
568
temp0++
569
object.candleAnimTimer++
570
object.candleAnimTimer &= 0x3F
571
572
// Check interaction with lava tiles
573
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
574
temp1 = player[currentPlayer].xpos
575
temp1 >>= 16
576
577
temp2 = player[currentPlayer].ypos
578
temp2 >>= 16
579
temp2 += 4
580
581
Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEB)
582
if temp0 == TILE_LAVA
583
// Instead of calling Player_FireHit, this script checks against the Player's shield and hurts them via the normal function if the player isn't protected
584
// Don't know why, but my best guess is that this script predated Player_FireHit's creation or something
585
if player[currentPlayer].shield != SHIELD_FIRE
586
CallFunction(Player_Hit)
587
end if
588
end if
589
next
590
end event
591
592
593
event ObjectDraw
594
// Special handling for keeping the interior BG aligned
595
if screen.yoffset > 458
596
// Camera is underground, inside the interior
597
temp0 = screen.yoffset
598
temp0 -= 458
599
temp0 *= 0xC000
600
tileLayer[1].scrollPos = temp0
601
else
602
// Camera is above ground
603
tileLayer[1].scrollPos = 0
604
end if
605
end event
606
607
608
event ObjectStartup
609
// Set the music track for this Stage
610
SetMusicTrack("Marble.ogg", TRACK_STAGE, MUSIC_LOOP_MZ)
611
SpeedUpMusic = MZSetup_SpeedUpMusic
612
SlowDownMusic = MZSetup_SlowDownMusic
613
614
// Ricky and Rocky are the inhabitants along this flamed quest
615
animalType1 = TypeName[Ricky]
616
animalType2 = TypeName[Rocky]
617
618
// Set object 10 to an MZ Setup object
619
object[SLOT_ZONESETUP].type = TypeName[MZ Setup]
620
object[SLOT_ZONESETUP].priority = PRIORITY_ACTIVE
621
object[SLOT_ZONESETUP].drawOrder = 0
622
623
// Different parallax between the different acts
624
// (Act 1 parallax info is built into the normal MZ BG file)
625
switch stage.actNum
626
case 2
627
hParallax[0].scrollPos = 0x1000000
628
hParallax[1].scrollPos = 0x2000000
629
hParallax[2].scrollPos = 0x2000000
630
hParallax[3].scrollPos = 0x2000000
631
hParallax[4].scrollPos = 0x2000000
632
hParallax[5].scrollPos = 0x2000000
633
hParallax[6].scrollPos = 0x2000000
634
break
635
636
case 3
637
hParallax[0].scrollPos = 0x4000000
638
hParallax[1].scrollPos = 0x1000000
639
hParallax[2].scrollPos = 0x1000000
640
hParallax[3].scrollPos = 0x1000000
641
hParallax[4].scrollPos = 0x1000000
642
hParallax[5].scrollPos = 0x1000000
643
hParallax[6].scrollPos = 0x1000000
644
break
645
646
end switch
647
648
if options.attractMode == true
649
switch stage.playerListPos
650
case PLAYER_SONIC_A
651
#platform: USE_ORIGINS
652
case PLAYER_AMY_A
653
#endplatform
654
if credits.screen == 0
655
Player_attractTable = MZSetup_replay_attract_S
656
Player_attractTableSize = 194
657
Player_attractDuration = 1660
658
else
659
Player_attractTable = MZSetup_replay_credits_ST
660
Player_attractTableSize = 56
661
Player_attractDuration = 540
662
end if
663
break
664
665
case PLAYER_TAILS_A
666
if credits.screen == 0
667
Player_attractTable = MZSetup_replay_attract_T
668
Player_attractTableSize = 206
669
Player_attractDuration = 1800
670
else
671
Player_attractTable = MZSetup_replay_credits_ST
672
Player_attractTableSize = 56
673
Player_attractDuration = 540
674
end if
675
break
676
677
case PLAYER_KNUCKLES_A
678
if credits.screen == 0
679
Player_attractTable = MZSetup_replay_attract_K
680
Player_attractTableSize = 162
681
Player_attractDuration = 1800
682
else
683
Player_attractTable = MZSetup_replay_credits_K
684
Player_attractTableSize = 62
685
Player_attractDuration = 540
686
end if
687
break
688
689
end switch
690
691
CallFunction(Player_SetupAttractDemo)
692
end if
693
end event
694
695
696
// ========================
697
// Editor Events
698
// ========================
699
700
event RSDKDraw
701
DrawSprite(0)
702
end event
703
704
705
event RSDKLoad
706
LoadSpriteSheet("Global/Display.gif")
707
SpriteFrame(-16, -16, 32, 32, 1, 143)
708
709
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
710
end event
711
712