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/Global/Invincibility.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Invincibility 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.state : object.isSetup
13
14
private alias object.value0 : object.starPos0.x
15
private alias object.value1 : object.starPos1.x
16
private alias object.value2 : object.starPos2.x
17
private alias object.value3 : object.starPos3.x
18
private alias object.value4 : object.starPos4.x
19
private alias object.value5 : object.starPos5.x
20
private alias object.value6 : object.starPos6.x
21
private alias object.value7 : object.starPos7.x
22
23
private alias object.value8 : object.starPos0.y
24
private alias object.value9 : object.starPos1.y
25
private alias object.value10 : object.starPos2.y
26
private alias object.value11 : object.starPos3.y
27
private alias object.value12 : object.starPos4.y
28
private alias object.value13 : object.starPos5.y
29
private alias object.value14 : object.starPos6.y
30
private alias object.value15 : object.starPos7.y
31
32
private alias object.value16 : object.starAngle0
33
private alias object.value17 : object.starAngle1
34
35
// value18 is unused
36
37
private alias object.value19 : object.starFrame0
38
private alias object.value20 : object.starFrame1
39
40
// Player Aliases
41
private alias object.xpos : player.xpos
42
private alias object.ypos : player.ypos
43
private alias object.direction : player.direction
44
45
private alias object.value7 : player.invincibleTimer
46
47
private alias -1 : DRAWORDER_PLAYER
48
49
50
// ========================
51
// Tables
52
// ========================
53
54
private table Invincibility_frameTable4
55
7, 4, 6, 4, 4, 6, 4, 7, 4, 6, 6, 4
56
end table
57
58
private table Invincibility_frameTable3
59
2, 3, 4, 5, 6, 7, 6, 5, 4, 3
60
2, 3, 4, 5, 6, 7, 6, 5, 4, 3
61
end table
62
63
private table Invincibility_frameTable2
64
1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2
65
1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2
66
end table
67
68
private table Invincibility_frameTable1
69
0, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1
70
0, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1
71
end table
72
73
74
// ========================
75
// Events
76
// ========================
77
78
event ObjectUpdate
79
if object.isSetup == false
80
object.starPos7.x = player[-playerCount].xpos
81
object.starPos6.x = player[-playerCount].xpos
82
object.starPos5.x = player[-playerCount].xpos
83
object.starPos4.x = player[-playerCount].xpos
84
object.starPos3.x = player[-playerCount].xpos
85
object.starPos2.x = player[-playerCount].xpos
86
object.starPos1.x = player[-playerCount].xpos
87
88
object.starPos0.x = player[-playerCount].xpos
89
object.starPos7.y = player[-playerCount].ypos
90
object.starPos6.y = player[-playerCount].ypos
91
object.starPos5.y = player[-playerCount].ypos
92
object.starPos4.y = player[-playerCount].ypos
93
object.starPos3.y = player[-playerCount].ypos
94
object.starPos2.y = player[-playerCount].ypos
95
object.starPos1.y = player[-playerCount].ypos
96
object.starPos0.y = player[-playerCount].ypos
97
98
object.starAngle0 = 180
99
object.starAngle1 = 0
100
object.isSetup = true
101
object.inkEffect = INK_ALPHA
102
object.alpha = 255
103
object.drawOrder = DRAWORDER_PLAYER
104
end if
105
106
object.starFrame0++
107
object.starFrame0 %= 12
108
object.starFrame1++
109
object.starFrame1 %= 10
110
111
object.starPos7.x = object.starPos6.x
112
object.starPos6.x = object.starPos5.x
113
object.starPos5.x = object.starPos4.x
114
object.starPos4.x = object.starPos3.x
115
object.starPos3.x = object.starPos2.x
116
object.starPos2.x = object.starPos1.x
117
object.starPos1.x = object.starPos0.x
118
object.starPos0.x = player[-playerCount].xpos
119
120
object.starPos7.y = object.starPos6.y
121
object.starPos6.y = object.starPos5.y
122
object.starPos5.y = object.starPos4.y
123
object.starPos4.y = object.starPos3.y
124
object.starPos3.y = object.starPos2.y
125
object.starPos2.y = object.starPos1.y
126
object.starPos1.y = object.starPos0.y
127
object.starPos0.y = player[-playerCount].ypos
128
129
// Make the sparkles fly in the Player's direction
130
if player[-playerCount].direction == FACING_RIGHT
131
object.starAngle0 += 144
132
object.starAngle0 &= 0x1FF
133
object.starAngle1 += 16
134
object.starAngle1 &= 0x1FF
135
else
136
object.starAngle0 -= 144
137
object.starAngle0 &= 0x1FF
138
object.starAngle1 -= 16
139
object.starAngle1 &= 0x1FF
140
end if
141
142
if player[-playerCount].invincibleTimer < 32
143
object.alpha = player[-playerCount].invincibleTimer
144
object.alpha <<= 3
145
end if
146
end event
147
148
149
event ObjectDraw
150
temp2 = object.starAngle1
151
temp2 += 116
152
Cos(temp0, temp2)
153
Sin(temp1, temp2)
154
temp0 <<= 11
155
temp1 <<= 11
156
temp0 += object.starPos7.x
157
temp1 += object.starPos7.y
158
GetTableValue(object.frame, object.starFrame0, Invincibility_frameTable1)
159
DrawSpriteFX(object.frame, FX_INK, temp0, temp1)
160
161
temp2 = object.starAngle1
162
temp2 += 372
163
Cos(temp0, temp2)
164
Sin(temp1, temp2)
165
temp0 <<= 11
166
temp1 <<= 11
167
temp0 += object.starPos7.x
168
temp1 += object.starPos7.y
169
temp2 = object.starFrame0
170
temp2 += 6
171
GetTableValue(object.frame, temp2, Invincibility_frameTable1)
172
DrawSpriteFX(object.frame, FX_INK, temp0, temp1)
173
174
Cos(temp0, object.starAngle1)
175
Sin(temp1, object.starAngle1)
176
temp0 <<= 11
177
temp1 <<= 11
178
temp0 += object.starPos5.x
179
temp1 += object.starPos5.y
180
GetTableValue(object.frame, object.starFrame0, Invincibility_frameTable2)
181
DrawSpriteFX(object.frame, FX_INK, temp0, temp1)
182
183
temp2 = object.starAngle1
184
temp2 += 256
185
Cos(temp0, temp2)
186
Sin(temp1, temp2)
187
temp0 <<= 11
188
temp1 <<= 11
189
temp0 += object.starPos5.x
190
temp1 += object.starPos5.y
191
temp2 = object.starFrame0
192
temp2 += 6
193
GetTableValue(object.frame, temp2, Invincibility_frameTable2)
194
DrawSpriteFX(object.frame, FX_INK, temp0, temp1)
195
196
temp2 = object.starAngle1
197
temp2 += 168
198
Cos(temp0, temp2)
199
Sin(temp1, temp2)
200
temp0 <<= 11
201
temp1 <<= 11
202
temp0 += object.starPos3.x
203
temp1 += object.starPos3.y
204
GetTableValue(object.frame, object.starFrame1, Invincibility_frameTable3)
205
DrawSpriteFX(object.frame, FX_INK, temp0, temp1)
206
207
temp2 = object.starAngle1
208
temp2 += 424
209
Cos(temp0, temp2)
210
Sin(temp1, temp2)
211
temp0 <<= 11
212
temp1 <<= 11
213
temp0 += object.starPos3.x
214
temp1 += object.starPos3.y
215
temp2 = object.starFrame1
216
temp2 += 5
217
GetTableValue(object.frame, temp2, Invincibility_frameTable3)
218
DrawSpriteFX(object.frame, FX_INK, temp0, temp1)
219
220
Cos(temp0, object.starAngle0)
221
Sin(temp1, object.starAngle0)
222
temp0 <<= 11
223
temp1 <<= 11
224
temp0 += player[-playerCount].xpos
225
temp1 += player[-playerCount].ypos
226
GetTableValue(object.frame, object.starFrame0, Invincibility_frameTable4)
227
DrawSpriteFX(object.frame, FX_INK, temp0, temp1)
228
229
temp2 = object.starAngle0
230
temp2 += 256
231
Cos(temp0, temp2)
232
Sin(temp1, temp2)
233
temp0 <<= 11
234
temp1 <<= 11
235
temp0 += player[-playerCount].xpos
236
temp1 += player[-playerCount].ypos
237
DrawSpriteFX(object.frame, FX_INK, temp0, temp1)
238
end event
239
240
241
event ObjectStartup
242
LoadSpriteSheet("Global/Items.gif")
243
244
SpriteFrame(0, 0, 1, 1, 232, 42)
245
SpriteFrame(0, 0, 1, 1, 233, 42)
246
SpriteFrame(-1, -1, 3, 3, 232, 41)
247
SpriteFrame(-2, -2, 5, 5, 232, 35)
248
SpriteFrame(-3, -3, 7, 7, 232, 27)
249
SpriteFrame(-4, -4, 9, 9, 232, 17)
250
SpriteFrame(-7, -7, 15, 15, 232, 1)
251
SpriteFrame(-15, -15, 31, 31, 200, 1)
252
end event
253
254
255
// ========================
256
// Editor Events
257
// ========================
258
259
event RSDKDraw
260
DrawSprite(0)
261
end event
262
263
264
event RSDKLoad
265
LoadSpriteSheet("Global/Items.gif")
266
SpriteFrame(0, 0, 1, 1, 232, 42)
267
268
// It's set by the player object upon death, but it never seems to get used otherwise
269
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
270
end event
271
272