Decomped GetMobilityTypeCheckSlipAndFloating

This commit is contained in:
AnonymousRandomPerson 2025-05-31 22:37:46 -04:00
parent 35f696e1d5
commit 690749ce7c
8 changed files with 207 additions and 202 deletions

View File

@ -1,12 +1,6 @@
#pragma once
.public GetMobilityType
.public GetMobilityTypeAfterIqSkills
.public GetTile
.public IqSkillIsEnabled
.public IsChargingTwoTurnMove
.public IsCurrentTilesetBackground
.public IsFloating
.public ItemIsActive__022FF898
.public LogMessageByIdWithPopupCheckUser
.public SetActionUseMovePlayer
.public SetMonsterActionFields

View File

@ -0,0 +1,8 @@
#pragma once
.public GetMobilityTypeAfterIqSkills
.public GetMobilityTypeCheckSlip
.public GetMobilityTypeCheckSlipAndFloating
.public GetTile
.public IqSkillIsEnabled
.public IsCurrentTilesetBackground
.public ItemIsActive__022FF898

View File

@ -208,198 +208,3 @@ _022FF660:
.align 2, 0
_022FF670: .word ov29_0237C9B8
arm_func_end GetMobilityTypeCheckSlip
arm_func_start GetMobilityTypeCheckSlipAndFloating
GetMobilityTypeCheckSlipAndFloating: ; 0x022FF674
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
ldr r0, [r5, #0xb4]
ldrb r0, [r0, #0xef]
cmp r0, #4
moveq r2, #1
movne r2, #0
mov r0, r1
and r1, r2, #0xff
bl GetMobilityTypeCheckSlip
mov r4, r0
cmp r4, #3
beq _022FF6BC
mov r0, r5
bl IsFloating
cmp r0, #0
movne r0, #2
ldmneia sp!, {r3, r4, r5, pc}
_022FF6BC:
mov r0, r4
ldmia sp!, {r3, r4, r5, pc}
arm_func_end GetMobilityTypeCheckSlipAndFloating
arm_func_start IsInvalidSpawnTile
IsInvalidSpawnTile: ; 0x022FF6C4
stmdb sp!, {r4, lr}
mov r4, r1
ldr r1, [r4, #0xc]
cmp r1, #0
movne r0, #1
ldmneia sp!, {r4, pc}
ldrh r1, [r4]
tst r1, #0x10
movne r0, #1
ldmneia sp!, {r4, pc}
mov r1, #0
bl GetMobilityTypeCheckSlip
ldrh r1, [r4]
cmp r0, #3
and r1, r1, #3
addls pc, pc, r0, lsl #2
b _022FF754
_022FF708: ; jump table
b _022FF718 ; case 0
b _022FF728 ; case 1
b _022FF744 ; case 2
b _022FF754 ; case 3
_022FF718:
cmp r1, #1
bne _022FF75C
mov r0, #0
ldmia sp!, {r4, pc}
_022FF728:
cmp r1, #2
moveq r0, #0
ldmeqia sp!, {r4, pc}
cmp r1, #1
bne _022FF75C
mov r0, #0
ldmia sp!, {r4, pc}
_022FF744:
cmp r1, #0
beq _022FF75C
mov r0, #0
ldmia sp!, {r4, pc}
_022FF754:
mov r0, #0
ldmia sp!, {r4, pc}
_022FF75C:
mov r0, #1
ldmia sp!, {r4, pc}
arm_func_end IsInvalidSpawnTile
arm_func_start ov29_022FF764
ov29_022FF764: ; 0x022FF764
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r1
mov r6, r0
ldrsh r0, [r7]
ldrsh r1, [r7, #2]
ldr r5, [r6, #0xb4]
bl GetTile
ldrsh r1, [r7]
mov r4, r0
cmp r1, #0
movlt r0, #1
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
ldrsh r0, [r7, #2]
cmp r0, #0
movlt r0, #1
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
cmp r1, #0x38
movge r0, #1
ldmgeia sp!, {r3, r4, r5, r6, r7, pc}
cmp r0, #0x20
movge r0, #1
ldmgeia sp!, {r3, r4, r5, r6, r7, pc}
ldr r0, [r4, #0xc]
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
ldrh r0, [r4]
tst r0, #0x10
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
bl IsCurrentTilesetBackground
cmp r0, #0
bne _022FF810
ldrb r0, [r5, #0xef]
cmp r0, #3
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
mov r0, r6
mov r1, #0x10
bl ItemIsActive__022FF898
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
_022FF810:
ldrsh r1, [r5, #2]
mov r0, r6
bl GetMobilityTypeCheckSlipAndFloating
ldrh r2, [r4]
#ifdef JAPAN
mov r4, r0
mov r0, r6
mov r1, #0xc
and r5, r2, #3
bl IqSkillIsEnabled
cmp r0, #0
mov r0, r6
mov r1, #0xd
movne r4, #2
bl IqSkillIsEnabled
cmp r0, #0
movne r4, #3
cmp r4, #3
addls pc, pc, r4, lsl #2
#else
mov r1, r0
mov r0, r6
and r4, r2, #3
bl GetMobilityTypeAfterIqSkills
cmp r0, #3
addls pc, pc, r0, lsl #2
#endif
b _022FF888
_022FF83C: ; jump table
b _022FF84C ; case 0
b _022FF85C ; case 1
b _022FF878 ; case 2
b _022FF888 ; case 3
_022FF84C:
#ifdef JAPAN
cmp r5, #1
#else
cmp r4, #1
#endif
bne _022FF890
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_022FF85C:
#ifdef JAPAN
cmp r5, #2
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
cmp r5, #1
#else
cmp r4, #2
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
cmp r4, #1
#endif
bne _022FF890
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_022FF878:
#ifdef JAPAN
cmp r5, #0
#else
cmp r4, #0
#endif
beq _022FF890
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_022FF888:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_022FF890:
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ov29_022FF764

174
asm/overlay_29_022FF6C4.s Normal file
View File

@ -0,0 +1,174 @@
.include "asm/macros.inc"
.include "overlay_29_022FF6C4.inc"
.text
arm_func_start IsInvalidSpawnTile
IsInvalidSpawnTile: ; 0x022FF6C4
stmdb sp!, {r4, lr}
mov r4, r1
ldr r1, [r4, #0xc]
cmp r1, #0
movne r0, #1
ldmneia sp!, {r4, pc}
ldrh r1, [r4]
tst r1, #0x10
movne r0, #1
ldmneia sp!, {r4, pc}
mov r1, #0
bl GetMobilityTypeCheckSlip
ldrh r1, [r4]
cmp r0, #3
and r1, r1, #3
addls pc, pc, r0, lsl #2
b _022FF754
_022FF708: ; jump table
b _022FF718 ; case 0
b _022FF728 ; case 1
b _022FF744 ; case 2
b _022FF754 ; case 3
_022FF718:
cmp r1, #1
bne _022FF75C
mov r0, #0
ldmia sp!, {r4, pc}
_022FF728:
cmp r1, #2
moveq r0, #0
ldmeqia sp!, {r4, pc}
cmp r1, #1
bne _022FF75C
mov r0, #0
ldmia sp!, {r4, pc}
_022FF744:
cmp r1, #0
beq _022FF75C
mov r0, #0
ldmia sp!, {r4, pc}
_022FF754:
mov r0, #0
ldmia sp!, {r4, pc}
_022FF75C:
mov r0, #1
ldmia sp!, {r4, pc}
arm_func_end IsInvalidSpawnTile
arm_func_start ov29_022FF764
ov29_022FF764: ; 0x022FF764
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r1
mov r6, r0
ldrsh r0, [r7]
ldrsh r1, [r7, #2]
ldr r5, [r6, #0xb4]
bl GetTile
ldrsh r1, [r7]
mov r4, r0
cmp r1, #0
movlt r0, #1
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
ldrsh r0, [r7, #2]
cmp r0, #0
movlt r0, #1
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
cmp r1, #0x38
movge r0, #1
ldmgeia sp!, {r3, r4, r5, r6, r7, pc}
cmp r0, #0x20
movge r0, #1
ldmgeia sp!, {r3, r4, r5, r6, r7, pc}
ldr r0, [r4, #0xc]
cmp r0, #0
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
ldrh r0, [r4]
tst r0, #0x10
movne r0, #1
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
bl IsCurrentTilesetBackground
cmp r0, #0
bne _022FF810
ldrb r0, [r5, #0xef]
cmp r0, #3
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
mov r0, r6
mov r1, #0x10
bl ItemIsActive__022FF898
cmp r0, #0
movne r0, #0
ldmneia sp!, {r3, r4, r5, r6, r7, pc}
_022FF810:
ldrsh r1, [r5, #2]
mov r0, r6
bl GetMobilityTypeCheckSlipAndFloating
ldrh r2, [r4]
#ifdef JAPAN
mov r4, r0
mov r0, r6
mov r1, #0xc
and r5, r2, #3
bl IqSkillIsEnabled
cmp r0, #0
mov r0, r6
mov r1, #0xd
movne r4, #2
bl IqSkillIsEnabled
cmp r0, #0
movne r4, #3
cmp r4, #3
addls pc, pc, r4, lsl #2
#else
mov r1, r0
mov r0, r6
and r4, r2, #3
bl GetMobilityTypeAfterIqSkills
cmp r0, #3
addls pc, pc, r0, lsl #2
#endif
b _022FF888
_022FF83C: ; jump table
b _022FF84C ; case 0
b _022FF85C ; case 1
b _022FF878 ; case 2
b _022FF888 ; case 3
_022FF84C:
#ifdef JAPAN
cmp r5, #1
#else
cmp r4, #1
#endif
bne _022FF890
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_022FF85C:
#ifdef JAPAN
cmp r5, #2
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
cmp r5, #1
#else
cmp r4, #2
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
cmp r4, #1
#endif
bne _022FF890
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_022FF878:
#ifdef JAPAN
cmp r5, #0
#else
cmp r4, #0
#endif
beq _022FF890
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_022FF888:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_022FF890:
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end ov29_022FF764

View File

@ -0,0 +1,8 @@
#ifndef PMDSKY_DUNGEON_MOBILITY_H
#define PMDSKY_DUNGEON_MOBILITY_H
#include "dungeon_mode.h"
enum mobility_type GetMobilityTypeCheckSlipAndFloating(struct entity *monster, s16 species);
#endif //PMDSKY_DUNGEON_MOBILITY_H

View File

@ -315,6 +315,8 @@ Overlay OVY_29
Object asm/overlay_29_022FEDBC.o
Object src/status_checks.o
Object asm/overlay_29_022FF3F4.o
Object src/dungeon_mobility.o
Object asm/overlay_29_022FF6C4.o
Object src/overlay_29_022FF898.o
Object asm/overlay_29_022FF8C8.o
Object src/overlay_29_023000E4.o

View File

@ -1,5 +1,6 @@
#include "dungeon_logic_3.h"
#include "dungeon_map_access.h"
#include "dungeon_mobility.h"
#include "dungeon_pokemon_attributes_1.h"
#include "dungeon_util.h"
#include "dungeon_util_static.h"
@ -7,7 +8,6 @@
static const u8 DIRECTIONAL_BIT_MASKS[] = {0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80};
extern enum mobility_type GetMobilityTypeCheckSlipAndFloating(struct entity *monster, s16 species);
extern enum mobility_type GetDirectionalMobilityType(struct entity* monster, enum mobility_type base_mobility, u8 direction);
extern bool8 IsCurrentTilesetBackground(void);

14
src/dungeon_mobility.c Normal file
View File

@ -0,0 +1,14 @@
#include "dungeon_mobility.h"
#include "dungeon_util_static.h"
extern enum mobility_type GetMobilityTypeCheckSlip(s16 species, bool8 walk_on_water);
extern bool8 IsFloating(struct entity *entity);
enum mobility_type GetMobilityTypeCheckSlipAndFloating(struct entity *monster, s16 species)
{
struct monster *entity_info = GetEntInfo(monster);
enum mobility_type mobility_type = GetMobilityTypeCheckSlip(species, entity_info->invisible_class_status.status == STATUS_INVISIBLE_SLIP);
if (mobility_type != MOBILITY_INTANGIBLE && IsFloating(monster))
return MOBILITY_HOVERING;
return mobility_type;
}