Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 2/Scripts/MCZ/MCZSetup.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: MCZ 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.paletteTimer
13
private alias object.value2 : object.paletteFrame
14
15
// Tracks
16
private alias 0 : TRACK_STAGE
17
private alias 1 : TRACK_ACTFINISH
18
private alias 2 : TRACK_INVINCIBLE
19
private alias 3 : TRACK_CONTINUE
20
private alias 4 : TRACK_BOSS
21
private alias 5 : TRACK_GAMEOVER
22
private alias 6 : TRACK_DROWNING
23
private alias 7 : TRACK_SUPER
24
25
// Reserved object slots
26
private alias 10 : SLOT_ZONESETUP
27
private alias 25 : SLOT_MUSICEVENT_CHANGE
28
private alias 26 : SLOT_MUSICEVENT_BOSS
29
30
// Music Events
31
private alias 0 : MUSICEVENT_FADETOBOSS
32
private alias 1 : MUSICEVENT_FADETOSTAGE
33
private alias 2 : MUSICEVENT_TRANSITION
34
35
private alias 0 : MUSICEVENT_FLAG_NOCHANGE
36
private alias 1 : MUSICEVENT_FLAG_SPEEDUP
37
private alias 2 : MUSICEVENT_FLAG_SLOWDOWN
38
39
// Music Loops
40
private alias 99356 : MUSIC_LOOP_MCZ_1P
41
private alias 79574 : MUSIC_LOOP_MCZ_1P_F
42
43
private alias 18672 : MUSIC_LOOP_MCZ_2P // This is 18671 in the Sound Test and some parts of HPZ...
44
private alias 15272 : MUSIC_LOOP_MCZ_2P_F
45
46
private alias 38679 : MUSIC_LOOP_INV
47
private alias 30897 : MUSIC_LOOP_INV_F
48
49
50
// ========================
51
// Function Declarations
52
// ========================
53
54
reserve function MCZSetup_SpeedUpMusic1P
55
reserve function MCZSetup_SlowDownMusic1P
56
reserve function MCZSetup_SpeedUpMusic2P
57
reserve function MCZSetup_SlowDownMusic2P
58
59
60
// ========================
61
// Tables
62
// ========================
63
64
private table MCZSetup_paletteCycle
65
0xC00000, 0xE06000, 0xE0C000, 0xE0E080
66
end table
67
68
69
// ========================
70
// Function Definitions
71
// ========================
72
73
private function MCZSetup_SpeedUpMusic1P
74
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])
75
temp0 = checkResult
76
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)
77
temp0 &= checkResult
78
CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)
79
temp0 &= checkResult
80
if temp0 == false
81
switch music.currentTrack
82
case TRACK_STAGE
83
SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)
84
SwapMusicTrack("MysticCave_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P_F, 8000)
85
break
86
87
case TRACK_INVINCIBLE
88
SetMusicTrack("MysticCave_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P_F)
89
SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)
90
break
91
92
case TRACK_BOSS
93
case TRACK_DROWNING
94
case TRACK_SUPER
95
SetMusicTrack("MysticCave_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P_F)
96
SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)
97
break
98
99
end switch
100
else
101
stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP
102
end if
103
end function
104
105
106
private function MCZSetup_SlowDownMusic1P
107
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])
108
temp0 = checkResult
109
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)
110
temp0 &= checkResult
111
CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)
112
temp0 &= checkResult
113
if temp0 == false
114
switch music.currentTrack
115
case TRACK_STAGE
116
SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)
117
SwapMusicTrack("MysticCave.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P, 12500)
118
break
119
120
case TRACK_INVINCIBLE
121
SetMusicTrack("MysticCave.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P)
122
SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)
123
break
124
125
case TRACK_BOSS
126
case TRACK_DROWNING
127
case TRACK_SUPER
128
SetMusicTrack("MysticCave.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P)
129
SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)
130
break
131
132
end switch
133
else
134
stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN
135
end if
136
end function
137
138
139
private function MCZSetup_SpeedUpMusic2P
140
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])
141
temp0 = checkResult
142
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)
143
temp0 &= checkResult
144
CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)
145
temp0 &= checkResult
146
if temp0 == false
147
switch music.currentTrack
148
case TRACK_STAGE
149
SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)
150
SwapMusicTrack("MysticCave2_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P_F, 8000)
151
break
152
153
case TRACK_INVINCIBLE
154
SetMusicTrack("MysticCave2_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P_F)
155
SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)
156
break
157
158
case TRACK_BOSS
159
SetMusicTrack("MysticCave2_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P_F)
160
SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)
161
break
162
163
end switch
164
else
165
stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP
166
end if
167
end function
168
169
170
private function MCZSetup_SlowDownMusic2P
171
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])
172
temp0 = checkResult
173
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)
174
temp0 &= checkResult
175
CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)
176
temp0 &= checkResult
177
if temp0 == false
178
switch music.currentTrack
179
case TRACK_STAGE
180
SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)
181
SwapMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P, 12500)
182
break
183
184
case TRACK_INVINCIBLE
185
SetMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P)
186
SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)
187
break
188
189
case TRACK_BOSS
190
SetMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P)
191
SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)
192
break
193
194
end switch
195
else
196
stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN
197
end if
198
end function
199
200
201
// ========================
202
// Events
203
// ========================
204
205
event ObjectUpdate
206
// Update the flashing lantern palette cycle
207
object.paletteTimer++
208
if object.paletteTimer == 2
209
object.paletteTimer = 0
210
object.paletteFrame++
211
object.paletteFrame &= 3
212
213
GetTableValue(temp0, object.paletteFrame, MCZSetup_paletteCycle)
214
SetPaletteEntry(0, 155, temp0)
215
end if
216
end event
217
218
219
event ObjectStartup
220
if options.vsMode == false
221
SetMusicTrack("MysticCave.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P)
222
SpeedUpMusic = MCZSetup_SpeedUpMusic1P
223
SlowDownMusic = MCZSetup_SlowDownMusic1P
224
else
225
SetMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P)
226
SpeedUpMusic = MCZSetup_SpeedUpMusic2P
227
SlowDownMusic = MCZSetup_SlowDownMusic2P
228
end if
229
230
// Reset the color used in the boss flash
231
SetPaletteEntry(0, 192, 0x000000)
232
233
// Cucky and Mocky live in this endless mine
234
animalType1 = TypeName[Cucky]
235
animalType2 = TypeName[Mocky]
236
237
object[SLOT_ZONESETUP].type = TypeName[MCZ Setup]
238
object[SLOT_ZONESETUP].priority = PRIORITY_ACTIVE
239
240
// The different acts get different parallax values
241
// Do note that the boss act (act "B") doesn't have anything here and instead uses the default values already in MCZ's Backgrounds.bin
242
switch stage.actNum
243
case 1
244
stage.curYBoundary1 = 960
245
tileLayer[1].scrollPos = -0x1400000
246
tileLayer[1].parallaxFactor = 85
247
break
248
249
case 2
250
stage.curYBoundary1 = 96
251
tileLayer[1].scrollPos = -0x100000
252
tileLayer[1].parallaxFactor = 42
253
// Some small bounds adjustments are needed for the HPZ entrance to trigger
254
stage.curYBoundary2 = 2048
255
stage.deathBoundary = stage.curYBoundary2
256
stage.deathBoundary <<= 16
257
break
258
259
end switch
260
end event
261
262
263
// ========================
264
// Editor Events
265
// ========================
266
267
event RSDKDraw
268
DrawSprite(0)
269
end event
270
271
272
event RSDKLoad
273
LoadSpriteSheet("Global/Display.gif")
274
SpriteFrame(-16, -16, 32, 32, 1, 143)
275
276
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
277
end event
278
279