more decomp

This commit is contained in:
Seth Barberee 2023-05-07 11:03:18 -07:00
parent c5014c3ca4
commit a601fd3a08
5 changed files with 193 additions and 459 deletions

View File

@ -2482,457 +2482,4 @@ _0807E198: .4byte 0x0000fffc
_0807E19C: .4byte gUnknown_203B444
thumb_func_end sub_807DF38
thumb_func_start sub_807E1A0
sub_807E1A0:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x24
mov r9, r0
adds r6, r1, 0
lsls r2, 24
lsrs r2, 24
mov r8, r2
lsls r3, 16
asrs r7, r3, 16
adds r0, r6, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _0807E244
ldr r5, [r6, 0x70]
add r4, sp, 0x1C
ldr r1, _0807E20C
adds r0, r4, 0
bl InitPokemonMove
adds r0, r6, 0
adds r1, r4, 0
bl sub_80571F0
lsls r0, 24
cmp r0, 0
bne _0807E244
ldrb r0, [r5, 0x6]
cmp r0, 0
bne _0807E210
movs r0, 0xE
ldrsh r4, [r5, r0]
lsrs r0, r4, 31
adds r5, r4, r0
asrs r4, r5, 1
adds r0, r6, 0
movs r1, 0x2
bl MonsterIsType
lsls r0, 24
cmp r0, 0
beq _0807E202
lsrs r0, r5, 31
adds r0, r4, r0
asrs r4, r0, 1
_0807E202:
cmp r4, 0
bgt _0807E226
movs r4, 0x1
b _0807E226
.align 2, 0
_0807E20C: .4byte 0x00000163
_0807E210:
ldr r4, [sp, 0x40]
adds r0, r6, 0
movs r1, 0x2
bl MonsterIsType
lsls r0, 24
cmp r0, 0
beq _0807E226
lsrs r0, r4, 31
adds r0, r4, r0
asrs r4, r0, 1
_0807E226:
add r0, sp, 0x18
str r0, [sp]
mov r0, r8
str r0, [sp, 0x4]
str r7, [sp, 0x8]
movs r0, 0
str r0, [sp, 0xC]
str r0, [sp, 0x10]
str r0, [sp, 0x14]
mov r0, r9
adds r1, r6, 0
adds r2, r4, 0
movs r3, 0
bl sub_806F370
_0807E244:
add sp, 0x24
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_807E1A0
thumb_func_start sub_807E254
sub_807E254:
push {r4-r7,lr}
sub sp, 0x8
adds r6, r0, 0
adds r7, r1, 0
movs r1, 0xE
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0807E274
ldr r0, _0807E270
adds r1, r6, 0
b _0807E286
.align 2, 0
_0807E270: .4byte gAvailablePokemonNames
_0807E274:
adds r0, r7, 0
movs r1, 0xE
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0807E2A4
ldr r0, _0807E29C
adds r1, r7, 0
_0807E286:
movs r2, 0
bl SetMessageArgument
ldr r0, _0807E2A0
ldr r2, [r0]
adds r0, r6, 0
adds r1, r7, 0
bl sub_80522F4
b _0807E366
.align 2, 0
_0807E29C: .4byte gAvailablePokemonNames
_0807E2A0: .4byte gUnknown_80FCAC0
_0807E2A4:
ldrh r1, [r6, 0x6]
lsls r1, 16
ldrh r0, [r6, 0x4]
orrs r0, r1
str r0, [sp]
ldrh r1, [r7, 0x6]
lsls r1, 16
ldrh r0, [r7, 0x4]
orrs r0, r1
str r0, [sp, 0x4]
mov r5, sp
mov r0, sp
bl nullsub_93
add r4, sp, 0x4
adds r0, r4, 0
bl nullsub_93
movs r0, 0
ldrsh r1, [r4, r0]
movs r0, 0x2
ldrsh r2, [r4, r0]
adds r0, r6, 0
movs r3, 0x1
bl sub_80694C0
mov r0, sp
movs r2, 0
ldrsh r1, [r0, r2]
movs r0, 0x2
ldrsh r2, [r5, r0]
adds r0, r7, 0
movs r3, 0x1
bl sub_80694C0
adds r0, r6, 0
movs r1, 0
bl sub_804535C
adds r0, r7, 0
movs r1, 0
bl sub_804535C
adds r0, r6, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _0807E330
ldr r0, [r6, 0x70]
ldrb r0, [r0, 0x7]
cmp r0, 0
beq _0807E31A
adds r0, r6, 0x4
bl sub_804AC20
movs r0, 0
bl sub_807EC28
_0807E31A:
adds r0, r6, 0
bl sub_806A5B8
ldr r0, _0807E370
ldr r0, [r0]
ldr r1, _0807E374
adds r0, r1
ldrb r1, [r0]
adds r0, r6, 0
bl sub_8075900
_0807E330:
adds r0, r7, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _0807E366
ldr r0, [r7, 0x70]
ldrb r0, [r0, 0x7]
cmp r0, 0
beq _0807E350
adds r0, r7, 0x4
bl sub_804AC20
movs r0, 0
bl sub_807EC28
_0807E350:
adds r0, r7, 0
bl sub_806A5B8
ldr r0, _0807E370
ldr r0, [r0]
ldr r2, _0807E374
adds r0, r2
ldrb r1, [r0]
adds r0, r7, 0
bl sub_8075900
_0807E366:
add sp, 0x8
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0807E370: .4byte gDungeon
_0807E374: .4byte 0x00003a08
thumb_func_end sub_807E254
thumb_func_start sub_807E378
sub_807E378:
push {r4-r7,lr}
bl GetLeader
adds r4, r0, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
bne _0807E38C
b _0807E564
_0807E38C:
ldr r0, _0807E41C
ldr r1, [r0]
ldr r3, _0807E420
adds r2, r1, r3
ldrh r3, [r2]
movs r5, 0
ldrsh r1, [r2, r5]
adds r6, r0, 0
cmp r1, 0
ble _0807E3AA
subs r0, r3, 0x1
strh r0, [r2]
lsls r0, 16
cmp r0, 0
bgt _0807E3B4
_0807E3AA:
ldr r0, [r6]
ldr r1, _0807E424
adds r0, r1
movs r1, 0x3
strb r1, [r0]
_0807E3B4:
adds r5, r6, 0
ldr r1, [r5]
ldr r7, _0807E424
adds r0, r1, r7
ldrb r0, [r0]
cmp r0, 0
bne _0807E434
ldr r2, _0807E420
adds r0, r1, r2
movs r3, 0
ldrsh r0, [r0, r3]
cmp r0, 0xF9
ble _0807E3D0
b _0807E564
_0807E3D0:
bl sub_805E804
adds r0, r4, 0
movs r1, 0x1
bl sub_806A2BC
adds r0, r4, 0
bl UseAttack
bl sub_8044B28
lsls r0, 24
cmp r0, 0
beq _0807E3EE
b _0807E564
_0807E3EE:
ldr r0, _0807E428
ldr r1, [r0]
adds r0, r4, 0
bl SendMessage
ldr r1, _0807E42C
ldr r0, [r5]
ldr r2, _0807E430
adds r0, r2
movs r3, 0
ldrsh r0, [r0, r3]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
movs r1, 0
bl sub_80426C8
ldr r0, [r5]
adds r0, r7
movs r1, 0x1
strb r1, [r0]
b _0807E564
.align 2, 0
_0807E41C: .4byte gDungeon
_0807E420: .4byte 0x00000666
_0807E424: .4byte 0x0000067a
_0807E428: .4byte gUnknown_80F9C4C
_0807E42C: .4byte gUnknown_80F5FAC
_0807E430: .4byte 0x00003a0e
_0807E434:
cmp r0, 0x1
bne _0807E4A0
ldr r2, _0807E490
adds r0, r1, r2
movs r3, 0
ldrsh r0, [r0, r3]
cmp r0, 0x95
ble _0807E446
b _0807E564
_0807E446:
bl sub_805E804
adds r0, r4, 0
movs r1, 0x1
bl sub_806A2BC
adds r0, r4, 0
bl UseAttack
bl sub_8044B28
lsls r0, 24
cmp r0, 0
beq _0807E464
b _0807E564
_0807E464:
ldr r0, _0807E494
ldr r1, [r0]
adds r0, r4, 0
bl SendMessage
ldr r1, _0807E498
ldr r0, [r5]
ldr r2, _0807E49C
adds r0, r2
movs r3, 0
ldrsh r0, [r0, r3]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
movs r1, 0x1
bl sub_80426C8
ldr r0, [r5]
adds r0, r7
movs r1, 0x2
strb r1, [r0]
b _0807E564
.align 2, 0
_0807E490: .4byte 0x00000666
_0807E494: .4byte gUnknown_80F9C70
_0807E498: .4byte gUnknown_80F5FAC
_0807E49C: .4byte 0x00003a0e
_0807E4A0:
cmp r0, 0x2
bne _0807E508
ldr r2, _0807E4F8
adds r0, r1, r2
movs r3, 0
ldrsh r0, [r0, r3]
cmp r0, 0x31
bgt _0807E564
bl sub_805E804
adds r0, r4, 0
movs r1, 0x1
bl sub_806A2BC
adds r0, r4, 0
bl UseAttack
bl sub_8044B28
lsls r0, 24
cmp r0, 0
bne _0807E564
ldr r0, _0807E4FC
ldr r1, [r0]
adds r0, r4, 0
bl SendMessage
ldr r1, _0807E500
ldr r0, [r5]
ldr r2, _0807E504
adds r0, r2
movs r3, 0
ldrsh r0, [r0, r3]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
movs r1, 0x2
bl sub_80426C8
ldr r0, [r5]
adds r0, r7
movs r1, 0x3
strb r1, [r0]
b _0807E564
.align 2, 0
_0807E4F8: .4byte 0x00000666
_0807E4FC: .4byte gUnknown_80F9C8C
_0807E500: .4byte gUnknown_80F5FAC
_0807E504: .4byte 0x00003a0e
_0807E508:
ldr r5, _0807E56C
adds r0, r1, r5
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0
bgt _0807E564
bl sub_805E804
adds r0, r4, 0
movs r1, 0x1
bl sub_806A2BC
adds r0, r4, 0
bl UseAttack
bl sub_8044B28
lsls r0, 24
cmp r0, 0
bne _0807E564
ldr r0, _0807E570
ldr r1, [r0]
adds r0, r4, 0
bl SendMessage
ldr r1, _0807E574
ldr r0, [r6]
ldr r2, _0807E578
adds r0, r2
movs r3, 0
ldrsh r0, [r0, r3]
lsls r0, 2
adds r0, r1
ldr r0, [r0]
movs r1, 0x3
bl sub_80426C8
ldr r0, [r6]
adds r0, r7
movs r1, 0x4
strb r1, [r0]
ldr r1, _0807E57C
adds r0, r4, 0
adds r2, r4, 0
bl sub_8068FE0
_0807E564:
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0807E56C: .4byte 0x00000666
_0807E570: .4byte gUnknown_80F9CBC
_0807E574: .4byte gUnknown_80F5FAC
_0807E578: .4byte 0x00003a0e
_0807E57C: .4byte 0x0000021e
thumb_func_end sub_807E378
.align 2, 0

View File

@ -94,7 +94,7 @@ struct Dungeon
u8 fill65D[0x660 - 0x65D];
/* 0x660 */ s16 fractionalTurn; // Handles turn order when Pokémon have different movement speeds.
u8 fill662[0x666 - 0x662];
/* 0x666 */ u16 windTurns; // Turns remaining before getting swept out of the dungeon.
/* 0x666 */ s16 windTurns; // Turns remaining before getting swept out of the dungeon.
/* 0x668 */ u16 unk668;
u16 bossSongIndex;
u8 unk66C;
@ -110,7 +110,9 @@ struct Dungeon
/* 0x676 */ bool8 itemHoldersIdentified;
u8 unk677;
u8 unk678;
u8 unk679[0x68A - 0x679];
u8 unk679;
u8 unk67A;
u8 unk67B[0x68A - 0x67B];
/* 0x68A */ u8 unk68A;
u8 fill68B[0x699 - 0x68B];
u8 unk699;

View File

@ -3,6 +3,10 @@
#include "dungeon_entity.h"
u32 sub_8057144(struct Entity * pokemon);
bool8 sub_80571F0(struct Entity * pokemon, struct Move *move);
bool8 sub_805727C(struct Entity * pokemon, struct Entity * target, s32 chance);
bool8 sub_8057308(struct Entity *pokemon, s32 chance);
bool8 CanAIUseMove(struct Entity *pokemon, s32 moveIndex, bool8 hasPPChecker);
bool8 CanMonsterUseMove(struct Entity *pokemon, struct Move *move, bool8 hasPPChecker);

View File

@ -27,23 +27,23 @@ typedef void (*DungeonCallback)(struct Entity *);
void sub_80855E4(DungeonCallback func)
{
bool8 bVar1;
bool8 flag;
struct Entity * entity;
struct Entity * partnerEntity;
s32 index;
bVar1 = FALSE;
flag = FALSE;
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
{
entity = gDungeon->teamPokemon[index];
if (EntityExists(entity)) {
if (entity->info->joinedAt == 0x41) {
bVar1 = TRUE;
flag = TRUE;
}
func(entity);
}
}
if ((!bVar1) && (partnerEntity = GetPartnerEntity(), partnerEntity != NULL)) {
if ((!flag) && (partnerEntity = GetPartnerEntity(), partnerEntity != NULL)) {
func(partnerEntity);
}
}

View File

@ -1,15 +1,196 @@
#include "global.h"
#include "weather.h"
#include "constants/ability.h"
#include "constants/item.h"
#include "constants/move_id.h"
#include "constants/type.h"
#include "constants/weather.h"
#include "dungeon_global_data.h"
#include "dungeon_items.h"
#include "dungeon_random.h"
#include "dungeon_leader.h"
#include "dungeon_util.h"
#include "code_80521D0.h"
#include "dungeon_ai.h"
#include "dungeon_pokemon_attributes.h"
#include "moves.h"
#include "move_util.h"
extern void TriggerWeatherAbilities(void);
extern void sub_807EAA0(u32, u32);
void sub_807E5E4(u8);
extern u8 UseAttack(struct Entity *);
extern void sub_805E804(void);
void sub_806A2BC(struct Entity *pokemon, u8 param_2);
extern u8 sub_8044B28(void);
extern void sub_80426C8(u32, u32);
extern void sub_8068FE0(struct Entity *, u32, struct Entity *r2);
extern void nullsub_93(struct Position *);
extern void sub_80522F4(struct Entity *, struct Entity *, u8 *);
extern void SetMessageArgument(char[], struct Entity*, u32);
extern void sub_806F370(struct Entity *r0, struct Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
extern void sub_80694C0(struct Entity *, s32, s32, u32);
extern void sub_804535C(struct Entity *, u32);
extern void sub_804AC20(struct Position *);
extern void sub_807EC28(u32);
extern void sub_806A5B8(struct Entity *);
extern u32 gUnknown_80F5FAC[];
extern u8 *gUnknown_80F9C4C[];
extern u8 *gUnknown_80F9C70[];
extern u8 *gUnknown_80F9C8C[];
extern u8 *gUnknown_80F9CBC[];
extern u8 gAvailablePokemonNames[];
extern u8 *gUnknown_80FCAC0[];
void sub_807E1A0(struct Entity *pokemon,struct Entity *target,u8 param_3,s16 param_4,s32 param_5)
{
struct EntityInfo *targetInfo;
u8 flag;
struct Move move;
s32 newHP;
s32 param_4_s32;
param_4_s32 = param_4;
if (EntityExists(target)) {
targetInfo = target->info;
InitPokemonMove(&move, MOVE_REGULAR_ATTACK);
if (!sub_80571F0(target,&move)) {
if (!targetInfo->isNotTeamMember) {
newHP = targetInfo->HP;
newHP /= 2;
if (MonsterIsType(target, TYPE_FIRE)) {
newHP /= 2;
}
if (newHP < 1) {
newHP = 1;
}
}
else {
newHP = param_5;
if (MonsterIsType(target, TYPE_FIRE)) {
newHP /= 2;
}
}
sub_806F370(pokemon,target,newHP,0,&flag,param_3,param_4_s32,0,0,0);
}
}
}
void sub_807E254(struct Entity *pokemon,struct Entity *target)
{
struct Position pokemonPos;
struct Position targetPos;
if (HasAbility(pokemon, ABILITY_SUCTION_CUPS)) {
SetMessageArgument(gAvailablePokemonNames,pokemon,0);
sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places
}
else if(HasAbility(target, ABILITY_SUCTION_CUPS))
{
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places
}
else
{
pokemonPos.x = pokemon->pos.x;
pokemonPos.y = pokemon->pos.y;
targetPos.x = target->pos.x;
targetPos.y = target->pos.y;
nullsub_93(&pokemonPos);
nullsub_93(&targetPos);
sub_80694C0(pokemon,targetPos.x,targetPos.y,1);
sub_80694C0(target,pokemonPos.x,pokemonPos.y,1);
sub_804535C(pokemon,0x0);
sub_804535C(target,0x0);
if (EntityExists(pokemon)) {
if (pokemon->info->isTeamLeader) {
sub_804AC20(&pokemon->pos);
sub_807EC28(0);
}
sub_806A5B8(pokemon);
sub_8075900(pokemon,gDungeon->unk3A08);
}
if (EntityExists(target)) {
if (target->info->isTeamLeader) {
sub_804AC20(&target->pos);
sub_807EC28(0);
}
sub_806A5B8(target);
sub_8075900(target,gDungeon->unk3A08);
}
}
}
void sub_807E378(void)
{
u16 uVar2;
struct Entity *leader;
leader = GetLeader();
if (EntityExists(leader)) {
uVar2 = gDungeon->windTurns;
if ((gDungeon->windTurns < 1) ||
(gDungeon->windTurns--, ((uVar2 - 1) << 0x10) < 1)) {
gDungeon->unk67A = 3;
}
if (gDungeon->unk67A == 0) {
if (gDungeon->windTurns < 0xfa) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9C4C);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],0);
gDungeon->unk67A = 1;
}
}
}
else if (gDungeon->unk67A == 1) {
if (gDungeon->windTurns < 0x96) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9C70);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],1);
gDungeon->unk67A = 2;
}
}
}
else if (gDungeon->unk67A == 2) {
if (gDungeon->windTurns < 0x32) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9C8C);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],2);
gDungeon->unk67A = 3;
}
}
}
else if (gDungeon->windTurns < 1) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9CBC);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],3);
gDungeon->unk67A = 4;
sub_8068FE0(leader,0x21e,leader);
}
}
}
}
u8 GetApparentWeather(struct Entity *pokemon)
{