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/2PVS/ActResults.txt
1487 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Act Results 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.timer
13
private alias object.value1 : object.iconSheet
14
private alias object.value2 : object.textSheet
15
private alias object.value3 : object.scoreWinner
16
private alias object.value4 : object.timeWinner
17
private alias object.value5 : object.ringsWinner
18
private alias object.value6 : object.totalRingsWinner
19
private alias object.value7 : object.itemsWinner
20
private alias object.value8 : object.millisecs1P
21
private alias object.value9 : object.millisecs2P
22
private alias object.value10 : object.secs1P
23
private alias object.value11 : object.secs2P
24
private alias object.value12 : object.mins1P
25
private alias object.value13 : object.mins2P
26
private alias object.value14 : object.rings1P
27
private alias object.value15 : object.rings2P
28
private alias object.value16 : object.totalRings1P
29
private alias object.value17 : object.totalRings2P
30
private alias object.value18 : object.items1P
31
private alias object.value19 : object.items2P
32
private alias object.value20 : object.wins1P
33
private alias object.value21 : object.wins2P
34
private alias object.value22 : object.overallWinner
35
private alias object.value23 : object.actID
36
private alias object.value24 : object.zoneID
37
private alias object.value25 : object.score1P
38
private alias object.value26 : object.score2P
39
40
// States
41
private alias 0 : ACTRESULTS_SETUP
42
private alias 1 : ACTRESULTS_WAITING
43
private alias 2 : ACTRESULTS_CALCRESULTS
44
private alias 3 : ACTRESULTS_SHOWRESULTS
45
private alias 4 : ACTRESULTS_LOADSTAGE
46
private alias 5 : ACTRESULTS_FADEOUT
47
48
// 2PVSSetup Aliases
49
private alias object.value0 : 2PVSSetup.timer
50
51
// 2PVSSetup States
52
private alias 1 : 2PVSSETUP_FADEIN
53
private alias 2 : 2PVSSETUP_MENUACTIVE
54
private alias 3 : 2PVSSETUP_TOREGULARSTAGE
55
private alias 4 : 2PVSSETUP_TOSPECIALSTAGE
56
57
58
// ========================
59
// Function Declarations
60
// ========================
61
62
reserve function ActResults_CheckTieBreaker
63
64
65
// ========================
66
// Function Defintions
67
// ========================
68
69
// (This function is used by SS Single Result too)
70
public function ActResults_CheckTieBreaker
71
arrayPos0 = vs.match
72
arrayPos0 <<= 2
73
arrayPos0 += 0x400
74
// Wins 1P
75
temp0 = saveRAM[arrayPos0]
76
temp0 &= 15
77
// Wins 2P
78
temp1 = saveRAM[arrayPos0]
79
temp1 >>= 4
80
81
if temp0 == temp1
82
temp0 = 0
83
temp1 = 0
84
else
85
if temp0 > temp1
86
temp0 = 1 // 1P Win Count
87
temp1 = 0 // 2P Win Count
88
else
89
temp0 = 0
90
temp1 = 1
91
end if
92
end if
93
arrayPos0++
94
95
// Wins 1P
96
temp2 = saveRAM[arrayPos0]
97
temp2 &= 15
98
// Wins 2P
99
temp3 = saveRAM[arrayPos0]
100
temp3 >>= 4
101
102
if temp2 == temp3
103
temp2 = 0
104
temp3 = 0
105
else
106
if temp2 > temp3
107
temp2 = 1 // 1P Win Count
108
temp3 = 0 // 2P Win Count
109
else
110
temp2 = 0
111
temp3 = 1
112
end if
113
end if
114
115
temp0 += temp2 // Total 1P Win Count
116
temp1 += temp3 // Total 2P Win Count
117
if temp0 == temp1
118
checkResult = true
119
else
120
checkResult = false
121
end if
122
end function
123
124
125
// ========================
126
// Events
127
// ========================
128
129
event ObjectUpdate
130
switch object.state
131
case ACTRESULTS_SETUP
132
if ReceiveValue > -1
133
CallNativeFunction2(ReceiveEntity, 0x400, true)
134
ResetObjectEntity(0x400, TypeName[Blank Object], 0, 0, 0)
135
CallNativeFunction2(TransmitGlobal, "player.score2", player.score)
136
CallNativeFunction2(TransmitGlobal, "player.lives2", player.lives)
137
if vs.playerID == 0
138
CallNativeFunction2(TransmitGlobal, "vs.time1P", vs.time1P)
139
CallNativeFunction2(TransmitGlobal, "vs.rings1P", vs.rings1P)
140
CallNativeFunction2(TransmitGlobal, "vs.totalRings1P", vs.totalRings1P)
141
CallNativeFunction2(TransmitGlobal, "vs.items1P", vs.items1P)
142
else
143
CallNativeFunction2(TransmitGlobal, "vs.time2P", vs.time2P)
144
CallNativeFunction2(TransmitGlobal, "vs.rings2P", vs.rings2P)
145
CallNativeFunction2(TransmitGlobal, "vs.totalRings2P", vs.totalRings2P)
146
CallNativeFunction2(TransmitGlobal, "vs.items2P", vs.items2P)
147
end if
148
CallNativeFunction2(TransmitGlobal, "vs.dataSent", true)
149
150
object[0].state = 2PVSSETUP_MENUACTIVE
151
object.state = ACTRESULTS_WAITING
152
else
153
object.state = ACTRESULTS_CALCRESULTS
154
end if
155
break
156
157
case ACTRESULTS_WAITING
158
if vs.dataSent == true
159
object[0].state = 2PVSSETUP_FADEIN
160
2PVSSetup[0].timer = 384
161
SetScreenFade(0x00, 0x00, 0x00, 0xFF)
162
object.state = ACTRESULTS_CALCRESULTS
163
end if
164
break
165
166
case ACTRESULTS_CALCRESULTS
167
SetupMenu(MENU_1, 0, 3, 0)
168
169
LoadSpriteSheet("LevelSelect/Icons.gif")
170
object.iconSheet = object.spriteSheet
171
172
LoadSpriteSheet("LevelSelect/Text.gif")
173
object.textSheet = object.spriteSheet
174
175
#platform: USE_ORIGINS
176
options.physicalControls = true
177
#endplatform
178
179
180
menu1.selection = -1
181
object.zoneID = vs.listPos
182
object.zoneID >>= 1
183
object.actID = vs.listPos
184
object.actID &= 1
185
186
if object.actID == 0
187
AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@@@@@@@@@@@@* 1 *", true)
188
else
189
AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@@@@@@@@@@@@* 2 *", true)
190
end if
191
AddMenuEntry(MENU_1, "@", true)
192
AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@@@1P@@@@@@@@2P@@@@WINS", true)
193
AddMenuEntry(MENU_1, "@", true)
194
AddMenuEntry(MENU_1, "@@SCORE", true)
195
AddMenuEntry(MENU_1, "@", true)
196
AddMenuEntry(MENU_1, "@@TIME@@@@@@@@:@@:@@@@@@:@@:", true)
197
AddMenuEntry(MENU_1, "@", true)
198
AddMenuEntry(MENU_1, "@@RING", true)
199
AddMenuEntry(MENU_1, "@", true)
200
AddMenuEntry(MENU_1, "@@TOTAL RING", true)
201
AddMenuEntry(MENU_1, "@", true)
202
AddMenuEntry(MENU_1, "@@ITEM BOX", true)
203
AddMenuEntry(MENU_1, "@", true)
204
AddMenuEntry(MENU_1, "@", true)
205
AddMenuEntry(MENU_1, "@", true)
206
AddMenuEntry(MENU_1, "* TOTAL *@@@@@@@@@@@@:", true)
207
208
object.wins1P = 0
209
object.wins2P = 0
210
if vs.playerID == 0
211
object.score1P = player.score
212
object.score2P = player.score2
213
else
214
object.score1P = player.score2
215
object.score2P = player.score
216
end if
217
218
if object.score1P == object.score2P
219
object.scoreWinner = 11
220
else
221
if object.score1P > object.score2P
222
object.scoreWinner = 9
223
object.wins1P++
224
else
225
object.scoreWinner = 10
226
object.wins2P++
227
end if
228
end if
229
230
#platform: USE_STANDALONE
231
object.millisecs1P = vs.time1P
232
object.millisecs1P %= 100
233
object.secs1P = vs.time1P
234
object.secs1P /= 100
235
object.secs1P %= 60
236
object.mins1P = vs.time1P
237
object.mins1P /= 6000
238
#endplatform
239
240
#platform: USE_ORIGINS
241
temp0 = vs.time1P
242
if temp0 >= 0x927BF
243
temp0 = 0x927BF
244
end if
245
object.millisecs1P = temp0
246
object.millisecs1P %= 100
247
object.secs1P = temp0
248
object.secs1P /= 100
249
object.secs1P %= 60
250
object.mins1P = temp0
251
object.mins1P /= 6000
252
#endplatform
253
254
#platform: USE_STANDALONE
255
object.millisecs2P = vs.time2P
256
object.millisecs2P %= 100
257
object.secs2P = vs.time2P
258
object.secs2P /= 100
259
object.secs2P %= 60
260
object.mins2P = vs.time2P
261
object.mins2P /= 6000
262
#endplatform
263
264
#platform: USE_ORIGINS
265
temp0 = vs.time2P
266
if temp0 >= 0x927BF
267
temp0 = 0x927BF
268
end if
269
object.millisecs2P = temp0
270
object.millisecs2P %= 100
271
object.secs2P = temp0
272
object.secs2P /= 100
273
object.secs2P %= 60
274
object.mins2P = temp0
275
object.mins2P /= 6000
276
#endplatform
277
278
if vs.time1P == vs.time2P
279
object.timeWinner = 11
280
else
281
if vs.time1P < vs.time2P
282
object.timeWinner = 9
283
object.wins1P++
284
else
285
object.timeWinner = 10
286
object.wins2P++
287
end if
288
end if
289
290
object.rings1P = vs.rings1P
291
object.rings2P = vs.rings2P
292
if object.rings1P == object.rings2P
293
object.ringsWinner = 11
294
else
295
if object.rings1P > object.rings2P
296
object.ringsWinner = 9
297
object.wins1P++
298
else
299
object.ringsWinner = 10
300
object.wins2P++
301
end if
302
end if
303
304
object.totalRings1P = vs.totalRings1P
305
object.totalRings2P = vs.totalRings2P
306
if object.totalRings1P == object.totalRings2P
307
object.totalRingsWinner = 11
308
else
309
if object.totalRings1P > object.totalRings2P
310
object.totalRingsWinner = 9
311
object.wins1P++
312
else
313
object.totalRingsWinner = 10
314
object.wins2P++
315
end if
316
end if
317
318
object.items1P = vs.items1P
319
object.items2P = vs.items2P
320
if object.items1P == object.items2P
321
object.itemsWinner = 11
322
else
323
if object.items1P > object.items2P
324
object.itemsWinner = 9
325
object.wins1P++
326
else
327
object.itemsWinner = 10
328
object.wins2P++
329
end if
330
end if
331
332
if object.wins1P == object.wins2P
333
object.overallWinner = 26
334
else
335
if object.wins1P > object.wins2P
336
object.overallWinner = 22
337
else
338
object.overallWinner = 24
339
end if
340
end if
341
342
arrayPos0 = vs.match
343
arrayPos0 <<= 2
344
arrayPos0 += object.actID
345
arrayPos0 += 0x400
346
saveRAM[arrayPos0] = object.wins2P
347
saveRAM[arrayPos0] <<= 4
348
saveRAM[arrayPos0] += object.wins1P
349
if object.actID == 1
350
arrayPos0++
351
saveRAM[arrayPos0] = 0
352
arrayPos0++
353
saveRAM[arrayPos0] = object.zoneID
354
end if
355
356
object.state = ACTRESULTS_SHOWRESULTS
357
break
358
359
case ACTRESULTS_SHOWRESULTS
360
if object.timer < 60
361
object.timer++
362
else
363
CheckTouchRect(0, 0, screen.xsize, screen.ysize)
364
if keyPress[0].start == true
365
checkResult = 0
366
end if
367
368
if keyPress[0].buttonA == true
369
checkResult = 0
370
end if
371
372
if keyPress[0].buttonB == true
373
checkResult = 0
374
end if
375
376
if keyPress[0].buttonC == true
377
checkResult = 0
378
end if
379
380
if checkResult > -1
381
object.timer = 0
382
if object.actID == 0
383
vs.listPos++
384
stage.activeList = vs.activeList
385
stage.listPos = vs.listPos
386
object.state = ACTRESULTS_LOADSTAGE
387
object[0].state = 2PVSSETUP_TOREGULARSTAGE
388
else
389
CallFunction(ActResults_CheckTieBreaker)
390
if checkResult == true
391
stage.activeList = SPECIAL_STAGE
392
stage.listPos = object.zoneID
393
object.state = ACTRESULTS_LOADSTAGE
394
object[0].state = 2PVSSETUP_TOSPECIALSTAGE
395
PlaySfx(SfxName[Warp], false)
396
vs.tieBreaker = true
397
else
398
object.state = ACTRESULTS_FADEOUT
399
end if
400
end if
401
end if
402
end if
403
break
404
405
case ACTRESULTS_LOADSTAGE
406
break
407
408
case ACTRESULTS_FADEOUT
409
if object.timer < 256
410
object.timer += 16
411
SetScreenFade(0x00, 0x00, 0x00, object.timer)
412
else
413
ResetObjectEntity(1, TypeName[Zone Results], 0, 0, 0)
414
object[1].priority = PRIORITY_ACTIVE
415
object[0].state = 2PVSSETUP_FADEIN
416
2PVSSetup[0].timer = 384
417
SetScreenFade(0x00, 0x00, 0x00, 0xFF)
418
end if
419
break
420
end switch
421
422
object.animationTimer++
423
object.animationTimer &= 15
424
end event
425
426
427
event ObjectDraw
428
if object.state < ACTRESULTS_CALCRESULTS
429
// Waiting...
430
object.spriteSheet = object.iconSheet
431
DrawRect(0, 0, screen.xsize, screen.ysize, 0x00, 0x00, 0x00, 0xFF)
432
DrawSpriteScreenXY(28, screen.xsize, screen.ysize)
433
else
434
object.spriteSheet = object.iconSheet
435
436
// ZONE RESULT
437
DrawSpriteScreenXY(8, screen.xcenter, 17)
438
DrawSpriteScreenXY(object.zoneID, screen.xcenter, 57)
439
440
// 1P Results
441
temp0 = screen.xcenter
442
temp0 += 8
443
DrawNumbers(12, temp0, 89, object.score1P, 6, 8, false)
444
DrawNumbers(12, temp0, 121, object.rings1P, 3, 8, false)
445
DrawNumbers(12, temp0, 137, object.totalRings1P, 3, 8, false)
446
DrawNumbers(12, temp0, 153, object.items1P, 3, 8, false)
447
DrawNumbers(12, temp0, 105, object.millisecs1P, 2, 8, true)
448
temp0 -= 24
449
DrawNumbers(12, temp0, 105, object.secs1P, 2, 8, true)
450
temp0 -= 24
451
#platform: USE_ORIGINS
452
if object.mins1P >= 10
453
DrawNumbers(12, temp0, 105, object.mins1P, 2, 8, true)
454
else
455
#endplatform
456
DrawNumbers(12, temp0, 105, object.mins1P, 1, 8, true)
457
#platform: USE_ORIGINS
458
end if
459
#endplatform
460
461
// 2P Results
462
temp0 = screen.xcenter
463
temp0 += 88
464
DrawNumbers(12, temp0, 89, object.score2P, 6, 8, false)
465
DrawNumbers(12, temp0, 121, object.rings2P, 3, 8, false)
466
DrawNumbers(12, temp0, 137, object.totalRings2P, 3, 8, false)
467
DrawNumbers(12, temp0, 153, object.items2P, 3, 8, false)
468
DrawNumbers(12, temp0, 105, object.millisecs2P, 2, 8, true)
469
temp0 -= 24
470
DrawNumbers(12, temp0, 105, object.secs2P, 2, 8, true)
471
temp0 -= 24
472
#platform: USE_ORIGINS
473
if object.mins2P >= 10
474
DrawNumbers(12, temp0, 105, object.mins2P, 2, 8, true)
475
else
476
#endplatform
477
DrawNumbers(12, temp0, 105, object.mins2P, 1, 8, true)
478
#platform: USE_ORIGINS
479
end if
480
#endplatform
481
temp0 = screen.xcenter
482
temp0 += 8
483
484
// Wins
485
DrawNumbers(12, temp0, 185, object.wins1P, 1, 8, true)
486
temp0 += 32
487
DrawNumbers(12, temp0, 185, object.wins2P, 1, 8, true)
488
489
// Winners
490
temp0 = screen.xcenter
491
temp0 += 128
492
DrawSpriteScreenXY(object.scoreWinner, temp0, 89)
493
DrawSpriteScreenXY(object.timeWinner, temp0, 105)
494
DrawSpriteScreenXY(object.ringsWinner, temp0, 121)
495
DrawSpriteScreenXY(object.totalRingsWinner, temp0, 137)
496
DrawSpriteScreenXY(object.itemsWinner, temp0, 153)
497
temp0 = object.animationTimer
498
temp0 >>= 3
499
temp0 += object.overallWinner
500
DrawSpriteScreenXY(temp0, screen.xcenter, 210)
501
502
// Menu
503
object.spriteSheet = object.textSheet
504
temp0 = screen.xcenter
505
temp0 -= 144
506
DrawMenu(MENU_1, temp0, 56)
507
end if
508
end event
509
510
511
event ObjectStartup
512
LoadSpriteSheet("LevelSelect/Icons.gif")
513
LoadSpriteSheet("LevelSelect/Text.gif")
514
515
SpriteFrame(-88, 0, 136, 7, 103, 350) // EMERALD HILL ZONE - #0
516
SpriteFrame(-104, 0, 152, 7, 103, 358) // CHEMICAL PLANT ZONE - #1
517
SpriteFrame(-88, 0, 136, 7, 103, 366) // AQUATIC RUIN ZONE - #2
518
SpriteFrame(-88, 0, 136, 7, 103, 374) // CASINO NIGHT ZONE - #3
519
SpriteFrame(-56, 0, 104, 7, 103, 382) // HILL TOP ZONE - #4
520
SpriteFrame(-80, 0, 128, 7, 103, 390) // MYSTIC CAVE ZONE - #5
521
SpriteFrame(-64, 0, 112, 7, 103, 398) // OIL OCEAN ZONE - #6
522
SpriteFrame(-56, 0, 104, 7, 103, 406) // SPECIAL STAGE - #7
523
SpriteFrame(-48, 0, 96, 14, 1, 136) // RESULT - #8
524
SpriteFrame(-8, 0, 16, 7, 98, 136) // 1P text - #9
525
SpriteFrame(-8, 0, 16, 7, 115, 136) // 2P text - #10
526
SpriteFrame(-16, 0, 32, 7, 132, 136) // TIED text - #11
527
SpriteFrame(0, 0, 8, 7, 175, 140) // 0 - #12
528
SpriteFrame(0, 0, 8, 7, 183, 140) // 1 - #13
529
SpriteFrame(0, 0, 8, 7, 191, 140) // 2 - #14
530
SpriteFrame(0, 0, 8, 7, 199, 140) // 3 - #15
531
SpriteFrame(0, 0, 8, 7, 207, 140) // 4 - #16
532
SpriteFrame(0, 0, 8, 7, 215, 140) // 5 - #17
533
SpriteFrame(0, 0, 8, 7, 223, 140) // 6 - #18
534
SpriteFrame(0, 0, 8, 7, 231, 140) // 7 - #19
535
SpriteFrame(0, 0, 8, 7, 239, 140) // 8 - #20
536
SpriteFrame(0, 0, 8, 7, 247, 140) // 9 - #21
537
SpriteFrame(-47, 0, 91, 12, 1, 110) // 1P WINS - #22
538
SpriteFrame(-47, 0, 91, 12, 1, 123) // 1P WINS (Flashing) - #23
539
SpriteFrame(-47, 0, 91, 12, 93, 110) // 2P WINS - #24
540
SpriteFrame(-47, 0, 91, 12, 93, 123) // 2P WINS (Flashing) - #25
541
SpriteFrame(-22, 0, 44, 12, 1, 385) // TIED - #26
542
SpriteFrame(-22, 0, 44, 12, 1, 398) // TIED (Flashing) - #27
543
if vs.playerID == 0
544
SpriteFrame(-160, -16, 136, 7, 103, 422) // WAITING FOR 2P... - #28
545
else
546
SpriteFrame(-160, -16, 136, 7, 103, 414) // WAITING FOR 1P... - #28
547
end if
548
549
foreach (TypeName[Act Results], arrayPos0, ALL_ENTITIES)
550
object[arrayPos0].priority = PRIORITY_ACTIVE
551
next
552
end event
553
554
555
// ========================
556
// Editor Events
557
// ========================
558
559
event RSDKDraw
560
DrawSprite(0)
561
end event
562
563
564
event RSDKLoad
565
LoadSpriteSheet("LevelSelect/Icons.gif")
566
SpriteFrame(-48, 0, 96, 14, 1, 136) // RESULT - #0
567
568
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
569
end event
570
571