Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/DAGarden/MetalSonic.txt
1319 views
1
//--------------Sonic CD Metal Sonic 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.YOffSet
8
#alias Object.Value2 : Object.Wobble
9
#alias Object.Value3 : Object.XOffSet
10
#alias Object.Value4 : Object.Speed
11
12
// States
13
#alias 0 : METALSONIC_SETUP
14
#alias 1 : METALSONIC_GOTO_CENTER
15
#alias 2 : METALSONIC_SET_DIRECTION
16
#alias 3 : METALSONIC_START_CHARGE
17
#alias 4 : METALSONIC_LEAVE
18
19
20
sub ObjectMain
21
switch Object.State
22
case METALSONIC_SETUP
23
Object.XOffSet = Screen.CenterX
24
Object.XOffSet <<= 16
25
if Object.XPos < Object.XOffSet
26
Object.Direction = FACING_RIGHT
27
else
28
Object.Direction = FACING_LEFT
29
end if
30
Object.State++
31
break
32
33
case METALSONIC_GOTO_CENTER
34
TempValue0 = Object.XOffSet
35
TempValue0 -= Object.XPos
36
TempValue0 >>= 5
37
38
TempValue1 = 0x780000
39
TempValue1 -= Object.YPos
40
TempValue1 >>= 5
41
42
Object.XPos += TempValue0
43
Object.YPos += TempValue1
44
45
Object.Timer++
46
if Object.Timer == 120
47
Object.Timer = 0
48
Object.YOffSet = Object.YPos
49
Object.State++
50
end if
51
Object.AnimationTimer++
52
Object.AnimationTimer &= 7
53
break
54
55
case METALSONIC_SET_DIRECTION
56
Object.Wobble += 8
57
Object.Wobble &= 511
58
Sin(Object.YPos, Object.Wobble)
59
Object.YPos <<= 9
60
Object.YPos += Object.YOffSet
61
62
Object.Timer++
63
if Object.Timer == 100
64
Object.Timer = 0
65
Object.YOffSet = Object.YPos
66
67
Object.Direction++
68
Object.Direction &= FACING_LEFT
69
Object.State++
70
end if
71
Object.AnimationTimer++
72
Object.AnimationTimer &= 7
73
break
74
75
case METALSONIC_START_CHARGE
76
Object.Wobble += 64
77
Object.Wobble &= 511
78
Sin(Object.YPos, Object.Wobble)
79
Object.YPos <<= 7
80
Object.YPos += Object.YOffSet
81
82
if Object.Direction == FACING_LEFT
83
Object.XPos += 0x8000
84
else
85
Object.XPos -= 0x8000
86
end if
87
88
Object.Timer++
89
if Object.Timer == 90
90
Object.Timer = 0
91
Object.Speed = 0x10000
92
Object.State++
93
end if
94
95
Object.AnimationTimer++
96
Object.AnimationTimer &= 7
97
break
98
99
case METALSONIC_LEAVE
100
if Object.Direction == FACING_RIGHT
101
Object.XPos += Object.Speed
102
else
103
Object.XPos -= Object.Speed
104
end if
105
Object.Speed += 0x3000
106
107
Object.AnimationTimer += 2
108
Object.AnimationTimer %= 5
109
break
110
111
end switch
112
113
if Object.OutOfBounds == true
114
Object.Type = TypeName[Blank Object]
115
end if
116
end sub
117
118
119
sub ObjectDraw
120
// Jet Flame
121
TempValue0 = Object.AnimationTimer
122
TempValue0 >>= 1
123
TempValue0++
124
DrawSpriteFX(TempValue0, FX_FLIP, Object.XPos, Object.YPos)
125
126
// Metal
127
DrawSpriteFX(0, FX_FLIP, Object.XPos, Object.YPos)
128
end sub
129
130
131
sub ObjectStartup
132
LoadSpriteSheet("DAGarden/Objects.gif")
133
134
// 0 - Metal Sonic
135
SpriteFrame(-16, -24, 32, 48, 429, 804)
136
137
// 1-4 - Jet Flame Animation Frames
138
SpriteFrame(-24, -12, 24, 24, 462, 804)
139
SpriteFrame(-24, -12, 24, 24, 487, 804)
140
SpriteFrame(-24, -12, 0, 0, 462, 804)
141
SpriteFrame(-24, -12, 0, 0, 487, 804)
142
end sub
143
144
145
// ========================
146
// Editor Subs
147
// ========================
148
149
sub RSDKDraw
150
DrawSprite(0)
151
end sub
152
153
154
sub RSDKLoad
155
LoadSpriteSheet("DAGarden/Objects.gif")
156
SpriteFrame(-16, -24, 32, 48, 429, 804) // #0 - Metal Sonic
157
158
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
159
end sub
160
161