Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R3/RotatingDrum.txt
1319 views
1
//---------------Sonic CD Rotating Drum Script----------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value1 : Object.Timer
7
#alias Object.Value2 : Object.YPlayerFloor
8
#alias Object.Value3 : Object.YOriginPos
9
10
// States
11
#alias 0 : ROTATINGDRUM_FRAME_0
12
#alias 1 : ROTATINGDRUM_FRAME_1
13
#alias 2 : ROTATINGDRUM_FRAME_2
14
#alias 3 : ROTATINGDRUM_FRAME_3
15
#alias 4 : ROTATINGDRUM_FRAME_4
16
#alias 5 : ROTATINGDRUM_FRAME_5
17
#alias 6 : ROTATINGDRUM_FRAME_6
18
#alias 7 : ROTATINGDRUM_FRAME_7
19
#alias 8 : ROTATINGDRUM_FRAME_8
20
#alias 9 : ROTATINGDRUM_FRAME_9
21
#alias 10 : ROTATINGDRUM_FRAME_10
22
#alias 11 : ROTATINGDRUM_FRAME_11
23
#alias 12 : ROTATINGDRUM_FRAME_12
24
#alias 13 : ROTATINGDRUM_FRAME_13
25
#alias 14 : ROTATINGDRUM_FRAME_14
26
#alias 15 : ROTATINGDRUM_FRAME_15
27
#alias 16 : ROTATINGDRUM_FRAME_16
28
#alias 17 : ROTATINGDRUM_FRAME_17
29
30
// Direction
31
// Normally we use facing right(0) and upend right(2) but for this one it will be clearer this way
32
#alias 0 : FLIP_NONE
33
#alias 2 : FLIP_Y
34
35
// Priority
36
#alias 0 : PRIORITY_BOUNDS
37
#alias 1 : PRIORITY_ACTIVE
38
#alias 3 : PRIORITY_XBOUNDS
39
40
sub ObjectMain
41
switch Object.State
42
case ROTATINGDRUM_FRAME_0
43
Object.Frame = 0
44
Object.Direction = FLIP_NONE
45
Object.DrawOrder = 3
46
Object.YPlayerFloor = 0x10000
47
break
48
49
case ROTATINGDRUM_FRAME_1
50
Object.Frame = 1
51
Object.Direction = FLIP_NONE
52
Object.DrawOrder = 3
53
Object.YPlayerFloor = 0x50000
54
break
55
56
case ROTATINGDRUM_FRAME_2
57
Object.Frame = 2
58
Object.Direction = FLIP_NONE
59
Object.DrawOrder = 3
60
Object.YPlayerFloor = 0x60000
61
break
62
63
case ROTATINGDRUM_FRAME_3
64
Object.Frame = 3
65
Object.Direction = FLIP_NONE
66
Object.DrawOrder = 3
67
Object.YPlayerFloor = 0x80000
68
break
69
70
case ROTATINGDRUM_FRAME_4
71
Object.Frame = 4
72
Object.Direction = FLIP_NONE
73
Object.DrawOrder = 3
74
Object.YPlayerFloor = 0x80000
75
break
76
77
case ROTATINGDRUM_FRAME_5
78
Object.Frame = 5
79
Object.Direction = FLIP_Y
80
Object.DrawOrder = 3
81
Object.YPlayerFloor = 0x80000
82
break
83
84
case ROTATINGDRUM_FRAME_6
85
Object.Frame = 6
86
Object.Direction = FLIP_Y
87
Object.DrawOrder = 3
88
Object.YPlayerFloor = 0x60000
89
break
90
91
case ROTATINGDRUM_FRAME_7
92
Object.Frame = 7
93
Object.Direction = FLIP_Y
94
Object.DrawOrder = 3
95
Object.YPlayerFloor = 0x50000
96
break
97
98
case ROTATINGDRUM_FRAME_8
99
Object.Frame = 8
100
Object.Direction = FLIP_Y
101
Object.DrawOrder = 3
102
Object.YPlayerFloor = 0x10000
103
break
104
105
case ROTATINGDRUM_FRAME_9
106
Object.Frame = 9
107
Object.Direction = FLIP_Y
108
Object.DrawOrder = 2
109
Object.YPlayerFloor = -0x10000
110
break
111
112
case ROTATINGDRUM_FRAME_10
113
Object.Frame = 9
114
Object.Direction = FLIP_Y
115
Object.DrawOrder = 2
116
Object.YPlayerFloor = -0x50000
117
break
118
119
case ROTATINGDRUM_FRAME_11
120
Object.Frame = 9
121
Object.Direction = FLIP_Y
122
Object.DrawOrder = 2
123
Object.YPlayerFloor = -0x60000
124
break
125
126
case ROTATINGDRUM_FRAME_12
127
Object.Frame = 9
128
Object.Direction = FLIP_Y
129
Object.DrawOrder = 2
130
Object.YPlayerFloor = -0x80000
131
break
132
133
case ROTATINGDRUM_FRAME_13
134
Object.Frame = 9
135
Object.Direction = FLIP_Y
136
Object.DrawOrder = 2
137
Object.YPlayerFloor = -0x80000
138
break
139
140
case ROTATINGDRUM_FRAME_14
141
Object.Frame = 9
142
Object.Direction = FLIP_NONE
143
Object.DrawOrder = 2
144
Object.YPlayerFloor = -0x80000
145
break
146
147
case ROTATINGDRUM_FRAME_15
148
Object.Frame = 9
149
Object.Direction = FLIP_NONE
150
Object.DrawOrder = 2
151
Object.YPlayerFloor = -0x60000
152
break
153
154
case ROTATINGDRUM_FRAME_16
155
Object.Frame = 9
156
Object.Direction = FLIP_NONE
157
Object.DrawOrder = 2
158
Object.YPlayerFloor = -0x50000
159
break
160
161
case ROTATINGDRUM_FRAME_17
162
Object.Frame = 9
163
Object.Direction = FLIP_NONE
164
Object.DrawOrder = 2
165
Object.YPlayerFloor = -0x10000
166
break
167
168
end switch
169
170
TempValue0 = RotatingDrum_Timer
171
TempValue0 %= 10
172
173
if TempValue0 == 0
174
Object.Timer++
175
if Object.Timer > 3
176
Object.Timer = 0
177
178
Object.State++
179
Object.State %= 18
180
end if
181
else
182
Object.YPlayerFloor = 0
183
end if
184
185
Object.Priority = PRIORITY_ACTIVE
186
187
TempValue0 = Object.iXPos
188
TempValue0 -= Screen.XOffset
189
TempValue0 -= Screen.XSize
190
191
if TempValue0 > 128
192
Object.YPos = Object.YOriginPos
193
Object.State = Object.PropertyValue
194
Object.Timer = 0
195
Object.YPlayerFloor = 0
196
Object.Priority = PRIORITY_XBOUNDS
197
end if
198
199
TempValue0 = Object.iXPos
200
TempValue0 -= Screen.XOffset
201
202
if TempValue0 < -128
203
Object.YPos = Object.YOriginPos
204
Object.State = Object.PropertyValue
205
Object.Timer = 0
206
Object.YPlayerFloor = 0
207
Object.Priority = PRIORITY_XBOUNDS
208
end if
209
end sub
210
211
212
sub ObjectPlayerInteraction
213
switch Object.State
214
case ROTATINGDRUM_FRAME_2
215
PlayerObjectCollision(C_PLATFORM, -24, -8, 24, 12)
216
if CheckResult == true
217
Player.YPos += Object.YPlayerFloor
218
end if
219
break
220
221
case ROTATINGDRUM_FRAME_3
222
case ROTATINGDRUM_FRAME_4
223
case ROTATINGDRUM_FRAME_5
224
case ROTATINGDRUM_FRAME_6
225
PlayerObjectCollision(C_PLATFORM, -24, -4, 24, 12)
226
if CheckResult == true
227
Player.YPos += Object.YPlayerFloor
228
end if
229
break
230
231
end switch
232
end sub
233
234
235
sub ObjectDraw
236
Object.YPos += Object.YPlayerFloor
237
DrawSpriteFX(Object.Frame, FX_FLIP, Object.XPos, Object.YPos)
238
end sub
239
240
241
sub ObjectStartup
242
LoadSpriteSheet("R3/Objects.gif")
243
244
SpriteFrame(-24, -16, 48, 16, 67, 34) // #0 - Rotating Drum Frame 0
245
SpriteFrame(-24, -12, 48, 16, 116, 34) // #1 - Rotating Drum Frame 1
246
SpriteFrame(-24, -8, 48, 16, 165, 34) // #2 - Rotating Drum Frame 2
247
SpriteFrame(-24, -4, 48, 16, 67, 51) // #3 - Rotating Drum Frame 3
248
SpriteFrame(-24, -4, 48, 16, 116, 51) // #4 - Rotating Drum Frame 4
249
SpriteFrame(-24, -12, 48, 16, 67, 51) // #5 - Rotating Drum Frame 5
250
SpriteFrame(-24, -12, 48, 16, 165, 34) // #6 - Rotating Drum Frame 6
251
SpriteFrame(-24, -12, 48, 16, 116, 34) // #7 - Rotating Drum Frame 7
252
SpriteFrame(-24, -16, 48, 16, 67, 34) // #8 - Rotating Drum Frame 8
253
SpriteFrame(-24, -8, 48, 8, 165, 18) // #9 - Rotating Drum Frame 9
254
255
ArrayPos0 = 32
256
while ArrayPos0 < 1056
257
if Object[ArrayPos0].Type == TypeName[Rotating Drum]
258
Object[ArrayPos0].Priority = PRIORITY_XBOUNDS
259
Object[ArrayPos0].YOriginPos = Object[ArrayPos0].YPos
260
Object[ArrayPos0].State = Object[ArrayPos0].PropertyValue
261
end if
262
ArrayPos0++
263
loop
264
end sub
265
266
267
// ========================
268
// Editor Subs
269
// ========================
270
271
sub RSDKEdit
272
if Editor.ReturnVariable == true
273
switch Editor.VariableID
274
case EDIT_VAR_PROPVAL // Property Value
275
CheckResult = Object.PropertyValue
276
CheckResult %= 18
277
break
278
case 0 // startFrame
279
CheckResult = Object.PropertyValue
280
CheckResult %= 18
281
break
282
end switch
283
else
284
switch Editor.VariableID
285
case EDIT_VAR_PROPVAL // Property Value
286
Object.PropertyValue = Editor.VariableValue
287
Object.PropertyValue %= 18
288
break
289
case 0 // startFrame
290
Object.PropertyValue = Editor.VariableValue
291
Object.PropertyValue %= 18
292
break
293
end switch
294
end if
295
end sub
296
297
sub RSDKDraw
298
Object.InkEffect = 1
299
TempValue0 = Object.PropertyValue
300
TempValue0 %= 10
301
if Object.PropertyValue < 10
302
DrawSprite(TempValue0)
303
else
304
DrawSpriteFX(TempValue0, FX_INK, Object.XPos, Object.YPos)
305
end if
306
end sub
307
308
309
sub RSDKLoad
310
LoadSpriteSheet("R3/Objects.gif")
311
312
SpriteFrame(-24, -16, 48, 16, 67, 34) // #0 - Rotating Drum Frame 0
313
SpriteFrame(-24, -12, 48, 16, 116, 34) // #1 - Rotating Drum Frame 1
314
SpriteFrame(-24, -8, 48, 16, 165, 34) // #2 - Rotating Drum Frame 2
315
SpriteFrame(-24, -4, 48, 16, 67, 51) // #3 - Rotating Drum Frame 3
316
SpriteFrame(-24, -4, 48, 16, 116, 51) // #4 - Rotating Drum Frame 4
317
SpriteFrame(-24, -12, 48, 16, 67, 51) // #5 - Rotating Drum Frame 5
318
SpriteFrame(-24, -12, 48, 16, 165, 34) // #6 - Rotating Drum Frame 6
319
SpriteFrame(-24, -12, 48, 16, 116, 34) // #7 - Rotating Drum Frame 7
320
SpriteFrame(-24, -16, 48, 16, 67, 34) // #8 - Rotating Drum Frame 8
321
SpriteFrame(-24, -8, 48, 8, 165, 18) // #9 - Rotating Drum Frame 9
322
323
AddEditorVariable("startFrame")
324
SetActiveVariable("startFrame")
325
326
AddEnumVariable("Frame 0", 0)
327
AddEnumVariable("Frame 1", 1)
328
AddEnumVariable("Frame 2", 2)
329
AddEnumVariable("Frame 3", 3)
330
AddEnumVariable("Frame 4", 4)
331
AddEnumVariable("Frame 5", 5)
332
AddEnumVariable("Frame 6", 6)
333
AddEnumVariable("Frame 7", 7)
334
AddEnumVariable("Frame 8", 8)
335
AddEnumVariable("Frame 9", 9)
336
AddEnumVariable("Frame 10", 10)
337
AddEnumVariable("Frame 11", 11)
338
AddEnumVariable("Frame 12", 12)
339
AddEnumVariable("Frame 13", 13)
340
AddEnumVariable("Frame 14", 14)
341
AddEnumVariable("Frame 15", 15)
342
AddEnumVariable("Frame 16", 16)
343
AddEnumVariable("Frame 17", 17)
344
end sub
345
346