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