more trap decomp

This commit is contained in:
Seth Barberee 2024-01-13 11:00:10 -08:00
parent e7e452299f
commit 9cae659e18
2 changed files with 121 additions and 264 deletions

View File

@ -5,264 +5,6 @@
.text
thumb_func_start HandleGrimyTrap
HandleGrimyTrap:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x58
mov r8, r0
adds r6, r1, 0
movs r0, 0
mov r9, r0
cmp r6, 0
beq _080804F0
ldr r7, [r6, 0x70]
movs r3, 0
ldrb r0, [r7, 0x7]
cmp r0, 0
beq _0808045A
ldr r0, _080804C0
movs r1, 0x1
mov r12, r1
ldr r2, [r0]
mov r4, sp
movs r5, 0x13
_08080444:
ldrb r1, [r2]
mov r0, r12
ands r0, r1
cmp r0, 0
beq _08080452
stm r4!, {r2}
adds r3, 0x1
_08080452:
adds r2, 0x4
subs r5, 0x1
cmp r5, 0
bge _08080444
_0808045A:
adds r2, r7, 0
adds r2, 0x60
ldrb r1, [r2]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _08080470
lsls r0, r3, 2
add r0, sp
str r2, [r0]
adds r3, 0x1
_08080470:
cmp r3, 0
ble _080804B6
mov r4, sp
adds r5, r3, 0
_08080478:
ldr r0, [r4]
ldrb r0, [r0, 0x2]
bl GetItemCategory
lsls r0, 24
lsrs r0, 24
cmp r0, 0x3
bne _080804AE
ldr r0, [r4]
ldrb r0, [r0, 0x2]
cmp r0, 0x54
beq _080804AE
movs r0, 0x64
bl DungeonRandInt
ldr r1, _080804C4
movs r2, 0
ldrsh r1, [r1, r2]
cmp r0, r1
bge _080804AE
movs r0, 0x1
add r9, r0
ldr r0, [r4]
movs r1, 0x54
movs r2, 0x2
bl sub_8045C28
_080804AE:
adds r4, 0x4
subs r5, 0x1
cmp r5, 0
bne _08080478
_080804B6:
mov r1, r9
cmp r1, 0x1
bne _080804CC
ldr r0, _080804C8
b _080804D4
.align 2, 0
_080804C0: .4byte gTeamInventoryRef
_080804C4: .4byte gUnknown_80F4E0E
_080804C8: .4byte gUnknown_80FD788
_080804CC:
mov r2, r9
cmp r2, 0
bne _080804E4
ldr r0, _080804E0
_080804D4:
ldr r2, [r0]
mov r0, r8
adds r1, r6, 0
bl sub_80522F4
b _080804F0
.align 2, 0
_080804E0: .4byte gUnknown_80FD7D4
_080804E4:
ldr r0, _08080500
ldr r2, [r0]
mov r0, r8
adds r1, r6, 0
bl sub_80522F4
_080804F0:
add sp, 0x58
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08080500: .4byte gUnknown_80FD7AC
thumb_func_end HandleGrimyTrap
thumb_func_start sub_8080504
sub_8080504:
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r6, r0, 0
adds r4, r1, 0
adds r7, r2, 0
movs r0, 0
mov r8, r0
cmp r4, 0
bne _0808051A
b _0808060E
_0808051A:
bl IsBossFight
lsls r0, 24
cmp r0, 0
beq _08080534
ldr r0, _08080530
ldr r1, [r0]
adds r0, r6, 0
bl SendMessage
b _0808060E
.align 2, 0
_08080530: .4byte gUnknown_80FED0C
_08080534:
ldr r5, [r4, 0x70]
adds r0, r4, 0
bl sub_8045888
lsls r0, 24
cmp r0, 0
beq _0808055E
adds r0, r7, 0
movs r1, 0x1B
bl sub_8080B00
movs r1, 0x1
mov r8, r1
ldr r1, _080805A4
adds r0, r4, 0
bl sub_80421C0
movs r0, 0x1E
movs r1, 0x48
bl sub_803E708
_0808055E:
ldrb r0, [r5, 0x7]
cmp r0, 0
beq _080805C4
bl sub_8043D10
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
beq _080805B4
movs r2, 0xAE
lsls r2, 1
adds r0, r5, r2
movs r1, 0x1
strb r1, [r0]
adds r2, 0x2
adds r0, r5, r2
strb r1, [r0]
movs r0, 0x28
movs r1, 0x4B
bl sub_803E708
ldr r0, _080805A8
movs r2, 0
ldrsh r1, [r0, r2]
ldr r3, _080805AC
adds r0, r4, 0
movs r2, 0x11
bl sub_806F324
ldr r0, _080805B0
ldr r1, [r0]
movs r0, 0x2
strb r0, [r1, 0x2]
b _0808060E
.align 2, 0
_080805A4: .4byte 0x00000193
_080805A8: .4byte gUnknown_80F4F8A
_080805AC: .4byte 0x00000215
_080805B0: .4byte gDungeon
_080805B4:
ldr r0, _080805C0
ldr r1, [r0]
adds r0, r6, 0
bl SendMessage
b _08080600
.align 2, 0
_080805C0: .4byte gUnknown_80F9728
_080805C4:
ldr r0, _080805E4
adds r1, r4, 0
movs r2, 0
bl SetMessageArgument
ldrb r0, [r5, 0x6]
cmp r0, 0
beq _080805EC
ldr r0, _080805E8
ldr r2, [r0]
adds r0, r6, 0
adds r1, r4, 0
bl sub_80522F4
b _080805F6
.align 2, 0
_080805E4: .4byte gAvailablePokemonNames
_080805E8: .4byte gUnknown_80F970C
_080805EC:
ldr r0, _08080618
ldr r1, [r0]
adds r0, r6, 0
bl sub_805239C
_080805F6:
ldr r1, _0808061C
adds r0, r4, 0
adds r2, r6, 0
bl sub_8068FE0
_08080600:
mov r0, r8
cmp r0, 0
beq _0808060E
adds r0, r7, 0
movs r1, 0x5
bl sub_8080B00
_0808060E:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08080618: .4byte gUnknown_80F970C
_0808061C: .4byte 0x00000215
thumb_func_end sub_8080504
thumb_func_start HandleSummonTrap
HandleSummonTrap:
push {r4-r7,lr}

View File

@ -8,6 +8,7 @@
#include "items.h"
#include "code_808417C.h"
#include "dungeon_engine.h"
#include "dungeon_items.h"
#include "dungeon_random.h"
#include "dungeon_map_access.h"
@ -29,19 +30,35 @@ extern s16 gUnknown_80F4E74[];
extern u8 *gUnknown_80FDC18[];
extern u8 *gUnknown_80FDC40[];
extern u8 *gUnknown_80FDC7C[];
extern u8 *gUnknown_80FD7AC[];
extern u8 *gUnknown_80FD788[];
extern u8 *gUnknown_80FD7D4[];
extern u8 *gUnknown_80F970C[];
extern u8 *gUnknown_80F9728[];
extern u8 *gUnknown_80FED0C[];
extern s16 gUnknown_80F4E0E;
extern s16 gUnknown_80F4F84;
extern s16 gUnknown_80F4F86;
extern u32 gUnknown_8106A4C;
extern u32 gUnknown_8106A50;
extern s16 gUnknown_80F4F8A;
bool8 sub_8045888(Entity *);
void sub_8080B00(Tile *, u32);
void sub_803E708(u32, u32);
u8 sub_8043D10(void);
void SetMessageArgument(u8 *, Entity *, u32);
void sub_8068FE0(Entity *, u32, Entity *);
void sub_805239C(Entity *, u8 *);
void sub_8045C28(Item *, u8 , u8);
void sub_8045BF8(u8 *, Item *);
void HandleTripTrap(Entity *pokemon,Entity *target);
void HandleMudTrap(Entity *pokemon,Entity *target);
void HandleStickyTrap(Entity *pokemon,Entity *target);
void HandleGrimyTrap(Entity *pokemon,Entity *target);
void HandleSummonTrap(Entity *pokemon,Position *pos);
void sub_8080504(Entity *pokemon,Entity *target,Tile *tile);
void HandlePitfallTrap(Entity *pokemon,Entity *target,Tile *tile);
void HandleWarpTrap(Entity *pokemon,Entity *target);
void HandleWhirlwindTrap(Entity *entity,Entity *target);
void HandleSpinTrap(Entity *pokemon,Entity *target);
@ -284,7 +301,7 @@ void sub_807FE9C(Entity *pokemon, Position *pos, int param_3, char param_4)
break;
case TRAP_PITFALL_TRAP:
case 0x1B: // ???
sub_8080504(pokemon,target,tile);
HandlePitfallTrap(pokemon,target,tile);
break;
case TRAP_WARP_TRAP:
HandleWarpTrap(pokemon,target);
@ -367,6 +384,8 @@ void HandleMudTrap(Entity *pokemon, Entity *target)
}
}
// https://decomp.me/scratch/Yq32k (Seth)
#ifdef NONMATCHING
void HandleStickyTrap(Entity *pokemon,Entity *target)
{
@ -594,13 +613,109 @@ void HandlePoisonTrap(Entity *pokemon, Entity *target)
PoisonedStatusTarget(pokemon, target, TRUE);
}
void HandleSelfdestructTrap(Entity *pokemon,Entity *target)
void HandleSelfdestructTrap(Entity *pokemon, Entity *target)
{
sub_807DF38(pokemon, target, &target->pos, 1, TYPE_NONE, 0x212);
sub_807DF38(pokemon, target, &target->pos, 1, TYPE_NONE, 0x212);
}
void HandleExplosionTrap(Entity *pokemon,Entity *target)
void HandleExplosionTrap(Entity *pokemon, Entity *target)
{
sub_807DF38(pokemon, target, &target->pos, 2, TYPE_NONE, 0x212);
sub_807DF38(pokemon, target, &target->pos, 2, TYPE_NONE, 0x212);
}
void HandleGrimyTrap(Entity *pokemon, Entity *target)
{
Item *item;
Item *heldItem;
int counter;
int index;
EntityInfo *info;
int badFoodCount;
Item *itemStack [22];
badFoodCount = 0;
if (target != NULL) {
info = target->info;
counter = 0;
if (info->isTeamLeader) {
for(index = 0; index < INVENTORY_SIZE; index++)
{
item = &gTeamInventoryRef->teamItems[index];
if ((item->flags & ITEM_FLAG_EXISTS)) {
itemStack[counter] = item;
counter++;
}
}
}
heldItem = &info->heldItem;
if ((heldItem->flags & ITEM_FLAG_EXISTS)) {
itemStack[counter] = heldItem;
counter++;
}
for (index = 0; index < counter; index++) {
if (((GetItemCategory(itemStack[index]->id) == CATEGORY_FOOD_GUMMIES) && (itemStack[index]->id != ITEM_GRIMY_FOOD)) &&
(DungeonRandInt(100) < gUnknown_80F4E0E)) {
badFoodCount++;
sub_8045C28(itemStack[index], ITEM_GRIMY_FOOD, 2);
}
}
if (badFoodCount == 1) {
sub_80522F4(pokemon,target,*gUnknown_80FD788); // A food item went bad.
}
else if (badFoodCount == 0) {
sub_80522F4(pokemon,target,*gUnknown_80FD7D4); // Nothing particularly bad happened.
}
else
{
sub_80522F4(pokemon,target,*gUnknown_80FD7AC); // Several food items went bad
}
}
}
void HandlePitfallTrap(Entity *pokemon, Entity *target, Tile *tile)
{
bool8 flag;
EntityInfo *info;
flag = FALSE;
if (target != NULL) {
if (IsBossFight()) {
SendMessage(pokemon,*gUnknown_80FED0C); // But nothing happened...
}
else
{
info = target->info;
if (sub_8045888(target)) {
sub_8080B00(tile, 0x1B);
flag = TRUE;
sub_80421C0(target,0x193);
sub_803E708(0x1e,0x48);
}
if (info->isTeamLeader) {
if (sub_8043D10() != 2) {
info->unk15C = 1;
info->unk15E = 1;
sub_803E708(0x28,0x4b);
sub_806F324(target,gUnknown_80F4F8A,0x11,0x215);
gDungeon->unk2 = 2;
return;
}
SendMessage(pokemon,*gUnknown_80F9728);
}
else
{
SetMessageArgument(gAvailablePokemonNames,target,0);
if (info->isNotTeamMember) {
sub_80522F4(pokemon,target,*gUnknown_80F970C); // $m0 fell into the pitfall!
}
else {
sub_805239C(pokemon,*gUnknown_80F970C); // $m0 fell into the pitfall!
}
sub_8068FE0(target,0x215,pokemon);
}
if (flag) {
sub_8080B00(tile, 5);
}
}
}
}