From 00940175b4113bb09568deedaf091ecf53c5c8ea Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 1 Aug 2022 09:18:19 -0700 Subject: [PATCH] pre-flight decomp --- asm/code_807034C.s | 289 ------------------------------------------ include/pokemon.h | 2 + src/pokemon_mid.c | 8 +- src/status_checks_1.c | 117 +++++++++++++++++ 4 files changed, 123 insertions(+), 293 deletions(-) diff --git a/asm/code_807034C.s b/asm/code_807034C.s index 83d614fb4..30b20cdee 100644 --- a/asm/code_807034C.s +++ b/asm/code_807034C.s @@ -678,293 +678,4 @@ _08070820: .4byte gDungeonGlobalData _08070824: .4byte 0x0000066e thumb_func_end GetMovementSpeed - thumb_func_start sub_8070828 -sub_8070828: - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r6, r1, 24 - movs r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - bne _08070840 - movs r0, 0 - b _080708AE -_08070840: - adds r0, r4, 0 - movs r1, 0x1B - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0807085E - adds r0, r4, 0 - bl GetWeather - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _0807085E - movs r5, 0x1 -_0807085E: - adds r0, r4, 0 - movs r1, 0x4A - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0807087C - adds r0, r4, 0 - bl GetWeather - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0807087C - movs r5, 0x1 -_0807087C: - cmp r6, 0 - beq _080708A0 - ldr r0, [r4, 0x70] - movs r1, 0x40 - adds r2, r5, 0 - bl SetVisualFlags - lsls r0, 24 - cmp r0, 0 - beq _080708A0 - adds r0, r4, 0 - bl sub_80429B4 - ldr r0, _080708A8 - ldr r1, [r0] - adds r0, r4, 0 - bl SendMessage -_080708A0: - cmp r5, 0 - bne _080708AC - movs r0, 0x1 - b _080708AE .align 2, 0 -_080708A8: .4byte gUnknown_80FEE80 -_080708AC: - movs r0, 0x2 -_080708AE: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8070828 - - thumb_func_start SetMessageArgument_2 -SetMessageArgument_2: - push {r4,r5,lr} - adds r3, r0, 0 - adds r4, r2, 0 - ldr r0, _080708E8 - ldr r2, [r0] - ldr r5, _080708EC - adds r0, r2, r5 - ldrb r0, [r0] - cmp r0, 0 - bne _080708DC - adds r5, 0x6 - adds r0, r2, r5 - ldrb r0, [r0] - cmp r0, 0 - bne _080708DC - adds r0, r1, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080708F4 -_080708DC: - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _080708F4 - ldr r0, _080708F0 - b _08070900 - .align 2, 0 -_080708E8: .4byte gDungeonGlobalData -_080708EC: .4byte 0x0001820a -_080708F0: .4byte gUnknown_80F8988 -_080708F4: - adds r0, r1, 0 - adds r0, 0xC8 - ldrb r0, [r0] - cmp r0, 0x2 - bne _08070910 - ldr r0, _0807090C -_08070900: - ldr r1, [r0] - adds r0, r3, 0 - bl strcpy - b _0807095A - .align 2, 0 -_0807090C: .4byte gUnknown_80F8968 -_08070910: - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _08070942 - adds r0, r1, 0 - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x4A - beq _0807092A - adds r0, r1, 0 - adds r0, 0xA4 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08070936 -_0807092A: - movs r0, 0x4 - ldrsh r1, [r1, r0] - adds r0, r3, 0 - bl CopyYellowSpeciesNametoBuffer - b _0807095A -_08070936: - movs r5, 0x4 - ldrsh r1, [r1, r5] - adds r0, r3, 0 - bl CopyCyanSpeciesNametoBuffer - b _0807095A -_08070942: - ldr r2, _08070960 - ldrb r1, [r1, 0xA] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08070964 - adds r0, r1 - ldr r1, [r2] - adds r1, r0 - adds r0, r3, 0 - adds r2, r4, 0 - bl sub_808D9DC -_0807095A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08070960: .4byte gRecruitedPokemonRef -_08070964: .4byte 0x00008df8 - thumb_func_end SetMessageArgument_2 - - thumb_func_start sub_8070968 -sub_8070968: - push {r4,lr} - adds r4, r0, 0 - adds r3, r2, 0 - adds r0, r1, 0 - adds r0, 0xC8 - ldrb r0, [r0] - cmp r0, 0x2 - bne _08070990 - ldr r1, _08070988 - adds r2, 0x30 - ldr r0, _0807098C - ldr r3, [r0] - adds r0, r4, 0 - bl sprintf_2 - b _080709BA - .align 2, 0 -_08070988: .4byte gUnknown_8106FA4 -_0807098C: .4byte gUnknown_80F8974 -_08070990: - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _080709A2 - movs r0, 0x4 - ldrsh r1, [r1, r0] - adds r0, r4, 0 - bl CopyCyanSpeciesNametoBuffer - b _080709BA -_080709A2: - ldr r2, _080709C0 - ldrb r1, [r1, 0xA] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080709C4 - adds r0, r1 - ldr r1, [r2] - adds r1, r0 - adds r0, r4, 0 - adds r2, r3, 0 - bl sub_808D9DC -_080709BA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080709C0: .4byte gRecruitedPokemonRef -_080709C4: .4byte 0x00008df8 - thumb_func_end sub_8070968 - - thumb_func_start sub_80709C8 -sub_80709C8: - push {r4,lr} - adds r3, r0, 0 - ldr r0, _080709F8 - ldr r2, [r0] - ldr r4, _080709FC - adds r0, r2, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _080709EE - adds r4, 0x6 - adds r0, r2, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _080709EE - adds r0, r1, 0 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08070A04 -_080709EE: - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _08070A04 - ldr r0, _08070A00 - b _08070A10 - .align 2, 0 -_080709F8: .4byte gDungeonGlobalData -_080709FC: .4byte 0x0001820a -_08070A00: .4byte gUnknown_80F8994 -_08070A04: - adds r0, r1, 0 - adds r0, 0xC8 - ldrb r0, [r0] - cmp r0, 0x2 - bne _08070A20 - ldr r0, _08070A1C -_08070A10: - ldr r1, [r0] - adds r0, r3, 0 - bl strcpy - b _08070A48 - .align 2, 0 -_08070A1C: .4byte gUnknown_80F8974 -_08070A20: - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _08070A32 - movs r0, 0x4 - ldrsh r1, [r1, r0] - adds r0, r3, 0 - bl CopySpeciesNametoBuffer - b _08070A48 -_08070A32: - ldr r2, _08070A50 - ldrb r1, [r1, 0xA] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08070A54 - adds r0, r1 - ldr r1, [r2] - adds r1, r0 - adds r0, r3, 0 - bl sub_808DA0C -_08070A48: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08070A50: .4byte gRecruitedPokemonRef -_08070A54: .4byte 0x00008df8 - thumb_func_end sub_80709C8 - - .align 2, 0 \ No newline at end of file diff --git a/include/pokemon.h b/include/pokemon.h index c3135b7ca..186e8bceb 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -190,6 +190,8 @@ void CopySpeciesNametoBuffer(u8 * buffer, s16 index); void CopyYellowSpeciesNametoBuffer(u8 *buffer, s16 index); void CopyCyanSpeciesNametoBuffer(u8 *buffer, s16 index); void PrintColoredPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon, s32 colorNum); +void sub_808D9DC(u8 *buffer, struct PokemonStruct2 *param_2, s32 colorNum); +void sub_808DA0C(u8 *buffer, struct PokemonStruct2 *param_2); void PeekPokemonItem(s16 index_, struct HeldItem* item); void GivePokemonItem(s16 index_, struct HeldItem* item); bool8 IsPokemonRenamed(struct PokemonStruct* pokemon); diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index bc4004c54..d7dbe8f3b 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -281,22 +281,22 @@ void PrintColoredPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon, s32 sprintf_2(buffer,gUnknown_810763C,colorNum,nameBuffer); // {COLOR_2}%c%s{END_COLOR_TEXT_2} } -void sub_808D9DC(u8 *buffer, u8 *param_2, s32 colorNum) +void sub_808D9DC(u8 *buffer, struct PokemonStruct2 *param_2, s32 colorNum) { u8 nameBuffer [20]; - sub_80922B4(nameBuffer, param_2 + 0x58, POKEMON_NAME_LENGTH); + sub_80922B4(nameBuffer, param_2->name, POKEMON_NAME_LENGTH); if (colorNum == COLOR_WHITE) { colorNum = COLOR_YELLOW; } sprintf_2(buffer,gUnknown_810763C,colorNum,nameBuffer); // {COLOR_2}%c%s{END_COLOR_TEXT_2} } -void sub_808DA0C(u8 *buffer, u8 *param_2) +void sub_808DA0C(u8 *buffer, struct PokemonStruct2 *param_2) { u8 nameBuffer [20]; - sub_80922B4(nameBuffer, param_2 + 0x58, POKEMON_NAME_LENGTH); + sub_80922B4(nameBuffer, param_2->name, POKEMON_NAME_LENGTH); sprintf_2(buffer,gUnknown_8107638,nameBuffer); // %s } diff --git a/src/status_checks_1.c b/src/status_checks_1.c index 7070acded..b2c12e6df 100644 --- a/src/status_checks_1.c +++ b/src/status_checks_1.c @@ -1,7 +1,124 @@ #include "global.h" #include "status_checks_1.h" +#include "constants/ability.h" #include "constants/status.h" +#include "constants/weather.h" +#include "dungeon_global_data.h" +#include "dungeon_pokemon_attributes.h" +#include "dungeon_util.h" +#include "code_800D090.h" +#include "code_80521D0.h" +#include "pokemon.h" +#include "weather.h" + +extern void sub_80429B4(struct DungeonEntity *r0); + +extern u8 *gUnknown_80FEE80[]; +extern u8 *gUnknown_80F8974[]; +extern u8 *gUnknown_80F8994[]; +extern u8 *gUnknown_80F8968[]; +extern u8 *gUnknown_80F8988[]; +extern u8 gUnknown_8106FA4[]; + +u8 sub_8070828(struct DungeonEntity *pokemon, bool8 displayMessage) +{ + bool8 flag; + + flag = FALSE; + if (!EntityExists(pokemon)) { + return 0; + } + else { + if ((HasAbility(pokemon, ABILITY_SWIFT_SWIM)) && (GetWeather(pokemon) == WEATHER_RAIN)) { + flag = TRUE; + } + if ((HasAbility(pokemon, ABILITY_CHLOROPHYLL)) && (GetWeather(pokemon) == WEATHER_SUNNY)) { + flag = TRUE; + } + if (displayMessage && SetVisualFlags(pokemon->entityData, 0x40, flag)) { + sub_80429B4(pokemon); + SendMessage(pokemon, *gUnknown_80FEE80); + } + if (flag) { + return 2; + } + else { + return 1; + } + } +} + +void SetMessageArgument_2(u8 *buffer, struct DungeonEntityData *param_2, s32 colorNum) +{ + if (((gDungeonGlobalData->displayBlinker || + gDungeonGlobalData->displayCrossEyed) || + (param_2->transformStatus == TRANSFORM_STATUS_INVISIBLE)) && + (param_2->isEnemy)) + { + strcpy(buffer, *gUnknown_80F8988); + } + else + { + if (param_2->waitingStatus == WAITING_STATUS_DECOY) { + strcpy(buffer, *gUnknown_80F8968); + } + else + { + if (param_2->isEnemy) { + if ((param_2->joinLocation == 0x4A) || (param_2->clientType == CLIENT_TYPE_CLIENT)) { + CopyYellowSpeciesNametoBuffer(buffer, param_2->transformSpecies); + } + else + CopyCyanSpeciesNametoBuffer(buffer, param_2->transformSpecies); + } + else + { + sub_808D9DC(buffer, &gRecruitedPokemonRef->pokemon2[param_2->partyIndex],colorNum); + } + } + } +} + +void sub_8070968(u8 *buffer, struct DungeonEntityData *entityData, s32 colorNum) +{ + if (entityData->waitingStatus == WAITING_STATUS_DECOY) { + sprintf_2(buffer, gUnknown_8106FA4, colorNum + 0x30, *gUnknown_80F8974); + } + else if (entityData->isEnemy) { + CopyCyanSpeciesNametoBuffer(buffer, entityData->transformSpecies); + } + else { + sub_808D9DC(buffer, &gRecruitedPokemonRef->pokemon2[entityData->partyIndex], colorNum); + } +} + +void sub_80709C8(u8 *buffer, struct DungeonEntityData *entityData) +{ + if (((gDungeonGlobalData->displayBlinker || + gDungeonGlobalData->displayCrossEyed) || + (entityData->transformStatus == TRANSFORM_STATUS_INVISIBLE)) && + (entityData->isEnemy)) + { + strcpy(buffer, *gUnknown_80F8994); + } + else + { + if (entityData->waitingStatus == WAITING_STATUS_DECOY) { + strcpy(buffer, *gUnknown_80F8974); + } + else + { + if (entityData->isEnemy) { + CopySpeciesNametoBuffer(buffer, entityData->transformSpecies); + } + else + { + sub_808DA0C(buffer, &gRecruitedPokemonRef->pokemon2[entityData->partyIndex]); + } + } + } +} bool8 HasNegativeStatus(struct DungeonEntity *pokemon) {