sub_807EAA0

This commit is contained in:
DizzyEggg 2024-12-04 19:36:24 +01:00
parent c9e26cabec
commit b6e4f986ea
5 changed files with 66 additions and 193 deletions

View File

@ -5,196 +5,6 @@
.text
thumb_func_start sub_807EAA0
sub_807EAA0:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0xC
lsls r0, 24
lsrs r0, 24
str r0, [sp]
lsls r1, 24
lsrs r1, 24
str r1, [sp, 0x4]
movs r0, 0
mov r8, r0
movs r1, 0x1
negs r1, r1
mov r9, r1
movs r2, 0
str r2, [sp, 0x8]
bl GetApparentWeather
lsls r0, 24
lsrs r0, 24
mov r10, r0
movs r5, 0
ldr r7, _0807EAF0
ldr r6, _0807EAF4
_0807EAD6:
ldr r3, [r7]
adds r0, r3, r6
adds r4, r0, r5
ldr r1, _0807EAF8
adds r0, r3, r1
adds r0, r5
ldrb r0, [r0]
ldrb r2, [r4]
adds r1, r0, 0
cmp r2, r1
bcs _0807EAFC
strb r0, [r4]
b _0807EB08
.align 2, 0
_0807EAF0: .4byte gDungeon
_0807EAF4: .4byte 0x0000e267
_0807EAF8: .4byte 0x0000e26f
_0807EAFC:
cmp r2, r1
bls _0807EB08
adds r0, r5, r6
adds r0, r3, r0
bl sub_80838EC
_0807EB08:
ldr r0, [r7]
ldr r2, _0807EB38
adds r0, r2
adds r0, r5
ldrb r1, [r0]
ldr r0, _0807EB3C
cmp r8, r1
bge _0807EB1C
mov r8, r1
mov r9, r5
_0807EB1C:
adds r5, 0x1
cmp r5, 0x7
ble _0807EAD6
mov r1, r9
cmp r1, 0
bge _0807EB44
ldr r0, [r0]
ldr r2, _0807EB40
adds r1, r0, r2
ldrb r1, [r1]
subs r2, 0x1
adds r0, r2
strb r1, [r0]
b _0807EB4E
.align 2, 0
_0807EB38: .4byte 0x0000e267
_0807EB3C: .4byte gDungeon
_0807EB40: .4byte 0x0000e265
_0807EB44:
ldr r0, [r0]
ldr r1, _0807EB94
adds r0, r1
mov r2, r9
strb r2, [r0]
_0807EB4E:
ldr r0, _0807EB98
ldr r1, [r0]
ldr r2, _0807EB9C
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
beq _0807EB64
ldr r0, _0807EB94
adds r1, r0
movs r0, 0
strb r0, [r1]
_0807EB64:
movs r0, 0
bl GetApparentWeather
lsls r0, 24
lsrs r0, 24
cmp r10, r0
bne _0807EB78
ldr r1, [sp, 0x4]
cmp r1, 0
beq _0807EB82
_0807EB78:
movs r2, 0x1
str r2, [sp, 0x8]
ldr r0, [sp]
bl sub_807E698
_0807EB82:
ldr r0, _0807EB98
ldr r0, [r0]
ldr r2, _0807EBA0
adds r1, r0, r2
ldrb r0, [r1]
cmp r0, 0
beq _0807EBA4
subs r0, 0x1
b _0807EBA6
.align 2, 0
_0807EB94: .4byte 0x0000e264
_0807EB98: .4byte gDungeon
_0807EB9C: .4byte 0x0000e279
_0807EBA0: .4byte 0x0000e266
_0807EBA4:
movs r0, 0x9
_0807EBA6:
strb r0, [r1]
ldr r4, _0807EC14
ldr r0, [r4]
ldr r2, _0807EC18
adds r1, r0, r2
ldrb r0, [r1]
cmp r0, 0
beq _0807EBD4
adds r0, r1, 0
bl sub_80838EC
ldr r0, [r4]
ldr r1, _0807EC18
adds r0, r1
ldrb r0, [r0]
cmp r0, 0
bne _0807EBD4
bl GetLeader
ldr r1, _0807EC1C
ldr r1, [r1]
bl LogMessageByIdWithPopupCheckUser
_0807EBD4:
ldr r4, _0807EC14
ldr r0, [r4]
ldr r2, _0807EC20
adds r1, r0, r2
ldrb r0, [r1]
cmp r0, 0
beq _0807EC00
adds r0, r1, 0
bl sub_80838EC
ldr r0, [r4]
ldr r1, _0807EC20
adds r0, r1
ldrb r0, [r0]
cmp r0, 0
bne _0807EC00
bl GetLeader
ldr r1, _0807EC24
ldr r1, [r1]
bl LogMessageByIdWithPopupCheckUser
_0807EC00:
ldr r0, [sp, 0x8]
add sp, 0xC
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0807EC14: .4byte gDungeon
_0807EC18: .4byte 0x0000e277
_0807EC1C: .4byte gUnknown_80FA778
_0807EC20: .4byte 0x0000e278
_0807EC24: .4byte gUnknown_80FA758
thumb_func_end sub_807EAA0
thumb_func_start sub_807EC28
sub_807EC28:

View File

@ -16,4 +16,4 @@ gUnknown_80F4D64: @ 80F4D64
gUnknown_80F4D8C: @ 80F4D8C
@ replacing .incbin "baserom.gba", 0x000f4d8c, 0x14
.string "mapparam\0"
.align 2,0
.align 2,0

View File

@ -20,7 +20,7 @@
#define DUNGEON_MAX_ITEMS 64
// size: 0x18
typedef struct Weather
typedef struct Weather // 0xE264
{
/* 0x0 */ u8 weather; // Uses the weather constants in weather.h.
/* 0x1 */ u8 unkE265; // Uses the weather constants in weather.h

View File

@ -26,11 +26,14 @@ extern s32 GetMonsterApparentID(Entity *pokemon, s32 id);
void sub_803E874(bool8 r10, s32 r9);
void GetWeatherName(u8 *dst, u8 weatherId);
extern s32 CalculateStatusTurns(Entity *target, const s16 *turnRange, bool8 factorCurerSkills);
extern void sub_80838EC(u8 *a);
void sub_807E7FC(bool8 arg0);
void sub_807E8F0(Entity *pokemon);
extern const u8 *const gUnknown_80FC5E0;
extern const u8 *const gUnknown_80FA778;
extern const u8 *const gUnknown_80FA758;
// Note: gUnknown_202ECA0 file's 2d array is read as 1d array in functions below, be careful!
void sub_807E698(bool8 arg0)
@ -202,3 +205,64 @@ void MudWaterSportEffect(u8 which)
LogMessageByIdWithPopupCheckUser(GetLeader(), gUnknown_80FADB0);
}
}
bool8 sub_807EAA0(bool8 arg0, bool8 arg1)
{
s32 i;
s32 var = 0;
s32 index = -1;
bool8 ret = FALSE;
s32 weatherBefore = GetApparentWeather(NULL);
for (i = 0; i < 8; i++) {
if (gDungeon->weather.unkE267[i] < gDungeon->weather.naturalWeather[i]) {
gDungeon->weather.unkE267[i] = gDungeon->weather.naturalWeather[i];
}
else if (gDungeon->weather.unkE267[i] > gDungeon->weather.naturalWeather[i]) {
sub_80838EC(&gDungeon->weather.unkE267[i]);
}
if (var < gDungeon->weather.unkE267[i]) {
var = gDungeon->weather.unkE267[i];
index = i;
}
}
if (index < 0) {
gDungeon->weather.weather = gDungeon->weather.unkE265;
}
else {
gDungeon->weather.weather = index;
}
if (gDungeon->weather.nullifyWeather) {
gDungeon->weather.weather = 0;
}
if (weatherBefore != GetApparentWeather(NULL) || arg1) {
ret = TRUE;
sub_807E698(arg0);
}
if (gDungeon->weather.weatherDamageCounter != 0) {
gDungeon->weather.weatherDamageCounter--;
}
else {
gDungeon->weather.weatherDamageCounter = 9;
}
if (gDungeon->weather.mudSportTurns != 0) {
sub_80838EC(&gDungeon->weather.mudSportTurns);
if (gDungeon->weather.mudSportTurns == 0) {
LogMessageByIdWithPopupCheckUser(GetLeader(), gUnknown_80FA778);
}
}
if (gDungeon->weather.waterSportTurns != 0) {
sub_80838EC(&gDungeon->weather.waterSportTurns);
if (gDungeon->weather.waterSportTurns == 0) {
LogMessageByIdWithPopupCheckUser(GetLeader(), gUnknown_80FA758);
}
}
return ret;
}

View File

@ -1130,4 +1130,3 @@ const struct CalledMove gNaturePowerCalledMoves[] =
{MOVE_SURF, HandleRegularDamagingMove},
{MOVE_ROCK_SLIDE, HandleRegularDamagingMove},
};