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/LZ/HorizontalDoor.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Door Horizontal 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.collisionOffset.y
14
15
// States
16
private alias 0 : HORIZONTALDOOR_AWAITBUTTON
17
private alias 1 : HORIZONTALDOOR_MOVING
18
private alias 2 : HORIZONTALDOOR_MOVED
19
private alias 3 : HORIZONTALDOOR_AWAITWATER
20
21
// Player Aliases
22
private alias object.xpos : player.xpos
23
24
// Push Button aliases
25
private alias object.value0 : pushButton.stood
26
27
28
// ========================
29
// Function Declarations
30
// ========================
31
32
reserve function DoorHorizontal_DebugDraw
33
reserve function DoorHorizontal_DebugSpawn
34
35
36
// ========================
37
// Function Definitions
38
// ========================
39
40
private function DoorHorizontal_DebugDraw
41
DrawSprite(0)
42
end function
43
44
45
private function DoorHorizontal_DebugSpawn
46
CreateTempObject(TypeName[Door Horizontal], 0, object.xpos, object.ypos)
47
object[tempObjectPos].direction = object.direction
48
object[tempObjectPos].priority = PRIORITY_ACTIVE
49
object[tempObjectPos].timer = 64
50
end function
51
52
53
// ========================
54
// Events
55
// ========================
56
57
event ObjectUpdate
58
switch object.state
59
case HORIZONTALDOOR_AWAITWATER
60
if Water_activateFlag == true
61
object.state = HORIZONTALDOOR_MOVING
62
end if
63
// [Fall-through]
64
case HORIZONTALDOOR_AWAITBUTTON
65
if pushButton[+1].stood == true
66
object.state++
67
end if
68
// [Fall-through]
69
case HORIZONTALDOOR_MOVED
70
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
71
BoxCollisionTest(C_SOLID, object.entityPos, -64, -16, 64, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
72
next
73
break
74
75
case HORIZONTALDOOR_MOVING
76
temp0 = object.xpos
77
temp0 &= 0xFFFF0000
78
if object.direction == FLIP_NONE
79
object.xpos -= 0x20000
80
else
81
object.xpos += 0x20000
82
end if
83
84
object.timer--
85
if object.timer < 0
86
object.state++
87
end if
88
89
object.collisionOffset.y = object.xpos
90
object.collisionOffset.y &= 0xFFFF0000
91
object.collisionOffset.y -= temp0
92
temp1 = object.xpos
93
94
object.xpos = temp0
95
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
96
BoxCollisionTest(C_SOLID, object.entityPos, -64, -16, 64, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
97
if checkResult == COL_TOP
98
player[currentPlayer].xpos += object.collisionOffset.y
99
end if
100
next
101
102
object.xpos = temp1
103
break
104
105
end switch
106
end event
107
108
109
event ObjectDraw
110
DrawSprite(0)
111
end event
112
113
114
event ObjectStartup
115
LoadSpriteSheet("LZ/Objects.gif")
116
SpriteFrame(-64, -16, 128, 32, 84, 223)
117
118
foreach (TypeName[Door Horizontal], arrayPos0, ALL_ENTITIES)
119
object[arrayPos0].priority = PRIORITY_ACTIVE
120
object[arrayPos0].timer = 64
121
if object[arrayPos0].propertyValue == 1
122
object[arrayPos0].state = HORIZONTALDOOR_AWAITWATER
123
end if
124
next
125
126
// Add this object to the debug item list
127
SetTableValue(TypeName[Door Horizontal], DebugMode_ObjCount, DebugMode_TypesTable)
128
SetTableValue(DoorHorizontal_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
129
SetTableValue(DoorHorizontal_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
130
DebugMode_ObjCount++
131
end event
132
133
134
// ========================
135
// Editor Events
136
// ========================
137
138
event RSDKEdit
139
if editor.returnVariable == true
140
switch editor.variableID
141
case EDIT_VAR_PROPVAL // property value
142
checkResult = object.propertyValue
143
checkResult &= 1
144
break
145
146
case 0 // activationType
147
checkResult = object.propertyValue
148
checkResult &= 1
149
break
150
151
end switch
152
else
153
switch editor.variableID
154
case EDIT_VAR_PROPVAL // property value
155
object.propertyValue = editor.variableValue
156
object.propertyValue &= 1
157
break
158
159
case 0 // activationType
160
object.propertyValue = editor.variableValue
161
object.propertyValue &= 1
162
break
163
164
end switch
165
end if
166
end event
167
168
169
event RSDKDraw
170
DrawSprite(0)
171
172
if editor.showGizmos == true
173
editor.drawingOverlay = true
174
175
// Draw a line connecting the door to its trigger button
176
DrawLine(object.xpos, object.ypos, object[+1].xpos, object[+1].ypos, 255, 255, 255)
177
178
editor.drawingOverlay = false
179
end if
180
end event
181
182
183
event RSDKLoad
184
LoadSpriteSheet("LZ/Objects.gif")
185
SpriteFrame(-64, -16, 128, 32, 84, 223)
186
187
AddEditorVariable("activationType")
188
SetActiveVariable("activationType")
189
AddEnumVariable("Button", 0)
190
AddEnumVariable("Water", 1)
191
end event
192
193