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