Radiant Silvergun - Training Mode in Saturn version

privateye

Established Member
Radiant Silvergun has a Stage Select feature which is unlocked after clearing the game in Arcade or Saturn mode and is available immediately in Radiant Silvergun EXTRA. It's a nice inclusion but, on it's own, it's useless for practice purposes because you will enter the stage with all weapons at level zero and hence will be severely under powered. This oversight was rectified by the inclusion of Training Mode in the PC / Switch / Xbox 360 ports that allows the weapon levels to be adjusted when selecting a stage :

1.png


This can be replicated in the Saturn version with the following cheat codes for use with Action Replay and Pseudo Saturn Kai :

Master Code
F6000914 C305
B6002800 0000


Custom Weapon Levels for Player 1
D601CE04 0000
16076AC0 00AA
16076AC2 AAAA
16076AC4 00BB
16076AC6 BBBB
16076AC8 00CC
16076ACA CCCC


Current points in hexadecimal for :
  • Weapon A = AA
  • Weapon B = BB
  • Weapon C = CC

Weapon levels are dictated by the following thresholds :
Weapon Level
Points Required [Arcade Mode | Saturn Mode]
Hex Code [Arcade Mode | Saturn Mode]
1​
25,000​
00 61 A8
2​
50,000​
00 C3 50
3​
100,000​
01 86 A0
4​
150,000​
02 49 F0
5​
200,000​
03 0D 40
6​
300,000​
04 93 E0
7​
400,000​
06 1A 80
8​
500,000​
07 A1 20
9​
600,000​
09 27 C0
10​
700,000​
0A AE 60
11​
800,000 | 1,500,000​
0C 35 00 | 16 E3 60
12​
900,000 | 1,800,000​
0D BB A0 | 1B 77 40
13​
1,000,000 | 2,100,000​
0F 42 40 | 20 0B 20
14​
1,200,000 | 2,400,000​
12 4F 80 | 24 9F 00
15​
1,400,000 | 2,700,000​
15 5C C0 | 29 32 E0
16​
1,600,000 | 3,000,000​
18 6A 00 | 2D C6 C0
17​
1,800,000 | 3,400,000​
1B 77 40 | 33 E1 40
18​
2,000,000 | 3,800,000​
1E 84 80 | 39 FB C0
19​
2,200,000 | 4,200,000​
21 91 C0 | 40 16 40
20​
2,400,000 | 4,600,000​
24 9F 00 | 46 30 C0
21​
2,600,000 | 5,000,000​
27 AC 40 | 4C 4B 40
22​
2,800,000 | 5,500,000​
2A B9 80 | 53 EC 60
23​
3,000,000 | 6,500,000​
2D C6 C0 | 63 2E A0
24​
3,200,000 | 7,000,000​
30 D4 00 | 6A CF C0
25​
3,400,000 | 7,500,000​
33 E1 40 | 72 70 E0
26​
3,600,000 | 8,000,000​
36 EE 80 | 7A 12 00
27​
3,800,000 | 8,500,000​
39 FB C0 | 81 B3 20
28​
4,000,000 | 9,000,000​
3D 09 00 | 89 54 40
29​
4,200,000 | 10,000,000​
40 16 40 | 98 96 80
30​
4,400,000 | 11,000,000​
43 23 80 | A7 D8 C0
31​
4,600,000 | 12,000,000​
46 30 C0 | B7 1B 00
32​
4,800,000 | 13,000,000​
49 3E 00 | C6 5D 40
33​
5,000,000 | 14,000,000​
4C 4B 40 | D5 9F 80

To use the cheat codes, simply replace A, B, and C with the hex codes that correspond with the desired weapon levels. Here are some examples :
Arcade Mode - A/17, B/18, C/19

A/17 = 1B 77 40
D601CE04 0000
16076AC0 001B
16076AC2 7740


B/18 = 1E 84 80
16076AC4 001E
16076AC6 8480


C/19 = 21 91 C0
16076AC8 0021
16076ACA 91C0


Saturn Mode - A/17, B/18, C/19

A/17 = 33 E1 40
D601CE04 0000
16076AC0 0033
16076AC2 E140


B/18 = 39 FB C0
16076AC4 0039
16076AC6 FBC0


C/19 = 40 16 40
16076AC8 0040
16076ACA 1640


Enable Code starting with D is mandatory. In both Arcade and Saturn modes, weapon levels B and C for player one are stored in two bytes in High Work RAM (0x1CE04 -> 0x1CE05) which are reset to zero when starting a new game or using the Stage Select feature. With this in mind, the Enable Code controls the main codes like so :
  1. When starting a new game or using the Stage Select feature, all weapons are reset to level zero by the game itself.
  2. Now that weapon levels B and C are 0x0000, set the weapon levels to the desired values.
  3. Now that weapon levels B and C are greater than 0x0000, stop writing these values to allow the weapon levels to increase from that point onward.

To set the weapon levels using Pseudo Saturn Kai :
01) Press the X button to enable cheat codes.
02) In the Select Cheats menu, press the Z button.
03) Select Load Built-in Codes with the A button.
04) In the Enable field after the letter D, change 0000000 to 601CE04 using the d-pad and shoulder buttons to select the digits and adjust their values, respectively.
05) In the Code 1 field, press the X button and change 00000000 to 16076AC0
06) In the Code 2 field, press the X button and change the eighth digit to 2
07) In the Code 3 field, press the X button and change the eighth digit to 4
08) In the Code 4 field, press the X button and change the eighth digit to 6
09) In the Code 5 field, press the X button and change the eighth digit to 8
10) In the Code 6 field, press the X button and change the eighth digit to A
11) In the six code fields, change the last four digits to your desired values.
12) Once all of the adjustments have been made, press the A button.
13) Select Save to Internal Memory with the A button.

psk-weapon-save.gif

To load your custom weapon levels :
01) Press the X button to enable cheat codes.
02) In the Select Cheats menu, press the Z button.
03) Select Load from Internal Memory with the A button.
04) Press the A button to load Radiant Silvergun with the custom weapon levels that you previously set.

psk-weapon-load.gif


Paired with the excellent Radiant Silvergun EXTRA hack, these codes replicate the full Training Mode experience. Have fun and remember...

BE ATTITUDE FOR GAINS
 
Last edited:
Many thanks for all these codes. It works fine on my Saturn.
However, the custom weapon experience levels :
Custom Weapon Levels
D6076DFA 0000
16076AC0 00AA
16076AC2 AAAA
16076AC4 00BB
16076AC6 BBBB
16076AC8 00CC
16076ACA CCCC
only work for Player 1.
Do you have all these codes for player 2 ?

Best regards
 
Many thanks for all these codes. It works fine on my Saturn.
However, the custom weapon experience levels only work for Player 1.
Do you have all these codes for player 2 ?
Hi ben, you're welcome! If these codes are useful for such a legendary player as yourself, then the time and effort in making them was all worth it. Here are the requested codes, enjoy 🙂

Custom Weapon Levels for Player 2
D601CEC0 0000
16076ACC 00AA
16076ACE AAAA
16076AD0 00BB
16076AD2 BBBB
16076AD4 00CC
16076AD6 CCCC
 
Last edited:
Many thanks for your fast reply !!
These codes work perfectly.

P.S. the next Steam update will have the Player 2 playable (I work with Treasure/Live Wire for beta testing). There will be other few surprises !!
 
I've been thinking, if the conditional code only checks the 2 least significant of the 4 bytes used for player score, aren't the weapon levels re-written each time the player score reaches a multiple of 65536?
0x00010000, 0x00020000, etc.
Of course, my question is only relevant if the player score can actually be such values.

EDIT 1:

If that's actually an issue, i can think of an alternative already, though it's no longer possible to set multiple weapon levels at the same time (basically because of the lack of multi-conditions support):
player 1 - weapon A :
D6076AC1 0000
36076AC1 00AA
16076AC2 AAAA

OR

player 1 - weapon B :
D6076AC5 0000
36076AC5 00BB
16076AC6 BBBB

OR

...
Of course, the 16-bit check works only under 2 conditions:
- The value used for weapon score (AAAAAA, BBBBBB, etc.) is greater than 255 (guaranteed to be the case if it's to set lvl 1-33).
- Generally speaking, a weapon score can't possibly increase above 16777215 (sounds reasonable to assume it gets capped at the last 5M|14M threshold, though that's definitely something to be confirmed).

EDIT 2:

Another solution would be to use F6000914 230B as master instead, and remove the condition code.
So the user would basically have to press RESET for 3-5 sec to set the desired weapon scores (probably after pausing the game, to be sure the game doesn't overwrite the data).
That's the theory at least, i'm not sure if it actually works with RS.
 
Last edited:
I've been thinking, if the conditional code only checks the 2 least significant of the 4 bytes used for player score, aren't the weapon levels re-written each time the player score reaches a multiple of 65536?
This is something that I never considered so thanks for bringing it to my attention. I've fixed this with a new enable code, explanation is in the second spoiler 🙂
 
Last edited:
So the game actually uses 32-bit for Wscore?
That's a bummer, cause that "at least Wlvl 3" restriction is far from wonderful.

I may have found a way to switch that to "at least Wlvl 1".
Indeed, i found some other codes that point to Wlvl, not Wscore.
I haven't tested them at all, but since you seem to have a way to monitor RAM, you may be interested.

First, you need to check if the addresses i have are actually valid.
Supposedly, it's:
0x0601CE03 -> P1WAlvl (0x00-0x21)
0x0601CE04 -> P1WBlvl (0x00-0x21)
0x0601CE05 -> P1WClvl (0x00-0x21)
0x0601CEBF -> P2WAlvl (0x00-0x21)
0x0601CEC0 -> P2WBlvl (0x00-0x21)
0x0601CEC1 -> P2WClvl (0x00-0x21)
I would recommend passing a level normally (without using a RAM edit or cheat) before checking if the value actually gets incremented.

Once you're sure the addresses are valid, there are basically 2 cases.
If the game updates Wlvl automatically as a result of a Wscore write cheat:
D601CE03 0000 (check if WAlvl,WBlvl=0)
36076AC1 00AA
16076AC2 AAAA
36076AC5 00BB
16076AC6 BBBB
36076AC9 00CC
16076ACA CCCC
If it doesn't, 2 extra codes are required to force Wlvl manually:
D601CE03 0000 (check if WAlvl,WBlvl=0)
3601CE03 00LA (LA = new WAlvl, 0x01>0x21)
1601CE04 LBLC (LB|LC = new WBlvl|WClvl, 0x01>0x21)

36076AC1 00AA
16076AC2 AAAA
36076AC5 00BB
16076AC6 BBBB
36076AC9 00CC
16076ACA CCCC
Both spoilers are for P1.

I'm curious to know if that actually works =]

EDIT:

Here's another treat, that fixes and slightly optimises your text removal hack:
- No more extra CPU consumption during gameplay (the RAM writes were repeated when P1score equaled any multiple of 65536).
- 1 less RAM write for each code set.
Note:
If the user decides to use the codes for multiple messages, only 1 of the corresponding enable codes must be used.
It doesn't matter which one.
enable code: D60648E3 494E (check if string starts with "IN")
160648E3 2020
160648E5 2020
160648E7 2020
160648EA 2020
160648EC 2020
160648EE 2020
360648F0 0020
enable code: D60648BC 504C (check if string starts with "PL")
160648BC 2020
160648BE 2020
160648C0 2020
160648C3 2020
160648C5 2020
enable code: D60648F5 5052 (check if string starts with "PR")
160648F5 2020
160648F7 2020
360648F9 0020
160648FB 2020
160648FD 2020
360648FF 0020
16064901 2020
16064903 2020
16064905 2020
 
Last edited:
So the game actually uses 32-bit for Wscore?
That's a bummer, cause that "at least Wlvl 3" restriction is far from wonderful.
There is no restriction in practical terms because no one is going to practice any stage with weapon levels set to 1 or 2. After all, if someone is serious about getting good at the game, their weapon levels should far exceed level 2 after the first stage. However, it is *technically* still a limitation so...

I may have found a way to switch that to "at least Wlvl 1".
...I've changed the enable codes, thanks for your support!
The first version of these codes modified the weapon levels directly* so I'm not sure why it never occurred to me to check weapon levels in the enable code. Note that your suggested enable code of D601CE03 crashes the system as reads/writes of 16-bit values must be aligned on 16-bit boundaries, so it's changed to D601CE04 (check if weapons B and C are level zero).

(*) This appeared to work at first glance until I tested it further and... realized that the weapons weren't leveling up at the correct pace.

Indeed, i found some other codes that point to Wlvl, not Wscore.
Yep these are correct; Pseudo Saturn Kai contains a "Max Weapon Level P1" code that writes to these memory locations and the codes for player two are also correct.

If the game updates Wlvl automatically as a result of a Wscore write cheat:
This is true but the reverse is not, hence the problem with the first version of these codes.

Here's another treat, that fixes and slightly optimises your text removal hack:
Thanks, please note that the "Remove PRESS START BUTTON" code will be removed from the next version of Pseudo Saturn Kai as it's better to just use the patch instead.
 
Note that your suggested enable code of D601CE03 crashes the system as reads/writes of 16-bit values must be aligned on 16-bit boundaries, so it's changed to D601CE04 (check if weapons B and C are level zero).
That's something i suspected, but i never took the time to test that, thanks for the confirmation.
If that indeed applies to all 16-bit commands (0,1,D prefixes), i guess the codes i provided for the text removal are probably wrong as well, sorry about that.
 
Last edited:
Back
Top