Advertisement
Jimmie1717

Majora's Mask (U): Zora Fins

Nov 23rd, 2019
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.98 KB | None | 0 0
  1. console.clear();
  2.  
  3. -- actor type and id to find.
  4. local actorType=0x07;
  5. local actorID=0x0020;
  6.  
  7. local actors=0;
  8. local pointers={};
  9.  
  10. function getActors(type)
  11.     return memory.read_u32_be(0x3E87D0+(type*0xC));
  12. end
  13.  
  14. function getAddr(type)
  15.     return bit.band(memory.read_u32_be(0x3E87D0+(type*0xC)+4),0xFFFFFF);
  16. end
  17.  
  18. function getPointer(pointer)
  19.     return bit.band(memory.read_u32_be(pointer),0xFFFFFF);
  20. end
  21.  
  22. function findActor(type,id)
  23.     local amount=1;
  24.     local addr=getAddr(type);
  25.     for i=1,getActors(type),1 do
  26.         if(addr~=0)then
  27.             if(memory.read_u16_be(addr)==id)then
  28.                 pointers[amount]=addr;
  29.                 amount=amount+1;
  30.             end
  31.             addr=getPointer(addr+0x12C);
  32.         end
  33.     end
  34. end
  35.  
  36.  
  37. function DisplayForm()
  38.     local FORM=forms.newform(275,350,"Link and Fins");
  39.     local x=5;
  40.     local y=3;
  41.     labels={ -- 5 80 155
  42.         ["link"]={
  43.             forms.label(FORM,"Link:",x,y,60,14,false),
  44.             forms.label(FORM,"0.0",x+15,y+17,60,14,false),
  45.             forms.label(FORM,"0.0",x+15,y+(17*2),60,14,false),
  46.             forms.label(FORM,"0.0",x+15,y+(17*3),60,14,false),
  47.             forms.label(FORM,"0",x+15,y+(17*4),60,14,false),
  48.             forms.label(FORM,"00000000",x+80,y+17,60,14,false),
  49.             forms.label(FORM,"00000000",x+80,y+(17*2),60,14,false),
  50.             forms.label(FORM,"00000000",x+80,y+(17*3),60,14,false),
  51.             forms.label(FORM,"0000",x+80,y+(17*4),60,14,false),
  52.             forms.label(FORM,"X:",x,y+17,60,14,false),
  53.             forms.label(FORM,"Y:",x,y+(17*2),60,14,false),
  54.             forms.label(FORM,"Z:",x,y+(17*3),60,14,false),
  55.             forms.label(FORM,"R:",x,y+(17*4),60,14,false)
  56.         },
  57.         ["fin1"]={
  58.             forms.label(FORM,"Zora Fin 1:",x,y+(17*5)+10,60,14,false),
  59.             forms.label(FORM,"0.0",x+15,y+(17*6)+10,60,14,false),
  60.             forms.label(FORM,"0.0",x+15,y+(17*7)+10,60,14,false),
  61.             forms.label(FORM,"0.0",x+15,y+(17*8)+10,60,14,false),
  62.             forms.label(FORM,"0",x+40,y+(17*9)+10,60,14,false),
  63.             forms.label(FORM,"?",x+40,y+(17*10)+10,60,14,false),
  64.             forms.label(FORM,"00000000",x+80,y+(17*6)+10,60,14,false),
  65.             forms.label(FORM,"00000000",x+80,y+(17*7)+10,60,14,false),
  66.             forms.label(FORM,"00000000",x+80,y+(17*8)+10,60,14,false),
  67.             forms.label(FORM,"X:",x,y+(17*6)+10,60,14,false),
  68.             forms.label(FORM,"Y:",x,y+(17*7)+10,60,14,false),
  69.             forms.label(FORM,"Z:",x,y+(17*8)+10,60,14,false),
  70.             forms.label(FORM,"Timer:",x,y+(17*9)+10,60,14,false),
  71.             forms.label(FORM,"Return:",x,y+(17*10)+10,60,14,false)
  72.         },
  73.         ["fin2"]={
  74.             forms.label(FORM,"Zora Fin 2:",x,y+(17*11)+20,60,14,false),
  75.             forms.label(FORM,"0.0",x+15,y+(17*12)+20,60,14,false),
  76.             forms.label(FORM,"0.0",x+15,y+(17*13)+20,60,14,false),
  77.             forms.label(FORM,"0.0",x+15,y+(17*14)+20,60,14,false),
  78.             forms.label(FORM,"0",x+40,y+(17*15)+20,60,14,false),
  79.             forms.label(FORM,"?",x+40,y+(17*16)+20,60,14,false),
  80.             forms.label(FORM,"00000000",x+80,y+(17*12)+20,60,14,false),
  81.             forms.label(FORM,"00000000",x+80,y+(17*13)+20,60,14,false),
  82.             forms.label(FORM,"00000000",x+80,y+(17*14)+20,60,14,false),
  83.             forms.label(FORM,"X:",x,y+(17*12)+20,60,14,false),
  84.             forms.label(FORM,"Y:",x,y+(17*13)+20,60,14,false),
  85.             forms.label(FORM,"Z:",x,y+(17*14)+20,60,14,false),
  86.             forms.label(FORM,"Timer:",x,y+(17*15)+20,60,14,false),
  87.             forms.label(FORM,"Return:",x,y+(17*16)+20,60,14,false)
  88.         },
  89.         forms.label(FORM,"Hex:",x+80,y,60,14,false)
  90.     };
  91. end
  92.  
  93. function updateForm()
  94.     forms.settext(labels.link[2],string.format("% 5.3f",memory.readfloat(0x3FFDB0+0x24,true)));
  95.     forms.settext(labels.link[3],string.format("% 5.3f",memory.readfloat(0x3FFDB0+0x28,true)));
  96.     forms.settext(labels.link[4],string.format("% 5.3f",memory.readfloat(0x3FFDB0+0x2C,true)));
  97.     forms.settext(labels.link[5],string.format("% 5d",memory.read_u16_be(0x3FFDB0+0xBE)));
  98.     forms.settext(labels.link[6],string.format("%08s",bizstring.hex(memory.read_u32_be(0x3FFDB0+0x24))));
  99.     forms.settext(labels.link[7],string.format("%08s",bizstring.hex(memory.read_u32_be(0x3FFDB0+0x28))));
  100.     forms.settext(labels.link[8],string.format("%08s",bizstring.hex(memory.read_u32_be(0x3FFDB0+0x2C))));
  101.     forms.settext(labels.link[9],string.format("%04s",bizstring.hex(memory.read_u16_be(0x3FFDB0+0xBE))));
  102.     if(pointers[1]~=nil and pointers[1]~=0)then
  103.         forms.settext(labels.fin1[2],string.format("% 5.3f",memory.readfloat(pointers[1]+0x24,true)));
  104.         forms.settext(labels.fin1[3],string.format("% 5.3f",memory.readfloat(pointers[1]+0x28,true)));
  105.         forms.settext(labels.fin1[4],string.format("% 5.3f",memory.readfloat(pointers[1]+0x2C,true)));
  106.         forms.settext(labels.fin1[5],string.format("% 3d",memory.read_s8(pointers[1]+0x1CD)));
  107.         if(memory.read_u32_be(pointers[1]+0x1C4)==0x803FFDB0)then
  108.             forms.settext(labels.fin1[6],"true");
  109.         else
  110.             forms.settext(labels.fin1[6],"false");
  111.         end
  112.         forms.settext(labels.fin1[7],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[1]+0x24))));
  113.         forms.settext(labels.fin1[8],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[1]+0x28))));
  114.         forms.settext(labels.fin1[9],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[1]+0x2C))));
  115.     end
  116.     if(pointers[2]~=nil and pointers[2]~=0)then
  117.         forms.settext(labels.fin2[2],string.format("% 5.3f",memory.readfloat(pointers[2]+0x24,true)));
  118.         forms.settext(labels.fin2[3],string.format("% 5.3f",memory.readfloat(pointers[2]+0x28,true)));
  119.         forms.settext(labels.fin2[4],string.format("% 5.3f",memory.readfloat(pointers[2]+0x2C,true)));
  120.         forms.settext(labels.fin2[5],string.format("% 3d",memory.read_s8(pointers[2]+0x1CD)));
  121.         if(memory.read_u32_be(pointers[2]+0x1C4)==0x803FFDB0)then
  122.             forms.settext(labels.fin2[6],"true");
  123.         else
  124.             forms.settext(labels.fin2[6],"false");
  125.         end
  126.         forms.settext(labels.fin2[7],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[2]+0x24))));
  127.         forms.settext(labels.fin2[8],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[2]+0x28))));
  128.         forms.settext(labels.fin2[9],string.format("%08s",bizstring.hex(memory.read_u32_be(pointers[2]+0x2C))));
  129.     end
  130. end
  131.  
  132. DisplayForm();
  133.  
  134. while true do
  135.     if(actors~=getActors(actorType))then
  136.         actors=getActors(actorType);
  137.         findActor(actorType,actorID);
  138.     end
  139.     updateForm();
  140.     emu.frameadvance();
  141. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement