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/ZoneResults.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Zone 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.round1Winner
16
private alias object.value4 : object.round2Winner
17
private alias object.value5 : object.round3Winner
18
private alias object.value6 : object.round1Results
19
private alias object.value7 : object.round2Results
20
private alias object.value8 : object.round3Results
21
private alias object.value9 : object.wins1P
22
private alias object.value10 : object.wins2P
23
private alias object.value11 : object.overallWinner
24
private alias object.value12 : object.zoneID
25
private alias object.value13 : object.vsReady
26
private alias object.value14 : object.hasTieBreaker
27
28
// States
29
private alias 0 : ZONERESULTS_SETUP
30
private alias 1 : ZONERESULTS_WAITING
31
private alias 2 : ZONERESULTS_SHOWRESULTS
32
private alias 3 : ZONERESULTS_FADEOUT
33
private alias 4 : ZONERESULTS_RETURNTOZONESEL
34
35
// 2PVSSetup Aliases
36
private alias object.value0 : 2PVSSetup.timer
37
38
// 2PVSSetup States
39
private alias 1 : 2PVSSETUP_FADEIN
40
41
42
// ========================
43
// Events
44
// ========================
45
46
event ObjectUpdate
47
switch object.state
48
case ZONERESULTS_SETUP
49
SetupMenu(MENU_1, 0, 3, 0)
50
51
LoadSpriteSheet("LevelSelect/Icons.gif")
52
object.iconSheet = object.spriteSheet
53
54
LoadSpriteSheet("LevelSelect/Text.gif")
55
object.textSheet = object.spriteSheet
56
57
menu1.selection = -1
58
59
arrayPos0 = vs.match
60
arrayPos0 <<= 2
61
arrayPos0 += 0x400
62
object.round1Results = saveRAM[arrayPos0]
63
64
arrayPos0++
65
object.round2Results = saveRAM[arrayPos0]
66
67
arrayPos0++
68
object.round3Results = saveRAM[arrayPos0]
69
70
object.zoneID = vs.listPos
71
object.zoneID >>= 1
72
object.wins1P = 0
73
object.wins2P = 0
74
75
// 1P Wins
76
temp0 = object.round1Results
77
temp0 &= 15
78
// 2P Wins
79
temp1 = object.round1Results
80
temp1 >>= 4
81
if temp0 == temp1
82
object.round1Winner = 11
83
else
84
if temp0 > temp1
85
object.round1Winner = 9
86
object.wins1P++
87
else
88
object.round1Winner = 10
89
object.wins2P++
90
end if
91
end if
92
93
// 1P Wins
94
temp0 = object.round2Results
95
temp0 &= 15
96
// 2P Wins
97
temp1 = object.round2Results
98
temp1 >>= 4
99
if temp0 == temp1
100
object.round2Winner = 11
101
else
102
if temp0 > temp1
103
object.round2Winner = 9
104
object.wins1P++
105
else
106
object.round2Winner = 10
107
object.wins2P++
108
end if
109
end if
110
object.hasTieBreaker = vs.tieBreaker
111
vs.tieBreaker = false
112
113
// 1P Wins
114
temp0 = object.round3Results
115
temp0 &= 15
116
// 2P Wins
117
temp1 = object.round3Results
118
temp1 >>= 4
119
if temp0 == temp1
120
object.round3Winner = 11
121
else
122
if temp0 > temp1
123
object.round3Winner = 9
124
object.wins1P++
125
else
126
object.round3Winner = 10
127
object.wins2P++
128
end if
129
end if
130
131
if object.wins1P == object.wins2P
132
object.overallWinner = 26
133
else
134
if object.wins1P > object.wins2P
135
object.overallWinner = 22
136
else
137
object.overallWinner = 24
138
end if
139
end if
140
141
AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@@@@@@@@@@@WINS", true)
142
AddMenuEntry(MENU_1, "@", true)
143
AddMenuEntry(MENU_1, "@@@@@@@@* 1 *@@@@@:", true)
144
AddMenuEntry(MENU_1, "@", true)
145
AddMenuEntry(MENU_1, "@", true)
146
AddMenuEntry(MENU_1, "@@@@@@@@* 2 *@@@@@:", true)
147
AddMenuEntry(MENU_1, "@", true)
148
AddMenuEntry(MENU_1, "@", true)
149
AddMenuEntry(MENU_1, "SPECIAL STAGE", true)
150
AddMenuEntry(MENU_1, "@", true)
151
if object.hasTieBreaker == false
152
AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@NO GAME", true)
153
else
154
AddMenuEntry(MENU_1, "@@@@@@@@@@@@@@@@@@:", true)
155
end if
156
AddMenuEntry(MENU_1, "@", true)
157
AddMenuEntry(MENU_1, "@", true)
158
AddMenuEntry(MENU_1, "@", true)
159
AddMenuEntry(MENU_1, "@", true)
160
AddMenuEntry(MENU_1, "@@@@@@@@@@THE ZONE", true)
161
object.state++
162
break
163
164
case ZONERESULTS_WAITING
165
CallNativeFunction2(ReceiveEntity, 32, true)
166
ResetObjectEntity(32, TypeName[Blank Object], 0, 0, 0)
167
object.state++
168
break
169
170
case ZONERESULTS_SHOWRESULTS
171
if object.timer < 60
172
object.timer++
173
else
174
CheckTouchRect(0, 0, screen.xsize, screen.ysize)
175
if keyPress[0].start == true
176
checkResult = 0
177
end if
178
179
if keyPress[0].buttonA == true
180
checkResult = 0
181
end if
182
183
if keyPress[0].buttonB == true
184
checkResult = 0
185
end if
186
187
if keyPress[0].buttonC == true
188
checkResult = 0
189
end if
190
191
if checkResult > -1
192
object.timer = 0
193
vs.match++
194
object.state = ZONERESULTS_FADEOUT
195
CallNativeFunction2(SendValue, 1, true)
196
object.vsReady = false
197
end if
198
end if
199
break
200
201
case ZONERESULTS_FADEOUT
202
if object.timer < 384
203
object.timer += 16
204
if vs.match < vs.gameLength
205
music.volume -= 10
206
end if
207
SetScreenFade(0x00, 0x00, 0x00, object.timer)
208
else
209
if vs.match >= vs.gameLength
210
ResetObjectEntity(1, TypeName[Game Results], 0, 0, 0)
211
object[1].priority = PRIORITY_ACTIVE
212
object[0].state = 2PVSSETUP_FADEIN
213
2PVSSetup[0].timer = 384
214
else
215
object.state = ZONERESULTS_RETURNTOZONESEL
216
end if
217
SetScreenFade(0x00, 0x00, 0x00, 0xFF)
218
end if
219
break
220
221
case ZONERESULTS_RETURNTOZONESEL
222
if ReceiveValue == -1
223
// If the ReceiveValue function doesn't even exist, then force the object to be ready
224
object.vsReady = true
225
else
226
CallNativeFunction2(ReceiveValue, object.vsReady, true)
227
end if
228
229
if object.vsReady == true
230
SetMusicTrack("Options.ogg", 0, true)
231
PlayMusic(0)
232
233
ResetObjectEntity(1, TypeName[2P VS Menu 3], 0, 0, 0)
234
object[1].priority = PRIORITY_ACTIVE
235
object[0].state = 2PVSSETUP_FADEIN
236
2PVSSetup[0].timer = 384
237
SetScreenFade(0x00, 0x00, 0x00, 0xFF)
238
end if
239
break
240
241
end switch
242
243
object.animationTimer++
244
object.animationTimer &= 15
245
end event
246
247
248
event ObjectDraw
249
object.spriteSheet = object.iconSheet
250
if object.state < ZONERESULTS_RETURNTOZONESEL
251
// ZONE RESULTS
252
DrawSpriteScreenXY(8, screen.xcenter, 17)
253
DrawSpriteScreenXY(object.zoneID, screen.xcenter, 65)
254
255
temp0 = screen.xcenter
256
temp0 += 16
257
temp1 = temp0
258
temp1 += 32
259
260
// Round 1 (Act 1)
261
temp2 = object.round1Results
262
temp2 &= 15
263
temp3 = object.round1Results
264
temp3 >>= 4
265
DrawNumbers(12, temp0, 97, temp2, 6, 8, false)
266
DrawNumbers(12, temp1, 97, temp3, 6, 8, false)
267
268
// Round 2 (Act 2)
269
temp2 = object.round2Results
270
temp2 &= 15
271
temp3 = object.round2Results
272
temp3 >>= 4
273
DrawNumbers(12, temp0, 121, temp2, 6, 8, false)
274
DrawNumbers(12, temp1, 121, temp3, 6, 8, false)
275
276
// Tie Breaker
277
if object.hasTieBreaker == true
278
temp2 = object.round3Results
279
temp2 &= 15
280
temp3 = object.round3Results
281
temp3 >>= 4
282
DrawNumbers(12, temp0, 161, temp2, 6, 8, false)
283
DrawNumbers(12, temp1, 161, temp3, 6, 8, false)
284
end if
285
286
// Round Winners
287
temp0 = screen.xcenter
288
temp0 += 96
289
DrawSpriteScreenXY(object.round1Winner, temp0, 97)
290
DrawSpriteScreenXY(object.round2Winner, temp0, 121)
291
if object.round3Results > 0
292
DrawSpriteScreenXY(object.round3Winner, temp0, 161)
293
end if
294
temp0 = object.animationTimer
295
temp0 >>= 3
296
temp0 += object.overallWinner
297
DrawSpriteScreenXY(temp0, screen.xcenter, 178)
298
299
// Menu
300
object.spriteSheet = object.textSheet
301
temp0 = screen.xcenter
302
temp0 -= 112
303
DrawMenu(MENU_1, temp0, 80)
304
else
305
// Waiting...
306
DrawRect(0, 0, screen.xsize, screen.ysize, 0x00, 0x00, 0x00, 0xFF)
307
DrawSpriteScreenXY(28, screen.xsize, screen.ysize)
308
end if
309
end event
310
311
312
event ObjectStartup
313
LoadSpriteSheet("LevelSelect/Icons.gif")
314
LoadSpriteSheet("LevelSelect/Text.gif")
315
316
SpriteFrame(-88, 0, 136, 7, 103, 350) // EMERALD HILL ZONE - #0
317
SpriteFrame(-104, 0, 152, 7, 103, 358) // CHEMICAL PLANT ZONE - #1
318
SpriteFrame(-88, 0, 136, 7, 103, 366) // AQUATIC RUIN ZONE - #2
319
SpriteFrame(-88, 0, 136, 7, 103, 374) // CASINO NIGHT ZONE - #3
320
SpriteFrame(-56, 0, 104, 7, 103, 382) // HILL TOP ZONE - #4
321
SpriteFrame(-80, 0, 128, 7, 103, 390) // MYSTIC CAVE ZONE - #5
322
SpriteFrame(-64, 0, 112, 7, 103, 398) // OIL OCEAN ZONE - #6
323
SpriteFrame(-56, 0, 104, 7, 103, 406) // SPECIAL STAGE - #7
324
SpriteFrame(-48, 0, 96, 14, 1, 136) // RESULT - #8
325
SpriteFrame(-8, 0, 16, 7, 98, 136) // 1P text - #9
326
SpriteFrame(-8, 0, 16, 7, 115, 136) // 2P text - #10
327
SpriteFrame(-16, 0, 32, 7, 132, 136) // TIED text - #11
328
SpriteFrame(0, 0, 8, 7, 175, 140) // 0 - #12
329
SpriteFrame(0, 0, 8, 7, 183, 140) // 1 - #13
330
SpriteFrame(0, 0, 8, 7, 191, 140) // 2 - #14
331
SpriteFrame(0, 0, 8, 7, 199, 140) // 3 - #15
332
SpriteFrame(0, 0, 8, 7, 207, 140) // 4 - #16
333
SpriteFrame(0, 0, 8, 7, 215, 140) // 5 - #17
334
SpriteFrame(0, 0, 8, 7, 223, 140) // 6 - #18
335
SpriteFrame(0, 0, 8, 7, 231, 140) // 7 - #19
336
SpriteFrame(0, 0, 8, 7, 239, 140) // 8 - #20
337
SpriteFrame(0, 0, 8, 7, 247, 140) // 9 - #21
338
SpriteFrame(-47, 0, 91, 12, 1, 110) // 1P WINS - #22
339
SpriteFrame(-47, 0, 91, 12, 1, 123) // 1P WINS (Flashing) - #23
340
SpriteFrame(-47, 0, 91, 12, 93, 110) // 2P WINS - #24
341
SpriteFrame(-47, 0, 91, 12, 93, 123) // 2P WINS (Flashing) - #25
342
SpriteFrame(-22, 0, 44, 12, 1, 385) // TIED - #26
343
SpriteFrame(-22, 0, 44, 12, 1, 398) // TIED (Flashing) - #27
344
if vs.playerID == 0
345
SpriteFrame(-160, -16, 136, 7, 103, 422) // WAITING FOR 2P... - #28
346
else
347
SpriteFrame(-160, -16, 136, 7, 103, 414) // WAITING FOR 1P... - #28
348
end if
349
350
foreach (TypeName[Zone Results], arrayPos0, ALL_ENTITIES)
351
object[arrayPos0].priority = PRIORITY_ACTIVE
352
next
353
end event
354
355
356
// ========================
357
// Editor Events
358
// ========================
359
360
event RSDKDraw
361
DrawSprite(0)
362
end event
363
364
365
event RSDKLoad
366
LoadSpriteSheet("LevelSelect/Icons.gif")
367
SpriteFrame(-48, 0, 96, 14, 1, 136) // RESULT
368
369
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
370
end event
371
372