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/OOZ/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
end if
61
else
62
if player[currentPlayer].yvel >= 0
63
BoxCollisionTest(C_PLATFORM, object.entityPos, -14, -6, 14, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
64
if checkResult == true
65
object.stood = true
66
player[currentPlayer].ypos += 0x20000
67
else
68
BoxCollisionTest(C_TOUCH, object.entityPos, -20, -12, 20, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)
69
if checkResult == true
70
player[currentPlayer].ypos = player[currentPlayer].collisionBottom
71
FlipSign(player[currentPlayer].ypos)
72
player[currentPlayer].ypos <<= 16
73
player[currentPlayer].ypos += object.ypos
74
player[currentPlayer].ypos -= 0x20000
75
player[currentPlayer].gravity = GRAVITY_AIR
76
end if
77
end if
78
end if
79
end if
80
next
81
end event
82
83
84
event ObjectDraw
85
object.frame = object.stood
86
DrawSprite(object.frame)
87
end event
88
89
90
event ObjectStartup
91
// We're in OOZ, but load the MPZ sheet?
92
// Not only is it the wrong zone, but does this mean the MPZ sheet was done before the OOZ one?
93
// With how the rest of the game is structed and coded, it looks like it was primarily started from zone 1 then onwards in level order, but there's a skip here...
94
LoadSpriteSheet("MPZ/Objects.gif")
95
SpriteFrame(-16, -8, 32, 16, 317, 190)
96
SpriteFrame(-16, -4, 32, 8, 317, 190)
97
98
SetTableValue(TypeName[Push Button], DebugMode_ObjCount, DebugMode_TypesTable)
99
SetTableValue(PushButton_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
100
SetTableValue(PushButton_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
101
DebugMode_ObjCount++
102
end event
103
104
105
// ========================
106
// Editor Events
107
// ========================
108
109
event RSDKDraw
110
DrawSprite(0)
111
end event
112
113
114
event RSDKLoad
115
// The button sprites aren't located on the OOZ sheet at all, so..
116
LoadSpriteSheet("MPZ/Objects.gif")
117
SpriteFrame(-16, -8, 32, 16, 317, 190)
118
119
SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")
120
end event
121
122