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/MPZ/Spear.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Spear 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.y
14
private alias object.value31 : object.wrapOffset.y
15
16
// States
17
private alias 0 : SPEAR_DOWN_IDLE
18
private alias 1 : SPEAR_MOVEUP
19
private alias 2 : SPEAR_UP_IDLE
20
private alias 3 : SPEAR_MOVEDOWN
21
22
// Player Aliases
23
private alias object.value17 : debugMode.currentSelection
24
25
26
// ========================
27
// Function Declarations
28
// ========================
29
30
reserve function Spear_Setup
31
reserve function Spear_DebugDraw
32
reserve function Spear_DebugSpawn
33
34
35
// ========================
36
// Static Values
37
// ========================
38
39
private value Spear_startDebugID = 0
40
41
42
// ========================
43
// Function Definitions
44
// ========================
45
46
private function Spear_Setup
47
object[arrayPos0].ypos = object[arrayPos0].startPos.y
48
object[arrayPos0].ypos += object[arrayPos0].wrapOffset.y
49
50
object[arrayPos0].drawOrder = 2
51
object[arrayPos0].timer = 0
52
object[arrayPos0].state = 0
53
object[arrayPos0].priority = PRIORITY_BOUNDS
54
end function
55
56
57
private function Spear_DebugDraw
58
DrawSprite(0)
59
end function
60
61
62
private function Spear_DebugSpawn
63
temp0 = debugMode[0].currentSelection
64
temp0 -= Spear_startDebugID
65
temp0 <<= 2
66
67
CreateTempObject(TypeName[Spear], temp0, object.xpos, object.ypos)
68
69
arrayPos0 = object[tempObjectPos].entityPos
70
object[arrayPos0].startPos.y = object.ypos
71
CallFunction(Spear_Setup)
72
end function
73
74
// ========================
75
// Events
76
// ========================
77
78
event ObjectUpdate
79
switch object.state
80
case SPEAR_DOWN_IDLE
81
temp0 = oscillation
82
temp0 -= object.propertyValue
83
temp0 &= 0x7F
84
if temp0 == 0
85
object.priority = PRIORITY_ACTIVE
86
object.timer = 8
87
object.state = SPEAR_MOVEUP
88
end if
89
break
90
91
case SPEAR_MOVEUP
92
object.ypos -= 0x40000
93
94
object.timer--
95
if object.timer == 0
96
object.timer = 3
97
object.state = SPEAR_UP_IDLE
98
end if
99
break
100
101
case SPEAR_UP_IDLE
102
object.timer--
103
if object.timer == 0
104
object.timer = 8
105
object.state = SPEAR_MOVEDOWN
106
end if
107
break
108
109
case SPEAR_MOVEDOWN
110
object.ypos += 0x40000
111
112
object.timer--
113
if object.timer == 0
114
object.state = SPEAR_DOWN_IDLE
115
end if
116
break
117
118
end switch
119
120
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
121
BoxCollisionTest(C_TOUCH, object.entityPos, -4, -16, 4, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
122
if checkResult == true
123
CallFunction(Player_Hit)
124
end if
125
next
126
127
if object.outOfBounds == true
128
arrayPos0 = object.entityPos
129
CallFunction(Spear_Setup)
130
end if
131
end event
132
133
134
event ObjectDraw
135
DrawSprite(0)
136
end event
137
138
139
event ObjectStartup
140
LoadSpriteSheet("MPZ/Objects.gif")
141
SpriteFrame(-4, -16, 8, 32, 34, 102)
142
143
foreach (TypeName[Spear], arrayPos0, ALL_ENTITIES)
144
object[arrayPos0].startPos.y = object[arrayPos0].ypos
145
CallFunction(Spear_Setup)
146
next
147
148
temp0 = 0
149
Spear_startDebugID = DebugMode_ObjCount
150
while temp0 < 16
151
SetTableValue(TypeName[Spear], DebugMode_ObjCount, DebugMode_TypesTable)
152
SetTableValue(Spear_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
153
SetTableValue(Spear_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
154
DebugMode_ObjCount++
155
temp0++
156
loop
157
end event
158
159
160
// ========================
161
// Editor Events
162
// ========================
163
164
event RSDKDraw
165
DrawSprite(0)
166
end event
167
168
169
event RSDKLoad
170
LoadSpriteSheet("MPZ/Objects.gif")
171
SpriteFrame(-4, -16, 8, 32, 34, 102)
172
173
SetVariableAlias(ALIAS_VAR_PROPVAL, "intervalOffset")
174
end event
175
176