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