mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
Decomped GetMobilityTypeCheckSlipAndFloating
This commit is contained in:
parent
35f696e1d5
commit
690749ce7c
|
|
@ -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
|
||||
|
|
|
|||
8
asm/include/overlay_29_022FF6C4.inc
Normal file
8
asm/include/overlay_29_022FF6C4.inc
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#pragma once
|
||||
.public GetMobilityTypeAfterIqSkills
|
||||
.public GetMobilityTypeCheckSlip
|
||||
.public GetMobilityTypeCheckSlipAndFloating
|
||||
.public GetTile
|
||||
.public IqSkillIsEnabled
|
||||
.public IsCurrentTilesetBackground
|
||||
.public ItemIsActive__022FF898
|
||||
|
|
@ -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
174
asm/overlay_29_022FF6C4.s
Normal 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
|
||||
8
include/dungeon_mobility.h
Normal file
8
include/dungeon_mobility.h
Normal 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
|
||||
2
main.lsf
2
main.lsf
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
14
src/dungeon_mobility.c
Normal 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;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user