Posts for TheAxeMan

Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
The progress you guys had made so far on this game was very promising. So I hope you get back into it. About motivation, I don't know how the really prolific TASers do it. But I go through different periods of motivation and laziness and I think that taking breaks can be very helpful. You come back to the project and suddenly come up with several new ideas and realize the problems you were struggling with weren't so bad after all.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Awesome! The fastest and glitchiest Final Fantasy run by far.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Cool, thanks. Looks like this uses the lua script but not the rom hack. That's fine, the rom hack just helps a little in the practice and intermediate races.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Is anyone planning on making an encode with my camhack?
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
I can't get a perfect camhack but I am close to getting one that mostly keeps up. I just need to fix up the silly race. Need to change the hack a bit there because everything you know is wrong. The basic strategy is to use the rom hack I described earlier to make it scroll when the marble is falling. I wasn't able to produce that result with lua. I am also making lua code that reduces the threshold to start scrolling. I was able to fix the desync in aerial race by hexing one value. Done! The following lua script syncs whether or not you do the hack described earlier. That will allow for more scrolling. I should point out that this does do a little more than just change graphics; in the silly race in particular one of the mini marbles gets crushed and the bird pattern is different. The overall finish is at the same time but the score is different.
--Marble Madness camhack script for Aglar's run.
--Script by TheAxeMan
--
--I usually put the rewind code in a separate module but combined it here for distribution.
--
--This module is designed to provide "frame rewind" where
--holding down R and pressing frame advance once will bring
--you back one frame. You should be able to pick up from
--there with no trouble.

messagesToDisplay = {}
dispCount = 0
newframe = false

gui.register(
function()
  dispCount = dispCount+1
  for i,m in pairs(messagesToDisplay) do
    gui.text(m.x, m.y, m.text)
  end;
  newframe = false
end
)

local function addMessage(x, y, text)
  table.insert(messagesToDisplay, {x=x, y=y, text=text})
end;
local function clearMessages()
  messagesToDisplay = {}
end;

local function readRewindButton()
  keysPressed = input.get()
  return keysPressed["R"];
end;


rewindSaveStateBuffer = {}
rewindInputBuffer = {}
rewindBufferDepth = 0
rewindLastFramecount = movie.framecount()
--This gets set to "rewind" when rewinding
rewindLastFrameAction = "advance"


function manageRewind()
  if readRewindButton() then
    if rewindBufferDepth > 2 then
      addMessage(10,10, "rewinding")
      local loadIndex = movie.framecount()-2
      savestate.load(rewindSaveStateBuffer[loadIndex])
      joypad.set(1, rewindInputBuffer[loadIndex+1])
      rewindBufferDepth = rewindBufferDepth-1
      --FCEU.frameadvance()
      --clearMessages()
      --newframe=true
    elseif rewindBufferDepth <= 2 then
      local loadIndex = movie.framecount()-1
      savestate.load(rewindSaveStateBuffer[loadIndex])
      --joypad.set(1, rewindInputBuffer[loadIndex])
      addMessage(10,10, "end of buffer")
    end;
  else
    --Add to buffer
    local bufferIndex = movie.framecount()
    if rewindSaveStateBuffer[bufferIndex] == nil then
      rewindSaveStateBuffer[bufferIndex] = savestate.create()
    end;
    savestate.save(rewindSaveStateBuffer[bufferIndex])
    rewindInputBuffer[bufferIndex] = joypad.read(1)
    rewindBufferDepth = rewindBufferDepth + 1

  end;
  addMessage(10,20, "Buffer depth is "..rewindBufferDepth)

end;


function frameAdvanceWithRewind()
  FCEU.frameadvance()
  manageRewind();
  clearMessages()
  newframe=true
end;
function pauseWithRewind()
  FCEU.pause()
  manageRewind();
end;

FCEU.pause()

while true do
  --Aggressively move screen down
  scrollpos = 50
  --Be less aggressive at beginning of intermediate race
  if movie.framecount() > 3050 and movie.framecount() < 3480 then scrollpos=100 end; 
  --Don't do this during part of aerial race
  if movie.framecount() > 5100 and movie.framecount() < 5460 then scrollpos=300 end;
  --if movie.framecount() > 5100 and movie.framecount() < 6000 then scrollpos=300 end;
  --In the Silly race everything you know is wrong
  if movie.framecount() > 6500 and movie.framecount() < 7800 then scrollpos = 300 end;
  --Disable during Ultimate race to avoid desync
  if movie.framecount() > 8400 then scrollpos=300 end;

  relpos = memory.readbyte(0x0450)
  if relpos > scrollpos then
    memory.writebyte(0x0450, 155)
  end;

  --Special aerial fix
  if movie.framecount() == 5500 then
    memory.writebyte(0x00A0, 0x33)
  end;

  --In the Silly race everything you know is wrong
  if movie.framecount() > 6500 and movie.framecount() < 7800 then
      --This forces screen to just keep scrolling.
      memory.writebyte(0x0458, 127)
  end;
    
  frameAdvanceWithRewind()
end;
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Very nice and unexpected improvement. I'll give camhacking a shot. Looks like the key is that the screen does not scroll while the marble is falling, only while it is rolling. If it's possible to change that logic it might be possible. Ok, looks like there are two problems. First, the screen doesn't scroll when the marble is falling. I am still figuring out the mechanics but try memwatching $0080. Seems that when it's set to 1, the screen is allowed to scroll but when set to 0 it won't scroll. Second, the screen only scrolls one step at a time. But sometimes the action moves faster than that. This is harder to fix but it might be enough to change the threshold that causes the screen to scroll. Edit: One simple hack: Hex edit bytes $0B8E and $0B8F in the rom from B5 80 to A9 01. That makes the screen scroll while the marble is falling. Unfortunately it desyncs in Aerial race because it causes screen to scroll up a little more. All other races are fine though. The marble is still offscreen quite a bit though.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
That's pretty cool. Lua is fun, isn't it.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
I haven't seen this game before. The concept is utterly stupid; an 8-bit game based on a show where the whole point was checking out hardbodied individuals in spandex. Now I don't think anyone got off on Leisure Suit Larry, but it was absolutely hilarious. Here there's no plot and not even any background music. But x2poet clearly put some work into this so I'll vote meh instead of no.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Awesome, that's always cool to hear. But probably a good choice to get into TASing with a different game because this one is tough. Still, even simple games can be complicated to TAS so you should pick one you like. By the way, I took a break from this game to do an improvement to Final Fantasy that I had been thinking about for a while. Now that that's published I will get back in to this shortly. I've found that taking breaks like this forces me slow down and gives me time to think up new ideas.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
That's right, damage squares don't advance the counter that controls when you get an encounter. So in Gurgu volcano I go out of my way to get a few more steps on lava as this cuts out an encounter. If I took one more step before reaching the last staircase, I would meet some enemies. All of the encounters are exactly the same as the last run. But different numbers of enemies show up due to different luck.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Interesting thread. But their metric is different from the one I was going for (most frames with no buttons pressed). I press the button for one frame then release it. Then I press it again for the next step. Counting their way I could have gotten a lot fewer presses by holding the dir button down. If I did that I could probably beat 2.7%.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Personman wrote:
Is it totally obvious that skipping it the second time but not the first isn't better, or is that worth trying too?
Good question. Yes, I considered this. Skipping luck on Garland cuts the battle by a round, saving about 200 frames. The only advantage to skipping luck on Eye is because it allows for fewer preemptive battles in Ice Cave. But the impact depends on whether or not I got luck earlier. If you get luck both times you can avoid even more preemptives. When I tried skipping luck on the Eye I was about 100 frames further ahead after Ice Cave. But some of that got lost in the Sea Shrine. Then later on in the Sky Palace and Gurgu I had an extra loop of the RNG later on that cost 512 fr. There's only one point in the loop where I can go first and have BANE work against a boss. So if I can't run from battle fast enough and I slip past that before Kary, the only way to get it is to loop back around, taking 512 frames longer. After getting luck on Garland, getting luck again on the Eye allowed for avoiding more preemptives. That's why I did it in the last run.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Thanks everyone. About the short sword, it really has to be the second person because otherwise there is no good possibility. As it is, the wizards fight pushes its luck to the limit. As far as movie length ratio, I seem to remember some games where a movie was obsoleted by a few frames in heated competition. I think some Mario runs do this.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Say, after submitting my new run and looking at the times, it seems that the time is wrong on the description of this run. Is this an artifact of fcm translation or something? FCEU tells me it should be 1:10:09.25. Edit: Wait, after getting out a calculator and figuring 60 fps, this number is right and FCEUX is wrong.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
The test run had the same plan with skipping the ball of fire. I discovered that dying was unnecessary to activate the glitch. When making a TAS it pays not to forget about the Power and Reset buttons! The reason the trick is only used once is because the slope climbing glitch requires going to the menu. This cancels out the effects of the sword charge glitch. Climbing right up the mountain saves more time, even with the backtracking. So I use the slope glitch instead of the sword charge glitch. As for Stom, here is what the hitboxes look like. The hitbox for his attack is the same as the guards that I fight at Mt Sabre North. In either case, there is a 2-pixel margin on either side where you can hit him but not get hit back. I bet a skilled player could do it in real time. This also shows a bit of what I am doing with lua scripting.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Merry Christmas! Here's the WIP as promised, up to Portoa. http://dehacked.2y.net/microstorage.php/info/1096047483/Crystalis-Final-Portoa.fm2 At this point I am 43 seconds ahead of the test run and 4:48 ahead of the current published run. It's great to hear about so many people interested in this. That got me quite a bit more motivated.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Congratulations on finishing another classic RPG! It's long but seems very well planned to me.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
I'm still working on this and I'm up in Mt Sabre North. Over 30 seconds ahead of test run now. I was planning on posting a WIP when I get to the next area. I've just finished the analysis of the best way to get the next lvlup. After that everything is pretty straightforward for a bit.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Voted no. The antics are entertaining for a while but not enough to fill 10 minutes of extra time. My favorite was the 1-up grab in 8-1. The concept is pretty neat though and this should live on in gruefood delight or the concept video list.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
That is pretty strange. Turn order is very important so it's definitely worthwhile to figure this out. Good luck. By the way, in Final Fantasy 1 the battle order is completely random. It starts out with a list of the nine enemy slots followed by the four heroes. Then it picks two slots at random and swaps them. After 13 swaps you have your turn order (empty slots are just skipped). This is why the enemies get to go before you more often than not, even with a very powerful party.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Awesome, this does a good job of showing what luck will look like. It seems like a really good idea to make another test run that goes through using the battle methods you guys have been discussing. After you've figured out how difficult it is to make each manipulation go your way you can work on optimizing speed. After watching this and hearing your complaints about Steward I had an idea. Have you considered equipping King Sword to help with Steward and his skeleton? It wouldn't take much time and you are in the inventory anyway to use TELEPORT. Seems like it would pay off if it saved a long manipulation pause and a couple battle actions.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Added some more to my last post. Mostly random ideas.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Awesome, this looks like it is really coming together. Good luck with testing. I think that WHIPping could have another advantage. If you have WHIPs at BYAK-KO then could you beat him without STONE? That would save the trip to the hidden sky village, so it could save time even if it takes a lot of turns. Edit: More ideas: -Weapon crits; Could any of these be useful? The big game-breaker would be keeping KING sword. But there are other weapons that can deliver crits in limited cases. Not enough money for most of them though. -Does COUNTER work if the hit kills you? Could be useful for several fights. -There is a HYPER cannon in the skyscraper that kills just about anything instantly. It might be too far out of the way to be profitable though. -Use equipment to boost stats? The GIANT gauntlet and GETA shoes are each worth +10 Strength. You can buy GIANT gauntlet in world 3 hidden town and GETA shoes in world 4 Northeast down. -There's also a GIANT gauntlet in world 3 jail but it would require walking a bit out of jail. Using teleport here forces you to go through some of the tower and get your bike again, so fighting it out through here could be profitable. -Confusion, paralysis or sleep? Also probably out due to finances. Also all the bosses are immune to these since they are all the same element as death. There do seem to be some high-level monster abilities that can confuse without elemental limitations though. If you could get a monster with the stone version of GAZE you could use it on SEI-RYU.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Awesome, glad I could be helpful. I did a test run a long time ago and used POWER on SEI-RYU. But I hadn't analyzed the game nearly as well as you guys. The possibility of using less STONE sounds promising because it's quite a bit out of the way in World 3. It isn't very far out of the way in world 4, in the northeast town. Unfortunately there don't seem to be a lot of other options available for BYAK-KO since he's immune to death and you don't have SAW. This game is definitely more complex than Final Fantasy for a TAS. But it's more because there simply aren't many worthwhile and easily-obtainable abilities. In this game you can easily acquire several instant death moves and there are many ways to pump up your party without spending much time. But in either case luck manipulation takes a lot of work.
Ambassador, Experienced Forum User, Published Author, Experienced player (698)
Joined: 7/17/2004
Posts: 985
Location: The FLOATING CASTLE
Glad to see some progress on this. FatRatKnight's testrun was amazing and it would be a shame not to tune this up for publication. Sounds like I should have posted before to keep you guys motivated. Anyway, having done it myself I know that a TAS on an RPG is a lot of work. The key is to stay organized; keep lots of notes and spreadsheets. As a team may be a good idea to keep some shared notes on Google Docs. Adelikat likes Google Code for this but I'm not familiar with it. The resources page is good too. The chart of fights is a really good idea, you should expand to track any method that you would consider and maybe what stats you'd need and how long the fight would take. To me it seems like a flow that avoids more fights should be faster. It looks like once you get the abilities you need and some mana on one char there shouldn't be much more reason to fight. Have you considered using POWER+battle sword on SEI-RYU? You wouldn't need to use up your P-BLAST shots. Also, what about a human SAW user with stats pumped from STRONG and AGILITY potions? Not sure how that would compare to grooming a mutant through battle.