2nd post from Gyre
---
I'm not a LUA expert but I've got a WIP script for displaying the raw combat stats.
function PlayerStats()
for curplayer = 0, 3, 1 do
local initiative = memory.readbyte(0x64 + curplayer)
local hp = memory.readbyte(0x609 + 0x20 * curplayer)
local ypos = 1 + 10 * curplayer
local stats = string.format("P%u Initiative %u HP %u", curplayer, initiative, hp)
gui.text(1, ypos, stats)
end
end
function MonsterStats()
local maxmonster = memory.readbyte(0x83)
if maxmonster > 8 then
maxmonster = 8
end
for curmonster = 0, maxmonster - 1, 1 do
local initiative = memory.readbyte(0x68 + curmonster)
local hp = memory.readbyte(0x684 + 0x10 * curmonster)
local ypos = 1 + 10 * curmonster
local stats = string.format("M%u Initiative %u HP %u", curmonster, initiative, hp)
gui.text(140, ypos, stats)
end
end
function CombatResults()
local ypos = 91
for i,str in ipairs(combatstrs) do
gui.text(1, ypos, str)
ypos = ypos + 10
end
end
amonster = -1
function ActiveMonster()
amonster = memory.readbyte(0x85)
end
function UpdateCombatResults()
local n = table.getn(combatstrs)
local aplayer = memory.readbyte(0x87)
local tohit = memory.readbyte(0x70 + 3 * lastcombat)
local evade = memory.readbyte(0x71 + 3 * (1 - lastcombat))
local damage = memory.readbyte(0x72 + 3 * lastcombat)
local hit = false
if lastcombat == 0 then
hit = tohit >= evade
attacker = string.format("P%u", aplayer)
defender = string.format("M%u", amonster)
elseif lastcombat == 1 then
hit = tohit > evade
attacker = string.format("M%u", amonster)
defender = string.format("P%u", aplayer)
end
damagestr = string.format("%s To Hit %u vs %s Evade %u", attacker, tohit, defender, evade)
if hit then
damagestr = damagestr .. string.format(" (%u damage)", damage)
else
damagestr = damagestr .. " (miss)"
end
combatstrs[n] = damagestr
end
memory.registerwrite(0x75, UpdateCombatResults)
function NewCombatResult()
table.insert(combatstrs, "")
if table.getn(combatstrs) > 6 then
table.remove(combatstrs, 1)
end
end
function PlayerAttack()
ActiveMonster()
end
memory.registerwrite(0x70, PlayerAttack)
function PlayerEvade()
if not incombat then
lastcombat = 1
incombat = true
ActiveMonster()
NewCombatResult()
end
UpdateCombatResults()
end
memory.registerwrite(0x71, PlayerEvade)
function PlayerDamage()
ActiveMonster()
UpdateCombatResults()
end
memory.registerwrite(0x72, PlayerDamage)
function MonsterAttack()
ActiveMonster()
end
memory.registerwrite(0x73, MonsterAttack)
function MonsterEvade()
if not incombat then
lastcombat = 0
incombat = true
ActiveMonster()
NewCombatResult()
end
UpdateCombatResults()
end
memory.registerwrite(0x74, MonsterEvade)
function PlayerInitiativeChange(address, size)
incombat = false
end
memory.registerwrite(0x64, 4, PlayerInitiativeChange)
minitiative = {}
function MonsterInitiativeChange(address, size)
local initiative = memory.readbyte(address)
if minitiative[address] == nil then
minitiative[address] = initiative
return
end
local initiativechange = initiative - minitiative[address]
if ((not incombat) or (lastcombat ~= 1)) and initiativechange >= -5 and initiativechange < 0 then
NewCombatResult()
local n = table.getn(combatstrs)
combatstrs[n] = string.format("M%u passed", address - 0x68)
end
incombat = false
minitiative[address] = initiative
end
memory.registerwrite(0x68, MonsterInitiativeChange)
memory.registerwrite(0x69, MonsterInitiativeChange)
memory.registerwrite(0x6A, MonsterInitiativeChange)
memory.registerwrite(0x6B, MonsterInitiativeChange)
memory.registerwrite(0x6C, MonsterInitiativeChange)
memory.registerwrite(0x6D, MonsterInitiativeChange)
memory.registerwrite(0x6E, MonsterInitiativeChange)
memory.registerwrite(0x6F, MonsterInitiativeChange)
lastcombat = -1
incombat = false
combatstrs = {}
emu.speedmode("normal")
while true do
if lastcombat == -1 and memory.readbyte(0x15) == 2 then
lastcombat = 2
end
if memory.readbyte(0x86) > 0 then
combatstrs = {}
lastcombat = -1
end
if lastcombat >= 0 then
PlayerStats()
MonsterStats()
CombatResults()
end
emu.frameadvance()
end
Mr. Kelly R. Flewin
Just another random gamer
----
<OmnipotentEntity> How do you people get bored in the span of 10 seconds? Worst ADD ever.