Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R4/HOBlocks3.txt
1319 views
1
//------------Sonic CD Horizontal Blocks 3 Script-------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value1 : Object.XDrawPos
7
#alias Object.Value2 : Object.XOffSet
8
#alias Object.Value3 : Object.Angle
9
#alias Object.Value4 : Object.AgainstBlock
10
11
// HUD alias
12
#alias Object[24].PropertyValue : HUD.CurrentTimePeriod
13
14
// Property Values
15
#alias 0 : ONE_BLOCK
16
#alias 1 : TWO_BLOCKS
17
#alias 2 : THREE_BLOCKS
18
#alias 3 : FOUR_BLOCKS
19
20
// Collision
21
#alias 1 : PLAYER_COL_FLOOR
22
#alias 2 : PLAYER_COL_LWALL
23
#alias 3 : PLAYER_COL_RWALL
24
25
// Time Periods
26
#alias 0 : TIME_PRESENT
27
#alias 1 : TIME_PAST
28
#alias 2 : TIME_GOOD_FUTURE
29
#alias 3 : TIME_BAD_FUTURE
30
31
32
sub ObjectMain
33
Object.Angle = Oscillation
34
Object.Angle += Object.PropertyValue
35
Object.Angle <<= 1
36
Cos(Object.XOffSet, Object.Angle)
37
38
switch Object.PropertyValue
39
case ONE_BLOCK
40
Object.XOffSet <<= 11
41
break
42
case TWO_BLOCKS
43
Object.XOffSet <<= 12
44
break
45
case THREE_BLOCKS
46
Object.XOffSet *= 0x1800
47
break
48
case FOUR_BLOCKS
49
Object.XOffSet <<= 13
50
break
51
end switch
52
53
Object.XOffSet += Object.XPos
54
Object.XOffSet &= 0xFFFF0000 // Truncate the value
55
Object.XOffSet -= Object.XDrawPos
56
Object.AgainstBlock = 0
57
end sub
58
59
60
sub ObjectPlayerInteraction
61
TempValue0 = Object.XPos
62
Object.XPos = Object.XDrawPos
63
64
switch Object.PropertyValue
65
case ONE_BLOCK
66
PlayerObjectCollision(C_BOX, -16, -16, 16, 16)
67
break
68
case TWO_BLOCKS
69
PlayerObjectCollision(C_BOX, -32, -16, 32, 16)
70
break
71
case THREE_BLOCKS
72
PlayerObjectCollision(C_BOX, -48, -16, 48, 16)
73
break
74
case FOUR_BLOCKS
75
PlayerObjectCollision(C_BOX, -64, -16, 64, 16)
76
break
77
end switch
78
79
Object.XPos = TempValue0
80
81
switch CheckResult
82
case PLAYER_COL_FLOOR
83
Player.XPos += Object.XOffSet
84
break
85
86
case PLAYER_COL_LWALL
87
PlayerObjectCollision(C_BOX, -160, -16, -128, 16)
88
if CheckResult == PLAYER_COL_RWALL
89
CallFunction(Player_Kill)
90
end if
91
break
92
end switch
93
end sub
94
95
96
sub ObjectDraw
97
switch Object.PropertyValue
98
case ONE_BLOCK
99
Cos(Object.XDrawPos, Object.Angle)
100
Object.XDrawPos <<= 11
101
Object.XDrawPos += Object.XPos
102
Object.XDrawPos &= 0xFFFF0000 // Truncate the value
103
DrawSpriteXY(1, Object.XDrawPos, Object.YPos)
104
break
105
106
case TWO_BLOCKS
107
Cos(Object.XDrawPos, Object.Angle)
108
Object.XDrawPos <<= 12
109
Object.XDrawPos += Object.XPos
110
Object.XDrawPos &= 0xFFFF0000 // Truncate the value
111
DrawSpriteXY(4, Object.XDrawPos, Object.YPos)
112
DrawSpriteXY(5, Object.XDrawPos, Object.YPos)
113
break
114
115
case THREE_BLOCKS
116
Cos(Object.XDrawPos, Object.Angle)
117
Object.XDrawPos *= 0x1800
118
Object.XDrawPos += Object.XPos
119
Object.XDrawPos &= 0xFFFF0000 // Truncate the value
120
DrawSpriteXY(0, Object.XDrawPos, Object.YPos)
121
DrawSpriteXY(1, Object.XDrawPos, Object.YPos)
122
DrawSpriteXY(2, Object.XDrawPos, Object.YPos)
123
break
124
125
case FOUR_BLOCKS
126
Cos(Object.XDrawPos, Object.Angle)
127
Object.XDrawPos <<= 13
128
Object.XDrawPos += Object.XPos
129
Object.XDrawPos &= 0xFFFF0000 // Truncate the value
130
DrawSpriteXY(3, Object.XDrawPos, Object.YPos)
131
DrawSpriteXY(4, Object.XDrawPos, Object.YPos)
132
DrawSpriteXY(5, Object.XDrawPos, Object.YPos)
133
DrawSpriteXY(6, Object.XDrawPos, Object.YPos)
134
break
135
end switch
136
end sub
137
138
139
sub ObjectStartup
140
switch HUD.CurrentTimePeriod
141
case TIME_PRESENT
142
LoadSpriteSheet("R4/Objects.gif")
143
TempValue0 = 163
144
TempValue1 = 1
145
TempValue2 = 196
146
break
147
148
case TIME_PAST
149
LoadSpriteSheet("R4/Objects2.gif")
150
TempValue0 = 1
151
TempValue1 = 157
152
TempValue2 = 34
153
break
154
155
case TIME_GOOD_FUTURE
156
LoadSpriteSheet("R4/Objects2.gif")
157
TempValue0 = 1
158
TempValue1 = 190
159
TempValue2 = 34
160
break
161
162
case TIME_BAD_FUTURE
163
LoadSpriteSheet("R4/Objects2.gif")
164
TempValue0 = 1
165
TempValue1 = 223
166
TempValue2 = 34
167
break
168
end switch
169
170
// R4 Blocks
171
SpriteFrame(-48, -16, 32, 32, TempValue0, TempValue1)
172
SpriteFrame(-16, -16, 32, 32, TempValue0, TempValue1)
173
SpriteFrame(16, -16, 32, 32, TempValue0, TempValue1)
174
SpriteFrame(-64, -16, 32, 32, TempValue0, TempValue1)
175
SpriteFrame(-32, -16, 32, 32, TempValue0, TempValue1)
176
SpriteFrame(0, -16, 32, 32, TempValue0, TempValue1)
177
SpriteFrame(32, -16, 32, 32, TempValue0, TempValue1)
178
end sub
179
180
181
// ========================
182
// Editor Subs
183
// ========================
184
185
sub RSDKEdit
186
if Editor.ReturnVariable == true
187
switch Editor.VariableID
188
case EDIT_VAR_PROPVAL // Property Value
189
CheckResult = Object.PropertyValue
190
break
191
case 0 // blocks
192
CheckResult = Object.PropertyValue
193
break
194
end switch
195
else
196
switch Editor.VariableID
197
case EDIT_VAR_PROPVAL // Property Value
198
Object.PropertyValue = Editor.VariableValue
199
break
200
case 0 // blocks
201
Object.PropertyValue = Editor.VariableValue
202
break
203
end switch
204
end if
205
end sub
206
207
208
sub RSDKDraw
209
TempValue2 = Object.PropertyValue
210
TempValue2 <<= 1
211
212
TempValue1 = Object.PropertyValue
213
TempValue1++
214
TempValue1 *= 0x100000
215
FlipSign(TempValue1)
216
TempValue1 += Object.XPos
217
218
switch Object.PropertyValue
219
case ONE_BLOCK
220
Cos(TempValue0, TempValue2)
221
TempValue0 <<= 11
222
TempValue0 += Object.XPos
223
TempValue0 &= 0xFFFF0000 // Truncate the value
224
DrawSpriteXY(1, TempValue0, Object.YPos)
225
DrawArrow(TempValue0, Object.YPos, TempValue1, Object.YPos, 255, 255, 0)
226
227
if Editor.ShowGizmos == true
228
Editor.DrawingOverlay = true
229
TempValue4 = Object.XPos
230
TempValue4 -= 0x200000
231
TempValue3 = Object.YPos
232
TempValue3 -= 0x100000
233
DrawRectOutline(TempValue4, TempValue3, 0x40, 0x20, 255, 255, 255, 255)
234
DrawRectOutline(TempValue1, TempValue3, 0x20, 0x20, 255, 255, 0, 255)
235
DrawArrow(TempValue1, Object.YPos, TempValue0, Object.YPos, 255, 255, 255)
236
Editor.DrawingOverlay = false
237
end if
238
break
239
240
case TWO_BLOCKS
241
Cos(TempValue0, TempValue2)
242
TempValue0 <<= 12
243
TempValue0 += Object.XPos
244
TempValue0 &= 0xFFFF0000 // Truncate the value
245
DrawSpriteXY(4, TempValue0, Object.YPos)
246
DrawSpriteXY(5, TempValue0, Object.YPos)
247
248
DrawArrow(TempValue0, Object.YPos, TempValue1, Object.YPos, 255, 255, 0)
249
250
if Editor.ShowGizmos == true
251
Editor.DrawingOverlay = true
252
TempValue4 = Object.XPos
253
TempValue4 -= 0x400000
254
TempValue3 = Object.YPos
255
TempValue3 -= 0x100000
256
DrawRectOutline(TempValue4, TempValue3, 0x80, 0x20, 255, 255, 255, 255)
257
DrawRectOutline(TempValue1, TempValue3, 0x40, 0x20, 255, 255, 0, 255)
258
DrawArrow(TempValue1, Object.YPos, TempValue0, Object.YPos, 255, 255, 255)
259
Editor.DrawingOverlay = false
260
end if
261
break
262
263
case THREE_BLOCKS
264
Cos(TempValue0, TempValue2)
265
TempValue0 *= 0x1800
266
TempValue0 += Object.XPos
267
TempValue0 &= 0xFFFF0000 // Truncate the value
268
DrawSpriteXY(0, TempValue0, Object.YPos)
269
DrawSpriteXY(1, TempValue0, Object.YPos)
270
DrawSpriteXY(2, TempValue0, Object.YPos)
271
272
DrawArrow(TempValue0, Object.YPos, TempValue1, Object.YPos, 255, 255, 0)
273
274
if Editor.ShowGizmos == true
275
Editor.DrawingOverlay = true
276
TempValue4 = Object.XPos
277
TempValue4 -= 0x600000
278
TempValue3 = Object.YPos
279
TempValue3 -= 0x100000
280
DrawRectOutline(TempValue4, TempValue3, 0x80, 0x20, 255, 255, 255, 255)
281
DrawRectOutline(TempValue1, TempValue3, 0x60, 0x20, 255, 255, 0, 255)
282
DrawArrow(TempValue1, Object.YPos, TempValue0, Object.YPos, 255, 255, 255)
283
Editor.DrawingOverlay = false
284
end if
285
break
286
287
case FOUR_BLOCKS
288
Cos(TempValue0, TempValue2)
289
TempValue0 <<= 13
290
TempValue0 += Object.XPos
291
TempValue0 &= 0xFFFF0000 // Truncate the value
292
DrawSpriteXY(3, TempValue0, Object.YPos)
293
DrawSpriteXY(4, TempValue0, Object.YPos)
294
DrawSpriteXY(5, TempValue0, Object.YPos)
295
DrawSpriteXY(6, TempValue0, Object.YPos)
296
297
DrawArrow(TempValue0, Object.YPos, TempValue1, Object.YPos, 255, 255, 0)
298
299
if Editor.ShowGizmos == true
300
Editor.DrawingOverlay = true
301
TempValue4 = Object.XPos
302
TempValue4 -= 0x800000
303
TempValue3 = Object.YPos
304
TempValue3 -= 0x100000
305
DrawRectOutline(TempValue4, TempValue3, 0xC0, 0x20, 255, 255, 255, 255)
306
DrawRectOutline(TempValue1, TempValue3, 0x80, 0x20, 255, 255, 0, 255)
307
DrawArrow(TempValue1, Object.YPos, TempValue0, Object.YPos, 255, 255, 255)
308
Editor.DrawingOverlay = false
309
end if
310
break
311
end switch
312
end sub
313
314
315
sub RSDKLoad
316
CallFunction(EditorHelpers_FindTimePeriod)
317
switch CheckResult
318
case TIME_PRESENT
319
LoadSpriteSheet("R4/Objects.gif")
320
TempValue0 = 163
321
TempValue1 = 1
322
TempValue2 = 196
323
break
324
325
case TIME_PAST
326
LoadSpriteSheet("R4/Objects2.gif")
327
TempValue0 = 1
328
TempValue1 = 157
329
TempValue2 = 34
330
break
331
332
case TIME_GOOD_FUTURE
333
LoadSpriteSheet("R4/Objects2.gif")
334
TempValue0 = 1
335
TempValue1 = 190
336
TempValue2 = 34
337
break
338
339
case TIME_BAD_FUTURE
340
LoadSpriteSheet("R4/Objects2.gif")
341
TempValue0 = 1
342
TempValue1 = 223
343
TempValue2 = 34
344
break
345
end switch
346
347
// R4 Blocks
348
SpriteFrame(-48, -16, 32, 32, TempValue0, TempValue1)
349
SpriteFrame(-16, -16, 32, 32, TempValue0, TempValue1)
350
SpriteFrame(16, -16, 32, 32, TempValue0, TempValue1)
351
SpriteFrame(-64, -16, 32, 32, TempValue0, TempValue1)
352
SpriteFrame(-32, -16, 32, 32, TempValue0, TempValue1)
353
SpriteFrame(0, -16, 32, 32, TempValue0, TempValue1)
354
SpriteFrame(32, -16, 32, 32, TempValue0, TempValue1)
355
356
AddEditorVariable("blocks")
357
SetActiveVariable("blocks")
358
AddEnumVariable("One block", ONE_BLOCK)
359
AddEnumVariable("Two blocks", TWO_BLOCKS)
360
AddEnumVariable("Three blocks", THREE_BLOCKS)
361
AddEnumVariable("Four blocks", FOUR_BLOCKS)
362
end sub
363
364