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/Enemies/SlicerArm.txt
1483 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Slicer Arm 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.timer
13
private alias object.value1 : object.parent
14
15
// States
16
private alias 0 : SLICERARM_THROWN
17
private alias 1 : SLICERARM_FALLING
18
19
// Player Aliases
20
private alias object.xpos : player.xpos
21
22
23
// ========================
24
// Events
25
// ========================
26
27
event ObjectUpdate
28
object.xpos += object.xvel
29
object.ypos += object.yvel
30
31
if object.state == SLICERARM_THROWN
32
temp2 = 0x7FFFFFFF
33
arrayPos0 = 0
34
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
35
temp0 = player[currentPlayer].xpos
36
temp0 -= object.xpos
37
if temp0 < 0
38
FlipSign(temp0)
39
end if
40
41
if temp0 < temp2
42
temp2 = temp0
43
arrayPos0 = currentPlayer
44
end if
45
next
46
47
if object[arrayPos0].xpos < object.xpos
48
object.xvel -= 0x1000
49
if object.xvel < -0x20000
50
object.xvel = -0x20000
51
end if
52
else
53
object.xvel += 0x1000
54
if object.xvel > 0x20000
55
object.xvel = 0x20000
56
end if
57
end if
58
59
if object[arrayPos0].ypos < object.ypos
60
object.yvel -= 0x1000
61
if object.yvel < -0x20000
62
object.yvel = -0x20000
63
end if
64
else
65
object.yvel += 0x1000
66
if object.yvel > 0x20000
67
object.yvel = 0x20000
68
end if
69
end if
70
71
object.timer++
72
if object.timer >= 120
73
object.state++
74
end if
75
76
arrayPos0 = object.parent
77
if object[arrayPos0].type != TypeName[Slicer]
78
object.state++
79
end if
80
else
81
object.yvel += 0x3800
82
end if
83
84
temp0 = screen.xcenter
85
temp0 += 32
86
temp1 = screen.ycenter
87
temp1 += 32
88
CheckCameraProximity(object.ixpos, object.iypos, temp0, temp1)
89
if checkResult == false
90
object.type = TypeName[Blank Object]
91
end if
92
93
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
94
BoxCollisionTest(C_TOUCH, object.entityPos, -12, -12, 12, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
95
if checkResult == true
96
CallFunction(Player_Hit)
97
end if
98
next
99
100
object.frame = object.animationTimer
101
object.frame >>= 2
102
object.animationTimer++
103
object.animationTimer &= 15
104
end event
105
106
107
event ObjectDraw
108
DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)
109
end event
110
111
112
event ObjectStartup
113
CheckCurrentStageFolder("Zone09")
114
if checkResult == true
115
LoadSpriteSheet("MPZ/Objects.gif")
116
SpriteFrame(0, -16, 16, 16, 75, 51)
117
SpriteFrame(0, 0, 16, 16, 58, 51)
118
SpriteFrame(-16, 0, 16, 16, 75, 34)
119
SpriteFrame(-16, -16, 16, 16, 58, 34)
120
else
121
LoadSpriteSheet("MBZ/Objects.gif")
122
SpriteFrame(0, -16, 16, 16, 926, 306)
123
SpriteFrame(0, 0, 16, 16, 909, 306)
124
SpriteFrame(-16, 0, 16, 16, 926, 289)
125
SpriteFrame(-16, -16, 16, 16, 909, 289)
126
end if
127
end event
128
129
130
// ========================
131
// Editor Events
132
// ========================
133
134
event RSDKDraw
135
DrawSprite(0)
136
end event
137
138
139
event RSDKLoad
140
CheckCurrentStageFolder("Zone09")
141
if checkResult == true
142
LoadSpriteSheet("MPZ/Objects.gif")
143
SpriteFrame(0, -16, 16, 16, 75, 51)
144
else
145
LoadSpriteSheet("MBZ/Objects.gif")
146
SpriteFrame(0, -16, 16, 16, 926, 306)
147
end if
148
149
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
150
end event
151
152