About the game

The goal of the game is to blow at a bubble to guide it through a house. If the bubble hits a wall or obstacle, it will burst and you lose a life. This game was ported to several different systems and featured rooms with black background and a scary ghost sprite (as seen here). The Gameboy port, the one I grew up with, is the last one released and seems to be an update to the other ports: It now features a cute ghost and added animations and improved sound effects.

Objectives

  • Uses warps
  • Uses death to save time
  • Genre: Action
Used emulator: Bizhawk 1.11.6 (Gambatte-core)
This run syncs on both the Japanese and the US/EU ROMs.

About the run

I found a respawn bug in this game which turned out to be a timesaver so I started a new run. It can be used only in rooms where you travel horizontally, otherwise it leads to softlocks. I tested it in each such room to see if using the bug turned out faster than just going through the room normally, and then used the faster of the two.
I also took a very close look at RAM values this time, particularly those related to speed and movement. I was able to optimize speed much better than in the previous run thanks to my better understanding of what frame rules and patterns the game uses. I could go into much detail with the frame rules but it's kind of complicated. Basicly, the bubble's "speed" value vaguely tells how often it should move. In theory, you could abuse speed patterns like in Super Mario Land 2, but blowing actually only affects the bubble if its speed is below a certain value so optimizing it was easy:
  • when moving diagonally, blowing when speed is 1 or lower makes it 3
  • when moving horizontally, blowing when speed is 2 or lower makes it 4
I made the bubble move at those 3 or 4 respectively by blowing at the correct frames. What's more to say, some of the rooms caused frequent lag frames that would sometimes overlap with that frame of opportunity and thus killing the perfect strategy as it would have caused the bubble to move at 1 unit lower speed for 8 frames. So what I did to prevent that was that I changed directions, or sometimes the game would, oddly, still accept my blow even though the framerule wouldn't normally permit it, so I could change 3 back to 4 quickly enough in those cases. ... It's difficult to explain all this stuff, but I hope you get the idea.
This run falls 3 seconds behind the previous run because of the now added LCD lag emulation which was not accounted for in VBA v19~23 in the previous run. But disregarding that, if my math is not wrong, I actually saved 25.3 seconds. About 4 seconds were saved due to the bug and the other 21 seconds due to faster speed.
There is a slight difference in the timing end point: The previous run enters the name and presses Start to go to the title screen faster. This run doesn't press Start since the game goes to the title screen in 2 seconds by itself anyway. This actually makes a difference of 41 frames because confirming the name makes the game lag that long before Start can be pressed. Then again, you could shorten the run even more by not entering a name at all. It seems to be something that's up to the runner's decision and future runs should be judged by gameplay rather than name entry/post-game shenanigans.
The respawn bug might even come in handy for console speedrunners, although I doubt they can finish a run with it. It's too precise, you have to blow at it at the right frame and then it might still be a hit or miss depending on speed/positioning. The 1 or 2 seconds it saves per usage doesn't seem worth the frustration that you have to go through trying to do the bug in a run. But if you do manage to finish a run, my hats off to you! I would be happy to have found a useful bug for RTA.

Note about the credits at the end of the run

I recall someone (NitroGenesis?) wrote that the credits on the title screen are only shown once you beat the game. But that's not the case. I request that that portion of the run still be included in the encode for the sake of completion (it shows the staff credits, like at the end of most other runs). Also I have seen other runs being granted extra time at the end (I recall Donkey Kong Country).

Possible improvements

The luascript I made and used to keep track of speed/movement patterns helped cut down on the rerecords used, hence why the rerecord count is much lower than in the previous run which relied on a trial-and-error approach. That being said, I believe the run is near perfect except for these theories that haven't been checked yet:
  • I'm almost certain that in rooms where the bug is used, when you approach the bubble in a certain way, it's possible to start blowing at it upwards or downwards towards the wall where you burst it, before finally blowing at it towards the exit. You could save 1~5 frames per usage. I have not investigated it further because I think the rooms that cause lag frames might not be hex-edit friendly and I didn't want to redo the run. I suppose I could try to edit this improvement in while the run is on the workbench, but fingers crossed! Nah, I don't have the time at the moment. Maybe later.
  • Account for score counting at the end of each room. The game displays a bonus meter, but seems to add points in intervals different to that meter. Basicly the idea here is that it might be possible to, say, delay by 1 or 2 frames and thus cause the bonus meter to be 1 unit shorter and thus speed up the score counting by 3 frames (which leaves us with a net income of 1 frame saved). Not sure if that math is correct, but it's just an idea. Then again, you could deliberately go ahead and ignore post-room bonus effects altogether (so you just account for room beginning to the frame where the bubble is no longer visible). That would also mean the bug could be used in a few more rooms where the difference between "bug" and "going through the room normally" was really small and it ended up in the "going through the room normally" scenario's favor just because the "bug" scenario had a longer bonus meter. A max score TAS could also be something to be considered, although it might lead to strange strategies being used, and I would really prefer it be based on realtime instead.
  • Random frame squeezing might be possible in sections where it's not clear to see what's the optimal solution, e.g. whenever moving past a ventilator. Room 32 might also be improvable. Maybe speed patterns can be abused after all if you change directions in a clever way? Overall, more thorough testing could lead to frames being squeezed in various rooms. But my personal standpoint is that this game is too obscure to worry too much about putting all that effort into trying to improve each room by 2 frames or so. It doesn't seem worth it to me.
(In b4 technical rating is 6 at max. )

Thanks

  • Bizhawk and Gambatte team

Noxxa: Judging.
Noxxa: Positive viewer response. Accepting as an improvement to the published movie and elevating to Moons.
fsvgm777: Processing.


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15629
Location: 127.0.0.1
This topic is for the purpose of discussing #5214: MUGG's GB Bubble Ghost in 04:44.22
Personman
Other
Joined: 4/20/2008
Posts: 465
This game is cute and great and the glitch is cool and the run is of good quality. Thanks, mugg!
A warb degombs the brangy. Your gitch zanks and leils the warb.
Editor, Skilled player (1441)
Joined: 3/31/2010
Posts: 2113
I enjoyed watching this. Nice music, and short enough not to get boring. Yes vote.
Skilled player (1743)
Joined: 9/17/2009
Posts: 4986
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
That was a nice run. Also to anyone who wonders how does the lag affect the game, it's mentioned on this post: Post #439412
MUGG wrote:
Here is a comparison between the current TAS and if the bug was used. All time stamps are from VBA v19-23, so there might be 1 or 2 frames difference to bizhawk. (VBA input is delayed) Timing is from first frame of a room where input is accepted, until first frame of the next room where input is accepted. That way, score calculation is taken into consideration.
Room      Time(OldTAS)         Time(withBug)		TimeSaved  Notes

01        443  (624-1067)      -					   0			 Can't do bug
02        621  (1067-1688)	  594  (1067-1661)	27
03        631  (1688-2319)	  594  (1688-2282)	37
04        636  (2319-2955)	  594  (2319-2913)	42
05        608  (2955-3563)	  -					   0			 Can't do bug
06 +1Up   550  (3563-4113)	  -					   0			 Can't do bug
07        642  (4113-4755)	  593  (4113-4706)	49
08        686  (4755-5441)	  593  (4755-5348)	94		   Not verified. predicting 593 is possible.
09        757  (5441-6198)	  593  (5441-6034)	164		  Not verified. predicting 593 is possible.
10        617  (6198-6815)	  593  (6198-6791)	24		   Not verified. predicting 593 is possible.
11        733  (6815-7548)	  -					   0			 Can't do bug
12 +1Up   844  (7548-8392)	  -					   0			 Can't do bug
13        649  (8392-9041)	  594  (8392-8986)	55		
14        533  (9041-9574)	  -					   0			 Can't do bug
21 +1Up   581  (9574-10155)	 -					   0			 Can't do bug
22        610  (10155-10765)	594  (10155-10749) 16		   Not verified. Predicting 594 is possible.
23        639  (10765-11404)	-					   0			 Can't do bug
24 +1Up   759  (11404-12163)	-					   0			 Can't do bug
25        761  (12163-12924)	594  (12163-12757) 167		  Not verified. Predicting 594 is possible.
26        575  (12924-13499)	-					   0			 Doesn't save time (575 is faster than 594)
27        639  (13499-14138)	-					   0			 Can't do bug
32 +1Up   529  (14138-14667)	-					   0			 Can't do bug
33        733  (14667-15400)	593  (14667-15260) 140		  Not verified. Predicting 593 is possible.
34        610  (15400-16010)	593  (15400-15993) 17		   Not verified. Predicting 593 is possible.
35        511  (16010-16521)	-					   0			 Timed until score changes. Can't do bug

LCD lag is not considered since this testing was done on old VBA. I tested on newer VBA and the LCD lag is 35 frames there. In other words, the transition lag that took 1 frame on old VBA takes 35 frames on new VBA. Doing the bug causes LCD lag to happen one additional time, so 34 frames have to be added to the TimeSaved potential. When the bug doesn't save at least 35 frames, there is no use doing it.
Room      Time(OldTAS)         Time(withBug)		TimeSaved

03        631  (1688-2319)	  594  (1688-2282)	3		
04        636  (2319-2955)	  594  (2319-2913)	8
07        642  (4113-4755)	  593  (4113-4706)	15
08        686  (4755-5441)	  593  (4755-5348)	60		
09        757  (5441-6198)	  593  (5441-6034)	130		
13        649  (8392-9041)	  594  (8392-8986)	21		
25        761  (12163-12924)	594  (12163-12757) 133		
33        733  (14667-15400)	593  (14667-15260) 106		

00:13.93 sec saved (when sticking with VBA19~23) 00:07.97 sec saved (when switching from VBA19~23 to VBA24m → added LCD lag) Bizhawk actually seems to have 37 LCD lag frames. So we subtract another 2 frames:
Room      Time(OldTAS)         Time(withBug)		TimeSaved

03        631  (1688-2319)	  594  (1688-2282)	1		
04        636  (2319-2955)	  594  (2319-2913)	6
07        642  (4113-4755)	  593  (4113-4706)	13
08        686  (4755-5441)	  593  (4755-5348)	58		
09        757  (5441-6198)	  593  (5441-6034)	128		
13        649  (8392-9041)	  594  (8392-8986)	19		
25        761  (12163-12924)	594  (12163-12757) 131		
33        733  (14667-15400)	593  (14667-15260) 104		

00:07.70 sec saved (when switching from VBA19~23 to Bizhawk → added LCD lag) Finally, we take into consideration the life management:
Room           Lives

Start of game  Have 5 lives
03 (Bug)       Have 4 lives       
04 (Bug)       Have 3 lives
06 (+1up)      Have 4 lives
07 (Bug)       Have 3 lives      
08 (Bug)       Have 2 lives
09 (Bug)       Have 1 life
12 (+1up)      Have 2 lives
13 (Bug)       Have 1 life
21 (+1up)      Have 2 lives
24 (+1up)      Have 3 lives
25 (Bug)       Have 2 lives
33 (Bug)	    Have 1 life
So it should be all good. No continues are needed. One continue would have taken 33 frames in old VBA, and probably 107 or so on Bizhawk. A new TAS should be 04:33.37 or better. EDIT: Actually, I forgot that LCD lag is added in places that aren't improved, too. So the new time will probably be much higher than the current time...
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3827)
Joined: 11/30/2014
Posts: 2834
Location: US
I remember seeing this run at SGDQ and thinking it would make a neat TAS, and now here it is, nice work!
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15629
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [3218] GB Bubble Ghost by MUGG in 04:44.22