Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/Assets/Lua/SNES/Megaman X.lua
2 views
1
--Author Pasky13
2
3
---------------
4
----GLOBALS----
5
---------------
6
local pbase = 0xBA8
7
local px = 0xBAD
8
local py = 0xBB0
9
local cx = 0x00B4
10
local cy = 0x00B6
11
12
---------------
13
----TOGGLES----
14
---------------
15
local draw_megaman = true
16
local draw_enemies = true
17
local draw_hpvalues = true
18
local draw_projectiles = true
19
--local draw_instantbox = false -- Bizhawk doesnt support breakpoints
20
21
local xm
22
local ym
23
24
-- Breakpoints not yet implemented in bizhawk
25
-- local function draw_instabox(base)
26
27
-- local camx = mainmemory.read_u16_le(cx)
28
-- local camy = mainmemory.read_u16_le(cy)
29
-- local facing = mainmemory.read_u8(base + 0x11)
30
-- local x = mainmemory.read_u16_le(base + 5) - camx
31
-- local y = mainmemory.read_u16_le(base + 8) - camy
32
-- local boxpointer = mainmemory.read_u16_le(base +0x20) + 0x860000
33
-- local xoff = mainmemory.read_s8(boxpointer + 0)
34
-- local yoff = mainmemory.read_s8(boxpointer + 1)
35
-- local xrad = mainmemory.read_u8(boxpointer + 2)
36
-- local yrad = mainmemory.read_u8(boxpointer + 3)
37
38
-- if facing > 0x45 then
39
-- xoff = xoff * -1
40
-- end
41
42
-- gui.drawBox(x + xoff +xrad,y + yoff + yrad, x + xoff - xrad, y + yoff - yrad,0xFFFF0000,0x05FF0000)
43
-- end
44
45
memory.usememorydomain("CARTROM")
46
47
local function megaman()
48
49
local camx = mainmemory.read_u16_le(cx)
50
local camy = mainmemory.read_u16_le(cy)
51
local x = mainmemory.read_u16_le(px) - camx
52
local y = mainmemory.read_u16_le(py) - camy
53
local facing = mainmemory.read_u8(pbase + 0x11)
54
local boxpointer = mainmemory.read_u16_le(pbase + 0x20) + 0x28000
55
local xoff = memory.read_s8(boxpointer + 0)
56
local yoff = memory.read_s8(boxpointer + 1)
57
local xrad = memory.read_u8(boxpointer + 2)
58
local yrad = memory.read_u8(boxpointer + 3)
59
60
if facing > 0x45 then
61
xoff = xoff * -1
62
end
63
64
gui.drawBox(x + xoff +xrad,y + yoff + yrad, x + xoff - xrad, y + yoff - yrad,0xFF0000FF,0x400000FF)
65
end
66
67
local function enemies()
68
69
local x
70
local xoff
71
local xrad
72
local y
73
local yoff
74
local yrad
75
local camx = mainmemory.read_u16_le(cx)
76
local camy = mainmemory.read_u16_le(cy)
77
local base
78
local boxpointer
79
local facing
80
local fill
81
local outl
82
local start = 0xE68
83
local oend = 32
84
85
for i = 0, oend,1 do
86
87
base = start + (i * 0x40)
88
89
if i == 0 then
90
base = start
91
end
92
93
if mainmemory.read_u8(base) ~= 0 then
94
95
if i > 14 and i < 21 then
96
if draw_projectiles == true then
97
fill = 0x40FFFFFF
98
outl = 0xFFFFFFFF
99
else
100
fill = 0x00000000
101
outl = 0x00000000
102
end
103
else
104
fill = 0x40FF0000
105
outl = 0xFFFF0000
106
end
107
108
if i > 21 then
109
fill = 0x40FFFF00
110
outl = 0xFFFFFF00
111
end
112
113
facing = mainmemory.read_u8(base + 0x11)
114
x = mainmemory.read_u16_le(base + 5) - camx
115
y = mainmemory.read_u16_le(base + 8) - camy
116
boxpointer = mainmemory.read_u16_le(base +0x20) + 0x28000
117
xoff = memory.read_s8(boxpointer + 0)
118
yoff = memory.read_s8(boxpointer + 1)
119
xrad = memory.read_u8(boxpointer + 2)
120
yrad = memory.read_u8(boxpointer + 3)
121
122
123
if facing > 0x45 then
124
xoff = xoff * -1
125
end
126
127
--Breakpoints not yet implemented in Bizhawk
128
-- if draw_instantbox == true then
129
-- memory.registerwrite(0x7E0000 + base + 0x20,2,function ()
130
-- draw_instabox(memory.getregister("D"))
131
-- end)
132
-- end
133
134
--gui.text(x,y,string.format("%X",base)) -- Debug
135
gui.drawBox(x + xoff +xrad,y + yoff + yrad, x + xoff - xrad, y + yoff - yrad,outl, fill)
136
137
if draw_hpvalues == true and mainmemory.read_u8(base+0x27) > 0 then
138
if i < 15 or i > 20 then
139
gui.text((x-5) * xm,(y-5) * ym,"HP: " .. mainmemory.read_u8(base+0x27))
140
end
141
end
142
end
143
end
144
end
145
146
local function scaler()
147
xm = client.screenwidth() / 256
148
ym = client.screenheight() / 224
149
end
150
151
while true do
152
scaler()
153
if draw_megaman == true then
154
megaman()
155
end
156
if draw_enemies == true then
157
enemies()
158
end
159
emu.frameadvance()
160
end
161