Submission #4190: Chamale's NES River City Ransom in 05:56.76

Nintendo Entertainment System
FCEUX 2.2.2
River City Ransom (U).nes
Submitted by Chamale on 2/13/2014 5:08:58 AM
Submission Comments
This is a TAS of River City Ransom I partially completed years ago, and recently decided to finish.

Suggested Description

In River City Ransom, Alex and Ryan face off against gangs of students and evil bosses to win their town back and rescue Ryan's girlfriend.
A glitch is used in this run when left and right are pressed at the same time, which can be used to make a player lose all of his power or launch his teammate through a wall. Character death is used to reduce lag during running segments. The boss battles are fought using a variety of attack methods throughout.

Suggested Screenshot

This run:

  • Aims for fastest time
  • Abuses programming errors
  • Takes damage and uses death to save time
  • Controls 2 players

Tricks Used

Mashing left+right to run causes that character to glitch out, rapidly going back and forth and falling out of the game world. If one character is holding the other, the wall warp bug makes it possible to throw the top character through the wall in Rocko's warehouse.
Letting one of the characters die reduces lag, so I kill them off a lot by jumping into pits or using the left+right bug. The main characters die a total of 30 times in this run.
Thrown or kicked trash cans do damage at the moment they stop moving. A trash can kicked by a boss can deal over 40 damage if it hits the boss normally and when it stops moving.
Beginning a flying kick just before landing lets the player bounce and use repeated flying kicks, a high-damage attack also used in unassisted speedruns.
Moose is supposed to be the first boss, but if you avoid fighting him it's still possible to beat the game normally.

The Lag Problem

This game is difficult to TAS because it is so laggy. Typically only every second or third frame accepts input, and in battles this can drop to one in four. Moving around, attacking, carrying a weapon, and being near an enemy all create lag. Thrown objects generate a lot of lag because the game makes physics calculations. The game's RNG is mostly influenced by timing, so luck manipulation is sometimes slower than generating enemy positions with the lowest lag.

Improving the Last Run

Getting boss fights as fast as possible is difficult, because the best strategy involves repeatedly retreating and running back with a flying kick or weapon attack. The best way to fight bosses quickly is to monitor the memory addresses 04C1 and 04C2, which hold enemy health. I try to knock down bosses with as much damage as possible, and keep in mind that a standing boss takes damage more quickly than a downed one. Never damage a boss on the ground if he has no health, this stops him from standing up for a while.
There are subtle ways to increase the speed of area transitions. In some cases, it is faster to stop a character from running in order to start running sooner in the next area. Bosses are considered defeated a few frames before dropping a coin; I tested the earliest frame I could leave and have the boss say "here we go again" when I returned.

Detailed breakdown

Roxy: In the first 40 seconds of this run, I saved 72 frames by simply reducing lag and slowing down before entering new areas, to start running in the new areas sooner.
Rocko: 732 frames saved in the Rocko fight, mostly by manipulating the enemy spawn positions in the warehouse. After defeating the four gangsters to make the boss spawn, I used the wall warp to reach Rocko sooner and have one character fight him alone.
Blade: 140 frames saved, no route change. A quick death warp to Blade and the fight's over in short time.
Turk: 416 frames saved fighting Turk with a better wall warp in the warehouse and enemy manipulation.
Mojo: 389 frames saved fighting Mojo by manipulating enemy positions and fighting much more efficiently.
Thor: 418 frames saved and a new strategy - one character throws the other over an obstacle to reach the boss sooner and wins the fight alone.
Ivan: 346 frames saved by picking up two garbage cans, the best weapon in the game, and fighting better. The garbage can deals as much damage as the chain or pipe, but it can be kicked along the ground to attack a boss.
Otis: 424 frames saved, with a slight strategy change. Because of the long distance between Otis's spawn point and the next area, it's worthwhile to throw him closer to the doorway and fight over there.
Dragon Twins: 296 frames saved here. Note that the twins have a long defeat dialogue unless one of them drops a coin before the other one gets knocked out. At this point it's often efficient to let the AI accidentally attack itself by kicking or throwing a garbage can against the wall. Ryan being hit by the can is not a mistake; it lets the twins stand up faster and get beaten sooner.
Simon: 130 frames saved over the last run. I decided to finish input at the moment Simon gets knocked out, whereas previous runs used the less-entertaining strategy of hiding in a corner while the boss runs into a wall and eventually dies. The new timing should make it easier to compare similar runs of this game. By this timing, the improvement is 594 frames over the last run.

Possible improvements

I'm planning a single-player TAS of this game that may be faster than the two-player version. This game is so laggy that a single player would run through the early areas faster, and Roxy's dialogue is several seconds shorter when she talks to Ryan instead of both characters. I expect a single-player run would gain time to lag reduction in the early part of the run and lose time to bosses in the later parts.
Note: It's possible to create a shorter input file that wins the game in a longer time. I've uploaded an input file that is 10 seconds shorter and defeats Simon with a time of 6:02.60 rather than 5:56.76. Link: userfiles/info/12661790280580395

Nach: Accepting as improvement to existing run.
Spikestuff: Eh. While I'm waiting on other stuff.
Last Edited by adelikat on 9/1/2023 1:46 PM
Page History Latest diff List referrers