Post subject: River City Ransom EX
Joined: 6/4/2004
Posts: 284
Hello, everyone. Since the new VBA player seems to be working now, how about this game as a possible run?
Joined: 7/14/2004
Posts: 89
Depends on the difficulty. On Crazy it's really hard to keep stuff interesting, and I believe the fastest method would involve buying no items so you're stuck using Dragon Feet/Mach Punch with your ally/allies being stronger than you
SWOOOOOOOM
Former player
Joined: 3/30/2004
Posts: 1354
Location: Heather's imagination
Would you even be able to get any good allies (= the Shitenou) without spending time to boost your reputation? Edit: Of course you couyld use one of the Omake modes to get techniques. Or mess with other settings to make the gameplay interesting (change gravity to allow for air combos etc).
someone is out there who will like you. take off your mask so they can find you faster. I support the new Nekketsu Kouha Kunio-kun.
Joined: 7/14/2004
Posts: 89
I don't know the japanese names but if you mean the Generic Dudes, they'd take far too long to get. I think the only partner who's really worth it would be Ivan, unless you play fair (slow) enough to get Thor.
SWOOOOOOOM
Former player
Joined: 3/30/2004
Posts: 1354
Location: Heather's imagination
The Shitenou (Kinoshita, Mochitzuki, Taira, and Kobayashi) are the four main bosses of the game.. they all attend Reihou Academy. You can get any of them to join but at the end of the game Yamada kills all of them for betraying him so you have to fight that battle alone. If you can wait that long without a full team you could get Gouda and Godai once you're at Reihou.. ..but again, all of these people need reputation, which you don't really have time to amass.
someone is out there who will like you. take off your mask so they can find you faster. I support the new Nekketsu Kouha Kunio-kun.
Joined: 6/4/2004
Posts: 284
...that, and the fact that you take a reputation hit when you hit a boss during their intro spiel, pretty much cancels that out. It would be better to play as either Alex or Ryan (Kunio/Rikki) alone, and get Gary (Sugata) at the beginning, or Rick (Maeda) at the park. Both characters have higher starting stats, so they can be used as support/a shield as necessary. Actually...I don't think you need reputation to get Ivan (Gouda), so if a little backtracking is ok, you have a third, powerful member for your group. If you've got him and enough reputation (hmm) you can recruit Tex (Godai), although I wouldn't recommend it--with three non-Zombie allies, Slick calls in help that really slows the game down. Actually, you get reputation every time you get knocked down (sympathy?), so if you let your partners handle the enemies and just run into a wall repeatedly, perhaps you can gain enough points.
Joined: 7/14/2004
Posts: 89
I don't think Ivan(Japanese Name Here) needs reputation, all it takes is a run-about which wouldn't take too long compared to how awesome strong he is.
SWOOOOOOOM
Post subject: River City Ransom EX
Joined: 5/13/2013
Posts: 180
After the NES playaround with two players, which had me rolling on the floor holding my guts in from laughter, I found this cool remake of the game on the Game boy Advance. It's actually a lot better than the NES version in terms of gameplay and graphics. What do you guys think? Would a GBA run of this game work?
A wise man once said "Damn, that's one hell of a steak."
Post subject: River City Ransom EX | OT | Information Thread
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
Gathering from only these 2 threads (1 and 2), there isn't any way to get up-to-date information on the GBA game, River City Ransom EX. Gotta start somewhere, I guess... This will be my thread, containing information, RAM addresses and values, and other stuffs about the game that can be useful to get a speedrun going. I appreciate if anyone else is interested in doing the run, or share their findings about the game. ----------------- This is my current submission (00:08:39) This is the current submission discussion I don't think it's gaining traction, so I think maybe one has to tackle the high grounds first in order to at least get some publication going... To start, this is my current findings with RAM values. Beware that different ROMs will have different RAM addresses. Please correct me if I got anything wrong, or if you know what other info I missed: Latest findings
River City Ransom EX [GBA][USA]:
File Name: River City - Ransom EX (Venom) 1.0 USA.gba
MD5 - C098362CA95E73D92BEE95F462724560

Legend:
^ - See above; Is related to above.
Notes - They are only related to the RAM address and value directly above them. Not under.
<newline> - Stopgap for missing information.
[XXXX - YYYY] - RAM Addresses Region from XXXX to YYYY.



| Address     | Size         | Display             | Purpose
-----------------------------------------------------------------------------------------------------------------------------------------
| 0000        | 1            | Unsigned            | Transition Screen? (always 0x0 or 0x5)
| 0002        | 2            | Unsigned            | Area Zone ID
| 0004        | 1            | Unsigned            | Controls

10000000b      128             Down
01000000b      64              Up
00100000b      32              Left
00010000b      16              Right
00001000b      8               Start
00000100b      4               Select
00000010b      2               B
00000001b      1               A

No L and R buttons

| 0008        | 1            | Unsigned             | Rendering tick count accumulator (0 to 255). (Low Bits)
| 0009        | 1            | Unsigned             | Rendering tick count accumulator (0 to 255). (High Bits)
 
| 0368        | 2            | Hex                  | Timing that controls when a player can start to freely move. (Counts down)
| 0370        | 2            | Hex                  | Sets to 0x0 when values in 0x0368 and 0x0372 are both 0x0 and 1000 equivalently.
| 0372        | 2            | Hex                  | Timing that controls when a player can start to freely move. (Counts up)

| 06D4        | 1            | Unsigned             | Has to do with background scene textures.
| 06D5        | 1            | Unsigned             | ^
| 06D6        | 1            | Unsigned             | ^
 
| 06E1        | 1            | Unsigned             | Has to do with background scene textures.
| 06E2        | 1            | Unsigned             | ^
| 06E3        | 1            | Unsigned             | ^

| 06E6        | 2            | Hex                  | (Foreground) Layer 0 texture X position (Little Endian)
| 06E8        | 2            | Hex                  | (Foreground) Layer 0 texture Y position (Little Endian)
| 06EA        | 2            | Hex                  | (Foreground) Layer 1 texture X position (Little Endian)
| 06EC        | 2            | Hex                  | (Foreground) Layer 1 texture Y position (Little Endian)

| 0702        | 2            | Hex                  | (Background) Layer 2 texture X position (Little Endian)
| 0704        | 2            | Hex                  | (Background) Layer 2 texture Y position (Little Endian)
| 0706        | 2            | Hex                  | (Background) Layer 3 texture X position (Little Endian)
| 0708        | 2            | Hex                  | (Background) Layer 3 texture Y position (Little Endian)

| 073E - 074A | 2 x 7        | Hex                  | Text spritesheet / mapping addresses, top row (assuming)
| 074C - 0760 | 2 x 11       | Hex                  | Text spritesheet / mapping addresses, bottom row (assuming)
| 076A - 0770 | 2 x 4        | Hex                  | Text messages pointer data for enemy gang shouts. (assuming)

| 09B5        | 1            | Unsigned             | Area Section Name

| 09B9        | 1            | Unsigned             | Wrapper string?

| 073E - 09E4 | 2 x 340      | Hex                  | (Region) Has to do with text messages and pointer data to strings.

| 0AA5        | 1            | Unsigned             | Text message cursor position
 
| 0D18        | 4            | Hex                  | Something to do with Rendering buffer
| 0D20        | 4            | Hex                  | ^
| 0D28        | 4            | Hex                  | ^
| 0D30        | 4            | Hex                  | ^
| 0D38        | 4            | Hex                  | ^
| 0D40        | 4            | Hex                  | ^
| 0D48        | 4            | Hex                  | ^
 
| 0D20        | 4            | Hex                  | Something to do with Player's sprite position or updates
 
| 0DB8        | 4            | Hex                  | Something to do with Enemy B's sprite position or updates
| 0DC0        | 4            | Hex                  | ^
| 0DC8        | 4            | Hex                  | ^
| 0DD0        | 4            | Hex                  | ^
 
| 0AB0        | 1            | Unsigned             | Crashes when freezing addresses
| 0AB1        | 1            | Unsigned             | ^
| 0AB2        | 1            | Unsigned             | ^
| 0AB3        | 1            | Unsigned             | ^
 
| 211C        | 1            | Unsigned             | Has to do with color masking
| 211E        | 1            | Unsigned             | Has to do with color masking. Needs to be +0x1 more than 211C value.
 
| 2127        | 1            | Unsigned             | Unknown
 
| 216A        | 1            | Unsigned             | Unknown
| 216B        | 1            | Unsigned             | Unknown
 
| 216E        | 1            | Unsigned             | Background Y position (Low Bit)
| 216F        | 1            | Unsigned             | Background Y position (High Bit)
 
| 2170        | 4            | Fixed Point 16.16    | Background X position (Little Endian)
 
| 2172        | 1            | Unsigned             | Background X position (Low Bit)
| 2173        | 1            | Unsigned             | Background X position (High Bit)
 
| 217A        | 1            | Unsigned             | Unknown
| 217B        | 1            | Unsigned             | Unknown
| 217E        | 1            | Unsigned             | Unknown
 
| 2180        | 1            | Unsigned             | Something to do with area transitions
| 2181        | 1            | Unsigned             | ^

| 2184        | 1            | Unsigned             | Enable Rendering Layers Bitmask

0 = Null (no scenery)
1 = Text only
2 = Foreground
4 = Background
8 = Sky
15 = All

| 21B2        | 1            | Unsigned             | Unknown
 
| 21B6        | 1            | Unsigned             | Background texture Y position
| 21B7        | 1            | Unsigned             | Background texture Y position. Negative number if 255.

| 220C        | 1            | Unsigned             | Player X position in the game area (Low Mantissa)
| 220D        | 1            | Unsigned             | Player X position in the game area (High Mantissa)
| 220E        | 1            | Unsigned             | Player X position in the game area (Low Bit)
| 220F        | 1            | Unsigned             | Player X position in the game area (High Bit)

When Player's X position is 0x15, will transition to new area.

| 2210        | 1            | Unsigned             | Player Y Jump position in the game area (Low Mantissa)
| 2211        | 1            | Unsigned             | Player Y Jump position in the game area (High Mantissa)
| 2212        | 1            | Unsigned             | Player Y Jump position in the game area (Low Bit)
| 2213        | 1            | Unsigned             | Player Y Jump position in the game area (High Bit). 255 is negative.
| 2214        | 1            | Unsigned             | Player Y position in the game area (Low Mantissa)
| 2215        | 1            | Unsigned             | Player Y position in the game area (High Mantissa)
| 2216        | 1            | Unsigned             | Player Y position in the game area (Low Bit)
| 2217        | 1            | Unsigned             | Player Y position in the game area (High Bit). 255 is negative.
| 2218        | 1            | Unsigned             | Player Jump power facing right (0 or 128).
| 2219        | 1            | Unsigned             | Player +X speed (Low Low Bit)
| 221A        | 1            | Unsigned             | Player +X Speed (Low High Bit)
| 221B        | 1            | Unsigned             | Player +X speed (High Low Bit)
| 221C        | 1            | Unsigned             | Player +X Speed (High High Bit)
| 221D        | 1            | Unsigned             | Player -X speed (Low Low Bit)
| 221E        | 1            | Unsigned             | Player -X Speed (Low High Bit)
| 221F        | 1            | Unsigned             | Player -X speed (High Low Bit)
| 2220        | 1            | Unsigned             | Player -X Speed (High High Bit)
| 2221        | 1            | Unsigned             | Player Y Acceleration (Low Mantissa)
| 2222        | 1            | Unsigned             | Player Y Acceleration (High Bit). -Y is positive

| 2258        | 1            | Unsigned             | Player Finite State Machine ID

| 22A4        | 1            | Unsigned             | Something to do with going from shop (safe areas) to non-safe areas:

255 = Shops
58 = Non-shop areas

| 22DC        | 1            | Unsigned             | Duration between Player animation frames, counts down to 0. When 0, sets a new animation frame.

| 250C        | 1            | Unsigned             | Duration between Enemy A animation frames, counts down to 0. When 0, sets a new animation 

Frame #:
  Running: 4 -> 0, 4 -> 0, 4 -> 0, repeat
  Walking: 8 -> 0, 6 -> 0, 8 -> 0, repeat

| 250E        | 1            | Unsigned             | Flag to jump to next animation frame:

0x5 = Continue playing animation
0xD = Jump to next animation

Loop
  Update:  0xD       0x5       0x5       0xD       0x5       0x5       0xD       0x5
  Render: Walk 1 -> Walk 1 -> Walk 1 -> Walk 2 -> Walk 2 -> Walk 2 -> Walk 1 -> Walk 1
EndLoop

| 2676        | 1            | Unsigned             | Enemy A Y position in the game area (Low Bit)
| 2677        | 1            | Unsigned             | Enemy A Y position in the game area (High Bit)

| 273A        | 1            | Unsigned             | Jump Kick animation ID
| 273C        | 1            | Unsigned             | NPC Walking Animation loop duration

| 2AB4        | 2            | Unsigned             | Current Money


| 24E1        | 1            | Unsigned             | Unknown purposes. Value is deallocated when entering new areas. Value is determined to be a type identifier for enemy gangs, as follows:

Stickville - Park Entrance
  8 = Generic Dudes
  6 = Frat Boys
  2 = Entrees
  1 = Dragons
  0 = Mob

| 243C        | 4            | Fixed Point 16.16    | Enemy A X position in the game area (Little Endian)
| 2444        | 4            | Fixed Point 16.16    | Enemy A Y position in the game area (Little Endian)
   
| 289C        | 4            | Fixed Point 16.16    | Enemy B X position in the game area (Little Endian)
| 28A4        | 4            | Fixed Point 16.16    | Enemy B Y position in the game area (Little Endian)
| 28A8        | 4            | Fixed Point 16.16    | Enemy B X speed (Little Endian)

When value is 0 and the enemy is in the Running state, the enemy will respond as if it has hit a wall.

| 28AC        | 4            | Fixed Point 16.16    | Enemy B Y speed (Little Endian)

| 2CFC        | 4            | Fixed Point 16.16    | Enemy C X position in the game area (Little Endian)
| 2D04        | 4            | Fixed Point 16.16    | Enemy C Y position in the game area (Little Endian)

| 315C        | 4            | Fixed Point 16.16    | Enemy D X position in the game area (Little Endian)
| 3164        | 4            | Fixed Point 16.16    | Enemy D Y position in the game area (Little Endian)




Store items and their leveling stats (Part 1):
Numbers - How many points it will add to your stats total, accumulatively.
Green Text - Emphasis on potential leveling shortcuts.
Red Text - Special Techniques (Moves)
I probably will continue to update this when I find more information. The goal is for me to understand what the game is doing with all these numbers, and see if it's possible to do a Crazy (Hardest difficulty) speedrun. There are other factors at play, such as:
  • Figure out how to control the randomness of the enemy gang type when entering a new area.
  • Figure out what optimal stats is preferred to give the most damage.
  • Figure out if I need to increase my willpower, which affects how quick you recover after taking a blow that knocks you into the air. Would it make it more interesting?
  • Figure out how to quickly nab the best technique to unlock. So far, I have one in mind that I use prominently when playing regularly.
  • Find out if playing Solo or having an ally is more interesting.
  • Find out if playing a non-protagonist character as Solo or have allies join up over the course of the run is more interesting.
That is all.
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
Reserved for extra space.
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
Initial findings:

| Address	| Byte Size | Display   		 | Purpose
----------------------------------------------------------------------------------------------
| 0000		| 1			| Unsigned			| Transition Screen? (always 0x0 or 0x5)
| 0002		| 2			| Unsigned			| Area Zone ID
| 0004		| 1			| Unsigned			| Controls:

10000000b	128		Down
01000000b	64 		Up
00100000b	32 		Left
00010000b	16 		Right
00001000b	8  		Start
00000100b	4  		Select
00000010b	2  		B
00000001b	1  		A

No L and R buttons

| 0008		| 1			| Unsigned			| Rendering tick count accumulator (0 to 255). (Low Bits)
| 0009		| 1			| Unsigned			| Rendering tick count accumulator (0 to 255). (High Bits)


| 06D4		| 1			| Unsigned			| Has to do with background scene textures.
| 06D5		| 1			| Unsigned			| ^
| 06D6		| 1			| Unsigned			| ^

| 06E1		| 1			| Unsigned			| Has to do with background scene textures.
| 06E2		| 1			| Unsigned			| ^
| 06E3		| 1			| Unsigned			| ^

| 09B5		| 1			| Unsigned			| Area Section Name
| 09B9		| 1			| Unsigned			| Wrapper string?

| 0AB0		| 1			| Unsigned			| Crashes when freezing addresses
| 0AB1		| 1			| Unsigned			| ^
| 0AB2		| 1			| Unsigned			| ^
| 0AB3		| 1			| Unsigned			| ^

| 211C		| 1			| Unsigned			| Has to do with color masking
| 211E		| 1			| Unsigned			| Has to do with color masking. Needs to be +0x1 more than 211C value.

| 2127		| 1			| Unsigned			| Unknown

| 216A		| 1			| Unsigned			| Unknown
| 216B		| 1			| Unsigned			| Unknown

| 216E		| 1			| Unsigned			| Background Y position (Low Bit)
| 216F		| 1			| Unsigned			| Background Y position (High Bit)

| 2172		| 1			| Unsigned			| Background X position (Low Bit)
| 2173		| 1			| Unsigned			| Background X position (High Bit)

| 217A		| 1			| Unsigned			| Unknown
| 217B		| 1			| Unsigned			| Unknown
| 217E		| 1			| Unsigned			| Unknown

| 2180		| 1			| Unsigned			| Something to do with area transitions
| 2181		| 1			| Unsigned			| ^

| 2184		| 1			| Unsigned			| Enable Rendering Layers Bitmask

0 = Null (no scenery)
1 = Text only
2 = Foreground
4 = Background
8 = Sky
15 = All

| 21B2		| 1			| Unsigned			| Unknown

| 21B6		| 1			| Unsigned			| Background texture Y position
| 21B7		| 1			| Unsigned			| Background texture Y position. Negative number if 255.

| 220C		| 1			| Unsigned			| Player X position in the game area (Low Mantissa)
| 220D		| 1			| Unsigned			| Player X position in the game area (High Mantissa)
| 220E		| 1			| Unsigned			| Player X position in the game area (Low Bit)
| 220F		| 1			| Unsigned			| Player X position in the game area (High Bit)

When Player's X position is 0x15, will transition to new area on the Player's left hand side.

| 2210		| 1			| Unsigned			| Player Y Jump position in the game area (Low Mantissa)
| 2211		| 1			| Unsigned			| Player Y Jump position in the game area (High Mantissa)
| 2212		| 1			| Unsigned			| Player Y Jump position in the game area (Low Bit)
| 2213		| 1			| Unsigned			| Player Y Jump position in the game area (High Bit). 255 is negative.
| 2214		| 1			| Unsigned			| Player Y position in the game area (Low Mantissa)
| 2215		| 1			| Unsigned			| Player Y position in the game area (High Mantissa)
| 2216		| 1			| Unsigned			| Player Y position in the game area (Low Bit)
| 2217		| 1			| Unsigned			| Player Y position in the game area (High Bit). 255 is negative.
| 2218		| 1			| Unsigned			| Player Jump power facing right (0 or 128).
| 2219		| 1			| Unsigned			| Player +X speed (Low Low Bit)
| 221A		| 1			| Unsigned			| Player +X Speed (Low High Bit)
| 221B		| 1			| Unsigned			| Player +X speed (High Low Bit)
| 221C		| 1			| Unsigned			| Player +X Speed (High High Bit)
| 221D		| 1			| Unsigned			| Player -X speed (Low Low Bit)
| 221E		| 1			| Unsigned			| Player -X Speed (Low High Bit)
| 221F		| 1			| Unsigned			| Player -X speed (High Low Bit)
| 2220		| 1			| Unsigned			| Player -X Speed (High High Bit)
| 2221		| 1			| Unsigned			| Player Y Acceleration (Low Mantissa)
| 2222		| 1			| Unsigned			| Player Y Acceleration (High Bit). -Y is positive

| 2258		| 1			| Unsigned			| Player Finite State Machine ID

| 22A4		| 1			| Unsigned			| Something to do with going from shop (safe areas) to non-safe areas:

255 = Shops
58 = Non-shop areas

| 22DC		| 1			| Unsigned			| Duration between Player animation frames, counts down to 0. When 0, sets a new animation frame.

| 250C		| 1			| Unsigned			| Duration between Enemy A animation frames, counts down to 0. When 0, sets a new animation frame:

Running: 4 -> 0
Walking: 8 -> 0, 6 -> 0, 8 -> 0, repeat.

| 2676		| 1			| Unsigned			| Enemy A Y position in the game area (Low Bit)
| 2677		| 1			| Unsigned			| Enemy A Y position in the game area (High Bit)

| 273A		| 1			| Unsigned			| Jump Kick animation ID
| 273C		| 1			| Unsigned			| NPC Walking Animation loop duration

| 2AB4		| 2			| Unsigned			| Current Money


| 24E1		| 1			| Unsigned			| Unknown purposes. Value is determined to have an effect on enemy gangs, as follows:

Stickville - Park Entrance

8 = Generic Dudes
6 = Frat Boys
2 = Entrees
1 = Dragons
0 = Mob



------------------------------------------------------------------------------------------------------ New findings:
| Address	| Size  	| Display   		| Purpose

| 0D18		| 4			| Hex				| Something to do with Rendering buffer
| 0D20		| 4			| Hex				| ^
| 0D28		| 4			| Hex				| ^
| 0D30		| 4			| Hex				| ^
| 0D38		| 4			| Hex				| ^
| 0D40		| 4			| Hex				| ^
| 0D48		| 4			| Hex				| ^

| 0DB8		| 4			| Hex				| Something to do with Enemy B's sprite position or updates
| 0DC0		| 4			| Hex				| ^
| 0DC8		| 4			| Hex				| ^
| 0DD0		| 4			| Hex				| ^

| 250E		| 1			| Unsigned			| Flag to jump to next animation frame:

0x5 = Continue playing animation
0xD = Jump to next animation

Loop
  Update:  0xD       0x5       0x5       0xD       0x5       0x5       0xD       0x5
  Render: Walk 1 -> Walk 1 -> Walk 1 -> Walk 2 -> Walk 2 -> Walk 2 -> Walk 1 -> Walk 1
EndLoop

| 2676		| 1			| Unsigned 			| Enemy A Y position in the game area (Low Bit)
| 2677		| 1			| Unsigned 			| Enemy A Y position in the game area (High Bit)



| 243C		| 4			| Fixed Point 16.16 | Enemy A X position in the game area (Little Endian)
| 2444		| 4			| Fixed Point 16.16 | Enemy A Y position in the game area (Little Endian)

| 289C		| 4			| Fixed Point 16.16 | Enemy B X position in the game area (Little Endian)
| 28A4		| 4			| Fixed Point 16.16 | Enemy B Y position in the game area (Little Endian)
| 28A8		| 4			| Fixed Point 16.16 | Enemy B X speed (Little Endian)

When value is 0 and the enemy is in the Running state, the enemy will respond as if it has hit a wall.

| 28AC		| 4			| Fixed Point 16.16 | Enemy B Y speed (Little Endian)

| 2CFC		| 4			| Fixed Point 16.16 | Enemy C X position in the game area (Little Endian)
| 2D04		| 4			| Fixed Point 16.16 | Enemy C Y position in the game area (Little Endian)

| 315C		| 4			| Fixed Point 16.16 | Enemy D X position in the game area (Little Endian)
| 3164		| 4			| Fixed Point 16.16 | Enemy D Y position in the game area (Little Endian)
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
New findings:

| 0368        | 2            | Hex                  | Timing that controls when a player can start to freely move. (Counts down)
| 0370        | 2            | Hex                  | Sets to 0x0 when values in 0x0368 and 0x0372 are both 0x0 and 1000 equivalently.
| 0372        | 2            | Hex                  | Timing that controls when a player can start to freely move. (Counts up)

| 06E6        | 2            | Hex                  | (Foreground) Layer 0 texture X position (Little Endian)
| 06E8        | 2            | Hex                  | (Foreground) Layer 0 texture Y position (Little Endian)
| 06EA        | 2            | Hex                  | (Foreground) Layer 1 texture X position (Little Endian)
| 06EC        | 2            | Hex                  | (Foreground) Layer 1 texture Y position (Little Endian)

| 0702        | 2            | Hex                  | (Background) Layer 2 texture X position (Little Endian)
| 0704        | 2            | Hex                  | (Background) Layer 2 texture Y position (Little Endian)
| 0706        | 2            | Hex                  | (Background) Layer 3 texture X position (Little Endian)
| 0708        | 2            | Hex                  | (Background) Layer 3 texture Y position (Little Endian)

| 073E - 074A | 2 x 7        | Hex                  | Text spritesheet / mapping addresses, top row (assuming)
| 074C - 0760 | 2 x 11       | Hex                  | Text spritesheet / mapping addresses, bottom row (assuming)
| 076A - 0770 | 2 x 4        | Hex                  | Text messages pointer data for enemy gang shouts. (assuming)

| 073E - 09E4 | 2 x 340      | Hex                  | (Region) Has to do with text messages and pointer data to strings.

| 0AA5        | 1            | Unsigned             | Text message cursor position

| 24E1        | 1            | Unsigned             | + Value gets deallocated when entering new areas.


tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
Updated OP thanks to feedback saying different ROM variations will have different IWRAM variations.
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
Small hiatus aside (due to me being unrealistically put off with the way I thought Bizhawk is capable of doing), Bizhawk's Freeze Address and Poke Address does not permanently modify the game's IWRAM. This actually sucks because I would truly not be able to manipulate RNG the way I wanted to do. Ideally, if the modified RAM values are permanent, as in, ignoring whatever the game calculated and only using frozen address values through poking it, then the game would truly reach capabilities of making a great TAS. I can confirm address 2AB4 is indeed the current "calculated" lump sum of your player character's money. However, at the start of the game, it's only when you start entering a new area, does the game then starts keeping track of your current money count. This also means, in the first area, no matter what money you picked up on, it doesn't update the value until subsequent area changes later on. Address 2424 hold the previous calculated lump sum of your player character's money and doesn't update the value at all.
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
Updated store items, part 1. More to come...
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
tom_mai78101 wrote:
Updated store items, part 1. More to come...
New TAS run is complete. Now I just need to submit it somehow. Difficulty: Crazy New findings:
| Address     | Size (bytes) | Display             | Purpose
-----------------------------------------------------------------------------------------------------------------------------------------
| 0371        | 1            | Hexadecimal         | When it is 0x4, game will recognize your inputs to control your main character.
-----------------------------------------------------------------------------------------------------------------------------------------
| 2180        | 1            | Hexadecimal         | ID related to data that stores collision boxes/obstacles/abyss information about 
|             |              |                     | the currently loaded area.
-----------------------------------------------------------------------------------------------------------------------------------------
| 49CA        | 2            | Hexadecimal         | Lotto Tix prize
|             |              |                     | 1501 - No prizes: $0.00
|             |              |                     | 1401 - 5th prize: $1.00
|             |              |                     | 1301 - 4th prize: $100.00
|             |              |                     | 1201 - 3rd prize: $1000.00
|             |              |                     | 1101 - 2nd prize: $10000.00
|             |              |                     | 1001 - 1st prize: $100000.00
-----------------------------------------------------------------------------------------------------------------------------------------
| 4A50        | 2            | Hexadecimal         | Random number counter (Loops from 0x270 to 0x1)
-----------------------------------------------------------------------------------------------------------------------------------------
| 4A54        | 4            | Hexadecimal (BE)    | Viewed in Big Endian format. This is what I personally called it the "determinant". 
|             |              |                     | The determinant helps to keep each loop of the random number counter "unique" in 
|             |              |                     | the game. 
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
In my opinion, I think these 3 techniques are all you ever need in a TAS run, be it aiming for the best times, or dealing with secret events. Swap Dragon Kick with Mach Punch if you're playing as Ryan.
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
Found a useless strategy in RNG manipulation to get 3rd prize Lotto Tix ($1000.00) There is a random number counter that starts from 0x270 and decrements until it reaches 0x0. When it does reach 0x0, it loops back to 0x270. Another counter was found where the random value, which I found out, is tied to another value. This value is coined as the "determinant" (by me), where, each time it decreases the counter, it increments itself. It's a 4-byte counter, guaranteeing the Lotto Tix lottery results are unique every 0x270 times. The trick is to manipulate the CPU enemies to make any actions, to start decreasing the random value, and reach a specific random number counter and determinant as fast as possible, in order to reach a particular combination of the random number counter and the determinant, to get the calculating Lotto Tix prize. The upside to using this strategy allows you to always get your Lotto Tix prize of whatever monetary value you want, but the downside of using this strategy is it takes a bit of frames to do. Here in the GIF, I'm just lucky that, after exiting the Merlin's Secrets shop, I can get the 3rd Prize within 500 frames from the frame I exited the shop.
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
An update to the random number generation counter (RNG counter, or RNG for short). When observing the RAM Watch, you tend to notice that, depending on what is displayed on the screen, the decrementing speed varies. The best option to go for when attempting to optimize the Lotto Tix winnings, so you get the winnings earlier, is by utilizing how many AI enemies and your ally on the screen at this point of stage. Ideally, you want all 5 NPCs on the screen. Each NPC action will decrement the RNG by 1. If you have 5 NPCs on the screen, it will decrement by a factor of 5 or more, if the actions it chooses to do branches off immediately on the next frame. However, skipping some decremented RNG values have a side effect where you would lose your winnings if not carefully managed.
Darkman425
He/They
Editor, Judge, Skilled player (1291)
Joined: 9/19/2021
Posts: 263
Location: Texas
Huh. Today I learned that the Japanese version of RCR EX had a semi-official update patch. Wonder what got changed in it. https://twitter.com/gosokkyu/status/1565965970669473792 https://twitter.com/gosokkyu/status/1565966510312783872
Switch friend code: SW-2632-3851-3712
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
Darkman425 wrote:
Huh. Today I learned that the Japanese version of RCR EX had a semi-official update patch. Wonder what got changed in it. https://twitter.com/gosokkyu/status/1565965970669473792 https://twitter.com/gosokkyu/status/1565966510312783872
This is the 2007 Special version of River City Ransom EX mod (also known as the River City Ransom EX 2007). Gameplay here: Link to video All special techniques (as well as the soundtracks) in this mod: Link to video It plays completely different from what the original RCR EX GBA version was like. New special moves, new special bosses, more cutscenes, boss-only fight modes, etc.
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
River City Ransom Director & Miracle Kidz President Passes Away https://www.nintendolife.com/news/2022/09/river-city-ransom-director-and-miracle-kidz-president-passes-away Might be relevant to this thread. I don't know.
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
Copying/pasting from thread: https://tasvideos.org/Forum/Posts/516438
Samsara wrote:
So, I decided to look into the Reputation system to see what was happening with it. Total Reputation is stored in IWRAM value $0242 (Combined WRAM value $040242). This only changes on screen transitions. IWRAM $0246 (Combined WRAM $040246) holds the value you've currently gained or lost on the current screen. On every screen transition, this value is added to $0242 and resets to 0. Both of these are signed, 1 byte values.
  • Running into walls gives you 1 Rep each time you do it.
  • Defeating a boss gives you 2 Rep.
  • Dying gives you 4 Rep.
  • Clearing a field of enemies gives you 5 Rep.
  • Recruiting a character gives you 16 Rep.
  • You can gain Rep while fighting, though I don't exactly know how this works.
  • Losing Rep comes from fighting dirty (hitting enemies while they're on the ground, hitting bosses while they're still talking, etc).
Recruiting Rex, as done in this run, only requires your reputation to not be negative, i.e 0 or above. What this means is that this run has a lot of wiggle room for fighting dirty to save time. 32 points of Rep, in fact: Also, since Rep only changes on screen transitions, clearing out the gang before Rex can be done however you want, as Rep cannot change between entering the screen and Rex appearing.
This information is really important, as it's the one of the 3 main holy grails to obtain a better RCR EX TAS run. The other 2 are: 1) What determines the Gang Type when entering a new area, 2) How to manipulate the enemy NPCs to obtain optimal attack/action patterns.
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
With this, we now officially have our first publication for the game: [5059] GBA River City Ransom EX by tom_mai78101 in 08:48.03
tom_mai78101
He/Him
Player (127)
Joined: 3/16/2015
Posts: 160
Does getting a Lotto Tix first prize winning count as a game event of significance?