mirror of
https://github.com/pret/pmd-red.git
synced 2026-07-29 23:08:09 -05:00
more trap decomp
This commit is contained in:
parent
e7e452299f
commit
9cae659e18
|
|
@ -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}
|
||||
|
|
|
|||
127
src/trap.c
127
src/trap.c
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user