This should be what you're looking for. Some of these values aren't even aligned to byte boundaries, so it's no surprise that you couldn't find them.
function exp()
local prevexp
local totalexp
prevexp = math.mod(memory.readdword(0x0202BC31),1048576)
totalexp = 0
for i=0,0x44 do
totalexp = totalexp + math.floor(memory.readword(0x0203E7A9+0x10*i)/16)
end
return totalexp, totalexp - prevexp
end
function funds()
local prevfunds
local totalfunds
prevfunds = memory.readdword(0x0202BC28)
totalfunds = memory.readdword(0x0202BC00)
for i=0,0x3D do
for j=0,4 do
item = memory.readbyte(0x0202BD6E + 0x48*i + 2*j)
quantity = memory.readbyte(0x0202BD6F + 0x48*i + 2*j)
if AND(memory.readbyte(0x08BE2234 + 0x24*item), 8) > 0 then
quantity = 1
end
totalfunds = totalfunds + quantity * memory.readword(0x08BE2246 + 0x24*item)
end
end
return totalfunds, totalfunds - prevfunds
end
while true do
totalexp, chapterexp = exp()
totalfunds, chapterfunds = funds()
tacticianpoints = math.mod(math.floor(memory.readword(0x0202BC24)/16),512)
gui.text(0,0,"Total")
gui.text(0,8,"Exp: " .. totalexp)
gui.text(0,16,"Funds: " .. totalfunds)
gui.text(0,32,"This chapter")
gui.text(0,40,"Exp: " .. chapterexp)
gui.text(0,48,"Funds: " .. chapterfunds)
gui.text(0,64,"Tactician points: " .. tacticianpoints)
emu.frameadvance()
end