Posts for Pasky13


1 2 3
20 21
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Could you provide a savestate right before that happens?
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
What Derakon said. The nes can't display more than 8 sprites per scanline. This results in a flicker effect as a different sprite may be drawn first and the other not being drawn: Removing the 8 sprites per line limit results in no flickering when more than 8 sprites are on the same scanline:
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Enjoyed the run, yes vote.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
I added an hp display for enemies, please use the updated version for bizhawk EDIT: Doh! Didn't realize enemy health was 2 bytes. Fixed: http://pastebin.com/af8tzQcB
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Dooty wrote:
I think you killed less enemies on your real time run than I did, so it will help me determine which ones I need to kill, so yes, I need it. Well, I do :) My programming skills can be divided by zero thus I think everything related to porting things is complicated, so, if it's too much trouble for you, don't worry, I can restart the run on Snes9x 1.51 no problem.
EDIT: Added an HP display for the enemy's. You can toggle it to FALSE at the top of the script http://pastebin.com/af8tzQcB
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Well, here's what I have so far, it may be helpful and I'm not sure if I'll continue it or not. http://pastebin.com/Zp3hDjmd Some boxes dont show, like some enemy projectiles, one of the beam blasts from an enemy mech in the 1st stage doesn't show up, didn't find that. There's an array of pointers at 0x83136E, every 2 bytes points to the base address of an active object structure (non projectile it seems). I didn't have time to play with the object structures but the first byte (possibly the first 2) appears to be the objects properties (can be hit, can be pushed, is alived, etc...). I believe they are bitwise properties (i.e. 0000 0001 == enemy is vulnerable, 0000 1001 == enemy is vulnerable and touching it hurts you, these are not real values). Anyways hope this helps. I didn't test past stage 1. If you need a bizhawk version let me know.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Working on this between my own projects: Should be ready soon depending how lazy I get.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Voting yes. Been watching the development of this for a while.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
AsFarAsIGet wrote:
Hi guys! Wow Pasky13, pretty impressive what u did there! I tried out your lua script, somehow it's bugged for me. [URL=http://imageshack.us/photo/my-images/706/timerld.png/][/URL] Any Idea why it is so? P.s.: I just went into the market and thats what I get. Greetings AFAIG
Fixed: Snes9x: http://pastebin.com/MFq8Gt2j Bizhawk: http://pastebin.com/fA00Dv5F
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
...
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
It's actually 14 minutes :P
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
I found the timer and can get it accurate within 60 frames as far as the remaining time goes. if 0x7E225D is set to 0xC the market has started (this will only get set if you are inside the town when the time ends). I've written a lua script for snes9x 1.51 and Bizhawk that displays the time passed, time remaining, and estimated frames remaining. Moving in and out of the market appears to affect the frames remaining (although I can't gauge it and adjust). Entering screens adds frames to the remaining time, I'm guess this is because when loading new areas the timer is not doing it's calculations. Bizhawk: http://pastebin.com/fA00Dv5F Snes9x 1.51 (should also work with 1.43): http://pastebin.com/MFq8Gt2j [URL=http://imgur.com/rTMBPzk.png][/URL] [URL=http://imgur.com/cxsRQK3.png][/URL] Hope this helps.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Would like to suggest adding a "browse here in hex editor" on the ram search results. I.e. searching for an address, highlighting it, and either right clicking (preferable) or clicking on a button that brings you to that address in the hex editor (or both :).
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Hrmmm, I can't seem to find the timer. The man in the middle of the square that tells you how many minutes remaining until the crowd gets together. I found how that was calculated by can't exactly figure out how it's calculated if that makes sense :P. When you walk into the area where the cutscene takes place, address 7E2515 gets written to, this is the minutes remaining. However it's only written to when entering the area and the way it's value gets derived is confusing (well, how the pointer works, not how it's actually retrieved).
8cea4f lda [$82]     [92cc90] A:2515 X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V:258 H:1038	; load the pointer
8cea51 inc $82       [000082] A:25be X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V:258 H:1080	; increase its address by 1
8cea53 bne $ea57     [8cea57] A:25be X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V:258 H:1114
8cea57 asl a                  A:25be X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V:258 H:1132	; double the lower byte in the accumulator
8cea58 rol $8a       [00008a] A:257c X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizC V:258 H:1144	
8cea5a tax                    A:257c X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V:258 H:1178
8cea5b rep #$30               A:257c X:007c Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V:258 H:1190
8cea5d jmp ($f041,x) [8cf0bd] A:257c X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1208
8cea73 lsr a                  A:257c X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1244	; divide the accumulator in half
8cea74 and #$000f             A:12be X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1256	; AND against 0x000F, the remainder is the minutes
8cea77 sta $02       [000002] A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1274
8cea79 stz $04       [000004] A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1302
8cea7b jmp $ea49     [8cea49] A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1330
8cea49 sep #$30               A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:258 H:1348
8cea4b lda $8a       [00008a] A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V:259 H:   2
8cea4d bne $ea60     [8cea60] A:0001 X:007c Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V:259 H:  22
8cea60 rep #$30               A:0001 X:007c Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V:259 H:  40
8cea62 lda $02       [000002] A:0001 X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:259 H:  58
8cea64 rtl                    A:000e X:007c Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V:259 H:  86
8cd7e0 plx                    A:000e X:007c Y:004b S:1feb D:0000 DB:7e nvmxdizc V:259 H: 128
8cd7e1 sta $0000,x   [7e2515] A:000e X:2515 Y:004b S:1fed D:0000 DB:7e nvmxdizc V:259 H: 162	; store the result from the AND from earlier at the address
Above are the instructions exected when 14 minutes were remaining. Here is the same routine with only 2 minutes remaining, the pointer at [$82] is what changes between the two:
8cea4f lda [$82]     [92cd74] A:2515 X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V: 34 H: 600
8cea51 inc $82       [000082] A:25b2 X:0038 Y:004b S:1fe8 D:0000 DB:7e NvMXdizc V: 34 H: 642
8cea53 bne $ea57     [8cea57] A:25b2 X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 676
8cea57 asl a                  A:25b2 X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 694
8cea58 rol $8a       [00008a] A:2564 X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizC V: 34 H: 706
8cea5a tax                    A:2564 X:0038 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 740
8cea5b rep #$30               A:2564 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 752
8cea5d jmp ($f041,x) [8cf0a5] A:2564 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 770
8cea73 lsr a                  A:2564 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 806
8cea74 and #$000f             A:12b2 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 818
8cea77 sta $02       [000002] A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 836
8cea79 stz $04       [000004] A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 864
8cea7b jmp $ea49     [8cea49] A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 892
8cea49 sep #$30               A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 910
8cea4b lda $8a       [00008a] A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 928
8cea4d bne $ea60     [8cea60] A:0001 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 948
8cea60 rep #$30               A:0001 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvMXdizc V: 34 H: 966
8cea62 lda $02       [000002] A:0001 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H: 984
8cea64 rtl                    A:0002 X:0064 Y:004b S:1fe8 D:0000 DB:7e nvmxdizc V: 34 H:1012
8cd7e0 plx                    A:0002 X:0064 Y:004b S:1feb D:0000 DB:7e nvmxdizc V: 34 H:1054
8cd7e1 sta $0000,x   [7e2515] A:0002 X:2515 Y:004b S:1fed D:0000 DB:7e nvmxdizc V: 34 H:1088
Apparently it just gets the value from a table that starts at: 0x92CC7D the first value for 15 minutes being 0xBF, and every 0x13 bytes is the next (0xBE for 14 at 0x92CC90, 0xBD for 13 at 0x92CCA3) I've tried following that pointer at [$82] to try and make sense of it but I cannot. I will try checking out the save game timer next and seeing if maybe it uses the same clock that does to calculate a difference.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
No that's not necessary. I already found what I needed and got it successfully in the debugger. I'll update with any progress when I have time, this is no traditional timer as expected.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Ok definitely found something related to the timer, but gonna need a proper SRM before this area. The one posted is still in the ACT 1 I think in fire eyes village. I need a debugger to find out how the address is written to. EDIT: Actually, how do you save in this game? XD I can just make a save with the timer already started
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
That sram is incorrect, so I can't load the game in a debugger. I was able to get the savestate loaded. How do I know when the 15 minutes are up?
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Provide a save state (and sram if possible) when the timer begins and I'll find it.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Reposting that script, only because I'd hate to see it get eaten by mediafire evetually:
chrsel=0
col=0
bcnt=0
infomode=1
dbgsel=0
mdmp={}
tgenb=false
jp4={}
function rb(x)
return memory.readbyte(x)
end
function rw(x)
return memory.readword(x)
end
function rcb(x)
return rb(j+x)
end
function rcw(x)
return rw(j+x)
end
stnames="HurtHBadSlowTangSlepFrezPetrConfStopMiniBarrXforMoglPosnBurnDead"
elnames="EartAir WatrFireDarkLigtMoonMana"
cnames={nil,"Young lady1","Boy1","Girl1","Old man1","Moogle kid","Pot","Man",
"Woman","Sprite","Man2","Woman2","Sprite2","Gnome","Undine","Salamando",
"Sylphid","Lumina","Shade","Luna","Dryad","Moogle","Neko","Dwarf","Old dwarf",
"Watts","Grandpa","Truffle","Walrus","Jema","Luka","Joch","Jehk","Sheex",
"Scorpion","Phanna","Krissie","Sergo","Slave","Picard","Spinning man",
"Dyluck","Rudolph","Santa Claus","Matango","Emperor","Geshtar","Fanha",
"Burka woman","Sheex","Flammie head","Soldier","Guard","Meria","Morie",
"Elinee","Elder","Lady","King","Mana fort","Thanatos","Elliott","Timothy","R. Man",
"R. Girl","Hippie","Old lady","Young lady","Boy","Girl","Old man","Old woman",
"Mara","Dragon","Flammie body","Cannon bro","Clerk",nil,nil,
"Orb1","Spring","Fuse","Bubbles 1","Bubbles 2","Ghost","Sword","Cannon TL","Cannon L","Splash",
"Cannon BL","Cannon TR","Cannon BR","Seed",
"Mini man","Mini woman","Mini sprite",nil,"Dead man","Dead woman","Dead sprite",nil,nil,nil,
"Enemy chest","Chest","Statue","Mini statue","Snowman","Mini snowman","Moogle1"}
tim1={0x1b4,0x1b2,0x1b3,0x1b5,0x1b6}
tim2={0x1b7,0x1ba,0x1bb,0x1bc,0x1b8,0x1ed,0x1bd}
mask1={3,0x7e,0x180,0x1800,0x6000}
mask2={192,48,12,3,16384,0,4096}
scstn={"Exec","Gather","Text","Delay","Wait",nil,"Complete","Center"}

-- cvst : convert string to ascii

function cvst(addr)
 local st,x
 st=""
 while true do
  x=rb(addr)
  if x<128>=30) then endline() end
end

-- dispnbr : display letter and a number

function dispnbr(x,text)
 if x~=0 then
  disp4(string.format("%s%3d",text,x))
 end
end

-- dispstat : display flags

function dispstat(x,text)
 if x~=0 then
  for b=0,15 do
   if AND(x,BIT(b))~=0 then
    disp4(string.sub(text,b*4+1,b*4+4))
   end
  end
 end
end

-- disptimr : display timers

function disptimr(nbr,bits,mask,vars,chrs)
 for l=1,nbr do
  m=mask[l]
  if m==0 or AND(m,bits)~=0 then
   dispnbr(rcb(vars[l]),string.sub(chrs,l,l))
  end
 end
end

-- chrname : get the name for a character type

function chrname(x)
 if(x<128) then addr=0xca0000+rw(0xca099e+x*2)
 elseif(x<131>=128 then
  if j==0x7ee200 then a=a+5 end
  a=a+5
 end
 return a
end

-- rdsg : read signed byte from character

function rdsg(x)
 a=rcb(x)
 if a>=128 then return a-256 end
return a
end

-- rdabs : get absolute value of character byte

function rdabs(x)
 a=rcb(x)
 if a>=128 then return 256-a end
 return a
end

-- dbox : draw a box at cx,cy

function dbox(w,h,color)
 left=cx-w
 top=cy-h
 right=cx+w
 bottom=cy+h
 if left>=0 and right<255>=0 and bottom<238>=0 and a<256>=0 and b<239>=0 and c<256>=0 and d<239 then
  gui.drawline(a,b,c,d,color)
 end
end

-- dtxt : output a line of text

function dtxt(x,...)
 if k<224 then
  gui.text(x,k,string.format(...))
 end
end

-- dcr : draw character bounding box

function dcr(x,color)
 if cchr==chrsel and bcnt<4 then color=0xffff end
 if rcb(x+2)~=0 then
  cx=px+rdsg(x)
  cy=py+rdsg(x+1)
  right=rdabs(x+2)
  bottom=rdabs(x+3)
  if nb then
   right=right/2
   bottom=bottom/2
  end
 dbox(right,bottom,color)
 end
end

-- updjp : handle input

btns={"start","select","up","down","left","right","A","B","X","Y","L","R"}

function updjp(x)
 bcnt=(bcnt+1)%8
 jp3=jp2
 jp2=joypad.read(x)
 for i=1,12 do
  x=btns[i]
  jp4[i]=jp2[x] and not jp3[x]
 end
 x=0
 if jp4[3] then x=-1 end
 if jp4[4] then x=1 end
 if jp4[5] then dbgsel=(dbgsel+7)%8 end
 if jp4[6] then dbgsel=(dbgsel+1)%8 end
 for i=0,11 do
  chrsel=chrsel+x
  if chrsel<0>11 then chrsel=0 end
  if rb(0x7ee000+chrsel*512)==1 then break end
  if i==11 then chrsel=0 end
  if x==0 then x=1 end
 end
 if jp4[9] then infomode=(infomode+1)%3 end
 if jp4[10] then tgenb=not tgenb end
end

-- ldchr : set character

function ldchr()
 j=0x7ee000+cchr*512
 cnb=cchr<3>=128 then return cvst(0xc00000+rw(0xc05cfb+x*2)).."'s orb" end
 return cvst(0xca0000+rw(0xca08f4+x*2))
end

-- dispweak : display weaknesses

function dispweak()
 dispstat(rcw(0x1a1),elnames)
end

-- dispcst : display character stats

function dispcst()
 if rcb(0x1b1)<128>=3 and flt then return end
 cchr=i
 ldchr()
 if rb(j)==1 and (i<3 or nb or rb(i+0xe5d)~=0) then
  if nt or i<3 then x=0x1e7 else x=0x180 end
  id=rcb(x)
   -- show character name
  if i<6>=3 and nb and rcb(0x32)==0 then dtxt(232,"%d",rcw(0x34)/16) end
  tp=rcb(0x1fb)
  if cnb then
   -- show action, animtimer, script address, script vars
   ac=rcb(17)
   if(rcb(28)==0) then ac=ac+128 end
   dtxt(96,"%02X %02X %04X %04X",ac,rcb(18),rcw(0x144)+0x4f15,rcw(0x146))
  else
   -- boss: show AIRoutine, MoveRoutine, 7A, Mode, AttackTimer
   dtxt(96,"%04X %04X %02X %02X %02X",rcw(0x8e),rcw(0x90),rcb(0x7a),rcb(0x94),rcb(0x96))
   if(i==chrsel) then
    -- show flags, animation, animoffset, animtimer, B0, B2
    k=k+8
    dtxt(0,"%04X %04X %02X %02X %04X %04X",rcw(0x98),rcw(0x9a),rcw(0x9c),rcw(0x9e),rcw(0xb0),rcw(0xb2))
   end
  end
  k=k+8
  if i<6 and rcb(0x180)<131>=3 then
    -- enemy: show experience, gold
    dtxt(152,"%5d %5d",rcw(0x18d),rcw(0x1c8))
   else
    -- player: show experience needed for next level, current weapon level and sublevel
    dtxt(152,"%5d %d:%2d",AND(rcw(0x17d)-rcw(0x18d),65535),rcb(0x19c),rcb(0x1d0+rcb(0x1e4)))
   end
   k=k+8
  end
  -- show character stats when B is pressed
  if(cchr==chrsel and jp2.B==1) then dispcst() end
  st=""
  stat1=rcw(0x190)
  stat2=AND(rcw(0x1b0),0xfdff)
  -- show status
  dispstat(stat1,stnames)
  dispstat(stat2,"Def+Def-Eva+Eva-Hit+Hit-Atk+Atk-SlepNThrRecvDTgtShldJumpWallChst")
  if i==chrsel then dispweak() end
  -- show timers (hurt, sleep, silence, transform, poison)
  disptimr(5,stat1,mask1,tim1,"HSCXP")
  -- (attack+-, hit+-, evade+-, defense+-, wall, recover, barrel)
  disptimr(7,stat2,mask2,tim2,"ahedWRB")
  -- show saber and mana magic
  x=rcb(0x1ae)
  y=x%15
  if y~=0 then disp4("+1/"..string.format("%d",10-y)) end
  dispnbr(rcb(0x19d),"w")
  dispnbr(math.floor(x/16),"M")
  dispstat(rcb(0x195),"SSabTSabISabFSabDSabLSabMSabMMag")
  endline()
 end
end
rt={}
rcnt=0
rcnt2=0

memory.registerexec(0xb64c,function()
 print(string.format("Script tile %02X",memory.getregister("a")))
end)
--memory.register(0x7ee00e,function()
-- print(string.format("dispflag written at pc=%06X and --sc=%02X%04X",memory.getregister("pbpc"),
--  rb(0xd3),rw(0xd1)))
--end)
memory.registerexec(0x1e77b,function()
 a=memory.getregister("a")
 sp=memory.getregister("s")
 ra=rw(sp+1)
 if ra==0xe778 then ra=AND(memory.readdword(sp+4),0xffffff) else ra=ra+0xc10000 end
 print(string.format(a>=0x800 and "Path %04X from %06X" or "Script %04X from %06X",a,ra))
end)
-- get values from random generator
memory.register(0x7e033d,function() if rb(0x33d)~=55 then
 rcnt2=rcnt2+1 end end)
memory.register(0x7e03f0,function()
 if rb(0x3f0)==15 then return end
 if rcnt==dbgsel then
  for i=0,63 do
   mdmp[i]=rb(0x1c0+i)
  end
  for i=64,127 do
  mdmp[i]=rb(0x340+i)
  end
 end
 rcnt=rcnt+1
end)

while true do
 scp=rw(0xd4)
 scj=rb(0x7ee02c+scp)
 if(scj==0) then scj=1 end
 if(scj==4) then scj=3 end
 scs=rb(0xd0)
 -- auto skip dialogue
 if(scj<4>=128
 nb=rb(0x5c)<128>maxc then maxc=a end
   end
  end
  b=0
  rt2={}
  for i=0,127 do
   x=AND(rt[rof%15]+rt[(rof+14)%15],255)
   rt[(rof+14)%15]=x
   rof=rof+1
   if i<24 then gui.text(AND(i,7)*24,32+(AND(i,24)/8)*8,string.format('%02X',x)) end
   rt2[i]=x
   if x<maxc and b<80>99 then x=99 end
     rcv=rcb(0x1ed)
     agl=rcb(0x189)
     if rcv>0 then x=math.floor(x/2) end
     z=3
     cra=ccr()
     if rt2[1]*101<x>999 then power=999 end
     for l=3,5 do
      cchr=l
      ldchr()
      if rcb(0)==1 and (nb and updc==l-3 or not nb and updc==AND(rcb(0x99),3)) then
       x=rcb(0x1a4)
       y=rcb(0x1b0)
       def=rcw(0x1a5)
       if AND(y,4)~=0 then x=x+math.floor(x/4) elseif AND(y,8)~=0 then x=x-math.floor(x/4) end
       if AND(y,1)~=0 then def=def+math.floor(def/4) elseif AND(y,2)~=0 then def=def-math.floor(def/4) end
       y=z
       if rt2[z-1]*100<x>0 then
        x=math.floor((99-agl)/2)+80
        power=math.floor((x-rcv)*math.floor(power/2)/x)
       elseif rt2[y]<cra>dpower and i==mainchr then
        gui.text(l*48-84,59,string.format("%d:%3d",l-2,power-dpower))
       end
      end
     end
    end
   end
  end
  gui.text(2,59,string.format("%04X",rcnt))
 end
 nmi=rw(0x101)
 flt=nmi==0x88cf or nmi==0xa64a or nmi==0xac26
 if nt and not flt then
  for i=0,11 do
   cchr=i
   ldchr()
   if rb(j)==1 and (cnb or AND(rcb(0x99),32)==0) then
    px,py,pz,pz2=chrpos()
    dlin(px,py-pz,px,py,0x3f)
    if not cnb then py=py-pz pz=0 end
    if i<3>=128 then
        cx=cx-rw(0xac)
        cy=cy-rw(0xae)
       else
        cx=cx-rw(0xa8)
        cy=cy-rw(0xaa)
       end
       if cx<0 then cx=cx+rw(0xc0) end
       if cy<0 then cy=cy+rw(0xc2) end
       if x==2 then x=16 else x=8 end
       if(i<3) then dbox(x,x,0xfff4) else dbox(x,x,0xfce0) end
      end
      l=l+16
     end
    end
    if tgenb and not flt then
     cchr=rcb(0x1ac)
     if(cchr~=255) then
      ldchr()
      tx,ty,tz,tz2=chrpos()
      ty=ty-tz-tz2
      dlin(px,py-pz-pz2,tx,ty,0xffff)
      cx=tx
      cy=ty
      dbox(2,2,0xffff)
     end
    end
   end
  end
 end
 if jp2.B and jp2.A then
  -- show random numbers
  st=""
  for i=0,127 do
   st=st..string.format("%02X",mdmp[i])
   if i%16==15 then gui.text(0,80+AND(i,112)/2,st) st="" end
  end
 elseif infomode==0 then
  for i=0,11 do
   dispchar(i)
  end
 elseif infomode==1 then dispchar(chrsel) end
 if(scs~=0) then
  -- show script state
  y=scs
  if(scs<128) then scs=1 else scs=scs-126 end
  x=scstn[scs]
  if not x then x=string.format("%02X",y) end
  dtxt(0,"%02X%04X %s",rb(0xd3),rw(0xd1),x)
  if scs==4 then dtxt(128,"%02X",rb(0x4f)) end
 end
 if rb(0x1826)==1 or AND(rb(0x1803),32)~=0 then
  -- show information about menu items
  y=rb(0x1803)
  k=32
  if(AND(y,32)==32) then
   z=rw(rw(0x1822))
   if(z~=0xffff) then
    -- characters
    j=0x7e0000+z
    dispcst()
    st="Weak:"
    col=5
    dispweak()
    endline()
   end
  else
   x=rb(0x19d3)
   y=rb(0x19d2)
   cchr=rb(0x1808)
   ldchr()
   if y==85 then
    if x<72 then
     -- weapons
     if x%9<8 and jp2.A then x=x+1 end
     y=math.floor(x/9)
     z=rcb(0x1c0+math.floor(y/2))
     if(AND(y,1)==0) then z=z/16 else z=AND(z,15) end
     a=x*12+0xd01000
     dtxt(0,"L%d/%d %d:%2d C%2d H%2d A%2d S%2d",x%9+1,rb(0x7ecfb8+y)+1,z,
      rcb(0x1d0+y),rb(a+6),rb(a+7),rb(a+8),rb(a+11))
     k=k+8
     st="Infl:"
     col=5
     dispstat(rcw(9),stnames)
     endline()
    elseif x<135>=42 then y=x-42 else y=math.floor(x/6) end
    z=rcb(0x1c4+math.floor(y/2))
    if(AND(y,1)==0) then z=z/16 else z=AND(z,15) end
    dtxt(0,"L%d:%2d",z,rcb(0x1d8+y))
    if x<42 then
     j=x*64+0xd02ad8
     dtxt(128,"S %2d H %2d",rcb(2),rcb(3))
     k=k+8
     st="Elem:"
     col=5
     dispstat(rcb(4),elnames)
     endline()
     st="Infl:"
     col=5
     dispstat(rcw(5),stnames)
     endline()
    end
   end
  end
 end
 rcnt=0
 rcnt2=0
 snes9x.frameadvance()
end

I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
60FPS video of the same rom on a SFC SNES: https://www.dropbox.com/s/t9oc9val6mjc9kr/SNES%20POLL.MKV I'm just pressing 'B'.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
There appears to be a bug in svn 2837. If you record a movie using the new ppu, save the movie and play it back, the movie file will claim the old PPU was used when this is not the case.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Retroarch has ported BSNES v0.92 into a DLL library as of late. http://board.byuu.org/viewtopic.php?f=17&t=3606
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
You cannot get cpu registers in bizhawk currently. That would require CPU breakpoints to be implemented and from my understanding they won't be a working debugger in Bizhawk until 2.0....no idea when that will be since it keeps being brought up as a theoretical version whenever something should be implemented :P.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
I'm looking forward to this TAS. I played this game a lot and it has a lot of charm. I'm glad someone is finally picking it up, it deserves it.
I think.....therefore I am not Barry Burton
Experienced Forum User, Published Author
Joined: 5/4/2005
Posts: 502
Location: Onett, Eagleland
Voting yes, it's a shame you used snes9x 1.43 though.
I think.....therefore I am not Barry Burton
1 2 3
20 21