Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R6/Climber.txt
1319 views
1
//-----------------Sonic CD Climber Script--------------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value1 : Object.YOriginPos // Unused
7
#alias Object.Value2 : Object.BottomStep
8
#alias Object.Value3 : Object.FlameFrame
9
#alias Object.Value4 : Object.FlameAnimation
10
#alias Object.Value5 : Object.Timer
11
12
// Step Sides
13
#alias 0 : LEFT_STEP
14
#alias 1 : RIGHT_STEP
15
16
// States
17
#alias 0 : CLIMBER_ACTIVE
18
#alias 1 : CLIMBER_DESCENDING
19
20
// Collision Sides
21
#alias 0 : CSIDE_FLOOR
22
23
24
sub ObjectMain
25
if Object.State == CLIMBER_ACTIVE
26
if Object.BottomStep == RIGHT_STEP
27
if Object.Frame > 0
28
Object.YPos -= 0xC0000
29
Object.Frame--
30
else
31
if Object.Timer < 120
32
Object.Timer++
33
if Object.Timer == 60
34
Object.FlameAnimation = 1
35
end if
36
else
37
Object.Timer = 0
38
Object.State = CLIMBER_DESCENDING
39
Object.FlameAnimation = 2
40
end if
41
end if
42
else
43
if Object.Frame < 4
44
Object.Frame++
45
Object.YPos -= 0xC0000
46
else
47
if Object.Timer < 120
48
Object.Timer++
49
if Object.Timer == 60
50
Object.FlameAnimation = 1
51
end if
52
else
53
Object.Timer = 0
54
Object.State = CLIMBER_DESCENDING
55
Object.FlameAnimation = 2
56
end if
57
end if
58
end if
59
else
60
Object.YPos += 0x10000
61
if Object.BottomStep == LEFT_STEP
62
ObjectTileCollision(CSIDE_FLOOR, -25, 32, 0)
63
else
64
ObjectTileCollision(CSIDE_FLOOR, 25, 32, 0)
65
end if
66
end if
67
end sub
68
69
70
sub ObjectPlayerInteraction
71
switch Object.Frame
72
case 0
73
PlayerObjectCollision(C_PLATFORM, -56, -33, -24, -16)
74
if CheckResult == true
75
Player.YPos += 0x10000
76
if Object.BottomStep == RIGHT_STEP
77
Object.BottomStep = LEFT_STEP
78
Object.State = CLIMBER_ACTIVE
79
Object.FlameAnimation = 0
80
Object.Timer = 0
81
end if
82
end if
83
84
PlayerObjectCollision(C_PLATFORM, 24, 15, 56, 32)
85
if CheckResult == true
86
Player.YPos += 0x10000
87
if Object.BottomStep == LEFT_STEP
88
Object.BottomStep = RIGHT_STEP
89
Object.State = CLIMBER_ACTIVE
90
Object.FlameAnimation = 0
91
Object.Timer = 0
92
end if
93
end if
94
break
95
96
case 1
97
PlayerObjectCollision(C_PLATFORM, -56, -21, -24, -4)
98
if CheckResult == true
99
Player.YPos += 0x10000
100
if Object.BottomStep == RIGHT_STEP
101
Object.BottomStep = LEFT_STEP
102
Object.State = CLIMBER_ACTIVE
103
Object.FlameAnimation = 0
104
Object.Timer = 0
105
end if
106
end if
107
108
PlayerObjectCollision(C_PLATFORM, 24, 3, 56, 20)
109
if CheckResult == true
110
Player.YPos += 0x10000
111
if Object.BottomStep == LEFT_STEP
112
Object.BottomStep = RIGHT_STEP
113
Object.State = CLIMBER_ACTIVE
114
Object.FlameAnimation = 0
115
Object.Timer = 0
116
end if
117
end if
118
break
119
120
case 2
121
PlayerObjectCollision(C_PLATFORM, -56, -9, -24, 8)
122
if CheckResult == true
123
Player.YPos += 0x10000
124
if Object.BottomStep == RIGHT_STEP
125
Object.BottomStep = LEFT_STEP
126
Object.State = CLIMBER_ACTIVE
127
Object.FlameAnimation = 0
128
Object.Timer = 0
129
end if
130
end if
131
132
PlayerObjectCollision(C_PLATFORM, 24, -9, 56, 8)
133
if CheckResult == true
134
Player.YPos += 0x10000
135
if Object.BottomStep == LEFT_STEP
136
Object.BottomStep = RIGHT_STEP
137
Object.State = CLIMBER_ACTIVE
138
Object.FlameAnimation = 0
139
Object.Timer = 0
140
end if
141
end if
142
break
143
144
case 3
145
PlayerObjectCollision(C_PLATFORM, -56, 3, -24, 20)
146
if CheckResult == true
147
Player.YPos += 0x10000
148
if Object.BottomStep == RIGHT_STEP
149
Object.BottomStep = LEFT_STEP
150
Object.State = CLIMBER_ACTIVE
151
Object.FlameAnimation = 0
152
Object.Timer = 0
153
end if
154
end if
155
156
PlayerObjectCollision(C_PLATFORM, 24, -21, 56, -4)
157
if CheckResult == true
158
Player.YPos += 0x10000
159
if Object.BottomStep == LEFT_STEP
160
Object.BottomStep = RIGHT_STEP
161
Object.State = CLIMBER_ACTIVE
162
Object.FlameAnimation = 0
163
Object.Timer = 0
164
end if
165
end if
166
break
167
168
case 4
169
PlayerObjectCollision(C_PLATFORM, -56, 15, -24, 32)
170
if CheckResult == true
171
Player.YPos += 0x10000
172
if Object.BottomStep == RIGHT_STEP
173
Object.BottomStep = LEFT_STEP
174
Object.State = CLIMBER_ACTIVE
175
Object.FlameAnimation = 0
176
Object.Timer = 0
177
end if
178
end if
179
180
PlayerObjectCollision(C_PLATFORM, 24, -33, 56, -16)
181
if CheckResult == true
182
Player.YPos += 0x10000
183
if Object.BottomStep == LEFT_STEP
184
Object.BottomStep = RIGHT_STEP
185
Object.State = CLIMBER_ACTIVE
186
Object.FlameAnimation = 0
187
Object.Timer = 0
188
end if
189
end if
190
break
191
192
end switch
193
end sub
194
195
196
sub ObjectDraw
197
switch Object.Frame
198
case 0
199
DrawSprite(0)
200
DrawSprite(3)
201
DrawSpriteFX(7, FX_FLIP, Object.XPos, Object.YPos)
202
break
203
204
case 1
205
DrawSprite(1)
206
DrawSprite(4)
207
DrawSpriteFX(6, FX_FLIP, Object.XPos, Object.YPos)
208
break
209
210
case 2
211
DrawSprite(2)
212
DrawSprite(5)
213
DrawSpriteFX(5, FX_FLIP, Object.XPos, Object.YPos)
214
break
215
216
case 3
217
DrawSpriteFX(1, FX_FLIP, Object.XPos, Object.YPos)
218
DrawSprite(6)
219
DrawSpriteFX(4, FX_FLIP, Object.XPos, Object.YPos)
220
break
221
222
case 4
223
DrawSpriteFX(0, FX_FLIP, Object.XPos, Object.YPos)
224
DrawSprite(7)
225
DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)
226
break
227
228
end switch
229
230
switch Object.FlameAnimation
231
case 0
232
TempValue0 = Object.FlameFrame
233
TempValue0 /= 3
234
TempValue0 += 8
235
236
Object.FlameFrame++
237
Object.FlameFrame %= 6
238
break
239
240
case 1 // leaving this animation sometimes creates a bug where the frame gets out of index, resulting in garbage sprites
241
TempValue0 = Object.FlameFrame
242
TempValue0 /= 3
243
TempValue0 += 8
244
245
Object.FlameFrame++
246
Object.FlameFrame %= 12
247
break
248
249
case 2
250
TempValue0 = Object.FlameFrame
251
TempValue0 /= 3
252
TempValue0 += 10
253
254
Object.FlameFrame++
255
Object.FlameFrame %= 6
256
break
257
258
end switch
259
DrawSprite(TempValue0)
260
end sub
261
262
263
sub ObjectStartup
264
LoadSpriteSheet("R6/Objects3.gif")
265
266
SpriteFrame(-24, -24, 48, 48, 1, 52) // #0 - Climber Body
267
SpriteFrame(-24, -16, 48, 32, 174, 220) // #1 - Climber Body half-step
268
SpriteFrame(-24, -8, 48, 23, 122, 181) // #2 - Climber Body balanced
269
270
SpriteFrame(-56, -32, 32, 16, 223, 233) // #3 - Climber Step Bottom
271
SpriteFrame(-56, -20, 32, 16, 223, 233) // #4 - Climber Half-Step Bottom
272
SpriteFrame(-56, -8, 32, 16, 223, 233) // #5 - Climber Middle-Step
273
SpriteFrame(-56, 4, 32, 16, 223, 233) // #6 - Climber Half-Step Top
274
SpriteFrame(-56, 16, 32, 16, 223, 233) // #7 - Climber Step Top
275
276
SpriteFrame(-6, 15, 12, 9, 197, 200) // #8 - Powered Flame frame 0
277
SpriteFrame(-6, 15, 12, 9, 210, 200) // #9 - Powered Flame frame 1
278
SpriteFrame(-6, 15, 12, 9, 197, 210) // #10 - Flame frame 0
279
SpriteFrame(-6, 15, 12, 9, 210, 210) // #11 - Flame frame 1
280
281
ArrayPos0 = 32
282
while ArrayPos0 < 1056
283
if Object[ArrayPos0].Type == TypeName[Climber]
284
Object[ArrayPos0].YOriginPos = Object[ArrayPos0].YPos
285
Object[ArrayPos0].Direction = FACING_LEFT
286
end if
287
ArrayPos0++
288
loop
289
end sub
290
291
292
// ========================
293
// Editor Subs
294
// ========================
295
296
sub RSDKDraw
297
DrawSprite(0)
298
DrawSprite(3)
299
Object.Direction = FACING_LEFT
300
DrawSpriteFX(7, FX_FLIP, Object.XPos, Object.YPos)
301
end sub
302
303
304
sub RSDKLoad
305
LoadSpriteSheet("R6/Objects3.gif")
306
307
SpriteFrame(-24, -24, 48, 48, 1, 52) // #0 - Climber Body
308
SpriteFrame(-24, -16, 48, 32, 174, 220) // #1 - Climber Body half-step
309
SpriteFrame(-24, -8, 48, 23, 122, 181) // #2 - Climber Body balanced
310
311
SpriteFrame(-56, -32, 32, 16, 223, 233) // #3 - Climber Step Bottom
312
SpriteFrame(-56, -20, 32, 16, 223, 233) // #4 - Climber Half-Step Bottom
313
SpriteFrame(-56, -8, 32, 16, 223, 233) // #5 - Climber Middle-Step
314
SpriteFrame(-56, 4, 32, 16, 223, 233) // #6 - Climber Half-Step Top
315
SpriteFrame(-56, 16, 32, 16, 223, 233) // #7 - Climber Step Top
316
317
SpriteFrame(-6, 15, 12, 9, 197, 200) // #8 - Powered Flame frame 0
318
SpriteFrame(-6, 15, 12, 9, 210, 200) // #9 - Powered Flame frame 1
319
SpriteFrame(-6, 15, 12, 9, 197, 210) // #10 - Flame frame 0
320
SpriteFrame(-6, 15, 12, 9, 210, 210) // #11 - Flame frame 1
321
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
322
end sub
323
324