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/Global/TitleCard.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Title Card 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.propertyValue : object.displayOffset
13
14
private alias object.value0 : object.timer
15
private alias object.value1 : object.circlePos
16
private alias object.value2 : object.actNamePos
17
private alias object.value3 : object.zoneTextPos
18
private alias object.value4 : object.actNumPos
19
20
private alias 0 : TITLECARD_SETUP
21
private alias 1 : TITLECARD_DELAY
22
private alias 2 : TITLECARD_ENTERTITLECARD
23
private alias 3 : TITLECARD_SHOWTITLECARD
24
private alias 4 : TITLECARD_SHOWSTAGE
25
private alias 5 : TITLECARD_STARTSTAGE
26
private alias 6 : TITLECARD_EXITTITLECARD
27
private alias 7 : TITLECARD_CREDITSFADEIN
28
private alias 8 : TITLECARD_FADETOTITLE
29
30
// Track ID Aliases
31
private alias 0 : TRACK_STAGE
32
33
// Player Aliases
34
private alias object.up : player.up
35
private alias object.down : player.down
36
private alias object.left : player.left
37
private alias object.right : player.right
38
private alias object.jumpPress : player.jumpPress
39
private alias object.jumpHold : player.jumpHold
40
private alias object.controlMode : player.controlMode
41
private alias object.value1 : player.timer
42
43
44
// ========================
45
// Events
46
// ========================
47
48
event ObjectUpdate
49
// Hide touch controls
50
options.touchControls = false
51
52
switch object.state
53
case TITLECARD_SETUP
54
// Init values and such
55
object.alpha = 0xFF
56
57
object.circlePos = screen.xcenter
58
object.circlePos += 128
59
60
object.actNamePos = screen.xcenter
61
FlipSign(object.actNamePos)
62
object.actNamePos -= 160
63
64
object.zoneTextPos = screen.xcenter
65
FlipSign(object.zoneTextPos)
66
object.zoneTextPos -= 96
67
68
object.actNumPos = screen.xcenter
69
object.actNumPos += 32
70
71
#platform: USE_ORIGINS
72
if game.playMode == BOOT_PLAYMODE_MISSION
73
PlayMusic(TRACK_STAGE)
74
game.missionCondition = 0
75
game.missionEnd = false
76
object.state = TITLECARD_CREDITSFADEIN
77
object.timer = 0
78
stage.timeEnabled = true
79
stage.state = STAGE_RUNNING
80
SetScreenFade(0, 0, 0, 0)
81
else
82
if game.playMode == BOOT_PLAYMODE_BOSSRUSH
83
PlayMusic(TRACK_STAGE)
84
game.missionCondition = 0
85
game.missionEnd = false
86
object.state = TITLECARD_CREDITSFADEIN
87
object.timer = 0
88
stage.timeEnabled = true
89
stage.state = STAGE_RUNNING
90
SetScreenFade(0, 0, 0, 0)
91
else
92
if credits.screen > 0
93
object.state = TITLECARD_CREDITSFADEIN
94
object.timer = 272
95
stage.state = STAGE_RUNNING
96
SetScreenFade(0, 0, 0, 0xFF)
97
else
98
object.state++
99
end if
100
end if
101
end if
102
#endplatform
103
104
#platform: USE_STANDALONE
105
if credits.screen > 0
106
object.state = TITLECARD_CREDITSFADEIN
107
object.timer = 272
108
stage.state = STAGE_RUNNING
109
SetScreenFade(0, 0, 0, 0xFF)
110
else
111
object.state++
112
end if
113
#endplatform
114
break
115
116
case TITLECARD_DELAY
117
// Wait for half a second
118
if object.timer < 30
119
object.timer++
120
else
121
object.timer = 0
122
PlayMusic(TRACK_STAGE)
123
object.state++
124
end if
125
break
126
127
case TITLECARD_ENTERTITLECARD
128
// Slide stuff in
129
if object.circlePos > 0
130
object.circlePos -= 16
131
if object.circlePos < 0
132
object.circlePos = 0
133
end if
134
end if
135
136
if object.actNamePos < 0
137
object.actNamePos += 16
138
if object.actNamePos > 0
139
object.actNamePos = 0
140
end if
141
else
142
if object.zoneTextPos < 0
143
object.zoneTextPos += 16
144
if object.zoneTextPos > 0
145
object.zoneTextPos = 0
146
end if
147
else
148
if object.actNumPos > 0
149
object.actNumPos -= 16
150
if object.actNumPos < 0
151
object.actNumPos = 0
152
end if
153
else
154
object.state++
155
end if
156
end if
157
end if
158
break
159
160
case TITLECARD_SHOWTITLECARD
161
if object.timer < 60
162
object.timer++
163
else
164
object.timer = 0
165
object.alpha = 0xF8
166
stage.state = STAGE_RUNNING
167
168
currentPlayer = 0
169
while currentPlayer < playerCount
170
player[currentPlayer].controlMode = CONTROLMODE_NONE
171
player[currentPlayer].up = false
172
player[currentPlayer].down = false
173
player[currentPlayer].left = false
174
player[currentPlayer].right = false
175
player[currentPlayer].jumpPress = false
176
player[currentPlayer].jumpHold = false
177
player[currentPlayer].timer = 0
178
currentPlayer++
179
loop
180
object.state++
181
end if
182
break
183
184
case TITLECARD_SHOWSTAGE
185
if object.alpha > 0
186
object.alpha -= 8
187
else
188
object.state++
189
190
currentPlayer = 0
191
while currentPlayer < playerCount
192
#platform: USE_STANDALONE
193
player[currentPlayer].controlMode = CONTROLMODE_P1
194
#endplatform
195
#platform: USE_ORIGINS
196
player[currentPlayer].controlMode = currentPlayer
197
#endplatform
198
currentPlayer++
199
loop
200
end if
201
break
202
203
case TITLECARD_STARTSTAGE
204
if object.timer < 60
205
object.timer++
206
else
207
object.timer = 0
208
stage.timeEnabled = true
209
object.state++
210
end if
211
break
212
213
case TITLECARD_EXITTITLECARD
214
object.circlePos += 32
215
object.actNumPos += 32
216
object.actNamePos -= 32
217
object.zoneTextPos -= 32
218
if object.timer < 20
219
object.timer++
220
else
221
object.timer = 0
222
object.type = TypeName[Blank Object]
223
end if
224
break
225
226
case TITLECARD_CREDITSFADEIN
227
if object.timer > 0
228
object.timer -= 16
229
SetScreenFade(0, 0, 0, object.timer)
230
else
231
currentPlayer = 0
232
while currentPlayer < playerCount
233
#platform: USE_STANDALONE
234
player[currentPlayer].controlMode = CONTROLMODE_P1
235
#endplatform
236
#platform: USE_ORIGINS
237
player[currentPlayer].controlMode = currentPlayer
238
#endplatform
239
currentPlayer++
240
loop
241
ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)
242
end if
243
break
244
245
case TITLECARD_FADETOTITLE
246
// This state is set from the Player Object, when a replay is finished
247
248
if object.timer < 300
249
object.timer += 5
250
if credits.screen == 0
251
music.volume -= 2
252
end if
253
else
254
stage.activeList = PRESENTATION_STAGE
255
if credits.screen > 0 // fade to credits scene instead if credits are active
256
stage.listPos = 2
257
else
258
stage.listPos = 0
259
StopMusic()
260
end if
261
LoadStage()
262
end if
263
264
SetScreenFade(0, 0, 0, object.timer)
265
break
266
267
end switch
268
end event
269
270
271
event ObjectDraw
272
if object.state < TITLECARD_CREDITSFADEIN
273
SetActivePalette(0, 0, screen.ysize)
274
DrawRect(0, 0, screen.xsize, screen.ysize, 0, 0, 0, object.alpha)
275
276
// Draw Blue Circle
277
temp0 = screen.xcenter
278
temp0 -= 28
279
temp0 += object.circlePos
280
temp0 += object.displayOffset
281
DrawSpriteScreenXY(26, temp0, 76)
282
283
// Draw Act Name
284
temp0 = screen.xcenter
285
temp0 += 22
286
temp0 += object.actNamePos
287
temp0 += object.displayOffset
288
DrawActName(0, temp0, 80, 0, 0, 16, 1)
289
290
// Draw Zone Text
291
temp0 = screen.xcenter
292
temp0 -= 57
293
temp0 += object.zoneTextPos
294
temp0 += object.displayOffset
295
DrawSpriteScreenXY(27, temp0, 100)
296
297
// Draw Act Name
298
temp0 = screen.xcenter
299
temp0 -= 21
300
temp0 += object.actNumPos
301
temp0 += object.displayOffset
302
303
// The only act in the game that should cause this check to fail is Final Zone
304
// It uses 5 instead of 4 because SBZ Act 3 is internally LZ Act 4
305
if stage.actNum < 5
306
// Get the appropriate act number sprite
307
temp1 = 27
308
temp1 += stage.actNum
309
310
// If this is the Act 4 sprite, no it isn't it's Act 3
311
if temp1 > 30
312
temp1 = 30
313
end if
314
315
DrawSpriteScreenXY(temp1, temp0, 102)
316
end if
317
end if
318
end event
319
320
321
event ObjectStartup
322
LoadSpriteSheet("Global/Display.gif")
323
324
// Title card frames
325
326
// These first 26 are just the alphabet for the title card letters
327
SpriteFrame(0, 0, 15, 16, 37, 73) // #0 - Letter A
328
SpriteFrame(0, 0, 15, 16, 53, 73) // #1 - Letter B
329
SpriteFrame(0, 0, 15, 16, 69, 73) // #2 - Letter C
330
SpriteFrame(0, 0, 15, 16, 85, 73) // #3 - Letter D
331
SpriteFrame(0, 0, 14, 16, 101, 73) // #4 - Letter E
332
SpriteFrame(0, 0, 14, 16, 116, 73) // #5 - Letter F
333
SpriteFrame(0, 0, 16, 16, 131, 73) // #6 - Letter G
334
SpriteFrame(0, 0, 15, 16, 148, 73) // #7 - Letter H
335
SpriteFrame(0, 0, 6, 16, 164, 73) // #8 - Letter I
336
SpriteFrame(0, 0, 14, 16, 171, 73) // #9 - Letter J
337
SpriteFrame(0, 0, 16, 16, 186, 73) // #10 - Letter K
338
SpriteFrame(0, 0, 15, 16, 203, 73) // #11 - Letter L
339
SpriteFrame(0, 0, 16, 16, 219, 73) // #12 - Letter M
340
SpriteFrame(0, 0, 15, 16, 236, 73) // #13 - Letter N
341
SpriteFrame(0, 0, 16, 16, 37, 90) // #14 - Letter O
342
SpriteFrame(0, 0, 15, 16, 54, 90) // #15 - Letter P
343
SpriteFrame(0, 0, 16, 16, 70, 90) // #16 - Letter Q
344
SpriteFrame(0, 0, 15, 16, 87, 90) // #17 - Letter R
345
SpriteFrame(0, 0, 14, 16, 103, 90) // #18 - Letter S
346
SpriteFrame(0, 0, 14, 16, 118, 90) // #19 - Letter T
347
SpriteFrame(0, 0, 15, 16, 133, 90) // #20 - Letter U
348
SpriteFrame(0, 0, 15, 16, 149, 90) // #21 - Letter V
349
SpriteFrame(0, 0, 22, 16, 165, 90) // #22 - Letter W
350
SpriteFrame(0, 0, 16, 16, 188, 90) // #23 - Letter X
351
SpriteFrame(0, 0, 16, 16, 205, 90) // #24 - Letter Y
352
SpriteFrame(0, 0, 15, 16, 222, 90) // #25 - Letter Z
353
354
SpriteFrame(0, 0, 56, 56, 41, 1) // #26 - Big Blue circle
355
356
if stage.actNum >= 5
357
SpriteFrame(16, 0, 62, 16, 98, 26) // #27 - Zone text (With different offset, as there's no act number)
358
else
359
SpriteFrame(0, 0, 62, 16, 98, 26) // #27 - Zone text (Standard offset)
360
end if
361
362
SpriteFrame(0, 0, 39, 24, 98, 1) // #28 - Act 1 text
363
SpriteFrame(0, 0, 43, 24, 138, 1) // #29 - Act 2 text
364
SpriteFrame(0, 0, 43, 24, 182, 1) // #30 - Act 3 text
365
366
// Cycle through all objects and filter out title cards
367
// (Pretend this is a foreach, this object was made before foreaches were brought into existence)
368
arrayPos0 = 32
369
while arrayPos0 < 0x420
370
if object[arrayPos0].type == TypeName[Title Card]
371
object[arrayPos0].priority = PRIORITY_ALWAYS
372
object[arrayPos0].alpha = 0xFF
373
object[arrayPos0].drawOrder = 6
374
375
stage.state = STAGE_PAUSED
376
end if
377
378
arrayPos0++
379
loop
380
end event
381
382
383
// ========================
384
// Editor Events
385
// ========================
386
387
event RSDKDraw
388
DrawSprite(0)
389
end event
390
391
392
event RSDKLoad
393
LoadSpriteSheet("Global/Display.gif")
394
SpriteFrame(-8, -8, 16, 16, 239, 239) // "Trigger" - #0
395
396
SetVariableAlias(ALIAS_VAR_PROPVAL, "displayOffset")
397
end event
398
399