Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R4/BlockRowsC.txt
1319 views
1
//----------------Sonic CD Block Rows C Script----------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value1 : Object.XVelocity
7
#alias Object.Value2 : Object.OnObject
8
9
// HUD Alias
10
#alias Object[24].PropertyValue : HUD.CurrentTimePeriod
11
12
// Time Periods
13
#alias 0 : TIME_PRESENT
14
#alias 1 : TIME_PAST
15
#alias 2 : TIME_GOOD_FUTURE
16
#alias 3 : TIME_BAD_FUTURE
17
18
// Priority
19
#alias 0 : PRIORITY_BOUNDS
20
21
// Collision
22
#alias 1 : PLAYER_COL_FLOOR
23
#alias 2 : PLAYER_COL_LWALL
24
#alias 3 : PLAYER_COL_RWALL
25
#alias 4 : PLAYER_COL_ROOF
26
27
// Gravity
28
#alias 1 : GRAVITY_AIR
29
30
31
sub ObjectMain
32
Object.XVelocity += 0x20000
33
Object.XVelocity %= 0x1000000
34
Object.Priority = PRIORITY_BOUNDS
35
end sub
36
37
38
sub ObjectPlayerInteraction
39
TempValue0 = Object.XPos
40
Object.XPos -= 0x1000000
41
Object.XPos -= Object.XVelocity
42
TempValue1 = 0
43
TempValue2 = 0
44
TempValue3 = 0
45
while TempValue1 < 3
46
PlayerObjectCollision(C_BOX, -64, -64, 64, -32)
47
switch CheckResult
48
case PLAYER_COL_FLOOR
49
Player.XPos -= 0x20000
50
if Player.Speed == 0
51
if Object.OnObject == false
52
Object.OnObject = true
53
// Truncate these values
54
Player.XPos &= 0xFFFF0000
55
Object.XVelocity &= 0xFFFF0000
56
end if
57
else
58
Object.OnObject = false
59
end if
60
break
61
62
case PLAYER_COL_LWALL
63
TempValue2 = true
64
break
65
66
case PLAYER_COL_RWALL
67
TempValue3 = true
68
break
69
70
end switch
71
Object.XPos += 0x1000000
72
TempValue1++
73
loop
74
Object.XPos = TempValue0
75
Object.XPos -= 0x1000000
76
Object.XPos += Object.XVelocity
77
78
TempValue1 = 0
79
while TempValue1 < 3
80
PlayerObjectCollision(C_BOX, -64, 32, 64, 64)
81
switch CheckResult
82
case PLAYER_COL_FLOOR
83
Player.XPos += 0x20000
84
if Player.Speed == 0
85
if Object.OnObject == false
86
Object.OnObject = true
87
Player.XPos &= 0xFFFF0000 // Truncate the value
88
Object.XVelocity &= 0xFFFF0000 // Truncate the value
89
end if
90
else
91
Object.OnObject = false
92
end if
93
break
94
95
case PLAYER_COL_LWALL
96
TempValue2 = true
97
break
98
99
case PLAYER_COL_RWALL
100
TempValue3 = true
101
break
102
103
end switch
104
Object.XPos += 0x1000000
105
TempValue1++
106
loop
107
108
if Player.Gravity == GRAVITY_AIR
109
Object.OnObject = false
110
end if
111
112
Object.XPos = TempValue0
113
PlayerObjectCollision(C_BOX, -224, -128, -192, 128)
114
switch CheckResult
115
case PLAYER_COL_LWALL
116
TempValue2 = true
117
break
118
119
case PLAYER_COL_RWALL
120
TempValue3 = true
121
break
122
123
end switch
124
PlayerObjectCollision(C_BOX, 192, -128, 224, 128)
125
switch CheckResult
126
case PLAYER_COL_LWALL
127
TempValue2 = true
128
break
129
130
case PLAYER_COL_RWALL
131
TempValue3 = true
132
break
133
134
end switch
135
136
if TempValue2 == true
137
if TempValue3 == true
138
CallFunction(Player_Kill)
139
end if
140
end if
141
end sub
142
143
144
sub ObjectDraw
145
TempValue0 = Object.XPos
146
TempValue0 -= 0x1000000
147
TempValue0 -= Object.XVelocity
148
149
TempValue1 = Object.YPos
150
TempValue1 -= 0x300000
151
152
TempValue2 = 0
153
while TempValue2 < 3
154
DrawSpriteXY(0, TempValue0, TempValue1)
155
DrawSpriteXY(1, TempValue0, TempValue1)
156
DrawSpriteXY(2, TempValue0, TempValue1)
157
DrawSpriteXY(3, TempValue0, TempValue1)
158
TempValue0 += 0x1000000
159
TempValue2++
160
loop
161
162
TempValue0 = Object.XPos
163
TempValue0 -= 0x1000000
164
TempValue0 += Object.XVelocity
165
166
TempValue1 = Object.YPos
167
TempValue1 += 0x300000
168
169
TempValue2 = 0
170
while TempValue2 < 3
171
DrawSpriteXY(0, TempValue0, TempValue1)
172
DrawSpriteXY(1, TempValue0, TempValue1)
173
DrawSpriteXY(2, TempValue0, TempValue1)
174
DrawSpriteXY(3, TempValue0, TempValue1)
175
TempValue0 += 0x1000000
176
TempValue2++
177
loop
178
end sub
179
180
181
sub ObjectStartup
182
switch HUD.CurrentTimePeriod
183
case TIME_PRESENT
184
LoadSpriteSheet("R4/Objects.gif")
185
TempValue0 = 163
186
TempValue1 = 1
187
TempValue2 = 196
188
break
189
190
case TIME_PAST
191
LoadSpriteSheet("R4/Objects2.gif")
192
TempValue0 = 1
193
TempValue1 = 157
194
TempValue2 = 34
195
break
196
197
case TIME_GOOD_FUTURE
198
LoadSpriteSheet("R4/Objects2.gif")
199
TempValue0 = 1
200
TempValue1 = 190
201
TempValue2 = 34
202
break
203
204
case TIME_BAD_FUTURE
205
LoadSpriteSheet("R4/Objects2.gif")
206
TempValue0 = 1
207
TempValue1 = 223
208
TempValue2 = 34
209
break
210
211
end switch
212
213
// Cube of blocks
214
SpriteFrame(-64, -16, 32, 32, TempValue0, TempValue1)
215
SpriteFrame(-32, -16, 32, 32, TempValue0, TempValue1)
216
SpriteFrame(0, -16, 32, 32, TempValue0, TempValue1)
217
SpriteFrame(32, -16, 32, 32, TempValue0, TempValue1)
218
end sub
219
220
221
// ========================
222
// Editor Subs
223
// ========================
224
225
sub RSDKDraw
226
TempValue0 = Object.XPos
227
TempValue0 -= 0x1000000
228
229
TempValue1 = Object.YPos
230
TempValue1 -= 0x300000
231
232
TempValue2 = 0
233
while TempValue2 < 3
234
DrawSpriteXY(0, TempValue0, TempValue1)
235
DrawSpriteXY(1, TempValue0, TempValue1)
236
DrawSpriteXY(2, TempValue0, TempValue1)
237
DrawSpriteXY(3, TempValue0, TempValue1)
238
TempValue0 += 0x1000000
239
TempValue2++
240
loop
241
TempValue3 = Object.XPos
242
TempValue3 -= 0x2000000
243
DrawArrow(Object.XPos, TempValue1, TempValue3, TempValue1, 255, 255, 0)
244
TempValue3 = TempValue0
245
246
247
TempValue0 = Object.XPos
248
TempValue0 -= 0x1000000
249
TempValue1 = Object.YPos
250
TempValue1 += 0x300000
251
252
TempValue2 = 0
253
while TempValue2 < 3
254
DrawSpriteXY(0, TempValue0, TempValue1)
255
DrawSpriteXY(1, TempValue0, TempValue1)
256
DrawSpriteXY(2, TempValue0, TempValue1)
257
DrawSpriteXY(3, TempValue0, TempValue1)
258
TempValue0 += 0x1000000
259
TempValue2++
260
loop
261
DrawArrow(Object.XPos, TempValue1, TempValue0, TempValue1, 255, 255, 0)
262
263
if Editor.ShowGizmos == true
264
Editor.DrawingOverlay = true
265
TempValue2 = Object.YPos
266
TempValue2 -= 0x300000
267
DrawArrow(TempValue3, TempValue2, Object.XPos, TempValue2, 255, 255, 255)
268
TempValue2 = Object.XPos
269
TempValue2 -= 0x2000000
270
DrawArrow(TempValue2, TempValue1, Object.XPos, TempValue1, 255, 255, 255)
271
TempValue0 = Object.XPos
272
TempValue0 -= 0x2000000
273
TempValue1 = Object.YPos
274
TempValue1 -= 0x400000
275
DrawRectOutline(TempValue0, TempValue1, 0x400, 0x80, 255, 255, 0, 255)
276
Editor.DrawingOverlay = false
277
end if
278
end sub
279
280
281
sub RSDKLoad
282
CallFunction(EditorHelpers_FindTimePeriod)
283
switch CheckResult
284
case TIME_PRESENT
285
LoadSpriteSheet("R4/Objects.gif")
286
TempValue0 = 163
287
TempValue1 = 1
288
TempValue2 = 196
289
break
290
291
case TIME_PAST
292
LoadSpriteSheet("R4/Objects2.gif")
293
TempValue0 = 1
294
TempValue1 = 157
295
TempValue2 = 34
296
break
297
298
case TIME_GOOD_FUTURE
299
LoadSpriteSheet("R4/Objects2.gif")
300
TempValue0 = 1
301
TempValue1 = 190
302
TempValue2 = 34
303
break
304
305
case TIME_BAD_FUTURE
306
LoadSpriteSheet("R4/Objects2.gif")
307
TempValue0 = 1
308
TempValue1 = 223
309
TempValue2 = 34
310
break
311
312
end switch
313
314
// Cube of blocks
315
SpriteFrame(-64, -16, 32, 32, TempValue0, TempValue1)
316
SpriteFrame(-32, -16, 32, 32, TempValue0, TempValue1)
317
SpriteFrame(0, -16, 32, 32, TempValue0, TempValue1)
318
SpriteFrame(32, -16, 32, 32, TempValue0, TempValue1)
319
320
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
321
end sub
322
323