Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/Assets/Lua/NES/NinjaGaiden_Hitbox.lua
2 views
1
--Author Pasky13
2
3
--Player
4
local px = 0x0086
5
local py = 0x008A
6
7
local projxbase = 0x4BB -- Object X speed base is 0x4C1
8
local projybase = 0x4BE -- Object Y speed base ix 0x4C4
9
10
--Enemies
11
local ex = 0x0460
12
local ey = 0x0480
13
local efacing = 0x440
14
local etype = 0x0438
15
16
--Objects
17
local ox = 0x4D9
18
local oy = 0x4E1
19
20
memory.usememorydomain("PRG ROM")
21
22
local function Ryu()
23
local x = mainmemory.read_u8(px)
24
local y = mainmemory.read_u8(py)
25
local yrad = mainmemory.read_u8(0x90)
26
local act = mainmemory.read_u8(0x83)
27
local subwep = mainmemory.read_u8(0xC9)
28
local flip = 0
29
local swdactive = mainmemory.read_u8(0x83)
30
31
if bit.band(mainmemory.read_u8(0x84),0x40) == 0x40 then
32
flip = 1
33
end
34
--Spin slash check
35
if subwep == 0x85 then
36
if mainmemory.read_u8(0x83) >= 0x0C and mainmemory.read_u8(0x83) <= 0x0F then
37
gui.drawBox(x+9,y-8,x-9,y-yrad,0xFFFFFF00,0x60FFFF00)
38
end
39
end
40
--Check if Ryu is attacking with sword 7 = stand/jump, A = crouching
41
if swdactive == 7 or swdactive == 0x0A then
42
if flip == 0 then
43
gui.drawBox(x,y-yrad,x+0x20,y-yrad+0x10,0xFFFFFFFF,0x60FFFFFF)
44
else
45
gui.drawBox(x,y-yrad,x-0x20,y-yrad+0x10,0xFFFFFFFF,0x60FFFFFF)
46
end
47
end
48
-- Check spinning flame subweapon
49
if subwep == 0x84 then
50
if mainmemory.read_u8(0x4C8) > 0 then
51
gui.drawBox(x+9,y-8,x-9,y-yrad,0xFFFFFF00,0x60FFFF00)
52
end
53
end
54
gui.drawLine(x,y,x,y-yrad,0xFF0000FF)
55
end
56
57
local function weapons()
58
for i = 0,2,1 do
59
active = bit.band(mainmemory.read_u8(0xC8),memory.read_u8(0x1E66F + i))
60
if active > 0 then
61
local wtype = bit.band(mainmemory.read_u8(0xC9),0x7F)
62
local x = mainmemory.read_u8(projxbase + i)
63
local y = mainmemory.read_u8(projybase + i)
64
local xrad = memory.read_u8(0x1E605 + wtype)
65
gui.drawBox(x+xrad,y,x-xrad,y-xrad,0xFFFF00FF,0x60FF00FF)
66
end
67
end
68
end
69
70
local function enemies()
71
for i = 0,8,1 do
72
local active = bit.band(mainmemory.read_u8(0x73),memory.read_u8(0x1E66F + i))
73
if active > 0 then
74
local offset = mainmemory.read_u8(etype + i)
75
local x = mainmemory.read_u8(ex + i)
76
local y = mainmemory.read_u8(ey + i)
77
local xrad = memory.readbyte(0x3300 + offset)
78
local yrad = memory.readbyte(0x3400 + offset)
79
gui.drawBox(x+xrad,y,x-xrad,y-yrad,0xFFFF0000,0x60FF0000)
80
gui.drawLine(x,y,x,y-yrad,0xFFFFFF00)
81
end
82
end
83
end
84
85
local function objects()
86
for i = 0,3,1 do
87
local active = bit.band(mainmemory.read_u8(0xC0),memory.read_u8(0x1E66F + i))
88
if active > 0 then
89
active = bit.band(mainmemory.read_u8(0x4D1 + i),8)
90
if active == 0 then
91
x = mainmemory.read_u8(ox + i)
92
y = mainmemory.read_u8(oy + i)
93
gui.drawLine(x,y,x,y-0x10,0xFF00FFF0)
94
gui.drawBox(x-0x0C,y,x+0x0C,y-0x10,0xFF00FFF0,0x6000FFF0)
95
end
96
end
97
end
98
end
99
100
while true do
101
Ryu()
102
weapons()
103
enemies()
104
objects()
105
emu.frameadvance()
106
end
107