Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/Assets/Lua/NES/Faxandu.lua
2 views
1
------------------------------
2
--Faxandu collision box viewer
3
--Author: Pasky
4
------------------------------
5
6
local HP = true -- toggle to false to turn off hitpoint display on enemies
7
8
function findbit(p)
9
return 2 ^ (p - 1)
10
end
11
12
function hasbit(x, p)
13
return x % (p + p) >= p
14
end
15
16
local function hex(val)
17
val = string.format("%X",val)
18
return val
19
end
20
21
memory.usememorydomain("System Bus")
22
23
local function player()
24
local x = memory.read_u8(0x9E)
25
local y = memory.read_u8(0xA1) + 0x1F
26
local hp = memory.read_u8(0x431)
27
-- vuln box
28
gui.drawBox(x,y,x+0xB,y+0x1B,0xFF0000FF,0x300000FF)
29
30
--attack box
31
local xrad = memory.read_u8(0xD2)
32
local yrad = memory.read_u8(0xD3)
33
local atk = memory.read_u8(0xA4)
34
local x2 = memory.read_u8(0xCE)
35
local y2 = memory.read_u8(0xD0) + 0x1F
36
37
if hasbit(atk,findbit(8)) then
38
gui.drawBox(x2,y2,x2+xrad,y2+yrad)
39
end
40
41
--Magic
42
local mag = memory.read_u8(0x02B3)
43
if mag ~= 0xFF then
44
local addr = 0x8B73 + mag
45
local magx = memory.read_u8(0x2B6)
46
local magy = memory.read_u8(0x2B8) + 0x1F
47
xrad = memory.read_u8(addr)
48
yrad = memory.read_u8(addr + 5)
49
gui.drawBox(magx,magy,magx+xrad,magy+yrad)
50
end
51
end
52
53
local function enemies()
54
local base = 0xBA
55
for i = 0,7,1 do
56
local etype = memory.read_u8(0x2CC + i)
57
if etype ~= 0xFF then
58
local x = memory.read_u8(base + i)
59
local y = memory.read_u8(base + 8 + i) + 0x1F
60
local hp = memory.read_u8(0x344 + i)
61
local atk = memory.read_u8(0x2E4 + i)
62
local atk2 = false
63
local facing = memory.read_u8(0x2DC + i)
64
local addr
65
66
if etype == 0x1F or etype == 0x21 then -- Check if dwarf or ???
67
if atk == 0x02 then
68
addr = 0x8A71
69
atk2 = true
70
else
71
addr = 0xB200 + (etype * 4) + 0x73
72
end
73
elseif etype == 0x20 then
74
if atk == 0x04 then
75
addr = 0x8A75
76
atk2 = true
77
else
78
addr = 0xB200 + (etype * 4) + 0x73
79
end
80
else
81
addr = 0xB200 + (etype * 4) + 0x73
82
end
83
84
local xoff = memory.read_s8(addr)
85
local yoff = memory.read_s8(addr + 1)
86
local xrad = memory.read_s8(addr + 2)
87
local yrad = memory.read_s8(addr + 3)
88
89
if not hasbit(facing,findbit(1)) and atk2 == true then
90
xoff = xoff * -1
91
xrad = xrad * -1
92
end
93
94
--Attack box
95
gui.drawBox(x,y+yoff,x+xoff+xrad,y+yoff+yrad,0xFFFF0000,0x70FF0000)
96
if HP == true then
97
gui.text(x,y-10,"HP: " .. hp)
98
end
99
--Vuln box
100
if memory.read_u8(etype + 0xB544) == 0 then
101
addr = 0xB407 + (etype * 2)
102
xrad = memory.read_u8(addr)
103
yrad = memory.read_u8(addr + 1)
104
gui.drawBox(x,y,x+xrad,y+yrad,0xFFFFFF00,0x30FFFF00)
105
end
106
end
107
end
108
end
109
110
while true do
111
player()
112
enemies()
113
emu.frameadvance()
114
end
115