Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R7/R7DSetup.txt
1319 views
1
//-----------------Sonic CD R7 D Setup Script-----------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value0 : Object.Timer
7
#alias Object.Value1 : Object.ActivePalette
8
#alias Object.Value2 : Object.FlamesTimer
9
10
// Collision Modes
11
#alias 0 : CMODE_FLOOR
12
#alias 1 : CMODE_LWALL
13
#alias 2 : CMODE_ROOF
14
#alias 3 : CMODE_RWALL
15
16
// Priority
17
#alias 1 : PRIORITY_ACTIVE
18
19
// Tile Info
20
#alias 0 : TILEINFO_INDEX
21
#alias 8 : TILEINFO_ANGLEB
22
23
24
// Function declarations
25
#function R7Setup_GetLoopTileInfo
26
27
function R7Setup_GetLoopTileInfo
28
// Gets info from out of bounds chunks, located past the signpost
29
30
// Precondition:
31
// - TempValue0 is the chunk ID of the chunk currentbly being checked against
32
33
TempValue3 = Player.XPos
34
TempValue3 >>= 16
35
TempValue3 &= 255
36
TempValue3 += 0x3100
37
TempValue0 -= 16
38
TempValue0 >>= 2
39
TempValue0 <<= 8
40
41
TempValue4 = Player.YPos
42
TempValue4 >>= 16
43
TempValue4 &= 255
44
TempValue4 += TempValue0
45
46
Get16x16TileInfo(TempValue0, TempValue3, TempValue4, TILEINFO_INDEX)
47
end function
48
49
50
sub ObjectMain
51
52
Object.Timer++
53
if Object.Timer == 5
54
Object.Timer = 0
55
Object.ActivePalette++
56
Object.ActivePalette %= 6
57
SetActivePalette(Object.ActivePalette, 0, 240)
58
end if
59
60
if Object.FlamesTimer > 0
61
Object.FlamesTimer--
62
end if
63
64
end sub
65
66
67
sub ObjectPlayerInteraction
68
69
// Loops are handled here
70
71
// Get the chunk ID of the player's current position
72
TempValue1 = Player.XPos
73
TempValue1 >>= 23
74
TempValue2 = Player.YPos
75
TempValue2 >>= 23
76
GetTileLayerEntry(TempValue0, 0, TempValue1, TempValue2)
77
78
// Jump to its entry if it's a loop chunk
79
switch TempValue0
80
case 16
81
case 17
82
case 18
83
case 19
84
// Loop chunks, open from left side
85
CallFunction(R7Setup_GetLoopTileInfo)
86
if Player.CollisionMode == CMODE_FLOOR
87
if TempValue0 == 1001
88
TempValue1 &= 1022
89
TempValue2 &= 1022
90
SetTileLayerEntry(20, 0, TempValue1, TempValue2)
91
TempValue1++
92
SetTileLayerEntry(21, 0, TempValue1, TempValue2)
93
TempValue1--
94
TempValue2++
95
SetTileLayerEntry(22, 0, TempValue1, TempValue2)
96
TempValue1++
97
SetTileLayerEntry(23, 0, TempValue1, TempValue2)
98
end if
99
else
100
if Player.Speed > 0
101
if TempValue0 == 1003
102
TempValue1 &= 1022
103
TempValue2 &= 1022
104
SetTileLayerEntry(20, 0, TempValue1, TempValue2)
105
TempValue1++
106
SetTileLayerEntry(21, 0, TempValue1, TempValue2)
107
TempValue1--
108
TempValue2++
109
SetTileLayerEntry(22, 0, TempValue1, TempValue2)
110
TempValue1++
111
SetTileLayerEntry(23, 0, TempValue1, TempValue2)
112
end if
113
end if
114
end if
115
break
116
117
case 20
118
case 21
119
case 22
120
case 23
121
// Loop chunks, open from right side
122
CallFunction(R7Setup_GetLoopTileInfo)
123
if Player.CollisionMode == CMODE_FLOOR
124
if TempValue0 == 1000
125
TempValue1 &= 1022
126
TempValue2 &= 1022
127
SetTileLayerEntry(16, 0, TempValue1, TempValue2)
128
TempValue1++
129
SetTileLayerEntry(17, 0, TempValue1, TempValue2)
130
TempValue1--
131
TempValue2++
132
SetTileLayerEntry(18, 0, TempValue1, TempValue2)
133
TempValue1++
134
SetTileLayerEntry(19, 0, TempValue1, TempValue2)
135
end if
136
else
137
if Player.Speed < 0
138
if TempValue0 == 1002
139
TempValue1 &= 1022
140
TempValue2 &= 1022
141
SetTileLayerEntry(16, 0, TempValue1, TempValue2)
142
TempValue1++
143
SetTileLayerEntry(17, 0, TempValue1, TempValue2)
144
TempValue1--
145
TempValue2++
146
SetTileLayerEntry(18, 0, TempValue1, TempValue2)
147
TempValue1++
148
SetTileLayerEntry(19, 0, TempValue1, TempValue2)
149
end if
150
end if
151
end if
152
break
153
154
case 24
155
case 25
156
case 26
157
case 27
158
// Wavy chunks, open from left side
159
CallFunction(R7Setup_GetLoopTileInfo)
160
if TempValue0 == 1001
161
TempValue1 &= 1022
162
TempValue2 &= 1022
163
SetTileLayerEntry(28, 0, TempValue1, TempValue2)
164
TempValue1++
165
SetTileLayerEntry(29, 0, TempValue1, TempValue2)
166
TempValue1--
167
TempValue2++
168
SetTileLayerEntry(30, 0, TempValue1, TempValue2)
169
TempValue1++
170
SetTileLayerEntry(31, 0, TempValue1, TempValue2)
171
end if
172
break
173
174
case 28
175
case 29
176
case 30
177
case 31
178
// Wavy chunks, open from right side
179
CallFunction(R7Setup_GetLoopTileInfo)
180
if TempValue0 == 1000
181
TempValue1 &= 1022
182
TempValue2 &= 1022
183
SetTileLayerEntry(24, 0, TempValue1, TempValue2)
184
TempValue1++
185
SetTileLayerEntry(25, 0, TempValue1, TempValue2)
186
TempValue1--
187
TempValue2++
188
SetTileLayerEntry(26, 0, TempValue1, TempValue2)
189
TempValue1++
190
SetTileLayerEntry(27, 0, TempValue1, TempValue2)
191
end if
192
break
193
194
end switch
195
196
if Object.FlamesTimer == 0
197
198
// Get the absolute version of the player's speed
199
TempValue0 = Player.Speed
200
if TempValue0 < 0
201
FlipSign(TempValue0)
202
end if
203
204
// Is the player going faster than 10px per frame?
205
if TempValue0 > 0xA0000
206
207
// See if the tile the player's on is a fire-friendly one
208
TempValue3 = Player.XPos
209
TempValue3 >>= 16
210
TempValue4 = Player.YPos
211
TempValue4 >>= 16
212
TempValue4 += 8
213
Get16x16TileInfo(TempValue0, TempValue3, TempValue4, TILEINFO_ANGLEB)
214
215
if TempValue0 == 1
216
Object.FlamesTimer = 4
217
218
// Start a Flame Trail behind the player
219
CreateTempObject(TypeName[Fire Trail], 0, Player.XPos, Player.YPos)
220
if Player.Speed < 0
221
Object[TempObjectPos].Direction = FACING_LEFT
222
else
223
Object[TempObjectPos].Direction = FACING_RIGHT
224
end if
225
Object[TempObjectPos].DrawOrder = 4
226
Object[TempObjectPos].iYPos += Player.CollisionBottom
227
228
end if
229
end if
230
end if
231
232
end sub
233
234
235
sub ObjectStartup
236
237
Object[19].Type = TypeName[R7 Setup]
238
Object[19].Priority = PRIORITY_ACTIVE
239
240
// Setup the palette cycling used in the stage
241
CopyPalette(0, 1)
242
CopyPalette(0, 2)
243
CopyPalette(0, 3)
244
CopyPalette(0, 4)
245
CopyPalette(0, 5)
246
TempValue0 = 0
247
TempValue1 = 0
248
TempValue2 = 16
249
while TempValue0 < 6
250
LoadPalette("R7D_PalCycle.act", TempValue0, 160, TempValue1, TempValue2)
251
TempValue0++
252
TempValue1 += 16
253
TempValue2 += 16
254
loop
255
256
end sub
257
258
259
// ========================
260
// Editor Subs
261
// ========================
262
263
sub RSDKDraw
264
DrawSprite(0)
265
end sub
266
267
268
sub RSDKLoad
269
LoadSpriteSheet("Global/Display.gif")
270
SpriteFrame(-16, -16, 32, 32, 1, 143) // "Script" Icon
271
272
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
273
end sub
274
275