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/MCZ/PullSwitch.txt
1480 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Pull Switch 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.pulled
13
14
// Player Aliases
15
private alias object.state : player.state
16
private alias object.animation : player.animation
17
private alias object.gravity : player.gravity
18
private alias object.collisionTop : player.collisionTop
19
private alias object.xpos : player.xpos
20
private alias object.ypos : player.ypos
21
private alias object.xvel : player.xvel
22
private alias object.yvel : player.yvel
23
private alias object.speed : player.speed
24
private alias object.jumpPress : player.jumpPress
25
private alias object.down : player.down
26
27
28
// ========================
29
// Function Declarations
30
// ========================
31
32
reserve function PullSwitch_DebugDraw
33
reserve function PullSwitch_DebugSpawn
34
35
36
// ========================
37
// Function Definitions
38
// ========================
39
40
private function PullSwitch_DebugDraw
41
DrawSprite(0)
42
end function
43
44
45
private function PullSwitch_DebugSpawn
46
CreateTempObject(TypeName[Pull Switch], 0, object.xpos, object.ypos)
47
end function
48
49
50
// ========================
51
// Events
52
// ========================
53
54
event ObjectUpdate
55
object.pulled = false
56
57
temp0 = object.ypos
58
temp0 += 0x300000
59
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
60
if player[currentPlayer].state != Player_State_Static
61
if player[currentPlayer].down == false // Can't grab the switch while holding down
62
63
// Different boxes depending on if the player is higher than or lower than the switch
64
if player[currentPlayer].ypos < temp0
65
BoxCollisionTest(C_TOUCH, object.entityPos, -8, 64, 8, 68, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
66
else
67
BoxCollisionTest(C_TOUCH, object.entityPos, -8, 46, 8, 48, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
68
end if
69
70
if checkResult == true
71
if player[currentPlayer].gravity == GRAVITY_AIR
72
// Make the player grab on
73
player[currentPlayer].state = Player_State_Static
74
player[currentPlayer].animation = ANI_HANGING
75
player[currentPlayer].speed = 0
76
player[currentPlayer].xvel = 0
77
player[currentPlayer].yvel = 0
78
player[currentPlayer].xpos = object.xpos
79
player[currentPlayer].ypos = player[currentPlayer].collisionTop
80
FlipSign(player[currentPlayer].ypos)
81
player[currentPlayer].ypos += 26
82
player[currentPlayer].ypos <<= 16
83
player[currentPlayer].ypos += object.ypos
84
object.pulled |= true
85
end if
86
end if
87
end if
88
else
89
BoxCollisionTest(C_TOUCH, object.entityPos, -8, 0, 8, 64, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
90
91
if checkResult == true
92
if player[currentPlayer].jumpPress == true
93
// Jump off
94
#platform: USE_STANDALONE
95
player[currentPlayer].state = Player_State_Air
96
#endplatform
97
#platform: USE_ORIGINS
98
player[currentPlayer].state = Player_State_Air_NoDropDash
99
#endplatform
100
player[currentPlayer].yvel = -0x40000
101
player[currentPlayer].gravity = GRAVITY_AIR
102
else
103
// Keep the player hanging on
104
player[currentPlayer].xpos = object.xpos
105
player[currentPlayer].ypos = player[currentPlayer].collisionTop
106
FlipSign(player[currentPlayer].ypos)
107
player[currentPlayer].ypos += 26
108
player[currentPlayer].ypos <<= 16
109
player[currentPlayer].ypos += object.ypos
110
object.pulled |= true
111
end if
112
end if
113
end if
114
next
115
116
// The only time the sprite frame and pull state aren't synced is the frame when the switch has just been grabbed,
117
// so it's safe to play the SFX like this
118
if object.frame == 0
119
if object.pulled == true
120
PlaySfx(SfxName[Pull Switch], false)
121
end if
122
end if
123
124
// Make the sprite correspond with the pull state
125
object.frame = object.pulled
126
end event
127
128
129
event ObjectDraw
130
DrawSprite(object.frame)
131
end event
132
133
134
event ObjectStartup
135
LoadSpriteSheet("MCZ/Objects.gif")
136
SpriteFrame(-8, -48, 16, 95, 215, 161) // 0 - Normal frame
137
SpriteFrame(-8, -44, 16, 95, 215, 161) // 1 - Pulled frame (same graphic, different offset)
138
139
// Add this object to the debug item list
140
SetTableValue(TypeName[Pull Switch], DebugMode_ObjCount, DebugMode_TypesTable)
141
SetTableValue(PullSwitch_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
142
SetTableValue(PullSwitch_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
143
DebugMode_ObjCount++
144
end event
145
146
147
// ========================
148
// Editor Events
149
// ========================
150
151
event RSDKDraw
152
DrawSprite(0)
153
end event
154
155
156
event RSDKLoad
157
LoadSpriteSheet("MCZ/Objects.gif")
158
SpriteFrame(-8, -48, 16, 95, 215, 161)
159
160
// Although used by the object, it's not to be set from editor
161
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
162
end event
163
164