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/HPZ/TubeSwitch.txt
1479 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Tube Switch 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.inTube // I dont really know what the point of this variable is but alright I guess
13
14
private alias 0 : TUBESWITCH_R_ENTRY
15
private alias 1 : TUBESWITCH_L_ENTRY
16
private alias 2 : TUBESWITCH_RWALL_ENTRY
17
private alias 3 : TUBESWITCH_LWALL_ENTRY
18
19
// Player Aliases
20
private alias object.state : player.state
21
private alias object.speed : player.speed
22
private alias object.xvel : player.xvel
23
private alias object.yvel : player.yvel
24
private alias object.gravity : player.gravity
25
private alias object.direction : player.direction
26
private alias object.animation : player.animation
27
private alias object.collisionMode : player.collisionMode
28
private alias object.angle : player.angle
29
private alias object.value34 : player.collisionDisabled
30
31
32
// ========================
33
// Events
34
// ========================
35
36
event ObjectUpdate
37
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
38
if player[currentPlayer].collisionDisabled == true
39
player[currentPlayer].collisionDisabled = false
40
end if
41
42
CheckEqual(player[currentPlayer].state, Player_State_Death)
43
temp0 = checkResult
44
CheckEqual(player[currentPlayer].state, Player_State_LedgePullUp)
45
temp0 |= checkResult
46
CheckEqual(player[currentPlayer].state, Player_State_Climb)
47
temp0 |= checkResult
48
if temp0 == false
49
BoxCollisionTest(C_TOUCH, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
50
if checkResult == true
51
if player[currentPlayer].yvel < 0
52
player[currentPlayer].yvel = 0
53
end if
54
55
switch object.propertyValue
56
case TUBESWITCH_R_ENTRY // Enter from the right, exit from the left
57
if player[currentPlayer].xvel > 0
58
if player[currentPlayer].animation != ANI_JUMPING
59
if player[currentPlayer].state != Player_State_TubeRoll
60
PlaySfx(SfxName[Rolling], false)
61
end if
62
end if
63
64
if player[currentPlayer].state == Player_State_GlideLeft
65
FlipSign(player[currentPlayer].speed)
66
end if
67
68
player[currentPlayer].direction = FACING_RIGHT
69
player[currentPlayer].state = Player_State_TubeRoll
70
player[currentPlayer].animation = ANI_JUMPING
71
else
72
if player[currentPlayer].gravity == GRAVITY_GROUND
73
if player[currentPlayer].xvel > -0x20000
74
player[currentPlayer].speed = -0x20000
75
end if
76
end if
77
78
player[currentPlayer].state = Player_State_Roll
79
player[currentPlayer].animation = ANI_JUMPING
80
end if
81
break
82
83
case TUBESWITCH_L_ENTRY // Enter from the left, exit from the right
84
if player[currentPlayer].xvel < 0
85
if player[currentPlayer].animation != ANI_JUMPING
86
if player[currentPlayer].state != Player_State_TubeRoll
87
PlaySfx(SfxName[Rolling], false)
88
end if
89
end if
90
91
if player[currentPlayer].state == Player_State_GlideLeft
92
FlipSign(player[currentPlayer].speed)
93
end if
94
95
player[currentPlayer].direction = FACING_LEFT
96
player[currentPlayer].state = Player_State_TubeRoll
97
player[currentPlayer].animation = ANI_JUMPING
98
else
99
if player[currentPlayer].gravity == GRAVITY_GROUND
100
if player[currentPlayer].xvel < 0x20000
101
player[currentPlayer].speed = 0x20000
102
end if
103
end if
104
105
player[currentPlayer].state = Player_State_Roll
106
player[currentPlayer].animation = ANI_JUMPING
107
end if
108
break
109
110
case 2
111
if player[currentPlayer].gravity == GRAVITY_AIR
112
if player[currentPlayer].yvel > 0
113
player[currentPlayer].animation = ANI_JUMPING
114
player[currentPlayer].state = Player_State_TubeRoll
115
player[currentPlayer].gravity = GRAVITY_GROUND
116
player[currentPlayer].speed = player[currentPlayer].yvel
117
player[currentPlayer].collisionMode = CMODE_RWALL
118
player[currentPlayer].angle = 0x40
119
PlaySfx(SfxName[Rolling], false)
120
end if
121
end if
122
break
123
124
case 3
125
if player[currentPlayer].gravity == GRAVITY_AIR
126
if player[currentPlayer].yvel > 0
127
player[currentPlayer].animation = ANI_JUMPING
128
player[currentPlayer].state = Player_State_TubeRoll
129
player[currentPlayer].gravity = GRAVITY_GROUND
130
player[currentPlayer].speed = player[currentPlayer].yvel
131
FlipSign(player[currentPlayer].speed)
132
player[currentPlayer].collisionMode = CMODE_LWALL
133
player[currentPlayer].angle = 0xC0
134
PlaySfx(SfxName[Rolling], false)
135
end if
136
end if
137
break
138
end switch
139
140
object.inTube = true
141
else
142
object.inTube = false
143
end if
144
end if
145
next
146
end event
147
148
149
// ========================
150
// Editor Events
151
// ========================
152
153
event RSDKEdit
154
if editor.returnVariable == true
155
switch editor.variableID
156
case EDIT_VAR_PROPVAL // property value
157
checkResult = object.propertyValue
158
break
159
160
case 0 // type
161
checkResult = object.propertyValue
162
break
163
164
end switch
165
else
166
switch editor.variableID
167
case EDIT_VAR_PROPVAL // property value
168
object.propertyValue = editor.variableValue
169
break
170
171
case 0 // type
172
object.propertyValue = editor.variableValue
173
break
174
175
end switch
176
end if
177
end event
178
179
180
event RSDKDraw
181
DrawSprite(0)
182
end event
183
184
185
event RSDKLoad
186
LoadSpriteSheet("Global/Display.gif")
187
SpriteFrame(-16, -16, 32, 32, 1, 143)
188
189
AddEditorVariable("type")
190
SetActiveVariable("type")
191
AddEnumVariable("Enter From Right, Exit From Left", 0)
192
AddEnumVariable("Enter From Left, Exit From Right", 1)
193
AddEnumVariable("Enter From Top, Stick to RWall", 2)
194
AddEnumVariable("Enter From Top, Stick to LWall", 3)
195
end event
196
197