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/SBZ/GirderDoor.txt
1482 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Girder Door 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.timer
13
private alias object.value1 : object.startPos.x
14
private alias object.value2 : object.buttonPressed
15
16
// States
17
private alias 0 : GIRDERDOOR_IDLE
18
private alias 1 : GIRDERDOOR_WAITFORACTIVE
19
private alias 2 : GIRDERDOOR_MOVE
20
private alias 3 : GIRDERDOOR_DELAY
21
private alias 4 : GIRDERDOOR_RETURNTOSTART
22
23
// Player Aliases
24
private alias object.xpos : player.xpos
25
26
// Button Aliases
27
private alias object.value0 : pushButton.stood
28
29
30
// ========================
31
// Function Declarations
32
// ========================
33
34
reserve function GirderDoor_DebugDraw
35
reserve function GirderDoor_DebugSpawn
36
37
38
// ========================
39
// Tables
40
// ========================
41
42
private function GirderDoor_DebugDraw
43
DrawSprite(0)
44
end function
45
46
47
private function GirderDoor_DebugSpawn
48
CreateTempObject(TypeName[Girder Door], 0, object.xpos, object.ypos)
49
end function
50
51
52
// ========================
53
// Events
54
// ========================
55
56
event ObjectUpdate
57
switch object.state
58
case GIRDERDOOR_IDLE
59
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
60
BoxCollisionTest(C_SOLID, object.entityPos, -64, -12, 64, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
61
next
62
break
63
64
case GIRDERDOOR_WAITFORACTIVE
65
object.priority = PRIORITY_BOUNDS
66
if pushButton[-1].stood == true
67
if object.buttonPressed == false
68
object.buttonPressed = true
69
object.state++
70
end if
71
else
72
object.buttonPressed = false
73
end if
74
75
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
76
BoxCollisionTest(C_SOLID, object.entityPos, -64, -12, 64, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
77
next
78
break
79
80
case GIRDERDOOR_MOVE
81
object.xpos += object.xvel
82
object.timer++
83
if object.timer == 64
84
object.timer = 0
85
object.state++
86
end if
87
88
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
89
BoxCollisionTest(C_SOLID, object.entityPos, -64, -12, 64, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
90
if checkResult == COL_TOP
91
player[currentPlayer].xpos += object.xvel
92
end if
93
next
94
break
95
96
case GIRDERDOOR_DELAY
97
object.timer++
98
if object.timer == 180
99
object.timer = 0
100
object.state++
101
end if
102
103
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
104
BoxCollisionTest(C_SOLID, object.entityPos, -64, -12, 64, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
105
next
106
break
107
108
case GIRDERDOOR_RETURNTOSTART
109
object.xpos -= object.xvel
110
object.timer++
111
if object.timer == 64
112
object.timer = 0
113
object.state = GIRDERDOOR_WAITFORACTIVE
114
end if
115
116
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
117
BoxCollisionTest(C_SOLID, object.entityPos, -64, -12, 64, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
118
if checkResult == COL_TOP
119
player[currentPlayer].xpos -= object.xvel
120
end if
121
next
122
break
123
124
end switch
125
end event
126
127
128
event ObjectDraw
129
DrawSprite(0)
130
end event
131
132
133
event ObjectStartup
134
LoadSpriteSheet("SBZ/Objects.gif")
135
SpriteFrame(-64, -12, 128, 24, 383, 140)
136
137
foreach (TypeName[Girder Door], arrayPos0, ALL_ENTITIES)
138
switch object[arrayPos0].propertyValue
139
default
140
case 0
141
break
142
143
case 1
144
object[arrayPos0].state = GIRDERDOOR_WAITFORACTIVE
145
object[arrayPos0].xvel = 0x20000
146
break
147
148
case 2
149
object[arrayPos0].state = GIRDERDOOR_WAITFORACTIVE
150
object[arrayPos0].xvel = -0x20000
151
break
152
153
end switch
154
155
object[arrayPos0].startPos.x = object[arrayPos0].xpos
156
next
157
158
SetTableValue(TypeName[Girder Door], DebugMode_ObjCount, DebugMode_TypesTable)
159
SetTableValue(GirderDoor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
160
SetTableValue(GirderDoor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
161
DebugMode_ObjCount++
162
end event
163
164
165
// ========================
166
// Editor Events
167
// ========================
168
169
event RSDKEdit
170
if editor.returnVariable == true
171
switch editor.variableID
172
case EDIT_VAR_PROPVAL // property value
173
checkResult = object.propertyValue
174
checkResult &= 3
175
break
176
177
case 0 // type
178
checkResult = object.propertyValue
179
checkResult &= 3
180
break
181
182
end switch
183
else
184
switch editor.variableID
185
case EDIT_VAR_PROPVAL // property value
186
object.propertyValue = editor.variableValue
187
object.propertyValue &= 3
188
break
189
190
case 0 // type
191
object.propertyValue = editor.variableValue
192
object.propertyValue &= 3
193
break
194
195
end switch
196
end if
197
end event
198
199
200
event RSDKDraw
201
DrawSprite(0)
202
end event
203
204
205
event RSDKLoad
206
LoadSpriteSheet("SBZ/Objects.gif")
207
SpriteFrame(-64, -12, 128, 24, 383, 140)
208
209
AddEditorVariable("type")
210
SetActiveVariable("type")
211
AddEnumVariable("No movement", 0)
212
AddEnumVariable("Move Right", 1)
213
AddEnumVariable("Move Left", 2)
214
end event
215
216