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