Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R4/LinkPlatforms.txt
1319 views
1
//---------------Sonic CD Link Platforms Script---------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value0 : Object.Angle
7
#alias Object.Value1 : Object.XDrawPos
8
#alias Object.Value2 : Object.YDrawPos
9
#alias Object.Value3 : Object.XOffset
10
#alias Object.Value4 : Object.YOffset
11
#alias Object.Value5 : Object.AngleIncrease
12
13
// Property Values
14
#alias 0 : CHAIN
15
#alias 1 : CLOCKWISE_MOVEMENT
16
#alias 2 : COUNTERCLOCKWISE_MOVEMENT
17
18
19
sub ObjectMain
20
Object.Angle += Object.AngleIncrease
21
if Object.Angle < 0
22
Object.Angle += 512
23
end if
24
Object.Angle &= 511
25
26
TempValue1 = 96
27
Cos(Object.XOffset, Object.Angle)
28
Object.XOffset *= TempValue1
29
Object.XOffset <<= 7
30
Object.XOffset += Object.XPos
31
Object.XOffset &= 0xFFFF0000 // Truncate the value
32
Object.XOffset -= Object.XDrawPos
33
34
Sin(Object.YOffset, Object.Angle)
35
Object.YOffset *= TempValue1
36
Object.YOffset <<= 7
37
Object.YOffset += Object.YPos
38
Object.YOffset &= 0xFFFF0000 // Truncate the value
39
Object.YOffset -= Object.YDrawPos
40
end sub
41
42
43
sub ObjectPlayerInteraction
44
if Object.Frame == 1
45
TempValue0 = Object.XPos
46
TempValue1 = Object.YPos
47
48
Object.XPos = Object.XDrawPos
49
Object.YPos = Object.YDrawPos
50
51
PlayerObjectCollision(C_PLATFORM, -32, -8, 32, 8)
52
if CheckResult == true
53
Player.XPos += Object.XOffset
54
Player.YPos += Object.YOffset
55
end if
56
57
Object.XPos = TempValue0
58
Object.YPos = TempValue1
59
end if
60
end sub
61
62
63
sub ObjectDraw
64
TempValue1 = 96
65
66
Cos(Object.XDrawPos, Object.Angle)
67
Object.XDrawPos *= TempValue1
68
Object.XDrawPos <<= 7
69
Object.XDrawPos += Object.XPos
70
Object.XDrawPos &= 0xFFFF0000 // Truncate the value
71
72
Sin(Object.YDrawPos, Object.Angle)
73
Object.YDrawPos *= TempValue1
74
Object.YDrawPos <<= 7
75
Object.YDrawPos += Object.YPos
76
Object.YDrawPos &= 0xFFFF0000 // Truncate the value
77
DrawSpriteXY(Object.Frame, Object.XDrawPos, Object.YDrawPos)
78
end sub
79
80
81
sub ObjectStartup
82
LoadSpriteSheet("R4/Objects.gif")
83
84
SpriteFrame(-8, -8, 16, 16, 180, 52) // #0 - Chain
85
SpriteFrame(-32, -8, 64, 16, 147, 69) // #1 - Platform
86
87
ArrayPos0 = 32
88
while ArrayPos0 < 1056
89
if Object[ArrayPos0].Type == TypeName[Link Platforms]
90
switch Object[ArrayPos0].PropertyValue
91
case CLOCKWISE_MOVEMENT
92
Object[ArrayPos0].Angle = 112
93
Object[ArrayPos0].Frame = 0
94
Object[ArrayPos0].AngleIncrease = 2
95
96
ArrayPos0++
97
Object[ArrayPos0].Angle = 16
98
Object[ArrayPos0].Frame = 0
99
Object[ArrayPos0].AngleIncrease = 2
100
101
ArrayPos0++
102
Object[ArrayPos0].Angle = 32
103
Object[ArrayPos0].Frame = 0
104
Object[ArrayPos0].AngleIncrease = 2
105
106
ArrayPos0++
107
Object[ArrayPos0].Angle = 48
108
Object[ArrayPos0].Frame = 0
109
Object[ArrayPos0].AngleIncrease = 2
110
111
ArrayPos0++
112
Object[ArrayPos0].Angle = 96
113
Object[ArrayPos0].Frame = 0
114
Object[ArrayPos0].AngleIncrease = 2
115
116
ArrayPos0++
117
Object[ArrayPos0].Angle = 80
118
Object[ArrayPos0].Frame = 0
119
Object[ArrayPos0].AngleIncrease = 2
120
121
ArrayPos0++
122
Object[ArrayPos0].Angle = 64
123
Object[ArrayPos0].Frame = 1
124
Object[ArrayPos0].AngleIncrease = 2
125
126
ArrayPos0++
127
Object[ArrayPos0].Angle = 0
128
Object[ArrayPos0].Frame = 1
129
Object[ArrayPos0].AngleIncrease = 2
130
131
ArrayPos0++
132
Object[ArrayPos0].Angle = 128
133
Object[ArrayPos0].Frame = 1
134
Object[ArrayPos0].AngleIncrease = 2
135
break
136
137
case COUNTERCLOCKWISE_MOVEMENT
138
Object[ArrayPos0].Angle = 112
139
Object[ArrayPos0].Frame = 0
140
Object[ArrayPos0].AngleIncrease = -2
141
142
ArrayPos0++
143
Object[ArrayPos0].Angle = 16
144
Object[ArrayPos0].Frame = 0
145
Object[ArrayPos0].AngleIncrease = -2
146
147
ArrayPos0++
148
Object[ArrayPos0].Angle = 32
149
Object[ArrayPos0].Frame = 0
150
Object[ArrayPos0].AngleIncrease = -2
151
152
ArrayPos0++
153
Object[ArrayPos0].Angle = 48
154
Object[ArrayPos0].Frame = 0
155
Object[ArrayPos0].AngleIncrease = -2
156
157
ArrayPos0++
158
Object[ArrayPos0].Angle = 96
159
Object[ArrayPos0].Frame = 0
160
Object[ArrayPos0].AngleIncrease = -2
161
162
ArrayPos0++
163
Object[ArrayPos0].Angle = 80
164
Object[ArrayPos0].Frame = 0
165
Object[ArrayPos0].AngleIncrease = -2
166
167
ArrayPos0++
168
Object[ArrayPos0].Angle = 64
169
Object[ArrayPos0].Frame = 1
170
Object[ArrayPos0].AngleIncrease = -2
171
172
ArrayPos0++
173
Object[ArrayPos0].Angle = 0
174
Object[ArrayPos0].Frame = 1
175
Object[ArrayPos0].AngleIncrease = -2
176
177
ArrayPos0++
178
Object[ArrayPos0].Angle = 128
179
Object[ArrayPos0].Frame = 1
180
Object[ArrayPos0].AngleIncrease = -2
181
break
182
183
end switch
184
end if
185
ArrayPos0++
186
loop
187
end sub
188
189
190
// ========================
191
// Editor Subs
192
// ========================
193
194
sub RSDKEdit
195
if Editor.ReturnVariable == true
196
switch Editor.VariableID
197
case EDIT_VAR_PROPVAL // Property Value
198
CheckResult = Object.PropertyValue
199
break
200
case 0 // moveDir
201
CheckResult = Object.PropertyValue
202
break
203
end switch
204
else
205
switch Editor.VariableID
206
case EDIT_VAR_PROPVAL // Property Value
207
Object.PropertyValue = Editor.VariableValue
208
break
209
case 0 // moveDir
210
Object.PropertyValue = Editor.VariableValue
211
break
212
end switch
213
end if
214
end sub
215
216
217
sub RSDKDraw
218
219
switch Object.PropertyValue
220
case CLOCKWISE_MOVEMENT
221
Object.InkEffect = 1
222
DrawSpriteFX(0, FX_INK, Object.XPos, Object.YPos)
223
TempValue2 = 112
224
TempValue3 = 0
225
TempValue0 = Object.XPos
226
TempValue1 = Object.YPos
227
TempValue0 += 0x100000
228
TempValue1 -= 0x100000
229
DrawArrow(Object.XPos,TempValue1, TempValue0, Object.YPos, 255, 255, 0)
230
break
231
case COUNTERCLOCKWISE_MOVEMENT
232
Object.InkEffect = 1
233
DrawSpriteFX(0, FX_INK, Object.XPos, Object.YPos)
234
TempValue2 = 112
235
TempValue3 = 0
236
TempValue0 = Object.XPos
237
TempValue1 = Object.YPos
238
TempValue0 += 0x100000
239
TempValue1 -= 0x100000
240
DrawArrow(TempValue0, Object.YPos, Object.XPos, TempValue1, 255, 255, 0)
241
break
242
243
case CHAIN
244
ArrayPos0 = Object.EntityNo
245
TempValue0 = 0
246
TempValue1 = 0
247
while TempValue1 == false
248
if TempValue0 == 8
249
TempValue1 = true
250
end if
251
ArrayPos0--
252
TempValue0++
253
CheckEqual(Object[ArrayPos0].Type, TypeName[Link Platforms])
254
TempValue1 = CheckResult
255
CheckNotEqual(Object[ArrayPos0].PropertyValue, CHAIN)
256
TempValue1 &= CheckResult
257
loop
258
ArrayPos1 = Object.EntityNo
259
ArrayPos1 -= Object[ArrayPos0].EntityNo
260
switch ArrayPos1
261
case 0
262
TempValue2 = 112
263
TempValue3 = 0
264
break
265
case 1
266
TempValue2 = 16
267
TempValue3 = 0
268
break
269
case 2
270
TempValue2 = 32
271
TempValue3 = 0
272
break
273
case 3
274
TempValue2 = 48
275
TempValue3 = 0
276
break
277
case 4
278
TempValue2 = 96
279
TempValue3 = 0
280
break
281
case 5
282
TempValue2 = 80
283
TempValue3 = 0
284
break
285
case 6
286
TempValue2 = 64
287
TempValue3 = 1
288
break
289
case 7
290
TempValue2 = 0
291
TempValue3 = 1
292
break
293
case 8
294
TempValue2 = 128
295
TempValue3 = 1
296
break
297
end switch
298
break
299
end switch
300
Cos(TempValue4, TempValue2)
301
TempValue4 *= 96
302
TempValue4 <<= 7
303
TempValue4 += Object.XPos
304
TempValue4 &= 0xFFFF0000 // Truncate the value
305
306
Sin(TempValue5, TempValue2)
307
TempValue5 *= 96
308
TempValue5 <<= 7
309
TempValue5 += Object.YPos
310
TempValue5 &= 0xFFFF0000 // Truncate the value
311
DrawSpriteXY(TempValue3, TempValue4, TempValue5)
312
DrawLine(Object.XPos, Object.YPos, TempValue4, TempValue5, 255, 255, 0)
313
end sub
314
315
316
sub RSDKLoad
317
LoadSpriteSheet("R4/Objects.gif")
318
319
SpriteFrame(-8, -8, 16, 16, 180, 52) // #0 - Chain
320
SpriteFrame(-32, -8, 64, 16, 147, 69) // #1 - Platform
321
322
AddEditorVariable("moveDir")
323
SetActiveVariable("moveDir")
324
AddEnumVariable("Chain", 0)
325
AddEnumVariable("Clockwise", CLOCKWISE_MOVEMENT)
326
AddEnumVariable("Counter-Clockwise", COUNTERCLOCKWISE_MOVEMENT)
327
end sub
328
329