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