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