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/Spinner_V.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Spinner H 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.hitboxT
13
private alias object.value1 : object.hitboxB
14
15
// Player Aliases
16
private alias object.type : player.type
17
private alias object.state : player.state
18
private alias object.xvel : player.xvel
19
private alias object.speed : player.speed
20
private alias object.direction : player.direction
21
private alias object.gravity : player.gravity
22
private alias object.animation : player.animation
23
24
private alias object.value34 : player.collisionDisabled
25
private alias object.value35 : player.jumpAbilityState
26
27
28
// ========================
29
// Events
30
// ========================
31
32
event ObjectUpdate
33
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
34
if player[currentPlayer].collisionDisabled == true
35
player[currentPlayer].collisionDisabled = false
36
end if
37
38
CheckEqual(player[currentPlayer].state, Player_State_Death)
39
temp0 = checkResult
40
CheckEqual(player[currentPlayer].state, Player_State_LedgePullUp)
41
temp0 |= checkResult
42
if temp0 == false
43
BoxCollisionTest(C_TOUCH, object.entityPos, -12, object.hitboxT, 12, object.hitboxB, currentPlayer, 0, 0, 0, 0)
44
if checkResult == true
45
switch object.direction
46
case FLIP_NONE
47
if player[currentPlayer].xvel > 0
48
if player[currentPlayer].animation != ANI_JUMPING
49
if player[currentPlayer].state != CNZSetup_Player_TubeRoll
50
PlaySfx(SfxName[Rolling], false)
51
end if
52
end if
53
54
if player[currentPlayer].state == Player_State_GlideLeft
55
FlipSign(player[currentPlayer].speed)
56
end if
57
58
player[currentPlayer].direction = FACING_RIGHT
59
player[currentPlayer].state = CNZSetup_Player_TubeRoll
60
player[currentPlayer].animation = ANI_JUMPING
61
if player[currentPlayer].collisionDisabled == true
62
player[currentPlayer].collisionDisabled = false
63
end if
64
65
player[currentPlayer].jumpAbilityState = 0
66
else
67
if player[currentPlayer].gravity == GRAVITY_GROUND
68
if player[currentPlayer].xvel > -0x20000
69
player[currentPlayer].speed = -0x20000
70
end if
71
end if
72
73
CheckEqual(player[currentPlayer].state, CNZSetup_Player_TubeRoll)
74
temp0 = checkResult
75
CheckEqual(player[currentPlayer].state, CNZSetup_Player_TubeAirRoll)
76
temp0 |= checkResult
77
if temp0 == true
78
player[currentPlayer].state = Player_State_Roll
79
player[currentPlayer].animation = ANI_JUMPING
80
end if
81
end if
82
break
83
84
case FLIP_X
85
if player[currentPlayer].xvel < 0
86
if player[currentPlayer].animation != ANI_JUMPING
87
if player[currentPlayer].state != CNZSetup_Player_TubeRoll
88
PlaySfx(SfxName[Rolling], false)
89
end if
90
end if
91
92
if player[currentPlayer].state == Player_State_GlideLeft
93
FlipSign(player[currentPlayer].speed)
94
end if
95
96
player[currentPlayer].direction = FACING_LEFT
97
player[currentPlayer].state = CNZSetup_Player_TubeRoll
98
player[currentPlayer].animation = ANI_JUMPING
99
if player[currentPlayer].collisionDisabled == true
100
player[currentPlayer].collisionDisabled = false
101
end if
102
103
player[currentPlayer].jumpAbilityState = 0
104
else
105
if player[currentPlayer].gravity == GRAVITY_GROUND
106
if player[currentPlayer].xvel < 0x20000
107
player[currentPlayer].speed = 0x20000
108
end if
109
end if
110
111
CheckEqual(player[currentPlayer].state, CNZSetup_Player_TubeRoll)
112
temp0 = checkResult
113
CheckEqual(player[currentPlayer].state, CNZSetup_Player_TubeAirRoll)
114
temp0 |= checkResult
115
if temp0 == true
116
player[currentPlayer].state = Player_State_Roll
117
player[currentPlayer].animation = ANI_JUMPING
118
end if
119
end if
120
break
121
end switch
122
end if
123
end if
124
next
125
end event
126
127
128
event ObjectStartup
129
LoadSpriteSheet("Global/Display.gif")
130
SpriteFrame(-8, -8, 16, 16, 127, 113)
131
SpriteFrame(-8, -8, 16, 16, 144, 113)
132
133
foreach (TypeName[Spinner V], arrayPos0, ALL_ENTITIES)
134
temp0 = object[arrayPos0].propertyValue
135
temp0 &= 3
136
temp0 += 2
137
object[arrayPos0].hitboxT = 1
138
object[arrayPos0].hitboxT <<= temp0
139
object[arrayPos0].hitboxT <<= 3
140
object[arrayPos0].hitboxB = object[arrayPos0].hitboxT
141
FlipSign(object[arrayPos0].hitboxT)
142
143
GetBit(object[arrayPos0].direction, object[arrayPos0].propertyValue, 2)
144
next
145
end event
146
147
148
event ObjectDraw
149
if player[0].type == TypeName[Debug Mode]
150
temp1 = object.propertyValue
151
temp1 &= 3
152
temp1 += 2
153
154
temp0 = 1
155
temp0 <<= temp1
156
temp1 = temp0
157
temp0 <<= 19
158
FlipSign(temp0)
159
temp0 += object.ypos
160
temp0 += 0x80000
161
162
GetBit(temp2, object.propertyValue, 2)
163
164
temp3 = 0
165
while temp3 < temp1
166
DrawSpriteXY(temp2, object.xpos, temp0)
167
temp0 += 0x100000
168
temp3++
169
loop
170
171
if temp1 == 0
172
DrawSprite(temp2)
173
end if
174
end if
175
end event
176
177
178
// ========================
179
// Editor Events
180
// ========================
181
182
event RSDKEdit
183
if editor.returnVariable == true
184
switch editor.variableID
185
case EDIT_VAR_PROPVAL // property value
186
checkResult = object.propertyValue
187
break
188
189
case 0 // size
190
checkResult = object.propertyValue
191
checkResult &= 3
192
break
193
194
case 1 // type
195
GetBit(checkResult, object.propertyValue, 2)
196
break
197
198
end switch
199
else
200
switch editor.variableID
201
case EDIT_VAR_PROPVAL // property value
202
object.propertyValue = editor.variableValue
203
break
204
205
case 0 // size
206
temp1 = 3
207
Not(temp1)
208
object.propertyValue &= temp1
209
210
temp0 = editor.variableValue
211
temp0 &= 3
212
object.propertyValue |= temp0
213
break
214
215
case 1 // type
216
CheckNotEqual(editor.variableValue, false)
217
SetBit(object.propertyValue, 2, checkResult)
218
break
219
220
end switch
221
end if
222
end event
223
224
225
event RSDKDraw
226
temp1 = object.propertyValue
227
temp1 &= 3
228
temp1 += 2
229
230
temp0 = 1
231
temp0 <<= temp1
232
temp1 = temp0
233
temp0 <<= 19
234
FlipSign(temp0)
235
temp0 += object.ypos
236
temp0 += 0x80000
237
238
GetBit(temp2, object.propertyValue, 2)
239
240
temp3 = 0
241
while temp3 < temp1
242
DrawSpriteXY(temp2, object.xpos, temp0)
243
temp0 += 0x100000
244
temp3++
245
loop
246
247
if temp1 == 0
248
DrawSprite(temp2)
249
end if
250
end event
251
252
253
event RSDKLoad
254
LoadSpriteSheet("Global/Display.gif")
255
SpriteFrame(-8, -8, 16, 16, 127, 113)
256
SpriteFrame(-8, -8, 16, 16, 144, 113)
257
258
AddEditorVariable("size")
259
SetActiveVariable("size")
260
AddEnumVariable("4 Nodes", 0)
261
AddEnumVariable("8 Nodes", 1)
262
AddEnumVariable("16 Nodes", 2)
263
AddEnumVariable("32 Nodes", 3)
264
265
AddEditorVariable("type")
266
SetActiveVariable("type")
267
AddEnumVariable("Enter From Left, Exit From Right", 0)
268
AddEnumVariable("Enter From Right, Exit From Left", 1)
269
end event
270
271