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/LZ/CurrentTunnel.txt
1482 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Current Tunnel 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.isEnd
13
14
private alias object.value0 : object.startPos.x
15
private alias object.value1 : object.endPos.x
16
private alias object.value2 : object.startPos.y
17
private alias object.value3 : object.endPos.y
18
private alias object.value4 : object.waterfallLoopTimer
19
20
// Player Aliases
21
private alias object.state : player.state
22
private alias object.animation : player.animation
23
private alias object.tileCollisions : player.tileCollisions
24
private alias object.xpos : player.xpos
25
private alias object.ypos : player.ypos
26
private alias object.xvel : player.xvel
27
private alias object.yvel : player.yvel
28
private alias object.speed : player.speed
29
30
31
// ========================
32
// Static Values
33
// ========================
34
35
public value CurrentTunnel_activateDelay = 0
36
37
38
// ========================
39
// Events
40
// ========================
41
42
event ObjectUpdate
43
temp6 = PRIORITY_BOUNDS
44
temp7 = false
45
46
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
47
CheckLower(player[currentPlayer].xpos, object.startPos.x)
48
temp0 = checkResult
49
CheckGreater(player[currentPlayer].xpos, object.endPos.x)
50
temp0 |= checkResult
51
CheckLower(player[currentPlayer].ypos, object.startPos.y)
52
temp0 |= checkResult
53
CheckGreater(player[currentPlayer].ypos, object.endPos.y)
54
temp0 |= checkResult
55
56
if temp0 == false
57
temp7 = true
58
59
if CurrentTunnel_activateDelay == 0
60
temp6 = PRIORITY_ACTIVE
61
62
CheckEqual(player[currentPlayer].state, Player_State_GotHit)
63
temp0 = checkResult
64
CheckEqual(player[currentPlayer].state, Player_State_Hurt)
65
temp0 |= checkResult
66
CheckEqual(player[currentPlayer].state, Player_State_Death)
67
temp0 |= checkResult
68
CheckEqual(player[currentPlayer].state, Player_State_Drown)
69
temp0 |= checkResult
70
CheckEqual(player[currentPlayer].state, Player_State_Clinging)
71
temp0 |= checkResult
72
73
if temp0 == false
74
player[currentPlayer].state = Player_State_Clinging
75
player[currentPlayer].animation = ANI_FANROTATE
76
player[currentPlayer].tileCollisions = true
77
end if
78
79
if player[currentPlayer].animation == ANI_FANROTATE
80
if player[currentPlayer].xvel == 0
81
temp1 = object.endPos.y
82
temp1 -= object.startPos.y
83
temp1 >>= 1
84
temp1 += object.startPos.y
85
if player[currentPlayer].ypos < temp1
86
player[currentPlayer].ypos += 0x40000
87
else
88
player[currentPlayer].ypos -= 0x40000
89
end if
90
end if
91
end if
92
else
93
CurrentTunnel_activateDelay--
94
95
if player[currentPlayer].state == Player_State_Clinging
96
#platform: USE_STANDALONE
97
player[currentPlayer].state = Player_State_Air
98
#endplatform
99
#platform: USE_ORIGINS
100
player[currentPlayer].state = Player_State_Air_NoDropDash
101
#endplatform
102
player[currentPlayer].xvel = 0x40000
103
player[currentPlayer].speed = 0x40000
104
end if
105
end if
106
else
107
if player[currentPlayer].state == Player_State_Clinging
108
#platform: USE_STANDALONE
109
player[currentPlayer].state = Player_State_Air
110
#endplatform
111
#platform: USE_ORIGINS
112
player[currentPlayer].state = Player_State_Air_NoDropDash
113
#endplatform
114
player[currentPlayer].xvel = 0x40000
115
player[currentPlayer].speed = 0x40000
116
end if
117
end if
118
next
119
120
object.priority = temp6
121
if object.isEnd == false
122
object[+1].priority = temp6
123
else
124
object[-1].priority = temp6
125
end if
126
127
if temp7 == false
128
object.waterfallLoopTimer = 0
129
end if
130
131
if object.waterfallLoopTimer != 0
132
object.waterfallLoopTimer--
133
134
if temp7 == true
135
if object.waterfallLoopTimer <= 0
136
if object.isEnd == false
137
temp0 = object[+1].waterfallLoopTimer
138
else
139
temp0 = object[-1].waterfallLoopTimer
140
end if
141
142
if temp0 == false
143
StopSfx(SfxName[Waterfall])
144
PlaySfx(SfxName[Waterfall Loop], false)
145
object.waterfallLoopTimer = 31
146
end if
147
end if
148
end if
149
else
150
if temp7 == true
151
if object.isEnd == false
152
temp0 = object[+1].waterfallLoopTimer
153
else
154
temp0 = object[-1].waterfallLoopTimer
155
end if
156
157
if temp0 == false
158
PlaySfx(SfxName[Waterfall], false)
159
object.waterfallLoopTimer = 31
160
end if
161
end if
162
end if
163
end event
164
165
166
event ObjectStartup
167
CurrentTunnel_activateDelay = 0
168
169
foreach (TypeName[Current Tunnel], arrayPos0, ALL_ENTITIES)
170
if object[arrayPos0].isEnd == false
171
arrayPos1 = arrayPos0
172
arrayPos1++
173
object[arrayPos0].startPos.x = object[arrayPos0].xpos
174
object[arrayPos0].endPos.x = object[arrayPos1].xpos
175
temp1 = object[arrayPos0].ypos
176
temp2 = object[arrayPos0].ypos
177
else
178
arrayPos1 = arrayPos0
179
arrayPos1--
180
object[arrayPos0].startPos.x = object[arrayPos1].xpos
181
object[arrayPos0].endPos.x = object[arrayPos0].xpos
182
temp1 = object[arrayPos0].ypos
183
temp2 = object[arrayPos0].ypos
184
end if
185
186
if temp1 < temp2
187
object[arrayPos0].startPos.y = temp1
188
object[arrayPos0].endPos.y = temp2
189
else
190
object[arrayPos0].startPos.y = temp2
191
object[arrayPos0].endPos.y = temp1
192
end if
193
194
object[arrayPos0].startPos.y -= 0x600000
195
object[arrayPos0].endPos.y += 0x600000
196
next
197
end event
198
199
200
// ========================
201
// Editor Events
202
// ========================
203
204
event RSDKEdit
205
if editor.returnVariable == true
206
switch editor.variableID
207
case EDIT_VAR_PROPVAL // property value
208
checkResult = object.propertyValue
209
checkResult &= 1
210
break
211
212
case 0 // isEnd
213
checkResult = object.propertyValue
214
checkResult &= 1
215
break
216
217
end switch
218
else
219
switch editor.variableID
220
case EDIT_VAR_PROPVAL // property value
221
object.propertyValue = editor.variableValue
222
object.propertyValue &= 1
223
break
224
225
case 0 // isEnd
226
object.propertyValue = editor.variableValue
227
object.propertyValue &= 1
228
break
229
230
end switch
231
end if
232
end event
233
234
235
event RSDKDraw
236
DrawSprite(0)
237
238
if editor.showGizmos == true
239
editor.drawingOverlay = true
240
241
if object.isEnd == false
242
DrawLine(object.xpos, object.ypos, object[+1].xpos, object[+1].ypos, 0xFF, 0xFF, 0x00)
243
else
244
DrawLine(object.xpos, object.ypos, object[-1].xpos, object[-1].ypos, 0xFF, 0xFF, 0x00)
245
end if
246
247
#platform: DUMMY
248
// TODO: draw box idk
249
250
if object.isEnd == false
251
object.startPos.x = object.xpos
252
object.endPos.x = object[+1].xpos
253
temp1 = object.ypos
254
temp2 = object.ypos
255
else
256
object.startPos.x = object[-1].xpos
257
object.endPos.x = object.xpos
258
temp1 = object.ypos
259
temp2 = object.ypos
260
end if
261
262
if temp1 < temp2
263
object.startPos.y = temp1
264
object.endPos.y = temp2
265
else
266
object.startPos.y = temp2
267
object.endPos.y = temp1
268
end if
269
270
object.startPos.y -= 0x600000
271
object.endPos.y += 0x600000
272
#endplatform
273
274
editor.drawingOverlay = false
275
end if
276
end event
277
278
279
event RSDKLoad
280
LoadSpriteSheet("Global/Display.gif")
281
SpriteFrame(-8, -8, 16, 16, 165, 141)
282
283
AddEditorVariable("isEnd")
284
SetActiveVariable("isEnd")
285
AddEnumVariable("false", false)
286
AddEnumVariable("true", true)
287
end event
288
289