diff options
Diffstat (limited to 'src/field_poison.c')
-rw-r--r-- | src/field_poison.c | 84 |
1 files changed, 43 insertions, 41 deletions
diff --git a/src/field_poison.c b/src/field_poison.c index 309ec1d71..8c9e029e1 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -1,12 +1,14 @@ #include "global.h" -#include "asm.h" +#include "field_poison.h" #include "field_message_box.h" +#include "fldeff_80C5CD4.h" #include "pokemon.h" +#include "pokemon_summary_screen.h" #include "script.h" #include "string_util.h" #include "task.h" +#include "text.h" -extern struct Pokemon gPlayerParty[6]; extern u16 gScriptResult; extern u8 fieldPoisonText_PokemonFainted[]; @@ -14,7 +16,7 @@ bool32 CheckMonIsValid(struct Pokemon *pkmn) { // UB: Too few arguments for function 'GetMonData' u16 species2 = GetMonData(pkmn, MON_DATA_SPECIES2); - + if (species2 == 0 || species2 == 0x19C) return FALSE; else @@ -25,7 +27,7 @@ bool32 AllMonsFainted(void) { struct Pokemon *pkmn = &gPlayerParty[0]; int i; - + for (i = 0; i < 6; i++, pkmn++) { // UB: Too few arguments for function 'GetMonData' @@ -39,7 +41,7 @@ void MonFaintFromPoisonOnField(u8 partyMember) { struct Pokemon *pkmn = &gPlayerParty[partyMember]; u32 val = 0; - + AdjustFriendship(pkmn, 7); SetMonData(pkmn, MON_DATA_STATUS, (u8*)&val); GetMonData(pkmn, MON_DATA_NICKNAME, gStringVar1); @@ -49,7 +51,7 @@ void MonFaintFromPoisonOnField(u8 partyMember) bool32 CheckMonFaintedFromPoison(u8 partyMember) { struct Pokemon *pkmn = &gPlayerParty[partyMember]; - + // UB: Too few arguments for function 'GetMonData' if (CheckMonIsValid(pkmn) && GetMonData(pkmn, MON_DATA_HP) == 0 && pokemon_ailments_get_primary(GetMonData(pkmn, MON_DATA_STATUS)) == 1) @@ -68,74 +70,74 @@ enum void Task_WhiteOut(u8 taskId) { s16 *taskData = gTasks[taskId].data; - + switch (taskData[TD_STATE]) { - case 0: //Check if Pokemon have fainted due to poison - while (taskData[TD_PARTY_MEMBER] < 6) + case 0: //Check if Pokemon have fainted due to poison + while (taskData[TD_PARTY_MEMBER] < 6) + { + if (CheckMonFaintedFromPoison(taskData[TD_PARTY_MEMBER])) { - if (CheckMonFaintedFromPoison(taskData[TD_PARTY_MEMBER])) - { - MonFaintFromPoisonOnField(taskData[TD_PARTY_MEMBER]); - ShowFieldMessage(fieldPoisonText_PokemonFainted); - taskData[TD_STATE]++; - return; - } - taskData[TD_PARTY_MEMBER]++; + MonFaintFromPoisonOnField(taskData[TD_PARTY_MEMBER]); + ShowFieldMessage(fieldPoisonText_PokemonFainted); + taskData[TD_STATE]++; + return; } - taskData[TD_STATE] = 2; - break; - case 1: //Wait for message box to disappear - if (IsFieldMessageBoxHidden()) - taskData[TD_STATE]--; //Check next party member - break; - case 2: //Done checking Pokemon - if (AllMonsFainted()) - gScriptResult = 1; - else - gScriptResult = 0; - EnableBothScriptContexts(); - DestroyTask(taskId); - break; + taskData[TD_PARTY_MEMBER]++; + } + taskData[TD_STATE] = 2; + break; + case 1: //Wait for message box to disappear + if (IsFieldMessageBoxHidden()) + taskData[TD_STATE]--; //Check next party member + break; + case 2: //Done checking Pokemon + if (AllMonsFainted()) + gScriptResult = 1; + else + gScriptResult = 0; + EnableBothScriptContexts(); + DestroyTask(taskId); + break; } } -void DoWhiteOut(void) +void ExecuteWhiteOut(void) { CreateTask(Task_WhiteOut, 0x50); ScriptContext1_Stop(); } -u8 overworld_poison(void) +s32 overworld_poison(void) { struct Pokemon *pkmn = &gPlayerParty[0]; u32 numPoisoned = 0; u32 numFainting = 0; int i; - - for(i = 0; i < 6; i++) + + for (i = 0; i < 6; i++) { u32 hp; - + // UB: Too few arguments for function 'GetMonData' if (GetMonData(pkmn, MON_DATA_SANITY_BIT2) != 0 && pokemon_ailments_get_primary(GetMonData(pkmn, MON_DATA_STATUS)) == 1) { hp = GetMonData(pkmn, MON_DATA_HP); - if(hp != 0) + if (hp != 0) hp--; - if(hp == 0) + if (hp == 0) numFainting++; //Pokemon will now faint due to poison SetMonData(pkmn, MON_DATA_HP, (u8 *)&hp); numPoisoned++; } pkmn++; } - if(numFainting != 0 || numPoisoned != 0) + if (numFainting != 0 || numPoisoned != 0) DoFieldPoisonEffect(); - if(numFainting != 0) + if (numFainting != 0) return 2; - if(numPoisoned != 0) + if (numPoisoned != 0) return 1; return 0; } |