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/SYZ/Bumper.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Bumper 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.timer
13
private alias object.value1 : object.bumpCount
14
15
private alias 0 : BUMPER_IDLE
16
private alias 1 : BUMPER_BUMPED
17
18
// Player Aliases
19
private alias object.state : player.state
20
private alias object.xpos : player.xpos
21
private alias object.ypos : player.ypos
22
private alias object.xvel : player.xvel
23
private alias object.yvel : player.yvel
24
private alias object.speed : player.speed
25
private alias object.gravity : player.gravity
26
private alias object.animation : player.animation
27
private alias object.tileCollisions : player.tileCollisions
28
private alias object.value1 : player.timer
29
private alias object.value36 : player.flyCarryTimer
30
private alias object.value40 : player.hitboxLeft
31
private alias object.value38 : player.hitboxTop
32
private alias object.value41 : player.hitboxRight
33
private alias object.value39 : player.hitboxBottom
34
35
36
// ========================
37
// Function Declarations
38
// ========================
39
40
reserve function Bumper_DebugDraw
41
reserve function Bumper_DebugSpawn
42
43
44
// ========================
45
// Function Definitions
46
// ========================
47
48
private function Bumper_DebugDraw
49
DrawSprite(0)
50
end function
51
52
53
private function Bumper_DebugSpawn
54
CreateTempObject(TypeName[Bumper], 0, object.xpos, object.ypos)
55
object[tempObjectPos].drawOrder = 4
56
end function
57
58
59
// ========================
60
// Events
61
// ========================
62
63
event ObjectUpdate
64
if object.state > BUMPER_IDLE
65
object.frame = object.timer
66
object.frame /= 5
67
object.frame++
68
object.timer++
69
70
if object.timer > 22
71
object.timer = 0
72
object.state = BUMPER_IDLE
73
object.frame = 0
74
end if
75
end if
76
77
if object.outOfBounds == true
78
object.bumpCount = 0
79
object.priority = PRIORITY_BOUNDS
80
end if
81
82
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
83
if player[currentPlayer].animation != ANI_HURT
84
BoxCollisionTest(C_TOUCH, object.entityPos, -7, -6, 7, 6, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)
85
if checkResult == true
86
if object.state == BUMPER_IDLE
87
PlaySfx(SfxName[Bumper], false)
88
if object.bumpCount < 5
89
CreateTempObject(TypeName[Object Score], 16, object.xpos, object.ypos)
90
player.score += 10
91
object.bumpCount++
92
end if
93
end if
94
95
if object.timer > 5
96
PlaySfx(SfxName[Bumper], false)
97
end if
98
99
object.state = BUMPER_BUMPED
100
object.priority = PRIORITY_ACTIVE
101
temp0 = player[currentPlayer].xpos
102
temp0 -= object.xpos
103
temp1 = player[currentPlayer].ypos
104
temp1 -= object.ypos
105
ATan2(temp2, temp0, temp1)
106
Cos256(temp0, temp2)
107
Sin256(temp1, temp2)
108
temp0 *= 0x700
109
temp1 *= 0x700
110
if player[currentPlayer].state == Player_State_Carried
111
player[1].flyCarryTimer = 30
112
end if
113
114
CheckEqual(player[currentPlayer].animation, ANI_GLIDING)
115
temp2 = checkResult
116
CheckEqual(player[currentPlayer].animation, ANI_GLIDING_STOP)
117
temp2 |= checkResult
118
CheckEqual(player[currentPlayer].animation, ANI_FLYING)
119
temp2 |= checkResult
120
if temp2 == false
121
#platform: USE_STANDALONE
122
player[currentPlayer].state = Player_State_Air
123
#endplatform
124
#platform: USE_ORIGINS
125
player[currentPlayer].state = Player_State_Air_NoDropDash
126
#endplatform
127
// Bug Details:
128
// This code wasn't updated in Origins Plus to include ANI_HAMMER_JUMP, so
129
// Amy will always start walking if she hits a Bumper with her hammer out
130
if player[currentPlayer].animation != ANI_JUMPING
131
if player[currentPlayer].animation != ANI_RUNNING
132
player[currentPlayer].animation = ANI_WALKING
133
end if
134
end if
135
end if
136
137
if player[currentPlayer].animation != ANI_GLIDING
138
player[currentPlayer].xvel = temp0
139
player[currentPlayer].speed = player[currentPlayer].xvel
140
player[currentPlayer].timer = 0
141
end if
142
143
player[currentPlayer].yvel = temp1
144
player[currentPlayer].gravity = GRAVITY_AIR
145
player[currentPlayer].tileCollisions = true
146
end if
147
end if
148
next
149
end event
150
151
152
event ObjectDraw
153
DrawSprite(object.frame)
154
end event
155
156
157
event ObjectStartup
158
LoadSpriteSheet("SYZ/Objects.gif")
159
SpriteFrame(-14, -14, 28, 28, 1, 131)
160
SpriteFrame(-12, -12, 24, 24, 30, 131)
161
SpriteFrame(-16, -16, 32, 32, 55, 131)
162
SpriteFrame(-12, -12, 24, 24, 30, 131)
163
SpriteFrame(-16, -16, 32, 32, 55, 131)
164
SpriteFrame(-16, -16, 32, 32, 55, 131) // This last frame isn't really used, it seems
165
166
foreach (TypeName[Bumper], arrayPos0, ALL_ENTITIES)
167
object[arrayPos0].drawOrder = 4
168
next
169
170
SetTableValue(TypeName[Bumper], DebugMode_ObjCount, DebugMode_TypesTable)
171
SetTableValue(Bumper_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
172
SetTableValue(Bumper_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
173
DebugMode_ObjCount++
174
end event
175
176
177
// ========================
178
// Editor Events
179
// ========================
180
181
event RSDKDraw
182
DrawSprite(0)
183
end event
184
185
186
event RSDKLoad
187
LoadSpriteSheet("SYZ/Objects.gif")
188
SpriteFrame(-14, -14, 28, 28, 1, 131)
189
190
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
191
end event
192
193