diff --git a/asm/include/overlay_29_023008DC.inc b/asm/include/overlay_29_023009A0.inc similarity index 77% rename from asm/include/overlay_29_023008DC.inc rename to asm/include/overlay_29_023009A0.inc index 22047d12..d40004b7 100644 --- a/asm/include/overlay_29_023008DC.inc +++ b/asm/include/overlay_29_023009A0.inc @@ -1,6 +1,5 @@ #pragma once .public CheckVariousStatuses2__02301244 -.public CheckVariousStatuses__0230172C .public IsBlinded .public IsChargingAnyTwoTurnMove .public ShouldMonsterRunAway diff --git a/asm/overlay_29_023008DC.s b/asm/overlay_29_023009A0.s similarity index 65% rename from asm/overlay_29_023008DC.s rename to asm/overlay_29_023009A0.s index 99435070..3c0468ee 100644 --- a/asm/overlay_29_023008DC.s +++ b/asm/overlay_29_023009A0.s @@ -1,66 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_023008DC.inc" + .include "overlay_29_023009A0.inc" .text - arm_func_start CheckVariousStatuses2__02301308 -CheckVariousStatuses2__02301308: ; 0x023008DC - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - cmp r1, #0 - ldr r4, [r5, #0xb4] - beq _02300904 - mov r1, #1 - bl IsBlinded - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, pc} -_02300904: - ldrb r0, [r4, #0xbd] - cmp r0, #1 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - cmp r0, #5 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - cmp r0, #3 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - ldrb r0, [r4, #0xd0] - cmp r0, #3 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - cmp r0, #7 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - ldrb r0, [r4, #0xc4] - cmp r0, #3 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - cmp r0, #4 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r5 - bl CheckVariousStatuses__0230172C - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, pc} - ldrb r0, [r4, #0xc4] - cmp r0, #6 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} -#ifdef JAPAN - ldrb r0, [r4, #0x104] -#else - ldrb r0, [r4, #0x105] -#endif - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, r4, r5, pc} - arm_func_end CheckVariousStatuses2__02301308 - arm_func_start ov29_023009A0 ov29_023009A0: ; 0x023009A0 stmdb sp!, {r4, lr} diff --git a/include/dungeon_capabilities.h b/include/dungeon_capabilities.h index 1d45500d..95fb63ad 100644 --- a/include/dungeon_capabilities.h +++ b/include/dungeon_capabilities.h @@ -13,5 +13,11 @@ bool8 MonsterHasQuarterHp(struct entity *monster); // entity: Entity pointer // blind_check: If true, return true if entity is blinded bool8 CheckVariousStatuses2__02301244(struct entity *entity, bool8 blind_check); +// Returns false if none of these conditions holds for the given entity: +// blinded (checked only if blind_check == true), +// asleep, frozen, paused, infatuated, wrapping, wrapped, biding, petrified, or terrified. +// entity: Entity pointer +// blind_check: If true, return true if entity is blinded +bool8 CheckVariousStatuses2__02301308(struct entity *entity, bool8 blind_check); #endif //PMDSKY_DUNGEON_CAPABILITIES_H diff --git a/main.lsf b/main.lsf index 0b24a484..bbfb7f78 100644 --- a/main.lsf +++ b/main.lsf @@ -452,7 +452,7 @@ Overlay OVY_29 Object src/dungeon_logic.o Object src/dungeon_logic_1.o Object src/dungeon_capabilities.o - Object asm/overlay_29_023008DC.o + Object asm/overlay_29_023009A0.o Object src/dungeon_capabilities_1.o Object asm/overlay_29_02300D00.o Object src/directional_bit_masks.o diff --git a/src/dungeon_capabilities.c b/src/dungeon_capabilities.c index a9ced791..f65693a6 100644 --- a/src/dungeon_capabilities.c +++ b/src/dungeon_capabilities.c @@ -3,6 +3,8 @@ #include "dungeon_statuses.h" #include "dungeon_util_static.h" +extern bool8 CheckVariousStatuses__0230172C(struct entity *entity); + bool8 IsMonsterSleeping(struct entity *monster) { if (GetEntInfo(monster)->sleep_class_status.sleep == STATUS_SLEEP_SLEEP) @@ -58,3 +60,33 @@ bool8 CheckVariousStatuses2__02301244(struct entity *entity, bool8 blind_check) return FALSE; } + +bool8 CheckVariousStatuses2__02301308(struct entity *entity, bool8 blind_check) +{ + struct monster *pokemon_info = GetEntInfo(entity); + + if ((blind_check && IsBlinded(entity, TRUE))) + return TRUE; + if (pokemon_info->sleep_class_status.sleep == STATUS_SLEEP_SLEEP) + return TRUE; + if (pokemon_info->sleep_class_status.sleep == STATUS_SLEEP_NAPPING) + return TRUE; + if (pokemon_info->sleep_class_status.sleep == STATUS_SLEEP_NIGHTMARE) + return TRUE; + if (pokemon_info->cringe_class_status.cringe == STATUS_CRINGE_PAUSED) + return TRUE; + if (pokemon_info->cringe_class_status.cringe == STATUS_CRINGE_INFATUATED) + return TRUE; + if (pokemon_info->frozen_class_status.freeze == STATUS_FROZEN_WRAP) + return TRUE; + if (pokemon_info->frozen_class_status.freeze == STATUS_FROZEN_WRAPPED) + return TRUE; + if (CheckVariousStatuses__0230172C(entity)) + return TRUE; + if (pokemon_info->frozen_class_status.freeze == STATUS_FROZEN_PETRIFIED) + return TRUE; + if (pokemon_info->terrified_turns != 0) + return TRUE; + + return FALSE; +} diff --git a/src/dungeon_capabilities_1.c b/src/dungeon_capabilities_1.c index 2299f1e0..dfcc341e 100644 --- a/src/dungeon_capabilities_1.c +++ b/src/dungeon_capabilities_1.c @@ -5,7 +5,6 @@ #include "dungeon_util_static.h" #include "joined_at_checks.h" -extern bool8 CheckVariousStatuses2__02301308(struct entity *entity, bool8 blind_check); extern bool8 CheckVariousStatuses__0230172C(struct entity *entity); bool8 CheckVariousConditions__0230156C(struct entity *entity)