From e4f8b4ccf041b05d6c7697fa0f9aa1b2116d1844 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 4 Dec 2024 11:31:28 -0300 Subject: [PATCH] Addressed review changes (minus encapsulation) --- asm/macros/battle_script.inc | 4 +- data/battle_scripts_1.s | 4 +- include/battle.h | 2 +- include/battle_message.h | 3 +- include/config/general.h | 2 +- include/constants/battle_script_commands.h | 16 +- include/constants/battle_string_ids.h | 389 ++++++++++----------- src/battle_message.c | 3 +- src/battle_script_commands.c | 132 +++---- test/battle/ability/commander.c | 4 +- test/battle/ability/tera_shell.c | 20 -- test/battle/move_effect/absorb.c | 14 - test/battle/move_effect/dragon_darts.c | 11 - test/battle/move_effect/endeavor.c | 2 + test/battle/move_effect/explosion.c | 1 + test/battle/move_effect/mind_blown.c | 1 + test/battle/spread_moves.c | 47 +-- 17 files changed, 292 insertions(+), 363 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 26835c2e0d..c9c95515f0 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -356,7 +356,7 @@ .byte 0x3a .endm - .macro absorb battler:req + .macro absorbhealthbarupdate battler:req .byte 0x3b .byte \battler .endm @@ -832,7 +832,7 @@ .byte 0x94 .endm - .macro unused_95 + .macro copybidedmg .byte 0x95 .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 44cb8ff6bc..5c6e53aa99 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3017,7 +3017,7 @@ BattleScript_EffectAbsorbLiquidOoze:: goto BattleScript_EffectAbsorb BattleScript_EffectAbsorb:: - absorb BS_ATTACKER + absorbhealthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printfromtable gAbsorbDrainStringIds waitmessage B_WAIT_TIME_LONG @@ -6081,7 +6081,7 @@ BattleScript_BideAttack:: accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE typecalc clearmoveresultflags MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE - unused_95 + copybidedmg adjustdamage setbyte sB_ANIM_TURN, 1 attackanimation diff --git a/include/battle.h b/include/battle.h index 301c87681b..bb65a4b181 100644 --- a/include/battle.h +++ b/include/battle.h @@ -1211,7 +1211,7 @@ static inline bool32 IsSpreadMove(u32 moveTarget) static inline bool32 IsDoubleSpreadMove(void) { - return gBattleStruct->numSpreadTargets > 1 + return gBattleStruct->numSpreadTargets > 1 && !(gHitMarker & (HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_UNABLE_TO_USE_MOVE)) && IsSpreadMove(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove)); } diff --git a/include/battle_message.h b/include/battle_message.h index 60fa8c507a..914e97d5d6 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -74,8 +74,7 @@ #define B_TXT_DEF_TEAM1 0x3A // Your/The opposing #define B_TXT_DEF_TEAM2 0x3B // your/the opposing #define B_TXT_DEF_PARTNER_NAME 0x3C -// #define B_TXT_SELECTION_NAME 0x3C - removed -// #define B_TXT_SELECTION_NAME2 0x3D no Illusion check - removed +// #define B_UNUSED_0x3D 0x3D #define B_TXT_ATK_NAME_WITH_PREFIX2 0x3E //lowercase #define B_TXT_DEF_NAME_WITH_PREFIX2 0x3F //lowercase #define B_TXT_EFF_NAME_WITH_PREFIX2 0x40 //lowercase diff --git a/include/config/general.h b/include/config/general.h index bd34106832..cff1432bb7 100644 --- a/include/config/general.h +++ b/include/config/general.h @@ -6,7 +6,7 @@ // still has them in the ROM. This is because the developers forgot // to define NDEBUG before release, however this has been changed as // Ruby's actual debug build does not use the AGBPrint features. -// #define NDEBUG +#define NDEBUG // To enable printf debugging, comment out "#define NDEBUG". This allows // the various AGBPrint functions to be used. (See include/gba/isagbprint.h). diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 196cea0b42..609090b12e 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -222,14 +222,14 @@ #define VARIOUS_SWAP_STATS 130 // Cmd_manipulatedamage -#define DMG_CHANGE_SIGN 1 -#define DMG_RECOIL_FROM_MISS 2 -#define DMG_DOUBLED 3 -#define DMG_1_8_TARGET_HP 4 -#define DMG_FULL_ATTACKER_HP 5 -#define DMG_CURR_ATTACKER_HP 6 -#define DMG_BIG_ROOT 7 -#define DMG_RECOIL_FROM_IMMUNE 8 // Used to calculate recoil for the Gen 4 version of Jump Kick +#define DMG_CHANGE_SIGN 1 +#define DMG_RECOIL_FROM_MISS 2 +#define DMG_DOUBLED 3 +#define DMG_1_8_TARGET_HP 4 +#define DMG_FULL_ATTACKER_HP 5 +#define DMG_CURR_ATTACKER_HP 6 +#define DMG_BIG_ROOT 7 +#define DMG_RECOIL_FROM_IMMUNE 8 // Used to calculate recoil for the Gen 4 version of Jump Kick // Cmd_jumpifcantswitch #define SWITCH_IGNORE_ESCAPE_PREVENTION (1 << 7) diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index b2a569aef8..5149e85bcf 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -531,205 +531,204 @@ #define STRINGID_LASERFOCUS 529 #define STRINGID_GEMACTIVATES 530 #define STRINGID_BERRYDMGREDUCES 531 -#define STRINGID_TARGETATEITEM 532 -#define STRINGID_AIRBALLOONFLOAT 533 -#define STRINGID_AIRBALLOONPOP 534 -#define STRINGID_INCINERATEBURN 535 -#define STRINGID_BUGBITE 536 -#define STRINGID_ILLUSIONWOREOFF 537 -#define STRINGID_ATTACKERCUREDTARGETSTATUS 538 -#define STRINGID_ATTACKERLOSTFIRETYPE 539 -#define STRINGID_HEALERCURE 540 -#define STRINGID_SCRIPTINGABILITYSTATRAISE 541 -#define STRINGID_RECEIVERABILITYTAKEOVER 542 -#define STRINGID_PKNMABSORBINGPOWER 543 -#define STRINGID_NOONEWILLBEABLETORUNAWAY 544 -#define STRINGID_DESTINYKNOTACTIVATES 545 -#define STRINGID_CLOAKEDINAFREEZINGLIGHT 546 -#define STRINGID_CLEARAMULETWONTLOWERSTATS 547 -#define STRINGID_FERVENTWISHREACHED 548 -#define STRINGID_AIRLOCKACTIVATES 549 -#define STRINGID_PRESSUREENTERS 550 -#define STRINGID_DARKAURAENTERS 551 -#define STRINGID_FAIRYAURAENTERS 552 -#define STRINGID_AURABREAKENTERS 553 -#define STRINGID_COMATOSEENTERS 554 -#define STRINGID_SCREENCLEANERENTERS 555 -#define STRINGID_FETCHEDPOKEBALL 556 -#define STRINGID_BATTLERABILITYRAISEDSTAT 557 -#define STRINGID_ASANDSTORMKICKEDUP 558 -#define STRINGID_PKMNSWILLPERISHIN3TURNS 559 -#define STRINGID_ABILITYRAISEDSTATDRASTICALLY 560 -#define STRINGID_AURAFLAREDTOLIFE 561 -#define STRINGID_ASONEENTERS 562 -#define STRINGID_CURIOUSMEDICINEENTERS 563 -#define STRINGID_CANACTFASTERTHANKSTO 564 -#define STRINGID_MICLEBERRYACTIVATES 565 -#define STRINGID_PKMNSHOOKOFFTHETAUNT 566 -#define STRINGID_PKMNGOTOVERITSINFATUATION 567 -#define STRINGID_ITEMCANNOTBEREMOVED 568 -#define STRINGID_STICKYBARBTRANSFER 569 -#define STRINGID_PKMNBURNHEALED 570 -#define STRINGID_REDCARDACTIVATE 571 -#define STRINGID_EJECTBUTTONACTIVATE 572 -#define STRINGID_ATKGOTOVERINFATUATION 573 -#define STRINGID_TORMENTEDNOMORE 574 -#define STRINGID_HEALBLOCKEDNOMORE 575 -#define STRINGID_ATTACKERBECAMEFULLYCHARGED 576 -#define STRINGID_ATTACKERBECAMEASHSPECIES 577 -#define STRINGID_EXTREMELYHARSHSUNLIGHT 578 -#define STRINGID_EXTREMESUNLIGHTFADED 579 -#define STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT 580 -#define STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED 581 -#define STRINGID_HEAVYRAIN 582 -#define STRINGID_HEAVYRAINLIFTED 583 -#define STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN 584 -#define STRINGID_NORELIEFROMHEAVYRAIN 585 -#define STRINGID_MYSTERIOUSAIRCURRENT 586 -#define STRINGID_STRONGWINDSDISSIPATED 587 -#define STRINGID_MYSTERIOUSAIRCURRENTBLOWSON 588 -#define STRINGID_ATTACKWEAKENEDBSTRONGWINDS 589 -#define STRINGID_STUFFCHEEKSCANTSELECT 590 -#define STRINGID_PKMNREVERTEDTOPRIMAL 591 -#define STRINGID_BUTPOKEMONCANTUSETHEMOVE 592 -#define STRINGID_BUTHOOPACANTUSEIT 593 -#define STRINGID_BROKETHROUGHPROTECTION 594 -#define STRINGID_ABILITYALLOWSONLYMOVE 595 -#define STRINGID_SWAPPEDABILITIES 596 -#define STRINGID_PASTELVEILPROTECTED 597 -#define STRINGID_PASTELVEILENTERS 598 -#define STRINGID_BATTLERTYPECHANGEDTO 599 -#define STRINGID_BOTHCANNOLONGERESCAPE 600 -#define STRINGID_CANTESCAPEDUETOUSEDMOVE 601 -#define STRINGID_PKMNBECAMEWEAKERTOFIRE 602 -#define STRINGID_ABOUTTOUSEPOLTERGEIST 603 -#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 604 -#define STRINGID_NEUTRALIZINGGASENTERS 605 -#define STRINGID_NEUTRALIZINGGASOVER 606 -#define STRINGID_TARGETTOOHEAVY 607 -#define STRINGID_PKMNTOOKTARGETHIGH 608 -#define STRINGID_PKMNINSNAPTRAP 609 -#define STRINGID_METEORBEAMCHARGING 610 -#define STRINGID_HEATUPBEAK 611 -#define STRINGID_COURTCHANGE 612 -#define STRINGID_PLAYERLOSTTOENEMYTRAINER 613 -#define STRINGID_PLAYERPAIDPRIZEMONEY 614 -#define STRINGID_ZPOWERSURROUNDS 615 -#define STRINGID_ZMOVEUNLEASHED 616 -#define STRINGID_ZMOVERESETSSTATS 617 -#define STRINGID_ZMOVEALLSTATSUP 618 -#define STRINGID_ZMOVEZBOOSTCRIT 619 -#define STRINGID_ZMOVERESTOREHP 620 -#define STRINGID_ZMOVESTATUP 621 -#define STRINGID_ZMOVEHPTRAP 622 -#define STRINGID_ATTACKEREXPELLEDTHEPOISON 623 -#define STRINGID_ATTACKERSHOOKITSELFAWAKE 624 -#define STRINGID_ATTACKERBROKETHROUGHPARALYSIS 625 -#define STRINGID_ATTACKERHEALEDITSBURN 626 -#define STRINGID_ATTACKERMELTEDTHEICE 627 -#define STRINGID_TARGETTOUGHEDITOUT 628 -#define STRINGID_ATTACKERLOSTELECTRICTYPE 629 -#define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 630 -#define STRINGID_BEINGHITCHARGEDPKMNWITHPOWER 631 -#define STRINGID_SUNLIGHTACTIVATEDABILITY 632 -#define STRINGID_STATWASHEIGHTENED 633 -#define STRINGID_ELECTRICTERRAINACTIVATEDABILITY 634 -#define STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT 635 -#define STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN 636 -#define STRINGID_PKMNSABILITYPREVENTSABILITY 637 -#define STRINGID_PREPARESHELLTRAP 638 -#define STRINGID_SHELLTRAPDIDNTWORK 639 -#define STRINGID_SPIKESDISAPPEAREDFROMTEAM 640 -#define STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM 641 -#define STRINGID_STICKYWEBDISAPPEAREDFROMTEAM 642 -#define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 643 -#define STRINGID_COULDNTFULLYPROTECT 644 -#define STRINGID_STOCKPILEDEFFECTWOREOFF 645 -#define STRINGID_PKMNREVIVEDREADYTOFIGHT 646 -#define STRINGID_ITEMRESTOREDSPECIESHEALTH 647 -#define STRINGID_ITEMCUREDSPECIESSTATUS 648 -#define STRINGID_ITEMRESTOREDSPECIESPP 649 -#define STRINGID_THUNDERCAGETRAPPED 650 -#define STRINGID_PKMNHURTBYFROSTBITE 651 -#define STRINGID_PKMNGOTFROSTBITE 652 -#define STRINGID_PKMNSITEMHEALEDFROSTBITE 653 -#define STRINGID_ATTACKERHEALEDITSFROSTBITE 654 -#define STRINGID_PKMNFROSTBITEHEALED 655 -#define STRINGID_PKMNFROSTBITEHEALED2 656 -#define STRINGID_PKMNFROSTBITEHEALEDBY 657 -#define STRINGID_MIRRORHERBCOPIED 658 -#define STRINGID_STARTEDSNOW 659 -#define STRINGID_SNOWCONTINUES 660 -#define STRINGID_SNOWSTOPPED 661 -#define STRINGID_SNOWWARNINGSNOW 662 -#define STRINGID_PKMNITEMMELTED 663 -#define STRINGID_ULTRABURSTREACTING 664 -#define STRINGID_ULTRABURSTCOMPLETED 665 -#define STRINGID_TEAMGAINEDEXP 666 -#define STRINGID_CURRENTMOVECANTSELECT 667 -#define STRINGID_TARGETISBEINGSALTCURED 668 -#define STRINGID_TARGETISHURTBYSALTCURE 669 -#define STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP 670 -#define STRINGID_SHARPSTEELFLOATS 671 -#define STRINGID_SHARPSTEELDMG 672 -#define STRINGID_PKMNBLEWAWAYSHARPSTEEL 673 -#define STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM 674 -#define STRINGID_TEAMTRAPPEDWITHVINES 675 -#define STRINGID_PKMNHURTBYVINES 676 -#define STRINGID_TEAMCAUGHTINVORTEX 677 -#define STRINGID_PKMNHURTBYVORTEX 678 -#define STRINGID_TEAMSURROUNDEDBYFIRE 679 -#define STRINGID_PKMNBURNINGUP 680 -#define STRINGID_TEAMSURROUNDEDBYROCKS 681 -#define STRINGID_PKMNHURTBYROCKSTHROWN 682 -#define STRINGID_MOVEBLOCKEDBYDYNAMAX 683 -#define STRINGID_ZEROTOHEROTRANSFORMATION 684 -#define STRINGID_THETWOMOVESBECOMEONE 685 -#define STRINGID_ARAINBOWAPPEAREDONSIDE 686 -#define STRINGID_THERAINBOWDISAPPEARED 687 -#define STRINGID_WAITINGFORPARTNERSMOVE 688 -#define STRINGID_SEAOFFIREENVELOPEDSIDE 689 -#define STRINGID_HURTBYTHESEAOFFIRE 690 -#define STRINGID_THESEAOFFIREDISAPPEARED 691 -#define STRINGID_SWAMPENVELOPEDSIDE 692 -#define STRINGID_THESWAMPDISAPPEARED 693 -#define STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE 694 -#define STRINGID_HOSPITALITYRESTORATION 695 -#define STRINGID_ELECTROSHOTCHARGING 696 -#define STRINGID_ITEMWASUSEDUP 697 -#define STRINGID_ATTACKERLOSTITSTYPE 698 -#define STRINGID_SHEDITSTAIL 699 -#define STRINGID_CLOAKEDINAHARSHLIGHT 700 -#define STRINGID_SUPERSWEETAROMAWAFTS 701 -#define STRINGID_DIMENSIONSWERETWISTED 702 -#define STRINGID_BIZARREARENACREATED 703 -#define STRINGID_BIZARREAREACREATED 704 -#define STRINGID_TIDYINGUPCOMPLETE 705 -#define STRINGID_PKMNTERASTALLIZEDINTO 706 -#define STRINGID_BOOSTERENERGYACTIVATES 707 -#define STRINGID_FOGCREPTUP 708 -#define STRINGID_FOGISDEEP 709 -#define STRINGID_FOGLIFTED 710 -#define STRINGID_PKMNMADESHELLGLEAM 711 -#define STRINGID_FICKLEBEAMDOUBLED 712 -#define STRINGID_COMMANDERACTIVATES 713 -#define STRINGID_POKEFLUTECATCHY 714 -#define STRINGID_POKEFLUTE 715 -#define STRINGID_MONHEARINGFLUTEAWOKE 716 -#define STRINGID_SUNLIGHTISHARSH 717 -#define STRINGID_ITISHAILING 718 -#define STRINGID_ITISSNOWING 719 -#define STRINGID_ISCOVEREDWITHGRASS 720 -#define STRINGID_MISTSWIRLSAROUND 721 -#define STRINGID_ELECTRICCURRENTISRUNNING 722 -#define STRINGID_SEEMSWEIRD 723 -#define STRINGID_WAGGLINGAFINGER 724 +#define STRINGID_AIRBALLOONFLOAT 532 +#define STRINGID_AIRBALLOONPOP 533 +#define STRINGID_INCINERATEBURN 534 +#define STRINGID_BUGBITE 535 +#define STRINGID_ILLUSIONWOREOFF 536 +#define STRINGID_ATTACKERCUREDTARGETSTATUS 537 +#define STRINGID_ATTACKERLOSTFIRETYPE 538 +#define STRINGID_HEALERCURE 539 +#define STRINGID_SCRIPTINGABILITYSTATRAISE 540 +#define STRINGID_RECEIVERABILITYTAKEOVER 541 +#define STRINGID_PKNMABSORBINGPOWER 542 +#define STRINGID_NOONEWILLBEABLETORUNAWAY 543 +#define STRINGID_DESTINYKNOTACTIVATES 544 +#define STRINGID_CLOAKEDINAFREEZINGLIGHT 545 +#define STRINGID_CLEARAMULETWONTLOWERSTATS 546 +#define STRINGID_FERVENTWISHREACHED 547 +#define STRINGID_AIRLOCKACTIVATES 548 +#define STRINGID_PRESSUREENTERS 549 +#define STRINGID_DARKAURAENTERS 550 +#define STRINGID_FAIRYAURAENTERS 551 +#define STRINGID_AURABREAKENTERS 552 +#define STRINGID_COMATOSEENTERS 553 +#define STRINGID_SCREENCLEANERENTERS 554 +#define STRINGID_FETCHEDPOKEBALL 555 +#define STRINGID_BATTLERABILITYRAISEDSTAT 556 +#define STRINGID_ASANDSTORMKICKEDUP 557 +#define STRINGID_PKMNSWILLPERISHIN3TURNS 558 +#define STRINGID_ABILITYRAISEDSTATDRASTICALLY 559 +#define STRINGID_AURAFLAREDTOLIFE 560 +#define STRINGID_ASONEENTERS 561 +#define STRINGID_CURIOUSMEDICINEENTERS 562 +#define STRINGID_CANACTFASTERTHANKSTO 563 +#define STRINGID_MICLEBERRYACTIVATES 564 +#define STRINGID_PKMNSHOOKOFFTHETAUNT 565 +#define STRINGID_PKMNGOTOVERITSINFATUATION 566 +#define STRINGID_ITEMCANNOTBEREMOVED 567 +#define STRINGID_STICKYBARBTRANSFER 568 +#define STRINGID_PKMNBURNHEALED 569 +#define STRINGID_REDCARDACTIVATE 570 +#define STRINGID_EJECTBUTTONACTIVATE 571 +#define STRINGID_ATKGOTOVERINFATUATION 572 +#define STRINGID_TORMENTEDNOMORE 573 +#define STRINGID_HEALBLOCKEDNOMORE 574 +#define STRINGID_ATTACKERBECAMEFULLYCHARGED 575 +#define STRINGID_ATTACKERBECAMEASHSPECIES 576 +#define STRINGID_EXTREMELYHARSHSUNLIGHT 577 +#define STRINGID_EXTREMESUNLIGHTFADED 578 +#define STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT 579 +#define STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED 580 +#define STRINGID_HEAVYRAIN 581 +#define STRINGID_HEAVYRAINLIFTED 582 +#define STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN 583 +#define STRINGID_NORELIEFROMHEAVYRAIN 584 +#define STRINGID_MYSTERIOUSAIRCURRENT 585 +#define STRINGID_STRONGWINDSDISSIPATED 586 +#define STRINGID_MYSTERIOUSAIRCURRENTBLOWSON 587 +#define STRINGID_ATTACKWEAKENEDBSTRONGWINDS 588 +#define STRINGID_STUFFCHEEKSCANTSELECT 589 +#define STRINGID_PKMNREVERTEDTOPRIMAL 590 +#define STRINGID_BUTPOKEMONCANTUSETHEMOVE 591 +#define STRINGID_BUTHOOPACANTUSEIT 592 +#define STRINGID_BROKETHROUGHPROTECTION 593 +#define STRINGID_ABILITYALLOWSONLYMOVE 594 +#define STRINGID_SWAPPEDABILITIES 595 +#define STRINGID_PASTELVEILPROTECTED 596 +#define STRINGID_PASTELVEILENTERS 597 +#define STRINGID_BATTLERTYPECHANGEDTO 598 +#define STRINGID_BOTHCANNOLONGERESCAPE 599 +#define STRINGID_CANTESCAPEDUETOUSEDMOVE 600 +#define STRINGID_PKMNBECAMEWEAKERTOFIRE 601 +#define STRINGID_ABOUTTOUSEPOLTERGEIST 602 +#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 603 +#define STRINGID_NEUTRALIZINGGASENTERS 604 +#define STRINGID_NEUTRALIZINGGASOVER 605 +#define STRINGID_TARGETTOOHEAVY 606 +#define STRINGID_PKMNTOOKTARGETHIGH 607 +#define STRINGID_PKMNINSNAPTRAP 608 +#define STRINGID_METEORBEAMCHARGING 609 +#define STRINGID_HEATUPBEAK 610 +#define STRINGID_COURTCHANGE 611 +#define STRINGID_PLAYERLOSTTOENEMYTRAINER 612 +#define STRINGID_PLAYERPAIDPRIZEMONEY 613 +#define STRINGID_ZPOWERSURROUNDS 614 +#define STRINGID_ZMOVEUNLEASHED 615 +#define STRINGID_ZMOVERESETSSTATS 616 +#define STRINGID_ZMOVEALLSTATSUP 617 +#define STRINGID_ZMOVEZBOOSTCRIT 618 +#define STRINGID_ZMOVERESTOREHP 619 +#define STRINGID_ZMOVESTATUP 620 +#define STRINGID_ZMOVEHPTRAP 621 +#define STRINGID_ATTACKEREXPELLEDTHEPOISON 622 +#define STRINGID_ATTACKERSHOOKITSELFAWAKE 623 +#define STRINGID_ATTACKERBROKETHROUGHPARALYSIS 624 +#define STRINGID_ATTACKERHEALEDITSBURN 625 +#define STRINGID_ATTACKERMELTEDTHEICE 626 +#define STRINGID_TARGETTOUGHEDITOUT 627 +#define STRINGID_ATTACKERLOSTELECTRICTYPE 628 +#define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 629 +#define STRINGID_BEINGHITCHARGEDPKMNWITHPOWER 630 +#define STRINGID_SUNLIGHTACTIVATEDABILITY 631 +#define STRINGID_STATWASHEIGHTENED 632 +#define STRINGID_ELECTRICTERRAINACTIVATEDABILITY 633 +#define STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT 634 +#define STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN 635 +#define STRINGID_PKMNSABILITYPREVENTSABILITY 636 +#define STRINGID_PREPARESHELLTRAP 637 +#define STRINGID_SHELLTRAPDIDNTWORK 638 +#define STRINGID_SPIKESDISAPPEAREDFROMTEAM 639 +#define STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM 640 +#define STRINGID_STICKYWEBDISAPPEAREDFROMTEAM 641 +#define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 642 +#define STRINGID_COULDNTFULLYPROTECT 643 +#define STRINGID_STOCKPILEDEFFECTWOREOFF 644 +#define STRINGID_PKMNREVIVEDREADYTOFIGHT 645 +#define STRINGID_ITEMRESTOREDSPECIESHEALTH 646 +#define STRINGID_ITEMCUREDSPECIESSTATUS 647 +#define STRINGID_ITEMRESTOREDSPECIESPP 648 +#define STRINGID_THUNDERCAGETRAPPED 649 +#define STRINGID_PKMNHURTBYFROSTBITE 650 +#define STRINGID_PKMNGOTFROSTBITE 651 +#define STRINGID_PKMNSITEMHEALEDFROSTBITE 652 +#define STRINGID_ATTACKERHEALEDITSFROSTBITE 653 +#define STRINGID_PKMNFROSTBITEHEALED 654 +#define STRINGID_PKMNFROSTBITEHEALED2 655 +#define STRINGID_PKMNFROSTBITEHEALEDBY 656 +#define STRINGID_MIRRORHERBCOPIED 657 +#define STRINGID_STARTEDSNOW 658 +#define STRINGID_SNOWCONTINUES 659 +#define STRINGID_SNOWSTOPPED 660 +#define STRINGID_SNOWWARNINGSNOW 661 +#define STRINGID_PKMNITEMMELTED 662 +#define STRINGID_ULTRABURSTREACTING 663 +#define STRINGID_ULTRABURSTCOMPLETED 664 +#define STRINGID_TEAMGAINEDEXP 665 +#define STRINGID_CURRENTMOVECANTSELECT 666 +#define STRINGID_TARGETISBEINGSALTCURED 667 +#define STRINGID_TARGETISHURTBYSALTCURE 668 +#define STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP 669 +#define STRINGID_SHARPSTEELFLOATS 670 +#define STRINGID_SHARPSTEELDMG 671 +#define STRINGID_PKMNBLEWAWAYSHARPSTEEL 672 +#define STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM 673 +#define STRINGID_TEAMTRAPPEDWITHVINES 674 +#define STRINGID_PKMNHURTBYVINES 675 +#define STRINGID_TEAMCAUGHTINVORTEX 676 +#define STRINGID_PKMNHURTBYVORTEX 677 +#define STRINGID_TEAMSURROUNDEDBYFIRE 678 +#define STRINGID_PKMNBURNINGUP 679 +#define STRINGID_TEAMSURROUNDEDBYROCKS 680 +#define STRINGID_PKMNHURTBYROCKSTHROWN 681 +#define STRINGID_MOVEBLOCKEDBYDYNAMAX 682 +#define STRINGID_ZEROTOHEROTRANSFORMATION 683 +#define STRINGID_THETWOMOVESBECOMEONE 684 +#define STRINGID_ARAINBOWAPPEAREDONSIDE 685 +#define STRINGID_THERAINBOWDISAPPEARED 686 +#define STRINGID_WAITINGFORPARTNERSMOVE 687 +#define STRINGID_SEAOFFIREENVELOPEDSIDE 688 +#define STRINGID_HURTBYTHESEAOFFIRE 689 +#define STRINGID_THESEAOFFIREDISAPPEARED 690 +#define STRINGID_SWAMPENVELOPEDSIDE 691 +#define STRINGID_THESWAMPDISAPPEARED 692 +#define STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE 693 +#define STRINGID_HOSPITALITYRESTORATION 694 +#define STRINGID_ELECTROSHOTCHARGING 695 +#define STRINGID_ITEMWASUSEDUP 696 +#define STRINGID_ATTACKERLOSTITSTYPE 697 +#define STRINGID_SHEDITSTAIL 698 +#define STRINGID_CLOAKEDINAHARSHLIGHT 699 +#define STRINGID_SUPERSWEETAROMAWAFTS 700 +#define STRINGID_DIMENSIONSWERETWISTED 701 +#define STRINGID_BIZARREARENACREATED 702 +#define STRINGID_BIZARREAREACREATED 703 +#define STRINGID_TIDYINGUPCOMPLETE 704 +#define STRINGID_PKMNTERASTALLIZEDINTO 705 +#define STRINGID_BOOSTERENERGYACTIVATES 706 +#define STRINGID_FOGCREPTUP 707 +#define STRINGID_FOGISDEEP 708 +#define STRINGID_FOGLIFTED 709 +#define STRINGID_PKMNMADESHELLGLEAM 710 +#define STRINGID_FICKLEBEAMDOUBLED 711 +#define STRINGID_COMMANDERACTIVATES 712 +#define STRINGID_POKEFLUTECATCHY 713 +#define STRINGID_POKEFLUTE 714 +#define STRINGID_MONHEARINGFLUTEAWOKE 715 +#define STRINGID_SUNLIGHTISHARSH 716 +#define STRINGID_ITISHAILING 717 +#define STRINGID_ITISSNOWING 718 +#define STRINGID_ISCOVEREDWITHGRASS 719 +#define STRINGID_MISTSWIRLSAROUND 720 +#define STRINGID_ELECTRICCURRENTISRUNNING 721 +#define STRINGID_SEEMSWEIRD 722 +#define STRINGID_WAGGLINGAFINGER 723 +#define STRINGID_BLOCKEDBYSLEEPCLAUSE 724 #define STRINGID_SUPEREFFECTIVETWOFOES 725 #define STRINGID_NOTVERYEFFECTIVETWOFOES 726 #define STRINGID_ITDOESNTAFFECTTWOFOES 727 -#define STRINGID_BLOCKEDBYSLEEPCLAUSE 728 -#define BATTLESTRINGS_COUNT 729 +#define BATTLESTRINGS_COUNT 728 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_message.c b/src/battle_message.c index 412d105585..db68c9968e 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -694,7 +694,6 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_LASERFOCUS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX} concentrated intensely!"), [STRINGID_GEMACTIVATES] = COMPOUND_STRING("The {B_LAST_ITEM} strengthened {B_ATK_NAME_WITH_PREFIX2}'s power!"), [STRINGID_BERRYDMGREDUCES] = COMPOUND_STRING("The {B_LAST_ITEM} weakened the damage to {B_SCR_NAME_WITH_PREFIX2}!"), - [STRINGID_TARGETATEITEM] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX} ate its {B_LAST_ITEM}!"), [STRINGID_AIRBALLOONFLOAT] = COMPOUND_STRING("{B_SCR_NAME_WITH_PREFIX} floats in the air with its Air Balloon!"), [STRINGID_AIRBALLOONPOP] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}'s Air Balloon popped!"), [STRINGID_INCINERATEBURN] = COMPOUND_STRING("{B_EFF_NAME_WITH_PREFIX}'s {B_LAST_ITEM} was burnt up!"), @@ -887,10 +886,10 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ELECTRICCURRENTISRUNNING] = COMPOUND_STRING("An electric current is running across the battlefield!"), [STRINGID_SEEMSWEIRD] = COMPOUND_STRING("The battlefield seems weird!"), [STRINGID_WAGGLINGAFINGER] = COMPOUND_STRING("Waggling a finger let it use {B_CURRENT_MOVE}!"), + [STRINGID_BLOCKEDBYSLEEPCLAUSE] = COMPOUND_STRING("Sleep Clause kept {B_DEF_NAME_WITH_PREFIX2} awake!"), [STRINGID_SUPEREFFECTIVETWOFOES] = COMPOUND_STRING("It's super effective on {B_DEF_NAME_WITH_PREFIX2} and {B_DEF_PARTNER_NAME}!"), [STRINGID_NOTVERYEFFECTIVETWOFOES] = COMPOUND_STRING("It's not very effective on {B_DEF_NAME_WITH_PREFIX2} and {B_DEF_PARTNER_NAME}!"), [STRINGID_ITDOESNTAFFECTTWOFOES] = COMPOUND_STRING("It doesn't affect {B_DEF_NAME_WITH_PREFIX2} and {B_DEF_PARTNER_NAME}…"), - [STRINGID_BLOCKEDBYSLEEPCLAUSE] = COMPOUND_STRING("Sleep Clause kept {B_DEF_NAME_WITH_PREFIX2} awake!"), }; const u16 gTrainerUsedItemStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6690e13bbd..e4c8b238d3 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -487,7 +487,7 @@ static void Cmd_givepaydaymoney(void); static void Cmd_setlightscreen(void); static void Cmd_tryKO(void); static void Cmd_damagetohalftargethp(void); -static void Cmd_unused_95(void); +static void Cmd_copybidedmg(void); static void Cmd_unused_96(void); static void Cmd_tryinfatuating(void); static void Cmd_updatestatusicon(void); @@ -746,7 +746,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = Cmd_setlightscreen, //0x92 Cmd_tryKO, //0x93 Cmd_damagetohalftargethp, //0x94 - Cmd_unused_95, //0x95 + Cmd_copybidedmg, //0x95 Cmd_unused_96, //0x96 Cmd_tryinfatuating, //0x97 Cmd_updatestatusicon, //0x98 @@ -1706,7 +1706,7 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u { u32 moveType = GetMoveType(move); u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); - bool32 calcSpreadMove = IsSpreadMove(moveTarget) && !IS_MOVE_STATUS(move); + bool32 calcSpreadMove = IsSpreadMove(moveTarget) && !IS_MOVE_STATUS(move); for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { @@ -2183,9 +2183,9 @@ static void Cmd_adjustdamage(void) if (!calcSpreadMoveDamage && battlerDef != gBattlerTarget) continue; - if (IsBattlerInvalidForSpreadMove(gBattlerAttacker, battlerDef, moveTarget) - || gBattleStruct->noResultString[battlerDef]) - continue; + if (IsBattlerInvalidForSpreadMove(gBattlerAttacker, battlerDef, moveTarget) + || gBattleStruct->noResultString[battlerDef]) + continue; if (DoesSubstituteBlockMove(gBattlerAttacker, battlerDef, gCurrentMove)) goto END; @@ -2331,21 +2331,21 @@ static inline bool32 DoesBattlerNegateDamage(u32 battler) if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) return FALSE; - if (ability == ABILITY_DISGUISE && species == SPECIES_MIMIKYU) - return TRUE; - if (ability == ABILITY_ICE_FACE && species == SPECIES_EISCUE && GetBattleMoveCategory(gCurrentMove) == DAMAGE_CATEGORY_SPECIAL) - return TRUE; + if (ability == ABILITY_DISGUISE && species == SPECIES_MIMIKYU) + return TRUE; + if (ability == ABILITY_ICE_FACE && species == SPECIES_EISCUE && GetBattleMoveCategory(gCurrentMove) == DAMAGE_CATEGORY_SPECIAL) + return TRUE; return FALSE; } static u32 UpdateEffectivenessResultFlagsForDoubleSpreadMoves(u32 resultFlags) { - // Only play the "best" sound - for (u32 sound = 0; sound < 3; sound++) - { - for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) - { + // Only play the "best" sound + for (u32 sound = 0; sound < 3; sound++) + { + for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + { if ((gBattleStruct->moveResultFlags[battlerDef] & (MOVE_RESULT_MISSED | MOVE_RESULT_NO_EFFECT) || gBattleStruct->noResultString[battlerDef])) continue; @@ -2367,10 +2367,10 @@ static u32 UpdateEffectivenessResultFlagsForDoubleSpreadMoves(u32 resultFlags) return 0; //Normal effectiveness return gBattleStruct->moveResultFlags[battlerDef]; } - } - } + } + } - return resultFlags; + return resultFlags; } static inline bool32 TryStrongWindsWeakenAttack(u32 battlerDef) @@ -2389,7 +2389,7 @@ static inline bool32 TryStrongWindsWeakenAttack(u32 battlerDef) } } - return FALSE; + return FALSE; } static inline bool32 TryTeraShellDistortTypeMatchups(u32 battlerDef) @@ -2420,30 +2420,30 @@ static inline bool32 TryActivateWeakenessBerry(u32 battlerDef) return TRUE; } - return FALSE; + return FALSE; } static bool32 ProcessPreAttackAnimationFuncs(void) { - if (IsDoubleSpreadMove()) - { + if (IsDoubleSpreadMove()) + { u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); - if (!gBattleStruct->printedStrongWindsWeakenedAttack) - { - for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) - { + if (!gBattleStruct->printedStrongWindsWeakenedAttack) + { + for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + { if (IsBattlerInvalidForSpreadMove(gBattlerAttacker, battlerDef, moveTarget) || (battlerDef == BATTLE_PARTNER(gBattlerAttacker) && !(moveTarget & MOVE_TARGET_FOES_AND_ALLY)) || (gBattleStruct->noResultString[battlerDef] && gBattleStruct->noResultString[battlerDef] != DO_ACCURACY_CHECK)) continue; - if (TryStrongWindsWeakenAttack(battlerDef)) - return TRUE; - } - } + if (TryStrongWindsWeakenAttack(battlerDef)) + return TRUE; + } + } - for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) - { + for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + { if (IsBattlerInvalidForSpreadMove(gBattlerAttacker, battlerDef, moveTarget) || (battlerDef == BATTLE_PARTNER(gBattlerAttacker) && !(moveTarget & MOVE_TARGET_FOES_AND_ALLY)) || (gBattleStruct->noResultString[battlerDef] && gBattleStruct->noResultString[battlerDef] != DO_ACCURACY_CHECK)) @@ -2451,21 +2451,21 @@ static bool32 ProcessPreAttackAnimationFuncs(void) if (TryTeraShellDistortTypeMatchups(battlerDef)) return TRUE; - if (TryActivateWeakenessBerry(battlerDef)) - return TRUE; - } - } - else - { - if (TryStrongWindsWeakenAttack(gBattlerTarget)) - return TRUE; - if (TryTeraShellDistortTypeMatchups(gBattlerTarget)) - return TRUE; - if (TryActivateWeakenessBerry(gBattlerTarget)) + if (TryActivateWeakenessBerry(battlerDef)) + return TRUE; + } + } + else + { + if (TryStrongWindsWeakenAttack(gBattlerTarget)) return TRUE; - } + if (TryTeraShellDistortTypeMatchups(gBattlerTarget)) + return TRUE; + if (TryActivateWeakenessBerry(gBattlerTarget)) + return TRUE; + } - return FALSE; + return FALSE; } static void Cmd_attackanimation(void) @@ -2479,7 +2479,7 @@ static void Cmd_attackanimation(void) u32 moveResultFlags = gBattleStruct->moveResultFlags[gBattlerTarget]; if (IsDoubleSpreadMove()) - moveResultFlags = UpdateEffectivenessResultFlagsForDoubleSpreadMoves(gBattleStruct->moveResultFlags[gBattlerTarget]); + moveResultFlags = UpdateEffectivenessResultFlagsForDoubleSpreadMoves(gBattleStruct->moveResultFlags[gBattlerTarget]); if ((gHitMarker & (HITMARKER_NO_ANIMATIONS | HITMARKER_DISABLE_ANIMATION)) && gCurrentMove != MOVE_TRANSFORM @@ -2556,7 +2556,7 @@ static void Cmd_waitanimation(void) static void DoublesHPBarReduction(void) { - if (gBattleStruct->doneDoublesSpreadHit + if (gBattleStruct->doneDoublesSpreadHit || gHitMarker & (HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE)) return; @@ -2798,19 +2798,19 @@ static void Cmd_effectivenesssound(void) u32 moveResultFlags = gBattleStruct->moveResultFlags[gBattlerTarget]; - if (IsDoubleSpreadMove()) - { - if (gBattleStruct->doneDoublesSpreadHit - || !gBattleStruct->calculatedDamageDone //The attack animation didn't play yet - only play sound after animation - || GetBattleMoveCategory(gCurrentMove) == DAMAGE_CATEGORY_STATUS) //To handle Dark Void missing basically + if (IsDoubleSpreadMove()) + { + if (gBattleStruct->doneDoublesSpreadHit + || !gBattleStruct->calculatedDamageDone //The attack animation didn't play yet - only play sound after animation + || GetBattleMoveCategory(gCurrentMove) == DAMAGE_CATEGORY_STATUS) //To handle Dark Void missing basically { gBattlescriptCurrInstr = cmd->nextInstr; return; } - moveResultFlags = UpdateEffectivenessResultFlagsForDoubleSpreadMoves(gBattleStruct->moveResultFlags[gBattlerTarget]); - } - else if (MoveResultHasEffect(gBattlerTarget) && DoesBattlerNegateDamage(gBattlerTarget)) - moveResultFlags = 0; + moveResultFlags = UpdateEffectivenessResultFlagsForDoubleSpreadMoves(gBattleStruct->moveResultFlags[gBattlerTarget]); + } + else if (MoveResultHasEffect(gBattlerTarget) && DoesBattlerNegateDamage(gBattlerTarget)) + moveResultFlags = 0; if (!(moveResultFlags & MOVE_RESULT_MISSED)) { @@ -2856,14 +2856,14 @@ static void Cmd_effectivenesssound(void) static inline bool32 ShouldPrintTwoFoesMessage(u32 moveResult) { - return gBattlerTarget == BATTLE_OPPOSITE(gBattlerAttacker) + return gBattlerTarget == BATTLE_OPPOSITE(gBattlerAttacker) && gBattleStruct->moveResultFlags[BATTLE_PARTNER(gBattlerTarget)] & moveResult && !gBattleStruct->noResultString[BATTLE_PARTNER(gBattlerTarget)]; } static inline bool32 ShouldRelyOnTwoFoesMessage(u32 moveResult) { - return gBattlerTarget == BATTLE_PARTNER(BATTLE_OPPOSITE(gBattlerAttacker)) + return gBattlerTarget == BATTLE_PARTNER(BATTLE_OPPOSITE(gBattlerAttacker)) && gBattleStruct->moveResultFlags[BATTLE_OPPOSITE(gBattlerAttacker)] & moveResult && !(gBattleStruct->moveResultFlags[BATTLE_OPPOSITE(gBattlerAttacker)] & MOVE_RESULT_MISSED && gBattleStruct->missStringId[BATTLE_OPPOSITE(gBattlerAttacker)] > B_MSG_AVOIDED_ATK) && !gBattleStruct->noResultString[BATTLE_OPPOSITE(gBattlerAttacker)]; @@ -3033,7 +3033,7 @@ static void Cmd_resultmessage(void) } if (stringId) PrepareStringBattle(stringId, gBattlerAttacker); - else + else gBattleCommunication[MSG_DISPLAY] = 0; gBattlescriptCurrInstr = cmd->nextInstr; @@ -8159,11 +8159,11 @@ static void Cmd_hitanimation(void) } } } - else if (!gBattleStruct->doneDoublesSpreadHit) - { + else if (!gBattleStruct->doneDoublesSpreadHit) + { u32 battlerDef; - for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) - { + for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) + { if (gBattleStruct->moveResultFlags[battlerDef] & MOVE_RESULT_NO_EFFECT || gBattleStruct->noResultString[battlerDef]) continue; @@ -8175,8 +8175,8 @@ static void Cmd_hitanimation(void) BtlController_EmitHitAnimation(battlerDef, BUFFER_A); MarkBattlerForControllerExec(battlerDef); } - } - } + } + } gBattlescriptCurrInstr = cmd->nextInstr; } @@ -12759,7 +12759,7 @@ static void Cmd_damagetohalftargethp(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_unused_95(void) +static void Cmd_copybidedmg(void) { CMD_ARGS(); gBattleStruct->moveDamage[gBattlerTarget] = gBideDmg[gBattlerAttacker] * 2; diff --git a/test/battle/ability/commander.c b/test/battle/ability/commander.c index 521d4f4b40..26f5574ba8 100644 --- a/test/battle/ability/commander.c +++ b/test/battle/ability/commander.c @@ -323,8 +323,8 @@ DOUBLE_BATTLE_TEST("Commander Attacker is kept (Dondozo Left Slot)") MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); HP_BAR(playerLeft); - // MESSAGE("The opposing Wobbuffet's attack missed!"); TODO: Message issue, otherwise fine HP_BAR(opponentRight); + MESSAGE("The opposing Wobbuffet's attack missed!"); } } @@ -344,7 +344,7 @@ DOUBLE_BATTLE_TEST("Commander Attacker is kept (Dondozo Right Slot)") ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); - // MESSAGE("The opposing Wobbuffet's attack missed!"); TODO: Message issue, otherwise fine + MESSAGE("The opposing Wobbuffet's attack missed!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); HP_BAR(playerRight); HP_BAR(opponentRight); diff --git a/test/battle/ability/tera_shell.c b/test/battle/ability/tera_shell.c index 047b5dd502..ef2993a0e7 100644 --- a/test/battle/ability/tera_shell.c +++ b/test/battle/ability/tera_shell.c @@ -97,23 +97,3 @@ DOUBLE_BATTLE_TEST("Tera Shell only makes the first hit against Terapagos from a NOT MESSAGE("It's not very effective…"); } } - -DOUBLE_BATTLE_TEST("[1]") -{ - GIVEN { - PLAYER(SPECIES_TERAPAGOS_TERASTAL) { Ability(ABILITY_TERA_SHELL); } - PLAYER(SPECIES_TERAPAGOS_TERASTAL) { Ability(ABILITY_TERA_SHELL); } - OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(opponentLeft, MOVE_BLIZZARD); } - } SCENE { - ABILITY_POPUP(playerLeft, ABILITY_TERA_SHELL); - MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!"); - ABILITY_POPUP(playerRight, ABILITY_TERA_SHELL); - MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_BLIZZARD, opponentLeft); - HP_BAR(playerLeft); - HP_BAR(playerRight); - } -} diff --git a/test/battle/move_effect/absorb.c b/test/battle/move_effect/absorb.c index 95b479eac0..bd4eada975 100644 --- a/test/battle/move_effect/absorb.c +++ b/test/battle/move_effect/absorb.c @@ -6,20 +6,6 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_ABSORB].effect == EFFECT_ABSORB); } -SINGLE_BATTLE_TEST("test") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(1); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_ABSORB); } - TURN { MOVE(player, MOVE_ABSORB); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); - ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player); - } -} - SINGLE_BATTLE_TEST("Absorb recovers 50% of the damage dealt") { s16 damage; diff --git a/test/battle/move_effect/dragon_darts.c b/test/battle/move_effect/dragon_darts.c index d1700344d8..dfe629896f 100644 --- a/test/battle/move_effect/dragon_darts.c +++ b/test/battle/move_effect/dragon_darts.c @@ -7,17 +7,6 @@ ASSUMPTIONS ASSUME(gSpeciesInfo[SPECIES_CLEFAIRY].types[0] == TYPE_FAIRY || gSpeciesInfo[SPECIES_CLEFAIRY].types[1] == TYPE_FAIRY); } -SINGLE_BATTLE_TEST("Dragon Darts test") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_CLEFAIRY); - } WHEN { - TURN { MOVE(player, MOVE_DRAGON_DARTS); } - } SCENE { - } -} - SINGLE_BATTLE_TEST("Dragon Darts strikes twice") { GIVEN { diff --git a/test/battle/move_effect/endeavor.c b/test/battle/move_effect/endeavor.c index 8e0ce98ceb..7080ee9c28 100644 --- a/test/battle/move_effect/endeavor.c +++ b/test/battle/move_effect/endeavor.c @@ -19,3 +19,5 @@ SINGLE_BATTLE_TEST("Endeavor causes the target's HP to equal the user's current EXPECT_EQ(player->hp, opponent->hp); } } +TO_DO_BATTLE_TEST("Endeavor does not change HP if the target has less HP than the user, but still plays the animation") +TO_DO_BATTLE_TEST("Endeavor doesn't ignore type immunity") // Ghost types diff --git a/test/battle/move_effect/explosion.c b/test/battle/move_effect/explosion.c index 078ec3a199..f383ecb1a2 100644 --- a/test/battle/move_effect/explosion.c +++ b/test/battle/move_effect/explosion.c @@ -85,6 +85,7 @@ DOUBLE_BATTLE_TEST("Explosion causes everyone to faint in a double battle") HP_BAR(playerRight, hp: 0); HP_BAR(opponentRight, hp: 0); MESSAGE("The opposing Abra fainted!"); + MESSAGE("Wynaut fainted!"); MESSAGE("The opposing Kadabra fainted!"); MESSAGE("Wobbuffet fainted!"); } diff --git a/test/battle/move_effect/mind_blown.c b/test/battle/move_effect/mind_blown.c index 08168ff3b0..85e6a8fdbd 100644 --- a/test/battle/move_effect/mind_blown.c +++ b/test/battle/move_effect/mind_blown.c @@ -99,6 +99,7 @@ DOUBLE_BATTLE_TEST("Mind Blown causes everyone to faint in a double battle") HP_BAR(playerRight, hp: 0); HP_BAR(opponentRight, hp: 0); MESSAGE("The opposing Abra fainted!"); + MESSAGE("Wynaut fainted!"); MESSAGE("The opposing Kadabra fainted!"); HP_BAR(playerLeft, hp: 0); MESSAGE("Wobbuffet fainted!"); diff --git a/test/battle/spread_moves.c b/test/battle/spread_moves.c index d3547d5edf..7b395a1cc2 100644 --- a/test/battle/spread_moves.c +++ b/test/battle/spread_moves.c @@ -28,36 +28,29 @@ DOUBLE_BATTLE_TEST("Spread Moves: Ability and Item effects activate correctly af } } -DOUBLE_BATTLE_TEST("Spread Moves: No damage will be dealt to a mon in an invulnerable position - Surf") +DOUBLE_BATTLE_TEST("Spread Moves: No damage will be dealt to a mon in an invulnerable position") { + u32 attackingMove = 0, invulMove = 0; + PARAMETRIZE { attackingMove = MOVE_HYPER_VOICE; invulMove = MOVE_FLY; } + PARAMETRIZE { attackingMove = MOVE_LAVA_PLUME; invulMove = MOVE_FLY; } + PARAMETRIZE { attackingMove = MOVE_HYPER_VOICE; invulMove = MOVE_DIVE; } + PARAMETRIZE { attackingMove = MOVE_LAVA_PLUME; invulMove = MOVE_DIVE; } GIVEN { + ASSUME(gMovesInfo[MOVE_HYPER_VOICE].target == MOVE_TARGET_BOTH); + ASSUME(gMovesInfo[MOVE_LAVA_PLUME].target == MOVE_TARGET_FOES_AND_ALLY); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_ZAPDOS); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponentLeft, MOVE_FLY, target: playerLeft); MOVE(playerLeft, MOVE_HYPER_VOICE); } + TURN { MOVE(opponentLeft, invulMove, target: playerLeft); MOVE(playerLeft, attackingMove); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, attackingMove, playerLeft); NOT HP_BAR(opponentLeft); HP_BAR(opponentRight); } } -DOUBLE_BATTLE_TEST("Spread Moves: No damage will be dealt to a mon in an invulnerable position - Surf") -{ - GIVEN { - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_ZAPDOS); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(playerLeft, MOVE_BUBBLE_BEAM, target: opponentLeft); MOVE(opponentLeft, MOVE_SURF); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, opponentLeft); - } -} - DOUBLE_BATTLE_TEST("Spread Moves: A spread move attack will activate both resist berries") { s16 opponentLeftDmg[2]; @@ -233,26 +226,6 @@ DOUBLE_BATTLE_TEST("Spread Moves: AOE move vs Eiscue and Mimikyu (Based on vanil } } -// Can be removed once the above test passes -DOUBLE_BATTLE_TEST("Spread Moves: AOE move vs Eiscue and Mimikyu (Based on battler id)") -{ - GIVEN { - ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); - ASSUME(gMovesInfo[MOVE_EARTHQUAKE].category == DAMAGE_CATEGORY_PHYSICAL); - PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_EISCUE); - OPPONENT(SPECIES_MIMIKYU); - OPPONENT(SPECIES_EISCUE); - } WHEN { - TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, playerLeft); - ABILITY_POPUP(opponentLeft, ABILITY_DISGUISE); - ABILITY_POPUP(playerRight, ABILITY_ICE_FACE); - ABILITY_POPUP(opponentRight, ABILITY_ICE_FACE); - } -} - DOUBLE_BATTLE_TEST("Spread Moves: Spread move, Gem Boosted, vs Resist Berries") { GIVEN {