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/Pocky.txt
1482 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Pocky 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 0x20000 : ANIMAL_XVEL
26
private alias -0x40000 : 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 Pocky_DebugDraw
40
reserve function Pocky_DebugSpawn
41
42
43
// ========================
44
// Function Definitions
45
// ========================
46
47
private function Pocky_DebugDraw
48
DrawSprite(2)
49
end function
50
51
52
private function Pocky_DebugSpawn
53
CreateTempObject(TypeName[Pocky], 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
84
if object.randomizeDir == true
85
object.drawOrder = 4
86
87
Rand(checkResult, 32)
88
if checkResult < 16
89
object.direction = FACING_LEFT
90
FlipSign(object.xvel)
91
end if
92
else
93
object.direction = FACING_LEFT
94
FlipSign(object.xvel)
95
end if
96
97
object.yvel = ANIMAL_YVEL
98
object.state++
99
end if
100
break
101
102
case ANIMAL_FALL
103
object.ypos += object.yvel
104
object.yvel += 0x3800
105
if object.yvel > 0
106
ObjectTileCollision(CSIDE_FLOOR, 0, 12, PATH_A)
107
if checkResult == true
108
object.yvel = ANIMAL_YVEL
109
object.state++
110
end if
111
end if
112
break
113
114
case ANIMAL_BOUNCING_FOLLOW
115
if player[0].xpos < object.xpos
116
object.direction = FACING_LEFT
117
else
118
object.direction = FACING_RIGHT
119
end if
120
// [Fallthrough]
121
case ANIMAL_BOUNCING_PLACED
122
case ANIMAL_BOUNCING_FIXED
123
case ANIMAL_BOUNCING_FREE
124
object.xpos += object.xvel
125
object.ypos += object.yvel
126
object.yvel += 0x3800
127
128
if object.yvel > 0
129
ObjectTileCollision(CSIDE_FLOOR, 0, 12, PATH_A)
130
if checkResult == true
131
if object.state == ANIMAL_BOUNCING_FIXED
132
if object.bounceDir == FACING_LEFT
133
FlipSign(object.xvel)
134
object.direction ^= FACING_LEFT
135
end if
136
137
object.bounceDir ^= FACING_LEFT
138
end if
139
140
object.yvel = ANIMAL_YVEL
141
end if
142
end if
143
break
144
145
end switch
146
147
if object.state < ANIMAL_BOUNCING_FIXED
148
if object.outOfBounds == true
149
object.type = TypeName[Blank Object]
150
end if
151
end if
152
end event
153
154
155
event ObjectDraw
156
switch object.state
157
case ANIMAL_WAIT
158
case ANIMAL_FALL
159
DrawSprite(2)
160
break
161
162
case ANIMAL_BOUNCING_PLACED
163
case ANIMAL_BOUNCING_FIXED
164
case ANIMAL_BOUNCING_FOLLOW
165
case ANIMAL_BOUNCING_FREE
166
if object.yvel < 0
167
DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
168
else
169
DrawSpriteFX(1, FX_FLIP, object.xpos, object.ypos)
170
end if
171
break
172
173
end switch
174
end event
175
176
177
event ObjectStartup
178
LoadSpriteSheet("Global/Items.gif")
179
SpriteFrame(-8, -12, 16, 24, 183, 26)
180
SpriteFrame(-8, -12, 16, 24, 183, 51)
181
SpriteFrame(-7, -12, 16, 24, 183, 1)
182
183
foreach (TypeName[Pocky], arrayPos0, ALL_ENTITIES)
184
if object[arrayPos0].propertyValue == 1
185
object[arrayPos0].state = ANIMAL_BOUNCING_FIXED
186
object[arrayPos0].xvel = ANIMAL_XVEL
187
object[arrayPos0].yvel = ANIMAL_YVEL
188
189
Rand(checkResult, 32)
190
if checkResult < 16
191
object[arrayPos0].direction = FACING_LEFT
192
FlipSign(object[arrayPos0].xvel)
193
end if
194
else
195
if object[arrayPos0].propertyValue == 2
196
object[arrayPos0].state = ANIMAL_BOUNCING_FOLLOW
197
end if
198
199
if object[arrayPos0].propertyValue == 3
200
object[arrayPos0].state = ANIMAL_BOUNCING_FREE
201
object[arrayPos0].xvel = ANIMAL_XVEL
202
FlipSign(object[arrayPos0].xvel)
203
object[arrayPos0].direction = FACING_LEFT
204
end if
205
end if
206
207
object[arrayPos0].propertyValue = 0
208
next
209
210
SetTableValue(TypeName[Pocky], DebugMode_ObjCount, DebugMode_TypesTable)
211
SetTableValue(Pocky_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
212
SetTableValue(Pocky_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
213
DebugMode_ObjCount++
214
end event
215
216
217
// ========================
218
// Editor Events
219
// ========================
220
221
event RSDKEdit
222
if editor.returnVariable == true
223
switch editor.variableID
224
case EDIT_VAR_PROPVAL // property value
225
checkResult = object.propertyValue
226
break
227
228
case 0 // behaviour
229
checkResult = object.propertyValue
230
break
231
232
end switch
233
else
234
switch editor.variableID
235
case EDIT_VAR_PROPVAL // property value
236
object.propertyValue = editor.variableValue
237
break
238
239
case 0 // behaviour
240
object.propertyValue = editor.variableValue
241
break
242
243
end switch
244
end if
245
end event
246
247
248
event RSDKDraw
249
DrawSprite(0)
250
end event
251
252
253
event RSDKLoad
254
LoadSpriteSheet("Global/Items.gif")
255
SpriteFrame(-7, -12, 16, 24, 183, 1)
256
257
AddEditorVariable("behavior")
258
SetActiveVariable("behavior")
259
AddEnumVariable("Placed", 0)
260
AddEnumVariable("Fixed", 1)
261
AddEnumVariable("Follow", 2)
262
AddEnumVariable("Free", 3)
263
end event
264
265