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/Global/PSwitch_V.txt
1485 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Plane Sw V 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.extendTop
13
private alias object.value1 : object.extendBottom
14
private alias object.value2 : object.planeR
15
private alias object.value3 : object.planeL
16
private alias object.value4 : object.drawOrderR
17
private alias object.value5 : object.drawOrderL
18
private alias object.value6 : object.onGround
19
20
// Player Aliases
21
private alias object.type : player.type
22
private alias object.xvel : player.xvel
23
private alias object.gravity : player.gravity
24
private alias object.collisionPlane : player.collisionPlane
25
private alias object.value18 : player.sortedDrawOrder
26
27
28
// ========================
29
// Events
30
// ========================
31
32
event ObjectUpdate
33
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
34
CheckEqual(object.onGround, false)
35
temp0 = checkResult
36
CheckEqual(player[currentPlayer].gravity, GRAVITY_GROUND)
37
temp0 |= checkResult
38
if temp0 == true
39
BoxCollisionTest(C_TOUCH, object.entityPos, -12, object.extendTop, 12, object.extendBottom, currentPlayer, 0, 0, 0, 0)
40
if checkResult == true
41
if player[currentPlayer].xvel > 0
42
GetBit(temp0, object.propertyValue, 6)
43
if temp0 == false
44
player[currentPlayer].collisionPlane = object.planeL
45
end if
46
47
player[currentPlayer].sortedDrawOrder = object.drawOrderL
48
else
49
#platform: USE_ORIGINS
50
if object[currentPlayer].xvel < 0
51
#endplatform
52
GetBit(temp0, object.propertyValue, 6)
53
if temp0 == false
54
player[currentPlayer].collisionPlane = object.planeR
55
end if
56
57
player[currentPlayer].sortedDrawOrder = object.drawOrderR
58
#platform: USE_ORIGINS
59
end if
60
#endplatform
61
end if
62
end if
63
end if
64
next
65
end event
66
67
68
event ObjectStartup
69
LoadSpriteSheet("Global/Display.gif")
70
71
SpriteFrame(-8, -8, 16, 16, 42, 130)
72
SpriteFrame(-8, -8, 16, 16, 59, 130)
73
SpriteFrame(-8, -8, 16, 16, 76, 130)
74
SpriteFrame(-8, -8, 16, 16, 93, 130)
75
SpriteFrame(-8, -8, 16, 16, 110, 130)
76
SpriteFrame(-8, -8, 16, 16, 127, 130)
77
SpriteFrame(-8, -8, 16, 16, 144, 130)
78
SpriteFrame(-8, -8, 16, 16, 161, 130)
79
SpriteFrame(-8, -8, 16, 16, 42, 147)
80
SpriteFrame(-8, -8, 16, 16, 59, 147)
81
SpriteFrame(-8, -8, 16, 16, 76, 147)
82
SpriteFrame(-8, -8, 16, 16, 93, 147)
83
SpriteFrame(-8, -8, 16, 16, 110, 147)
84
SpriteFrame(-8, -8, 16, 16, 127, 147)
85
SpriteFrame(-8, -8, 16, 16, 144, 147)
86
SpriteFrame(-8, -8, 16, 16, 161, 147)
87
SpriteFrame(-8, -8, 16, 16, 42, 164)
88
SpriteFrame(-8, -8, 16, 16, 59, 164)
89
SpriteFrame(-8, -8, 16, 16, 76, 164)
90
SpriteFrame(-8, -8, 16, 16, 93, 164)
91
SpriteFrame(-8, -8, 16, 16, 93, 113)
92
93
foreach (TypeName[Plane Sw V], arrayPos0, ALL_ENTITIES)
94
temp0 = object[arrayPos0].propertyValue
95
temp0 &= 3
96
temp0 += 2
97
object[arrayPos0].extendTop = 1
98
object[arrayPos0].extendTop <<= temp0
99
object[arrayPos0].extendTop <<= 3
100
object[arrayPos0].extendBottom = object[arrayPos0].extendTop
101
FlipSign(object[arrayPos0].extendTop)
102
103
GetBit(object[arrayPos0].planeR, object[arrayPos0].propertyValue, 2)
104
GetBit(object[arrayPos0].planeL, object[arrayPos0].propertyValue, 3)
105
106
GetBit(object[arrayPos0].drawOrderR, object[arrayPos0].propertyValue, 4)
107
object[arrayPos0].drawOrderR += 4
108
GetBit(object[arrayPos0].drawOrderL, object[arrayPos0].propertyValue, 5)
109
object[arrayPos0].drawOrderL += 4
110
111
GetBit(object[arrayPos0].onGround, object[arrayPos0].propertyValue, 7)
112
next
113
end event
114
115
116
// This Object's kinda weird... its Draw comes after its Startup for some reason
117
event ObjectDraw
118
if player[0].type == TypeName[Debug Mode]
119
temp1 = object.propertyValue
120
temp1 &= 3
121
temp1 += 2
122
temp0 = 1
123
temp0 <<= temp1
124
temp1 = temp0
125
temp0 <<= 19
126
FlipSign(temp0)
127
temp0 += object.ypos
128
temp0 += 0x80000
129
GetBit(temp2, object.propertyValue, 7)
130
temp3 = object.propertyValue
131
temp3 >>= 2
132
temp3 &= 15
133
GetBit(temp4, object.propertyValue, 6)
134
if temp4 == true
135
temp3 >>= 2
136
temp3 += 16
137
end if
138
139
temp4 = 0
140
while temp4 < temp1
141
if temp2 == true
142
DrawSpriteXY(20, object.xpos, temp0)
143
end if
144
DrawSpriteXY(temp3, object.xpos, temp0)
145
temp0 += 0x100000
146
temp4++
147
loop
148
149
if temp1 == 0
150
DrawSprite(temp3)
151
end if
152
end if
153
end event
154
155
156
// ========================
157
// Editor Events & Aliases
158
// ========================
159
160
private alias 0 : VAR_ID_SIZE
161
private alias 1 : VAR_ID_PLANEL
162
private alias 2 : VAR_ID_PLANER
163
private alias 3 : VAR_ID_DRAWL
164
private alias 4 : VAR_ID_DRAWR
165
private alias 5 : VAR_ID_ONLYDRAWORDER
166
private alias 6 : VAR_ID_ONGROUND
167
168
169
event RSDKEdit
170
if editor.returnVariable == true
171
switch editor.variableID
172
case EDIT_VAR_PROPVAL // property value
173
checkResult = object.propertyValue
174
break
175
176
case VAR_ID_SIZE // size
177
checkResult = object.propertyValue
178
checkResult &= 3
179
break
180
181
case VAR_ID_PLANEL // collisionPlaneL
182
GetBit(checkResult, object.propertyValue, 2)
183
break
184
185
case VAR_ID_PLANER // collisionPlaneR
186
GetBit(checkResult, object.propertyValue, 3)
187
break
188
189
case VAR_ID_DRAWL // drawOrderL
190
GetBit(checkResult, object.propertyValue, 4)
191
break
192
193
case VAR_ID_DRAWR // drawOrderR
194
GetBit(checkResult, object.propertyValue, 5)
195
break
196
197
case VAR_ID_ONLYDRAWORDER // onlyDrawOrder
198
GetBit(checkResult, object.propertyValue, 6)
199
break
200
201
case VAR_ID_ONGROUND // onGround
202
GetBit(checkResult, object.propertyValue, 7)
203
break
204
205
end switch
206
else
207
switch editor.variableID
208
case EDIT_VAR_PROPVAL // property value
209
object.propertyValue = editor.variableValue
210
break
211
212
case VAR_ID_SIZE // size
213
temp1 = 3
214
Not(temp1)
215
object.propertyValue &= temp1
216
217
temp0 = editor.variableValue
218
temp0 &= 3
219
object.propertyValue |= temp0
220
break
221
222
case VAR_ID_PLANEL // collisionPlaneL
223
CheckNotEqual(editor.variableValue, false)
224
SetBit(object.propertyValue, 2, checkResult)
225
break
226
227
case VAR_ID_PLANER // collisionPlaneR
228
CheckNotEqual(editor.variableValue, false)
229
SetBit(object.propertyValue, 3, checkResult)
230
break
231
232
case VAR_ID_DRAWL // drawOrderL
233
CheckNotEqual(editor.variableValue, false)
234
SetBit(object.propertyValue, 4, checkResult)
235
break
236
237
case VAR_ID_DRAWR // drawOrderR
238
CheckNotEqual(editor.variableValue, false)
239
SetBit(object.propertyValue, 5, checkResult)
240
break
241
242
case VAR_ID_ONLYDRAWORDER // onlyDrawOrder
243
CheckNotEqual(editor.variableValue, false)
244
SetBit(object.propertyValue, 6, checkResult)
245
break
246
247
case VAR_ID_ONGROUND // onGround
248
CheckNotEqual(editor.variableValue, false)
249
SetBit(object.propertyValue, 7, checkResult)
250
break
251
252
end switch
253
end if
254
end event
255
256
257
event RSDKDraw
258
// size
259
temp1 = object.propertyValue
260
temp1 &= 3
261
temp1 += 2
262
263
temp0 = 1
264
temp0 <<= temp1
265
temp1 = temp0
266
temp0 <<= 19
267
FlipSign(temp0)
268
temp0 += object.ypos
269
temp0 += 0x80000
270
271
// onGround
272
GetBit(temp2, object.propertyValue, 7)
273
temp3 = object.propertyValue
274
temp3 >>= 2
275
temp3 &= 15
276
277
// onlyDrawOrder
278
GetBit(temp4, object.propertyValue, 6)
279
if temp4 == true
280
temp3 >>= 2
281
temp3 += 16
282
end if
283
284
temp4 = 0
285
while temp4 < temp1
286
if temp2 == true
287
DrawSpriteXY(20, object.xpos, temp0)
288
end if
289
DrawSpriteXY(temp3, object.xpos, temp0)
290
temp0 += 0x100000
291
temp4++
292
loop
293
294
if temp1 == 0
295
DrawSprite(temp3)
296
end if
297
end event
298
299
300
event RSDKLoad
301
LoadSpriteSheet("Global/Display.gif")
302
303
temp0 = 0
304
temp1 = 42
305
while temp0 < 8
306
SpriteFrame(-8, -8, 16, 16, temp1, 130)
307
temp0++
308
temp1 += 17
309
loop
310
311
temp0 = 0
312
temp1 = 42
313
while temp0 < 8
314
SpriteFrame(-8, -8, 16, 16, temp1, 147)
315
temp0++
316
temp1 += 17
317
loop
318
319
SpriteFrame(-8, -8, 16, 16, 42, 164) // #16 - LL
320
SpriteFrame(-8, -8, 16, 16, 59, 164) // #17 - LH
321
SpriteFrame(-8, -8, 16, 16, 76, 164) // #18 - HL
322
SpriteFrame(-8, -8, 16, 16, 93, 164) // #19 - HH
323
324
SpriteFrame(-8, -8, 16, 16, 93, 113) // #20 - back
325
326
AddEditorVariable("size")
327
SetActiveVariable("size")
328
AddEnumVariable("4 Nodes", 0)
329
AddEnumVariable("8 Nodes", 1)
330
AddEnumVariable("16 Nodes", 2)
331
AddEnumVariable("32 Nodes", 3)
332
333
AddEditorVariable("collisionPlaneL")
334
SetActiveVariable("collisionPlaneL")
335
AddEnumVariable("Plane A", 0)
336
AddEnumVariable("Plane B", 1)
337
338
AddEditorVariable("collisionPlaneR")
339
SetActiveVariable("collisionPlaneR")
340
AddEnumVariable("Plane A", 0)
341
AddEnumVariable("Plane B", 1)
342
343
AddEditorVariable("drawOrderL")
344
SetActiveVariable("drawOrderL")
345
AddEnumVariable("Low Layer", 0)
346
AddEnumVariable("High Layer", 1)
347
348
AddEditorVariable("drawOrderR")
349
SetActiveVariable("drawOrderR")
350
AddEnumVariable("Low Layer", 0)
351
AddEnumVariable("High Layer", 1)
352
353
AddEditorVariable("onlyDrawOrder")
354
SetActiveVariable("onlyDrawOrder")
355
AddEnumVariable("false", false)
356
AddEnumVariable("true", true)
357
358
AddEditorVariable("onGround")
359
SetActiveVariable("onGround")
360
AddEnumVariable("false", false)
361
AddEnumVariable("true", true)
362
end event
363
364