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