Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/DAGarden/CharacterSpawn.txt
1319 views
1
//--------------Sonic CD Character Spawn 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.SpawnList
8
#alias Object.Value2 : Object.SpawnType // Set by BGAnimation
9
10
// Blue Bird/ Slow Bird Alias
11
#alias Object.Value2 : Object.Wobble
12
#alias Object.PropertyValue : Object.WobbleIncrease
13
14
// Spawn List
15
// 0 - Blue Bird
16
// 1, 4, 10 - Tornado
17
// 2, 5, 9 - Blue Bird/Shooting Star
18
// 3, 8 - Metal Sonic
19
// 6, 11 - UFO
20
// 7, 12 - Eggman
21
22
// States
23
#alias 0 : CHARACTERSPAWN_SETUP
24
#alias 1 : CHARACTERSPAWN_SPAWNER
25
26
// UFO Property Values
27
#alias 0 : GREEN_UFO
28
#alias 3 : YELLOW_UFO
29
30
// Shooting Star Property Values
31
#alias 0 : WHITE_STAR
32
#alias 6 : GREEN_STAR
33
34
#function CharacterSpawn_SpawnBlueBird
35
#function CharacterSpawn_SpawnShootStar
36
#function CharacterSpawn_SpawnSetup
37
38
function CharacterSpawn_SpawnBlueBird
39
//Base YPos
40
Rand(TempValue4, 64)
41
TempValue4 -= 32
42
TempValue4 += 120
43
44
TempValue5 = 0
45
while TempValue1 > 1
46
// Random XPos
47
Rand(TempValue2, 64)
48
TempValue2 -= 32
49
TempValue2 += TempValue0
50
TempValue2 <<= 16
51
// Random YPos
52
Rand(TempValue3, 96)
53
TempValue3 -= 48
54
TempValue3 += TempValue4
55
TempValue3 <<= 16
56
57
CreateTempObject(TypeName[Blue Bird], 0, TempValue2, TempValue3)
58
if TempValue0 < Screen.CenterX
59
Object[TempObjectPos].Direction = FACING_RIGHT
60
else
61
Object[TempObjectPos].Direction = FACING_LEFT
62
end if
63
Object[TempObjectPos].Wobble = TempValue5 // Set the base wobble value
64
TempValue5 += 8
65
// Set the wobble increment value
66
Rand(Object[TempObjectPos].WobbleIncrease, 10)
67
Object[TempObjectPos].WobbleIncrease += 3
68
TempValue1--
69
loop
70
// Spawn one slower blue bird
71
// Random XPos
72
Rand(TempValue2, 64)
73
TempValue2 -= 32
74
TempValue2 += TempValue0
75
TempValue2 <<= 16
76
// Random YPos
77
Rand(TempValue3, 96)
78
TempValue3 -= 48
79
TempValue3 += TempValue4
80
TempValue3 <<= 16
81
82
CreateTempObject(TypeName[Slow Bird], 0, TempValue2, TempValue3)
83
if TempValue0 < Screen.CenterX
84
Object[TempObjectPos].Direction = FACING_RIGHT
85
else
86
Object[TempObjectPos].Direction = FACING_LEFT
87
end if
88
Object[TempObjectPos].Wobble = TempValue5 // Set the base wobble value
89
TempValue5 += 8
90
// Set the wobble increment value
91
Rand(Object[TempObjectPos].WobbleIncrease, 10)
92
Object[TempObjectPos].WobbleIncrease += 3
93
TempValue1--
94
end function
95
96
97
function CharacterSpawn_SpawnShootStar
98
while TempValue1 > 0
99
// Random XPos
100
Rand(TempValue2, 256)
101
TempValue2 -= 64
102
TempValue2 += Screen.CenterX
103
TempValue2 <<= 16
104
105
// Random YPos
106
Rand(TempValue3, 80)
107
TempValue3 -= 96
108
TempValue3 <<= 16
109
110
// Define the color of the shooting star
111
Rand(TempValue4, 10)
112
if TempValue4 > 5
113
CreateTempObject(TypeName[Shooting Star], GREEN_STAR, TempValue2, TempValue3)
114
else
115
CreateTempObject(TypeName[Shooting Star], WHITE_STAR, TempValue2, TempValue3)
116
end if
117
TempValue1--
118
loop
119
end function
120
121
122
function CharacterSpawn_SpawnSetup
123
switch Object.SpawnList
124
case 0
125
// Set Base XPos
126
TempValue0 = Screen.XSize
127
TempValue0 += 96
128
TempValue1 = 8
129
CallFunction(CharacterSpawn_SpawnBlueBird)
130
Object.SpawnList++
131
break
132
133
case 1
134
// Set Base XPos
135
TempValue0 = Screen.XSize
136
TempValue0 += 48
137
TempValue0 <<= 16
138
CreateTempObject(TypeName[Tails Biplane], 0, TempValue0, Object.YPos)
139
Object[TempObjectPos].Direction = FACING_LEFT
140
Object.SpawnList++
141
break
142
143
case 2
144
if Object.SpawnType == 0
145
// Set Base XPos
146
TempValue0 = 0
147
TempValue0 -= 96
148
TempValue1 = 6
149
CallFunction(CharacterSpawn_SpawnBlueBird)
150
else
151
TempValue1 = 3 // Set the amount of stars to spawn
152
CallFunction(CharacterSpawn_SpawnShootStar)
153
end if
154
Object.SpawnList++
155
break
156
157
case 3
158
// Set XPos
159
Rand(TempValue0, 320)
160
TempValue0 -= 160
161
TempValue0 += Screen.CenterX
162
TempValue0 <<= 16
163
// Determine if spawns from the top or bottom of the screen
164
Rand(TempValue1, 64)
165
if TempValue1 > 40
166
CreateTempObject(TypeName[Metal Sonic], 0, TempValue0, 0x10C0000)
167
else
168
CreateTempObject(TypeName[Metal Sonic], 0, TempValue0, -0x400000)
169
end if
170
Object.SpawnList++
171
break
172
173
case 4
174
CreateTempObject(TypeName[Tails Biplane], 0, Object.XPos, Object.YPos)
175
Object.SpawnList++
176
break
177
178
case 5
179
if Object.SpawnType == 0
180
// Set Base XPos
181
TempValue0 = 0
182
TempValue0 -= 96
183
TempValue1 = 4
184
CallFunction(CharacterSpawn_SpawnBlueBird)
185
else
186
TempValue1 = 4 // Set the amount of stars to spawn
187
CallFunction(CharacterSpawn_SpawnShootStar)
188
end if
189
Object.SpawnList++
190
break
191
192
case 6
193
// Set Base XPos
194
TempValue0 = Screen.XSize
195
TempValue0 += 48
196
TempValue0 <<= 16
197
CreateTempObject(TypeName[UFO], YELLOW_UFO, TempValue0, Object.YPos)
198
Object[TempObjectPos].Direction = FACING_LEFT
199
Object.SpawnList++
200
break
201
202
case 7
203
// Set Base XPos
204
TempValue0 = Screen.XSize
205
TempValue0 += 48
206
TempValue0 <<= 16
207
CreateTempObject(TypeName[Dr Eggman], 6, TempValue0, 0xC00000)
208
Object[TempObjectPos].Direction = FACING_RIGHT
209
Object.SpawnList++
210
break
211
212
case 8
213
// Set Base XPos
214
Rand(TempValue0, 320)
215
TempValue0 -= 160
216
TempValue0 += Screen.CenterX
217
TempValue0 <<= 16
218
// Determine if spawns from the top or bottom of the screen
219
Rand(TempValue1, 64)
220
if TempValue1 > 40
221
CreateTempObject(TypeName[Metal Sonic], 0, TempValue0, 0x10C0000)
222
else
223
CreateTempObject(TypeName[Metal Sonic], 0, TempValue0, -0x400000)
224
end if
225
Object.SpawnList++
226
break
227
228
case 9
229
if Object.SpawnType == 0
230
// Set Base XPos
231
TempValue0 = Screen.XSize
232
TempValue0 += 96
233
TempValue1 = 8
234
CallFunction(CharacterSpawn_SpawnBlueBird)
235
else
236
TempValue1 = 2 // Set the amount of stars to spawn
237
CallFunction(CharacterSpawn_SpawnShootStar)
238
end if
239
Object.SpawnList++
240
break
241
242
case 10
243
// Set Base XPos
244
TempValue0 = Screen.XSize
245
TempValue0 += 48
246
TempValue0 <<= 16
247
CreateTempObject(TypeName[Tails Biplane], 0, TempValue0, Object.YPos)
248
Object[TempObjectPos].Direction = FACING_LEFT
249
Object.SpawnList++
250
break
251
252
case 11
253
CreateTempObject(TypeName[UFO], GREEN_UFO, Object.XPos, Object.YPos)
254
CreateTempObject(TypeName[UFO], YELLOW_UFO, Object.XPos, Object.YPos)
255
Object.SpawnList++
256
break
257
258
case 12
259
// Set Base XPos
260
TempValue0 = -48
261
TempValue0 <<= 16
262
CreateTempObject(TypeName[Dr Eggman], 6, TempValue0, 0xC00000)
263
Object[TempObjectPos].Direction = FACING_LEFT
264
Object.SpawnList = 0
265
break
266
267
end switch
268
end function
269
270
271
sub ObjectMain
272
switch Object.State
273
case CHARACTERSPAWN_SETUP
274
CreateTempObject(TypeName[Tails Biplane], 0, Object.XPos, Object.YPos)
275
Object.Timer = 380
276
Object.State++
277
break
278
279
case CHARACTERSPAWN_SPAWNER
280
if Object.Timer > 0
281
Object.Timer--
282
else
283
Rand(Object.Timer, 480)
284
Object.Timer += 240
285
CallFunction(CharacterSpawn_SpawnSetup)
286
end if
287
break
288
289
end switch
290
end sub
291
292
293
// ========================
294
// Editor Subs
295
// ========================
296
297
sub RSDKDraw
298
DrawSprite(0)
299
end sub
300
301
302
sub RSDKLoad
303
LoadSpriteSheet("Global/Display.gif")
304
SpriteFrame(-16, -16, 32, 32, 1, 143) // #0 - "Script" Icon
305
306
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
307
end sub
308
309