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/TouchBlock.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 1
3
// Script Description: Touch Block 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.stood
13
private alias object.value1 : object.collisionOffset.y
14
private alias object.value2 : object.timer // never used here, but since this is based off [Falling Block] its safe to assume thats what this is since it's skipped over
15
private alias object.value3 : object.startPos.y
16
17
private alias 0 : TOUCHBLOCK_IDLE
18
private alias 1 : TOUCHBLOCK_MOVING
19
private alias 2 : TOUCHBLOCK_RETURNTOSTART
20
private alias 3 : TOUCHBLOCK_OOB
21
22
// Player Aliases
23
private alias object.ypos : player.ypos
24
private alias object.gravity : player.gravity
25
26
// Path ID Aliases
27
private alias 0 : PATH_A
28
29
30
// ========================
31
// Function Declarations
32
// ========================
33
34
reserve function TouchBlock_DebugDraw
35
reserve function TouchBlock_DebugSpawn
36
37
38
// ========================
39
// Tables
40
// ========================
41
42
private function TouchBlock_DebugDraw
43
DrawSprite(0)
44
end function
45
46
47
private function TouchBlock_DebugSpawn
48
CreateTempObject(TypeName[Touch Block], 0, object.xpos, object.ypos)
49
object[tempObjectPos].startPos.y = object.ypos
50
end function
51
52
53
// ========================
54
// Events
55
// ========================
56
57
event ObjectUpdate
58
temp0 = object.ypos
59
temp0 &= 0xFFFF0000
60
61
switch object.state
62
case TOUCHBLOCK_IDLE
63
break
64
65
case TOUCHBLOCK_MOVING
66
object.ypos += object.yvel
67
object.yvel += 0x800
68
69
ObjectTileCollision(CSIDE_FLOOR, 0, 16, PATH_A)
70
if checkResult == true
71
object.state++
72
end if
73
74
if object.outOfBounds == true
75
object.ypos = object.startPos.y
76
object.yvel = 0
77
object.timer = 0
78
object.state = TOUCHBLOCK_OOB
79
end if
80
break
81
82
case TOUCHBLOCK_RETURNTOSTART
83
if object.outOfBounds == true
84
object.ypos = object.startPos.y
85
object.yvel = 0
86
object.timer = 0
87
object.state++
88
end if
89
break
90
91
case TOUCHBLOCK_OOB
92
if object.outOfBounds == true
93
object.state = TOUCHBLOCK_IDLE
94
object.priority = PRIORITY_BOUNDS
95
end if
96
break
97
98
end switch
99
100
object.collisionOffset.y = object.ypos
101
object.collisionOffset.y &= 0xFFFF0000
102
object.collisionOffset.y -= temp0
103
object.stood = false
104
105
if object.state < TOUCHBLOCK_OOB
106
temp1 = object.ypos
107
object.ypos = temp0
108
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
109
BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
110
switch checkResult
111
case COL_TOP
112
player[currentPlayer].ypos += object.collisionOffset.y
113
break
114
115
case COL_LEFT
116
case COL_RIGHT
117
if object.state == TOUCHBLOCK_IDLE
118
object.state = TOUCHBLOCK_MOVING
119
end if
120
break
121
122
case COL_BOTTOM
123
if player[currentPlayer].gravity == GRAVITY_GROUND
124
CallFunction(Player_Kill)
125
end if
126
break
127
end switch
128
next
129
130
object.ypos = temp1
131
end if
132
end event
133
134
135
event ObjectDraw
136
if object.state < TOUCHBLOCK_OOB
137
DrawSprite(0)
138
end if
139
end event
140
141
142
event ObjectStartup
143
LoadSpriteSheet("LZ/Objects.gif")
144
SpriteFrame(-16, -16, 32, 32, 84, 223)
145
146
foreach (TypeName[Touch Block], arrayPos0, ALL_ENTITIES)
147
object[arrayPos0].startPos.y = object[arrayPos0].ypos
148
next
149
150
SetTableValue(TypeName[Touch Block], DebugMode_ObjCount, DebugMode_TypesTable)
151
SetTableValue(TouchBlock_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
152
SetTableValue(TouchBlock_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
153
DebugMode_ObjCount++
154
end event
155
156
157
// ========================
158
// Editor Events
159
// ========================
160
161
event RSDKDraw
162
DrawSprite(0)
163
end event
164
165
166
event RSDKLoad
167
LoadSpriteSheet("LZ/Objects.gif")
168
SpriteFrame(-16, -16, 32, 32, 84, 223)
169
170
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
171
end event
172
173