
Pokmon Mystery Dungeon Red Rescue Team Pro Edition v1.10 Notes
===============================================================

+--------------+
| Introduction |
+--------------+

These are the notes taken during development of Pokmon Mystery Dungeon Red
 Rescue Team Pro Edition. They give more of an in-depth description on the
 changed parts of the game and how they're made up. Most notes written down here
 are used in one way or another to implement changes to the hack or if they
 aren't, then they will be used at some point in the near future!

Last, but not least: All ROM addresses mentioned here apply to the European
 version ONLY! There isn't much of a need to research and take notes of the US
 version when hacking the European version of a game.

+-----------+
| Changelog |
+-----------+

Version 1.1 : - Seperated the notes from the readme
              - Changed some parts of the notes to be less personal
              - Removed Section IV: Damage calculation; Sections V, VI, VII and
                 VII become IV, V, VI and VII, respectively
              - Added Section VIII: Availability of IQ skills
              - Added Section IX: Recruit rate bonus through level

Version 1.0 : - Added Section VI: Item lists
              - Added Section VII: Rewards from Butterfree and Magnemite
              - Added Section VIII: Available tactics

Version 0.5 : - Added Section V: Overworld recruits
(internal)

Version 0.4 : - First version to feature a section for the notes taken
(internal)    - Added Section I: Level up stats
              - Added Section II: Movepools
              - Added Section III: Dungeon Pokmon
              - Added Section IV: Damage calculation

+-----------+
| The notes |
+-----------+

I. Level up stats
=================

The data for level ups is stored in AT4PX containers; One for each species.
 Unown, Castform and Deoxys count as one here, but can be seperated by editing
 their pointers, making them point to a different container for each iteration.

AT4PX is a compression format found not only here, but also in Blue Rescue Team
 and the PMD2 games. It can be decompressed by first copying the compressed part
 into it's own file, saving that as a .at4px file and then use UnPX on it, which
 will expose the data.
Each decompressed file should be exactly 1200 bytes in size, 12 bytes for each
 of the 100 levels. The data shows a pattern on what is stored on which byte,
 the pattern is as followed:

  Level up structure (decompressed), 12 bytes total:
   +----+------+------+-------------------------------------------------------+
   |Addr|Length|Endian|Contains                                               |
   +----+------+------+-------------------------------------------------------+
   |0x00|32 bit|Little|EXP required for level up.                             |
   |0x04|16 bit|Little|HP recieved for level up.                              |
   |0x06| 8 bit|------|Attack increase for level up.                          |
   |0x07| 8 bit|------|Sp. Attack increase for level up.                      |
   |0x08| 8 bit|------|Defense increase for level up.                         |
   |0x09| 8 bit|------|Sp. Defense increase for level up.                     |
   |0x0A|16 bit| Big  |Always reads 00 00.                                    |
   +----+------+------+-------------------------------------------------------+

 Additional comments: The first 12 bytes (level 1) are all zeroed, mainly
  because a Pokmon can't level up to 1.

The space used ranges from 0x5C0E80 (SIRO header for Bulbasaur) until 0x5FAC69,
 which is the last byte of an AT4PX container used by Statue.

The pointer table is located at 0x5AA57C for the European Version, each species
 has a pair assigned, thus each entry measures 8 bytes:
 0x00: Pointer to the SIRO header, which then points to the AT4PX container for
        that Pokmon.
 0x04: Pointer to it's debug name (purpose unknown)

II. Movepools (level up and TMs)
================================

How the movepool is read:

The level up movepool contains entries which specify what move is learned at
 which level. The length of an entry is either 2 or 3 bytes and is set with bit
 7 of the first byte for each entry. If three bytes, the first two bytes show
 the move ID the Pokmon is going to learn and the third byte gives the level
 the Pokmon will learn that move; If the length is two bytes, the move ID is
 shortened to just one byte. The last byte of each table is always 0x00 and
 indicates the end of the table.

Structure of a single level up move entry (detailed):

              bit    6 4 2 0    6 4 2 0    6 4 2 0
 a. 3 byte struct: %100000NN, %0nnnnnnn, %0LLLLLLL
 b. 2 byte struct:            %0nnnnnnn, %0LLLLLLL
 c. End of table :                       %00000000

 Explaination: 1 = Always 1
               0 = Always 0
               N = Most significant bits (move ID / 128 = value; rounded down)
               n = Least significant bits (move ID % 128 = value)
               L = Level required to learn that move

Example Bulbasaur (Located at 0x603CEA [EU], length: 32 bytes)

     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0x00 81 1A 01 81 59 04 82 49 07 81 36 0A 81 47 0F 81
0x10 67 0F 81 7B 14 0A 19 81 14 20 5E 27 81 17 2E 00

This is read as:

Addr   Hex        Description
0x00 - 81 1A 01 - Tackle (ID #154) learned at level 1
0x03 - 81 59 04 - Growl (ID #217) learned at level 4
0x06 - 82 49 07 - Leech Seed (ID #329) learned at level 7
0x09 - 81 36 0A - Vine Whip (ID #182) learned at level 10
0x0C - 81 47 0F - PoisonPowder (ID #199) learned at level 15
0x0F - 81 67 0F - Sleep Powder (ID #231) learned at level 15
0x12 - 81 7B 14 - Razor Leaf (ID #251) learned at level 20
0x15 -    0A 19 - Sweet Scent (ID #10) learned at level 25
0x17 - 81 14 20 - Growth (ID #148) learned at level 32
0x1A -    5E 27 - Synthesis (ID #94) learned at level 39
0x1C - 81 17 2E - SolarBeam (ID #151) learned at level 46
0x1F -       00 - Indicates end of table.

Immediately followed by that is the TM compatibility list, it's read in the same
 fashion as the level up table is, just without the levels. That means the TM
 compatibility list has the following structure:

              bit    6 4 2 0    6 4 2 0
 a. 2 byte struct: %100000NN, %0nnnnnnn
 b. 1 byte struct:            %0nnnnnnn
 c. End of table :            %00000000

 Explaination: 1 = Always 1
               0 = Always 0
               N = Most significant bits (move ID / 128 = value; rounded down)
               n = Least significant bits (move ID % 128 = value)

Example Bulbasaur (Located at 0x603D0A [EU], length: 36 bytes)

     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0x00 12 1D 30 32 38 43 4C 81 17 81 23 81 45 81 5F 81
0x10 68 82 07 82 11 82 18 82 2D 82 44 82 46 82 48 82
0x20 68 83 0A 00

What it translates to when the rules above are used:

Addr   Hex     Description
0x00 -    12 - This Pokmon can learn Cut (ID #18)
0x01 -    1D - This Pokmon can learn Rock Smash (ID #29)
0x02 -    30 - This Pokmon can learn Return (ID #48)
0x03 -    32 - This Pokmon can learn Strength (ID #50)
0x04 -    38 - This Pokmon can learn Double Team (ID #56)
0x05 -    43 - This Pokmon can learn Facade (ID #67)
0x06 -    4C - This Pokmon can learn Giga Drain (ID #76)
0x07 - 81 17 - This Pokmon can learn Solarbeam (ID #151)
0x09 - 81 23 - This Pokmon can learn Bullet Seed (ID #163)
0x0B - 81 45 - This Pokmon can learn Toxic (ID #197)
0x0D - 81 5F - This Pokmon can learn Sunny Day (ID #223)
0x0F - 81 68 - This Pokmon can learn Rest (ID #232)
0x11 - 82 07 - This Pokmon can learn Secret Power (ID #263)
0x13 - 82 11 - This Pokmon can learn Flash (ID #273)
0x15 - 82 18 - This Pokmon can learn Sludge Bomb (ID #280)
0x17 - 82 2D - This Pokmon can learn Protect (ID #301)
0x19 - 82 44 - This Pokmon can learn Hidden Power (ID #324)
0x1B - 82 46 - This Pokmon can learn Attract (ID #326)
0x1D - 82 48 - This Pokmon can learn Frustration (ID #328)
0x1F - 82 68 - This Pokmon can learn Wide-Slash (ID #360)
0x21 - 83 0A - This Pokmon can learn Vacuum-Cut (ID #394)
0x23 -    00 - Indicates end of table.

Note that Bulbasaur can learn Sunny Day, even though this TM doesn't exist in
 PMD Red Rescue Team or any other PMD predating Gates to Infinity. This applies
 to all other TMs which were replaced by Orbs. For PMD1, these are:
 - TM07 Hail              - TM11 Sunny Day         - TM18 Rain Dance
 - TM32 Double Team       - TM37 Sandstorm         - TM39 Rock Tomb
 - TM49 Snatch
All entries relating to these moves in the TM lists may be removed to save some
 space since those TM's are absent anyway!

Pointer table is located at 0x60E4A0 in the European Version, each entry is
 8 bytes long:
 0x00: Pointer to level up movepool
 0x04: Pointer to TM compatibility list

III. Dungeon Pokmon
====================

This specifies which Pokmon will appear in the dungeons. The length of one
 entry is always 8 bytes and includes the species, it's level and a percentage.
 The percentage is a sum of all other percentages, therefor the real chance of
 encountering that species is p = p_n - p_m, where p_n is the number shown on
 the current entry and p_m is the number shown on the entry before. If it's the
 first entry of a table, then p_m = 0 applies.
In the original, the table entries are sorted by the internal IDs of the
 included Pokmon. This is not necessary for the table to work!

Structure of a Dungeon Pokmon entry (8 bytes):

    bit    6 4 2 0    6 4 2 0    6 4 2 0    6 4 2 0
 Struct: %ssssssss, %LLLLLLLS, %pppppppp, %00PPPPPP
         %rrrrrrrr, %00RRRRRR, %00000000, %00000000

 Explaination: 0 = Always 0
               s = Lower 8 bits of the species appearing
               S = Most significant bit of the species appearing
               L = Level of the Pokmon
               p = Lower 8 bit of the probability measured in 1/100 %
               P = Upper 6 bit of the probability measured in 1/100 %
               r = Repeat of p
               R = Repeat of P
 The end of a table is indicated by all 8 bytes zeroed.

Multiple entries form a table, of which 839 exist within the ROM. A list of
 pointers pointing to each table is found at 0x75424C in the European version.
All table entries must include entries for Kecleon and Decoy with 0.00 %
 probabilities; The former due to the possibility of a Kecleon shop spawning and
 the latter due to Substitute and Follow Me turning Pokmon into the sprite of a
 Decoy.

IV. Overworld recruits
======================

Overworld recruits are recruits the player is guaranteed to get at some point in
 the game. Overworld recruits get very detailed descriptions on the properties
 they're supposed to have initially. That ranges from information rather trivial
 such as the species or starting level to in-depth details about the recruit,
 including starting EXP and even IQ!

For editing said constants, a HEX editor is required to do this, unless PMDe
 gets an update and makes this possible without hex editing.
Anyways, until then - the conventional route has to be taken. The structure of a
 single entry is described down below:

  Overworld recruit entry, 40 bytes total:
   +----+------+------+-------------------------------------------------------+
   |Addr|Length|Endian|Description                                            |
   +----+------+------+-------------------------------------------------------+
   |0x00|32 bit| Big  |Always reads 30 BE 03 02, probably some kind of header |
   |0x04|16 bit|Little|The species that will join                             |
   |0x06|16 bit|Little|Hold item this Pokmon has equipped initially          |
   |0x08|32 bit| Big? |Purpose unknown, might be some padding bytes           |
   |0x0C|16 bit|Little|1st move of the Pokmon                                |
   |0x0E|16 bit|Little|2nd move of the Pokmon                                |
   |0x10|16 bit|Little|3rd move of the Pokmon                                |
   |0x12|16 bit|Little|4th move of the Pokmon                                |
   |0x14|16 bit|Little|Starting max HP of the Pokmon                         |
   |0x16| 8 bit|------|Starting level of the Pokmon                          |
   |0x17| 8 bit|------|Always reads 0x00                                      |
   |0x18|16 bit|Little|Starting IQ, overrides the regular starting IQ of 1    |
   |0x1A| 8 bit|------|Starting Attack of the Pokmon                         |
   |0x1B| 8 bit|------|Always reads 0x00                                      |
   |0x1C| 8 bit|------|Starting Special Attack of the Pokmon                 |
   |0x1D| 8 bit|------|Always reads 0x00                                      |
   |0x1E| 8 bit|------|Starting Defense of the Pokmon                        |
   |0x1F| 8 bit|------|Always reads 0x00                                      |
   |0x20| 8 bit|------|Starting Special Defense of the Pokmon                |
   |0x21| 8 bit|------|Always reads 0x00                                      |
   |0x22|16 bit| Unk. |Purpose unknown, no clue what it could be              |
   |0x24|32 bit|Little|Starting EXP                                           |
   +----+------+------+-------------------------------------------------------+

There are six entries present: Luckily all of them are close together, saves the
 trouble of looking for them. These are the six entries for the European
 version:
 - Magnemite  @ 0x273FA4
 - Absol      @ 0x273FC0
 - Smeargle   @ 0x273FE8
 - Latios     @ 0x27401C
 - Latias     @ 0x274044
 - Gardevoir  @ 0x274074

V. Item lists
=============

Item lists are used to assign probabilities to individual items to spawn on the
 floor, in Kecleon shops, Monster Houses or in walls. They are also used to
 determine which reward the player gets for completing a mission and which
 selection of items is going to be sold at the Kecleon shop in Pokmon Square.

Each entry is 2 bytes long, it can be either a percentage (0x0001-2710) or a
 skip command (0x7531-0x762C). Both are present as little endian values. The
 game starts reading for category #0 and works it's way through all 12 item
 categories and 240 items.
The percentage is always subtracted from the percentage of the previous item
 in the same category. If it's the first item in that category, 0x0000 is
 subtracted instead. If it's a category, it's percentage is substracted from the
 previous category just like the items; Also, the first percentage is deducted
 by 0x0000. If the percentage is bound to an item, that percentage will show the
 percentage it has to get chosen from within it's category. That means the real
 chance for that item to spawn is p = c * i where c is the chance for that
 category to be used and i makes up the probability of that particular item to
 get chosen.
A skip command skips items or categorys. The chances for skipped categories and
 items always equal 0.00 %. If a category is skipped, it's items cannot appear,
 even if these items get percentages assigned (p = 0 * i = 0). Seemingly, it can
 skip only forwards - then again, there is no need to jump backwards. If a skip
 command skips past the last item category, parts of the item list itself is
 skipped too, there is an example down below for that case. Just like the
 percentages, it's read in little endian. The amount of items skipped is equal
 to x - 0x7530.
If the game either skips past item #239 or assigns a percentage to it (unlikely,
 since item #239 is a dummy), the table ends without any indication!

The pointer table is found at 0x75CD1C for the European version of PMD Red
 Rescue Team; Just after the last item list. These entries refer to item lists
 used within dungeons.
The Kecleon shops in Pokmon Square aren't found on that pointer table, neither
 are the rewards for missions! In both cases, the pointer table at 0x21AB64 (EU)
 is used instead and the item lists start at 0x219E90 (EU)! The first 15 entries
 are the pointers to the mission rewards sorted by difficulty of said mission,
 starting with the lowest! The following 10 entries point to the Kecleon shop
 sortiment in Pokmon Square in the following manner: Green Kecleon #1, Purple
 Kecleon #1, Green Kecleon #2 and so on until Purple Kecleon #5. Note that Green
 and Purple Kecleon #5 are unused!

A tip for PMDe users: Never, EVER change the item type when editing the items!
 It's impossible to control what's going to change with that type of change!

On to the example: The example is item table # 6, it's used for the first three
 floors or Thunderwave Cave and it's found at 0x756A9A in the European version
 of PMD RRT. This table contains 22 entries. In order to understand exactly
 whats going on, a brief description for each entry is included. For editing,
 it's highly recommended to have the list of items lying around because of how
 easy it is to misuse the skip command and give the wrong item a percentage by
 accident! This is how the list looks like when viewed in a hex editor:

Example: Item table #6 (Located at 0x756A9A [EU], length: 44 bytes)

     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0x00 31 75 E2 04 88 13 4C 1D 32 75 10 27 3C 75 10 27
0x10 5F 75 A6 0E 3A 75 F9 15 DB 1A 31 75 BD 1F 32 75
0x20 10 27 39 75 10 27 46 75 10 27 B6 75

And this tells what each and every entry does:

Addr   Code    Description
0x00 - 31 75 - Skip one slot (category #0)
0x02 - E2 04 - 12.50 % for rocks (category #1)
0x04 - 88 13 - 37.50 % for Berries and Seeds (category #2)
0x06 - 4C 1D - 25.00 % for Apples and Gummies (category #3)
0x08 - 32 75 - Skip two slots (categories #4 and #5)
0x0A - 10 27 - 25.00 % for money (category #6)
0x0C - 3C 75 - Skip categories #7-11 (5 slots) and items #0-6 (7 slots), adding
                up to 12 skipped slots
0x0E - 10 27 - 100.00 % for a Gravelerock within it's category
0x10 - 5F 75 - Skip 47 slots (items #8-54)
0x12 - A6 0E - 37.50 % for an Oran Berry within it's category
0x14 - 3A 75 - Skip 10 slots (items #56-65)
0x16 - F9 15 - 18.75 % for a Pecha Berry within it's category
0x18 - DB 1A - 12.50 % for a Cheri Berry within it's category
0x1A - 31 75 - Skip 1 slot (item #68)
0x1C - BD 1F - 12.50 % for a Sleep Seed within it's category
0x1E - 32 75 - Skip 2 slots (items #70 and #71)
0x20 - 10 27 - 18.75 % for a Blast Seed within it's category
0x22 - 39 75 - Skip 9 slots (items #73-81)
0x24 - 10 27 - 100.00 % for an Apple within it's category
0x26 - 46 75 - Skip 22 slots (items #83-104)
0x28 - 10 27 - 100.00 % for money within it's category (Well, duh; It's money!)
0x2A - B6 75 - Skip 134 slots (items #106-239)
 The end is reached when the game skips past item #239.

VI. Rewards from Butterfree and Magnemite
=========================================

Upon completing the first and second dungeons for the first time respectively,
 the clients will reward the player with a bunch of items to provide a headstart
 to their new career. They give three items each and the rewards are scripted,
 thus technicnally making it script editing. The bytes may be modified to any
 value ranging from 1 to 239!

There is no (known) tool available that can do this in Red Rescue Team! The only
 way to do this, is to do it through a hex editor! The addresses given point to
 the item id and apply to the European version!

Rewards from Butterfree for rescuing Caterpie:
 0x4D230C: 1x Oran Berry
 0x4D233C: 1x Pecha Berry
 0x4D236C: 1x Rawst Berry

Rewards from Magnemite for rescuing the two other Magnemites:
 Unknown*: 500 Pok
 0x4D71D8: 1x Reviver Seed
 0x4D71F0: 1x Rawst Berry

* The address where this is located is not known at the time!

VII. Level tactics are first available at
=========================================

Tactics are an elemental part of PMD. They influence CPU-controlled Pokmon
 directly and make a heavy difference in what action is going to be taken. There
 are 12 different tactics available, albeit three of them are unused, thus
 lowering it down to just 9. They are learned by level up, similar to how moves
 are learned by level up. The levels tactics are learned at are stored as 16 bit
 little endian values. Their location is 0x2723E0 in the European version of
 Red Rescue Team and it looks like this:

Levels each tactic becomes available at (0x2723E0 [EU], length: 24 bytes):

     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0x00 01 00 19 00 01 00 01 00 E7 03 E7 03 23 00 28 00
0x10 14 00 0F 00 0A 00 E7 03

When translated and paid attention to how the tactics are ordered in-game, it
 looks like this:
 - 0x00: Let's go together  : Learned at level 1
 - 0x01: Go the other way   : Learned at level 25
 - 0x02: Go after foes      : Learned at level 1
 - 0x03: Avoid the first hit: Learned at level 1
 - 0x04: All for one        : Learned at level 999
 - 0x05: Group safety       : Learned at level 999
 - 0x06: Avoid trouble      : Learned at level 35
 - 0x07: Be patient         : Learned at level 40
 - 0x08: Keep your distance : Learned at level 20
 - 0x09: Wait there         : Learned at level 15
 - 0x0A: Get away           : Learned at level 10
 - 0x0B: 'unused'           : Learned at level 999

Note that it's still unknown what the unused tactics 'All for one' (0x04),
 'Group safety' (0x05) and 'unused' (0x0B) do.

VIII. Availability of IQ skills
===============================

IQ skills play a strong role in how hard or easy it is for the player to explore
 a dungeon. For this, an PMD-exclusive stat is introduced, that being the IQ
 stat. A Pokmon can learn IQ skills by increasing their IQ to certain amounts
 through gummis. Once that amount is reached, a new IQ skill is learned. IQ
 doesn't get capped until 999, while the minimum cap is 1.
A total of 23 IQ skills are available to the player, albeit not all of them can
 be used at the same time. All of them are unlocked before hitting 999 though!

The IQ skills are learned in a set order, that order is the same for every
 Pokmon. The IQ stat needed for each individual IQ skill is stored at 0x2723FC
 for the European version and they're ordered the same as they are found when
 checking the IQ on a Pokmon with an IQ stat of 999. Each number is stored as a
 32 bit little endian value. When looked at the location, it looks like this:

Minimum IQ required to learn IQ skills (0x2723FC [EU], length: 92 bytes):

     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0x00 69 00 00 00 01 00 00 00 01 00 00 00 F4 01 00 00
0x10 64 00 00 00 02 00 00 00 28 00 00 00 19 00 00 00
0x20 C8 00 00 00 0A 00 00 00 7D 00 00 00 90 01 00 00
0x30 DE 03 00 00 8C 00 00 00 20 03 00 00 FA 00 00 00
0x40 A0 00 00 00 46 00 00 00 58 02 00 00 2C 01 00 00
0x50 01 00 00 00 01 00 00 00 01 00 00 00

This may be translated to the following when the rules set above are used:

 - 0x00: Type-Advantage Master: Learned at 105 IQ
 - 0x01: Item Catcher         : Learned at   1 IQ
 - 0x02: Course Checker       : Learned at   1 IQ
 - 0x03: Sure-Hit Attacker    : Learned at 500 IQ
 - 0x04: Quick Dodger         : Learned at 100 IQ
 - 0x05: PP Checker           : Learned at   2 IQ
 - 0x06: Nontraitor           : Learned at  40 IQ
 - 0x07: Status Checker       : Learned at  25 IQ
 - 0x08: EXP. Go-Getter       : Learned at 200 IQ
 - 0x09: Efficiency Expert    : Learned at  10 IQ
 - 0x0A: Weak-Type Picker     : Learned at 125 IQ
 - 0x0B: All-Terrain Hiker    : Learned at 400 IQ
 - 0x0C: Super Mobile         : Learned at 990 IQ
 - 0x0D: Trap Avoider         : Learned at 140 IQ
 - 0x0E: House Avoider        : Learned at 800 IQ
 - 0x0F: Energy Saver         : Learned at 250 IQ
 - 0x10: Nonsleeper           : Learned at 160 IQ
 - 0x11: Self-Curer           : Learned at  70 IQ
 - 0x12: Trap Seer            : Learned at 600 IQ
 - 0x13: Lava Evader          : Learned at 300 IQ
 - 0x14: Dedicated Traveler   : Learned at   1 IQ
 - 0x15: Item Master          : Learned at   1 IQ
 - 0x16: Exclusive Move-User  : Learned at   1 IQ

IX. Recruit rate bonus through level
====================================

Recruitment is an important part of PMD and dependent on luck. The probability
 of a successful attempt depends on the base recruit rate of the Pokmon the
 player is trying to recruit, the level of the leader and the abundance of a
 Friend Bow.

The recruit rate increases with the level at a 10 level interval starting at
 level 30, ending up at a 24.0 % bonus at level 90 and up. The bonus is the
 same, no matter the leader.

This can be modified by changing the table found at offset 0x1B7D46 in the
 European version of PMD Red Rescue Team. This table consists of 100 entries,
 representing the level range, which is 1-100. Each entry is 16 bit long and in
 little endian.

When looked at with a hex editor, it looks like this:

Recruit rate increase dependent on level (0x1B7D46 [EU], length: 200 bytes):

     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0x00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x30 00 00 00 00 00 00 00 00 00 00 32 00 32 00 32 00
0x40 32 00 32 00 32 00 32 00 32 00 32 00 32 00 4B 00
0x50 4B 00 4B 00 4B 00 4B 00 4B 00 4B 00 4B 00 4B 00
0x60 4B 00 64 00 64 00 64 00 64 00 64 00 64 00 64 00
0x70 64 00 64 00 64 00 7D 00 7D 00 7D 00 7D 00 7D 00
0x80 7D 00 7D 00 7D 00 7D 00 7D 00 96 00 96 00 96 00
0x90 96 00 96 00 96 00 96 00 96 00 96 00 96 00 AF 00
0xA0 AF 00 AF 00 AF 00 AF 00 AF 00 AF 00 AF 00 AF 00
0xB0 AF 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00 F0 00
0xC0 F0 00 F0 00 F0 00 F0 00

This translates to what is commonly found on the internet when looking up the
 bonus the player may get at a certain level:

 +-----+------------------+
 |Level|Recruit rate bonus|
 +-----+------------------+
 | 1-29|     + 0.0 %      |
 |30-39|     + 5.0 %      |
 |40-49|     + 7.5 %      |
 |50-59|     +10.0 %      |
 |60-69|     +12.5 %      |
 |70-79|     +15.0 %      |
 |80-89|     +17.5 %      |
 | 90+ |     +24.0 %      |
 +-----+------------------+
