Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R4/MultiDoor.txt
1319 views
1
//-----------------Sonic CD Multi Door Script-----------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value0 : Object.Timer
7
#alias Object.Value1 : Object.YOffset
8
9
// Push Button alias
10
#alias Object.PropertyValue : PushButton.Pressed
11
12
// HUD alias
13
#alias Object[24].PropertyValue : HUD.CurrentTimePeriod
14
15
// States
16
#alias 0 : MULTIDOOR_INACTIVE
17
#alias 1 : MULTIDOOR_OPEN
18
19
// Collision
20
#alias 1 : PLAYER_COL_FLOOR
21
22
// Time Periods
23
#alias 0 : TIME_PRESENT
24
#alias 1 : TIME_PAST
25
#alias 2 : TIME_GOOD_FUTURE
26
#alias 3 : TIME_BAD_FUTURE
27
28
29
sub ObjectMain
30
switch Object.State
31
case MULTIDOOR_INACTIVE
32
Object.YOffset = Object.YPos
33
// Check if the previous or next button got pressed
34
if PushButton[-1].Pressed == true
35
Object.State++
36
end if
37
if PushButton[+1].Pressed == true
38
Object.State++
39
end if
40
break
41
42
case MULTIDOOR_OPEN
43
if Object.Timer < 128
44
Object.Timer++
45
Object.YPos += 0x10000
46
Object.YOffset -= 0x10000
47
else
48
Object.State++
49
end if
50
break
51
52
end switch
53
end sub
54
55
56
sub ObjectPlayerInteraction
57
#platform: Use_Standalone
58
PlayerObjectCollision(C_BOX, -32, -65, 0, 64)
59
if CheckResult == PLAYER_COL_FLOOR
60
Player.YPos += 0x10000
61
end if
62
63
PlayerObjectCollision(C_BOX, 32, -65, 64, 64)
64
if CheckResult == PLAYER_COL_FLOOR
65
Player.YPos += 0x10000
66
end if
67
68
TempValue0 = Object.YPos
69
Object.YPos = Object.YOffset
70
PlayerObjectCollision(C_BOX, -64, -64, -32, 64)
71
PlayerObjectCollision(C_BOX, 0, -64, 32, 64)
72
Object.YPos = TempValue0
73
#endplatform
74
75
#platform: Use_Origins
76
// well would you look at that, origins dev using unused collision types
77
PlayerObjectCollision(C_BOX2, -32, -65, 0, 64)
78
if CheckResult == PLAYER_COL_FLOOR
79
Player.YPos += 0x10000
80
end if
81
82
PlayerObjectCollision(C_BOX2, 32, -65, 64, 64)
83
if CheckResult == PLAYER_COL_FLOOR
84
Player.YPos += 0x10000
85
end if
86
87
TempValue0 = Object.YPos
88
Object.YPos = Object.YOffset
89
PlayerObjectCollision(C_BOX2, -64, -64, -32, 64)
90
PlayerObjectCollision(C_BOX2, 0, -64, 32, 64)
91
Object.YPos = TempValue0
92
#endplatform
93
end sub
94
95
96
sub ObjectDraw
97
TempValue0 = Object.XPos
98
TempValue0 -= 0x300000
99
DrawSpriteXY(0, TempValue0, Object.YOffset)
100
DrawSpriteXY(1, TempValue0, Object.YOffset)
101
DrawSpriteXY(2, TempValue0, Object.YOffset)
102
DrawSpriteXY(3, TempValue0, Object.YOffset)
103
104
TempValue0 += 0x200000
105
DrawSpriteXY(4, TempValue0, Object.YPos)
106
DrawSpriteXY(5, TempValue0, Object.YPos)
107
DrawSpriteXY(6, TempValue0, Object.YPos)
108
DrawSpriteXY(7, TempValue0, Object.YPos)
109
110
TempValue0 += 0x200000
111
DrawSpriteXY(0, TempValue0, Object.YOffset)
112
DrawSpriteXY(1, TempValue0, Object.YOffset)
113
DrawSpriteXY(2, TempValue0, Object.YOffset)
114
DrawSpriteXY(3, TempValue0, Object.YOffset)
115
116
TempValue0 += 0x200000
117
DrawSpriteXY(4, TempValue0, Object.YPos)
118
DrawSpriteXY(5, TempValue0, Object.YPos)
119
DrawSpriteXY(6, TempValue0, Object.YPos)
120
DrawSpriteXY(7, TempValue0, Object.YPos)
121
end sub
122
123
124
sub ObjectStartup
125
switch HUD.CurrentTimePeriod
126
case TIME_PRESENT
127
LoadSpriteSheet("R4/Objects.gif")
128
TempValue0 = 163
129
TempValue1 = 1
130
TempValue2 = 196
131
break
132
133
case TIME_PAST
134
LoadSpriteSheet("R4/Objects2.gif")
135
TempValue0 = 1
136
TempValue1 = 157
137
TempValue2 = 34
138
break
139
140
case TIME_GOOD_FUTURE
141
LoadSpriteSheet("R4/Objects2.gif")
142
TempValue0 = 1
143
TempValue1 = 190
144
TempValue2 = 34
145
break
146
147
case TIME_BAD_FUTURE
148
LoadSpriteSheet("R4/Objects2.gif")
149
TempValue0 = 1
150
TempValue1 = 223
151
TempValue2 = 34
152
break
153
end switch
154
155
// R4 blocks
156
SpriteFrame(-16, -64, 32, 32, TempValue0, TempValue1)
157
SpriteFrame(-16, -32, 32, 32, TempValue0, TempValue1)
158
SpriteFrame(-16, 0, 32, 32, TempValue0, TempValue1)
159
SpriteFrame(-16, 32, 32, 32, TempValue0, TempValue1)
160
SpriteFrame(-16, -64, 32, 32, TempValue2, TempValue1)
161
SpriteFrame(-16, -32, 32, 32, TempValue2, TempValue1)
162
SpriteFrame(-16, 0, 32, 32, TempValue2, TempValue1)
163
SpriteFrame(-16, 32, 32, 32, TempValue2, TempValue1)
164
end sub
165
166
167
// ========================
168
// Editor Subs
169
// ========================
170
171
sub RSDKDraw
172
TempValue0 = Object.XPos
173
TempValue0 -= 0x300000
174
DrawSpriteXY(0, TempValue0, Object.YPos)
175
DrawSpriteXY(1, TempValue0, Object.YPos)
176
DrawSpriteXY(2, TempValue0, Object.YPos)
177
DrawSpriteXY(3, TempValue0, Object.YPos)
178
179
TempValue0 += 0x200000
180
DrawSpriteXY(4, TempValue0, Object.YPos)
181
DrawSpriteXY(5, TempValue0, Object.YPos)
182
DrawSpriteXY(6, TempValue0, Object.YPos)
183
DrawSpriteXY(7, TempValue0, Object.YPos)
184
185
TempValue0 += 0x200000
186
DrawSpriteXY(0, TempValue0, Object.YPos)
187
DrawSpriteXY(1, TempValue0, Object.YPos)
188
DrawSpriteXY(2, TempValue0, Object.YPos)
189
DrawSpriteXY(3, TempValue0, Object.YPos)
190
191
TempValue0 += 0x200000
192
DrawSpriteXY(4, TempValue0, Object.YPos)
193
DrawSpriteXY(5, TempValue0, Object.YPos)
194
DrawSpriteXY(6, TempValue0, Object.YPos)
195
DrawSpriteXY(7, TempValue0, Object.YPos)
196
end sub
197
198
199
sub RSDKLoad
200
CallFunction(EditorHelpers_FindTimePeriod)
201
switch CheckResult
202
case TIME_PRESENT
203
LoadSpriteSheet("R4/Objects.gif")
204
TempValue0 = 163
205
TempValue1 = 1
206
TempValue2 = 196
207
break
208
209
case TIME_PAST
210
LoadSpriteSheet("R4/Objects2.gif")
211
TempValue0 = 1
212
TempValue1 = 157
213
TempValue2 = 34
214
break
215
216
case TIME_GOOD_FUTURE
217
LoadSpriteSheet("R4/Objects2.gif")
218
TempValue0 = 1
219
TempValue1 = 190
220
TempValue2 = 34
221
break
222
223
case TIME_BAD_FUTURE
224
LoadSpriteSheet("R4/Objects2.gif")
225
TempValue0 = 1
226
TempValue1 = 223
227
TempValue2 = 34
228
break
229
end switch
230
231
// R4 blocks
232
SpriteFrame(-16, -64, 32, 32, TempValue0, TempValue1)
233
SpriteFrame(-16, -32, 32, 32, TempValue0, TempValue1)
234
SpriteFrame(-16, 0, 32, 32, TempValue0, TempValue1)
235
SpriteFrame(-16, 32, 32, 32, TempValue0, TempValue1)
236
SpriteFrame(-16, -64, 32, 32, TempValue2, TempValue1)
237
SpriteFrame(-16, -32, 32, 32, TempValue2, TempValue1)
238
SpriteFrame(-16, 0, 32, 32, TempValue2, TempValue1)
239
SpriteFrame(-16, 32, 32, 32, TempValue2, TempValue1)
240
241
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
242
end sub
243
244