TASVideos

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

Submission #3031: error1's GBA Hajime no Ippo: The Fighting! "Story Mode" in 04:19.85

Console: Game Boy Advance
Game name: Hajime no Ippo: The Fighting!
Game version: JPN
ROM filename: Hajime no Ippo - The Fighting!
Branch: Story Mode
Emulator: (unknown)
Movie length: 04:19.85
FrameCount: 15591
Re-record count: 15908
Author's real name: Isaac Wehmanen
Author's nickname: error1
Submitter: errror1
Submitted at: 2011-03-06 07:26:39
Text last edited at: 2011-03-11 17:41:55
Text last edited by: fsvgm777
Download: Download (764 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:

(Link to video)

This is a super fun, and good looking boxing game based on the popular manga.

Game objectives

  • Emulator used: VBA v23.4-interim svn324
  • Aims for lowest in-game time
  • Beats story mode with Date victory
  • Abuses what is probably a programing error

The difference of real-time vs in-game time is just the super freezes.

Comments

There are two types of damage in this game, red and yellow. When the combined red, yellow, and fractional damage is over 140 damage the opponent is knocked down. Red damage is permanent and can only be reduced between rounds. Yellow damage regenerates with time and is mostly counter productive for winning quickly. When a move does a fractional amount of red damage the game keeps track of it and doesn't do any rounding.

When an opponent is knocked down he will get up

  • If the red damage and fractional red damage combined is 140 or less and he has no yellow damage
  • If the combined damage is 140 or less and the down count is 8.
  • If the combined damage is 141 or greater and he has enough spirit meter to perform his special get up.

so in other words there are three basic strategies for winning quickly

  • by TKO, the 2nd, 3rd, and 4th matches take two knockdowns, and the rest take three
  • by manipulating the opponent to use a bunch of meter so they can't do a special get up after you do over 140 red damage
  • by doing more then 140 red damage, but less then 141
I'm pretty sure that last one is a bug, and it's by far the fastest method in each round. If you would like to see some other strategies, here is a run I did before I figured out how the last one worked. http://www.youtube.com/watch?v=mY_e2lZQFvQ

Exact damage done is based on a few modifiers

  • Counter hit adds 50% damage, if you hit with a combo, only the first hit gets the bonus damage
  • Hitting the recovery of a counter special move deals 100% more damage, this is only used once in the run
  • Early opponents take more damage then later opponents, for example Miyata takes 150% damage and Date takes 100%.

There isn't much you can do to manipulate the RNG. The AI has a set attack pattern hitting them or being hit will sometimes change the pattern. However the RNG isn't reset each match, so it's possible to get better individual match times by playing part of the match and resetting, overall it would be slower and really annoying for a tas.

Stage by stage comments

You don't start with all your moves, you get your moves in the matches as they are used in the manga

Miyata

150% base damage modifier.

Miyata has two counter moves and it's possible to get a 6 extra damage on a body blow by counter hitting one, but the extra damage wasn't worth the time it took to manipulate a counter.

Hajami

150% base damage modifier

Yellow damage management is really important for these first two rounds, because I need to end with a 9 red damage combo, I can't have more then 8 yellow damage for the second to last hit.

Mashiba

Takes 130% damage

You get the super body blow for this round, and it's the best move in the game by far, the only disadvantage is that it's really slow, so it's hard to land outside of combos to get the counterhit bonus. You will see a lot of it.

At the start of the round I attack when he is dogging to get him to use his counter move, this makes the super body blow do an insane 77 red damage.

Sendo

SENDO DAAA!

Takes 130% damage

You get the smash for this match, it's basically a faster version of the normal special uppercut with an extra 5 base yellow damage for twice the meter.

Sendo is slow and I'm forced to do some awkward combos because the super body blow does too much damage.

Okita

Takes 120% damage

Because the super body blow does less damage I can start fitting three in.

Saeki

Takes 120% damage

Really fast and dodgy with an extra range jab. Normally annoying, his high walk speed helps for a TAS.

Vorg

Takes 110% damage

You get the Gazelle punch for this round. 10 base red damage isn't really worth the 3 meters it takes, but it's a really useful attack because it can be canceled out of a super body blow.

This turns out to be close to the perfect base damage modifier for speed.

Date

Takes 100% damage

The only attack that can do fractional damage at 100% is a counter hit smash or a counter hit special uppercut. This match shows that you clearly start with too much meter.

You don't lose the game for losing this match and can't chose to continue. If you lose you will fight two more matches and then get a different ending screen.

technical information

base damage

Jab 0 red 4 yellow

hook 2 red 8 yellow

right 2 red 8 yellow

upper cut 2 red 10 yellow

body blow 8 red 0 yellow

F+R+B 5 red 20 yellow

D+R+B 30 red 0 yellow

L+R+B 10 Red 30 Yellow

R+R+B 5 red 25 Yellow

Demsley roll 5 red 20 yellow per hit for 8 hits 40 red 160 yellow total

lua script to display the opponents stats


  local redAddr=0x0200FC5E
  local red
  local redfAddr=0x0200FC5d
  local redf
  local yellowAddr=0x0200FC5A
  local yellow
  local spiritAddr=0x0200FC66
  local spirit
  local guardAddr=0x0200FC76
  local guard
  while true do
   red=memory.readword(redAddr)
   gui.text(172,2,"RED HP: "  .. red,"red")
   redf=memory.readbyte(redfAddr)
   gui.text(140,17,"Fractional RED: "  .. redf,"red")
   yellow=memory.readword(yellowAddr)
   gui.text(160,9,"YELLOW HP: " .. yellow,"yellow")
   spirit=memory.readword(spiritAddr)
   gui.text(172,30,"SPIRIT: " .. spirit,"magenta")
   guard=memory.readword(guardAddr)
   gui.text(176,37,"GUARD: " .. guard,"blue")
   emu.frameadvance()
  end

suggested screen shot

actual suggested screen shot


Mukki: Judging...

Mukki: Good response to an interesting movie. Accepted.


fsvgm777: Processing...

Similar submissions (by title and categories where applicable):