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/RSpikeChain.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: R Spike Chain 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.rotationSpeed
13
private alias object.value1 : object.length
14
15
// Player Aliases
16
private alias object.value17 : debugMode.currentSelection
17
18
19
// ========================
20
// Function Declarations
21
// ========================
22
23
reserve function RSpikeChain_DebugDraw
24
reserve function RSpikeChain_DebugSpawn
25
26
27
// ========================
28
// Static Values
29
// ========================
30
31
private value RSpikeChain_startDebugID = 0
32
33
34
// ========================
35
// Function Definitions
36
// ========================
37
38
private function RSpikeChain_DebugDraw
39
DrawSprite(0)
40
41
temp0 = debugMode[0].currentSelection
42
temp0 -= RSpikeChain_startDebugID
43
44
switch temp0
45
case 0
46
case 1
47
temp0 = 4
48
break
49
50
case 2
51
case 3
52
temp0 = 2
53
break
54
55
end switch
56
57
temp1 = object.ypos
58
while temp0 > 0
59
temp1 -= 0x100000
60
DrawSpriteXY(1, object.xpos, temp1)
61
temp0--
62
loop
63
end function
64
65
66
private function RSpikeChain_DebugSpawn
67
CreateTempObject(TypeName[R Spike Chain], object.direction, object.xpos, object.ypos)
68
temp0 = debugMode[0].currentSelection
69
temp0 -= RSpikeChain_startDebugID
70
71
switch temp0
72
case 0
73
object[tempObjectPos].rotationSpeed = 5
74
object[tempObjectPos].length = 4
75
break
76
77
case 1
78
object[tempObjectPos].rotationSpeed = 2
79
object[tempObjectPos].length = 4
80
break
81
82
case 2
83
object[tempObjectPos].rotationSpeed = 2
84
object[tempObjectPos].length = 2
85
break
86
87
case 3
88
object[tempObjectPos].rotationSpeed = -2
89
object[tempObjectPos].length = 2
90
break
91
92
end switch
93
end function
94
95
96
// ========================
97
// Events
98
// ========================
99
100
event ObjectUpdate
101
object.angle += object.rotationSpeed
102
if object.angle < 0
103
object.angle += 0x200
104
end if
105
object.angle &= 0x1FF
106
107
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
108
temp0 = 0
109
temp1 = 16
110
temp2 = object.xpos
111
temp3 = object.ypos
112
113
while temp0 < object.length
114
Cos(object.xpos, object.angle)
115
object.xpos *= temp1
116
object.xpos <<= 7
117
object.xpos += temp2
118
119
Sin(object.ypos, object.angle)
120
object.ypos *= temp1
121
object.ypos <<= 7
122
object.ypos += temp3
123
124
BoxCollisionTest(C_TOUCH, object.entityPos, -8, -8, 8, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
125
if checkResult == true
126
CallFunction(Player_Hit)
127
end if
128
temp0++
129
temp1 += 16
130
loop
131
132
object.xpos = temp2
133
object.ypos = temp3
134
next
135
end event
136
137
138
event ObjectDraw
139
DrawSprite(0)
140
141
temp0 = 0
142
temp1 = 16
143
while temp0 < object.length
144
Cos(temp2, object.angle)
145
temp2 *= temp1
146
temp2 <<= 7
147
temp2 += object.xpos
148
149
Sin(temp3, object.angle)
150
temp3 *= temp1
151
temp3 <<= 7
152
temp3 += object.ypos
153
154
DrawSpriteXY(1, temp2, temp3)
155
156
temp0++
157
temp1 += 16
158
loop
159
end event
160
161
162
event ObjectStartup
163
LoadSpriteSheet("SYZ/Objects.gif")
164
165
foreach (TypeName[R Spike Chain], arrayPos0, ALL_ENTITIES)
166
switch object[arrayPos0].propertyValue
167
case 0
168
object[arrayPos0].rotationSpeed = 5
169
object[arrayPos0].length = 4
170
break
171
172
case 1
173
object[arrayPos0].rotationSpeed = 2
174
object[arrayPos0].length = 4
175
break
176
177
case 2
178
object[arrayPos0].rotationSpeed = 2
179
object[arrayPos0].length = 2
180
break
181
182
case 3
183
object[arrayPos0].rotationSpeed = -2
184
object[arrayPos0].length = 2
185
break
186
187
end switch
188
next
189
190
SpriteFrame(-8, -8, 16, 16, 88, 138)
191
SpriteFrame(-8, -8, 16, 16, 88, 138)
192
193
temp0 = 0
194
RSpikeChain_startDebugID = DebugMode_ObjCount
195
while temp0 < 4
196
SetTableValue(TypeName[R Spike Chain], DebugMode_ObjCount, DebugMode_TypesTable)
197
SetTableValue(RSpikeChain_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
198
SetTableValue(RSpikeChain_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
199
DebugMode_ObjCount++
200
temp0++
201
loop
202
end event
203
204
205
// ========================
206
// Editor Events
207
// ========================
208
209
event RSDKEdit
210
if editor.returnVariable == true
211
switch editor.variableID
212
case EDIT_VAR_PROPVAL // property value
213
checkResult = object.propertyValue
214
break
215
216
case 0 // type
217
checkResult = object.propertyValue
218
break
219
220
end switch
221
else
222
switch editor.variableID
223
case EDIT_VAR_PROPVAL // property value
224
object.propertyValue = editor.variableValue
225
break
226
227
case 0 // type
228
object.propertyValue = editor.variableValue
229
break
230
231
end switch
232
end if
233
end event
234
235
236
event RSDKDraw
237
switch object.propertyValue
238
default
239
case 0
240
object.rotationSpeed = 5
241
object.length = 4
242
break
243
244
case 1
245
object.rotationSpeed = 2
246
object.length = 4
247
break
248
249
case 2
250
object.rotationSpeed = 2
251
object.length = 2
252
break
253
254
case 3
255
object.rotationSpeed = -2
256
object.length = 2
257
break
258
259
end switch
260
261
DrawSprite(0)
262
263
temp0 = 0
264
temp1 = 16
265
while temp0 < object.length
266
Cos(temp2, object.angle)
267
temp2 *= temp1
268
temp2 <<= 7
269
temp2 += object.xpos
270
271
Sin(temp3, object.angle)
272
temp3 *= temp1
273
temp3 <<= 7
274
temp3 += object.ypos
275
276
DrawSpriteXY(1, temp2, temp3)
277
278
temp0++
279
temp1 += 16
280
loop
281
end event
282
283
284
event RSDKLoad
285
LoadSpriteSheet("SYZ/Objects.gif")
286
SpriteFrame(-8, -8, 16, 16, 88, 138)
287
SpriteFrame(-8, -8, 16, 16, 88, 138)
288
289
AddEditorVariable("type")
290
SetActiveVariable("type")
291
AddEnumVariable("Speed: Fast, Length: Long", 0)
292
AddEnumVariable("Speed: Slow, Length: Long", 1)
293
AddEnumVariable("Speed: Slow, Length: Short", 2)
294
AddEnumVariable("Speed: Slow (Reverse), Length: Short", 3)
295
end event
296
297