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/MissionGrabPanel.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Grab Panel Object
4
// Script Author: Christian Whitehead/Simon Thomley
5
// Unpacked by Rubberduckycooly's script unpacker
6
// ----------------------------------
7
8
// This Object is used in Mission "Quick Step" - M050 - Mission_Zone11
9
10
// ========================
11
// Aliases
12
// ========================
13
14
private alias object.value0 : object.delay
15
16
// Player Aliases
17
private alias object.type : player.type
18
private alias object.state : player.state
19
private alias object.xpos : player.xpos
20
private alias object.ypos : player.ypos
21
private alias object.xvel : player.xvel
22
private alias object.yvel : player.yvel
23
private alias object.speed : player.speed
24
private alias object.animationSpeed : player.animationSpeed
25
private alias object.animation : player.animation
26
private alias object.jumpPress : player.jumpPress
27
28
29
// ========================
30
// Function Declarations
31
// ========================
32
33
reserve function GrabPanel_DebugDraw
34
reserve function GrabPanel_DebugSpawn
35
36
37
// ========================
38
// Function Definitions
39
// ========================
40
41
private function GrabPanel_DebugDraw
42
DrawSprite(0)
43
end function
44
45
46
private function GrabPanel_DebugSpawn
47
CreateTempObject(TypeName[Grab Panel], 0, object.xpos, object.ypos)
48
object[tempObjectPos].delay = 60
49
end function
50
51
52
// ========================
53
// Events
54
// ========================
55
56
event ObjectUpdate
57
temp7 = false
58
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
59
temp2 = false
60
temp3 = -0x280000
61
62
temp0 = object.xpos
63
temp0 += temp3
64
temp0 -= player[currentPlayer].xpos
65
Abs(temp0)
66
if temp0 <= 0x40000
67
temp0 = object.ypos
68
temp0 -= player[currentPlayer].ypos
69
temp1 = temp0
70
Abs(temp0)
71
if temp0 <= 0x160000
72
player[currentPlayer].animation = ANI_CLINGING
73
player[currentPlayer].animationSpeed = 128
74
player[currentPlayer].xpos = object.xpos
75
player[currentPlayer].xpos += temp3
76
if object.propertyValue == 0x7F
77
player[currentPlayer].state = Player_State_Static
78
player[currentPlayer].xvel = 0
79
player[currentPlayer].yvel = 0
80
player[currentPlayer].speed = 0
81
end if
82
83
temp2 = true
84
else
85
if player[currentPlayer].animation == ANI_CLINGING
86
player[currentPlayer].ypos = object.ypos
87
if temp1 < 0
88
player[currentPlayer].ypos += 0x160000
89
else
90
player[currentPlayer].ypos -= 0x160000
91
end if
92
93
temp2 = true
94
end if
95
end if
96
97
if temp2 != false
98
if currentPlayer == 0
99
if player[currentPlayer].jumpPress != false
100
if player[currentPlayer].ypos < object.ypos
101
temp7 = 1
102
else
103
temp7 = 2
104
end if
105
end if
106
107
object.delay--
108
if object.delay == 0
109
if player[currentPlayer].ypos < object.ypos
110
temp7 = 1
111
else
112
temp7 = 2
113
end if
114
end if
115
end if
116
end if
117
end if
118
next
119
120
if temp7 != 0
121
player[currentPlayer].animation = ANI_FANROTATE
122
PlaySfx(SfxName[Ledge Break], false)
123
temp0 = object.xpos
124
temp0 -= 0x100000
125
temp1 = object.ypos
126
temp1 -= 0x100000
127
if temp7 == 1
128
CreateTempObject(TypeName[Grab Panel Part], 16, temp0, temp1)
129
object[tempObjectPos].xvel = 0x40000
130
temp1 += 0x200000
131
132
CreateTempObject(TypeName[Grab Panel Part], 24, temp0, temp1)
133
object[tempObjectPos].xvel = 0x40000
134
temp0 -= 0x200000
135
temp1 -= 0x200000
136
137
CreateTempObject(TypeName[Grab Panel Part], 0, temp0, temp1)
138
object[tempObjectPos].xvel = 0x40000
139
object[tempObjectPos].state = 1
140
temp1 += 0x200000
141
142
CreateTempObject(TypeName[Grab Panel Part], 4, temp0, temp1)
143
object[tempObjectPos].xvel = 0x40000
144
else
145
CreateTempObject(TypeName[Grab Panel Part], 24, temp0, temp1)
146
object[tempObjectPos].xvel = 0x40000
147
temp1 += 0x200000
148
149
CreateTempObject(TypeName[Grab Panel Part], 16, temp0, temp1)
150
object[tempObjectPos].xvel = 0x40000
151
temp0 -= 0x200000
152
temp1 -= 0x200000
153
154
CreateTempObject(TypeName[Grab Panel Part], 4, temp0, temp1)
155
object[tempObjectPos].xvel = 0x40000
156
temp1 += 0x200000
157
158
CreateTempObject(TypeName[Grab Panel Part], 0, temp0, temp1)
159
object[tempObjectPos].xvel = 0x40000
160
object[tempObjectPos].state = 1
161
end if
162
163
object.type = TypeName[Blank Object]
164
end if
165
end event
166
167
168
event ObjectDraw
169
if object.propertyValue != 0x7F
170
DrawSprite(0)
171
172
// ??? no end if?
173
// I mean code-wise, yeah the end event will reset it but, this is prolly a "bug"
174
// (btw it was like this in the original script already, this isn't something new introduced in the Mission ver)
175
176
#platform: USE_DECOMP
177
// just for peace of mind :)
178
end if
179
#endplatform
180
end event
181
182
183
event ObjectStartup
184
LoadSpriteSheet("SCZ/Objects.gif")
185
SpriteFrame(-64, -32, 64, 64, 1, 69)
186
187
foreach (TypeName[Grab Panel], arrayPos0, ALL_ENTITIES)
188
object[arrayPos0].delay = object[arrayPos0].propertyValue
189
object[arrayPos0].delay *= 60
190
next
191
192
SetTableValue(TypeName[Grab Panel], DebugMode_ObjCount, DebugMode_TypesTable)
193
SetTableValue(GrabPanel_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
194
SetTableValue(GrabPanel_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
195
DebugMode_ObjCount++
196
end event
197
198
199
// ========================
200
// Editor Events
201
// ========================
202
203
event RSDKDraw
204
CheckEqual(object.propertyValue, 0x7F)
205
object.inkEffect = checkResult
206
DrawSpriteFX(0, FX_INK, object.xpos, object.ypos)
207
object.inkEffect = INK_NONE
208
end event
209
210
211
event RSDKLoad
212
LoadSpriteSheet("SCZ/Objects.gif")
213
SpriteFrame(-64, -32, 64, 64, 1, 69)
214
215
// 0x7F == Eggman Shuttle Grab Panel
216
SetVariableAlias(ALIAS_VAR_PROPVAL, "delay")
217
end event
218
219