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/SBZ/JunctionWheel.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Junction Wheel Object
4
// Script Author: Christian Whitehead/Simon Thomley
5
// Unpacked by Rubberduckycooly's script unpacker
6
// ----------------------------------
7
8
// ========================
9
// Aliases
10
// ========================
11
12
// value0 is unused
13
private alias object.value1 : object.spinDir
14
private alias object.value2 : object.directionChanged
15
16
// Player Aliases
17
private alias object.type : player.type
18
private alias object.state : player.state
19
private alias object.xpos : player.xpos
20
private alias object.ypos : player.ypos
21
private alias object.xvel : player.xvel
22
private alias object.yvel : player.yvel
23
private alias object.speed : player.speed
24
private alias object.gravity : player.gravity
25
private alias object.animationSpeed : player.animationSpeed
26
private alias object.animation : player.animation
27
private alias object.tileCollisions : player.tileCollisions
28
29
// Button Aliases
30
private alias object.value0 : PushButton.stood
31
32
33
// ========================
34
// Function Declarations
35
// ========================
36
37
reserve function JunctionWheel_DebugDraw
38
reserve function JunctionWheel_DebugSpawn
39
reserve function JunctionWheel_HandleWheelMove
40
41
42
// ========================
43
// Tables
44
// ========================
45
46
private function JunctionWheel_DebugDraw
47
DrawSprite(0)
48
end function
49
50
51
private function JunctionWheel_DebugSpawn
52
CreateTempObject(TypeName[Junction Wheel], 0, object.xpos, object.ypos)
53
end function
54
55
56
private function JunctionWheel_HandleWheelMove
57
Cos(player[currentPlayer].xpos, object.rotation)
58
player[currentPlayer].xpos *= player[currentPlayer].speed
59
player[currentPlayer].xpos += object.xpos
60
61
Sin(player[currentPlayer].ypos, object.rotation)
62
player[currentPlayer].ypos *= player[currentPlayer].speed
63
player[currentPlayer].ypos += object.ypos
64
65
if player[currentPlayer].speed < -0x1000
66
player[currentPlayer].speed += 512
67
end if
68
end function
69
70
71
// ========================
72
// Events
73
// ========================
74
75
event ObjectUpdate
76
if PushButton[-1].stood == true
77
if object.directionChanged == false
78
object.directionChanged = true
79
object.spinDir ^= 1
80
end if
81
else
82
object.directionChanged = false
83
end if
84
85
if object.spinDir == 0
86
object.rotation -= 4
87
else
88
object.rotation += 4
89
end if
90
object.rotation &= 0x1FF
91
92
temp0 = object.rotation
93
temp0 += 0x30
94
temp0 &= 0x1FF
95
temp0 >>= 6
96
97
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
98
if player[currentPlayer].state != Player_State_Static
99
switch temp0
100
case 1
101
BoxCollisionTest(C_TOUCH, object.entityPos, -40, -40, -16, -8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
102
if checkResult == true
103
PlaySfx(SfxName[Rolling], false)
104
player[currentPlayer].state = Player_State_Static
105
player[currentPlayer].animation = ANI_JUMPING
106
player[currentPlayer].animationSpeed = 0xF0
107
player[currentPlayer].tileCollisions = false
108
player[currentPlayer].gravity = GRAVITY_AIR
109
player[currentPlayer].speed = -0x1C00
110
end if
111
112
BoxCollisionTest(C_SOLID, object.entityPos, 16, -56, 40, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
113
if player[currentPlayer].yvel < 0
114
BoxCollisionTest(C_SOLID, object.entityPos, -40, 32, 40, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
115
end if
116
break
117
118
case 0
119
case 2
120
case 3
121
case 4
122
case 6
123
case 7
124
BoxCollisionTest(C_SOLID, object.entityPos, -40, -56, -16, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
125
BoxCollisionTest(C_SOLID, object.entityPos, 16, -56, 40, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
126
if player[currentPlayer].yvel < 0
127
BoxCollisionTest(C_SOLID, object.entityPos, -40, 32, 40, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
128
end if
129
break
130
131
case 5
132
if player[currentPlayer].xvel < 0
133
BoxCollisionTest(C_TOUCH, object.entityPos, 16, 8, 38, 40, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
134
if checkResult == true
135
PlaySfx(SfxName[Rolling], false)
136
player[currentPlayer].state = Player_State_Static
137
player[currentPlayer].animation = ANI_JUMPING
138
player[currentPlayer].animationSpeed = 0xF0
139
player[currentPlayer].tileCollisions = false
140
player[currentPlayer].gravity = GRAVITY_AIR
141
player[currentPlayer].speed = -0x1800
142
end if
143
end if
144
145
BoxCollisionTest(C_SOLID, object.entityPos, -40, -56, -16, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
146
if player[currentPlayer].yvel < 0
147
BoxCollisionTest(C_SOLID, object.entityPos, -40, 32, 40, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
148
end if
149
break
150
end switch
151
else
152
if player[currentPlayer].type != TypeName[Debug Mode]
153
CallFunction(JunctionWheel_HandleWheelMove)
154
if player[currentPlayer].speed == -0x1000
155
if object.rotation == 0x180
156
#platform: USE_STANDALONE
157
player[currentPlayer].state = Player_State_Air
158
#endplatform
159
#platform: USE_ORIGINS
160
player[currentPlayer].state = Player_State_Air_NoDropDash
161
#endplatform
162
player[currentPlayer].animation = ANI_JUMPING
163
player[currentPlayer].tileCollisions = true
164
player[currentPlayer].speed = 0
165
player[currentPlayer].xvel = 0
166
player[currentPlayer].yvel = 0x80000
167
player[currentPlayer].gravity = GRAVITY_AIR
168
PlaySfx(SfxName[Release], false)
169
end if
170
171
if object.spinDir == 1
172
if object.rotation == 0x11C
173
#platform: USE_STANDALONE
174
player[currentPlayer].state = Player_State_Air
175
#endplatform
176
#platform: USE_ORIGINS
177
player[currentPlayer].state = Player_State_Air_NoDropDash
178
#endplatform
179
player[currentPlayer].animation = ANI_JUMPING
180
player[currentPlayer].tileCollisions = true
181
player[currentPlayer].speed = 0x80000
182
player[currentPlayer].xvel = 0x80000
183
player[currentPlayer].yvel = 0x40000
184
player[currentPlayer].gravity = GRAVITY_AIR
185
PlaySfx(SfxName[Release], false)
186
end if
187
end if
188
end if
189
end if
190
end if
191
next
192
end event
193
194
195
event ObjectDraw
196
DrawSpriteFX(0, FX_ROTATE, object.xpos, object.ypos)
197
DrawSprite(1)
198
end event
199
200
201
event ObjectStartup
202
LoadSpriteSheet("SBZ/Objects.gif")
203
SpriteFrame(-56, -24, 48, 48, 1, 261)
204
SpriteFrame(-56, -56, 112, 112, 399, 284)
205
206
SetTableValue(TypeName[Junction Wheel], DebugMode_ObjCount, DebugMode_TypesTable)
207
SetTableValue(JunctionWheel_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
208
SetTableValue(JunctionWheel_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
209
DebugMode_ObjCount++
210
end event
211
212
213
// ========================
214
// Editor Events
215
// ========================
216
217
event RSDKDraw
218
DrawSprite(0)
219
end event
220
221
222
event RSDKLoad
223
LoadSpriteSheet("SBZ/Objects.gif")
224
SpriteFrame(-56, -24, 48, 48, 1, 261)
225
226
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
227
end event
228
229