Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 1/Scripts/SBZ/ElectricOrb.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Electric Orb 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.value1 : object.interval
13
14
// Player Aliases
15
private alias object.value17 : debugMode.currentSelection
16
17
18
// ========================
19
// Function Declarations
20
// ========================
21
22
reserve function ElectricOrb_DebugDraw
23
reserve function ElectricOrb_DebugSpawn
24
25
26
// ========================
27
// Static Values
28
// ========================
29
30
private value ElectricOrb_startDebugID = 0
31
32
33
// ========================
34
// Function Definitions
35
// ========================
36
37
private function ElectricOrb_DebugDraw
38
temp0 = object.direction
39
object.direction = debugMode.currentSelection
40
object.direction -= ElectricOrb_startDebugID
41
object.direction--
42
object.direction <<= 1
43
DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
44
object.direction = temp0
45
end function
46
47
48
private function ElectricOrb_DebugSpawn
49
temp0 = debugMode.currentSelection
50
temp0 -= ElectricOrb_startDebugID
51
temp0--
52
temp0 <<= 1
53
CreateTempObject(TypeName[Electric Orb], 0, object.xpos, object.ypos)
54
object[tempObjectPos].direction = temp0
55
object[tempObjectPos].drawOrder = 4
56
end function
57
58
59
// ========================
60
// Events
61
// ========================
62
63
event ObjectUpdate
64
switch object.interval
65
default
66
// every 24 frames
67
temp0 = SBZSetup_electricOrbFrame
68
break
69
70
case 2
71
// every 12 frames
72
temp0 = SBZSetup_electricOrbFrame
73
temp0 %= 12
74
break
75
76
case 4
77
// every 6 frames
78
temp0 = SBZSetup_electricOrbFrame
79
temp0 %= 6
80
break
81
82
end switch
83
84
// temp0 = timer
85
switch temp0
86
case 0
87
if SBZSetup_electricOrbTimer == 1
88
temp0 = object.ixpos
89
temp0 -= camera[0].xpos
90
Abs(temp0)
91
if temp0 < screen.xcenter
92
temp0 = object.iypos
93
temp0 -= camera[0].ypos
94
Abs(temp0)
95
if temp0 < screen.ycenter
96
PlaySfx(SfxName[Electric Arc], false)
97
end if
98
end if
99
end if
100
break
101
102
case 1
103
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
104
BoxCollisionTest(C_TOUCH, object.entityPos, -8, -8, 8, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
105
if checkResult == true
106
CallFunction(Player_LightningHit)
107
end if
108
next
109
break
110
111
case 2
112
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
113
BoxCollisionTest(C_TOUCH, object.entityPos, -36, -8, 36, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
114
if checkResult == true
115
CallFunction(Player_LightningHit)
116
end if
117
next
118
break
119
120
case 3
121
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
122
BoxCollisionTest(C_TOUCH, object.entityPos, -36, -8, 36, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
123
if checkResult == true
124
CallFunction(Player_LightningHit)
125
end if
126
next
127
break
128
129
case 4
130
case 5
131
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
132
BoxCollisionTest(C_TOUCH, object.entityPos, -64, -8, 64, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
133
if checkResult == true
134
CallFunction(Player_LightningHit)
135
end if
136
next
137
break
138
139
end switch
140
end event
141
142
143
event ObjectDraw
144
switch object.interval
145
default
146
DrawSpriteFX(SBZSetup_electricOrbFrame, FX_FLIP, object.xpos, object.ypos)
147
break
148
149
case 2
150
temp0 = SBZSetup_electricOrbFrame
151
temp0 %= 12
152
DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)
153
break
154
155
case 4
156
temp0 = SBZSetup_electricOrbFrame
157
temp0 %= 6
158
DrawSpriteFX(temp0, FX_FLIP, object.xpos, object.ypos)
159
break
160
161
end switch
162
end event
163
164
165
event ObjectStartup
166
LoadSpriteSheet("SBZ/Objects.gif")
167
168
// Orb frames
169
SpriteFrame(-8, -8, 16, 32, 58, 479)
170
SpriteFrame(-8, -8, 16, 32, 75, 479)
171
SpriteFrame(-36, -10, 76, 34, 92, 477)
172
SpriteFrame(-36, -10, 76, 34, 169, 477)
173
SpriteFrame(-64, -10, 132, 34, 246, 477)
174
SpriteFrame(-64, -10, 132, 34, 379, 477)
175
SpriteFrame(-8, -8, 16, 32, 58, 479)
176
SpriteFrame(-8, -8, 16, 32, 58, 479)
177
SpriteFrame(-8, -8, 16, 32, 58, 479)
178
SpriteFrame(-8, -8, 16, 32, 58, 479)
179
SpriteFrame(-8, -8, 16, 32, 58, 479)
180
SpriteFrame(-8, -8, 16, 32, 58, 479)
181
SpriteFrame(-8, -8, 16, 32, 58, 479)
182
SpriteFrame(-8, -8, 16, 32, 58, 479)
183
SpriteFrame(-8, -8, 16, 32, 58, 479)
184
SpriteFrame(-8, -8, 16, 32, 58, 479)
185
SpriteFrame(-8, -8, 16, 32, 58, 479)
186
SpriteFrame(-8, -8, 16, 32, 58, 479)
187
SpriteFrame(-8, -8, 16, 32, 58, 479)
188
SpriteFrame(-8, -8, 16, 32, 58, 479)
189
SpriteFrame(-8, -8, 16, 32, 58, 479)
190
SpriteFrame(-8, -8, 16, 32, 58, 479)
191
SpriteFrame(-8, -8, 16, 32, 58, 479)
192
SpriteFrame(-8, -8, 16, 32, 58, 479)
193
194
foreach (TypeName[Electric Orb], arrayPos0, ALL_ENTITIES)
195
object[arrayPos0].interval = object[arrayPos0].propertyValue
196
object[arrayPos0].interval >>= 1
197
object[arrayPos0].interval &= 3
198
object[arrayPos0].interval <<= 1
199
object[arrayPos0].propertyValue &= 1
200
if object[arrayPos0].propertyValue == 1
201
object[arrayPos0].direction = FLIP_Y
202
else
203
object[arrayPos0].direction = FLIP_NONE
204
end if
205
object[arrayPos0].drawOrder = 4
206
next
207
208
temp0 = 0
209
ElectricOrb_startDebugID = DebugMode_ObjCount
210
ElectricOrb_startDebugID--
211
while temp0 < 2
212
SetTableValue(TypeName[Electric Orb], DebugMode_ObjCount, DebugMode_TypesTable)
213
SetTableValue(ElectricOrb_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
214
SetTableValue(ElectricOrb_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
215
DebugMode_ObjCount++
216
temp0++
217
loop
218
end event
219
220
221
// ========================
222
// Editor Events
223
// ========================
224
225
event RSDKEdit
226
if editor.returnVariable == true
227
switch editor.variableID
228
case EDIT_VAR_PROPVAL // property value
229
checkResult = object.propertyValue
230
break
231
232
case 0 // direction
233
checkResult = object.propertyValue
234
checkResult &= 1
235
break
236
237
case 1 // interval
238
checkResult = object.propertyValue
239
checkResult >>= 1
240
checkResult &= 3
241
break
242
243
end switch
244
else
245
switch editor.variableID
246
case EDIT_VAR_PROPVAL // property value
247
object.propertyValue = editor.variableValue
248
break
249
250
case 0 // direction
251
temp0 = editor.variableValue
252
temp0 &= 1
253
254
object.propertyValue &= 0xFE
255
object.propertyValue |= temp0
256
break
257
258
case 1 // interval
259
temp0 = editor.variableValue
260
temp0 &= 3
261
262
object.propertyValue &= 0xF1
263
object.propertyValue |= temp0
264
break
265
266
end switch
267
end if
268
end event
269
270
271
event RSDKDraw
272
GetBit(object.direction, object.propertyValue, 0)
273
object.direction <<= 1
274
DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
275
end event
276
277
278
event RSDKLoad
279
LoadSpriteSheet("SBZ/Objects.gif")
280
SpriteFrame(-8, -8, 16, 32, 58, 479)
281
282
AddEditorVariable("direction")
283
SetActiveVariable("direction")
284
AddEnumVariable("Up", 0)
285
AddEnumVariable("Down", 1)
286
287
AddEditorVariable("interval")
288
SetActiveVariable("interval")
289
AddEnumVariable("Every 24 Frames", 0)
290
AddEnumVariable("Every 12 Frames", 1)
291
AddEnumVariable("Every 6 Frames", 2)
292
end event
293
294