summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-11-01 09:55:25 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-11-01 09:55:25 -0400
commit5913bcf0e93f4741ce5b84bdd4a52d781fb7d6fb (patch)
tree64f1cea8471dac0e941b912844e2ba63387bf13e
parent930c7c4ad7f698b76b8ae45e13e7e9baa3fc1ee6 (diff)
Port pokemon_size_record from Emerald
-rw-r--r--asm/pokemon_size_record.s482
-rw-r--r--data/data_835B488.s164
-rw-r--r--data/item_use.s15
-rw-r--r--data/naming_screen.s159
-rw-r--r--data/strings.s2
-rw-r--r--include/pokemon_size_record.h4
-rw-r--r--ld_script.txt5
-rw-r--r--src/new_game.c4
-rw-r--r--src/pokemon_size_record.c221
9 files changed, 404 insertions, 652 deletions
diff --git a/asm/pokemon_size_record.s b/asm/pokemon_size_record.s
deleted file mode 100644
index e14bdc51d..000000000
--- a/asm/pokemon_size_record.s
+++ /dev/null
@@ -1,482 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start GetMonSizeHash
-GetMonSizeHash: @ 80A069C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r5, r0, 0
- movs r1, 0
- bl GetMonData
- lsls r0, 16
- str r0, [sp, 0x4]
- lsrs r0, 16
- str r0, [sp]
- adds r0, r5, 0
- movs r1, 0x27
- bl GetMonData
- adds r7, r0, 0
- movs r6, 0xF
- ands r7, r6
- adds r0, r5, 0
- movs r1, 0x28
- bl GetMonData
- mov r8, r0
- mov r1, r8
- ands r1, r6
- mov r8, r1
- adds r0, r5, 0
- movs r1, 0x29
- bl GetMonData
- mov r9, r0
- mov r3, r9
- ands r3, r6
- mov r9, r3
- adds r0, r5, 0
- movs r1, 0x2A
- bl GetMonData
- mov r10, r0
- ands r0, r6
- mov r10, r0
- adds r0, r5, 0
- movs r1, 0x2B
- bl GetMonData
- adds r4, r0, 0
- ands r4, r6
- adds r0, r5, 0
- movs r1, 0x2C
- bl GetMonData
- adds r2, r0, 0
- ands r2, r6
- mov r1, r8
- mov r3, r9
- eors r1, r3
- mov r8, r1
- mov r0, r8
- muls r0, r7
- movs r1, 0xFF
- ldr r3, [sp]
- ands r3, r1
- eors r0, r3
- eors r4, r2
- mov r1, r10
- muls r1, r4
- ldr r3, [sp, 0x4]
- lsrs r2, r3, 24
- eors r1, r2
- lsls r0, 8
- adds r0, r1
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetMonSizeHash
-
- thumb_func_start TranslateBigMonSizeTableIndex
-TranslateBigMonSizeTableIndex: @ 80A0740
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0x1
- ldr r3, _080A075C @ =gUnknown_83E272C
-_080A074A:
- lsls r0, r1, 3
- adds r0, r3
- ldrh r0, [r0, 0x4]
- cmp r2, r0
- bcs _080A0760
- subs r0, r1, 0x1
- lsls r0, 24
- lsrs r0, 24
- b _080A076C
- .align 2, 0
-_080A075C: .4byte gUnknown_83E272C
-_080A0760:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xE
- bls _080A074A
- adds r0, r1, 0
-_080A076C:
- pop {r1}
- bx r1
- thumb_func_end TranslateBigMonSizeTableIndex
-
- thumb_func_start GetMonSize
-GetMonSize: @ 80A0770
- push {r4-r7,lr}
- sub sp, 0x8
- adds r6, r1, 0
- lsls r0, 16
- lsrs r0, 16
- lsls r6, 16
- lsrs r6, 16
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0
- bl GetPokedexHeightWeight
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r6, 0
- bl TranslateBigMonSizeTableIndex
- lsls r0, 24
- ldr r1, _080A07E0 @ =gUnknown_83E272C
- lsrs r0, 21
- adds r0, r1
- ldrh r1, [r0]
- str r1, [sp]
- movs r2, 0
- str r2, [sp, 0x4]
- ldrb r2, [r0, 0x2]
- movs r3, 0
- ldrh r4, [r0, 0x4]
- movs r5, 0
- adds r0, r6, 0
- movs r1, 0
- subs r0, r4
- sbcs r1, r5
- bl __udivdi3
- ldr r2, [sp]
- ldr r3, [sp, 0x4]
- adds r2, r0
- adcs r3, r1
- str r2, [sp]
- str r3, [sp, 0x4]
- adds r0, r7, 0
- movs r1, 0
- bl __muldi3
- movs r2, 0xA
- movs r3, 0
- bl __udivdi3
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080A07E0: .4byte gUnknown_83E272C
- thumb_func_end GetMonSize
-
- thumb_func_start sub_80A07E4
-sub_80A07E4: @ 80A07E4
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x64
- muls r0, r1
- movs r1, 0xFE
- bl __udivsi3
- adds r5, r0, 0
- movs r1, 0xA
- bl __udivsi3
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x8
- bl ConvertIntToDecimalStringN
- ldr r1, _080A0828 @ =gUnknown_8417FB9
- bl StringAppend
- adds r4, r0, 0
- adds r0, r5, 0
- movs r1, 0xA
- bl __umodsi3
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080A0828: .4byte gUnknown_8417FB9
- thumb_func_end sub_80A07E4
-
- thumb_func_start sub_80A082C
-sub_80A082C: @ 80A082C
- push {r4-r7,lr}
- sub sp, 0x4
- adds r7, r1, 0
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r1, _080A0844 @ =gSpecialVar_Result
- ldrh r0, [r1]
- cmp r0, 0x5
- bls _080A0848
- movs r0, 0
- b _080A08C4
- .align 2, 0
-_080A0844: .4byte gSpecialVar_Result
-_080A0848:
- ldrh r1, [r1]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _080A0870 @ =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0x1
- beq _080A086A
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, r6
- beq _080A0874
-_080A086A:
- movs r0, 0x1
- b _080A08C4
- .align 2, 0
-_080A0870: .4byte gPlayerParty
-_080A0874:
- mov r4, sp
- adds r0, r5, 0
- bl GetMonSizeHash
- strh r0, [r4]
- mov r0, sp
- ldrh r1, [r0]
- adds r0, r6, 0
- bl GetMonSize
- adds r5, r0, 0
- ldrh r1, [r7]
- adds r0, r6, 0
- bl GetMonSize
- adds r4, r0, 0
- ldr r0, _080A08AC @ =gStringVar3
- adds r1, r4, 0
- bl sub_80A07E4
- ldr r0, _080A08B0 @ =gStringVar2
- adds r1, r5, 0
- bl sub_80A07E4
- cmp r5, r4
- bne _080A08B4
- movs r0, 0x4
- b _080A08C4
- .align 2, 0
-_080A08AC: .4byte gStringVar3
-_080A08B0: .4byte gStringVar2
-_080A08B4:
- cmp r5, r4
- bcc _080A08C2
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r7]
- movs r0, 0x3
- b _080A08C4
-_080A08C2:
- movs r0, 0x2
-_080A08C4:
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80A082C
-
- thumb_func_start sub_80A08CC
-sub_80A08CC: @ 80A08CC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrh r1, [r1]
- adds r0, r4, 0
- bl GetMonSize
- adds r1, r0, 0
- ldr r0, _080A08F8 @ =gStringVar3
- bl sub_80A07E4
- ldr r0, _080A08FC @ =gStringVar1
- movs r1, 0xB
- muls r1, r4
- ldr r2, _080A0900 @ =gSpeciesNames
- adds r1, r2
- bl StringCopy
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080A08F8: .4byte gStringVar3
-_080A08FC: .4byte gStringVar1
-_080A0900: .4byte gSpeciesNames
- thumb_func_end sub_80A08CC
-
- thumb_func_start sub_80A0904
-sub_80A0904: @ 80A0904
- push {lr}
- ldr r0, _080A0914 @ =0x0000403d
- movs r1, 0
- bl VarSet
- pop {r0}
- bx r0
- .align 2, 0
-_080A0914: .4byte 0x0000403d
- thumb_func_end sub_80A0904
-
- thumb_func_start GetHeracrossSizeRecordInfo
-GetHeracrossSizeRecordInfo: @ 80A0918
- push {lr}
- ldr r0, _080A092C @ =0x0000403d
- bl GetVarPointer
- adds r1, r0, 0
- movs r0, 0xD6
- bl sub_80A08CC
- pop {r0}
- bx r0
- .align 2, 0
-_080A092C: .4byte 0x0000403d
- thumb_func_end GetHeracrossSizeRecordInfo
-
- thumb_func_start CompareHeracrossSize
-CompareHeracrossSize: @ 80A0930
- push {r4,lr}
- ldr r0, _080A0950 @ =0x0000403d
- bl GetVarPointer
- adds r1, r0, 0
- ldr r4, _080A0954 @ =gSpecialVar_Result
- movs r0, 0xD6
- bl sub_80A082C
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080A0950: .4byte 0x0000403d
-_080A0954: .4byte gSpecialVar_Result
- thumb_func_end CompareHeracrossSize
-
- thumb_func_start sub_80A0958
-sub_80A0958: @ 80A0958
- push {lr}
- ldr r0, _080A0968 @ =0x00004040
- movs r1, 0
- bl VarSet
- pop {r0}
- bx r0
- .align 2, 0
-_080A0968: .4byte 0x00004040
- thumb_func_end sub_80A0958
-
- thumb_func_start GetMagikarpSizeRecordInfo
-GetMagikarpSizeRecordInfo: @ 80A096C
- push {lr}
- ldr r0, _080A0980 @ =0x00004040
- bl GetVarPointer
- adds r1, r0, 0
- movs r0, 0x81
- bl sub_80A08CC
- pop {r0}
- bx r0
- .align 2, 0
-_080A0980: .4byte 0x00004040
- thumb_func_end GetMagikarpSizeRecordInfo
-
- thumb_func_start CompareMagikarpSize
-CompareMagikarpSize: @ 80A0984
- push {r4,lr}
- ldr r0, _080A09A4 @ =0x00004040
- bl GetVarPointer
- adds r1, r0, 0
- ldr r4, _080A09A8 @ =gSpecialVar_Result
- movs r0, 0x81
- bl sub_80A082C
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080A09A4: .4byte 0x00004040
-_080A09A8: .4byte gSpecialVar_Result
- thumb_func_end CompareMagikarpSize
-
- thumb_func_start GiveGiftRibbonToParty
-GiveGiftRibbonToParty: @ 80A09AC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- movs r7, 0
- add r4, sp, 0x8
- movs r0, 0x1
- strb r0, [r4]
- ldr r1, _080A0A34 @ =gUnknown_83E27AC
- mov r0, sp
- movs r2, 0x7
- bl memcpy
- mov r8, r4
- cmp r6, 0xA
- bhi _080A0A28
- cmp r5, 0x40
- bhi _080A0A28
- ldr r0, _080A0A38 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _080A0A3C @ =0x0000309c
- adds r0, r1
- adds r0, r6
- strb r5, [r0]
- movs r5, 0
-_080A09E6:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _080A0A40 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _080A0A18
- adds r0, r4, 0
- movs r1, 0x6
- bl GetMonData
- cmp r0, 0
- bne _080A0A18
- mov r1, sp
- adds r0, r1, r6
- ldrb r1, [r0]
- adds r0, r4, 0
- mov r2, r8
- bl SetMonData
- movs r7, 0x1
-_080A0A18:
- adds r5, 0x1
- cmp r5, 0x5
- ble _080A09E6
- cmp r7, 0
- beq _080A0A28
- ldr r0, _080A0A44 @ =0x0000083b
- bl FlagSet
-_080A0A28:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080A0A34: .4byte gUnknown_83E27AC
-_080A0A38: .4byte gSaveBlock1Ptr
-_080A0A3C: .4byte 0x0000309c
-_080A0A40: .4byte gPlayerParty
-_080A0A44: .4byte 0x0000083b
- thumb_func_end GiveGiftRibbonToParty
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/data_835B488.s b/data/data_835B488.s
index 5ab4856b8..27b12977e 100644
--- a/data/data_835B488.s
+++ b/data/data_835B488.s
@@ -6,170 +6,6 @@
.section .rodata
.align 2
- .incbin "baserom.gba", 0x3E1800, 0xA80
-
-gUnknown_83E2280:: @ 83E2280
- .incbin "baserom.gba", 0x3E2280, 0x10
-
-gUnknown_83E2290:: @ 83E2290
- .incbin "baserom.gba", 0x3E2290, 0x10
-
-gUnknown_83E22A0:: @ 83E22A0
- .incbin "baserom.gba", 0x3E22A0, 0x30
-
-gUnknown_83E22D0:: @ 83E22D0
- .incbin "baserom.gba", 0x3E22D0, 0x60
-
-gUnknown_83E2330:: @ 83E2330
- .incbin "baserom.gba", 0x3E2330, 0x3
-
-gUnknown_83E2333:: @ 83E2333
- .incbin "baserom.gba", 0x3E2333, 0x18
-
-gUnknown_83E234B:: @ 83E234B
- .incbin "baserom.gba", 0x3E234B, 0x3
-
-gUnknown_83E234E:: @ 83E234E
- .incbin "baserom.gba", 0x3E234E, 0x3
-
-gUnknown_83E2351:: @ 83E2351
- .incbin "baserom.gba", 0x3E2351, 0x3
-
-gUnknown_83E2354:: @ 83E2354
- .incbin "baserom.gba", 0x3E2354, 0x10
-
-gUnknown_83E2364:: @ 83E2364
- .incbin "baserom.gba", 0x3E2364, 0x8
-
-gUnknown_83E236C:: @ 83E236C
- .incbin "baserom.gba", 0x3E236C, 0x8
-
-gUnknown_83E2374:: @ 83E2374
- .incbin "baserom.gba", 0x3E2374, 0x4
-
-gUnknown_83E2378:: @ 83E2378
- .incbin "baserom.gba", 0x3E2378, 0x10
-
-gUnknown_83E2388:: @ 83E2388
- .incbin "baserom.gba", 0x3E2388, 0x6
-
-gUnknown_83E238E:: @ 83E238E
- .incbin "baserom.gba", 0x3E238E, 0x6
-
-gUnknown_83E2394:: @ 83E2394
- .incbin "baserom.gba", 0x3E2394, 0x28
-
-gUnknown_83E23BC:: @ 83E23BC
- .incbin "baserom.gba", 0x3E23BC, 0x4
-
-gUnknown_83E23C0:: @ 83E23C0
- .incbin "baserom.gba", 0x3E23C0, 0x8
-
-gUnknown_83E23C8:: @ 83E23C8
- .incbin "baserom.gba", 0x3E23C8, 0x8
-
-gUnknown_83E23D0:: @ 83E23D0
- .incbin "baserom.gba", 0x3E23D0, 0x10
-
-gUnknown_83E23E0:: @ 83E23E0
- .incbin "baserom.gba", 0x3E23E0, 0x8
-
-gUnknown_83E23E8:: @ 83E23E8
- .incbin "baserom.gba", 0x3E23E8, 0xA
-
-gUnknown_83E23F2:: @ 83E23F2
- .incbin "baserom.gba", 0x3E23F2, 0xA
-
-gUnknown_83E23FC:: @ 83E23FC
- .incbin "baserom.gba", 0x3E23FC, 0x8
-
-gUnknown_83E2404:: @ 83E2404
- .incbin "baserom.gba", 0x3E2404, 0x8
-
-gUnknown_83E240C:: @ 83E240C
- .incbin "baserom.gba", 0x3E240C, 0x14
-
-gUnknown_83E2420:: @ 83E2420
- .incbin "baserom.gba", 0x3E2420, 0x8
-
-gUnknown_83E2428:: @ 83E2428
- .incbin "baserom.gba", 0x3E2428, 0x14
-
-gUnknown_83E243C:: @ 83E243C
- .incbin "baserom.gba", 0x3E243C, 0x4
-
-gUnknown_83E2440:: @ 83E2440
- .incbin "baserom.gba", 0x3E2440, 0xC
-
-gUnknown_83E244C:: @ 83E244C
- .incbin "baserom.gba", 0x3E244C, 0xC
-
-gUnknown_83E2458:: @ 83E2458
- .incbin "baserom.gba", 0x3E2458, 0x34
-
-gUnknown_83E248C:: @ 83E248C
- .incbin "baserom.gba", 0x3E248C, 0x78
-
-gUnknown_83E2504:: @ 83E2504
- .incbin "baserom.gba", 0x3E2504, 0x8
-
-gUnknown_83E250C:: @ 83E250C
- .incbin "baserom.gba", 0x3E250C, 0x18
-
-gUnknown_83E2524:: @ 83E2524
- .incbin "baserom.gba", 0x3E2524, 0x8
-
-gUnknown_83E252C:: @ 83E252C
- .incbin "baserom.gba", 0x3E252C, 0x48
-
-gUnknown_83E2574:: @ 83E2574
- .incbin "baserom.gba", 0x3E2574, 0x18
-
-gUnknown_83E258C:: @ 83E258C
- .incbin "baserom.gba", 0x3E258C, 0x18
-
-gUnknown_83E25A4:: @ 83E25A4
- .incbin "baserom.gba", 0x3E25A4, 0x18
-
-gUnknown_83E25BC:: @ 83E25BC
- .incbin "baserom.gba", 0x3E25BC, 0x18
-
-gUnknown_83E25D4:: @ 83E25D4
- .incbin "baserom.gba", 0x3E25D4, 0x18
-
-gUnknown_83E25EC:: @ 83E25EC
- .incbin "baserom.gba", 0x3E25EC, 0x18
-
-gUnknown_83E2604:: @ 83E2604
- .incbin "baserom.gba", 0x3E2604, 0x18
-
-gUnknown_83E261C:: @ 83E261C
- .incbin "baserom.gba", 0x3E261C, 0x18
-
-gUnknown_83E2634:: @ 83E2634
- .incbin "baserom.gba", 0x3E2634, 0x18
-
-gUnknown_83E264C:: @ 83E264C
- .incbin "baserom.gba", 0x3E264C, 0x30
-
-gUnknown_83E267C:: @ 83E267C
- .incbin "baserom.gba", 0x3E267C, 0x68
-
-gUnknown_83E26E4:: @ 83E26E4
- .incbin "baserom.gba", 0x3E26E4, 0x48
-
-gUnknown_83E272C:: @ 83E272C
- .incbin "baserom.gba", 0x3E272C, 0x80
-
-gUnknown_83E27AC:: @ 83E27AC
- .incbin "baserom.gba", 0x3E27AC, 0x1A8
-
-gUnknown_83E2954:: @ 83E2954
- .4byte sub_8124C8C
- .4byte CB2_ReturnToField
- .4byte NULL
- .4byte NULL
-
gUnknown_83E2964:: @ 83E2964
.incbin "baserom.gba", 0x3E2964, 0x124
diff --git a/data/item_use.s b/data/item_use.s
new file mode 100644
index 000000000..aa78ac919
--- /dev/null
+++ b/data/item_use.s
@@ -0,0 +1,15 @@
+#include "constants/maps.h"
+#include "constants/species.h"
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+ .align 2
+
+ .incbin "baserom.gba", 0x3E27B4, 0x1A0
+
+gUnknown_83E2954:: @ 83E2954
+ .4byte sub_8124C8C
+ .4byte CB2_ReturnToField
+ .4byte NULL
+ .4byte NULL
diff --git a/data/naming_screen.s b/data/naming_screen.s
new file mode 100644
index 000000000..5d49b2581
--- /dev/null
+++ b/data/naming_screen.s
@@ -0,0 +1,159 @@
+#include "constants/maps.h"
+#include "constants/species.h"
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+ .align 2
+
+ .incbin "baserom.gba", 0x3E1800, 0xA80
+
+gUnknown_83E2280:: @ 83E2280
+ .incbin "baserom.gba", 0x3E2280, 0x10
+
+gUnknown_83E2290:: @ 83E2290
+ .incbin "baserom.gba", 0x3E2290, 0x10
+
+gUnknown_83E22A0:: @ 83E22A0
+ .incbin "baserom.gba", 0x3E22A0, 0x30
+
+gUnknown_83E22D0:: @ 83E22D0
+ .incbin "baserom.gba", 0x3E22D0, 0x60
+
+gUnknown_83E2330:: @ 83E2330
+ .incbin "baserom.gba", 0x3E2330, 0x3
+
+gUnknown_83E2333:: @ 83E2333
+ .incbin "baserom.gba", 0x3E2333, 0x18
+
+gUnknown_83E234B:: @ 83E234B
+ .incbin "baserom.gba", 0x3E234B, 0x3
+
+gUnknown_83E234E:: @ 83E234E
+ .incbin "baserom.gba", 0x3E234E, 0x3
+
+gUnknown_83E2351:: @ 83E2351
+ .incbin "baserom.gba", 0x3E2351, 0x3
+
+gUnknown_83E2354:: @ 83E2354
+ .incbin "baserom.gba", 0x3E2354, 0x10
+
+gUnknown_83E2364:: @ 83E2364
+ .incbin "baserom.gba", 0x3E2364, 0x8
+
+gUnknown_83E236C:: @ 83E236C
+ .incbin "baserom.gba", 0x3E236C, 0x8
+
+gUnknown_83E2374:: @ 83E2374
+ .incbin "baserom.gba", 0x3E2374, 0x4
+
+gUnknown_83E2378:: @ 83E2378
+ .incbin "baserom.gba", 0x3E2378, 0x10
+
+gUnknown_83E2388:: @ 83E2388
+ .incbin "baserom.gba", 0x3E2388, 0x6
+
+gUnknown_83E238E:: @ 83E238E
+ .incbin "baserom.gba", 0x3E238E, 0x6
+
+gUnknown_83E2394:: @ 83E2394
+ .incbin "baserom.gba", 0x3E2394, 0x28
+
+gUnknown_83E23BC:: @ 83E23BC
+ .incbin "baserom.gba", 0x3E23BC, 0x4
+
+gUnknown_83E23C0:: @ 83E23C0
+ .incbin "baserom.gba", 0x3E23C0, 0x8
+
+gUnknown_83E23C8:: @ 83E23C8
+ .incbin "baserom.gba", 0x3E23C8, 0x8
+
+gUnknown_83E23D0:: @ 83E23D0
+ .incbin "baserom.gba", 0x3E23D0, 0x10
+
+gUnknown_83E23E0:: @ 83E23E0
+ .incbin "baserom.gba", 0x3E23E0, 0x8
+
+gUnknown_83E23E8:: @ 83E23E8
+ .incbin "baserom.gba", 0x3E23E8, 0xA
+
+gUnknown_83E23F2:: @ 83E23F2
+ .incbin "baserom.gba", 0x3E23F2, 0xA
+
+gUnknown_83E23FC:: @ 83E23FC
+ .incbin "baserom.gba", 0x3E23FC, 0x8
+
+gUnknown_83E2404:: @ 83E2404
+ .incbin "baserom.gba", 0x3E2404, 0x8
+
+gUnknown_83E240C:: @ 83E240C
+ .incbin "baserom.gba", 0x3E240C, 0x14
+
+gUnknown_83E2420:: @ 83E2420
+ .incbin "baserom.gba", 0x3E2420, 0x8
+
+gUnknown_83E2428:: @ 83E2428
+ .incbin "baserom.gba", 0x3E2428, 0x14
+
+gUnknown_83E243C:: @ 83E243C
+ .incbin "baserom.gba", 0x3E243C, 0x4
+
+gUnknown_83E2440:: @ 83E2440
+ .incbin "baserom.gba", 0x3E2440, 0xC
+
+gUnknown_83E244C:: @ 83E244C
+ .incbin "baserom.gba", 0x3E244C, 0xC
+
+gUnknown_83E2458:: @ 83E2458
+ .incbin "baserom.gba", 0x3E2458, 0x34
+
+gUnknown_83E248C:: @ 83E248C
+ .incbin "baserom.gba", 0x3E248C, 0x78
+
+gUnknown_83E2504:: @ 83E2504
+ .incbin "baserom.gba", 0x3E2504, 0x8
+
+gUnknown_83E250C:: @ 83E250C
+ .incbin "baserom.gba", 0x3E250C, 0x18
+
+gUnknown_83E2524:: @ 83E2524
+ .incbin "baserom.gba", 0x3E2524, 0x8
+
+gUnknown_83E252C:: @ 83E252C
+ .incbin "baserom.gba", 0x3E252C, 0x48
+
+gUnknown_83E2574:: @ 83E2574
+ .incbin "baserom.gba", 0x3E2574, 0x18
+
+gUnknown_83E258C:: @ 83E258C
+ .incbin "baserom.gba", 0x3E258C, 0x18
+
+gUnknown_83E25A4:: @ 83E25A4
+ .incbin "baserom.gba", 0x3E25A4, 0x18
+
+gUnknown_83E25BC:: @ 83E25BC
+ .incbin "baserom.gba", 0x3E25BC, 0x18
+
+gUnknown_83E25D4:: @ 83E25D4
+ .incbin "baserom.gba", 0x3E25D4, 0x18
+
+gUnknown_83E25EC:: @ 83E25EC
+ .incbin "baserom.gba", 0x3E25EC, 0x18
+
+gUnknown_83E2604:: @ 83E2604
+ .incbin "baserom.gba", 0x3E2604, 0x18
+
+gUnknown_83E261C:: @ 83E261C
+ .incbin "baserom.gba", 0x3E261C, 0x18
+
+gUnknown_83E2634:: @ 83E2634
+ .incbin "baserom.gba", 0x3E2634, 0x18
+
+gUnknown_83E264C:: @ 83E264C
+ .incbin "baserom.gba", 0x3E264C, 0x30
+
+gUnknown_83E267C:: @ 83E267C
+ .incbin "baserom.gba", 0x3E267C, 0x68
+
+gUnknown_83E26E4:: @ 83E26E4
+ .incbin "baserom.gba", 0x3E26E4, 0x48
diff --git a/data/strings.s b/data/strings.s
index d81f72bac..4088a63fc 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -1822,7 +1822,7 @@ gUnknown_8417FB2:: @ 0x8417FB2
gUnknown_8417FB6:: @ 0x8417FB6
.string "かい$"
-gUnknown_8417FB9:: @ 8417FB9
+gText_DecimalPoint:: @ 8417FB9
.string ".$"
gText_BigGuy:: @ 8417FBB
diff --git a/include/pokemon_size_record.h b/include/pokemon_size_record.h
index d62ced51d..8324f44bf 100644
--- a/include/pokemon_size_record.h
+++ b/include/pokemon_size_record.h
@@ -11,8 +11,8 @@ void InitLotadSizeRecord(void);
void GetLotadSizeRecordInfo(void);
void CompareLotadSize(void);
-void sub_80A0904(void);
-void sub_80A0958(void);
+void InitHeracrossSizeRecord(void);
+void InitMagikarpSizeRecord(void);
void GiveGiftRibbonToParty(u8 index, u8 ribbonId);
diff --git a/ld_script.txt b/ld_script.txt
index b54327ba1..4032cfd21 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -147,7 +147,7 @@ SECTIONS {
src/money.o(.text);
asm/script_pokemon_util_80A0058.o(.text);
src/field_poison.o(.text);
- asm/pokemon_size_record.o(.text);
+ src/pokemon_size_record.o(.text);
asm/pc_screen_effect.o(.text);
src/fldeff_poison.o(.text);
src/fldeff_berrytree.o(.text);
@@ -444,6 +444,9 @@ SECTIONS {
data/shop.o(.rodata);
src/berry.o(.rodata);
src/script_menu.o(.rodata);
+ data/naming_screen.o(.rodata);
+ src/pokemon_size_record.o(.rodata);
+ data/item_use.o(.rodata);
data/data_835B488.o(.rodata);
src/flying.o(.rodata);
src/psychic.o(.rodata);
diff --git a/src/new_game.c b/src/new_game.c
index 4c1dc2dbf..4b5432a95 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -130,8 +130,8 @@ void NewGameInitData(void)
SetMoney(&gSaveBlock1Ptr->money, 3000);
ResetGameStats();
ClearPlayerLinkBattleRecords();
- sub_80A0904();
- sub_80A0958();
+ InitHeracrossSizeRecord();
+ InitMagikarpSizeRecord();
sub_806E190();
gPlayerPartyCount = 0;
ZeroPlayerPartyMons();
diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c
new file mode 100644
index 000000000..c5223c153
--- /dev/null
+++ b/src/pokemon_size_record.c
@@ -0,0 +1,221 @@
+#include "global.h"
+#include "data.h"
+#include "event_data.h"
+#include "pokedex.h"
+#include "pokemon.h"
+#include "pokemon_size_record.h"
+#include "string_util.h"
+#include "text.h"
+#include "constants/species.h"
+
+#define DEFAULT_MAX_SIZE 0 // was 0x8100 in Ruby/Sapphire, 0x8000 in Emerald
+
+struct UnknownStruct
+{
+ u16 unk0;
+ u8 unk2;
+ u16 unk4;
+};
+
+static const struct UnknownStruct sBigMonSizeTable[] =
+{
+ { 290, 1, 0 },
+ { 300, 1, 10 },
+ { 400, 2, 110 },
+ { 500, 4, 310 },
+ { 600, 20, 710 },
+ { 700, 50, 2710 },
+ { 800, 100, 7710 },
+ { 900, 150, 17710 },
+ { 1000, 150, 32710 },
+ { 1100, 100, -17826 },
+ { 1200, 50, -7826 },
+ { 1300, 20, -2826 },
+ { 1400, 5, -826 },
+ { 1500, 2, -326 },
+ { 1600, 1, -126 },
+ { 1700, 1, -26 },
+};
+
+static const u8 sGiftRibbonsMonDataIds[] =
+{
+ MON_DATA_GIFT_RIBBON_1, MON_DATA_GIFT_RIBBON_2, MON_DATA_GIFT_RIBBON_3,
+ MON_DATA_GIFT_RIBBON_4, MON_DATA_GIFT_RIBBON_5, MON_DATA_GIFT_RIBBON_6,
+ MON_DATA_GIFT_RIBBON_7
+};
+
+extern const u8 gText_DecimalPoint[];
+
+#define CM_PER_INCH 2.54
+
+static u32 GetMonSizeHash(struct Pokemon * pkmn)
+{
+ u16 personality = GetMonData(pkmn, MON_DATA_PERSONALITY);
+ u16 hpIV = GetMonData(pkmn, MON_DATA_HP_IV) & 0xF;
+ u16 attackIV = GetMonData(pkmn, MON_DATA_ATK_IV) & 0xF;
+ u16 defenseIV = GetMonData(pkmn, MON_DATA_DEF_IV) & 0xF;
+ u16 speedIV = GetMonData(pkmn, MON_DATA_SPEED_IV) & 0xF;
+ u16 spAtkIV = GetMonData(pkmn, MON_DATA_SPATK_IV) & 0xF;
+ u16 spDefIV = GetMonData(pkmn, MON_DATA_SPDEF_IV) & 0xF;
+ u32 hibyte = ((attackIV ^ defenseIV) * hpIV) ^ (personality & 0xFF);
+ u32 lobyte = ((spAtkIV ^ spDefIV) * speedIV) ^ (personality >> 8);
+
+ return (hibyte << 8) + lobyte;
+}
+
+static u8 TranslateBigMonSizeTableIndex(u16 a)
+{
+ u8 i;
+
+ for (i = 1; i < 15; i++)
+ {
+ if (a < sBigMonSizeTable[i].unk4)
+ return i - 1;
+ }
+ return i;
+}
+
+static u32 GetMonSize(u16 species, u16 b)
+{
+ u64 unk2;
+ u64 unk4;
+ u64 unk0;
+ u32 height;
+ u32 var;
+
+ height = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(species), 0);
+ var = TranslateBigMonSizeTableIndex(b);
+ unk0 = sBigMonSizeTable[var].unk0;
+ unk2 = sBigMonSizeTable[var].unk2;
+ unk4 = sBigMonSizeTable[var].unk4;
+ unk0 += (b - unk4) / unk2;
+ return height * unk0 / 10;
+}
+
+static void FormatMonSizeRecord(u8 *string, u32 size)
+{
+#ifdef UNITS_IMPERIAL
+ //Convert size from centimeters to inches
+ //In the Hoenn games, this conversion was performed using floating point values
+ size = size * 100 / 254;
+#endif
+
+ string = ConvertIntToDecimalStringN(string, size / 10, STR_CONV_MODE_LEFT_ALIGN, 8);
+ string = StringAppend(string, gText_DecimalPoint);
+ ConvertIntToDecimalStringN(string, size % 10, STR_CONV_MODE_LEFT_ALIGN, 1);
+}
+
+static u8 CompareMonSize(u16 species, u16 *sizeRecord)
+{
+ if (gSpecialVar_Result >= PARTY_SIZE)
+ {
+ return 0;
+ }
+ else
+ {
+ struct Pokemon * pkmn = &gPlayerParty[gSpecialVar_Result];
+
+ if (GetMonData(pkmn, MON_DATA_IS_EGG) == TRUE || GetMonData(pkmn, MON_DATA_SPECIES) != species)
+ {
+ return 1;
+ }
+ else
+ {
+ u32 oldSize;
+ u32 newSize;
+ u16 sizeParams;
+
+ *(&sizeParams) = GetMonSizeHash(pkmn);
+ newSize = GetMonSize(species, sizeParams);
+ oldSize = GetMonSize(species, *sizeRecord);
+ FormatMonSizeRecord(gStringVar3, oldSize);
+ FormatMonSizeRecord(gStringVar2, newSize);
+ if (newSize == oldSize)
+ {
+ return 4;
+ }
+ else if (newSize < oldSize)
+ {
+ return 2;
+ }
+ else
+ {
+ *sizeRecord = sizeParams;
+ return 3;
+ }
+ }
+ }
+}
+
+// Stores species name in gStringVar1, trainer's name in gStringVar2, and size in gStringVar3
+static void GetMonSizeRecordInfo(u16 species, u16 *sizeRecord)
+{
+ u32 size = GetMonSize(species, *sizeRecord);
+
+ FormatMonSizeRecord(gStringVar3, size);
+ StringCopy(gStringVar1, gSpeciesNames[species]);
+}
+
+void InitHeracrossSizeRecord(void)
+{
+ VarSet(VAR_HERACROSS_SIZE_RECORD, DEFAULT_MAX_SIZE);
+}
+
+void GetHeracrossSizeRecordInfo(void)
+{
+ u16 *sizeRecord = GetVarPointer(VAR_HERACROSS_SIZE_RECORD);
+
+ GetMonSizeRecordInfo(SPECIES_HERACROSS, sizeRecord);
+}
+
+void CompareHeracrossSize(void)
+{
+ u16 *sizeRecord = GetVarPointer(VAR_HERACROSS_SIZE_RECORD);
+
+ gSpecialVar_Result = CompareMonSize(SPECIES_HERACROSS, sizeRecord);
+}
+
+void InitMagikarpSizeRecord(void)
+{
+ VarSet(VAR_MAGIKARP_SIZE_RECORD, DEFAULT_MAX_SIZE);
+}
+
+void GetMagikarpSizeRecordInfo(void)
+{
+ u16 *sizeRecord = GetVarPointer(VAR_MAGIKARP_SIZE_RECORD);
+
+ GetMonSizeRecordInfo(SPECIES_MAGIKARP, sizeRecord);
+}
+
+void CompareMagikarpSize(void)
+{
+ u16 *sizeRecord = GetVarPointer(VAR_MAGIKARP_SIZE_RECORD);
+
+ gSpecialVar_Result = CompareMonSize(SPECIES_MAGIKARP, sizeRecord);
+}
+
+void GiveGiftRibbonToParty(u8 index, u8 ribbonId)
+{
+ s32 i;
+ bool32 gotRibbon = FALSE;
+ u8 data = 1;
+ u8 array[8];
+ memcpy(array, sGiftRibbonsMonDataIds, sizeof(sGiftRibbonsMonDataIds));
+
+ if (index < 11 && ribbonId < 65)
+ {
+ gSaveBlock1Ptr->giftRibbons[index] = ribbonId;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ struct Pokemon * mon = &gPlayerParty[i];
+
+ if (GetMonData(mon, MON_DATA_SPECIES) != 0 && GetMonData(mon, MON_DATA_SANITY_IS_EGG) == 0)
+ {
+ SetMonData(mon, array[index], &data);
+ gotRibbon = TRUE;
+ }
+ }
+ if (gotRibbon)
+ FlagSet(FLAG_SYS_RIBBON_GET);
+ }
+}