• Welcome to Final Fantasy Hacktics. Please login or sign up.
 

My Notes.

Started by Darthatron, August 27, 2011, 10:29:50 pm

Darthatron

Ability_Effect_List.txt
Key:
R = Reflectable
S = Stealable
M = Not Silencable
O = Offensive
I = Ignore Reaction
! = R-Ab:Return Magic
@ = R-Ab:Absorb MP

                Byte #1| Byte #2| Byte #3| Byte #4
                RIO----- ---!--MS ------@- --------
Protect: 10000001 01100001 00010000 00000000
Dispel: 00000001 01100001 00010000 00000000

Holy: 00100001 11110001 00010010 00000000
Judge: 00100000 11100001 00010000 00000000

U.Blow: 00100000 10110010 00010110 00000000
Fire: 10100001 11110101 00011010 00000000

Greas.B.: 01100000 01110010 00010100 00000000







00 [Not Seen]
01 - None
02 [Not Seen]
03 - 100%H,    Gadget, Inflict Protect
04 - 100%H,  EqpSword, Inflict Disable
05 - 100%H,    Gadget, Inflict Shell
06 - SType,    Gadget, Inflict Blind
07 - 100%H,    Gadget, 100% Heal
08 - SType,    Gadget, Inflict Sleep
09 - 100%H,    Gadget, Inflict Haste
0A - 100%H,    Gadget, Dispel
0B - SType,    Gadget, Inflict Poison
0C [Not Seen]
0D - SType,    Gadget, Non-Undead: Inflict Doom
0E - 100%H, KOed Unit, Revive to Full HP
0F - 100%H, KOed Unit, Revive to 25% HP
10 [Not Seen]
11 - 100%H,      Self, Draw Weapon
12 - 100%H,      Self, [Eff1 Damage / 4] Damage
13 - 100%H,      Self, Max HP Damage
14 - 100%H,      Self, Caster's HP Damage
15 - 100%H,      Self, Eff1Dep: [Eff1 Damage / 4] Damage
16 - 100%H,      Self, Inflict Speed DOWN
17 - 100%H,      Self, 100% Damage
18 - 100%H,      Self, Eff1Dep: Heal Eff1 Damage
19 [Not Seen]
1A - 100%H,      Self, Lose 30 Gil
1B - 100%H,   Default, Eff1Dep: Delay Unit
1C - AType,   Default, Delay Unit
1D - 100%H,   Default, Inflict Quicken
1E - 100%H,   Default, Inflict WAtk UP/WDef UP/MPow UP/MRes UP
1F - SType,   Default, Doom Archer Effect*
20 - AType,   Default, Matra Magic Effect*
21 - AType,   Default, [(Target's HP + 1) * 0.9] Damage
22 - AType,   Default, Steal 2 JP
23 - AType,   Default, 100% Damage to MP, capped to Target's MP
24 - 100%H,   Default, Heal 80 MP
25 - 100%H,   Default, Inflict Astra
26 - 100%H,   Default, Esuna
27 - SType,   Default, Eff1Dep: Inflict Frog
28 - SType,   Default, Inflict Frog
29 - 100%H,   Default, Remove Frog
2A - 100%H,            Cover Effect
2B -   ---,     Enemy, Aim: Wallet Effect*
2C - 100%H,   Default, Inflict Advice
2D - 100%H,   Default, Inflict Shell
2E - SType,   Default, Elementalshift Effect*
2F - SType,   Default, Eff1Dep: Inflict Stop
30 - SType,   Default, Inflict Stop
31 - AType,   Default, Inflict Speed DOWN
32 - AType,   Default, 400% Damage
33 - 100%H,   Default, (Target's Kills * 10) Damage
34 [Not Seen]
35 - 100%H,   Default, 100% Damage
36 - 100%H,   Default, 999 Damage
37 - 100%H,   Default, Limit Glove Effect
38 - AType,   Default, 30 Damage
39 - AType,   Default, [(Target's HP + 1) / 2] Damage
3A - AType,   Default, [Target's HP / 4] Damage
3B - AType,   Default, Mutilate Effect*
3C - AType,   Default, Goblin Punch Effect*
3D - AType,   Default, Rand{2..12} Damage
3E - AType, NonUndead, (Caster's Max HP - Caster's HP) Damage
3F - AType,   Default, 100% Damage
40 - AType,   Default, 100% Damage, capped to Target's Max HP
41 - AType,   Default, 50% Damage, 2.0x Hit Rate
42 - AType,   Default, 200% Damage, 0.5x Hit Rate
43 - AType,   Default, Throw Effect*
44 - SType,   Default, Eff1Dep: Inflict Disable
45 - SType,   Default, Inflict Disable
46 - 100%H,   Default, Remove Disable
47 [Not Seen]
48 - SType,   Default, Eff1Dep: Inflict Immobilize
49 - SType,   Default, Inflict Immobilize
4A - 100%H,   Default, Remove Immobilize
4B - 100%H,   Default, Eff1Dep: Knockback
4C - SType,   Default, Eff1Dep: Inflict Berserk
4D - SType,   Default, Inflict Berserk
4E - 100%H,   Default, Inflict Protect
4F - SType,   Default, Hastebreak Effect*
50 -   ---,   Default, Aim: Vitals Effect*
51 -   ---,   Default, Acid Effect
52 - 100%H,   Default, Inflict Reflect
53 - 100%H,     Enemy, Detect Hidden Items
54 [Not Seen]
55 - SType,   Default, Eff1Dep: Inflict Blind
56 - 100%H,   Default, Eye2Eye: Inflict Blind
57 - SType,   Default, Inflict Blind
58 - 100%H,   Default, Remove Blind
59 - 100%H,   Default, Heal to full HP
5A - 100%H,   Default, Heal (Caster's HP) Damage
5B - 100%H,   Default, 100% Heal
5C [Not Seen]
5D - SType,   Default, Eff1Dep: Inflict Confusion
5E - 100%H,   Default, Eye2Eye: Inflict Confusion
5F - SType,   Default, Inflict Confusion
60 - SType,   Default, Bad Breath Effect*
61 - SType,   Default, Inflict Sleep
62 - SType,   Default, Inflict Petrify
63 - 100%H,   Default, Remove Petrify
64 - SType,   Default, Inflict WDef DOWN/MRes DOWN
65 - AType,   Default, Break Armor Effect
66 [Not Seen]
67 - SType,   Default, Eff1Dep: Inflict Slow
68 - SType,   Default, Inflict Slow
69 - 100%H,   Default, Inflict Haste
6A - 100%H,   Default, Dispel
6B - 100%H,   Default, Soundwave Effect
6C - 100%H,   Default, Inflict Expert Guard
6D [Not Seen]
6E - SType,   Default, Eff1Dep: Inflict Silence
6F - SType,   Default, Inflict Silence
70 - 100%H,   Default, Remove Silence
71 - 100%H,   Default, Hibernate Effect
72 - AType,     Enemy, Steal JP
73 - AType,     Enemy, Steal Gil Effect
74 - AType,     Enemy, Steal EXP
75 - AType,     Enemy, Steal Accessory
76 - AType,     Enemy, Steal Armor
77 - AType,     Enemy, Steal Helm
78 - AType,     Enemy, Steal Shield
79 - AType,     Enemy, Steal Weapon
7A - AType,     Enemy, Steal Ability, 0.25x Hit Rate
7B - 100%H,   Default, Inflict Conceal
7C - SType,   Default, Eff1Dep: Inflict Poison
7D - SType,   Default, Inflict Poison
7E - 100%H,   Default, Remove Poison
7F - SType,   Default, Inflict Zombie
80 - 100%H,   Default, Remove Zombie
81 -   ---,   Default, Break Weapon Effect
82 - SType,   Default, Inflict WAtk DOWN
83 - 100%H,   Default, Inflict Boost
84 - SType,   Default, Inflict Addle
85 - 100%H,   Default, Inflict WDef UP
86 - AType,   Default, Hurl Effect*
87 - 100%H,   Default, Inflict Defense
88 - 100%H,   Default, Eff1Dep: Inflict MPow DOWN
89 - SType,   Default, Inflict MPow DOWN
8A - 100%H,   Default, Inflict MRes UP
8B - 100%H,   Default, Cureall Effect*
8C - SType,     Enemy, Eff1Dep: Inflict Charm
8D [Not Seen]
8E - SType,     Enemy, Inflict Charm
8F - 100%H,   Default, Change Laws
90 - 100%H, NonUndead, SameLvDigit: 100% Damage
91 - 100%H,    Undead, SameLvDigit: 100% Heal
92 - 100%H, LvlDivBy3, Inflict WDef DOWN
93 - 100%H, LvlDivBy3, Inflict MRes DOWN
94 - 100%H, NonUndead, LvlDivBy5: Inflict KO
95 - 100%H,    Undead, LvlDivBy5: Heal to full HP
96 - 100%H, SmeLvlDay, 100% Damage
97 - 100%H,     Enemy, 100% Damage to MP
98 - 100%H,     Enemy, Eff1Dep: 100% Damage
99 - 100%H,     Enemy, 100% Damage
9A - AType,     Enemy, 100% Damage
9B - SType,     Enemy, Inflict Berserk
9C -   ---,     Enemy, Drop Weapon
9D -   ---,            Parley Effect*
9E [Not Seen]
9F - AType,   NotSelf, (Caster's HP) Damage
A0 - AType,   NotSelf, 100% Damage
A1 - SType,   NotSelf, Inflict Sleep
A2 - 100%H, NonUndead, Heal to full MP
A3 - 100%H, NonUndead, Esuna
A4 - AType, NonUndead, 100% Damage
A5 - 100%H, NonUndead, Inflict Regen
A6 - 100%H, NonUndead, Inflict Auto-Life
A7 - 100%H, NonUndead, Heal to full HP
A8 - 100%H, NonUndead, 100% Heal
A9 - SType, NonUndead, Eff2Dep: Inflict Confuse
AA - SType, NonUndead, Inflict Doom
AB - SType, NonUndead, Eff1Dep: Inflict Doom
AC - 100%H, NonUndead, Inflict KO
AD - SType, NonUndead, Inflict KO
AE [Not Seen]
AF - AType, NonAnimal, 100% Damage
B0 -   ---, NonAnimal, Break Weapon Effect
B1 - AType, NonDragon, 100% Damage
B2 - 100%H,    Undead, (Target's Max HP) Damage
B3 [Not Seen]
B4 - AType,    Undead, 100% Damage
B5 - 100%H,    Undead, Heal to full HP
B6 - 100%H,    Undead, 100% Heal
B7 - SType,    Undead, Remove Unit, 0.5x Hit Rate
B8 [Not Seen]
B9 - AType,    Animal, 100% Damage
BA - AType,    Animal, 200% Damage
BB -   ---,    Animal, Parley Effect*
BC - SType,    Animal, Inflict Addle
BD -   ---,    Animal, Capture Effect*
BE - AType,    Dragon, 200% Damage
BF -   ---,    Dragon, Parley Effect*
C0 - AType,     Enemy, Mug Effect
C1 -   ---,            Control Effect
C2 -   ---,            Friend Effect*
C3 - 100%H, NonUndead, Inflict Regen
C4 - 100%H,    Undead, Heal (Caster's Max HP - Caster's HP) Damage
C5 - AType,   Default, 200% Damage
C6 - AType,   Default, 50% Damage
C7 - AType,   Default, 300% Damage
C8 - 100%H,   Default, Morph Effect
C9 - SType,     Enemy, Inflict Sleep
CA - 100%H,   Default, 50% Damage
CB - 100%H,     Judge, Stop Judge
CC - SType,   Default, Inflict Disable/Immobilize
CD - 100%H,   Default, Give JP
CE - 100%H,   Default, Remove Yellow Card
CF - 100%H,   Default, Add Yellow Card
D0 - 100%H,   Default, Eff1Dep: Steal 2 JP


Default_Clan_Notes.txt
0854CD54 = Base Clan Data.
0854D1B4 = Amount in clan. (Halfword)
0854D1B8 = Pointer to clan data. (Word)

0852CDE0 - 0x30 bytes long.
00. Sprite & Name Index
01. Job Index (Race taken from this)
02. Unknown
03. Level
04. Unknown * 4
05. Equip #1
07. Equip #2
09. Equip #3
0B. Equip #4
0D. Equip #5
0F. Unknown * 20


ROM_Notes.txt
Default gil: [0x0800986C]
Days per Month: [0x08036102] + 1


Ability_Index.txt
0x0851BA84 + (Race * 4)

NNNN DDDD AAAA TT AP
0B01 C100 0100 01 0A Cure 100 AP Action
0D01 C300 0200 01 14 Cura
0C01 C200 0300 01 1E Curaga
DA00 9000 0400 01 14 Ensuna
F101 A701 0500 01 14 Life
C900 7F00 0600 01 1E Full-Life
F001 A601 0700 01 14 Auto-Life
2401 DA00 0800 01 0A Shell
AD01 6301 0900 01 0A Protect
B400 6A00 0400 03 1E Turbo MP 300 AP
2D02 EC01 0800 05 0A White Combo 100 AP Combo

NNNN = Name Index
DDDD = Description Index(?)
AAAA = Ability Identifier(?)
TT = Type:
00: Breaks Ability
01: "Action"
02: "Reaction"
03: "Support"
05: "Combo"
Else: "Action"
AP = AP


Notes.txt        just a bit vague...
0200F881 = Overworld Law Limiter

In a HEX Editor, change the two bytes at 0x02DB04 to 00 21
and change the two bytes at 0x02DB36 to 00 21
and change the two bytes at 0x02DB5C to 00 21
and change the two bytes at 0x02DB74 to ## 20, where ## is the number of laws you want the player to be able to set. Must be at least 1.
//The part below isn't needed, but makes the game show the correct amount of laws in the pre-battle part of the game.
and change the two bytes at 0x02FB80 to 00 28
and change the two bytes at 0x02FBBE to 00 1C



Enemy Modifer?
02002FC4 1st Enemy
020030CC 2nd
020031D4
020032DC
020033E4


NegativeSpeedEqZero.asm            probably just ignore this one.
.thumb
.org 0x06F0DC

push    {r4-r6,r14}
mov     r6,r0
ldrb    r0,[r6,#0x2]
cmp     r0,#0x0
bne     0x06F0E8
b       0x06F1E2
mov     r5,#0x0
ldsb    r5,[r6,r5]
lsl     r5,r5,#0x13
mov     r0,#0xA0
lsl     r0,r0,#0xF
add     r5,r5,r0
asr     r5,r5,#0x10
mov     r4,#0x1
ldsb    r4,[r6,r4]
lsl     r4,r4,#0x3
add     r4,#0x4
ldrh    r0,[r6,#0x4]
mov     r1,#0xA
bl      0x0CA7A4
lsl     r3,r0,#0x10
lsr     r3,r3,#0x10
mov     r0,r5
mov     r1,r4
mov     r2,#0x3
bl      0x06F568
mov     r5,#0x0
ldsb    r5,[r6,r5]
lsl     r5,r5,#0x13
mov     r0,#0xA0
lsl     r0,r0,#0xF
add     r5,r5,r0
asr     r5,r5,#0x10
mov     r4,#0x1
ldsb    r4,[r6,r4]
lsl     r4,r4,#0x13
mov     r0,#0x80
lsl     r0,r0,#0xD
add     r4,r4,r0
asr     r4,r4,#0x10
ldrh    r0,[r6,#0x4]
mov     r1,#0xB
bl      0x0CA7A4
lsl     r3,r0,#0x10
lsr     r3,r3,#0x10
mov     r0,r5
mov     r1,r4
mov     r2,#0x3
bl      0x06F568
mov     r5,#0x0
ldsb    r5,[r6,r5]
lsl     r5,r5,#0x13
mov     r0,#0xA0
lsl     r0,r0,#0xF
add     r5,r5,r0
asr     r5,r5,#0x10
mov     r4,#0x1
ldsb    r4,[r6,r4]
lsl     r4,r4,#0x13
mov     r0,#0xE0
lsl     r0,r0,#0xD
add     r4,r4,r0
asr     r4,r4,#0x10
ldrh    r0,[r6,#0x4]
mov     r1,#0xC
bl      0x0CA7A4
lsl     r3,r0,#0x10
lsr     r3,r3,#0x10
mov     r0,r5
mov     r1,r4
mov     r2,#0x3
bl      0x06F568
mov     r5,#0x0
ldsb    r5,[r6,r5]
lsl     r5,r5,#0x13
mov     r0,#0xA0
lsl     r0,r0,#0xF
add     r5,r5,r0
asr     r5,r5,#0x10
mov     r4,#0x1
ldsb    r4,[r6,r4]
lsl     r4,r4,#0x13
mov     r0,#0xA0
lsl     r0,r0,#0xE
add     r4,r4,r0
asr     r4,r4,#0x10
ldrh    r0,[r6,#0x4]
mov     r1,#0xD
bl      0x0CA7A4
lsl     r3,r0,#0x10
lsr     r3,r3,#0x10
mov     r0,r5
mov     r1,r4
mov     r2,#0x3
bl      0x06F568
mov     r5,#0x0
ldsb    r5,[r6,r5]
lsl     r5,r5,#0x13
mov     r0,#0xA0
lsl     r0,r0,#0xF
add     r5,r5,r0
asr     r5,r5,#0x10
mov     r4,#0x1
ldsb    r4,[r6,r4]
lsl     r4,r4,#0x13
mov     r0,#0xD0
lsl     r0,r0,#0xE
add     r4,r4,r0
asr     r4,r4,#0x10
ldrh    r0,[r6,#0x4]
mov     r1,#0xE
bl      0x0CA7A4
mov     r3,#0x7F
and     r3,r0
cmp     r3,r0
beq     0x06F1D8
mov     r3,#0x0
mov     r0,r5
mov     r1,r4
mov     r2,#0x3
bl      0x06F568
pop     {r4-r6}
pop     {r0}
bx      r0


FFTAbil.hsl                     just something I made for hex editing.
/*****************************************************************************
* FFTAbil.hsl - Structure definitions for Abilities in FFTA.

* Copyright (c) 2011 Darthatron
*
*****************************************************************************
* Revision History:
*  1/01/11 - Created
*/

#include "standard-types.hsl"

#pragma displayname("FFTA Structures") ;
#pragma fileextensions(".gba") ;

#pragma byteorder(little_endian)

struct ABILITIES
{
    WORD    hNameID;
    BYTE bElement;
    BYTE    bAP;
    BYTE    bMP;   
BYTE bUnknown1;
BYTE bRange;
WORD hUnknown2;
BYTE bHAura;
BYTE bVAura;
BYTE bPower;
BYTE bEffect1;
BYTE bEffect2;
BYTE bEffect3;
BYTE bEffect4;
DWORD wAttributes;
BYTE bUnknown5;
BYTE bUnknown6;
BYTE bUnknown7;
BYTE bUnknown8;
BYTE bUnknown9;
BYTE bUnknown10;
BYTE bUnknown11;
BYTE bUnknown12;
} ;

struct JOBS
{
    WORD    hNameID;
WORD hBuffer;
BYTE bRace;
BYTE bChecksum;
BYTE bUnknown0;
WORD hSpriteIndex;
WORD hUnknown1;
BYTE bSpritePal;
BYTE bUnknown2;
BYTE bPortraitPal;
BYTE bPortraitIndex;
BYTE bUnknown3;
BYTE bAAbility;
BYTE bUnknown4;
DWORD wElements;
BYTE bStatus;
BYTE bHPBase;
BYTE bMPBase;
BYTE bSpeedBase;
BYTE bMelee1;
BYTE bMelee2;
BYTE bMelee3;
BYTE bMagic1;
BYTE bMagic2;
BYTE bMagic3;
BYTE bHPGrowth;
BYTE bMPGrowth;
BYTE bSpeedGrowth;
BYTE bAttackGrowth;
BYTE bDefenseGrowth;
BYTE bPowerGrowth;
BYTE bResistGrowth;
BYTE bUnknown5;
BYTE bMove;
BYTE bJump;
BYTE bEvade;
WORD hUnknown6;
BYTE bEquipIndex;
WORD hUnknown7;
BYTE bJobIndex;
WORD hUnknown8;
BYTE bUnknown9;
} ;

struct ALLJOBS
{
struct JOBS entries[116];
}


I assume (and hope) there will be questions.
  • Modding version: Other/Unknown
  • Discord username: Darthatron

Darthatron

August 28, 2011, 02:55:56 am #1 Last Edit: August 28, 2011, 02:57:40 am by Darthatron
This is how Rand works
ROM:08002804 ; =============== S U B R O U T I N E =======================================
ROM:08002804
ROM:08002804 ; r0 = random val between 0 and 32767
ROM:08002804
ROM:08002804 Rand                                    ; CODE XREF: sub_8000460+16p
ROM:08002804                                         ; sub_809D3A8:loc_809D3FAp ...
ROM:08002804                 LDR     R2, =Rand_Seed
ROM:08002806                 LDR     R1, [R2]
ROM:08002808                 LDR     R0, =0x41C64E6D
ROM:0800280A                 MULS    R0, R1
ROM:0800280C                 LDR     R1, =0x3039
ROM:0800280E                 ADDS    R0, R0, R1
ROM:08002810                 STR     R0, [R2]
ROM:08002812                 LSLS    R0, R0, #1
ROM:08002814                 LSRS    R0, R0, #0x11
ROM:08002816                 BX      LR
ROM:08002816 ; End of function Rand
ROM:08002816
ROM:08002816 ; ---------------------------------------------------------------------------
ROM:08002818 off_8002818     DCD Rand_Seed           ; DATA XREF: Randr
ROM:0800281C dword_800281C   DCD 0x41C64E6D          ; DATA XREF: Rand+4r
ROM:08002820 dword_8002820   DCD 0x3039              ; DATA XREF: Rand+8r


And this is how Rand2 works:
ROM:08002838 ; =============== S U B R O U T I N E =======================================
ROM:08002838
ROM:08002838 ; r0 = random value between (-r0 and r0) / 2
ROM:08002838
ROM:08002838 Rand2                                   ; CODE XREF: CreateCharacter+246p
ROM:08002838                                         ; CreateCharacter+28Ep ...
ROM:08002838                 PUSH    {R4-R6,LR}
ROM:0800283A                 MOV     R6, R9
ROM:0800283C                 MOV     R5, R8
ROM:0800283E                 PUSH    {R5,R6}
ROM:08002840                 MOV     R9, R0
ROM:08002842                 LDR     R4, =Rand_Seed
ROM:08002844                 LDR     R0, [R4]
ROM:08002846                 LDR     R2, =0x41C64E6D
ROM:08002848                 MOVS    R1, R0
ROM:0800284A                 MULS    R1, R2
ROM:0800284C                 LDR     R0, =0x3039
ROM:0800284E                 ADDS    R1, R1, R0
ROM:08002850                 LSRS    R0, R1, #0x10
ROM:08002852                 LDR     R3, =0x7FFF
ROM:08002854                 ANDS    R0, R3          ; r0 = random value between 0 and 0x7FFF.
ROM:08002856                 MULS    R1, R2
ROM:08002858                 LDR     R5, =0x3039
ROM:0800285A                 ADDS    R1, R1, R5
ROM:0800285C                 LSRS    R6, R1, #0x10
ROM:0800285E                 ANDS    R6, R3          ; r6 = random value between 0 and 0x7FFF.
ROM:08002860                 MULS    R1, R2
ROM:08002862                 ADDS    R1, R1, R5
ROM:08002864                 LSRS    R5, R1, #0x10
ROM:08002866                 ANDS    R5, R3          ; r5 = random value between 0 and 0x7FFF.
ROM:08002868                 MOV     R8, R5          ; r8 = r5
ROM:0800286A                 MOVS    R5, R1
ROM:0800286C                 MULS    R5, R2
ROM:0800286E                 LDR     R1, =0x3039
ROM:08002870                 ADDS    R5, R5, R1
ROM:08002872                 STR     R5, [R4]        ; Re-seed the random seed.
ROM:08002874                 LSRS    R5, R5, #0x10
ROM:08002876                 ANDS    R5, R3
ROM:08002878                 MOVS    R1, #1
ROM:0800287A                 ADD     R9, R1          ; max = max + 1
ROM:0800287C                 MOV     R1, R9
ROM:0800287E                 BL      Mod_r0_by_r1    ; r0 = random % max
ROM:08002882                 MOVS    R4, R0          ; r4 = r0
ROM:08002884                 MOVS    R0, R6
ROM:08002886                 MOV     R1, R9
ROM:08002888                 BL      Mod_r0_by_r1    ; r0 = random % max
ROM:0800288C                 ADDS    R4, R4, R0      ; r4 = r4 + r0
ROM:0800288E                 MOV     R0, R8
ROM:08002890                 MOV     R1, R9
ROM:08002892                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:08002896                 SUBS    R4, R4, R0
ROM:08002898                 MOVS    R0, R5
ROM:0800289A                 MOV     R1, R9
ROM:0800289C                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080028A0                 SUBS    R4, R4, R0
ROM:080028A2                 LSRS    R0, R4, #0x1F
ROM:080028A4                 ADDS    R4, R4, R0
ROM:080028A6                 LSLS    R4, R4, #0xF
ROM:080028A8                 ASRS    R4, R4, #0x10
ROM:080028AA                 MOVS    R0, R4
ROM:080028AC                 POP     {R3,R4}
ROM:080028AE                 MOV     R8, R3
ROM:080028B0                 MOV     R9, R4
ROM:080028B2                 POP     {R4-R6}
ROM:080028B4                 POP     {R1}
ROM:080028B6                 BX      R1
ROM:080028B6 ; End of function Rand2
ROM:080028B6
ROM:080028B6 ; ---------------------------------------------------------------------------
ROM:080028B8 off_80028B8     DCD Rand_Seed           ; DATA XREF: Rand2+Ar
ROM:080028BC dword_80028BC   DCD 0x41C64E6D          ; DATA XREF: Rand2+Er
ROM:080028C0 dword_80028C0   DCD 0x3039              ; DATA XREF: Rand2+14r
ROM:080028C0                                         ; Rand2+20r ...
ROM:080028C4 dword_80028C4   DCD 0x7FFF              ; DATA XREF: Rand2+1Ar


This does all the EXP shiz, and checks level up.
ROM:080A7138 ; =============== S U B R O U T I N E =======================================
ROM:080A7138
ROM:080A7138
ROM:080A7138 CheckLevelUp_Maybe
ROM:080A7138                 PUSH    {R4-R7,LR}
ROM:080A713A                 MOV     R7, R8
ROM:080A713C                 PUSH    {R7}
ROM:080A713E                 MOVS    R5, R0
ROM:080A7140                 MOV     R8, R1
ROM:080A7142                 MOVS    R0, #0x8C ; 'î'
ROM:080A7144                 BL      sub_8022840
ROM:080A7148                 MOVS    R6, R0
ROM:080A714A                 LDR     R4, =ClearRAM
ROM:080A714C                 LDR     R2, [R4]
ROM:080A714E                 MOVS    R1, #0x8C ; 'î'
ROM:080A7150                 BL      Call_r2
ROM:080A7154                 MOVS    R0, #0x68 ; 'h'
ROM:080A7156                 BL      sub_8022840
ROM:080A715A                 MOVS    R7, R0
ROM:080A715C                 LDR     R2, [R4]
ROM:080A715E                 MOVS    R1, #0x68 ; 'h'
ROM:080A7160                 BL      Call_r2
ROM:080A7164                 MOVS    R0, R6
ROM:080A7166                 MOVS    R1, R5
ROM:080A7168                 MOVS    R2, R7
ROM:080A716A                 BL      sub_80A7040
ROM:080A716E                 MOV     R0, R8
ROM:080A7170                 CMP     R0, #0
ROM:080A7172                 BEQ     loc_80A717E
ROM:080A7174                 MOVS    R0, R6
ROM:080A7176                 MOV     R1, R8
ROM:080A7178                 MOVS    R2, R7
ROM:080A717A                 BL      sub_80A7040
ROM:080A717E
ROM:080A717E loc_80A717E                             ; CODE XREF: CheckLevelUp_Maybe+3Aj
ROM:080A717E                 MOVS    R5, #0
ROM:080A7180                 LDR     R0, [R7]
ROM:080A7182                 MOVS    R1, #0x41 ; 'A'
ROM:080A7184                 ADDS    R1, R1, R6
ROM:080A7186                 MOV     R8, R1
ROM:080A7188                 CMP     R0, #0
ROM:080A718A                 BEQ     loc_80A71E8
ROM:080A718C                 ADDS    R4, R7, #0
ROM:080A718E
ROM:080A718E AddEXP                                  ; CODE XREF: CheckLevelUp_Maybe+AEj
ROM:080A718E                 LDR     R0, [R4]
ROM:080A7190                 LDR     R0, [R0]        ; pRAMCharacter
ROM:080A7192                 MOVS    R1, #LoadRAMChar::bEXP ; index
ROM:080A7194                 BL      LoadRAMCharacter
ROM:080A7198                 LDRH    R1, [R4,#4]
ROM:080A719A                 ADDS    R1, R1, R0
ROM:080A719C                 LSLS    R1, R1, #0x10
ROM:080A719E                 LSRS    R2, R1, #0x10
ROM:080A71A0                 ASRS    R1, R1, #0x10
ROM:080A71A2                 CMP     R1, #99
ROM:080A71A4                 BGT     loc_80A71B4
ROM:080A71A6                 LDR     R0, [R4]
ROM:080A71A8                 LDR     R0, [R0]
ROM:080A71AA                 STRB    R2, [R0,#charEXP]
ROM:080A71AC                 B       loc_80A71DA
ROM:080A71AC ; ---------------------------------------------------------------------------
ROM:080A71AE                 DCB    0
ROM:080A71AF                 DCB    0
ROM:080A71B0 off_80A71B0     DCD ClearRAM            ; DATA XREF: CheckLevelUp_Maybe+12r
ROM:080A71B4 ; ---------------------------------------------------------------------------
ROM:080A71B4
ROM:080A71B4 loc_80A71B4                             ; CODE XREF: CheckLevelUp_Maybe+6Cj
ROM:080A71B4                 LDR     R0, [R4]
ROM:080A71B6                 LDR     R1, [R0]
ROM:080A71B8                 MOVS    R0, #0
ROM:080A71BA                 STRB    R0, [R1,#charEXP]
ROM:080A71BC                 LDR     R0, [R4]
ROM:080A71BE                 LDR     R0, [R0]        ; pRAMCharacter
ROM:080A71C0                 BL      LevelUp
ROM:080A71C4                 LSLS    R0, R0, #0x18
ROM:080A71C6                 CMP     R0, #0
ROM:080A71C8                 BEQ     loc_80A71DA
ROM:080A71CA                 LDRH    R0, [R6,#0x34]
ROM:080A71CC                 ADDS    R1, R0, #1
ROM:080A71CE                 STRH    R1, [R6,#0x34]
ROM:080A71D0                 LSLS    R0, R0, #0x10
ROM:080A71D2                 LSRS    R0, R0, #0xE
ROM:080A71D4                 ADDS    R0, R6, R0
ROM:080A71D6                 LDR     R1, [R4]
ROM:080A71D8                 STR     R1, [R0]
ROM:080A71DA
ROM:080A71DA loc_80A71DA                             ; CODE XREF: CheckLevelUp_Maybe+74j
ROM:080A71DA                                         ; CheckLevelUp_Maybe+90j
ROM:080A71DA                 ADDS    R4, #8
ROM:080A71DC                 ADDS    R5, #1
ROM:080A71DE                 CMP     R5, #0xC
ROM:080A71E0                 BGT     loc_80A71E8
ROM:080A71E2                 LDR     R0, [R4]
ROM:080A71E4                 CMP     R0, #0
ROM:080A71E6                 BNE     AddEXP
ROM:080A71E8
ROM:080A71E8 loc_80A71E8                             ; CODE XREF: CheckLevelUp_Maybe+52j
ROM:080A71E8                                         ; CheckLevelUp_Maybe+A8j
ROM:080A71E8                 MOV     R0, R8
ROM:080A71EA                 STRB    R5, [R0]
ROM:080A71EC                 STR     R7, [R6,#0x3C]
ROM:080A71EE                 LDRH    R0, [R6,#0x34]
ROM:080A71F0                 CMP     R0, #0
ROM:080A71F2                 BNE     loc_80A720C
ROM:080A71F4                 MOV     R1, R8
ROM:080A71F6                 LDRB    R0, [R1]
ROM:080A71F8                 CMP     R0, #0
ROM:080A71FA                 BNE     loc_80A720C
ROM:080A71FC                 MOVS    R0, R7
ROM:080A71FE                 BL      sub_8022854
ROM:080A7202                 MOVS    R0, R6
ROM:080A7204                 BL      sub_8022854
ROM:080A7208                 MOVS    R0, #0
ROM:080A720A                 B       loc_80A720E
ROM:080A720C ; ---------------------------------------------------------------------------
ROM:080A720C
ROM:080A720C loc_80A720C                             ; CODE XREF: CheckLevelUp_Maybe+BAj
ROM:080A720C                                         ; CheckLevelUp_Maybe+C2j
ROM:080A720C                 ADDS    R0, R6, #0
ROM:080A720E
ROM:080A720E loc_80A720E                             ; CODE XREF: CheckLevelUp_Maybe+D2j
ROM:080A720E                 POP     {R3}
ROM:080A7210                 MOV     R8, R3
ROM:080A7212                 POP     {R4-R7}
ROM:080A7214                 POP     {R1}
ROM:080A7216                 BX      R1
ROM:080A7216 ; End of function CheckLevelUp_Maybe


And this is the level up routine.
ROM:080C9B8C ; =============== S U B R O U T I N E =======================================
ROM:080C9B8C
ROM:080C9B8C
ROM:080C9B8C ; int __cdecl LevelUp(int *pRAMCharacter)
ROM:080C9B8C LevelUp                                 ; CODE XREF: CheckLevelUp_Maybe+88p
ROM:080C9B8C                                         ; CreateCharacter+216p ...
ROM:080C9B8C Character = R5
ROM:080C9B8C                 PUSH    {R4-R6,LR}
ROM:080C9B8E                 MOVS    Character, R0
ROM:080C9B90                 LDRB    R0, [Character,#charLevel]
ROM:080C9B92                 ADDS    R0, #1
ROM:080C9B94                 MOVS    R1, #0
ROM:080C9B96                 STRB    R0, [Character,#charLevel]
ROM:080C9B98                 STRB    R1, [Character,#charEXP]
ROM:080C9B9A                 MOVS    R0, Character
ROM:080C9B9C                 BL      sub_80C8298
ROM:080C9BA0                 LSLS    R0, R0, #0x18
ROM:080C9BA2                 CMP     R0, #0
ROM:080C9BA4                 BEQ     Continue
ROM:080C9BA6                 B       Error
ROM:080C9BA8 ; ---------------------------------------------------------------------------
ROM:080C9BA8
ROM:080C9BA8 Continue                                ; CODE XREF: LevelUp+18j
ROM:080C9BA8                 LDRB    R0, [Character,#charLevel]
ROM:080C9BAA                 CMP     R0, #50
ROM:080C9BAC                 BLS     Calc_HP
ROM:080C9BAE                 MOVS    R0, #50
ROM:080C9BB0                 STRB    R0, [Character,#charLevel]
ROM:080C9BB2                 MOVS    R0, #99
ROM:080C9BB4                 STRB    R0, [Character,#charEXP]
ROM:080C9BB6                 MOVS    R0, #0
ROM:080C9BB8                 B       End_Now         ; Already at max level.
ROM:080C9BBA ; ---------------------------------------------------------------------------
ROM:080C9BBA
ROM:080C9BBA Calc_HP                                 ; CODE XREF: LevelUp+20j
ROM:080C9BBA                 LDRH    R0, [Character,#charHP]
ROM:080C9BBC                 CMP     R0, #0
ROM:080C9BBE                 BEQ     Calc_MP
ROM:080C9BC0                 MOVS    R0, Character
ROM:080C9BC2                 MOVS    R1, #HP_Growth
ROM:080C9BC4                 BL      LoadJobData
ROM:080C9BC8                 MOVS    R4, R0
ROM:080C9BCA                 MOVS    R1, #10
ROM:080C9BCC                 BL      Div_r0_by_r1    ; r0 = r0 / r1
ROM:080C9BD0                 LDRH    R1, [Character,#charHP]
ROM:080C9BD2                 ADDS    R1, R1, R0
ROM:080C9BD4                 STRH    R1, [Character,#charHP]
ROM:080C9BD6                 MOVS    R0, R4
ROM:080C9BD8                 MOVS    R1, #10
ROM:080C9BDA                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9BDE                 MOVS    R4, R0
ROM:080C9BE0                 CMP     R4, #0
ROM:080C9BE2                 BEQ     Limit_HP
ROM:080C9BE4                 BL      Rand            ; r0 = random val between 0 and 32767
ROM:080C9BE8                 LSLS    R0, R0, #0x10
ROM:080C9BEA                 ASRS    R0, R0, #0x10
ROM:080C9BEC                 MOVS    R1, #10
ROM:080C9BEE                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9BF2                 LSLS    R0, R0, #0x10
ROM:080C9BF4                 ASRS    R0, R0, #0x10
ROM:080C9BF6                 CMP     R0, R4
ROM:080C9BF8                 BGE     Limit_HP
ROM:080C9BFA                 LDRH    R0, [Character,#charHP]
ROM:080C9BFC                 ADDS    R0, #1
ROM:080C9BFE                 STRH    R0, [Character,#charHP]
ROM:080C9C00
ROM:080C9C00 Limit_HP                                ; CODE XREF: LevelUp+56j
ROM:080C9C00                                         ; LevelUp+6Cj
ROM:080C9C00                 LDRH    R0, [Character,#charHP]
ROM:080C9C02                 LDR     R1, =999
ROM:080C9C04                 CMP     R0, R1
ROM:080C9C06                 BLS     Calc_MP
ROM:080C9C08                 STRH    R1, [Character,#charHP]
ROM:080C9C0A
ROM:080C9C0A Calc_MP                                 ; CODE XREF: LevelUp+32j
ROM:080C9C0A                                         ; LevelUp+7Aj
ROM:080C9C0A                 LDRH    R0, [Character,#charMP]
ROM:080C9C0C                 CMP     R0, #0
ROM:080C9C0E                 BEQ     Calc_Speed
ROM:080C9C10                 MOVS    R0, Character
ROM:080C9C12                 MOVS    R1, #MP_Growth
ROM:080C9C14                 BL      LoadJobData
ROM:080C9C18                 MOVS    R4, R0
ROM:080C9C1A                 MOVS    R1, #10
ROM:080C9C1C                 BL      Div_r0_by_r1    ; r0 = r0 / r1
ROM:080C9C20                 LDRH    R1, [Character,#charMP]
ROM:080C9C22                 ADDS    R1, R1, R0
ROM:080C9C24                 STRH    R1, [Character,#charMP]
ROM:080C9C26                 MOVS    R0, R4
ROM:080C9C28                 MOVS    R1, #10
ROM:080C9C2A                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9C2E                 MOVS    R4, R0
ROM:080C9C30                 CMP     R4, #0
ROM:080C9C32                 BEQ     Limit_MP
ROM:080C9C34                 BL      Rand            ; r0 = random val between 0 and 32767
ROM:080C9C38                 LSLS    R0, R0, #0x10
ROM:080C9C3A                 ASRS    R0, R0, #0x10
ROM:080C9C3C                 MOVS    R1, #10
ROM:080C9C3E                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9C42                 LSLS    R0, R0, #0x10
ROM:080C9C44                 ASRS    R0, R0, #0x10
ROM:080C9C46                 CMP     R0, R4
ROM:080C9C48                 BGE     Limit_MP
ROM:080C9C4A                 LDRH    R0, [Character,#charMP]
ROM:080C9C4C                 ADDS    R0, #1
ROM:080C9C4E                 STRH    R0, [Character,#charMP]
ROM:080C9C50
ROM:080C9C50 Limit_MP                                ; CODE XREF: LevelUp+A6j
ROM:080C9C50                                         ; LevelUp+BCj
ROM:080C9C50                 LDRH    R0, [Character,#charMP]
ROM:080C9C52                 LDR     R1, =999
ROM:080C9C54                 CMP     R0, R1
ROM:080C9C56                 BLS     Calc_Speed
ROM:080C9C58                 STRH    R1, [Character,#charMP]
ROM:080C9C5A
ROM:080C9C5A Calc_Speed                              ; CODE XREF: LevelUp+82j
ROM:080C9C5A                                         ; LevelUp+CAj
ROM:080C9C5A                 MOVS    R0, Character
ROM:080C9C5C                 ADDS    R0, #charSpeed
ROM:080C9C5E                 MOVS    R2, #0
ROM:080C9C60                 LDRSH   R1, [R0,R2]
ROM:080C9C62                 MOVS    R6, R0
ROM:080C9C64                 CMP     R1, #0
ROM:080C9C66                 BEQ     Calc_Atk
ROM:080C9C68                 MOVS    R0, Character
ROM:080C9C6A                 MOVS    R1, #Speed_Growth
ROM:080C9C6C                 BL      LoadJobData
ROM:080C9C70                 MOVS    R4, R0
ROM:080C9C72                 MOVS    R1, #10
ROM:080C9C74                 BL      Div_r0_by_r1    ; r0 = r0 / r1
ROM:080C9C78                 LDRH    R1, [R6]
ROM:080C9C7A                 ADDS    R1, R1, R0
ROM:080C9C7C                 STRH    R1, [R6]
ROM:080C9C7E                 MOVS    R0, R4
ROM:080C9C80                 MOVS    R1, #10
ROM:080C9C82                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9C86                 MOVS    R4, R0
ROM:080C9C88                 CMP     R4, #0
ROM:080C9C8A                 BEQ     Limit_Speed
ROM:080C9C8C                 BL      Rand            ; r0 = random val between 0 and 32767
ROM:080C9C90                 LSLS    R0, R0, #0x10
ROM:080C9C92                 ASRS    R0, R0, #0x10
ROM:080C9C94                 MOVS    R1, #10
ROM:080C9C96                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9C9A                 LSLS    R0, R0, #0x10
ROM:080C9C9C                 ASRS    R0, R0, #0x10
ROM:080C9C9E                 CMP     R0, R4
ROM:080C9CA0                 BGE     Limit_Speed
ROM:080C9CA2                 LDRH    R0, [R6]
ROM:080C9CA4                 ADDS    R0, #1
ROM:080C9CA6                 STRH    R0, [R6]
ROM:080C9CA8
ROM:080C9CA8 Limit_Speed                             ; CODE XREF: LevelUp+FEj
ROM:080C9CA8                                         ; LevelUp+114j
ROM:080C9CA8                 MOVS    R1, #0
ROM:080C9CAA                 LDRSH   R0, [R6,R1]
ROM:080C9CAC                 LDR     R1, =999
ROM:080C9CAE                 CMP     R0, R1
ROM:080C9CB0                 BLE     Calc_Atk
ROM:080C9CB2                 STRH    R1, [R6]
ROM:080C9CB4
ROM:080C9CB4 Calc_Atk                                ; CODE XREF: LevelUp+DAj
ROM:080C9CB4                                         ; LevelUp+124j
ROM:080C9CB4                 LDRH    R0, [Character,#charAtk]
ROM:080C9CB6                 CMP     R0, #0
ROM:080C9CB8                 BEQ     Calc_Def
ROM:080C9CBA                 MOVS    R0, Character
ROM:080C9CBC                 MOVS    R1, #Atk_Growth
ROM:080C9CBE                 BL      LoadJobData
ROM:080C9CC2                 MOVS    R4, R0
ROM:080C9CC4                 MOVS    R1, #10
ROM:080C9CC6                 BL      Div_r0_by_r1    ; r0 = r0 / r1
ROM:080C9CCA                 LDRH    R1, [Character,#charAtk]
ROM:080C9CCC                 ADDS    R1, R1, R0
ROM:080C9CCE                 STRH    R1, [Character,#charAtk]
ROM:080C9CD0                 MOVS    R0, R4
ROM:080C9CD2                 MOVS    R1, #10
ROM:080C9CD4                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9CD8                 MOVS    R4, R0
ROM:080C9CDA                 CMP     R4, #0
ROM:080C9CDC                 BEQ     Limit_Atk
ROM:080C9CDE                 BL      Rand            ; r0 = random val between 0 and 32767
ROM:080C9CE2                 LSLS    R0, R0, #0x10
ROM:080C9CE4                 ASRS    R0, R0, #0x10
ROM:080C9CE6                 MOVS    R1, #10
ROM:080C9CE8                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9CEC                 LSLS    R0, R0, #0x10
ROM:080C9CEE                 ASRS    R0, R0, #0x10
ROM:080C9CF0                 CMP     R0, R4
ROM:080C9CF2                 BGE     Limit_Atk
ROM:080C9CF4                 LDRH    R0, [Character,#charAtk]
ROM:080C9CF6                 ADDS    R0, #1
ROM:080C9CF8                 STRH    R0, [Character,#charAtk]
ROM:080C9CFA
ROM:080C9CFA Limit_Atk                               ; CODE XREF: LevelUp+150j
ROM:080C9CFA                                         ; LevelUp+166j
ROM:080C9CFA                 LDRH    R0, [Character,#charAtk]
ROM:080C9CFC                 LDR     R1, =999
ROM:080C9CFE                 CMP     R0, R1
ROM:080C9D00                 BLS     Calc_Def
ROM:080C9D02                 STRH    R1, [Character,#charAtk]
ROM:080C9D04
ROM:080C9D04 Calc_Def                                ; CODE XREF: LevelUp+12Cj
ROM:080C9D04                                         ; LevelUp+174j
ROM:080C9D04                 LDRH    R0, [Character,#charDef]
ROM:080C9D06                 CMP     R0, #0
ROM:080C9D08                 BEQ     Calc_Pow
ROM:080C9D0A                 MOVS    R0, Character
ROM:080C9D0C                 MOVS    R1, #Def_Growth
ROM:080C9D0E                 BL      LoadJobData
ROM:080C9D12                 MOVS    R4, R0
ROM:080C9D14                 MOVS    R1, #10
ROM:080C9D16                 BL      Div_r0_by_r1    ; r0 = r0 / r1
ROM:080C9D1A                 LDRH    R1, [Character,#charDef]
ROM:080C9D1C                 ADDS    R1, R1, R0
ROM:080C9D1E                 STRH    R1, [Character,#charDef]
ROM:080C9D20                 MOVS    R0, R4
ROM:080C9D22                 MOVS    R1, #10
ROM:080C9D24                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9D28                 MOVS    R4, R0
ROM:080C9D2A                 CMP     R4, #0
ROM:080C9D2C                 BEQ     Limit_Def
ROM:080C9D2E                 BL      Rand            ; r0 = random val between 0 and 32767
ROM:080C9D32                 LSLS    R0, R0, #0x10
ROM:080C9D34                 ASRS    R0, R0, #0x10
ROM:080C9D36                 MOVS    R1, #10
ROM:080C9D38                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9D3C                 LSLS    R0, R0, #0x10
ROM:080C9D3E                 ASRS    R0, R0, #0x10
ROM:080C9D40                 CMP     R0, R4
ROM:080C9D42                 BGE     Limit_Def
ROM:080C9D44                 LDRH    R0, [Character,#charDef]
ROM:080C9D46                 ADDS    R0, #1
ROM:080C9D48                 STRH    R0, [Character,#charDef]
ROM:080C9D4A
ROM:080C9D4A Limit_Def                               ; CODE XREF: LevelUp+1A0j
ROM:080C9D4A                                         ; LevelUp+1B6j
ROM:080C9D4A                 LDRH    R0, [Character,#charDef]
ROM:080C9D4C                 LDR     R1, =999
ROM:080C9D4E                 CMP     R0, R1
ROM:080C9D50                 BLS     Calc_Pow
ROM:080C9D52                 STRH    R1, [Character,#charDef]
ROM:080C9D54
ROM:080C9D54 Calc_Pow                                ; CODE XREF: LevelUp+17Cj
ROM:080C9D54                                         ; LevelUp+1C4j
ROM:080C9D54                 LDRH    R0, [Character,#charPow]
ROM:080C9D56                 CMP     R0, #0
ROM:080C9D58                 BEQ     Calc_Res
ROM:080C9D5A                 MOVS    R0, Character
ROM:080C9D5C                 MOVS    R1, #Pow_Growth
ROM:080C9D5E                 BL      LoadJobData
ROM:080C9D62                 MOVS    R4, R0
ROM:080C9D64                 MOVS    R1, #10
ROM:080C9D66                 BL      Div_r0_by_r1    ; r0 = r0 / r1
ROM:080C9D6A                 LDRH    R1, [Character,#charPow]
ROM:080C9D6C                 ADDS    R1, R1, R0
ROM:080C9D6E                 STRH    R1, [Character,#charPow]
ROM:080C9D70                 MOVS    R0, R4
ROM:080C9D72                 MOVS    R1, #10
ROM:080C9D74                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9D78                 MOVS    R4, R0
ROM:080C9D7A                 CMP     R4, #0
ROM:080C9D7C                 BEQ     Limit_Pow
ROM:080C9D7E                 BL      Rand            ; r0 = random val between 0 and 32767
ROM:080C9D82                 LSLS    R0, R0, #0x10
ROM:080C9D84                 ASRS    R0, R0, #0x10
ROM:080C9D86                 MOVS    R1, #10
ROM:080C9D88                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9D8C                 LSLS    R0, R0, #0x10
ROM:080C9D8E                 ASRS    R0, R0, #0x10
ROM:080C9D90                 CMP     R0, R4
ROM:080C9D92                 BGE     Limit_Pow
ROM:080C9D94                 LDRH    R0, [Character,#charPow]
ROM:080C9D96                 ADDS    R0, #1
ROM:080C9D98                 STRH    R0, [Character,#charPow]
ROM:080C9D9A
ROM:080C9D9A Limit_Pow                               ; CODE XREF: LevelUp+1F0j
ROM:080C9D9A                                         ; LevelUp+206j
ROM:080C9D9A                 LDRH    R0, [Character,#charPow]
ROM:080C9D9C                 LDR     R1, =999
ROM:080C9D9E                 CMP     R0, R1
ROM:080C9DA0                 BLS     Calc_Res
ROM:080C9DA2                 STRH    R1, [Character,#charPow]
ROM:080C9DA4
ROM:080C9DA4 Calc_Res                                ; CODE XREF: LevelUp+1CCj
ROM:080C9DA4                                         ; LevelUp+214j
ROM:080C9DA4                 LDRH    R0, [Character,#charRes]
ROM:080C9DA6                 CMP     R0, #0
ROM:080C9DA8                 BEQ     Error
ROM:080C9DAA                 MOVS    R0, Character
ROM:080C9DAC                 MOVS    R1, #Res_Growth
ROM:080C9DAE                 BL      LoadJobData
ROM:080C9DB2                 MOVS    R4, R0
ROM:080C9DB4                 MOVS    R1, #10
ROM:080C9DB6                 BL      Div_r0_by_r1    ; r0 = r0 / r1
ROM:080C9DBA                 LDRH    R1, [Character,#charRes]
ROM:080C9DBC                 ADDS    R1, R1, R0
ROM:080C9DBE                 STRH    R1, [Character,#charRes]
ROM:080C9DC0                 MOVS    R0, R4
ROM:080C9DC2                 MOVS    R1, #10
ROM:080C9DC4                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9DC8                 MOVS    R4, R0
ROM:080C9DCA                 CMP     R4, #0
ROM:080C9DCC                 BEQ     Limit_Res
ROM:080C9DCE                 BL      Rand            ; r0 = random val between 0 and 32767
ROM:080C9DD2                 LSLS    R0, R0, #0x10
ROM:080C9DD4                 ASRS    R0, R0, #0x10
ROM:080C9DD6                 MOVS    R1, #10
ROM:080C9DD8                 BL      Mod_r0_by_r1    ; r0 = r0 % r1
ROM:080C9DDC                 LSLS    R0, R0, #0x10
ROM:080C9DDE                 ASRS    R0, R0, #0x10
ROM:080C9DE0                 CMP     R0, R4
ROM:080C9DE2                 BGE     Limit_Res
ROM:080C9DE4                 LDRH    R0, [Character,#charRes]
ROM:080C9DE6                 ADDS    R0, #1
ROM:080C9DE8                 STRH    R0, [Character,#charRes]
ROM:080C9DEA
ROM:080C9DEA Limit_Res                               ; CODE XREF: LevelUp+240j
ROM:080C9DEA                                         ; LevelUp+256j
ROM:080C9DEA                 LDRH    R0, [Character,#charRes]
ROM:080C9DEC                 LDR     R1, =999
ROM:080C9DEE                 CMP     R0, R1
ROM:080C9DF0                 BLS     Error
ROM:080C9DF2                 STRH    R1, [Character,#charRes]
ROM:080C9DF4
ROM:080C9DF4 Error                                   ; CODE XREF: LevelUp+1Aj
ROM:080C9DF4                                         ; LevelUp+21Cj ...
ROM:080C9DF4                 MOVS    R0, #1
ROM:080C9DF6
ROM:080C9DF6 End_Now                                 ; CODE XREF: LevelUp+2Cj
ROM:080C9DF6                 POP     {R4-R6}
ROM:080C9DF8                 POP     {R1}
ROM:080C9DFA                 BX      R1
ROM:080C9DFA ; End of function LevelUp
ROM:080C9DFA
ROM:080C9DFA ; ---------------------------------------------------------------------------
ROM:080C9DFC dword_80C9DFC   DCD 999                 ; DATA XREF: LevelUp+76r
ROM:080C9DFC                                         ; LevelUp+C6r ...


This shall do for now.
  • Modding version: Other/Unknown
  • Discord username: Darthatron