Posts for Bobo_the_King

Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I was thinking we could do it the bass-ackwards way and have it all manipulated by the controller input. For example, hold B and press a direction to select a result, then release B to choose it. I tried halfheartedly to make it all one script, but the problem was that I ended up on the last frame, which is paused. Since it's paused, you can't input anything, but I didn't want it to unpause in case the user didn't want to pick any of the options. I feel "none of the above, return control to the user" should be an option. Edit: Also, I've been compiling a list of waypoints so that we can just copy and paste them into the script as needed. So far, I'm most of the way through World 1. Here's what I've got:
Language: lua

--Start to guild. local waypointsx={18,18,21,21} local waypointsy={36,26,26,25} --Guild to field. local waypointsx={21,21,18,18} local waypointsy={25,26,26,37} --Tower to Bandit Cave. local waypointsx={12,19,19,22,22,46,46,42,42,45,45,43,43,44,44,42,42,38,38} local waypointsy={11,11, 7, 7,25,25,39,39,43,43,45,45,50,50,56,56,58,58,52} --First floor of Bandit Cave. local waypointsx={16,16,18,18,26,26,30,30} local waypointsy={13,14,14, 8, 8,21,21,23} --Second floor of Bandit Cave. local waypointsx={18,18, 8, 8} local waypointsy={36,51,51,50} --Third floor of Bandit Cave (to P-FROG). local waypointsx={61,61,48,48} local waypointsy={54,53,53,43} --(Base Town to field checked manually.) --Tower to Castle Armor. local waypointsx={12,19,19,22,22,46,46,37,37,44} local waypointsy={11,11, 7, 7,22,22,17,17,13,13} --First floor of Castle Armor (no NPC manipulation). local waypointsx={15,15,17,17,16,16,20,20,23,23} local waypointsy={30,22,22,17,17,13,13,11,11, 8} --Second floor of Castle Armor. local waypointsx={53,53,50,50,49,49,46,46} local waypointsy={16,14,14,22,22,29,29,28} --Third floor of Castle Armor. local waypointsx={45,45} local waypointsy={50,43} --(Base Town to field checked manually.) --Tower to Castle Sword. local waypointsx={12,19,19,21,21, 1, 1, 2, 2, 7, 7,14,14,18,18,27,27,26} local waypointsy={11,11, 7, 7,21,21,36,36,41,41,53,53,57,57,61,61,44,44} --First floor of Castle Sword. local waypointsx={12,12,18,18,16,16,11,11,14,14,12,12} local waypointsy={32,29,29,21,21,12,12,16,16,21,21,19} --Second floor of Castle Sword (no NPC manipulation). local waypointsx={36,36,38,38,40,40,36,36} local waypointsy={12,11,11, 6, 6,23,23,21} --Third floor of Castle Sword. local waypointsx={53,53} local waypointsy={17,10} --Outside WHITKEY room to Mileille's door. local waypointsx={24,24,22,22,52,52} local waypointsy={12,13,13, 6, 6, 2} --Test pattern. Use just outside tower, zigzags right and down, then marches around perimeter of enclosure. local waypointsx={12,13,13,14,14,15,15,19,19, 7, 7,19} local waypointsy={11,11,12,12,13,13,14,14, 5, 5,14,14}
Tell me if you want to chip in some of the work. I've pretty much got it covered, but in case you want to help, I just want to make sure we're not both going for the same ones.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
MR? ... I have a habit of renaming functions and forgetting to include the rename... MR is short for Memory Read. That was my train of thought, anyway, and I'd rather not have to retype the entire function name every time.
Oh, heh heh. I didn't expect it to be just one command! Okay, I've fixed it, and it works fine.
FatRatKnight wrote:
The fact your values are "off by one" for C353 is just fine, actually. Monsters are put in one of three slots, and even if the other slots are empty, the game still rolls for those slots. If the monster was placed in slot 1, the game's first roll is given to that monster, whereas if the monster was in slot 3, the third roll is given instead. It's not really visible which one of three slots the monster is in from the battle screen, though.
Ah, that makes sense! ... At least... it almost does... I wish they'd programmed this game in any sensible way. Glad to hear I'm not the one who's insane, at least.
FatRatKnight wrote:
The BATTLE sword, in my plans, are never given to the GAZE mutant in the first place -- She uses the HAMMER versus SEI-RYU. The spare POWER mutant gets the BATTLE sword.
That makes a lot more sense than what I was thinking.
FatRatKnight wrote:
I was using the STONE book against BYAK-KO in my Agility test -- What else would I use? Have you tried putting the Arts & Crafts mutant (STONE book wielder. Just in case you haven't figured out what I mean by art by now) in slot 1 directly? There's no avoiding placing the mutant in slot 1 eventually.
I was just being cautious, but it's good to know I need A in slot 1 for BYAK-KO. I was trying to put her in slot 2 for the SABERCAT battle and I didn't realize that would mean shuffling the party again later. Looks like I have to manipulate a Mana bonus for slot 1 unless I want my execution to be really sloppy.
FatRatKnight wrote:
I'm not sure if that extra battle in W1 is so "free". The TELEPOR route requires that you switch twice to pick up the various Mana boosts. There's also the fact that TELEPOR is given to the third member, and you most certainly must swap the spare POWER mutant at least once to get that and POWER. Three swaps are required here, with three menu transitions likely.
Hmmm... that's a very good point and I suppose it sheds some light on why you're interested in testing all three possibilities. I figured that the strategy in my current run doesn't sacrifice any net frames to pick up the Mana bonuses, but there may be excessive shuffling in there. However, I don't think it's more time than it takes to fight a battle. I'm interested in what you discover. For the record, though, the Mana bonus is indeed "free" in the sense that we can fight that battle almost anywhere and it may be best to do so when we're having trouble manipulating luck for another desired result (say, walking a large number of steps without a battle).
FatRatKnight wrote:
Not eating the extra swaps, we can spare a Mana+5 for a Mana+4, or even Mana+3 if we're giving GAZE to the starter MUTANT F. Even if we are still restricted to a Mana gain, we have more possible values to use.
Sorry, I don't follow this point. Is this because our starter Mutant F picks up a Mana +4 boost at some point (without shuffling) and we therefore don't have to manipulate +5 boosts consistently to reach 46 Mana before BYAK-KO? Run update: (Drumroll, please!) No progress. Well, not quite. I spent the morning writing a Lua script/bot that will walk, save, and reset exactly as we would if we were playing (unless NPCs get in the way). Not to boast, but I'm really proud of this one! It's my baby!
Language: lua

local function any(vector,value) local match=false for i=1, #vector do match=(match or vector[i]==value) end return match end --Apparently Lua doesn't have a built-in sign function... local function sign(x) if x>0 then return 1 elseif x<0 then return -1 elseif x==0 then return 0 else return "error" end end local function makerngtable() n={[0]=3,6,7,13,11,1,15,10,12,9,8,2,4,14,0,5} r={[0]=10,11,1,12,5,9,6,3,15,11,2,7,2,0,15,15} s={[0]=5,15,13,9,5,1,13,11,1,3,3,7,11,15,3,9} local RNGTable={} for c=0,15 do for i=0,7 do currrow=(r[c]+i*s[c])%16 currnum=n[c]+32*i RNGTable[16*currrow+c]=currnum end for j=0,7 do currrow=(r[c]+8+j*s[c])%16 currnum=255-n[c]-32*j RNGTable[16*currrow+c]=currnum end end return RNGTable end local function printcolumn(startx,starty,data) for i = 1,#data do gui.text(startx, 9*i + starty + 1, data[i]) end end local function setcourse(waypointsx,waypointsy,wpnum) local index=wpnum+1 local x=memory.readbyte(0xCCC9) local y=memory.readbyte(0xCCC8) local lr = sign(waypointsx[index]-x) local ud = sign(waypointsy[index]-y) if lr==1 and ud==0 then go = {right=1} elseif lr==-1 and ud==0 then go = {left=1} elseif lr==0 and ud==1 then go = {down=1} elseif lr==0 and ud==-1 then go = {up=1} else go = {} end return go end --This was tested to be the fastest method for saving. Hopefully, it holds everywhere. local function pauseandsave() for i = 0,1 do joypad.set(1,{start=1}) vba.frameadvance() end for i = 2,13 do vba.frameadvance() end joypad.set(1,{down=1}) vba.frameadvance() joypad.set(1,{down=1, A=1}) vba.frameadvance() joypad.set(1,{A=1}) vba.frameadvance() for i = 17,18 do vba.frameadvance() end for i = 19,20 do joypad.set(1,{A=1}) vba.frameadvance() end end --Increments wpnum only when the next waypoint is reached local function incwpnum(waypointsx,waypointsy,wpnum) local x=memory.readbyte(0xCCC9) local y=memory.readbyte(0xCCC8) if waypointsx[wpnum+1]==x and waypointsy[wpnum+1]==y then wpnum=wpnum+1 end return wpnum end local function reset() for i = 1,2 do joypad.set(1, {A = 1, B = 1, select = 1, start = 1}) vba.frameadvance() end end local function idleframes(n) for i = 1,n do vba.frameadvance() end end --Walk in a given direction until ready to save. local function walk(go) local speed=memory.readbyte(0xC5B2) local framesperstep=16/speed local startcoords=memory.readbyte(0xCCC8)+memory.readbyte(0xCCC9) while (memory.readbyte(0xCCC8)+memory.readbyte(0xCCC9))==startcoords do joypad.set(1,go) vba.frameadvance() end for i=1, framesperstep-2 do joypad.set(1,go) vba.frameadvance() end end local function condition(address1,address2,address3,RNGTable) local value1 = memory.readbyte(address1) local value2 = memory.readbyte(address2) local value3 = memory.readbyte(address3) local roll1=RNGTable[value1] local roll2=RNGTable[value2] local roll3=RNGTable[value3] --This is the super-duper important condition. Fiddle with this to test various conditions. local reportit=(any({23,137,203,161,230,243},value1) and roll3<64) return reportit end --Boilerplate... local firstrng = 0xC300 local nextbonus = 0xC30B local canrun = 0xC323 local abslot = 0xC36F local enctrgrp = 0xC343 local stepstobattle = 0xC33B local numenemies = 0xC353 local RNGTable=makerngtable() local state1=savestate.create() local state2=savestate.create() local state3=savestate.create() local rngvals={} local framevals={} local xcoords={} local ycoords={} local wpnumlist={} local enumerate={} local ind=1 movie.rerecordcounting(false) --Addresses to be luck manipulated. I figure we won't have to manipulate more than three at a time. local address1 = nextbonus local address2 = stepstobattle local address3 = numenemies --Decides what RAM address will be output in the end. local rngofinterest = nextbonus --Waypoints to be traversed. Because the player moves orthogonally, they should be staggered so only the x or y coordinate changes with each index *except* when the room changes. --(Might be possible to take into account the room-- byte CCC7-- but it's a little complicated.) local waypointsx={12,13,13,14,14,15,15,19,19, 7, 7,19} local waypointsy={11,11,12,12,13,13,14,14, 5, 5,14,14} --The waypoint number. Set to the index of the current waypoint or, if the first waypoint has yet to be traversed, just set it equal to 0. local wpnum=1 --The encounter rate and the duration in frames over which to manipulate luck. local encounterrate=4 local framesduration=1000 local maxlength=5 local startframe=vba.framecount() local nextbattlerng=memory.readbyte(0xC33B) savestate.save(state1) while (not (RNGTable[nextbattlerng]<encounterrate)) and ((vba.framecount()-startframe)<framesduration) and (wpnum<#waypointsx) and (#rngvals<maxlength) do savestate.save(state2) pauseandsave() for i=1,16 do savestate.save(state3) currframe=vba.framecount()%1000 currx=memory.readbyte(0xCCC9) curry=memory.readbyte(0xCCC8) reset() idleframes(5) if condition(address1,address2,address3,RNGTable) then rngvals[ind]=memory.readbyte(rngofinterest) framevals[ind]=currframe xcoords[ind]=currx ycoords[ind]=curry wpnumlist[ind]=wpnum enumerate[ind]=ind ind=ind+1 end savestate.load(state3) vba.frameadvance() end savestate.load(state2) local go = setcourse(waypointsx,waypointsy,wpnum) walk(go) wpnum = incwpnum(waypointsx,waypointsy,wpnum) nextbattlerng=memory.readbyte(0xC33B) end savestate.load(state1) gui.text(1,1,"#") gui.text(20,1,"RNG") gui.text(40,1,"Frame") gui.text(70,1,"x") gui.text(90,1,"y") gui.text(110,1,"Waypoint") printcolumn(1,1,enumerate) printcolumn(20,1,rngvals) printcolumn(40,1,framevals) printcolumn(70,1,xcoords) printcolumn(90,1,ycoords) printcolumn(110,1,wpnumlist) emu.pause()
In Matlab, I try to keep my variables at or very near the top of the code for easy changing if necessary, but Lua insists that functions come first, so most of the good stuff is in the middle. There are only a few lines you need to be actively concerned with. First is in the function "condition". This is the condition that is true if the luck was manipulated such that we got the result we wanted. For example, if you're looking for C30B = 23 while C33B = 161, you'd alter the line defining "reportit" accordingly. I have it set up so that we can check up to three addresses or their corresponding RNG rolls simultaneously (I figure that's the most we'll ever need to manipulate, though it can be very easily expanded). The other variables you might want to change come after the "Boilerplate" section. The variables "address1", "address2", and "address3" are the ones passed on to the condition function. Unfortunately, you have to scroll back and forth between the function and those variables, coordinating their addresses with the condition you set. I'm sorry I don't know how to keep them tidier-- I tried to at least keep them as close as I could to each other. Next is "rngofinterest". This is the address that's reported to you in the summary of the results. I may make it so that it can report multiple addresses or the fractional offset, but since the condition is already verified, what we're really interested in is the frame number at which to reset. After that come the "waypoint" variables. I encoded them as two vectors, but they should really be interpreted as a 2-by-n array. The first vector contains the x-coordinates of each waypoint while the second vector contains the corresponding y-coordinates. For the default example above, the player starts at coordinates (12,11), then moves one step right to (13,11), then one step down to (13,12), and so on. As you can see, moving more than one step at a time is supported, but you need to make sure that only the x or y coordinate (not both!) changes from element to element. The program might still work when changing "rooms", which would mean the waypoints vectors would break this pattern, but I haven't yet tested it. Along with the waypoint vectors comes "wpnum", the waypoint number, which is an index to the above vectors. This number corresponds to the last waypoint visited, including where the player is currently standing (if applicable). For example, if the player is at (19,10) according to the default vectors, wpnum should be something like 8, which corresponds to the coordinates (19,14). Choose a wpnum that isn't orthogonal to the next waypoint and the program doesn't do anything. Also, you can set wpnum to 0 if you haven't reached the first waypoint. Finally, there are the "encounterrate", "framesduration", and "maxlength" variables. These are fairly self-explanatory. I've set four conditions for halting the program and returning the results: 1) The next step will trigger a battle. (Can't very well save and manipulate luck if we're in the middle of a battle, hm?) Because "encounterrate" is just one value (I wasn't able to find a RAM address for terrain), the program will only work perfectly if we don't move from one terrain to another. I figure that exceptions will be rare and can be checked easily enough individually. 2) Too many frames have passed. I usually set framesduration to 1000 for the sake of sanity, but if you want to manipulate the hell out of luck, set it to something ridiculous like 100000. 3) We've reached the end of the waypoints. No point attempting to manipulate luck if there's nowhere else to move. 4) We've obtained enough results. This is especially useful if we want just one result and we don't care when we get it. For example, I'm currently climbing the Floating Castle and if I get a +5 Mana bonus in the first slot with one expected SABERCAT anywhere along the climb, I don't need to manipulate luck any further. In that case, I would set maxlength to 1. You may be wondering about whether this program works. I'm pretty sure it does. I've checked most important aspects of it and tested it in the field. You can too. The default numbers correspond to the player standing at the base of the tower. Just step outside the Base Town and run the script. The player should walk in a zigzag pattern down and right, then walk along the perimeter of the enclosure (if there isn't a random encounter in the meantime). Go ahead and run that and tell me how it works for you. Toy around with new waypoints and even use it in the glider or on the bike! You're my beta tester. If you have any questions, comments, or suggestions to make the script better, I'd be happy oblige. Edit: I updated my code slightly. It now reports the x position, y position, and last waypoint reached. You can pass these values on to a new script I wrote:
Language: lua

local function any(vector,value) local function sign(x) local function makerngtable() local function setcourse(waypointsx,waypointsy,wpnum) local function pauseandsave() local function incwpnum(waypointsx,waypointsy,wpnum) local function reset() local function idleframes(n) local function walk(go) local function condition(address1,address2,address3,RNGTable) --Boilerplate... local firstrng = 0xC300 local nextbonus = 0xC30B local canrun = 0xC323 local abslot = 0xC36F local enctrgrp = 0xC343 local stepstobattle = 0xC33B local numenemies = 0xC353 local RNGTable=makerngtable() local ind=1 --Addresses to be luck manipulated. I figure we won't have to manipulate more than three at a time. local address1 = nextbonus local address2 = stepstobattle local address3 = numenemies --Waypoints to be traversed. Because the player moves orthogonally, they should be staggered so only the x or y coordinate changes with each index *except* when the room changes. --(Might be possible to take into account the room-- byte CCC7-- but it's a little complicated.) local waypointsx={24,24,22,22,52,52} local waypointsy={12,13,13, 6, 6, 2} --The starting waypoint number. Set to the index of the current waypoint or, if the first waypoint has yet to be traversed, just set it equal to 0. local wpnumstart=2 --The four variables that indicate when to reset. These should be obtained from the luck manipulation bot. local frame=60647 local wpnumfinish=3 local x=22 local y=10 local wpnum=wpnumstart while wpnum<wpnumfinish do go = setcourse(waypointsx,waypointsy,wpnum) walk(go) wpnum = incwpnum(waypointsx,waypointsy,wpnum) end while math.abs(memory.readbyte(0xCCC9)-x)+math.abs(memory.readbyte(0xCCC8)-y)>0 do go = setcourse(waypointsx,waypointsy,wpnum) walk(go) end pauseandsave() while vba.framecount()<frame do vba.frameadvance() end reset() idleframes(62) for i=1,2 do joypad.set(1,{A = 1}) vba.frameadvance() end idleframes(10) if condition(address1,address2,address3,RNGTable) then gui.text(1,1,"Success!") else gui.text(1,1,"Failure?") end vba.pause()
I've omitted the subroutines (or whatever you want to call them) but left their names in. They should be exactly the same ones from the first Lua script in this post. This script is pretty simple-- it just executes the specified save and reset from the previous script, then checks that the result was correct. I really wanted to make it so that you could select a particular result and execute it all in one script (so we don't have to juggle values between scripts), but I apparently don't have the know-how. Perhaps you could be of assistance? I think I've got 90% of the necessary code already. Edit 2: I screwed up my example in fiddling with my program. It should be fixed now.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
There is one chief reason for killing MUTANT M at SEI-RYU: The first party member will only go first against a higher speed enemy if the fourth member has lower Agility than the first member. If I don't give GAZE to the starter MUTANT F, I'm stuck with a slightly slower secondary MUTANT F. The only member that would be slower than this one would be the MUTANT M. When a party member dies, they go straight to the fourth slot. If someone with too high an agility is dead and thus forever stuck in slot 4 (reviving takes too long), this kills whatever chances I have of ever going first against the SABERCATs, BYAK-KO, and ATOM ANTs. The outcome is rather bleak for the survival of our heroes. The only real advantage in having two F POWER users instead giving one to the M is so I can kill the M off in this fashion.
You seem to be up on things, but as a reminder, I think you should equip the HAMMER as you're unequipping the SABER. Any known or projected disadvantages to the third strategy, the one I'm testing? The only one I can think of is that it requires shuffling party members before the first battle, but that shouldn't cost too much time.
FatRatKnight wrote:
Those two are just stand-alone functions. Stick them together under one file, call the "trigger" known as ScanReset2() every frame, and gui.text the variable str somewhere.
It's giving me an error because MR is undefined. I have this gut feeling I could probably deduce what it is, but I'm just not seeing it at the moment. I was able to make sense of your ScanReset2 function, however. That was pretty clever-- I didn't know there was a RAM address devoted to controller input (and I figured if there were one, it wouldn't update every frame, given how "sticky" the controls seem to be in this game).
FatRatKnight wrote:
The plan for the Monster Trio is to hand the BATTLE sword to the spare POWER mutant. The GAZE mutant isn't using it, is she? On the other hand, I can't remember if even the BATTLE sword is enough...
You've probably already researched it yourself, but according to this FAQ (which I recall you referenced in the past), the BATTLE sword should do fine against most of the enemies (I'd GAZE the GARLIC just to be on the safe side). After all, it did 230 damage against SEI-RYU and we know this trio has about 200 HP each, so unless their defense is significantly higher than SEI-RYU's, it should OHKO them. However, I'm standing by my strategy and I think it's time I put some numbers to it. Jeanne's hideout is at x=29, y=31 and the Hidden Town is at x=52, y=8. Both strategies start by moving down one tile to exit the hideout, down again to enter the glider, and down a third time to leave the forest enclave, so those steps don't need to be counted. From this point (x=29, y=34), the Hidden Town is 49 steps away for a total of 392 frames round trip. Finally, after escaping jail, the glider reappears at x=39, y=53. You travel north until you're aligned with the bottom edge of the castle (which is a 2x2 block at x=27-28, y=30-31), then take a sharp left traversing nine tiles to bring you to x=30, at which point you dismount the glider and enter the castle. Those last nine steps take an additional 36 frames, bringing the grand total to 428 frames. Note that the path I've listed doesn't make any literal sense, but it works fine if all you want is the step total. The alternative strategy is to put off buying bSTONE until the castle is closer. We don't need to take into account anything before the jailbreak (that was all accounted for above), but we do need to count steps after the paths diverge at x=39, y=31. From there, it's 36 steps to the Hidden Town, taking 144 frames to traverse. The return trip takes you to x=28, y=28 where you dismount and enter the castle. That's another 44 steps and 176 frames, bringing the grand total to 320 frames. The difference in transit time between the two strategies is 128 frames. That should be the exact amount-- in all respects other than what I've listed above, the two paths are identical. What this means, of course, is that my "depleting GAZE and getting bSTONE early" strategy has to save 128 frames elsewhere. One obvious place is in juggling the BATTLE sword. I ran a quick test, unequipping an item and re-equipping it on a second character. It took 160 frames to do so. The only other place where GAZE might save a little time is in its battle animation. I believe the GAZE animation is a little bit faster than bSTONE's. However, that does not take into account the much faster actions of the Mutant M during the Monster Trio battle (look at my run for evidence). All in all, I'd say it's pretty clear which strategy is faster. You're welcome to try whatever you want in your own test run(s), but I'll need some serious convincing to use the BATTLE sword in the final run. Meanwhile, back at my run... Stuck at Mileille. I keep doing tests and finding that my results in practice are one value off from what I thought they were from the test. Case in point, I thought that C353 = 252 would spawn one SABERCAT. Not so. It spawns three. That significantly depressed the odds of getting the result I wanted. No problem, I thought, I'll just shoot for a +5 Mana bonus in the second slot. As luck would have it, the SABERCAT struck first, taking out B (who had outlived his usefulness) and bringing A into the second slot for the purposes of picking up the boost. Too good to be true, yes? Of course, the RNG conspired against me to put an ability shuffle in slot 1, shuffling D's abilities. Care to hazard a guess as to what that did to her TELEPOR uses? I found myself in jail with no means to TELEPOR out. The only good news that comes to mind here is that this will not be an issue when we put TELEPOR on A or B (preferably A). I'm going to have to go back tomorrow and see if there's anywhere along the tower climb when I can manipulate the results I want. I think I'm going to have to shoot for a slot 1 Mana bonus, which should be quite difficult. By the way-- when you tested who goes first in battle, did you use a spell or a weapon? I mentioned at one point that using P-Blast in an earlier run caused my mutant to often strike last in battle. After buying and equipping bSTONE, I had the same problem against the SABERCAT. I don't know if it was just a fluke, but it does concern me, especially with the BYAK-KO battle approaching. Also, we have one "free" battle in World 1 from which we need a single additional Mana bonus for our GAZE user. I was thinking that if we can't get TELEPOR on her immediately, maybe we could fight that extra battle to get a fresh set of RNG values that might work better. My only concern is that we'd still have to learn TELEPOR by the time we beat P-FROG, so we can't waste too many steps. If the extra battle doesn't help us there, we can use it any time we're having trouble manipulating luck.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Shucks! I was just thinking about making this game my next project after finishing Final Fantasy Legend! We should be working for at least a few more weeks, so don't wait up for me. I do have a few thoughts, however. First of all, why have you chosen the Genesis version? I recently tried both the Genesis and SNES versions and, if I remember correctly, the sound on the SNES version was much better. Also, have you thought at all about your control scheme? There are three options in the SNES version: "with momentum", "from above", and "from cockpit". Personally, I think "with momentum" is the only "true" way to play the game, but that need not apply to a TAS! I think "from above" is a joke, but "from cockpit" allows for some butter-smooth strafing that might make for a more entertaining video. For this game, I actually think they should accept runs with at least two different control schemes. Finally, will you be rescuing the ace copilot? I'm guessing not, since he only really offers you a more accurate winch, which shouldn't be a problem. I don't know about anyone else, but I've never even been able to tell if he's actually on board or not! The game doesn't even tell you.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
The agony is over! (Okay, not quite.) I've dispatched the Monster Trio. I normally wouldn't give an update without more progress, but this segment was especially nasty and there is plenty to report. Before the MOSQUITO fight, I manipulated C30B to be 229 (Mana +5 bonus in 4th slot) while C353 is 239 (one MOSQUITO). I now think that was a bad choice. I think what we should shoot for in the real run is C30B = 173 while C353 = 184. This is much harder to get (1/7th as frequent), but the chief difference is that it gives us a lot more steps (about 70) before we fight the next battle. In fact, there might be enough steps to manipulate that result back in the Tower, which would be really handy. Ah, you may say, but Jeanne's hideout is just 28 steps from the Floating Castle and we'd have to manipulate luck before the Monster Trio to get a Mana bonus anyway and you'd just made a big deal about how leftover steps don't carry over after a battle. Well, this is the exception. If we pick any other RNG value that gives us the Mana boost and one MOSQUITO, we must manipulate luck en route to Jeanne's hideout. Because the glider is so damn fast, our window to manipulate luck is extremely small-- I recall it was no more than 100 frames. If we can traverse the entire path from the castle to Jeanne's hideout without fighting a battle or resetting, not only can we use the transit to manipulate luck, but also the time when we're walking over to the monsters to save her. I think it'll be a lot harder to manipulate luck the first time, but it will more than pay for itself in how much easier it is to manipulate luck the following time. Regardless of whether you fully understood all that, I just wanted to put it in writing, since we should take it into account for the final run. I had to reorganize the party just a little bit before engaging the monsters. That cost a little bit of time, but it's better than letting D die and reviving her again. I need just two more TELEPORs out of her. My Monster Trio strategy differed slightly from what I believe is the prescribed method. As I recall, you intended to have our POWER user (B, in my case) pump himself up and take care of one of the monsters. Unfortunately, POWER doesn't quite cut it and it still takes two turns to defeat a monster. The only benefit I saw to this was that it saved one charge of GAZE to use on the SABERCAT at Mileille. Other than that, it costs an extra half-turn, involves more text, and is otherwise slow (HAMMER attacks take forever to animate and I don't know why). I decided instead to use up GAZE completely and head straight for the Hidden Town to pick up bSTONE after fighting the Trio. This is a slightly more circuitous path (maybe 20 steps max) than picking it up when the Floating Castle is next to Jeanne's hideout, but I figure the glider is so fast (4 frames per step) that it makes very little difference. Come to think of it, though, perhaps the plan was to give our POWER user the BATTLE sword. That should take care of one of the monsters in one hit. I still think it would take too long to unequip it and re-equip it, then wait for the text and animation as B POWERs up and swings the sword, but it's worth testing. I'll check on that eventually. Anyway, I'm currently contemplating how to get to BYAK-KO's castle and how to manipulate luck once I'm there. It's 70 steps from the Hidden Town to the castle, but I only have 44 steps before my next battle, which means another bout of manipulating luck on the fly. Worse, I don't know if I should try to manipulate luck for the SABERCAT battle now or put it off until I'm in the castle. Manipulating for it now might be tricky and it might cause the NPCs to conspire against me. I really don't know what to do about them. There are a few hallways where it would be great if they'd walk south, but you and I both know that's not easy to do. I might try to stop walking strategically to put C34F and C369 in a better spot, but I'm not confident I can do that smoothly. Oh wait. The only way I can get a +5 Mana bonus in the third slot while fighting one SABERCAT is by having C30B = 242 (I can get it for the second slot with C30B = 243, which is just as bad). That's not going to give me nearly enough steps to reach the castle, so it looks like I'll be manipulating luck just to avoid a random battle. At least that answers one question.
FatRatKnight wrote:
The RNG is affected by what the CPU is doing internally. Generally, the music itself has a significant impact on the RNG. So does many different actions like exiting the menu. Part of the reason why I was considering using the Sound Test, of all things, to manipulate luck.
Ah yes, I remember you saying something about that and not being clear why the Sound Test would help. It's a cute idea, but given the 60-odd frames just to reach the title screen after any soft reset, I think it would be more efficient just to reset twice. If you're still interested in manipulating luck with the Sound Test, I'll leave it to you.
FatRatKnight wrote:
One test: Party of mutants, F F M F and see how the random battles go from there. At SEI-RYU, the M must die (two Fs will have POWER and would steal his HAMMER away from him). At monster trio, the fodder F must die. After BYAK-KO, anything goes after we get our manly man.
Just curious: Why does the Mutant M need to die and why does the fodder need to die? (I know at least one of them has to.) Also, what potential advantages do you see to having a female POWER wielder? In any case, it's a cute idea. Oh, if you're looking for the POWER user to go sooner in battle, why not make it F F M M? Last I checked, our fodder doesn't actively do anything.
FatRatKnight wrote:
The third test: Party of mutants, F M F F. Swap first with fourth so the GAZE user is the one with the extra Agility. What you've been doing, with several mistakes.
Who? Me? What? Mistakes? No! Never! I'm perfect! I'm going to toy around with your Lua scripts. I wasn't able to decipher them by looking at them, so I'll just see what they can do for me. One more thing: if the game is too slow for you, set C5B2 and/or C5B3 equal to 4 for instant glider effect. Those are the bytes for walking speed (crazy things happen if you set it greater than 16). If you want the thrill of being inside the glider, change CCC1 to 2. I don't recommend it, though, as it was never meant to traverse the terrain in World 1 and therefore stays frozen in place.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I tried shuffling the party and manipulating luck (some new findings showed that I would be best off with A in the fourth slot), but I had the same problem-- the RNG index dropped below its predicted value. I figure that the offset is dipping by only a tiny fraction, so I set my mind to creating a Lua script that would determine the "unknown fractional amount" in b (according to the definition on the resources page). At first I was intimidated and thought it would be a long guess-and-check procedure, but then I realized that when b increments by 1/64, exactly one RNG index is exactly 1 greater than its previous value. For example, suppose we compare b=0 with b=1/64. In that case C307 will be one greater than its previous value and every other RNG index will be the same as it was before. Therefore, all I had to do was tally up the number of RAM addresses between C300 and C33F that exceeded their expected values when b=0. Divide this number by 64 and you have your "fractional amount". But in case you don't care about any of that and only want the good stuff, here's my code:
--This function finds the "unknown fractional amount" that offsets the RNGs.  Useful for debugging.
local function getb()
	b=0
	for i=0,63 do
		b=b + (memory.readbyte(0xC300+i)-memory.readbyte(0xC300)-math.floor(9/64*i))%256
	end
	return b
end
In this case, b is not divided by 64 to obtain the fractional amount-- I did that so it would be consistent with your "RNG picking" script, which uses the same format. As far as I can tell, my script works marvelously. Just note that it doesn't give sensible results when the RNGs start changing; you should only interpret the output immediately after resetting. I'll be using my script to find out how much the RNG slips when I save and reset. If it's by a fairly consistent amount, then I can possibly adjust the "window" over which to reset. I'll edit this post to update you unless you reply in the meantime. Edit: I took 5 samples. The results are... not good.
Projected| Actual  |Difference
---------+---------+----------
41/64    |254 53/64|-1 52/64
16/64    |255 28/64|-52/64
9 35/64  |7 27/64  |-2 12/64
3 5/64   |2 17/64  |-52/64
3 58/64  |1 50/64  |-2 8/64
The difference column has a mean of -1.55 but a rather large standard deviation of 0.69. I don't know if it's significant that all of the difference column is divisible by 1/16. These results don't outright kill our chances of manipulating luck, but they do make it a lot harder. For now, I'll have to adjust my window 1.55 upward plus two standard deviations of tolerance, then try options until they work. Can you offer any insight here? Edit 2: Well, I made essentially no progress tonight. This RNG drifting is really worrisome. Is it going to get worse as the game progresses, or is it unique to World 3? Why did I not notice it before? What, if anything, can we do to influence it? If we don't figure something out, it will make the final run excruciating (I was hoping instead for a "paint by numbers" kind of straightforwardness). On the other hand, I think the shift can be subtly influenced. I haven't yet bothered to do a formal test, but I recall restarting at the same frame after saving two different times and getting slightly different results. Given how consistent the RNGs usually are, that indicates to me that it has to do with when and for what duration I pressed certain buttons. Tomorrow, I may try throwing together a short script that presses buttons for a certain duration-- say, ten frames-- then resets to compare the RNG. (Or, you know, I could just press the damn buttons for ten frames then reset. Why do I need a script? This is a good indication to me that I should go to bed...) If we can understand and control that, then we're back in business. That means we can force the RNG to drift by doing something as simple as holding the A button. I'm doubtful though. I think there's some monster chaos underneath it all. No urgency, but I'm basically waiting for you to bounce an idea this way. Edit 3: Well heck. Seeing that it would be extremely easy to test the RNG drift, I decided to run a little test before turning in. Here are the resulting RNG seeds when holding the specified button for ten frames:
Button|   RNG
------+---------
None  |217 10/64
A     |217 10/64
B     |217 10/64
Up    |217 8/64
Down  |217 8/64
Left  |217 16/64
Right |217 15/64
Select|217 22/64
Start |217 23/64
Chew on that for a little while. Edit 4: The same test in Base Town after a fresh hard reset:
Button|   RNG
------+---------
None  |243 12/64
A     |243 12/64
B     |243 12/64
Up    |243 12/64
Down  |243 12/64
Left  |243 18/64
Right |243 17/64
Select|243 26/64
Start |243 26/64
It's not unique to World 3.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Up to World 3. Not quite as far as I would have liked, but it'll do. There isn't a whole lot to report on. I decided to let D die and revive her. That cost 967 frames. I did not follow the correct encounter rate coming out of the SEI-RYU battle, so I wasted 17 steps. I had the most awful luck ever in the Tower and the RNG simply refused to throw me anything that wasted less than about 15 steps. I am currently having the damnedest time trying to manipulate luck for the MOSQUITOs in World 3. I've determined that the number of enemies in a group is decided by how many times C353 rolls before hitting a number below a certain threshold. In this instance (all instances?), that threshold is 64. I have A in slot 1, so the only value of C30B that allows me to get her a +5 Mana bonus is 137, and that's only if C353 is 148, which has just an eleven percent chance of happening. I was able to get it to happen twice, but in both cases, the RNG snuck out from under me. Prior to resetting, my script told me that C30B would be 137 while C353 would be 148. After resetting, C353 was 147, so I think the act of opening the menu caused it to shift. I'd noticed things like that happening before, but this is the first time it's been a problem and actually notable. For now, be aware that opening the menu seems to cause the RNG seeds to shift down ever so slightly. It can't have been by much. I may decide to shoot for the Mana bonus in another slot and reorder the party. Now, however, sleep.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
Filling out the rest of the stuff. I hope it helps out in planning when to reset for encounters.
FatRatKnight wrote:
Step counts. Counting only the ones that increment the appropriate RNG.
Excellent, excellent, excellent! These will be very useful to us!
FatRatKnight wrote:
Also, suppose some path takes 210 steps to finally get through and meet the boss. Is it wiser to manipulate closer to the 93 step RNG per reset, or don't bother and go for approximately 70 each time? The 93 steps is still the way to go. Just because you finish some leg of the journey doesn't mean that, suddenly, the remaining 69 steps are completely worthless. You were at C33B:5E when you made the P-FROG bandit drop dead. The next encounter was at 7C. The difference between the two numbers, 0x5E and 0x7C is 30 steps. By resetting when you did, you effectively wasted 29 steps. Ouch. Keep that in mind. Just because you beat a boss doesn't mean the leftover RNG is suddenly bad.
You're half right. First, regarding my run, yes, you're entirely right. I don't know what I was thinking. I believe I thought it would be a lot harder to manipulate luck than it has ended up being. Going off the top of my head, I had a sense that manipulating a specific RNG value takes maybe 24 steps, manipulating it to one of two values takes 12 steps, and manipulating it to one of three values takes 8 steps. I think those numbers were a tad conservative, so when I saw I could get POWER when I could, I jumped on it (never mind that I could have put off learning POWER and never mind that I should have put off learning POWER...). However, you're mistaken in the general case. The P-FROG is a poor example because he was at the end of a long string of battles from which we were learning TELEPOR. Suppose we reach KINGSWD with the same surplus of 30 steps. Those steps won't "roll over" because we need to manipulate luck at KINGSWD to get a Mana bonus (unless you want to fight another battle later on-- I don't think you want that). That means any difficulty we went through and frames lost to luck manipulation en-route to KINGSWD were wasted. Provided we have to manipulate luck before a forced encounter, it's best to reach it by manipulating luck in as few frames as possible. We can theoretically reset as late as 15 frames after saving (remember, 16 frames per step... except in the glider or on the bike, but you know that), but we should rarely have to reset later than, say, four or five frames after saving (I think we can even consistently get it down to the zero to two range). Of course, that assumes we can go the distance in the same number of resets. Make sense now? This rule ceases to apply in the second half of the game when we're no longer manipulating luck for the purposes of stat bonuses and abilities. There it makes sense to go as many steps as possible without resetting. I'm currently trying to get SEI-RYU to kill C by analyzing the RNG. Sorry it's taking me a little bit to get into the run tonight. I still expect plenty of progress.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
You mean this, at the bottom of the post with an edit as an afterthought?
Yes, that's the one! Sorry I missed that...
FatRatKnight wrote:
The chosen action might change depending on earlier stuff throughout the battle, but I haven't been able to reset to change that.
I'm almost certain enemy actions can be changed by your own actions. I distinctly remember getting BYAK-KO to use SPHERE by whipping him in my solo mutant run. Whipping him caused him to use different actions, not just put the same ones off until later or skip a turn. I'm a little too lazy to check it, but my movie is still on page 2 or 3 if you want to see how it works. (You could also hack in a WHIP or TELEPOR back to World 1 or something.) Regardless, I don't seem to have the means to change SEI-RYU's actions. I even tried using BARRIER to no effect.
FatRatKnight wrote:
Speaking of, why did you set things such that you have three different characters that each must survive at SEI-RYU? One with GAZE and POWER, another with POWER, and the last with TELEPOR.
Good question. I didn't read your plans carefully enough, but now I see that you had specified that TELEPOR should go to A or B. I recall I couldn't get your other two options to work (C36F = F9), so I went with the third. I failed to notice you specified some party shuffling before picking it up. Oops. I still doubt it will affect things all that much in the long run. With a substantial mistake like that, however, I'm leaning towards not finishing this test run. Through BYAK-KO should be more than enough.
FatRatKnight wrote:
Somehow, ESP blocks the physical attack of SEI-RYU on the first turn. I've had success with that in my tests against SEI-RYU, if you want to keep that in mind.
From a quick glance at your notes, it looks like the only way we can get ESP is on the way to learning POWER, and that's if the character in the fourth slot gets POWER. I think ESP or ARMOR should do the trick (any reason not to get ARMOR?). Also, Alex Jackson already pointed out how ESP works:
Alex Jackson wrote:
As far as I can tell, ESP is not "bugged" after all... it works exactly like a shield. The "effect bytes" used by shields and ESP do nothing except print a message--the defensive functionality comes from the flags byte, not the effect byte. ESP has a different effect byte from shields because it prints a different message.
Lastly, I think there's a good route-planning project for us to work on. I think it would be invaluable to know the number of steps and kind of terrain between forced battles. We would then want to know how this compares with the maximum number of steps we can take without an encounter. For example, we can take at most 93 steps on plains or in forest before the next random encounter. Suppose it takes, oh... 180 steps to walk from the Bandit's cave to the Castle Shield (I know we would never do this, but it's just for the sake of example) so we know that just two resets are needed to walk that distance. Then we would know we have six "extra" steps that we can use to manipulate luck. If we can't reset to get all 93 steps but instead get an average of 90 from each one, we'll still know we can make it in two. Does that make sense? This actually came up in practice when I was on the first floor of the Underwater Castle. I was trying to manipulate the enemy octopus thing to walk left and up to get out of my way. I found I could do it efficiently if I reset much earlier (near the castle's entrance) or possibly if I waited over 100 frames at the end of the path (the next step would trigger an encounter). I decided to reset near the entrance, but I'm still unsure if that forced me to reset an additional time later on. If we know the distance between two objectives and how many resets to expect, I think it can save about a dozen frames now and then. For example, it may be that we can walk all 93 steps before resetting to gain another 93 steps, but we have to reset 15 frames after saving. If the objective is, say, 150 steps away, it would then be more prudent to reset at maybe 75 steps to get 80 more steps if we can do it on the exact frame the game saves. What's key is that we have to manipulate luck anyway before the forced encounter (presumably to get a Mana bonus or POWER). Tell me if that makes sense. I think I've done a bad job explaining it. Anyway, if you want to, you can work on that, but I realize it's a somewhat large task, so I'd be willing to take over or pitch in when I'm done with this run. I think you have enough to work on at the moment. World 3 is pretty boring and straightforward, so I hope to be done in a day or two.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
At SEI-RYU. Up to this point, we have believed that soft resetting resets the battle RNGs to a fixed state and the outcome of a battle cannot be changed by exploring other RNG seeds. I can tell you now that is false. I reached SEI-RYU with the party in the order A-B-D-C. I reset to gain a +5 Mana bonus for A. When I did so, SEI-RYU attacked A, so I decided to switch her to the third slot, requiring a new RNG seed. After finding new candidate RNG seeds, I took on SEI-RYU again. This time, he struck at A first again, in the third slot. Puzzled by this, I researched every RNG seed that would give a +5 Mana bonus to any party member, then reorganized the party accordingly. I found that sometimes I could beat SEI-RYU, other times, it was impossible to distract him from A. Although the party member he attacked was inconsistent, his attacks and the damage they did never changed from trial to trial. Furthermore, I was not able to defeat him without sacrificing D. That is a huge stumbling block because D has TELEPOR. The only way I can continue without going too far out of my way is by stopping at the East Island Village house of life (if it has one...) on the way to the Old Man. I could progress if I were able to convince SEI-RYU to attack C twice. While it's nice to know we have a little leeway for planning boss fights and such, the more pressing concern is how to keep a member with TELEPOR after the SEI-RYU battle. One way to do so would be to give her ARMOR. Way back in World 1 on the way to picking up TELEPOR, ARMOR showed up in the second character's first ability slot. B has been holding onto it for no reason-- in fact, I'm a little annoyed he has it because I have to scroll down to use POWER. If we guild D second and B last, D will end up with it. We would then have to reorganize the party exactly as it is in my test run; doing so should bring us to the same state with the SEI-RYU battle, except D isn't doomed to die. One handy side-effect is that it should keep our two fodder characters alive through the SEI-RYU battle, allowing us to sacrifice them later on. Another option would be putting TELEPOR on A or B. That could work if we give it to B, since he doesn't have an ability in his third slot. We would then need to keep him alive through the end of the game, unless he dies somewhere in World 4 and we have two slots open so we can guild a Mutant F in Northeast Town. We could also give TELEPOR to C, but I'd rather not if we can help it, since I've learned my lesson regarding giving TELEPOR to cannon fodder. It's sticky, to say the least. I accumulated a few more notes along the way. Here are the coordinates of important locations in World 2: Airseed - x:53, y:52 Old Man's hut - x:55, y:29 East Island Village - x:55, y:13 Whirlpool - x:12, y:14 In case you weren't aware, the x and y coordinates are stored in CCC9 and CCC8 respectively. I think it's handy to have these coordinates because I find it's easy to get lost in World 2. I discovered it takes 1544 frames to buy the sword from Port Town but just 1121 frames to get it from East Island Village, saving 423 frames. That includes the time it takes to leave and return to the main path. Much thanks to Shiner for pointing that out! Here is a list of all the C30B values that yield +5 Mana bonuses and the character they go to: Char 1: 23, 137, 203 Char 2: 161, 230, 243 Char 3: 4, 136, 242 Char 4: 3, 135, 173, 229, 241 And here are the C30B values and party orders with which I was able to successfully defeat SEI-RYU: 137: A-D-B-C 243: C-A-D-B I was also able to defeat him with other values such as 4 and 242, but those involved putting D ahead of A, so A lost her place in the party order and failed to pick up the Mana bonus. Come to think of it, I could just put her in slot 4 while the Mana bonus goes to slot 3; then if D (or preferably C!) dies, A will still get the bonus. I'll look into it eventually, but I think we can agree the preferred methods would be getting TELEPOR off of D or ARMOR onto her. Finally, I compiled a very short list of target values for C33B if we wish to go as far as possible without fighting a battle on different terrains. The results are surprisingly varied: Plains and forest: A1 Swamp: BA Tower: 2D Glider: FF You can add to that as you find more encounter rates. I've mostly been winging it up to this point (I just shoot for A1 and hope it works). Back on page 8, you shared a short Lua script that allows the user to change all the RNGs on the fly. I just wanted to thank you for that. I was easily able to splice it together with your growth script, making finding the Mana bonuses and testing the SEI-RYU battle a lot easier. I encourage you to replicate some of my results, then help come up with a strategy for getting past SEI-RYU with TELEPOR in the final run. For this run, I'm currently inclined to revive D and just subtract out the frames spent doing so.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
Since the USA version doesn't allow such memory corruption, and even with it, forgoing use of such a glitch shows so much more of the game, enough to hopefully justify publication alongside.
TASvideos does not have a good record for keeping speedruns when they're obsoleted by large glitches. I've seen exceptions too (e.g., LoZ: ALttP), but those are almost exclusively because of different emulator settings such as "allows left+right/up+down" and not because of play style. Luckily for us, that doesn't really apply because the Japanese version is sufficiently different, but if we were in a position where our run could be 90% shorter, I'd be having a long discussion with the judges about whether to continue.
FatRatKnight wrote:
I just looked at how much mana your character currently has. Here's the projected values at the start of each battle:
To my surprise, I've miscalculated something along the way. I'm now one battle short for reaching BYAK-KO with 46 Mana. I'm going to have to fight one more extra battle. That's weird because I could have sworn I had more battles than I knew what to do with. That's still the case, however, for the second half of the game. Also be aware that this additional battle applies not just to my current run, but our final run as well. I suggest we use that battle to get +5 Mana and we use the STEWARD's cronies to get POWER on the first user, then the STEWARD to get POWER on the second user. You may wish to double-check this. I'll fight the extra battle somewhere in the Tower and we'll subtract out the number of frames it takes.
FatRatKnight wrote:
I'll look into the encounter rates for a bit. At least have some numbers we can use to plan out where we want the RNG.
That would be great! I was surprised to find the Tower has an encounter rate of 9 (I figured it was 13), so we should probably collect that information for all relevant areas. Anyway, I'm at the base of the Tower now. I should cruise through the next part. I'll check which town is fastest for buying the BATTLE sword. Also, unequipping the SABER was not too much of an issue. If we fight one extra battle, we might not need to, though. Silly me. I already did fight an extra battle to pick up POWER in the first place. Looks like we'll be selling the SABER after all (unless we can cut back on damage and HP bonuses). Edit: Fixed a link. Edit 2: Almost forgot to mention: the STEWARD "warped" one tile to the left of his hiding place before I restarted. That doesn't help us at all because he's more out of the way/in the way, but what if we could nudge him or other static NPCs to the right? I don't know if it's a reproducible glitch, but it's worth having in the backs of our minds. Edit 3: Interesting results coming down the pipeline. Stay tuned...
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I forgot to shuffle the party so I ended up picking up POWER for A while displacing it for B. Go me! I'll go back and fix it tomorrow. The video desyncs at the very end (when I try to pick D to TELEPOR), but you can see that's of no concern. Another minor issue is that I seem to be low on cash. For some reason, the fourth character has soaked up HP gains like a sponge and now has 82 HP. Needless to say, I'm not worried about HP, but the World 1 inn is by far the most convenient place to restore the charges on our abilities. At the moment, I'm inclined to skip the inn, but as usual, I'd like your input.
FatRatKnight wrote:
We use a starter HAMMER from a MUTANT M to get the extra damage we need. No need to buy any weapons beyond the needed BATTLE sword. Or, for that matter, sell anything. I thought I uploaded this, but I couldn't seem to find any links in my previous posts. Well, here's a new upload.
Yeah, I've got a similar movie on my computer, so it's out there somewhere. In the old movie, the battle takes two full turns, in the new one, it just takes one-and-a-half. That's why I thought a different weapon might save half a turn. I'm still very interested in whether we can save any time with a third POWER user. After all, I still have one more free battle to use before BYAK-KO. If I can save about 80 frames in the long run with that battle, it will be worth it to make that discretionary switch with A (that reshuffling in the Bandit Cave). The only battle an extra POWER user could help us with is the Monster Trio, but given our attack plan, I'm doubtful he'd save time. Hmmm... maybe I won't redo all of that last part of my current run. I'll use the STEWARD battle to get POWER for B again. What are your thoughts? It strikes me as a pretty loopy strategy. Is there anything, anything at all we can use an extra battle for? If not, I'll just "waste" it getting POWER back. Seems a shame, too, since B never got a chance to use it in the first place. We'll want to plan that more carefully in the final run. I fight an optional battle to pick up POWER in the first place, so we can nix that.
FatRatKnight wrote:
Again, to force a single enemy against STEWARD's cronies, C353 must be one of these: 1B 2A 2B 2C 35 4E 52 64 6D 7A 8D 94 97 99 9F A1 A2 A3 A6 A7 AF C4 C5 C8 CA E0 FC FD FE
Once again you come through with the technical info I need. Thanks again!
FatRatKnight wrote:
When you have a nice party with the necessities, cheat the random battles away. Unless you really want to experiment with avoiding battles, the point of the test run is to see how we can deal with the battles we must fight. Naturally, you won't be able to record the cheating all that well in a movie, but being able to stroll straight to bosses without intervening battles speed things up greatly.
That's probably a good idea, but I'll still do my best to justify the effort I'm putting into this run. First of all, it gives us a goal to strive toward. Yeah, it's got a handful of mistakes, but I think we can easily estimate the number of frames wasted. Second, I need the practice. Badly. I'm still sketchy on the strategy and ask you for clarification a little too often. My hope is that by the time I'm finished with this run (whether that takes it through BYAK-KO or all the way to the CREATOR), both of us will be comfortable running this game individually. Third, I'm throwing out a blanket warning against unforeseen pitfalls. Suppose, for example, it works out such that I don't have to reset between the MOSQUITO battle and the Monster Trio. Without a reset, the battle RNG won't reset and I might get different results that we'll want to know about. Granted, the chances of a situation like that are extraordinarily small, but the safest route is running the game for real. Unless you specifically want to move on, I'll be working on this run until I'm sick of it. Lastly, is it just me, or does VBA23 run faster than version 22? I'm regularly getting 2000% speed with the right settings. It almost makes desyncing bearable!
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I'm still working on this portion of the run, so no update yet. I still wanted to reply to you and throw some questions out there.
FatRatKnight wrote:
Then POWER: C30B:95 (POWER, BARRIER, nil, HP+) C30B:96 (Def+3, POWER, BARRIER, nil) C30B:97 (nil, Def+2, ESP, POWER)
That's a quote from your post on specific RNG plans. It's also incorrect. Set C30B to 96 and your first mutant will pick up THUNDER. I observed this with your Lua script and then confirmed it with your tables all the way back on page 2 (your first post). Also note that 96 is the middle value you suggested, so it can't be explained as another "offset by one" discrepancy between us (and I think we've ironed that out anyway). Those numbers need updating. Getting C30B = 0x95 worked fine, though.
FatRatKnight wrote:
At your Mana level, it shouldn't matter how much Mana you gain from STEWARD's cronies, even zero is fine as long as you guarantee +5s from later battles.
I tried for the +5 Mana boost anyway but it came up dry. I'm currently trying to secure a second POWER user, but I'm not yet sure I can force an encounter with one SKELETON. It's slow-going.
FatRatKnight wrote:
Oh, wait. You don't seem to recall this is a requirement in my plans. It won't work without a second POWER user, so yes, we absolutely need one!
You have a much better memory and perception of the grand strategy than I do. Yep, I'm working on getting that second POWER user. It sure as hell beats trying to get a +5 Mana boost from the STEWARD's cronies. I have some new thoughts on the SEI-RYU battle, however. First of all, what if we get two BATTLE swords? We only have a Mutant M because he comes with a strength-based HAMMER. If we get two BATTLE swords, we can equip it to a Mutant F, who would have slightly more Agl. I've thought of the following advantages and disadvantages: Advantages: •BATTLE sword does significantly more damage against SEI-RYU. Based on your demonstration battle against him, using two BATTLE swords will save half a turn (BATTLE swords do 200+ damage to him, killing him in three blows, while the HAMMER does about 140, killing him in four between the two fighters). •Having two BATTLE swords might take out the Monster Trio sooner for the same reason. I expect it will help, saving at least half a turn. •The additional Agl. from a Mutant F might give that mutant a better chance of striking earlier in a battle (although I think that's still an open question) and improves her chance of connecting. The benefit (or drawback?) of this would be hard to measure. Disadvantages: •The SABER from our party leader must be sold or we won't have the money to pick up a second BATTLE sword. I won't miss the SABER, but it will take a few dozen frames to sell it. •A second BATTLE sword must be equipped, also costing a few dozen frames. •A Mutant F takes three additional frames to guild since they appear below the Mutant M. I see this as inconsequential. If you're looking for something to do, take thirty minutes to an hour to peg some numbers on those advantages and disadvantages. How much faster can we take out the Monster Trio with two BATTLE swords? How many frames can we expect to save against SEI-RYU? How long will it take to sell the SABER? How long will it take to equip the second BATTLE sword? But that's not all! Since I squeezed in that additional Mana boost and I now expect two free battles before reaching BYAK-KO, I thought, What if we get a third POWER user? The only cost would be the 100 or so frames it takes to reset (plus the time it takes to equip a third BATTLE sword). As long as we're selling the SABER, we'll have enough *Sigh*. It turns out Karl Marx hates our guts. You can disregard all of that because I neglected to check how much the SABER sells for. Apparently even a gently used SABER (44 uses left!) sells for an extreme discount of just 101 GP. I hate this game. That's not enough for a second BATTLE sword and only enough for a first BATTLE sword should we come up a little short on cash. Even so, we might have barely enough money to pick up a LONG sword (attack power 3) or maybe even an AXE (attack power 4, but getting it would be a real stretch). Please look into whether using either of those will finish off SEI-RYU any earlier. I suspect the answer is "no". Would it be worthwhile to pick up a second Mutant M and give him POWER as well? That's something you can work on while you're working yourself back into shape.
FatRatKnight wrote:
All that's happening with the swamps is the fact the encounter rate changed. There's 14 steps of swamp to go through. Just set the RNG so you have a 14-step gap timed for this encounter rate 13 zone.
That would be fine if it were only 14 steps of high encounter rate. Unfortunately, the castle has the same encounter rate, so it remains nontrivial. If you don't believe me, fast-forward my movie to frame 13800 and try to do better. Perhaps what I've left unclear is that I was on track to fight a battle before reaching the swamp. That means I couldn't just walk up to the swamp and manipulate luck.
FatRatKnight wrote:
I'm finding it difficult to get myself back into gear for this run. Sorry if my posts aren't so full of content like usual. Keep talking, hopefully it'll help me get myself fully aligned again.
Don't sweat it. I took the last three weeks off and you were hard at work on another run. It's my turn to work hard while you offer encouragement and advice whenever possible. I'm going back to work. I expect to finish World 1 by the end of the night. Thankfully, luck manipulation should be much easier after that.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I haven't been involved in the contest or even following it especially closely, but before you think the support for revealing the other games is unanimous, I'd like to pipe in and say I think they should remain a secret. I really don't see what there is to gain from revealing them, plus next year's competition might be correspondingly weaker because there are fewer good games to choose from. If you must tip your hand, just reveal one or two games that were never in close contention to be selected.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
First and foremost, congratulations on the Dream Team Contest! Am I correct in inferring that your team won? (I haven't gotten around to downloading the encode. I'm waiting for it to be uploaded to YouTube...) That's really awesome!
FatRatKnight wrote:
The bulk of my plans are here. More RNG details. Although, these were before the discovery of the agility oddity.
Yeah, I've been trying to use those posts only as a basic guideline. I'd like to figure out what I can on my own, but now that I'm feeling a little more comfortable with this run, I'm using them a bit more.
FatRatKnight wrote:
The mana bonuses in the TELEPOR route are almost immaterial. At this point in planning, they give practically zero benefit to A. The only real benefit is that we can get away with is smaller Mana gains later.
You're probably right, but you've got to acknowledge the appeal of having 16 Mana as opposed to 15. Sure, luck manipulation is a little bit harder, but it might mean one less battle.
FatRatKnight wrote:
Also, you messed up starting from the very first battle. You don't fight a LIZARD -- They have 40 HP. A GOBLIN has 20 HP, and is oh, so much more capable of dieing in the first round. If C343 was 0x58 from your title screen reset, possible but difficult, a GOBLIN would have showed up both in the plains and the forest. Again, I'm thinking we walk a few steps first, then reset. We have a few spare steps we can pick to try to mess with the RNG here.
Hrmph, you're right. I noticed it too, but I thought I was okay because I fought an ALBATROS for the second battle. Fortunately, this affects, oh, absolutely nothing in the long term. We can always change it to the preferred strategy in the finalized run. The only thing it has even the slightest effect on is D's hit points, but I'm not the least bit concerned about that (she can be pretty easily OHKO'd anyway). Moving on, here's my latest update: Through KINGSWD. First of all, you'll notice I went back and picked up that +1 Mana boost for A. If I can secure +5 Mana boosts from this point forward, I'll get 46 by BYAK-KO... ...Oh. I just checked it. I'll have 56 Mana by the time I reach BYAK-KO. Uh... perhaps that's what you meant when you said boosting Mana is pointless? So refresh my memory: What are we manipulating luck for in the forced encounters before BYAK-KO? The only things that come to mind are +4 Mana boosts (freeing up luck manipulation somewhat) and not dropping meat. We want as many battles as possible to be lackin' any meat. Ooh! We could also get a second POWER user! I have a feeling we've talked about this before, but what are your thoughts? In any case, I've played up to this point under the assumption that I need as much Mana as possible. So far, it's been pretty easy to secure +5 bonuses. The only trouble I ran into was before KINGSWD. I had to back it wayyyyy up before resetting to get the boost in that instance. All other possibilities for securing the boost either required fighting an extra battle (out of the question) or waiting about 150 frames in front of KINGSWD to reset. As you can see, it worked out okay, but the minor drawback is that I've taken a lot of steps off of C33B, forcing me to manipulate luck a little bit sooner in the next leg. Considering that, perhaps it would be better to stand in front of KINGSWD for 150 frames? This is all just random musing and mostly inconsequential, but they're still the kinds of questions we'll need to answer in the real run. Oh yeah, and you'll notice that KINGSWD goes down without the need to fight a battle beforehand. I hope that's consistent with your prediction. The other thing that I want to bring up is the luck manipulation to avoid battles. For the most part, it's been straightforward: shoot for the biggest gap between encounters-- try to get the earliest RNG in that gap and try to get it by walking as many steps as possible before manipulating the result. I don't know if that makes any sense to you, but that's how I've been doing things. Things got much trickier, however, in the plains before KINGSWD's castle. I found myself a few dozen steps outside the "swamp" (I know it's unclear from the graphics, but I call the terrain outside KINGSWD's castle swamp). If I shot for the biggest encounter gap in plains, I might reach the swamp too soon and fight an unnecessary battle, so that was out of the question. If I shot for the biggest encounter gap in swamp, I would skip over steps in plains that were never going to be battles anyway. What I ended up having to do was find an encounter gap that opens up just as I step onto the swamp. This involved analyzing the RNG table for the largest gap for swamp terrain (starting at C33B = 0xB9), then extrapolating backward to the earliest I could go without fighting a battle on plains (C33B = 0xA0, 25 rolls earlier). I then walked 25 steps from the bridge to determine the earliest I could possibly reset. Finally, I wrote up a few little formulas in Lua to give me an idea of when to best restart:
local stepstoreset = math.floor((frame-startframe-20)/16)
local stepsafterreset = 185-stepstobattle
local totalsteps = stepstoreset + stepsafterreset
local wastedframes = frame-startframe-20 - 16*stepstoreset
where startframe is the frame at which I run my program, frame is the candidate frame for restarting, and stepstobattle is the value of C33B after resetting at frame. If you're wondering about the other constants that show up, I determined it takes about 20 frames to pause the game and save, it takes 16 frames to take a single step, and 185 is of course the last encounter in plains before a large gap. (As it turns out, wastedframes isn't used at all. I just kept it in because it might be useful to know in some instances. It's the number of frames you have to wait after saving but before resetting.) So that's all really confusing, but what the hell does it mean for practical purposes? The deal is that normally, I'm looking for something simple like C33B = 185, 186, or 187. This time, I was looking for totalsteps to be as close to 25 as possible without going over. If it were 25, I would reach the bridge exactly one step before the large gap in the swamp battles. I wasn't able to find one that worked for exactly 25, but I did find one for 24, placing me a few steps in front of the bridge before hitting the swamp gap. You'll see the results are quite good. I just wanted to give you an impression of how hard it is to do these searches thoroughly and what we're in store for in the real run (in case you didn't know already). What's the take-home message? When the terrain doesn't change, manipulating luck is fairly straightforward. All it requires is finding the biggest gap and shooting for it. When the encounter rate changes, you have to turn to my little algorithm above (or something like it) to find the optimal restart points. I hope that all makes at least some sense. Edit: I mentioned that we can use the forced encounters to manipulate +4 Mana boosts. I'd just like to quickly point out that doing so seems inefficient to me. All of the forced encounters take place "indoors" (that is, C33B doesn't increment), so we'll have long stretches of walking with which to manipulate whatever results we want, including +5 Mana boosts. It's no big deal if you don't get around to it, but give me an idea of what to manipulate luck for as soon as you can. I've got to manipulate luck for the STEWARD's cronies tomorrow and you've already pointed out that there's only a 1 in 2048 chance of getting a +5 Mana boost on any given reset for that battle. If I have an alternate option, that will make long-term planning much easier.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I'm just doing this step by step. Through Bandit Cave. I discovered that I had foolishly over-abbreviated one of the variables in my Lua script, so it was always coming up nil. I fixed the variable and was able to quickly get the luck manipulation I sought. In fact, I think I reset on the exact frame that my game saved! Syncing went fine this time. Before fighting the P-FROG, I put A back in the lead. This was for a few reasons. First, if D remains in the lead, she will be killed. Second, if anyone else is in the lead, turns are wasted not GAZing P-FROG (I tested it-- it's about 200 frames faster to have A in the lead). Third, there's a +2 Mana stat boost too juicy to pass up. Unfortunately, +2 is small game and might not make a difference. In fact, it's quite likely it won't. Here are my relevant stats so far: A: 8 Agl., 15 Mana B: 7 Str., 3 Agl., 5 Mana (B is our HAMMER-wielding POWER user) C: 8 Str., 7 Agl., 6 Mana (C holds TELEPOR and is otherwise useless) D: 6 Str., 7 Agl., 5 Mana (D is useless at this point) As you can see, A has 15 Mana, which is one less than 16 Mana, which is 30 less than 46 Mana, 30 being a multiple of 5 and 46 being the amount of Mana needed to OHKO BYAK-KO. In other words, even if I get +5 Mana boosts for A from the next six battles, she still won't get the coveted 46 Mana. She'll need one more. We could, however, manipulate some +4 Mana bonuses instead, easing up our luck manipulation a tad. I don't know why we would, though. Mana is by far the easiest stat to get +5 boosts for. The other possibility is that there's a +anything Mana boost while I go to pick up POWER. If that's the case, I think it will be well worthwhile to reorganize the team so that A snatches it up. Ironically (or perhaps superstitiously), I feel as if the smaller the Mana gain, the more productive the switch will be, even though that's technically not true. In any case, I'd hate to reach BYAK-KO with 45 Mana, so I'll keep my eyes peeled. Please tell me if there's anything I should be concerned about. I'm counting on you being correct that BYAK-KO will go down provided the character with GAZE has just one extra unit of Agl. I'm not sure I'll even finish the run, provided I can take out BYAK-KO. Also, in case you didn't notice, I posted to ShinerCCC's GameFAQs topic. His practice run is pretty good and I learned some new tricks from it. Most notably, he gets the BATTLE sword from the second World 2 town and he shows that you can use spheres anytime, anywhere to open the next door. I'm not sure about where we should pick up the BATTLE sword, but the sphere trick should save a second or so since we can navigate the equipment menu before we use TELEPOR, saving... I dunno, ten frames of menu navigation. This has gotten me thinking about open questions that still need answering. Add to this list as you see fit: •How can we manipulate attack order so that we strike before BYAK-KO does? (This is a priority, of course.) •From which town in World 2 should we pick up the BATTLE sword? If we get it from the second town, is there anything else we can do there? •Is it faster to walk or bike from Southwest Town to the Skyscraper? •Is it faster to guild a Human or a Mutant to wield the SAW? (I think we both suspect a Human would be faster, but as I recall, this remains unconfirmed.) •Is it faster to manipulate luck to get GAZE from power on or by saving? (I'm content to put this off until we're ready to do our final run.) •Not so much a question, but we should refine my Lua script that restarts to manipulate luck so that it can restart twice or possibly three times. I've hit no snags with the current version, but a refined version can probably save ten frames here and there. It will also take significantly longer to execute. Add whatever you can to that list. My current run is the best opportunity to test it all. Edit: Silly me. I forgot to include a link to my run. Edit 2: Seems there's a +1 Mana boost for the third party member before the ALBATROS battle in Bandit Cave. I may want to shuffle the party to pick that up, bringing A's Mana to 16. Hmmm...
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Ach, I'm bad at this.
Bobo the King wrote:
Expect a new run started in a day or two.
Did I say a day or two? I meant a week or... three. In case you hadn't noticed, I'm a tad bit unmotivated, especially when it comes to doing test runs of this game on my own. Nevertheless, I've finally gotten around to starting a run: Just a short one So what's the big news here? Not a whole lot, except that I no longer have the anxiety that comes with starting a new run. I was bitten by the desync bug, which forced me to rerecord a short bit, so it's a little shorter than I had hoped. First of all, I managed to manipulate C30B to 0x51 just 178 frames after power on. I don't know what you think, but I think that's at least decent. We'll want to test that against the time it takes to manipulate the same result in the first steps of the game-- just remember that it costs something like 30 frames to save it (just a guess off the top of my head), so we'll have to get it down to 148 frames following the save. This will require some thorough testing, but I think there's at least a decent chance that restarting right off the bat is the best way to go. Second, I switched the first and fourth characters immediately, as you had suggested at one point. While I don't think that will solve our problems, it will at least distinguish our two runs. You'll also notice I named my characters A, B, C, and D. I'm rather uncreative that way. We'll want to figure out who's going where and when before assigning more clever names. Third, my movie ends rather abruptly after the battle with the ALBATROS. That's because my script didn't detect any good frames for resetting to manipulate TELEPOR. I'm kind of puzzled because it ran for a few thousand frames and nothing turned up. Either something is wrong with my script, or I'm just extremely unlucky. Assuming my script is in working order, I should still be able to get the result I want by doing pairs of resets. The drawback is that it'll take longer and is a more intensive search, so I'm calling it quits for the night. Any advice would be appreciated, but I think my next course of action is pretty straightforward. Looks like we just need to figure out how to defeat BYAK-KO, then we're done. I think our lack of understanding of the battle mechanics is coming back to bite us in the ass one last time.
"FreshFeeling wrote:
I would greatly prefer being able to at least somewhat identify what's happening. Short names, please.
Hey, FreshFeeling! I was wondering if you were still around! You've got to be the same FreshFeeling from GameFAQs' Final Fantasy message board, right? I haven't been there in... four or five years. Anyway, for what its worth, your "Tuckles be husip, my friend" quote is still my GameFAQs signature. Glad to see you!
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Hey, quick update to say I'm still here. No meaningful comments on your latest discoveries or my own insights. The big news is that I'm no longer busy for the most part. I've got a relatively small project to work on tonight, but after that, I should be free to start running this game. Expect a new run started in a day or two. Hope Alien Hominid is going well!
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Sweet! Shared credit for a movie I contributed nothing to! I'll be sure to return the favor when I start my own run about a week from now. Even though I feel ready to run it now, I want to get a few obligations out of the way first so the run has my undivided attention. I'll try to make it complement your run in whatever ways possible (in particular, I'd like to see what extent of luck manipulation we can expect to achieve). It's looking good so far, but I don't think I'll ever get used to those long resets. You said you'd explain things later, but I still feel compelled to ask about some slightly strange movement in the second half of the video. I saw some weird pauses, facing walls, walking one way and then the other, and other stuff like that. It's not the biggest waste of time in the run (no, that award goes to luck manipulation), but it's unusual considering how tight your execution was in previous movies. The rest is pretty self-explanatory. So can we manipulate enemy targeting but basically nothing else? If so, that's not so bad, since we might pick up ARMOR and make sure our invulnerable party member always takes the hit (assuming the monster/fiend doesn't get the first hit, in which case we're screwed). Lastly, how much of your time do you think the Dream Team Contest is going to take? If you need some time off from this run, I perfectly understand and we can pick it up after the contest is over. I'm excited to see what your team comes up with. Regardless of what it means for this run, I wish you the best of luck!
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I set out to decipher the ability shuffler once and for all. What follows are my current findings. For starters, let me reproduce my original chart:
C30B|Ab1|Ab2|Ab3|Ab4
----+---+---+---+---
 86 | - | + | + | -
 93 | - | + | - | +
 166| - | /2| + | /2
 243| - | + | - | +

-: Subtracts initial number of uses (bottoms out at 0).
+: Adds initial number of uses.
/2: Divides number of uses by 2, rounding down (adds 1 use if no uses left).
=: Restores number of uses to initial value (not used).
That was what we went on until I tried to verify what was going on in terms of the RNG and found that there was essentially no correlation. You toyed around with it and offered this theory: 0x00 ~ 0x2A - Divide by 2 0x2B ~ 0x7F - Add 0x80 ~ 0xD4 - Subtract 0xD5 ~ 0xFF - Reset to "original" I tested this, but ended up getting these results (unfortunately, I didn't save my work as a VBA movie): 0x00 ~ 0x2A - Divide by 2 0x2B ~ 0x7F - Reset to "original" 0x80 ~ 0xD5 - Subtract 0xD6 ~ 0xFF - Add I said that you had switched two categories and were off by one unit on the bin size. You quickly pointed out that this was very unusual because "Add" shows up so often in my original chart. I agreed, and said I would test it further. The very first new thing I did was run this test. Yes, this time I saved my work so we at least have something tangible to talk about. This test was "natural" in the sense that I didn't manipulate the RNGs using Lua or cheats at all, only soft resets. I'll report on the results of this test below in chart form, but for reference, C30E was equal to 87. Next, I used a Lua script to manipulate C30E to be whatever I wanted it to be. The first test I did using this method replicated the results of the movie. This was to make sure that fixing C30E to a specific value wouldn't cause unpredictable (or overly predictable) results. As a side note, the game rolls the four following values if they're all needed, regardless of the address being fixed. In other words, I fixed C30E to 87, but it still rolled it for 87, 88, 89, and 90 (then returned to 87 before the next frame). I got the same result as the natural roll, so I felt confident changing it to whatever I wanted. At first I just picked a random value, but then I decided I should test the bin size which I previously said was different from our expectations. I therefore sought the RNG indices corresponding to values around 212, where we expect the split to occur. I've compiled the results in a table, which I hope is readable:
C30E:  |        |      87      |      55      |      39      |      36      
       |Original+---+------+---+---+------+---+---+------+---+---+------+---
       |  uses  |new|action|RNG|new|action|RNG|new|action|RNG|new|action|RNG
-------+--------+---+------+---+---+------+---+---+------+---+---+------+---
Abil. 1|   10   | 20|   +  | 53| 5 |  /2  | 10| 10|   =  |213| 0 |   -  |212
-------+--------+---+------+---+---+------+---+---+------+---+---+------+---
Abil. 2|    3   | 6 |   +  | 76| 6 |   +  |115| 0 |   -  |211| 3 |   =  |222
-------+--------+---+------+---+---+------+---+---+------+---+---+------+---
Abil. 3|   10   | 0 |   -  |182| 10|   =  |246| 10|   =  |233| 20|   +  |112
-------+--------+---+------+---+---+------+---+---+------+---+---+------+---
Abil. 4|   20   | 10|  /2  | 40| 0 |   -  |151| 10|  /2  | 8 | 20|   =  |213
The top row of numbers are the values of C30E. For each value, I recorded the number of uses after fighting one battle (the "new" column), the action that corresponds to (the "action" column), and the RNG values corresponding to the four corresponding indices (the "RNG" column). These results correspond closely to (drumroll, please...) 0x00 ~ 0x2A - Divide by 2 0x2B ~ 0x7F - Add 0x80 ~ 0xD4 - Subtract 0xD5 ~ 0xFF - Reset to "original" or your original guess. Yes, that's right. All this testing and you were right all along. Case closed. Or is it? If it's correct, it should also agree with my original test, shouldn't it? One problem with my original test is that I only followed C30B, not C30E. Now that we know the RNG indices don't stay a fixed offset from each other, we know that my original test could represent one of two results for each value of C30B. C30E can be either 1 or 2 greater than C30B, so the only way to properly evaluate my original tests is to write down the following five RNG values. Doing so yields this:
C30B| +1| +2| +3| +4| +5
----+---+---+---+---+---
  86| 53| 76|182| 40| 66
----+---+---+---+---+---
  93| 64|197|124|166|216
----+---+---+---+---+---
 166| 42| 44| 22|247|162
----+---+---+---+---+---
 243| 75|193| 80|138| 12
If we replace those RNG values with their expected results based on the latest test, we get the following table:
C30B|+1|+2|+3|+4|+5
----+--+--+--+--+--
  86| +| +| -|/2| +
----+--+--+--+--+--
  93| +| -| +| -| =
----+--+--+--+--+--
 166|/2| +|/2| =| -
----+--+--+--+--+--
 243| +| -| +| -|/2
And just for reference, here's the table from my original test one more time:
C30B|Ab1|Ab2|Ab3|Ab4
----+---+---+---+---
 86 | - | + | + | -
 93 | - | + | - | +
 166| - | /2| + | /2
 243| - | + | - | +
If my first test was valid and the rules are consistent, each row in that last table should correspond to either the first four or last four entries in the second table. They don't. But now that I look at them more closely, they seem to be missing the "first" entry, which is always "-". Why is it always "-"? Because that corresponds to C30E = C30B and because we got ability shuffling, we already know C30B's RNG output is somewhere between 143 and 146, firmly in "-" territory. So where does that leave everything? Damned if I know. I think our most extensive testing gives results consistent with what you had projected. Somehow, my first test started with C30E being equal to C30B and I don't have a clue how that happened. I suppose I could have set both addresses equal to the same value, but I can't imagine why I would have done that, since neither of us knew what C30E was for at that point. Finally, there's the matter of my second test, where I got results significantly different from yours, saying you switched two results and got a bin wrong. I know I don't have any data or movies to back up my word, but damn it, I know I conducted that test carefully! I guess I should apologize for correcting you when you were right, but I swear I reported the results of my tests accurately. My only (grasping at straws) explanation is that it could make a difference if you have less than four abilities to shuffle. When I conducted that test, I had just one ability. If you think we need ability shuffling at any point, I think the table is a fine start, but I'll be sure to test it "in the field" before we find ourselves in over our heads. Edit: *Sigh*... I was careless in computing the offsets. C30E exceeds C30B by zero or one, not one or two. This explains a whole heck of a lot as we now have three tests consistent with each other. The bad news is that if the two addresses are equal, they will both roll the same number in the 143-146 range. This will always subtract the number of uses from the first ability. That means we always need the addresses to be offset by 1, which has a 42 percent probability of happening. I'm leaving my original post unedited because it would be difficult to edit this information back into it. (And I still don't know how I screwed up my second test.)
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
I'd have liked to provided a more substantial update, but since you specifically asked me to research the EVIL EYE to MACHINE section, I'll report on that before moving on to other things. As usual, if you just want the results, you can scroll down, but I'll never pass up an opportunity to boast how hard I worked (nah, it wasn't that bad). The first thing I did was write down all the C30B indices that result in a Str. boost (I checked that I had all 18). I underlined all instances where a boost was followed by a second boost within five RNG rolls afterward since that's the biggest gap we can have if we have a party of three mutants and we shuffle them. My list was: 3B (to 3E and 3F), 3E (3F), 6A (6C), 77 (79), BB (BE and BF), BE (BF), D2 (D5), and EC (F1) Next, I homed in on good values for C33B so that we wouldn't be forced to fight a battle for at least 56 steps. Fortunately, we've got some nice long stretches available. I included •FE-7A (125 steps, with a potential extra battle at 2C if we didn't escape the EVIL EYE's floor within 17 steps.) •95-FD (104 steps with one battle in between. I included this as a precaution in case it was really hard to manipulate luck without fighting at least one battle. As luck would have it, none of the candidate RNG indices fell in this range.) •A0-FD (93 steps) So my next step was to cross-reference these two lists. Keeping in mind that C33B would be six or seven greater than C30B, I needed a value of C30B such that C33B would give us at least 56 steps to the next unskippable battle. 7B through 94 were out of the question, since they would mean fighting two battles and even 95 through FD were only mediocre. I broke it up into lists based on how many mutants we'd have and whether we would need to shuffle them. Here are my results: 2 mutants, no shuffling: 69, 6A, 76, 77 2 mutants, w/ shuffling: 3B, 3D, BB, BD, D2 3 mutants, no shuffling: 39, 3A, 3B, B9, BA, BB, D0, D1, D2 3 mutants, w/ shuffling: 3A, 3B, 3C, 68, 69, 75, 76, BA, BB, BC, EC Entries in bold fit the criteria. Crossed out entries would require fighting at least one battle. The last step was to figure out what would happen with C34B, which decides the amount by which Str. is boosted, since you specified it has to provide at least +6 Str. total. From my previous analysis, I learned we don't need to manipulate C33B and of course we know that C34B is locked and can't be manipulated against C30B, which made my analysis a lot easier. At first, I started reading the RNG table, but I quickly decided to do it the old-fashioned way. I edited your mutant growth Lua script so that C30B was whatever I wanted it to be while C34B was 9 higher. I ran through all the listed values, taking note of the magnitude of both stat boosts. In the following list, for each value, the first number is the first Str. boost and the second number is the second Str. boost. Here's what I found: 2 mutants, with shuffling: 3B: 3, 5 BB: 3, 3 BD: 2, 1 3 mutants, without shuffling: 39: 1, 3 3A: 5, 4 3B: 3, 5 B9: 3, 3 BA: 3, 3 BB: 3, 3 3 mutants, with shuffling: 3A: 5, 5 3B: 3, 1 3C: 5, 1 BA: 3, 2 BB: 3, 3 BC: 3, 2 As before, bolded results are successful, crossed out results fail. You may notice that I crossed out 3A and BB in the third list. That's because both values appear successfully in the second list and if we can get the coveted +6 gain without shuffling, why do it with shuffling? So here's my summary of candidate values of C30B to shoot for: Great 3A (party of 3, 2nd slot) 3B (party of 3, 1st slot) B9 (party of 3, 3rd slot) BA (party of 3, 2nd slot) BB (party of 3, 1st slot) Okay (requires shuffling) 3B (party of 2, 1st and 2nd slot) BB (party of 2, 1st and 2nd slot) 3C (party of 3, 3rd and 1st slot) By my estimation, shuffling party members will take roughly 80 frames. I'm not sure, though. If we can get one of the values in the the second list 80 frames before any of the values in the first list, it should be worth it. Of course, your options double if you allow for fleeing from one battle, but I think five target values is decent (not great, but decent). On a tangential note, I was wondering why your addresses are all "off by one". You said the encounters on the EVIL EYE floor are at 0x2D, 0x7C, 0x96, 0xA1, and 0xFF. I get the same numbers minus one. I know you pointed out in the past that you use a variant of the RNG table that's shifted by one, but as I understand it, that's just a stylistic choice and shouldn't affect the actual indices at which we encounter random battles. I just want to be absolutely sure what's going on so that we can communicate effectively. If your table really is different (and consistent!), then you'll need to add one to all the values I listed above. Edit: Mixed up my bold and strikethrough tags near the end. My final list was correct the first time, though.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
I'll make it explicit -- HUMAN M has 54 Strength. We need 75 to kill in the first shot using a SAW. Only way for HUMAN M to build it is to buy STRONG to permanently get the missing strength, or get equipment with bonus strength attached. STRONG has no effect on anyone who isn't HUMAN M or HUMAN F, so we can't build up a MUTANT M using STRONG.
I think you misinterpreted me. I was suggesting we might stop at a shop and buy one or two STRONGs for the Human M we would recruit in the last portion of the game. You're right that it's pretty unlikely, since we'll be very close to the Northeast town shop anyway. But if we happen to need to go to a shop, it might save a few frames to pick up a STRONG potion or two. I admit it: it's a long shot. It seems to me that you're very good at figuring out what we should do while I've spent my time figuring out what we shouldn't do. I'm confident that we're closing in on a finalized plan (I'm running out of meaningful suggestions-- you can already see I'm scraping the bottom of the barrel), so we should get on the same page soon.
FatRatKnight wrote:
As far as I know, the "greater chance" is the difference between having it happen and a zero percent chance. Yes, without STEALTH, you can't strike first. I may be wrong here, though.
I wasn't aware. That might mean there is a strike first RNG! No, wait, not according to your following comment.
FatRatKnight wrote:
Also, starting as a mutant gives us this ability right from the start.
Huh, I somehow never noticed that. That means in the tests I ran, I already had STEALTH. My only thought is that the FAQ may have mixed up the descriptions of STEALTH and FORSEEN. It makes more sense to me that STEALTH prevents monsters from striking first while FORSEEN gives you a better chance of striking first. (Edit: Now that I think about it more, it would make at least some sense either way. But that's beside the point.) I'll look into it since that section of the FAQ is pretty crappy-- he only lists 26 of the 30 obtainable abilities, omits GAZE (stone) and GAZE (death), and even includes WARNING, which cannot be learned by a Mutant. Unfortunately, it's the only ability description list I can find.
FatRatKnight wrote:
Said "unusual situation" would be that we are caught in a battle that can't be done in one turn, we lack any decent (read: still living) humanoid shields, and that 10 defense lets us survive with our paltry HP. I fear this situation won't ever come up.
You got it. I just didn't want to write it out because it was a long post already and I didn't want to articulate it.
FatRatKnight wrote:
Although, I'm moving away from *all* direct-damage spells. Roughly 26 Mana for SEI-RYU and 36 for Monster Trio won't really cut it.
What it has in its favor is that we can learn it in one round, which we can't say about P-BLAST. The only battle I potentially see it helping with is the STEWARD's cronies. But that's only if we can't manipulate them into being a single SKELETON.
FatRatKnight wrote:
An optimal reset takes a shorter time than an optimal run away. Hence, it is almost always worth a reset (and manipulating the "steps to next encounter" RNG right) over attempting to run away.
You're technically right, but the key word in your answer is "optimal". Luck manipulation can easily take over 20 frames, and I see that as especially true if we are trying to get very specific RNG values (which we should do). Suppose we manipulate it so that we can take 40 steps, fight a battle, then have another 38 steps until the next battle. At the cost of 20 extra frames, we could gain an extra 38 steps automatically. The alternative would be to attempt to manipulate luck so that within 20 frames we find a chance to reset that will force the encounter RNG to be 38, 39, or 40 steps to the next battle (assuming 40 was the best we could do). That will be hard and in some cases impossible. The plan edges toward manipulating luck as the difference between the number of steps in the two "pockets" increases. If it were 40 steps to the next battle, then a 30 step pocket, suddenly we'd have 11 different favorable RNG values, which is much more plausible to find within 20 frames. My point is that although you will be correct most of the time, it really is worth keeping a close eye on. Fortunately, now that we have a complete RNG table, we should be able to write a Lua script that will tell us our "speed" (steps per frame) with a reset at the last step, running from one battle, or even running from two battles. My bottom line is this: it's another option. Both you and I have outright or nearly written ourselves into a corner in previous attempts because we needed too specific an RNG. We might easily find that it takes 300 frames to manipulate the result we want. If we never think of running from a battle, it will just frustrate us.
FatRatKnight wrote:
I'll post the full details later. This post is getting a bit bloated already. Since you are studying the RNG, peek into that for strength bonuses, alright? Assume a two-mutant or three-mutant party, we need at least +6 in two battles without a reset, preferably without switching party order in between. Even better if the bonuses show up in the last slot. In addition, report step-count until next battle.
I'll make this a priority.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Today, I swept up a bunch of little questions I had lying around and I will attempt to answer them all in this post. Is there a "strike first" RNG? You may recall that I suggested with no more luck manipulation necessary for the last quarter of the game, we could manipulate it so that we always strike first. I set it so that all of the RNG addresses corresponded to 0 and then again so they all output 255. In neither case was I awarded a first strike, so that is probably decided by a battle RNG (and I don't need to remind you how mysterious those are). So no, we cannot force it so that we always strike first. That's a real shame. On the other hand, we might manipulate luck so that we never get meat. Being offered meat at the end of battle is a little time consuming. I can't think of anywhere else we could save time. Can we get a monster with GAZE (stone)? No! Next question! Okay, okay, full answer. You already pointed out we could do it if we could get a MEDUSA, but we can't. I found some other candidates but they were all at least level 11. Since all of the monsters in World 1 are level 1 or 2, we would have to fight at least nine battles (probably more) to reach any level 11 monster. Sure, we're given P-FROG and SEI-RYU for free, but what about the other 7? It's pretty much out of the question. Should we pick up the GIANT gauntlet, GETA shoe, neither, or both? If we do pick them up, should we draft a Human or a Mutant? You seem to have a better answer to this than I do. For the GIANT gauntlet, we would almost certainly need to pick it up from the World 3 shop. Using TELEPOR to escape prison saves 590 frames according to my test. That's a lot! Of course, my test was imperfect, especially since our strategy has changed at least slightly since then (you've been prudent about saving and archiving your tests-- I really, really, really should do the same...). Nevertheless, I feel confident that it would take at least five more seconds to break out of jail. To make matters worse, the GIANT gauntlet is nowhere near the JAILKEY so it would waste far too much time. It's out of the question. I don't know my way around the hidden town in World 3 like you do, but I trust you when you say it takes too long to get to the shop with the gauntlet. For the GETA shoe, I guess I don't have much of an opinion since it should be very easy to compare the time it takes to buy the shoe with the time it takes to buy five STRONGs. I'm inclined to get the shoe because needing fewer STRONGs means less mucking about in the menu. However, getting the shoe will require us to go to the Equip submenu, which is technically out of the way. I'm comfortable waiting and seeing. As for who should equip the shoe, you seem to have indicated a Human would still be marginally faster. My only thought to the contrary is that we might use one of the overworld SU-ZAKU battles to pump a Mutant M. Luck manipulating out of them will be a pain anyway and just getting into a battle with him will be time consuming, even if we run. What's not so great about this plan is that even overworld SU-ZAKU has that fancy fadeout that costs a second or two. I doubt it'd be worth it, but I say it's worth consideration. If we do go for a Human M, though, we should know... What is the best shop to buy STRONG potions? Up to this point, we've implicitly assumed that we need to buy STRONG potions after we get the Human M. We could just buy a few of them elsewhere in the game if they happen to be handy. I'm pretty sure they can sit in our inventory through most of the game without any trouble. Here are the candidate shops: •Base Town-- We don't really have another reason to stop at the weapon or item shops. When we're ready to enter the tower for the first time, the item shop is 11 steps off the main path. As a bonus, it's not indoors! •Town of Hero-- Not likely. We don't have any business in the northern part of town. When we're dressing the statue, the door to the item shop will be 13 steps off the main path. We then have to endure a short transition screen and walk up to the counter. •Port Town-- Possibly our best bet other than Northeast Town. The door of the item shop here is just 1 step off of the main path. The only problem is that it's indoors. •Sky Town-- Very unlikely. I'm not going to bother checking how many steps it is off the main path. If you think of any business we might want in either of the shops here, it could potentially cut down on time. •Southwest Town-- I've never even used this shop before. According to one FAQ, the item shop is on the second floor. I think we can practically rule it out. •Northeast Town-- The shop here is 2 steps off of the main path. Since it's outdoors, it is almost certainly the fastest shop to get in and out of with our STRONG potions. The only minor downside I see is that NPCs might get in the way. We should be able to manipulate them aside. I'm not sure what to make of all that, since it seems we have no reason to shop anywhere except Northeast Town. I guess the point here is that if we have any business at all in another shop, it might be faster to pick up a STRONG along the way. What are the abilities a mutant can learn in one battle and what do they do? Which ones might be useful? I wrote a little Lua script that scrolls through the values of C30B and C34B simultaneously (after all, you showed that those two addresses are "locked" to difference of exactly nine). I assumed we wouldn't want to fight two battles to learn an ability, so I focused only on those abilities we could earn in just one battle. I found 25 different abilities, about half of which had potential use. I'm just throwing these out there in case they'd be helpful: •STEALTH: Apparently offers a greater chance of striking first in battle. If so, it might be useful for when we start SAWing things. What would be really fantastic is if it stacks (which I doubt). Another handy fact is that we can pick up a Mutant (M or F) with it pre-equipped. I believe they're at the World 2 guild, which I hope won't be a problem. •ICE, FLAME, and THUNDER: Not likely to help, but hey, they do damage. •ESP: Acts as a shield so the enemy misses its next attack. I was thinking this could be useful against SEI-RYU or BYAK-KO if there's just one character we want to keep alive. Of course, we could always reorder the party, so it's unlikely to help. •BARRIER: Adds a paltry ten defense to all characters, but since our defense is so low to begin with, that may make a lot of difference. I don't see it helping unless we find ourselves in a rather unusual situation. •ARMOR: Pumps defense to 99 temporarily, so we can instantly create one impervious character. I like it, and I think it has at least mild potential. •STENCH and ELECTRO: Lower the Str. and Agl. respectively of a group of monsters. This could save us against a hard-hitter. As usual, not likely, but better to throw it out there than omit it entirely. •GAS: I don't have a good sense of how much damage this does, but I would be very surprised if it's more effective than ICE, FLAME, or THUNDER. Maybe you know more about it. •KINESIS: Paralyzes a group of enemies. Now this seems potentially helpful. It's just a matter of who we would use it on (The Monster Trio? The ATOM ANTs?). •QUAKE: You're already aware of and is our preferred "alternate" spell for dealing damage. It may be our primary spell now that we're moving away from P-BLAST. •GAZE (conf.) and HYPNOS: Confuses a group of enemies. These are similar to KINESIS except it might take more time on enemy turns. Perhaps enemies have different propensities to be paralyzed or confused. •SL-GAZE: Puts a group of enemies to sleep. I rather like this one. Other abilities I found included FORSEEN, MIRROR, xFIRE, HEAL, oCHANGE, BURNING, oFIRE, and P-FANGS, none of which I thought were worth looking at more closely. Honestly, I don't think we'll be using any of these, but we should probably know about them anyway because we may need to fight an extra battle at some point. If we can squeeze a useful ability out of it, all the better. The next question comes courtesy of you:
"FatRatKnight wrote:
Is "Add" really so rare?
My immediate thought was that I had somehow mixed up "Add" and "Reset to original number of uses". After all, if I had 0 P-BLASTs (or whatever it was), the two actions would be indistinguishable. I assembled some new tables based on our understanding of how abilities are shuffled. They don't match my experimental results at all. If you'd like to see them, I can post them, but I'm reluctant to transcribe them until I run some more tests. Something seriously fishy is going on here. I can't imagine how I could have screwed up the test so badly the first time I ran it. I would like to point out, however, that we can shuffle different abilities by putting the target mutant in a different party slot. If our mutant is in the right slot, we can reset their first, third, and fourth abilities to their original values simultaneously. Of course, the second slot would have to be wasted on a dummy ability. (This is all assuming my new table is correct, not my old ones.) When do we manipulate luck and when do we run? This remains (and always will remain) an open-ended question. I just wish to point out that we now have the ability to do some theoretical predictions. We can find the longest stretch in the RNG table with zero random battles, but we can also find the longest stretch with just one random battle or the longest stretch with two random battles and so on. From there, we would need to manipulate luck so that all of those battles are runnable, which may be outright impossible. Regardless, we can check the fastest movement strategy fairly efficiently now. Finally, to answer that question you had the other day.
"FatRatKnight wrote:
Those are my battle plans, thus far. Any questions?
Just one: Will you have enough money to buy the Battle Sword? You'll have 760 GP from the STEWARD, KINGSWD, and P-FROG. You need six more battles to get you to 1,000 GP, which is roughly what you'll need to buy the sword. It looks like you're planning about that many, but it will be close. Even if you can't afford the Battle Sword with just the spoils from random encounters, you should be fine since you can sell your SABER for a hefty sum. Sounds like you know pretty well what you're doing. For the moment, I'm going to work on decoding more RNG addresses and figure out what's going on with ability shuffling. After that, I think I'll be ready to join you in running this game. That is, unless you have other ideas to test.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
Here's my analysis as yet of the RNG table. I'd love to do more, but I'm just not feeling it right now. The RNG table boils down to just 48 different numbers and three parameters. It may be fewer than that, but I simply can't find a pattern among them. Here's our new table, from which we can construct the entire RNG table:
column | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15
-------+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
number | 3| 6| 7|13|11| 1|15|10|12| 9| 8| 2| 4|14| 0| 5
-------+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
row    |10|11| 1|12| 5| 9| 6| 3|15|11| 2| 7| 2| 0|15|15
-------+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
stagger| 5|15|13| 9| 5| 1|13|11| 1| 3| 3| 7|11|15| 3| 9
Obviously, some explanation is warranted. The column simply indicates a column of the RNG table. The number is the RNG number output somewhere in that column. Take a moment to verify that 3 appears in column 0, 6 appears in column 1, 7 appears in column 2, and so on. Note that every number from 0 through 15 appears in a unique column. The row is the row in which that number appears. So row and column taken together signify the locations of the numbers 0 through 15. For example, number 8 appears in row 2, column 10, and we'll therefore find it at RNG index 2A. You'll notice that the row values are not all unique, so I question whether there's a deeper pattern to be found. If they were unique, I'd still be searching and not typing this up. The stagger value indicates something a little hard to explain. Take row, add stagger to it (mod 16), and in this new spot, put number plus 32. Do this seven times (eight if you include placement of the original number). If you've done this carefully for all 16 columns, you will have placed half the numbers from 0 to 255; you'll have 0 through 15, 32 through 47, 64 through 79, and so on. Stagger is always coprime with 16 (i.e., always odd) because if it were divisible by 2, the pattern described above would cause it to "crash into itself". To place the remaining numbers, for a given column, find row plus eight (again, mod 16). This is 128 indices away. In this spot, put 255 minus number. Now add offset to this row and subtract 32 from the previous number. Do this a total of seven times (again, eight if you include placement of the original number). If you do this for every column, you will construct the complete RNG table. If that was confusing, let me walk you through a quick example. We'll fill in the first column (column 0):
     -                  -                 -                  -                  -                 -                 -
0                                                                                                                   60
     -                  -                 -                  -                  -                 -                 -
1                                                                                                                  156
     -                  -                 -                  -                  -                 -                 -
2                                                                              252               252               252
     -                  -                 -                  -                  -                 -                 -
3                                                           163                163               163               163
     -                  -                 -                  -                  -                 -                 -
4                                                            67                 67                67                67
     -                  -                 -                  -                  -                 -                 -
5                                                                                                                   28
     -                  -                 -                  -                  -                 -                 -
6                                                                                                                  124
     -                  -                 -                  -                  -                 -                 -
7                                                                                                220               220
     -       --->       -       --->      -       --->       -       --->       -       --->      -       --->      -
8                                                           195                195               195               195
     -                  -                 -                  -                  -                 -                 -
9                                                            99                 99                99                99
     -                  -                 -                  -                  -                 -                 -
10                      3                 3                  3                  3                 3                 3
     -                  -                 -                  -                  -                 -                 -
11                                                                                                                  92
     -                  -                 -                  -                  -                 -                 -
12                                                                                                                 188
     -                  -                 -                  -                  -                 -                 -
13                                                          227                227               227               227
     -                  -                 -                  -                  -                 -                 -
14                                                          131                131               131               131
     -                  -                 -                  -                  -                 -                 -
15                                        35                 35                 35                35                35
     -                  -                 -                  -                  -                 -                 -

blank column   |   3 belongs    |   stagger is 5,   |  continue until  |  put 252 8 rows  |  put 220 five  |  continue until 
                  in column 0,     so go down five     eight numbers       away from 3        rows below      the column is 
                     row 10         rows and put         are placed                                              filled
                                      35 there
Well, I'm disappointed I can't break it down any further than that. If you notice any other patterns, I'd love to hear them. I have a gut feeling that there are deeper patterns because it seems like an instance where they'd cut back on memory usage-- it's already semi-automated, why not fully? Still, I can't find any pattern to row or stagger, so they may just be spelled out somewhere in the code. Edit: Just noticed something new. Each number is 8 columns away from its complement. That's nifty, but it doesn't simplify things much. Edit 2: Here's an RNG table generator in Lua script form:
n={[0]=3,6,7,13,11,1,15,10,12,9,8,2,4,14,0,5}
r={[0]=10,11,1,12,5,9,6,3,15,11,2,7,2,0,15,15}
s={[0]=5,15,13,9,5,1,13,11,1,3,3,7,11,15,3,9}
RNGTable={}

for c=0,15 do
    for i=0,7 do
        currrow=(r[c]+i*s[c])%16
        currnum=n[c]+32*i
        RNGTable[16*currrow+c]=currnum
    end

    for j=0,7 do
        currrow=(r[c]+8+j*s[c])%16
        currnum=255-n[c]-32*j
        RNGTable[16*currrow+c]=currnum
    end
end

---------------------------------------------
--The above part is the good stuff.  The following loop just tests that it works.

while true do
    for i=0,15 do
        for j=0,15 do
            currval=RNGTable[16*i+j]
            gui.text(20*j,9*i,currval)
        end
    end
    vba.frameadvance()
end
I don't know if you want to go with the entry-by-entry table or this script. As far as I'm concerned, I think I'm done toying with the RNG. Discovering new patterns (if they even exist) should be extremely difficult. Now I'll read through the last few posts a little more thoroughly.
Experienced Forum User, Published Author, Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
Those are my battle plans, thus far. Any questions?
Sorry, I'm not even going to take the time to read your post because I'm stretched a bit thin at the moment. I haven't even watched your two SAW tests and I need to read your previous posts more thoroughly. What I'm most interested in at the moment is this RNG table which has very strong patterns that I'm having trouble reverse-engineering. Meanwhile, I'm busy with other things, so I don't feel I have a lot of attention to divert elsewhere. And on top of it all, I got an email back from Sara with suggestions for the SEI-RYU battle. I skimmed it, but I'm not giving it any thought for now: "let's see. you want to beat sei-ryu inside two rounds. you don't have time to create a beetle. you have four mutants. you have already bought one battlesword and learned power. that gets you 194~254 damage. i'm guessing you don't have enough money for extra battleswords. a) both other mutants learn power too. hammer gets 122~146, longsword gets 146~182. hammers don't need a detour to purchase, if you recruited boys; conservatively that adds up to around 470, leaving 130 to find from the fourth character's two rounds. power+hammer on them as well? but how long is it going to take to teach all four of them power? b) buy spellbooks. but how much mana have you gained? and is some of it stuck on the power mutant? well, let's say you learn power for one mutant, but focus the mana upgrades on two other mutants, assuming that's practical. the power mutant takes the battlesword. then you need the other two to deliver 400 or so in two rounds (assuming the fourth mutant is junk.) 26 mana isn't gonna cut it, is it? you want 36 mana, each, with a spellbook, or 32 each with wands. alternatively, can you bring the fourth mutant into play at all? c) buy rocks. i don't think this is going to work for you with low strength, though, they'll just miss. (or will they?) d) detour to pick up that grenade? no, it seems to me that going an extra round against sei-ryu is preferable to fighting whole extra battles. if you can get there with minimal encounters and still beat him in three rounds, or even four, that's probably your best bet. (if he's beating you, that's different.) the other blockage sounds to be the fight for jeanne. obviously, the best way would be three instant kills, if you have them. (get the stonebook first.) failing that, two instant kills (on garlic and p-worm) plus two heavy hits on the sabercat. muskets? grenades? spellbooks with healthy mana? clayman's gas, if you went with a monster after all? alternatively, two pblasts that total 200ish to kill the sabercat, plus two weak attacks doing 30ish to finish off the other two. but again, going to a second round is probably better timewise than fighting even one extra battle beforehand - as long as you can win. s Tower Reversed" My first priority is figuring out how the RNG works, which I should be able to do within a day or two. After that, I'll catch up with you on other topics.