Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-CD-2011-Script-Decompilation
Path: blob/main/Scripts/R4/HOBlocks.txt
1319 views
1
//--------------Sonic CD Horizontal Blocks Script-------------//
2
//--------Scripted by Christian Whitehead 'The Taxman'--------//
3
//-------Unpacked By Rubberduckycooly's Script Unpacker-------//
4
5
// Aliases
6
#alias Object.Value1 : Object.XDrawPos
7
#alias Object.Value2 : Object.XOffSet
8
#alias Object.Value3 : Object.Angle
9
#alias Object.Value4 : Object.AgainstBlock
10
11
// HUD alias
12
#alias Object[24].PropertyValue : HUD.CurrentTimePeriod
13
14
// Time Periods
15
#alias 0 : TIME_PRESENT
16
#alias 1 : TIME_PAST
17
#alias 2 : TIME_GOOD_FUTURE
18
#alias 3 : TIME_BAD_FUTURE
19
20
// Collision
21
#alias 1 : PLAYER_COL_FLOOR
22
#alias 2 : PLAYER_COL_LWALL
23
#alias 3 : PLAYER_COL_RWALL
24
25
26
sub ObjectMain
27
Object.Angle = Oscillation
28
Object.Angle += Object.PropertyValue
29
Object.Angle <<= 1
30
31
Cos(Object.XOffSet, Object.Angle)
32
Object.XOffSet <<= 12
33
Object.XOffSet += Object.XPos
34
Object.XOffSet &= 0xFFFF0000 // Truncate the value
35
Object.XOffSet -= Object.XDrawPos
36
37
Object.AgainstBlock = false
38
end sub
39
40
41
sub ObjectPlayerInteraction
42
TempValue0 = Object.XPos
43
Object.XPos = Object.XDrawPos
44
45
PlayerObjectCollision(C_BOX, -64, -16, 64, 16)
46
switch CheckResult
47
case PLAYER_COL_FLOOR
48
Player.XPos += Object.XOffSet
49
break
50
51
case PLAYER_COL_LWALL
52
// Check the previous block's collision
53
if Object[-1].AgainstBlock == true
54
CallFunction(Player_Kill)
55
end if
56
break
57
58
case PLAYER_COL_RWALL
59
Object.AgainstBlock = true
60
break
61
end switch
62
63
Object.XPos = TempValue0
64
end sub
65
66
67
sub ObjectDraw
68
Cos(Object.XDrawPos, Object.Angle)
69
Object.XDrawPos <<= 12
70
Object.XDrawPos += Object.XPos
71
Object.XDrawPos &= 0xFFFF0000 // Truncate the value
72
73
DrawSpriteXY(0, Object.XDrawPos, Object.YPos)
74
DrawSpriteXY(1, Object.XDrawPos, Object.YPos)
75
DrawSpriteXY(2, Object.XDrawPos, Object.YPos)
76
DrawSpriteXY(3, Object.XDrawPos, Object.YPos)
77
end sub
78
79
80
sub ObjectStartup
81
switch HUD.CurrentTimePeriod
82
case TIME_PRESENT
83
LoadSpriteSheet("R4/Objects.gif")
84
TempValue0 = 163
85
TempValue1 = 1
86
TempValue2 = 196
87
break
88
89
case TIME_PAST
90
LoadSpriteSheet("R4/Objects2.gif")
91
TempValue0 = 1
92
TempValue1 = 157
93
TempValue2 = 34
94
break
95
96
case TIME_GOOD_FUTURE
97
LoadSpriteSheet("R4/Objects2.gif")
98
TempValue0 = 1
99
TempValue1 = 190
100
TempValue2 = 34
101
break
102
103
case TIME_BAD_FUTURE
104
LoadSpriteSheet("R4/Objects2.gif")
105
TempValue0 = 1
106
TempValue1 = 223
107
TempValue2 = 34
108
break
109
end switch
110
111
// R4 Blocks
112
SpriteFrame(-64, -16, 32, 32, TempValue0, TempValue1)
113
SpriteFrame(-32, -16, 32, 32, TempValue0, TempValue1)
114
SpriteFrame(0, -16, 32, 32, TempValue0, TempValue1)
115
SpriteFrame(32, -16, 32, 32, TempValue0, TempValue1)
116
end sub
117
118
119
// ========================
120
// Editor Subs
121
// ========================
122
123
sub RSDKDraw
124
DrawSpriteXY(0, Object.XPos, Object.YPos)
125
DrawSpriteXY(1, Object.XPos, Object.YPos)
126
DrawSpriteXY(2, Object.XPos, Object.YPos)
127
DrawSpriteXY(3, Object.XPos, Object.YPos)
128
end sub
129
130
131
sub RSDKLoad
132
CallFunction(EditorHelpers_FindTimePeriod)
133
switch CheckResult
134
case TIME_PRESENT
135
LoadSpriteSheet("R4/Objects.gif")
136
TempValue0 = 163
137
TempValue1 = 1
138
TempValue2 = 196
139
break
140
141
case TIME_PAST
142
LoadSpriteSheet("R4/Objects2.gif")
143
TempValue0 = 1
144
TempValue1 = 157
145
TempValue2 = 34
146
break
147
148
case TIME_GOOD_FUTURE
149
LoadSpriteSheet("R4/Objects2.gif")
150
TempValue0 = 1
151
TempValue1 = 190
152
TempValue2 = 34
153
break
154
155
case TIME_BAD_FUTURE
156
LoadSpriteSheet("R4/Objects2.gif")
157
TempValue0 = 1
158
TempValue1 = 223
159
TempValue2 = 34
160
break
161
end switch
162
163
// R4 Blocks
164
SpriteFrame(-64, -16, 32, 32, TempValue0, TempValue1)
165
SpriteFrame(-32, -16, 32, 32, TempValue0, TempValue1)
166
SpriteFrame(0, -16, 32, 32, TempValue0, TempValue1)
167
SpriteFrame(32, -16, 32, 32, TempValue0, TempValue1)
168
169
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
170
end sub
171
172