Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 2/Scripts/Credits/CreditsEggman.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Credits Eggman Object
4
// Script Author: Christian Whitehead/Simon Thomley
5
// Unpacked by Rubberduckycooly's script unpacker
6
// ----------------------------------
7
8
// ========================
9
// Aliases
10
// ========================
11
12
private alias object.value0 : object.timer
13
private alias object.value1 : object.duration
14
private alias object.value2 : object.frameTablePos
15
16
// Player Aliases
17
private alias 2 : PLAYER_KNUCKLES_A
18
19
20
// ========================
21
// Tables
22
// ========================
23
24
private table CreditsEggman_durationTable
25
7, 113, 7, 113
26
end table
27
28
private table CreditsEggman_frameTable
29
4, 5, 6, 5, 4, 5, 6, 5, 4, 5, 6, 5, 4, 5, 6, 5
30
end table
31
32
33
// ========================
34
// Events
35
// ========================
36
37
event ObjectUpdate
38
switch object.propertyValue
39
case 0 // Eggman Juggle
40
GetTableValue(object.duration, object.frame, CreditsEggman_durationTable)
41
object.timer++
42
if object.timer == object.duration
43
object.timer = 0
44
object.frame++
45
object.frame &= 3
46
end if
47
48
switch object.frame
49
case 1
50
if object.timer == 0
51
object[+1].angle = 0x20
52
object[+2].angle = 0x20
53
object[+3].angle = 0x20
54
object[+4].angle = 0x20
55
object[+5].angle = 0x20
56
object[+6].angle = 0x20
57
object[+7].angle = 0x20
58
else
59
arrayPos0 = 1
60
while arrayPos0 < 8
61
if object.timer > object[+arrayPos0].timer
62
object[+arrayPos0].angle += 4
63
if object[+arrayPos0].angle > 256
64
object[+arrayPos0].angle = 256
65
end if
66
end if
67
arrayPos0++
68
loop
69
end if
70
break
71
72
case 3
73
if object.timer == 0
74
object[+1].angle = 224
75
object[+2].angle = 224
76
object[+3].angle = 224
77
object[+4].angle = 224
78
object[+5].angle = 224
79
object[+6].angle = 224
80
object[+7].angle = 224
81
else
82
arrayPos0 = 1
83
while arrayPos0 < 8
84
if object.timer > object[+arrayPos0].timer
85
object[+arrayPos0].angle -= 4
86
if object[+arrayPos0].angle < 0
87
object[+arrayPos0].angle = 0
88
end if
89
end if
90
arrayPos0++
91
loop
92
end if
93
break
94
95
end switch
96
97
arrayPos0 = 1
98
while arrayPos0 < 8
99
Cos(object[+arrayPos0].xpos, object[+arrayPos0].angle)
100
object[+arrayPos0].xpos *= -0xE00
101
Sin(object[+arrayPos0].ypos, object[+arrayPos0].angle)
102
object[+arrayPos0].ypos *= -0xE00
103
object[+arrayPos0].ypos -= 0x80000
104
object[+arrayPos0].xpos += object.xpos
105
object[+arrayPos0].ypos += object.ypos
106
arrayPos0++
107
loop
108
break
109
110
case 1 // Eggman Tantrum
111
object.timer++
112
if object.timer == 8
113
object.timer = 0
114
115
GetTableValue(object.frame, object.frameTablePos, CreditsEggman_frameTable)
116
object.frameTablePos++
117
object.frameTablePos &= 15
118
119
if object.frame == 4
120
// If this is the frame where Eggman lands after a jump, then spawn some dust
121
122
temp1 = object.ypos
123
temp1 += 0x140000
124
temp0 = object.xpos
125
temp0 -= 0x150000
126
CreateTempObject(TypeName[Credits Eggman], 10, temp0, temp1)
127
object[tempObjectPos].xvel = -0x10000
128
object[tempObjectPos].frame = 16
129
130
temp0 = object.xpos
131
temp0 += 0x150000
132
CreateTempObject(TypeName[Credits Eggman], 10, temp0, temp1)
133
object[tempObjectPos].xvel = 0x10000
134
object[tempObjectPos].frame = 16
135
end if
136
end if
137
break
138
139
case 9 // Knux Stinger
140
if stage.playerListPos != PLAYER_KNUCKLES_A
141
if object.timer < 166
142
object.timer++
143
else
144
if object.alpha < 0x100
145
object.alpha += 2
146
end if
147
end if
148
end if
149
break
150
151
case 10 // Landing Dust
152
object.animationTimer++
153
if object.animationTimer >= 4
154
object.animationTimer = 0
155
object.frame++
156
if object.frame >= 20
157
object.type = TypeName[Blank Object]
158
end if
159
end if
160
161
object.xpos += object.xvel
162
object.ypos -= 0x10000
163
if object.xvel != 0
164
if object.xvel > 0
165
object.xvel -= 0x1000
166
else
167
object.xvel += 0x1000
168
end if
169
end if
170
break
171
172
end switch
173
end event
174
175
176
event ObjectDraw
177
DrawSprite(object.frame)
178
179
if object.propertyValue == 9
180
// If we're Knuckles, then draw his eyes with their fade-in effect too
181
// -> Note that object.inkEffect should be set from the scene, it isn't set within this object
182
DrawSpriteFX(21, FX_INK, object.xpos, object.ypos)
183
end if
184
end event
185
186
187
event ObjectStartup
188
LoadSpriteSheet("Ending/Credits.gif")
189
SpriteFrame(-29, -23, 60, 50, 1, 1) // Eggman Juggle - Frame 1 - #0
190
SpriteFrame(-29, -24, 58, 51, 62, 1) // Eggman Juggle - Frame 2 - #1
191
SpriteFrame(-31, -23, 60, 50, 121, 1) // Eggman Juggle - Frame 3 - #2
192
SpriteFrame(-29, -24, 58, 51, 182, 1) // Eggman Juggle - Frame 4 - #3
193
SpriteFrame(-29, -19, 58, 39, 52, 53) // Eggman Tantrum - Frame 1 - #4
194
SpriteFrame(-29, -46, 58, 62, 52, 93) // Eggman Tantrum - Frame 2 - #5
195
SpriteFrame(-29, -60, 58, 42, 52, 156) // Eggman Tantrum - Frame 3 - #6
196
SpriteFrame(-29, -19, 58, 39, 52, 53) // Eggman Tantrum - Frame 4 - #7
197
SpriteFrame(-8, -8, 16, 16, 1, 52) // Emerald 1 (Copy) - #8
198
SpriteFrame(-8, -8, 16, 16, 1, 52) // Emerald 1 - #9
199
SpriteFrame(-8, -8, 16, 16, 18, 52) // Emerald 2 - #10
200
SpriteFrame(-8, -8, 16, 16, 35, 52) // Emerald 3 - #11
201
SpriteFrame(-8, -8, 16, 16, 1, 69) // Emerald 4 - #12
202
SpriteFrame(-8, -8, 16, 16, 18, 69) // Emerald 5 - #13
203
SpriteFrame(-8, -8, 16, 16, 35, 69) // Emerald 6 - #14
204
SpriteFrame(-8, -8, 16, 16, 1, 86) // Emerald 7 - #15
205
SpriteFrame(-4, -4, 8, 7, 18, 86) // Dust Puff - Frame 1 - #16
206
SpriteFrame(-4, -4, 8, 7, 27, 86) // Dust Puff - Frame 2 - #17
207
SpriteFrame(-4, -4, 8, 7, 36, 86) // Dust Puff - Frame 3 - #18
208
SpriteFrame(-3, -3, 6, 6, 45, 86) // Dust Puff - Frame 4 - #19
209
SpriteFrame(-85, -22, 170, 44, 52, 211) // Knux Shrubs - #20
210
SpriteFrame(38, -5, 12, 7, 128, 203) // Knux Eyes - #21
211
212
foreach (TypeName[Credits Eggman], arrayPos0, ALL_ENTITIES)
213
object[arrayPos0].priority = PRIORITY_BOUNDS_SMALL
214
switch object[arrayPos0].propertyValue
215
case 0 // Eggman Juggle
216
arrayPos1 = arrayPos0
217
arrayPos1 += 7
218
temp0 = 0
219
temp2 = 0
220
while temp0 < 7
221
GetBit(temp1, specialStage.emeralds, temp0)
222
if temp1 == false
223
object[arrayPos1].propertyValue = temp0
224
object[arrayPos1].propertyValue += 2
225
object[arrayPos1].timer = temp2
226
object[arrayPos1].timer *= 9
227
arrayPos1--
228
temp2++
229
end if
230
temp0++
231
loop
232
233
while arrayPos1 > arrayPos0
234
object[arrayPos1].type = TypeName[Blank Object]
235
arrayPos1--
236
loop
237
break
238
239
case 1 // Eggman Tantrum
240
object[arrayPos0].frame = 4
241
break
242
243
case 2 // Emerald 1
244
case 3 // Emerald 2
245
case 4 // Emerald 3
246
case 5 // Emerald 4
247
case 6 // Emerald 5
248
case 7 // Emerald 6
249
case 8 // Emerald 7
250
object[arrayPos0].frame = object[arrayPos0].propertyValue
251
object[arrayPos0].frame += 7
252
break
253
end switch
254
next
255
end event
256
257
258
// ========================
259
// Editor Events
260
// ========================
261
262
event RSDKEdit
263
if editor.returnVariable == true
264
switch editor.variableID
265
case EDIT_VAR_PROPVAL // property value
266
checkResult = object.propertyValue
267
break
268
269
case 0 // type
270
checkResult = object.propertyValue
271
break
272
273
end switch
274
else
275
switch editor.variableID
276
case EDIT_VAR_PROPVAL // property value
277
object.propertyValue = editor.variableValue
278
break
279
280
case 0 // type
281
object.propertyValue = editor.variableValue
282
283
if editor.variableValue == 9
284
// Knuckles uses object.frame and object.inkEffect
285
object.frame = 20
286
object.inkEffect = INK_ADD
287
else
288
object.frame = 0
289
object.inkEffect = INK_NONE
290
end if
291
break
292
293
end switch
294
end if
295
end event
296
297
298
event RSDKDraw
299
switch object.propertyValue
300
case 0 // Eggman Juggle
301
object.frame = 0
302
break
303
304
case 1 // Eggman Tantrum
305
object.frame = 4
306
break
307
308
case 2 // Emerald 1
309
case 3 // Emerald 2
310
case 4 // Emerald 3
311
case 5 // Emerald 4
312
case 6 // Emerald 5
313
case 7 // Emerald 6
314
case 8 // Emerald 7
315
object.frame = object.propertyValue
316
object.frame += 7
317
break
318
319
// Knuckles's frame should be set via object.frame attr
320
321
end switch
322
323
DrawSprite(object.frame)
324
325
if object.propertyValue == 9
326
DrawSprite(21)
327
end if
328
end event
329
330
331
event RSDKLoad
332
LoadSpriteSheet("Ending/Credits.gif")
333
SpriteFrame(-29, -23, 60, 50, 1, 1) // Eggman Juggle - Frame 1 - #0
334
SpriteFrame(-29, -24, 58, 51, 62, 1) // Eggman Juggle - Frame 2 - #1
335
SpriteFrame(-31, -23, 60, 50, 121, 1) // Eggman Juggle - Frame 3 - #2
336
SpriteFrame(-29, -24, 58, 51, 182, 1) // Eggman Juggle - Frame 4 - #3
337
SpriteFrame(-29, -19, 58, 39, 52, 53) // Eggman Tantrum - Frame 1 - #4
338
SpriteFrame(-29, -46, 58, 62, 52, 93) // Eggman Tantrum - Frame 2 - #5
339
SpriteFrame(-29, -60, 58, 42, 52, 156) // Eggman Tantrum - Frame 3 - #6
340
SpriteFrame(-29, -19, 58, 39, 52, 53) // Eggman Tantrum - Frame 4 - #7
341
SpriteFrame(-8, -8, 16, 16, 1, 52) // Emerald 1 (Copy) - #8
342
SpriteFrame(-8, -8, 16, 16, 1, 52) // Emerald 1 - #9
343
SpriteFrame(-8, -8, 16, 16, 18, 52) // Emerald 2 - #10
344
SpriteFrame(-8, -8, 16, 16, 35, 52) // Emerald 3 - #11
345
SpriteFrame(-8, -8, 16, 16, 1, 69) // Emerald 4 - #12
346
SpriteFrame(-8, -8, 16, 16, 18, 69) // Emerald 5 - #13
347
SpriteFrame(-8, -8, 16, 16, 35, 69) // Emerald 6 - #14
348
SpriteFrame(-8, -8, 16, 16, 1, 86) // Emerald 7 - #15
349
SpriteFrame(-4, -4, 8, 7, 18, 86) // Dust Puff - Frame 1 - #16
350
SpriteFrame(-4, -4, 8, 7, 27, 86) // Dust Puff - Frame 2 - #17
351
SpriteFrame(-4, -4, 8, 7, 36, 86) // Dust Puff - Frame 3 - #18
352
SpriteFrame(-3, -3, 6, 6, 45, 86) // Dust Puff - Frame 4 - #19
353
SpriteFrame(-85, -22, 170, 44, 52, 211) // Knux Shrubs - #20
354
SpriteFrame(38, -5, 12, 7, 128, 203) // Knux Eyes - #21
355
356
AddEditorVariable("type")
357
SetActiveVariable("type")
358
AddEnumVariable("Eggman (Juggling)", 0)
359
AddEnumVariable("Eggman (Tantrum)", 1)
360
AddEnumVariable("Chaos Emerald 1", 2)
361
AddEnumVariable("Chaos Emerald 2", 3)
362
AddEnumVariable("Chaos Emerald 3", 4)
363
AddEnumVariable("Chaos Emerald 4", 5)
364
AddEnumVariable("Chaos Emerald 5", 6)
365
AddEnumVariable("Chaos Emerald 6", 7)
366
AddEnumVariable("Chaos Emerald 7", 8)
367
AddEnumVariable("Knux Teaser", 9)
368
// 10 is skipped over on purpose, it's not to be set from the editor
369
370
// frame should be set from editor as well
371
end event
372
373