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/Nebula.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Nebula 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.value2 : object.firedShot
13
14
// States
15
private alias 0 : NEBULA_AWAITPLAYER
16
private alias 1 : NEBULA_RISING
17
18
// Player aliases
19
private alias object.xpos : player.xpos
20
21
private alias object.value40 : player.hitboxLeft
22
private alias object.value38 : player.hitboxTop
23
private alias object.value41 : player.hitboxRight
24
private alias object.value39 : player.hitboxBottom
25
26
27
// ========================
28
// Function Declarations
29
// ========================
30
31
reserve function Nebula_DebugDraw
32
reserve function Nebula_DebugSpawn
33
34
35
// ========================
36
// Function Definitions
37
// ========================
38
39
private function Nebula_DebugDraw
40
DrawSprite(2)
41
end function
42
43
44
private function Nebula_DebugSpawn
45
CreateTempObject(TypeName[Nebula], 0, object.xpos, object.ypos)
46
end function
47
48
49
// ========================
50
// Events
51
// ========================
52
53
event ObjectUpdate
54
object.xpos += object.xvel
55
object.xpos += SCZSetup_scrollVelocity.x
56
object.ypos += SCZSetup_scrollVelocity.y
57
58
switch object.state
59
case NEBULA_AWAITPLAYER
60
temp0 = object.xpos
61
temp0 -= player[0].xpos
62
Abs(temp0)
63
if temp0 < 0x800000
64
object.yvel = -0xA000
65
object.state++
66
end if
67
break
68
69
case NEBULA_RISING
70
object.yvel += 0x100
71
object.ypos += object.yvel
72
if object.firedShot == false
73
temp0 = object.xpos
74
temp0 -= player[0].xpos
75
Abs(temp0)
76
if temp0 < 0x100000
77
object.firedShot = true
78
CreateTempObject(TypeName[Nebula Bomb], 0, object.xpos, object.ypos)
79
object[tempObjectPos].drawOrder = 2
80
object[tempObjectPos].ypos += 0x180000
81
end if
82
end if
83
break
84
85
end switch
86
87
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
88
BoxCollisionTest(C_TOUCH, object.entityPos, -16, -16, 16, 16, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)
89
if checkResult == true
90
CallFunction(Player_BadnikBreak)
91
end if
92
next
93
94
object.frame = object.animationTimer
95
object.frame >>= 1
96
object.animationTimer++
97
object.animationTimer &= 7
98
99
temp0 = object.xpos
100
temp0 -= SCZSetup_scrollPos.x
101
if temp0 < -0x200000
102
object.type = TypeName[Blank Object]
103
end if
104
end event
105
106
107
event ObjectDraw
108
DrawSprite(object.frame)
109
end event
110
111
112
event ObjectStartup
113
CheckCurrentStageFolder("Zone10")
114
if checkResult == true
115
LoadSpriteSheet("SCZ/Objects.gif")
116
SpriteFrame(-24, -20, 48, 40, 72, 1)
117
SpriteFrame(-16, -20, 32, 40, 121, 1)
118
SpriteFrame(-16, -20, 32, 40, 154, 1)
119
SpriteFrame(-16, -20, 32, 40, 187, 1)
120
else
121
LoadSpriteSheet("MBZ/Objects.gif")
122
SpriteFrame(-24, -20, 48, 40, 72, 1)
123
SpriteFrame(-16, -20, 32, 40, 121, 1)
124
SpriteFrame(-16, -20, 32, 40, 154, 1)
125
SpriteFrame(-16, -20, 32, 40, 187, 1)
126
end if
127
128
foreach (TypeName[Nebula], arrayPos0, ALL_ENTITIES)
129
object[arrayPos0].xvel = -0xC000
130
if object[arrayPos0].propertyValue > 0
131
object[arrayPos0].priority = PRIORITY_INACTIVE
132
end if
133
next
134
135
SetTableValue(TypeName[Nebula], DebugMode_ObjCount, DebugMode_TypesTable)
136
SetTableValue(Nebula_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
137
SetTableValue(Nebula_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
138
DebugMode_ObjCount++
139
end event
140
141
142
// ========================
143
// Editor Events
144
// ========================
145
146
event RSDKEdit
147
if editor.returnVariable == true
148
switch editor.variableID
149
case EDIT_VAR_PROPVAL // property value
150
checkResult = object.propertyValue
151
break
152
153
case 0 // initialState
154
checkResult = object.propertyValue
155
break
156
157
end switch
158
else
159
switch editor.variableID
160
case EDIT_VAR_PROPVAL // property value
161
object.propertyValue = editor.variableValue
162
break
163
164
case 0 // initialState
165
object.propertyValue = editor.variableValue
166
break
167
168
end switch
169
end if
170
end event
171
172
173
event RSDKDraw
174
DrawSprite(2)
175
end event
176
177
178
event RSDKLoad
179
CheckCurrentStageFolder("Zone10")
180
if checkResult == true
181
LoadSpriteSheet("SCZ/Objects.gif")
182
SpriteFrame(-24, -20, 48, 40, 72, 1)
183
SpriteFrame(-16, -20, 32, 40, 121, 1)
184
SpriteFrame(-16, -20, 32, 40, 154, 1)
185
SpriteFrame(-16, -20, 32, 40, 187, 1)
186
else
187
LoadSpriteSheet("MBZ/Objects.gif")
188
SpriteFrame(-24, -20, 48, 40, 72, 1)
189
SpriteFrame(-16, -20, 32, 40, 121, 1)
190
SpriteFrame(-16, -20, 32, 40, 154, 1)
191
SpriteFrame(-16, -20, 32, 40, 187, 1)
192
end if
193
194
AddEditorVariable("initialState")
195
SetActiveVariable("initialState")
196
AddEnumVariable("Active", 0)
197
AddEnumVariable("Inactive", 1)
198
end event
199
200