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/Enemies/Aquis.txt
1487 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Aquis 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.startPos.x
14
private alias object.value2 : object.startPos.y
15
private alias object.value3 : object.turnCount
16
private alias object.value4 : object.wingFrame
17
private alias object.value5 : object.wingAnimTimer
18
private alias object.value6 : object.playerInRange
19
20
private alias 0 : AQUIS_SETUP
21
private alias 1 : AQUIS_MOVING
22
private alias 2 : AQUIS_SHOOT
23
private alias 3 : AQUIS_FLEE
24
25
// Player Aliases
26
private alias object.xpos : player.xpos
27
private alias object.ypos : player.ypos
28
private alias object.controlMode : player.controlMode
29
30
private alias object.value40 : player.hitboxLeft
31
private alias object.value38 : player.hitboxTop
32
private alias object.value41 : player.hitboxRight
33
private alias object.value39 : player.hitboxBottom
34
35
36
// ========================
37
// Function Declarations
38
// ========================
39
40
reserve function Aquis_DebugDraw
41
reserve function Aquis_DebugSpawn
42
43
44
// ========================
45
// Function Definitions
46
// ========================
47
48
private function Aquis_DebugDraw
49
DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
50
end function
51
52
53
private function Aquis_DebugSpawn
54
CreateTempObject(TypeName[Aquis], 0, object.xpos, object.ypos)
55
object[tempObjectPos].direction = object.direction
56
end function
57
58
59
// ========================
60
// Events
61
// ========================
62
63
event ObjectUpdate
64
switch object.state
65
case AQUIS_SETUP
66
if object.priority != PRIORITY_XBOUNDS_DESTROY
67
object.priority = PRIORITY_ACTIVE
68
end if
69
70
if player[0].controlMode > CONTROLMODE_NONE // ???
71
object.timer = -16
72
object.state = AQUIS_SHOOT
73
end if
74
break
75
76
case AQUIS_MOVING
77
temp1 = 0x7FFFFFFF
78
temp2 = 0
79
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
80
temp0 = object.xpos
81
temp0 -= player[currentPlayer].xpos
82
Abs(temp0)
83
if temp0 < temp1
84
temp1 = temp0
85
temp2 = currentPlayer
86
end if
87
next
88
currentPlayer = temp2
89
90
if object.xpos > player[currentPlayer].xpos
91
object.direction = FLIP_NONE
92
93
object.xvel -= 0x1000
94
if object.xvel < -0x10000
95
object.xvel = -0x10000
96
end if
97
else
98
object.direction = FLIP_X
99
100
object.xvel += 0x1000
101
if object.xvel > 0x10000
102
object.xvel = 0x10000
103
end if
104
end if
105
106
if object.ypos > player[currentPlayer].ypos
107
object.yvel -= 0x1000
108
if object.yvel < -0x10000
109
object.yvel = -0x10000
110
end if
111
else
112
object.yvel += 0x1000
113
if object.yvel > 0x10000
114
object.yvel = 0x10000
115
end if
116
end if
117
118
object.xpos += object.xvel
119
object.ypos += object.yvel
120
121
if object.playerInRange == false
122
temp0 = player[currentPlayer].xpos
123
temp0 -= object.xpos
124
if object.direction == FLIP_NONE
125
if temp0 > -0x400000
126
if temp0 <= 0
127
CreateTempObject(TypeName[Aquis Shot], 0, object.xpos, object.ypos)
128
object[tempObjectPos].xpos -= 0x100000
129
object[tempObjectPos].ypos -= 0xA0000
130
object[tempObjectPos].xvel = -0x30000
131
object[tempObjectPos].yvel = 0x20000
132
object.playerInRange = true
133
end if
134
end if
135
else
136
if temp0 < 0x400000
137
if temp0 >= 0
138
CreateTempObject(TypeName[Aquis Shot], 0, object.xpos, object.ypos)
139
object[tempObjectPos].xpos += 0x100000
140
object[tempObjectPos].ypos -= 0xA0000
141
object[tempObjectPos].xvel = 0x30000
142
object[tempObjectPos].yvel = 0x20000
143
object.playerInRange = true
144
end if
145
end if
146
end if
147
end if
148
149
object.timer++
150
if object.timer == 128
151
object.timer = 0
152
object.xvel = 0
153
object.yvel = 0
154
object.state = AQUIS_SHOOT
155
end if
156
break
157
158
case AQUIS_SHOOT
159
object.timer++
160
if object.timer == 32
161
object.timer = 0
162
object.playerInRange = false
163
object.turnCount++
164
if object.turnCount == 4
165
object.xvel = -0x20000
166
object.yvel = 0
167
object.state = AQUIS_FLEE
168
else
169
object.state = AQUIS_MOVING
170
end if
171
end if
172
break
173
174
case AQUIS_FLEE
175
object.xpos += object.xvel
176
object.ypos += object.yvel
177
break
178
179
end switch
180
181
object.wingFrame = object.wingAnimTimer
182
object.wingFrame >>= 2
183
object.wingFrame += 3
184
object.wingAnimTimer++
185
object.wingAnimTimer &= 7
186
187
if object.outOfBounds == true
188
temp0 = object.xpos
189
temp1 = object.ypos
190
object.xpos = object.startPos.x
191
object.ypos = object.startPos.y
192
if object.outOfBounds == true
193
if object.priority != PRIORITY_XBOUNDS_DESTROY
194
object.priority = PRIORITY_BOUNDS
195
object.turnCount = 0
196
object.timer = 0
197
object.animationTimer = 0
198
object.xvel = 0
199
object.yvel = 0
200
object.state = AQUIS_SETUP
201
end if
202
else
203
object.xpos = temp0
204
object.ypos = temp1
205
end if
206
end if
207
208
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
209
BoxCollisionTest(C_TOUCH, object.entityPos, -16, -12, 16, 12, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)
210
if checkResult == true
211
CallFunction(Player_BadnikBreak)
212
end if
213
next
214
end event
215
216
217
event ObjectDraw
218
DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)
219
DrawSpriteFX(object.wingFrame, FX_FLIP, object.xpos, object.ypos)
220
end event
221
222
223
event ObjectStartup
224
CheckCurrentStageFolder("Zone07")
225
if checkResult == true
226
LoadSpriteSheet("OOZ/Objects.gif")
227
SpriteFrame(-15, -24, 29, 47, 1, 1)
228
SpriteFrame(-16, -23, 30, 46, 31, 1)
229
SpriteFrame(-15, -23, 29, 46, 62, 1)
230
SpriteFrame(3, -13, 11, 13, 108, 18)
231
SpriteFrame(3, -9, 13, 12, 108, 32)
232
else
233
LoadSpriteSheet("MBZ/Objects.gif")
234
SpriteFrame(-15, -24, 29, 47, 929, 331)
235
SpriteFrame(-16, -23, 30, 46, 928, 379)
236
SpriteFrame(-15, -23, 29, 46, 929, 426)
237
SpriteFrame(3, -13, 11, 13, 917, 331)
238
SpriteFrame(3, -9, 13, 12, 915, 345)
239
end if
240
241
foreach (TypeName[Aquis], arrayPos0, ALL_ENTITIES)
242
object[arrayPos0].direction = object[arrayPos0].propertyValue
243
object[arrayPos0].direction &= FLIP_X
244
object[arrayPos0].startPos.x = object[arrayPos0].xpos
245
object[arrayPos0].startPos.y = object[arrayPos0].ypos
246
next
247
248
SetTableValue(TypeName[Aquis], DebugMode_ObjCount, DebugMode_TypesTable)
249
SetTableValue(Aquis_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
250
SetTableValue(Aquis_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
251
DebugMode_ObjCount++
252
end event
253
254
255
// ========================
256
// Editor Events
257
// ========================
258
259
event RSDKEdit
260
if editor.returnVariable == true
261
switch editor.variableID
262
case EDIT_VAR_PROPVAL // property value
263
checkResult = object.propertyValue
264
break
265
266
case 0 // direction
267
checkResult = object.propertyValue
268
break
269
270
end switch
271
else
272
switch editor.variableID
273
case EDIT_VAR_PROPVAL // property value
274
object.propertyValue = editor.variableValue
275
break
276
277
case 0 // direction
278
object.propertyValue = editor.variableValue
279
break
280
281
end switch
282
end if
283
end event
284
285
286
event RSDKDraw
287
GetBit(object.direction, object.propertyValue, 0)
288
DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
289
end event
290
291
292
event RSDKLoad
293
CheckCurrentStageFolder("Zone07")
294
if checkResult == true
295
LoadSpriteSheet("OOZ/Objects.gif")
296
SpriteFrame(-15, -24, 29, 47, 1, 1)
297
else
298
LoadSpriteSheet("MBZ/Objects.gif")
299
SpriteFrame(-15, -24, 29, 47, 929, 331)
300
end if
301
302
AddEditorVariable("direction")
303
SetActiveVariable("direction")
304
AddEnumVariable("Left", 0)
305
AddEnumVariable("Right", 1)
306
end event
307
308