I've already completed the run,
which can be seen here. Regardless, I am holding on to a lua script, one that shows some information. I think I should post it now.
A lua script for FCEUX 2.1.3-interim. the gui.box works differently between 2.1.2 and 2.1.3-interim for whatever reason.
This pretty much displays the HP, shields, and venom of everything. It also shows an approximation of food and water, mana, and the 60-frame timer. It even points out certain active timers and when you can cast your next spell.
In spite of this information on screen, I've rarely used this script in my run...
--*****************************************************************************
Draw= {} --Draw[digit](left,top,color)
--*****************************************************************************
-- A set of functions to draw specific digits.
function Draw.D0(left, top, color)
gui.box(left ,top ,left+2,top+4,0,color)
end
function Draw.D1(left, top, color)
gui.line(left ,top+4,left+2,top+4,color)
gui.line(left+1,top ,left+1,top+3,color)
gui.pixel(left ,top+1,color)
end
function Draw.D2(left, top, color)
gui.line(left ,top ,left+2,top ,color)
gui.line(left ,top+3,left+2,top+1,color)
gui.line(left ,top+4,left+2,top+4,color)
gui.pixel(left ,top+2,color)
gui.pixel(left+2,top+2,color)
end
function Draw.D3(left, top, color)
gui.line(left ,top ,left+1,top ,color)
gui.line(left ,top+2,left+1,top+2,color)
gui.line(left ,top+4,left+1,top+4,color)
gui.line(left+2,top ,left+2,top+4,color)
end
function Draw.D4(left, top, color)
gui.line(left ,top ,left ,top+2,color)
gui.line(left+2,top ,left+2,top+4,color)
gui.pixel(left+1,top+2,color)
end
function Draw.D5(left, top, color)
gui.line(left ,top ,left+2,top ,color)
gui.line(left ,top+1,left+2,top+3,color)
gui.line(left ,top+4,left+2,top+4,color)
gui.pixel(left ,top+2,color)
gui.pixel(left+2,top+2,color)
end
function Draw.D6(left, top, color)
gui.box(left ,top+2,left+2,top+4,0,color)
gui.line(left ,top ,left+2,top ,color)
gui.pixel(left ,top+1,color)
end
function Draw.D7(left, top, color)
gui.line(left ,top ,left+1,top ,color)
gui.line(left+2,top ,left+1,top+4,color)
end
function Draw.D8(left, top, color)
gui.box(left,top,left+2,top+4,0,color)
gui.pixel(left+1,top+2,color)
end
function Draw.D9(left, top, color)
gui.box(left ,top ,left+2,top+2,0,color)
gui.line(left ,top+4,left+2,top+4,color)
gui.pixel(left+2,top+3,color)
end
Draw[0],Draw[1],Draw[2],Draw[3],Draw[4]=Draw.D0,Draw.D1,Draw.D2,Draw.D3,Draw.D4
Draw[5],Draw[6],Draw[7],Draw[8],Draw[9]=Draw.D5,Draw.D6,Draw.D7,Draw.D8,Draw.D9
--*****************************************************************************
function DrawNum(right, top, Number, color, bkgnd)
--*****************************************************************************
-- Paints the input number as right-aligned.
-- Returns the x position where it would paint another digit.
-- It only works with integers. Rounds fractions toward zero.
local Negative= false
if Number < 0 then
Number= -Number
Negative= true
end
Number= math.floor(Number)
if not color then color= "white" end
if not bkgnd then bkgnd= "clear" end
if Number < 1 then
gui.box(right+1,top-1,right-2,top+5,bkgnd,bkgnd)
Draw[0](right-2,top,color)
right= right-4
end
while (Number >= 1) do
local digit= Number % 10
Number= math.floor(Number/10)
gui.box(right+1,top-1,right-2,top+5,bkgnd,bkgnd)
Draw[digit](right-2,top,color)
right= right-4
end
if Negative then
gui.box(right+1,top-1,right-2,top+5,bkgnd,bkgnd)
gui.line(right, top+2,right-2,top+2,color)
right= right-4
end
gui.line(right+1,top-1,right+1,top+5,bkgnd)
return right
end
local MemRead= memory.readbyte
--*****************************************************************************
function within(input, low, high)
--*****************************************************************************
return (input >= low) and (input <= high)
end
--*****************************************************************************
function ShowHP()
--*****************************************************************************
if memory.readbyte(0x0005) ~= 0x48 then return end
local ShClr= {"#FFFFFFFF","#00FF00FF","#FF8000FF","#00FFFFFF"}
local background= "#000000FF"
local ShX= { 0,13, 0,13}
local ShY= { 0, 0, 7, 7}
local SCR_x= MemRead(0x0094) + MemRead(0x0095)*256
local SCR_y= MemRead(0x0096) + MemRead(0x0097)*256
for i= 0, 3 do
local xpos= MemRead(0x04AC+i) + MemRead(0x04B0+i)*256
local ypos= MemRead(0x04B4+i) + MemRead(0x04B8+i)*256
xpos , ypos= xpos - SCR_x -2 , ypos - SCR_y -28
local HV= MemRead(0x04BC+i)
if (HV > 0) and within(xpos,-15,270) and within(ypos,0,170) then
xpos= math.min(math.max(xpos,9),239)
DrawNum(xpos,ypos,HV,"white",background)
HV= MemRead(0x04C0+i)
if HV > 0 then
DrawNum(xpos+13,ypos,HV,"green",background)
end
for Sh= 1, 4 do
Shield= MemRead(0x04CC +4*Sh +i)
if Shield > 0 then
local DX , DY= xpos+ShX[Sh] , ypos+10+ShY[Sh]
DrawNum(DX,DY, Shield, background, ShClr[Sh])
end
end
end
end
end
--*****************************************************************************
function TimerDance()
--*****************************************************************************
local tmr= MemRead(0x005A)
local clr= "white"
if tmr == 0 then clr= "red" end
gui.box( 250,222,251,163+tmr,0,clr)
gui.line(249,222,252,222,clr)
gui.line(249,162,252,162,clr)
end
--*****************************************************************************
function FoodBar()
--*****************************************************************************
local Fd= math.floor((MemRead(0x0053)+3)/4)
local Wt= math.floor((MemRead(0x0054)+3)/4)
gui.box( 1,158, 6,223,0,"white")
if Fd > 0 then gui.box( 2,222, 3,223-Fd,"green" ) end
if Wt > 0 then gui.box( 4,222, 5,223-Wt,"#0040FFFF") end
end
--*****************************************************************************
function NextSpell()
--*****************************************************************************
local MUD= MemRead(0x04F3)
local count= 0
for i= 0, 2 do
if MemRead(0x054D+i) < 128 then
count= count+1
end
end
if MUD == 0 then
MUD= 1
elseif MUD == 1 then
MUD= 0
else
MUD= 2
end
for i= 1, 3 do
local H, Hc= 133, ((MUD-i)%3)*8
local color= "blue"
if i == 3 then color= "white" end
if count >= i then
gui.box(3,H+Hc+2,4,H+Hc+3,0,color)
else
gui.box(1,H+Hc ,6,H+Hc+5,0,color)
end
end
end
-- Attack Meditate Fly Speed
-- Weight Light Slomo Fire Doom!
local timers= {0x06C9 ,0x06D5 ,0x06CB ,0x04E7,
0x04EB, 0x06CC, 0x04E4, 0x06E3}
local colors= {"#FF4000FF","#00FF00FF","#00FFFFFF","#FFFF00FF",
"#C0C0C0FF","#FFFFFFFF","#FF00FFFF","#FFFF00FF"}
--*****************************************************************************
function SpellTimers()
--*****************************************************************************
for i= 1, 8 do
temp= MemRead(timers[i])
if temp > 0 then
if temp >= 100 then --Draw HI
local y= 7*i
gui.line(1,y ,1,y+4,colors[i])
gui.line(3,y ,3,y+4,colors[i])
gui.line(5,y ,7,y ,colors[i])
gui.line(5,y+4,7,y+4,colors[i])
gui.line(6,y+1,6,y+3,colors[i])
gui.pixel(2,y+2,colors[i])
else
DrawNum(7,7*i,temp,colors[i])
end
end
end
end
--*****************************************************************************
function zammie()
--*****************************************************************************
ShowHP()
TimerDance()
FoodBar()
DrawNum(254, 1,MemRead(0x004B)+MemRead(0x004C)*256,"#0080FFFF","black")
DrawNum(254, 8,MemRead(0x004D)+MemRead(0x004E)*256,"#00C0FFFF","black")
SpellTimers()
NextSpell()
end
emu.registerafter(zammie)