1 2
10 11 12 13
MESHUGGAH
Other
Skilled player (1918)
Joined: 11/14/2009
Posts: 1353
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
Scumtron wrote:
Don't have access to TAS-stuff at the moment so I'll just try to post from memory. In the no-input, mid-jump frames press R twice before moving L at 7*93 (don't remember hundreds value) and then another frame of L at 7*12. This results in reaching the 2-2B exit on frame 7*36 instead of 7*37.
You are right! It's 1 frame faster. I've uploaded the WIP. But now we are at timer value 1 for 3-3 boss death.
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Player (154)
Joined: 5/1/2006
Posts: 150
Removing input on frames 6994, 6995 solves the 3-3 timer problem, woo. Seems that getting hit as the 2-3 boss dies (so $75=4) makes the hit on the 3-3 boss avoidable, and I have no idea why. I haven't looked into whether $75=0 could be in any way beneficial (or detrimental) for level 4 though.
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11479
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
HOLY SHIT you guys are deadly! Is there anything I can do code-wise?
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.
Player (154)
Joined: 5/1/2006
Posts: 150
Idunno, I only stuck my nose into this to try and help with the timer problem that was gumming up the works. I'll give it a look again after Meshuggah resynchs things back to 4-3 (or wherever).
MESHUGGAH
Other
Skilled player (1918)
Joined: 11/14/2009
Posts: 1353
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
Scumtron wrote:
Removing input on frames 6994, 6995 solves the 3-3 timer problem, woo. Seems that getting hit as the 2-3 boss dies (so $75=4) makes the hit on the 3-3 boss avoidable, and I have no idea why. I haven't looked into whether $75=0 could be in any way beneficial (or detrimental) for level 4 though.
Oh my fucking god, how could I not see that (6994 useless interrupt). Regarding "key frames"
    1-1 through 2-2 last screen start everything seems to be optimized 2-2 last screen: the only possible improvement would be manipulating the knife thrower (bitch) and last 2 enemy, which seems unlikely (without an extra interrupt which isn't feasable for us) 3-1: I've tested nearly all other routes, this deemed to be the best, so I call it optimized. 3-2: Same, and also note I got insanely good luck for both the bird twice time and all the bullets/enemies towards regarding positioning and the number of required backsteps/sacrifices to delay enemies. A very small change (0.5px or interrupting an enemy earlier) leads to desync and the impossibility to resync without bigger sacrifices.
Uploaded movie which surpass the fucking timer thanks to scumtron!
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Player (154)
Joined: 5/1/2006
Posts: 150
Here's a little function that would have helped find the ''useless'' interrupts earlier:
Language: lua

cnt=0 function JugFinder() Interrupt = AND(memory.readbyte(0x4C),0x40) if (Interrupt > 0) then cnt=cnt+1 else cnt = 0 end if (cnt > 1) and (memory.readbyte(0x1FC) == 0x87) and (memory.readbyte(0x1F3) == 0xD8) then emu.pause() gui.text(1,226,cnt) end end
Maybe it will have some use in the future. Without diving in deep and likely just repeating things you've already tried, I'll have to agree that the early levels should be well optimized at this point. Though I still might spend some time looking for ways to use the $75 thing. Edit: Found the mess of a script I made a couple years ago to look for places where $75=4 might usefully affect stuff
Language: lua

NGtest = savestate.create() local function check75(RAM) if memory.readbyte(RAM) > 0x10 then --excludes normal enemy spawns from the check eX=RAM+0x60;eXf=RAM+0x58 --offset for enemy X position eY=RAM+0x80;eYf=RAM+0x78 --offset for enemy Y position ram=RAM;blah=1 end end while true do savestate.save(NGtest) emu.frameadvance() memory.register(0x400, 8, check75) if blah == 1 then eXa=memory.readbyte(eX)+(memory.readbyte(eXf)/256) eYa=memory.readbyte(eY)+(memory.readbyte(eYf)/256) savestate.load(NGtest) memory.writebyte(0x75, 4) --simulates the glitch emu.frameadvance() eXb=memory.readbyte(eX)+(memory.readbyte(eXf)/256) eYb=memory.readbyte(eY)+(memory.readbyte(eYf)/256) if eXa ~= eXb or eYa ~= eYb then frame=emu.framecount();xdif=eXa-eXb;ydif=eYa-eYb print(string.format("%05d, %02X, %4.2f, %4.2f",frame,ram,xdif,ydif)) --when glitch has an effect, output frame count, column for enemy data, positional discrepancy end savestate.load(NGtest) emu.frameadvance() end blah=0 end
Running this over the current pacifist WIP input doesn't seem to point to any obvious places where $75 looks useful, but since I never bothered to find out why it affects some projectiles and not others, I don't really know if some subtle change could change that. MESHUGGAH: Can you think of any tossed/thrown/shot/spit objects where a 2 or 3 pixel change might matter? Another edit: It pains me to bring this up, but has anybody considered that to be strictly pacifist, the demon's head should not be killed?
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11479
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
What's demon's head?
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.
Player (154)
Joined: 5/1/2006
Posts: 150
The final boss: it has the head part that you have to kill so the 'core' will drop and be killed quickly as possible or you can leave it alone and messily damage-boost onto the thing and kill it from there.
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11479
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
Ha! As long as it can be left alive, we should leave it! Would add more interest to the run, many people don't even know about that.
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.
MESHUGGAH
Other
Skilled player (1918)
Joined: 11/14/2009
Posts: 1353
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
Projectiles that would be nice to manipulate
    2-2 first screen bullet slot 4 - to avoid interrupt or get a half pixel to left 3-1 sprite limit route which depends on last bullet (edit: probably slot 7) shot after a slot gets free 3-2 bullet slot 5 - to avoid interrupt or get at least 1.5 pixel to right (spawn delay misery)
Sprite limit route is letting spawn the bullet guy and respawning a bird between the two guy on the platforms near the end, so Ryu would follow only 2 bullets (closer than he would follow 3 bullets) but in the end the bullet hits him so it becomes much slower. edit: regarding the demon's head, I vote for the pacifist spirit.
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Player (154)
Joined: 5/1/2006
Posts: 150
MESHUGGAH wrote:
Projectiles that would be nice to manipulate
    2-2 first screen bullet slot 4 - to avoid interrupt or get a half pixel to left 3-1 sprite limit route which depends on last bullet (edit: probably slot 7) shot after a slot gets free 3-2 bullet slot 5 - to avoid interrupt or get at least 1.5 pixel to right (spawn delay misery)
Sprite limit route is letting spawn the bullet guy and respawning a bird between the two guy on the platforms near the end, so Ryu would follow only 2 bullets (closer than he would follow 3 bullets) but in the end the bullet hits him so it becomes much slower. edit: regarding the demon's head, I vote for the pacifist spirit.
Looks pretty unlikely that $75=4 can do anything useful before level 5 at the earliest. Though it would almost certainly put the slot 4 bullet in 2-2A a bit to the right, getting hit in 1-2 still screws up slot 7, contrary to my speculation yesterday in IRC. As for anything in 3-1 or 3-2, it's moot since it doesn't appear possible to get hit and kill the 2-3 boss on the same frame, but I didn't test any method that lost time in the fight. Not having $75=4 for level 3 means no known way to avoid the hit in 3-3 and have $75=0 for level 4.
Player (154)
Joined: 5/1/2006
Posts: 150
feos: I noticed you had some shifting and anding of $BF commented out in your script, as if you had something predictive for the tossers in mind. Did you write anything beyond that that you haven't shared? I've been thinking about documenting ideal ranges for $BF for each tosser in the game—or at least each one that can potentially make for a useful boost—for some time, but never got around to doing anything more than thinking about it.
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11479
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
It was very long ago, before I started reversing that function. I also tried to predict it, but gave up after seeing that it would need to include interrupts that you don't know how many will happen and when.
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.
Player (154)
Joined: 5/1/2006
Posts: 150
feos wrote:
It was very long ago, before I started reversing that function. I also tried to predict it, but gave up after seeing that it would need to include interrupts that you don't know how many will happen and when.
Ah, interrupts: yet another variable that I hadn't even considered. Then you have xsub for the tosser (can probably be ignored) x and y subs for the projectile, iterator for the longer areas, and then the biggest variable: Ryu's path. For example, the first tosser in 5-1 could potentially throw something useful on either side of the pillar it's standing on. Anything else I haven't considered?
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11479
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
I'd say one only needs to know X and Xsub for the knife. And for that, you could do the following: calculate the usual stuff (time left before it spawns, speed), then find out how long ago the last interrupt happened, predict how many frames will be eaten by the future interrupts before the knife spawns (rather easy actually), and then tell what will be the speed and when. Iterator isn't needed: once the tosser spawns, it won't use spawn iterator for knifes. Direction can also be predicted by RyuX - BitchX and spawn timer easily.
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.
Player (154)
Joined: 5/1/2006
Posts: 150
Good points, all. And my reasoning with including the iterator was that it would affect the initial tosser position, which is technically beyond the scope of the problem as originally stated, I suppose.
MESHUGGAH
Other
Skilled player (1918)
Joined: 11/14/2009
Posts: 1353
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
After a lot of different setups for level 4 "left" dog (what we want to manipulate to hit that fucking red block), Scumtron's half pixel improvement makes that situation unresyncable. Probably level 4 will be longer than the previous route with 4-6 frames, of course we could get advantage by a bigger sacrifice (previous route: a simple -2.0px sacrifice compared to -4.5~-11.0px)
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
MESHUGGAH
Other
Skilled player (1918)
Joined: 11/14/2009
Posts: 1353
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
I did some comparison with and without Scumtron's half pixel save and looks like it's preservable with additional saves if I would be lucky. * 4-1 bitch (slot 7 knife thrower) now throws a more feasible knife to pass below it and above the bitch. (maximum save is 7px) * slot 5 dog needs to hit the red block * slot 7 gunner must shoot 3 to the right side otherwise a bullet hits us later * slot 6 guy subpos to hit the platform after above mentioned dog manipulated * slot 6 final guy (mostly because interrupt place) is at the worst possible place, unable to jump over the platform while despawning him with juggling. If everything gets in sync, probably 2~3 frames will be saved.
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
MESHUGGAH
Other
Skilled player (1918)
Joined: 11/14/2009
Posts: 1353
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
Little status update. As you see, I've finally made huge progress from the 4-1 resync (WIP83v6 to keep Scumtron's half pixel save) and now I'm at 6-1 as WIP115v1. Now it's time to check things up from 5-1 to 6-1 to make sure everything is fastest. 6-2 will be hellish to optimize. This is my longest project so far and I'm eagerly waiting to finish Ryu's magical journey. edit: listing unimprovable (already tested) places: - 2-2 different bullet boosting can save 1 frame but ruins 3rd screen (first) knife bitch, making impossible to avoid it - 4-1 1st screen end with fewer position sacrifice to save 1 frame but ruins 3rd screen (final) bullet. Resyncing ruins 4-3 knife bitch - 5-1 1st bird avoid without 0.5px sacrifice ruins interrupt/despawning - 5-2 4th screen uses delay on purpose to manipulate slot 6 bird and slot 7 bird edit2: the latest usermovie includes the 4-1 end improvement which actually gives a better knife bitch at 5-2 because of the subtimer value. Before I dive in to 6-2/6-3 optimizations, I will list down the places for interrupt juggling for future reference for next knife bitches, and try different routes for 6-2.
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
MESHUGGAH
Other
Skilled player (1918)
Joined: 11/14/2009
Posts: 1353
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
Status update again for pacifist movie. Since WIP133 route has 1 extra HP (by avoiding bat boost), HP route for stage 5 need to be revised. For reference, WIP133 Frame 26801 Possible mprovements and their effect to 5-2 final knife bitch: * feos' RTA trick at 5-1 start saves 5 frames for 1 HP. This way the knife bitch fires 13 frames earlier, which is really bad. Frame 26788 * the same 5-1 boost and avoiding the ballerinas (jumping roundhouse kickers) at 5-2 for 13 frames the knife bitch still throws bad knife Frame 26825 * avoiding only the ballerinas let's us jump over the knife bitch, but this way we need to manipulate bird 6 to be slower so we can boost over slot7 bird, this way we finish stage 5 with 1 health (3dmg = avoiding 2dmg ballerinas and 1dmg bat at 5-3) Frame 26833 So currently I'm sticking to the last one. Other improvements pointed out by Scumtron, 5-3 final walljumps were not perfect, so 2 frames can be saved at each place (3 times), saving 6 frames. And subtimer will be need to manipulate to get our sweet 3 frames back. Stay tuned :) edit: and another one spotted by Scumtron is better jumping at 5-3 1st screen between tysons to save 1 frame.
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Wow. I knew the TASes of this game were extremely well done back at the time of their submission, but to think it would be this difficult to improve upon a ten year old run by single frames is just crazy. :D (Btw, good to know you're still posting here, MESHUGGAH.)
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Player (154)
Joined: 5/1/2006
Posts: 150
moozooh: MESHUGGAH is continuing work on a pacifist run, not an improvement to the published run. Personally, I wasn't sold on a pacifist run being submission-worthy until feos made some test runs and made clear that, done right, it would take full application of every little thing known about the game—including some stuff that just isn't relevant when you can kill everything. As for any%, thanks to a couple recent finds from MESHUGGAH and feos, I've resumed my sporadic efforts of improving it and it's currently 65 frames faster (should be a few more by later today). MESHUGGAH: Does this mean it's finally time to leave act 5 behind and head into a whole new bunch of headaches in act 6? —— EDIT: Stack corruption? In my Ninja Gaiden? Key elements: Ryu's sword animation, the loading interrupts every 16 pixels of scrolling, $01FC, and then something fishy with enemy projectiles until the end of the current level. Too tired for proper poking right now, but if anyone is curious you can load this userfile with Ninja Ryukenden (J) and look around frames 12353-12354 (stage 3-2).
MESHUGGAH
Other
Skilled player (1918)
Joined: 11/14/2009
Posts: 1353
Location: 𝔐𝔞𝔤𝑦𝔞𝔯
Stack corruption: interesting, I've tried to recreate the situation on other levels without success (picking up a "bonus 1000 points" powerup and position differently to update score graphically while reaching the interrupt zone since killing the bird doesn't affects this). It looks like a lag frame, however if you append 1 frame (to reach the ladder), it will strike again at 13314 edit: probably useless fact but it's 16*60 difference between 13314 and 12354
PhD in TASing 🎓 speedrun enthusiast ❤🚷🔥 white hat hacker ▓ black box tester ░ censorships and rules...
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Scumtron wrote:
moozooh: MESHUGGAH is continuing work on a pacifist run, not an improvement to the published run. Personally, I wasn't sold on a pacifist run being submission-worthy until feos made some test runs and made clear that, done right, it would take full application of every little thing known about the game—including some stuff that just isn't relevant when you can kill everything. As for any%, thanks to a couple recent finds from MESHUGGAH and feos, I've resumed my sporadic efforts of improving it and it's currently 65 frames faster (should be a few more by later today).
Ohh, I see now, thanks. Still, with all that knowledge, saving just over a second over a ten year old run for what I understand to be around 1/3 into the game signifies just how good the previous one was. Mid-2006 was just about when memory watch was only becoming popular here. Anyways, good luck to both of you! I love this game and eagerly anticipate the upcoming runs.
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Player (154)
Joined: 5/1/2006
Posts: 150
MESHUGGAH: Yeah, don't get hung up on that specific instance or anything (or this glitch in general). I just wanted to post some vague info along with an example last night and pretty much any input from NG(U) will desync when played back with NR(J) — usually in 3-1, 3-2 or 5-1. I don't think I've ever seen it happen outside of 5-1 in NG(U). Obviously there was some bugfixing that came along with the localization. Until noticing it messed with the stack yesterday I'd just considered it as a thing to be avoided since the only apparent effect was losing a frame. Anyway, I don't expect much to come of it, and I'd rather get back to adding more damage boosts to 5-1, but due diligence should probably be done to see what exactly is happening. moozooh: Indeed, the published run was done with little more than memory watch and some (mostly) naive assumptions based on that, but when you consider that the game is still primarily around eleven minutes of scrolling the screen at a constant rate and waiting for the next part to load, then it's not surprising how little room for improvement there is.
1 2
10 11 12 13