console.clear();
-- actor type and id to find.
local actorType=0x07;
local actorID=0x0020;
local actors=0;
local pointers={};
function getActors(type)
return memory.read_u32_be(0x3E87D0+(type*0xC));
end
function getAddr(type)
return bit.band(memory.read_u32_be(0x3E87D0+(type*0xC)+4),0xFFFFFF);
end
function getPointer(pointer)
return bit.band(memory.read_u32_be(pointer),0xFFFFFF);
end
function findActor(type,id)
local amount=1;
local addr=getAddr(type);
for i=1,getActors(type),1 do
if(addr~=0)then
if(memory.read_u16_be(addr)==id)then
pointers[amount]=addr;
amount=amount+1;
end
addr=getPointer(addr+0x12C);
end
end
end
function DisplayForm()
local FORM=forms.newform(275,350,"Link and Fins");
local x=5;
local y=3;
labels={ -- 5 80 155
["link"]={
forms.label(FORM,"Link:",x,y,60,14,false),
forms.label(FORM,"0.0",x+15,y+17,60,14,false),
forms.label(FORM,"0.0",x+15,y+(17*2),60,14,false),
forms.label(FORM,"0.0",x+15,y+(17*3),60,14,false),
forms.label(FORM,"0",x+15,y+(17*4),60,14,false),
forms.label(FORM,"00000000",x+80,y+17,60,14,false),
forms.label(FORM,"00000000",x+80,y+(17*2),60,14,false),
forms.label(FORM,"00000000",x+80,y+(17*3),60,14,false),
forms.label(FORM,"0000",x+80,y+(17*4),60,14,false),
forms.label(FORM,"X:",x,y+17,60,14,false),
forms.label(FORM,"Y:",x,y+(17*2),60,14,false),
forms.label(FORM,"Z:",x,y+(17*3),60,14,false),
forms.label(FORM,"R:",x,y+(17*4),60,14,false)
},
["fin1"]={
forms.label(FORM,"Zora Fin 1:",x,y+(17*5)+10,60,14,false),
forms.label(FORM,"0.0",x+15,y+(17*6)+10,60,14,false),
forms.label(FORM,"0.0",x+15,y+(17*7)+10,60,14,false),
forms.label(FORM,"0.0",x+15,y+(17*8)+10,60,14,false),
forms.label(FORM,"0",x+40,y+(17*9)+10,60,14,false),
forms.label(FORM,"?",x+40,y+(17*10)+10,60,14,false),
forms.label(FORM,"00000000",x+80,y+(17*6)+10,60,14,false),
forms.label(FORM,"00000000",x+80,y+(17*7)+10,60,14,false),
forms.label(FORM,"00000000",x+80,y+(17*8)+10,60,14,false),
forms.label(FORM,"X:",x,y+(17*6)+10,60,14,false),
forms.label(FORM,"Y:",x,y+(17*7)+10,60,14,false),
forms.label(FORM,"Z:",x,y+(17*8)+10,60,14,false),
forms.label(FORM,"Timer:",x,y+(17*9)+10,60,14,false),
forms.label(FORM,"Return:",x,y+(17*10)+10,60,14,false)
},
["fin2"]={
forms.label(FORM,"Zora Fin 2:",x,y+(17*11)+20,60,14,false),
forms.label(FORM,"0.0",x+15,y+(17*12)+20,60,14,false),
forms.label(FORM,"0.0",x+15,y+(17*13)+20,60,14,false),
forms.label(FORM,"0.0",x+15,y+(17*14)+20,60,14,false),
forms.label(FORM,"0",x+40,y+(17*15)+20,60,14,false),
forms.label(FORM,"?",x+40,y+(17*16)+20,60,14,false),
forms.label(FORM,"00000000",x+80,y+(17*12)+20,60,14,false),
forms.label(FORM,"00000000",x+80,y+(17*13)+20,60,14,false),
forms.label(FORM,"00000000",x+80,y+(17*14)+20,60,14,false),
forms.label(FORM,"X:",x,y+(17*12)+20,60,14,false),
forms.label(FORM,"Y:",x,y+(17*13)+20,60,14,false),
forms.label(FORM,"Z:",x,y+(17*14)+20,60,14,false),
forms.label(FORM,"Timer:",x,y+(17*15)+20,60,14,false),
forms.label(FORM,"Return:",x,y+(17*16)+20,60,14,false)
},
forms.label(FORM,"Hex:",x+80,y,60,14,false)
};
end
function updateForm()
forms.settext(labels.link[2],string.format("% 5.3f",memory.readfloat(0x3FFDB0+0x24,true)));
forms.settext(labels.link[3],string.format("% 5.3f",memory.readfloat(0x3FFDB0+0x28,true)));
forms.settext(labels.link[4],string.format("% 5.3f",memory.readfloat(0x3FFDB0+0x2C,true)));
forms.settext(labels.link[5],string.format("% 5d",memory.read_u16_be(0x3FFDB0+0xBE)));
forms.settext(labels.link[6],string.format("%08s",bizstring.hex(memory.read_u32_be(0x3FFDB0+0x24))));
forms.settext(labels.link[7],string.format("%08s",bizstring.hex(memory.read_u32_be(0x3FFDB0+0x28))));
forms.settext(labels.link[8],string.format("%08s",bizstring.hex(memory.read_u32_be(0x3FFDB0+0x2C))));
forms.settext(labels.link[9],string.format("%04s",bizstring.hex(memory.read_u16_be(0x3FFDB0+0xBE))));
if(pointers[1]~=nil and pointers[1]~=0)then
forms.settext(labels.fin1[2],string.format("% 5.3f",memory.readfloat(pointers[1]+0x24,true)));
forms.settext(labels.fin1[3],string.format("% 5.3f",memory.readfloat(pointers[1]+0x28,true)));
forms.settext(labels.fin1[4],string.format("% 5.3f",memory.readfloat(pointers[1]+0x2C,true)));
forms.settext(labels.fin1[5],string.format("% 3d",memory.read_s8(pointers[1]+0x1CD)));
if(memory.read_u32_be(pointers[1]+0x1C4)==0x803FFDB0)then
forms.settext(labels.fin1[6],"true");
else
forms.settext(labels.fin1[6],"false");
end
forms.settext(labels.fin1[7],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[1]+0x24))));
forms.settext(labels.fin1[8],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[1]+0x28))));
forms.settext(labels.fin1[9],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[1]+0x2C))));
end
if(pointers[2]~=nil and pointers[2]~=0)then
forms.settext(labels.fin2[2],string.format("% 5.3f",memory.readfloat(pointers[2]+0x24,true)));
forms.settext(labels.fin2[3],string.format("% 5.3f",memory.readfloat(pointers[2]+0x28,true)));
forms.settext(labels.fin2[4],string.format("% 5.3f",memory.readfloat(pointers[2]+0x2C,true)));
forms.settext(labels.fin2[5],string.format("% 3d",memory.read_s8(pointers[2]+0x1CD)));
if(memory.read_u32_be(pointers[2]+0x1C4)==0x803FFDB0)then
forms.settext(labels.fin2[6],"true");
else
forms.settext(labels.fin2[6],"false");
end
forms.settext(labels.fin2[7],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[2]+0x24))));
forms.settext(labels.fin2[8],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[2]+0x28))));
forms.settext(labels.fin2[9],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[2]+0x2C))));
end
end
DisplayForm();
while true do
if(actors~=getActors(actorType))then
actors=getActors(actorType);
findActor(actorType,actorID);
end
updateForm();
emu.frameadvance();
end
Comments
0 B
|👍
/👎