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/EHZ/Bridge.txt
1479 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Bridge 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.length
13
14
private alias object.value0 : object.activePlayerCount
15
private alias object.value1 : object.timer
16
private alias object.value2 : object.stoodPos
17
private alias object.value3 : object.depression
18
private alias object.value4 : object.bridgeDepth
19
private alias object.value5 : object.playerID
20
private alias object.value6 : object.startPos
21
private alias object.value7 : object.endPos
22
23
// Player Aliases
24
private alias object.state : player.state
25
private alias object.xpos : player.xpos
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.collisionBottom : player.collisionBottom
30
private alias object.floorSensorC : player.floorSensorC
31
private alias object.floorSensorL : player.floorSensorL
32
private alias object.floorSensorR : player.floorSensorR
33
34
private alias object.value17 : debugMode.currentSelection
35
36
37
// ========================
38
// Function Declarations
39
// ========================
40
41
reserve function Bridge_DebugDraw
42
reserve function Bridge_DebugSpawn
43
44
45
// ========================
46
// Static Values
47
// ========================
48
49
private value Bridge_startDebugID = 0
50
51
52
// ========================
53
// Function Definitions
54
// ========================
55
56
private function Bridge_DebugDraw
57
temp0 = debugMode[0].currentSelection
58
temp0 -= Bridge_startDebugID
59
temp2 = temp0
60
temp0 <<= 19
61
FlipSign(temp0)
62
temp0 += object.xpos
63
temp0 += 0x80000
64
65
temp1 = 0
66
while temp1 < temp2
67
DrawSpriteXY(0, temp0, object.ypos)
68
temp0 += 0x100000
69
temp1++
70
loop
71
72
if temp1 == 0
73
DrawSprite(0)
74
end if
75
end function
76
77
78
private function Bridge_DebugSpawn
79
temp0 = debugMode[0].currentSelection
80
temp0 -= Bridge_startDebugID
81
CreateTempObject(TypeName[Bridge], temp0, object.xpos, object.ypos)
82
83
object[tempObjectPos].startPos = temp0
84
object[tempObjectPos].startPos <<= 19
85
object[tempObjectPos].endPos = object[tempObjectPos].startPos
86
FlipSign(object[tempObjectPos].startPos)
87
object[tempObjectPos].startPos += object[tempObjectPos].xpos
88
object[tempObjectPos].endPos += object[tempObjectPos].xpos
89
object[tempObjectPos].playerID = -1
90
end function
91
92
93
// ========================
94
// Events
95
// ========================
96
97
event ObjectUpdate
98
if object.activePlayerCount > 0
99
if object.timer < 128
100
object.timer += 8
101
end if
102
else
103
if object.timer > 0
104
object.timer -= 8
105
object.playerID = -1
106
else
107
object.depression = 0
108
end if
109
end if
110
object.bridgeDepth = object.depression
111
object.bridgeDepth *= object.timer
112
object.bridgeDepth >>= 7
113
object.activePlayerCount = 0
114
115
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
116
if player[currentPlayer].state != Player_State_LedgePullUp
117
if player[currentPlayer].xpos > object.startPos
118
if player[currentPlayer].xpos < object.endPos
119
if currentPlayer == object.playerID
120
object.stoodPos = player[currentPlayer].xpos
121
object.stoodPos -= object.startPos
122
temp0 = object.stoodPos
123
temp0 >>= 8
124
temp1 = object.endPos
125
temp1 -= object.startPos
126
temp2 = temp1
127
temp2 >>= 16
128
temp0 /= temp2
129
Sin(object.depression, temp0)
130
temp1 >>= 13
131
object.depression *= temp1
132
temp0 = object.ypos
133
temp0 -= 0x300000
134
if player[currentPlayer].ypos > temp0
135
if player[currentPlayer].yvel >= 0
136
temp2 = player[currentPlayer].collisionBottom
137
FlipSign(temp2)
138
temp2 <<= 16
139
temp2 += object.bridgeDepth
140
temp2 -= 0x80000
141
object.activePlayerCount++
142
player[currentPlayer].ypos = object.ypos
143
player[currentPlayer].ypos += temp2
144
player[currentPlayer].gravity = GRAVITY_GROUND
145
player[currentPlayer].yvel = 0
146
player[currentPlayer].floorSensorL = 1
147
player[currentPlayer].floorSensorC = 1
148
player[currentPlayer].floorSensorR = 1
149
else
150
object.playerID = -2
151
end if
152
end if
153
else
154
if player[currentPlayer].yvel >= 0
155
temp0 = player[currentPlayer].xpos
156
temp0 -= object.startPos
157
if temp0 > object.stoodPos
158
temp0 = object.endPos
159
temp0 -= player[currentPlayer].xpos
160
temp3 = object.endPos
161
temp3 -= object.startPos
162
temp3 -= object.stoodPos
163
temp1 = temp0
164
temp1 <<= 7
165
temp1 /= temp3
166
else
167
temp1 = temp0
168
temp1 <<= 7
169
temp1 /= object.stoodPos
170
end if
171
Sin(temp2, temp1)
172
temp2 *= object.bridgeDepth
173
temp2 >>= 9
174
temp2 -= 0x80000
175
if player[currentPlayer].yvel < 0x8000
176
temp3 = temp2
177
temp3 >>= 16
178
temp4 = temp3
179
temp3 -= 8
180
else
181
temp3 = temp2
182
temp3 >>= 16
183
temp4 = temp3
184
temp4 += 8
185
end if
186
187
BoxCollisionTest(C_TOUCH, object.entityPos, -0x400, temp3, 0x400, temp4, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
188
if checkResult == true
189
object.activePlayerCount++
190
player[currentPlayer].ypos = player[currentPlayer].collisionBottom
191
FlipSign(player[currentPlayer].ypos)
192
player[currentPlayer].ypos <<= 16
193
player[currentPlayer].ypos += object.ypos
194
player[currentPlayer].ypos += temp2
195
player[currentPlayer].floorSensorL = true
196
player[currentPlayer].floorSensorC = true
197
player[currentPlayer].floorSensorR = true
198
if currentPlayer == 0
199
if object.playerID < 4
200
if object.playerID > 0
201
object.stoodPos = player[currentPlayer].xpos
202
object.stoodPos -= object.startPos
203
temp0 = object.stoodPos
204
temp0 >>= 8
205
temp1 = object.endPos
206
temp1 -= object.startPos
207
temp2 = temp1
208
temp2 >>= 16
209
temp0 /= temp2
210
Sin(object.depression, temp0)
211
temp1 >>= 13
212
object.depression *= temp1
213
object.bridgeDepth = object.depression
214
object.bridgeDepth *= object.timer
215
object.bridgeDepth >>= 7
216
end if
217
218
object.playerID = 0
219
if player[currentPlayer].yvel < 256
220
object.timer = 128
221
end if
222
end if
223
else
224
if object.playerID == -1
225
object.playerID = currentPlayer
226
if player[currentPlayer].yvel < 256
227
object.timer = 128
228
end if
229
end if
230
231
if object.playerID == -2
232
object.playerID = currentPlayer
233
end if
234
end if
235
236
player[currentPlayer].gravity = GRAVITY_GROUND
237
player[currentPlayer].yvel = 0
238
end if
239
end if
240
end if
241
else
242
if currentPlayer == object.playerID
243
object.playerID = -2
244
object.timer = 32
245
end if
246
end if
247
else
248
if currentPlayer == object.playerID
249
object.playerID = -2
250
object.timer = 32
251
end if
252
end if
253
end if
254
next
255
end event
256
257
258
event ObjectDraw
259
temp0 = 0
260
temp1 = object.startPos
261
temp1 += 0x80000
262
temp4 = 0x80000
263
temp5 = object.stoodPos
264
temp5 >>= 20
265
while temp0 < temp5
266
temp3 = temp4
267
temp3 <<= 7
268
temp3 /= object.stoodPos
269
Sin(temp2, temp3)
270
temp2 *= object.bridgeDepth
271
temp2 >>= 9
272
temp2 += object.ypos
273
DrawSpriteXY(0, temp1, temp2)
274
temp1 += 0x100000
275
temp4 += 0x100000
276
temp0++
277
loop
278
temp2 = object.bridgeDepth
279
temp2 += object.ypos
280
DrawSpriteXY(0, temp1, temp2)
281
282
temp1 += 0x100000
283
temp0++
284
temp5 = object.endPos
285
temp5 -= object.startPos
286
temp5 -= object.stoodPos
287
temp1 = object.endPos
288
temp1 -= 0x80000
289
temp4 = 0x80000
290
while temp0 < object.length
291
temp3 = temp4
292
temp3 <<= 7
293
temp3 /= temp5
294
Sin(temp2, temp3)
295
temp2 *= object.bridgeDepth
296
temp2 >>= 9
297
temp2 += object.ypos
298
DrawSpriteXY(0, temp1, temp2)
299
temp1 -= 0x100000
300
temp4 += 0x100000
301
temp0++
302
loop
303
end event
304
305
306
event ObjectStartup
307
CheckCurrentStageFolder("Zone01")
308
if checkResult == true
309
LoadSpriteSheet("EHZ/Objects.gif")
310
SpriteFrame(-8, -8, 16, 16, 82, 78)
311
else
312
LoadSpriteSheet("MBZ/Objects.gif")
313
SpriteFrame(-8, -8, 16, 16, 137, 313)
314
end if
315
316
foreach (TypeName[Bridge], arrayPos0, ALL_ENTITIES)
317
object[arrayPos0].startPos = object[arrayPos0].length
318
object[arrayPos0].startPos <<= 19
319
object[arrayPos0].endPos = object[arrayPos0].startPos
320
FlipSign(object[arrayPos0].startPos)
321
object[arrayPos0].startPos += object[arrayPos0].xpos
322
object[arrayPos0].endPos += object[arrayPos0].xpos
323
object[arrayPos0].playerID = -1
324
next
325
326
temp0 = 0
327
Bridge_startDebugID = DebugMode_ObjCount
328
Bridge_startDebugID--
329
while temp0 < 16
330
SetTableValue(TypeName[Bridge], DebugMode_ObjCount, DebugMode_TypesTable)
331
SetTableValue(Bridge_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
332
SetTableValue(Bridge_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
333
DebugMode_ObjCount++
334
temp0++
335
loop
336
end event
337
338
339
// ========================
340
// Editor Events
341
// ========================
342
343
event RSDKDraw
344
temp0 = object.length
345
temp2 = temp0
346
temp0 <<= 19
347
FlipSign(temp0)
348
temp0 += object.xpos
349
temp0 += 0x80000
350
temp1 = 0
351
while temp1 < temp2
352
DrawSpriteXY(0, temp0, object.ypos)
353
temp0 += 0x100000
354
temp1++
355
loop
356
357
if temp1 == 0
358
DrawSprite(0)
359
end if
360
end event
361
362
363
event RSDKLoad
364
CheckCurrentStageFolder("Zone01")
365
if checkResult == true
366
LoadSpriteSheet("EHZ/Objects.gif")
367
SpriteFrame(-8, -8, 16, 16, 82, 78)
368
else
369
LoadSpriteSheet("MBZ/Objects.gif")
370
SpriteFrame(-8, -8, 16, 16, 137, 313)
371
end if
372
373
SetVariableAlias(ALIAS_VAR_PROPVAL, "length")
374
end event
375
376