Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-Sonic-2-2013-Script-Decompilation
Path: blob/master/Sonic 2/Scripts/DEZ/OneWayDoor.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: One Way 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.state : object.isOpen
13
private alias object.value0 : object.movePos
14
15
// Player Aliases
16
private alias object.xvel : player.xvel
17
18
19
// ========================
20
// Function Declarations
21
// ========================
22
23
reserve function OneWayDoor_DebugDraw
24
reserve function OneWayDoor_DebugSpawn
25
26
27
// ========================
28
// Function Definitions
29
// ========================
30
31
private function OneWayDoor_DebugDraw
32
DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
33
end function
34
35
36
private function OneWayDoor_DebugSpawn
37
CreateTempObject(TypeName[One Way Door], object.direction, object.xpos, object.ypos)
38
object[tempObjectPos].direction = object.direction
39
end function
40
41
42
// ========================
43
// Events
44
// ========================
45
46
event ObjectUpdate
47
if object.isOpen == false
48
if object.movePos > 0
49
object.movePos -= 0x80000
50
end if
51
else
52
if object.movePos < 0x400000
53
object.movePos += 0x80000
54
end if
55
end if
56
57
object.ypos -= object.movePos
58
if object.movePos == 0
59
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
60
BoxCollisionTest(C_SOLID, object.entityPos, -8, -32, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
61
next
62
else
63
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
64
BoxCollisionTest(C_SOLID, object.entityPos, -8, -32, 8, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
65
next
66
end if
67
68
object.ypos += object.movePos
69
object.isOpen = false
70
if object.propertyValue == 0
71
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
72
if player[currentPlayer].xvel < 0x60000
73
BoxCollisionTest(C_TOUCH, object.entityPos, -64, -32, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
74
else
75
BoxCollisionTest(C_TOUCH, object.entityPos, -88, -32, 8, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
76
end if
77
78
object.isOpen |= checkResult
79
next
80
else
81
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
82
if player[currentPlayer].xvel > -0x60000
83
BoxCollisionTest(C_TOUCH, object.entityPos, -8, -32, 64, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
84
else
85
BoxCollisionTest(C_TOUCH, object.entityPos, -8, -32, 88, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
86
end if
87
88
object.isOpen |= checkResult
89
next
90
end if
91
end event
92
93
94
event ObjectDraw
95
temp0 = object.movePos
96
FlipSign(temp0)
97
temp0 += object.ypos
98
DrawSpriteFX(0, FX_FLIP, object.xpos, temp0)
99
end event
100
101
102
event ObjectStartup
103
CheckCurrentStageFolder("Zone12")
104
if checkResult == true
105
// Check if in DEZ and then... load CPZ sprites...
106
LoadSpriteSheet("CPZ/Objects.gif")
107
SpriteFrame(-8, -32, 16, 64, 206, 142)
108
else
109
LoadSpriteSheet("MBZ/Objects.gif")
110
SpriteFrame(-8, -32, 16, 64, 93, 312)
111
end if
112
113
foreach (TypeName[One Way Door], arrayPos0, ALL_ENTITIES)
114
if object[arrayPos0].propertyValue == 1
115
object[arrayPos0].direction = FLIP_X
116
end if
117
118
object[arrayPos0].drawOrder = 4
119
next
120
121
SetTableValue(TypeName[One Way Door], DebugMode_ObjCount, DebugMode_TypesTable)
122
SetTableValue(OneWayDoor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
123
SetTableValue(OneWayDoor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
124
DebugMode_ObjCount++
125
end event
126
127
128
// ========================
129
// Editor Events
130
// ========================
131
132
event RSDKEdit
133
if editor.returnVariable == true
134
switch editor.variableID
135
case EDIT_VAR_PROPVAL // property value
136
checkResult = object.propertyValue
137
break
138
139
case 0 // type
140
checkResult = object.propertyValue
141
break
142
143
end switch
144
else
145
switch editor.variableID
146
case EDIT_VAR_PROPVAL // property value
147
object.propertyValue = editor.variableValue
148
break
149
150
case 0 // type
151
object.propertyValue = editor.variableValue
152
break
153
154
end switch
155
end if
156
end event
157
158
159
event RSDKDraw
160
DrawSprite(0)
161
end event
162
163
164
event RSDKLoad
165
CheckCurrentStageFolder("Zone12")
166
if checkResult == true
167
// Even for the editor, there's not really anything that can be done here since
168
// the sprites aren't even present on the DEZ sheet at all...
169
LoadSpriteSheet("CPZ/Objects.gif")
170
SpriteFrame(-8, -32, 16, 64, 206, 142)
171
else
172
LoadSpriteSheet("MBZ/Objects.gif")
173
SpriteFrame(-8, -32, 16, 64, 93, 312)
174
end if
175
176
AddEditorVariable("type")
177
SetActiveVariable("type")
178
AddEnumVariable("Left Only", 0)
179
AddEnumVariable("Right Only", 1)
180
end event
181
182