Jimmie1717 icon

Majora's Mask (U): Zora Fins

Jimmie1717 | PRO | 11/23/19 04:42:44 PM UTC | 0 ⭐ | 1372 👁️ | Never ⏰ | []
Lua |

5.98 KB

|

None

|

0 👍

/

0 👎

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

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎