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/CNZ/SnakePlatform.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Snake Platform 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.value1 : object.collisionOffset.y
13
14
// Player Aliases
15
private alias object.ypos : player.ypos
16
17
18
// ========================
19
// Function Declarations
20
// ========================
21
22
reserve function SnakePlatform_DebugDraw
23
reserve function SnakePlatform_DebugSpawn
24
25
26
// ========================
27
// Tables
28
// ========================
29
30
// Unused
31
// Likely would've been used for collsision in some fashion, though no real guesses as to how...
32
// This table loosely matches the one the original object used, though it's not a 1:1 copy like some other objects do
33
private table SnakePlatform_unusedTable
34
0, 0, 0, 0
35
-40, 16, -32, 32
36
-40, 0, -32, 32
37
-40, -16, -32, 32
38
-40, -32, -32, 32
39
end table
40
41
42
// ========================
43
// Function Definitions
44
// ========================
45
46
private function SnakePlatform_DebugDraw
47
DrawSprite(16)
48
end function
49
50
51
private function SnakePlatform_DebugSpawn
52
CreateTempObject(TypeName[Snake Platform], 0, object.xpos, object.ypos)
53
end function
54
55
56
// ========================
57
// Events
58
// ========================
59
60
event ObjectUpdate
61
temp0 = object.frame
62
object.frame = object.animationTimer
63
object.frame >>= 4
64
object.animationTimer++
65
object.animationTimer &= 0xFF
66
67
object.collisionOffset.y = 0
68
if object.frame > temp0
69
switch temp0
70
case 1
71
case 2
72
case 3
73
object.collisionOffset.y = -0x100000
74
break
75
76
case 12
77
case 13
78
case 14
79
object.collisionOffset.y = 0x100000
80
break
81
82
end switch
83
end if
84
85
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
86
switch temp0
87
case 1
88
BoxCollisionTest(C_SOLID, object.entityPos, -40, 16, -24, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
89
break
90
91
case 2
92
BoxCollisionTest(C_SOLID, object.entityPos, -40, 0, -24, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
93
break
94
95
case 3
96
BoxCollisionTest(C_SOLID, object.entityPos, -40, -16, -24, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
97
break
98
99
case 4
100
BoxCollisionTest(C_SOLID, object.entityPos, -40, -32, -24, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
101
break
102
103
case 5
104
BoxCollisionTest(C_SOLID, object.entityPos, -40, -32, -24, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
105
BoxCollisionTest(C_SOLID, object.entityPos, -24, -32, -8, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
106
break
107
108
case 6
109
BoxCollisionTest(C_SOLID, object.entityPos, -40, -32, -24, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
110
BoxCollisionTest(C_SOLID, object.entityPos, -24, -32, 8, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
111
break
112
113
case 7
114
BoxCollisionTest(C_SOLID, object.entityPos, -40, -32, -24, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
115
BoxCollisionTest(C_SOLID, object.entityPos, -24, -32, 24, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
116
break
117
118
case 8
119
BoxCollisionTest(C_SOLID, object.entityPos, -40, -32, 40, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
120
break
121
122
case 9
123
BoxCollisionTest(C_SOLID, object.entityPos, 24, -32, 40, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
124
BoxCollisionTest(C_SOLID, object.entityPos, -24, -32, 24, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
125
break
126
127
case 10
128
BoxCollisionTest(C_SOLID, object.entityPos, 24, -32, 40, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
129
BoxCollisionTest(C_SOLID, object.entityPos, -8, -32, 24, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
130
break
131
132
case 11
133
BoxCollisionTest(C_SOLID, object.entityPos, 24, -32, 40, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
134
BoxCollisionTest(C_SOLID, object.entityPos, 8, -32, 24, -16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
135
break
136
137
case 12
138
BoxCollisionTest(C_SOLID, object.entityPos, 24, -32, 40, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
139
break
140
141
case 13
142
BoxCollisionTest(C_SOLID, object.entityPos, 24, -16, 40, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
143
break
144
145
case 14
146
BoxCollisionTest(C_SOLID, object.entityPos, 24, 0, 40, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
147
break
148
149
case 15
150
BoxCollisionTest(C_SOLID, object.entityPos, 24, 16, 40, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
151
break
152
153
end switch
154
155
if checkResult == COL_TOP
156
player[currentPlayer].ypos += object.collisionOffset.y
157
end if
158
next
159
end event
160
161
162
event ObjectDraw
163
DrawSprite(object.frame)
164
end event
165
166
167
event ObjectStartup
168
LoadSpriteSheet("CNZ/Objects.gif")
169
SpriteFrame(0, 0, 0, 0, 61, 66)
170
SpriteFrame(-40, 16, 16, 16, 1, 82)
171
SpriteFrame(-40, 0, 16, 32, 1, 66)
172
SpriteFrame(-40, -16, 16, 48, 1, 50)
173
SpriteFrame(-40, -32, 16, 64, 1, 34)
174
SpriteFrame(-40, -32, 32, 64, 1, 34)
175
SpriteFrame(-40, -32, 48, 48, 1, 34)
176
SpriteFrame(-40, -32, 64, 32, 1, 34)
177
SpriteFrame(-40, -32, 80, 16, 1, 34)
178
SpriteFrame(-24, -32, 64, 32, 17, 34)
179
SpriteFrame(-8, -32, 48, 48, 33, 34)
180
SpriteFrame(8, -32, 32, 64, 49, 34)
181
SpriteFrame(24, -32, 16, 64, 65, 34)
182
SpriteFrame(24, -16, 16, 48, 65, 50)
183
SpriteFrame(24, 0, 16, 32, 65, 66)
184
SpriteFrame(24, 16, 16, 16, 65, 82)
185
SpriteFrame(-40, -32, 80, 64, 1, 34)
186
187
SetTableValue(TypeName[Snake Platform], DebugMode_ObjCount, DebugMode_TypesTable)
188
SetTableValue(SnakePlatform_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
189
SetTableValue(SnakePlatform_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
190
DebugMode_ObjCount++
191
end event
192
193
194
// ========================
195
// Editor Events
196
// ========================
197
198
event RSDKDraw
199
DrawSprite(0)
200
end event
201
202
203
event RSDKLoad
204
LoadSpriteSheet("CNZ/Objects.gif")
205
SpriteFrame(-40, -32, 80, 64, 1, 34)
206
207
// The CNZ2 layouts set it as was in the original game, but it doesn't mean anything in this remake
208
// (In the original game it actually had a use, but this remake makes all platform types behave the same)
209
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
210
end event
211
212