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/MBZ/PushButton.txt
1478 views
1
// ----------------------------------
2
// RSDK Project: Sonic 2
3
// Script Description: Push Button 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.pressed
13
private alias object.value1 : object.stood
14
15
// Player Aliases
16
private alias object.ypos : player.ypos
17
private alias object.yvel : player.yvel
18
private alias object.gravity : player.gravity
19
private alias object.collisionBottom : player.collisionBottom
20
21
22
// ========================
23
// Function Declarations
24
// ========================
25
26
reserve function PushButton_DebugDraw
27
reserve function PushButton_DebugSpawn
28
29
30
// ========================
31
// Function Definitions
32
// ========================
33
34
private function PushButton_DebugDraw
35
DrawSprite(0)
36
end function
37
38
39
private function PushButton_DebugSpawn
40
CreateTempObject(TypeName[Push Button], 0, object.xpos, object.ypos)
41
end function
42
43
44
// ========================
45
// Events
46
// ========================
47
48
event ObjectUpdate
49
object.pressed = false
50
object.stood = false
51
52
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
53
if object.frame == 0
54
BoxCollisionTest(C_SOLID, object.entityPos, -14, -6, 14, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
55
if checkResult == COL_TOP
56
object.stood = true
57
object.pressed = true
58
player[currentPlayer].ypos += 40000
59
PlaySfx(SfxName[Button Press], false)
60
61
object[+1].priority = PRIORITY_ACTIVE
62
if object[+1].state == 0
63
PlaySfx(SfxName[Event], false)
64
end if
65
object[+1].state = 1
66
end if
67
else
68
if player[currentPlayer].yvel >= 0
69
BoxCollisionTest(C_PLATFORM, object.entityPos, -14, -6, 14, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
70
if checkResult == true
71
object.stood = true
72
player[currentPlayer].ypos += 0x20000
73
else
74
BoxCollisionTest(C_TOUCH, object.entityPos, -20, -12, 20, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
75
if checkResult == true
76
player[currentPlayer].ypos = player[currentPlayer].collisionBottom
77
FlipSign(player[currentPlayer].ypos)
78
player[currentPlayer].ypos <<= 16
79
player[currentPlayer].ypos += object.ypos
80
player[currentPlayer].ypos -= 0x20000
81
player[currentPlayer].gravity = GRAVITY_AIR
82
end if
83
end if
84
end if
85
end if
86
next
87
end event
88
89
90
event ObjectDraw
91
object.frame = object.stood
92
DrawSprite(object.frame)
93
end event
94
95
96
event ObjectStartup
97
LoadSpriteSheet("MBZ/Objects.gif")
98
99
// Button frames
100
SpriteFrame(-16, -8, 32, 16, 649, 933)
101
SpriteFrame(-16, -4, 32, 8, 649, 933)
102
103
// Add this object to the debug mode item list
104
SetTableValue(TypeName[Push Button], DebugMode_ObjCount, DebugMode_TypesTable)
105
SetTableValue(PushButton_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
106
SetTableValue(PushButton_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
107
DebugMode_ObjCount++
108
end event
109
110
111
// ========================
112
// Editor Events
113
// ========================
114
115
event RSDKDraw
116
DrawSprite(0)
117
118
if editor.showGizmos == true
119
editor.drawingOverlay = true
120
121
// Draw a line to the connecting door
122
DrawArrow(object.xpos, object.ypos, object[+1].xpos, object[+1].ypos, 255, 255, 0)
123
124
editor.drawingOverlay = false
125
end if
126
end event
127
128
129
event RSDKLoad
130
LoadSpriteSheet("MBZ/Objects.gif")
131
SpriteFrame(-16, -8, 32, 16, 649, 933)
132
133
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
134
end event
135
136