Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R8/CPlatform.txt
1319 views
1
//------------Sonic CD Collapsing Platform Script-------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value0 : Object.HitboxLeft
7
#alias Object.Value1 : Object.HitboxRight
8
#alias Object.Value2 : Object.CollapseDelay
9
#alias Object.Value3 : Object.BridgeLength
10
#alias Object.Value4 : Object.YVelocity
11
12
// States
13
#alias 0 : CPLATFORM_CHECK_COLLISION
14
#alias 1 : CPLATFORM_CRUMBLE_RIGHT
15
#alias 2 : CPLATFORM_CRUMBLE_LEFT
16
#alias 3 : CPLATFORM_COLLAPSE_LEFT
17
#alias 4 : CPLATFORM_COLLAPSE_RIGHT
18
#alias 5 : CPLATFORM_RESTORE // Sonic Nexus leftover
19
#alias 6 : CPLATFORM_FALLING_DEBRIS
20
21
// Stage SFX
22
#alias 0 : SFX_S_CRUMBLE
23
24
// Priority
25
#alias 0 : PRIORITY_BOUNDS
26
#alias 1 : PRIORITY_ACTIVE
27
28
// Property Values
29
#alias 0 : PLATFORM_DEFAULT
30
#alias 1 : PLATFORM_DEBRIS_1
31
#alias 2 : PLATFORM_DEBRIS_2
32
33
34
sub ObjectMain
35
switch Object.State
36
case CPLATFORM_CRUMBLE_RIGHT
37
if Object.CollapseDelay > 0
38
Object.CollapseDelay--
39
else
40
PlayStageSfx(SFX_S_CRUMBLE, false)
41
Object.State = CPLATFORM_COLLAPSE_RIGHT
42
end if
43
break
44
45
case CPLATFORM_CRUMBLE_LEFT
46
if Object.CollapseDelay > 0
47
Object.CollapseDelay--
48
else
49
PlayStageSfx(SFX_S_CRUMBLE, false)
50
Object.State = CPLATFORM_COLLAPSE_LEFT
51
end if
52
break
53
54
case CPLATFORM_COLLAPSE_LEFT
55
Object.CollapseDelay++
56
if Object.CollapseDelay == 10
57
Object.CollapseDelay = 0
58
if Object.HitboxLeft < Object.HitboxRight
59
Object.BridgeLength--
60
Object.HitboxLeft += 16
61
62
TempValue0 = Object.HitboxLeft
63
TempValue0 -= 8
64
TempValue0 <<= 16
65
TempValue0 += Object.XPos
66
67
TempValue1 = Object.YPos
68
TempValue1 -= 0x80000
69
70
CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)
71
Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS
72
Object[TempObjectPos].YVelocity = -0x10000
73
Object[TempObjectPos].PropertyValue = PLATFORM_DEBRIS_1
74
TempValue1 += 0x100000
75
CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)
76
Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS
77
Object[TempObjectPos].PropertyValue = PLATFORM_DEBRIS_2
78
else
79
ResetObjectEntity(Object.EntityNo, TypeName[Blank Object], 0, 0, 0)
80
end if
81
end if
82
break
83
84
case CPLATFORM_COLLAPSE_RIGHT
85
Object.CollapseDelay++
86
if Object.CollapseDelay == 10
87
Object.CollapseDelay = 0
88
if Object.HitboxRight > Object.HitboxLeft
89
Object.BridgeLength--
90
Object.HitboxRight -= 16
91
92
TempValue0 = Object.HitboxRight
93
TempValue0 += 8
94
TempValue0 <<= 16
95
TempValue0 += Object.XPos
96
97
TempValue1 = Object.YPos
98
TempValue1 -= 0x80000
99
100
CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)
101
Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS
102
Object[TempObjectPos].YVelocity = -0x10000
103
Object[TempObjectPos].PropertyValue = PLATFORM_DEBRIS_1
104
TempValue1 += 0x100000
105
CreateTempObject(TypeName[CPlatform], 0, TempValue0, TempValue1)
106
Object[TempObjectPos].State = CPLATFORM_FALLING_DEBRIS
107
Object[TempObjectPos].PropertyValue = PLATFORM_DEBRIS_2
108
else
109
ResetObjectEntity(Object.EntityNo, TypeName[Blank Object], 0, 0, 0)
110
end if
111
end if
112
break
113
114
case CPLATFORM_RESTORE
115
if Object.OutOfBounds == true
116
Object.State = CPLATFORM_CHECK_COLLISION
117
118
Object.BridgeLength = Object.PropertyValue
119
120
Object.HitboxLeft = Object.PropertyValue
121
Object.HitboxLeft <<= 3
122
123
Object.HitboxRight = Object.HitboxLeft
124
FlipSign(Object.HitboxLeft)
125
126
Object.Priority = PRIORITY_BOUNDS
127
Object.CollapseDelay = 0
128
end if
129
break
130
131
case CPLATFORM_FALLING_DEBRIS
132
Object.YVelocity += 0x4000
133
134
if Object.YVelocity > 0
135
Object.YPos += Object.YVelocity
136
end if
137
138
if Object.OutOfBounds == true
139
Object.Type = TypeName[Blank Object]
140
end if
141
break
142
end switch
143
end sub
144
145
146
sub ObjectPlayerInteraction
147
if Object.State == CPLATFORM_CHECK_COLLISION
148
PlayerObjectCollision(C_PLATFORM, Object.HitboxLeft, -16, Object.HitboxRight, 16)
149
if Object.PropertyValue > 1
150
if CheckResult == true
151
Object.CollapseDelay = 1
152
Object.Priority = PRIORITY_ACTIVE
153
154
if Player.XPos > Object.XPos
155
Object.State = CPLATFORM_CRUMBLE_RIGHT
156
else
157
Object.State = CPLATFORM_CRUMBLE_LEFT
158
end if
159
end if
160
end if
161
else
162
PlayerObjectCollision(C_PLATFORM, Object.HitboxLeft, -16, Object.HitboxRight, 16)
163
end if
164
end sub
165
166
167
sub ObjectDraw
168
switch Object.State
169
case CPLATFORM_CHECK_COLLISION
170
case CPLATFORM_CRUMBLE_RIGHT
171
case CPLATFORM_CRUMBLE_LEFT
172
case CPLATFORM_COLLAPSE_RIGHT
173
TempValue0 = 0
174
175
TempValue1 = Object.HitboxLeft
176
TempValue1 <<= 16
177
TempValue1 += 0x80000
178
TempValue1 += Object.XPos
179
180
while TempValue0 < Object.BridgeLength
181
DrawSpriteXY(0, TempValue1, Object.YPos)
182
TempValue0++
183
TempValue1 += 0x100000
184
loop
185
break
186
187
case CPLATFORM_COLLAPSE_LEFT
188
TempValue0 = 0
189
TempValue1 = Object.HitboxRight
190
TempValue1 <<= 16
191
TempValue1 -= 0x80000
192
TempValue1 += Object.XPos
193
while TempValue0 < Object.BridgeLength
194
DrawSpriteXY(0, TempValue1, Object.YPos)
195
TempValue0++
196
TempValue1 -= 0x100000
197
loop
198
break
199
200
case CPLATFORM_FALLING_DEBRIS
201
DrawSprite(Object.PropertyValue)
202
break
203
end switch
204
end sub
205
206
207
sub ObjectStartup
208
LoadSpriteSheet("R8/Objects.gif")
209
210
SpriteFrame(-8, -16, 16, 32, 222, 212) // #0 - Collapsing Platform
211
SpriteFrame(-8, -8, 16, 16, 222, 212) // #1 - Collapsing Platform half 1
212
SpriteFrame(-8, -8, 16, 16, 222, 228) // #2 - Collapsing Platform half 2
213
214
// Used to be below LoadSpriteSheet, moved here for consistency with the rest of scripts
215
ArrayPos0 = 32
216
while ArrayPos0 < 1056
217
if Object[ArrayPos0].Type == TypeName[CPlatform]
218
Object[ArrayPos0].BridgeLength = Object[ArrayPos0].PropertyValue
219
Object[ArrayPos0].HitboxLeft = Object[ArrayPos0].PropertyValue
220
Object[ArrayPos0].HitboxLeft <<= 3
221
Object[ArrayPos0].HitboxRight = Object[ArrayPos0].HitboxLeft
222
FlipSign(Object[ArrayPos0].HitboxLeft)
223
end if
224
ArrayPos0++
225
loop
226
end sub
227
228
229
// ========================
230
// Editor Subs
231
// ========================
232
233
sub RSDKDraw
234
TempValue0 = 0
235
236
TempValue1 = Object.PropertyValue
237
TempValue1 <<= 3
238
FlipSign(TempValue1)
239
240
TempValue2 = TempValue1
241
TempValue2 <<= 16
242
TempValue2 += 0x80000
243
TempValue2 += Object.XPos
244
245
while TempValue0 < Object.PropertyValue
246
DrawSpriteXY(0, TempValue2, Object.YPos)
247
TempValue0++
248
TempValue2 += 0x100000
249
loop
250
end sub
251
252
253
sub RSDKLoad
254
LoadSpriteSheet("R8/Objects.gif")
255
256
SpriteFrame(-8, -16, 16, 32, 222, 212) // #0 - Collapsing Platform
257
258
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
259
end sub
260
261