You get a fair number of bonuses for loading data from the original
Suikoden into
Suikoden II.
This page is going to be a bit disorganized for the time being. The ordering of the bonus descriptions is the processing order unless otherwise noted.
Who Receives Bonuses
Seventeen characters are set up to receive bonuses based on their levels, etc. from
Suikoden. Below are their names, followed by the data from the default table. The first two columns are in hex and are just the ID mapping from
Suikoden II to the original. The last column is the character's default level.
Character
|
Suikoden II ID
|
Suikoden ID
|
Default Level
|
01:Flik
|
0x2
|
0x11
|
20
|
02:Viktor
|
0x3
|
0x23
|
20
|
03:Sheena
|
0x5
|
0x3E
|
38
|
04:Clive
|
0x6
|
0x35
|
16
|
05:Hix
|
0x7
|
0x3F
|
27
|
06:Tengaar
|
0x8
|
0x21
|
27
|
07:Futch
|
0x9
|
0x13
|
34
|
08:Humphrey
|
0xA
|
0x15
|
34
|
09:Valeria
|
0xC
|
0x24
|
38
|
10:Pesmerga
|
0xD
|
0x6B
|
50
|
11:Lorelai
|
0xE
|
0x2F
|
38
|
12:Meg
|
0x29
|
0x4C
|
31
|
13:Luc
|
0x35
|
0x1A
|
27
|
14:Vincent
|
0x40
|
0x32
|
49
|
15:Stallion
|
0x43
|
0x4B
|
31
|
16:Kasumi
|
0x49
|
0x17
|
38
|
17:McDohl
|
0x52
|
0x8
|
38
|
Tai Ho doesn't receive bonuses because he wasn't set up to. Was he forgotten or deliberately excluded? Who knows. Everybody misses Vincent for some reason.
Level Bonuses
Each character gets a bonus based on their level from
Suikoden, but only if their level (or at least the level of the character they're associated with) is 60 or higher.
The calculation is bonus = (suikoden_level - 50) / 10 * default_level / 10
To prose it up, subtract 50 from their level from
Suikoden, divide the result by ten. Multiply that result by their default level from
Suikoden II, and finally divide that by ten to get the number of bonus levels they'll be given. This is all integer division, so discard any fractional amounts. No rounding up ever occurs.
Each character that reached level 99 in the original will also receive a flat bonus of 5 additional levels. At level 98, Flik will receive (99 - 50) / 10 = 4 -> 4 * 20 = 80 -> 80 / 10 = 8, 8 bonuses levels, for an initial level of 28. At 99, he gets a flat bonus of 5 extra levels on top of that, so he'd be level 33.
Weapon Bonuses
Determined by bonus = (weapon_level - 10) / 2.
Transferring Runes
It looks like it attempts to transfer the equipped rune, but it looks at the wrong data. It only even attempts this if the default data for the character has three empty rune slots. I'm pretty sure most of the characters are initialized with at least one rune.
Conversion Table
Suikoden
|
Suikoden II
|
02 - Fire
|
01 - Fire
|
03 - Water
|
03 - Water
|
04 - Wind
|
05 - Wind
|
05 - Lightning
|
09 - Lightning
|
06 - Earth
|
07 - Earth
|
07 - Resurrection
|
00 - Nothing
|
08 - Boar
|
00 - Nothing
|
09 - Shrike
|
00 - Nothing
|
0A - Falcon
|
00 - Nothing
|
0B - Hate
|
00 - Nothing
|
0C - Trick
|
00 - Nothing
|
0D - Clone
|
00 - Nothing
|
0E - Double-Beat
|
41 - Double-Beat
|
0F - Killer
|
42 - Killer
|
10 - Counter
|
43 - Counter
|
11 - Spark
|
44 - Spark
|
12 - Hazy
|
4A - Hazy
|
13 - Gale
|
00 - Nothing
|
14 - Sunbeam
|
00 - Nothing
|
15 - Holy
|
00 - Nothing
|
16 - Fortune
|
00 - Nothing
|
17 - Prosperity
|
00 - Nothing
|
18 - Champion's
|
00 - Nothing
|
19 - Turtle
|
00 - Nothing
|
1A - Phero
|
47 - Phero
|
1B - Rage
|
01 - Fire
|
1C - Flowing
|
03 - Water
|
1D - Cyclone
|
05 - Wind
|
1E - Mother Earth
|
07 - Earth
|
1F - Thunder
|
09 - Lightning
|
You can see where the error might be in the code below. In Suikoden the attached rune is one of the first pieces of data on each character. Going by the offset they use to access the level, it should be at 0x514 and not 0x564. They may restructure the data prior to analyzing it, but I can't imagine why. This requires additional investigation, in any case.
It seems the data is referenced properly. Either they do restructure it, or the reference I was using for the data structure is wrong. Regardless, it's impossible to transfer in runes. This is due in part to the game checking to see if the character's recruit status flag has bit 2 set. I don't know what that means exactly, but all the recruit status flags are zero while the data transfer is processing. Even if the check is faked, the runes are not placed on the character, in the bag, or in storage. If this was broken unintentionally, the cause is a series of really stupid choices that were never tested.
Transferring Items
If Humphrey or Pesmerga have Windspun Armor equipped in the
Suikoden save, it will be equipped to them in
Suikoden II. This is a very specific search, so only this item type for these two characters is considered.
The
Suikoden Hero (McDohl) can transfer pretty much anything he has equipped.
Helmet Conversion Table
03 - Pointed Hat
|
04 - Pointed Hat
|
04 - Half Helmet
|
06 - Pointed Hat
|
05 - Head Gear
|
07 - Head Gear
|
06 - Full Helmet
|
09 - Full Helmet
|
07 - Silver Hat
|
08 - Silver Hat
|
08 - Horned Helmet
|
0C - Horned Helmet
|
McDohl is equipped with a Bandana (ID 01) by default. The Headband from the original has no conversion.
Armor Conversion Table
09 - Robe
|
0D - Robe
|
0A - Tunic
|
0E - Tunic
|
0B - Leather Coat
|
0F - Leather Coat
|
0C - Brass Armor
|
10 - Brass Armor
|
0D - Guard Robe
|
11 - Guard Robe
|
0E - Karate Uniform
|
12 - Karate Uniform
|
0F - Leather Armor
|
13 - Leather Armor
|
10 - Half Armor
|
16 - Half Plate
|
11 - Magic Robe
|
17 - Magic Robe
|
12 - Ninja Suit
|
15 - Ninja Suit
|
13 - Dragon Armor
|
1A - Dragon Armor
|
14 - Master Robe
|
1B - Master Robe
|
15 - Full Armor
|
1C - Full Plate
|
16 - Taikioku Wear
|
1D - Taikiyoku Wear
|
17 - Master Garb
|
1E - Master Garb
|
18 - Windspun Armor
|
25 - Windspun Armor
|
Dragon Armor is the default. Everything from the first game has a conversion here, even things he couldn't equip.
Shields and accessories do not transfer by design. There's little to be gained by bringing in two accessories, but on the off chance someone wants to add the functionality, this is one possible conversion chart for them.
Hypothetical Accessory Conversion Table
1B - Wooden Shoes
|
2D - Wooden Shoes
|
1C - Boots
|
2E - Boots
|
1D - Toe Shoes
|
2F - Toe Shoes
|
1E - Wing Boots
|
30 - Winged Boots
|
1F - Earth Boots
|
00 - None
|
20 - Gloves
|
32 - Gloves
|
21 - Gauntlet
|
33 - Gauntlet
|
22 - Silverlet
|
34 - Silverlet
|
23 - Goldlet
|
36 - Goldlet
|
24 - Mangosh
|
00 - None
|
25 - Power Gloves
|
35 - Power Gloves
|
26 - Cape
|
37 - Cape
|
27 - Fur Cape
|
39 - Fur Cape
|
28 - Cape of Darkness
|
3A - Cape of Darkness
|
29 - Crimson Cape
|
3B - Crimson Cape
|
2A - Circlet
|
00 - None
|
2B - Blue Ribbon
|
47 - Blue Ribbon
|
2C - Feather
|
00 - None
|
2D - Silver Ring
|
00 - None
|
2E - Leggings
|
41 - Leggings
|
2F - Shoulder Pads
|
42 - Shoulder Pads
|
30 - Emblem
|
00 - None
|
31 - Star Earrings
|
48 - Star Earrings
|
32 - Rose Brooch
|
4B - Rose Brooch
|
33 - Guard Ring
|
4F - Guard Ring
|
34 - Speed Ring
|
51 - Speed Ring
|
35 - Power Ring
|
52 - Power Ring
|
36 - Necklace
|
3C - Necklace
|
37 - Silver Necklace
|
3E - Silver Necklace
|
38 - Gold Necklace
|
3F - Gold Necklace
|
They may have felt that you could gain too much by transferring in some of these (I can't imagine which). For shields, at least, the lack of transfer can simply be ascribed to McDohl's inability to equip them without cheats.
Highest Level Bonus
One character will receive a flat bonus of five levels for having the highest level in the
Suikoden save. Only one character will get the the bonus, even if you level everybody up to level 99. Who gets the bonus when two or more characters are at the highest level is determined by generating a random number to pick between them.
The game saves the
Suikoden levels of each character in order according the bonus list at the top of this article. Flik is in the first position, and McDohl comes last. This list of levels is scanned to find the highest value. Each character that reached this level is then counted. If the count is one, then whoever had the highest level gets the bonus. If the count is two or higher, a random number is generated that is lower than the count, i.e. a number from 0 to count - 1, up to a maximum of 16. This number determines which character will get the bonus. The level list is rescanned, and when it finds a character with that level, and the count of previous hits matches the number, the character in that position gets the bonus.
Example
Let's say Flik, Pesmerga, and McDohl are each level 99. Everyone else is lower. That's 3 characters with the highest level.
1
|
Flik
|
99
|
10
|
Pesmerga
|
99
|
17
|
McDohl
|
99
|
The game will generate a random number lower than 3. Assume it's 1. It then rescans for characters who are level 99. It finds Flik, and checks how many times it's found the level it's looking for so far. Zero hits so far, so Flik doesn't get the bonus. It adds 1 to hit count, making it 1. It resumes scanning, and doesn't get a hit on the level for Viktor through Valeria, but Pesmerga's level is the right value. It checks the hit count, and it's 1, which is the random number we're looking for. Pesmerga gets the bonus.
If the random number had been 0, Flik would have gotten the bonus. Had it been 2, McDohl would have gotten it.
Note: The results of this might be consistent, depending on how much random number generating occurs on the Title Screen and the Name Input Screen. If it's zero, then the number won't be random at all, and even if some does occur, how quickly you move through the screens may affect just how random these "random" numbers are. It's conceivable that you'll get consistent results, even though the developers' intention was that they be unpredictable.
RAM:80110010 move $s2, $0
RAM:80110014 move $s3, $0
RAM:80110018 addiu $a0, $sp, 0x20 # Address of G1_Level array from earlier
RAM:8011001C addu $v0, $a0, $s3
RAM:80110020
RAM:80110020 loc_80110020: # CODE XREF: RAM:80110040j
RAM:80110020 lbu $v1, 0($v0)
RAM:80110024 andi $v0, $s2, 0xFF
RAM:80110028 sltu $v0, $v1
RAM:8011002C beqz $v0, loc_80110038
RAM:80110030 nop
RAM:80110034 move $s2, $v1 # Get highest level
RAM:80110038
RAM:80110038 loc_80110038: # CODE XREF: RAM:8011002Cj
RAM:80110038 addiu $s3, 1
RAM:8011003C slti $v0, $s3, 0x11
RAM:80110040 bnez $v0, loc_80110020
RAM:80110044 addu $v0, $a0, $s3
RAM:80110048 move $fp, $0
RAM:8011004C move $s0, $fp
RAM:80110050 move $s3, $s0
RAM:80110054 addiu $a0, $sp, 0x20
RAM:80110058 andi $v1, $s2, 0xFF
RAM:8011005C addu $v0, $a0, $s3
RAM:80110060
RAM:80110060 loc_80110060: # CODE XREF: RAM:80110080j
RAM:80110060 lbu $v0, 0($v0)
RAM:80110064 nop
RAM:80110068 bne $v1, $v0, loc_80110078
RAM:8011006C nop
RAM:80110070 move $fp, $s3 # Position of character matching highest level
RAM:80110074 addiu $s0, 1 # Count of characters matching highest level
RAM:80110078
RAM:80110078 loc_80110078: # CODE XREF: RAM:80110068j
RAM:80110078 addiu $s3, 1
RAM:8011007C slti $v0, $s3, 0x11
RAM:80110080 bnez $v0, loc_80110060
RAM:80110084 addu $v0, $a0, $s3
RAM:80110088 li $v0, 1
RAM:8011008C beq $s0, $v0, l_give_bonus
RAM:80110090 li $v0, 0x800D4C2C # rand
RAM:80110098 lui $v1, 0x8013
RAM:8011009C jalr $v0 # call rand
RAM:801100A0 sw $v0, dword_80133DD4
RAM:801100A4 mult $0, $v0, $s0 # multiply by highest_level count
RAM:801100A8 mflo $v0
RAM:801100AC bgez $v0, loc_801100BC
RAM:801100B0 sra $s1, $v0, 15
RAM:801100B4 addiu $v0, 0x7FFF
RAM:801100B8 sra $s1, $v0, 15
RAM:801100BC
RAM:801100BC loc_801100BC: # CODE XREF: RAM:801100ACj
RAM:801100BC move $fp, $0
RAM:801100C0 move $s0, $fp
RAM:801100C4 move $s3, $s0
RAM:801100C8 addiu $v1, $sp, 0x20
RAM:801100CC andi $a1, $s2, 0xFF # Highest level
RAM:801100D0 addu $v0, $v1, $s3
RAM:801100D4
RAM:801100D4 loc_801100D4: # CODE XREF: RAM:801100F8j
RAM:801100D4 lbu $v0, 0($v0)
RAM:801100D8 nop
RAM:801100DC bne $a1, $v0, loc_801100F0
RAM:801100E0 nop
RAM:801100E4 beq $s0, $s1, l_give_bonus
RAM:801100E8 move $fp, $s3
RAM:801100EC addiu $s0, 1
RAM:801100F0
RAM:801100F0 loc_801100F0: # CODE XREF: RAM:801100DCj
RAM:801100F0 addiu $s3, 1
RAM:801100F4 slti $v0, $s3, 0x11
RAM:801100F8 bnez $v0, loc_801100D4
RAM:801100FC addu $v0, $v1, $s3
RAM:80110100
RAM:80110100 l_give_bonus: # CODE XREF: RAM:8011008Cj
RAM:80110100 # RAM:801100E4j
RAM:80110100 li $v0, 0x80073E24 # MP_Level_Sub
RAM:80110108 li $a0, 1
RAM:8011010C li $a1, 5
RAM:80110110 lui $v1, 0x8013
RAM:80110114 la $a2, BonusCharactersDefaults
RAM:8011011C sw $v0, dword_80133DD4
RAM:80110120 sll $v1, $fp, 1
RAM:80110124 addu $v1, $fp
RAM:80110128 addu $v1, $a2
RAM:8011012C lbu $a2, 0($v1)
RAM:80110130 jalr $v0
RAM:80110134 addiu $a3, $sp, 0x38