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