-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSonic 3 & Knuckles.lua
More file actions
103 lines (82 loc) · 2.79 KB
/
Sonic 3 & Knuckles.lua
File metadata and controls
103 lines (82 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
dofile("KLib/KLib.lua")
Address =
{
Object =
{
Base = 0xB000,
End = 0xCFCB,
Size = 0x4A,
Offset =
{
ArtBlock = 0x0A,
X = 0x10,
SubX = 0x12,
Y = 0x14,
SubY = 0x16,
SecondaryStatusFlags = 0x2B,
}
},
RingStatusTable =
{
Base = 0xE700,
End = 0xEAFF,
Size = 0x02
},
Lives = 0xFE12,
Continues = 0xFE18,
Rings = 0xFE20,
Score = 0xFE26,
Time =
{
Minutes = 0xFE23,
Seconds = 0xFE24,
Centiseconds = 0xFE25
}
}
SecondaryStatusFlags =
{
ShieldActive = 0,
FireShield = 4,
LightningShield = 5,
BubbleShield = 6
}
memory.usememorydomain("68K RAM")
while true do
KLib.Update()
-- Fire Shield
if KLib.Input.ButtonPressed("P1 X") then
local flags = KLib.Memory.ReadByte(Address.Object.Base + Address.Object.Offset.SecondaryStatusFlags)
flags = bit.set(flags, SecondaryStatusFlags.ShieldActive)
flags = bit.set(flags, SecondaryStatusFlags.FireShield)
flags = bit.clear(flags, SecondaryStatusFlags.LightningShield)
flags = bit.clear(flags, SecondaryStatusFlags.BubbleShield)
KLib.Memory.WriteByte(Address.Object.Base + Address.Object.Offset.SecondaryStatusFlags, flags)
end
-- Lightning Shield
if KLib.Input.ButtonPressed("P1 Y") then
local flags = KLib.Memory.ReadByte(Address.Object.Base + Address.Object.Offset.SecondaryStatusFlags)
flags = bit.set(flags, SecondaryStatusFlags.ShieldActive)
flags = bit.clear(flags, SecondaryStatusFlags.FireShield)
flags = bit.set(flags, SecondaryStatusFlags.LightningShield)
flags = bit.clear(flags, SecondaryStatusFlags.BubbleShield)
KLib.Memory.WriteByte(Address.Object.Base + Address.Object.Offset.SecondaryStatusFlags, flags)
end
-- Bubble Shield
if KLib.Input.ButtonPressed("P1 Z") then
local flags = KLib.Memory.ReadByte(Address.Object.Base + Address.Object.Offset.SecondaryStatusFlags)
flags = bit.set(flags, SecondaryStatusFlags.ShieldActive)
flags = bit.clear(flags, SecondaryStatusFlags.FireShield)
flags = bit.clear(flags, SecondaryStatusFlags.LightningShield)
flags = bit.set(flags, SecondaryStatusFlags.BubbleShield)
KLib.Memory.WriteByte(Address.Object.Base + Address.Object.Offset.SecondaryStatusFlags, flags)
end
-- Add Rings
if KLib.Input.Joypad["P1 Mode"] then
local rings = KLib.Memory.ReadShortBig(Address.Rings)
if rings < 1000 then
KLib.Memory.WriteShortBig(Address.Rings, rings + 1)
end
end
emu.frameadvance()
KLib.PostUpdate()
end