From ab0c556a9b645d760b95363a6321981fec6a5224 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 12 Jun 2024 10:59:02 -0700 Subject: [PATCH] match sub_806E100 --- asm/code_806CD90.s | 654 ---------------------------------- include/structs/str_dungeon.h | 7 +- src/type_effectiveness.c | 220 ++++++++++++ 3 files changed, 226 insertions(+), 655 deletions(-) diff --git a/asm/code_806CD90.s b/asm/code_806CD90.s index 8310a806e..391106232 100644 --- a/asm/code_806CD90.s +++ b/asm/code_806CD90.s @@ -2120,658 +2120,4 @@ _0806E0F0: bx r1 thumb_func_end sub_806D528 - thumb_func_start sub_806E100 -sub_806E100: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - adds r6, r0, 0 - mov r8, r1 - str r2, [sp, 0x18] - lsls r3, 24 - lsrs r7, r3, 24 - movs r0, 0 - mov r9, r0 - movs r1, 0 - str r1, [sp, 0x20] - mov r2, r8 - ldr r2, [r2, 0x70] - str r2, [sp, 0x24] - ldr r3, [sp, 0x18] - ldr r3, [r3, 0x70] - mov r10, r3 - adds r0, r6, 0 - movs r1, 0x1 - bl sub_800A020 - mov r0, r9 - ldr r4, [sp, 0x48] - strb r0, [r4, 0xD] - strb r0, [r4, 0xE] - movs r1, 0 - str r1, [sp, 0x1C] - ldr r0, [sp, 0x18] - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _0806E14E - movs r0, 0x1 - b _0806E61A -_0806E14E: - cmp r7, 0x1 - beq _0806E156 - cmp r7, 0x7 - bne _0806E15A -_0806E156: - movs r2, 0x1 - str r2, [sp, 0x20] -_0806E15A: - ldr r0, [sp, 0x18] - movs r1, 0x35 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E170 - cmp r7, 0 - beq _0806E170 - movs r3, 0x1 - str r3, [sp, 0x1C] -_0806E170: - movs r0, 0x2 - ldr r4, [sp, 0x48] - str r0, [r4, 0x8] - movs r5, 0 - add r0, sp, 0x10 - mov r9, r0 - b _0806E1F2 -_0806E17E: - mov r1, r10 - adds r1, 0x5C - ldr r2, [sp, 0x20] - cmp r2, 0 - beq _0806E1B4 - adds r0, r1, r5 - ldrb r0, [r0] - cmp r0, 0xE - bne _0806E1B4 - mov r0, r10 - adds r0, 0xF5 - ldrb r0, [r0] - cmp r0, 0 - bne _0806E1B4 - movs r4, 0 - ldr r0, _0806E1AC - ldr r0, [r0] - ldr r3, _0806E1B0 - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] - b _0806E1CA - .align 2, 0 -_0806E1AC: .4byte gDungeon -_0806E1B0: .4byte 0x00000179 -_0806E1B4: - ldr r2, _0806E4E4 - adds r0, r1, r5 - ldrb r1, [r0] - lsls r1, 1 - lsls r0, r7, 3 - adds r0, r7 - lsls r0, 2 - adds r1, r0 - adds r1, r2 - movs r0, 0 - ldrsh r4, [r1, r0] -_0806E1CA: - cmp r4, 0x2 - beq _0806E1DC - lsls r0, r4, 2 - add r0, sp - ldr r2, [r0] - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E1DC: - lsls r0, r5, 2 - add r0, r9 - str r4, [r0] - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r1, 0x9E - lsls r1, 1 - adds r0, r1 - adds r0, r5 - strb r4, [r0] - adds r5, 0x1 -_0806E1F2: - cmp r5, 0x1 - bgt _0806E20E - mov r1, sp - ldr r0, _0806E4EC - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r0, [r0] - str r0, [r1] - adds r0, r6, 0 - bl sub_800A2A0 - lsls r0, 24 - cmp r0, 0 - beq _0806E17E -_0806E20E: - ldr r2, _0806E4F0 - mov r1, r9 - ldr r0, [r1, 0x4] - lsls r0, 2 - ldr r1, [sp, 0x10] - lsls r1, 4 - adds r0, r1 - adds r0, r2 - ldr r0, [r0] - ldr r2, [sp, 0x48] - str r0, [r2, 0x8] - movs r3, 0x1 - mov r9, r3 - cmp r0, 0x3 - beq _0806E240 - movs r4, 0 - mov r9, r4 - ldr r0, [sp, 0x1C] - cmp r0, 0 - beq _0806E240 - ldr r0, _0806E4F4 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [r6] - str r1, [r6, 0x4] -_0806E240: - cmp r7, 0x2 - beq _0806E248 - cmp r7, 0x6 - bne _0806E26C -_0806E248: - ldr r0, [sp, 0x18] - movs r1, 0x2 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E26C - ldr r0, _0806E4E8 - ldr r0, [r0] - ldr r2, _0806E4F8 - adds r1, r0, r2 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E4FC - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E26C: - cmp r7, 0x2 - bne _0806E2A0 - ldr r0, [sp, 0x18] - bl GetFlashFireStatus - lsls r0, 24 - cmp r0, 0 - beq _0806E2A0 - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r3, 0xB7 - lsls r3, 1 - adds r0, r3 - movs r4, 0 - movs r5, 0x1 - strb r5, [r0] - adds r0, r6, 0 - movs r1, 0 - bl sub_800A020 - ldr r0, [sp, 0x48] - str r4, [r0, 0x8] - strb r4, [r0, 0xD] - strb r5, [r0, 0xE] - movs r1, 0 - mov r9, r1 -_0806E2A0: - cmp r7, 0x9 - bne _0806E2D2 - ldr r0, [sp, 0x18] - movs r1, 0x37 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E2D2 - ldr r0, _0806E4E8 - ldr r0, [r0] - ldr r2, _0806E500 - adds r0, r2 - movs r4, 0 - movs r5, 0x1 - strb r5, [r0] - adds r0, r6, 0 - movs r1, 0 - bl sub_800A020 - ldr r3, [sp, 0x48] - str r4, [r3, 0x8] - strb r4, [r3, 0xD] - strb r5, [r3, 0xE] - mov r9, r4 -_0806E2D2: - cmp r7, 0x3 - bne _0806E340 - mov r0, r8 - movs r1, 0x10 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E340 - movs r4, 0 - ldr r0, [sp, 0x24] - movs r2, 0x10 - ldrsh r1, [r0, r2] - cmp r1, 0 - bge _0806E2F2 - adds r1, 0x3 -_0806E2F2: - asrs r1, 2 - ldr r3, [sp, 0x24] - movs r2, 0xE - ldrsh r0, [r3, r2] - cmp r1, r0 - blt _0806E300 - movs r4, 0x1 -_0806E300: - ldr r0, [sp, 0x24] - movs r1, 0x80 - adds r2, r4, 0 - bl SetVisualFlags - lsls r0, 24 - lsrs r5, r0, 24 - cmp r4, 0 - beq _0806E32A - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r3, 0xB8 - lsls r3, 1 - adds r0, r3 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _0806E504 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E32A: - cmp r5, 0 - beq _0806E340 - mov r0, r8 - bl sub_80428EC - ldr r0, _0806E508 - ldr r2, [r0] - mov r0, r8 - ldr r1, [sp, 0x18] - bl sub_80522F4 -_0806E340: - cmp r7, 0x4 - bne _0806E3AC - mov r0, r8 - movs r1, 0x1A - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E3AC - movs r4, 0 - ldr r0, [sp, 0x24] - movs r2, 0x10 - ldrsh r1, [r0, r2] - cmp r1, 0 - bge _0806E360 - adds r1, 0x3 -_0806E360: - asrs r1, 2 - ldr r3, [sp, 0x24] - movs r2, 0xE - ldrsh r0, [r3, r2] - cmp r1, r0 - blt _0806E36E - movs r4, 0x1 -_0806E36E: - ldr r0, [sp, 0x24] - movs r1, 0x2 - adds r2, r4, 0 - bl SetVisualFlags - lsls r0, 24 - lsrs r5, r0, 24 - cmp r4, 0 - beq _0806E396 - ldr r0, _0806E4E8 - ldr r0, [r0] - ldr r3, _0806E50C - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E504 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E396: - cmp r5, 0 - beq _0806E3AC - mov r0, r8 - bl sub_80428D8 - ldr r0, _0806E510 - ldr r2, [r0] - mov r0, r8 - ldr r1, [sp, 0x18] - bl sub_80522F4 -_0806E3AC: - cmp r7, 0xC - bne _0806E41A - mov r0, r8 - movs r1, 0x43 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E41A - movs r4, 0 - ldr r0, [sp, 0x24] - movs r2, 0x10 - ldrsh r1, [r0, r2] - cmp r1, 0 - bge _0806E3CC - adds r1, 0x3 -_0806E3CC: - asrs r1, 2 - ldr r3, [sp, 0x24] - movs r2, 0xE - ldrsh r0, [r3, r2] - cmp r1, r0 - blt _0806E3DA - movs r4, 0x1 -_0806E3DA: - ldr r0, [sp, 0x24] - movs r1, 0x10 - adds r2, r4, 0 - bl SetVisualFlags - lsls r0, 24 - lsrs r5, r0, 24 - cmp r4, 0 - beq _0806E404 - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r3, 0xB9 - lsls r3, 1 - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E504 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E404: - cmp r5, 0 - beq _0806E41A - mov r0, r8 - bl sub_8042978 - ldr r0, _0806E514 - ldr r2, [r0] - mov r0, r8 - ldr r1, [sp, 0x18] - bl sub_80522F4 -_0806E41A: - cmp r7, 0x2 - bne _0806E486 - mov r0, r8 - movs r1, 0x46 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806E486 - movs r4, 0 - ldr r0, [sp, 0x24] - movs r2, 0x10 - ldrsh r1, [r0, r2] - cmp r1, 0 - bge _0806E43A - adds r1, 0x3 -_0806E43A: - asrs r1, 2 - ldr r3, [sp, 0x24] - movs r2, 0xE - ldrsh r0, [r3, r2] - cmp r1, r0 - blt _0806E448 - movs r4, 0x1 -_0806E448: - ldr r0, [sp, 0x24] - movs r1, 0x20 - adds r2, r4, 0 - bl SetVisualFlags - lsls r0, 24 - lsrs r5, r0, 24 - cmp r4, 0 - beq _0806E470 - ldr r0, _0806E4E8 - ldr r0, [r0] - ldr r3, _0806E518 - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E504 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E470: - cmp r5, 0 - beq _0806E486 - mov r0, r8 - bl sub_804298C - ldr r0, _0806E51C - ldr r2, [r0] - mov r0, r8 - ldr r1, [sp, 0x18] - bl sub_80522F4 -_0806E486: - adds r0, r6, 0 - bl sub_800A2A0 - lsls r0, 24 - cmp r0, 0 - bne _0806E4B8 - mov r0, r8 - adds r1, r7, 0 - bl MonsterIsType - lsls r0, 24 - cmp r0, 0 - beq _0806E4B8 - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r4, 0xBA - lsls r4, 1 - adds r0, r4 - movs r1, 0x1 - strb r1, [r0] - ldr r2, _0806E520 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E4B8: - mov r0, r8 - bl GetApparentWeather - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bne _0806E53E - cmp r7, 0x2 - bne _0806E524 - ldr r0, _0806E4E8 - ldr r0, [r0] - movs r1, 0xB6 - lsls r1, 1 - adds r0, r1 - strb r4, [r0] - ldr r2, _0806E520 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C - b _0806E53E - .align 2, 0 -_0806E4E4: .4byte gTypeEffectivenessChart -_0806E4E8: .4byte gDungeon -_0806E4EC: .4byte gUnknown_8106F54 -_0806E4F0: .4byte gUnknown_80F54B4 -_0806E4F4: .4byte gUnknown_8106EFC -_0806E4F8: .4byte 0x0000016d -_0806E4FC: .4byte gUnknown_8106F1C -_0806E500: .4byte 0x0000016f -_0806E504: .4byte gUnknown_8106F0C -_0806E508: .4byte gUnknown_80FEDA8 -_0806E50C: .4byte 0x00000171 -_0806E510: .4byte gUnknown_80FED88 -_0806E514: .4byte gUnknown_80FEDC8 -_0806E518: .4byte 0x00000173 -_0806E51C: .4byte gUnknown_80FEDE8 -_0806E520: .4byte gUnknown_8106F14 -_0806E524: - cmp r7, 0x3 - bne _0806E53E - ldr r0, _0806E560 - ldr r0, [r0] - movs r2, 0xB6 - lsls r2, 1 - adds r0, r2 - strb r4, [r0] - ldr r2, _0806E564 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E53E: - cmp r4, 0x4 - bne _0806E586 - cmp r7, 0x2 - bne _0806E56C - ldr r0, _0806E560 - ldr r0, [r0] - ldr r3, _0806E568 - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E564 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C - b _0806E586 - .align 2, 0 -_0806E560: .4byte gDungeon -_0806E564: .4byte gUnknown_8106F1C -_0806E568: .4byte 0x0000016b -_0806E56C: - cmp r7, 0x3 - bne _0806E586 - ldr r0, _0806E62C - ldr r0, [r0] - ldr r2, _0806E630 - adds r1, r0, r2 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E634 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E586: - cmp r4, 0x3 - bne _0806E5A6 - cmp r7, 0x1 - beq _0806E5A6 - ldr r2, _0806E638 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C - ldr r0, _0806E62C - ldr r0, [r0] - movs r3, 0xB5 - lsls r3, 1 - adds r1, r0, r3 - movs r0, 0x1 - strb r0, [r1] -_0806E5A6: - ldr r0, _0806E62C - ldr r1, [r0] - ldr r2, _0806E63C - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _0806E5B8 - cmp r4, 0x6 - bne _0806E5CE -_0806E5B8: - cmp r7, 0x5 - bne _0806E5CE - ldr r3, _0806E640 - adds r1, r3 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E644 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E5CE: - ldr r0, _0806E62C - ldr r1, [r0] - ldr r4, _0806E648 - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _0806E5F4 - cmp r7, 0x2 - bne _0806E5F4 - movs r0, 0xBB - lsls r0, 1 - adds r1, r0 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E644 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E5F4: - cmp r7, 0x5 - bne _0806E618 - ldr r0, [sp, 0x24] - adds r0, 0xC0 - ldrb r0, [r0] - cmp r0, 0xB - bne _0806E618 - ldr r0, _0806E62C - ldr r0, [r0] - ldr r2, _0806E64C - adds r1, r0, r2 - movs r0, 0x1 - strb r0, [r1] - ldr r2, _0806E650 - adds r0, r6, 0 - adds r1, r6, 0 - bl sub_800A34C -_0806E618: - mov r0, r9 -_0806E61A: - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0806E62C: .4byte gDungeon -_0806E630: .4byte 0x0000016b -_0806E634: .4byte gUnknown_8106F14 -_0806E638: .4byte gUnknown_8106F64 -_0806E63C: .4byte 0x0000e277 -_0806E640: .4byte 0x00000175 -_0806E644: .4byte gUnknown_8106F1C -_0806E648: .4byte 0x0000e278 -_0806E64C: .4byte 0x00000177 -_0806E650: .4byte gUnknown_8106F0C - thumb_func_end sub_806E100 - .align 2, 0 diff --git a/include/structs/str_dungeon.h b/include/structs/str_dungeon.h index 126ae203f..f55bae5d7 100644 --- a/include/structs/str_dungeon.h +++ b/include/structs/str_dungeon.h @@ -87,7 +87,12 @@ typedef struct Dungeon u8 fill14[0xB8 - 0x14]; Entity *unkB8; Entity *unkBC; - u8 fillC0[0x16D - 0xC0]; + u8 fillC0[0x13C - 0xC0]; + u8 unk13C[2]; + u8 fill13E[0x16A - 0x13E]; + u8 unk16A; + u8 unk16B; + u8 unk16C; u8 unk16D; u8 fill16E[0x179 - 0x16E]; /* 0x179 */ bool8 pokemonExposed; // True if a Pokémon on the floor has the Exposed status. diff --git a/src/type_effectiveness.c b/src/type_effectiveness.c index af4a9904c..5b0faea7a 100644 --- a/src/type_effectiveness.c +++ b/src/type_effectiveness.c @@ -13,6 +13,226 @@ u32 gTypeEffectivenessMultipliers[] = {0, 1, 2, 4}; + +struct unkStruct_806D010 +{ + s32 unk0; + u32 unk4; + u32 unk8; + u8 unkC; + u8 unkD; + u8 unkE; + u8 unkF; +}; + +struct dumb_struct +{ + u32 *unk0[4]; +}; +extern struct dumb_struct gUnknown_8106F54; + + +extern u32 gUnknown_8106F0C; +extern u32 gUnknown_8106F1C; +extern u32 gUnknown_8106F14; +extern u32 gUnknown_8106F64; +extern u32 gUnknown_8106EFC[2]; + +extern u8 *gUnknown_80FEDE8[]; +extern u8 *gUnknown_80FEDC8[]; +extern u8 *gUnknown_80FEDA8[]; +extern u8 *gUnknown_80FED88[]; + +extern s32 gUnknown_80F54B4[2][4]; + +void sub_80522F4(Entity *, Entity *, u8 *); +void sub_80428D8(Entity *); +void sub_8042978(Entity *); +void sub_804298C(Entity *); +u8 sub_800A2A0(s32 *); +void sub_800A34C(s32 *, s32 *, s32 *); +void sub_800A020(s32 *, u32); +void sub_80428EC(Entity *); + +bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct unkStruct_806D010 *param_5) +{ + bool8 bVar1; + bool8 bVar2; + bool8 bVar3; + bool8 bVar5; + char cVar3; + char cVar4; + char cVar5; + char cVar6; + bool8 bVar4; + EntityInfo *targetInfo; + s32 effectiveness; + s32 index; + struct dumb_struct local_48; + s32 local_38 [2]; + s32 local_2c; + s32 local_28; + EntityInfo *pokemonInfo; + u8 weather; + s32 temp; + + bVar4 = FALSE; + local_28 = FALSE; + pokemonInfo = pokemon->info; + targetInfo = target->info; + sub_800A020(param_1,1); + param_5->unkD = 0; + param_5->unkE = 0; + local_2c = FALSE; + if (!EntityExists(target)) { + return TRUE; + } + else { + if ((type == TYPE_NORMAL) || (type == TYPE_FIGHTING)) { + local_28 = TRUE; + } + if ((HasAbility(target, ABILITY_WONDER_GUARD)) && (type != TYPE_NONE)) { + local_2c = TRUE; + } + param_5->unk8 = 2; + for (index = 0; index < 2; index++) { + local_48 = gUnknown_8106F54; + if (sub_800A2A0(param_1) != '\0') break; + if (((local_28) && (targetInfo->types[index] == TYPE_GHOST)) && (targetInfo->exposed == FALSE)) { + effectiveness = EFFECTIVENESS_IMMUNE; + gDungeon->pokemonExposed = TRUE; + } + else { + effectiveness = gTypeEffectivenessChart[type][targetInfo->types[index]]; + } + if (effectiveness != EFFECTIVENESS_NEUTRAL) { + sub_800A34C(param_1,param_1,local_48.unk0[effectiveness]); + } + local_38[index] = effectiveness; + gDungeon->unk13C[index] = effectiveness; + } + + param_5->unk8 = gUnknown_80F54B4[local_38[0]][local_38[1]]; + bVar4 = TRUE; + if ((param_5->unk8 != 3) && (bVar4 = FALSE, local_2c != 0)) { + temp = gUnknown_8106EFC[1]; + param_1[0] = gUnknown_8106EFC[0]; + param_1[1] = temp; + } + + if (((type == TYPE_FIRE) || (type == TYPE_ICE)) && (HasAbility(target,ABILITY_THICK_FAT))) { + gDungeon->unk16D = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + } + if ((type == TYPE_FIRE) && (GetFlashFireStatus(target) != '\0')) { + gDungeon->fill16E[0] = TRUE; + sub_800A020(param_1,0); + param_5->unk8 = 0; + param_5->unkD = 0; + param_5->unkE = 1; + bVar4 = '\0'; + } + if ((type == TYPE_GROUND) && (HasAbility(target, ABILITY_LEVITATE))) { + gDungeon->fill16E[1] = TRUE; + sub_800A020(param_1,0); + param_5->unk8 = 0; + param_5->unkD = 0; + param_5->unkE = 1; + bVar4 = '\0'; + } + if ((type == TYPE_WATER) && (HasAbility(pokemon, ABILITY_TORRENT))) { + bVar1 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + cVar3 = SetVisualFlags(pokemonInfo,0x80,bVar1); + if (bVar1) { + gDungeon->fill16E[2] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + } + if (cVar3 != '\0') { + sub_80428EC(pokemon); + sub_80522F4(pokemon,target,*gUnknown_80FEDA8); + } + } + if ((type == TYPE_GRASS) && (HasAbility(pokemon, ABILITY_OVERGROW))) { + bVar2 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + cVar4 = SetVisualFlags(pokemonInfo,2,bVar2); + if (bVar2) { + gDungeon->fill16E[3] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + } + if (cVar4 != '\0') { + sub_80428D8(pokemon); + sub_80522F4(pokemon,target,*gUnknown_80FED88); + } + } + if ((type == TYPE_BUG) && (HasAbility(pokemon, ABILITY_SWARM))) { + bVar3 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + cVar5 = SetVisualFlags(pokemonInfo,0x10,bVar3); + if (bVar3) { + gDungeon->fill16E[4] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + } + if (cVar5 != '\0') { + sub_8042978(pokemon); + sub_80522F4(pokemon,target,*gUnknown_80FEDC8); + } + } + if ((type == TYPE_FIRE) && (HasAbility(pokemon, ABILITY_BLAZE))) { + bVar5 = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP; + cVar6 = SetVisualFlags(pokemonInfo,0x20,bVar5); + if (bVar5) { + gDungeon->fill16E[5] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + } + if (cVar6 != '\0') { + sub_804298C(pokemon); + sub_80522F4(pokemon,target,*gUnknown_80FEDE8); + } + } + if ((sub_800A2A0(param_1) == '\0') && (MonsterIsType(pokemon, type))) { + gDungeon->fill16E[6] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F14); + } + weather = GetApparentWeather(pokemon); + if (weather == WEATHER_SUNNY) { + if (type == TYPE_FIRE) { + gDungeon->unk16C = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F14); + } + else if (type == TYPE_WATER) { + gDungeon->unk16C = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + } + } + if (weather == WEATHER_RAIN) { + if (type == TYPE_FIRE) { + gDungeon->unk16B = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + } + else if (type == TYPE_WATER) { + gDungeon->unk16B = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F14); + } + } + if ((weather == WEATHER_CLOUDY) && (type != TYPE_NORMAL)) { + sub_800A34C(param_1,param_1,&gUnknown_8106F64); + gDungeon->unk16A = TRUE; + } + if (((gDungeon->mudSportTurns != 0) || (weather == WEATHER_FOG)) && (type == TYPE_ELECTRIC)) { + gDungeon->fill16E[7] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + } + if ((gDungeon->waterSportTurns != 0) && (type == TYPE_FIRE)) { + gDungeon->fill16E[8] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F1C); + } + if ((type == TYPE_ELECTRIC) && (pokemonInfo->charging.chargingStatus == STATUS_CHARGING)) { + gDungeon->fill16E[9] = TRUE; + sub_800A34C(param_1,param_1,&gUnknown_8106F0C); + } + } + return bVar4; +} + s32 WeightWeakTypePicker(Entity *user, Entity *target, u8 moveType) { s32 weight = 1;