This is a 16 frame improvement to the published TAS of this game. See the author's comments for that TAS for some details into the physics of the game.
Emulator used: FCEUX 2.20.20
Aims for fastest possible time
MESHUGGAH's comments
I watched Randil's previously published TAS to see if it's possible to improve either the end of level fights or reduce the position sacrifices in 2 levels. It was already perfect but I found you can reach the rocket launcher fairly earlier by jumping from proning.
The only place where this saves time is the final level's final rocket launcher because the spawn time of the enemies are timed and unmanipulatable.
I've asked Randil to submit this run and listing me as a co-author, this is the result.
See you until my next TAS =)
Randil's comments
I don't have that much to say here since I didn't really have a hand in this submission other than submitting it. I will say though than I'm glad that other TASers have the same taste in games that I have :) I think this submission goes to show that it's hard to squeeze out frames from this TAS. I hope you like it!
I'm also happily surprised by the amount of submissions with my name on we've had recently considering that I haven't lifted a finger in terms of TASing in at least a year. :)
A fair note, the TAS aims for shortest input time and doesn't tries to reduce the lag frames at the end of the final level (the sprite spam for the destroyed rocket), so the credits only starts 13 frames faster.
Those lag frames appear ~10 seconds after last input.
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Even the fact that I can go game over is new to me. I will check it out. I only tried to minimalize the position sacrifices in the levels (as I stated in the submission text).
edit: I know that if someone dies, the camera doesn't rolls forward. So you mean you somehow do game over fast enough to while keep it rolling by the time Red finishes climbing the ladder?
edit2: ahaaa, so getting game over doesn't stops the camera. Yes, that would save 12 + blue sacrifices frames (my raw guess is ~50 frames total).
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Joined: 4/17/2010
Posts: 11487
Location: Lake Chargoggagoggmanchauggagoggchaubunagungamaugg
MESHUGGAH: See? People can miss things.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
It took me nearly a day to realize this couldn't be more ironic. (judging you for something that's not even part of your role: fallin in to this mistake myself here by not looking for the informations (Arc's 2010 improvement post) of this game's thread; not taking this submission as seriously as I did with other TASes)
I'm planning to make another stab on this game from the beginning probably soon. This will be a good reason for me to finally stop doing level 1 WIPs and also for finally making a newbie HUD template (which will probably use this game as an example).
edit: like this. Unfortunately still requires some LUA scripting and programming knowledge but with some tweaking you should be able to use it.
Language: lua
--[[ MESHUGGAH's HUD Template
This template features an example to NES Rush'n Attack
v contains RAM addresses of position values (hexadecimal)
p positon values stored here after reading memory from location v (memory.readbyte)
pp previous position values stored here to compare with new positions on next frame
--]]
-- Variable array: P1 X, P1 Y, P2 X, P2 Y, Camera X
local v = {
0x503,
0x505,
0x523,
0x525,
0x31
}
-- data structure for rush'n attack, 32 bytes per object
-- question mark notes boolean
-- 0x500 alive?, state, 02, X, subX, Y, subY, 08, 09, 0A, 0B, 0C, 0D, palette, sprite
-- 0x510 in jump?, 02, 03, 04, 05, 06, 07, 08, 09, 0A, 0B, 0C, 0D, 0E, sprite timer
-- Position array
local p = {} for i = 1, table.getn(v) do p[i] = 0 end
-- Previous position array
local pp = {} for k,v in pairs(p) do pp[k] = v end
-----------------------------------------------------------------------
local function objects()
-- display ID if alive
for i = 0, 15 do
if memory.readbyte(0x500+i*32) ~= 0 then
gui.text(memory.readbyte(v[1]+i*32),memory.readbyte(v[2]+i*32)+40,i,"#FFFFFFFF","#FF000080")
end
end
--gui.text(1,9,
end
local function hud()
-- Display object's ID and a simple box around them (not actual hitbox positions)
objects()
-- Read new positions
for i = 1, table.getn(v) do p[i] = memory.readbyte(v[i]) end
-- Anything else you would like to display?
gui.text(1,1,string.format("CamX %3d (%d)",p[5],pp[5]-p[5]),"#FFFFFFFF","#00000080")
-- Display positions for players
gui.text(p[1],p[2]+48,string.format("X %3d (%d)\nY %d (%d)",p[1],pp[1]-p[1],p[2],pp[2]-p[2]),"#FFFFFFFF","#00000080")
gui.text(p[3],p[4]+48,string.format("X %3d (%d)\nY %d (%d)",p[3],pp[3]-p[3],p[4],pp[4]-p[4]),"#FFFFFFFF","#00000080")
-- Store positions to compare them in next frame
for k,v in pairs(p) do pp[k] = v end
end
emu.registerafter(hud)
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
I currently hold the real-time speedrun for this. I'm going to examine this a bit more as well. I'll let you know if I find anything. :)
EDIT: Why was this downgraded to the vault? :(
Super Mario Bros. console speedrunner
- Andrew Gardikis