This beats the current published run by 307 frames (~5.1 seconds). Most time was gained from better preicision.
Due to still having Snake rattle'n roll in fresh memory I decided to also take up this game since they're kind of similar due the isometric overview and quite similar controls. Also it's a short game and the run only took a few days to do.
The previous runs were seemly done with the bad rom dump so I switched to the rom I assume is the good one but I'm not entirely sure, it syncs with both dumps though so it's not a big deal.

Improvements

1 frame was saved in the name entry.
LevelFrames savedTotal frames saved
Practice race1617
Beginner race1633
Intermediate race6497
Aerial race64161
Silly race96257
Ultimate race50307

Level comments

A level can only be completed in multiples of 16 frames.

Practice race

Better blind stering, the frame rule knocked me back a few frames.

Beginner race

Quite limited level due to the frame rule of the bridge. The time was almost all gained in the part between the two pipes.

Intermediate race

Better stering overall, not very viable in the second half though.

Aerial race

Better stering... yeah that's it.

Silly race

Small route change in the beginning and better stering.

Ultimate race

In this level the goal is to make the screen scroll down as fast possible which saved 32 frames. I also ended input earlier, I could've ended it even earlier but then the ingame completion for that level would be 16 frames slower so I decied to have it this way.

Thanks...

goes to the previous autors for finding shortcuts and stuff.

DarkKobold: Claiming

mmarks: Added YouTube Module
mmarks: Added Streaming DailyMotion + Download (Undie's encode)

DarkKobold: Good improvement, obvious acceptance.

GabCM: Mein!


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15576
Location: 127.0.0.1
This topic is for the purpose of discussing #2986: Aglar's NES Marble Madness in 02:43.01
Banned User
Joined: 8/30/2010
Posts: 500
Location: Argentina Bs. As.
Starting my own HD encode (Streaming)
[18:51] <scrimpy> Oh, nothing [18:51] <mmarks> oh [18:51] <Nach> I think scrimpy is just jealous of you mmarks
Joined: 7/2/2007
Posts: 3960
Looked good to me. I don't suppose a camhack encode that keeps the marble onscreen would be possible?
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Joined: 2/20/2010
Posts: 209
Location: I'm in space
Derakon wrote:
Looked good to me. I don't suppose a camhack encode that keeps the marble onscreen would be possible?
I second this, but is such a thing even possible?
Oh, play it cool. Play it cool. Here come the space cops.
NitroGenesis
He/Him
Editor, Experienced player (556)
Joined: 12/24/2009
Posts: 1873
The game's pacing is ok, but of course the fact that you're offscreen 75% of the run kind of hampered that. Nobody is denying that it's optimal, but a camhack would be nice. The run holds up on its own, so I'm not complaining if we don't get one. Voting yes.
YoungJ1997lol wrote:
Normally i would say Yes, but thennI thought "its not the same hack" so ill stick with meh.
Player (137)
Joined: 9/18/2007
Posts: 389
Nice improvement. Yes vote. (My camhacking attempts failed. 0x30 is the little-endian 2-byte vertical map position, writing to it renders a garbage map and leads to movie desync, and the marble will be at the wrong position.)
Player (121)
Joined: 2/11/2007
Posts: 1522
Yes vote and camhack vote though I guess it may not be possible.
I make a comic with no image files and you should read it. While there is a lower class, I am in it, and while there is a criminal element I am of it, and while there is a soul in prison, I am not free. -Eugene Debs
Ambassador, Experienced player (709)
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.
Joined: 6/8/2010
Posts: 21
Great TAS. I have to agree that it would be more entertaining if more of the run was on-screen, but still very quick and fun. Voted yes.
Ambassador, Experienced player (709)
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;
Expert player (3643)
Joined: 11/9/2007
Posts: 375
Location: Varberg, Sweden
TheAxeMan wrote:
camhack script...
Looks really nice! I suppose the run will be more enjoyable to most people using this, even though I think staying out of the the screen as much as possible also has its charm:) For that work, you truly deserved a higher score than me!
feos wrote:
Only Aglar can improve this now.
mklip2001
He/Him
Editor
Joined: 6/23/2009
Posts: 2227
Location: Georgia, USA
It looks strange to see the marble dizzy so frequently, though it's also pretty impressive. Nice job with the improvement! You saved much more than I thought was still possible with this game.
Used to be a frequent submissions commenter. My new computer has had some issues running emulators, so I've been here more sporadically. Still haven't gotten around to actually TASing yet... I was going to improve Kid Dracula for GB. It seems I was beaten to it, though, with a recent awesome run by Hetfield90 and StarvinStruthers. (http://tasvideos.org/2928M.html.) Thanks to goofydylan8 for running Gargoyle's Quest 2 because I mentioned the game! (http://tasvideos.org/2001M.html) Thanks to feos and MESHUGGAH for taking up runs of Duck Tales 2 because of my old signature! Thanks also to Samsara for finishing a Treasure Master run. From the submission comments:
Shoutouts and thanks to mklip2001 for arguably being the nicest and most supportive person on the forums.
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Having the marble offscreen most of the time has its charm indeed, but I by far prefer seeing the gameplay to knowing about it.
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Joined: 5/29/2004
Posts: 757
Definitely a Yes vote! I was totally entertained, but I do agree that a camhack would make it a bit easier to take it all in. Still had everything it needed to be totally entertaining all throughout. Mr. Kelly R. Flewin
Mr. Kelly R. Flewin Just another random gamer ---- <OmnipotentEntity> How do you people get bored in the span of 10 seconds? Worst ADD ever.
Experienced player (702)
Joined: 2/19/2006
Posts: 742
Location: Quincy, MA
I speedran this quite a bit on console. There is one thing that might be a time saver. In level 2, the part where you have to wait for the wall to fall down so you can cross... If you kill yourself in a very specific way, I think it might be possible to save time overall here. Anyway, definite yes. This run is a difficult one to improve.
Super Mario Bros. console speedrunner - Andrew Gardikis
Personman
Other
Joined: 4/20/2008
Posts: 465
Yes vote, nice and short, nothing too amazing but I'm glad it's here. However, it brings up an issue that I think needs to be dealt with better. The rules say that we care about timing until input ends. However, there's a large segment of the community that thinks ending input 'early' (getting a worse in-game time for the sake of a better TAS time) is cheating or wrong or bad or something. I would be sad if we changed the rule, in my opinion, as I love early input-end tricks. But more important to me is that we have consistency. Right now the only thing keeping me from simply truncating Aglar's movie file and resubmitting this as an improvement is some vague sense of common decency and community standards. That's not good! Not that we shouldn't have those, but the rules shouldn't encourage you to go against them as they clearly do at the moment.
A warb degombs the brangy. Your gitch zanks and leils the warb.
Joined: 7/2/2007
Posts: 3960
Ehh, I don't think the rules need to be proofed against this, honestly. An improvement that consisted solely of truncating input that loses game time in exchange for a shorter input file wouldn't be published anyway. The community would see to that.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Personman
Other
Joined: 4/20/2008
Posts: 465
Well, yeah, but that's the problem. By the rules, it's a better movie, and it's the one that should be on the site. But because some people choose to intentionally make suboptimal movies because of the stigma against ending input early, we end up being unable to publish the actual state of the art for a game since it would be so rude to let people beat other people with trivial changes that the original submitter even acknowledged knowing about.
A warb degombs the brangy. Your gitch zanks and leils the warb.
Skilled player (1652)
Joined: 11/15/2004
Posts: 2202
Location: Killjoy
Personman wrote:
However, there's a large segment of the community that thinks ending input 'early' (getting a worse in-game time for the sake of a better TAS time) is cheating or wrong or bad or something.
Uh, where is this large segment?
Personman wrote:
Right now the only thing keeping me from simply truncating Aglar's movie file and resubmitting this as an improvement is...
...the administrators and judges. That movie would be canceled immediately (under the 3 day limit) for copying someone's input. We have watchdogs here.
Sage advice from a friend of Jim: So put your tinfoil hat back in the closet, open your eyes to the truth, and realize that the government is in fact causing austismal cancer with it's 9/11 fluoride vaccinations of your water supply.
adelikat
He/Him
Emulator Coder, Site Developer, Site Owner, Expert player (3573)
Joined: 11/3/2004
Posts: 4754
Location: Tennessee
Actually Aglar has already been the victom of this. Someone removed a blank frame that was in his published Donkey Kong Jr. TAS. It was prompty dealt with. When to end input often has no clear answer. Therefore we have always let the author make that decision for themselves. In my Marble Madness TASes, I always tried to end input as early as possible without sacrificing the game completion time. This makes sense because otherwise you could end input earlier but watch as the ball slowly crawl over the finish line much later.
It's hard to look this good. My TAS projects
Joined: 6/20/2008
Posts: 150
Does that constitute a "contains speed for entertainment tradeoff?" he said, tongue in cheek.
Banned User
Joined: 3/10/2004
Posts: 7698
Location: Finland
adelikat wrote:
When to end input often has no clear answer. Therefore we have always let the author make that decision for themselves.
Perhaps there should be a more unambiguous guideline. I have always liked the "no further input appended to the end of the movie can make the game end faster or slower (or cause the game to not end at all)" principle.
Patashu
He/Him
Joined: 10/2/2005
Posts: 4043
Warp wrote:
adelikat wrote:
When to end input often has no clear answer. Therefore we have always let the author make that decision for themselves.
Perhaps there should be a more unambiguous guideline. I have always liked the "no further input appended to the end of the movie can make the game end faster or slower (or cause the game to not end at all)" principle.
You can always append a reset or soft reset. ;)
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Editor, Player (44)
Joined: 7/11/2010
Posts: 1029
I always thought the technique used to end input was part of the category of the run. That is, "fastest to end input" and "fastest to game completion" are two different categories (the first obviously having a shorter time via TASvideos timing, but the second, which isn't allowed to end input until after the game is completed, being more interesting for some games). Obviously, you wouldn't publish both (unless for some reason they had entirely different routes; wasn't there an April Fool's TAS that completed half a game with basically no input at all, just luck manipulation so that the first half of the game would complete itself from there?), but you'd choose whichever category was better. So all that really needs doing is to add a category explaining the issue, and the run suddenly isn't suboptimal any more.