Merge branch '_RHH/master' into _RHH/upcoming

This commit is contained in:
Eduardo Quezada 2024-12-21 08:46:33 -03:00
commit 25075239a2
65 changed files with 318 additions and 183 deletions

View File

@ -1226,6 +1226,13 @@
.4byte \products
.endm
@ Used as the endpoint for a Pokemart item list
.macro pokemartlistend
.2byte ITEM_NONE
release
end
.endm
@ Opens the Pokemart system and treats the list of items as decorations.
@ Products should be a list of .2byte decoration values preceded by an .align 2
.macro pokemartdecoration products:req

View File

@ -2798,6 +2798,10 @@ BattleScript_EffectHitEscape::
jumpifbattleend BattleScript_HitEscapeEnd
jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_HitEscapeEnd
jumpifemergencyexited BS_TARGET, BattleScript_HitEscapeEnd
jumpiffainted BS_TARGET, FALSE, BattleScript_HitEscapeSwitch
setbyte sGIVEEXP_STATE, 0
getexp BS_TARGET
BattleScript_HitEscapeSwitch:
goto BattleScript_MoveSwitchPursuit
BattleScript_HitEscapeEnd:
end

View File

@ -28,9 +28,7 @@ BattleFrontier_Mart_Pokemart:
.2byte ITEM_ZINC
.2byte ITEM_CARBOS
.2byte ITEM_HP_UP
.2byte ITEM_NONE
release
end
pokemartlistend
BattleFrontier_Mart_EventScript_OldMan::
msgbox BattleFrontier_Mart_Text_ChaperonGrandson, MSGBOX_NPC

View File

@ -45,9 +45,7 @@ EverGrandeCity_PokemonLeague_1F_Pokemart:
.2byte ITEM_FULL_HEAL
.2byte ITEM_REVIVE
.2byte ITEM_MAX_REPEL
.2byte ITEM_NONE
release
end
pokemartlistend
@ The door guards only check for FLAG_BADGE06_GET because Winonas badge is the only one that can be skipped
@ Its assumed the player has the remaining badges

View File

@ -25,9 +25,7 @@ FallarborTown_Mart_Pokemart:
.2byte ITEM_X_DEFENSE
.2byte ITEM_DIRE_HIT
.2byte ITEM_GUARD_SPEC
.2byte ITEM_NONE
release
end
pokemartlistend
FallarborTown_Mart_EventScript_Woman::
msgbox FallarborTown_Mart_Text_DecidingSkittyEvolve, MSGBOX_NPC

View File

@ -29,9 +29,7 @@ FortreeCity_DecorationShop_PokemartDecor_Desks:
.2byte DECOR_BRICK_DESK
.2byte DECOR_CAMP_DESK
.2byte DECOR_HARD_DESK
.2byte DECOR_NONE
release
end
pokemartlistend
FortreeCity_DecorationShop_EventScript_ClerkChairs::
lock
@ -53,9 +51,7 @@ FortreeCity_DecorationShop_PokemartDecor_Chairs:
.2byte DECOR_BRICK_CHAIR
.2byte DECOR_CAMP_CHAIR
.2byte DECOR_HARD_CHAIR
.2byte DECOR_NONE
release
end
pokemartlistend
FortreeCity_DecorationShop_Text_MerchandiseSentToPC:
.string "Merchandise you buy here is sent to\n"

View File

@ -23,9 +23,7 @@ FortreeCity_Mart_Pokemart:
.2byte ITEM_REVIVE
.2byte ITEM_SUPER_REPEL
.2byte ITEM_WOOD_MAIL
.2byte ITEM_NONE
release
end
pokemartlistend
FortreeCity_Mart_EventScript_Woman::
msgbox FortreeCity_Mart_Text_SuperRepelBetter, MSGBOX_NPC

View File

@ -17,9 +17,7 @@ LavaridgeTown_HerbShop_Pokemart:
.2byte ITEM_ENERGY_ROOT
.2byte ITEM_HEAL_POWDER
.2byte ITEM_REVIVAL_HERB
.2byte ITEM_NONE
release
end
pokemartlistend
LavaridgeTown_HerbShop_EventScript_ExpertM::
msgbox LavaridgeTown_HerbShop_Text_HerbalMedicineWorksButMonWillDislike, MSGBOX_NPC

View File

@ -22,9 +22,7 @@ LavaridgeTown_Mart_Pokemart:
.2byte ITEM_REVIVE
.2byte ITEM_SUPER_REPEL
.2byte ITEM_X_SPEED
.2byte ITEM_NONE
release
end
pokemartlistend
LavaridgeTown_Mart_EventScript_ExpertM::
msgbox LavaridgeTown_Mart_Text_XSpeedFirstStrike, MSGBOX_NPC

View File

@ -36,9 +36,7 @@ LilycoveCity_DepartmentStore_2F_Pokemart1:
.2byte ITEM_ICE_HEAL
.2byte ITEM_AWAKENING
.2byte ITEM_FLUFFY_TAIL
.2byte ITEM_NONE
release
end
pokemartlistend
LilycoveCity_DepartmentStore_2F_EventScript_ClerkRight::
lock
@ -62,9 +60,7 @@ LilycoveCity_DepartmentStore_2F_Pokemart2:
.2byte ITEM_MAX_REPEL
.2byte ITEM_WAVE_MAIL
.2byte ITEM_MECH_MAIL
.2byte ITEM_NONE
release
end
pokemartlistend
LilycoveCity_DepartmentStore_2F_Text_LearnToUseItemsProperly:
.string "Learn to use items properly.\n"

View File

@ -19,9 +19,7 @@ LilycoveCity_DepartmentStore_3F_Pokemart_Vitamins:
.2byte ITEM_ZINC
.2byte ITEM_CARBOS
.2byte ITEM_HP_UP
.2byte ITEM_NONE
release
end
pokemartlistend
LilycoveCity_DepartmentStore_3F_EventScript_ClerkRight::
lock
@ -42,9 +40,7 @@ LilycoveCity_DepartmentStore_3F_Pokemart_StatBoosters:
.2byte ITEM_DIRE_HIT
.2byte ITEM_GUARD_SPEC
.2byte ITEM_X_ACCURACY
.2byte ITEM_NONE
release
end
pokemartlistend
LilycoveCity_DepartmentStore_3F_EventScript_TriathleteM::
msgbox LilycoveCity_DepartmentStore_3F_Text_ItemsBestForTougheningPokemon, MSGBOX_NPC

View File

@ -29,9 +29,7 @@ LilycoveCity_DepartmentStore_4F_Pokemart_AttackTMs:
.2byte ITEM_TM_THUNDER
.2byte ITEM_TM_BLIZZARD
.2byte ITEM_TM_HYPER_BEAM
.2byte ITEM_NONE
release
end
pokemartlistend
LilycoveCity_DepartmentStore_4F_EventScript_ClerkRight::
lock
@ -49,9 +47,7 @@ LilycoveCity_DepartmentStore_4F_Pokemart_DefenseTMs:
.2byte ITEM_TM_SAFEGUARD
.2byte ITEM_TM_REFLECT
.2byte ITEM_TM_LIGHT_SCREEN
.2byte ITEM_NONE
release
end
pokemartlistend
LilycoveCity_DepartmentStore_4F_Text_AttackOrDefenseTM:
.string "Hmm…\p"

View File

@ -41,9 +41,7 @@ LilycoveCity_DepartmentStore_5F_Pokemart_Dolls:
.2byte DECOR_SKITTY_DOLL
.2byte DECOR_SWABLU_DOLL
.2byte DECOR_GULPIN_DOLL
.2byte DECOR_NONE
release
end
pokemartlistend
LilycoveCity_DepartmentStore_5F_EventScript_ClerkMidLeft::
lock
@ -66,9 +64,7 @@ LilycoveCity_DepartmentStore_5F_Pokemart_Cushions:
.2byte DECOR_GRASS_CUSHION
.2byte DECOR_FIRE_CUSHION
.2byte DECOR_WATER_CUSHION
.2byte DECOR_NONE
release
end
pokemartlistend
LilycoveCity_DepartmentStore_5F_EventScript_ClerkMidRight::
lock
@ -91,9 +87,7 @@ LilycoveCity_DepartmentStore_5F_Pokemart_Posters:
.2byte DECOR_LONG_POSTER
.2byte DECOR_SEA_POSTER
.2byte DECOR_SKY_POSTER
.2byte DECOR_NONE
release
end
pokemartlistend
LilycoveCity_DepartmentStore_5F_EventScript_ClerkFarRight::
lock
@ -117,9 +111,7 @@ LilycoveCity_DepartmentStore_5F_Pokemart_Mats:
.2byte DECOR_GLITTER_MAT
.2byte DECOR_JUMP_MAT
.2byte DECOR_SPIN_MAT
.2byte DECOR_NONE
release
end
pokemartlistend
LilycoveCity_DepartmentStore_5F_EventScript_PokefanF::
msgbox LilycoveCity_DepartmentStore_5F_Text_PlaceFullOfCuteDolls, MSGBOX_NPC

View File

@ -25,9 +25,7 @@ MauvilleCity_Mart_Pokemart:
.2byte ITEM_GUARD_SPEC
.2byte ITEM_DIRE_HIT
.2byte ITEM_X_ACCURACY
.2byte ITEM_NONE
release
end
pokemartlistend
MauvilleCity_Mart_EventScript_ExpertM::
msgbox MauvilleCity_Mart_Text_ItemsToTemporarilyElevateStats, MSGBOX_NPC

View File

@ -22,9 +22,7 @@ MossdeepCity_Mart_Pokemart:
.2byte ITEM_MAX_REPEL
.2byte ITEM_X_ATTACK
.2byte ITEM_X_DEFENSE
.2byte ITEM_NONE
release
end
pokemartlistend
MossdeepCity_Mart_EventScript_Woman::
msgbox MossdeepCity_Mart_Text_ReviveIsFantastic, MSGBOX_NPC

View File

@ -18,9 +18,7 @@ OldaleTown_Mart_Pokemart_Basic:
.2byte ITEM_ANTIDOTE
.2byte ITEM_PARALYZE_HEAL
.2byte ITEM_AWAKENING
.2byte ITEM_NONE
release
end
pokemartlistend
OldaleTown_Mart_ExpandedItems::
pokemart OldaleTown_Mart_Pokemart_Expanded
@ -35,9 +33,7 @@ OldaleTown_Mart_Pokemart_Expanded:
.2byte ITEM_ANTIDOTE
.2byte ITEM_PARALYZE_HEAL
.2byte ITEM_AWAKENING
.2byte ITEM_NONE
release
end
pokemartlistend
OldaleTown_Mart_EventScript_Woman::
lock

View File

@ -25,9 +25,7 @@ PetalburgCity_Mart_Pokemart_Basic:
.2byte ITEM_X_ATTACK
.2byte ITEM_X_DEFENSE
.2byte ITEM_ORANGE_MAIL
.2byte ITEM_NONE
release
end
pokemartlistend
PetalburgCity_Mart_EventScript_ExpandedItems::
pokemart PetalburgCity_Mart_Pokemart_Expanded
@ -50,9 +48,7 @@ PetalburgCity_Mart_Pokemart_Expanded:
.2byte ITEM_X_ATTACK
.2byte ITEM_X_DEFENSE
.2byte ITEM_ORANGE_MAIL
.2byte ITEM_NONE
release
end
pokemartlistend
PetalburgCity_Mart_EventScript_Woman::
msgbox PetalburgCity_Mart_Text_WeakWillGrowStronger, MSGBOX_NPC

View File

@ -59,9 +59,7 @@ Route104_PrettyPetalFlowerShop_Pokemart_Plants:
.2byte DECOR_COLORFUL_PLANT
.2byte DECOR_BIG_PLANT
.2byte DECOR_GORGEOUS_PLANT
.2byte DECOR_NONE
release
end
pokemartlistend
Route104_PrettyPetalFlowerShop_EventScript_WailmerPailGirl::
lock

View File

@ -28,9 +28,7 @@ RustboroCity_Mart_Pokemart_Basic:
.2byte ITEM_X_SPEED
.2byte ITEM_X_ATTACK
.2byte ITEM_X_DEFENSE
.2byte ITEM_NONE
release
end
pokemartlistend
RustboroCity_Mart_EventScript_PokemartExpanded::
pokemart RustboroCity_Mart_Pokemart_Expanded
@ -52,9 +50,7 @@ RustboroCity_Mart_Pokemart_Expanded:
.2byte ITEM_X_SPEED
.2byte ITEM_X_ATTACK
.2byte ITEM_X_DEFENSE
.2byte ITEM_NONE
release
end
pokemartlistend
RustboroCity_Mart_EventScript_PokefanF::
msgbox RustboroCity_Mart_Text_BuyingHealsInCaseOfShroomish, MSGBOX_NPC

View File

@ -154,9 +154,7 @@ SlateportCity_Pokemart_EnergyGuru:
.2byte ITEM_ZINC
.2byte ITEM_CALCIUM
.2byte ITEM_HP_UP
.2byte ITEM_NONE
release
end
pokemartlistend
SlateportCity_EventScript_EffortRibbonWoman::
lock
@ -514,9 +512,7 @@ SlateportCity_PokemartDecor_Dolls:
.2byte DECOR_AZURILL_DOLL
.2byte DECOR_MARILL_DOLL
.2byte DECOR_SKITTY_DOLL
.2byte DECOR_NONE
release
end
pokemartlistend
SlateportCity_EventScript_ComeBackWithSecretPower::
msgbox gText_ComeBackWithSecretPower, MSGBOX_DEFAULT
@ -550,9 +546,7 @@ SlateportCity_PokemartDecor:
.2byte DECOR_A_NOTE_MAT
.2byte DECOR_B_NOTE_MAT
.2byte DECOR_C_HIGH_NOTE_MAT
.2byte DECOR_NONE
release
end
pokemartlistend
SlateportCity_EventScript_PowerTMClerk::
lock
@ -568,9 +562,7 @@ SlateportCity_EventScript_PowerTMClerk::
SlateportCity_Pokemart_PowerTMs:
.2byte ITEM_TM_HIDDEN_POWER
.2byte ITEM_TM_SECRET_POWER
.2byte ITEM_NONE
release
end
pokemartlistend
@ Scene with Capt Sterns interview and Team Aqua announcing plans to steal Submarine
SlateportCity_EventScript_CaptStern::

View File

@ -22,9 +22,7 @@ SlateportCity_Mart_Pokemart:
.2byte ITEM_ESCAPE_ROPE
.2byte ITEM_REPEL
.2byte ITEM_HARBOR_MAIL
.2byte ITEM_NONE
release
end
pokemartlistend
SlateportCity_Mart_EventScript_BlackBelt::
msgbox SlateportCity_Mart_Text_SomeItemsOnlyAtMart, MSGBOX_NPC

View File

@ -22,9 +22,7 @@ SootopolisCity_Mart_Pokemart:
.2byte ITEM_X_ATTACK
.2byte ITEM_X_DEFENSE
.2byte ITEM_SHADOW_MAIL
.2byte ITEM_NONE
release
end
pokemartlistend
SootopolisCity_Mart_EventScript_FatMan::
lock

View File

@ -267,9 +267,7 @@ TrainerHill_Entrance_Pokemart_Basic:
.2byte ITEM_DIRE_HIT
.2byte ITEM_GUARD_SPEC
.2byte ITEM_X_ACCURACY
.2byte ITEM_NONE
release
end
pokemartlistend
TrainerHill_Entrance_EventScript_ExpandedPokemart::
pokemart TrainerHill_Entrance_Pokemart_Expanded
@ -291,9 +289,7 @@ TrainerHill_Entrance_Pokemart_Expanded:
.2byte ITEM_DIRE_HIT
.2byte ITEM_GUARD_SPEC
.2byte ITEM_X_ACCURACY
.2byte ITEM_NONE
release
end
pokemartlistend
TrainerHill_Entrance_Text_StillGettingReady:
.string "This is the TRAINER HILL where\n"

View File

@ -24,9 +24,7 @@ VerdanturfTown_Mart_Pokemart:
.2byte ITEM_REPEL
.2byte ITEM_X_SP_ATK
.2byte ITEM_FLUFFY_TAIL
.2byte ITEM_NONE
release
end
pokemartlistend
VerdanturfTown_Mart_EventScript_Boy::
msgbox VerdanturfTown_Mart_Text_XSpecialIsCrucial, MSGBOX_NPC

View File

@ -1,51 +1,47 @@
## How to add new Battle Script Commands/Macros
To preface this tutorial, the battle engine upgrade has exhausted all battle script command IDs, and instead uses the `various` command to effectively add new commands. This is preferential to creating a secondary battle script command table like is done in the CFRU.
To preface this tutorial, the battle engine upgrade has exhausted all battle script command IDs. Historically, we've used the `various` command to effectively add new commands. However, this has caused issues of maintainability and readability due to the massive switch needed for it. Thanks to the cleanup made by the team and contributors, we now are able to call an infinite amount of commands by using `callnative`. This is preferential to creating a secondary battle script command table like is done in the CFRU.
In general, `gBattlescriptCurrInstr` tracks the current battle script position as a ROM address. Fortunately, we don't need to worry about ROM addresses when using the decomps, but it is important to understand because of how the `various` command is set up.
In general, `gBattlescriptCurrInstr` tracks the current battle script position as a ROM address. Fortunately, we don't need to worry about ROM addresses when using the decomps, but it is important to understand because of how the `callnative` command is set up.
```
.macro various battler:req, param1:req
.byte 0x76
.byte \battler
.byte \param1
.endm
.macro callnative func:req
.byte 0xff
.4byte \func
.endm
```
`callnative` uses the last battle script command ID in order to pass a native function as an argument. Additional optional arguments are added recursively via a macro, so no need to worry about how they need to align to the amount of instructions to skip.
`various` is 3 bytes in size, so if we wanted to advance to the next battle script command, we would write `gBattlescriptCurrInstr += 3`. Coincidentally, this is found at the end of `Cmd_Various` in `src/battle_script_commands.c`.
Now, how might we add a custom various command case? Here are the steps. We will use `VARIOUS_SET_SIMPLE_BEAM` as an example.
### 1. Add a definition to `include/constants/battle_script_commands.h`.
For example, `#define VARIOUS_SET_SIMPLE_BEAM 39`
### 2. Create a macro in `asm/macros/battle_script.inc`. For example:
Now, how might we add a custom `callnative` command? Here are the steps. We will use `BS_TrySetOctolock` as an example.
### 1. Create a macro in `asm/macros/battle_script.inc`. For example:
```c
.macro setabilitysimple battler:req, ptr:req
various \battler VARIOUS_SET_SIMPLE_BEAM
.4byte \ptr
.endm
.macro trysetoctolock battler:req, failInstr:req
callnative BS_TrySetOctolock
.byte \battler
.4byte \failInstr
.endm
```
### 3. Add your new various command ID to `Cmd_Various`. For example:
### 2. Add your new callnative command ID to `src/battle_script_commands.c`. For example:
```c
case VARIOUS_SET_SIMPLE_BEAM:
if (IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability)
|| gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE)
{
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
}
else
{
gBattleMons[gBattlerTarget].ability = ABILITY_SIMPLE;
RecordAbilityBattle(gActiveBattler, ABILITY_SIMPLE);
gBattlescriptCurrInstr += 7;
}
return;
void BS_TrySetOctolock(void)
{
NATIVE_ARGS(u8 battler, const u8 *failInstr);
u32 battler = GetBattlerForBattleScript(cmd->battler);
if (gDisableStructs[battler].octolock)
{
gBattlescriptCurrInstr = cmd->failInstr;
}
else
{
gDisableStructs[battler].octolock = TRUE;
gBattleMons[battler].status2 |= STATUS2_ESCAPE_PREVENTION;
gDisableStructs[battler].battlerPreventingEscape = gBattlerAttacker;
gBattlescriptCurrInstr = cmd->nextInstr;
}
}
```
The macros' `battler` argument is the battler who will be affected/considered by your command. In our case, which battler we will try to give `ABILITY_SIMPLE`. Note that `gActiveBattler` is always set to this battler at the beginning of `Cmd_Various`.
The `ptr` argument is an extra argument that, in this case, provides a battle script to jump to in the event that we fail to set `ABILITY_SIMPLE`. We must add the `.4byte \ptr` inside our macro. So now when we want to advance to the next battle script command in our script, we must increment `gBattlescriptCurrInstr` by `7` because our overall macro is 3 bytes for the various command, and 4 bytes for the pointer. *IMPORTANT* the `return` at the end of the switch case is required because remember that `various` always defaults to `gBattlescriptCurrInstr += 3` at the very end of the function, so if we included `gBattlescriptCurrInstr += 7` with a `break`, we would end up effectively doing `gBattlescriptCurrInstr += 10`.
This behavior can be found under the `else` statement in the example above, corresponding to `ABILITY_SIMPLE` being correctly applied. If we are unable to set `ABILITY_SIMPLE`, however, notice the following `gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);`. This means we are jumping to the battle script provided by the pointer 3 bytes after our various command (which is the `ptr` argument described previously). We still must `return` or else we would actually jump to 3 bytes after the `ptr` battle script begins.
Each of the arguments defined in the macro (`battler`, `failInstr`) need to be called at the start of the command using `NATIVE_ARGS`.
The byte count in the macro should correspond to the type that will be used for the command (eg, `u8` is `byte`, while the pointer are `4byte`).
These arguments can then be accessed as `cmd->battler` and `cmd->battler`.
`gBattlescriptCurrInstr = cmd->nextInstr;` advances to the next instruction.

View File

@ -1,6 +1,6 @@
JASC-PAL
0100
8
16
255 255 164
255 255 106
222 222 90
@ -9,3 +9,11 @@ JASC-PAL
123 123 49
90 90 32
57 57 16
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

View File

@ -2,6 +2,7 @@
#define GUARD_RECORDED_BATTLE_H
#include "constants/battle.h"
#include "link.h"
#include "random.h"
#define BATTLER_RECORD_SIZE 664
@ -10,13 +11,13 @@ struct RecordedBattleSave
{
struct Pokemon playerParty[PARTY_SIZE];
struct Pokemon opponentParty[PARTY_SIZE];
u8 playersName[MAX_BATTLERS_COUNT][PLAYER_NAME_LENGTH + 1];
u8 playersGender[MAX_BATTLERS_COUNT];
u32 playersTrainerId[MAX_BATTLERS_COUNT];
u8 playersLanguage[MAX_BATTLERS_COUNT];
u8 playersName[MAX_LINK_PLAYERS][PLAYER_NAME_LENGTH + 1];
u8 playersGender[MAX_LINK_PLAYERS];
u32 playersTrainerId[MAX_LINK_PLAYERS];
u8 playersLanguage[MAX_LINK_PLAYERS];
rng_value_t rngSeed;
u32 battleFlags;
u8 playersBattlers[MAX_BATTLERS_COUNT];
u8 playersBattlers[MAX_LINK_PLAYERS];
u16 opponentA;
u16 opponentB;
u16 partnerId;

View File

@ -59,7 +59,9 @@ void rfu_LMAN_REQ_sendData(bool8 clockChangeFlag)
clockChangeFlag = FALSE;
}
else
{
lman.parentAck_flag = 0;
}
rfu_REQ_sendData(clockChangeFlag);
}

View File

@ -5413,7 +5413,9 @@ static void AnimMilkBottle_Step1(struct Sprite *sprite)
sprite->data[6]++;
}
else if (sprite->data[7] > 0)
{
sprite->data[7]--;
}
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
if (sprite->data[6] == 16 && sprite->data[7] == 0)

View File

@ -2266,7 +2266,9 @@ static void AnimTask_Splash_Step(u8 taskId)
task->data[4] -= 2;
}
else
{
task->data[1]++;
}
break;
case 3:
if (!RunAffineAnimFromTaskData(task))
@ -3023,7 +3025,9 @@ static void AnimTask_SpeedDust_Step(u8 taskId)
task->data[8] = 1;
}
else
{
task->data[8] = 2;
}
}
}
break;

View File

@ -742,7 +742,9 @@ static void AnimZapCannonSpark_Step(struct Sprite *sprite)
sprite->invisible ^= 1;
}
else
{
DestroyAnimSprite(sprite);
}
}
static void AnimThunderboltOrb_Step(struct Sprite *sprite)
@ -1024,7 +1026,9 @@ static void AnimTask_ElectricChargingParticles_Step(u8 taskId)
}
}
else if(task->data[7] == 0)
{
DestroyAnimVisualTask(taskId);
}
}
static void AnimElectricChargingParticles_Step(struct Sprite *sprite)
@ -1145,7 +1149,9 @@ void AnimTask_VoltTackleAttackerReappear(u8 taskId)
gSprites[task->data[15]].x2 = task->data[14];
}
else
{
task->data[0]++;
}
}
break;

View File

@ -346,7 +346,9 @@ static void AnimConfuseRayBallBounce_Step2(struct Sprite *sprite)
sprite->callback = DestroyAnimSpriteAndDisableBlend;
}
else
{
UpdateConfuseRayBallBlend(sprite);
}
}
static void UpdateConfuseRayBallBlend(struct Sprite *sprite)

View File

@ -1339,7 +1339,9 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite)
gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
}
else
{
gBattleSpritesDataPtr->animationData->ballSubpx += 176;
}
sprite->sTimer++;
sprite->affineAnimPaused = FALSE;
@ -1364,7 +1366,9 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite)
ChangeSpriteAffineAnim(sprite, BALL_ROTATE_RIGHT);
}
else
{
sprite->affineAnimPaused = TRUE;
}
break;
case BALL_ROLL_2:
if (gBattleSpritesDataPtr->animationData->ballSubpx > 255)
@ -1373,7 +1377,9 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite)
gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
}
else
{
gBattleSpritesDataPtr->animationData->ballSubpx += 176;
}
sprite->sTimer++;
sprite->affineAnimPaused = FALSE;
@ -1408,7 +1414,9 @@ static void SpriteCB_Ball_Wobble_Step(struct Sprite *sprite)
gBattleSpritesDataPtr->animationData->ballSubpx &= 0xFF;
}
else
{
gBattleSpritesDataPtr->animationData->ballSubpx += 176;
}
sprite->sTimer++;
sprite->affineAnimPaused = FALSE;
@ -1598,7 +1606,9 @@ static void SpriteCB_Ball_FadeOut(struct Sprite *sprite)
static void DestroySpriteAfterOneFrame(struct Sprite *sprite)
{
if (sprite->sFrame == 0)
{
sprite->sFrame = -1;
}
else
{
FreeSpriteOamMatrix(sprite);
@ -1618,7 +1628,9 @@ static void MakeCaptureStars(struct Sprite *sprite)
u8 subpriority;
if (sprite->subpriority)
{
subpriority = sprite->subpriority - 1;
}
else
{
subpriority = 0;
@ -2555,7 +2567,9 @@ static void SpriteCB_ShinyStars_Diagonal(struct Sprite *sprite)
{
// Delayed four frames to de-sync from encircling stars
if (sprite->sTimer < 4)
{
sprite->sTimer++;
}
else
{
sprite->invisible = FALSE;

View File

@ -185,7 +185,9 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler)
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
}
else
{
return;
}
}
else if (gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim)
{
@ -198,13 +200,17 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler)
FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS);
}
else
{
return;
}
}
gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE;
gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE;
}
else
{
return;
}
gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3;
gBattlerControllerFuncs[battler] = Intro_DelayAndEnd;
@ -274,7 +280,9 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler)
m4aMPlayContinue(&gMPlayInfo_BGM);
}
else
{
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100);
}
}
gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = TRUE;
bgmRestored = TRUE;

View File

@ -754,13 +754,21 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state)
LoadCompressedSpriteSheet(&sSpriteSheet_SinglesPlayerHealthbox);
}
else if (state == 3)
{
LoadCompressedSpriteSheet(&sSpriteSheet_SinglesOpponentHealthbox);
}
else if (state == 4)
{
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(0)]);
}
else if (state == 5)
{
LoadCompressedSpriteSheet(&sSpriteSheets_HealthBar[GetBattlerPosition(1)]);
}
else
{
retVal = TRUE;
}
}
else
{

View File

@ -1517,7 +1517,9 @@ static void CB2_HandleStartMultiBattle(void)
gBattleCommunication[MULTIUSE_STATE]++;
}
else
{
break;
}
// fall through
case 3:
if (IsLinkTaskFinished())

View File

@ -2642,7 +2642,9 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize)
toCpy = gStringVar2;
}
else
{
toCpy = gBattleTextBuff2;
}
break;
case B_TXT_BUFF3:
if (gBattleTextBuff3[0] == B_BUFF_PLACEHOLDER_BEGIN)
@ -2651,7 +2653,9 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize)
toCpy = gStringVar3;
}
else
{
toCpy = gBattleTextBuff3;
}
break;
case B_TXT_COPY_VAR_1:
toCpy = gStringVar1;
@ -2764,7 +2768,9 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst, u32 dstSize)
toCpy = text;
}
else
{
toCpy = sText_EnigmaBerry;
}
}
}
else

View File

@ -2503,7 +2503,9 @@ static void Cmd_attackanimation(void)
{
u32 multihit;
if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
{
multihit = gMultiHitCounter;
}
else if (gMultiHitCounter != 0 && gMultiHitCounter != 1)
{
if (gBattleMons[gBattlerTarget].hp <= gBattleStruct->moveDamage[gBattlerTarget])
@ -2512,7 +2514,9 @@ static void Cmd_attackanimation(void)
multihit = gMultiHitCounter;
}
else
{
multihit = gMultiHitCounter;
}
BtlController_EmitMoveAnimation(gBattlerAttacker,
BUFFER_A,
@ -3404,7 +3408,9 @@ void SetMoveEffect(bool32 primary, bool32 certain)
RESET_RETURN
}
else
{
break;
}
}
if (B_STATUS_TYPE_IMMUNITY == GEN_1)
{
@ -4889,13 +4895,10 @@ static void Cmd_getexp(void)
{
if (gBattlerPartyIndexes[2] == *expMonId && !(gAbsentBattlerFlags & 4))
gBattleStruct->expGetterBattlerId = 2;
else if (!(gAbsentBattlerFlags & 1))
gBattleStruct->expGetterBattlerId = 0;
else
{
if (!(gAbsentBattlerFlags & 1))
gBattleStruct->expGetterBattlerId = 0;
else
gBattleStruct->expGetterBattlerId = 2;
}
gBattleStruct->expGetterBattlerId = 2;
}
else
{
@ -14300,6 +14303,7 @@ static void Cmd_trydobeatup(void)
&& !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS))
break;
}
if (gBattleCommunication[0] < PARTY_SIZE)
{
PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattleCommunication[0])
@ -14317,9 +14321,13 @@ static void Cmd_trydobeatup(void)
gBattleCommunication[0]++;
}
else if (beforeLoop != 0)
{
gBattlescriptCurrInstr = cmd->endInstr;
}
else
{
gBattlescriptCurrInstr = cmd->failInstr;
}
}
#endif
}

View File

@ -1808,9 +1808,13 @@ u8 DoFieldEndTurnEffects(void)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_STOPPED;
}
else if (gBattleWeather & B_WEATHER_RAIN_DOWNPOUR)
{
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOWNPOUR_CONTINUES;
}
else
{
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_CONTINUES;
}
}
else if (gBattleWeather & B_WEATHER_RAIN_DOWNPOUR)
{

View File

@ -1711,11 +1711,13 @@ bool32 IsEnigmaBerryValid(void)
const struct Berry *GetBerryInfo(u8 berry)
{
if (berry == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY_E_READER) && IsEnigmaBerryValid())
{
#if FREE_ENIGMA_BERRY == FALSE
return (struct Berry *)(&gSaveBlock1Ptr->enigmaBerry.berry);
#else
return &gBerries[0]; //never reached, but will appease the compiler gods
#endif //FREE_ENIGMA_BERRY
}
else
{
if (berry == BERRY_NONE || berry > ITEM_TO_BERRY(LAST_BERRY_INDEX))
@ -2037,7 +2039,9 @@ static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
u32 extraYield;
if (water == 0 || OW_BERRY_MOISTURE)
{
return min;
}
else
{
randMin = (max - min) * (water - 1);

View File

@ -3398,7 +3398,9 @@ static u32 Cmd_StopGame(struct BerryCrushGame *game, u8 *args)
break;
case 2:
if (game->gfx.counter != 0)
{
game->gfx.counter--;
}
else
{
RunOrScheduleCommand(CMD_CLOSE_LINK, SCHEDULE_CMD, NULL);

View File

@ -389,7 +389,9 @@ static u8 AcroBikeHandleInputWheelieStanding(u8 *newDirection, u16 newKeys, u16
gPlayerAvatar.runningState = NOT_MOVING;
if (heldKeys & B_BUTTON)
{
gPlayerAvatar.bikeFrameCounter++;
}
else
{
// B button was released.

View File

@ -2767,7 +2767,9 @@ static void Task_EndAppeals(u8 taskId)
CalculateFinalScores();
ContestClearGeneralTextWindow();
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
{
BravoTrainerPokemonProfile_BeforeInterview1(eContestantStatus[gContestPlayerMonIndex].prevMove);
}
else
{
CalculateContestLiveUpdateData();

View File

@ -619,15 +619,18 @@ static void ContestEffect_QualityDependsOnTiming(void)
{
appeal = 10;
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_NOT_VERY_WELL);
} else if (rval < 6)
}
else if (rval < 6)
{
appeal = 20;
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_SLIGHTLY_WELL2);
} else if (rval < 8)
}
else if (rval < 8)
{
appeal = 40;
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_PRETTY_WELL2);
} else if (rval < 9)
}
else if (rval < 9)
{
appeal = 60;
SetContestantEffectStringID(eContestAppealResults.contestant, CONTEST_STRING_APPEAL_VERY_WELL);
@ -868,7 +871,9 @@ static void ContestEffect_ScrambleNextTurnOrder(void)
break;
}
else
{
rval--;
}
}
}
}
@ -908,7 +913,9 @@ static void ContestEffect_BadlyStartleMonsWithGoodAppeals(void)
eContestAppealResults.jam = RoundUp(eContestAppealResults.jam);
}
else
{
eContestAppealResults.jam = 10;
}
eContestAppealResults.jamQueue[0] = i;
eContestAppealResults.jamQueue[1] = CONTESTANT_NONE;
if (WasAtLeastOneOpponentJammed())
@ -1071,7 +1078,9 @@ static s16 RoundTowardsZero(s16 score)
score -= 10 - absScore;
}
else
{
score -= absScore;
}
return score;
}

View File

@ -150,7 +150,9 @@ static void SpriteCB_Sparkle_SpiralUpward(struct Sprite *sprite)
sprite->oam.matrixNum = matrixNum;
}
else
{
DestroySprite(sprite);
}
}
static void CreateSparkle_SpiralUpward(u8 trigIdx)
@ -178,7 +180,9 @@ static void SpriteCB_Sparkle_ArcDown(struct Sprite *sprite)
sprite->sTimer++;
}
else
{
DestroySprite(sprite);
}
}
static void CreateSparkle_ArcDown(u8 trigIdx)
@ -206,7 +210,9 @@ static void SpriteCB_Sparkle_CircleInward(struct Sprite *sprite)
sprite->sTrigIdx += 4;
}
else
{
DestroySprite(sprite);
}
}
static void CreateSparkle_CircleInward(u8 trigIdx, u8 speed)
@ -238,7 +244,9 @@ static void SpriteCB_Sparkle_Spray(struct Sprite *sprite)
sprite->sTrigIdx++;
matrixNum = 31 - (sprite->sTrigIdx * 12 / 128);
if (sprite->sTrigIdx > 64)
{
sprite->subpriority = 1;
}
else
{
sprite->invisible = FALSE;
@ -252,7 +260,9 @@ static void SpriteCB_Sparkle_Spray(struct Sprite *sprite)
sprite->sTimer++;
}
else
{
DestroySprite(sprite);
}
}
static void CreateSparkle_Spray(u8 id)
@ -348,7 +358,9 @@ static void Task_Sparkles_ArcDown(u8 taskId)
gTasks[taskId].tTimer++;
}
else
{
gTasks[taskId].func = Task_Sparkles_ArcDown_End;
}
}
static void Task_Sparkles_ArcDown_End(u8 taskId)
@ -388,7 +400,9 @@ static void Task_Sparkles_CircleInward(u8 taskId)
gTasks[taskId].tTimer++;
}
else
{
gTasks[taskId].func = Task_Sparkles_CircleInward_End;
}
}
static void Task_Sparkles_CircleInward_End(u8 taskId)
@ -437,7 +451,9 @@ static void Task_Sparkles_SprayAndFlash(u8 taskId)
gTasks[taskId].tTimer++;
}
else
{
gTasks[taskId].func = Task_Sparkles_SprayAndFlash_End;
}
}
static void Task_Sparkles_SprayAndFlash_End(u8 taskId)
@ -486,7 +502,9 @@ static void Task_Sparkles_SprayAndFlashTrade(u8 taskId)
gTasks[taskId].tTimer++;
}
else
{
gTasks[taskId].func = Task_Sparkles_SprayAndFlash_End;
}
}
#undef tTimer
@ -560,9 +578,13 @@ static void Task_CycleEvolutionMonSprite_Init(u8 taskId)
static void Task_CycleEvolutionMonSprite_TryEnd(u8 taskId)
{
if (gTasks[taskId].tEvoStopped)
{
EndOnPreEvoMon(taskId);
}
else if (gTasks[taskId].tScaleSpeed == 128)
{
EndOnPostEvoMon(taskId);
}
else
{
gTasks[taskId].tScaleSpeed += 2;
@ -574,7 +596,9 @@ static void Task_CycleEvolutionMonSprite_TryEnd(u8 taskId)
static void Task_CycleEvolutionMonSprite_UpdateSize(u8 taskId)
{
if (gTasks[taskId].tEvoStopped)
{
gTasks[taskId].func = EndOnPreEvoMon;
}
else
{
u16 oamMatrixArg;
@ -583,7 +607,9 @@ static void Task_CycleEvolutionMonSprite_UpdateSize(u8 taskId)
{
// Set pre-evo sprite growth
if (gTasks[taskId].tPreEvoScale < MON_MAX_SCALE - gTasks[taskId].tScaleSpeed)
{
gTasks[taskId].tPreEvoScale += gTasks[taskId].tScaleSpeed;
}
else
{
gTasks[taskId].tPreEvoScale = MON_MAX_SCALE;
@ -592,7 +618,9 @@ static void Task_CycleEvolutionMonSprite_UpdateSize(u8 taskId)
// Set post-evo sprite shrink
if (gTasks[taskId].tPostEvoScale > MON_MIN_SCALE + gTasks[taskId].tScaleSpeed)
{
gTasks[taskId].tPostEvoScale -= gTasks[taskId].tScaleSpeed;
}
else
{
gTasks[taskId].tPostEvoScale = MON_MIN_SCALE;
@ -603,7 +631,9 @@ static void Task_CycleEvolutionMonSprite_UpdateSize(u8 taskId)
{
// Set post-evo sprite growth
if (gTasks[taskId].tPostEvoScale < MON_MAX_SCALE - gTasks[taskId].tScaleSpeed)
{
gTasks[taskId].tPostEvoScale += gTasks[taskId].tScaleSpeed;
}
else
{
gTasks[taskId].tPostEvoScale = MON_MAX_SCALE;
@ -612,7 +642,9 @@ static void Task_CycleEvolutionMonSprite_UpdateSize(u8 taskId)
// Set pre-evo sprite shrink
if (gTasks[taskId].tPreEvoScale > MON_MIN_SCALE + gTasks[taskId].tScaleSpeed)
{
gTasks[taskId].tPreEvoScale -= gTasks[taskId].tScaleSpeed;
}
else
{
gTasks[taskId].tPreEvoScale = MON_MIN_SCALE;

View File

@ -231,7 +231,9 @@ static void DrawMetatileAt(const struct MapLayout *mapLayout, u16 offset, int x,
if (metatileId > NUM_METATILES_TOTAL)
metatileId = 0;
if (metatileId < NUM_METATILES_IN_PRIMARY)
{
metatiles = mapLayout->primaryTileset->metatiles;
}
else
{
metatiles = mapLayout->secondaryTileset->metatiles;

View File

@ -437,7 +437,9 @@ static const struct DoorGraphics *GetDoorGraphics(const struct DoorGraphics *gfx
static s8 StartDoorAnimationTask(const struct DoorGraphics *gfx, const struct DoorAnimFrame *frames, u32 x, u32 y)
{
if (FuncIsActiveTask(Task_AnimateDoor) == TRUE)
{
return -1;
}
else
{
u8 taskId = CreateTask(Task_AnimateDoor, 0x50);

View File

@ -1300,7 +1300,8 @@ static void CreateHofMonitorSprite(s16 taskId, s16 x, s16 y, bool8 isSmallMonito
{
spriteId = CreateSpriteAtEnd(&sSpriteTemplate_HofMonitorBig, x, y, 0);
SetSubspriteTables(&gSprites[spriteId], &sSubspriteTable_HofMonitorBig);
} else
}
else
{
spriteId = CreateSpriteAtEnd(&sSpriteTemplate_HofMonitorSmall, x, y, 0);
}
@ -2022,7 +2023,8 @@ static bool8 LavaridgeGymB1FWarpEffect_Rise(struct Task *task, struct ObjectEven
{
task->data[1] <<= 1;
}
} else if (!(task->data[2] & 4) && (task->data[1] > 0))
}
else if (!(task->data[2] & 4) && (task->data[1] > 0))
{
task->data[1] >>= 1;
}
@ -2036,7 +2038,8 @@ static bool8 LavaridgeGymB1FWarpEffect_Rise(struct Task *task, struct ObjectEven
{
task->data[3]++;
}
} else
}
else
{
task->data[4] = 1;
}
@ -2190,7 +2193,8 @@ static bool8 LavaridgeGym1FWarpEffect_AshPuff(struct Task *task, struct ObjectEv
gFieldEffectArguments[3] = sprite->oam.priority;
task->data[1] = FieldEffectStart(FLDEFF_ASH_PUFF);
task->data[0]++;
} else
}
else
{
task->data[1]++;
ObjectEventSetHeldMovement(objectEvent, GetWalkInPlaceFasterMovementAction(objectEvent->facingDirection));
@ -2521,7 +2525,8 @@ static void TeleportWarpInFieldEffect_SpinEnter(struct Task *task)
objectEvent->triggerGroundEffectsOnMove = TRUE;
sprite->subspriteMode = task->data[14];
}
} else
}
else
{
sprite->oam.priority = 1;
if (sprite->subspriteMode != SUBSPRITES_OFF)

View File

@ -147,7 +147,9 @@ static void SetUpItemUseOnFieldCallback(u8 taskId)
SetUpItemUseCallback(taskId);
}
else
{
sItemUseOnFieldCB(taskId);
}
}
static void FieldCB_UseItemOnField(void)
@ -173,7 +175,9 @@ static void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyIte
DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, Task_CloseBattlePyramidBagMessage);
}
else
{
DisplayItemMessageOnField(taskId, gStringVar4, Task_CloseCantUseKeyItemMessage);
}
}
void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField)
@ -254,7 +258,9 @@ void ItemUseOutOfBattle_Bike(u8 taskId)
PlayerGetDestCoords(&coordsX, &coordsY);
behavior = MapGridGetMetatileBehaviorAt(coordsX, coordsY);
if (FlagGet(FLAG_SYS_CYCLING_ROAD) == TRUE || MetatileBehavior_IsVerticalRail(behavior) == TRUE || MetatileBehavior_IsHorizontalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE)
{
DisplayCannotDismountBikeMessage(taskId, tUsingRegisteredKeyItem);
}
else
{
if (Overworld_IsBikingAllowed() == TRUE && IsBikingDisallowedByPlayer() == 0)
@ -263,7 +269,9 @@ void ItemUseOutOfBattle_Bike(u8 taskId)
SetUpItemUseOnFieldCallback(taskId);
}
else
{
DisplayDadsAdviceCannotUseItemMessage(taskId, tUsingRegisteredKeyItem);
}
}
}
@ -316,7 +324,9 @@ void ItemUseOutOfBattle_Rod(u8 taskId)
SetUpItemUseOnFieldCallback(taskId);
}
else
{
DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
}
}
static void ItemUseOnFieldCB_Rod(u8 taskId)

View File

@ -145,7 +145,9 @@ static void Sio32IDIntr(void)
}
}
else
{
gRfuSIO32Id.lastId = regSIODATA32;
}
}
else
{

View File

@ -1175,7 +1175,9 @@ static void RfuHandleReceiveCommand(u8 unused)
gRfu.numBlocksReceived[i] = 0;
}
else
{
gRfu.numBlocksReceived[i]++;
}
}
}
}
@ -1302,7 +1304,9 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size)
gRfu.sendBlock.count = (size / 12) + r4;
gRfu.sendBlock.next = 0;
if (size > BLOCK_BUFFER_SIZE)
{
gRfu.sendBlock.payload = src;
}
else
{
if (src != gBlockSendBuffer)
@ -1629,9 +1633,8 @@ static bool8 CheckForLeavingGroupMembers(void)
}
else if (gRfuSlotStatusNI[gRfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED)
rfu_clearSlot(TYPE_NI_RECV, i);
{
rfu_clearSlot(TYPE_NI_RECV, i);
}
}
}
@ -1777,7 +1780,9 @@ static void Task_PlayerExchange(u8 taskId)
gTasks[taskId].tState = 101;
}
else
{
gTasks[taskId].tState = 2;
}
break;
case 101:
if (gSendCmd[0] == 0)
@ -1798,7 +1803,9 @@ static void Task_PlayerExchange(u8 taskId)
}
}
else
{
gTasks[taskId].tState++;
}
break;
case 4:
if (AreAllPlayersFinishedReceiving())

View File

@ -74,7 +74,9 @@ void PickLotteryCornerTicket(void)
}
}
else // Pokémon are always arranged from populated spots first to unpopulated, so the moment a NONE species is found, that's the end of the list.
{
break;
}
}
for (i = 0; i < TOTAL_BOXES_COUNT; i++)
@ -132,7 +134,9 @@ static u8 GetMatchingDigits(u16 winNumber, u16 otId)
matchingDigits++;
}
else
{
break;
}
}
return matchingDigits;
}

View File

@ -255,7 +255,6 @@ static const u16 sBirchSpeechBgPals[][16] = {
static const u32 sBirchSpeechShadowGfx[] = INCBIN_U32("graphics/birch_speech/shadow.4bpp.lz");
static const u32 sBirchSpeechBgMap[] = INCBIN_U32("graphics/birch_speech/map.bin.lz");
static const u16 sBirchSpeechBgGradientPal[] = INCBIN_U16("graphics/birch_speech/bg2.gbapal");
static const u16 sBirchSpeechPlatformBlackPal[] = {RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK};
static const u8 gText_SaveFileCorrupted[] = _("The save file is corrupted. The\nprevious save file will be loaded.");
static const u8 gText_SaveFileErased[] = _("The save file has been erased\ndue to corruption or damage.");
@ -1298,7 +1297,7 @@ static void Task_NewGameBirchSpeech_Init(u8 taskId)
LZ77UnCompVram(sBirchSpeechShadowGfx, (void *)VRAM);
LZ77UnCompVram(sBirchSpeechBgMap, (void *)(BG_SCREEN_ADDR(7)));
LoadPalette(sBirchSpeechBgPals, BG_PLTT_ID(0), 2 * PLTT_SIZE_4BPP);
LoadPalette(sBirchSpeechPlatformBlackPal, BG_PLTT_ID(0) + 1, PLTT_SIZEOF(8));
LoadPalette(&sBirchSpeechBgGradientPal[8], BG_PLTT_ID(0) + 1, PLTT_SIZEOF(8));
ScanlineEffect_Stop();
ResetSpriteData();
FreeAllSpritePalettes();

View File

@ -477,7 +477,9 @@ static void BardSing(struct Task *task, struct BardSong *song)
GetWordPhonemes(song, MACRO1(word));
song->currWord++;
if (song->sound->songLengthId != 0xFF)
{
song->state = 0;
}
else
{
song->state = 3;
@ -527,7 +529,9 @@ static void BardSing(struct Task *task, struct BardSong *song)
{
song->currPhoneme++;
if (song->currPhoneme != 6 && song->sound[song->currPhoneme].songLengthId != 0xFF)
{
song->state = 0;
}
else
{
song->state = 3;
@ -846,7 +850,9 @@ void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language
trader->language[i] = LANGUAGE_JAPANESE;
}
else
{
trader->language[i] = language;
}
}
}
else

View File

@ -274,7 +274,8 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va)
{
len = 1;
len = _putsAscii(&ch, len, buf);
} else
}
else
{
char pad_char = ' ';
s32 pad_to = 0;
@ -310,7 +311,8 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va)
if(l)
{
len = mini_itoa(va_arg(va, u32), 10, 0, (ch=='u'), bf2);
} else
}
else
{
if(ch == 'u')
{
@ -352,7 +354,8 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va)
{
len = mini_pad(ptr, len, pad_char, pad_to, bf);
len = _putsAscii(bf, len, buf);
} else
}
else
{
len = _putsAscii(ptr, len, buf);
}
@ -364,7 +367,8 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va)
{
len = mini_pad(ptr, len, pad_char, pad_to, bf);
len = _putsEncoded(bf, len, buf);
} else
}
else
{
len = _putsEncoded(ptr, len, buf);
}

View File

@ -5367,7 +5367,9 @@ static void Task_LearnNextMoveOrClosePartyMenu(u8 taskId)
if (IsFanfareTaskInactive() && ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))))
{
if (gPartyMenu.learnMoveState == 1)
{
Task_TryLearningNextMove(taskId);
}
else
{
if (gPartyMenu.learnMoveState == 2) // never occurs

View File

@ -891,7 +891,9 @@ static void Mailbox_CancelMoveToBag(u8 taskId)
static void Mailbox_Give(u8 taskId)
{
if (CalculatePlayerPartyCount() == 0)
{
Mailbox_NoPokemonForMail(taskId);
}
else
{
FadeScreen(FADE_TO_BLACK, 0);

View File

@ -2416,7 +2416,9 @@ static void CreateMonListEntry(u8 position, u16 b, u16 ignored)
if (vOffset >= LIST_SCROLL_STEP)
vOffset -= LIST_SCROLL_STEP;
if (entryNum < 0 || entryNum >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[entryNum].dexNum == 0xFFFF)
{
ClearMonListEntry(17, vOffset * 2, ignored);
}
else
{
ClearMonListEntry(17, vOffset * 2, ignored);
@ -2711,7 +2713,9 @@ static bool8 TryDoInfoScreenScroll(void)
}
if (sPokedexView->selectedPokemon == selectedPokemon)
{
return FALSE;
}
else
{
sPokedexView->selectedPokemon = selectedPokemon;
@ -2734,7 +2738,9 @@ static bool8 TryDoInfoScreenScroll(void)
}
if (sPokedexView->selectedPokemon == selectedPokemon)
{
return FALSE;
}
else
{
sPokedexView->selectedPokemon = selectedPokemon;

View File

@ -5748,7 +5748,9 @@ u16 GetBattleBGM(void)
}
}
else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))
{
return MUS_VS_TRAINER;
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
u8 trainerClass;
@ -5795,7 +5797,9 @@ u16 GetBattleBGM(void)
}
}
else
{
return MUS_VS_WILD;
}
}
void PlayBattleBGM(void)

View File

@ -186,13 +186,21 @@ static bool32 HandleConditionSearchInput_WaitSetup(struct Pokenav_SearchResults
static u32 HandleConditionSearchInput(struct Pokenav_SearchResults *menu)
{
if (JOY_REPEAT(DPAD_UP))
{
return CONDITION_SEARCH_FUNC_MOVE_UP;
}
else if (JOY_REPEAT(DPAD_DOWN))
{
return CONDITION_SEARCH_FUNC_MOVE_DOWN;
}
else if (JOY_NEW(DPAD_LEFT))
{
return CONDITION_SEARCH_FUNC_PAGE_UP;
}
else if (JOY_NEW(DPAD_RIGHT))
{
return CONDITION_SEARCH_FUNC_PAGE_DOWN;
}
else if (JOY_NEW(B_BUTTON))
{
// Exiting back to main search menu
@ -209,7 +217,9 @@ static u32 HandleConditionSearchInput(struct Pokenav_SearchResults *menu)
return CONDITION_SEARCH_FUNC_SELECT_MON;
}
else
{
return CONDITION_SEARCH_FUNC_NONE;
}
}
static u32 ReturnToConditionSearchList(struct Pokenav_SearchResults *menu)

View File

@ -509,7 +509,9 @@ static u32 LoopedTask_OpenMenu(s32 state)
ShowBg(2);
ShowBg(3);
if (gfx->pokenavAlreadyOpen)
{
PokenavFadeScreen(POKENAV_FADE_FROM_BLACK);
}
else
{
PlaySE(SE_POKENAV_ON);

View File

@ -53,7 +53,7 @@ EWRAM_DATA static u32 sAI_Scripts = 0;
EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0};
EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0};
EWRAM_DATA static u16 sPlayerMonMoves[MAX_BATTLERS_COUNT / 2][MAX_MON_MOVES] = {0};
EWRAM_DATA static struct PlayerInfo sPlayers[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA static struct PlayerInfo sPlayers[MAX_LINK_PLAYERS] = {0};
EWRAM_DATA static bool8 sIsPlaybackFinished = 0;
EWRAM_DATA static u8 sRecordMixFriendName[PLAYER_NAME_LENGTH + 1] = {0};
EWRAM_DATA static u8 sRecordMixFriendClass = 0;
@ -116,7 +116,7 @@ void RecordedBattle_SetTrainerInfo(void)
gRecordedBattleMultiplayerId = GetMultiplayerId();
linkPlayersCount = GetLinkPlayerCount();
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
sPlayers[i].trainerId = gLinkPlayers[i].trainerId;
sPlayers[i].gender = gLinkPlayers[i].gender;
@ -304,7 +304,7 @@ bool32 MoveRecordedBattleToSaveData(void)
battleSave->opponentParty[i] = sSavedOpponentParty[i];
}
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++)
battleSave->playersName[i][j] = sPlayers[i].name[j];
@ -511,7 +511,7 @@ void SetVariablesForRecordedBattle(struct RecordedBattleSave *src)
s32 i, j;
SetPartiesFromRecordedSave(src);
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
for (var = FALSE, j = 0; j < PLAYER_NAME_LENGTH + 1; j++)
{

View File

@ -2324,7 +2324,9 @@ static bool8 ReelTask_MoveToStop(struct Task *task)
memcpy(reelStopShocks, sReelStopShocks, sizeof(sReelStopShocks));
reelPixelPos = sSlotMachine->reelPixelOffsets[task->tReelId] % REEL_SYMBOL_HEIGHT;
if (reelPixelPos != 0)
{
reelPixelPos = AdvanceSlotReelToNextSymbol(task->tReelId, sSlotMachine->reelSpeed);
}
else if (sSlotMachine->reelExtraTurns[task->tReelId])
{
sSlotMachine->reelExtraTurns[task->tReelId]--;

View File

@ -1048,9 +1048,13 @@ void ContinueAffineAnim(struct Sprite *sprite)
u8 matrixNum = GetSpriteMatrixNum(sprite);
if (sAffineAnimStates[matrixNum].delayCounter)
{
AffineAnimDelay(matrixNum, sprite);
}
else if (sprite->affineAnimPaused)
{
return;
}
else
{
s16 type;

View File

@ -5334,7 +5334,8 @@ static void DoTVShow3CheersForPokeblocks(void)
if (show->threeCheers.sheen > 24)
{
StringCopy(gStringVar2, gText_Excellent);
} else if (show->threeCheers.sheen > 22)
}
else if (show->threeCheers.sheen > 22)
{
StringCopy(gStringVar2, gText_VeryGood);
}