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/Mission/MissionAnimalPrison.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: MissionAnimalPrison Object
4
// Script Author: Christian Whitehead/Simon Thomley
5
// Unpacked by Rubberduckycooly's script unpacker
6
// ----------------------------------
7
8
// This Object is used in Mission "Animal Rescue" - M034 - Mission_Zone05
9
10
// ========================
11
// Aliases
12
// ========================
13
14
private alias object.value0 : object.timer
15
private alias object.value2 : object.buttonPos
16
private alias object.value3 : object.lockPos.x
17
private alias object.value4 : object.lockPos.y
18
private alias object.value5 : object.debrisEdgeFrame
19
private alias object.value6 : object.debrisCenterFrame
20
21
// States
22
private alias 0 : MISSIONANIMALPRISON_AWAITOPEN
23
private alias 1 : MISSIONANIMALPRISON_OPENING
24
private alias 2 : MISSIONANIMALPRISON_SHOWDEBRIS
25
private alias 3 : MISSIONANIMALPRISON_OPENED
26
private alias 4 : MISSIONANIMALPRISON_UNUSED // ANIMALPRISON_OPENED in the original object
27
28
// Animal Aliases
29
private alias object.value1 : animal.randomizeDir
30
31
// Player Aliases
32
private alias object.xpos : player.xpos
33
private alias object.ypos : player.ypos
34
private alias object.xvel : player.xvel
35
private alias object.speed : player.speed
36
private alias object.collisionRight : player.collisionRight
37
private alias object.collisionBottom : player.collisionBottom
38
39
// Super States
40
private alias 1 : SUPERSTATE_SUPER
41
private alias 2 : SUPERSTATE_FADEOUT
42
43
// Game Modes
44
private alias 2 : MODE_TIMEATTACK
45
46
// Tracks
47
private alias 1 : TRACK_ACTFINISH
48
49
50
// ========================
51
// Events
52
// ========================
53
54
event ObjectUpdate
55
switch object.state
56
case MISSIONANIMALPRISON_AWAITOPEN
57
break
58
59
case MISSIONANIMALPRISON_OPENING
60
object.timer++
61
62
object.lockPos.x += object.xvel
63
object.lockPos.y += object.yvel
64
object.yvel += 0x4000
65
66
if object.timer == 30
67
temp1 = object.ypos
68
temp1 += 0x40000
69
temp2 = 0
70
temp3 = 30
71
while temp2 < 32
72
Rand(temp0, 48)
73
temp0 >>= 2
74
temp0 <<= 18
75
temp0 -= 0x180000
76
temp0 += object.xpos
77
temp4 = temp2
78
temp4 &= 1
79
if temp4 == false
80
CreateTempObject(animalType1, temp3, temp0, temp1)
81
else
82
CreateTempObject(animalType2, temp3, temp0, temp1)
83
end if
84
animal[tempObjectPos].randomizeDir = true
85
temp0 += 0x40000
86
temp2++
87
temp3 += 5
88
loop
89
object.drawOrder = 4
90
object.timer = 0
91
object.state++
92
object.debrisEdgeFrame = 5
93
object.debrisCenterFrame = 17
94
end if
95
break
96
97
case MISSIONANIMALPRISON_SHOWDEBRIS
98
object.debrisEdgeFrame = object.timer
99
object.debrisEdgeFrame += 5
100
object.debrisCenterFrame = object.timer
101
object.debrisCenterFrame >>= 1
102
object.debrisCenterFrame += 17
103
104
if object.timer < 12
105
object.timer++
106
else
107
object.timer = 0
108
object.state++
109
CallNativeFunction2(NotifyCallback, NOTIFY_KILL_ENEMY, KILL_ENEMY_ATTR_ANIMALPRISON)
110
end if
111
break
112
113
case MISSIONANIMALPRISON_OPENED
114
break
115
116
end switch
117
118
object.buttonPos = object.ypos
119
object.buttonPos -= 0x300000
120
121
temp2 = object.buttonPos
122
temp2 += 0x80000
123
124
// Check collision with players
125
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
126
BoxCollisionTest(C_SOLID, object.entityPos, -32, -24, 32, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
127
BoxCollisionTest(C_SOLID, object.entityPos, -16, -40, 16, -24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
128
if object.state == MISSIONANIMALPRISON_AWAITOPEN
129
if checkResult == COL_TOP
130
object.state = MISSIONANIMALPRISON_OPENING
131
132
if Player_superState == SUPERSTATE_SUPER
133
Player_superState = SUPERSTATE_FADEOUT
134
end if
135
136
object.xvel = 0x80000
137
object.yvel = -0x40000
138
object.lockPos.x = object.xpos
139
object.lockPos.y = object.ypos
140
CreateTempObject(TypeName[Smoke Puff], 0, object.xpos, object.ypos)
141
object[tempObjectPos].ypos -= 0x180000
142
PlaySfx(SfxName[Destroy], false)
143
end if
144
end if
145
146
BoxCollisionTest(C_TOUCH, object.entityPos, -15, -48, 15, -24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
147
if checkResult == true
148
temp0 = player[currentPlayer].collisionBottom
149
temp0 <<= 16
150
temp0 += player[currentPlayer].ypos
151
if temp0 > object.buttonPos
152
if temp0 <= temp2
153
object.buttonPos = temp0
154
end if
155
end if
156
end if
157
next
158
end event
159
160
161
event ObjectDraw
162
switch object.state
163
case MISSIONANIMALPRISON_AWAITOPEN
164
DrawSpriteXY(2, object.xpos, object.buttonPos)
165
DrawSprite(0)
166
DrawSprite(4)
167
break
168
169
case MISSIONANIMALPRISON_OPENING
170
DrawSpriteXY(2, object.xpos, object.buttonPos)
171
DrawSprite(0)
172
DrawSpriteXY(4, object.lockPos.x, object.lockPos.y)
173
break
174
175
case MISSIONANIMALPRISON_SHOWDEBRIS
176
DrawSpriteXY(2, object.xpos, object.buttonPos)
177
DrawSprite(1)
178
179
DrawSprite(object.debrisEdgeFrame)
180
181
object.direction = FLIP_X
182
DrawSpriteFX(object.debrisEdgeFrame, FX_FLIP, object.xpos, object.ypos)
183
184
DrawSprite(object.debrisCenterFrame)
185
break
186
187
case MISSIONANIMALPRISON_OPENED
188
case MISSIONANIMALPRISON_UNUSED
189
DrawSpriteXY(2, object.xpos, object.buttonPos)
190
DrawSprite(1)
191
break
192
193
end switch
194
end event
195
196
197
event ObjectStartup
198
LoadSpriteSheet("Global/Items2.gif")
199
SpriteFrame(-32, -32, 64, 64, 83, 1) // capsule (closed) - #0
200
SpriteFrame(-32, -32, 64, 64, 148, 1) // capsule (open) - #1
201
SpriteFrame(-16, 0, 32, 16, 213, 1) // button (closed) - #2
202
SpriteFrame(-16, -48, 32, 16, 213, 1) // button (open) - #3
203
SpriteFrame(-8, -31, 16, 16, 213, 18) // lock - #4
204
SpriteFrame(-32, -16, 24, 24, 83, 17) // debris - #5
205
SpriteFrame(-32, -14, 24, 22, 83, 17) // debris - #6
206
SpriteFrame(-32, -12, 24, 20, 83, 17) // debris - #7
207
SpriteFrame(-32, -10, 24, 18, 83, 17) // debris - #8
208
SpriteFrame(-32, -8, 24, 16, 83, 17) // debris - #9
209
SpriteFrame(-32, -6, 24, 14, 83, 17) // debris - #10
210
SpriteFrame(-32, -4, 24, 12, 83, 17) // debris - #11
211
SpriteFrame(-32, -2, 24, 10, 83, 17) // debris - #12
212
SpriteFrame(-32, 0, 24, 8, 83, 17) // debris - #13
213
SpriteFrame(-32, 2, 24, 6, 83, 17) // debris - #14
214
SpriteFrame(-32, 4, 24, 4, 83, 17) // debris - #15
215
SpriteFrame(-32, 6, 24, 2, 83, 17) // debris - #16
216
SpriteFrame(-8, -16, 16, 24, 107, 17) // debris - #17
217
SpriteFrame(-8, -16, 16, 20, 107, 17) // debris - #18
218
SpriteFrame(-8, -16, 16, 16, 107, 17) // debris - #19
219
SpriteFrame(-8, -16, 16, 12, 107, 17) // debris - #20
220
SpriteFrame(-8, -16, 16, 8, 107, 17) // debris - #21
221
SpriteFrame(-8, -16, 16, 4, 107, 17) // debris - #22
222
223
// huh?
224
// This might've been TypeName[Animal Prison] in the original source, but that didn't resolve right and now we got this...
225
foreach (TypeName[Blank Object], arrayPos0, ALL_ENTITIES)
226
object[arrayPos0].priority = PRIORITY_XBOUNDS
227
next
228
229
end event
230
231
232
// ========================
233
// Editor Events
234
// ========================
235
236
event RSDKDraw
237
DrawSprite(0)
238
DrawSprite(1)
239
DrawSprite(2)
240
end event
241
242
243
event RSDKLoad
244
LoadSpriteSheet("Global/Items2.gif")
245
SpriteFrame(-16, -48, 32, 16, 213, 1) // TODO:
246
SpriteFrame(-32, -32, 64, 64, 83, 1)
247
SpriteFrame(-8, -31, 16, 16, 213, 18)
248
249
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
250
end event
251
252