Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/Secrets/StageSelect.txt
1319 views
1
//----------------Sonic CD Stage Select Script----------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value0 : Object.Fade // Also used for timing
7
#alias Object.Value1 : Object.Level
8
#alias Object.Value2 : Object.HoldTimer
9
#alias Object.Value3 : Object.TouchButton
10
11
// States
12
#alias 0 : STAGESELECT_SETUP
13
#alias 1 : STAGESELECT_FADE_IN
14
#alias 2 : STAGESELECT_CONTROLS
15
#alias 3 : STAGESELECT_LOAD_LEVEL
16
#alias 4 : STAGESELECT_EXIT
17
18
// Presentation Stages
19
#alias 1 : STAGE_P_MENU
20
21
// Global SFX
22
#alias 27 : SFX_G_SELECT
23
24
// Game Mode Aliases
25
#alias 0 : MODE_NOSAVE
26
27
//Engine & CallBacks
28
#alias 2 : MESSAGE_LOSTFOCUS
29
30
// Device Type
31
#alias 1 : RETRO_MOBILE
32
33
34
sub ObjectMain
35
switch Object.State
36
case STAGESELECT_SETUP
37
if Object.Fade < 8
38
Object.Fade++
39
else
40
Object.Fade = 254
41
Object.State++
42
end if
43
SetScreenFade(0, 0, 0, 255)
44
break
45
46
case STAGESELECT_FADE_IN
47
if Object.Fade > 0
48
SetScreenFade(0, 0, 0, Object.Fade)
49
Object.Fade -= 8
50
else
51
Object.State++
52
end if
53
break
54
55
case STAGESELECT_CONTROLS
56
if KeyPress[0].Up == true
57
Object.HoldTimer = 0
58
Object.Level--
59
if Object.Level < 0
60
Object.Level = 69
61
end if
62
else
63
if KeyPress[0].Down == true
64
Object.HoldTimer = 0
65
Object.Level++
66
if Object.Level > 69
67
Object.Level = 0
68
end if
69
end if
70
end if
71
72
if KeyDown[0].Up == true
73
Object.HoldTimer++
74
if Object.HoldTimer == 8
75
Object.HoldTimer = 0
76
Object.Level--
77
if Object.Level < 0
78
Object.Level = 69
79
end if
80
end if
81
else
82
if KeyDown[0].Down == true
83
Object.HoldTimer++
84
if Object.HoldTimer == 8
85
Object.HoldTimer = 0
86
Object.Level++
87
if Object.Level > 69
88
Object.Level = 0
89
end if
90
end if
91
end if
92
end if
93
94
if KeyPress[0].Start == true
95
Object.State = STAGESELECT_LOAD_LEVEL
96
end if
97
98
if KeyPress[0].ButtonA == true
99
Object.State = STAGESELECT_LOAD_LEVEL
100
end if
101
102
if KeyPress[0].ButtonB == true
103
Object.State = STAGESELECT_EXIT
104
end if
105
106
#platform: Use_Origins
107
if Engine.DeviceType == RETRO_MOBILE
108
TempValue0 = Screen.CenterX
109
TempValue0 -= 138
110
TempValue1 = Screen.CenterX
111
TempValue1 -= 76
112
CheckTouchRect(TempValue0, 20, TempValue1, 72)
113
if CheckResult > -1
114
KeyDown[0].Up = true
115
Object.HoldTimer++
116
if Object.HoldTimer == 8
117
Object.HoldTimer = 0
118
Object.Level--
119
if Object.Level < 0
120
Object.Level = 69
121
end if
122
end if
123
end if
124
CheckTouchRect(TempValue0, 162, TempValue1, 214)
125
if CheckResult > -1
126
KeyDown[0].Down = true
127
Object.HoldTimer++
128
if Object.HoldTimer == 8
129
Object.HoldTimer = 0
130
Object.Level++
131
if Object.Level > 69
132
Object.Level = 0
133
end if
134
end if
135
end if
136
if Engine.Message == MESSAGE_LOSTFOCUS
137
Object.TouchButton = 0
138
end if
139
TempValue0 = Screen.CenterX
140
TempValue0 += 28
141
TempValue1 = Screen.CenterX
142
TempValue1 += 68
143
CheckTouchRect(TempValue0, 162, TempValue1, 214)
144
if CheckResult > -1
145
Object.TouchButton = 1
146
else
147
CheckTouchRect(0, 0, Screen.XSize, Screen.YSize)
148
if CheckResult < 0
149
if Object.TouchButton == 1
150
Object.TouchButton = 0
151
PlaySfx(SFX_G_SELECT, false)
152
Object.State = STAGESELECT_EXIT
153
end if
154
else
155
if Object.TouchButton == 1
156
Object.TouchButton = 0
157
end if
158
end if
159
end if
160
TempValue0 += 48
161
TempValue1 += 48
162
CheckTouchRect(TempValue0, 162, TempValue1, 214)
163
if CheckResult > -1
164
Object.TouchButton = 2
165
else
166
CheckTouchRect(0, 0, Screen.XSize, Screen.YSize)
167
if CheckResult < 0
168
if Object.TouchButton == 2
169
Object.TouchButton = 0
170
PlaySfx(SFX_G_SELECT, false)
171
Object.State = STAGESELECT_LOAD_LEVEL
172
end if
173
else
174
if Object.TouchButton == 2
175
Object.TouchButton = 0
176
end if
177
end if
178
end if
179
end if
180
#endplatform
181
182
#platform: Use_Standalone
183
#platform: Mobile
184
TempValue0 = Screen.CenterX
185
TempValue0 -= 138
186
TempValue1 = Screen.CenterX
187
TempValue1 -= 76
188
CheckTouchRect(TempValue0, 20, TempValue1, 72)
189
if CheckResult > -1
190
KeyDown[0].Up = true
191
Object.HoldTimer++
192
if Object.HoldTimer == 8
193
Object.HoldTimer = 0
194
Object.Level--
195
if Object.Level < 0
196
Object.Level = 69
197
end if
198
end if
199
end if
200
201
CheckTouchRect(TempValue0, 162, TempValue1, 214)
202
if CheckResult > -1
203
KeyDown[0].Down = true
204
Object.HoldTimer++
205
if Object.HoldTimer == 8
206
Object.HoldTimer = 0
207
Object.Level++
208
if Object.Level > 69
209
Object.Level = 0
210
end if
211
end if
212
end if
213
214
if Engine.Message == MESSAGE_LOSTFOCUS
215
Object.TouchButton = 0
216
end if
217
TempValue0 = Screen.CenterX
218
TempValue0 += 28
219
TempValue1 = Screen.CenterX
220
TempValue1 += 68
221
CheckTouchRect(TempValue0, 162, TempValue1, 214)
222
if CheckResult > -1
223
Object.TouchButton = 1
224
else
225
CheckTouchRect(0, 0, Screen.XSize, Screen.YSize)
226
if CheckResult < 0
227
if Object.TouchButton == 1
228
Object.TouchButton = 0
229
PlaySfx(SFX_G_SELECT, false)
230
Object.State = STAGESELECT_EXIT
231
end if
232
else
233
if Object.TouchButton == 1
234
Object.TouchButton = 0
235
end if
236
end if
237
end if
238
TempValue0 += 48
239
TempValue1 += 48
240
CheckTouchRect(TempValue0, 162, TempValue1, 214)
241
if CheckResult > -1
242
Object.TouchButton = 2
243
else
244
CheckTouchRect(0, 0, Screen.XSize, Screen.YSize)
245
if CheckResult < 0
246
if Object.TouchButton == 2
247
Object.TouchButton = 0
248
PlaySfx(SFX_G_SELECT, false)
249
Object.State = STAGESELECT_LOAD_LEVEL
250
end if
251
else
252
if Object.TouchButton == 2
253
Object.TouchButton = 0
254
end if
255
end if
256
end if
257
#endplatform
258
#endplatform
259
break
260
261
case STAGESELECT_LOAD_LEVEL
262
if Object.Fade < 288
263
Object.Fade += 8
264
else
265
Options.GameMode = MODE_NOSAVE
266
Player.Lives = 3
267
Stage.ActiveList = REGULAR_STAGE
268
Stage.ListPos = Object.Level
269
LoadStage()
270
end if
271
TempValue0 = Object.Fade
272
if TempValue0 > 255
273
TempValue0 = 255
274
end if
275
SetScreenFade(0, 0, 0, TempValue0)
276
break
277
278
case STAGESELECT_EXIT
279
if Object.Fade < 288
280
Object.Fade += 8
281
else
282
Options.GameMode = MODE_NOSAVE
283
Stage.ActiveList = PRESENTATION_STAGE
284
Stage.ListPos = STAGE_P_MENU
285
LoadStage()
286
end if
287
TempValue0 = Object.Fade
288
if TempValue0 > 255
289
TempValue0 = 255
290
end if
291
SetScreenFade(0, 0, 0, TempValue0)
292
break
293
294
end switch
295
end sub
296
297
298
sub ObjectDraw
299
TempValue0 = 0
300
while TempValue0 < 240
301
TempValue1 = 0
302
while TempValue1 < Screen.XSize
303
DrawSpriteScreenXY(15, TempValue1, TempValue0)
304
TempValue1 += 224
305
loop
306
TempValue0 += 48
307
loop
308
DrawSpriteScreenXY(16, Screen.CenterX, 80)
309
310
TempValue0 = Screen.CenterX
311
TempValue0 -= 48
312
TempValue1 = Object.Level
313
TempValue1 /= 10
314
switch TempValue1
315
case 0
316
DrawSpriteScreenXY(1, TempValue0, 112)
317
break
318
case 1
319
DrawSpriteScreenXY(3, TempValue0, 112)
320
break
321
case 2
322
DrawSpriteScreenXY(4, TempValue0, 112)
323
break
324
case 3
325
DrawSpriteScreenXY(5, TempValue0, 112)
326
break
327
case 4
328
DrawSpriteScreenXY(6, TempValue0, 112)
329
break
330
case 5
331
DrawSpriteScreenXY(7, TempValue0, 112)
332
break
333
case 6
334
DrawSpriteScreenXY(8, TempValue0, 112)
335
break
336
end switch
337
TempValue0 += 8
338
DrawSpriteScreenXY(14, TempValue0, 112)
339
340
TempValue0 += 8
341
TempValue1 = Object.Level
342
TempValue1 %= 10
343
TempValue1 >>= 2
344
TempValue1++
345
DrawSpriteScreenXY(TempValue1, TempValue0, 112)
346
347
TempValue0 += 8
348
DrawSpriteScreenXY(14, TempValue0, 112)
349
350
TempValue0 += 8
351
TempValue1 = Object.Level
352
TempValue1 %= 10
353
switch TempValue1
354
case 0
355
case 4
356
DrawSpriteScreenXY(10, TempValue0, 112)
357
break
358
359
case 1
360
case 5
361
DrawSpriteScreenXY(11, TempValue0, 112)
362
break
363
364
case 2
365
case 6
366
case 8
367
DrawSpriteScreenXY(12, TempValue0, 112)
368
break
369
370
case 3
371
case 7
372
case 9
373
DrawSpriteScreenXY(13, TempValue0, 112)
374
break
375
376
end switch
377
#platform: Use_Origins
378
if Engine.DeviceType == RETRO_MOBILE
379
TempValue0 -= 96
380
if KeyDown[0].Up == true
381
DrawSpriteScreenXY(18, TempValue0, 48)
382
else
383
DrawSpriteScreenXY(17, TempValue0, 48)
384
end if
385
if KeyDown[0].Down == true
386
DrawSpriteScreenXY(20, TempValue0, 192)
387
else
388
DrawSpriteScreenXY(19, TempValue0, 192)
389
end if
390
TempValue0 += 160
391
if Object.TouchButton == 1
392
DrawSpriteScreenXY(24, TempValue0, 192)
393
else
394
DrawSpriteScreenXY(23, TempValue0, 192)
395
end if
396
TempValue0 += 48
397
if Object.TouchButton == 2
398
DrawSpriteScreenXY(22, TempValue0, 192)
399
else
400
DrawSpriteScreenXY(21, TempValue0, 192)
401
end if
402
end if
403
#endplatform
404
405
#platform: Use_Standalone
406
#platform: Mobile
407
TempValue0 -= 96
408
if KeyDown[0].Up == true
409
DrawSpriteScreenXY(18, TempValue0, 48)
410
else
411
DrawSpriteScreenXY(17, TempValue0, 48)
412
end if
413
414
if KeyDown[0].Down == true
415
DrawSpriteScreenXY(20, TempValue0, 192)
416
else
417
DrawSpriteScreenXY(19, TempValue0, 192)
418
end if
419
420
TempValue0 += 160
421
if Object.TouchButton == 1
422
DrawSpriteScreenXY(24, TempValue0, 192)
423
else
424
DrawSpriteScreenXY(23, TempValue0, 192)
425
end if
426
427
TempValue0 += 48
428
if Object.TouchButton == 2
429
DrawSpriteScreenXY(22, TempValue0, 192)
430
else
431
DrawSpriteScreenXY(21, TempValue0, 192)
432
end if
433
#endplatform
434
#endplatform
435
end sub
436
437
438
sub ObjectStartup
439
LoadSpriteSheet("Secrets/SecretMenus.gif")
440
SpriteFrame(0, 0, 8, 16, 1, 49) // #0 - 0
441
SpriteFrame(0, 0, 8, 16, 10, 49) // #1 - 1
442
SpriteFrame(0, 0, 8, 16, 19, 49) // #2 - 2
443
SpriteFrame(0, 0, 8, 16, 28, 49) // #3 - 3
444
SpriteFrame(0, 0, 8, 16, 1, 66) // #4 - 4
445
SpriteFrame(0, 0, 8, 16, 10, 66) // #5 - 5
446
SpriteFrame(0, 0, 8, 16, 19, 66) // #6 - 6
447
SpriteFrame(0, 0, 8, 16, 28, 66) // #7 - 7
448
SpriteFrame(0, 0, 8, 16, 1, 83) // #8 - 8
449
SpriteFrame(0, 0, 8, 16, 10, 83) // #9 - 9
450
SpriteFrame(0, 0, 8, 16, 37, 49) // #10 - A
451
SpriteFrame(0, 0, 8, 16, 46, 49) // #11 - B
452
SpriteFrame(0, 0, 8, 16, 55, 49) // #12 - C
453
SpriteFrame(0, 0, 8, 16, 64, 49) // #13 - D
454
SpriteFrame(0, 0, 8, 16, 19, 83) // #14 - "-"
455
SpriteFrame(0, 0, 224, 48, 0, 0) // #15 - Background
456
SpriteFrame(-48, 0, 96, 16, 136, 66) // #16 - Stage Select
457
SpriteFrame(-10, -10, 20, 20, 136, 117) // #17 - Up Arrow
458
SpriteFrame(-10, -10, 20, 20, 136, 138) // #18 - Up Arrow Highlight
459
SpriteFrame(-10, -10, 20, 20, 157, 117) // #19 - Down Arrow
460
SpriteFrame(-10, -10, 20, 20, 157, 138) // #20 - Down Arrow Highlight
461
SpriteFrame(-20, -10, 40, 20, 159, 159) // #21 - GO Button
462
SpriteFrame(-20, -10, 40, 20, 159, 180) // #22 - GO Button Highlight
463
SpriteFrame(-20, -10, 40, 20, 200, 159) // #23 - Exit Button
464
SpriteFrame(-20, -10, 40, 20, 200, 180) // #24 - Exit Button Highlight
465
end sub
466
467
468
// ========================
469
// Editor Subs
470
// ========================
471
472
sub RSDKDraw
473
DrawSprite(0)
474
end sub
475
476
477
sub RSDKLoad
478
LoadSpriteSheet("Secrets/SecretMenus.gif")
479
SpriteFrame(-48, 0, 96, 16, 136, 66) // #0 - Stage Select
480
481
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
482
end sub
483
484