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/OOZ/VPushSpring.txt
1478 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: V Push Spring 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.propertyValue : object.hasBall
13
14
private alias object.value1 : object.pushOffset
15
private alias object.value2 : object.collisionOffset.y
16
private alias object.value3 : object.beingPushed
17
18
// States
19
private alias 0 : VPUSHSPRING_AWAITPUSH
20
private alias 1 : VPUSHSPRING_PUSHING
21
private alias 2 : VPUSHSPRING_RELEASE
22
private alias 3 : VPUSHSPRING_HASBALL
23
24
// Player Aliases
25
private alias object.state : player.state
26
private alias object.ypos : player.ypos
27
private alias object.yvel : player.yvel
28
private alias object.gravity : player.gravity
29
private alias object.animation : player.animation
30
31
private alias object.value1 : player.timer
32
private alias object.value17 : debugMode.currentSelection
33
private alias object.value25 : player.gravityStrength
34
35
// PushButton Aliases
36
private alias object.value0 : pushButton.pressed
37
38
39
// ========================
40
// Function Declarations
41
// ========================
42
43
reserve function VPushSpring_DebugDraw
44
reserve function VPushSpring_DebugSpawn
45
46
47
// ========================
48
// Static Values
49
// ========================
50
51
private value VPushSpring_startDebugID = 0
52
53
54
// ========================
55
// Function Definitions
56
// ========================
57
58
private function VPushSpring_DebugDraw
59
temp0 = debugMode[0].currentSelection
60
temp0 -= VPushSpring_startDebugID
61
62
DrawSprite(0)
63
if temp0 == 1
64
temp0 = object.ypos
65
temp0 -= 0x240000
66
DrawSpriteXY(5, object.xpos, temp0)
67
end if
68
end function
69
70
71
private function VPushSpring_DebugSpawn
72
temp0 = debugMode[0].currentSelection
73
temp0 -= VPushSpring_startDebugID
74
CreateTempObject(TypeName[V Push Spring], 0, object.xpos, object.ypos)
75
76
object[tempObjectPos].xpos &= 0xFFFF0000
77
object[tempObjectPos].ypos &= 0xFFFF0000
78
if temp0 == 1
79
object[tempObjectPos].state = VPUSHSPRING_HASBALL
80
object[tempObjectPos].pushOffset = 0x120000
81
end if
82
end function
83
84
85
// ========================
86
// Events
87
// ========================
88
89
event ObjectUpdate
90
temp0 = object.pushOffset
91
temp0 >>= 16
92
temp0 -= 20
93
switch object.state
94
case VPUSHSPRING_AWAITPUSH
95
object.collisionOffset.y = 0
96
if object.beingPushed == true
97
object.state = VPUSHSPRING_PUSHING
98
end if
99
break
100
101
case VPUSHSPRING_PUSHING
102
if object.pushOffset < 0x120000
103
object.pushOffset += 0x20000
104
object.collisionOffset.y = 0x20000
105
else
106
object.state = VPUSHSPRING_RELEASE
107
object.collisionOffset.y = 0
108
end if
109
break
110
111
case VPUSHSPRING_RELEASE
112
if object.pushOffset > 0
113
object.pushOffset -= 0x20000
114
object.collisionOffset.y = -0x20000
115
else
116
object.state = VPUSHSPRING_AWAITPUSH
117
object.collisionOffset.y = 0
118
end if
119
break
120
121
case VPUSHSPRING_HASBALL
122
if pushButton[+1].pressed == true
123
if object.hasBall == false
124
object.state = VPUSHSPRING_RELEASE
125
end if
126
127
PlaySfx(SfxName[Spring], false)
128
temp1 = object.pushOffset
129
temp1 += object.ypos
130
temp1 -= 0x240000
131
CreateTempObject(TypeName[Checkered Ball], 0, object.xpos, temp1)
132
object[tempObjectPos].yvel = -0x60000
133
object[tempObjectPos].gravity = GRAVITY_AIR
134
end if
135
break
136
137
end switch
138
139
object.beingPushed = false
140
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
141
BoxCollisionTest(C_SOLID, object.entityPos, -16, temp0, 16, 20, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
142
if checkResult == COL_TOP
143
object.beingPushed |= true
144
player[currentPlayer].ypos += object.collisionOffset.y
145
if object.state == VPUSHSPRING_RELEASE
146
if object.pushOffset == 0x120000
147
#platform: USE_STANDALONE
148
player[currentPlayer].state = Player_State_Air
149
#endplatform
150
#platform: USE_ORIGINS
151
player[currentPlayer].state = Player_State_Air_NoDropDash
152
#endplatform
153
player[currentPlayer].animation = ANI_BOUNCING
154
player[currentPlayer].gravity = GRAVITY_AIR
155
player[currentPlayer].yvel = -0xA0000
156
player[currentPlayer].yvel -= player[currentPlayer].gravityStrength
157
player[currentPlayer].timer = 0
158
PlaySfx(SfxName[Spring], false)
159
end if
160
end if
161
end if
162
next
163
end event
164
165
166
event ObjectDraw
167
if object.pushOffset == 0
168
DrawSprite(0)
169
170
temp0 = object.ypos
171
temp0 -= 0x240000
172
if object.state == VPUSHSPRING_HASBALL
173
temp0 -= 16 // 16? That's it? This is a 16.16 fixed point position, just "16" alone won't do much...
174
DrawSpriteXY(5, object.xpos, temp0)
175
end if
176
else
177
temp0 = object.pushOffset
178
temp0 += object.ypos
179
DrawSpriteXY(1, object.xpos, temp0)
180
181
if object.state == VPUSHSPRING_HASBALL
182
temp0 -= 0x240000
183
DrawSpriteXY(5, object.xpos, temp0)
184
185
object.inkEffect = INK_ADD
186
object.alpha = 0xA0
187
DrawSpriteFX(6, FX_INK, object.xpos, temp0)
188
end if
189
190
temp0 = object.pushOffset
191
temp0 *= 2
192
temp0 /= 3
193
temp0 += object.ypos
194
DrawSpriteXY(2, object.xpos, temp0)
195
196
temp0 = object.pushOffset
197
temp0 /= 3
198
temp0 += object.ypos
199
DrawSpriteXY(3, object.xpos, temp0)
200
201
DrawSprite(4)
202
end if
203
end event
204
205
206
event ObjectStartup
207
LoadSpriteSheet("OOZ/Objects.gif")
208
SpriteFrame(-16, -20, 32, 40, 239, 140)
209
SpriteFrame(-16, -20, 32, 16, 239, 140)
210
SpriteFrame(-16, -4, 32, 8, 239, 156)
211
SpriteFrame(-16, 4, 32, 8, 239, 164)
212
SpriteFrame(-16, 12, 32, 8, 239, 172)
213
SpriteFrame(-16, -16, 32, 32, 429, 190)
214
SpriteFrame(-16, -16, 32, 32, 396, 190)
215
216
temp0 = 0
217
VPushSpring_startDebugID = DebugMode_ObjCount
218
while temp0 < 2
219
SetTableValue(TypeName[V Push Spring], DebugMode_ObjCount, DebugMode_TypesTable)
220
SetTableValue(VPushSpring_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
221
SetTableValue(VPushSpring_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
222
DebugMode_ObjCount++
223
temp0++
224
loop
225
226
foreach (TypeName[V Push Spring], arrayPos0, ALL_ENTITIES)
227
if object[arrayPos0].hasBall == true
228
object[arrayPos0].state = VPUSHSPRING_HASBALL
229
object[arrayPos0].pushOffset = 0x120000
230
end if
231
next
232
end event
233
234
235
// ========================
236
// Editor Events
237
// ========================
238
239
event RSDKEdit
240
if editor.returnVariable == true
241
switch editor.variableID
242
case EDIT_VAR_PROPVAL // property value
243
checkResult = object.propertyValue
244
break
245
246
case 0 // hasBall
247
checkResult = object.propertyValue
248
checkResult &= 1
249
break
250
251
end switch
252
else
253
switch editor.variableID
254
case EDIT_VAR_PROPVAL // property value
255
object.propertyValue = editor.variableValue
256
break
257
258
case 0 // hasBall
259
editor.variableValue &= 1
260
object.propertyValue = editor.variableValue
261
break
262
263
end switch
264
end if
265
end event
266
267
268
event RSDKDraw
269
DrawSprite(0)
270
271
temp0 = object.ypos
272
temp0 -= 0x240000
273
if object.hasBall == true
274
DrawSpriteXY(5, object.xpos, temp0)
275
end if
276
end event
277
278
279
event RSDKLoad
280
LoadSpriteSheet("OOZ/Objects.gif")
281
SpriteFrame(-16, -20, 32, 40, 239, 140)
282
SpriteFrame(-16, -20, 32, 16, 239, 140)
283
SpriteFrame(-16, -4, 32, 8, 239, 156)
284
SpriteFrame(-16, 4, 32, 8, 239, 164)
285
SpriteFrame(-16, 12, 32, 8, 239, 172)
286
SpriteFrame(-16, -16, 32, 32, 429, 190)
287
SpriteFrame(-16, -16, 32, 32, 396, 190)
288
289
AddEditorVariable("hasBall")
290
SetActiveVariable("hasBall")
291
AddEnumVariable("false", false)
292
AddEnumVariable("true", true)
293
end event
294
295