mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-24 15:07:09 -05:00
Match sub_8071B48 thanks to @Eebit
This commit is contained in:
parent
3b8bc8f67b
commit
c0cd5d0048
|
|
@ -5,254 +5,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8071B48
|
||||
sub_8071B48:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x14
|
||||
movs r0, 0
|
||||
mov r8, r0
|
||||
ldr r0, _08071B94
|
||||
ldr r6, [r0]
|
||||
ldr r1, _08071B98
|
||||
adds r0, r6, r1
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r0, 0
|
||||
bne _08071B66
|
||||
b _08071D3E
|
||||
_08071B66:
|
||||
subs r1, 0x20
|
||||
adds r0, r6, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x15
|
||||
bne _08071B7C
|
||||
ldr r2, _08071B9C
|
||||
adds r0, r6, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08071B7C
|
||||
b _08071D3E
|
||||
_08071B7C:
|
||||
ldr r0, _08071BA0
|
||||
adds r1, r6, r0
|
||||
ldrh r0, [r1]
|
||||
adds r2, r0, 0x1
|
||||
strh r2, [r1]
|
||||
ldr r1, _08071BA4
|
||||
adds r0, r6, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08071BAC
|
||||
ldr r0, _08071BA8
|
||||
b _08071BAE
|
||||
.align 2, 0
|
||||
_08071B94: .4byte gDungeon
|
||||
_08071B98: .4byte 0x00000664
|
||||
_08071B9C: .4byte 0x000037fd
|
||||
_08071BA0: .4byte 0x00000662
|
||||
_08071BA4: .4byte 0x0000066e
|
||||
_08071BA8: .4byte gUnknown_80F4DAA
|
||||
_08071BAC:
|
||||
ldr r0, _08071C60
|
||||
_08071BAE:
|
||||
lsls r1, r2, 16
|
||||
asrs r1, 16
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
cmp r1, r0
|
||||
bge _08071BBC
|
||||
b _08071D3E
|
||||
_08071BBC:
|
||||
ldr r1, _08071C64
|
||||
adds r0, r6, r1
|
||||
movs r2, 0
|
||||
ldrsh r1, [r0, r2]
|
||||
movs r0, 0xE1
|
||||
lsls r0, 2
|
||||
cmp r1, r0
|
||||
ble _08071BF6
|
||||
ldr r1, _08071C68
|
||||
adds r0, r6, r1
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08071BF6
|
||||
ldrh r0, [r4, 0x26]
|
||||
ldr r2, _08071C6C
|
||||
adds r1, r6, r2
|
||||
ldr r1, [r1]
|
||||
cmp r0, r1
|
||||
bne _08071BF6
|
||||
ldr r0, _08071C70
|
||||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
bl SetMessageArgument
|
||||
mov r8, r4
|
||||
_08071BF6:
|
||||
ldr r1, _08071C64
|
||||
adds r0, r6, r1
|
||||
movs r1, 0
|
||||
strh r1, [r0]
|
||||
ldr r2, _08071C68
|
||||
adds r0, r6, r2
|
||||
str r1, [r0]
|
||||
movs r7, 0
|
||||
movs r5, 0
|
||||
_08071C08:
|
||||
lsls r0, r5, 2
|
||||
ldr r2, _08071C74
|
||||
adds r1, r6, r2
|
||||
adds r1, r0
|
||||
ldr r4, [r1]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08071C3A
|
||||
movs r1, 0x4
|
||||
ldrsh r0, [r4, r1]
|
||||
movs r2, 0x6
|
||||
ldrsh r1, [r4, r2]
|
||||
bl GetTile
|
||||
ldrh r0, [r0]
|
||||
movs r2, 0x80
|
||||
lsls r2, 1
|
||||
adds r1, r2, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _08071C3A
|
||||
adds r7, 0x1
|
||||
_08071C3A:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0xF
|
||||
ble _08071C08
|
||||
ldr r1, _08071C78
|
||||
adds r0, r6, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08071C92
|
||||
ldr r0, _08071C7C
|
||||
ldr r0, [r0]
|
||||
ldr r2, _08071C80
|
||||
adds r0, r2
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0xFF
|
||||
bne _08071C88
|
||||
ldr r0, _08071C84
|
||||
movs r1, 0
|
||||
ldrsh r0, [r0, r1]
|
||||
b _08071C8E
|
||||
.align 2, 0
|
||||
_08071C60: .4byte gUnknown_80F4DAC
|
||||
_08071C64: .4byte 0x00000662
|
||||
_08071C68: .4byte 0x00017b34
|
||||
_08071C6C: .4byte 0x00017b40
|
||||
_08071C70: .4byte gAvailablePokemonNames
|
||||
_08071C74: .4byte 0x0001358c
|
||||
_08071C78: .4byte 0x0000066e
|
||||
_08071C7C: .4byte gDungeon
|
||||
_08071C80: .4byte 0x00003a0c
|
||||
_08071C84: .4byte gUnknown_80F4DA6
|
||||
_08071C88:
|
||||
ldr r0, _08071CB8
|
||||
movs r2, 0
|
||||
ldrsh r0, [r0, r2]
|
||||
_08071C8E:
|
||||
cmp r7, r0
|
||||
bge _08071D3E
|
||||
_08071C92:
|
||||
mov r0, r8
|
||||
cmp r0, 0
|
||||
beq _08071CA8
|
||||
ldr r0, _08071CBC
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
bl sub_805239C
|
||||
mov r0, r8
|
||||
bl sub_8042920
|
||||
_08071CA8:
|
||||
ldr r1, _08071CC0
|
||||
adds r0, r6, r1
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08071CC4
|
||||
movs r5, 0xBE
|
||||
lsls r5, 1
|
||||
b _08071CCE
|
||||
.align 2, 0
|
||||
_08071CB8: .4byte gUnknown_80F4DA8
|
||||
_08071CBC: .4byte gUnknown_80FED68
|
||||
_08071CC0: .4byte 0x0000066e
|
||||
_08071CC4:
|
||||
movs r0, 0
|
||||
bl sub_803D970
|
||||
lsls r0, 16
|
||||
asrs r5, r0, 16
|
||||
_08071CCE:
|
||||
adds r0, r5, 0
|
||||
bl sub_803DA20
|
||||
adds r4, r0, 0
|
||||
cmp r4, 0
|
||||
bne _08071CDC
|
||||
movs r4, 0x1
|
||||
_08071CDC:
|
||||
adds r0, r5, 0
|
||||
movs r1, 0
|
||||
bl sub_806AA0C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08071D3E
|
||||
add r0, sp, 0xC
|
||||
bl sub_8083660
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08071D3E
|
||||
mov r0, sp
|
||||
movs r1, 0
|
||||
strh r5, [r0]
|
||||
strh r4, [r0, 0x8]
|
||||
strb r1, [r0, 0x2]
|
||||
movs r0, 0x64
|
||||
bl DungeonRandInt
|
||||
adds r4, r0, 0
|
||||
ldr r0, _08071D24
|
||||
ldr r0, [r0]
|
||||
ldr r2, _08071D28
|
||||
adds r0, r2
|
||||
ldrb r0, [r0]
|
||||
bl GetRandomMovementChance
|
||||
lsls r0, 16
|
||||
asrs r0, 16
|
||||
cmp r4, r0
|
||||
bge _08071D2C
|
||||
movs r0, 0x1
|
||||
b _08071D2E
|
||||
.align 2, 0
|
||||
_08071D24: .4byte gDungeon
|
||||
_08071D28: .4byte 0x00000644
|
||||
_08071D2C:
|
||||
movs r0, 0
|
||||
_08071D2E:
|
||||
str r0, [sp, 0x4]
|
||||
mov r1, sp
|
||||
movs r0, 0
|
||||
strb r0, [r1, 0x10]
|
||||
mov r0, sp
|
||||
movs r1, 0
|
||||
bl sub_806B7F8
|
||||
_08071D3E:
|
||||
add sp, 0x14
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8071B48
|
||||
|
||||
thumb_func_start sub_8071D4C
|
||||
sub_8071D4C:
|
||||
push {lr}
|
||||
|
|
@ -2224,4 +1976,4 @@ _08072C80: .4byte 0x0000013d
|
|||
_08072C84: .4byte gAdjacentTileOffsets
|
||||
thumb_func_end sub_8072B78
|
||||
|
||||
.align 2, 0
|
||||
.align 2, 0
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ const u8 *GetDungeonName1(u8 dungeon);
|
|||
u32 GetMaxItemsAllowed(u8 dungeon);
|
||||
s8 GetRescuesAllowed(u8 dungeon);
|
||||
bool8 HasCheckpoint(u8 dungeon);
|
||||
s16 GetRandomMovementChance(u8 dungeon);
|
||||
void PrintYellowDungeonNametoBuffer(u8 *buffer, DungeonLocation *dungeonLocation);
|
||||
void PrintDungeonLocationtoBuffer(u8 *buffer, DungeonLocation *dungeonLocation);
|
||||
|
||||
|
|
@ -48,4 +49,4 @@ u32 sub_80908D8(DungeonLocation *dungeon);
|
|||
u8 sub_8090910(DungeonLocation *dungeon, u32 param_2);
|
||||
bool8 sub_809095C(u8 dungeon);
|
||||
|
||||
#endif // GUARD_DUNGEON_H
|
||||
#endif // GUARD_DUNGEON_H
|
||||
|
|
|
|||
|
|
@ -99,7 +99,8 @@ typedef struct Dungeon
|
|||
u8 unk65C;
|
||||
u8 fill65D[0x660 - 0x65D];
|
||||
/* 0x660 */ s16 fractionalTurn; // Handles turn order when Pokémon have different movement speeds.
|
||||
u8 fill662[0x666 - 0x662];
|
||||
s16 unk662;
|
||||
s16 unk664;
|
||||
/* 0x666 */ s16 windTurns; // Turns remaining before getting swept out of the dungeon.
|
||||
/* 0x668 */ u16 unk668;
|
||||
u16 bossSongIndex;
|
||||
|
|
@ -139,7 +140,8 @@ typedef struct Dungeon
|
|||
/* 0x3904 */ s16 unk3904;
|
||||
u8 fill3906[0x3A08 - 0x3906];
|
||||
/* 0x3A08 */ u8 unk3A08;
|
||||
u8 fill3A09[0x3A0D - 0x3A09];
|
||||
u8 fill3A09[0x3A0C - 0x3A09];
|
||||
u8 unk3A0C;
|
||||
/* 0x3A0D */ u8 unk3A0D;
|
||||
/* 0x3A0E */ s16 tileset;
|
||||
/* 0x3A10 */ u16 unk3A10;
|
||||
|
|
@ -198,10 +200,10 @@ typedef struct Dungeon
|
|||
/* 0x15E2C */ Entity unk15E2C[0x40];
|
||||
/* 0x17B2C */ Entity *lightningRodPokemon;
|
||||
/* 0x17B30 */ Entity *snatchPokemon;
|
||||
/* 0x17B34 */ u8 fillunk1734[0x17B38 - 0x17B34];
|
||||
/* 0x17B34 */ Entity *unk17B34;
|
||||
/* 0x17B38 */ u32 unk17B38;
|
||||
/* 0x17B3C */ u32 unk17B3C;
|
||||
u8 fill17B40[0x17B44 - 0x17B40];
|
||||
/* 0x17B3C */ u32 unk17B40;
|
||||
/* 0x17B44 */ OpenedFile *sprites[MONSTER_MAX];
|
||||
/* 0x181E4 */ OpenedFile *paletFile;
|
||||
/* 0x181E8 */ Position cameraPos;
|
||||
|
|
@ -236,4 +238,4 @@ typedef struct Dungeon
|
|||
|
||||
extern Dungeon *gDungeon;
|
||||
|
||||
#endif // GUARD_STR_DUNGEON_H
|
||||
#endif // GUARD_STR_DUNGEON_H
|
||||
|
|
|
|||
|
|
@ -242,6 +242,7 @@ SECTIONS {
|
|||
src/dungeon_capabilities.o(.text);
|
||||
src/dungeon_ai_targeting.o(.text);
|
||||
src/dungeon_pokemon_attributes.o(.text);
|
||||
src/code_80718D8.o(.text);
|
||||
asm/code_80718D8.o(.text);
|
||||
src/dungeon_ai_leader.o(.text);
|
||||
asm/code_8072CF4.o(.text);
|
||||
|
|
|
|||
131
src/code_80718D8.c
Normal file
131
src/code_80718D8.c
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
#include "global.h"
|
||||
#include "constants/dungeon.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "dungeon.h"
|
||||
|
||||
struct unkStruct_806B7F8
|
||||
{
|
||||
s16 species;
|
||||
u8 unk2;
|
||||
u32 unk4;
|
||||
u16 level;
|
||||
u8 fillA[2];
|
||||
struct Position pos;
|
||||
u8 unk10;
|
||||
};
|
||||
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern s16 gUnknown_80F4DA6;
|
||||
extern s16 gUnknown_80F4DA8;
|
||||
extern s16 gUnknown_80F4DAA;
|
||||
extern s16 gUnknown_80F4DAC;
|
||||
extern u8 *gUnknown_80FED68[];
|
||||
|
||||
extern void SetMessageArgument(char[], struct Entity*, u32);
|
||||
extern void sub_806B7F8(struct unkStruct_806B7F8 *, u32);
|
||||
extern void sub_805239C(struct Entity *r0, const char r1[]);
|
||||
extern void sub_8042920(struct Entity *r0);
|
||||
extern s16 sub_803D970(u32);
|
||||
extern s32 sub_803DA20(s32 param_1);
|
||||
extern bool8 sub_806AA0C(s32, u32);
|
||||
extern bool8 sub_8083660(struct Position *param_1);
|
||||
|
||||
void sub_8071B48(void)
|
||||
{
|
||||
struct Tile *tile;
|
||||
struct Entity *entity2;
|
||||
struct Entity *entity;
|
||||
int index;
|
||||
int index1;
|
||||
int counter;
|
||||
struct Entity *entityPtr;
|
||||
s32 level;
|
||||
struct Dungeon *dungeon; // feels like a hack
|
||||
struct unkStruct_806B7F8 local_2c;
|
||||
|
||||
entityPtr = NULL;
|
||||
dungeon = gDungeon;
|
||||
if ((dungeon->unk664 != 0) &&
|
||||
((dungeon->dungeonLocation.id != DUNGEON_METEOR_CAVE || (dungeon->fill37FD[0] == 0)))) {
|
||||
dungeon->unk662++;
|
||||
if (dungeon->unk66E == 0) {
|
||||
if ( dungeon->unk662 < gUnknown_80F4DAA) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( dungeon->unk662 < gUnknown_80F4DAC) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (dungeon->unk662 > 900) {
|
||||
entity2 = dungeon->unk17B34;
|
||||
if ((EntityExists(entity2)) && (entity2->spawnGenID == dungeon->unk17B40)) {
|
||||
SetMessageArgument(gAvailablePokemonNames,entity2,0);
|
||||
entityPtr = entity2;
|
||||
}
|
||||
}
|
||||
|
||||
dungeon->unk662 = 0;
|
||||
dungeon->unk17B34 = NULL;
|
||||
|
||||
counter = 0;
|
||||
for(index = 0; index < DUNGEON_MAX_WILD_POKEMON; index++)
|
||||
{
|
||||
entity = dungeon->wildPokemon[index];
|
||||
if ((EntityExists(entity)) &&
|
||||
(tile = GetTile((entity->pos).x, (entity->pos).y),
|
||||
(tile->terrainType & 0x100) == 0)) {
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
if (dungeon->unk66E == 0) {
|
||||
if (gDungeon->unk3A0C == 0xff) {
|
||||
if (counter >= gUnknown_80F4DA6) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (counter >= gUnknown_80F4DA8) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if (entityPtr != NULL) {
|
||||
sub_805239C(0,*gUnknown_80FED68);
|
||||
sub_8042920(entityPtr);
|
||||
}
|
||||
if (dungeon->unk66E != 0) {
|
||||
index1 = 0x17c;
|
||||
}
|
||||
else {
|
||||
index1 = sub_803D970(0);
|
||||
}
|
||||
|
||||
level = sub_803DA20(index1);
|
||||
if (level == 0) {
|
||||
level = 1;
|
||||
}
|
||||
if ((sub_806AA0C(index1, 0)) && (sub_8083660(&local_2c.pos))) {
|
||||
local_2c.species = index1;
|
||||
local_2c.level = level;
|
||||
local_2c.unk2 = 0;
|
||||
if(DungeonRandInt(100) < GetRandomMovementChance(gDungeon->dungeonLocation.id))
|
||||
{
|
||||
local_2c.unk4 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
local_2c.unk4 = 0;
|
||||
}
|
||||
local_2c.unk10 = 0;
|
||||
sub_806B7F8(&local_2c, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user