What if there were a way to use one gamepad with one of the buttons set as "switch from controlling player 1 to controlling player 2"? I don't know how you'd go about implementing that functionality though. It might be doable with Lua.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
I'm not familiar with how the netplay code is implemented, but the simplest explanation might be simply one of transmission time. On a local network, ping times are very low, less than the time needed to process one frame of emulation. Over the Internet ping times get much longer. Unless the netplay code has systems in place to account for lag, it simply won't work as soon as ping gets longer than a 60th of a second.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
You understand that a TAS is a creation of an input file, right? You record the buttons you press, the directions you put an analog stick in, where you touch the stylus to the screen, etc. You don't record what is displayed on your screen or what sounds the speakers produce; that comes later, when the run is "encoded". Encoding (i.e. making a video file that can e.g. be uploaded to YouTube) involves replaying the input file you generated. Saving/loading states are not shown in the input file, just the controller inputs you created, which is why you never see them in the encodes.
You can do whatever you like while generating the input file -- load states, save states, close the emulator, etc. But the input file has to begin from power-on, except in rare circumstances (e.g. you want to play in a mode that is only unlocked after the game has already been beaten once).
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
That makes me wonder -- if you recorded multiple playthroughs of a game, could you use a kind of Markov Chain analysis to let a bot play the game? That is, on each frame the bot would examine the state of memory, and then the inputs the player provided on played frames with similar memory states, and would use that to decide what input to provide.
Obviously the scope of "examine the state of memory" is pretty vast. I'm not that familiar with Markov Chains, so I don't know if this is remotely feasible. You'd probably need some way to set precedence on certain parts of memory (e.g. when the bot is in area A-4, ignore X/Y position memory from the human playthroughs that aren't from area A-4).
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
This is a really minor nitpick, but I think the screenshot should be from a frame that doesn't show the "PAUSE" indicator. It's just aesthetically nicer that way.
Congrats on the publication, Pirohiko! And thanks for doing the work, feos and Spikestuff!
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
A glitch involving the Twincast command where one of the twins starts the command and then gets interrupted (KO'd or confused), allowing the other twin to make use of an item that normally can't be used in battle. This treats that item's data as if it were a spell, casting either Holy (the Vegetable) or Fire3 (the Trashcan). I don't fully understand what's going on here; there's evidently some trickiness involving targeting and timing.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
I think this is just the standard item-dupe glitch...though that does raise the question of why he got 2 of them, since I'm pretty sure item-dupe only requires 1 to start.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
The TAS description has some information. If I recall correctly, the actual mechanism here is the room glitch allows you to get monster abilities onto FuSoYa's spell list. One of these, used by the bomb-type enemies, is a self-destruct "spell" that kills the caster and the target, no questions asked.
Think of it as an early use of blue magic. :)
EDIT: I'd like to suggest this as the screenshot (taken from the encode at about 1:39:51):
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
I'm now imagining an emulator mode where it shows multiple displays, each one corresponding to one loop of the input. So when you changed the input, the emulator would re-run the entire game and let you see the corresponding variations in gameplay in each loop. That would rapidly show you that e.g. on loop #36 Mario falls into a pit because you changed the B button press to be 1 frame later.
Of course, this would mean simulating thousands of frames each time you changed the input, which gets computationally expensive...but I think that this concept is unlikely to get much traction outside of simple NES/Gameboy games anyway simply due to game complexity increasing.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
I routinely do short-charged shinesparks in realtime by just "walking" (i.e. running without run button) for a short distance and then pressing the run button. This is enough to get a shinespark in a lot of places where you couldn't otherwise, e.g. the shore of the Wrecked Ship entrance lake. I don't know if it's enough for Draygon's room, but it's probably close.
The tap-run short charge is considerably harder to pull off, let alone the "super-short" charge where you also release the run direction. Such shenanigans are fortunately largely not useful in standard Super Metroid speedruns.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
How do you mean, "doesn't work"? If the Shinespark intersects with the vulnerable part of his body (his belly) then he should take damage. It probably won't be enough to kill him unless you've weakened him first, though.
I've never bothered with the Draygon shinespark myself; I just kill him with supers and missiles, using powerbombs to clear the gunk first.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
For the early-supers mockball, the process should look something like this:
1) Stand in the Brinstar shaft, facing the open door.
2) Press Run.
3) Press Right.
4) Just before entering the screen transition, press Jump.
5) After the transition, once you're high enough, release Jump.
6) Press Jump again.
7) Press Down.
8) Press Down again (triggers morphball animation).
9) Land.
10) Press Right.
11) Morphball animation completes.
12) Roll under gates.
13) Release Run, Jump, and Right.
Releasing Jump puts you into freefall (i.e. you stop gaining height on the jump). As noted, you can just hold Jump throughout the process if you want to mockball after doing a "full" jump. But I seem to recall that Jump and morphballing interact weirdly (like, you can't morph until you're in freefall or something), which is why you need to release and then re-press it for the early-Supers mockball.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Sounds like you're pretty new to speedrunning Super Metroid. :) Off the top of my head, the recommended realtime speedrunning route for newbies is:
1) Get morphball and first missile pack; skip the second.
2) Get bombs.
3) Go to Brinstar; use the mockball technique to get super missiles. Consider also getting the reserve tank and the extra missile tanks in this section. Skipping Spore Spawn saves you a gigantic chunk of time, so it's worth practicing the mockball until you can do it at least semi-reliably. Even if it takes you 10 attempts during your run you'll still save time.
4) Get charge beam and spazer en route to Kraid.
5) Use walljumps to access Kraid's lair early (you can walljump off of the platform you're supposed to high-jump up to). Kill Kraid, get Varia.
6) Go to Norfair; get the High-Jump boots, head to the green bubble area, wall-jump to the upper section (this is tricky, but again, worth the practice), get speed booster and wave beam.
7) Head back out of Norfair, picking up ice beam on your way out.
8) Climb up the Red Brinstar shaft, grab powerbombs, head to the Wrecked Ship. You'll need to use a horizontal shinespark to skip Missile Lake (where you'd otherwise need to use the Grapple Beam). Charge the shinespark in the previous room with the Kihunters, go through the door, and do the spark.
9) You have two ways to get across the big room leading to the Wrecked Ship. First is you can short-charge another Shinespark and fly across; second is you can use careful running jumps and the occasional walljump. The first is faster, of course (and if you're really snazzy, you can actually use the shinespark that got you across Missile Lake, but that requires a very carefully-timed missile to open the door).
10) Kill Phantoon, get Gravity.
11) Head back to Brinstar and crack open the glass tube with a powerbomb.
12) Climb up Maridia, using a Shinespark in Mount Doom (the big open room that you're supposed to grapple beam across).
13) Use walljumps to climb the other grapple-beam rooms leading to Draygon.
14) Kill Draygon. When he's in his gunk-spitting phase, use a powerbomb to clear the gunk and then run along underneath him, firing supermissiles into his belly. He'll die shockingly quickly -- faster than using Grapple Beam even assuming you had it.
15) Grab the spacejump, and while you're at it, go get the Plasma beam too.
16) Head to Norfair, skip the Gold Torizo (and the screw attack), kill Ridley. Charged plasma beams will do him in quite quickly.
17) Head to Tourian. Research the Zebetite skip; it'll save you a lot of running back to the missile station for reloads.
18) Kill Mother Brain, escape, done.
This kind of route should be able to get you under 50 minutes; it's not the fastest route in the world, but it strikes a good balance between unskilled and super-skilled play.
EDIT: to do the mockball:
1) Run.
2) Jump.
3) Perform the morphing animation in midair such that Samus lands while you're in the animation.
4) By the time the animation ends, be holding your travel direction (i.e. left or right).
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
I get how this is stupid, but is this actually happening or just a proposal? And how likely are clients to actually change their behaviors based on a broken spec? It sounds more like the spec is being adjusted so that certain (rarely-used?) clients can claim they follow spec.
I mean, if your broken client can't use TASVideos, isn't that your problem?
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
It's the Shield Rod (or Mablung Sword) combination attack using the Medusa Shield, which is absurdly rare so it's not surprising that you haven't seen it.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.