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/LevelSelect/ZoneButton.txt
1482 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Zone Button 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.propertyValue : object.zoneID
13
14
private alias object.value1 : object.zoneDetailsWidth
15
private alias object.value2 : object.disabled
16
private alias object.value3 : object.zoneIconFrame
17
private alias object.value4 : object.detailsFrameL
18
private alias object.value5 : object.detailsFrameM
19
private alias object.value6 : object.detailsFrameR
20
private alias object.value7 : object.zoneTextFrame
21
private alias object.value8 : object.buttonID
22
23
private alias 0 : ZONEBUTTON_SETUP
24
private alias 1 : ZONEBUTTON_ACTIVE
25
private alias 2 : ZONEBUTTON_NONE
26
27
// StageMenu aliases
28
private alias object.value3 : stageMenu.selectedIcon
29
private alias object.value4 : stageMenu.zoneTimer
30
31
private alias 4 : STAGEMENU_EXITZONES
32
33
34
// ========================
35
// Events
36
// ========================
37
38
event ObjectUpdate
39
switch object.state
40
case ZONEBUTTON_SETUP
41
object.zoneIconFrame = object.zoneID
42
object.zoneIconFrame += 7
43
object.zoneTextFrame = object.zoneID
44
object.zoneTextFrame += 14
45
object.inkEffect = INK_ALPHA
46
object.zoneDetailsWidth = 64
47
object.buttonID = object.entityPos
48
object.buttonID -= 9
49
object.alpha = 256
50
object.state = ZONEBUTTON_ACTIVE
51
break
52
53
case ZONEBUTTON_ACTIVE
54
if options.physicalControls == false
55
CheckTouchRect(0, 0, screen.xsize, screen.ysize)
56
if checkResult > -1
57
// left
58
temp0 = screen.xcenter
59
temp0 += object.xpos
60
temp0 -= 32
61
62
// right
63
temp1 = temp0
64
temp1 += 64
65
66
// top
67
temp2 = object.ypos
68
temp2 += 148
69
temp2 -= 28
70
71
// bottom
72
temp3 = temp2
73
temp3 += 56
74
75
CheckTouchRect(temp0, temp2, temp1, temp3)
76
if checkResult > -1
77
stageMenu[1].selectedIcon = object.buttonID
78
end if
79
end if
80
end if
81
break
82
83
case ZONEBUTTON_NONE
84
break
85
86
end switch
87
end event
88
89
90
event ObjectDraw
91
if stageMenu[1].selectedIcon == object.buttonID
92
temp0 = stageMenu[1].zoneTimer
93
temp0 >>= 1
94
temp0 &= 1
95
if object[1].state < STAGEMENU_EXITZONES
96
temp0 = true
97
end if
98
else
99
temp0 = false
100
end if
101
102
if temp0 == true
103
// Highlighted
104
object.detailsFrameL = 3
105
object.detailsFrameM = 4
106
object.detailsFrameR = 5
107
temp3 = 159
108
else
109
// Unhighlighted
110
object.detailsFrameL = 0
111
object.detailsFrameM = 1
112
object.detailsFrameR = 2
113
temp3 = 110
114
end if
115
116
temp0 = object.zoneDetailsWidth
117
temp0 >>= 1
118
temp0 -= 4
119
FlipSign(temp0)
120
temp0 += object.xpos
121
temp0 += screen.xcenter
122
temp1 = object.ypos
123
temp1 += 148
124
DrawSpriteScreenFX(object.detailsFrameL, FX_INK, temp0, temp1)
125
126
temp2 = object.zoneDetailsWidth
127
temp2 -= 8
128
EditFrame(object.detailsFrameM, 0, -24, temp2, 48, 5, temp3)
129
DrawSpriteScreenFX(object.detailsFrameM, FX_INK, temp0, temp1)
130
131
temp0 += 7
132
if object.disabled == false // In S1, stages are never disabled - the functionality is just leftover from copying from S2's version where HPZ and 2PVS stages would need to be disabled sometimes
133
DrawSpriteScreenFX(6, FX_INK, temp0, temp1)
134
DrawSpriteScreenFX(object.zoneIconFrame, FX_INK, temp0, temp1)
135
else
136
// If disabled, draw a red X
137
// (Or at least, that's what it was meant to be)
138
DrawSpriteScreenFX(7, FX_INK, temp0, temp1)
139
end if
140
141
temp0--
142
temp0 += object.zoneDetailsWidth
143
temp0 -= 14
144
DrawSpriteScreenFX(object.detailsFrameR, FX_INK, temp0, temp1)
145
if object.zoneDetailsWidth == 224
146
temp0 -= object.zoneDetailsWidth
147
temp0 += 60
148
DrawSpriteScreenFX(object.zoneTextFrame, FX_INK, temp0, temp1)
149
end if
150
end event
151
152
153
event ObjectStartup
154
LoadSpriteSheet("LevelSelect/Icons.gif")
155
SpriteFrame(-4, -24, 4, 48, 1, 110) // Details Border L Unhighlighted - #0
156
SpriteFrame(0, -24, 40, 48, 5, 110) // Details Border M Unhighlighted - #1
157
SpriteFrame(0, -24, 4, 48, 221, 110) // Details Border R Unhighlighted - #2
158
159
SpriteFrame(-4, -24, 4, 48, 1, 159) // Details Border L Highlighted - #3
160
SpriteFrame(0, -24, 40, 48, 5, 159) // Details Border M Highlighted - #4
161
SpriteFrame(0, -24, 4, 48, 221, 159) // Details Border R Highlighted - #5
162
163
SpriteFrame(0, -17, 42, 34, 180, 1) // Blank Icon - #6
164
SpriteFrame(0, -17, 42, 34, 180, 1) // Blank Icon Again (Was Red X in S2) - #7
165
166
SpriteFrame(4, -13, 32, 24, 1, 85) // GHZ Icon - #8
167
SpriteFrame(4, -13, 32, 24, 34, 85) // MZ Icon - #9
168
SpriteFrame(4, -13, 32, 24, 67, 85) // SYZ Icon - #10
169
SpriteFrame(4, -13, 32, 24, 100, 85) // LZ Icon - #11
170
SpriteFrame(4, -13, 32, 24, 133, 85) // SLZ Icon - #12
171
SpriteFrame(4, -13, 32, 24, 166, 85) // SBZ Icon - #13
172
SpriteFrame(4, -13, 32, 24, 199, 85) // FZ Icon - #14
173
174
SpriteFrame(4, -3, 120, 7, 1, 223) // GHZ Text - #15
175
SpriteFrame(4, -3, 88, 7, 122, 223) // MZ Text - #16
176
SpriteFrame(4, -3, 128, 7, 1, 231) // SYZ Text - #17
177
SpriteFrame(4, -3, 112, 7, 130, 231) // LZ Text - #18
178
SpriteFrame(4, -3, 120, 7, 1, 239) // SLZ Text - #19
179
SpriteFrame(4, -3, 128, 7, 122, 239) // SBZ Text - #20
180
SpriteFrame(4, -3, 80, 7, 1, 247) // FZ Text - #21
181
end event
182
183
184
// ========================
185
// Editor Events
186
// ========================
187
188
event RSDKDraw
189
DrawSprite(8)
190
end event
191
192
193
event RSDKLoad
194
LoadSpriteSheet("LevelSelect/Icons.gif")
195
SpriteFrame(4, -13, 32, 24, 1, 85) // GHZ Icon
196
197
// Although used by the object, it's not to be set from the editor
198
// Instead, it's set when this object is spawned by a Stage Menu object
199
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
200
end event
201
202