Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/Assets/Lua/NES/Crystalis.lua
2 views
1
local camx
2
local camy
3
local HPDISPLAY = true
4
5
memory.usememorydomain("PRG ROM")
6
7
local function camera()
8
camx = mainmemory.read_u8(0x02)
9
if mainmemory.read_u8(0x03) > 0x7F then
10
camx = mainmemory.read_s8(0x02)
11
else
12
camx = camx + mainmemory.read_u8(0x03) * 256
13
end
14
camy = mainmemory.read_u8(0x04)
15
if mainmemory.read_u8(0x05) > 0x7F then
16
camy = mainmemory.read_s8(0x04) + 17
17
else
18
camy = camy + mainmemory.read_u8(0x05) * 239
19
end
20
end
21
22
local function player()
23
local x = mainmemory.read_u8(0x70) + mainmemory.read_u8(0x90) * 256 - camx
24
local y = mainmemory.read_u8(0xB0) + mainmemory.read_u8(0xD0) * 239 - camy
25
local x2 = mainmemory.read_u8(0x5C0)
26
local y2 = mainmemory.read_u8(0x5E0)
27
local invuln = mainmemory.read_u8(0x71A)
28
29
if bit.band(mainmemory.read_u8(0x3A1),0xF0) ~= 0 and invuln == 0 then -- If box exists
30
local off1 = bit.band(mainmemory.read_u8(0x3A1),0xF) * 4
31
local off2 = bit.bor(bit.band(mainmemory.read_u8(0x421),0x40),off1)
32
33
local xoff = memory.read_s8(0x35691 + off2)
34
local xrad = memory.read_u8(0x35692 + off2)
35
local yoff = memory.read_s8(0x35693 + off2)
36
local yrad = memory.read_u8(0x35694 + off2)
37
38
gui.drawBox(x+xoff,y+yoff,x+xoff+xrad,y+yoff+yrad,0xFF0000FF,0x300000FF)
39
end
40
41
42
--Player's attacks
43
for i = 2,4,1 do
44
45
if mainmemory.read_u8(0x4A0 + i) ~= 0 and i ~= 3 then
46
x = mainmemory.read_u8(0x70 + i) + mainmemory.read_u8(0x90 + i) * 256 - camx
47
y = mainmemory.read_u8(0xB0 + i) + mainmemory.read_u8(0xD0 + i) * 239 - camy
48
x2 = mainmemory.read_u8(0x5C0 + i)
49
y2 = mainmemory.read_u8(0x5E0 + i)
50
51
off1 = bit.band(mainmemory.read_u8(0x3A0 + i),0xF) * 4
52
off2 = bit.bor(bit.band(mainmemory.read_u8(0x422),0x40),off1)
53
54
xoff = memory.read_s8(0x35691 + off2)
55
xrad = memory.read_u8(0x35692 + off2)
56
yoff = memory.read_s8(0x35693 + off2)
57
yrad = memory.read_u8(0x35694 + off2)
58
59
gui.drawBox(x+xoff,y+yoff,x+xoff+xrad,y+yoff+yrad)
60
end
61
end
62
end
63
64
local function enemies()
65
for i = 5,0x1F,1 do
66
67
if mainmemory.read_u8(0x4A0 + i) ~= 0 then
68
local x = mainmemory.read_u8(0x70 + i) + mainmemory.read_u8(0x90 + i) * 256 - camx
69
local y = mainmemory.read_u8(0xB0 + i) + mainmemory.read_u8(0xD0 + i) * 239 - camy
70
local x2 = mainmemory.read_u8(0x5C0 + i)
71
local y2 = mainmemory.read_u8(0x5E0 + i)
72
local hp = mainmemory.read_u8(0x3C0 + i)
73
74
if x < 256 and x > 0 and y < 239 and y > 0 then
75
if bit.band(mainmemory.read_u8(0x3A0 + i),0xF0) ~= 0 then -- If box exists
76
local off1 = bit.band(mainmemory.read_u8(0x3A0 + i),0xF) * 4
77
local off2 = bit.bor(bit.band(mainmemory.read_u8(0x420 + i),0x40),off1)
78
79
80
local xoff = memory.read_s8(0x35691 + off2)
81
local xrad = memory.read_u8(0x35692 + off2)
82
local yoff = memory.read_s8(0x35693 + off2)
83
local yrad = memory.read_u8(0x35694 + off2)
84
85
gui.drawBox(x+xoff,y+yoff,x+xoff+xrad,y+yoff+yrad,0xFFFF0000,0x30FF0000)
86
87
if HPDISPLAY == true then
88
gui.text(x,y,"HP: " .. hp)
89
end
90
end
91
end
92
end
93
end
94
end
95
96
while true do
97
camera()
98
player()
99
enemies()
100
emu.frameadvance()
101
end
102