1 2
18 19 20 21
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
feos wrote:
Checkpoint activation has a distinguishable sound effect.
In that case, it looks like your 2 player warps TAS skips 1 checkpoint and stops to hit an earlier one. Why?
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
feos wrote:
The warp only appears if you make all the objects of that area spawn, which requires spawning all the previous areas objects. Post #429623
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.
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
feos wrote:
feos wrote:
The warp only appears if you make all the objects of that area spawn, which requires spawning all the previous areas objects. Post #429623
I'm sorry, but I really don't understand what you're talking about. Could you elaborate?
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
To spawn objects you need to go through certain points in the level. It's written in game code which camera position spawns which objects, and it's consecutive, you can't skip those portions. If you skip them they stop spawning. The warp is spawned along with all the other objects of that area. Object spawns don't depend on checkpoint activation. Still nothing?
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.
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
feos wrote:
To spawn objects you need to go through certain points in the level. It's written in game code which camera position spawns which objects, and it's consecutive, you can't skip those portions. If you skip them they stop spawning. The warp is spawned along with all the other objects of that area. Object spawns don't depend on checkpoint activation. Still nothing?
In that case, if camera position is the only thing that makes objects spawn, then why can't you just clip through every checkpoint to save time instead of waiting for the walls to be destroyed by throwing snowballs at them or throwing ice blocks at them?
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 lags. Link to video
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.
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
feos wrote:
It lags.
hmmm... I guess in that case, my last question is, if this creates a lot of extra lag, why did the 2 player warps TAS choose to do the trick in one spot, whereas the 1 player warpless tas didn't skip activating any of the checkpoints?
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 trick
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.
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
feos wrote:
What trick
Clipping through walls instead of destroying them with the snowballs, like can be seen at 1:41 in this encode from the 2 players warps TAS: https://www.youtube.com/watch?v=0elZ7VCYnEY EDIT: So, I got the answer to my question in discord. As it turns out, me and Feos were talking about 2 different things. In level 4, objects in an area are triggered to spawn when the camera hits certain key spots. The end of level warp portal is one of these objects. Since this doesn't require all checkpoints to be hit (only the camera has to move to certain key spots), in the 2 players warps TAS, one of the checkpoints is skipped. To reach the end of the level (without using warps), all previous checkpoints from the level must be activated. As such, in a 2 player warpless TAS, you cannot skip any of the checkpoints. This answers my questions.
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
So, I finally have another update on my 2 player warpless TAS of Battletoads: I've finished the first 6 levels of the game now. The first 3 levels are the same as listed earlier in the thread. Additionally, I saved 29 frames combined in levels 4-6 compared to the WIP made by Alyosha. Timesaves: Level 4: I saved 20 frames over Alyosha's run by killing the second player as I was heading towards the last checkpoint. This reduced lag by a lot, which in turn allowed for me to save all of this time. Level 5: I used a faster run pattern to start the level running quicker (which was pointed out to me by AIVV73) and had faster movement overall, which allowed me to save 9 frames here. Level 6: This is an exact copy of Alyosha's WIP, which resynced perfectly without me needing to make any adjustments. As such, I beat level 6 in the same amount of frames that it took Alyosha to beat level 6. And with that, I'm now halfway through this TAS. I'm hoping that I can make progress faster now that I'm out of level 4, where I've basically been stuck for the last month and a half. In the meantime, if anyone wants to take a crack at improving the levels I've already done so far, they're certainly welcome to do so. I'm not sure whether or not there's any time that can be saved in levels 5 and 6, but level 4 probably has 2-4 frames that could be saved somewhere by either better lag management or tighter movement through the sections of the level where the graphics are distorted. Either way, I couldn't figure out a faster way to do those sections, so if anyone else wants to, they can be my guest! Link to movie file of my WIP: http://tasvideos.org/userfiles/info/62091469528092252
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3824)
Joined: 11/30/2014
Posts: 2832
Location: US
Great work!
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
I have a question for anybody who is familiar with the mechanics of Battletoads about animation cancelling. What prompted my interest in this topic was this video from earlier ITT: https://www.youtube.com/watch?v=02RkubLfOwE&feature=emb_title My question is: What are the ways to cancel the animation of the toad having their jaw drop open in shock when a boss appears? On the first level boss, I tried shooting one toad with a laser such that the laser hits the toad after their jaw drops from seeing the boss. While this does stop the jaw-dropping animation while they are stunned, they return to the jaw-dropped frozen mode as soon as the stun lock wears off, so this doesn't give you control back to your toad. I have a theory for a way to save a lot of time in one specific part of the game, but this can only work if there is a way to perform an animation cancel (using 2 players) in a very specific part of the game to skip the jaw-dropping animation. I'm guessing it's not possible, or somebody else would have made a TAS using this idea by now, but hey, you never know? EDIT: So, it looks like the big timesave I had in mind is impossible regardless of whether or not there's a way to cancel this animation. However, I can still think of a way to save about 6 seconds somewhere else if there's a way to do this.
Player (172)
Joined: 7/1/2016
Posts: 263
@LobsterZelda, I have some crazy idea, but i'm too lazy to test it. I already tried to describe it in this tread, but people didnt get interested in it. Maybe you are interested in testing it. https://clips.twitch.tv/ObeseHandsomeSharkKlappa Ill try to describe it as best as i can. Basically, in that clip green toad got a state when it holds nothing. But because it have that state when any enemy spawns game assumes that green toad holds that enemy. Then when yellow toads trows green toad - game assumes that green toads trows that enemy. Thats why that robot dies. Like trowing deals least amount of damage and those robots have least amount of hp. Idea is... Maybe, you can keep that state (when green toad holds nothing) to the end of the stage and get a state when robomanus gets attached to the green toad (maybe even before it properly spawns). And maybe when robomanus just spawns he have like 1 hp or something (happens in many other games) and maybe you can trow him and get some crazy quick kill. Just an idea. Nothing of that was tested
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
Koh1fds wrote:
Idea is... Maybe, you can keep that state (when green toad holds nothing) to the end of the stage and get a state when robomanus gets attached to the green toad (maybe even before it properly spawns). And maybe when robomanus just spawns he have like 1 hp or something (happens in many other games) and maybe you can trow him and get some crazy quick kill. Just an idea. Nothing of that was tested
It's an interesting idea. How exactly do you get the toad into this state, though (what inputs/conditions do you need)? Btw, on an unrelated note, did anybody ever figure out if it's possible to spawn the warp portal in the turbo tunnel instead of the level end object in order to improve the current 2 player warps TAS? The question was asked about 9 years ago in this thread, but I couldn't find the answer ITT. As an aside, I went back and redid levels 5 and 6, and saved almost 2 seconds combined between the 2 levels. Now I have to redo level 7 (which I already did). Once I finish level 8, i'll post an updated WIP to userfiles.
Player (172)
Joined: 7/1/2016
Posts: 263
I managed to easily recreate that state just by doing same stuff as in that video (catching two slimes with two toads or something). It was like 1 year ago.
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
Hello everyone. I have finally finished the first 8 levels in my Battletoads 2 players warpless TAS. Alyosha's WIP ended in level 8, so I can now compare how fast my movie was compared to his. In total, I ended up finishing exactly 420 frames faster than Alyosha, which means that my current WIP is faster by 7 seconds! I've already summarized earlier ITT where I saved time in levels 1-4, so I won't repeat that description here. However, I managed to save more time in levels 5 and 6 (which I went back to redo), and also in levels 7 and 8. As such, I will list those timesaves here: Level 5: I saved 20 frames in this level by using player 2 to fall out of bounds instead of player 1, and by falling out of bounds slightly faster as well. The reason why player 2 was faster is that you start the level with player 2 being slightly closer to the surfboards than player 1. Level 6 Even though this level is mostly an autoscroller, I was surprisingly able to save 101 frames in this level. The reason for this is that jumping at particular times to scroll the screen makes the snakes turn their heads slightly faster/sooner, which allows for a few frames to be saved on each snake. This adds up over the course of all snakes throughout the level, which ultimately allowed for a relatively large timesave. Level 7 I saved 99 frames in this level compared to Alyosha's WIP. Some of this timesave came from the first half of the level before the flying section, by killing enemies slightly faster and by having one toad do 2 mid-air punches to kill the 2 rats while the other toad runs to the right edge of the screen so that the screen can be scrolled slightly sooner. Additionally, I saved time in the flying section by keeping as far to the right as possible for every checkpoint except for the last one. On the last checkpoint, I kept as far to the left as possible, and since the screen scrolls faster before you hit the checkpoint, I was able to save about 30 frames on this last checkpoint alone! Also, I embedded a secret message in the middle of level 7. See if you can find it! :) Level 8: Up to Robomanus, this fight is a copy of Alyosha's WIP, so no time is gained or lost. Alyosha's WIP desyncs during the Robomanus fight, so this marks the last point that I can compare my WIP with Alyosha's WIP. The start of the Robomanus fight occurs 420 frames faster in my WIP compared to Alyosha. In the Robomanus fight, I finished 11 frames faster than the fight I did in my original WIP of the game, and I also finished 39 frames faster than the 2 player warps TAS did, since I had faster attacks and didn't perform the speed-entertainment tradeoff of getting squashed by the boss after he is killed. Next up, I have to TAS the longest and most difficult-to-TAS level of the game: the Terra Tubes! Wish me luck! Here is a link to my WIP: http://tasvideos.org/userfiles/info/62355587629478395
Challenger
He/Him
Skilled player (1690)
Joined: 2/23/2016
Posts: 1062
Great work again! I'm most surprised how you managed to improve level 6 like that. Looking forward for the rest of this game.
My homepage --Currently not much motived for TASing as before...-- But I'm still working.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3824)
Joined: 11/30/2014
Posts: 2832
Location: US
Wow those are really impressive gains, great work, almost at the end now!
Post subject: Battletoads Progress!
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
Hello everyone! After a long break from TASing to focus on school work, I have finally had some time to return to working on my Battletoads 2 players warpless TAS. I am happy to announce that I have finished TASing levels 9 and 10, and have also TASed up until the boss fight at the end of level 11 (level 10 and all of level 11 except the boss battle are the same in this TAS as they are in the 2 player warps TAS). With that, here are my timesaves: Level 9: This was by far the longest and most complicated level to TAS of the game. Ultimately, most of my timesaves throughout this level depended on me finding lag-reduction strategies, although a few timesaves were from better movement as compared to the 2 players warps TAS. This level contains 4 checkpoints followed by the end of the level. The destruction of certain walls by the rolling gears while crossing a certain boundary point alive with a toad activates each of the 4 checkpoints. However, any of the walls that are destroyed without a bonus number appearing on screen are not checkpoints. The only reason I have to wait for the gears to destroy these walls is that the next gear won't spawn if I don't wait for the previous wall to be destroyed. Additionally, the gears won't load if you skip a checkpoint, and the end of level can't be activated without activating all checkpoints, so you can't skip any checkpoints in this level either. In the section up until the first checkpoint, I saved about 60 frames over the 2 player warps TAS by taking a different route through the out of bounds water which had much less lag. The section between the first checkpoint and the second checkpoint is mostly waiting for the gears to move. However, compared to my first WIP of this category, I was able to save about 14 frames in this section by doing different inputs at different times to completely eliminate all lag from this section. Also, I used my downtime in this section to shift the Toads' Z-Position to prepare for the next section without wasting time. In the section between the second and third checkpoints, I saved about 60 frames by shifting the z-position of my toads more so that one toad could get more of a head start on swimming while waiting for the last gear to break and activate the checkpoint (part of this timesave also occurred via better lag reduction as well). In the section between the third and the fourth checkpoints, I saved about 40 frames by timing the death of the first toad so that the toad respawns on the same frame that the checkpoint was activated (the 2 player warps TAS wastes about 20 frames here waiting for the toad to respawn since it kills the toad 20 frames later than it needs to). I was also able to use lag reduction to save the remaining 20 frames of this segment. In the section between the fourth checkpoint and the end of the level, I was able to save 6 frames via slightly better lag reduction over the 2 player warps TAS. All told, I finished level nine 194 frames faster than the published 2 players warps TAS (over 3 seconds)! The same strategies that work in level 9 of my TAS would work in level 9 of the 2 player warps TAS. As such, considering that there is also a 3 second timesave in the 2 player warps TAS due to the void jump trick in level 3, the current 2 player warps TAS could be improved by at least 6 seconds, which means that the TAS can finish in under 11 minutes. Level 10: Identical to the 2 player warps TAS. Level 11: The section up until the boss is a copy of the 2 player warps TAS, since this is basically an autoscroller. This WIP ends when the autoscroller section finishes. We are nearing the finish line of this TAS! The published movie has stood unchallenged for 15 years, but it won't be long now until I am ready to submit the new movie for this category! Here is a link to my WIP, for anyone who is interested in watching it: http://tasvideos.org/userfiles/info/63003180390649610 I hope you enjoy watching it!
Challenger
He/Him
Skilled player (1690)
Joined: 2/23/2016
Posts: 1062
Have you tried it? http://tasvideos.org/forum/viewtopic.php?p=461284#461284 Anyway, nice WIP. Now Battletoads is almost done!
My homepage --Currently not much motived for TASing as before...-- But I'm still working.
Post subject: 2 Players Warpless TAS Submitted
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
It's finally finished! The submission for the new 2 players warpless TAS by me and Feos is done! Thank you to everybody who helped me to complete this TAS. The workbench thread for this submission can be found here: http://tasvideos.org/forum/viewtopic.php?t=21861
Post subject: Updated Battletoads 2 Players Warpless TAS
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
Hi everyone. I've finished making a more entertaining version of my Battletoads 2 Players Warpless TAS. As such, I have cancelled my original submission, and have submitted a new movie here: http://tasvideos.org/forum/viewtopic.php?t=21884&postdays=0&postorder=asc&vote=viewresult&start=0 I hope you enjoy watching it!
Post subject: RECRUITMENT: Call for Help With New Battletoads TAS
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
Hello again everyone! I am writing this post to recruit for help with a new Battletoads TAS that I'm working on. Right now, I'm trying to create a new movie to obsolete the current 2P Warps TAS. In order to do this, I would like to use the jet-glitch in the turbo tunnel to spawn the warp portal to level 5, which would allow me to completely skip level 4 (saving over a minute!). Doing this, however, is no easy feat. I'll describe what I've learned from doing my research so far: Objects in Battletoads: In Battletoads, all properties of objects are stored in a block of memory in RAM which starts at address $3C1. There are a maximum of 15 objects that can exist at a given point in time in the game. These attributes can best be visualized in a table, where the rows of the table represent specific attributes, and the columns of the table represent specific objects. For example, ID is the first attribute, with values from $3C1 to $3CF representing the ID values of each of the 15 object slots (ex. the ID of object 2 is in $3C2, and the ID of object 4 is in $3C4, etc.). The next row stores an attribute named animation_1, which starts at $3D0, and goes up to $3DF. This pattern repeats for all attributes, and there are a total of 35 attributes for each object. However, for the purposes of the glitch I am trying to do, only a few attributes actually matter, which are ID, X-Pos_High, X-Pos_Low, Y-Pos_High, Y-Pos_Low, Z-Pos_High, Z-Pos_Low, and animation_2. To see an example of what this table looks like in memory, click the link below to a picture of this table, where the top-left-most cell represents $3C1 in memory, and the bottom-right most cell represents $5CD: https://github.com/Lobsterzelda/TAS/blob/master/Battletoads/Debug_Info/Battletoads_Objects.jpg Of particular interest in this picture is the column highlighted in blue, which represents the warp portal object. From performing some debugging, I figured out that an object MUST have two attributes equal to specific values in order for the object to act as a warp portal. First, the ID value of the object must be equal to $22. Second, the value of the animation_2 attribute must be equal to $55. If one of these values is altered using a hex editor, then the warp portal disappears, which doesn't happen when editing the other attributes of the portal. With all of that background info covered, let's get into the checkpoint glitch! The Glitch: During normal gameplay, $B7-$B8 stores a 16 bit number which represents the address where the game should look to start spawning new objects from whenever you restart a level, hit a checkpoint, or walk past the trigger for a new object to load (this is called the "config pointer"). Ordinarily, this value is something very high like $E5D3, which is high enough up in memory that it is in the game's ROM. When one toad dies on the turbo tunnel jet before the first checkpoint has been activated, the game becomes confused. Normally, if you die before activating the 1st checkpoint, you go back to the start of the level, and if you die after hitting the 1st checkpoint, you respawn at the last checkpoint you activated. As a result of these actions, when you respawn, the game tries to update the config pointer using uninitialized data, which causes 0 to be written to $B7-$B8. Since $00 is part of RAM, the game now starts loading objects based on the values stored at the start of RAM! Whenever the config pointer tries to load an object, it looks at the 11 byte sequence that starts at the address referenced by the config pointer's value, and it uses that to decide what values the new object should have for each of its attributes. The values for an object's ID, High-X_Position, Low-X_Position, High-Y_Position, Low-Y_Position, High-Z_Position, Low-Z_Position, and the object's animation_2 attribute are all determined directly by looking at nearby addresses. To give an example of how this actually works, suppose that $B7/$B8 = $0016, and the following table represents the current values stored in RAM when the new object tries to load: https://github.com/Lobsterzelda/TAS/blob/master/Battletoads/Debug_Info/Sample_Data.jpg In this case, the new object would have an ID value of $22, a High_X_Position byte of $05, a Low_X_Position byte of $5C, a High_Y_Position byte of $3B, a Low_Y_Position byte of $28, a High_Z_Position byte of $30, a Low_Z_Position byte of $12, and an animation_2 value of $48. The reason for this is that ID is calculated as the value stored at the address referenced by the config pointer, High_X_Position is copied from the location of the config pointer plus an offset of 3, Low_X_Position has an offset of 4, High_Y_Position has an offset of 5, Low_Y_Position has an offset of 6, High_Z_Position has an offset of 7, Low_Z_Position has an offset of 8, and animation_2 has an offset of 9. Since 11 total bytes make up the object's descriptor, after every time a new object loads, the config pointer has its value increased by 11. The Problem: In order for an object with the right ID and animation_2 value to spawn, the addresses near the spot where the config pointer is looking at have to have the correct values. Unfortunately, there isn't really enough manipulable addresses in a row for most of the game's memory to make this work. However, there is a strong candidate address with the potential to work: $3F4. In order for the object that spawns when the config pointer reaches $3F4 to be a viable warp portal, the High-X-Position byte of the 7th object loaded into memory must be $22, the Low-X_Position byte of player 1 must be $55, and the values of the High-X-Position byte of the 8th-15th objects loaded into memory must be values that will translate to coordinates for the warp portal that will put it somewhere reachable to the toads. The high-x_position byte of the objects that spawn into memory can be manipulated by making sure that the third address after the value referenced by the config pointer is equal to favorable values at the point when new objects are loaded. However, this is all very difficult to manipulate: Because there's only 15 object slots and the config pointer needs to increase 92 times to reach $3F4, the game runs out of space to load new objects well before reaching this point (the config pointer generally increases by 11 once every frame until there's no room for more objects). As such, pre-existing objects need to unload several times in order to create enough space for the config pointer to keep increasing. If all object slots are filled and the 5th object (for example) unloads, then on the next frame, a new object will spawn in the 5th object slot. The question now becomes, how do we make the config pointer read addresses to spawn objects at points which are favorable to us, and how do we force the config pointer to get this high? Moving to the right sometimes unloads certain objects, but other times, this has no real effect on the allocated objects. The Solution: Since two minds are greater than one, I am posting here to see if anybody can help me come up with ideas to tackle this problem. Note that you DON'T need to have any experience TASing Battletoads or NES games in order to work on solving this problem. Preferably, having experience with ACE-like TASes or TASes that spawn corrupted objects (such as Mega Man 1) would be useful for figuring this out. If someone can help me figure out a way to get this to work, then I will make them a coauthor for the new TAS. The new 2P warps will be about the same level of entertainment as the currently published movies, which means it will probably be accepted for stars. As such, if you are interested in submitting a movie that will be accepted for stars, now's your chance! I have attached below a link to a lua script made by Feos which allows for objects and their properties to be visualized in FCEUX. I modified the script slightly to make it easier to display the table. https://github.com/Lobsterzelda/TAS/blob/master/Battletoads/Debug_Info/Object_Map.lua Additionally, I have attached below a link to my new TAS of the game so far, which plays up until the jet glitch is activated in level 3. As such, if you want to do some testing playing around with the glitch, you can do so using this movie file. http://tasvideos.org/userfiles/info/64374095014736966 Feel free to post a reply in this thread or send me a personal message if you have any questions about how this glitch works, or if you have any ideas for things you think I could try. Any suggestions are welcome, so don't worry about whether or not your suggestion makes sense (after all, this glitch is so complicated that almost nobody fully understands it, and I certainly don't!). I look forward to seeing what ideas the TASVideos community can come up with :) Important Update: It turns out that if an object is created with an ID value of 255, then no new object is added to the object map. Additionally, the value of the config pointer will be reset such that the addresses 1 and 2 addresses above the current config address value become the next value of the config pointer. For example, if the config address was $16 (which stores Player 2's inputs), $17 stored the value $03 and $18 stored the value $FE, and $16 held $FF, then after the next frame loaded, the config pointer would be set to $03FE, which is the address of player 2's low x-position! $17 and $18 seem to be basically random and are used to hold temporary values, so it should be theoretically possible to force the config pointer to go wherever we want now! Additionally, if the config address is $2C (which also stores player 2's inputs), then the config address will always be reset to 0 on the next frame, since $2D and $2E are addresses which always hold 0 and are unused! What this means is, there's a way to keep resetting the config pointer every other frame, there's a way to make the config pointer make one arbitrary jump, and it's possible to control the ID value of every other object in the object map table! From here, I can see a good plan for how to actually activate this warp: Keep using the above process to set the ID values of several objects to have the desired values (including waiting for objects to disappear from memory so that they can be re-allocated) so that every object can have it's id value set. Then, set the config pointer to jump to an address in the ID table, and use those values to spawn the warp portal and execute a warp! Let me know what you guys think about this idea. Second Important Update: As it turns out, whenever an object spawns with an ID value of $55, the game force-ably unloads it on the next frame (I'm not sure if it ever actually appears in the first place). Because of this, you can never set an ID value to $55, which means the above idea won't work. Is all lost then? Is there no way to pull this glitch off? Maybe not... Another possibility is to manipulate the low-x_Position byte of the objects that spawn in to match the values of the warp portal object. If you wait until the config pointer hits $21, then the low-x-position of the object that spawns in will be based on the value stored in $25. $25 stores the RNG for the game, which is calculated every frame, and is altered every time you press a button, meaning you have direct control over it! The issue? $21 is a temporary value which is almost always set to 0. $21 is used for the ID of the object to be spawned, and whenever an object has an ID value of 0, the game doesn't load it in... Besides all of this, every time you reset the config pointer, another random object gets loaded in with an ID based on the value in $0B, which is a counter that goes up by 1 every frame (and is therefore almost never 0). To make matters worse, $17 and $18 are calculated roughly based on player 2's x-position and animation respectively (with occasional rare jumps to far-away values). However, in order to move right enough to get $17 equal to $CE, you have to stop punching repeatedly. However, if player 2 doesn't punch every 4 frames, he can't reset the config pointer (since this requires pressing every button to do it). Thus, P2 is trapped in place. The only way around this is to prevent Player 1 from voiding out when you respawn, so that he can pick up player 2 and throw him somewhere else. The grind for uncovering all of these secrets in this game just never ends...
Post subject: One Last Update
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
There's one more important thing to note: If you hold all buttons but right on the frame where the config pointer is on controller input, then the config pointer will stay paused until you release the buttons, but the value in $0B will keep incrementing! Because of this, you could theoretically set every value in the ID row to the exact value you want in under 30 seconds, and then jump the pointer to the object ID table to spawn the warp portal. Unfortunately, there are 2 reasons why this idea doesn't work: The first is that if an object has an ID of $55, then it will despawn on the next frame. This actually occurs as a result of the object's flags being negative AND the object having an ID of $55. If the object's flags could be set to a non-negative value (which might be based on values in memory near $0B when the object spawns), then it might be able to spawn. The other issue is that the high byte of x, y, and z coordinates must all be set to 0. However, if an ID is spawned with a value of 0, it disappears on the next frame. Having said that, an object which unloads will reset its ID value to 0, so theoretically, if an invalid object can be loaded and a valid object can be forced to load on the very next frame, it could appear one slot further downwards. However, the object unloads in 1 frame, and you would generally need 2 frames to do this. The only way to do this in 1 frame would be if you could manipulate $21 to have a favorable value in it, which might be able to make it possible. However, I think that the object unloading procedure happens before spawning new objects, so this still probably won't work...
Post subject: Progress Update
Lobsterzelda
He/Him
Skilled player (1258)
Joined: 3/17/2019
Posts: 282
I have another update. I found a setup which seems somewhat close to actually being viable. However, in order for this to work we need 2 things: 1: A way of preventing player 1 from flying off the screen after respawning from the checkpoint glitch must be found. 2: A way to consistently make $21 contain a value other than 0, 1 or 2 must be found. Besides all of this, the objects seem to disappear within an average of about 30 frames after they spawn, so in order for a TAS to realistically pull this off (which will probably require more frames since it can't use hacks), a way to keep the objects from despawning so quickly probably also has to be found (although this may not be necessary). I have attached a movie file here which contains a description of a proof of concept TAS with memory hacks showing how this might work, which also explains more in depth what's going on behind the scenes. This movie can be found here: http://tasvideos.org/userfiles/info/64403498514772584 Additionally, I have attached a video of this hacked proof of concept here: https://www.youtube.com/watch?v=S5HVeoKtJnU For now, I have no idea how to find either of the two discoveries needed to make this work. Since I'm completely out of ideas, I'm giving up here. With some luck, someone will take the work i've done and find a way to make this actually work. If someone comes up with some ideas to circumvent these problems, then I will try to get the warp portal to spawn again. In the meantime, I'm going to move on with my 2P warps TAS, and will now start TASing the Arctic Caverns.
1 2
18 19 20 21