From 999df284ffefca716defc4fe6ffb2142ef1a4c35 Mon Sep 17 00:00:00 2001 From: Zur3l <90565581+Zur3l@users.noreply.github.com> Date: Sat, 11 Jul 2026 16:00:30 -0400 Subject: [PATCH] Decomp BaseFormsEqual --- asm/include/main_02054CD8.inc | 6 --- asm/main_02054CD8.s | 71 ----------------------------------- include/main_02054C24.h | 1 + main.lsf | 1 - src/main_02054C24.c | 37 ++++++++++++++++++ 5 files changed, 38 insertions(+), 78 deletions(-) delete mode 100644 asm/include/main_02054CD8.inc delete mode 100644 asm/main_02054CD8.s diff --git a/asm/include/main_02054CD8.inc b/asm/include/main_02054CD8.inc deleted file mode 100644 index 24f33e60..00000000 --- a/asm/include/main_02054CD8.inc +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once -.public FemaleToMaleForm -.public GetBaseFormBurmyWormadamShellosGastrodonCherrim -.public GetBaseFormCastformDeoxysCherrim -.public GetDexNumber -.public IsUnown diff --git a/asm/main_02054CD8.s b/asm/main_02054CD8.s deleted file mode 100644 index 91bfa7aa..00000000 --- a/asm/main_02054CD8.s +++ /dev/null @@ -1,71 +0,0 @@ - .include "asm/macros.inc" - .include "main_02054CD8.inc" - - .text - - arm_func_start BaseFormsEqual -BaseFormsEqual: ; 0x02054CD8 - stmdb sp!, {r4, r5, r6, lr} - mov r4, r1 - bl FemaleToMaleForm - mov r5, r0 - mov r0, r4 - bl FemaleToMaleForm - mov r4, r0 - mov r0, r5 - bl GetBaseFormCastformDeoxysCherrim - mov r5, r0 - mov r0, r4 - bl GetBaseFormCastformDeoxysCherrim - mov r6, r0 - cmp r5, r6 - moveq r0, #1 - ldmeqia sp!, {r4, r5, r6, pc} - mov r0, r5 - bl IsUnown - cmp r0, #0 - beq _02054D3C - mov r0, r6 - bl IsUnown - cmp r0, #0 - movne r0, #0 - ldmneia sp!, {r4, r5, r6, pc} -_02054D3C: - mov r0, r5 - bl GetBaseFormBurmyWormadamShellosGastrodonCherrim - mov r4, r0 - mov r0, r6 - bl GetBaseFormBurmyWormadamShellosGastrodonCherrim - ldr r1, _02054DB8 ; =0x000001BF - cmp r4, r1 - cmpeq r0, r1 - beq _02054D8C - ldr r1, _02054DBC ; =0x000001C2 - cmp r4, r1 - cmpeq r0, r1 - beq _02054D8C - ldr r1, _02054DC0 ; =0x000001CE - cmp r4, r1 - cmpeq r0, r1 - beq _02054D8C - cmp r4, #0x1d0 - cmpeq r0, #0x1d0 - bne _02054D94 -_02054D8C: - mov r0, #0 - ldmia sp!, {r4, r5, r6, pc} -_02054D94: - mov r0, r5 - bl GetDexNumber - mov r4, r0 - mov r0, r6 - bl GetDexNumber - cmp r4, r0 - moveq r0, #1 - movne r0, #0 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02054DB8: .word 0x000001BF -_02054DBC: .word 0x000001C2 -_02054DC0: .word 0x000001CE - arm_func_end BaseFormsEqual diff --git a/include/main_02054C24.h b/include/main_02054C24.h index ba881b6e..c558b244 100644 --- a/include/main_02054C24.h +++ b/include/main_02054C24.h @@ -5,5 +5,6 @@ #include "util.h" enum monster_id GetBaseFormCastformDeoxysCherrim(enum monster_id monster_id); +bool8 BaseFormsEqual(enum monster_id monster1, enum monster_id monster2); #endif //PMDSKY_MAIN_02054C24_H diff --git a/main.lsf b/main.lsf index 046c4ab8..036ca900 100644 --- a/main.lsf +++ b/main.lsf @@ -152,7 +152,6 @@ Static main Object asm/main_02054AD4.o Object src/main_02054BE0.o Object src/main_02054C24.o - Object asm/main_02054CD8.o Object src/main_02054DC4.o Object asm/main_02054E4C.o Object src/main_02058C3C.o diff --git a/src/main_02054C24.c b/src/main_02054C24.c index 85c48db4..11a2ed0c 100644 --- a/src/main_02054C24.c +++ b/src/main_02054C24.c @@ -1,6 +1,10 @@ #include "main_02054C24.h" +extern enum monster_id FemaleToMaleForm(enum monster_id); +extern enum monster_id GetBaseFormBurmyWormadamShellosGastrodonCherrim(enum monster_id); +extern s16 GetDexNumber(enum monster_id); extern bool8 IsDeoxys(enum monster_id monster_id); +extern bool8 IsUnown(enum monster_id); enum monster_id GetBaseFormCastformDeoxysCherrim(enum monster_id monster_id) { @@ -21,3 +25,36 @@ enum monster_id GetBaseFormCastformDeoxysCherrim(enum monster_id monster_id) } return monster_id; } + +bool8 BaseFormsEqual(enum monster_id monster1, enum monster_id monster2) +{ + monster1 = FemaleToMaleForm(monster1); + monster2 = FemaleToMaleForm(monster2); + + monster1 = GetBaseFormCastformDeoxysCherrim(monster1); + monster2 = GetBaseFormCastformDeoxysCherrim(monster2); + + if (monster1 == monster2) { + return TRUE; + } + + if (IsUnown(monster1) && IsUnown(monster2)) { + return FALSE; + } + + enum monster_id monster1Base = GetBaseFormBurmyWormadamShellosGastrodonCherrim(monster1); + enum monster_id monster2Base = GetBaseFormBurmyWormadamShellosGastrodonCherrim(monster2); + + if ((monster1Base == MONSTER_BURMY_SANDY && monster2Base == MONSTER_BURMY_SANDY) || + (monster1Base == MONSTER_WORMADAM_SANDY && monster2Base == MONSTER_WORMADAM_SANDY) || + (monster1Base == MONSTER_SHELLOS_EAST && monster2Base == MONSTER_SHELLOS_EAST) || + (monster1Base == MONSTER_GASTRODON_EAST && monster2Base == MONSTER_GASTRODON_EAST)) { + return FALSE; + } + + if (GetDexNumber(monster1) == GetDexNumber(monster2)) { + return TRUE; + } + + return FALSE; +}