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/CNZ/DPlunger.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: D Plunger 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.value1 : object.compression
13
private alias object.value2 : object.active
14
15
// Player Aliases
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.gravity : player.gravity
24
private alias object.animation : player.animation
25
private alias object.scrollTracking : player.scrollTracking
26
private alias object.jumpHold : player.jumpHold
27
28
private alias object.value1 : player.timer
29
30
31
// ========================
32
// Function Declarations
33
// ========================
34
35
reserve function DPlunger_DebugDraw
36
reserve function DPlunger_DebugSpawn
37
38
39
// ========================
40
// Function Definitions
41
// ========================
42
43
private function DPlunger_DebugDraw
44
DrawSprite(5)
45
end function
46
47
48
private function DPlunger_DebugSpawn
49
CreateTempObject(TypeName[D Plunger], 1, object.xpos, object.ypos)
50
object[tempObjectPos].ypos &= 0xFFFF0000
51
object[tempObjectPos].inkEffect = INK_ALPHA
52
end function
53
54
55
// ========================
56
// Events
57
// ========================
58
59
event ObjectUpdate
60
if object.active == true
61
if object.compression < 0x100000
62
object.compression += 0x4000
63
end if
64
else
65
if object.compression > 0
66
object.compression -= 0x20000
67
if object.compression < 0
68
object.compression = 0
69
end if
70
else
71
object.priority = PRIORITY_BOUNDS
72
end if
73
end if
74
75
temp2 = object.active
76
object.active = false
77
temp0 = object.xpos
78
temp1 = object.ypos
79
object.xpos -= object.compression
80
object.ypos += object.compression
81
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
82
CheckEqual(player[currentPlayer].state, Player_State_Death)
83
temp7 = checkResult
84
CheckEqual(player[currentPlayer].state, Player_State_GotHit)
85
temp7 |= checkResult
86
if temp7 == false
87
BoxCollisionTest(C_TOUCH, object.entityPos, 0, -19, 19, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
88
if checkResult == true
89
player[currentPlayer].state = Player_State_Static
90
player[currentPlayer].gravity = 0
91
player[currentPlayer].scrollTracking = false
92
player[currentPlayer].animation = ANI_JUMPING
93
player[currentPlayer].xpos = object.xpos
94
player[currentPlayer].xpos += 0x1B0000
95
player[currentPlayer].ypos = object.ypos
96
player[currentPlayer].ypos -= 0x1B0000
97
player[currentPlayer].xvel = -1
98
player[currentPlayer].yvel = 1
99
object.active |= player[currentPlayer].jumpHold
100
end if
101
end if
102
next
103
104
if object.compression > 0x60000
105
if temp2 == true
106
if object.active == false
107
object.priority = PRIORITY_ACTIVE
108
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
109
CheckEqual(player[currentPlayer].state, Player_State_Death)
110
temp7 = checkResult
111
CheckEqual(player[currentPlayer].state, Player_State_GotHit)
112
temp7 |= checkResult
113
if temp7 == false
114
if player[currentPlayer].state == Player_State_Static
115
BoxCollisionTest(C_TOUCH, object.entityPos, 0, -19, 19, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
116
if checkResult == true
117
if object.propertyValue == 0
118
player[currentPlayer].state = CNZSetup_Player_TubeRoll
119
player[currentPlayer].gravity = GRAVITY_GROUND
120
else
121
#platform: USE_STANDALONE
122
player[currentPlayer].state = Player_State_Air
123
#endplatform
124
#platform: USE_ORIGINS
125
player[currentPlayer].state = Player_State_Air_NoDropDash
126
#endplatform
127
player[currentPlayer].gravity = GRAVITY_AIR
128
end if
129
130
player[currentPlayer].timer = 0
131
player[currentPlayer].direction = FACING_RIGHT
132
player[currentPlayer].xvel = object.compression
133
player[currentPlayer].speed = object.compression
134
player[currentPlayer].yvel = object.compression
135
FlipSign(player[currentPlayer].yvel)
136
PlaySfx(SfxName[Plunger], false)
137
end if
138
end if
139
end if
140
next
141
end if
142
end if
143
end if
144
object.xpos = temp0
145
object.ypos = temp1
146
147
// Fading for yellow plunger
148
temp0 = object.compression
149
temp0 >>= 14
150
object.angle += temp0
151
Sin(temp1, object.angle)
152
153
temp1 >>= 4
154
temp0 = object.compression
155
temp0 >>= 12
156
temp0 -= 64
157
temp0 += temp1
158
object.alpha = temp0
159
end event
160
161
162
event ObjectDraw
163
// Spring & Base
164
temp0 = object.compression
165
temp0 >>= 20
166
DrawSprite(temp0)
167
168
// Plunger (Red)
169
temp0 = object.xpos
170
temp0 -= object.compression
171
temp1 = object.ypos
172
temp1 += object.compression
173
DrawSpriteXY(3, temp0, temp1)
174
175
// Plunger (Yellow)
176
DrawSpriteFX(4, FX_INK, temp0, temp1)
177
end event
178
179
180
event ObjectStartup
181
LoadSpriteSheet("CNZ/Objects.gif")
182
SpriteFrame(-24, -8, 32, 32, 219, 51) // Spring & Base - #0
183
SpriteFrame(-24, -1, 25, 25, 219, 58) // Spring & Base (Shorter) - #1
184
SpriteFrame(-24, -1, 25, 25, 219, 58) // Base - #2
185
SpriteFrame(-3, -24, 27, 27, 199, 6) // Plunger (Red) - #3
186
SpriteFrame(-3, -24, 27, 27, 227, 6) // Plunger (Yellow) - #4
187
SpriteFrame(-24, -24, 48, 48, 170, 51) // Plunger (Full Sprite) - #5
188
189
foreach (TypeName[D Plunger], arrayPos0, ALL_ENTITIES)
190
object[arrayPos0].inkEffect = INK_ALPHA
191
next
192
193
SetTableValue(TypeName[D Plunger], DebugMode_ObjCount, DebugMode_TypesTable)
194
SetTableValue(DPlunger_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
195
SetTableValue(DPlunger_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
196
DebugMode_ObjCount++
197
end event
198
199
200
// ========================
201
// Editor Events
202
// ========================
203
204
event RSDKEdit
205
if editor.returnVariable == true
206
switch editor.variableID
207
case EDIT_VAR_PROPVAL // property value
208
checkResult = object.propertyValue
209
break
210
211
case 0 // releaseType
212
checkResult = object.propertyValue
213
break
214
215
end switch
216
else
217
switch editor.variableID
218
case EDIT_VAR_PROPVAL // property value
219
object.propertyValue = editor.variableValue
220
break
221
222
case 0 // releaseType
223
object.propertyValue = editor.variableValue
224
break
225
226
end switch
227
end if
228
end event
229
230
231
event RSDKDraw
232
DrawSprite(0)
233
end event
234
235
236
event RSDKLoad
237
LoadSpriteSheet("CNZ/Objects.gif")
238
SpriteFrame(-24, -24, 48, 48, 170, 51) // Plunger (Full Sprite)
239
240
AddEditorVariable("releaseType")
241
SetActiveVariable("releaseType")
242
AddEnumVariable("Lock Controls", 0)
243
AddEnumVariable("Release Controls", 1)
244
end event
245
246