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/SLZ/SLZSetup.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: SLZ 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.value0 : object.paletteTimer
13
private alias object.value1 : object.paletteIndex
14
private alias object.value2 : object.scrollPos
15
16
// Tracks
17
private alias 0 : TRACK_STAGE
18
private alias 2 : TRACK_INVINCIBLE
19
private alias 4 : TRACK_BOSS
20
21
// Reserved object slots
22
private alias 10 : SLOT_ZONESETUP
23
private alias 25 : SLOT_MUSICEVENT_CHANGE
24
25
// Music Events
26
private alias 0 : MUSICEVENT_FADETOBOSS
27
private alias 1 : MUSICEVENT_FADETOSTAGE
28
private alias 2 : MUSICEVENT_TRANSITION
29
30
private alias 0 : MUSICEVENT_FLAG_NOCHANGE
31
private alias 1 : MUSICEVENT_FLAG_SPEEDUP
32
private alias 2 : MUSICEVENT_FLAG_SLOWDOWN
33
34
// Music Loops
35
private alias 84364 : MUSIC_LOOP_SLZ
36
private alias 67640 : MUSIC_LOOP_SLZ_F
37
38
private alias 39528 : MUSIC_LOOP_INV
39
private alias 30436 : MUSIC_LOOP_INV_F
40
41
42
// ========================
43
// Function Declarations
44
// ========================
45
46
reserve function SLZSetup_SpeedUpMusic
47
reserve function SLZSetup_SlowDownMusic
48
49
50
// ========================
51
// Static Values
52
// ========================
53
54
public value SLZSetup_rotateTimer = 0
55
56
57
// ========================
58
// Tables
59
// ========================
60
61
private table SLZSetup_palTable1
62
0x00E0E0, 0x00A0A0, 0x006060, 0x002020, 0x006060, 0x00A0A0
63
end table
64
65
66
private table SLZSetup_palTable2
67
0x600000, 0xA00000, 0xE00000, 0xA00000, 0x600000, 0x200000
68
end table
69
70
71
private table SLZSetup_palTable3
72
0x606000, 0x202000, 0x606000, 0xA0A000, 0xE0E000, 0xA0A000
73
end table
74
75
76
private table SLZSetup_replay_credits_STK
77
0xBB00000, 0x4C0000
78
0x00, 37
79
0x08, 36
80
0x00, 6
81
0x08, 204
82
0x02, 39
83
0x00, 159
84
0x04, 37
85
0x34, 1
86
0x24, 7
87
0x04, 47
88
0x34, 1
89
0x24, 33
90
end table
91
92
93
// ========================
94
// Function Definitions
95
// ========================
96
97
private function SLZSetup_SpeedUpMusic
98
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])
99
temp0 = checkResult
100
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)
101
temp0 &= checkResult
102
CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)
103
temp0 &= checkResult
104
if temp0 == 0
105
switch music.currentTrack
106
case TRACK_STAGE
107
SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)
108
SwapMusicTrack("Starlight_F.ogg", TRACK_STAGE, MUSIC_LOOP_SLZ_F, 8000)
109
break
110
111
case TRACK_INVINCIBLE
112
SetMusicTrack("Starlight_F.ogg", TRACK_STAGE, MUSIC_LOOP_SLZ_F)
113
SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)
114
break
115
116
case TRACK_BOSS
117
SetMusicTrack("Starlight_F.ogg", TRACK_STAGE, MUSIC_LOOP_SLZ_F)
118
SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)
119
break
120
121
end switch
122
else
123
stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP
124
end if
125
end function
126
127
128
private function SLZSetup_SlowDownMusic
129
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])
130
temp0 = checkResult
131
CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)
132
temp0 &= checkResult
133
CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)
134
temp0 &= checkResult
135
if temp0 == false
136
switch music.currentTrack
137
case TRACK_STAGE
138
SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)
139
SwapMusicTrack("Starlight.ogg", TRACK_STAGE, MUSIC_LOOP_SLZ, 12500)
140
break
141
142
case TRACK_INVINCIBLE
143
SetMusicTrack("Starlight.ogg", TRACK_STAGE, MUSIC_LOOP_SLZ)
144
SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)
145
break
146
147
case TRACK_BOSS
148
SetMusicTrack("Starlight.ogg", TRACK_STAGE, MUSIC_LOOP_SLZ)
149
SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)
150
break
151
152
end switch
153
else
154
stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN
155
end if
156
end function
157
158
159
// ========================
160
// Events
161
// ========================
162
163
event ObjectUpdate
164
GetTableValue(temp0, 21, StageSetup_oscillationTable)
165
if temp0 == 0
166
SLZSetup_rotateTimer++
167
SLZSetup_rotateTimer &= 3
168
end if
169
170
object.paletteTimer++
171
if object.paletteTimer == 8
172
object.paletteTimer = 0
173
object.paletteIndex++
174
object.paletteIndex %= 6
175
176
GetTableValue(temp0, object.paletteIndex, SLZSetup_palTable1)
177
SetPaletteEntry(0, 171, temp0)
178
GetTableValue(temp0, object.paletteIndex, SLZSetup_palTable2)
179
SetPaletteEntry(0, 173, temp0)
180
GetTableValue(temp0, object.paletteIndex, SLZSetup_palTable3)
181
SetPaletteEntry(0, 174, temp0)
182
end if
183
end event
184
185
186
event ObjectDraw
187
// Draw FG Construction Sprites
188
// (Even if Forever allows for wider screen sizes, it doesn't actually update this code for that, which is why the giders just appear and disappear)
189
temp0 = screen.xoffset
190
temp0 <<= 1
191
temp0 &= 511
192
FlipSign(temp0)
193
194
temp0 += object.scrollPos
195
temp1 = screen.yoffset
196
temp1 <<= 1
197
temp1 &= 255
198
FlipSign(temp1)
199
DrawSpriteScreenXY(0, temp0, temp1)
200
DrawSpriteScreenXY(1, temp0, temp1)
201
end event
202
203
204
event ObjectStartup
205
LoadSpriteSheet("SLZ/Objects.gif")
206
207
SetMusicTrack("Starlight.ogg", TRACK_STAGE, MUSIC_LOOP_SLZ)
208
SpeedUpMusic = SLZSetup_SpeedUpMusic
209
SlowDownMusic = SLZSetup_SlowDownMusic
210
211
// Sprite Frames
212
// (Foreground pole)
213
SpriteFrame(-16, 0, 32, 256, 224, 0)
214
SpriteFrame(-16, 256, 32, 256, 224, 0)
215
216
// Flicky and Picky are the ones living in these stars
217
animalType1 = TypeName[Flicky]
218
animalType2 = TypeName[Picky]
219
220
object[SLOT_ZONESETUP].type = TypeName[SLZ Setup]
221
object[SLOT_ZONESETUP].priority = PRIORITY_ACTIVE
222
object[SLOT_ZONESETUP].drawOrder = 5
223
object[SLOT_ZONESETUP].scrollPos = 496
224
225
temp0 = screen.xcenter
226
temp0 >>= 2
227
object[SLOT_ZONESETUP].scrollPos -= temp0
228
SLZSetup_rotateTimer = 0
229
230
if options.attractMode == true
231
Player_attractTable = SLZSetup_replay_credits_STK
232
Player_attractTableSize = 26
233
Player_attractDuration = 540
234
CallFunction(Player_SetupAttractDemo)
235
end if
236
end event
237
238
239
// ========================
240
// Editor Events
241
// ========================
242
243
event RSDKDraw
244
DrawSprite(0)
245
end event
246
247
248
event RSDKLoad
249
LoadSpriteSheet("Global/Display.gif")
250
SpriteFrame(-16, -16, 32, 32, 1, 143)
251
252
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
253
end event
254
255