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/Animals/Rocky.txt
1482 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Rocky 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.propertyValue : object.delay
13
14
private alias object.value0 : object.timer // its this in ANIMAL_WAIT
15
private alias object.value0 : object.bounceDir // its this in every other state
16
private alias object.value1 : object.randomizeDir
17
18
private alias 0 : ANIMAL_WAIT
19
private alias 1 : ANIMAL_FALL
20
private alias 2 : ANIMAL_BOUNCING_PLACED
21
private alias 3 : ANIMAL_BOUNCING_FIXED
22
private alias 4 : ANIMAL_BOUNCING_FOLLOW
23
private alias 5 : ANIMAL_BOUNCING_FREE
24
25
private alias 0x14000 : ANIMAL_XVEL
26
private alias -0x18000 : ANIMAL_YVEL
27
28
// Player Aliases
29
private alias object.xpos : player.xpos
30
31
// Path ID Aliases
32
private alias 0 : PATH_A
33
34
35
// ========================
36
// Function Declarations
37
// ========================
38
39
reserve function Rocky_DebugDraw
40
reserve function Rocky_DebugSpawn
41
42
43
// ========================
44
// Function Definitions
45
// ========================
46
47
private function Rocky_DebugDraw
48
DrawSprite(2)
49
end function
50
51
52
private function Rocky_DebugSpawn
53
CreateTempObject(TypeName[Rocky], 0, object.xpos, object.ypos)
54
55
GetBit(temp0, object.direction, 0)
56
if temp0 == FACING_RIGHT
57
object[tempObjectPos].state = ANIMAL_BOUNCING_FIXED
58
object[tempObjectPos].xvel = ANIMAL_XVEL
59
object[tempObjectPos].yvel = ANIMAL_YVEL
60
61
Rand(checkResult, 32)
62
if checkResult < 16
63
object[tempObjectPos].direction = FACING_LEFT
64
FlipSign(object[tempObjectPos].xvel)
65
end if
66
else
67
object[tempObjectPos].state = ANIMAL_BOUNCING_FOLLOW
68
end if
69
end function
70
71
72
// ========================
73
// Events
74
// ========================
75
76
event ObjectUpdate
77
switch object.state
78
case ANIMAL_WAIT
79
if object.timer < object.delay
80
object.timer++
81
else
82
object.xvel = ANIMAL_XVEL
83
if object.randomizeDir == true
84
object.drawOrder = 4
85
Rand(checkResult, 32)
86
if checkResult < 16
87
object.direction = FACING_LEFT
88
FlipSign(object.xvel)
89
end if
90
else
91
object.direction = FACING_LEFT
92
FlipSign(object.xvel)
93
end if
94
95
object.yvel = -0x40000
96
object.state++
97
end if
98
break
99
100
case ANIMAL_FALL
101
object.ypos += object.yvel
102
object.yvel += 0x3800
103
if object.yvel > 0
104
ObjectTileCollision(CSIDE_FLOOR, 0, 8, PATH_A)
105
if checkResult == true
106
object.yvel = ANIMAL_YVEL
107
object.state++
108
end if
109
end if
110
break
111
112
case ANIMAL_BOUNCING_FOLLOW
113
if player[0].xpos < object.xpos
114
object.direction = FACING_LEFT
115
else
116
object.direction = FACING_RIGHT
117
end if
118
// [Fallthrough]
119
case ANIMAL_BOUNCING_PLACED
120
case ANIMAL_BOUNCING_FIXED
121
case ANIMAL_BOUNCING_FREE
122
object.xpos += object.xvel
123
object.ypos += object.yvel
124
object.yvel += 0x3800
125
126
if object.yvel > 0
127
ObjectTileCollision(CSIDE_FLOOR, 0, 8, PATH_A)
128
if checkResult == true
129
if object.state == ANIMAL_BOUNCING_FIXED
130
if object.bounceDir == FACING_LEFT
131
FlipSign(object.xvel)
132
object.direction ^= FACING_LEFT
133
end if
134
135
object.bounceDir ^= FACING_LEFT
136
end if
137
138
object.yvel = ANIMAL_YVEL
139
end if
140
end if
141
break
142
143
end switch
144
145
if object.state < ANIMAL_BOUNCING_FIXED
146
if object.outOfBounds == true
147
object.type = TypeName[Blank Object]
148
end if
149
end if
150
end event
151
152
153
event ObjectDraw
154
switch object.state
155
case ANIMAL_WAIT
156
case ANIMAL_FALL
157
DrawSprite(2)
158
break
159
160
case ANIMAL_BOUNCING_PLACED
161
case ANIMAL_BOUNCING_FIXED
162
case ANIMAL_BOUNCING_FOLLOW
163
case ANIMAL_BOUNCING_FREE
164
if object.yvel < 0
165
DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
166
else
167
DrawSpriteFX(1, FX_FLIP, object.xpos, object.ypos)
168
end if
169
break
170
171
end switch
172
end event
173
174
175
event ObjectStartup
176
LoadSpriteSheet("Global/Items2.gif")
177
SpriteFrame(-8, -8, 16, 16, 83, 91)
178
SpriteFrame(-8, -8, 16, 15, 83, 108)
179
SpriteFrame(-7, -12, 16, 24, 83, 66)
180
181
foreach (TypeName[Rocky], arrayPos0, ALL_ENTITIES)
182
if object[arrayPos0].propertyValue == 1
183
object[arrayPos0].state = ANIMAL_BOUNCING_FIXED
184
object[arrayPos0].xvel = ANIMAL_XVEL
185
object[arrayPos0].yvel = ANIMAL_YVEL
186
187
Rand(checkResult, 32)
188
if checkResult < 16
189
object[arrayPos0].direction = FACING_LEFT
190
FlipSign(object[arrayPos0].xvel)
191
end if
192
else
193
if object[arrayPos0].propertyValue == 2
194
object[arrayPos0].state = ANIMAL_BOUNCING_FOLLOW
195
end if
196
197
if object[arrayPos0].propertyValue == 3
198
object[arrayPos0].state = ANIMAL_BOUNCING_FREE
199
object[arrayPos0].xvel = ANIMAL_XVEL
200
FlipSign(object[arrayPos0].xvel)
201
object[arrayPos0].direction = FACING_LEFT
202
end if
203
end if
204
205
object[arrayPos0].propertyValue = 0
206
next
207
208
SetTableValue(TypeName[Rocky], DebugMode_ObjCount, DebugMode_TypesTable)
209
SetTableValue(Rocky_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
210
SetTableValue(Rocky_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
211
DebugMode_ObjCount++
212
end event
213
214
215
// ========================
216
// Editor Events
217
// ========================
218
219
event RSDKEdit
220
if editor.returnVariable == true
221
switch editor.variableID
222
case EDIT_VAR_PROPVAL // property value
223
checkResult = object.propertyValue
224
break
225
226
case 0 // behaviour
227
checkResult = object.propertyValue
228
break
229
230
end switch
231
else
232
switch editor.variableID
233
case EDIT_VAR_PROPVAL // property value
234
object.propertyValue = editor.variableValue
235
break
236
237
case 0 // behaviour
238
object.propertyValue = editor.variableValue
239
break
240
241
end switch
242
end if
243
end event
244
245
246
event RSDKDraw
247
DrawSprite(0)
248
end event
249
250
251
event RSDKLoad
252
LoadSpriteSheet("Global/Items2.gif")
253
SpriteFrame(-7, -12, 16, 24, 83, 66)
254
255
AddEditorVariable("behavior")
256
SetActiveVariable("behavior")
257
AddEnumVariable("Placed", 0)
258
AddEnumVariable("Fixed", 1)
259
AddEnumVariable("Follow", 2)
260
AddEnumVariable("Free", 3)
261
end event
262
263