Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/Assets/Lua/Genesis/Legend of Toki.lua
2 views
1
--Author Pasky13
2
3
-- Player
4
local pbase = 0x1CD4
5
local px = pbase + 0x19
6
local py = pbase + 0x1D
7
8
local camx = 0x1BC5
9
local camy = 0x1BC9
10
11
--Player projectiles
12
13
local projbase = 0x1D34
14
15
--Enemies
16
local ebase = 0x21B4
17
18
--Bosses
19
local bbase = 0x35F4
20
21
--Text scaler
22
local xs
23
local ys
24
25
26
local function endian(address)
27
local result = mainmemory.read_u8(address) + (mainmemory.read_u8(address-1) * 256)
28
return result
29
end
30
31
local function Toki()
32
local cx = endian(camx)
33
local cy = endian(camy)
34
local x = endian(px) - cx
35
local y = endian(py) - cy
36
local xoff = mainmemory.read_s8(pbase + 0x11)
37
local yoff = mainmemory.read_s8(pbase + 0x15)
38
local xrad = mainmemory.read_u8(pbase +0x13)
39
local yrad = mainmemory.read_u8(pbase +0x17)
40
local flip = mainmemory.read_u8(pbase +1)
41
if flip == 1 then
42
xoff = xoff * -1
43
end
44
gui.drawBox(x+xoff-xrad,y+yoff-yrad,x+xoff+xrad,y+yoff+yrad,0xFF0000FF,0x300000FF)
45
end
46
47
local function enemies()
48
local cx = endian(camx)
49
local cy = endian(camy)
50
local x
51
local y
52
local xoff
53
local xrad
54
local yoff
55
local yrad
56
local oend = 44
57
local base = ebase
58
local flip
59
local hp
60
for i = 0,oend,1 do
61
if i > 0 then
62
base = ebase + (i * 0x60)
63
end
64
flip = mainmemory.read_u8(base +1)
65
if mainmemory.read_u8(base) > 0 then
66
hp = mainmemory.read_u8(base + 0xD)
67
x = endian(base + 0x19) - cx
68
xrad = mainmemory.read_u8(base + 0x13)
69
xoff = mainmemory.read_s8(base + 0x11)
70
yrad = mainmemory.read_u8(base + 0x17)
71
yoff = mainmemory.read_s8(base + 0x15)
72
73
if flip == 1 then
74
xoff = xoff * -1
75
end
76
y = endian(base + 0x1D) - cy
77
if hp > 0 then
78
gui.text((x-10) * xs,(y-10) * ys, "HP: " .. hp)
79
end
80
gui.drawBox(x+xoff-xrad,y+yoff-yrad,x+xoff+xrad,y+yoff+yrad,0xFFFF0000,0x35FF0000)
81
end
82
end
83
end
84
85
local function boss()
86
local cx = endian(camx)
87
local cy = endian(camy)
88
local x = endian(bbase + 0x19) - cx
89
local y = endian(bbase + 0x1D) - cy
90
local xrad = mainmemory.read_u8(bbase + 0x11)
91
local yrad = mainmemory.read_u8(bbase + 0x15)
92
local hp = mainmemory.read_u8(bbase+ 0x0D)
93
94
if hp > 0 then
95
gui.text((x-10) * xs,(y-10) * ys,"HP: " .. mainmemory.read_u8(bbase + 0x0D))
96
end
97
gui.drawBox(x-xrad,y-yrad,x+xrad,y+yrad,0xFFFF0000,0x35FF0000)
98
end
99
100
local function projectiles()
101
local cx = endian(camx)
102
local cy = endian(camy)
103
local x
104
local y
105
local xoff
106
local xrad
107
local yoff
108
local yrad
109
local oend = 11
110
local base = projbase
111
local flip
112
113
for i = 0,oend,1 do
114
if i > 0 then
115
base = projbase + (i * 0x60)
116
end
117
flip = mainmemory.read_u8(base +1)
118
119
if mainmemory.read_u8(base) > 0 then
120
x = endian(base + 0x19) - cx
121
y = endian(base + 0x1D) - cy
122
xoff = mainmemory.read_s8(base + 0x11)
123
yoff = mainmemory.read_s8(base + 0x15)
124
xrad = mainmemory.read_u8(base + 0x13)
125
yrad = mainmemory.read_u8(base + 0x17)
126
127
if flip == 1 then
128
xoff = xoff * -1
129
end
130
gui.drawBox(x+xoff-xrad,y+yoff-yrad,x+xoff+xrad,y+yoff+yrad,0xFFFFFFFF,0x40FFFFFF)
131
end
132
end
133
134
end
135
136
local function scaler()
137
xs = client.screenwidth() / 320
138
ys = client.screenheight() / 224
139
end
140
141
142
while true do
143
scaler()
144
Toki()
145
enemies()
146
projectiles()
147
boss()
148
emu.frameadvance()
149
end
150