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/Special/StartMessage.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Start Message 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.fadeClr.r
14
private alias object.value2 : object.fadeClr.g
15
private alias object.value3 : object.fadeClr.b
16
private alias object.value4 : object.scaleSpeed
17
private alias object.value5 : object.rotateSpeed
18
private alias object.value6 : object.vsReady
19
private alias object.value7 : object.sentReadyFlag
20
21
// States
22
private alias 0 : STARTMESSAGE_SETUP
23
private alias 1 : STARTMESSAGE_DELAY
24
private alias 2 : STARTMESSAGE_SENDDELAY
25
private alias 3 : STARTMESSAGE_STARTFADEIN
26
private alias 4 : STARTMESSAGE_FADEIN
27
private alias 5 : STARTMESSAGE_ENTERMSG
28
private alias 6 : STARTMESSAGE_SHOWMSG
29
private alias 7 : STARTMESSAGE_SETUPCHAR
30
private alias 8 : STARTMESSAGE_MOVECHAR
31
private alias 9 : STARTMESSAGE_SETUPNEXTMSG
32
33
// Text Message Property Values
34
private alias 2 : TEXTMESSAGE_GETRINGS
35
private alias 4 : TEXTMESSAGE_PLAYERPLAYER
36
private alias 5 : TEXTMESSAGE_MOSTRINGSWIN
37
38
// Text Message Aliases
39
private alias object.value4 : textMessage.number
40
41
42
// ========================
43
// Events
44
// ========================
45
46
event ObjectUpdate
47
switch object.state
48
case STARTMESSAGE_SETUP
49
options.touchControls = false
50
51
object.fadeClr.r = fadeColor
52
object.fadeClr.r >>= 16
53
54
object.fadeClr.g = fadeColor
55
object.fadeClr.g &= 0xFF00
56
object.fadeClr.g >>= 8
57
58
object.fadeClr.b = fadeColor
59
object.fadeClr.b &= 255
60
61
if options.vsMode == true
62
object.vsReady = false
63
object.sentReadyFlag = true
64
object.timer = 0
65
object.state++
66
else
67
object.vsReady = true
68
object.sentReadyFlag = false
69
70
object.state = STARTMESSAGE_STARTFADEIN
71
object.timer = 256
72
SetScreenFade(object.fadeClr.r, object.fadeClr.g, object.fadeClr.b, object.timer)
73
end if
74
break
75
76
case STARTMESSAGE_DELAY
77
if object.timer < 15
78
object.timer++
79
else
80
CallNativeFunction2(SendEntity, object.entityPos, false)
81
if options.vsMode == true
82
if ReceiveValue == -1
83
object.vsReady = true
84
else
85
CallNativeFunction2(ReceiveEntity, 0x400, true)
86
object.vsReady = object[0x400].sentReadyFlag
87
ResetObjectEntity(0x400, TypeName[Blank Object], 0, 0, 0)
88
end if
89
end if
90
91
if object.vsReady == true
92
object.timer = 0
93
object.state++
94
end if
95
end if
96
break
97
98
case STARTMESSAGE_SENDDELAY
99
options.touchControls = false
100
101
CallNativeFunction2(SendEntity, object.entityPos, false)
102
if object.timer < 30
103
object.timer++
104
else
105
object.timer = 256
106
object.state++
107
end if
108
break
109
110
case STARTMESSAGE_STARTFADEIN
111
options.touchControls = false
112
113
stage.state = STAGE_RUNNING
114
#platform: USE_ORIGINS
115
object.drawOrder = 6
116
#endplatform
117
object.state++
118
if options.vsMode == true
119
CreateTempObject(TypeName[Text Message], TEXTMESSAGE_PLAYERPLAYER, 0, 0)
120
#platform: USE_STANDALONE
121
object[tempObjectPos].drawOrder = 5
122
#endplatform
123
#platform: USE_ORIGINS
124
object[tempObjectPos].drawOrder = 6
125
#endplatform
126
end if
127
SetScreenFade(object.fadeClr.r, object.fadeClr.g, object.fadeClr.b, object.timer)
128
PlayMusic(0)
129
break
130
131
case STARTMESSAGE_FADEIN
132
options.touchControls = false
133
134
if object.timer > 0
135
object.timer -= 8
136
else
137
if options.vsMode == true
138
object.ypos = -75
139
else
140
object.ypos = -15
141
end if
142
object.state++
143
end if
144
145
SetScreenFade(object.fadeClr.r, object.fadeClr.g, object.fadeClr.b, object.timer)
146
break
147
148
case STARTMESSAGE_ENTERMSG
149
options.touchControls = false
150
151
if object.ypos < 108
152
object.ypos++
153
else
154
object.state++
155
end if
156
break
157
158
case STARTMESSAGE_SHOWMSG
159
options.touchControls = false
160
161
if object.timer < 30
162
object.timer++
163
else
164
object.timer = 0
165
temp0 = -0x380000
166
temp1 = object.ypos
167
temp1 <<= 16
168
169
CreateTempObject(TypeName[Start Message], 0, temp0, temp1)
170
object[tempObjectPos].frame = 1
171
object[tempObjectPos].state = STARTMESSAGE_SETUPCHAR
172
object[tempObjectPos].angle = 72
173
temp0 += 0x180000
174
175
CreateTempObject(TypeName[Start Message], 0, temp0, temp1)
176
object[tempObjectPos].frame = 2
177
object[tempObjectPos].state = STARTMESSAGE_SETUPCHAR
178
object[tempObjectPos].angle = 48
179
temp0 += 0x100000
180
181
CreateTempObject(TypeName[Start Message], 0, temp0, temp1)
182
object[tempObjectPos].frame = 3
183
object[tempObjectPos].state = STARTMESSAGE_SETUPCHAR
184
object[tempObjectPos].angle = 24
185
temp0 += 0x100000
186
187
CreateTempObject(TypeName[Start Message], 0, temp0, temp1)
188
object[tempObjectPos].frame = 4
189
object[tempObjectPos].state = STARTMESSAGE_SETUPCHAR
190
object[tempObjectPos].angle = 0
191
temp0 += 0x100000
192
193
CreateTempObject(TypeName[Start Message], 0, temp0, temp1)
194
object[tempObjectPos].frame = 5
195
object[tempObjectPos].state = STARTMESSAGE_SETUPCHAR
196
object[tempObjectPos].angle = -24
197
temp0 += 0x100000
198
199
CreateTempObject(TypeName[Start Message], 0, temp0, temp1)
200
object[tempObjectPos].frame = 6
201
object[tempObjectPos].state = STARTMESSAGE_SETUPCHAR
202
object[tempObjectPos].angle = -48
203
temp0 += 0x180000
204
205
CreateTempObject(TypeName[Start Message], 0, temp0, temp1)
206
object[tempObjectPos].frame = 7
207
object[tempObjectPos].state = STARTMESSAGE_SETUPCHAR
208
object[tempObjectPos].angle = -72
209
object.state = STARTMESSAGE_SETUPNEXTMSG
210
end if
211
break
212
213
case STARTMESSAGE_SETUPCHAR
214
object.angle &= 0x1FF
215
object.scale = 0x200
216
object.speed = -0x10000
217
object.scaleSpeed = 16
218
Rand(object.rotateSpeed, 32)
219
object.rotateSpeed -= 16
220
object.state++
221
#platform: USE_ORIGINS
222
object.drawOrder = 6
223
#endplatform
224
break
225
226
case STARTMESSAGE_MOVECHAR
227
object.xpos += object.xvel
228
object.ypos += object.yvel
229
230
object.scale += object.scaleSpeed
231
object.speed -= 0x8000
232
object.scaleSpeed++
233
object.rotation += object.rotateSpeed
234
object.rotation &= 0x1FF
235
236
Cos(object.yvel, object.angle)
237
object.yvel *= object.speed
238
object.yvel >>= 9
239
240
Sin(object.xvel, object.angle)
241
object.xvel *= object.speed
242
object.xvel >>= 9
243
244
if object.timer < 120
245
object.timer++
246
else
247
object.type = TypeName[Blank Object]
248
end if
249
break
250
251
case STARTMESSAGE_SETUPNEXTMSG
252
if object.timer < 40
253
object.timer++
254
else
255
if options.vsMode == false
256
CreateTempObject(TypeName[Text Message], TEXTMESSAGE_GETRINGS, 0, 0)
257
else
258
CreateTempObject(TypeName[Text Message], TEXTMESSAGE_MOSTRINGSWIN, 0, 0)
259
end if
260
261
#platform: USE_STANDALONE
262
object[tempObjectPos].drawOrder = 5
263
#endplatform
264
#platform: USE_ORIGINS
265
object[tempObjectPos].drawOrder = 6
266
#endplatform
267
GetTableValue(textMessage[tempObjectPos].number, SpecialSetup_checkpointID, SpecialSetup_ringCountTable)
268
ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, 0, 0)
269
end if
270
break
271
272
end switch
273
end event
274
275
276
event ObjectDraw
277
switch object.state
278
case STARTMESSAGE_SETUP
279
case STARTMESSAGE_DELAY
280
case STARTMESSAGE_SENDDELAY
281
DrawRect(0, 0, screen.xsize, screen.ysize, object.fadeClr.r, object.fadeClr.g, object.fadeClr.b, 0xFF)
282
#platform: USE_STANDALONE
283
if options.vsMode == true
284
// Waiting...
285
DrawSpriteScreenXY(8, screen.xsize, screen.ysize)
286
end if
287
#endplatform
288
break
289
290
case STARTMESSAGE_ENTERMSG
291
case STARTMESSAGE_SHOWMSG
292
DrawSpriteScreenXY(0, screen.xcenter, object.ypos)
293
break
294
295
case STARTMESSAGE_SETUPCHAR
296
case STARTMESSAGE_MOVECHAR
297
temp0 = object.xpos
298
temp0 >>= 16
299
temp0 += screen.xcenter
300
temp1 = object.ypos
301
temp1 >>= 16
302
DrawSpriteScreenFX(object.frame, FX_ROTOZOOM, temp0, temp1)
303
break
304
305
case STARTMESSAGE_SETUPNEXTMSG
306
break
307
end switch
308
end event
309
310
311
event ObjectStartup
312
LoadSpriteSheet("Special/Objects.gif")
313
SpriteFrame(-72, -15, 144, 30, 367, 91) // Full "Start" Sprite - #0
314
SpriteFrame(-16, -15, 32, 30, 367, 91) // Flag L - #1
315
SpriteFrame(-8, -15, 16, 30, 399, 91) // "S" character - #2
316
SpriteFrame(-8, -15, 16, 30, 415, 91) // "T" character - #3
317
SpriteFrame(-8, -15, 16, 30, 431, 91) // "A" character - #4
318
SpriteFrame(-8, -15, 16, 30, 447, 91) // "R" character - #5
319
SpriteFrame(-8, -15, 16, 30, 463, 91) // "T" character - #6
320
SpriteFrame(-16, -15, 32, 30, 479, 91) // Flag R - #7
321
if vs.playerID == 0
322
SpriteFrame(-160, -16, 136, 7, 326, 369) // Waiting for 2P... - #8
323
else
324
SpriteFrame(-160, -16, 136, 7, 326, 361) // Waiting for 1P... - #9
325
end if
326
327
if options.vsMode == true
328
stage.state = STAGE_PAUSED
329
end if
330
end event
331
332
333
// ========================
334
// Editor Events
335
// ========================
336
337
event RSDKDraw
338
DrawSprite(0)
339
end event
340
341
342
event RSDKLoad
343
LoadSpriteSheet("Special/Objects.gif")
344
SpriteFrame(-72, -15, 144, 30, 367, 91)
345
346
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
347
SetVariableAlias(ALIAS_VAR_VAL0, "ringCount2P")
348
SetVariableAlias(ALIAS_VAR_VAL1, "ringCountSonic")
349
SetVariableAlias(ALIAS_VAR_VAL2, "ringCountKnux")
350
SetVariableAlias(ALIAS_VAR_VAL3, "unused")
351
end event
352
353