Merge pull request #298 from darkruss48/main
Some checks failed
build / build (push) Has been cancelled

Decomp 13 functions, emptying six asm files
This commit is contained in:
AnonymousRandomPerson
2026-09-16 17:48:27 -04:00
committed by GitHub
26 changed files with 161 additions and 302 deletions

View File

@@ -1,3 +0,0 @@
#pragma once
.public _02098D64
.public DUNGEON_MOVE_TABLES

View File

@@ -1,2 +0,0 @@
#pragma once
.public sub_02020B60

View File

@@ -1,5 +0,0 @@
#pragma once
.public _022AAE74
.public _022AAE78
.public MemsetSimple
.public ReadStringSave

View File

@@ -1,3 +0,0 @@
#pragma once
.public _s32_div_f
.public MONSTER_DATA_TABLE_PTR

View File

@@ -1,3 +0,0 @@
#pragma once
.public DisplayAnimatedNumbers
.public ShouldDisplayEntityAdvanced

View File

@@ -1,2 +0,0 @@
#pragma once
.public IsMonster__022F9720

View File

@@ -1,92 +0,0 @@
.include "asm/macros.inc"
.include "main_02013884.inc"
.text
arm_func_start GetMovesetLevelUpPtr
GetMovesetLevelUpPtr: ; 0x02013884
stmdb sp!, {r4, lr}
mov r4, r0
cmp r4, #0x258
subge r0, r4, #0x258
movge r0, r0, lsl #0x10
movge r4, r0, asr #0x10
mov r0, r4
bl IsInvalidMoveset
cmp r0, #0
ldrne r0, _020138C4 ; =_02098D64
ldreq r1, _020138C8 ; =DUNGEON_MOVE_TABLES
moveq r0, #0xc
smulbbeq r0, r4, r0
ldreq r1, [r1]
ldreq r0, [r1, r0]
ldmia sp!, {r4, pc}
.align 2, 0
_020138C4: .word _02098D64
_020138C8: .word DUNGEON_MOVE_TABLES
arm_func_end GetMovesetLevelUpPtr
arm_func_start IsInvalidMoveset
IsInvalidMoveset: ; 0x020138CC
cmp r0, #0
ble _020138E0
ldr r1, _020138F0 ; =0x00000229
cmp r0, r1
blt _020138E8
_020138E0:
mov r0, #1
bx lr
_020138E8:
mov r0, #0
bx lr
.align 2, 0
_020138F0: .word 0x00000229
arm_func_end IsInvalidMoveset
arm_func_start GetMovesetHmTmPtr
GetMovesetHmTmPtr: ; 0x020138F4
stmdb sp!, {r4, lr}
mov r4, r0
cmp r4, #0x258
subge r0, r4, #0x258
movge r0, r0, lsl #0x10
movge r4, r0, asr #0x10
mov r0, r4
bl IsInvalidMoveset
cmp r0, #0
ldrne r0, _02013938 ; =_02098D64
ldmneia sp!, {r4, pc}
ldr r1, _0201393C ; =DUNGEON_MOVE_TABLES
mov r0, #0xc
ldr r1, [r1]
smlabb r0, r4, r0, r1
ldr r0, [r0, #4]
ldmia sp!, {r4, pc}
.align 2, 0
_02013938: .word _02098D64
_0201393C: .word DUNGEON_MOVE_TABLES
arm_func_end GetMovesetHmTmPtr
arm_func_start GetMovesetEggPtr
GetMovesetEggPtr: ; 0x02013940
stmdb sp!, {r4, lr}
mov r4, r0
cmp r4, #0x258
subge r0, r4, #0x258
movge r0, r0, lsl #0x10
movge r4, r0, asr #0x10
mov r0, r4
bl IsInvalidMoveset
cmp r0, #0
ldrne r0, _02013984 ; =_02098D64
ldmneia sp!, {r4, pc}
ldr r1, _02013988 ; =DUNGEON_MOVE_TABLES
mov r0, #0xc
ldr r1, [r1]
smlabb r0, r4, r0, r1
ldr r0, [r0, #8]
ldmia sp!, {r4, pc}
.align 2, 0
_02013984: .word _02098D64
_02013988: .word DUNGEON_MOVE_TABLES
arm_func_end GetMovesetEggPtr

View File

@@ -1,18 +0,0 @@
.include "asm/macros.inc"
.include "main_0202614C.inc"
.text
arm_func_start sub_0202614C
sub_0202614C: ; 0x0202614C
stmdb sp!, {r3, lr}
sub sp, sp, #8
add r3, sp, #0
str r1, [sp]
mov r1, r3
add r0, r0, #4
str r2, [sp, #4]
bl sub_02020B60
add sp, sp, #8
ldmia sp!, {r3, pc}
arm_func_end sub_0202614C

View File

@@ -1,32 +0,0 @@
.include "asm/macros.inc"
.include "main_02048C5C.inc"
.text
arm_func_start sub_02048C5C
sub_02048C5C: ; 0x02048C5C
stmdb sp!, {r3, lr}
ldr r0, _02048CA4 ; =_022AAE74
mov r1, #0
mov r2, #0x30
bl MemsetSimple
ldr r2, _02048CA8 ; =0x09011416
ldr r1, _02048CAC ; =_022AAE74
ldr r0, _02048CB0 ; =_022AAE78
str r2, [r1, #0x24]
bl ReadStringSave
ldr r2, _02048CB4 ; =0x000F1206
ldr r0, _02048CAC ; =_022AAE74
mov r1, #0xff
str r2, [r0, #0x28]
strb r1, [r0, #0x2c]
mov r1, #0
strb r1, [r0, #0x2d]
ldmia sp!, {r3, pc}
.align 2, 0
_02048CA4: .word _022AAE74
_02048CA8: .word 0x09011416
_02048CAC: .word _022AAE74
_02048CB0: .word _022AAE78
_02048CB4: .word 0x000F1206
arm_func_end sub_02048C5C

View File

@@ -1,64 +0,0 @@
.include "asm/macros.inc"
.include "main_02052A7C.inc"
.text
arm_func_start GetExp
GetExp: ; 0x02052A7C
stmdb sp!, {r4, lr}
ldr r2, _02052AAC ; =MONSTER_DATA_TABLE_PTR
sub r3, r1, #1
ldr r2, [r2]
mov r1, #0x44
smlabb r0, r0, r1, r2
ldrsh r4, [r0, #0x1c]
mov r1, #0xa
mul r0, r4, r3
bl _s32_div_f
add r0, r4, r0
ldmia sp!, {r4, pc}
.align 2, 0
_02052AAC: .word MONSTER_DATA_TABLE_PTR
arm_func_end GetExp
arm_func_start GetEvoParameters
GetEvoParameters: ; 0x02052AB0
ldr r3, _02052ADC ; =MONSTER_DATA_TABLE_PTR
mov r2, #0x44
ldr ip, [r3]
mov r3, #4
smlabb r1, r1, r2, ip
add r2, r1, #8
_02052AC8:
ldrh r1, [r2], #2
subs r3, r3, #1
strh r1, [r0], #2
bne _02052AC8
bx lr
.align 2, 0
_02052ADC: .word MONSTER_DATA_TABLE_PTR
arm_func_end GetEvoParameters
arm_func_start GetTreasureBoxChances
GetTreasureBoxChances: ; 0x02052AE0
stmdb sp!, {r4, lr}
mov r2, #0x44
smulbb r4, r0, r2
ldr r2, _02052B24 ; =MONSTER_DATA_TABLE_PTR
mov lr, #0
_02052AF4:
ldr r3, [r2]
add r0, lr, #1
add r3, r4, r3
add r3, r3, lr, lsl #1
ldrsh r3, [r3, #0x3c]
mov r0, r0, lsl #0x10
mov ip, lr, lsl #1
mov lr, r0, asr #0x10
strh r3, [r1, ip]
cmp lr, #4
blt _02052AF4
ldmia sp!, {r4, pc}
.align 2, 0
_02052B24: .word MONSTER_DATA_TABLE_PTR
arm_func_end GetTreasureBoxChances

View File

@@ -1,29 +0,0 @@
.include "asm/macros.inc"
.include "overlay_29_022E46D0.inc"
.text
arm_func_start ov29_022E46D0
ov29_022E46D0: ; 0x022E46D0
bx lr
arm_func_end ov29_022E46D0
arm_func_start DisplayStockpileNumbers
DisplayStockpileNumbers: ; 0x022E46D4
stmdb sp!, {r4, lr}
mov r4, r0
bl ShouldDisplayEntityAdvanced
cmp r0, #0
ldmeqia sp!, {r4, pc}
ldr r0, [r4, #0xb4]
mov r1, r4
#ifdef JAPAN
ldrb r0, [r0, #0x11a]
#else
ldrb r0, [r0, #0x11e]
#endif
mov r2, #1
mov r3, #0xb
bl DisplayAnimatedNumbers
ldmia sp!, {r4, pc}
arm_func_end DisplayStockpileNumbers

View File

@@ -1,42 +0,0 @@
.include "asm/macros.inc"
.include "overlay_29_022FBA70.inc"
.text
arm_func_start IsSpecialStoryAllyOrClient
IsSpecialStoryAllyOrClient: ; 0x022FBA70
stmdb sp!, {r4, lr}
mov r4, r0
bl IsMonster__022F9720
cmp r0, #0
beq _022FBAAC
ldr r0, [r4, #0xb4]
ldrb r0, [r0, #0x48]
cmp r0, #0xfa
moveq r0, #1
ldmeqia sp!, {r4, pc}
cmp r0, #0xd9
blo _022FBAAC
cmp r0, #0xe4
movlo r0, #1
ldmloia sp!, {r4, pc}
_022FBAAC:
mov r0, #0
ldmia sp!, {r4, pc}
arm_func_end IsSpecialStoryAllyOrClient
arm_func_start ResetTriggerFlags
ResetTriggerFlags: ; 0x022FBAB4
ldr r2, [r0, #0xb4]
cmp r2, #0
addne r0, r2, #0x100
movne r1, #0
#ifdef JAPAN
strneh r1, [r0, #0x8e]
strne r1, [r2, #0x188]
#else
strneh r1, [r0, #0x92]
strne r1, [r2, #0x18c]
#endif
bx lr
arm_func_end ResetTriggerFlags

View File

@@ -7,5 +7,6 @@ struct unk_02026130 {
};
void sub_0202613C(struct unk_02026130* p);
void sub_0202614C(struct unk_02026130* p, u32 a, u32 b);
#endif

6
include/main_02048C5C.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef PMDSKY_MAIN_02048C5C_H
#define PMDSKY_MAIN_02048C5C_H
void sub_02048C5C(void);
#endif

View File

@@ -3,6 +3,7 @@
#include "enums.h"
#include "util.h"
#include "monster_data.h"
u8 GetShadowSize(s16 monster_id);
s16 GetSpeedStatus(s16 monster_id);
@@ -22,5 +23,8 @@ enum type_id GetType(s16 monster_id, u8 type_idx);
enum ability_id GetAbility(s16 monster_id, u8 ability_idx);
s16 GetRecruitRate2(s16 monster_id);
s16 GetRecruitRate1(s16 monster_id);
s32 GetExp(s16 monster_id, s32 level);
void GetEvoParameters(struct monster_evolution_parameters *evo_params, s16 monster_id);
void GetTreasureBoxChances(s16 monster_id, s16 *chances);
#endif //PMDSKY_MAIN_0205283C_H

View File

@@ -102,9 +102,17 @@ struct move_data_table
struct move_data moves[559]; // 0x8
};
struct moveset
{
u8 *levelup_moves;
u8 *hmtm_moves;
u8 *egg_moves;
};
struct move_data_table_outer
{
u8 fill0[8];
struct moveset *movesets;
u8 fill4[4];
struct move_data_table *moves;
};

View File

@@ -9,4 +9,10 @@ s16 GetMoveTargetAndRange(struct move *move, bool8 is_ai);
// Gets the type of a move
enum type_id GetMoveType(struct move* move);
extern u8 _02098D64[];
extern s32 IsInvalidMoveset(s16 moveset_id);
u8 *GetMovesetLevelUpPtr(s16 monster_id);
u8 *GetMovesetHmTmPtr(s16 monster_id);
u8 *GetMovesetEggPtr(s16 monster_id);
#endif //PMDSKY_MOVES_2_H

View File

@@ -6,5 +6,7 @@
#include "move.h"
void ov29_022E46C0(struct entity *entity);
void ov29_022E46D0(struct entity *entity);
void DisplayStockpileNumbers(struct entity *entity);
#endif

View File

@@ -5,5 +5,7 @@
s16 FindMoveOnMonster(struct entity* entity, enum move_id move_id);
bool8 DoesMonsterHaveMove(struct entity* entity, enum move_id move_id);
bool8 IsSpecialStoryAllyOrClient(struct entity *entity);
void ResetTriggerFlags(struct entity *entity);
#endif //PMDSKY_OVERLAY_29_022FBA54_H

View File

@@ -106,7 +106,6 @@ Static main
Object asm/main_02012294.o
Object src/moves_1.o
Object src/moves_2.o
Object asm/main_02013884.o
Object src/main_0201398C.o
Object src/moves_4.o
Object src/moves.o
@@ -138,7 +137,6 @@ Static main
Object src/main_0202593C.o
Object asm/main_0202598C.o
Object src/main_0202613C.o
Object asm/main_0202614C.o
Object src/main_02026174.o
Object asm/main_020261F4.o
Object src/main_020265C4.o
@@ -226,7 +224,7 @@ Static main
Object src/main_02048B48.o
Object asm/main_02048B74.o
Object src/main_02048BB4.o
Object asm/main_02048C5C.o
Object src/main_02048C5C.o
Object src/main_02048CB8.o
Object asm/main_02048CF8.o
Object asm/main_bss_020B3380.o
@@ -289,7 +287,6 @@ Static main
Object src/get_category_string.o
Object src/main_020527A8.o
Object src/main_0205283C.o
Object asm/main_02052A7C.o
Object src/main_02052B28.o
Object asm/main_02052B44.o
Object src/main_02054AA4.o
@@ -813,7 +810,6 @@ Overlay OVY_29
Object src/overlay_29_022E45B8.o
Object asm/overlay_29_022E45CC.o
Object src/overlay_29_022E46C0.o
Object asm/overlay_29_022E46D0.o
Object src/overlay_29_022E4704.o
Object asm/overlay_29_022E4868.o
Object src/overlay_29_022E4B8C.o
@@ -910,7 +906,6 @@ Overlay OVY_29
Object src/dungeon_logic_4.o
Object asm/overlay_29_022FB678.o
Object src/overlay_29_022FBA54.o
Object asm/overlay_29_022FBA70.o
Object src/joined_at_checks.o
Object asm/overlay_29_022FBB1C.o
Object src/overlay_29_022FBBEC.o

View File

@@ -1,7 +1,10 @@
#include "main_0202613C.h"
#include "dungeon_mode.h"
extern void sub_02020B14(void *p);
extern void sub_02020B60(void *p, u32 *pair, u32 unk, u32 *pair2);
@@ -14,3 +17,12 @@ void sub_0202613C(struct unk_02026130* p)
{
sub_02020B14((void *) p + 4);
}
void sub_0202614C(struct unk_02026130* p, u32 a, u32 b)
{
struct pixel_position v;
u32 *r = (u32 *)&v;
v.x = a;
v.y = b;
sub_02020B60((u8 *) p + 4, r, b, r);
}

17
src/main_02048C5C.c Normal file
View File

@@ -0,0 +1,17 @@
#include "main_02048C5C.h"
#include "main_02048BB4.h"
#include "main_02048CB8.h"
#include "main_0200330C.h"
extern struct unk_022AAE74 _022AAE74;
extern char _022AAE78;
void sub_02048C5C(void)
{
MemsetSimple((u8 *)(&_022AAE78 - 4), 0, 0x30);
_022AAE74.field_0x24 = 0x09011416;
ReadStringSave(&_022AAE78);
_022AAE74.field_0x28 = 0x000F1206;
_022AAE74.field_0x2C = 0xFF;
_022AAE74.field_0x2D = 0;
}

View File

@@ -90,3 +90,21 @@ s16 GetRecruitRate1(s16 monster_id)
{
return MONSTER_DATA_TABLE_PTR->entries[monster_id].recruit_rate_1;
}
s32 GetExp(s16 monster_id, s32 level)
{
s16 exp_yield = MONSTER_DATA_TABLE_PTR->entries[monster_id].exp_yield;
return exp_yield + exp_yield * (level - 1) / 10;
}
void GetEvoParameters(struct monster_evolution_parameters *evo_params, s16 monster_id)
{
*evo_params = MONSTER_DATA_TABLE_PTR->entries[monster_id].evolution_param;
}
void GetTreasureBoxChances(s16 monster_id, s16 *chances)
{
s16 i;
for (i = 0; i < 4; i++)
chances[i] = (&MONSTER_DATA_TABLE_PTR->entries[monster_id].unk_0x3c)[i];
}

View File

@@ -12,3 +12,45 @@ enum type_id GetMoveType(struct move* move)
{
return DUNGEON_MOVE_TABLES.moves->moves[move->id].type;
}
u8 *GetMovesetLevelUpPtr(s16 monster_id)
{
s16 id = monster_id;
if (id >= 0x258)
id = (s16)(id - 0x258);
if (IsInvalidMoveset(id))
return _02098D64;
return DUNGEON_MOVE_TABLES.movesets[id].levelup_moves;
}
s32 IsInvalidMoveset(s16 moveset_id)
{
if (moveset_id <= 0)
goto invalid;
if (moveset_id < 0x229)
goto valid;
invalid:
return 1;
valid:
return 0;
}
u8 *GetMovesetHmTmPtr(s16 monster_id)
{
s16 id = monster_id;
if (id >= 0x258)
id = (s16)(id - 0x258);
if (IsInvalidMoveset(id))
return _02098D64;
return DUNGEON_MOVE_TABLES.movesets[id].hmtm_moves;
}
u8 *GetMovesetEggPtr(s16 monster_id)
{
s16 id = monster_id;
if (id >= 0x258)
id = (s16)(id - 0x258);
if (IsInvalidMoveset(id))
return _02098D64;
return DUNGEON_MOVE_TABLES.movesets[id].egg_moves;
}

View File

@@ -1,4 +1,10 @@
#include "overlay_29_022E46C0.h"
#include "dungeon_util_static.h"
extern bool8 ShouldDisplayEntityAdvanced(struct entity *entity);
extern void DisplayAnimatedNumbers(s32 amount, struct entity *entity, bool8 display_sign,
s32 color);
extern void PlaySeByIdIfShouldDisplayEntity(struct entity *entity, s32 se_id);
@@ -6,3 +12,15 @@ void ov29_022E46C0(struct entity *entity)
{
PlaySeByIdIfShouldDisplayEntity(entity, 0x30C);
}
void ov29_022E46D0(struct entity *entity)
{
}
void DisplayStockpileNumbers(struct entity *entity)
{
if (!ShouldDisplayEntityAdvanced(entity))
return;
DisplayAnimatedNumbers(GetEntInfo(entity)->stockpile_stage, entity, TRUE,
0xB);
}

View File

@@ -21,3 +21,26 @@ bool8 DoesMonsterHaveMove(struct entity* entity, enum move_id move_id)
{
return FindMoveOnMonster(entity, move_id) >= 0;
}
bool8 IsSpecialStoryAllyOrClient(struct entity* entity)
{
if (IsMonster__022F9720(entity))
{
if (GetEntInfo(entity)->joined_at == DUNGEON_CLIENT)
return TRUE;
if (GetEntInfo(entity)->joined_at >= DUNGEON_JOINED_AT_BIDOOF
&& GetEntInfo(entity)->joined_at < DUNGEON_DUMMY_0xE4)
return TRUE;
}
return FALSE;
}
void ResetTriggerFlags(struct entity* entity)
{
struct monster* monster = GetEntInfo(entity);
if (monster != NULL)
{
monster->contact_ability_trigger_bitflags = 0;
monster->exclusive_item_trigger_bitflags = 0;
}
}