large refactoring to remove special deoxys handling

merged all stringids and string table entries
This commit is contained in:
cawtds
2024-05-03 18:14:38 +02:00
parent 97cca809a0
commit 8a4e07c430
31 changed files with 5727 additions and 2064 deletions

View File

@@ -2217,4 +2217,8 @@
.4byte \ptr
.endm
.macro damagenontypes
callnative BS_DamageNonTypes
.endm

View File

@@ -406,7 +406,17 @@ B_DEF_PREFIX3 = FD 2D
B_TRAINER2_LOSE_TEXT = FD 2E
B_TRAINER2_WIN_TEXT = FD 2F
B_BUFF3 = FD 30
@ new from pokeemerald
B_TRAINER2_CLASS = FD 31
B_TRAINER2_NAME = FD 32
B_PARTNER_CLASS = FD 33
B_PARTNER_NAME = FD 34
B_ATK_TRAINER_NAME = FD 35
B_ATK_TRAINER_CLASS = FD 36
B_ATK_TEAM1 = FD 37
B_ATK_TEAM2 = FD 38
B_DEF_NAME = FD 39
B_DEF_TEAM1 = FD 3A
B_DEF_TEAM2 = FD 3B
@ indicates the end of a town/city name (before " TOWN" or " CITY")

View File

@@ -2789,34 +2789,37 @@ BattleScript_RainContinuesOrEndsEnd::
end2
BattleScript_DamagingWeatherContinues::
printfromtable gSandstormHailContinuesStringIds
printfromtable gSandStormHailSnowContinuesStringIds
waitmessage B_WAIT_TIME_LONG
playanimation_var BS_ATTACKER, sB_ANIM_ARG1
setbyte gBattleCommunication, 0
BattleScript_DamagingWeatherLoop::
copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1
weatherdamage
jumpifword CMP_EQUAL, gBattleMoveDamage, NULL, BattleScript_DamagingWeatherContinuesEnd
printfromtable gSandstormHailDmgStringIds
jumpifword CMP_EQUAL, gBattleMoveDamage, 0, BattleScript_DamagingWeatherLoopIncrement
jumpifword CMP_COMMON_BITS gBattleMoveDamage, 1 << 31, BattleScript_DamagingWeatherHeal
printfromtable gSandStormHailDmgStringIds
waitmessage B_WAIT_TIME_LONG
orword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
effectivenesssound
hitanimation BS_ATTACKER
goto BattleScript_DamagingWeatherHpChange
BattleScript_DamagingWeatherHeal:
call BattleScript_AbilityPopUp
printstring STRINGID_ICEBODYHPGAIN
waitmessage B_WAIT_TIME_LONG
BattleScript_DamagingWeatherHpChange:
orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
tryfaintmon BS_ATTACKER
checkteamslost BattleScript_DamagingWeatherContinuesEnd
BattleScript_DamagingWeatherContinuesEnd::
jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_WeatherDamageEndedBattle
checkteamslost BattleScript_DamagingWeatherLoopIncrement
BattleScript_DamagingWeatherLoopIncrement::
jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_DamagingWeatherContinuesEnd
addbyte gBattleCommunication, 1
jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_DamagingWeatherLoop
BattleScript_WeatherDamageEndedBattle::
bicword gHitMarker, HITMARKER_SKIP_DMG_TRACK | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
end2
BattleScript_SandStormHailEnds::
printfromtable gSandstormHailEndStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_DamagingWeatherContinuesEnd::
bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
call BattleScript_ActivateWeatherAbilities
end2
BattleScript_SunlightContinues::
@@ -3208,6 +3211,7 @@ BattleScript_WishButFullHp::
BattleScript_IngrainTurnHeal::
playanimation BS_ATTACKER, B_ANIM_INGRAIN_HEAL
printstring STRINGID_PKMNABSORBEDNUTRIENTS
BattleScript_TurnHeal:
waitmessage B_WAIT_TIME_LONG
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE
healthbarupdate BS_ATTACKER
@@ -3456,6 +3460,7 @@ BattleScript_PrintPayDayMoneyString::
return
BattleScript_WrapTurnDmg::
jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_DoTurnDmgEnd
playanimation BS_ATTACKER, B_ANIM_TURN_TRAP, sB_ANIM_ARG1
printstring STRINGID_PKMNHURTBY
waitmessage B_WAIT_TIME_LONG
@@ -6167,12 +6172,6 @@ BattleScript_SteelsurgeDefog::
waitmessage B_WAIT_TIME_LONG
return
BattleScript_TerrainEnds_Ret::
printfromtable gTerrainStringIds
waitmessage B_WAIT_TIME_LONG
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
return
BattleScript_RaiseStatOnFaintingTarget::
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseStatOnFaintingTarget_End
copybyte gBattlerAbility, gBattlerAttacker
@@ -6423,3 +6422,256 @@ BattleScript_ExtremelyHarshSunlightWasNotLessened:
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_GrassyTerrainHeals::
setbyte gBattleCommunication, 0
BattleScript_GrassyTerrainLoop:
copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1
checkgrassyterrainheal BS_ATTACKER, BattleScript_GrassyTerrainLoopIncrement
printstring STRINGID_GRASSYTERRAINHEALS
waitmessage B_WAIT_TIME_LONG
BattleScript_GrassyTerrainHpChange:
orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
BattleScript_GrassyTerrainLoopIncrement::
addbyte gBattleCommunication, 1
jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_GrassyTerrainLoop
BattleScript_GrassyTerrainLoopEnd::
bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_PERMANENT, BattleScript_GrassyTerrainHealEnd
BattleScript_GrassyTerrainHealEnd:
end2
BattleScript_TerrainEnds_Ret::
printfromtable gTerrainStringIds
waitmessage B_WAIT_TIME_LONG
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
return
BattleScript_TerrainEnds::
call BattleScript_TerrainEnds_Ret
end2
BattleScript_LuckyChantEnds::
printstring STRINGID_LUCKYCHANTENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_TailwindEnds::
printstring STRINGID_TAILWINDENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_TrickRoomEnds::
printstring STRINGID_TRICKROOMENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_WonderRoomEnds::
printstring STRINGID_WONDERROOMENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_MagicRoomEnds::
printstring STRINGID_MAGICROOMENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_SandStormHailSnowEnds::
printfromtable gSandStormHailSnowEndStringIds
waitmessage B_WAIT_TIME_LONG
call BattleScript_ActivateWeatherAbilities
end2
BattleScript_DamageNonTypesContinues::
setbyte gBattleCommunication, 0
BattleScript_DamageNonTypesLoop::
copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1
damagenontypes
jumpifword CMP_EQUAL, gBattleMoveDamage, 0, BattleScript_DamageNonTypesLoopIncrement
printfromtable gDamageNonTypesDmgStringIds
waitmessage B_WAIT_TIME_LONG
effectivenesssound
hitanimation BS_ATTACKER
orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
tryfaintmon BS_ATTACKER
checkteamslost BattleScript_DamageNonTypesLoopIncrement
BattleScript_DamageNonTypesLoopIncrement::
jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_DamageNonTypesContinuesEnd
addbyte gBattleCommunication, 1
jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_DamageNonTypesLoop
BattleScript_DamageNonTypesContinuesEnd::
bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
end2
BattleScript_MudSportEnds::
printstring STRINGID_MUDSPORTENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_WaterSportEnds::
printstring STRINGID_WATERSPORTENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_GravityEnds::
printstring STRINGID_GRAVITYENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_AffectionBasedStatusHeal::
jumpifstatus BS_ATTACKER, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_AffectionBasedStatus_HealPoisonString
jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_AffectionBasedStatus_HealSleepString
jumpifstatus BS_ATTACKER, STATUS1_PARALYSIS, BattleScript_AffectionBasedStatus_HealParalysisString
jumpifstatus BS_ATTACKER, STATUS1_BURN, BattleScript_AffectionBasedStatus_HealBurnString
jumpifstatus BS_ATTACKER, STATUS1_FREEZE, BattleScript_AffectionBasedStatus_HealFreezeString
jumpifstatus BS_ATTACKER, STATUS1_FROSTBITE, BattleScript_AffectionBasedStatus_HealFrostbiteString
end2
BattleScript_AffectionBasedStatus_HealPoisonString:
printstring STRINGID_ATTACKEREXPELLEDTHEPOISON
goto BattleScript_AffectionBasedStatusHeal_Continue
BattleScript_AffectionBasedStatus_HealSleepString:
printstring STRINGID_ATTACKERSHOOKITSELFAWAKE
goto BattleScript_AffectionBasedStatusHeal_Continue
BattleScript_AffectionBasedStatus_HealParalysisString:
printstring STRINGID_ATTACKERBROKETHROUGHPARALYSIS
goto BattleScript_AffectionBasedStatusHeal_Continue
BattleScript_AffectionBasedStatus_HealBurnString:
printstring STRINGID_ATTACKERHEALEDITSBURN
goto BattleScript_AffectionBasedStatusHeal_Continue
BattleScript_AffectionBasedStatus_HealFreezeString:
printstring STRINGID_ATTACKERMELTEDTHEICE
goto BattleScript_AffectionBasedStatusHeal_Continue
BattleScript_AffectionBasedStatus_HealFrostbiteString:
printstring STRINGID_ATTACKERMELTEDTHEICE
BattleScript_AffectionBasedStatusHeal_Continue:
waitmessage B_WAIT_TIME_LONG
clearstatus BS_ATTACKER
waitstate
updatestatusicon BS_ATTACKER
waitstate
end2
BattleScript_TheRainbowDisappeared::
printstring STRINGID_THERAINBOWDISAPPEARED
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_TheSeaOfFireDisappeared::
printstring STRINGID_THESEAOFFIREDISAPPEARED
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_TheSwampDisappeared::
printstring STRINGID_THESWAMPDISAPPEARED
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_AquaRingHeal::
playanimation BS_ATTACKER, B_ANIM_WISH_HEAL @ B_ANIM_AQUA_RING_HEAL @ TODO: Animation
printstring STRINGID_AQUARINGHEAL
goto BattleScript_TurnHeal
BattleScript_PoisonHealActivates::
copybyte gBattlerAbility, gBattlerAttacker
call BattleScript_AbilityPopUp
printstring STRINGID_POISONHEALHPUP
waitmessage B_WAIT_TIME_LONG
statusanimation BS_ATTACKER
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
end2
BattleScript_OctolockEndTurn::
playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE
setstatchanger STAT_DEF, 1, TRUE
statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctolockTryLowerSpDef
BattleScript_OctolockTryLowerDef:
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_OctolockTryLowerSpDef:
setstatchanger STAT_SPDEF, 1, TRUE
statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctlockTurnDmgEnd
BattleScript_OctolockTurnDmgPrintMsg:
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_OctlockTurnDmgEnd:
end2
BattleScript_EmbargoEndTurn::
printstring STRINGID_EMBARGOENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_TelekinesisEndTurn::
printstring STRINGID_TELEKINESISENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_BufferEndTurn::
printstring STRINGID_BUFFERENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_FrostbiteTurnDmg::
printstring STRINGID_PKMNHURTBYFROSTBITE
waitmessage B_WAIT_TIME_LONG
goto BattleScript_DoStatusTurnDmg
BattleScript_TerrainPreventsEnd2::
pause B_WAIT_TIME_SHORT
printfromtable gTerrainPreventsStringIds
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_ThroatChopEndTurn::
printstring STRINGID_THROATCHOPENDS
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_SlowStartEnds::
pause 5
copybyte gBattlerAbility, gBattlerAttacker
call BattleScript_AbilityPopUp
printstring STRINGID_SLOWSTARTEND
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_SaltCureExtraDamage::
playanimation BS_TARGET, B_ANIM_MON_HIT, NULL @ B_ANIM_SALT_CURE_DAMAGE, NULL @ TODO: animation
waitanimation
call BattleScript_HurtTarget_NoString
printstring STRINGID_TARGETISHURTBYSALTCURE
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_SyrupBombEndTurn::
flushtextbox
playanimation BS_ATTACKER, B_ANIM_MON_HIT @ B_ANIM_SYRUP_BOMB_SPEED_DROP @ TODO: animation
setstatchanger STAT_SPEED, 1, TRUE
statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_SyrupBombTurnDmgEnd
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_SyrupBombTurnDmgEnd:
end2
BattleScript_TormentEnds::
printstring STRINGID_TORMENTEDNOMORE
waitmessage B_WAIT_TIME_LONG
end2
BattleScript_HurtByTheSeaOfFire::
printstring STRINGID_HURTBYTHESEAOFFIRE
waitmessage B_WAIT_TIME_LONG
goto BattleScript_DoTurnDmg
BattleScript_HurtTarget_NoString:
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_TARGET
datahpupdate BS_TARGET
tryfaintmon BS_TARGET
return

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@@ -13,6 +13,7 @@
#include "battle_gfx_sfx_util.h"
#include "battle_util2.h"
#include "battle_bg.h"
#include "battle_dynamax.h"
/*
Banks are a name given to what could be called a 'battlerId' or 'monControllerId'.
@@ -567,7 +568,7 @@ struct BattleStruct
u8 turnEffectsBattlerId;
u8 filler2; // unused
u8 turnCountersTracker;
u8 wrappedMove[MAX_BATTLERS_COUNT * 2]; // Leftover from Ruby's ewram access.
u16 wrappedMove[MAX_BATTLERS_COUNT];
u8 moveTarget[MAX_BATTLERS_COUNT];
u8 expGetterMonId;
u8 field_11; // unused
@@ -753,6 +754,13 @@ extern struct BattleStruct *gBattleStruct;
gBattleMons[battlerId].type3 = TYPE_MYSTERY; \
}
#define RESTORE_BATTLER_TYPE(battlerId) \
{ \
gBattleMons[battlerId].type1 = gSpeciesInfo[gBattleMons[battlerId].species].types[0]; \
gBattleMons[battlerId].type2 = gSpeciesInfo[gBattleMons[battlerId].species].types[1]; \
gBattleMons[battlerId].type3 = TYPE_MYSTERY; \
}
#define IS_BATTLER_PROTECTED(battlerId)(gProtectStructs[battlerId].protected \
|| gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_WIDE_GUARD \
|| gSideStatuses[GetBattlerSide(battlerId)] & SIDE_STATUS_QUICK_GUARD \

View File

@@ -87,6 +87,6 @@ enum MaxMoveEffect
// void CreateDynamaxTriggerSprite(u8, bool8);
// void HideDynamaxTriggerSprite(void);
// bool32 IsDynamaxTriggerSpriteActive(void);
// void DestroyDynamaxTriggerSprite(void);
void DestroyDynamaxTriggerSprite(void);
#endif

View File

@@ -51,6 +51,22 @@ enum
#define TAG_HEALTHBOX_PAL TAG_HEALTHBOX_PLAYER1_TILE
#define TAG_HEALTHBAR_PAL TAG_HEALTHBAR_PLAYER1_TILE
#define TAG_MEGA_TRIGGER_TILE 0xD777
#define TAG_MEGA_INDICATOR_TILE 0xD778
#define TAG_ALPHA_INDICATOR_TILE 0xD779
#define TAG_OMEGA_INDICATOR_TILE 0xD77A
#define TAG_ZMOVE_TRIGGER_TILE 0xD77B
#define TAG_BURST_TRIGGER_TILE 0xD77C
#define TAG_DYNAMAX_TRIGGER_TILE 0xD77D
#define TAG_DYNAMAX_INDICATOR_TILE 0xD77E
#define TAG_MEGA_TRIGGER_PAL 0xD777
#define TAG_MEGA_INDICATOR_PAL 0xD778
#define TAG_MISC_INDICATOR_PAL 0xD779 // Alpha, Omega, and Dynamax indicators use the same palette as each of them only uses 4 different colors.
#define TAG_ZMOVE_TRIGGER_PAL 0xD77B
#define TAG_BURST_TRIGGER_PAL 0xD77C
#define TAG_DYNAMAX_TRIGGER_PAL 0xD77D
enum
{
HEALTHBOX_ALL,

View File

@@ -1,7 +1,8 @@
#ifndef GUARD_BATTLE_MAIN_H
#define GUARD_BATTLE_MAIN_H
#include "constants/abilities.h"
#include "pokemon.h"
#include "data.h"
struct TrainerMoney
{
@@ -97,4 +98,7 @@ s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMov
u32 holdEffectBattler1, u32 holdEffectBattler2, u32 speedBattler1, u32 speedBattler2, s32 priority1, s32 priority2);
s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves);
extern const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES];
#endif // GUARD_BATTLE_MAIN_H

View File

@@ -55,7 +55,16 @@
#define B_TXT_TRAINER2_LOSE_TEXT 0x2E
#define B_TXT_TRAINER2_WIN_TEXT 0x2F
#define B_TXT_BUFF3 0x30
#define B_TXT_TRAINER2_CLASS 0x31
#define B_TXT_TRAINER2_NAME 0x32
#define B_TXT_PARTNER_CLASS 0x33
#define B_TXT_PARTNER_NAME 0x34
#define B_TXT_ATK_TRAINER_NAME 0x35
#define B_TXT_ATK_TRAINER_CLASS 0x36
#define B_TXT_ATK_TEAM1 0x37 // Your/The opposing
#define B_TXT_ATK_TEAM2 0x38 // your/the opposing
#define B_TXT_DEF_NAME 0x39
#define B_TXT_DEF_TEAM1 0x3A // Your/The opposing
#define B_TXT_DEF_TEAM2 0x3B // your/the opposing
// for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3
@@ -96,7 +105,8 @@
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_ABILITY; \
textVar[2] = abilityId; \
textVar[3] = B_BUFF_EOS; \
textVar[3] = (abilityId & 0xFF00) >> 8; \
textVar[4] = B_BUFF_EOS; \
}
#define PREPARE_TYPE_BUFFER(textVar, typeId) \
@@ -145,7 +155,7 @@
{ \
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_STRING; \
textVar[2] = stringId; \
textVar[2] = stringId & 0xFF; \
textVar[3] = (stringId & 0xFF00) >> 8; \
textVar[4] = B_BUFF_EOS; \
}
@@ -177,20 +187,20 @@
textVar[4] = B_BUFF_EOS; \
}
#define PREPARE_MON_NICK_WITH_PREFIX_BUFFER(textVar, bank, partyId) \
#define PREPARE_MON_NICK_WITH_PREFIX_BUFFER(textVar, battler, partyId) \
{ \
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_MON_NICK_WITH_PREFIX; \
textVar[2] = bank; \
textVar[2] = battler; \
textVar[3] = partyId; \
textVar[4] = B_BUFF_EOS; \
}
#define PREPARE_MON_NICK_BUFFER(textVar, bank, partyId) \
#define PREPARE_MON_NICK_BUFFER(textVar, battler, partyId) \
{ \
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_MON_NICK; \
textVar[2] = bank; \
textVar[2] = battler; \
textVar[3] = partyId; \
textVar[4] = B_BUFF_EOS; \
}

View File

@@ -43,7 +43,6 @@ extern const u8 BattleScript_Pausex20[];
extern const u8 BattleScript_LevelUp[];
extern const u8 BattleScript_RainContinuesOrEnds[];
extern const u8 BattleScript_DamagingWeatherContinues[];
extern const u8 BattleScript_SandStormHailEnds[];
extern const u8 BattleScript_SunlightContinues[];
extern const u8 BattleScript_SunlightFaded[];
extern const u8 BattleScript_OverworldWeatherStarts[];
@@ -660,8 +659,6 @@ extern const u8 BattleScript_ThrashConfuses[];
extern const u8 BattleScript_MoveUsedIsConfused[];
extern const u8 BattleScript_MoveUsedIsConfusedNoMore[];
extern const u8 BattleScript_PrintPayDayMoneyString[];
extern const u8 BattleScript_WrapTurnDmg[];
extern const u8 BattleScript_WrapEnds[];
extern const u8 BattleScript_MoveUsedIsInLove[];
extern const u8 BattleScript_MoveUsedIsInLoveCantAttack[];
extern const u8 BattleScript_NightmareTurnDmg[];
@@ -679,7 +676,6 @@ extern const u8 BattleScript_MoveEffectParalysis[];
extern const u8 BattleScript_MoveEffectUproar[];
extern const u8 BattleScript_MoveEffectToxic[];
extern const u8 BattleScript_MoveEffectPayDay[];
extern const u8 BattleScript_MoveEffectWrap[];
extern const u8 BattleScript_MoveEffectConfusion[];
extern const u8 BattleScript_MoveEffectRecoil[];
extern const u8 BattleScript_DoRecoil33[];

File diff suppressed because it is too large Load Diff

View File

@@ -31,6 +31,23 @@ static inline u16 SanitizeTrainerId(u16 trainerId)
return trainerId;
}
struct TypeInfo
{
u8 name[TYPE_NAME_LENGTH + 1];
u8 generic[17];
u8 palette;
u16 zMove;
u16 maxMove;
//u16 enhanceItem;
//u16 berry;
//u16 gem;
//u16 plate;
//u16 memory;
//u16 zCrystal;
//u16 teraShard;
//u16 arceusForm;
};
// extern const struct MonCoords gMonFrontPicCoords[];
// extern const struct CompressedSpriteSheet gMonFrontPicTable[];
// extern const struct MonCoords gMonBackPicCoords[];

View File

@@ -21,15 +21,10 @@ bool8 LoadCompressedSpritePaletteUsingHeap(const struct CompressedSpritePalette
bool8 LoadCompressedSpritePaletteUsingHeapWithTag(const u32 *pal, u16 tag);
void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void *buffer);
void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, void *buffer, s32 species);
void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *buffer);
void HandleLoadSpecialPokePic(bool32 isFrontPic, void *dest, s32 species, u32 personality);
void HandleLoadSpecialPokePic_DontHandleDeoxys(bool32 isFrontPic, void *dest, s32 species, u32 personality);
void LoadSpecialPokePic(void *dest, s32 species, u32 personality, bool8 isFrontPic);
void LoadSpecialPokePic_2(const struct CompressedSpriteSheet *src, void *dest, s32 species, u32 personality, bool8 isFrontPic);
void LoadSpecialPokePic_DontHandleDeoxys(void *dest, s32 species, u32 personality, bool8 isFrontPic);
u32 GetDecompressedDataSize(const u8 *ptr);

View File

@@ -10,7 +10,6 @@ u16 FreeAndDestroyMonPicSprite(u16);
u16 FreeAndDestroyTrainerPicSprite(u16);
u16 PlayerGenderToFrontTrainerPicId(u8 gender, bool8 getClass);
u16 LoadMonPicInWindow(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId);
u16 CreateMonPicSprite(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 ignoreDeoxys);
u16 CreateMonPicSprite_HandleDeoxys(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
u16 CreateMonPicSprite(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
#endif // GUARD_TRAINER_POKEMON_SPRITES_H

View File

@@ -1917,30 +1917,12 @@ u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 templat
if (!isBackpic)
{
LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, isShiny, personality), OBJ_PLTT_ID(palette), PLTT_SIZE_4BPP);
if (ignoreDeoxys == TRUE || ShouldIgnoreDeoxysForm(DEOXYS_CHECK_BATTLE_ANIM, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0)
LoadSpecialPokePic_DontHandleDeoxys(gMonSpritesGfxPtr->multiUseBuffer,
species,
personality,
TRUE);
else
LoadSpecialPokePic(gMonSpritesGfxPtr->multiUseBuffer,
species,
personality,
TRUE);
LoadSpecialPokePic(gMonSpritesGfxPtr->multiUseBuffer, species, personality, TRUE);
}
else
{
LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, isShiny, personality), OBJ_PLTT_ID(palette), PLTT_SIZE_4BPP);
if (ignoreDeoxys == TRUE || ShouldIgnoreDeoxysForm(DEOXYS_CHECK_BATTLE_ANIM, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0)
LoadSpecialPokePic_DontHandleDeoxys(gMonSpritesGfxPtr->multiUseBuffer,
species,
personality,
FALSE);
else
LoadSpecialPokePic(gMonSpritesGfxPtr->multiUseBuffer,
species,
personality,
FALSE);
LoadSpecialPokePic(gMonSpritesGfxPtr->multiUseBuffer, species, personality, FALSE);
}
RequestDma3Copy(gMonSpritesGfxPtr->multiUseBuffer, (void *)(OBJ_VRAM0 + (sheet * 0x20)), 0x800, 1);
FREE_AND_SET_NULL(gMonSpritesGfxPtr->multiUseBuffer);

View File

@@ -2413,6 +2413,7 @@ static void PlayerHandleChooseAction(void)
for (i = 0; i < 4; ++i)
ActionSelectionDestroyCursorAt(i);
ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0);
PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]);
BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT);
}

1265
src/battle_dynamax.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -339,9 +339,8 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
}
isShiny = GetMonData(mon, MON_DATA_IS_SHINY, NULL);
position = GetBattlerPosition(battlerId);
HandleLoadSpecialPokePic_DontHandleDeoxys(TRUE,
gMonSpritesGfxPtr->sprites[position],
species, currentPersonality);
HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites[position], species, currentPersonality);
paletteOffset = OBJ_PLTT_ID(battlerId);
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
lzPaletteData = GetMonFrontSpritePal(mon);
@@ -383,14 +382,8 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId)
}
isShiny = GetMonData(mon, MON_DATA_IS_SHINY, NULL);
position = GetBattlerPosition(battlerId);
if (ShouldIgnoreDeoxysForm(DEOXYS_CHECK_BATTLE_SPRITE, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE)
HandleLoadSpecialPokePic_DontHandleDeoxys(FALSE,
gMonSpritesGfxPtr->sprites[position],
species, currentPersonality);
else
HandleLoadSpecialPokePic(FALSE,
gMonSpritesGfxPtr->sprites[position],
species, currentPersonality);
HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->sprites[position], species, currentPersonality);
paletteOffset = OBJ_PLTT_ID(battlerId);
if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE)
lzPaletteData = GetMonFrontSpritePal(mon);

View File

@@ -290,6 +290,310 @@ const struct OamData gOamData_BattlerPlayer =
.paletteNum = 2,
.affineParam = 0,
};
// .generic is large enough that the text for TYPE_ELECTRIC will exceed TEXT_BUFF_ARRAY_COUNT.
const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] =
{
[TYPE_NORMAL] =
{
.name = _("Normal"),
.generic = _("a NORMAL move"),
.palette = 13,
.zMove = MOVE_BREAKNECK_BLITZ,
.maxMove = MOVE_MAX_STRIKE,
//.enhanceItem = ITEM_SILK_SCARF,
//.berry = ITEM_CHILAN_BERRY,
//.gem = ITEM_NORMAL_GEM,
//.zCrystal = ITEM_NORMALIUM_Z,
//.teraShard = ITEM_NORMAL_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_NORMAL,
},
[TYPE_FIGHTING] =
{
.name = _("Fight"),
.generic = _("a FIGHTING move"),
.palette = 13,
.zMove = MOVE_ALL_OUT_PUMMELING,
.maxMove = MOVE_MAX_KNUCKLE,
//.enhanceItem = ITEM_BLACK_BELT,
//.berry = ITEM_CHOPLE_BERRY,
//.gem = ITEM_FIGHTING_GEM,
//.zCrystal = ITEM_FIGHTINIUM_Z,
//.plate = ITEM_FIST_PLATE,
//.memory = ITEM_FIGHTING_MEMORY,
//.teraShard = ITEM_FIGHTING_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_FIGHTING,
},
[TYPE_FLYING] =
{
.name = _("Flying"),
.generic = _("a FLYING move"),
.palette = 14,
.zMove = MOVE_SUPERSONIC_SKYSTRIKE,
.maxMove = MOVE_MAX_AIRSTREAM,
//.enhanceItem = ITEM_SHARP_BEAK,
//.berry = ITEM_COBA_BERRY,
//.gem = ITEM_FLYING_GEM,
//.zCrystal = ITEM_FLYINIUM_Z,
//.plate = ITEM_SKY_PLATE,
//.memory = ITEM_FLYING_MEMORY,
//.teraShard = ITEM_FLYING_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_FLYING,
},
[TYPE_POISON] =
{
.name = _("Poison"),
.generic = _("a POISON move"),
.palette = 14,
.zMove = MOVE_ACID_DOWNPOUR,
.maxMove = MOVE_MAX_OOZE,
//.enhanceItem = ITEM_POISON_BARB,
//.berry = ITEM_KEBIA_BERRY,
//.gem = ITEM_POISON_GEM,
//.zCrystal = ITEM_POISONIUM_Z,
//.plate = ITEM_TOXIC_PLATE,
//.memory = ITEM_POISON_MEMORY,
//.teraShard = ITEM_POISON_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_POISON,
},
[TYPE_GROUND] =
{
.name = _("Ground"),
.generic = _("a GROUND move"),
.palette = 13,
.zMove = MOVE_TECTONIC_RAGE,
.maxMove = MOVE_MAX_QUAKE,
//.enhanceItem = ITEM_SOFT_SAND,
//.berry = ITEM_SHUCA_BERRY,
//.gem = ITEM_GROUND_GEM,
//.zCrystal = ITEM_GROUNDIUM_Z,
//.plate = ITEM_EARTH_PLATE,
//.memory = ITEM_GROUND_MEMORY,
//.teraShard = ITEM_GROUND_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_GROUND,
},
[TYPE_ROCK] =
{
.name = _("Rock"),
.generic = _("a ROCK move"),
.palette = 13,
.zMove = MOVE_CONTINENTAL_CRUSH,
.maxMove = MOVE_MAX_ROCKFALL,
//.enhanceItem = ITEM_HARD_STONE,
//.berry = ITEM_CHARTI_BERRY,
//.gem = ITEM_ROCK_GEM,
//.zCrystal = ITEM_ROCKIUM_Z,
//.plate = ITEM_STONE_PLATE,
//.memory = ITEM_ROCK_MEMORY,
//.teraShard = ITEM_ROCK_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_ROCK,
},
[TYPE_BUG] =
{
.name = _("Bug"),
.generic = _("a BUG move"),
.palette = 15,
.zMove = MOVE_SAVAGE_SPIN_OUT,
.maxMove = MOVE_MAX_FLUTTERBY,
//.enhanceItem = ITEM_SILVER_POWDER,
//.berry = ITEM_TANGA_BERRY,
//.gem = ITEM_BUG_GEM,
//.zCrystal = ITEM_BUGINIUM_Z,
//.plate = ITEM_INSECT_PLATE,
//.memory = ITEM_BUG_MEMORY,
//.teraShard = ITEM_BUG_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_BUG,
},
[TYPE_GHOST] =
{
.name = _("Ghost"),
.generic = _("a GHOST move"),
.palette = 14,
.zMove = MOVE_NEVER_ENDING_NIGHTMARE,
.maxMove = MOVE_MAX_PHANTASM,
//.enhanceItem = ITEM_SPELL_TAG,
//.berry = ITEM_KASIB_BERRY,
//.gem = ITEM_GHOST_GEM,
//.zCrystal = ITEM_GHOSTIUM_Z,
//.plate = ITEM_SPOOKY_PLATE,
//.memory = ITEM_GHOST_MEMORY,
//.teraShard = ITEM_GHOST_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_GHOST,
},
[TYPE_STEEL] =
{
.name = _("Steel"),
.generic = _("a STEEL move"),
.palette = 13,
.zMove = MOVE_CORKSCREW_CRASH,
.maxMove = MOVE_MAX_STEELSPIKE,
//.enhanceItem = ITEM_METAL_COAT,
//.berry = ITEM_BABIRI_BERRY,
//.gem = ITEM_STEEL_GEM,
//.zCrystal = ITEM_STEELIUM_Z,
//.plate = ITEM_IRON_PLATE,
//.memory = ITEM_STEEL_MEMORY,
//.teraShard = ITEM_STEEL_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_STEEL,
},
[TYPE_MYSTERY] =
{
.name = _("???"),
.generic = _("a ??? move"),
.palette = 15,
},
[TYPE_FIRE] =
{
.name = _("Fire"),
.generic = _("a FIRE move"),
.palette = 13,
.zMove = MOVE_INFERNO_OVERDRIVE,
.maxMove = MOVE_MAX_FLARE,
//.enhanceItem = ITEM_CHARCOAL,
//.berry = ITEM_OCCA_BERRY,
//.gem = ITEM_FIRE_GEM,
//.zCrystal = ITEM_FIRIUM_Z,
//.plate = ITEM_FLAME_PLATE,
//.memory = ITEM_FIRE_MEMORY,
//.teraShard = ITEM_FIRE_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_FIRE,
},
[TYPE_WATER] =
{
.name = _("Water"),
.generic = _("a WATER move"),
.palette = 14,
.zMove = MOVE_HYDRO_VORTEX,
.maxMove = MOVE_MAX_GEYSER,
//.enhanceItem = ITEM_MYSTIC_WATER,
//.berry = ITEM_PASSHO_BERRY,
//.gem = ITEM_WATER_GEM,
//.zCrystal = ITEM_WATERIUM_Z,
//.plate = ITEM_SPLASH_PLATE,
//.memory = ITEM_WATER_MEMORY,
//.teraShard = ITEM_WATER_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_WATER,
},
[TYPE_GRASS] =
{
.name = _("Grass"),
.generic = _("a GRASS move"),
.palette = 15,
.zMove = MOVE_BLOOM_DOOM,
.maxMove = MOVE_MAX_OVERGROWTH,
//.enhanceItem = ITEM_MIRACLE_SEED,
//.berry = ITEM_RINDO_BERRY,
//.gem = ITEM_GRASS_GEM,
//.zCrystal = ITEM_GRASSIUM_Z,
//.plate = ITEM_MEADOW_PLATE,
//.memory = ITEM_GRASS_MEMORY,
//.teraShard = ITEM_GRASS_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_GRASS,
},
[TYPE_ELECTRIC] =
{
.name = _("Electr"),
.generic = _("an ELECTRIC move"),
.palette = 13,
.zMove = MOVE_GIGAVOLT_HAVOC,
.maxMove = MOVE_MAX_LIGHTNING,
//.enhanceItem = ITEM_MAGNET,
//.berry = ITEM_WACAN_BERRY,
//.gem = ITEM_ELECTRIC_GEM,
//.zCrystal = ITEM_ELECTRIUM_Z,
//.plate = ITEM_ZAP_PLATE,
//.memory = ITEM_ELECTRIC_MEMORY,
//.teraShard = ITEM_ELECTRIC_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_ELECTRIC,
},
[TYPE_PSYCHIC] =
{
.name = _("Psychc"),
.generic = _("a PSYCHIC move"),
.palette = 14,
.zMove = MOVE_SHATTERED_PSYCHE,
.maxMove = MOVE_MAX_MINDSTORM,
//.enhanceItem = ITEM_TWISTED_SPOON,
//.berry = ITEM_PAYAPA_BERRY,
//.gem = ITEM_PSYCHIC_GEM,
//.zCrystal = ITEM_PSYCHIUM_Z,
//.plate = ITEM_MIND_PLATE,
//.memory = ITEM_PSYCHIC_MEMORY,
//.teraShard = ITEM_PSYCHIC_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_PSYCHIC,
},
[TYPE_ICE] =
{
.name = _("Ice"),
.generic = _("an ICE move"),
.palette = 14,
.zMove = MOVE_SUBZERO_SLAMMER,
.maxMove = MOVE_MAX_HAILSTORM,
//.enhanceItem = ITEM_NEVER_MELT_ICE,
//.berry = ITEM_YACHE_BERRY,
//.gem = ITEM_ICE_GEM,
//.zCrystal = ITEM_ICIUM_Z,
//.plate = ITEM_ICICLE_PLATE,
//.memory = ITEM_ICE_MEMORY,
//.teraShard = ITEM_ICE_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_ICE,
},
[TYPE_DRAGON] =
{
.name = _("Dragon"),
.generic = _("a DRAGON move"),
.palette = 15,
.zMove = MOVE_DEVASTATING_DRAKE,
.maxMove = MOVE_MAX_WYRMWIND,
//.enhanceItem = ITEM_DRAGON_FANG,
//.berry = ITEM_HABAN_BERRY,
//.gem = ITEM_DRAGON_GEM,
//.zCrystal = ITEM_DRAGONIUM_Z,
//.plate = ITEM_DRACO_PLATE,
//.memory = ITEM_DRAGON_MEMORY,
//.teraShard = ITEM_DRAGON_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_DRAGON,
},
[TYPE_DARK] =
{
.name = _("Dark"),
.generic = _("a DARK move"),
.palette = 13,
.zMove = MOVE_BLACK_HOLE_ECLIPSE,
.maxMove = MOVE_MAX_DARKNESS,
//.enhanceItem = ITEM_BLACK_GLASSES,
//.berry = ITEM_COLBUR_BERRY,
//.gem = ITEM_DARK_GEM,
//.zCrystal = ITEM_DARKINIUM_Z,
//.plate = ITEM_DREAD_PLATE,
//.memory = ITEM_DARK_MEMORY,
//.teraShard = ITEM_DARK_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_DARK,
},
[TYPE_FAIRY] =
{
.name = _("Fairy"),
.generic = _("a FAIRY move"),
.palette = 14,
.zMove = MOVE_TWINKLE_TACKLE,
.maxMove = MOVE_MAX_STARFALL,
//.enhanceItem = ITEM_FAIRY_FEATHER,
//.berry = ITEM_ROSELI_BERRY,
//.gem = ITEM_FAIRY_GEM,
//.zCrystal = ITEM_FAIRIUM_Z,
//.plate = ITEM_PIXIE_PLATE,
//.memory = ITEM_FAIRY_MEMORY,
//.teraShard = ITEM_FAIRY_TERA_SHARD,
//.arceusForm = SPECIES_ARCEUS_FAIRY,
},
/*
[TYPE_STELLAR] =
{
.name = _("Stellar"),
.teraShard = ITEM_STELLAR_TERA_SHARD,
},
*/
};
static const union AnimCmd sAnim_Unused[] =
{

File diff suppressed because it is too large Load Diff

View File

@@ -15632,14 +15632,8 @@ static void Cmd_displaydexinfo(void)
case 4:
if (!IsDma3ManagerBusyWithBgCopy())
{
CreateMonPicSprite_HandleDeoxys(species,
gBattleMons[B_POSITION_OPPONENT_LEFT].isShiny,
gBattleMons[B_POSITION_OPPONENT_LEFT].personality,
TRUE,
120,
64,
0,
0xFFFF);
struct Pokemon *mon = &gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]];
CreateMonPicSprite(species, GetMonData(mon, MON_DATA_IS_SHINY), GetMonData(mon, MON_DATA_PERSONALITY), TRUE, 120, 64, 0, 0xFFFF);
CpuFill32(0, gPlttBufferFaded, BG_PLTT_SIZE);
BeginNormalPaletteFade(0x1FFFF, 0, 16, 0, RGB_BLACK);
ShowBg(0);

File diff suppressed because it is too large Load Diff

View File

@@ -8263,37 +8263,37 @@
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_CASTFORM"
"species": "SPECIES_DEOXYS"
},
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_CASTFORM"
"species": "SPECIES_DEOXYS"
},
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_MIMIKYU"
"species": "SPECIES_DEOXYS_ATTACK"
},
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_MIMIKYU"
"species": "SPECIES_DEOXYS_ATTACK"
},
{
"min_level": 2,
"max_level": 2,
"species": "SPECIES_MIMIKYU"
"species": "SPECIES_DEOXYS_DEFENSE"
},
{
"min_level": 2,
"max_level": 2,
"species": "SPECIES_MIMIKYU"
"species": "SPECIES_DEOXYS_DEFENSE"
},
{
"min_level": 3,
"max_level": 3,
"species": "SPECIES_MIMIKYU"
"species": "SPECIES_DEOXYS_DEFENSE"
},
{
"min_level": 3,

View File

@@ -317,18 +317,3 @@ u32 GetDecompressedDataSize(const u8 *ptr)
ptr8[3] = 0;
return ptr32[0];
}
void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void *buffer)
{
DecompressPicFromTable(src, buffer);
}
void HandleLoadSpecialPokePic_DontHandleDeoxys(bool32 isFrontPic, void *dest, s32 species, u32 personality)
{
LoadSpecialPokePic_DontHandleDeoxys(dest, species, personality, isFrontPic);
}
void LoadSpecialPokePic_DontHandleDeoxys(void *dest, s32 species, u32 personality, bool8 isFrontPic)
{
LoadSpecialPokePic(dest, species, personality, isFrontPic);
}

View File

@@ -607,7 +607,7 @@ static u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority)
u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
{
u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, FALSE, 0x8000, TRUE, x, y, 0, species);
u16 spriteId = CreateMonPicSprite(species, FALSE, 0x8000, TRUE, x, y, 0, species);
PreservePaletteInWeather(IndexOfSpritePaletteTag(species) + 0x10);
if (spriteId == 0xFFFF)
return MAX_SPRITES;
@@ -617,7 +617,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority)
static u8 CreateMonSprite_FieldMove(u16 species, bool32 isShiny, u32 personality, s16 x, s16 y, u8 subpriority)
{
u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, isShiny, personality, 1, x, y, 0, species);
u16 spriteId = CreateMonPicSprite(species, isShiny, personality, 1, x, y, 0, species);
PreservePaletteInWeather(IndexOfSpritePaletteTag(species) + 0x10);
if (spriteId == 0xFFFF)
return MAX_SPRITES;

View File

@@ -512,7 +512,7 @@ static void Task_Hof_DisplayMon(u8 taskId)
dstY = sHallOfFame_MonHalfTeamPositions[currMonId][3];
}
spriteId = CreateMonPicSprite_HandleDeoxys(currMon->species, currMon->isShiny, currMon->personality, 1, srcX, srcY, currMonId, 0xFFFF);
spriteId = CreateMonPicSprite(currMon->species, currMon->isShiny, currMon->personality, 1, srcX, srcY, currMonId, 0xFFFF);
gSprites[spriteId].data[1] = dstX;
gSprites[spriteId].data[2] = dstY;
gSprites[spriteId].data[0] = 0;
@@ -830,8 +830,7 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId)
posY = sHallOfFame_MonHalfTeamPositions[i][3];
}
spriteId = CreateMonPicSprite_HandleDeoxys(currMon->species, currMon->isShiny, currMon->personality, TRUE, posX,
posY, i, 0xFFFF);
spriteId = CreateMonPicSprite(currMon->species, currMon->isShiny, currMon->personality, TRUE, posX, posY, i, 0xFFFF);
gSprites[spriteId].oam.priority = 1;
gTasks[taskId].data[5 + i] = spriteId;
}

View File

@@ -57,6 +57,7 @@
#include "tm_case.h"
#include "trade.h"
#include "union_room.h"
#include "constants/abilities.h"
#include "constants/battle.h"
#include "constants/easy_chat.h"
#include "constants/field_effects.h"

View File

@@ -3109,7 +3109,7 @@ u8 DexScreen_DrawMonAreaPage(void)
if (monIsCaught)
{
sPokedexScreenData->windowIds[14] = CreateMonPicSprite_HandleDeoxys(species, FALSE, DexScreen_GetDefaultPersonality(species), TRUE, 40, 104, 0, 0xFFFF);
sPokedexScreenData->windowIds[14] = CreateMonPicSprite(species, FALSE, DexScreen_GetDefaultPersonality(species), TRUE, 40, 104, 0, 0xFFFF);
gSprites[sPokedexScreenData->windowIds[14]].oam.paletteNum = 2;
gSprites[sPokedexScreenData->windowIds[14]].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[sPokedexScreenData->windowIds[14]].oam.matrixNum = 2;

View File

@@ -4017,21 +4017,7 @@ static void PokeSum_CreateMonPicSprite(void)
personality = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_PERSONALITY);
isShiny = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_IS_SHINY, NULL);
if (sMonSummaryScreen->savedCallback == CB2_ReturnToTradeMenuFromSummary)
{
if (sMonSummaryScreen->isEnemyParty == TRUE)
spriteId = CreateMonPicSprite(species, isShiny, personality, TRUE, 60, 65, 12, 0xffff, TRUE);
else
spriteId = CreateMonPicSprite_HandleDeoxys(species, isShiny, personality, TRUE, 60, 65, 12, 0xffff);
}
else
{
if (ShouldIgnoreDeoxysForm(DEOXYS_CHECK_TRADE_MAIN, sLastViewedMonIndex))
spriteId = CreateMonPicSprite(species, isShiny, personality, TRUE, 60, 65, 12, 0xffff, TRUE);
else
spriteId = CreateMonPicSprite_HandleDeoxys(species, isShiny, personality, TRUE, 60, 65, 12, 0xffff);
}
spriteId = CreateMonPicSprite(species, isShiny, personality, TRUE, 60, 65, 12, 0xffff);
FreeSpriteOamMatrix(&gSprites[spriteId]);
if (!IsMonSpriteNotFlipped(species))

View File

@@ -756,10 +756,7 @@ static void LoadTradeMonPic(u8 whichParty, u8 state)
species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG);
personality = GetMonData(mon, MON_DATA_PERSONALITY);
if (whichParty == TRADE_PLAYER)
HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites[1], species, personality);
else
HandleLoadSpecialPokePic_DontHandleDeoxys(TRUE, gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality);
HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality);
LoadCompressedSpritePaletteWithTag(GetMonFrontSpritePal(mon), species);
sTradeAnim->monSpecies[whichParty] = species;

View File

@@ -40,24 +40,11 @@ bool16 ResetAllPicSprites(void)
return FALSE;
}
static bool16 DecompressPic(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer, bool8 ignoreDeoxys)
static bool16 DecompressPic(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer)
{
if (!isTrainer)
{
if (isFrontPic)
{
if (!ignoreDeoxys)
LoadSpecialPokePic(dest, species, personality, isFrontPic);
else
LoadSpecialPokePic_DontHandleDeoxys(dest, species, personality, isFrontPic);
}
else
{
if (!ignoreDeoxys)
LoadSpecialPokePic(dest, species, personality, isFrontPic);
else
LoadSpecialPokePic_DontHandleDeoxys(dest, species, personality, isFrontPic);
}
LoadSpecialPokePic(dest, species, personality, isFrontPic);
}
else
{
@@ -69,11 +56,6 @@ static bool16 DecompressPic(u16 species, u32 personality, bool8 isFrontPic, u8 *
return FALSE;
}
static bool16 DecompressPic_HandleDeoxys(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer)
{
return DecompressPic(species, personality, isFrontPic, dest, isTrainer, FALSE);
}
void LoadPicPaletteByTagOrSlot(u16 species, bool32 isShiny, u32 personality, u8 paletteSlot, u16 paletteTag, bool8 isTrainer)
{
if (!isTrainer)
@@ -120,7 +102,7 @@ void AssignSpriteAnimsTable(bool8 isTrainer)
sCreatingSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[0];
}
u16 CreatePicSprite(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer, bool8 ignoreDeoxys)
u16 CreatePicSprite(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer)
{
u8 i;
u8 *framePics;
@@ -146,7 +128,7 @@ u16 CreatePicSprite(u16 species, bool32 isShiny, u32 personality, bool8 isFrontP
Free(framePics);
return 0xFFFF;
}
if (DecompressPic(species, personality, isFrontPic, framePics, isTrainer, ignoreDeoxys))
if (DecompressPic(species, personality, isFrontPic, framePics, isTrainer))
{
// debug trap?
return 0xFFFF;
@@ -174,11 +156,6 @@ u16 CreatePicSprite(u16 species, bool32 isShiny, u32 personality, bool8 isFrontP
return spriteId;
}
u16 CreatePicSprite_HandleDeoxys(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer)
{
return CreatePicSprite(species, isShiny, personality, isFrontPic, x, y, paletteSlot, paletteTag, isTrainer, FALSE);
}
u16 FreeAndDestroyPicSpriteInternal(u16 spriteId)
{
u8 i;
@@ -206,7 +183,7 @@ u16 FreeAndDestroyPicSpriteInternal(u16 spriteId)
static u16 LoadPicSpriteInWindow(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId, bool8 isTrainer)
{
if (DecompressPic_HandleDeoxys(species, personality, isFrontPic, (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), FALSE))
if (DecompressPic(species, personality, isFrontPic, (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), FALSE))
return 0xFFFF;
LoadPicPaletteBySlot(species, isShiny, personality, paletteSlot, isTrainer);
@@ -218,7 +195,7 @@ u16 CreateTrainerCardSprite(u16 species, bool32 isShiny, u32 personality, bool8
u8 *framePics;
framePics = Alloc(4 * 0x800);
if (framePics && !DecompressPic_HandleDeoxys(species, personality, isFrontPic, framePics, isTrainer))
if (framePics && !DecompressPic(species, personality, isFrontPic, framePics, isTrainer))
{
BlitBitmapRectToWindow(windowId, framePics, 0, 0, 0x40, 0x40, destX, destY, 0x40, 0x40);
LoadPicPaletteBySlot(species, isShiny, personality, paletteSlot, isTrainer);
@@ -228,14 +205,9 @@ u16 CreateTrainerCardSprite(u16 species, bool32 isShiny, u32 personality, bool8
return 0xFFFF;
}
u16 CreateMonPicSprite(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 ignoreDeoxys)
u16 CreateMonPicSprite(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
{
return CreatePicSprite(species, isShiny, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE, ignoreDeoxys);
}
u16 CreateMonPicSprite_HandleDeoxys(u16 species, bool32 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
{
return CreateMonPicSprite(species, isShiny, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE);
return CreatePicSprite(species, isShiny, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE);
}
u16 FreeAndDestroyMonPicSprite(u16 spriteId)
@@ -250,7 +222,7 @@ u16 LoadMonPicInWindow(u16 species, bool32 isShiny, u32 personality, bool8 isFro
u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag)
{
return CreatePicSprite_HandleDeoxys(species, FALSE, 0, isFrontPic, x, y, paletteSlot, paletteTag, TRUE);
return CreatePicSprite(species, FALSE, 0, isFrontPic, x, y, paletteSlot, paletteTag, TRUE);
}
u16 FreeAndDestroyTrainerPicSprite(u16 spriteId)