Editor, Experienced Forum User, Expert player (2207)
Joined: 5/15/2007
Posts: 3831
Location: Germany
I made a complete game map, for 100% planning http://i.imgur.com/KD56h2N.png
TheKDX7
He/Him
Experienced Forum User, Player (118)
Joined: 7/9/2011
Posts: 375
Location: Switzerland
MUGG wrote:
I made a complete game map, for 100% planning http://i.imgur.com/KD56h2N.png
Great MUGG ! :D
Editor, Experienced Forum User, Expert player (2207)
Joined: 5/15/2007
Posts: 3831
Location: Germany
As I mentioned in the submission thread, killing the 3 fly-guys after inserting the keys will yield a star. I thought that getting this star and skipping another, longer one would allow for a faster run. I determined that it takes 555 frames (~9 seconds) additional time to get the 3 fly-guys star. The star in the snake room in the desert takes ~13-14 seconds additional time to get. But by door requirement, you need to be 10 stars before the Boo fight, so you cannot skip the snake star.... unless you play the toad minigame before the Boo fight, instead of after. The game keeps your item even through Save&Quit. It should not lose anywhere near the prospected 5 sec save to visit Toad before instead of after. Another possible improvement would be in the Ice area, if you can manage to move the ice block on the crack at the same time as getting the star.
Editor, Experienced Forum User, Expert player (2207)
Joined: 5/15/2007
Posts: 3831
Location: Germany
I'm actively TASing this game right now, for any% improvement. It is usually possible to sync rooms, but after switching from Bizhawk 1.12.0-mGBA-0.5.0 to Bizhawk 2.3.1-mGBA-0.6.0, it seems nothing will sync anymore. I empirically verified that the 2nd penguin in the 2nd ice room will _always_ bounce into a different direction compared to the previous TAS. So I have to redo all of the rooms and take some time losses (while also possibly finding new time saves). EDIT: 83 frames saved.
Editor, Experienced Forum User, Expert player (2207)
Joined: 5/15/2007
Posts: 3831
Location: Germany
Get key while dropping down. Unfortunately, you won't get the Yoshi egg, so it's too slow. Doing it like in the gif is only 20-30 frames faster exit than Save&Quit. I found a suitable route change, see below. I'm a good 2 seconds ahead in the TAS. ______ Old route: - Ice (get Yoshi egg - used in Desert) - Desert (get Lightning - used in Fun Fair) - Fun Fair (get Lightning - used in Grass) - Grass - Bowser's Castle New route: - Ice (get Yoshi egg - used in Desert) - Grass - Desert (get Lightning - used in Fun Fair) - Fun Fair (get Lightning - used in Bowser's Castle 3 fly-guys room) - Bowser's Castle Not using Fun Fair's Lightning in Grass costs 2.5 seconds, but you will get the 3-fly-guys star immediately, which should save 7 seconds back. ______
Editor, Experienced Forum User, Expert player (2207)
Joined: 5/15/2007
Posts: 3831
Location: Germany
I was rewatching my TAS and figured out an improvement that I verified in a quick testing. In the room with the 4 penguins and the 1 ice block, if the ice block is pushed to the hole at the same time you get the star, the delays will overlap. It saves at least 90 frames, but I'm sure the fight itself could be further improved to save up to 200 frames. https://www.youtube.com/watch?v=XTaOCJ_ULJA
Editor, Experienced Forum User, Expert player (2207)
Joined: 5/15/2007
Posts: 3831
Location: Germany
I think we should try to bruteforce the game. Every room is basicly separate from each other and the ball can only be influenced by the flippers. It is a similar case like Chef Stef's Arkanoid, with one level at a time (one room at a time) needing a few interactions by the platform (the flippers). Here is a (not detailed, just pseudo-) explanation on how the flippers behave in this game. Each flipper can have about ~10 "altitudes". When the button is pressed, it moves up by like 3 altitudes until the max is reached. If it is let go, it moves down by 2 altitudes. So by pressing F1: A F2: F3: A you can reach a different collision with the ball compared to if you pressed F1: A F2: A F3: A Once the ball is outside the reach of the flippers, it will always move the same and cannot be influenced. There is no "bouncing the table" in this game and pausing doesn't change anything. There is some RNG or frame rules involved, so you cannot always hex-edit in your previous rooms. But that doesn't really prevent you from brute-forcing one room at a time. With what I described above, there are not that many possibilities compared to Arkanoid, so I think we can get away with running a luascript on the game rather than programming a bare bones version of the game like Chef Stef did. I will investigate RAM addresses that can be used for deciding or for goals. Also I will look for the flippers altitude addresses. The bruteforce script itself I will need help. Is anyone interested in helping? Or any guides?
Editor, Experienced Forum User, Expert player (2207)
Joined: 5/15/2007
Posts: 3831
Location: Germany
RAM addresses (possibly useful for brute-forcing) ---------------------------- It seems each of the two flippers can have one of 10 possible altitudes when colliding with the ball. The transition mode address could be used as a finishing point. This list will be updated as I make more findings. Needed: - collision/hitbox related addresses or anything that can be used for figuring out if the ball is touching a flipper, - "star get" delay or anything that tells us we are getting a star / starkey - anything related to "if a star exists", "if a star is descending or ascending", "if a star is grabbable", "star position" - yellow coins / blue coins ----------------------------- IWRAM $14AC Left Flipper Altitude (4-Byte) $14B0 Right Flipper Altitude (4-Byte) $14BC Left Flipper rising speed or something? (4-Byte) $14C0 Right Flipper rising speed or something? (4-Byte) Somewhere around here is also an address for each flipper that makes the ball receive speed if non-zero, but it is always zero. Maybe written to and cleared in-between frames.
$14AC and $14B0 possible values / achieved fastest how:
0x000000

0x00000A	
F1: L
F2: L
F3: L
F4:
F5:
F6:
F7:

0x0AAAA8	
F1: L
F2: 

0x0AAAB2	
F1: L
F2: L
F3: L
F4:
F5:
F6:

0x155550	
F1: L

0x15555A	
F1: L
F2: L
F3: L
F4:
F5:

0x1FFFF8	
F1: L
F2: L
F3:

0x200002	
F1: L
F2: L
F3: L
F4:

0x2AAAA0	
F1: L
F2: L

0x2AAAAA	
F1: L
F2: L
F3: L
$6540 Transition mode (1-Byte)
possible values:
13: None
10: Down
11: Start Credits
12: Title Screen
0: UpLeft
1: Up
2: UpRight
3: World Select
$6532 Ball Size (1-Byte)
12: Mini
19: Normal
28: Big
$6514 Ball X-Pos (4-Byte) $6518 Ball Y-Pos (4-Byte) $651C Ball Z-Pos (4-Byte) $6524 Ball X-Speed (4-Byte) $6528 Ball Y-Speed (4-Byte) $652C Ball Z-Speed (4-Byte) $6558 4 Byte Ball Spin Amount $0014 1 Byte Total Stars $1484 1 Byte Cannon State Somewhere around this may be addresses related to door open/closed state
Possible values:
0: Doesn't Exist
1: Normal
2: Open
3: Opening
4: Closing
$0200 1 Byte Cannon is pulling your ball?
Possible values:
0: No
1: Yes
$000C 1 Byte Current Blue Coins (On the first room, $0200 must be frozen to 0 and $000C to 0 to make L+R presses not reset the cannon and make the ball not enter the toad's tent, if running Basic Bot in Bizhawk.)
Editor, Experienced Forum User, Expert player (2207)
Joined: 5/15/2007
Posts: 3831
Location: Germany
I started working on a luascript. Before I can finish it, it should be researched what outcomes are possible and should be tested. Things to consider:
  • Not counting B-Button item, there are four possible inputs you can do. none none Left none none Right Left Right
  • More importantly, as said before, there are 10 possible altitudes each flipper can have. It takes a few frames until your flipper can have a certain altitude, the longest one taking 7 frames.
  • Keep running the game until 7 frames before the ball is in reach, then start using the input combinations required to obtain each of the 10 altitudes.
  • After you've done that, an additional flipper press can influence the ball further.
  • After you've done that, the other flipper should also have its altitude set up via the 10 input combinations.
  • Assuming you would say "all bets are off after that" and you rely on running the 4 possible inputs each frame, if my math is not wrong that means: (10 input sequences to reach the altitudes * 2 press or no press after touching the flipper) ^ 2 because two flippers (10 * 2) ^ 2 = 400 outcomes and then 400*4^number of frames the ball is in reach of flippers so 400*4^1 = 1600 outcomes for the first subsequent frame 400*4^2 = 6400 outcomes for the second subsequent frame 400*4^3 = 25600 outcomes for the third subsequent frame 400*4^4 = 102400 outcomes for the fourth subsequent frame 400*5^5 = 409600 outcomes for the fifth subsequent frame etc. This is a bad approach, since it blindly runs inputs. We should consider the flipper's altitudes and when the ball is going to reach the flipper's area of effect, instead.
  • Furthermore, some altitudes are so close to each other, we might get away with ignoring some. Needs testing. But... 0x00000A is close to 0x000000 0x0AAAA8 is close to 0x0AAAB2 0x155550 is close to 0x15555A 0x1FFFF8 is close to 0x200002 0x2AAAA0 is close to 0x2AAAAA Maybe it's possible to reduce the altitudes to 5. Then the above math would look like this; (5 * 2) ^ 2 = 100 outcomes 400 outcomes on the first subsequent frame 1600 outcomes on the second subsequent frame 6400 outcomes on the third subsequent frame 25600 outcomes for the fourth subsequent frame etc.
I will keep testing and researching.