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/AirBubbler.txt
1482 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Air Bubbler 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.propertyValue : object.numDuds
13
14
private alias object.value0 : object.timer
15
private alias object.value1 : object.bubbleType2
16
private alias object.value2 : object.bubbleType1
17
private alias object.value3 : object.bubbleFlags
18
private alias object.value4 : object.dudsRemaining
19
20
// AirBubble object aliases
21
private alias object.value1 : airBubble.originPos.y
22
private alias object.value2 : airBubble.targetPlayer
23
24
25
// ========================
26
// Function Declarations
27
// ========================
28
29
reserve function AirBubbler_DebugDraw
30
reserve function AirBubbler_DebugSpawn
31
32
33
// ========================
34
// Tables
35
// ========================
36
37
private table AirBubbler_bubbleSizes
38
2, 4, 2, 2, 2, 2, 4, 2, 4, 2, 2, 4, 2, 4, 2, 2, 4, 2
39
end table
40
41
42
// ========================
43
// Function Definitions
44
// ========================
45
46
private function AirBubbler_DebugDraw
47
DrawSprite(0)
48
end function
49
50
51
private function AirBubbler_DebugSpawn
52
CreateTempObject(TypeName[Air Bubbler], 0, object.xpos, object.ypos)
53
object[tempObjectPos].drawOrder = 4
54
object[tempObjectPos].dudsRemaining = 0
55
end function
56
57
58
// ========================
59
// Events
60
// ========================
61
62
event ObjectUpdate
63
object.frame++
64
object.frame %= 48
65
66
if object.iypos > stage.waterLevel
67
temp0 = object.ixpos
68
temp0 -= camera[0].xpos
69
Abs(temp0)
70
if temp0 < screen.xcenter
71
temp0 = object.iypos
72
temp0 -= camera[0].ypos
73
Abs(temp0)
74
if temp0 < screen.ycenter
75
temp1 = 0
76
if object.bubbleFlags == 0
77
object.timer--
78
if object.timer < 0
79
SetBit(object.bubbleFlags, 0, true)
80
81
Rand(object.bubbleType1, 0xFFFF)
82
object.bubbleType2 = object.bubbleType1
83
object.bubbleType1 %= 6
84
object.bubbleType2 &= 12
85
object.dudsRemaining--
86
if object.dudsRemaining < 0
87
object.dudsRemaining = object.numDuds
88
SetBit(object.bubbleFlags, 1, true)
89
end if
90
91
temp1 = true
92
end if
93
else
94
object.timer--
95
if object.timer < 0
96
temp1 = true
97
end if
98
end if
99
100
if temp1 == true
101
Rand(object.timer, 32)
102
103
Rand(temp0, 17)
104
temp0 -= 8
105
temp0 <<= 16
106
temp0 += object.xpos
107
CreateTempObject(TypeName[Air Bubble], 2, temp0, object.ypos)
108
airBubble[tempObjectPos].originPos.y = object[tempObjectPos].xpos
109
Rand(object[tempObjectPos].angle, 256)
110
object[tempObjectPos].angle <<= 1
111
object[tempObjectPos].drawOrder = 4
112
object[tempObjectPos].yvel = -0x8800
113
airBubble[tempObjectPos].targetPlayer = 0xFFFF
114
temp0 = object.bubbleType2
115
temp0 += object.bubbleType1
116
GetTableValue(object[tempObjectPos].propertyValue, temp0, AirBubbler_bubbleSizes)
117
118
GetBit(temp0, object.bubbleFlags, 1)
119
if temp0 == true
120
Rand(temp0, 4)
121
122
temp1 = false
123
if temp0 == false
124
GetBit(temp0, object.bubbleFlags, 2)
125
if temp0 == false
126
temp1 = true
127
end if
128
end if
129
130
if object.bubbleType1 == 0
131
GetBit(temp0, object.bubbleFlags, 2)
132
if temp0 == false
133
temp1 = true
134
end if
135
end if
136
137
if temp1 == true
138
object[tempObjectPos].propertyValue = 6
139
SetBit(object.bubbleFlags, 2, true)
140
end if
141
end if
142
143
object.bubbleType1--
144
if object.bubbleType1 < 0
145
Rand(temp0, 128)
146
temp0 += 128
147
object.timer += temp0
148
object.bubbleFlags = 0
149
end if
150
end if
151
end if
152
end if
153
end if
154
end event
155
156
157
event ObjectDraw
158
if object.iypos >= stage.waterLevel
159
temp0 = object.frame
160
temp0 >>= 4
161
DrawSprite(temp0)
162
end if
163
end event
164
165
166
event ObjectStartup
167
LoadSpriteSheet("HPZ/Objects3.gif")
168
169
// Bubbler frames
170
SpriteFrame(-8, -8, 16, 16, 103, 1)
171
SpriteFrame(-8, -8, 16, 16, 120, 1)
172
SpriteFrame(-8, -8, 16, 16, 137, 1)
173
174
foreach (TypeName[Air Bubbler], arrayPos0, ALL_ENTITIES)
175
object[arrayPos0].drawOrder = 4
176
object[arrayPos0].dudsRemaining = object[arrayPos0].numDuds
177
next
178
179
SetTableValue(TypeName[Air Bubbler], DebugMode_ObjCount, DebugMode_TypesTable)
180
SetTableValue(AirBubbler_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
181
SetTableValue(AirBubbler_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
182
DebugMode_ObjCount++
183
end event
184
185
186
// ========================
187
// Editor Events
188
// ========================
189
190
event RSDKDraw
191
DrawSprite(0)
192
end event
193
194
195
event RSDKLoad
196
LoadSpriteSheet("HPZ/Objects3.gif")
197
SpriteFrame(-8, -8, 16, 16, 103, 1)
198
199
SetVariableAlias(ALIAS_VAR_PROPVAL, "numDuds")
200
end event
201
202