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/HPZ/AirBubble.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Air Bubble 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.originPos.x
14
private alias object.value2 : object.targetPlayer
15
private alias object.value3 : object.bubbleUsed
16
17
// States
18
private alias 0 : AIRBUBBLE_ACTIVE
19
private alias 1 : AIRBUBBLE_USED
20
21
// Player Aliases
22
private alias object.state : player.state
23
private alias object.animation : player.animation
24
private alias object.animationSpeed : player.animationSpeed
25
private alias object.xvel : player.xvel
26
private alias object.yvel : player.yvel
27
private alias object.speed : player.speed
28
private alias object.value3 : player.drownTimer
29
private alias object.value4 : player.drownLevel
30
private alias object.value36 : player.flyCarryTimer
31
private alias object.value37 : player.shield
32
33
// Shield constants
34
private alias 2 : SHIELD_BUBBLE
35
36
37
// ========================
38
// Events
39
// ========================
40
41
event ObjectUpdate
42
currentPlayer = object.targetPlayer
43
if object.state == AIRBUBBLE_ACTIVE
44
object.timer++
45
if object.timer > 15
46
object.timer = 0
47
48
if object.frame == 8
49
object.type = TypeName[Blank Object]
50
end if
51
52
if object.frame < object.propertyValue
53
object.frame++
54
end if
55
end if
56
57
object.ypos += object.yvel
58
if currentPlayer != 0xFFFF
59
if player[currentPlayer].state == Player_State_Clinging
60
if object.propertyValue < 3
61
object.originPos.x += 0x40000
62
end if
63
end if
64
end if
65
66
if object.frame < 7
67
Sin(object.xpos, object.angle)
68
object.xpos <<= 9
69
object.xpos += object.originPos.x
70
object.angle += 4
71
object.angle &= 0x1FF
72
end if
73
74
if object.iypos < stage.waterLevel
75
if object.propertyValue == 6
76
object.frame = 7
77
object.propertyValue = 8
78
object.timer = 0
79
object.yvel = 0
80
else
81
if object.propertyValue < 6
82
object.type = TypeName[Blank Object]
83
end if
84
end if
85
end if
86
else
87
CheckEqual(player[currentPlayer].animation, ANI_HURT)
88
temp0 = checkResult
89
CheckEqual(player[currentPlayer].animation, ANI_DYING)
90
temp0 |= checkResult
91
if temp0 != 0
92
object.bubbleUsed = false
93
end if
94
95
if object.timer < 20
96
object.timer++
97
if object.bubbleUsed != false
98
player[currentPlayer].animation = ANI_BREATHING
99
end if
100
101
if object.timer > 9
102
object.frame = 8
103
end if
104
else
105
object.type = TypeName[Blank Object]
106
if object.bubbleUsed != false
107
player[currentPlayer].animation = ANI_WALKING
108
player[currentPlayer].animationSpeed = 20
109
end if
110
end if
111
end if
112
113
if object.outOfBounds == true
114
object.type = TypeName[Blank Object]
115
end if
116
117
if object.frame == 6
118
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
119
if player[currentPlayer].animation != ANI_DYING
120
if player[currentPlayer].shield != SHIELD_BUBBLE
121
BoxCollisionTest(C_TOUCH, object.entityPos, -2, -2, 2, 2, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
122
if checkResult == true
123
object.frame = 7
124
object.state = 1
125
object.timer = 0
126
object.yvel = 0
127
object.targetPlayer = currentPlayer
128
player[currentPlayer].yvel = 0
129
player[currentPlayer].xvel = 0
130
player[currentPlayer].speed = 0
131
CheckEqual(player[currentPlayer].animation, ANI_FLYING)
132
temp0 = checkResult
133
CheckEqual(player[currentPlayer].animation, ANI_FLYINGTIRED)
134
temp0 |= checkResult
135
CheckEqual(player[currentPlayer].animation, ANI_SWIM_LIFT)
136
temp0 |= checkResult
137
CheckEqual(player[currentPlayer].animation, ANI_GLIDING)
138
temp0 |= checkResult
139
CheckEqual(player[currentPlayer].animation, ANI_GLIDING_STOP)
140
temp0 |= checkResult
141
CheckEqual(player[currentPlayer].animation, ANI_CLIMBING)
142
temp0 |= checkResult
143
CheckEqual(player[currentPlayer].animation, ANI_LEDGEPULLUP)
144
temp0 |= checkResult
145
CheckEqual(player[currentPlayer].animation, ANI_CLINGING)
146
temp0 |= checkResult
147
CheckEqual(player[currentPlayer].animation, ANI_FANROTATE)
148
temp0 |= checkResult
149
if temp0 == false
150
player[currentPlayer].animation = ANI_BREATHING
151
object.bubbleUsed = true
152
end if
153
154
player[currentPlayer].drownTimer = 0
155
player[currentPlayer].drownLevel = 0
156
if player[currentPlayer].state == Player_State_RollJump
157
#platform: USE_STANDALONE
158
player[currentPlayer].state = Player_State_Air
159
#endplatform
160
#platform: USE_ORIGINS
161
player[currentPlayer].state = Player_State_Air_NoDropDash
162
#endplatform
163
end if
164
165
if player[currentPlayer].state == Player_State_Carried
166
#platform: USE_STANDALONE
167
player[currentPlayer].state = Player_State_Air
168
#endplatform
169
#platform: USE_ORIGINS
170
player[currentPlayer].state = Player_State_Air_NoDropDash
171
#endplatform
172
player[1].flyCarryTimer = 30
173
end if
174
PlaySfx(SfxName[Breathing], false)
175
end if
176
end if
177
end if
178
next
179
end if
180
end event
181
182
183
event ObjectDraw
184
DrawSprite(object.frame)
185
end event
186
187
188
event ObjectStartup
189
LoadSpriteSheet("HPZ/Objects3.gif")
190
191
// Bubble frames
192
SpriteFrame(-2, -2, 4, 4, 157, 2)
193
SpriteFrame(-3, -3, 6, 6, 156, 9)
194
SpriteFrame(-4, -4, 8, 8, 155, 17)
195
SpriteFrame(-6, -6, 12, 12, 209, 36)
196
SpriteFrame(-8, -8, 16, 16, 207, 51)
197
SpriteFrame(-12, -12, 24, 24, 164, 1)
198
SpriteFrame(-16, -16, 32, 32, 189, 1)
199
SpriteFrame(-16, -16, 32, 32, 222, 1)
200
SpriteFrame(-15, -15, 30, 30, 224, 34)
201
end event
202
203
204
// ========================
205
// Editor Events
206
// ========================
207
208
event RSDKDraw
209
DrawSprite(0)
210
end event
211
212
213
event RSDKLoad
214
LoadSpriteSheet("HPZ/Objects3.gif")
215
SpriteFrame(-16, -16, 32, 32, 222, 1)
216
217
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
218
end event
219
220