Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R4/ButtonPrize.txt
1319 views
1
//----------------Sonic CD Button Prize 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
8
// Bubble aliases
9
#alias Object.XPos : AirBubble.XPos
10
#alias Object.Value1 : AirBubble.Angle
11
#alias Object.Value2 : AirBubble.XVelocity
12
#alias Object.Value3 : AirBubble.YVelocity
13
#alias Object.DrawOrder : AirBubble.DrawOrder
14
15
// Push Button aliases
16
#alias Object.PropertyValue : PushButton.Pressed
17
18
// States
19
#alias 0 : BUTTONPRIZE_USED
20
#alias 1 : BUTTONPRIZE_CREATE_BUBBLES
21
#alias 2 : BUTTONPRIZE_CREATE_RINGS
22
23
// Property Values
24
#alias 0 : BUTTONPRIZE_SPIKES
25
#alias 1 : BUTTONPRIZE_SCORE
26
#alias 2 : BUTTONPRIZE_BUBBLES
27
#alias 3 : BUTTONPRIZE_BUBBLES_2 // No real difference to the normal one, just uses some different objects
28
#alias 4 : BUTTONPRIZE_RINGS
29
#alias 5 : BUTTONPRIZE_RINGS_2 // No real difference to the normal one, just uses some different objects
30
31
// Air Bubble Property Values
32
#alias 5 : BUBBLE_BREATHABLE
33
34
// Object Score property values
35
#alias 3 : OBJECTSCORE_1000
36
37
// Priority
38
#alias 0 : PRIORITY_BOUNDS
39
40
41
sub ObjectMain
42
switch Object.State
43
case BUTTONPRIZE_USED
44
if PushButton[-1].Pressed == true
45
switch Object.PropertyValue
46
case BUTTONPRIZE_SPIKES
47
Object[-1].Type = TypeName[Blank Object]
48
Object[+1].Type = TypeName[Moving Spikes]
49
Object[+3].Type = TypeName[Moving Spikes]
50
Object[+5].Type = TypeName[Moving Spikes]
51
Object[+7].Type = TypeName[Moving Spikes]
52
Object[+9].Type = TypeName[Moving Spikes]
53
CreateTempObject(TypeName[Explosion], 0, Object[-1].XPos, Object[-1].YPos)
54
CreateTempObject(TypeName[Explosion], 0, Object[+1].XPos, Object[+1].YPos)
55
CreateTempObject(TypeName[Explosion], 0, Object[+3].XPos, Object[+3].YPos)
56
CreateTempObject(TypeName[Explosion], 0, Object[+5].XPos, Object[+5].YPos)
57
CreateTempObject(TypeName[Explosion], 0, Object[+7].XPos, Object[+7].YPos)
58
CreateTempObject(TypeName[Explosion], 0, Object[+9].XPos, Object[+9].YPos)
59
break
60
61
case BUTTONPRIZE_SCORE
62
Object[-3].Type = TypeName[Object Score]
63
Object[-3].PropertyValue = OBJECTSCORE_1000
64
Object[-1].Type = TypeName[Blank Object]
65
Object[+1].Type = TypeName[Object Score]
66
Object[+1].PropertyValue = OBJECTSCORE_1000
67
Object[+3].Type = TypeName[Object Score]
68
Object[+3].PropertyValue = OBJECTSCORE_1000
69
Object[+5].Type = TypeName[Object Score]
70
Object[+5].PropertyValue = OBJECTSCORE_1000
71
Object[+7].Type = TypeName[Object Score]
72
Object[+7].PropertyValue = OBJECTSCORE_1000
73
CreateTempObject(TypeName[Explosion], 0, Object[-3].XPos, Object[-3].YPos)
74
CreateTempObject(TypeName[Explosion], 0, Object[-1].XPos, Object[-1].YPos)
75
CreateTempObject(TypeName[Explosion], 0, Object[+1].XPos, Object[+1].YPos)
76
CreateTempObject(TypeName[Explosion], 0, Object[+3].XPos, Object[+3].YPos)
77
CreateTempObject(TypeName[Explosion], 0, Object[+5].XPos, Object[+5].YPos)
78
CreateTempObject(TypeName[Explosion], 0, Object[+7].XPos, Object[+7].YPos)
79
Player.Score += 5000
80
break
81
82
case BUTTONPRIZE_BUBBLES
83
Object[-5].Type = TypeName[Button Prize]
84
Object[-3].Type = TypeName[Button Prize]
85
Object[-1].Type = TypeName[Button Prize]
86
Object[+1].Type = TypeName[Button Prize]
87
Object[+3].Type = TypeName[Button Prize]
88
Object[+5].Type = TypeName[Button Prize]
89
Object[-5].State = BUTTONPRIZE_CREATE_BUBBLES
90
Object[-3].State = BUTTONPRIZE_CREATE_BUBBLES
91
Object[-1].State = BUTTONPRIZE_CREATE_BUBBLES
92
Object[+1].State = BUTTONPRIZE_CREATE_BUBBLES
93
Object[+3].State = BUTTONPRIZE_CREATE_BUBBLES
94
Object[+5].State = BUTTONPRIZE_CREATE_BUBBLES
95
CreateTempObject(TypeName[Explosion], 0, Object[-5].XPos, Object[-5].YPos)
96
CreateTempObject(TypeName[Explosion], 0, Object[-3].XPos, Object[-3].YPos)
97
CreateTempObject(TypeName[Explosion], 0, Object[-1].XPos, Object[-1].YPos)
98
CreateTempObject(TypeName[Explosion], 0, Object[+1].XPos, Object[+1].YPos)
99
CreateTempObject(TypeName[Explosion], 0, Object[+3].XPos, Object[+3].YPos)
100
CreateTempObject(TypeName[Explosion], 0, Object[+5].XPos, Object[+5].YPos)
101
break
102
103
case BUTTONPRIZE_BUBBLES_2
104
Object[-7].Type = TypeName[Button Prize]
105
Object[-5].Type = TypeName[Button Prize]
106
Object[-3].Type = TypeName[Button Prize]
107
Object[-1].Type = TypeName[Button Prize]
108
Object[+1].Type = TypeName[Button Prize]
109
Object[+3].Type = TypeName[Button Prize]
110
Object[-7].State = BUTTONPRIZE_CREATE_BUBBLES
111
Object[-5].State = BUTTONPRIZE_CREATE_BUBBLES
112
Object[-3].State = BUTTONPRIZE_CREATE_BUBBLES
113
Object[-1].State = BUTTONPRIZE_CREATE_BUBBLES
114
Object[+1].State = BUTTONPRIZE_CREATE_BUBBLES
115
Object[+3].State = BUTTONPRIZE_CREATE_BUBBLES
116
CreateTempObject(TypeName[Explosion], 0, Object[-7].XPos, Object[-7].YPos)
117
CreateTempObject(TypeName[Explosion], 0, Object[-5].XPos, Object[-5].YPos)
118
CreateTempObject(TypeName[Explosion], 0, Object[-3].XPos, Object[-3].YPos)
119
CreateTempObject(TypeName[Explosion], 0, Object[-1].XPos, Object[-1].YPos)
120
CreateTempObject(TypeName[Explosion], 0, Object[+1].XPos, Object[+1].YPos)
121
CreateTempObject(TypeName[Explosion], 0, Object[+3].XPos, Object[+3].YPos)
122
break
123
124
case BUTTONPRIZE_RINGS
125
Object[-9].Type = TypeName[Blank Object]
126
Object[-7].Type = TypeName[Blank Object]
127
Object[-5].Type = TypeName[Blank Object]
128
Object[-3].Type = TypeName[Blank Object]
129
Object[-1].Type = TypeName[Button Prize]
130
Object[-1].XPos += 0x200000
131
Object[-1].State = BUTTONPRIZE_CREATE_RINGS
132
Object[+1].Type = TypeName[Blank Object]
133
CreateTempObject(TypeName[Explosion], 0, Object[-9].XPos, Object[-9].YPos)
134
CreateTempObject(TypeName[Explosion], 0, Object[-7].XPos, Object[-7].YPos)
135
CreateTempObject(TypeName[Explosion], 0, Object[-5].XPos, Object[-5].YPos)
136
CreateTempObject(TypeName[Explosion], 0, Object[-3].XPos, Object[-3].YPos)
137
CreateTempObject(TypeName[Explosion], 0, Object[-1].XPos, Object[-1].YPos)
138
CreateTempObject(TypeName[Explosion], 0, Object[+1].XPos, Object[+1].YPos)
139
break
140
141
case BUTTONPRIZE_RINGS_2
142
Object[-11].Type = TypeName[Blank Object]
143
Object[-9].Type = TypeName[Blank Object]
144
Object[-7].Type = TypeName[Blank Object]
145
Object[-5].Type = TypeName[Blank Object]
146
Object[-3].Type = TypeName[Blank Object]
147
Object[-1].Type = TypeName[Button Prize]
148
Object[-1].State = BUTTONPRIZE_CREATE_RINGS
149
CreateTempObject(TypeName[Explosion], 0, Object[-11].XPos, Object[-11].YPos)
150
CreateTempObject(TypeName[Explosion], 0, Object[-9].XPos, Object[-9].YPos)
151
CreateTempObject(TypeName[Explosion], 0, Object[-7].XPos, Object[-7].YPos)
152
CreateTempObject(TypeName[Explosion], 0, Object[-5].XPos, Object[-5].YPos)
153
CreateTempObject(TypeName[Explosion], 0, Object[-3].XPos, Object[-3].YPos)
154
CreateTempObject(TypeName[Explosion], 0, Object[-1].XPos, Object[-1].YPos)
155
break
156
157
end switch
158
Object.Type = TypeName[Blank Object]
159
end if
160
break
161
162
case BUTTONPRIZE_CREATE_BUBBLES
163
Object.Timer++
164
if Object.Timer == 60
165
CreateTempObject(TypeName[Air Bubble], BUBBLE_BREATHABLE, Object.XPos, Object.YPos)
166
AirBubble[TempObjectPos].XVelocity = AirBubble[TempObjectPos].XPos
167
Rand(AirBubble[TempObjectPos].Angle, 256)
168
AirBubble[TempObjectPos].Angle <<= 1
169
AirBubble[TempObjectPos].DrawOrder = 4
170
AirBubble[TempObjectPos].YVelocity = -0x8800
171
end if
172
if Object.Timer == 120
173
CreateTempObject(TypeName[Air Bubble], BUBBLE_BREATHABLE, Object.XPos, Object.YPos)
174
AirBubble[TempObjectPos].XVelocity = AirBubble[TempObjectPos].XPos
175
Rand(AirBubble[TempObjectPos].Angle, 256)
176
AirBubble[TempObjectPos].Angle <<= 1
177
AirBubble[TempObjectPos].DrawOrder = 4
178
AirBubble[TempObjectPos].YVelocity = -0x8800
179
Object.Type = TypeName[Blank Object]
180
end if
181
break
182
183
case BUTTONPRIZE_CREATE_RINGS
184
Object.Timer++
185
if Object.Timer == 360
186
Object.Type = TypeName[Blank Object]
187
Object.Priority = PRIORITY_BOUNDS
188
end if
189
190
TempValue0 = Object.Timer
191
TempValue0 &= 15
192
if TempValue0 == 0
193
CreateTempObject(TypeName[Lose Ring], 0, Object.XPos, Object.YPos)
194
Object[TempObjectPos].YPos -= 0xB80000
195
Object[TempObjectPos].AnimationSpeed = 256
196
197
TempValue1 = Object.Timer
198
TempValue1 >>= 4
199
TempValue1 %= 10
200
switch TempValue1
201
case 0
202
Object[TempObjectPos].XPos -= 0xA00000
203
break
204
205
case 1
206
case 9
207
Object[TempObjectPos].XPos -= 0x800000
208
break
209
210
case 2
211
case 8
212
Object[TempObjectPos].XPos -= 0x600000
213
break
214
215
case 3
216
case 7
217
Object[TempObjectPos].XPos -= 0x400000
218
break
219
220
case 4
221
case 6
222
Object[TempObjectPos].XPos -= 0x200000
223
break
224
225
case 5
226
break
227
228
end switch
229
end if
230
break
231
232
end switch
233
end sub
234
235
236
// ========================
237
// Editor Subs
238
// ========================
239
240
sub RSDKDraw
241
DrawSprite(0)
242
end sub
243
244
245
sub RSDKLoad
246
LoadSpriteSheet("Global/Display.gif")
247
SpriteFrame(-16, -16, 32, 32, 1, 143) // #0 - "Script" Icon
248
249
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
250
end sub
251
252