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