TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #6208: WarHippy's GBA Dragon Ball: Advanced Adventure in 33:31.87

Console: Game Boy Advance
Game name: Dragon Ball: Advanced Adventure
Game version: JPN
ROM filename: Dragon Ball - Advanced Adventure (J)
Branch:
Emulator: BizHawk 2.2.1
Movie length: 33:31.87
FrameCount: 120164
Re-record count: 182936
Author's real name: Scott M.
Author's nickname: WarHippy
Submitter: WarHippy
Submitted at: 2018-12-27 21:57:05
Text last edited at: 2018-12-31 12:33:55
Text last edited by: WarHippy
Download: Download (83169 bytes)
Status: published
Click to view the actual publication
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:
What would happen if Goku lost his childlike charm? Well, Dragon Ball: Advanced Adventure of course! From start to finish Goku turns it up to the max and destroys all enemies with blisteringly fast combos. Try to keep up as Goku makes his way from novice to hero. This TAS beats the submission by Another Gamer by over 11 minutes and 14 seconds.


(Link to video)

Game objectives

  • Emulator used: BizHawk 2.2.1
  • Aims for fastest time
  • Uses Hardest Difficulty
  • Shoots first and asks no questions later

Comments

The Story Mode follows Goku as he goes on the adventure of his lifetime. Most of the Dragon Ball story arcs are here; the only one noticeably missing is the Piccolo Junior storyline from the end of the series. There are many items to collect in the game, most of which are hidden. Items can include those that increase the player's health and/or ki, the Dragon Balls, or objects such as Master Roshi's sunglasses and Mercenary Tao's cyborg headgear. Since this run aims for fastest time we only collect the ki upgrades to give us a more powerful kamehameha.

Controls of the game differ from story mode to battle mode:

Story Mode
D-pad = Movement
D-pad (double press) = Run (can press B during it for a dash attack)
A-button = Jump (hold to affect height)
B-button = Basic attack (press successively for combos on the ground). Can combine with directions such as up or down and in midair for other moves

  • UP + B on ground = Spinning Staff. Hold B to increase duration. Can reflect projectiles and causes minimal, repeating damage. Can't be cancelled out of. Not used in the run.
  • UP + B in mid-air = Upper cut kick. Quick start-up. Can reflect projectiles. Can be cancelled out of. Used extensively in the run.
  • Down + B in mid-air = Dive kick. Hold B to keep diving. Large start-up time. Can be cancelled out of. Frequently used for movement optimization.
Throw = While near an enemy in hit stun you can press B + Left or Right to throw. Extremely large start-up and cool-down time.
L-button = Super Attack
R-button = Special Energy Attack (Hold to charge up; can walk, run and jump while charging but with much slower movement until released)
Hold R-button and press L-button = Rush attack into ultimate combination when you connect with an enemy. Used frequently for movement optimization.

One-on-One Mode
D-pad = Movement (double tap left or right to dash in respective direction)
D-pad (opposite direction of opponent) = Block
A-button = Jump (cannot manipulate jump height)
B-button = Melee Attack (can combine with forward for a launch combo, or combine with up/down in midair for other moves)
L-button = Unique action (example: L-button while knocked down uses up Ki for an Afterimage Technique)
R-button = Special Ki attack (unlike in Story Mode, can aim up or down on ground or midair)
R-button + L-button = Ultimate Attack (only usable with 4 ki bars)
D-pad UP + B-button = Parry (block a single hit without using up defense gauge)
D-pad DOWN + B-button = Low Attack (Guard Break)

Technical Stuff

Movement Optimization

Walking speed - Accelerates 64 units per frame up to 512 speed Walking speed (mid-air) - Accelerates 64 units per frame up to 544 speed Running speed - Accelerates 48 units per frame up to 768 speed Running speed (mid-air) - Accelerates 64 units per frame up to 768 speed L + R rush - Instantly sets speed to 640 and lasts for 25 frames. Jumping - Hold A for 23 frames to achieve maximum height. Holding it for 24 frames will set his y-speed to a lower value and he won't rise quite as high Wall Jump - Press against a wall and press the opposite direction + A. It has a 4-frame startup. Dive Kick - 7 frames of start-up and moves you 1440 sub-pixels backwards and 1464 sub-pixels upwards. Your x-speed then gets set to 928 for the duration of the move.

Using the L+R rush into a running jump is the fastest method of movement from a standstill. If you can't use the L+R rush (usually because an enemy is in the way), then doing a running jump is the next best option. If jumping isn't an option, then walking up to 512 speed and then into a run is the fastest.

Dive kicking is the fastest form of movement, but due to the start-up time you need to be able to hold the move for at least 50 frames for it be beneficial (7 frames to start up and then 43 frames once you start moving). You can only hold it for 33 frames when standing on level ground. This means that the area you end up in needs to be significantly lower than the one you start on. When you reach the ground at the end of a dive kick you end up preserving some speed for two frames if you wait until the frame you actually land before pressing a directional button. Pressing left or right early will result in your speed being set to 768.

Holding right: 928→768

Preserving speed: 928→864→800→768

Sub-pixel optimization also plays a role in this game. Each pixel consists of 248 sub-pixels and can be manipulated in increments of 8. The y-sx position is manipulated exclusively for dive kick optimization. The closer your y-sx position is to 0 before jumping the higher the chance that your dive kick can last one extra frame. It can be manipulated by jumping and changing your jump height. The x-sx position can be used to increase the chance of entering doorways and screen transitions one frame earlier. It can be manipulated by speeding up or slowing down your run or pressing up against the edge of the screen (your sx position cycles from low to high and back again).

Using the L+R rush or the dash attack can extend Goku's hit box in front of him which can let you trigger fights and screen transitions one frame earlier.

Random Number Generator

The RNG affects which attacks the enemy uses, which side of the screen they appear from, the amount of damage your attacks do, and also what attacks the bosses will start with. There are many things that can cause the RNG to change:
  • Enemy appearing on screen - Advances the RNG counter by 1
  • Any enemy action (attacking, stopping) - Advances by 1
  • Every 25 frames the enemy is in front of Goku and on-screen - Advances by 1 (but doesn't count any frames while the enemy is in the middle of an attack)
  • Most of Goku's attacks - Advances by 1
    • Neither the Up+B (spinning staff) nor the L special attack increment the rng
  • Hitting an enemy and getting hit increment the RNG by 7

Fight Optimization

Damage Chart
Attack Base Damage + RNG
Dash Attack 25 + 0-3
Standing B (1) 20 + 0-3
Standing B (2) 21 + 0-3
Standing B (3) 25 + 0-4
Standing B (4) 25 + 0-4
Standing B (5) 25 + 0-4
(mid-air) Up+B 21 + 0-3
(mid-air) Down+B 23 + 0-3
(mid-air) B 26 + 0-4
Throw ~100
Throw momentum ~20
L special (1-4) 13 + 0-5
L special (final hit) 77 + 0-5
L+R rush ~200
Ki Blast Lv. 1 ~40
Ki Blast Lv. 2 ~60
Ki Blast Lv. 3 ~135 over 7 hits
Ki Blast Lv. 4 ~200 over 10 hits

Most enemies have 120 HP. After a lot of trial and error it was found that a 5-hit combo was the fastest way to finish an enemy. The combo was Dash attack -> Standing B (1) -> Standing B (2)-> Jump -> (mid-air) Up+B -> (mid-air) B {this final hit was usually changed to a dive kick for better positioning}. The base damage for the combo was 110 which means that to get the extra 10 damage the RNG portion had to be above average for every enemy using this combo.

On top of needing above-average damage output I needed to make sure that the enemies were spawning from the correct side of the screen when possible. I wanted to be as close as possible to the right side of the screen when the last hit was delivered to the final enemy. I also wanted the final hit to be a dive kick or an attack that I could cancel into the L+R rush. This part wasn't directly affected by RNG, but it did mean that I had to use a variety of combos with a variety of damage outputs to make sure I was positioned well at the end of a fight.

Boss Fights

Boss fights are generally much easier to optimize once you can figure out how to manipulate the best starting pattern. You just get in there and keep repeating the highest damage combo which is pretty similar to the combo used on regular enemies (Dash attack → Standing B (1) → Standing B (2) → Jump → (mid-air) Up+B → Dive Kick → (mid-air) B → Land and Dash Attack again). When fighting against bosses or enemies that can't be hit from the ground it's best to simply Dive Kick → Up Kick ad infinitum.

Regular sized bosses (such as Yamcha, Krillin, Devil Man, etc..) can only be combo'd for as long as they're in the air, and they can only be popped up once per combo with (mid-air) Up+B. The only way you can keep them in the air is with the L+R rush. It initially seems like the L+R rush does a lot of damage, but due to its super long cool down time it ends up being faster to just continue with the regular combo as along as possible. For comparison the L+R rush does ~200 damage in 83 frames and the regular combo does ~240 damage in 91 frames.

The 'Area Clear' phrase only appears a fixed amount of time after the boss has reached his final resting animation on the ground. The L+R rush will sometimes be used as the finishing combination because the final hit will automatically set the enemy into a state very close to the final resting animation. But other times it will waste time by sending the enemy flying and bouncing against the wall.

Stage by stage comments

Goku's House

The journey begins. And it starts off on a very complex level, too. Nearly 35,000 re-records were spent on this level alone. While it doesn't seem unusual to spend a lot of time learning the game mechanics I would still rate the second fight in this level as the hardest fight in the game to optimize. And the second hardest in the game is the last fight of this level right before the boss. Again, hitting that perfect trifecta of getting the enemies to spawn on the correct side of the screen, getting high damage, and finishing the fight with the right positioning was a nearly impossible task. You'll often see Goku punching and attacking the open air before and during the fights. This is to manipulate the RNG wherever I can. I try the best I can to change the RNG without losing any time, which often means going back to the previous fight to add some punches.

Oolong's Village

Fight against the shapeshifter Oolong. You want to end the fight with Oolong as far to the right as possible, but every time you hit him he drifts to the left. The L+R rush is used to pop him out from the left side of the screen. Otherwise, he would go too far off screen and you would spend several seconds waiting for him to reset. All the attacks at the end are for manipulating the Yamcha fight coming up next.

Wilderness

The battle against Yamcha. I stumbled across a very rare starting pattern for him where he's already dashing halfway across the screen. I do have to wait for him to drop down a little bit before starting my attacks so that he doesn't get popped up too high from my up kick. After this fight we get access to the Kamehameha.

Pilaf's Castle

Any enemies that are on screen right before a fight starts don't actually need to be killed in order to advance. Only the ones that spawn after the yellow exclamation mark need to be killed. I always end up dealing with them, though, for RNG purposes or so they don't interfere with my attacks.

The enemies in green coats usually throw grenades as their first action. I always reflect these with the Up kick to do around 300 damage. It's faster to wait a few frames and reflect the grenades than it is to kill them with a regular combo, and it usually sets me up in a better position anyways. This hold true for every grenade-throwing or rocket-launching enemy in the game.

Wall jumps provide a speed boost away from the wall which normally makes it impossible to do more than one in a row. By immediately doing the L+R rush back towards the wall we can scale the whole wall and bypass the whole section. Getting hit by the boulder pops up Goku just high enough to reach the wall. That particular maneuver makes use of another trick in which you can cancel the damage animation with another attack. It's done simply by pressing an attack button right after getting hit, but it can only be used after getting hit in the middle of a mid-air attack. It doesn't always work, though, and I'm not too sure why. But it does work all the times I need it to, which is quite often throughout the run (nearly every time you see me getting hit).

The Bosses need to be killed at the same time in order to avoid an insane amount of lag from the destruction animation. I reflected a missile at the very beginning of the fight that only hit one of them, so I had to hit only the other one a couple times near the end to re-sync their health bars.

Island of Training

Master Roshi has thrown a rock deep into the jungle, and Goku and Krillin have to race each other to find it. There's only 1 mandatory fight in this level. Everything else is about optimizing dive kicks and general platforming. In the end Krillin tries to fight you for the stone and loses. He tricks Goku afterwards and still ends up getting the stone back to Roshi first.

Goku then punches some rocks in a training mini-game. RNG determines where the rocks appear from which is important since you have very little time to maneuver before needing to jump to hit the next rock.

Afterwards, we move on to the Battle Mode tutorial (aka VS mode) (aka One-on-One mode)

Battle Mode

The game mechanics change completely from story mode. The controls are worth re-listing here.

D-pad = Movement (double tap left or right to dash in respective direction)
D-pad (opposite direction of opponent) = Block
A-button = Jump (cannot manipulate jump height)
B-button = Melee Attack (can combine with forward for a launch combo, or combine with up/down in midair for other moves)
L-button = Unique action (example: L-button while knocked down uses up Ki for an Afterimage Technique)
R-button = Special Ki attack (unlike in Story Mode, can aim up or down on ground or midair)
R-button + L-button = Ultimate Attack (only usable with 4 ki bars)
D-pad UP + B-button = Parry (block a single hit without using up defense gauge)
D-pad DOWN + B-button = Low Attack (Guard Break)

Combos are heavily regulated in this mode. Meaning they are more difficult to perform, and the same hits cannot be repeated during the combo. For example, if I use Up+B in mid-air, then pressing Up+B again later in the combo will result in no attack coming out. You can do a maximum of a 6-hit combo in mid-air (Neutral B → Neutral B → L+B → R+B → U+B → D+B). The final hit of that combo (D+B) is a knockdown move, so you never want to use it while they're in the air without a defense gauge.

Damage Chart

Attack Damage Description
Dash Attack 14 Usually first hit
B (1) 5 Normal attack
B (2) 5 Normal attack
B (3) 14 Heavy Knockdown, never used
f+B (1) 8 Normal attack
f+B (2) 8 Normal attack
f+B (3) 11 Launcher, never used
D+B 14 Low Attack, Knockdown
(mid-air) B (1) 8 Heavy Punch
(mid-air) B (2) 5 Kick
(mid-air) f+B 5 Kick
(mid-air) b+B 8 Heavy Punch
(mid-air) u+B 5 Kick
(mid-air) d+B 14 Knockdown Punch
Ki Blast (1) 10 6-8 hits
Ki Blast (2) 12 6-9 hits
Ki Blast (3) 14→10 Knockdown
Ki Blast (4) 16→10 Knockdown
Ultimate Attack 160 Must be mid-air

All of the attacks can be done in pretty much any order you want. The real limiting factor is that ground attacks cannot be cancelled into jumps. There's about a 20 frame cool down to return to a neutral position from a punch. When you land from a mid-air attack you immediately cancel into a neutral position meaning you can jump or attack again right away.

The green bar below the health bar is the guard gauge. While it's full you can recover from attacks very quickly. When it's depleted there occurs a long stun animation (about 40 frames) where the opponent can perform as long of a combo as they can manage. It has 16 hit points and it acts very differently than the normal health bar. All attacks do varying amounts of damage to it, and it also changes based on if you're interrupting a move or not. Using a knockdown attack to break the guard gauge will stop the attack from actually knocking the opponent down. I will usually use D+B in mid-air to do this after they've recovered some of their gauge after a ki blast.

It takes 7 frames to jump, and you cannot altar the height of it. If you jump during a dash, then it only takes 1 frame to jump. Jumping during a dash will cause you to retain your momentum and is actually very useful throughout every fight to ensure that you're always close enough to the opponent to hit them with your attack. If you are already positioned well, then you can press Up on the frame you jump in order to jump straight up. Positioning is very important when landing for firing the Kamehameha. If you're too close the ki blast won't do a large number of hits. If you're too far away, then the ki blast will hit fully and the final hit will cause a knockdown.

When two attacks collide there will be a several frame pause before the more powerful attack wins out.

In all of the VS fights in the game you never want the enemy's defense bar to start regenerating or else you'll spend 30-45 frames going through the stun animation of breaking their defense without dealing much damage. The main difficulty in these fights is to manipulate the opponent to do an attack immediately after a ki blast. This depends on the rng and your height/position relative to the opponent. This will prevent their defense gauge from refilling since they won't be in a neutral position anymore.

The RNG changes far less often than in story mode, too. I can't quite figure out what causes it to change. Attacking, hitting, or blocking don't often cause a change. It usually seems to change in the time between hits.

Battle Mode Tutorial

The character names will also vary from the known story line. Sometimes quite drastically. I'm sure you've noticed by now _THE MAIN CHARACTER_ of the game is Gokou instead of Goku.

In the first tutorial you need to break his guard gauge as quick as possible. In the second tutorial you need to block 3 attacks. In the third tutorial you need to perform a knockdown combo (not just a knockdown). In the fourth tutorial you need to perform a launch combo into a knockdown.

21st World Tournament

* 1st opponent - Giran

He has a very large hit box. Lots of attacks could hit, and the final ki blast could hit 1 more time than any other opponent in the game.

* 2nd opponent - Nam

I was unable to manipulate Nam into jumping. He was a very wise opponent. But it didn't stop me from taking him out in record time.

* 3rd opponent - Juckie-Chun (aka Jackie-Chun)

Silly Roshi, fights are for kids.

Muscle Tower

The second longest level in the game with 3 mini bosses. The Murasaki Ninja fight was certainly the hardest to figure out. They can start blocking attacks and teleporting away in the blink of an eye. I could not find a way to get all 5 clones into the same combo. The final boss can only be damaged while he's frozen. Using the L+R rush extends the length of time the freezing beam stays active. I have to use all 3 charges in order to kill him on the first cycle.

Underwater Cave

Most of the enemies in this level are bats which only have 1 health. In some fights they will not appear if you are too close to the edge of the screen. In the second half of the level I picked up a purple turtle shell which is a fantastically powerful item. It makes Goku invincible and any enemy I touch takes about 30 damage. By far the most powerful aspect of this item is that I can cancel an attack into another attack every other frame, and the new move will do its damage on the very next frame (even before the move animation starts). So I can do ~25 damage every other frame.

Land of Korin

First fight against Taopaipai. This is a mandatory loss. After he knocks you down he will use up all of his meter on ki blasts, one bar at a time. I block or negate a few of his attacks in the beginning so that he can build up enough meter to do 3 ki blasts in a row which is just enough to kill me.

Up next Goku tickles a cat to get more powerful in the Korin mini game. All of Korin's actions are dependent upon your position, the direction you're facing, and ,as a matter of course, RNG. The only way to manipulate rng in this mini-game is to press the B button (the capture button) which takes 31 frames to complete. All other buttons are disabled. After capturing Korin he will fade out and re-appear somewhere else. He will either fade-in in a position relative to Goku (usually a medium distance away) which can take several extra frames to catch since you can't touch him until he's completely solid, or he'll instantly appear in mid-air with several of his copies flying around. Catching him when he appears in mid-air is the fastest option, but it's definitely not possible to manipulate every time that I could find.

Rematch against Taopaipai. We get proper revenge on him this time around. The level 3 ki shot is used to finish him off. The first four hits do 14 damage and the rest do 10 damage each.

Red Ribbon Army Base

The first half of this stage is the only auto-scroller in the game. Lots of fun had here just bouncing around with the cloud. Holding Up or Down changes the cloud's position even while off-screen significantly affects Goku's vertical movement. This is how he can jump from the bottom of the screen to the top very quickly or vice versa. Backwards jumping is also possible on this stage but only because the scrolling can retain my momentum.

The blue ships are the only enemies that need to be destroyed in the fights to move on (a couple times a gray one, too). The grey mechas never need to be destroyed. I just do it for fun.

Most of the difficulty in this part was optimizing the screen scrolling to be in all the right places at all the right times for spawning enemies. The truly difficult one was the last fight before the transition. You want the screen to be scrolled as far to the right as possible when delivering the final attack so that the transition will occur as soon as possible. Getting the final enemy to appear from the right side was a rare rng event, and it had to happen on top of a couple other difficult manipulations in order to even get to the right side of the screen in a timely manner.

The second half of this level was pretty straight forward compared to earlier platforming levels. All of the blue soldiers had 131 health instead of 120, so I had to add in an extra hit to the combo to finish them off. This was actually a relief since I didn't have to go crazy making sure every hit did high damage anymore (for the most part). I was also able to skip one of the fights by crossing the large gap underneath one of the bridges. In some earlier testing it was found that the fight checkpoints extend all the way up to an invisible ceiling, but it looks like they don't extend below the ground. No other fight skips were found in the game.

Baba's Palace

The first fight at Baba's Palace is against Spike the Devil Man in the Devil's Toilet arena. He starts with a laser attack, so I use the L+R attack to break his stance. Otherwise he only takes half damage while charging and firing his beam. I've seen videos of him starting with a different movement, but none of the RNG changes I could make would cause a different start. A little interesting trick to note at the end of the fight. Goku can go below the instant death barrier at the bottom of the screen as long as he's in the middle of a dive kick or L+R rush. But you die if you go too far out of bounds or if you stop the move.

The second fight is a One-on-One battle against Grandpa Gohan whom Baba is able to bring back to life for one day.

City Street

Next is a fight against Shu and Mai in a giant robot combination. All of the missiles are reflected back for massive damage making for a quick fight.

22nd World Tournament

This tournament marks a noticeable increase in AI difficulty. They attack far more often, and their defense gauge can sometimes refill even during attacks.

* 1st opponent - Lord Emperor Chaoz (aka Chiaotzu)

Easily the smallest opponent in the game. I had to take a little extra time to do some extra hits since not all of mine could connect in the same jump.

* 2nd opponent - Klilyn (aka Krillin)

Very similar to the Chiaotzu fight.

* 3rd opponent - Tenshinhan (aka Tien Shinhan)

Regular sized opponent. It took a little bit more time at first before I could get him to jump so that I could combo him efficiently.

Above City

A boss fight against one of Piccolo's minions

Yajirobe's Prairie

This is our first encounter with Piccolo. It is a required loss, and nothing I could do could make it happen faster than just standing there.

Cave of Darkness

After Goku is defeated he goes to Korin for more training. There he drinks the Ultra Divine Water where he is transported the maze-like cave of darkness. He fights shadow versions of Yamcha, Krillin before obtaining the water item. This is also where the 4th and final Ki upgrade is collected.

Chow Castle

A wholesale butt whoopin' of some Namekian critters leading up to the fight against King Piccolo. The two purple turtle shells sped things up greatly.

King Piccolo

King Piccolo is tall. Very Tall. So much so that all but one of my aerial attacks is able to hit him for a full combo. What's even better is that since he's standing on the ground my D+B knockdown move doesn't actually knock him down, and I get to hit him with it twice per loop (14 damage each whereas all other attacks do 5 or 8). I finish the fight off with the L+R Ultimate Attack which requires all 4 ki bars. The movie input doesn't end until after the ending cutscenes.

Special Thanks

A huge shout out to xy2_ and ThunderAxe31. They both provided invaluable help in creating and maintaining the .lua scripts used in this run as well as finding new tricks and optimizations early on in the game. I want to give a big thanks to Mugg, as well, for his work early on. His help in the first level set the bar for optimization for rest of the game.

Other Comments

Wow. This game was hard fun Hard. I've never worked on a game that had such intricate mechanics. To me TASing is an exercise in creativity, and this game has unlimited possibilities at every turn. I feel like I could have spent a whole second year on it just to truly understand everything. I don't know what else to say other than it was a great experience, and I'm glad I saw it through to the end.

Possible Improvements

So many possibilities for the VS fights. Any methods for not letting the opponent's guard gauge refill is well worth the time looking into.

Underwater Cavern. Better use of the turtle shell. Either pick it up earlier to finish the fight faster, or pick it up at the end to maybe make it last all the way to the mini boss.

Better manipulation of Korin mini game. I don't know how many more times he can be manipulated into appearing instantly instead of gradually.

Lag Management. Mostly within the cloud portion of the Red Ribbon Army level.

Better sub-pixel optimization. There were always so many different things to keep track of that I often missed opportunities to improve sub-pixel positions.

Attempting to use the Lvl. 4 Kamehameha in more situations that just the final hit on Piccolo. It might be faster to not pick it up otherwise.

Mapping out the entire RNG system and making a perfect run.


ThunderAxe31: Judging.

ThunderAxe31: Accepting as improvement over the published movie.

feos: Pub.


Similar submissions (by title and categories where applicable):