diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-11-01 09:55:25 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-11-01 09:55:25 -0400 |
commit | 5913bcf0e93f4741ce5b84bdd4a52d781fb7d6fb (patch) | |
tree | 64f1cea8471dac0e941b912844e2ba63387bf13e | |
parent | 930c7c4ad7f698b76b8ae45e13e7e9baa3fc1ee6 (diff) |
Port pokemon_size_record from Emerald
-rw-r--r-- | asm/pokemon_size_record.s | 482 | ||||
-rw-r--r-- | data/data_835B488.s | 164 | ||||
-rw-r--r-- | data/item_use.s | 15 | ||||
-rw-r--r-- | data/naming_screen.s | 159 | ||||
-rw-r--r-- | data/strings.s | 2 | ||||
-rw-r--r-- | include/pokemon_size_record.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 5 | ||||
-rw-r--r-- | src/new_game.c | 4 | ||||
-rw-r--r-- | src/pokemon_size_record.c | 221 |
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); + } +} |