Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 1/Scripts/GHZ/TubeSwitch.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
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
17
// Player Aliases
18
private alias object.state : player.state
19
private alias object.speed : player.speed
20
private alias object.xvel : player.xvel
21
private alias object.yvel : player.yvel
22
private alias object.gravity : player.gravity
23
private alias object.direction : player.direction
24
private alias object.animation : player.animation
25
private alias object.value34 : player.collisionDisabled
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
CheckEqual(player[currentPlayer].state, Player_State_Climb)
43
temp0 |= checkResult
44
if temp0 == 0
45
BoxCollisionTest(C_TOUCH, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
46
if checkResult == true
47
48
if player[currentPlayer].yvel < 0
49
player[currentPlayer].yvel = 0
50
end if
51
52
switch object.propertyValue
53
case TUBESWITCH_R_ENTRY // Enter from the right, exit from the left
54
if player[currentPlayer].xvel > 0
55
if player[currentPlayer].animation != ANI_JUMPING
56
if player[currentPlayer].state != Player_State_TubeRoll
57
PlaySfx(SfxName[Rolling], false)
58
end if
59
end if
60
61
if player[currentPlayer].state == Player_State_GlideLeft
62
FlipSign(player[currentPlayer].speed)
63
end if
64
65
player[currentPlayer].direction = FACING_RIGHT
66
player[currentPlayer].state = Player_State_TubeRoll
67
player[currentPlayer].animation = ANI_JUMPING
68
else
69
if player[currentPlayer].gravity == 0
70
if player[currentPlayer].xvel > -0x20000
71
player[currentPlayer].speed = -0x20000
72
end if
73
end if
74
75
player[currentPlayer].state = Player_State_Roll
76
player[currentPlayer].animation = ANI_JUMPING
77
end if
78
break
79
80
case TUBESWITCH_L_ENTRY // Enter from the left, exit from the right
81
if player[currentPlayer].xvel < 0
82
if player[currentPlayer].animation != ANI_JUMPING
83
if player[currentPlayer].state != Player_State_TubeRoll
84
PlaySfx(SfxName[Rolling], false)
85
end if
86
end if
87
88
if player[currentPlayer].state == Player_State_GlideLeft
89
FlipSign(player[currentPlayer].speed)
90
end if
91
92
player[currentPlayer].direction = FACING_LEFT
93
player[currentPlayer].state = Player_State_TubeRoll
94
player[currentPlayer].animation = ANI_JUMPING
95
else
96
if player[currentPlayer].gravity == 0
97
if player[currentPlayer].xvel < 0x20000
98
player[currentPlayer].speed = 0x20000
99
end if
100
end if
101
102
player[currentPlayer].state = Player_State_Roll
103
player[currentPlayer].animation = ANI_JUMPING
104
end if
105
break
106
107
end switch
108
109
object.inTube = true
110
else
111
object.inTube = false
112
end if
113
end if
114
next
115
end event
116
117
118
// ========================
119
// Editor Events
120
// ========================
121
122
event RSDKEdit
123
if editor.returnVariable == true
124
switch editor.variableID
125
case EDIT_VAR_PROPVAL // property value
126
checkResult = object.propertyValue
127
break
128
129
case 0 // type
130
checkResult = object.propertyValue
131
break
132
133
end switch
134
else
135
switch editor.variableID
136
case EDIT_VAR_PROPVAL // property value
137
object.propertyValue = editor.variableValue
138
break
139
140
case 0 // type
141
object.propertyValue = editor.variableValue
142
break
143
144
end switch
145
end if
146
end event
147
148
149
event RSDKDraw
150
// object doesn't have a debug view, this is custom
151
152
temp0 = object.xpos
153
temp0 -= 0x80000
154
temp1 = object.ypos
155
temp1 -= 0x80000
156
157
DrawSpriteXY(0, temp0, temp1)
158
159
temp0 += 0x100000
160
DrawSpriteXY(0, temp0, temp1)
161
162
temp1 += 0x100000
163
DrawSpriteXY(0, temp0, temp1)
164
165
temp0 -= 0x100000
166
DrawSpriteXY(0, temp0, temp1)
167
168
169
// editor.drawingOverlay is intentionally being skipped over here
170
171
// draw the tubeswitch hitbox size
172
temp0 = 16; temp1 = 16; temp2 = 16; temp3 = 16;
173
CallFunction(EditorHelpers_DrawHitbox)
174
end event
175
176
177
event RSDKLoad
178
LoadSpriteSheet("Global/Display.gif")
179
SpriteFrame(-8, -8, 16, 16, 239, 239)
180
181
AddEditorVariable("type")
182
SetActiveVariable("type")
183
AddEnumVariable("Enter From Right, Exit From Left", 0)
184
AddEnumVariable("Enter From Left, Exit From Right", 1)
185
end event
186
187