1 2 3
8 9
Player (79)
Joined: 8/5/2007
Posts: 865
Sounds like you're warming up to a four mutant party while I'm warming up to a one mutant party! I thought that filling the game with soft resets would be annoying, and to some extent I still think so. However, once I tested it out, I saw that soft resets only take a few seconds and can be done anywhere. Furthermore, you're absolutely right about the time it would save in battle, so I think one mutant may be optimal. I noticed that at 0x81 in your first table is the sequence "Ag Ag Ag". The value the RNG resets to changes every frame, so if we can manipulate byte 0xC30B to always be 81, then we can boost a solo mutant's agility to 99 with just a handful of battles. Our other option would be to find any single Ag, manipulate 0xC30B to that, and make sure the number of steps to the next battle is minimized. It's the difference between one Agility boost over one quick battle versus three Agility boosts over an extended length of time. It's worth thinking about and we should probably test it. The same strategy might still work with two or three mutants, but almost certainly not four. Even though I'm fairly inexperienced, I'm already starting to see how Lua is implemented differently for different emulators. For my Skitchin' TAS, gens had a great function in Lua called gens.emulateframeinvisible. This allowed me to easily project into the future without messing with the sound or image. From what I can tell, the only frame advancing in VBA's Lua scripting is vba.frameadvance, which emulates one frame at normal speed. I also found no way to adjust the emulation speed from Lua, so I can't even improvise a solution. Anyway, I've been trying to make a script that will save the state, soft reset, read 0xC30B, then load the original state while outputting 0cC30B to the user. Here's what I came up with:
state = savestate.create()

while true do
	emu.frameadvance()
	savestate.save(state)
	emu.frameadvance()
	i = 1
	while i<10 do
		joypad.set(1, {A = 1, B = 1, select = 1, start = 1})
		emu.frameadvance()
		i = i+1
	end
	newrng = memory.readbyte(0xC30B)
	savestate.load(state)

	message = string.format("0xC30B: %d", newrng)
	gui.text(10,10,message, "green", "black")
end
That script does not return any error messages, but it the game doesn't seem to accept my joypad inputs, so it never resets. If I can get that script to work, I would like to use it to pump a solo mutant up to 99 Agility in the first world, then run through the rest of the game as a demonstration run. I'll hold off on emailing towerreversed until we get our bearings. It looks like other people have done a lot of work on this game, but their information is scattered to the far corners of the internet. Your movie fares better than mine, but still doesn't work. VBA is able to detect that it has 405 frames and 101 re-records (uh... why so many re-records?) and it shows that our ROMs are identical, but when I play it, it just sits at the title screen while the frame count displays "0/405". I'm going to look through the VBA forum here and start a new topic if it hasn't been addressed. In the meantime, however, what version of VBA do you have? Mine says v23-interim svn202. My rule on character names and other minor things is that the total time sacrificed shouldn't exceed the largest "mistake" in your run. I'm going to assume it takes one frame to render each letter and guess that there will be 50 battles with 2.5 executed commands per battle. That amounts to 500 frames or about 10 seconds lost compared to giving everyone 0-letter names. I rather doubt we can get this TAS to within 10 seconds of perfection, so I say we pick whatever names suit us. (We'll want to verify these numbers. When I make that demonstration run, we should check the text speed as well as the number of battles fought.) I'm a little embarrassed to say I don't know what TELEPOR does and I can't find it in any FAQs. Doesn't it warp you to the town at the current level of the tower? I would like to contribute more concrete information. Can you give me a brief overview on how you deduced the purpose of 0xC30B and its associated table? If all the information in this game is stored in tables, then I think we can probably deduce how much each stat will be boosted at the next level. Edit: Switched to version 22 and all is well. I can now watch your movie and write my own! And my Lua script works!
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
Bobo the King wrote:
Sounds like you're warming up to a four mutant party while I'm warming up to a one mutant party! [...]
Joy, we've converted each other to the other side! We're still on the opposite sides, in some sense. How about we compensate and go with two?
Bobo the King wrote:
[...] if we can manipulate byte 0xC30B to always be [...]
Manipulating for quick stat gains should be where the RNG gives the largest amount in a few steps. Then reset and repeat. It would be best if we don't have to take extra steps just so we can grind a bit more. The trio of agility gains would be good if we want to go somewhere while still building our agility effectively. Then again, it pretty much comes down to what we need for each required battle... Everything else is just icing.
Bobo the King wrote:
Even though I'm fairly inexperienced, I'm already starting to see how Lua is implemented differently for different emulators.
Even something like joypad.set and joypad.get, (which should be) present in all emulators supporting lua, works differently from emulator to emulator. I'm not just talking about the fact each platform has different buttons, by the way -- No other emulator has four options like FCEUX's true, false, nil, and "invert" for its joypad.set. There's also a few other mechanics that aren't the same throughout.
Bobo the King wrote:
I would like to use it to pump a solo mutant up to 99 Agility in the first world, then run through the rest of the game as a demonstration run.
A demonstration is certainly a good idea. It may take a while to get the 99 agility, but definitely a good start to figure out what we may need.
Bobo the King wrote:
[...] it has 405 frames and 101 re-records (uh... why so many re-records?) [...]
I wanted to select the mutant at the speed of TAS, and wanted to be sure of the earliest possible frame it could happen. Incidentally, it's still not the fastest possible... I could still have picked that MUTANT F faster yet:
My run   Faster
 V..       V..
 V..       V>.
 ...       V>A
 V..       V.A    Faster method
 V..       ...    saves 4 frames
 ...       ...
 V.A       ...
 V.A       ...
Bobo the King wrote:
My rule on character names and other minor things is that the total time sacrificed shouldn't exceed the largest "mistake" in your run. [...]
Better than me, since I have no rules of my own for names. A 0-letter name is easily forgivable if we only have one character, since everyone should recognize that it's our solo player doing the action. Once we add a second character, giving both a 0-letter name will get somewhat confusing, but it's still fastest... That's my thoughts.
Bobo the King wrote:
I'm a little embarrassed to say I don't know what TELEPOR does [...]
Has 5 uses. Sends you straight to the tower, at whatever floor you specify. The highest floor you can specify is limited to the highest point you've reached on the tower, however. It's apparently ineffective when you're in some sort of "vehicle", like the sailing island, the glider, or the bike. 1F takes you to the starting point of the game.
Bobo the King wrote:
I would like to contribute more concrete information. Can you give me a brief overview on how you deduced the purpose of 0xC30B and its associated table? If all the information in this game is stored in tables, then I think we can probably deduce how much each stat will be boosted at the next level.
I found C30B because I knew the RNG is dumb enough to only roll whenever it's needed. This information more or less came from GameFAQs. I also recall playing around on my GameBoy Color with soft resets and all that and it seemed to shuffle how my Mutant grew. So it's a number affected by soft resetting. So I finally pick up VBA like a week ago and searched for some memory values. Start the game, clear the change counts in RAM Search (to be absolutely certain), and do a bunch of stuff I know wouldn't call the RNG for mutant growth. Changes should equal zero so far. When I soft reset, there should be a change. When I win a battle, there should be another change. I didn't expect a memory address to increment by 1 each battle, however. Apparently, it's used as a seed for the RNG, rather than a random number itself. When I added a second mutant into the party, it changed by 2 each battle. That's pretty convincing, eh? The table was constructed by going through each and every battle, keeping meticulous details on what I got. All 256. I double-check by running through several battles again while watching the memory address, thinking I should get this, and should get that. Indeed, it all matched, if I recorded things right. I don't think the game uses tables, but with how it works, it may as well. Eh, less of an overview and more detailed, I suppose.
Bobo the King wrote:
Edit: Switched to version 22 and all is well. I can now watch your movie and write my own! And my Lua script works!
Good to hear your troubles have ended. I'm currently using version 22, by the way.
Player (79)
Joined: 8/5/2007
Posts: 865
Here's the program I've come up with (a minor variation on the one I already posted):
state = savestate.create()
newrng = memory.readbyte(0xC30B)

local function Disp(rng)
	message = string.format("0xC30B: %d", rng)
	gui.text(10,10,message, "green", "black")
end

while true do
	emu.frameadvance()
	savestate.save(state)
	emu.frameadvance()
	i = 1
	while i<9 do
		joypad.set(1, {A = 1, B = 1, select = 1, start = 1})
		emu.frameadvance()
		i = i+1
		
		gui.register(Disp(newrng))
	end
	newrng = memory.readbyte(0xC30B)
	savestate.load(state)
end
There's probably a better way to code the same thing, but that's what I came up with. Basically, it resets the game every frame, emulates 8 frames, checks 0xC30B, and returns it to the user. This tells us what we can expect the RNG to be if we were to soft reset on the subsequent frame. The program would run a hell of a lot nicer if VBA had the emulateframeinvisible function I'm used to, but it'll have to do for the moment. I think the most useful information it offers is that you can see 0xC30B increments by roughly 20 each frame (with an enormous standard deviation...). Perhaps we can use that to deconstruct what's going on. If we can predict future values without the need to reset, then this run should be a cakewalk. I was thinking that if I do a demonstration run, it should be solo. The reason for this is because we can probably use it to predict the amount of time a two-player run would take, subtracting frames when two characters would defeat a monster in fewer turns, and adding frames when only one player would have time to get an attack off. It wouldn't be perfect, but it should give us an idea of how much of a difference we can expect. Since Agility is used to determine who strikes first, my hope is that a solo mutant would always get the first strike and be powerful enough to kill any enemies in one hit. With two mutants, it would take longer to reach the same point, although we could always pump one up first, then the other (in which case we should probably conscript the second one later). According to this http://towerreversed.org/fflsaga/numbers.html an Agl. of 99 should suffice, although we can completely skip battles after leveling up completely. We basically only need enough Agl. to defeat any bosses along the way. I'm going to attempt to modify my program so that it tells me the next frame I should reset such that the following battle will give me an Agl. boost. It should be more efficient than my current program, since I can manually fast-forward through its execution and have it pause afterward. Incidentally, the name of the game is technically "The Final Fantasy Legend", though I don't know anyone who calls it that. It's worth remembering for any submission titles, since I know they're pretty picky about getting the title just right.
Player (79)
Joined: 8/5/2007
Posts: 865
And here's my new, improved program:
local state1 = savestate.create()
local state2 = savestate.create()

local H,S,D,A,M,X,Y= "hp","st","df","ag","mn","AB","!!"
local _ = "__"

local Growth={[0]=H,
    _,_,D,X,_,M,_,A,_,_,X,_,X,_,_,
  _,_,X,M,A,_,_,M,_,_,_,_,M,X,_,M,
  _,_,_,_,_,_,A,_,_,_,X,M,X,H,X,_,
  _,_,_,X,_,_,H,X,A,_,_,S,A,M,S,S,
  H,_,X,_,A,_,_,_,X,_,_,_,_,A,_,M,
  X,_,D,H,X,S,_,H,M,_,H,H,_,Y,H,_,
  S,_,_,_,M,M,X,_,_,_,S,_,S,_,M,X,
  _,S,H,A,_,H,_,S,_,S,_,X,X,_,_,_,
  _,A,A,A,_,X,_,A,_,M,M,_,H,_,M,H,
  A,M,_,_,D,X,X,_,H,H,M,H,_,_,H,_,
  X,H,M,H,H,X,Y,H,H,X,_,_,_,_,_,A,
  M,X,M,_,H,H,_,_,D,X,A,S,_,_,S,S,
  _,X,_,X,_,M,H,X,_,H,H,M,H,D,X,_,
  _,H,S,_,_,S,A,_,_,M,_,_,H,A,_,H,
  S,M,H,M,_,_,_,M,M,A,D,X,S,M,_,_,
  _,S,_,Y,M,_,M,D,X,D,X,_,_,H,X,X
}

local FrameTable={}
local FTI = 1

for i = 1, 16 do
	FrameTable[i] = 0
end

savestate.save(state1)

for i = 1, 50 do
	emu.frameadvance()
	savestate.save(state2)

	frame = emu.framecount()

	for k = 1, 8 do
		joypad.set(1, {A = 1, B = 1, select = 1, start = 1})
		emu.frameadvance()
	end

	local rng = memory.readbyte(0xC30B)
	if Growth[rng] == "ag" then
		FrameTable[FTI]=frame
		FTI = FTI+1
	end
	savestate.load(state2)
end

savestate.load(state1)
for i = 1, 16 do
	gui.text(100, 9*i - 8 ,FrameTable[i])
end
emu.pause()
You'll see I picked up a few pointers from your script. As far as I can tell, it works like a charm. Just wait until the specified frame to restart and the next battle should give you an Agility bonus. Edit: Are you familiar with GlovePIE? Do you have a Wii Classic Controller? I found that using a Classic Controller helped a lot when making my Skitchin' run. VBA doesn't accept joystick buttons for menu commands, so I had to work around it in GlovePIE. I've come up with the following program:
ppjoy1.Digital0=wiimote.Classic.a
ppjoy1.Digital1=wiimote.Classic.b

keyboard.Escape=wiimote.Classic.x

ppjoy1.Digital4=wiimote.Classic.Minus
ppjoy1.Digital5=wiimote.Classic.Plus

ppjoy1.Digital7=wiimote.Classic.LFull
keyboard.Backslash=wiimote.Classic.RFull
ppjoy1.Digital8=wiimote.Classic.ZL
ppjoy1.Digital9=wiimote.Classic.ZR

ppjoy1.Digital0=wiimote.Classic.Home
ppjoy1.Digital1=wiimote.Classic.Home
ppjoy1.Digital4=wiimote.Classic.Home
ppjoy1.Digital5=wiimote.Classic.Home

ppjoy1.Digital16=wiimote.Classic.Up
ppjoy1.Digital17=wiimote.Classic.Down
ppjoy1.Digital18=wiimote.Classic.Left
ppjoy1.Digital19=wiimote.Classic.Right

if Classic.LFull
   mouse.x = 0.69
   mouse.y = 0.29
   mouse.LeftButton = true
   wait 10 ms
   mouse.LeftButton = false
   mouse.x = .55
   mouse.y = .29
   wait 10 ms
   mouse.LeftButton = true
   wait 10 ms
   mouse.LeftButton = false
   mouse.x = .65
   mouse.y = .48
   mouse.LeftButton = true
   wait 10 ms
   mouse.LeftButton = false
   wait 200 ms
   keyboard.G = true
   wait 10 ms
   keyboard.G = false
   keyboard.R = true
   wait 10 ms
   keyboard.R = false
   keyboard.O = true
   wait 10 ms
   keyboard.O = false
   keyboard.W = true
   wait 10 ms
   keyboard.W = false
   keyboard.T = true
   wait 10 ms
   keyboard.T = false
   keyboard.H = true
   wait 10 ms
   keyboard.H = false
   keyboard.Enter = true
   wait 10 ms
   keyboard.Enter = false
   mouse.x = 0.74
   mouse.y = 0.29
   mouse.LeftButton = true
   wait 10 ms
   mouse.LeftButton = false
   mouse.x = 0.35
   mouse.y = 0.2
   wait 100 ms
   mouse.LeftButton = true
   wait 10 ms
   mouse.LeftButton = false
endif

if Classic.y
   mouse.x = 0.69
   mouse.y = 0.29
   mouse.LeftButton = true
   wait 10 ms
   mouse.LeftButton = false
   mouse.x = .55
   mouse.y = .29
   wait 10 ms
   mouse.LeftButton = true
   wait 10 ms
   mouse.LeftButton = false
   mouse.x = .65
   mouse.y = .48
   mouse.LeftButton = true
   wait 10 ms
   mouse.LeftButton = false
   wait 200 ms
   keyboard.R = true
   wait 10 ms
   keyboard.R = false
   keyboard.E = true
   wait 10 ms
   keyboard.E = false
   keyboard.S = true
   wait 10 ms
   keyboard.S = false
   keyboard.T = true
   wait 10 ms
   keyboard.T = false
   keyboard.A = true
   wait 10 ms
   keyboard.A = false
   keyboard.R = true
   wait 10 ms
   keyboard.R = false
   keyboard.T = true
   wait 10 ms
   keyboard.T = false
   keyboard.NUMPAD2 = true
   wait 10 ms
   keyboard.NUMPAD2 = false
   keyboard.Enter = true
   wait 10 ms
   keyboard.Enter = false
   mouse.x = 0.74
   mouse.y = 0.29
   mouse.LeftButton = true
   wait 10 ms
   mouse.LeftButton = false
   mouse.x = 0.35
   mouse.y = 0.2
   wait 100 ms
   mouse.LeftButton = true
   wait 10 ms
   mouse.LeftButton = false
endif

debug = [mouse.x, mouse.y]

ppjoy1.Analog0=wiimote.Classic.Joy1X
ppjoy1.Analog1=wiimote.Classic.Joy1Y
ppjoy1.Analog2=wiimote.Classic.Joy2X
ppjoy1.Analog3=wiimote.Classic.Joy2Y
Okay, some explanations are warranted... The Classic Controller's A and B buttons are mapped to the Game Boy's A and B buttons respectively through VBA. The minus and plus buttons are mapped to select and start, also through VBA. Of course, the d-pad is mapped to the Game Boy's d-pad, also through VBA. The X button is mapped to the keyboard's escape key so that I can run the emulator at full speed. I don't think I'll be using that one much. The right shoulder button is mapped to the backslash key, advancing emulation one frame. The Home button is mapped to the same joystick buttons that cover A, B, select, and start, so pressing Home allows me to restart the game. Before I started toying with GlovePIE, I had to change control configurations just to restart. The left shoulder button clicks "Stop" to stop any currently running Lua scripts, then clicks "Browse..." to open a new Lua script. It then types "growth" to load your Lua script (which I've titled "growth.lua"), presses enter to run it, and clicks on the main VBA window. Note that this entirely dependent on where I put the VBA window, so it probably won't work for your computer without tweaking it significantly. The Y button is just like the left shoulder button, except it types "restart2" to run my script. If I set the emulation speed to 1000% in advance, my script executes in a few seconds. This leaves the ZL and ZR buttons, as well as the two analog sticks. I don't know what to do with them just yet, but I was thinking of making a script that automatically saves and resets the game. I'm hoping there's a consistent frame rule and it always takes, say, 60 frames to save the game. We'll see. So with all of these tools, I have most of what I need to start a demonstration run of the game. I'll probably be pretty lazy with my inputs, especially in battle. No reason at this point to get everything perfect to the exact frame.
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
I'm thinking I should try to make another run alongside yours, except I use 3 mutants and a monster and see how little I can get away with. Knowing myself, I always want to keep optimal in my own ways, so I may end up making progress slowly. Comparing times shouldn't be too difficult, and having two separate runs may show techniques that either player missed the first time around. So you're comfortable using a controller. I'm fine with the keyboard myself. And I'm not familiar with GlovePIE, but I do have a Wii Classic Controller.
Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
I'm thinking I should try to make another run alongside yours, except I use 3 mutants and a monster and see how little I can get away with. Knowing myself, I always want to keep optimal in my own ways, so I may end up making progress slowly. Comparing times shouldn't be too difficult, and having two separate runs may show techniques that either player missed the first time around. So you're comfortable using a controller. I'm fine with the keyboard myself. And I'm not familiar with GlovePIE, but I do have a Wii Classic Controller.
If you have a bluetooth adapter, you can use GlovePIE to interface your Classic Controller with your computer. I suggest at least looking into it briefly, since I found resetting to be a real pain when I used the keyboard. But as long as you're okay using a keyboard, that's what's important. I agree that parallel runs could be extremely helpful. I'm going to pump my agility and use whips extensively, since they stun enemies. I was also thinking of trying to reset while the game is saving. I don't know how long it takes to save, but it may be possible to corrupt the data in a useful way. Just a thought. Edit: Just spent a few hours making a 14 minute run of World 1. It desyncs a little over a minute in. Blech. I'm not sure, but I wonder if it has anything to do with the rewind feature, which I used extensively. In any case, I found that pumping up a solo mutant was quite easy. I was able to get her up to 99 Agl. near the end of World 1. I could probably do it much faster if I seek out only those times when I get 5 Agl. per battle. I also neglected to pick up TELEPOR until the end of World 1, so I think if I attempt a new run, I'll shoot for just enough Agl. bonuses to OHKO all enemies, then focus on TELEPOR, which is too useful to pass up. And hey, while I'm going for it, I get the ARMOR ability as a bonus! I may also modify my program to tell me what frames I can restart at to get other bonuses. I'm thinking that Mana and abilities will be the most useful. I'm going to perform a quick test to see if it is in fact the rewind function that's causing this desync, then I'll probably go to bed. Since World 1 took only about 15 minutes, I'm hoping that the whole game takes about an hour. With proper use of TELEPOR, we might be able to shave that down to 40 minutes, but that's just an estimate. If you've started your run, I hope it's gone better than mine! Keep me updated on your progress! Edit 2: Nope, not the rewind function. It just desyncs on its own (about 8000 frames in, as far as I can tell). This is not good. For the moment, I'm counting on your movie syncing correctly or I am at an impasse. I have no experience attempting to make movies sync up, and given what I've read, I have little interest in traveling down that very frustrating road. The only thing I might do is switch to VBA version 19. In the Desync Help article it says something about the timing of versions 19 and 20 being different.
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
Around 2 minutes in. I got myself BARRIER and POWER, and well on my way to getting P-BLAST and change my monster to O-BAKE. The POWER will help in killing a random ZOMBIE and KINGSWRD each in two rounds, as well as give GEN-BU a good smack. Just ask, and I'll upload my current run, on the spot, wherever I might be. On a side note, I programmed in a cheap macro through lua. From the field, it goes into the menu, saves the game, then resets. So I got around the difficulty of pressing four or five buttons at once. As for your desync issue, the timing difference you read about is mainly saying that movies from v19 will likely not sync at all on v20 or later, and vice versa. This shouldn't affect sync-stability for playing back movies made using the same version. I haven't run into problems myself, yet. I'm not sure what further help I can be, though.
Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
Around 2 minutes in. I got myself BARRIER and POWER, and well on my way to getting P-BLAST and change my monster to O-BAKE. The POWER will help in killing a random ZOMBIE and KINGSWRD each in two rounds, as well as give GEN-BU a good smack. Just ask, and I'll upload my current run, on the spot, wherever I might be. On a side note, I programmed in a cheap macro through lua. From the field, it goes into the menu, saves the game, then resets. So I got around the difficulty of pressing four or five buttons at once. As for your desync issue, the timing difference you read about is mainly saying that movies from v19 will likely not sync at all on v20 or later, and vice versa. This shouldn't affect sync-stability for playing back movies made using the same version. I haven't run into problems myself, yet. I'm not sure what further help I can be, though.
As long as you're not desyncing, it gives me hope that there's some simple fix to the problem on my end. Are you using my Lua script, by any chance? I fear that saving and loading 50 times might be causing the desync problem. I'm going to do a quick test to see if not using savestates at all desyncs (probably not). If I can't pin down the problem from my end, could you send me your vba.ini file? I'd like to see if it syncs properly using your settings. Thanks. Edit: Conducted a few tests and they didn't desync. Then I started checking for the best Agl. bonuses. For future reference, you gain 5 Agl. if C30B lands on 56, 130, or 221 upon reset. You also gain 4 Agl. if it lands on 8 or 233, but I don't see much reason to use those values when you can wait a short time and a 5 Agl. bonus should come up. I was recording this process and it synced through the first twelve or so numbers, after which I saved and went back to check my work. I paused the movie at the second to last frame and resumed recording to check the rest of the numbers. When I went back to check the whole movie, it desynced with the second batch of numbers (after I had resumed recording). This is very frustrating! I think I'm slowly establishing what I can and cannot do to record a movie, though. I hope to start a new run sometime soon, perhaps later tonight. Edit 2: Tried another test run through Bandit Cave (thank god it wasn't all the way through World 1 again). Desynced before the end of the first battle. I think the rewind key caused it this time. Too bad, too, since I had just beaten the bandit and already had 33 Agl. I was getting ready to learn TELEPOR. Oh well... here we go again...
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
Went through World I in just over 9 minutes Stats:
name  mHP St Df Ag Mn    Transition to World II

mkay  103 17  7 11 13  My monster, WEREWOLF
Run    20  9 14  7 11  Has an ICE spell. Useful-ish.
Test   55 12 16  3  9  Has POWER (dead weight) and TELEPOR (awesome)
TAS    55  6 11 13 27  P-BLAST of doom!!
I'm probably going to manipulate more agility and mana for little miss TAS at this point. Poor GEN-BU can just fight himself, I'm too busy to fight some "required" boss battle. I'm not using your script, I just have it set up so if I hold a button then frame-advance, the script blindly goes through a sequence of input. I'm still manually looking at the list of gains that show up and manually checking battles, looking for the right meat for my monster. It's possible your script itself is causing a desync. But I'm not actually sure. Some further checking may be needed. My vba.ini is almost a brand-new one, considering how recently I got VBA. Try deleting it or moving it to another folder so VBA doesn't detect it, and start fresh to see what happens. Probably wouldn't help, but aside from deleting it, wouldn't hurt to try.
Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
Went through World I in just over 9 minutes Stats:
name  mHP St Df Ag Mn    Transition to World II

mkay  103 17  7 11 13  My monster, WEREWOLF
Run    20  9 14  7 11  Has an ICE spell. Useful-ish.
Test   55 12 16  3  9  Has POWER (dead weight) and TELEPOR (awesome)
TAS    55  6 11 13 27  P-BLAST of doom!!
I'm probably going to manipulate more agility and mana for little miss TAS at this point. Poor GEN-BU can just fight himself, I'm too busy to fight some "required" boss battle. I'm not using your script, I just have it set up so if I hold a button then frame-advance, the script blindly goes through a sequence of input. I'm still manually looking at the list of gains that show up and manually checking battles, looking for the right meat for my monster. It's possible your script itself is causing a desync. But I'm not actually sure. Some further checking may be needed. My vba.ini is almost a brand-new one, considering how recently I got VBA. Try deleting it or moving it to another folder so VBA doesn't detect it, and start fresh to see what happens. Probably wouldn't help, but aside from deleting it, wouldn't hurt to try.
My god! What did you do to the bandit??? LOL! Pretty funny since both of the times I've fought him I was extremely lucky and he decided for several turns he would instead "wait for attack". What was the deal with that equipment shuffling immediately after acquiring the rest of your party? Were you throwing it out so that they wouldn't take turns in battle? Well, I am very impressed with this little run. I see now that I really shouldn't have let TELEPOR pass me by. Your strategy also seems more "honest" in the sense that it doesn't involve nearly as much luck manipulation. Unfortunately, I still think a solo run is theoretically faster. Not that I can prove it... grumble... If a solo run is faster but desyncs, that doesn't count for jack squat, so you're in the lead. In case you missed the second edit to my last post, I'm still having desync issues, so I'm going to attempt to code a fake autosave function in Lua. I think my problems may stem from the fact that autosave continues to operate while my script is running. Anyway, I'm in a weird position. I'm hoping I can trounce your run by getting through World 1 in 8 minutes, but since I'm having technical difficulties, I'll instead play cheerleader. Keep up the good work!
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
Bobo the King wrote:
My god! What did you do to the bandit??? LOL! Pretty funny since both of the times I've fought him I was extremely lucky and he decided for several turns he would instead "wait for attack".
I hit his weakpoint for massive damage! The P-FROG has xICE, and since my monster just so happened to transform into O-BAKE, with an ice attack CHILL, the instant-death was possible.
Bobo the King wrote:
What was the deal with that equipment shuffling immediately after acquiring the rest of your party? Were you throwing it out so that they wouldn't take turns in battle?
The shuffling here was to equip my party with defense-raising GOLD armor. The steps: - Remove SABER - Sell SABER (+1030 G) - Buy RAPIER and 3 aGOLD - Equip RAPIER and aGOLD on TAS - Equip aGOLD on the other two mutants - Buy two POTIONs with leftover money (which remain unused so far) The armor seems helpful, considering how much my party was hurting when I finally used the inn.
Bobo the King wrote:
Well, I am very impressed with this little run. I see now that I really shouldn't have let TELEPOR pass me by. Your strategy also seems more "honest" in the sense that it doesn't involve nearly as much luck manipulation.
Indeed, TELEPOR is extremely helpful, as demonstrated in my test run. The problem is that, even with the best RNG from a soft reset, it's the 14th mutant bonus in the list. A solo mutant must win 14 consecutive no-reset battles in the best case. If you're waste no steps, 14 battles will not happen before the P-FROG bandit. Two mutants need 7 battles, while a three mutant party can get away with as little as 5, granting me TELEPOR much sooner. See why I want more than one mutant now? My run still manipulates luck by a pretty significant amount. Just count the soft resets I go through, and it's not exactly a small amount. Even so, I "gave up" and took a RNG value that puts TELEPOR in the 17th spot, which required winning an extra battle. On the upside, it gave ICE to one of my mutants along the way.
Bobo the King wrote:
Unfortunately, I still think a solo run is theoretically faster. Not that I can prove it... grumble... If a solo run is faster but desyncs, that doesn't count for jack squat, so you're in the lead. In case you missed the second edit to my last post, I'm still having desync issues, so I'm going to attempt to code a fake autosave function in Lua. I think my problems may stem from the fact that autosave continues to operate while my script is running.
I still think a three-mutant party is fastest, thanks to the fact TELEPOR is accessible much earlier, along with other "hard-to-reach" abilities. On the other hand, once a mutant has all the "hard-to-reach" abilities you could want (TELEPOR, P-BLAST, ... Uh, another P-BLAST? Maybe a third P-Blast...), the other two would outlive their usefulness and should just drop dead in the next battle, turning it into a solo run. The purpose of the monster is to see what possible use they can be. By the end of World I, it looks like a monster works as a fat stack of HP that my mutants don't have, but insta-killing the P-FROG bandit was certainly a nice plus. I'm hoping to get a BEETLE to try out the insta-kills by SAW.
Bobo the King wrote:
Anyway, I'm in a weird position. I'm hoping I can trounce your run by getting through World 1 in 8 minutes, but since I'm having technical difficulties, I'll instead play cheerleader. Keep up the good work!
When those difficulties end, I hope to see my run trounced by a run using newly-gained knowledge. And hopefully not exclusively thanks to a 0-letter name.
Player (79)
Joined: 8/5/2007
Posts: 865
Another day, another desync. Fortunately, my last attempt had some terrible luck (battles too sparse, had to wait too long to manipulate luck) so I wasn't sorry to see it fail. On the upside, I'm attempting to debug my problem from the ground up. I wrote up this Lua script:
local state1 = savestate.create()
local state2 = savestate.create()

savestate.save(state1)

for i = 1, 300 do
	emu.frameadvance()
	savestate.save(state2)

	for k = 1, 8 do
		joypad.set(1, {A = 1, B = 1, select = 1, start = 1})
		emu.frameadvance()
	end

	savestate.load(state2)
end

savestate.load(state1)

emu.pause()
You can see that it's the bare bones of my old Lua script. No checking RNG values, no GUI, no frametables. Just saving and frame advancing. I ran back and forth between the tower and Town of Hero while using this script essentially as I would use my original Lua script (except with very sloppy inputs). I saved the game, ran the script, waited a few dozen frames, then reset the game. The first time I ran it, I omitted the line with the restart sequence ("joypad.set..."). That ran for 10,000 frames without desyncing. The second time, however, I included the line and it only ran for about 7,000 frames before it desynced. I'm going to run a more extensive test with the restart sequence omitted again-- say through 20,000 frames. If that doesn't desync, I have a good indication that it's (of all things...) the joypad.set command that's causing this. I also ran some much more bare-bones tests: simply advancing 10,000 frames in Lua and returning control to the user, saving and loading hundreds of times, and a combination of saving and loading. None of them desynced, although I didn't test them so extensively. Damn it! I wanna run this game! Edit: Ran it again for about 25,000 frames without the restart sequence. No desync. Looks like joypad.set is causing it. Edit 2: Ran it again with the restart sequence. Remained synced through 17,000 frames. Just when I think I've got it pinned down...
Player (79)
Joined: 8/5/2007
Posts: 865
I'm getting that syncing feeling! Sick of desyncing, I forced it to sync in the most tedious way possible: every time I reset, I replayed the whole movie to manually check that the RNG was in the right place. It takes forever, but hey, it gets the job done. I really miss Gens and its "Seek to frame" function. (Come to think of it, I could write a minuscule Lua script that would seek to a specified frame pretty efficiently. Think I'll do that...) Just my luck, I carefully replayed my movie about a dozen times and it didn't desync even once! It's as if it knows I'm watching it! The culmination of my work (as yet) is this: http://dehacked.2y.net/microstorage.php/info/1287124710/testrun.vbm Please, please, please tell me it syncs on your computer! I made a few outright mistakes in this little run. First, I started walking to Town of Hero before restarting to manipulate luck. That was a bad idea because I ended up having to pace beside Town of Hero to get a battle and earn some gold. Second, I fought an extra battle so I could buy the BOW, then I bought it. I seriously didn't expect to beat P-FROG without it, so that strategy could change. Third, I screwed up in guessing the number of battles I'd have to fight on my way to King Sword. I thought I could put myself one fight away from learning TELEPOR by leaving the forest beside Town of Hero when I did, but I fell one battle short. I wasn't sure whether I should fight an extra battle outside or duke it out with the two LIZARDs inside, so I ended up guessing that the LIZARDs were faster. So, let's compare our runs. What I like about your run: •Excellent route planning. I probably wouldn't have come up with the Gen-Bu skip myself, so you safely docked about 20 seconds from the final runtime with that trick alone. •Fine-tuned menu management. •You're better prepared than I am to take on any enemy in the game. My memory of this game isn't that good, so we'll have to see if that pays off. What I don't like about your run: •Chiefly, your battles are very inefficient. I think this is because of your minimal luck manipulation and use of four characters. From a purely stylistic standpoint, I'd rather watch a TAS that OHKOs as many enemies as possible, rather than spending a full round or so on each battle. It'll probably improve as your run progresses. •Less luck manipulation. If you're only getting 1 or 2 Agl. (or whatever other stat) per battle, then there's hardly any point to fighting them. It's just wasted time. For example, on your way back from King Armor, you fight a Goblin and it gives just a 1 Mana bonus to the mutant in the 4th slot. As far as I can tell, there was no other benefit to that battle. I don't like or dislike it, but your monster is a bit of a wild card at this point. He could make your run really easy or just weigh you down. I'm interested, though. What I like about my run: •Short battles. I think only one battle isn't a OHKO (except for battles against multiple monsters, of course). •Loaded with luck manipulation. 5 Agl. per battle gets me 43 Agl. after P-Frog. That's going to serve me well. What I don't like about my run: •Grinding. I thought I could avoid it, but there's actually a fair amount of it to get TELEPOR. Looking back now, I realize that my original run (that desynced) was faster than this one, despite not learning TELEPOR. Now I see why. Hopefully, I'll earn that time back. •Sloppy. You'll see I have a tendency to just hold A during battles. I don't really see the point of getting the input exact to the frame at this stage in development. I also made a few larger mistakes, noted above. •I could easily hit a wall. I'm counting on a lot of things at this point: all fixed encounters from World 2 onward should be one-on-one, weapons should be available to continue my OHKO streak, and I'm going to need the first strike on everything. Having ARMOR at my disposal is handy, but if anything has the Agl. to sneak in the first strike against me, I'm screwed. I can think of about half a dozen ways this can go bad, but I have no choice but to press on and meet the challenges as they come. I'm about 95 seconds behind your run, so I'm doubtful I'll catch up. Nevertheless, with all the mistakes I've made, I'm happy to be this close. Combining the strategies of our two runs: The jury's still out on how many characters we should have, but I'm banking on two mutants. One mutant may suffice if we skip TELEPOR, but I have a feeling that will cost too much time. The potential advantage of forgoing TELEPOR would be more opportunities to pump up the solo mutant, probably attaining 99 Agl. by the end of World 1. On the other hand, two mutants would learn TELEPOR with little or no grinding, plus we could kill one off to save time later. In order of most to least likely to be optimal, I'm guessing two, three, one, and four mutant parties respectively. With two or more mutants, we could switch party members (as you've been doing) to soak up more high-yield bonuses. We'll have to weigh the time cost of switching party members versus manipulating luck more. The role of the second (or third) mutant would be almost completely up in the air. Should he be strength-focused to complement our agile mutant? Should he have useful abilities for specific points in the game? Should he just be a tool for luck manipulation? Should he be killed off as quickly as possible? My luck manipulation so far has been a little inefficient. You'll see I pause, save, wait to manipulate luck, then reset. What I should do is walk a few steps, then pause, save, wait just a handful of frames to manipulate luck, then reset. In other words, I should manipulate luck as I walk. That's due entirely to my laziness. In the final version, we should manipulate luck more carefully. I think that just about does it for this post. I'm glad to have finally contributed something concrete. On to World 2!
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
I dusted off World II now. I wonder if I should have started on my merry way into turning the monster into a WARRIOR, who also has SAW...
Bobo the King wrote:
The culmination of my work (as yet) is this: http://dehacked.2y.net/microstorage.php/info/1287124710/testrun.vbm Please, please, please tell me it syncs on your computer!
I shall increase suspense and tension by writing this filler paragraph in an attempt to force you to read this rather than skip to the next paragraph which has your answer. Yes. It syncs. I was able to fully view your run. And I can definitely see what you did.
Bobo the King wrote:
•Chiefly, your battles are very inefficient. I think this is because of your minimal luck manipulation and use of four characters. From a purely stylistic standpoint, I'd rather watch a TAS that OHKOs as many enemies as possible, rather than spending a full round or so on each battle. It'll probably improve as your run progresses.
Indeed, the first one was definitely horrible. After seeing your run, it made me question my decision to sell the SABER (that thing's got decent offense, unlike RAPIER). Plus, I really should have picked on a GOBLIN or ALBATROS with their 20 HP instead.
Bobo the King wrote:
•Less luck manipulation. If you're only getting 1 or 2 Agl. (or whatever other stat) per battle, then there's hardly any point to fighting them. It's just wasted time. For example, on your way back from King Armor, you fight a Goblin and it gives just a 1 Mana bonus to the mutant in the 4th slot. As far as I can tell, there was no other benefit to that battle.
The other benefit to that battle was to get me closer to the coveted TELEPOR. I could pick at the fact that you went through many battles without a single stat gain, but I know you were going for TELEPOR as well. The 1 Mana was mostly unavoidable, but then again, I could have picked a better RNG on the path to TELEPOR. If you've been collecting data on the stat gains, I'd like to know what you've got so far. Aside from that, I've only made a basic attempt at manipulating luck, and indeed, many improvements could be made. Yet in spite of that, I tightly navigate the menus.
Bobo the King wrote:
I don't like or dislike it, but your monster is a bit of a wild card at this point. He could make your run really easy or just weigh you down. I'm interested, though.
So far, the cute critter is proving useful.
Bobo the King wrote:
•Loaded with luck manipulation. 5 Agl. per battle gets me 43 Agl. after P-Frog. That's going to serve me well.
This I find impressive. The first world is also probably the best place to grind, given how weak the monsters are and the fact mutants only care about the RNG, not the battles. Besides, it's not like we need the money.
Bobo the King wrote:
Combining the strategies of our two runs: The jury's still out on how many characters we should have, but I'm banking on two mutants. One mutant may suffice if we skip TELEPOR, but I have a feeling that will cost too much time. The potential advantage of forgoing TELEPOR would be more opportunities to pump up the solo mutant, probably attaining 99 Agl. by the end of World 1. On the other hand, two mutants would learn TELEPOR with little or no grinding, plus we could kill one off to save time later. In order of most to least likely to be optimal, I'm guessing two, three, one, and four mutant parties respectively.
I'm going to look over the Mutant abilities a quick bit... - ARMOR (You're getting use out of it. Hrm...) - POWER (I got it, but am not getting use out of it) - TELEPOR (Freaking sweet, but hard to get.) - P-BLAST (Powerful hit-all offense. Useful to have) - GAZE (death) (Played around with it, not in this test run. Nice to skip the damage numbers) These abilities give us reason to come with more than one mutant. At least, initially, when our main mutant hasn't picked up those neat abilities yet. Mana would be useful for two of these. There are times where you're stuck fighting the normal enemies, so having spells that can kill them all swiftly should be considered as well. But a high Agility is good as well.
Bobo the King wrote:
With two or more mutants, we could switch party members (as you've been doing) to soak up more high-yield bonuses. We'll have to weigh the time cost of switching party members versus manipulating luck more.
Notably, switching is more useful when focusing on getting hard-to-get abilities, like TELEPOR. Otherwise, just try to manipulate the +4 or +5 in the spot your main mutant happens to reside in.
Bobo the King wrote:
The role of the second (or third) mutant would be almost completely up in the air. Should he be strength-focused to complement our agile mutant? Should he have useful abilities for specific points in the game? Should he just be a tool for luck manipulation? Should he be killed off as quickly as possible?
Manipulation material to get our main mutant equipped with the necessary abilities first thing. The other role is either a secondary P-BLAST/death GAZE, or cannon fodder.
Bobo the King wrote:
I think that just about does it for this post. I'm glad to have finally contributed something concrete. On to World 2!
I feel like we're in a little competition, even though we are working together. Probably what pushed me into clearing out World II.
Player (79)
Joined: 8/5/2007
Posts: 865
A couple of brief questions before I dive into World 2. What was the deal with that TELEPOR on floor 4 of the tower? Looks like you wanted to go back and kill the slime for some reason. How did you know the old man would ask for the BATTLE SWORD? According to the FAQ I'm using, he could ask for the BATTLE SWORD, NEEDLE, or ROCK. Did you just manipulate luck somewhere down the line? Is it possible to obtain either of the other two items more quickly? (I noticed the item shop is closer, and it should hold a NEEDLE.)
FatRatKnight wrote:
The other benefit to that battle was to get me closer to the coveted TELEPOR. I could pick at the fact that you went through many battles without a single stat gain, but I know you were going for TELEPOR as well. The 1 Mana was mostly unavoidable, but then again, I could have picked a better RNG on the path to TELEPOR.
Oops, didn't notice that. Okay, all is forgiven.
FatRatKnight wrote:
If you've been collecting data on the stat gains, I'd like to know what you've got so far. Aside from that, I've only made a basic attempt at manipulating luck, and indeed, many improvements could be made. Yet in spite of that, I tightly navigate the menus.
Yeah, I've got character stats in my RAM Watch window. My mutant has 53 Agl. Her Str. is 10, Def. is 2, and Mana is 11. Pitiful, really. For my little demonstration run, my strategy will be to continue pumping my mutant's Agl. as long as I can OHKO battles. After I max it out, I'll run or luck manipulate out of any further random encounters. I'm hoping that any fixed encounters against multiple enemies (a few caught my eye) can be weathered using ARMOR. You've probably already come across it, but this FAQ indicates that a solo mutant can reach the end of the game with minimal Str.: http://www.gamefaqs.com/gameboy/563273-the-final-fantasy-legend/faqs/20518 As long as I can spam SAW, I'm only worried about Mana being a factor. I'm keeping my eye on how much time TELEPOR saves us. It looks like it's saved you about 40 seconds of trekking and one Gen-Bu battle. That's substantial, but if we scale back the number of party members, it may be of questionable worth. For a solo run, it's almost out of the question, since it took more time for me to grind than it's saved so far (and probably ever will).
FatRatKnight wrote:
I feel like we're in a little competition, even though we are working together. Probably what pushed me into clearing out World II.
Hey, I like a good competition! Hopefully, I'll catch up with you (both in distance and time) by the end of the day! Oh yeah, one thing I noticed. If your monster happens to be in the worm class and it eats something from the behemoth class, you transform into the soaring birds class. The REDBULL is in the behemoth class, so I guess REDBULL gives you...
Player (79)
Joined: 8/5/2007
Posts: 865
You're now over 10,000 frames ahead of me: http://dehacked.2y.net/microstorage.php/info/1193489442/testrun.vbm Plenty of mistakes in this portion of the run. I guessed that it might be possible to manipulate the Old Man into asking for a NEEDLE, so I bought that instead of the BATTLE SWORD. When I got to his island, I found I couldn't change his mind, so I had to go back and pick up the sword anyway. Also, I found I had to fight an ATOMCRAB to throw off the battle RNG. Without doing that, SEI-RYU kills me in the second round with THUNDER. The spell just barely kills me (54 damage out of 51 hit points on my Mutant), so I could compensate for that by devoting just one battle to pumping either HP or Mana; I'm not at all sure which one would help the most in the long run. Killing the ATOMCRAB throws off the queue for my bonuses (the SEI-RYU battle gets me nothing), but it was virtually unavoidable in the game's state as I played it. Finally, I somehow flubbed a reset when I was getting impatient toward the end of the world, so I ended up pumping HP for one battle instead of Agl. It's no big deal, but it strikes me as an exceptionally stupid mistake. I was hoping that I still beat your time from the bottom of the tower to killing SEI-RYU. Nope. You do it in 22,630 frames, I do it in 24,950 frames. I'm a little puzzled by this. Here are the major differences in our runs over that timespan, if I'm not mistaken: •You backtrack to kill a SLIME. •I get the NEEDLE, which is closer than the BATTLE SWORD. •You have better luck manipulating a particular monster to move away from a doorway, allowing you to slip by (I'm interested in how you did that). Aside from those three things (which shouldn't account for 2,000 frames), there are three ongoing, minor differences: your menu manipulation remains crisper than mine, I have lots of idle frames while I manipulate luck, and I think your luck manipulation is better for this section. In regards to luck manipulation, you'll see that I continue to manipulate luck so that the Agl. bonus is next in the queue. That's pointless because I end up running or luck manipulating out of almost every battle. Better luck manipulation (and I wonder if you did this) would be to maximize the number of steps until the next unskippable battle. All the extra battles I fought could add up to 2,000 frames. In any case, I know what I would do differently the next time I attempt it. I may run our movies side by side to see where the time is lost. As you discovered, random encounters occur when C33B hits certain values. I wonder how many different encounter rates are in this game. I thought I saw it listed somewhere, but I could be mistaken. Regardless, once we determine what values trigger an encounter, I can update my Lua script so that we can manipulate luck to minimize the number of encounters. I'm not sure how useful that will actually be, since we really want to minimize the number of encounters we can't run from, which is a nontrivial endeavor. Of course, I'll also update it to list the best frames for boosting other stats. In fact, I have a lot of good ideas for scripting. Well, World 1 was disappointing and World 2 was a series of substantial mistakes. I'm hoping World 3 treats me better. Edit: As you go through World 3, you may be tempted to skip finding Jeanne and go straight to rescuing Milielle. Doesn't work. The WHITEKEY is in the room where Byak-Ko briefs you and if you don't find Jeanne, he's still there. He says, "Don't double-cross me," or something, in case you were curious. Additionally, I've maxed out my Agl., so I found the values of C30B that give the biggest boost to Mana. To boost your Mana by 5 points, C30B should be 23, 137, or 203. To boost it by 4 points, possible values include 6, 28, 31, 43, 61, 88, 100, 138, 142, and 162. I'm going to try not boosting Mana for as long as possible so I can find out if I need to do any grinding at all. One strategy I'm interested in trying is boosting Agl. to 40-50 in World 1, then learning P-BLAST, then boosting Mana to 40 or so, then boosting either of them as convenient. It would require less luck manipulation, less running from battles, and would build a more powerful character sooner. This is once again assuming that TELEPOR doesn't save too much time (with the glider in World 3, I don't expect more than a few seconds to be saved). Edit 2: I've been lazy about checking if it syncs because it takes nearly three minutes to reach the end of the video even at turbo speed. (I think it goes faster with sound disabled, but for whatever reason, I can't turn off the sound!) So wouldn't you know it? It desynced right before I rescued Jeanne, setting me back about 8,000 frames! I've been redoing that portion of the run, but I've picked up a minor tip: you don't need to talk to Jeanne after saving her. Just leave the room and go back to the floating castle. Edit 3: I may have just written myself into a corner. Currently, I'm breaking out of jail. At the end of the prison is the Jail Key. It's guarded by 4 IMPs, and as far as I know, they can't be luck manipulated into 3 IMPs. The problem is that I only have three uses left on my SABER (and as you know, I've been fairly judicious about using it up to this point). To make matters worse, the IMPs start off the battle with a FIRE spell, dealing 54 damage to my 51 HP mutant. To make matters yet worse, I have just barely enough money to buy the coveted L-SABER, so I can't easily backtrack and buy it (I would fall short a few battles' worth of money). What's so tantalizing is that if I could just beat these IMPs (say, with a P-BLAST), then I'd have the Jail Key and I could backtrack to get an L-SABER for free. Unfortunately, the L-SABER shows up too soon to be affordable and too late to justify picking it up over the CATCRAW, which is an easy steal in Akiba. So I'll probably have to backtrack several minutes and pick up an inferior weapon. That's a lot of strikethrough! Where there's a will, there's a way! It turns out you can TELEPOR out of jail, jog over to town, talk to a guard in the pub, pick up your glider, and resume the game. The time saved is probably only marginal, but I can at least buy a new weapon and avoid fighting those IMPs. This means that as long as I get TELEPOR, I probably don't need P-BLAST or Mana grinding (at least up to this point). Amusingly, that leaves your two cellmates trapped. I'll be executing this strategy tomorrow.
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
I've played a "normal" game through (script-assisted, letting me know what mutant abilities will show up). Also, having a script automate the process of grabbing the HP200s to feed my human thousands of 'em made me wonder how some players manage to get the patience to reach 4000 or so HP on their human. From what I remember, this is the list of required battles: **World I - P-FROG (bandit) - KINGSWRD (to get the sword) - Steward's crew (Not sure if the monsters can be manip'd) - STEWARD (20 damage is all you need) + Just TELEPOR to skip GEN-BU. **World II - SEI-RYU + This appears to be the only forced encounter. **World III - Fight a guard in the pub - Fight the group going after Jeanne - Fight the group guarding Milielle + TELEPOR to skip two forced battles, but not really the walking distance - BYAK-KO **World IV ? Save someone from a group of monsters - A monster guarding the path part-way up (I think it's an eye) - Fight a robotic something (On way to ERASE99) - SU-ZAKU + I'm not sure if it's necessary to save that someone. + There's a SAW item somewhere along the tower prior to this world. Grab that for an insta-death goodie for your mutant. Powerful enough to take out bosses instantly thanks to poor implementation. (if your strength is less than their defense, SAW has a chance to work, depending on some chance-to-hit formula, I believe) **The remaining portion - ASHURA - GEN-BU2 - SEI-RYU2 - BYAK-KO2 - SU-ZAKU2 - CREATOR + I came, I SAW. All of them needs a good SAWing. Here's my plans: World I: Start as MUTANT F. Pick up somewhere between 0 to 2 extra mutants and possibly a GOBLIN. Manipulate GAZE (death), TELEPOR, and P-BLAST on the main MUTANT F, your mutant buddies are now obsolete and should die whenever convenient. GOBLIN should eat a ZOMBIE to become O-BAKE to insta-kill the P-FROG (or GAZE the darn bandit to oblivion), then transform into better stuff later. World II: With GAZE (d), insta-kill single groups to manipulate stat-gains. Try to aim to turn your monster into BEETLE for the SAW, but it isn't necessary if you can swiftly kill SEI-RYU by sheer stat-manipulated damage. The monster can at least act like a pile of HP to soak up attacks. World III: P-BLAST can help with the groups of enemies you may have to face. No solid plans other than that. World IV: Your monster will protect your 40 HP, 0 Def MUTANT F you no doubt still have. And since you probably have nothing for strength, just SAW the single toughies that show up, GAZE (d) any single living groups, and see if you can't manipulate the multiple group battles away (P-BLAST twice for multi-groups you must face.). After that: It depends on how much manipulation can take place in getting SAW to hit. If you can guarantee hits first round against each boss, your monster might not be needed anymore. Try to avoid ever wasting a step. You've got GAZE (death) for anything living, so regardless of how powerful the group may be, it is possible to slay the entire stack outright (chance based on Mana, though). Manipulating stat-gains should be exclusively in the path you're going in, and not a single step of deviation. There's a few spots in the RNG which shuffles your number of uses on your abilities. There's one I missed previously, I'll update my posts with this addition (value is 0x56. I labeled it blank. I discovered it messes with your uses left). It might be possible to use these instead of a trip to an inn to get back needed abilities that you spent. That's my plans. You decide how they stack up with yours. EDIT: The best RNGs to go for on 0xC30B, it seems, are: 0x51 - 3 GAZE (death) (4 spots away. No useful bonuses along the way) 0x58 - 1 TELEPOR (15 spots away. One mana bonus available for our mighty mutant) 0xEB - 1 TELEPOR (14 spots away. Two mana bonuses available) 0xF2 - 2 P-BLAST (7 spots away. One mana bonus available) The reason I backtrack for the SLIME is because I couldn't manipulate one up for my monster in the later floors. The transformation to BEETLE for the insta-kill SAW was desired at the time, and the SLIME was the most direct monster I had to eat for it. I "knew" the BATTLE sword would be needed because that's what I've seen show up every time I played the game up to that point. I wasn't aware that it could be anything different, if at all possible. If the need can be a NEEDLE or a ROCK, I can't say I've seen it happen, yet. I didn't track the RNG for manipulating NPCs out of my way. That was, incidentally (and ironic, considering it's a TAS), sheer luck on my part. You were looking at 0xC30B for the highest mana gains? You should be looking at 0xC34B instead, since it's apparently used in determining just how big the numbers are (0xC309 is used for HP growth). On the other hand, 0xC34B is always just a value of 9 higher than 0xC30B after a reset, so the whole point sort of fades away when the only thing you're manipulating for you isn't preceded by learning an ability. As for my progress, I crashed into a wall. I just don't have the Mana needed for enough damage against all groups with P-BLAST. Nowhere near the needed amount, anyway. You've found the spots in the RNG that we may need to hunt for, which is good. I can try to find the RNG addresses for things like what determines which direction the NPC walks in or when they'll do the walking. Among other things. For now, I'll just try to figure out various aspects of the game so we can do things like manipulate NPCs into walking where we need 'em to walk. I'm also wishing I knew where to begin for ROM-hacking things like the encounter table, but I feel I would need to know the instruction set the GameBoy uses. Which I don't know and am unsure how to get access to.
Player (79)
Joined: 8/5/2007
Posts: 865
Yeah, I'm having troubles of my own. BYAK-KO has two main attacks: SWORD and ICE. SWORD does 150-something damage unless I quickly use ARMOR, in which case it still does about 45 damage. ICE is far worse, scoring over 100 HP worth of damage no matter what I do. I tried running around and fighting random battles to screw with the battle RNG, but I can't seem to manipulate BYAK-KO into using SPHERE for three turns-- my only chance of survival. My Mana stands at a paltry 30, so I might be able to win by boosting it. If I boost my Mana, I can survive either SWORD or ICE for one round, but not two. Boosting my HP is another option. With 100 HP and 99 Mana, I could probably win easily. The bottom line, however, is that I'm ill-equipped for this battle and it may be best to call it quits for this run. For the record, I reached BYAK-KO around frame 95,000. I think World 3 is my best performance so far. Your plan looks pretty good, though I'm still not sure about including a monster. It looks like he saves you the most time on P-FROG (which can be OHKO'd with sufficient luck manipulation), SEI-RYU, which only takes two or three turns anyway, and BYAK-KO, for whom it might actually be helpful to bring a monster. Outside of those battles, he's pretty much dead weight, costing perhaps a second or so per battle. I think my biggest discovery so far is that there's a tradeoff between TELEPOR and P-BLAST. You basically need one or the other, but not both. I'm leaning toward a solo mutant run with the following strategy: •Pump Agl. to 48-ish before P-FROG. •Learn P-BLAST on the way to KINGSWD, pump Mana a few more times (up to 30 or so). •Continue pumping Agl. on the way to GEN-BU. •As long as you can OHKO anything, pump both Agl. and Mana throughout World 2 (emphasis should be put on Agl. when possible). When convenient, pump HP. Shuffle abilities periodically to continuously replenish P-BLAST. •Wing it from there. Defense is all but worthless since you only gain 3 per battle and it's very hard to manipulate (I'm not sure, but there should only be two or three RNG values that give you 3 Def.). Advantages over my current strategy: •More Mana makes you more versatile and durable against magic attacks. •Far less luck manipulation. I was hoping that luck manipulation could be done quickly and efficiently. It's not so bad, but it's definitely taking longer than I had intended in some parts. It may be faster to kill a group of enemies than to reset and avoid them. The fastest strategy remains running, however. •P-BLAST can help a lot. This is related to luck manipulation, but it bears special mention. For a prime example, my battle against the steward's cronies took four rounds-- one round to use ARMOR, three more to kill them. Any forced multiple encounters will go much faster and I don't have to luck manipulate out of unforced ones if I don't want to. Disadvantages: •No TELEPOR. That's a biggie. It will cost me the most time in World 1 as I have to trek back from KINGSWD and fight GEN-BU. •More battles. More battles means a more powerful mutant, but it also means more time spent fighting. You're welcome to try any strategy you wish, but I suggest picking a strategy that will contrast with mine. In particular, I'm wondering if TELEPOR saves much time and if BYAK-KO can be efficiently killed without SAW. I've found manipulating NPCs to be very confusing and finicky. I've done it successfully before, but sometimes their motions seem deterministic and sometimes I can just rewind, change my input slightly, and get completely different results. It's worth looking into, but don't drive yourself crazy. As far as I know, that one room in the Underwater Castle and the Floating Castle are the only places where it will make a major difference. We may be able to get it done without explicitly tracking the RNG. I briefly tried the decompiler feature but it made my head spin. I'm a little jealous of people who know how to read something like that. I just checked your run again and discovered you did about 70 damage to SEI-RYU with P-BLAST while your Mana was 48. If I'm not mistaken, that means with 99 Mana, P-BLAST will max out at about 150 damage. If that's the case, I'm wondering if it's really worth it. In particular, IMPs have about 200 HP according to towerreversed, so it will take two P-BLASTS to kill them. I'm going to need to think about this for a little while. On a related note, do you know anything about FLARE? Is it readily available for any RNG values? Does it do more or less damage than P-BLAST? What's so frustrating about this game is that there's no single, clear strategy for speedrunning it! What do we know for sure so far? That we need at least one mutant?
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
Bobo the King wrote:
I just checked your run again and discovered you did about 70 damage to SEI-RYU with P-BLAST while your Mana was 48. [...]
33! We should be doing over 200 at 99 Mana with a P-BLAST. This is enough to one-shot most World III monsters, if not all of them.
Bobo the King wrote:
On a related note, do you know anything about FLARE? [...]
Mutants can't naturally learn FLARE. Take a look at a previous list or the growth.lua if you wish, it's not even there, let alone any possible RNG values for it. There is a FLARE book at the secret town in World III (or was it in a town in World IV?), in a shop. It should deal around twice as much as P-BLAST, but I'm not sure on this. Though, think we can even get the cash for it?
Bobo the King wrote:
What's so frustrating about this game is that there's no single, clear strategy for speedrunning it! What do we know for sure so far? That we need at least one mutant?
There's plenty of games like that, actually. I feel this is one of the easier ones to worry about. We know that humans are far too expensive for our amazingly shallow wallet. Monsters can accumulate power quickly, but getting the right ones isn't easy. Mutants gain power through randomness, which we can abuse in a TAS.
Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
We should be doing over 200 at 99 Mana with a P-BLAST. This is enough to one-shot most World III monsters, if not all of them.
That's odd. Was it your monster's Mana I was looking at? I guess if P-BLAST does 200 damage, that's all that matters.
FatRatKnight wrote:
Mutants can't naturally learn FLARE. Take a look at a previous list or the growth.lua if you wish, it's not even there, let alone any possible RNG values for it.
Stupid me. I saw it discussed in one of the gamefaqs topics and assumed mutants could learn it. Looks like we'll be sticking with P-BLAST. I just did a quick test on the ability shuffling values. The results are interesting and perhaps even a bit disappointing:
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).
As usual, these results occur immediately following a reset. If, say, I were to reset and the RNG lands on 85, I don't know what would happen to the abilities after winning two battles. The bad news here, if it isn't evident, is that we can't do anything to restore the number of uses to the first ability. It doesn't even divide by 2 so we can turn zero uses into one. But the really bad news is that unless I'm mistaken, both P-BLAST and TELEPOR naturally show up in the first slot. So we would either have to manipulate them out of those slots (I noticed you pointed out a route to learning TELEPOR that takes 15 battles) or manipulate the ability shuffling by fighting more battles. (Only C30B = 86 has a viable bonus immediately preceding it. C30B = 166 has a new ability bonus in front of it, so depending on what slot it displaces, it might also work. The other two values require at least two additional battles to manipulate them.) Our alternative, of course, would be to accept that we can't manipulate the ability in the first slot in any useful way and we really have just five charges of P-BLAST between inns. Hmph. (By the way, Alex Jackson on gamefaqs indicates there is an inconsistency in the initial number of uses, so there's a small chance that the above chart is wrong. I wouldn't count on it, though.) I'm wondering about the ELIXIRs that are strewn about near the end of the game. ELIXIRs would be the only other way to restore abilities, with the obvious bonus of restoring health. It beats going to an inn, but I think most of them are out of the way. It may be faster just to buy them or fastest to skip them entirely. Finally, do you know any monsters that cause blindness? Does blindness carry over after the battle? According to gamefaqs, your Agl. is halved if you don't have blindness. If it persists after battle, it could be worthwhile to blind ourselves. I think we can catch it from ANTLIONs and CRABs in the third section of the tower, so it may not make a difference since we'll already have the SAW by then. Edit: Just tested C30B=85. It produced the same results as C30B=86. Looks like the ability shuffler is on its own RNG and therefore can't be manipulated. Edit 2: Picked up GAZE from C30B=81 and decided to fight a few more battles to see if the abilities shuffled differently. This time they did. Fighting six battles resulted in the pattern - | - | + | +. This indicates the RNG can be manipulated, but I'm not sure it will be worth the trouble. I just ran a quick test again for C30B=165, which puts FLAME in slot 4 (fine by me). Fighting two battles produces /2 | - | /2 | +, so we can use that to get an extra charge in the first slot in case of an emergency. It also seems to indicate that ability learning and ability shuffling use the same RNG. Furthermore, it appears that the RNG is rolled for the slots in reverse order since each time they've shifted to the right. I can't quite make sense of it, but a basic understanding is all we really need.
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
The golem I had after the battle definitely had 48 Mana, and very much lacked any P-BLASTs. The MUTANT F you were looking for isn't in the first slot. I've seen a monster cause blindness in World IV, but that's not exactly a nice location to get them. I picked up a list of monsters from a FAQ on GameFAQs, let's see what ctrl+F finds me... ANT LION CRAB GARUDA NIKE (not likely) DORUKO ROCK DRAGON 3 DRAGON 4 DRAGON 5 NINJA SU-ZAKU (The primary boss version) SU-ZAKU2 (... Uh, this late...?) SU-ZAKU (The "invincible" random encounter type) ASHURA (By now, it's a tad late.) Think any of them might be useful? Even a single ELIXIR should be good enough for us. Those things got 3 uses, so that equates to 15 P-BLASTs, 15 GAZEs, and 15 TELEPORs just for picking up one ELIXIR. This should be plenty, should we find the initial 5 uses for each ability too ineffective. By the way, the RNG values for abilities I was picking out were for a 3-mutant party and seeking out TELEPOR. I was picking only the optimal ones in this case. However, since you clearly have different plans, I'll pull some other RNG values you might want to consider: 0xC30B, more numbers: 0x51 - 3 GAZE (death) (4 spots away) 0x58 - 1 TELEPOR (15 spots away) 0x59 - 3 TELEPOR (14 spots away) 0xE0 - ??? TELEPOR (25 spots away, quite a range.) 0xE1 - ??? TELEPOR (24 ") 0xE2 - ??? TELEPOR (23 ") [...] 0xEA - 3 TELEPOR (15 spots away) 0xEB - 1 TELEPOR (14 spots away) 0xF1 - 1 P-BLAST (8 spots away) 0xF2 - 2 P-BLAST (7 spots away) There's only one instance of GAZE (d), on slot 3. There's two instances of P-BLAST, for slots 1 and 2. There's numerous instances of TELEPOR I haven't even checked, but I'm pretty sure we can place it in any of the four slots as we please. I'll go find the RNG address for the shuffler (just in case. It uses a different RNG I haven't searched for yet). In the meantime, I created a function that tells you what direction an NPC is headed. They seem biased towards going northwest...
local n,s,e,w= "N","S","E","W"

local NPC_dir={[0]= n,
--0 1 2 3 4 5 6 7 8 9 A B C D E F
    w,w,w,s,e,n,w,n,w,w,s,w,s,w,e, --0x
  w,w,s,n,n,e,e,n,w,w,w,w,n,s,w,n, --1x
  e,e,w,w,w,e,n,e,w,e,s,n,s,n,s,w, --2x
  w,e,w,s,w,w,n,s,n,e,w,w,n,n,n,w, --3x
  n,e,s,e,n,w,w,e,s,e,w,w,w,n,e,n, --4x
  s,w,w,n,s,n,w,n,n,w,s,n,e,w,n,w, --5x
  n,w,e,w,n,n,s,w,w,w,n,e,n,w,n,s, --6x
  e,w,n,n,w,n,w,n,e,n,e,s,s,w,e,e, --7x
  w,n,n,n,e,s,w,n,w,n,n,e,n,e,n,s, --8x
  n,n,e,w,w,s,s,w,n,n,n,n,w,e,n,w, --9x
  s,s,n,n,n,s,w,s,n,s,e,w,e,w,e,n, --Ax
  n,s,n,e,n,n,w,e,w,s,n,n,w,w,w,n, --Bx
  w,s,e,s,w,n,n,s,e,s,n,n,n,w,s,w, --Cx
  e,n,n,w,e,w,n,w,w,n,e,w,s,n,w,n, --Dx
  w,n,s,n,w,w,e,n,n,n,w,s,w,n,w,e, --Ex
  s,n,w,w,n,w,n,w,s,w,s,e,e,n,s,s, --Fx
--0 1 2 3 4 5 6 7 8 9 A B C D E F
}

--*****************************************************************************
local function ScanNPC()
--*****************************************************************************
    local Dir= memory.readbyte(0xC30D)
--    gui.text(60,126,string.format("%x",Dir))
    gui.box(60,134,68,142,0,"green")
    gui.text(63,135,NPC_dir[Dir])
    for i= 1, 9 do
        Dir=(Dir+1)%256
        gui.text(66+5*i,135,NPC_dir[Dir])
    end
end
Player (79)
Joined: 8/5/2007
Posts: 865
FatRatKnight wrote:
I've seen a monster cause blindness in World IV, but that's not exactly a nice location to get them. I picked up a list of monsters from a FAQ on GameFAQs, let's see what ctrl+F finds me...
As I see it, the real question is whether it affects your Agl. in all algorithms or just in hit percentage. Hmmm, come to think of it, it probably changes it for all algorithms since the SABER seems to do 1.5 times your Agl. worth of damage. From the way this game is programmed, I'm guessing they liked working with integers a lot more than fractions. That's just a guess, though. Aaaaaaanyway, it ought to save us some luck manipulation with the SAW, so I think I'll go for it.
FatRatKnight wrote:
Even a single ELIXIR should be good enough for us. Those things got 3 uses, so that equates to 15 P-BLASTs, 15 GAZEs, and 15 TELEPORs just for picking up one ELIXIR. This should be plenty, should we find the initial 5 uses for each ability too ineffective.
[whine]Yeah, but they're sooooo out of the way![/whine] I'll see what I can do.
FatRatKnight wrote:
By the way, the RNG values for abilities I was picking out were for a 3-mutant party and seeking out TELEPOR. I was picking only the optimal ones in this case. However, since you clearly have different plans, I'll pull some other RNG values you might want to consider:
Wow! This is the most encouraging post since you showed me your movie synced on my computer! First of all, I didn't even notice that the number you were listing in front of the ability was the slot it goes into. Second, I figured that you had just picked up the P-BLAST that was 7 spots away-- I didn't realize I could get it sooner than you did. I was seriously considering taking a break from this game because I thought I'd have to GAZE everything. With P-BLAST in slot 2, however, I have three RNG values that will replenish it. Speaking of GAZE, can you say a little more about how it works? In particular, you've implied that it doesn't work on undead creatures-- I'd like to know if that's true. I was under the impression that to consistently kill large groups of creatures with GAZE, you need a lot of Mana. Once you reach World 3 or so, enemies have a comparable Mana stat to yours, so the probability of wiping out a large group decreases significantly. I think P-BLAST is the way to go, but I'm interested in how GAZE might be used.
FatRatKnight wrote:
In the meantime, I created a function that tells you what direction an NPC is headed.
Best. TASing. Partner. Ever! I'm consistently blown away by how you find this stuff.
FatRatKnight wrote:
They seem biased towards going northwest...
Now I want to run this game at 1000% speed overnight so I can wake up and see all the villagers huddled in the northwest corner! :D I'm sick of being upstaged by you. You always get the cool RAM discoveries. So I've found my most useful memory address so far: the RNG that determines if you can run or not. It's 0xC323. Here's the associated table and Lua script (copied from you, of course):
local y,n= "Y","N"

local canrun={[0]= n,
--0 1 2 3 4 5 6 7 8 9 A B C D E F
    y,y,y,n,y,n,y,n,y,y,n,y,n,y,y, --0x
  y,y,n,n,n,y,y,n,y,y,y,y,n,n,y,n, --1x
  y,y,y,y,y,y,n,y,y,y,n,n,n,n,n,y, --2x
  y,y,y,n,y,y,n,n,n,y,y,y,n,n,y,y, --3x
  n,y,n,y,n,y,y,y,n,y,y,y,y,n,y,n, --4x
  n,y,y,n,n,n,y,n,n,y,n,n,y,y,n,y, --5x
  n,y,y,y,n,n,n,y,y,y,n,y,n,y,n,n, --6x
  y,y,n,n,y,n,y,n,y,n,y,n,n,y,y,y, --7x
  y,n,n,n,y,n,y,n,y,n,n,y,n,y,n,n, --8x
  n,n,y,y,y,n,n,y,n,n,n,n,y,y,n,y, --9x
  n,n,n,n,n,n,y,n,n,n,y,y,y,y,y,n, --Ax
  n,n,n,y,n,n,y,y,y,n,n,n,y,y,y,n, --Bx
  y,n,y,n,y,n,n,n,y,n,n,n,n,y,n,y, --Cx
  y,n,n,y,y,y,n,y,y,n,y,y,n,n,y,n, --Dx
  y,n,n,n,y,y,y,n,n,n,y,n,y,n,y,y, --Ex
  n,n,y,y,n,y,n,y,n,y,n,y,y,n,n,n  --Fx
--0 1 2 3 4 5 6 7 8 9 A B C D E F
}

--*****************************************************************************
local function showrun()
--*****************************************************************************
    local runRNG= memory.readbyte(0xC323)
    gui.text(63,135,canrun[runRNG])
end

while true do
	showrun()
	emu.frameadvance()
end
Do you seriously make these by hand, or is the process automated somehow? Long streaks of runnable battles (hexadecimal values): 6 in a row-- 20 5 in a row-- AA (and 21) 4 in a row-- 0E, 18, 2F, 7D, and 94 (and 22 and AB) (When I originally searched for streaks of 4 escapable battles, it omitted instances that spanned a line break. It wasn't really a mistake on my part-- I concatenated all the lines and did a search and it still passed right over them. Anyway, I've updated the above list to include all the streaks.) By seeking these values out, we can go long stretches without fighting battles. Chances are very good that running from 6 battles in a row is faster than running from 5 in a row, but if the battles happen to be bunched up near the start of C33B, then it might be faster to run from 5. Given the sparseness of the battles, I doubt it. It appears C323 is always either 3 or 4 greater than C30B, usually 3. I wonder why it's not consistent. Finally, it almost goes without saying that for bosses and inescapable battles, the RNG remains frozen until the battle ends. It isn't rolled or reset or anything funny like that.
Joined: 7/10/2007
Posts: 280
The analysis you guys are doing is awesome. I could be really wrong about an idea I have, but if defending a physical attack (Say, BYAKKO's SWORD) is a problem, couldn't you just pick up a shield from somewhere? I'm sure you could manipulate a full block.
Editor, Skilled player (1172)
Joined: 9/27/2008
Posts: 1085
Bobo the King wrote:
[whine]Yeah, but they're sooooo out of the way![/whine] I'll see what I can do.
It all comes down to this: Will grabbing an ELIXIR save the time it takes to get one?
Bobo the King wrote:
Speaking of GAZE, can you say a little more about how it works? [...]
GAZE (death) is PARA element. Any enemies with oPARA, oPAR/WP, oCHANGE, or oALL are immune, which basically means undeads, robots, a few other enemies, and bosses. As for its hit formula, it, as far as I can tell, works just like any other status (Edit: the word magic was a bad term). And from what I read on the GameFAQs board, it's a chance out of 100, there's a base 20% chance to miss, each point of Mana you have reduces this by 1%, and each point the target has raises the chance to miss by 1%. With 20 more Mana than what the target has, it should always hit, no manipulation needed. If you max out your Mana to 99, there are few monsters that has a chance to avoid it by having enough Mana. Even those with equal Mana to yours only has a 20% chance to survive. Those are good odds! But again, things that have particular immunities will always resist it. GameFAQs has so much information! Joy!
Bobo the King wrote:
Do you seriously make these by hand, or is the process automated somehow?
I actually do make them by hand. I sit there, staring at an NPC for several minutes (and somehow they didn't get creeped out), while watching the RAM address and marking down what direction they did go in, for all 256 values. If I knew how to disassemble the game, I would be able to automate this a bit, but manual observation is all I got.
Tristal wrote:
The analysis you guys are doing is awesome. I could be really wrong about an idea I have, but if defending a physical attack (Say, BYAKKO's SWORD) is a problem, couldn't you just pick up a shield from somewhere? I'm sure you could manipulate a full block.
First, the RNG is particularly unforgiving. It may well be impossible due to how the RNG works to consistently block the SWORD attacks. Second, unless the shield protects against spells, what's stopping the ICE from going through? Lastly, we eat up a turn using the shield. Myself, I'm hoping a monster's SAW takes care of the problem instantly. EDIT: I believe I spotted the RNG used in determining how the ability uses are shuffled: 0xC30E - Picks what type of effect to place on each ability's uses 0xC326 - Incremented at every full decrease (the - in your table). Probably broken. 0xC334 - Incremented at every increase (the + in your table). Probably broken.
Player (79)
Joined: 8/5/2007
Posts: 865
Tristal wrote:
The analysis you guys are doing is awesome.
Thanks! Encouragement is always welcome and I'm glad to see it's not just FatRatKnight and I reading this thread!
Tristal wrote:
I could be really wrong about an idea I have, but if defending a physical attack (Say, BYAKKO's SWORD) is a problem, couldn't you just pick up a shield from somewhere? I'm sure you could manipulate a full block.
I actually thought this was a really good idea. All I really needed to do was use ARMOR once to survive his SWORD attacks, use a SHIELD whenever needed to survive his ICE attacks, and either heal or deal damage whenever he uses SPHERE. It just so happens that you can buy a FLAME SHIELD in the hidden town on World 3. According to RPaulson's FAQ, this shield is supposed to protect against ICE attacks. I bought the shield, took it into battle, used it, and... ... BYAK-KO's ICE attack did the same damage as always, killing me. Oh well. It's possible that "like protects against like", in which case I would need an ICE SHIELD, but that doesn't show up until World 4, so I'm screwed. But now for some tangential good news. I didn't have enough GP in my saved game, so I had no easy way to test it until I figured out how to cheat. I'd previously looked for the address where your GP is stored, but nothing came up. This time, I found it. Your GP is stored in addresses CC8D, CC8E, and CC8F. I encourage you to punch those into VBA's RAM search option before reading onward. Did you do it? It didn't work, did it? The values don't make sense, do they? Okay, now click the "Hexadecimal" Data Type / Display radio button in the lower-right hand corner, then look at those three bytes again. Yes, you're reading that correctly-- the data is stored in hexadecimal but read in decimal. Were the people who programmed this game mental patients? It baffles me that this game even runs! I even did a little test, changing the first byte to AB and the game accepted it. My GP was AB5283. Try to make sense of that! But as backwards as the programming is, the important thing is that we can now manipulate GP in case we wish to test if buying something might help. The other thing I worked on was trying to find the battle RNG. No such luck. I found a handful of bytes that change during battle, but most of them changed wildly unpredictably or far too predictably. It looks like the battle system works on a completely different RNG system (one that doesn't simply increment by 1 every time it's called) and may even have been written by a competent programmer. Even if I could find the RNG, it might not do much good. The battle RNG always resets to a fixed state upon reset, be it soft or hard. Whenever I reset, BYAK-KO opens with an ICE attack that does 104 damage. This RNG can only be manipulated by fighting other battles. Since I'm looking to force BYAK-KO to use SPHERE three times in a row, that could easily amount to fighting 27 or more battles. It might be fewer than that, but it would still be substantial. I'm starting to consider emailing the person behind towerreversed to ask for suggestions. It seems that for almost any strategy, BYAK-KO is the toughest boss. Once we get past him, we can SAW everything while running from random encounters. Of course, bringing a monster along would fell him instantly, but I stubbornly maintain that would be inelegant.
1 2 3
8 9