Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R5/DipPlatform.txt
1319 views
1
//--------------Sonic CD Dipping Platform Script--------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value0 : Object.Ridden
7
#alias Object.Value1 : Object.PlatformY
8
#alias Object.Value2 : Object.ChangeY
9
10
// HUD Alias
11
#alias Object[24].PropertyValue : HUD.CurrentTimePeriod
12
13
// Time Period Aliases
14
#alias 0 : TIME_PRESENT
15
#alias 1 : TIME_PAST
16
#alias 2 : TIME_GOOD_FUTURE
17
#alias 3 : TIME_BAD_FUTURE
18
19
20
sub ObjectMain
21
22
if Object.Ridden == true
23
if Object.PlatformY < 16
24
Object.PlatformY++
25
26
TempValue0 = Object.PlatformY
27
TempValue0 &= 3
28
29
if TempValue0 == 3
30
// The Platform will be moved 1 pixel down
31
Object.ChangeY = 0x10000
32
else
33
Object.ChangeY = 0
34
end if
35
else
36
Object.ChangeY = 0
37
end if
38
else
39
if Object.PlatformY > 0
40
Object.PlatformY--
41
42
TempValue0 = Object.PlatformY
43
TempValue0 &= 3
44
45
if TempValue0 == 3
46
// The Platform should be moved 1 pixel up
47
Object.ChangeY = -0x10000
48
else
49
Object.ChangeY = 0
50
end if
51
else
52
Object.ChangeY = 0
53
end if
54
end if
55
56
Object.Ridden = false
57
58
end sub
59
60
61
sub ObjectPlayerInteraction
62
63
switch Object.PropertyValue
64
case 0
65
// Small Platform
66
67
PlayerObjectCollision(C_PLATFORM, -16, -16, 16, 12)
68
if CheckResult == true
69
Object.Ridden = true
70
71
// Move the Player along with the Platform
72
Player.YPos += Object.ChangeY
73
end if
74
break
75
76
case 1
77
// Medium-sized Platform
78
79
PlayerObjectCollision(C_PLATFORM, -32, -16, 32, 12)
80
if CheckResult == true
81
Object.Ridden = true
82
83
// Move the Player in accordance with the Platform
84
Player.YPos += Object.ChangeY
85
end if
86
break
87
88
case 2
89
// Large Platform
90
91
PlayerObjectCollision(C_PLATFORM, -48, -16, 48, 12)
92
if CheckResult == true
93
Object.Ridden = true
94
95
// As needed, nudge the Player so that the follow the Platform
96
Player.YPos += Object.ChangeY
97
end if
98
break
99
100
case 3
101
// Small Conveyor Platform
102
103
PlayerObjectCollision(C_PLATFORM, -16, -16, 16, 12)
104
if CheckResult == true
105
Object.Ridden = true
106
107
// Update the Player's Y Position to follow the Platform
108
Player.YPos += Object.ChangeY
109
110
// Also, update their X Position as needed with the Conveyor Belt too
111
if ConveyorBelt_Flag == 0
112
Player.XPos += ConveyorBelt_Speed
113
else
114
Player.XPos -= ConveyorBelt_Speed
115
end if
116
117
end if
118
break
119
120
case 4
121
// Medium-sized Conveyor Platform
122
123
PlayerObjectCollision(C_PLATFORM, -32, -16, 32, 12)
124
if CheckResult == true
125
Object.Ridden = true
126
127
// Make the Player follow the Platform
128
Player.YPos += Object.ChangeY
129
130
// And make them follow the Conveyor Belt as well
131
if ConveyorBelt_Flag == 0
132
Player.XPos += ConveyorBelt_Speed
133
else
134
Player.XPos -= ConveyorBelt_Speed
135
end if
136
137
end if
138
break
139
140
case 5
141
// Large Conveyor Platform
142
143
PlayerObjectCollision(C_PLATFORM, -48, -16, 48, 12)
144
if CheckResult == true
145
Object.Ridden = true
146
147
// The Platform moves vertically, so should the Player!
148
Player.YPos += Object.ChangeY
149
150
// And don't forget about the Conveyor Belt, too!
151
if ConveyorBelt_Flag == 0
152
Player.XPos += ConveyorBelt_Speed
153
else
154
Player.XPos -= ConveyorBelt_Speed
155
end if
156
157
end if
158
break
159
160
end switch
161
162
end sub
163
164
165
sub ObjectDraw
166
167
Object.YPos += Object.ChangeY
168
169
switch Object.PropertyValue
170
case 0
171
case 1
172
case 2
173
// Standard Platform
174
DrawSprite(Object.PropertyValue)
175
break
176
177
// These below 3 are Conveyor Platforms, so they need the Conveyor overlay Sprite drawn ontop of them too
178
case 3
179
DrawSprite(0)
180
DrawSprite(3)
181
break
182
case 4
183
DrawSprite(1)
184
DrawSprite(4)
185
break
186
case 5
187
DrawSprite(2)
188
DrawSprite(5)
189
break
190
end switch
191
192
end sub
193
194
195
sub ObjectStartup
196
197
// So a sheet is loaded here, but then it's loaded again for each time zone?
198
// Probably just a small oversight...
199
LoadSpriteSheet("R5/Objects.gif")
200
201
// But anyway...
202
// Order of Sprite Frames:
203
204
// 0 - Small Platform Frame
205
// 1 - Normal Sized Platform Frame
206
// 2 - Large Platform Frame
207
208
// 3 - Small Conveyor Belt Frame
209
// 4 - Medium Sized Conveyor Belt Frame
210
// 5 - Large Conveyor Belt Frame
211
212
// The Conveyor Belt Frames are overlayed ontop of the normal Platform Frames
213
214
// Load the corresponding sprites for each Time Period
215
switch HUD.CurrentTimePeriod
216
case TIME_PRESENT
217
LoadSpriteSheet("R5/Objects.gif")
218
SpriteFrame(-16, -16, 32, 32, 1, 51)
219
SpriteFrame(-32, -16, 64, 32, 34, 51)
220
SpriteFrame(-48, -16, 96, 32, 1, 84)
221
SpriteFrame(-16, -16, 32, 16, 65, 208)
222
SpriteFrame(-32, -16, 64, 16, 1, 208)
223
SpriteFrame(-48, -16, 96, 16, 1, 191)
224
break
225
226
case TIME_PAST
227
LoadSpriteSheet("R5/Objects3.gif")
228
SpriteFrame(-16, -16, 32, 32, 1, 170)
229
SpriteFrame(-32, -16, 64, 32, 34, 170)
230
SpriteFrame(-48, -16, 96, 32, 1, 203)
231
SpriteFrame(-16, -16, 32, 16, 223, 148)
232
SpriteFrame(-32, -16, 64, 16, 159, 148)
233
SpriteFrame(-48, -16, 96, 16, 159, 131)
234
break
235
236
case TIME_GOOD_FUTURE
237
LoadSpriteSheet("R5/Objects3.gif")
238
SpriteFrame(-16, -16, 32, 32, 1, 170)
239
SpriteFrame(-32, -16, 64, 32, 34, 170)
240
SpriteFrame(-48, -16, 96, 32, 1, 203)
241
SpriteFrame(-16, -16, 32, 16, 223, 182)
242
SpriteFrame(-32, -16, 64, 16, 159, 182)
243
SpriteFrame(-48, -16, 96, 16, 159, 165)
244
break
245
246
case TIME_BAD_FUTURE
247
LoadSpriteSheet("R5/Objects3.gif")
248
SpriteFrame(-16, -16, 32, 32, 1, 170)
249
SpriteFrame(-32, -16, 64, 32, 34, 170)
250
SpriteFrame(-48, -16, 96, 32, 1, 203)
251
SpriteFrame(-16, -16, 32, 16, 223, 216)
252
SpriteFrame(-32, -16, 64, 16, 159, 216)
253
SpriteFrame(-48, -16, 96, 16, 159, 199)
254
break
255
256
end switch
257
258
end sub
259
260
261
// ========================
262
// Editor Subs
263
// ========================
264
265
sub RSDKEdit
266
if Editor.ReturnVariable == true
267
switch Editor.VariableID
268
case EDIT_VAR_PROPVAL // Property Value
269
CheckResult = Object.PropertyValue
270
break
271
case 0 // Type
272
CheckResult = Object.PropertyValue
273
break
274
end switch
275
else
276
switch Editor.VariableID
277
case EDIT_VAR_PROPVAL // Property Value
278
Object.PropertyValue = Editor.VariableValue
279
break
280
case 0 // Type
281
Object.PropertyValue = Editor.VariableValue
282
break
283
end switch
284
end if
285
end sub
286
287
288
sub RSDKDraw
289
if Object.PropertyValue >= 3
290
TempValue0 = -3
291
TempValue0 += Object.PropertyValue
292
DrawSprite(TempValue0)
293
end if
294
295
DrawSprite(Object.PropertyValue)
296
end sub
297
298
299
sub RSDKLoad
300
LoadSpriteSheet("R5/Objects.gif")
301
302
// TODO: supporting other time periods
303
// surely there's some better way to do it than a bunch of unique and boring checkCurrentStageFolder checks?
304
SpriteFrame(-16, -16, 32, 32, 1, 51)
305
SpriteFrame(-32, -16, 64, 32, 34, 51)
306
SpriteFrame(-48, -16, 96, 32, 1, 84)
307
SpriteFrame(-16, -16, 32, 16, 65, 208)
308
SpriteFrame(-32, -16, 64, 16, 1, 208)
309
SpriteFrame(-48, -16, 96, 16, 1, 191)
310
311
AddEditorVariable("Type")
312
SetActiveVariable("Type")
313
AddEnumVariable("Small", 0)
314
AddEnumVariable("Medium", 1)
315
AddEnumVariable("Large", 2)
316
AddEnumVariable("Small Conveyor", 3)
317
AddEnumVariable("Medium Conveyor", 4)
318
AddEnumVariable("Large Conveyor", 5)
319
end sub
320
321