Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 1/Scripts/Global/PSwitch_V.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
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.xvel : player.xvel
22
private alias object.gravity : player.gravity
23
private alias object.collisionPlane : player.collisionPlane
24
private alias object.value18 : player.sortedDrawOrder
25
26
27
// ========================
28
// Events
29
// ========================
30
31
event ObjectUpdate
32
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
33
CheckEqual(object.onGround, false)
34
temp0 = checkResult
35
CheckEqual(player[currentPlayer].gravity, GRAVITY_GROUND)
36
temp0 |= checkResult
37
if temp0 == true
38
BoxCollisionTest(C_TOUCH, object.entityPos, -12, object.extendTop, 12, object.extendBottom, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
39
if checkResult == true
40
if player[currentPlayer].xvel > 0
41
player[currentPlayer].collisionPlane = object.planeL
42
player[currentPlayer].sortedDrawOrder = object.drawOrderL
43
else
44
player[currentPlayer].collisionPlane = object.planeR
45
player[currentPlayer].sortedDrawOrder = object.drawOrderR
46
end if
47
end if
48
end if
49
next
50
end event
51
52
53
event ObjectStartup
54
foreach (TypeName[Plane Sw V], arrayPos0, ALL_ENTITIES)
55
temp0 = object[arrayPos0].propertyValue
56
temp0 &= 3
57
temp0 += 2
58
object[arrayPos0].extendTop = 1
59
object[arrayPos0].extendTop <<= temp0
60
object[arrayPos0].extendTop <<= 3
61
object[arrayPos0].extendTop += 8
62
object[arrayPos0].extendBottom = object[arrayPos0].extendTop
63
FlipSign(object[arrayPos0].extendTop)
64
65
GetBit(object[arrayPos0].planeR, object[arrayPos0].propertyValue, 2)
66
GetBit(object[arrayPos0].planeL, object[arrayPos0].propertyValue, 3)
67
68
GetBit(object[arrayPos0].drawOrderR, object[arrayPos0].propertyValue, 4)
69
object[arrayPos0].drawOrderR <<= 1
70
object[arrayPos0].drawOrderR += 4
71
GetBit(object[arrayPos0].drawOrderL, object[arrayPos0].propertyValue, 5)
72
object[arrayPos0].drawOrderL <<= 1
73
object[arrayPos0].drawOrderL += 4
74
75
GetBit(object[arrayPos0].onGround, object[arrayPos0].propertyValue, 7)
76
next
77
end event
78
79
// ========================
80
// Editor Events & Aliases
81
// ========================
82
83
private alias 0 : VAR_ID_SIZE
84
private alias 1 : VAR_ID_PLANEL
85
private alias 2 : VAR_ID_PLANER
86
private alias 3 : VAR_ID_DRAWL
87
private alias 4 : VAR_ID_DRAWR
88
private alias 5 : VAR_ID_ONGROUND
89
90
91
event RSDKEdit
92
if editor.returnVariable == true
93
switch editor.variableID
94
case EDIT_VAR_PROPVAL // property value
95
checkResult = object.propertyValue
96
break
97
98
case VAR_ID_SIZE // size
99
checkResult = object.propertyValue
100
checkResult &= 3
101
break
102
103
case VAR_ID_PLANEL // collisionPlaneL
104
GetBit(checkResult, object.propertyValue, 2)
105
break
106
107
case VAR_ID_PLANER // collisionPlaneR
108
GetBit(checkResult, object.propertyValue, 3)
109
break
110
111
case VAR_ID_DRAWL // drawOrderL
112
GetBit(checkResult, object.propertyValue, 4)
113
break
114
115
case VAR_ID_DRAWR // drawOrderR
116
GetBit(checkResult, object.propertyValue, 5)
117
break
118
119
case VAR_ID_ONGROUND // onGround
120
GetBit(checkResult, object.propertyValue, 7)
121
break
122
123
end switch
124
else
125
switch editor.variableID
126
case EDIT_VAR_PROPVAL // property value
127
object.propertyValue = editor.variableValue
128
break
129
130
case VAR_ID_SIZE // size
131
temp1 = 3
132
Not(temp1)
133
object.propertyValue &= temp1
134
135
temp0 = editor.variableValue
136
temp0 &= 3
137
object.propertyValue |= temp0
138
break
139
140
case VAR_ID_PLANEL // collisionPlaneL
141
CheckNotEqual(editor.variableValue, false)
142
SetBit(object.propertyValue, 2, checkResult)
143
break
144
145
case VAR_ID_PLANER // collisionPlaneR
146
CheckNotEqual(editor.variableValue, false)
147
SetBit(object.propertyValue, 3, checkResult)
148
break
149
150
case VAR_ID_DRAWL // drawOrderL
151
CheckNotEqual(editor.variableValue, false)
152
SetBit(object.propertyValue, 4, checkResult)
153
break
154
155
case VAR_ID_DRAWR // drawOrderR
156
CheckNotEqual(editor.variableValue, false)
157
SetBit(object.propertyValue, 5, checkResult)
158
break
159
160
case VAR_ID_ONGROUND // onGround
161
CheckNotEqual(editor.variableValue, false)
162
SetBit(object.propertyValue, 7, checkResult)
163
break
164
165
end switch
166
end if
167
end event
168
169
170
event RSDKDraw
171
// Grabbed this from S2's debug view, since S1 doesn't have one, works the same though
172
173
// size
174
temp1 = object.propertyValue
175
temp1 &= 3
176
temp1 += 2
177
178
temp0 = 1
179
temp0 <<= temp1
180
temp1 = temp0
181
temp0 <<= 19
182
FlipSign(temp0)
183
temp0 += object.ypos
184
temp0 += 0x80000
185
186
// onGround
187
GetBit(temp2, object.propertyValue, 7)
188
temp3 = object.propertyValue
189
temp3 >>= 2
190
temp3 &= 15
191
192
if editor.showGizmos == true
193
// hitbox view goes here
194
end if
195
196
temp4 = 0
197
while temp4 < temp1
198
if temp2 == true
199
DrawSpriteXY(16, object.xpos, temp0)
200
end if
201
DrawSpriteXY(temp3, object.xpos, temp0)
202
temp0 += 0x100000
203
temp4++
204
loop
205
206
if temp1 == 0
207
DrawSprite(temp3)
208
end if
209
end event
210
211
212
event RSDKLoad
213
LoadSpriteSheet("Global/Display.gif")
214
215
temp0 = 0
216
temp1 = 46
217
while temp0 < 8
218
SpriteFrame(-8, -8, 16, 16, temp1, 158)
219
temp0++
220
temp1 += 17
221
loop
222
223
temp0 = 0
224
temp1 = 46
225
while temp0 < 8
226
SpriteFrame(-8, -8, 16, 16, temp1, 175)
227
temp0++
228
temp1 += 17
229
loop
230
231
SpriteFrame(-8, -8, 16, 16, 182, 141) // #16 - back
232
233
AddEditorVariable("size")
234
SetActiveVariable("size")
235
AddEnumVariable("4 Nodes", 0)
236
AddEnumVariable("8 Nodes", 1)
237
AddEnumVariable("16 Nodes", 2)
238
AddEnumVariable("32 Nodes", 3)
239
240
AddEditorVariable("collisionPlaneL")
241
SetActiveVariable("collisionPlaneL")
242
AddEnumVariable("Plane A", 0)
243
AddEnumVariable("Plane B", 1)
244
245
AddEditorVariable("collisionPlaneR")
246
SetActiveVariable("collisionPlaneR")
247
AddEnumVariable("Plane A", 0)
248
AddEnumVariable("Plane B", 1)
249
250
AddEditorVariable("drawOrderL")
251
SetActiveVariable("drawOrderL")
252
AddEnumVariable("Low Layer", 0)
253
AddEnumVariable("High Layer", 1)
254
255
AddEditorVariable("drawOrderR")
256
SetActiveVariable("drawOrderR")
257
AddEnumVariable("Low Layer", 0)
258
AddEnumVariable("High Layer", 1)
259
260
AddEditorVariable("onGround")
261
SetActiveVariable("onGround")
262
AddEnumVariable("false", false)
263
AddEnumVariable("true", true)
264
end event
265
266