Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/Assets/Lua/NES/Contra force.lua
2 views
1
----------TOGGLES----------
2
3
DISPLAY_ENEMY_HP = true
4
--------END TOGGLES--------
5
6
xbase = 0x64E
7
ybase = 0x668
8
abase = 0x682
9
hpbase = 0x796
10
offscreen = 0x600
11
xm = 0
12
ym = 0
13
--P1X
14
-- animation 0x61A
15
16
local proj_fill = 0xFF00FF00
17
local proj_outl = 0x3000FF00
18
19
local enemy_fill = 0xFFFF0000
20
local enemy_outl = 0x30FF0000
21
22
local player_fill = 0xFF0000FF
23
local player_outl = 0x300000FF
24
25
local pproj_fill = 0xFFFFFFFF
26
local pproj_oult = 0x30FFFFFF
27
28
memory.usememorydomain("System Bus")
29
30
local function hex(val)
31
val = string.format("%X",val)
32
return val
33
end
34
35
local function player()
36
local active = mainmemory.read_u8(abase)
37
if active > 0 then
38
local offset = bit.band(mainmemory.read_u8(0x720),0x3F) * 2
39
local xrad = memory.read_u8(0xF94A + offset)
40
local yrad = memory.read_u8(0xF94B + offset)
41
local hp = mainmemory.read_u8(hpbase)
42
local x = mainmemory.read_u8(xbase)
43
local y = mainmemory.read_u8(ybase)
44
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad, player_fill, player_outl)
45
end
46
end
47
48
local function player_proj()
49
for i = 10,11,1 do
50
local active = mainmemory.read_u8(abase + i)
51
local oscr = bit.band(mainmemory.read_u8(offscreen + i),0xF0)
52
53
if oscr == 0x20 then
54
oscr = -255
55
elseif oscr == 0x10 then
56
oscr = 255
57
end
58
59
if active > 0 then
60
local offset = bit.band(mainmemory.read_u8(0x720 + i),0x3F) * 2
61
local xrad = memory.read_u8(0xF94A + offset)
62
local yrad = memory.read_u8(0xF94B + offset)
63
local x = mainmemory.read_u8(xbase + i) + oscr
64
local y = mainmemory.read_u8(ybase + i)
65
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad, pproj_fill, pproj_outl)
66
end
67
end
68
69
end
70
71
local function enemy()
72
for i = 2,8,1 do
73
local active = mainmemory.read_u8(abase + i)
74
local oscr = bit.band(mainmemory.read_u8(offscreen + i),0xF0)
75
if oscr == 0x20 then
76
oscr = -255
77
elseif oscr == 0x10 then
78
oscr = 255
79
end
80
if active > 0 then
81
local offset = bit.band(mainmemory.read_u8(0x720 + i),0x3F) * 2
82
local xrad = memory.read_u8(0xF94A + offset)
83
local yrad = memory.read_u8(0xF94B + offset)
84
local hp = mainmemory.read_u8(hpbase + i)
85
local x = mainmemory.read_u8(xbase + i) + oscr
86
local y = mainmemory.read_u8(ybase + i)
87
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad, enemy_fill, enemy_outl)
88
if DISPLAY_ENEMY_HP == true then
89
gui.text(x * xm,y * ym,hp)
90
end
91
end
92
end
93
end
94
95
local function e_proj()
96
local pbase = 0x720
97
for i = 18,22,1 do
98
local active = mainmemory.read_u8(abase + i)
99
local oscr = bit.band(mainmemory.read_u8(offscreen + i),0xF0)
100
if oscr == 0x20 then
101
oscr = -255
102
elseif oscr == 0x10 then
103
oscr = 255
104
end
105
if active > 0 then
106
local offset = bit.band(mainmemory.read_u8(0x720 + i),0x3F) * 2
107
local xrad = memory.read_u8(0xF94A + offset)
108
local yrad = memory.read_u8(0xF94B + offset)
109
local x = mainmemory.read_u8(xbase + i) + oscr
110
local y = mainmemory.read_u8(ybase + i)
111
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad, proj_fill, proj_outl)
112
end
113
end
114
end
115
116
local function scaler()
117
xm = client.screenwidth() / 256
118
ym = client.screenheight() / 224
119
end
120
121
while true do
122
scaler()
123
player()
124
enemy()
125
e_proj()
126
player_proj()
127
emu.frameadvance()
128
end
129