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/MPZ/OneWayDoor.txt
1479 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
object.isOpen |= checkResult
78
next
79
else
80
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
81
if player[currentPlayer].xvel > -0x60000
82
BoxCollisionTest(C_TOUCH, object.entityPos, -8, -32, 64, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
83
else
84
BoxCollisionTest(C_TOUCH, object.entityPos, -8, -32, 88, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
85
end if
86
object.isOpen |= checkResult
87
next
88
end if
89
end event
90
91
92
event ObjectDraw
93
temp0 = object.movePos
94
FlipSign(temp0)
95
temp0 += object.ypos
96
DrawSpriteFX(0, FX_FLIP, object.xpos, temp0)
97
end event
98
99
100
event ObjectStartup
101
LoadSpriteSheet("MPZ/Objects.gif")
102
SpriteFrame(-12, -32, 24, 64, 195, 191)
103
104
foreach (TypeName[One Way Door], arrayPos0, ALL_ENTITIES)
105
if object[arrayPos0].propertyValue == 1
106
object[arrayPos0].direction = FLIP_X
107
end if
108
next
109
110
SetTableValue(TypeName[One Way Door], DebugMode_ObjCount, DebugMode_TypesTable)
111
SetTableValue(OneWayDoor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
112
SetTableValue(OneWayDoor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
113
DebugMode_ObjCount++
114
end event
115
116
117
// ========================
118
// Editor Events
119
// ========================
120
121
event RSDKEdit
122
if editor.returnVariable == true
123
switch editor.variableID
124
case EDIT_VAR_PROPVAL // property value
125
checkResult = object.propertyValue
126
break
127
128
case 0 // type
129
checkResult = object.propertyValue
130
break
131
132
end switch
133
else
134
switch editor.variableID
135
case EDIT_VAR_PROPVAL // property value
136
object.propertyValue = editor.variableValue
137
break
138
139
case 0 // type
140
object.propertyValue = editor.variableValue
141
break
142
143
end switch
144
end if
145
end event
146
147
148
event RSDKDraw
149
DrawSprite(0)
150
end event
151
152
153
event RSDKLoad
154
LoadSpriteSheet("MPZ/Objects.gif")
155
SpriteFrame(-12, -32, 24, 64, 195, 191)
156
157
AddEditorVariable("type")
158
SetActiveVariable("type")
159
AddEnumVariable("Left Only", 0)
160
AddEnumVariable("Right Only", 1)
161
end event
162
163