mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-26 00:26:19 -05:00
Decomped TestItemAiFlag
This commit is contained in:
parent
8114f38795
commit
45942ba7c2
|
|
@ -1,16 +1,12 @@
|
|||
#pragma once
|
||||
.public EnsureValidItem
|
||||
.public GET_ITEM_NAME_FORMATTED_SPRINTF
|
||||
.public ITEM_DATA_TABLE_PTRS
|
||||
.public SprintfStatic__0200E808_EU
|
||||
.public StringFromId
|
||||
.public _0209808C
|
||||
.public _0209809C
|
||||
.public _020980AC
|
||||
.public _020980B0
|
||||
.public ARM9_UNKNOWN_TABLE__NA_2097FF8
|
||||
.public BAG_ITEMS_PTR_MIRROR
|
||||
.public EnsureValidItem
|
||||
.public GET_ITEM_NAME_FORMATTED_SPRINTF
|
||||
.public IsItemValid
|
||||
.public ITEM_DATA_TABLE_PTRS
|
||||
.public ItemZInit
|
||||
.public SprintfStatic__0200E808_EU
|
||||
.public strcpy
|
||||
.public StringFromId
|
||||
.public vsprintf
|
||||
|
|
|
|||
6
asm/include/main_0200EB30.inc
Normal file
6
asm/include/main_0200EB30.inc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#pragma once
|
||||
.public ARM9_UNKNOWN_TABLE__NA_2097FF8
|
||||
.public BAG_ITEMS_PTR_MIRROR
|
||||
.public ITEM_DATA_TABLE_PTRS
|
||||
.public IsItemValid
|
||||
.public ItemZInit
|
||||
|
|
@ -254,228 +254,3 @@ GetItemMoveId: ; 0x0200EA80
|
|||
.align 2, 0
|
||||
_0200EA9C: .word ITEM_DATA_TABLE_PTRS
|
||||
arm_func_end GetItemMoveId
|
||||
|
||||
arm_func_start TestItemAiFlag
|
||||
TestItemAiFlag: ; 0x0200EAA0
|
||||
stmdb sp!, {r3, lr}
|
||||
cmp r1, #0
|
||||
bne _0200EAD4
|
||||
bl EnsureValidItem
|
||||
ldr r1, _0200EB2C ; =ITEM_DATA_TABLE_PTRS
|
||||
#ifdef EUROPE
|
||||
ldr r1, [r1]
|
||||
#else
|
||||
ldr r1, [r1, #4]
|
||||
#endif
|
||||
add r0, r1, r0, lsl #4
|
||||
ldrb r0, [r0, #0xe]
|
||||
tst r0, #0x80
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
_0200EAD4:
|
||||
cmp r1, #1
|
||||
bne _0200EB04
|
||||
bl EnsureValidItem
|
||||
ldr r1, _0200EB2C ; =ITEM_DATA_TABLE_PTRS
|
||||
#ifdef EUROPE
|
||||
ldr r1, [r1]
|
||||
#else
|
||||
ldr r1, [r1, #4]
|
||||
#endif
|
||||
add r0, r1, r0, lsl #4
|
||||
ldrb r0, [r0, #0xe]
|
||||
tst r0, #0x40
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
_0200EB04:
|
||||
bl EnsureValidItem
|
||||
ldr r1, _0200EB2C ; =ITEM_DATA_TABLE_PTRS
|
||||
#ifdef EUROPE
|
||||
ldr r1, [r1]
|
||||
#else
|
||||
ldr r1, [r1, #4]
|
||||
#endif
|
||||
add r0, r1, r0, lsl #4
|
||||
ldrb r0, [r0, #0xe]
|
||||
tst r0, #0x20
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
.align 2, 0
|
||||
_0200EB2C: .word ITEM_DATA_TABLE_PTRS
|
||||
arm_func_end TestItemAiFlag
|
||||
|
||||
arm_func_start IsItemInTimeDarkness
|
||||
IsItemInTimeDarkness: ; 0x0200EB30
|
||||
ldr r1, _0200EB54 ; =ITEM_DATA_TABLE_PTRS
|
||||
#ifdef EUROPE
|
||||
ldr r1, [r1]
|
||||
#else
|
||||
ldr r1, [r1, #4]
|
||||
#endif
|
||||
add r0, r1, r0, lsl #4
|
||||
ldrb r0, [r0, #0xe]
|
||||
tst r0, #2
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200EB54: .word ITEM_DATA_TABLE_PTRS
|
||||
arm_func_end IsItemInTimeDarkness
|
||||
|
||||
arm_func_start IsItemValidVeneer
|
||||
IsItemValidVeneer: ; 0x0200EB58
|
||||
ldr ip, _0200EB60 ; =IsItemValid
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200EB60: .word IsItemValid
|
||||
arm_func_end IsItemValidVeneer
|
||||
|
||||
arm_func_start sub_0200EB64
|
||||
sub_0200EB64: ; 0x0200EB64
|
||||
ldr r1, _0200EB88 ; =ITEM_DATA_TABLE_PTRS
|
||||
mov r2, r0, lsl #0x1f
|
||||
ldr r1, [r1, #8]
|
||||
mov r0, r0, asr #1
|
||||
ldr r3, [r1, r0, lsl #2]
|
||||
ldr r0, _0200EB8C ; =0x000007FF
|
||||
mov r1, r2, lsr #0x1b
|
||||
and r0, r0, r3, asr r1
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200EB88: .word ITEM_DATA_TABLE_PTRS
|
||||
_0200EB8C: .word 0x000007FF
|
||||
arm_func_end sub_0200EB64
|
||||
|
||||
arm_func_start sub_0200EB90
|
||||
sub_0200EB90: ; 0x0200EB90
|
||||
mov ip, #0
|
||||
ldr r2, _0200EBC8 ; =ARM9_UNKNOWN_TABLE__NA_2097FF8
|
||||
b _0200EBB8
|
||||
_0200EB9C:
|
||||
add r1, r2, ip, lsl #2
|
||||
ldrsh r1, [r1, #2]
|
||||
mov r3, ip, lsl #2
|
||||
cmp r0, r1
|
||||
ldreqsh r0, [r2, r3]
|
||||
bxeq lr
|
||||
add ip, ip, #1
|
||||
_0200EBB8:
|
||||
cmp ip, #0x10
|
||||
blt _0200EB9C
|
||||
mov r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200EBC8: .word ARM9_UNKNOWN_TABLE__NA_2097FF8
|
||||
arm_func_end sub_0200EB90
|
||||
|
||||
arm_func_start SetActiveInventoryToMain
|
||||
SetActiveInventoryToMain: ; 0x0200EBCC
|
||||
ldr ip, _0200EBD8 ; =SetActiveInventory
|
||||
mov r0, #0
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200EBD8: .word SetActiveInventory
|
||||
arm_func_end SetActiveInventoryToMain
|
||||
|
||||
arm_func_start AllInventoriesZInit
|
||||
AllInventoriesZInit: ; 0x0200EBDC
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
mov sl, #0
|
||||
ldr r6, _0200EC44 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r7, sl
|
||||
mov fp, sl
|
||||
mov r4, #6
|
||||
mov r5, #0x12c
|
||||
_0200EBF8:
|
||||
mul sb, sl, r5
|
||||
mov r8, fp
|
||||
_0200EC00:
|
||||
ldr r0, [r6]
|
||||
add r0, r0, sb
|
||||
mla r0, r8, r4, r0
|
||||
bl ItemZInit
|
||||
add r8, r8, #1
|
||||
cmp r8, #0x32
|
||||
blt _0200EC00
|
||||
ldr r0, [r6]
|
||||
add r0, r0, sl, lsl #2
|
||||
add r0, r0, #0x1000
|
||||
add sl, sl, #1
|
||||
str r7, [r0, #0x394]
|
||||
cmp sl, #3
|
||||
blt _0200EBF8
|
||||
mov r0, r7
|
||||
bl SetActiveInventory
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_0200EC44: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end AllInventoriesZInit
|
||||
|
||||
arm_func_start SpecialEpisodeInventoryZInit
|
||||
SpecialEpisodeInventoryZInit: ; 0x0200EC48
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r5, _0200EC8C ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r6, #0
|
||||
mov r4, #6
|
||||
_0200EC58:
|
||||
ldr r0, [r5]
|
||||
add r0, r0, #0x12c
|
||||
mla r0, r6, r4, r0
|
||||
bl ItemZInit
|
||||
add r6, r6, #1
|
||||
cmp r6, #0x32
|
||||
blt _0200EC58
|
||||
ldr r0, _0200EC8C ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x1000
|
||||
str r1, [r0, #0x398]
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0200EC8C: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end SpecialEpisodeInventoryZInit
|
||||
|
||||
arm_func_start RescueInventoryZInit
|
||||
RescueInventoryZInit: ; 0x0200EC90
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r5, _0200ECD4 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r6, #0
|
||||
mov r4, #6
|
||||
_0200ECA0:
|
||||
ldr r0, [r5]
|
||||
add r0, r0, #0x258
|
||||
mla r0, r6, r4, r0
|
||||
bl ItemZInit
|
||||
add r6, r6, #1
|
||||
cmp r6, #0x32
|
||||
blt _0200ECA0
|
||||
ldr r0, _0200ECD4 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x1000
|
||||
str r1, [r0, #0x39c]
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0200ECD4: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RescueInventoryZInit
|
||||
|
||||
arm_func_start SetActiveInventory
|
||||
SetActiveInventory: ; 0x0200ECD8
|
||||
ldr r2, _0200ECF8 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x12c
|
||||
ldr r3, [r2]
|
||||
strb r0, [r3, #0x388]
|
||||
ldr r2, [r2]
|
||||
mla r1, r0, r1, r2
|
||||
str r1, [r2, #0x384]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200ECF8: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end SetActiveInventory
|
||||
|
|
|
|||
174
asm/main_0200EB30.s
Normal file
174
asm/main_0200EB30.s
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "main_0200EB30.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start IsItemInTimeDarkness
|
||||
IsItemInTimeDarkness: ; 0x0200EB30
|
||||
ldr r1, _0200EB54 ; =ITEM_DATA_TABLE_PTRS
|
||||
#ifdef EUROPE
|
||||
ldr r1, [r1]
|
||||
#else
|
||||
ldr r1, [r1, #4]
|
||||
#endif
|
||||
add r0, r1, r0, lsl #4
|
||||
ldrb r0, [r0, #0xe]
|
||||
tst r0, #2
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200EB54: .word ITEM_DATA_TABLE_PTRS
|
||||
arm_func_end IsItemInTimeDarkness
|
||||
|
||||
arm_func_start IsItemValidVeneer
|
||||
IsItemValidVeneer: ; 0x0200EB58
|
||||
ldr ip, _0200EB60 ; =IsItemValid
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200EB60: .word IsItemValid
|
||||
arm_func_end IsItemValidVeneer
|
||||
|
||||
arm_func_start sub_0200EB64
|
||||
sub_0200EB64: ; 0x0200EB64
|
||||
ldr r1, _0200EB88 ; =ITEM_DATA_TABLE_PTRS
|
||||
mov r2, r0, lsl #0x1f
|
||||
ldr r1, [r1, #8]
|
||||
mov r0, r0, asr #1
|
||||
ldr r3, [r1, r0, lsl #2]
|
||||
ldr r0, _0200EB8C ; =0x000007FF
|
||||
mov r1, r2, lsr #0x1b
|
||||
and r0, r0, r3, asr r1
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200EB88: .word ITEM_DATA_TABLE_PTRS
|
||||
_0200EB8C: .word 0x000007FF
|
||||
arm_func_end sub_0200EB64
|
||||
|
||||
arm_func_start sub_0200EB90
|
||||
sub_0200EB90: ; 0x0200EB90
|
||||
mov ip, #0
|
||||
ldr r2, _0200EBC8 ; =ARM9_UNKNOWN_TABLE__NA_2097FF8
|
||||
b _0200EBB8
|
||||
_0200EB9C:
|
||||
add r1, r2, ip, lsl #2
|
||||
ldrsh r1, [r1, #2]
|
||||
mov r3, ip, lsl #2
|
||||
cmp r0, r1
|
||||
ldreqsh r0, [r2, r3]
|
||||
bxeq lr
|
||||
add ip, ip, #1
|
||||
_0200EBB8:
|
||||
cmp ip, #0x10
|
||||
blt _0200EB9C
|
||||
mov r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200EBC8: .word ARM9_UNKNOWN_TABLE__NA_2097FF8
|
||||
arm_func_end sub_0200EB90
|
||||
|
||||
arm_func_start SetActiveInventoryToMain
|
||||
SetActiveInventoryToMain: ; 0x0200EBCC
|
||||
ldr ip, _0200EBD8 ; =SetActiveInventory
|
||||
mov r0, #0
|
||||
bx ip
|
||||
.align 2, 0
|
||||
_0200EBD8: .word SetActiveInventory
|
||||
arm_func_end SetActiveInventoryToMain
|
||||
|
||||
arm_func_start AllInventoriesZInit
|
||||
AllInventoriesZInit: ; 0x0200EBDC
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
mov sl, #0
|
||||
ldr r6, _0200EC44 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r7, sl
|
||||
mov fp, sl
|
||||
mov r4, #6
|
||||
mov r5, #0x12c
|
||||
_0200EBF8:
|
||||
mul sb, sl, r5
|
||||
mov r8, fp
|
||||
_0200EC00:
|
||||
ldr r0, [r6]
|
||||
add r0, r0, sb
|
||||
mla r0, r8, r4, r0
|
||||
bl ItemZInit
|
||||
add r8, r8, #1
|
||||
cmp r8, #0x32
|
||||
blt _0200EC00
|
||||
ldr r0, [r6]
|
||||
add r0, r0, sl, lsl #2
|
||||
add r0, r0, #0x1000
|
||||
add sl, sl, #1
|
||||
str r7, [r0, #0x394]
|
||||
cmp sl, #3
|
||||
blt _0200EBF8
|
||||
mov r0, r7
|
||||
bl SetActiveInventory
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_0200EC44: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end AllInventoriesZInit
|
||||
|
||||
arm_func_start SpecialEpisodeInventoryZInit
|
||||
SpecialEpisodeInventoryZInit: ; 0x0200EC48
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r5, _0200EC8C ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r6, #0
|
||||
mov r4, #6
|
||||
_0200EC58:
|
||||
ldr r0, [r5]
|
||||
add r0, r0, #0x12c
|
||||
mla r0, r6, r4, r0
|
||||
bl ItemZInit
|
||||
add r6, r6, #1
|
||||
cmp r6, #0x32
|
||||
blt _0200EC58
|
||||
ldr r0, _0200EC8C ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x1000
|
||||
str r1, [r0, #0x398]
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0200EC8C: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end SpecialEpisodeInventoryZInit
|
||||
|
||||
arm_func_start RescueInventoryZInit
|
||||
RescueInventoryZInit: ; 0x0200EC90
|
||||
stmdb sp!, {r4, r5, r6, lr}
|
||||
ldr r5, _0200ECD4 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r6, #0
|
||||
mov r4, #6
|
||||
_0200ECA0:
|
||||
ldr r0, [r5]
|
||||
add r0, r0, #0x258
|
||||
mla r0, r6, r4, r0
|
||||
bl ItemZInit
|
||||
add r6, r6, #1
|
||||
cmp r6, #0x32
|
||||
blt _0200ECA0
|
||||
ldr r0, _0200ECD4 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0
|
||||
ldr r0, [r0]
|
||||
add r0, r0, #0x1000
|
||||
str r1, [r0, #0x39c]
|
||||
ldmia sp!, {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_0200ECD4: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end RescueInventoryZInit
|
||||
|
||||
arm_func_start SetActiveInventory
|
||||
SetActiveInventory: ; 0x0200ECD8
|
||||
ldr r2, _0200ECF8 ; =BAG_ITEMS_PTR_MIRROR
|
||||
mov r1, #0x12c
|
||||
ldr r3, [r2]
|
||||
strb r0, [r3, #0x388]
|
||||
ldr r2, [r2]
|
||||
mla r1, r0, r1, r2
|
||||
str r1, [r2, #0x384]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200ECF8: .word BAG_ITEMS_PTR_MIRROR
|
||||
arm_func_end SetActiveInventory
|
||||
|
|
@ -1442,9 +1442,9 @@ enum item_flag {
|
|||
};
|
||||
|
||||
enum item_ai_flag {
|
||||
ITEM_AI_FLAG_TARGET_SELF,
|
||||
ITEM_AI_FLAG_TARGET_ALLY,
|
||||
ITEM_AI_FLAG_TARGET_ENEMY,
|
||||
ITEM_FLAG_CONSUMABLE,
|
||||
ITEM_FLAG_THROWABLE_AT_ALLY,
|
||||
ITEM_FLAG_THROWABLE_AT_ENEMY,
|
||||
NUM_ITEM_AI_FLAGS
|
||||
};
|
||||
|
||||
|
|
@ -1453,6 +1453,13 @@ enum item_target_flag {
|
|||
ITEM_TARGET_ALLY = 1 << 1
|
||||
};
|
||||
|
||||
enum item_data_flag {
|
||||
ITEM_DATA_FLAG_VALID = 1 << 0,
|
||||
ITEM_DATA_FLAG_CONSUMABLE = 1 << 5,
|
||||
ITEM_DATA_FLAG_THROWABLE_AT_ALLY = 1 << 6,
|
||||
ITEM_DATA_FLAG_THROWABLE_AT_ENEMY = 1 << 7,
|
||||
};
|
||||
|
||||
#define GROUND_ITEM_TOOLBOX_INDEX 0x80
|
||||
#define HELD_ITEM_TOOLBOX_INDEX 0x81
|
||||
#define INVENTORY_SIZE 52
|
||||
|
|
@ -1506,7 +1513,7 @@ struct item_data_entry
|
|||
/* 0x0 */ u8 *name;
|
||||
/* 0x4 */ enum item_category category;
|
||||
u8 fill5[0xE - 0x5];
|
||||
/* 0xE */ bool8 valid;
|
||||
/* 0xE */ u8 flags;
|
||||
};
|
||||
|
||||
#endif //PMDSKY_ITEM_H
|
||||
|
|
|
|||
15
include/item_util_3.h
Normal file
15
include/item_util_3.h
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#ifndef PMDSKY_ITEM_UTIL_3_H
|
||||
#define PMDSKY_ITEM_UTIL_3_H
|
||||
|
||||
#include "util.h"
|
||||
|
||||
// Returns a boolean indicating whether the item is consumable, throwable at an ally, or throwable at an enemy, depending on item_flag.
|
||||
// The table used for this is inaccessible in the code, as it is loaded from a file in the ROM at runtime.
|
||||
// Bit 7 in the table corresponds to ITEM_FLAG_CONSUMABLE, bit 6 to ITEM_FLAG_THROWABLE_AT_ALLY, and bit 5 to ITEM_FLAG_THROWABLE_AT_ENEMY.
|
||||
//
|
||||
// item_id: item_id enum
|
||||
// flag: item_flag enum. Function will test a different allowed AI action depending on the value.
|
||||
// return: bool
|
||||
bool8 TestItemAiFlag(s16 item_id, s32 flag);
|
||||
|
||||
#endif //PMDSKY_ITEM_UTIL_3_H
|
||||
2
main.lsf
2
main.lsf
|
|
@ -27,6 +27,8 @@ Static main
|
|||
Object asm/main_0200E7E8.o
|
||||
Object src/item_util_2.o
|
||||
Object asm/main_0200E864.o
|
||||
Object src/item_util_3.o
|
||||
Object asm/main_0200EB30.o
|
||||
Object src/main_0200ECFC.o
|
||||
Object asm/main_0200ED1C.o
|
||||
Object src/moves.o
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ u32 GetAiUseItemProbability(struct entity *item_consumer, struct item *item, u32
|
|||
{
|
||||
u32 item_weight = 0;
|
||||
struct monster *pokemon_info = GetEntInfo(item_consumer);
|
||||
bool8 target_other = (flags & 1) != 0;
|
||||
bool8 target_ally = (flags & 2) != 0;
|
||||
bool8 target_other = (flags & ITEM_TARGET_OTHER) != 0;
|
||||
bool8 target_ally = (flags & ITEM_TARGET_ALLY) != 0;
|
||||
switch (item->id)
|
||||
{
|
||||
case ITEM_STICK:
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include "dungeon_util_static.h"
|
||||
#include "item.h"
|
||||
#include "item_util.h"
|
||||
#include "item_util_3.h"
|
||||
|
||||
#define NUM_POTENTIAL_ROCK_TARGETS 20
|
||||
|
||||
|
|
@ -21,7 +22,6 @@ u32 AI_THROWN_ITEM_DIRECTIONS[NUM_DIRECTIONS] = {0};
|
|||
extern volatile s32 AI_THROWN_ITEM_ACTION_CHOICE_COUNT;
|
||||
extern struct bag_items *BAG_ITEMS_PTR_MIRROR;
|
||||
|
||||
extern bool8 TestItemAiFlag(s16 item_id, s32 flag);
|
||||
extern void GetPossibleAiArcItemTargets(struct entity *user, struct item *item, struct position positions[], bool8 always_add_position);
|
||||
extern s32 GetDirectionTowardsPosition(struct position *origin, struct position *target);
|
||||
extern struct item *GetItemInfo(struct entity *item_entity);
|
||||
|
|
@ -58,7 +58,7 @@ void AiDecideUseItem(struct entity *entity)
|
|||
enum item_category item_type = GetItemCategoryVeneer(item->id);
|
||||
if (item_type == CATEGORY_THROWN_LINE)
|
||||
{
|
||||
GetPossibleAiThrownItemDirections(entity, ITEM_AI_FLAG_TARGET_ENEMY, item, TRUE);
|
||||
GetPossibleAiThrownItemDirections(entity, ITEM_FLAG_THROWABLE_AT_ENEMY, item, TRUE);
|
||||
for (i = 0; i < AI_THROWN_ITEM_ACTION_CHOICE_COUNT; i++)
|
||||
{
|
||||
if (DungeonRandOutcome__022EAB20(AI_THROWN_ITEM_PROBABILITIES[i]))
|
||||
|
|
@ -149,7 +149,7 @@ void AiDecideUseItem(struct entity *entity)
|
|||
if (ItemSticky(item_flags))
|
||||
continue;
|
||||
|
||||
if (TestItemAiFlag(item->id, ITEM_AI_FLAG_TARGET_SELF))
|
||||
if (TestItemAiFlag(item->id, ITEM_FLAG_CONSUMABLE))
|
||||
{
|
||||
u32 item_weight = GetAiUseItemProbability(entity, item, ITEM_TARGET_ALLY);
|
||||
if (item_weight != 0)
|
||||
|
|
@ -172,7 +172,7 @@ void AiDecideUseItem(struct entity *entity)
|
|||
|
||||
if (MonsterCanThrowItems(pokemon_info))
|
||||
{
|
||||
for (thrown_ai_flag = ITEM_AI_FLAG_TARGET_ALLY; thrown_ai_flag < NUM_ITEM_AI_FLAGS; thrown_ai_flag++)
|
||||
for (thrown_ai_flag = ITEM_FLAG_THROWABLE_AT_ALLY; thrown_ai_flag < NUM_ITEM_AI_FLAGS; thrown_ai_flag++)
|
||||
{
|
||||
if (TestItemAiFlag(item->id, thrown_ai_flag))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ void GetPossibleAiThrownItemDirections(struct entity *entity, s32 ally_or_enemy,
|
|||
continue;
|
||||
|
||||
s32 targeting_flags;
|
||||
if (ally_or_enemy == ITEM_AI_FLAG_TARGET_ALLY)
|
||||
if (ally_or_enemy == ITEM_FLAG_THROWABLE_AT_ALLY)
|
||||
{
|
||||
if (GetTreatmentBetweenMonsters(entity, target_pokemon, FALSE, FALSE) == TREATMENT_TREAT_AS_ALLY)
|
||||
targeting_flags = ITEM_TARGET_OTHER | ITEM_TARGET_ALLY;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ extern struct item_data_entry *ITEM_DATA_TABLE_PTRS[3];
|
|||
|
||||
bool8 IsItemValid(s16 item_id)
|
||||
{
|
||||
if (ITEM_DATA_TABLE_PTRS[ITEM_DATA_TABLE_PTRS_INDEX][item_id].valid & 1)
|
||||
if (ITEM_DATA_TABLE_PTRS[ITEM_DATA_TABLE_PTRS_INDEX][item_id].flags & ITEM_DATA_FLAG_VALID)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
|
|
|
|||
29
src/item_util_3.c
Normal file
29
src/item_util_3.c
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#include "item_util_3.h"
|
||||
#include "item.h"
|
||||
#include "item_util_2.h"
|
||||
|
||||
extern struct item_data_entry *ITEM_DATA_TABLE_PTRS[3];
|
||||
|
||||
bool8 TestItemAiFlag(s16 item_id, s32 flag)
|
||||
{
|
||||
if (flag == 0)
|
||||
{
|
||||
item_id = EnsureValidItem(item_id);
|
||||
if (ITEM_DATA_TABLE_PTRS[ITEM_DATA_TABLE_PTRS_INDEX][item_id].flags & ITEM_DATA_FLAG_THROWABLE_AT_ENEMY)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (flag == 1)
|
||||
{
|
||||
item_id = EnsureValidItem(item_id);
|
||||
if (ITEM_DATA_TABLE_PTRS[ITEM_DATA_TABLE_PTRS_INDEX][item_id].flags & ITEM_DATA_FLAG_THROWABLE_AT_ALLY)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
item_id = EnsureValidItem(item_id);
|
||||
if (ITEM_DATA_TABLE_PTRS[ITEM_DATA_TABLE_PTRS_INDEX][item_id].flags & ITEM_DATA_FLAG_CONSUMABLE)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user