diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index b48cda404c..0d323435b4 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -43,17 +43,14 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.12.2 (Latest release) + - 1.13.0 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.12.3 + - 1.12.2 - 1.12.1 - 1.12.0 - - 1.11.4 - - 1.11.3 - - 1.11.2 - - 1.11.1 - - 1.11.0 - - pre-1.11.0 + - pre-1.12.0 validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 95b00ef2d1..a00d5f4d2c 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -43,17 +43,14 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.12.2 (Latest release) + - 1.13.0 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.12.3 + - 1.12.2 - 1.12.1 - 1.12.0 - - 1.11.4 - - 1.11.3 - - 1.11.2 - - 1.11.1 - - 1.11.0 - - pre-1.11.0 + - pre-1.12.0 validations: required: true - type: input diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index d955d09cbc..53bf274899 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -43,16 +43,14 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.12.2 (Latest release) + - 1.13.0 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.12.3 + - 1.12.2 - 1.12.1 - 1.12.0 - - 1.11.4 - - 1.11.3 - - 1.11.1 - - 1.11.0 - - pre-1.11.0 + - pre-1.12.0 validations: required: true - type: input diff --git a/Makefile b/Makefile index 759512ea63..8e5259ad1e 100644 --- a/Makefile +++ b/Makefile @@ -300,7 +300,7 @@ $(TESTELF): $(OBJ_DIR)/ld_script_test.ld $(OBJS) $(TEST_OBJS) libagbsyscall tool @echo "cd $(OBJ_DIR) && $(LD) -T ld_script_test.ld -o ../../$@ " @cd $(OBJ_DIR) && $(LD) $(TESTLDFLAGS) -T ld_script_test.ld -o ../../$@ $(OBJS_REL) $(TEST_OBJS_REL) $(LIB) $(FIX) $@ -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(REVISION) -d0 --silent - $(PATCHELF) $(TESTELF) gTestRunnerArgv "$(TESTS)\0" + $(PATCHELF) $(TESTELF) gTestRunnerArgv "$(TESTS:%*=%)\0" ifeq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) TEST_SKIP_IS_FAIL := \x01 diff --git a/README.md b/README.md index 4cd0a5f161..6c91a3ad84 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ If you use **`pokeemerald-expansion`**, please credit **RHH (Rom Hacking Hideout)**. Optionally, include the version number for clarity. ``` -Based off RHH's pokeemerald-expansion 1.12.2 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.13.0 https://github.com/rh-hideout/pokeemerald-expansion/ ``` Please consider [crediting all contributors](CREDITS.md) involved in the project! diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 9dd0479c92..4a332f5b43 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -187,12 +187,8 @@ .4byte \jumpInstr .endm - .macro jumpifstatus3condition battler:req, flags:req, jumpIfTrue:req, jumpInstr:req + .macro unused_0x21 .byte 0x21 - .byte \battler - .4byte \flags - .byte \jumpIfTrue - .4byte \jumpInstr .endm .macro jumpbasedontype battler:req, type:req, jumpIfType:req, jumpInstr:req @@ -738,9 +734,8 @@ .4byte \jumpInstr .endm - .macro setmiracleeye failInstr:req + .macro unused_0x83 .byte 0x83 - .4byte \failInstr .endm .macro jumpifuproarwakes jumpInstr:req @@ -1085,7 +1080,7 @@ tryfiretwoturnmovenowbyeffect \battler, FALSE, \jumpInstr .endm - .macro setminimize + .macro unused_0xC7 .byte 0xc7 .endm @@ -1191,9 +1186,10 @@ .4byte \failInstr .endm - .macro setuserstatus3 flags:req, failInstr:req + .macro trysetvolatile battler:req, _volatile:req, failInstr:req .byte 0xdd - .4byte \flags + .byte \battler + .byte \_volatile .4byte \failInstr .endm @@ -1437,9 +1433,8 @@ callnative BS_TryRevertWeatherForm .endm - .macro trysetoctolock battler:req, failInstr:req + .macro trysetoctolock failInstr:req callnative BS_TrySetOctolock - .byte \battler .4byte \failInstr .endm @@ -1727,6 +1722,10 @@ .byte \battler .endm + .macro resetterrainabilityflags + callnative BS_ResetTerrainAbilityFlags + .endm + @ Stores Healing Wish effect. .macro storehealingwish battler:req callnative BS_StoreHealingWish @@ -1884,14 +1883,6 @@ jumpifhalfword CMP_NOT_EQUAL, gChosenMove, \move, \jumpInstr .endm - .macro jumpifstatus3 battler:req, flags:req, jumpInstr:req - jumpifstatus3condition \battler, \flags, FALSE, \jumpInstr - .endm - - .macro jumpifnostatus3 battler:req, flags:req, jumpInstr:req - jumpifstatus3condition \battler, \flags, TRUE, \jumpInstr - .endm - .macro jumpifmovehadnoeffect jumpInstr:req jumpifmoveresultflags MOVE_RESULT_NO_EFFECT, \jumpInstr .endm diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 3bc6516097..49e0109451 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1876,6 +1876,7 @@ @ Displays a multichoice box from which the user can choose a selection, and blocks script execution until a selection is made. @ Lists of options are provided in argv. @ If ignoreBPress is set to a non-zero value, then the user will not be allowed to back out of the multichoice with the B button. + @ For a simple menu supply DYN_MULTICHOICE_CB_NONE in callbacks. .macro dynmultichoice left:req, top:req, ignoreBPress:req, maxBeforeScroll:req, initialSelected:req, callbacks:req argv:vararg _dynmultichoice \left, \top, \ignoreBPress, \maxBeforeScroll, FALSE, \initialSelected, \callbacks, \argv .endm @@ -2175,7 +2176,7 @@ setvar VAR_0x8000, \evoMethod setvar VAR_0x8001, \canStopEvo setvar VAR_0x8002, \tryMultiple - special TrySpecialOverworldEvo + special TrySpecialScriptEvolution .endm .macro ai_vs_ai_battle trainer1:req, trainer2:req diff --git a/asm/macros/m4a.inc b/asm/macros/m4a.inc index b22da3d634..0169a3c033 100644 --- a/asm/macros/m4a.inc +++ b/asm/macros/m4a.inc @@ -11,3 +11,41 @@ .space 1 @ Padding .2byte \unknown .endm + + .macro voice_group label:req, starting_note + .align 2 + .ifb \starting_note + .global voicegroup_\label + voicegroup_\label: + .else + .set voicegroup_\label, . - \starting_note * 0xC + .endif + .endm + + .macro keysplit label:req, starting_note + .ifb \starting_note + .global keysplit_\label + keysplit_\label: + .set _last_note, 0 + .else + .set keysplit_\label, . - \starting_note + .set _last_note, \starting_note + .endif + .set _last_split, 0 + .endm + + .macro split index:req, ending_note:req + .if \ending_note < _last_note + .if _last_split == 0 + .error "split's ending_note earlier than previous keysplit's starting_note" + .else + .error "split's ending_note earlier than previous split's ending_note" + .endif + .else + .rept \ending_note - _last_note + .byte \index + .endr + .endif + .set _last_note, \ending_note + .set _last_split, 1 + .endm diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 08753aac8a..1d05258dcf 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -31084,6 +31084,17 @@ gBattleAnimStatus_Nightmare:: clearmonbg ANIM_DEF_PARTNER end +gBattleAnimStatus_Frostbite:: + playsewithpan SE_M_ICY_WIND, 0 + loadspritegfx ANIM_TAG_ICE_CRYSTALS + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + call IceCrystalEffectShort + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_TARGET, 5, 7, 0, RGB(0, 20, 31) + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + gBattleAnimGeneral_StatsChange:: createvisualtask AnimTask_StatsChange, 5 waitforvisualfinish @@ -31598,6 +31609,7 @@ MegaEvolutionSpinEffect: return gBattleAnimGeneral_TeraCharge:: + createvisualtask AnimTask_HideOpponentShadows, 2 @ Hide opponent shadows so they don't flicker between battle anims loadspritegfx ANIM_TAG_TERA_CRYSTAL loadspritegfx ANIM_TAG_TERA_SHATTER loadspritegfx ANIM_TAG_FOCUS_ENERGY @@ -31635,6 +31647,7 @@ TeraChargeParticles: return gBattleAnimGeneral_TeraActivate:: + createvisualtask AnimTask_SetOpponentShadowCallbacks, 2 @ Restore shadows hidden in the charge script loadspritegfx ANIM_TAG_TERA_SYMBOL loadspritegfx ANIM_TAG_SPARKLE_6 createvisualtask AnimTask_HideSwapSprite, 2, 1, 0 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 9c884da0f8..28707ae1c9 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -146,7 +146,7 @@ BattleScript_EffectShedTail:: jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_ButItFailed setsubstitute jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SUBSTITUTE_FAILED, BattleScript_SubstituteString - orword gHitMarker, HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_PASSIVE_HP_UPDATE attackanimation waitanimation healthbarupdate BS_ATTACKER @@ -171,7 +171,7 @@ BattleScript_EffectFilletAway:: jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ButItFailed BattleScript_FilletAwayTryAttack:: halvehp BattleScript_ButItFailed - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE attackanimation waitanimation setstatchanger STAT_ATK, 2, FALSE @@ -199,12 +199,13 @@ BattleScript_EffectDoodle:: attackstring ppreduce trycopyability BS_ATTACKER, BattleScript_ButItFailed + saveattacker attackanimation waitanimation setbyte gBattleCommunication, 0 goto BattleScript_EffectDoodle_AfterCopy BattleScript_EffectDoodle_CopyAbility: - trycopyability BS_ATTACKER, BattleScript_MoveEnd + trycopyability BS_ATTACKER, BattleScript_EffectDoodleMoveEnd BattleScript_EffectDoodle_AfterCopy: copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUpOverwriteThenNormal @@ -214,8 +215,10 @@ BattleScript_EffectDoodle_AfterCopy: switchinabilities BS_ATTACKER jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_MoveEnd addbyte gBattleCommunication, 1 - jumpifnoally BS_ATTACKER, BattleScript_MoveEnd + jumpifnoally BS_ATTACKER, BattleScript_EffectDoodleMoveEnd setallytonextattacker BattleScript_EffectDoodle_CopyAbility +BattleScript_EffectDoodleMoveEnd: + restoreattacker goto BattleScript_MoveEnd BattleScript_EffectGlaiveRush:: @@ -403,7 +406,7 @@ BattleScript_SaltCureExtraDamage:: end2 BattleScript_HurtTarget_NoString: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_TARGET datahpupdate BS_TARGET return @@ -822,7 +825,7 @@ BattleScript_EffectClangorousSoul:: attackstring ppreduce cutonethirdhpandraisestats BattleScript_ButItFailed - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_BIDE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_BIDE | HITMARKER_PASSIVE_HP_UPDATE | HITMARKER_IGNORE_DISGUISE attackanimation waitanimation healthbarupdate BS_ATTACKER @@ -836,7 +839,7 @@ BattleScript_EffectOctolock:: accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce - trysetoctolock BS_TARGET, BattleScript_ButItFailed + trysetoctolock BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE @@ -1180,7 +1183,7 @@ BattleScript_StrengthSapAnimation: @ Drain HP without lowering a stat BattleScript_StrengthSapHp: jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_StrengthSapManipulateDmg - jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveEnd + jumpifvolatile BS_ATTACKER, VOLATILE_HEAL_BLOCK, BattleScript_MoveEnd jumpiffullhp BS_ATTACKER, BattleScript_MoveEnd BattleScript_StrengthSapManipulateDmg: manipulatedamage DMG_BIG_ROOT @@ -1238,7 +1241,7 @@ BattleScript_EffectLaserFocus:: attackcanceler attackstring ppreduce - setuserstatus3 STATUS3_LASER_FOCUS, BattleScript_ButItFailed + trysetvolatile BS_ATTACKER, VOLATILE_LASER_FOCUS, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_LASERFOCUS @@ -1575,7 +1578,7 @@ BattleScript_MoveEffectFlameBurst:: tryfaintmon BS_TARGET printstring STRINGID_BURSTINGFLAMESHIT waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING tryfaintmon BS_SCRIPTING @@ -2187,8 +2190,8 @@ BattleScript_EffectHealPulse:: attackcanceler attackstring ppreduce - jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents @ stops pollen puff - jumpifstatus3 BS_TARGET, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents + jumpifvolatile BS_ATTACKER, VOLATILE_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents @ stops pollen puff + jumpifvolatile BS_TARGET, VOLATILE_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON jumpifsubstituteblocks BattleScript_ButItFailed tryhealpulse BattleScript_AlreadyAtFullHp @@ -2453,6 +2456,7 @@ BattleScript_EffectGastroAcid:: accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce + jumpifvolatile BS_TARGET, VOLATILE_GASTRO_ACID, BattleScript_ButItFailed setgastroacid BattleScript_ButItFailed attackanimation waitanimation @@ -2479,9 +2483,9 @@ BattleScript_EffectMagnetRise:: attackcanceler attackstring ppreduce - jumpifstatus3 BS_ATTACKER, STATUS3_ROOTED, BattleScript_ButItFailed - jumpifstatus3 BS_ATTACKER, STATUS3_SMACKED_DOWN, BattleScript_ButItFailed - setuserstatus3 STATUS3_MAGNET_RISE, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_ROOT, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_SMACK_DOWN, BattleScript_ButItFailed + trysetvolatile BS_ATTACKER, VOLATILE_MAGNET_RISE, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNLEVITATEDONELECTROMAGNETISM @@ -2529,7 +2533,7 @@ BattleScript_EffectAquaRing:: attackcanceler attackstring ppreduce - setuserstatus3 STATUS3_AQUA_RING, BattleScript_ButItFailed + setvolatile BS_ATTACKER, VOLATILE_AQUA_RING attackanimation waitanimation printstring STRINGID_PKMNSURROUNDEDWITHVEILOFWATER @@ -2590,7 +2594,7 @@ BattleScript_EffectMiracleEye:: accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce - setmiracleeye BattleScript_ButItFailed + setvolatile BS_TARGET, VOLATILE_MIRACLE_EYE goto BattleScript_IdentifiedFoe BattleScript_EffectGravity:: @@ -2608,7 +2612,8 @@ BattleScript_EffectGravitySuccess:: BattleScript_GravityLoop: movevaluescleanup jumpfifsemiinvulnerable BS_TARGET, STATE_ON_AIR, BattleScript_GravityLoopDrop - jumpifstatus3 BS_TARGET, STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS, BattleScript_GravityLoopDrop + jumpifvolatile BS_TARGET, VOLATILE_MAGNET_RISE, BattleScript_GravityLoopDrop + jumpifvolatile BS_TARGET, VOLATILE_TELEKINESIS, BattleScript_GravityLoopDrop goto BattleScript_GravityLoopEnd BattleScript_GravityLoopDrop: gravityonairbornemons @@ -2720,7 +2725,7 @@ BattleScript_EffectNaturalGift:: jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_MAGIC_ROOM, BattleScript_ButItFailed jumpifability BS_ATTACKER, ABILITY_KLUTZ, BattleScript_ButItFailed - jumpifstatus3 BS_ATTACKER, STATUS3_EMBARGO, BattleScript_ButItFailed + jumpifvolatile BS_ATTACKER, VOLATILE_EMBARGO, BattleScript_ButItFailed accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE call BattleScript_HitFromCritCalc @@ -2838,7 +2843,7 @@ BattleScript_EffectAbsorb:: printfromtable gAbsorbDrainStringIds waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER - bicword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_PASSIVE_DAMAGE + bicword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE | HITMARKER_PASSIVE_HP_UPDATE return BattleScript_EffectExplosion:: @@ -2857,7 +2862,7 @@ BattleScript_FaintAttackerForExplosion:: return BattleScript_MaxHp50Recoil:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER tryfaintmon BS_ATTACKER @@ -3049,7 +3054,7 @@ BattleScript_EffectRoar:: jumpifcommanderactive BattleScript_ButItFailed jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_ButItFailed jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut - jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted + jumpifvolatile BS_TARGET, VOLATILE_ROOT, BattleScript_PrintMonIsRooted jumpiftargetdynamaxed BattleScript_RoarBlockedByDynamax accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE @@ -3184,7 +3189,7 @@ BattleScript_RecoilIfMiss:: printstring STRINGID_PKMNCRASHED waitmessage B_WAIT_TIME_LONG jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_RecoilEnd - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE | HITMARKER_IGNORE_DISGUISE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER tryfaintmon BS_ATTACKER @@ -3444,7 +3449,7 @@ BattleScript_EffectSubstitute:: jumpifvolatile BS_ATTACKER, VOLATILE_SUBSTITUTE, BattleScript_AlreadyHasSubstitute setsubstitute jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SUBSTITUTE_FAILED, BattleScript_SubstituteString - orword gHitMarker, HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_PASSIVE_HP_UPDATE attackanimation waitanimation healthbarupdate BS_ATTACKER @@ -3770,7 +3775,7 @@ BattleScript_NightmareWorked:: BattleScript_EffectMinimize:: attackcanceler - setminimize + setvolatile BS_ATTACKER, VOLATILE_MINIMIZE .if B_MINIMIZE_EVASION >= GEN_5 setstatchanger STAT_EVASION, 2, FALSE .else @@ -4155,7 +4160,7 @@ BattleScript_EffectBellyDrum:: ppreduce jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_ButItFailed halvehp BattleScript_ButItFailed - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE attackanimation waitanimation healthbarupdate BS_ATTACKER @@ -4678,7 +4683,7 @@ BattleScript_EffectIngrain:: attackcanceler attackstring ppreduce - setuserstatus3 STATUS3_ROOTED, BattleScript_ButItFailed + trysetvolatile BS_ATTACKER, VOLATILE_ROOT, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNPLANTEDROOTS @@ -4825,7 +4830,7 @@ BattleScript_EffectGrudge:: attackcanceler attackstring ppreduce - setuserstatus3 STATUS3_GRUDGE, BattleScript_ButItFailed + trysetvolatile BS_ATTACKER, VOLATILE_GRUDGE, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNWANTSGRUDGE @@ -5013,6 +5018,7 @@ BattleScript_FaintAttacker:: dofaintanimation BS_ATTACKER printstring STRINGID_ATTACKERFAINTED cleareffectsonfaint BS_ATTACKER + waitanimation tryactivatesoulheart tryactivatereceiver BS_ATTACKER trytrainerslidemsgfirstoff BS_ATTACKER @@ -5027,6 +5033,7 @@ BattleScript_FaintTarget:: dofaintanimation BS_TARGET printstring STRINGID_TARGETFAINTED cleareffectsonfaint BS_TARGET + waitanimation tryactivatesoulheart tryactivatereceiver BS_TARGET trytrainerslidemsgfirstoff BS_TARGET @@ -5170,13 +5177,13 @@ BattleScript_PayDayMoneyAndPickUpItems:: end2 BattleScript_LocalBattleLost:: - jumpifbattletype BATTLE_TYPE_INGAME_PARTNER, BattleScript_LocalBattleLostPrintWhiteOut jumpifbattletype BATTLE_TYPE_DOME, BattleScript_CheckDomeDrew jumpifbattletype BATTLE_TYPE_FRONTIER, BattleScript_LocalBattleLostPrintTrainersWinText jumpifbattletype BATTLE_TYPE_TRAINER_HILL, BattleScript_LocalBattleLostPrintTrainersWinText jumpifbattletype BATTLE_TYPE_EREADER_TRAINER, BattleScript_LocalBattleLostEnd jumpifhalfword CMP_EQUAL, gTrainerBattleParameter + 2, TRAINER_SECRET_BASE, BattleScript_LocalBattleLostEnd jumpifnowhiteout BattleScript_LocalBattleLostEnd_ + jumpifbattletype BATTLE_TYPE_INGAME_PARTNER, BattleScript_LocalBattleLostPrintWhiteOut BattleScript_LocalBattleLostPrintWhiteOut:: getmoneyreward printstring STRINGID_PLAYERWHITEOUT @@ -5560,7 +5567,7 @@ BattleScript_LeechSeedTurnDrainHealBlock:: BattleScript_LeechSeedTurnDrainRecovery:: call BattleScript_LeechSeedTurnDrain BattleScript_LeechSeedTurnDrainGainHp: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_TARGET datahpupdate BS_TARGET printfromtable gLeechSeedStringIds @@ -5745,14 +5752,14 @@ BattleScript_EncoredNoMore:: BattleScript_DestinyBondTakesLife:: printstring STRINGID_PKMNTOOKFOE waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER tryfaintmon BS_ATTACKER return BattleScript_DmgHazardsOnAttacker:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER call BattleScript_PrintHurtByDmgHazards @@ -5767,7 +5774,7 @@ BattleScript_DmgHazardsOnAttackerFainted:: goto BattleScript_HandleFaintedMon BattleScript_DmgHazardsOnTarget:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_TARGET datahpupdate BS_TARGET call BattleScript_PrintHurtByDmgHazards @@ -5782,7 +5789,7 @@ BattleScript_DmgHazardsOnTargetFainted:: goto BattleScript_HandleFaintedMon BattleScript_DmgHazardsOnBattlerScripting:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING call BattleScript_PrintHurtByDmgHazards @@ -5797,7 +5804,7 @@ BattleScript_DmgHazardsOnBattlerScriptingFainted:: goto BattleScript_HandleFaintedMon BattleScript_DmgHazardsOnFaintedBattler:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_FAINTED datahpupdate BS_FAINTED call BattleScript_PrintHurtByDmgHazards @@ -5858,7 +5865,7 @@ BattleScript_StickyWebOnSwitchInEnd: BattleScript_PerishSongTakesLife:: printstring STRINGID_PKMNPERISHCOUNTFELL waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER tryfaintmon BS_ATTACKER @@ -5868,14 +5875,14 @@ BattleScript_PerishBodyActivates:: call BattleScript_AbilityPopUp printstring STRINGID_PKMNSWILLPERISHIN3TURNS waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE return BattleScript_GulpMissileGorging:: call BattleScript_AbilityPopUp playanimation BS_ATTACKER, B_ANIM_GULP_MISSILE waitanimation - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE effectivenesssound hitanimation BS_ATTACKER waitstate @@ -5902,7 +5909,7 @@ BattleScript_GulpMissileGulping:: call BattleScript_AbilityPopUp playanimation BS_ATTACKER, B_ANIM_GULP_MISSILE waitanimation - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE effectivenesssound hitanimation BS_ATTACKER waitstate @@ -5984,7 +5991,7 @@ BattleScript_EarthEaterActivates:: call BattleScript_AbilityPopUp pause B_WAIT_TIME_LONG tryhealquarterhealth BS_TARGET, BattleScript_EarthEaterRet - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_TARGET datahpupdate BS_TARGET printstring STRINGID_PKMNREGAINEDHEALTH @@ -6636,7 +6643,7 @@ BattleScript_AftermathDmg:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUpScripting jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_AftermathDmgRet - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printstring STRINGID_AFTERMATHDMG @@ -6679,7 +6686,7 @@ BattleScript_PoisonTurnDmg:: BattleScript_DoStatusTurnDmg:: statusanimation BS_ATTACKER BattleScript_DoTurnDmg: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER tryfaintmon BS_ATTACKER @@ -6694,7 +6701,7 @@ BattleScript_PoisonHealActivates:: printstring STRINGID_POISONHEALHPUP waitmessage B_WAIT_TIME_LONG statusanimation BS_ATTACKER - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER end2 @@ -6807,7 +6814,7 @@ BattleScript_DoSelfConfusionDmg:: effectivenesssound hitanimation BS_ATTACKER waitstate - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER resultmessage @@ -6828,7 +6835,7 @@ BattleScript_MoveUsedPowder:: effectivenesssound hitanimation BS_ATTACKER waitstate - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printstring STRINGID_POWDEREXPLODES @@ -7018,7 +7025,7 @@ BattleScript_MoveEffectRecoil:: jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_RecoilEnd jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_RecoilEnd BattleScript_DoRecoil:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE | HITMARKER_IGNORE_DISGUISE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printstring STRINGID_PKMNHITWITHRECOIL @@ -7244,7 +7251,7 @@ BattleScript_HarvestActivatesEnd: end3 BattleScript_SolarPowerActivates:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE call BattleScript_AbilityPopUp healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER @@ -7587,6 +7594,7 @@ BattleScript_ActivateTerrainEffects: saveattacker savetarget tryboosterenergy ON_TERRAIN + resetterrainabilityflags setbyte gBattlerAttacker, 0 BattleScript_ActivateTerrainSeed: copyarraywithindex gBattlerTarget, gBattlerByTurnOrder, gBattlerAttacker, 1 @@ -7650,7 +7658,7 @@ BattleScript_BadDreams_DmgAfterPopUp: printstring STRINGID_BADDREAMSDMG waitmessage B_WAIT_TIME_LONG dmg_1_8_targethp - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_TARGET datahpupdate BS_TARGET jumpifhasnohp BS_TARGET, BattleScript_BadDreams_HidePopUp @@ -7825,10 +7833,10 @@ BattleScript_MoveUsedPsychicTerrainPrevents:: BattleScript_GrassyTerrainHeals:: printstring STRINGID_GRASSYTERRAINHEALS waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER - bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE end2 BattleScript_AbilityNoSpecificStatLoss:: @@ -8059,7 +8067,7 @@ BattleScript_ImposterActivates:: end3 BattleScript_HurtAttacker: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printstring STRINGID_PKMNHURTSWITH @@ -8083,7 +8091,7 @@ BattleScript_RockyHelmetActivatesDmg: BattleScript_SpikyShieldEffect:: jumpifabsent BS_ATTACKER, BattleScript_SpikyShieldRet - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE clearmoveresultflags MOVE_RESULT_NO_EFFECT healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER @@ -8095,7 +8103,7 @@ BattleScript_SpikyShieldRet:: return BattleScript_KingsShieldEffect:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE clearmoveresultflags MOVE_RESULT_NO_EFFECT seteffectsecondary BS_ATTACKER, BS_TARGET, MOVE_EFFECT_NONE copybyte sBATTLER, gBattlerTarget @@ -8105,7 +8113,7 @@ BattleScript_KingsShieldEffect:: return BattleScript_BanefulBunkerEffect:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE clearmoveresultflags MOVE_RESULT_NO_EFFECT setnonvolatilestatus TRIGGER_ON_PROTECT setmoveresultflags MOVE_RESULT_MISSED @@ -8397,7 +8405,7 @@ BattleScript_ItemHealHP_RemoveItemRet_Anim: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING removeitem BS_SCRIPTING @@ -8412,7 +8420,7 @@ BattleScript_ItemHealHP_RemoveItemEnd2_Anim: playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER removeitem BS_ATTACKER @@ -8450,7 +8458,7 @@ BattleScript_AirBaloonMsgPop:: return BattleScript_ItemHurtRet:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE | HITMARKER_IGNORE_DISGUISE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printstring STRINGID_HURTBYITEM @@ -8468,7 +8476,7 @@ BattleScript_ItemHealHP_Ret:: playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHPALITTLE waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER return @@ -8523,7 +8531,7 @@ BattleScript_BerryConfuseHealEnd2_Anim: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING seteffectprimary BS_SCRIPTING, BS_SCRIPTING, MOVE_EFFECT_CONFUSION @@ -8539,7 +8547,7 @@ BattleScript_BerryConfuseHealRet_Anim: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING seteffectprimary BS_SCRIPTING, BS_SCRIPTING, MOVE_EFFECT_CONFUSION @@ -8658,6 +8666,7 @@ BattleScript_ArenaDoJudgment:: waitcry dofaintanimation BS_OPPONENT1 cleareffectsonfaint BS_OPPONENT1 + waitanimation arenaopponentmonlost end2 @@ -8672,6 +8681,7 @@ BattleScript_ArenaJudgmentPlayerLoses: waitcry dofaintanimation BS_PLAYER1 cleareffectsonfaint BS_PLAYER1 + waitanimation arenaplayermonlost end2 @@ -8686,10 +8696,12 @@ BattleScript_ArenaJudgmentDraw: waitcry dofaintanimation BS_PLAYER1 cleareffectsonfaint BS_PLAYER1 + waitanimation playfaintcry BS_OPPONENT1 waitcry dofaintanimation BS_OPPONENT1 cleareffectsonfaint BS_OPPONENT1 + waitanimation arenabothmonslost end2 @@ -9030,7 +9042,7 @@ BattleScript_RedCardActivates:: printstring STRINGID_REDCARDACTIVATE waitmessage B_WAIT_TIME_LONG swapattackerwithtarget - jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_ROOTED, BattleScript_RedCardIngrain + jumpifvolatile BS_EFFECT_BATTLER, VOLATILE_ROOT, BattleScript_RedCardIngrain jumpifability BS_EFFECT_BATTLER, ABILITY_SUCTION_CUPS, BattleScript_RedCardSuctionCups jumpiftargetdynamaxed BattleScript_RedCardDynamaxed removeitem BS_SCRIPTING diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 89767de31b..667fcce2a4 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -19,7 +19,10 @@ - [How to add new Trainer Slides](tutorials/how_to_new_trainer_slide.md) - [Day/Night System FAQ](tutorials/dns.md) - [Changelog](./CHANGELOG.md) + - [1.13.x]() + - [Version 1.13.0](changelogs/1.13.x/1.13.0.md) - [1.12.x]() + - [Version 1.12.3](changelogs/1.12.x/1.12.3.md) - [Version 1.12.2](changelogs/1.12.x/1.12.2.md) - [Version 1.12.1](changelogs/1.12.x/1.12.1.md) - [Version 1.12.0](changelogs/1.12.x/1.12.0.md) diff --git a/docs/changelogs/1.12.x/1.12.3.md b/docs/changelogs/1.12.x/1.12.3.md new file mode 100644 index 0000000000..a4deece835 --- /dev/null +++ b/docs/changelogs/1.12.x/1.12.3.md @@ -0,0 +1,118 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.12.3 +`. +``` + + +## 🧬 General 🧬 +### Changed +* Restore git history check by @ravepossum in [#7463](https://github.com/rh-hideout/pokeemerald-expansion/pull/7463) +* Moved summary screen nature colors to summary_screen.h by @RubyRaven6 in [#7560](https://github.com/rh-hideout/pokeemerald-expansion/pull/7560) +* Added comment in event.inc for simple menus in dynmultichoice by @RubyRaven6 in [#7568](https://github.com/rh-hideout/pokeemerald-expansion/pull/7568) +* Changed default print level for DebugPrintf for mGBA to MGBA_LOG_WARN by @hedara90 in [#7567](https://github.com/rh-hideout/pokeemerald-expansion/pull/7567) +* Fixed Teleport's description not being updated based on `B_TELEPORT_BEHAVIOR` by @AsparagusEduardo in [#7580](https://github.com/rh-hideout/pokeemerald-expansion/pull/7580) +* Minor Clean up in battle_ai_main.c by @AlexOn1ine in [#7551](https://github.com/rh-hideout/pokeemerald-expansion/pull/7551) + +## 🗺️ Overworld 🗺️ +### Changed +* fix: remove unused wild_encounters.json.txt jinja file by @khbsd in [#7581](https://github.com/rh-hideout/pokeemerald-expansion/pull/7581) + +### Fixed +* Bug fix: add handling for forced movements into/after ledge jumps with follower NPCs by @Bivurnum in [#7055](https://github.com/rh-hideout/pokeemerald-expansion/pull/7055) +* Fixed compile issue `OW_TIMES_OF_DAY` is `GEN_3` by @AsparagusEduardo in [#7499](https://github.com/rh-hideout/pokeemerald-expansion/pull/7499) +* Remove shadow and hide follower on stair warp by @cornixsenex in [#7368](https://github.com/rh-hideout/pokeemerald-expansion/pull/7368) +* Fix Form Change Item Task Data and Clean Up Field Use Funcs by @ravepossum in [#7535](https://github.com/rh-hideout/pokeemerald-expansion/pull/7535) +* Fix Vs Seeker Trainer Battle script issue by @pkmnsnfrn in [#7615](https://github.com/rh-hideout/pokeemerald-expansion/pull/7615) + +## ⚔️ Battle General ⚔️ +### Changed +* Remove unused function by @AlexOn1ine in [#7617](https://github.com/rh-hideout/pokeemerald-expansion/pull/7617) + +### Fixed +* Fixes Magnet Rise when user is Rooted/Smacked Down by @PhallenTree in [#7449](https://github.com/rh-hideout/pokeemerald-expansion/pull/7449) +* Fixes Leech Seed recovery not applying behind Sub by @AlexOn1ine in [#7468](https://github.com/rh-hideout/pokeemerald-expansion/pull/7468) +* Fixes Round and Fusion moves doubling power from previous turn's move by @PhallenTree in [#7476](https://github.com/rh-hideout/pokeemerald-expansion/pull/7476) +* Fixes shadows and mon animations for transformed battlers by @AsparagusEduardo in [#7500](https://github.com/rh-hideout/pokeemerald-expansion/pull/7500) +* Fixes Life Orb still activating if move was absorbed by @AlexOn1ine in [#7521](https://github.com/rh-hideout/pokeemerald-expansion/pull/7521) +* Fix Mimicry Only Activating Once per Turn by @ghoulslash in [#7537](https://github.com/rh-hideout/pokeemerald-expansion/pull/7537) +* Fixes Knock Off still activating when there is no Item by @AlexOn1ine in [#7496](https://github.com/rh-hideout/pokeemerald-expansion/pull/7496) +* Fixed `B_PSYWAVE_DMG` by @AsparagusEduardo in [#7557](https://github.com/rh-hideout/pokeemerald-expansion/pull/7557) +* Fixes Counter / Mirror Coat / Metal Burst damage assignment by @AlexOn1ine in [#7538](https://github.com/rh-hideout/pokeemerald-expansion/pull/7538) +* Fix in-game partner battles always causing a whiteout by @ravepossum in [#7587](https://github.com/rh-hideout/pokeemerald-expansion/pull/7587) +* Fix B_ANIMATE_MON_AFTER_KO with a new counter by @hedara90 in [#7531](https://github.com/rh-hideout/pokeemerald-expansion/pull/7531) +* Fixes Rage Fist counter increment by @AlexOn1ine in [#7582](https://github.com/rh-hideout/pokeemerald-expansion/pull/7582) +* Fixes moveend_absorb hitmarker by @AlexOn1ine in [#7591](https://github.com/rh-hideout/pokeemerald-expansion/pull/7591) +* switchinabilities also runs ON_WEATHER and ON_TERRAIN by @ghoulslash in [#7612](https://github.com/rh-hideout/pokeemerald-expansion/pull/7612) +* Fixes Explosion behavior when 3 mons can endure hit by @AlexOn1ine in [#7594](https://github.com/rh-hideout/pokeemerald-expansion/pull/7594) +* Fixes octolock not ending after user switched out by @AlexOn1ine in [#7556](https://github.com/rh-hideout/pokeemerald-expansion/pull/7556) +* The original attacker wasn't restored for Doodle by @AlexOn1ine in [#7620](https://github.com/rh-hideout/pokeemerald-expansion/pull/7620) +* Restore X item friendship increase by @ravepossum in [#7583](https://github.com/rh-hideout/pokeemerald-expansion/pull/7583) +* Fixes Wonder Room interactions with Defense/Special Defense boosting effects by @PhallenTree in [#7626](https://github.com/rh-hideout/pokeemerald-expansion/pull/7626) +* Ally Switch attract battler swapping, test for leech seed by @ghoulslash in [#7634](https://github.com/rh-hideout/pokeemerald-expansion/pull/7634) + +## 🤹 Moves 🤹 +### Fixed +* Clear gScanlineEffect to fix timeout in acid downpour animation by @FosterProgramming in [#7442](https://github.com/rh-hideout/pokeemerald-expansion/pull/7442) +* Fix terastallization anims flickering by @ravepossum in [#7613](https://github.com/rh-hideout/pokeemerald-expansion/pull/7613) + +## 🧶 Items 🧶 +### Changed +* Fix using town map as registered item by @ravepossum in [#7482](https://github.com/rh-hideout/pokeemerald-expansion/pull/7482) + +### Fixed +* Implement using party menu items from field by @ravepossum in [#7481](https://github.com/rh-hideout/pokeemerald-expansion/pull/7481) + +## 🤖 Battle AI 🤖 +### Changed +* Macro-for-AI-Flag-definitions by @grintoul1 in [#7471](https://github.com/rh-hideout/pokeemerald-expansion/pull/7471) + +### Fixed +* Incorrect call in Rest by @surskitty in [#7569](https://github.com/rh-hideout/pokeemerald-expansion/pull/7569) +* Fix duplicate switch in after faint by @AlexOn1ine in [#7600](https://github.com/rh-hideout/pokeemerald-expansion/pull/7600) + +## 🧹 Other Cleanup 🧹 +* Macro-for-AI-Flag-definitions by @grintoul1 in [#7471](https://github.com/rh-hideout/pokeemerald-expansion/pull/7471) +* Moved summary screen nature colors to summary_screen.h by @RubyRaven6 in [#7560](https://github.com/rh-hideout/pokeemerald-expansion/pull/7560) +* fix: remove unused wild_encounters.json.txt jinja file by @khbsd in [#7581](https://github.com/rh-hideout/pokeemerald-expansion/pull/7581) +* Fix Form Change Item Task Data and Clean Up Field Use Funcs by @ravepossum in [#7535](https://github.com/rh-hideout/pokeemerald-expansion/pull/7535) +* Fixed Teleport's description not being updated based on `B_TELEPORT_BEHAVIOR` by @AsparagusEduardo in [#7580](https://github.com/rh-hideout/pokeemerald-expansion/pull/7580) +* Fixed typo in test name by @hedara90 in [#7610](https://github.com/rh-hideout/pokeemerald-expansion/pull/7610) +* Minor Clean up in battle_ai_main.c by @AlexOn1ine in [#7551](https://github.com/rh-hideout/pokeemerald-expansion/pull/7551) +* Remove unused function by @AlexOn1ine in [#7617](https://github.com/rh-hideout/pokeemerald-expansion/pull/7617) +* Fix Vs Seeker Trainer Battle script issue by @pkmnsnfrn in [#7615](https://github.com/rh-hideout/pokeemerald-expansion/pull/7615) + +## 🧪 Test Runner 🧪 +### Changed +* Clean up some Normalize tests to make them make sense by @hedara90 in [#7461](https://github.com/rh-hideout/pokeemerald-expansion/pull/7461) +* Add Synthesis + Utililty Umbrella test by @ghoulslash in [#7472](https://github.com/rh-hideout/pokeemerald-expansion/pull/7472) +* Add test for BoxPokemon integrity by @hedara90 in [#7487](https://github.com/rh-hideout/pokeemerald-expansion/pull/7487) +* Re-order moves in fling test by @hedara90 in [#7559](https://github.com/rh-hideout/pokeemerald-expansion/pull/7559) +* Wrote some tests by @AsparagusEduardo in [#7563](https://github.com/rh-hideout/pokeemerald-expansion/pull/7563) +* Added Ability TODO tests - Volume C by @AsparagusEduardo in [#7562](https://github.com/rh-hideout/pokeemerald-expansion/pull/7562) +* Added missing Move Effect TODO tests - Volume F by @AsparagusEduardo in [#7605](https://github.com/rh-hideout/pokeemerald-expansion/pull/7605) +* Fixed typo in test name by @hedara90 in [#7610](https://github.com/rh-hideout/pokeemerald-expansion/pull/7610) + +### Fixed +* Clear out parties between battle tests by @hedara90 in [#7460](https://github.com/rh-hideout/pokeemerald-expansion/pull/7460) +* Fixed most failed tests with `GEN_LATEST GEN_8` by @AsparagusEduardo in [#7498](https://github.com/rh-hideout/pokeemerald-expansion/pull/7498) +* Corrected Liquid Ooze test by @AsparagusEduardo in [#7527](https://github.com/rh-hideout/pokeemerald-expansion/pull/7527) +* switchinabilities also runs ON_WEATHER and ON_TERRAIN by @ghoulslash in [#7612](https://github.com/rh-hideout/pokeemerald-expansion/pull/7612) +* Ally Switch attract battler swapping, test for leech seed by @ghoulslash in [#7634](https://github.com/rh-hideout/pokeemerald-expansion/pull/7634) + +## 📚 Documentation 📚 +* Update how_to_new_pokemon.md by @kevinwklawrence in [#7440](https://github.com/rh-hideout/pokeemerald-expansion/pull/7440) +* Updating a link to porytiles in INSTALL.md by @ThePeeps191 in [#7490](https://github.com/rh-hideout/pokeemerald-expansion/pull/7490) +* Added comment in event.inc for simple menus in dynmultichoice by @RubyRaven6 in [#7568](https://github.com/rh-hideout/pokeemerald-expansion/pull/7568) + +## New Contributors +* @kevinwklawrence made their first contribution in [#7440](https://github.com/rh-hideout/pokeemerald-expansion/pull/7440) +* @ThePeeps191 made their first contribution in [#7490](https://github.com/rh-hideout/pokeemerald-expansion/pull/7490) +* @cornixsenex made their first contribution in [#7368](https://github.com/rh-hideout/pokeemerald-expansion/pull/7368) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.12.2...expansion/1.12.3 + + + + diff --git a/docs/changelogs/1.13.x/1.13.0.md b/docs/changelogs/1.13.x/1.13.0.md new file mode 100644 index 0000000000..52babd0b43 --- /dev/null +++ b/docs/changelogs/1.13.x/1.13.0.md @@ -0,0 +1,483 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.13.0 +`. +``` + +## 🌋 *REFACTORS* 🌋 +📜 = Uses a migration script. +* Refactor field moves by @cawtds in [#6660](https://github.com/rh-hideout/pokeemerald-expansion/pull/6660) +* Refactors Final Gambit + Tests by @AlexOn1ine in [#7005](https://github.com/rh-hideout/pokeemerald-expansion/pull/7005) +* Combines Super Fang and Guardian of Alola effects by @AlexOn1ine in [#7048](https://github.com/rh-hideout/pokeemerald-expansion/pull/7048) +* Refactor damage calculations aruguments by using a struct context by @AlexOn1ine in [#7108](https://github.com/rh-hideout/pokeemerald-expansion/pull/7108) +* Add damage context to effectiveness multiplier by @AlexOn1ine in [#7111](https://github.com/rh-hideout/pokeemerald-expansion/pull/7111) +* Decouple Status set by ability from SetMoveEffect by @AlexOn1ine in [#7125](https://github.com/rh-hideout/pokeemerald-expansion/pull/7125) +* Converted Relic Song into a proper form change by @AsparagusEduardo in [#7139](https://github.com/rh-hideout/pokeemerald-expansion/pull/7139) + - Added `FORM_CHANGE_BATTLE_AFTER_MOVE` to parametrize Relic Song's form change +* Removed Mind Blown effect in favor of move flag by @AsparagusEduardo in [#7138](https://github.com/rh-hideout/pokeemerald-expansion/pull/7138) +* Volatile status refactoring by @cfmnephrite in [#6983](https://github.com/rh-hideout/pokeemerald-expansion/pull/6983) +* Bag refactor (groundwork for expansion) by @cfmnephrite in [#7018](https://github.com/rh-hideout/pokeemerald-expansion/pull/7018) + - If you're using @ghoulslash's bag sort branch, this PR will break it +* Stat Change (Animation) Refactor by @PhallenTree in [#7144](https://github.com/rh-hideout/pokeemerald-expansion/pull/7144) + `setgraphicalstatchangevalues` and `playstatchangeanimation` have been removed and now Stat Change Animations are handled in `statbuffchange`. + - To update your custom battle scripts: + `setgraphicalstatchangevalues` is often accompanied by `playanimation X, B_ANIM_STATS_CHANGE`. When I refer to deleting `setgraphicalstatchangevalues` below, that command should also be deleted. + 1. If `statbuffchange` is before `setgraphicalstatchangevalues`/`playstatchangeanimation` and there is something in between them (for example, `attackanimation` and `waitanimation`), add the flag `STAT_CHANGE_ONLY_CHECKING` and replace the command (`setgraphicalstatchangevalues`/`playstatchangeanimation`) with a copy of the original `statbuffchange`. + 2. If `statbuffchange` is after `setgraphicalstatchangevalues`/`playstatchangeanimation` or there is nothing in between, you should delete those commands (`setgraphicalstatchangevalues`/`playstatchangeanimation`) and no further changes other than those in _3._ should be required. + 3. If `playstatchangeanimation` had bits assigned to them (`BIT_ATK | BIT_SPATK`, for example), add ", " followed by those bits to the first `statbuffchange`; for the following `statbuffchange`s, remove stats that have already been increased/decreased. +* Untangle `InitBtlControllers` functions by @AsparagusEduardo in [#6748](https://github.com/rh-hideout/pokeemerald-expansion/pull/6748) +* Use battler arguments for SetMoveEffect by @AlexOn1ine in [#7156](https://github.com/rh-hideout/pokeemerald-expansion/pull/7156) +* Easier expandability of debug menu by @AsparagusEduardo in [#6910](https://github.com/rh-hideout/pokeemerald-expansion/pull/6910) +* Use dedicated functions for Mud/Water Sport by @AlexOn1ine in [#7248](https://github.com/rh-hideout/pokeemerald-expansion/pull/7248) +* Expanding and Refactoring Skill Swap and other ability-changing moves by @surskitty in [#7238](https://github.com/rh-hideout/pokeemerald-expansion/pull/7238) +* Refactor move Synchronise by @AlexOn1ine in [#7271](https://github.com/rh-hideout/pokeemerald-expansion/pull/7271) +* Adds hazard queue by @AlexOn1ine in [#7295](https://github.com/rh-hideout/pokeemerald-expansion/pull/7295) +* Changes AccuracyCalcHelper into CanMoveSkipAccuracyCalc by @AlexOn1ine in [#7303](https://github.com/rh-hideout/pokeemerald-expansion/pull/7303) +* battle_interface: overhaul ability pop up by @mudskipper13 in [#7227](https://github.com/rh-hideout/pokeemerald-expansion/pull/7227) + - The layout of the ability pop up's image (`graphics/battle_interface/ability_pop_up.png`) has been changed. +* Bag refactor 2 by @cfmnephrite in [#7166](https://github.com/rh-hideout/pokeemerald-expansion/pull/7166) +* Replaces STATUS2 usage with volatiles in code by @cfmnephrite in [#7262](https://github.com/rh-hideout/pokeemerald-expansion/pull/7262) + - Replaced all references to STATUS2 in the code with volatiles (but left the old bitfield behind for compatibility with downstream users). The list of volatiles is in `include/constants/battle.h` and includes information such as an enum, a field name, type and max size, and whether or not the move is Baton Passable. Users can use VOLATILE_X with any function that previously took STATUS2_X in scripts, and can check/set volatiles in C with `gBattleMons[battler].volatiles.{field name}` syntax instead of checking a flag in a bitfield. +* Refactor battle environment by @fdeblasio in [#4891](https://github.com/rh-hideout/pokeemerald-expansion/pull/4891) +* Convert various to callnatives by @AlexOn1ine in [#7355](https://github.com/rh-hideout/pokeemerald-expansion/pull/7355) +* AI refactor for weather-setting, terrain-setting, Trick Room behaviors; doubles-focused by @surskitty in [#7319](https://github.com/rh-hideout/pokeemerald-expansion/pull/7319) + - AI is more likely to use Trick Room in double battles and Terrains in general. +* Convert Status4 to volatiles by @AlexOn1ine in [#7411](https://github.com/rh-hideout/pokeemerald-expansion/pull/7411) +* Split Sheer Force tests by gen instead of by four by @AlexOn1ine in [#7260](https://github.com/rh-hideout/pokeemerald-expansion/pull/7260) +* Modify move prediction to work in doubles by @AlexOn1ine in [#7087](https://github.com/rh-hideout/pokeemerald-expansion/pull/7087) +* Convert statuses3 to volatiles by @AlexOn1ine in [#7514](https://github.com/rh-hideout/pokeemerald-expansion/pull/7514) +* Added trainerBackPic to Trainer struct to de-couple trainer pic and trainer back pic defines by @grintoul1 in [#7425](https://github.com/rh-hideout/pokeemerald-expansion/pull/7425) + +## 🧬 General 🧬 +### Added +* New sprite compressor by @hedara90, @DizzyEggg Improved performance massively for the instruction decoding., @mrgriffin, SBird and @tertu-m who has done even more optimization and answered questions about the GBA hardware whenever I had them. and @rayrobdod for the better migration script. in [#5627](https://github.com/rh-hideout/pokeemerald-expansion/pull/5627) + - `LZDecompressVram` and `LZDecompressWram` has been deprecated. All calls do decompress LZ compressed data should be using the wrapper functions `DecompressDataWithHeaderVram` or `DecompressDataWithHeaderWram`. + - A new sprite compression format has been introduced. To use it, replace files with `.4bpp.lz` with `.4bpp.smol` or `.4bpp.fastSmol`. + - `.smol` is a compression format utilizing entropy encoding in the form of tabled Asymmetric Numeral Systems (tANS) and a modified LZ style RLE/Dictionary encoding scheme specialized for the sprites used in Pokemon games. This is approximately 25% smaller than the default LZ77 compression. + - `.fastSmol` skips the entropy encoding and is therefore slightly larger than the default LZ77 compression, but decoding sprites is faster than the default LZ77 compression. + - `.smolTM` is a compression scheme for tilemaps. + - Might have unexpected behavior if user introduced decompression during hardware interrupts. + - Has a migration script that handles all files under `src/`, `migration_scripts/1.12/convert_compressed_files.py`. +* Adds FRLG asserts to Alloc/Free by @cawtds in [#7025](https://github.com/rh-hideout/pokeemerald-expansion/pull/7025) +* Debug parties and battles by @SBird1337 in [#6884](https://github.com/rh-hideout/pokeemerald-expansion/pull/6884) + - Adds options to set debug parties and battles using the debug menu +* Added naive line break by @hedara90 in [#7076](https://github.com/rh-hideout/pokeemerald-expansion/pull/7076) +* Disable unowned evo methods by @Bolt-Strike in [#7103](https://github.com/rh-hideout/pokeemerald-expansion/pull/7103) +* lto support by @DizzyEggg in [#7182](https://github.com/rh-hideout/pokeemerald-expansion/pull/7182) +* Improve trainer back pic-related data and code (+ smol documentation) by @mudskipper13 in [#6821](https://github.com/rh-hideout/pokeemerald-expansion/pull/6821) +* Add Set Hidden Nature option to the debug menu by @AlexOn1ine in [#7281](https://github.com/rh-hideout/pokeemerald-expansion/pull/7281) +* Instant Win option in Battle Debug by @AlexOn1ine in [#7333](https://github.com/rh-hideout/pokeemerald-expansion/pull/7333) +* `trainerproc` copy other trainer party by @hedara90 in [#7251](https://github.com/rh-hideout/pokeemerald-expansion/pull/7251) + - Adds the `Copy Pool` command to `trainerproc` which copies the party/pool from another trainer. +* Show chosen move in the battle debug menu by @AlexOn1ine in [#7382](https://github.com/rh-hideout/pokeemerald-expansion/pull/7382) +* Rock climb by ghoulslash by @pokesidv in [#7432](https://github.com/rh-hideout/pokeemerald-expansion/pull/7432) + - Added rock climb field effect + +### Changed +* Restore git history check by @ravepossum in [#7463](https://github.com/rh-hideout/pokeemerald-expansion/pull/7463) +* Moved summary screen nature colors to summary_screen.h by @RubyRaven6 in [#7560](https://github.com/rh-hideout/pokeemerald-expansion/pull/7560) +* Added comment in event.inc for simple menus in dynmultichoice by @RubyRaven6 in [#7568](https://github.com/rh-hideout/pokeemerald-expansion/pull/7568) +* Changed default print level for DebugPrintf for mGBA to MGBA_LOG_WARN by @hedara90 in [#7567](https://github.com/rh-hideout/pokeemerald-expansion/pull/7567) +* Fixed Teleport's description not being updated based on `B_TELEPORT_BEHAVIOR` by @AsparagusEduardo in [#7580](https://github.com/rh-hideout/pokeemerald-expansion/pull/7580) +* Minor Clean up in battle_ai_main.c by @AlexOn1ine in [#7551](https://github.com/rh-hideout/pokeemerald-expansion/pull/7551) +* Refactor field moves by @cawtds in [#6660](https://github.com/rh-hideout/pokeemerald-expansion/pull/6660) +* Replace all usages of lz compression with smol by @hedara90 in [#7032](https://github.com/rh-hideout/pokeemerald-expansion/pull/7032) +* `BtlController_EmitTwoReturnValues` cleanup by @AsparagusEduardo in [#6855](https://github.com/rh-hideout/pokeemerald-expansion/pull/6855) +* Put the gen 1 compression tests behind a config by @hedara90 in [#7033](https://github.com/rh-hideout/pokeemerald-expansion/pull/7033) +* Converts a bunch of defines to enums by @Bassoonian in [#7041](https://github.com/rh-hideout/pokeemerald-expansion/pull/7041) +* chore: remove unused section from credits by @Emiliasky in [#7085](https://github.com/rh-hideout/pokeemerald-expansion/pull/7085) +* Simplify white out messages by @kittenchilly in [#6961](https://github.com/rh-hideout/pokeemerald-expansion/pull/6961) +* Improve music/se macros and fix names by @cawtds in [#7030](https://github.com/rh-hideout/pokeemerald-expansion/pull/7030) +* Bag refactor (groundwork for expansion) by @cfmnephrite in [#7018](https://github.com/rh-hideout/pokeemerald-expansion/pull/7018) + - If you're using @ghoulslash's bag sort branch, this PR will break it +* Converts more defines to enums and name unnamed enums by @Bassoonian in [#7071](https://github.com/rh-hideout/pokeemerald-expansion/pull/7071) +* Add config options for removing bard phoneme audio to save ROM space by @poetahto in [#7155](https://github.com/rh-hideout/pokeemerald-expansion/pull/7155) +* Fix debug text order by @hedara90 in [#7149](https://github.com/rh-hideout/pokeemerald-expansion/pull/7149) +* More battle controller function consolidation. by @AsparagusEduardo in [#6877](https://github.com/rh-hideout/pokeemerald-expansion/pull/6877) +* Easier expandability of debug menu by @AsparagusEduardo in [#6910](https://github.com/rh-hideout/pokeemerald-expansion/pull/6910) +* Update .gitignore to add heal locations by @Bassoonian in [#7050](https://github.com/rh-hideout/pokeemerald-expansion/pull/7050) +* Add 'Give Decoration' function to overworld debug menu by @rayrobdod in [#7219](https://github.com/rh-hideout/pokeemerald-expansion/pull/7219) +* Changes pre-proc to a normal if for Item Desc Header by @AlexOn1ine in [#7231](https://github.com/rh-hideout/pokeemerald-expansion/pull/7231) +* Use compound strings in battle debug menu by @AsparagusEduardo in [#7282](https://github.com/rh-hideout/pokeemerald-expansion/pull/7282) +* Remove competitive syntax config by @hedara90 in [#7154](https://github.com/rh-hideout/pokeemerald-expansion/pull/7154) + - This change can be reverted by doing `git revert 14dbbf63d454073dbb198b941cc3566168c89f11`. +* Turn `OW_FRLG_WHITEOUT` into `OW_WHITEOUT_CUTSCENE` and make it generational by @kittenchilly in [#6962](https://github.com/rh-hideout/pokeemerald-expansion/pull/6962) +* Add `Macro` key to trainerproc by @hedara90 in [#7157](https://github.com/rh-hideout/pokeemerald-expansion/pull/7157) +* preproc: Support __attribute__ in enums by @mrgriffin in [#7344](https://github.com/rh-hideout/pokeemerald-expansion/pull/7344) +* Enum conversion for `enum MoveEffects` and `enum BattleMoveEffects` by @hedara90 in [#7366](https://github.com/rh-hideout/pokeemerald-expansion/pull/7366) + - This enables `-Wenum-conversion`, additional compilation errors can occur +* Get/SetMonData optimisation by @cfmnephrite in [#7313](https://github.com/rh-hideout/pokeemerald-expansion/pull/7313) +* Bag refactor3 + Ghoulslash's sorting feature port by @cfmnephrite in [#7330](https://github.com/rh-hideout/pokeemerald-expansion/pull/7330) +* Replace all usages of rl compression with smol by @rayrobdod in [#7458](https://github.com/rh-hideout/pokeemerald-expansion/pull/7458) +* Bag sorting cleanup by @mrgriffin in [#7489](https://github.com/rh-hideout/pokeemerald-expansion/pull/7489) +* Adds ghouls Rock Climb git history by @AlexOn1ine in [#7493](https://github.com/rh-hideout/pokeemerald-expansion/pull/7493) +* Changed item name/pluralName to a compound string by @cfmnephrite in [#7359](https://github.com/rh-hideout/pokeemerald-expansion/pull/7359) +* Added trainerBackPic to Trainer struct to de-couple trainer pic and trainer back pic defines by @grintoul1 in [#7425](https://github.com/rh-hideout/pokeemerald-expansion/pull/7425) +* Suppress trainerproc compile warning for unused func by @AlexOn1ine in [#7592](https://github.com/rh-hideout/pokeemerald-expansion/pull/7592) + +### Fixed +* Fix .smol compression in debug builds by @hedara90 in [#7090](https://github.com/rh-hideout/pokeemerald-expansion/pull/7090) +* Improve smol compressor by @hedara90 in [#7073](https://github.com/rh-hideout/pokeemerald-expansion/pull/7073) +* Increased heap by 768 bytes by @hedara90 in [#7097](https://github.com/rh-hideout/pokeemerald-expansion/pull/7097) +* Fix healthbox when blending effects happen by @AsparagusEduardo in [#7203](https://github.com/rh-hideout/pokeemerald-expansion/pull/7203) +* Fixed Fake RTC debug menu by @AsparagusEduardo in [#7218](https://github.com/rh-hideout/pokeemerald-expansion/pull/7218) +* Added missing braces by @cfmnephrite in [#7288](https://github.com/rh-hideout/pokeemerald-expansion/pull/7288) +* Fixed Flag Vars menu keeping artifacts from bag menu + cleanup by @AsparagusEduardo in [#7226](https://github.com/rh-hideout/pokeemerald-expansion/pull/7226) +* Fix HGSS dex running out of heap by @hedara90 in [#7317](https://github.com/rh-hideout/pokeemerald-expansion/pull/7317) +* battle intro: fix issues with follower slide-in and wild shiny mon by @mudskipper13 in [#7325](https://github.com/rh-hideout/pokeemerald-expansion/pull/7325) +* Fix sorting bag by type by @mrgriffin in [#7488](https://github.com/rh-hideout/pokeemerald-expansion/pull/7488) +* Hacky support for enums in C asm statements by @mrgriffin in [#7494](https://github.com/rh-hideout/pokeemerald-expansion/pull/7494) +* Fixed compile issue in gcc 11 by @AsparagusEduardo in [#7579](https://github.com/rh-hideout/pokeemerald-expansion/pull/7579) +* Fix overlap between spin evolution and script evolution by @FosterProgramming in [#7593](https://github.com/rh-hideout/pokeemerald-expansion/pull/7593) + +## 🗺️ Overworld 🗺️ +### Added +* Added createfollowernpc macro to make a new follower from a gfx id by @Bivurnum in [#7196](https://github.com/rh-hideout/pokeemerald-expansion/pull/7196) + - Follower NPCs can now be created without using an existing NPC, using the `createfollowernpc` macro. +* feat: separate water and rock smash encounter rate checks by @khbsd in [#7293](https://github.com/rh-hideout/pokeemerald-expansion/pull/7293) + +### Changed +* fix: remove unused wild_encounters.json.txt jinja file by @khbsd in [#7581](https://github.com/rh-hideout/pokeemerald-expansion/pull/7581) +* added Ash Greninja overworld sprites by @wiz1989 in [#6976](https://github.com/rh-hideout/pokeemerald-expansion/pull/6976) +* Update FRLG whiteouts to new pret system by @Bassoonian in [#7040](https://github.com/rh-hideout/pokeemerald-expansion/pull/7040) + - Make sure to migrate your changes to the now deleted `heal_locations_pkm_center.h` to the json file. +* Use CanAbilityAbsorbMove in GetOverworldTypeEffectiveness by @AlexOn1ine in [#7115](https://github.com/rh-hideout/pokeemerald-expansion/pull/7115) +* Add config options for removing bard phoneme audio to save ROM space by @poetahto in [#7155](https://github.com/rh-hideout/pokeemerald-expansion/pull/7155) +* Add debug options for follower NPCs by @Bivurnum in [#7215](https://github.com/rh-hideout/pokeemerald-expansion/pull/7215) +* Better system for Follower NPC running frames by @Bivurnum in [#7222](https://github.com/rh-hideout/pokeemerald-expansion/pull/7222) +* Update follower NPC tutorial doc for createfollowernpc macro by @Bivurnum in [#7230](https://github.com/rh-hideout/pokeemerald-expansion/pull/7230) + +### Fixed +* Bug fix: add handling for forced movements into/after ledge jumps with follower NPCs by @Bivurnum in [#7055](https://github.com/rh-hideout/pokeemerald-expansion/pull/7055) +* Fixed compile issue `OW_TIMES_OF_DAY` is `GEN_3` by @AsparagusEduardo in [#7499](https://github.com/rh-hideout/pokeemerald-expansion/pull/7499) +* Remove shadow and hide follower on stair warp by @cornixsenex in [#7368](https://github.com/rh-hideout/pokeemerald-expansion/pull/7368) +* Fix Form Change Item Task Data and Clean Up Field Use Funcs by @ravepossum in [#7535](https://github.com/rh-hideout/pokeemerald-expansion/pull/7535) +* Fix Vs Seeker Trainer Battle script issue by @pkmnsnfrn in [#7615](https://github.com/rh-hideout/pokeemerald-expansion/pull/7615) +* Fix follower compression by @hedara90 in [#7038](https://github.com/rh-hideout/pokeemerald-expansion/pull/7038) +* Changing P_ONLY_OBTAINABLE_SHINIES to truly be Only Obtainable Shinies by @surskitty in [#7275](https://github.com/rh-hideout/pokeemerald-expansion/pull/7275) + +## 🐉 Pokémon 🐉 +### Added +* Add P_ASK_MOVE_CONFIRMATION by @pkmnsnfrn in [#7132](https://github.com/rh-hideout/pokeemerald-expansion/pull/7132) + - This will change the behavior of the game for players, as a new default is being set. +* Added `CRY_MODE_DYNAMAX` by @AsparagusEduardo in [#6933](https://github.com/rh-hideout/pokeemerald-expansion/pull/6933) +* Wild Pokémon animate after breaking out of Poké Ball by @LinathanZel in [#7339](https://github.com/rh-hideout/pokeemerald-expansion/pull/7339) + +### Changed +* Add dedicated getter functions for Pokémon types and abilities by @Bassoonian in [#7043](https://github.com/rh-hideout/pokeemerald-expansion/pull/7043) +* added Ash Greninja overworld sprites by @wiz1989 in [#6976](https://github.com/rh-hideout/pokeemerald-expansion/pull/6976) +* Get/SetMonData optimisation by @cfmnephrite in [#7313](https://github.com/rh-hideout/pokeemerald-expansion/pull/7313) + +### Fixed +* fixes #7129: 'add to full party' feature in the safari zone by @fakuzatsu in [#7147](https://github.com/rh-hideout/pokeemerald-expansion/pull/7147) +* Fix substruct offsets from #7313 by @mrgriffin in [#7431](https://github.com/rh-hideout/pokeemerald-expansion/pull/7431) +* Fixes refusing to replace a move on evolution causing a softlock by @PhallenTree in [#7585](https://github.com/rh-hideout/pokeemerald-expansion/pull/7585) + +## ⚔️ Battle General ⚔️ +### Added +* Add Gen 2 Moonlight, Morning Sun, Synthesis configuration by @i0brendan0 in [#7209](https://github.com/rh-hideout/pokeemerald-expansion/pull/7209) +* Add a heal animation to Hospitality recovery by @AlexOn1ine in [#7426](https://github.com/rh-hideout/pokeemerald-expansion/pull/7426) +* Updated Dream Eater/Liquid Ooze's interaction to Gen 5 standards by @AsparagusEduardo in [#7528](https://github.com/rh-hideout/pokeemerald-expansion/pull/7528) + +### Changed +* Remove unused function by @AlexOn1ine in [#7617](https://github.com/rh-hideout/pokeemerald-expansion/pull/7617) +* Clean up battlescript calls with func BattleScriptCall by @AlexOn1ine in [#6873](https://github.com/rh-hideout/pokeemerald-expansion/pull/6873) +* Refactors Final Gambit + Tests by @AlexOn1ine in [#7005](https://github.com/rh-hideout/pokeemerald-expansion/pull/7005) +* `GetBattlerMon` cleanup by @AsparagusEduardo in [#6967](https://github.com/rh-hideout/pokeemerald-expansion/pull/6967) +* Change GetZMaxMoveAgainstProtectionModifier to prevent regressions by @AlexOn1ine in [#7047](https://github.com/rh-hideout/pokeemerald-expansion/pull/7047) +* Combines Super Fang and Guardian of Alola effects by @AlexOn1ine in [#7048](https://github.com/rh-hideout/pokeemerald-expansion/pull/7048) +* Remove more instances of hard-coded Move IDs by @AsparagusEduardo in [#7056](https://github.com/rh-hideout/pokeemerald-expansion/pull/7056) + - Added `EFFECT_SHEER_COLD` to parametrize Sheer Cold's interactions with Ice types +* Deprecate sStatusFlagsForMoveEffects by @AlexOn1ine in [#7063](https://github.com/rh-hideout/pokeemerald-expansion/pull/7063) +* Removes duplicate AI ability func by @AlexOn1ine in [#7045](https://github.com/rh-hideout/pokeemerald-expansion/pull/7045) +* Deprecate absent member from battlerState by @AlexOn1ine in [#7091](https://github.com/rh-hideout/pokeemerald-expansion/pull/7091) +* Refactor damage calculations aruguments by using a struct context by @AlexOn1ine in [#7108](https://github.com/rh-hideout/pokeemerald-expansion/pull/7108) +* Add damage context to effectiveness multiplier by @AlexOn1ine in [#7111](https://github.com/rh-hideout/pokeemerald-expansion/pull/7111) +* Decouple Status set by ability from SetMoveEffect by @AlexOn1ine in [#7125](https://github.com/rh-hideout/pokeemerald-expansion/pull/7125) +* Removed redundant Damp check by @AsparagusEduardo in [#7134](https://github.com/rh-hideout/pokeemerald-expansion/pull/7134) +* Converted Relic Song into a proper form change by @AsparagusEduardo in [#7139](https://github.com/rh-hideout/pokeemerald-expansion/pull/7139) + - Added `FORM_CHANGE_BATTLE_AFTER_MOVE` to parametrize Relic Song's form change +* Removed Mind Blown effect in favor of move flag by @AsparagusEduardo in [#7138](https://github.com/rh-hideout/pokeemerald-expansion/pull/7138) +* Volatile status refactoring by @cfmnephrite in [#6983](https://github.com/rh-hideout/pokeemerald-expansion/pull/6983) +* Repurposes IsMagicGuardProtected into a general function by @AlexOn1ine in [#7114](https://github.com/rh-hideout/pokeemerald-expansion/pull/7114) +* Stat Change (Animation) Refactor by @PhallenTree in [#7144](https://github.com/rh-hideout/pokeemerald-expansion/pull/7144) + -`setgraphicalstatchangevalues` and `playstatchangeanimation` have been removed and now Stat Change Animations are handled in `statbuffchange`. + - To update your custom battle scripts: + `setgraphicalstatchangevalues` is often accompanied by `playanimation X, B_ANIM_STATS_CHANGE`. When I refer to deleting `setgraphicalstatchangevalues` below, that command should also be deleted. + 1. If `statbuffchange` is before `setgraphicalstatchangevalues`/`playstatchangeanimation` and there is something in between them (for example, `attackanimation` and `waitanimation`), add the flag `STAT_CHANGE_ONLY_CHECKING` and replace the command (`setgraphicalstatchangevalues`/`playstatchangeanimation`) with a copy of the original `statbuffchange`. + 2. If `statbuffchange` is after `setgraphicalstatchangevalues`/`playstatchangeanimation` or there is nothing in between, you should delete those commands (`setgraphicalstatchangevalues`/`playstatchangeanimation`) and no further changes other than those in _3._ should be required. + 3. If `playstatchangeanimation` had bits assigned to them (`BIT_ATK | BIT_SPATK`, for example), add ", " followed by those bits to the first `statbuffchange`; for the following `statbuffchange`s, remove stats that have already been increased/decreased. +* Use `argument.type` for `EFFECT_SOAK` by @AsparagusEduardo in [#7141](https://github.com/rh-hideout/pokeemerald-expansion/pull/7141) +* Untangle `InitBtlControllers` functions by @AsparagusEduardo in [#6748](https://github.com/rh-hideout/pokeemerald-expansion/pull/6748) +* Increase party action limit by @cawtds in [#7119](https://github.com/rh-hideout/pokeemerald-expansion/pull/7119) +* Adds Gen5+ Encore config by @AlexOn1ine in [#7051](https://github.com/rh-hideout/pokeemerald-expansion/pull/7051) +* Attackcanceller clean up by @AlexOn1ine in [#7210](https://github.com/rh-hideout/pokeemerald-expansion/pull/7210) +* Remove redundant move result flag checks by @AlexOn1ine in [#7223](https://github.com/rh-hideout/pokeemerald-expansion/pull/7223) +* Use dedicated functions for Mud/Water Sport by @AlexOn1ine in [#7248](https://github.com/rh-hideout/pokeemerald-expansion/pull/7248) +* Script clean up for Flame Burst and Costar by @AlexOn1ine in [#7264](https://github.com/rh-hideout/pokeemerald-expansion/pull/7264) +* Renaming STATUS1_REFRESH and adding more constants for common STATUS1 checks. by @surskitty in [#7284](https://github.com/rh-hideout/pokeemerald-expansion/pull/7284) +* Refactor move Synchronise by @AlexOn1ine in [#7271](https://github.com/rh-hideout/pokeemerald-expansion/pull/7271) +* Adds hazard queue by @AlexOn1ine in [#7295](https://github.com/rh-hideout/pokeemerald-expansion/pull/7295) +* Removed all instances of .chance = 100, SHEER_FORCE_NO_BOOST by @cfmnephrite in [#7300](https://github.com/rh-hideout/pokeemerald-expansion/pull/7300) +* Changes AccuracyCalcHelper into CanMoveSkipAccuracyCalc by @AlexOn1ine in [#7303](https://github.com/rh-hideout/pokeemerald-expansion/pull/7303) +* Replaces STATUS2 usage with volatiles in code by @cfmnephrite in [#7262](https://github.com/rh-hideout/pokeemerald-expansion/pull/7262) + - Replaced all references to STATUS2 in the code with volatiles (but left the old bitfield behind for compatibility with downstream users). The list of volatiles is in `include/constants/battle.h` and includes information such as an enum, a field name, type and max size, and whether or not the move is Baton Passable. Users can use VOLATILE_X with any function that previously took STATUS2_X in scripts, and can check/set volatiles in C with `gBattleMons[battler].volatiles.{field name}` syntax instead of checking a flag in a bitfield. +* Refactor battle environment by @fdeblasio in [#4891](https://github.com/rh-hideout/pokeemerald-expansion/pull/4891) +* Convert various to callnatives by @AlexOn1ine in [#7355](https://github.com/rh-hideout/pokeemerald-expansion/pull/7355) +* Remove leftover code by @AlexOn1ine in [#7397](https://github.com/rh-hideout/pokeemerald-expansion/pull/7397) +* Moved some fields to BattlerState/PartyState by @AsparagusEduardo in [#7409](https://github.com/rh-hideout/pokeemerald-expansion/pull/7409) +* Additional effects tweak by @cfmnephrite in [#7392](https://github.com/rh-hideout/pokeemerald-expansion/pull/7392) +* Clean up noResultString by @AlexOn1ine in [#7408](https://github.com/rh-hideout/pokeemerald-expansion/pull/7408) +* Convert Status4 to volatiles by @AlexOn1ine in [#7411](https://github.com/rh-hideout/pokeemerald-expansion/pull/7411) +* Convert statuses3 to volatiles by @AlexOn1ine in [#7514](https://github.com/rh-hideout/pokeemerald-expansion/pull/7514) +* Prevents a regression for custom abilties by @AlexOn1ine in [#7616](https://github.com/rh-hideout/pokeemerald-expansion/pull/7616) + +### Fixed +* Fixes Magnet Rise when user is Rooted/Smacked Down by @PhallenTree in [#7449](https://github.com/rh-hideout/pokeemerald-expansion/pull/7449) +* Fixes Leech Seed recovery not applying behind Sub by @AlexOn1ine in [#7468](https://github.com/rh-hideout/pokeemerald-expansion/pull/7468) +* Fixes Round and Fusion moves doubling power from previous turn's move by @PhallenTree in [#7476](https://github.com/rh-hideout/pokeemerald-expansion/pull/7476) +* Fixes shadows and mon animations for transformed battlers by @AsparagusEduardo in [#7500](https://github.com/rh-hideout/pokeemerald-expansion/pull/7500) +* Fixes Life Orb still activating if move was absorbed by @AlexOn1ine in [#7521](https://github.com/rh-hideout/pokeemerald-expansion/pull/7521) +* Fix Mimicry Only Activating Once per Turn by @ghoulslash in [#7537](https://github.com/rh-hideout/pokeemerald-expansion/pull/7537) +* Fixes Knock Off still activating when there is no Item by @AlexOn1ine in [#7496](https://github.com/rh-hideout/pokeemerald-expansion/pull/7496) +* Fixed `B_PSYWAVE_DMG` by @AsparagusEduardo in [#7557](https://github.com/rh-hideout/pokeemerald-expansion/pull/7557) +* Fixes Counter / Mirror Coat / Metal Burst damage assignment by @AlexOn1ine in [#7538](https://github.com/rh-hideout/pokeemerald-expansion/pull/7538) +* Fix in-game partner battles always causing a whiteout by @ravepossum in [#7587](https://github.com/rh-hideout/pokeemerald-expansion/pull/7587) +* Fix B_ANIMATE_MON_AFTER_KO with a new counter by @hedara90 in [#7531](https://github.com/rh-hideout/pokeemerald-expansion/pull/7531) +* Fixes Rage Fist counter increment by @AlexOn1ine in [#7582](https://github.com/rh-hideout/pokeemerald-expansion/pull/7582) +* Fixes moveend_absorb hitmarker by @AlexOn1ine in [#7591](https://github.com/rh-hideout/pokeemerald-expansion/pull/7591) +* switchinabilities also runs ON_WEATHER and ON_TERRAIN by @ghoulslash in [#7612](https://github.com/rh-hideout/pokeemerald-expansion/pull/7612) +* Fixes Explosion behavior when 3 mons can endure hit by @AlexOn1ine in [#7594](https://github.com/rh-hideout/pokeemerald-expansion/pull/7594) +* Fixes octolock not ending after user switched out by @AlexOn1ine in [#7556](https://github.com/rh-hideout/pokeemerald-expansion/pull/7556) +* The original attacker wasn't restored for Doodle by @AlexOn1ine in [#7620](https://github.com/rh-hideout/pokeemerald-expansion/pull/7620) +* Restore X item friendship increase by @ravepossum in [#7583](https://github.com/rh-hideout/pokeemerald-expansion/pull/7583) +* Fixes Wonder Room interactions with Defense/Special Defense boosting effects by @PhallenTree in [#7626](https://github.com/rh-hideout/pokeemerald-expansion/pull/7626) +* Ally Switch attract battler swapping, test for leech seed by @ghoulslash in [#7634](https://github.com/rh-hideout/pokeemerald-expansion/pull/7634) +* Fixes Defiant/Competitive not resetting stat change animations and stat change related cleanup by @PhallenTree in [#7004](https://github.com/rh-hideout/pokeemerald-expansion/pull/7004) +* Use battler arguments for SetMoveEffect by @AlexOn1ine in [#7156](https://github.com/rh-hideout/pokeemerald-expansion/pull/7156) +* Fixes Booster Energy timing activation + Clean up by @AlexOn1ine in [#7175](https://github.com/rh-hideout/pokeemerald-expansion/pull/7175) +* Fixes Eject Pack not resolving correctly during switch in effects by @AlexOn1ine in [#7002](https://github.com/rh-hideout/pokeemerald-expansion/pull/7002) +* Adds Ability Shield activation message by @PhallenTree in [#7224](https://github.com/rh-hideout/pokeemerald-expansion/pull/7224) +* Fix incorrect type input by @hedara90 in [#7228](https://github.com/rh-hideout/pokeemerald-expansion/pull/7228) +* Set correct Instruction by @AlexOn1ine in [#7236](https://github.com/rh-hideout/pokeemerald-expansion/pull/7236) +* Fixes Life Dew playing anim when it is not supposed to + tests by @AlexOn1ine in [#7239](https://github.com/rh-hideout/pokeemerald-expansion/pull/7239) +* Fixes instances of battler mutation for abilities by @AlexOn1ine in [#7250](https://github.com/rh-hideout/pokeemerald-expansion/pull/7250) +* Fix Psych Up message and cleanup and don't allow switching to self in tests by @PhallenTree in [#7277](https://github.com/rh-hideout/pokeemerald-expansion/pull/7277) +* Fix incorrect status in beneficial ability Guts check by @grintoul1 in [#7285](https://github.com/rh-hideout/pokeemerald-expansion/pull/7285) +* battle_interface: overhaul ability pop up by @mudskipper13 in [#7227](https://github.com/rh-hideout/pokeemerald-expansion/pull/7227) + - The layout of the ability pop up's image (`graphics/battle_interface/ability_pop_up.png`) has been changed. +* Fixes Status overwrites and Effect Spore wrong func args by @AlexOn1ine in [#7340](https://github.com/rh-hideout/pokeemerald-expansion/pull/7340) +* Fixes various Choice lock issues by @AlexOn1ine in [#7383](https://github.com/rh-hideout/pokeemerald-expansion/pull/7383) +* Fixes draining moves recovering 1 HP when dealing 0 damage by @LinathanZel in [#7523](https://github.com/rh-hideout/pokeemerald-expansion/pull/7523) + +## 🤹 Moves 🤹 +### Changed +* New Attack Animations: 25w20a by @ShinyVolcarona in [#6886](https://github.com/rh-hideout/pokeemerald-expansion/pull/6886) + - Added move animations for multiple moves by @LinathanZel + - Dynamax Cannon, Behemoth Blade, Behemoth Bash, Eternabeam, Glaive Rush, Triple Dive, Doodle, Ruination, Collision Course, Electro Drift, Blazing Torque, Wicked Torque, Noxious Torque, Combat Torque, Magical Torque, Psyblade, Mighty Cleave, Supercell Slam +* Documented usage of `delay X` by @AsparagusEduardo in [#6951](https://github.com/rh-hideout/pokeemerald-expansion/pull/6951) +* Animation documentation by @AsparagusEduardo in [#7052](https://github.com/rh-hideout/pokeemerald-expansion/pull/7052) +* New and polished battle animations by @LinathanZel in [#7074](https://github.com/rh-hideout/pokeemerald-expansion/pull/7074) + +### Fixed +* Clear gScanlineEffect to fix timeout in acid downpour animation by @FosterProgramming in [#7442](https://github.com/rh-hideout/pokeemerald-expansion/pull/7442) +* Fix terastallization anims flickering by @ravepossum in [#7613](https://github.com/rh-hideout/pokeemerald-expansion/pull/7613) + +## 🧶 Items 🧶 +### Changed +* Fix using town map as registered item by @ravepossum in [#7482](https://github.com/rh-hideout/pokeemerald-expansion/pull/7482) +* Compound strings for hold effect names by @AsparagusEduardo in [#7140](https://github.com/rh-hideout/pokeemerald-expansion/pull/7140) +* Untangled TMs and HMs from item ids by @cfmnephrite in [#7173](https://github.com/rh-hideout/pokeemerald-expansion/pull/7173) +* Bag refactor 2 by @cfmnephrite in [#7166](https://github.com/rh-hideout/pokeemerald-expansion/pull/7166) + +### Fixed +* Implement using party menu items from field by @ravepossum in [#7481](https://github.com/rh-hideout/pokeemerald-expansion/pull/7481) +* Fixed TM and Berries disappearing when sorting by @AsparagusEduardo in [#7168](https://github.com/rh-hideout/pokeemerald-expansion/pull/7168) +* Fixed item swapping bug (#7428) by @cfmnephrite in [#7430](https://github.com/rh-hideout/pokeemerald-expansion/pull/7430) +* Fixes some Ability Shield interactions by @PhallenTree in [#7532](https://github.com/rh-hideout/pokeemerald-expansion/pull/7532) +* Fix tossing a stack of berries hiding following berries by @hedara90 in [#7571](https://github.com/rh-hideout/pokeemerald-expansion/pull/7571) + +## 🤖 Battle AI 🤖 +### Added +* AI: Add AI_SMART_TERA flag to make smarter decisions about when to terastalize. by @jfb1337 in [#6705](https://github.com/rh-hideout/pokeemerald-expansion/pull/6705) + - Only single battles are currently supported. +* Haze Boosting AI Followup by @Pawkkie in [#6966](https://github.com/rh-hideout/pokeemerald-expansion/pull/6966) +* Improved logic for Guard Split and Power Split. by @surskitty in [#7298](https://github.com/rh-hideout/pokeemerald-expansion/pull/7298) +* Add AI_FLAG_ASSUME_STAB by @Pawkkie in [#6797](https://github.com/rh-hideout/pokeemerald-expansion/pull/6797) +* AI checks the partner's moves for Flatter, Swagger, and Soak. by @surskitty in [#7306](https://github.com/rh-hideout/pokeemerald-expansion/pull/7306) +* AI uses After You to help set up Trick Room. by @surskitty in [#7310](https://github.com/rh-hideout/pokeemerald-expansion/pull/7310) +* AI assumes Magnitude / Present damage by @Pawkkie in [#7334](https://github.com/rh-hideout/pokeemerald-expansion/pull/7334) +* AI_FLAG_ASSUME_STATUS_MOVES -- AI flag to randomly know some of the player's status moves by @surskitty in [#7324](https://github.com/rh-hideout/pokeemerald-expansion/pull/7324) +* Improve AI's setup logic by @Pawkkie in [#7345](https://github.com/rh-hideout/pokeemerald-expansion/pull/7345) +* Improve AI's ShouldRecover by @Pawkkie in [#7342](https://github.com/rh-hideout/pokeemerald-expansion/pull/7342) +* Switch AI can see weather abilities of switchin candidates during damage calcs by @Pawkkie in [#7373](https://github.com/rh-hideout/pokeemerald-expansion/pull/7373) +* AI refactor for weather-setting, terrain-setting, Trick Room behaviors; doubles-focused by @surskitty in [#7319](https://github.com/rh-hideout/pokeemerald-expansion/pull/7319) + - AI is more likely to use Trick Room in double battles and Terrains in general. +* Improve AI type matchup calcs by @Pawkkie in [#7364](https://github.com/rh-hideout/pokeemerald-expansion/pull/7364) +* Multibattle Partner AI Flags and 2vs1 battler3 AI Flags fix by @grintoul1 in [#7378](https://github.com/rh-hideout/pokeemerald-expansion/pull/7378) +* Improve AI's Sucker Punch handling by @Pawkkie in [#7389](https://github.com/rh-hideout/pokeemerald-expansion/pull/7389) +* Improve AI's priority handling by @Pawkkie in [#7337](https://github.com/rh-hideout/pokeemerald-expansion/pull/7337) +* Fix dynamic move types in switching by @Pawkkie in [#7415](https://github.com/rh-hideout/pokeemerald-expansion/pull/7415) +* Adds AI_FLAG_ASSUMPTIONS as a constant for semi-omniscience by @surskitty in [#7435](https://github.com/rh-hideout/pokeemerald-expansion/pull/7435) +* AI_FLAG_ATTACKS_PARTNER with a config for bloodthirstiness by @surskitty in [#7401](https://github.com/rh-hideout/pokeemerald-expansion/pull/7401) +* Improved Guaranteed Flinch logic (fake out et al) by @surskitty in [#7501](https://github.com/rh-hideout/pokeemerald-expansion/pull/7501) +* AI uses Court Change. by @surskitty in [#7525](https://github.com/rh-hideout/pokeemerald-expansion/pull/7525) +* AI uses Tailwind. by @surskitty in [#7515](https://github.com/rh-hideout/pokeemerald-expansion/pull/7515) +* AI should not use Dark Void or Hyperspace Fury while wrong species by @surskitty in [#7540](https://github.com/rh-hideout/pokeemerald-expansion/pull/7540) +* AI uses Rototiller. by @surskitty in [#7542](https://github.com/rh-hideout/pokeemerald-expansion/pull/7542) +* Helping Hand logic by @surskitty in [#7504](https://github.com/rh-hideout/pokeemerald-expansion/pull/7504) + +### Changed +* Macro-for-AI-Flag-definitions by @grintoul1 in [#7471](https://github.com/rh-hideout/pokeemerald-expansion/pull/7471) +* Remove redundancy for ShouldLowerStat functions by @AlexOn1ine in [#6577](https://github.com/rh-hideout/pokeemerald-expansion/pull/6577) +* Expanding and Refactoring Skill Swap and other ability-changing moves by @surskitty in [#7238](https://github.com/rh-hideout/pokeemerald-expansion/pull/7238) +* Changes AccuracyCalcHelper into CanMoveSkipAccuracyCalc by @AlexOn1ine in [#7303](https://github.com/rh-hideout/pokeemerald-expansion/pull/7303) +* AI Tests + accompanying bugfixes for Skill Swap, Worry Seed, weather setting in double battles, and Discharging into an ally's lightningrod by @surskitty in [#7297](https://github.com/rh-hideout/pokeemerald-expansion/pull/7297) +* Fix AI resisted move scoring by @Pawkkie in [#7350](https://github.com/rh-hideout/pokeemerald-expansion/pull/7350) +* Fiddling with CanLowerStat. by @surskitty in [#7510](https://github.com/rh-hideout/pokeemerald-expansion/pull/7510) +* Improved hazards logic and Mycelium Might ignores ability checks by @surskitty in [#7509](https://github.com/rh-hideout/pokeemerald-expansion/pull/7509) +* AI handling for similar utility moves by @surskitty in [#7513](https://github.com/rh-hideout/pokeemerald-expansion/pull/7513) +* Modify move prediction to work in doubles by @AlexOn1ine in [#7087](https://github.com/rh-hideout/pokeemerald-expansion/pull/7087) +* Uncommenting out No Retreat, Clangorous Soul, and Extreme Evoboost from CheckBadMove by @surskitty in [#7541](https://github.com/rh-hideout/pokeemerald-expansion/pull/7541) +* AI Tailwind singles fix correction. by @surskitty in [#7543](https://github.com/rh-hideout/pokeemerald-expansion/pull/7543) +* Remove funcResult from AiThinkingStruct by @Pawkkie in [#7545](https://github.com/rh-hideout/pokeemerald-expansion/pull/7545) +* AI handling for Autotomize. by @surskitty in [#7550](https://github.com/rh-hideout/pokeemerald-expansion/pull/7550) +* AI uses Stuff Cheeks; treating it simply as a def +2 move for now. by @surskitty in [#7554](https://github.com/rh-hideout/pokeemerald-expansion/pull/7554) +* Slight Purify adjustment for targeting ally; test that AI can use Purify. by @surskitty in [#7553](https://github.com/rh-hideout/pokeemerald-expansion/pull/7553) +* AI handling for Howl. by @surskitty in [#7549](https://github.com/rh-hideout/pokeemerald-expansion/pull/7549) +* Test that AI uses Dragon Cheer. by @surskitty in [#7552](https://github.com/rh-hideout/pokeemerald-expansion/pull/7552) +* Tests to see that the AI uses moves. by @surskitty in [#7555](https://github.com/rh-hideout/pokeemerald-expansion/pull/7555) + +### Fixed +* Incorrect call in Rest by @surskitty in [#7569](https://github.com/rh-hideout/pokeemerald-expansion/pull/7569) +* Fix duplicate switch in after faint by @AlexOn1ine in [#7600](https://github.com/rh-hideout/pokeemerald-expansion/pull/7600) +* Feature/ai/wide guard quick guard singles by @Emiliasky in [#7086](https://github.com/rh-hideout/pokeemerald-expansion/pull/7086) +* Add missing break by @Pawkkie in [#7356](https://github.com/rh-hideout/pokeemerald-expansion/pull/7356) +* fixed-damage-move-ai-calc-fix by @grintoul1 in [#7385](https://github.com/rh-hideout/pokeemerald-expansion/pull/7385) +* Avoid doubling up on status moves in double battles. by @surskitty in [#7452](https://github.com/rh-hideout/pokeemerald-expansion/pull/7452) +* Fix doubles switch AI to use new type matchup system by @Pawkkie in [#7495](https://github.com/rh-hideout/pokeemerald-expansion/pull/7495) +* Fix Bad Odds not seeing damage properly by @Pawkkie in [#7492](https://github.com/rh-hideout/pokeemerald-expansion/pull/7492) +* Fix GetSwitchinHitsToKO one shot heal calcs by @Pawkkie in [#7502](https://github.com/rh-hideout/pokeemerald-expansion/pull/7502) +* Fix AI's KO evaluation getting messed up by priority by @Pawkkie in [#7533](https://github.com/rh-hideout/pokeemerald-expansion/pull/7533) +* Fixing Refresh AI scoring by @surskitty in [#7539](https://github.com/rh-hideout/pokeemerald-expansion/pull/7539) +* Fix switch AI not seeing its own move PP by @Pawkkie in [#7578](https://github.com/rh-hideout/pokeemerald-expansion/pull/7578) +* Fix wrong battler argument in `GetBattleMovePriority` call by @Pawkkie in [#7576](https://github.com/rh-hideout/pokeemerald-expansion/pull/7576) +* Restore AI: Basic Trainer to PARTNER_STEVEN by @grintoul1 in [#7586](https://github.com/rh-hideout/pokeemerald-expansion/pull/7586) + +## 🧹 Other Cleanup 🧹 +* Macro-for-AI-Flag-definitions by @grintoul1 in [#7471](https://github.com/rh-hideout/pokeemerald-expansion/pull/7471) +* Moved summary screen nature colors to summary_screen.h by @RubyRaven6 in [#7560](https://github.com/rh-hideout/pokeemerald-expansion/pull/7560) +* fix: remove unused wild_encounters.json.txt jinja file by @khbsd in [#7581](https://github.com/rh-hideout/pokeemerald-expansion/pull/7581) +* Fix Form Change Item Task Data and Clean Up Field Use Funcs by @ravepossum in [#7535](https://github.com/rh-hideout/pokeemerald-expansion/pull/7535) +* Fixed Teleport's description not being updated based on `B_TELEPORT_BEHAVIOR` by @AsparagusEduardo in [#7580](https://github.com/rh-hideout/pokeemerald-expansion/pull/7580) +* Fixed typo in test name by @hedara90 in [#7610](https://github.com/rh-hideout/pokeemerald-expansion/pull/7610) +* Minor Clean up in battle_ai_main.c by @AlexOn1ine in [#7551](https://github.com/rh-hideout/pokeemerald-expansion/pull/7551) +* Remove unused function by @AlexOn1ine in [#7617](https://github.com/rh-hideout/pokeemerald-expansion/pull/7617) +* Fix Vs Seeker Trainer Battle script issue by @pkmnsnfrn in [#7615](https://github.com/rh-hideout/pokeemerald-expansion/pull/7615) +* Clean up battlescript calls with func BattleScriptCall by @AlexOn1ine in [#6873](https://github.com/rh-hideout/pokeemerald-expansion/pull/6873) +* Replace all usages of lz compression with smol by @hedara90 in [#7032](https://github.com/rh-hideout/pokeemerald-expansion/pull/7032) +* `BtlController_EmitTwoReturnValues` cleanup by @AsparagusEduardo in [#6855](https://github.com/rh-hideout/pokeemerald-expansion/pull/6855) +* `GetBattlerMon` cleanup by @AsparagusEduardo in [#6967](https://github.com/rh-hideout/pokeemerald-expansion/pull/6967) +* Converts a bunch of defines to enums by @Bassoonian in [#7041](https://github.com/rh-hideout/pokeemerald-expansion/pull/7041) +* Change GetZMaxMoveAgainstProtectionModifier to prevent regressions by @AlexOn1ine in [#7047](https://github.com/rh-hideout/pokeemerald-expansion/pull/7047) +* Remove more instances of hard-coded Move IDs by @AsparagusEduardo in [#7056](https://github.com/rh-hideout/pokeemerald-expansion/pull/7056) + - Added `EFFECT_SHEER_COLD` to parametrize Sheer Cold's interactions with Ice types +* Animation documentation by @AsparagusEduardo in [#7052](https://github.com/rh-hideout/pokeemerald-expansion/pull/7052) +* Deprecate sStatusFlagsForMoveEffects by @AlexOn1ine in [#7063](https://github.com/rh-hideout/pokeemerald-expansion/pull/7063) +* chore: remove unused section from credits by @Emiliasky in [#7085](https://github.com/rh-hideout/pokeemerald-expansion/pull/7085) +* Removes duplicate AI ability func by @AlexOn1ine in [#7045](https://github.com/rh-hideout/pokeemerald-expansion/pull/7045) +* Remove redundancy for ShouldLowerStat functions by @AlexOn1ine in [#6577](https://github.com/rh-hideout/pokeemerald-expansion/pull/6577) +* Deprecate absent member from battlerState by @AlexOn1ine in [#7091](https://github.com/rh-hideout/pokeemerald-expansion/pull/7091) +* Use CanAbilityAbsorbMove in GetOverworldTypeEffectiveness by @AlexOn1ine in [#7115](https://github.com/rh-hideout/pokeemerald-expansion/pull/7115) +* Removed redundant Damp check by @AsparagusEduardo in [#7134](https://github.com/rh-hideout/pokeemerald-expansion/pull/7134) +* Improve music/se macros and fix names by @cawtds in [#7030](https://github.com/rh-hideout/pokeemerald-expansion/pull/7030) +* Compound strings for hold effect names by @AsparagusEduardo in [#7140](https://github.com/rh-hideout/pokeemerald-expansion/pull/7140) +* Repurposes IsMagicGuardProtected into a general function by @AlexOn1ine in [#7114](https://github.com/rh-hideout/pokeemerald-expansion/pull/7114) +* Converts more defines to enums and name unnamed enums by @Bassoonian in [#7071](https://github.com/rh-hideout/pokeemerald-expansion/pull/7071) +* Use `argument.type` for `EFFECT_SOAK` by @AsparagusEduardo in [#7141](https://github.com/rh-hideout/pokeemerald-expansion/pull/7141) +* More battle controller function consolidation. by @AsparagusEduardo in [#6877](https://github.com/rh-hideout/pokeemerald-expansion/pull/6877) +* Add assumes for bag tests by @Bassoonian in [#7188](https://github.com/rh-hideout/pokeemerald-expansion/pull/7188) +* Fixes Booster Energy timing activation + Clean up by @AlexOn1ine in [#7175](https://github.com/rh-hideout/pokeemerald-expansion/pull/7175) +* Update .gitignore to add heal locations by @Bassoonian in [#7050](https://github.com/rh-hideout/pokeemerald-expansion/pull/7050) +* Attackcanceller clean up by @AlexOn1ine in [#7210](https://github.com/rh-hideout/pokeemerald-expansion/pull/7210) +* Remove redundant move result flag checks by @AlexOn1ine in [#7223](https://github.com/rh-hideout/pokeemerald-expansion/pull/7223) +* Add P_ASK_MOVE_CONFIRMATION by @pkmnsnfrn in [#7132](https://github.com/rh-hideout/pokeemerald-expansion/pull/7132) + - This will change the behavior of the game for players, as a new default is being set. +* Script clean up for Flame Burst and Costar by @AlexOn1ine in [#7264](https://github.com/rh-hideout/pokeemerald-expansion/pull/7264) +* Use compound strings in battle debug menu by @AsparagusEduardo in [#7282](https://github.com/rh-hideout/pokeemerald-expansion/pull/7282) +* Renaming STATUS1_REFRESH and adding more constants for common STATUS1 checks. by @surskitty in [#7284](https://github.com/rh-hideout/pokeemerald-expansion/pull/7284) +* Removed all instances of .chance = 100, SHEER_FORCE_NO_BOOST by @cfmnephrite in [#7300](https://github.com/rh-hideout/pokeemerald-expansion/pull/7300) +* AI Tests + accompanying bugfixes for Skill Swap, Worry Seed, weather setting in double battles, and Discharging into an ally's lightningrod by @surskitty in [#7297](https://github.com/rh-hideout/pokeemerald-expansion/pull/7297) +* Turn `OW_FRLG_WHITEOUT` into `OW_WHITEOUT_CUTSCENE` and make it generational by @kittenchilly in [#6962](https://github.com/rh-hideout/pokeemerald-expansion/pull/6962) +* Fix AI resisted move scoring by @Pawkkie in [#7350](https://github.com/rh-hideout/pokeemerald-expansion/pull/7350) +* Convert various to callnatives by @AlexOn1ine in [#7355](https://github.com/rh-hideout/pokeemerald-expansion/pull/7355) +* Remove leftover code by @AlexOn1ine in [#7397](https://github.com/rh-hideout/pokeemerald-expansion/pull/7397) +* Moved some fields to BattlerState/PartyState by @AsparagusEduardo in [#7409](https://github.com/rh-hideout/pokeemerald-expansion/pull/7409) +* Additional effects tweak by @cfmnephrite in [#7392](https://github.com/rh-hideout/pokeemerald-expansion/pull/7392) +* Clean up noResultString by @AlexOn1ine in [#7408](https://github.com/rh-hideout/pokeemerald-expansion/pull/7408) +* Bag sorting cleanup by @mrgriffin in [#7489](https://github.com/rh-hideout/pokeemerald-expansion/pull/7489) +* Convert statuses3 to volatiles by @AlexOn1ine in [#7514](https://github.com/rh-hideout/pokeemerald-expansion/pull/7514) +* Uncommenting out No Retreat, Clangorous Soul, and Extreme Evoboost from CheckBadMove by @surskitty in [#7541](https://github.com/rh-hideout/pokeemerald-expansion/pull/7541) +* AI Tailwind singles fix correction. by @surskitty in [#7543](https://github.com/rh-hideout/pokeemerald-expansion/pull/7543) +* Remove funcResult from AiThinkingStruct by @Pawkkie in [#7545](https://github.com/rh-hideout/pokeemerald-expansion/pull/7545) +* Suppress trainerproc compile warning for unused func by @AlexOn1ine in [#7592](https://github.com/rh-hideout/pokeemerald-expansion/pull/7592) +* Prevents a regression for custom abilties by @AlexOn1ine in [#7616](https://github.com/rh-hideout/pokeemerald-expansion/pull/7616) + +## 🧪 Test Runner 🧪 +### Changed +* Clean up some Normalize tests to make them make sense by @hedara90 in [#7461](https://github.com/rh-hideout/pokeemerald-expansion/pull/7461) +* Add Synthesis + Utililty Umbrella test by @ghoulslash in [#7472](https://github.com/rh-hideout/pokeemerald-expansion/pull/7472) +* Add test for BoxPokemon integrity by @hedara90 in [#7487](https://github.com/rh-hideout/pokeemerald-expansion/pull/7487) +* Re-order moves in fling test by @hedara90 in [#7559](https://github.com/rh-hideout/pokeemerald-expansion/pull/7559) +* Wrote some tests by @AsparagusEduardo in [#7563](https://github.com/rh-hideout/pokeemerald-expansion/pull/7563) +* Added Ability TODO tests - Volume C by @AsparagusEduardo in [#7562](https://github.com/rh-hideout/pokeemerald-expansion/pull/7562) +* Added missing Move Effect TODO tests - Volume F by @AsparagusEduardo in [#7605](https://github.com/rh-hideout/pokeemerald-expansion/pull/7605) +* Fixed typo in test name by @hedara90 in [#7610](https://github.com/rh-hideout/pokeemerald-expansion/pull/7610) +* Add assumes for bag tests by @Bassoonian in [#7188](https://github.com/rh-hideout/pokeemerald-expansion/pull/7188) +* Split Sheer Force tests by gen instead of by four by @AlexOn1ine in [#7260](https://github.com/rh-hideout/pokeemerald-expansion/pull/7260) +* make check TESTS="..." support for filenames and infix matches by @mrgriffin in [#7536](https://github.com/rh-hideout/pokeemerald-expansion/pull/7536) +* Fix shell side arm rng in battle tests moves by @FosterProgramming in [#7548](https://github.com/rh-hideout/pokeemerald-expansion/pull/7548) +* Test that AI uses Dragon Cheer. by @surskitty in [#7552](https://github.com/rh-hideout/pokeemerald-expansion/pull/7552) +* Tests to see that the AI uses moves. by @surskitty in [#7555](https://github.com/rh-hideout/pokeemerald-expansion/pull/7555) + +### Fixed +* Clear out parties between battle tests by @hedara90 in [#7460](https://github.com/rh-hideout/pokeemerald-expansion/pull/7460) +* Fixed most failed tests with `GEN_LATEST GEN_8` by @AsparagusEduardo in [#7498](https://github.com/rh-hideout/pokeemerald-expansion/pull/7498) +* Corrected Liquid Ooze test by @AsparagusEduardo in [#7527](https://github.com/rh-hideout/pokeemerald-expansion/pull/7527) +* switchinabilities also runs ON_WEATHER and ON_TERRAIN by @ghoulslash in [#7612](https://github.com/rh-hideout/pokeemerald-expansion/pull/7612) +* Ally Switch attract battler swapping, test for leech seed by @ghoulslash in [#7634](https://github.com/rh-hideout/pokeemerald-expansion/pull/7634) +* Fixed changed effect for Sheer Cold by @hedara90 in [#7099](https://github.com/rh-hideout/pokeemerald-expansion/pull/7099) +* Fixed Transistor damage calculation test failing when `GEN_LATEST` is less than `GEN_9` by @AsparagusEduardo in [#7577](https://github.com/rh-hideout/pokeemerald-expansion/pull/7577) + +## 📚 Documentation 📚 +* Update how_to_new_pokemon.md by @kevinwklawrence in [#7440](https://github.com/rh-hideout/pokeemerald-expansion/pull/7440) +* Updating a link to porytiles in INSTALL.md by @ThePeeps191 in [#7490](https://github.com/rh-hideout/pokeemerald-expansion/pull/7490) +* Added comment in event.inc for simple menus in dynmultichoice by @RubyRaven6 in [#7568](https://github.com/rh-hideout/pokeemerald-expansion/pull/7568) +* Documented usage of `delay X` by @AsparagusEduardo in [#6951](https://github.com/rh-hideout/pokeemerald-expansion/pull/6951) +* Update follower NPC tutorial doc for createfollowernpc macro by @Bivurnum in [#7230](https://github.com/rh-hideout/pokeemerald-expansion/pull/7230) +* Improve trainer back pic-related data and code (+ smol documentation) by @mudskipper13 in [#6821](https://github.com/rh-hideout/pokeemerald-expansion/pull/6821) +* Update trainer.h usage warning by @hedara90 in [#7439](https://github.com/rh-hideout/pokeemerald-expansion/pull/7439) + +## New Contributors +* @kevinwklawrence made their first contribution in [#7440](https://github.com/rh-hideout/pokeemerald-expansion/pull/7440) +* @ThePeeps191 made their first contribution in [#7490](https://github.com/rh-hideout/pokeemerald-expansion/pull/7490) +* @cornixsenex made their first contribution in [#7368](https://github.com/rh-hideout/pokeemerald-expansion/pull/7368) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.12.2...expansion/1.12.3 + +## New Contributors +* @ShinyVolcarona made their first contribution in [#6886](https://github.com/rh-hideout/pokeemerald-expansion/pull/6886) +* @Emiliasky made their first contribution in [#7085](https://github.com/rh-hideout/pokeemerald-expansion/pull/7085) +* @poetahto made their first contribution in [#7155](https://github.com/rh-hideout/pokeemerald-expansion/pull/7155) +* @Bolt-Strike made their first contribution in [#7103](https://github.com/rh-hideout/pokeemerald-expansion/pull/7103) +* @kevinwklawrence made their first contribution in [#7440](https://github.com/rh-hideout/pokeemerald-expansion/pull/7440) +* @FosterProgramming made their first contribution in [#7442](https://github.com/rh-hideout/pokeemerald-expansion/pull/7442) +* @ThePeeps191 made their first contribution in [#7490](https://github.com/rh-hideout/pokeemerald-expansion/pull/7490) +* @cornixsenex made their first contribution in [#7368](https://github.com/rh-hideout/pokeemerald-expansion/pull/7368) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.12.2...expansion/1.13.0 + + + + diff --git a/docs/tutorials/how_to_battle_script_command_macro.md b/docs/tutorials/how_to_battle_script_command_macro.md index afb9a15e89..911da7d09c 100644 --- a/docs/tutorials/how_to_battle_script_command_macro.md +++ b/docs/tutorials/how_to_battle_script_command_macro.md @@ -12,36 +12,33 @@ In general, `gBattlescriptCurrInstr` tracks the current battle script position a ``` `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. -Now, how might we add a custom `callnative` command? Here are the steps. We will use `BS_TrySetOctolock` as an example. +Now, how might we add a custom `callnative` command? Here are the steps. We will use `BS_JumpIfTerrainAffected` as an example. ### 1. Create a macro in `asm/macros/battle_script.inc`. For example: ```c - .macro trysetoctolock battler:req, failInstr:req - callnative BS_TrySetOctolock + .macro jumpifterrainaffected battler:req, terrainFlags:req, jumpInstr:req + callnative BS_JumpIfTerrainAffected .byte \battler - .4byte \failInstr + .4byte \terrainFlags + .4byte \jumpInstr .endm ``` ### 2. Add your new callnative command ID to `src/battle_script_commands.c`. For example: ```c -void BS_TrySetOctolock(void) +void BS_JumpIfTerrainAffected(void) { - NATIVE_ARGS(u8 battler, const u8 *failInstr); + NATIVE_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gDisableStructs[battler].octolock) - { - gBattlescriptCurrInstr = cmd->failInstr; - } + if (IsBattlerTerrainAffected(battler, cmd->flags)) + gBattlescriptCurrInstr = cmd->jumpInstr; else - { - gDisableStructs[battler].octolock = TRUE; - gBattleMons[battler].volatiles.escapePrevention = TRUE; - gDisableStructs[battler].battlerPreventingEscape = gBattlerAttacker; gBattlescriptCurrInstr = cmd->nextInstr; - } } ``` -Each of the arguments defined in the macro (`battler`, `failInstr`) need to be called at the start of the command using `NATIVE_ARGS`. +Each of the arguments defined in the macro (`battler`, `flags`, `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. +These arguments can then be accessed as `cmd->battler`, `cmd->flags` and `cmd->failInstr`. +Note that for `cmd->battler` we need to use `GetBattlerForBattleScript` to fetch the correct battler because with the macro we are accessing a scripting command that doesn't corresponds to `gBattlerTarget`, `gBattlerAttacker`, etc. +For the battler argument specifically, most of the time the battler is accessed through `gBattlerAttacker`, `gBattlerTarget` and the battler argument left out. +In the majority of cases, this is fine since the script commands are mostly used for moves and the interaction is usually between an attacker and target. +A script command usually ends with either a jump or next instruction `gBattlescriptCurrInstr = cmd->nextInstr / cmd->nextInstr;` advancing to the next instruction. diff --git a/include/battle.h b/include/battle.h index 086eb68f51..6276a7098a 100644 --- a/include/battle.h +++ b/include/battle.h @@ -130,7 +130,9 @@ struct DisableStruct u8 iceFaceActivationPrevention:1; // fixes hit escape move edge case u8 unnerveActivated:1; // Unnerve and As One (Unnerve part) activate only once per switch in u8 hazardsDone:1; - u8 padding:1; + u8 padding1:1; + u8 octolockedBy:3; + u8 padding2:5; }; // Fully Cleared each turn after end turn effects are done. A few things are cleared before end turn effects @@ -344,7 +346,6 @@ struct AiThinkingStruct u8 movesetIndex; u16 moveConsidered; s32 score[MAX_MON_MOVES]; - u32 funcResult; u64 aiFlags[MAX_BATTLERS_COUNT]; u8 aiAction; u8 aiLogicId; @@ -684,7 +685,7 @@ struct BattleStruct u8 startingStatusDone:1; u8 terrainDone:1; u8 overworldWeatherDone:1; - u8 unused:3; + u8 battlerKOAnimsRunning:3; u8 isAtkCancelerForCalledMove:1; // Certain cases in atk canceler should only be checked once, when the original move is called, however others need to be checked the twice. u8 friskedAbility:1; // If identifies two mons, show the ability pop-up only once. u8 fickleBeamBoosted:1; @@ -1074,7 +1075,6 @@ extern u32 gHitMarker; extern u8 gBideTarget[MAX_BATTLERS_COUNT]; extern u32 gSideStatuses[NUM_BATTLE_SIDES]; extern struct SideTimer gSideTimers[NUM_BATTLE_SIDES]; -extern u32 gStatuses3[MAX_BATTLERS_COUNT]; extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT]; extern u16 gPauseCounterBattle; extern u16 gPaydayMoney; @@ -1234,7 +1234,7 @@ static inline bool32 IsSpreadMove(u32 moveTarget) static inline bool32 IsDoubleSpreadMove(void) { return gBattleStruct->numSpreadTargets > 1 - && !(gHitMarker & (HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_UNABLE_TO_USE_MOVE)) + && !(gHitMarker & (HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE | HITMARKER_UNABLE_TO_USE_MOVE)) && IsSpreadMove(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove)); } diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 118fbf5984..1b23dd7e1a 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -125,7 +125,6 @@ bool32 BattlerWillFaintFromWeather(u32 battler, u32 ability); bool32 BattlerWillFaintFromSecondaryDamage(u32 battler, u32 ability); bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbility, u32 move); bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 moveIndex); -u32 GetBattlerSideSpeedAverage(u32 battler); bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage); bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent); bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects moveEffect); @@ -161,6 +160,7 @@ bool32 AI_IsDamagedByRecoil(u32 battler); u32 GetNoOfHitsToKO(u32 dmg, s32 hp); u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef); u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum DamageCalcContext calcContext); +u32 GetBestNoOfHitsToKO(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext); u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext); uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef); u16 *GetMovesArray(u32 battler); @@ -296,6 +296,7 @@ u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move); bool32 IsBattlerItemEnabled(u32 battler); bool32 IsBattlerPredictedToSwitch(u32 battler); u32 GetIncomingMove(u32 battler, u32 opposingBattler, struct AiLogicData *aiData); +u32 GetIncomingMoveSpeedCheck(u32 battler, u32 opposingBattler, struct AiLogicData *aiData); bool32 HasLowAccuracyMove(u32 battlerAtk, u32 battlerDef); bool32 HasBattlerSideAbility(u32 battlerDef, u32 ability, struct AiLogicData *aiData); bool32 IsNaturalEnemy(u32 speciesAttacker, u32 speciesTarget); diff --git a/include/battle_anim_scripts.h b/include/battle_anim_scripts.h index 0bffbda8ea..193696375d 100644 --- a/include/battle_anim_scripts.h +++ b/include/battle_anim_scripts.h @@ -948,6 +948,7 @@ extern const u8 gBattleAnimStatus_Paralysis[]; extern const u8 gBattleAnimStatus_Freeze[]; extern const u8 gBattleAnimStatus_Curse[]; extern const u8 gBattleAnimStatus_Nightmare[]; +extern const u8 gBattleAnimStatus_Frostbite[]; // general animations extern const u8 gBattleAnimGeneral_StatsChange[]; diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 4db4aea969..4728c17a84 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -279,6 +279,7 @@ void InitBattleControllers(void); bool32 IsValidForBattle(struct Pokemon *mon); void TryReceiveLinkBattleData(void); void PrepareBufferDataTransferLink(u32 battler, u32 bufferId, u16 size, u8 *data); +void UpdateFriendshipFromXItem(u32 battler); // emitters void BtlController_EmitGetMonData(u32 battler, u32 bufferId, u8 requestId, u8 monToCheck); diff --git a/include/battle_util.h b/include/battle_util.h index 8f38e0f572..0c486f4a3a 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -394,7 +394,7 @@ bool32 HadMoreThanHalfHpNowDoesnt(u32 battler); void UpdateStallMons(void); bool32 TryRestoreHPBerries(u32 battler, enum ItemCaseId caseId); bool32 TrySwitchInEjectPack(enum ItemCaseId caseID); -u32 GetMonVolatile(u32 battler, enum Volatile _volatile); +u32 GetBattlerVolatile(u32 battler, enum Volatile _volatile); void SetMonVolatile(u32 battler, enum Volatile _volatile, u32 newValue); u32 TryBoosterEnergy(u32 battler, u32 ability, enum ItemCaseId caseID); bool32 ItemHealMonVolatile(u32 battler, u16 itemId); diff --git a/include/config/battle.h b/include/config/battle.h index eccc88b11d..d5fff2bf7d 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -28,7 +28,7 @@ #define B_BURN_DAMAGE GEN_LATEST // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th. Also applies to Frostbite. #define B_BURN_FACADE_DMG GEN_LATEST // In Gen6+, burn's effect of lowering the Attack stat no longer applies to Facade. #define B_BINDING_DAMAGE GEN_LATEST // In Gen6+, binding damage is 1/8 of max HP instead of 1/16. (With Binding Band, 1/6 and 1/8 respectively.) -#define B_PSYWAVE_DMG GEN_LATEST // Psywave's damage formula. See Cmd_psywavedamageeffect. +#define B_PSYWAVE_DMG GEN_LATEST // Psywave's damage formula. See DoFixedDamageMoveCalc for details. #define B_PAYBACK_SWITCH_BOOST GEN_LATEST // In Gen5+, if the opponent switches out, Payback's damage will no longer be doubled. #define B_HIDDEN_POWER_DMG GEN_LATEST // In Gen6+, Hidden Power's base power was set to always be 60. Before, it was determined by the mon's IVs. #define B_ROUGH_SKIN_DMG GEN_LATEST // In Gen4+, Rough Skin contact damage is 1/8th of max HP instead of 1/16th. This will also affect Iron Barbs. diff --git a/include/config/general.h b/include/config/general.h index 7eabc2e26f..d363c345ff 100644 --- a/include/config/general.h +++ b/include/config/general.h @@ -68,7 +68,6 @@ // General settings #define EXPANSION_INTRO TRUE // If TRUE, a custom RHH intro will play after the vanilla copyright screen. -#define SUMMARY_SCREEN_NATURE_COLORS TRUE // If TRUE, nature-based stat boosts and reductions will be red and blue in the summary screen. #define HQ_RANDOM TRUE // If TRUE, replaces the default RNG with an implementation of SFC32 RNG. May break code that relies on RNG. #define AUTO_SCROLL_TEXT FALSE // If TRUE, text will automatically scroll to the next line after NUM_FRAMES_AUTO_SCROLL_DELAY. Players can still press A_BUTTON or B_BUTTON to scroll on their own. #define NUM_FRAMES_AUTO_SCROLL_DELAY 49 diff --git a/include/config/summary_screen.h b/include/config/summary_screen.h index 9407d93c7e..4b5f434cb3 100644 --- a/include/config/summary_screen.h +++ b/include/config/summary_screen.h @@ -3,6 +3,7 @@ // Settings #define P_SUMMARY_SCREEN_MOVE_RELEARNER TRUE // If TRUE, shows an option for Pokémon to relearn moves on the summary screen moves page. +#define P_SUMMARY_SCREEN_NATURE_COLORS TRUE // If TRUE, nature-based stat boosts and reductions will be red and blue in the summary screen. #define P_SUMMARY_MOVE_RELEARNER_FULL_PP TRUE // If TRUE, the move relearner in the summary screen restores relearned moves' PP to full. #define P_SUMMARY_SCREEN_RENAME TRUE // If TRUE, an option to change Pokémon nicknames replaces the cancel prompt on the summary screen info page. #define P_SUMMARY_SCREEN_IV_EV_INFO FALSE // If TRUE, will allow player to cycle through the Stats, IVs, and EVs in the summary screen skills page. diff --git a/include/constants/battle.h b/include/constants/battle.h index 148438237b..858f2c8785 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -144,39 +144,59 @@ enum VolatileFlags /* Volatile status ailments * These are removed after exiting the battle or switching - * Enum, Type Type, max value, flags */ + * Enum, Type Type, max value, flags */ #define VOLATILE_DEFINITIONS(F) \ - F(VOLATILE_CONFUSION, confusionTurns, (u32, 6), V_BATON_PASSABLE) \ - F(VOLATILE_FLINCHED, flinched, (u32, 1)) \ - F(VOLATILE_UPROAR, uproarTurns, (u32, 5)) \ - F(VOLATILE_TORMENT, torment, (u32, 1)) \ - F(VOLATILE_BIDE, bideTurns, (u32, 3)) \ - F(VOLATILE_LOCK_CONFUSE, lockConfusionTurns, (u32, 3)) \ - F(VOLATILE_MULTIPLETURNS, multipleTurns, (u32, 1)) \ - F(VOLATILE_WRAPPED, wrapped, (u32, 1)) \ - F(VOLATILE_POWDER, powder, (u32, 1)) \ - F(VOLATILE_UNUSED, padding, (u32, 1)) \ - F(VOLATILE_INFATUATION, infatuation, (enum BattlerId, MAX_BITS(4))) \ - F(VOLATILE_DEFENSE_CURL, defenseCurl, (u32, 1)) \ - F(VOLATILE_TRANSFORMED, transformed, (u32, 1)) \ - F(VOLATILE_RECHARGE, recharge, (u32, 1)) \ - F(VOLATILE_RAGE, rage, (u32, 1)) \ - F(VOLATILE_SUBSTITUTE, substitute, (u32, 1), V_BATON_PASSABLE) \ - F(VOLATILE_DESTINY_BOND, destinyBond, (u32, 1)) \ - F(VOLATILE_ESCAPE_PREVENTION, escapePrevention, (u32, 1), V_BATON_PASSABLE) \ - F(VOLATILE_NIGHTMARE, nightmare, (u32, 1)) \ - F(VOLATILE_CURSED, cursed, (u32, 1), V_BATON_PASSABLE) \ - F(VOLATILE_FORESIGHT, foresight, (u32, 1)) \ - F(VOLATILE_DRAGON_CHEER, dragonCheer, (u32, 1), V_BATON_PASSABLE) \ - F(VOLATILE_FOCUS_ENERGY, focusEnergy, (u32, 1), V_BATON_PASSABLE) \ - F(VOLATILE_SEMI_INVULNERABLE, semiInvulnerable, (u32, 5)) \ - F(VOLATILE_ELECTRIFIED, electrified, (u32, 1)) \ - F(VOLATILE_MUD_SPORT, mudSport, (u32, 1), V_BATON_PASSABLE) \ - F(VOLATILE_WATER_SPORT, waterSport, (u32, 1), V_BATON_PASSABLE) \ - F(VOLATILE_INFINITE_CONFUSION, infiniteConfusion, (u32, 1)) \ - F(VOLATILE_SALT_CURE, saltCure, (u32, 1)) \ - F(VOLATILE_SYRUP_BOMB, syrupBomb, (u32, 1)) \ - F(VOLATILE_GLAIVE_RUSH, glaiveRush, (u32, 1)) + F(VOLATILE_CONFUSION, confusionTurns, (u32, 6), V_BATON_PASSABLE) \ + F(VOLATILE_FLINCHED, flinched, (u32, 1)) \ + F(VOLATILE_UPROAR, uproarTurns, (u32, 5)) \ + F(VOLATILE_TORMENT, torment, (u32, 1)) \ + F(VOLATILE_BIDE, bideTurns, (u32, 3)) \ + F(VOLATILE_LOCK_CONFUSE, lockConfusionTurns, (u32, 3)) \ + F(VOLATILE_MULTIPLETURNS, multipleTurns, (u32, 1)) \ + F(VOLATILE_WRAPPED, wrapped, (u32, 1)) \ + F(VOLATILE_POWDER, powder, (u32, 1)) \ + F(VOLATILE_UNUSED, padding, (u32, 1)) \ + F(VOLATILE_INFATUATION, infatuation, (enum BattlerId, MAX_BITS(4))) \ + F(VOLATILE_DEFENSE_CURL, defenseCurl, (u32, 1)) \ + F(VOLATILE_TRANSFORMED, transformed, (u32, 1)) \ + F(VOLATILE_RECHARGE, recharge, (u32, 1)) \ + F(VOLATILE_RAGE, rage, (u32, 1)) \ + F(VOLATILE_SUBSTITUTE, substitute, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_DESTINY_BOND, destinyBond, (u32, 1)) \ + F(VOLATILE_ESCAPE_PREVENTION, escapePrevention, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_NIGHTMARE, nightmare, (u32, 1)) \ + F(VOLATILE_CURSED, cursed, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_FORESIGHT, foresight, (u32, 1)) \ + F(VOLATILE_DRAGON_CHEER, dragonCheer, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_FOCUS_ENERGY, focusEnergy, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_SEMI_INVULNERABLE, semiInvulnerable, (u32, 5)) \ + F(VOLATILE_ELECTRIFIED, electrified, (u32, 1)) \ + F(VOLATILE_MUD_SPORT, mudSport, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_WATER_SPORT, waterSport, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_INFINITE_CONFUSION, infiniteConfusion, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_SALT_CURE, saltCure, (u32, 1)) \ + F(VOLATILE_SYRUP_BOMB, syrupBomb, (u32, 1)) \ + F(VOLATILE_GLAIVE_RUSH, glaiveRush, (u32, 1)) \ + F(VOLATILE_LEECH_SEED, leechSeed, (enum BattlerId, MAX_BITS(4)), V_BATON_PASSABLE) \ + F(VOLATILE_LOCK_ON, lockOn, (u32, 2), V_BATON_PASSABLE) \ + F(VOLATILE_PERISH_SONG, perishSong, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_MINIMIZE, minimize, (u32, 1)) \ + F(VOLATILE_CHARGE, charge, (u32, 1)) \ + F(VOLATILE_ROOT, root, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_YAWN, yawn, (u32, 2)) \ + F(VOLATILE_IMPRISON, imprison, (u32, 1)) \ + F(VOLATILE_GRUDGE, grudge, (u32, 1)) \ + F(VOLATILE_GASTRO_ACID, gastroAcid, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_EMBARGO, embargo, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_SMACK_DOWN, smackDown, (u32, 1)) \ + F(VOLATILE_TELEKINESIS, telekinesis, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_MIRACLE_EYE, miracleEye, (u32, 1)) \ + F(VOLATILE_MAGNET_RISE, magnetRise, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_HEAL_BLOCK, healBlock, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_AQUA_RING, aquaRing, (u32, 1), V_BATON_PASSABLE) \ + F(VOLATILE_LASER_FOCUS, laserFocus, (u32, 1)) \ + F(VOLATILE_POWER_TRICK, powerTrick, (u32, 1), V_BATON_PASSABLE) + /* Use within a macro to get the maximum allowed value for a volatile. Requires _typeMaxValue as input. */ #define GET_VOLATILE_MAXIMUM(_typeMaxValue, ...) INVOKE_WITH_B(GET_VOLATILE_MAXIMUM_, _typeMaxValue) @@ -193,37 +213,7 @@ enum Volatile // Helper macros #define INFATUATED_WITH(battler) (battler + 1) - -#define STATUS3_LEECHSEED_BATTLER (1 << 0 | 1 << 1) // The battler to receive HP from Leech Seed -#define STATUS3_LEECHSEED (1 << 2) -#define STATUS3_ALWAYS_HITS (1 << 3 | 1 << 4) -#define STATUS3_ALWAYS_HITS_TURN(num) (((num) << 3) & STATUS3_ALWAYS_HITS) // "Always Hits" is set as a 2 turn timer, i.e. next turn is the last turn when it's active -#define STATUS3_PERISH_SONG (1 << 5) -#define STATUS3_UNUSED_6 (1 << 6) -#define STATUS3_UNUSED_7 (1 << 7) -#define STATUS3_MINIMIZED (1 << 8) -#define STATUS3_CHARGED_UP (1 << 9) -#define STATUS3_ROOTED (1 << 10) -#define STATUS3_YAWN (1 << 11 | 1 << 12) // Number of turns to sleep -#define STATUS3_YAWN_TURN(num) (((num) << 11) & STATUS3_YAWN) -#define STATUS3_IMPRISONED_OTHERS (1 << 13) -#define STATUS3_GRUDGE (1 << 14) -#define STATUS3_UNUSED_15 (1 << 15) -#define STATUS3_GASTRO_ACID (1 << 16) -#define STATUS3_EMBARGO (1 << 17) -#define STATUS3_UNUSED_18 (1 << 18) -#define STATUS3_UNUSED_19 (1 << 19) -#define STATUS3_UNUSED_20 (1 << 20) -#define STATUS3_SMACKED_DOWN (1 << 21) -#define STATUS3_UNUSED_22 (1 << 22) -#define STATUS3_TELEKINESIS (1 << 23) -#define STATUS3_UNUSED_24 (1 << 24) -#define STATUS3_MIRACLE_EYED (1 << 25) -#define STATUS3_MAGNET_RISE (1 << 26) -#define STATUS3_HEAL_BLOCK (1 << 27) -#define STATUS3_AQUA_RING (1 << 28) -#define STATUS3_LASER_FOCUS (1 << 29) -#define STATUS3_POWER_TRICK (1 << 30) +#define LEECHSEEDED_BY(battler) (battler + 1) enum SemiInvulnerableState { @@ -258,7 +248,7 @@ enum SemiInvulnerableExclusion #define HITMARKER_DISABLE_ANIMATION (1 << 17) // disable animations during battle scripts, e.g. for Bug Bite #define HITMARKER_UNUSED_18 (1 << 18) #define HITMARKER_UNABLE_TO_USE_MOVE (1 << 19) -#define HITMARKER_PASSIVE_DAMAGE (1 << 20) +#define HITMARKER_PASSIVE_HP_UPDATE (1 << 20) #define HITMARKER_UNUSED_21 (1 << 21) #define HITMARKER_PLAYER_FAINTED (1 << 22) #define HITMARKER_ALLOW_NO_PP (1 << 23) @@ -373,16 +363,17 @@ enum BattleWeather #define B_WEATHER_LOW_LIGHT (B_WEATHER_FOG | B_WEATHER_ICY_ANY | B_WEATHER_RAIN | B_WEATHER_SANDSTORM) #define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS) +// Explicit numbers until frostbite because those shouldn't be shifted enum __attribute__((packed)) MoveEffect { - MOVE_EFFECT_NONE, - MOVE_EFFECT_SLEEP, - MOVE_EFFECT_POISON, - MOVE_EFFECT_BURN, - MOVE_EFFECT_FREEZE, - MOVE_EFFECT_PARALYSIS, - MOVE_EFFECT_TOXIC, - MOVE_EFFECT_FROSTBITE, + MOVE_EFFECT_NONE = 0, + MOVE_EFFECT_SLEEP = 1, + MOVE_EFFECT_POISON = 2, + MOVE_EFFECT_BURN = 3, + MOVE_EFFECT_FREEZE = 4, + MOVE_EFFECT_PARALYSIS = 5, + MOVE_EFFECT_TOXIC = 6, + MOVE_EFFECT_FROSTBITE = 7, MOVE_EFFECT_CONFUSION, MOVE_EFFECT_FLINCH, MOVE_EFFECT_TRI_ATTACK, diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 3d514b1936..38965e0342 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -616,8 +616,9 @@ #define B_ANIM_STATUS_FRZ 6 #define B_ANIM_STATUS_CURSED 7 #define B_ANIM_STATUS_NIGHTMARE 8 +#define B_ANIM_STATUS_FRB 9 -#define NUM_B_ANIMS_STATUS 9 +#define NUM_B_ANIMS_STATUS 10 // Tasks with return values often assign them to gBattleAnimArgs[7]. #define ARG_RET_ID 7 diff --git a/include/constants/expansion.h b/include/constants/expansion.h index d97e1541d8..2858684d20 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,9 +1,9 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// Last version: 1.12.2 +// Last version: 1.13.0 #define EXPANSION_VERSION_MAJOR 1 -#define EXPANSION_VERSION_MINOR 13 +#define EXPANSION_VERSION_MINOR 14 #define EXPANSION_VERSION_PATCH 0 // FALSE if this this version of Expansion is not a tagged commit, i.e. diff --git a/include/constants/generational_changes.h b/include/constants/generational_changes.h index e51d57915c..83c9caa203 100644 --- a/include/constants/generational_changes.h +++ b/include/constants/generational_changes.h @@ -29,6 +29,7 @@ enum GenConfigTag GEN_SNOW_WARNING, GEN_ALLY_SWITCH_FAIL_CHANCE, GEN_DREAM_EATER_LIQUID_OOZE, + GEN_CONFIG_TRANSISTOR_BOOST, GEN_CONFIG_COUNT }; diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h index ac1c7d5c5b..dbe322beac 100644 --- a/include/constants/item_effects.h +++ b/include/constants/item_effects.h @@ -93,4 +93,8 @@ #define ITEM_EFFECT_HEAL_PP 21 #define ITEM_EFFECT_NONE 22 +// Since X item stat increases are now handled by battle scripts, the friendship increase effect is now handled by the battle controller in HandleAction_UseItem. +#define X_ITEM_FRIENDSHIP_INCREASE 1 // The amount of friendship gained by using an X item on a Pokémon in battle. +#define X_ITEM_MAX_FRIENDSHIP 200 // Friendship threshold at which Pokémon stop receiving a friendship increase from using X items on them in battle. + #endif // GUARD_CONSTANTS_ITEM_EFFECTS_H diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index af01007cd2..20cff8a30f 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -322,6 +322,7 @@ enum EvolutionMode { EVO_MODE_ITEM_CHECK, // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve EVO_MODE_BATTLE_SPECIAL, EVO_MODE_OVERWORLD_SPECIAL, + EVO_MODE_SCRIPT_TRIGGER, EVO_MODE_BATTLE_ONLY, // This mode is only used in battles to support Tandemaus' unique requirement }; diff --git a/include/data.h b/include/data.h index 4663bae33c..2128685e19 100644 --- a/include/data.h +++ b/include/data.h @@ -106,6 +106,7 @@ struct Trainer /*0x23*/ u8 poolPickIndex; /*0x24*/ u8 poolPruneIndex; /*0x25*/ u16 overrideTrainer; + /*0x26*/ u8 trainerBackPic; }; struct TrainerClass @@ -178,7 +179,6 @@ extern const union AnimCmd *const gAnims_MonPic[]; extern const union AnimCmd *const gAnims_Trainer[]; extern const struct TrainerSprite gTrainerSprites[]; extern const struct TrainerBacksprite gTrainerBacksprites[]; -extern const u16 gTrainerPicToTrainerBackPic[]; extern const struct Trainer gTrainers[DIFFICULTY_COUNT][TRAINERS_COUNT]; extern const struct Trainer gBattlePartners[DIFFICULTY_COUNT][PARTNER_COUNT]; @@ -261,6 +261,16 @@ static inline const u8 GetTrainerPicFromId(u16 trainerId) return GetTrainerStructFromId(trainerId)->trainerPic; } +static inline const u8 GetTrainerBackPicFromId(u16 trainerId) +{ + enum DifficultyLevel partnerDifficulty = GetBattlePartnerDifficultyLevel(trainerId); + + if (trainerId > TRAINER_PARTNER(PARTNER_NONE)) + return gBattlePartners[partnerDifficulty][trainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic; + + return GetTrainerStructFromId(trainerId)->trainerBackPic; +} + static inline const u8 GetTrainerStartingStatusFromId(u16 trainerId) { return GetTrainerStructFromId(trainerId)->startingStatus; diff --git a/include/gba/isagbprint.h b/include/gba/isagbprint.h index d362b5cb38..c94df4fe1d 100644 --- a/include/gba/isagbprint.h +++ b/include/gba/isagbprint.h @@ -30,7 +30,7 @@ void AGBPrintInit(void); #if (LOG_HANDLER == LOG_HANDLER_MGBA_PRINT) -#define DebugPrintf(pBuf, ...) MgbaPrintf(MGBA_LOG_INFO, pBuf, ## __VA_ARGS__) +#define DebugPrintf(pBuf, ...) MgbaPrintf(MGBA_LOG_WARN, pBuf, ## __VA_ARGS__) #define DebugAssert(pFile, nLine, pExpression, nStopProgram) MgbaAssert(pFile, nLine, pExpression, nStopProgram) #define DebugPrintfLevel(level, pBuf, ...) MgbaPrintf(level, pBuf, ## __VA_ARGS__) diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index a90771048d..5c3a0872ce 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -401,7 +401,7 @@ extern const u8 gNoiseTable[]; extern const struct PokemonCrySong gPokemonCrySongTemplate; -extern const struct ToneData voicegroup000; +extern const struct ToneData voicegroup_dummy; extern char gNumMusicPlayers[]; extern char gMaxLines[]; diff --git a/include/generational_changes.h b/include/generational_changes.h index 53991bab1f..a6f3a56ef7 100644 --- a/include/generational_changes.h +++ b/include/generational_changes.h @@ -32,6 +32,7 @@ static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] = [GEN_SNOW_WARNING] = B_SNOW_WARNING, [GEN_ALLY_SWITCH_FAIL_CHANCE] = B_ALLY_SWITCH_FAIL_CHANCE, [GEN_DREAM_EATER_LIQUID_OOZE] = B_DREAM_EATER_LIQUID_OOZE, + [GEN_CONFIG_TRANSISTOR_BOOST] = B_TRANSISTOR_BOOST, }; #if TESTING diff --git a/include/pokemon.h b/include/pokemon.h index cd7925cf14..ba459480e1 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -881,6 +881,7 @@ uq4_12_t GetDynamaxLevelHPMultiplier(u32 dynamaxLevel, bool32 inverseMultiplier) u32 GetRegionalFormByRegion(u32 species, u32 region); bool32 IsSpeciesForeignRegionalForm(u32 species, u32 currentRegion); u32 GetTeraTypeFromPersonality(struct Pokemon *mon); +bool8 ShouldSkipFriendshipChange(void); struct Pokemon *GetSavedPlayerPartyMon(u32 index); u8 *GetSavedPlayerPartyCount(void); void SavePlayerPartyMon(u32 index, struct Pokemon *mon); diff --git a/include/test/battle.h b/include/test/battle.h index b95038b09e..d909aa0332 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -2,8 +2,13 @@ * * To run all the tests use: * make check -j - * To run specific tests, e.g. Spikes ones, use: + * To run specific tests, e.g. Spikes ones, use either: * make check TESTS="Spikes" + * make check TESTS="*Spikes*" + * The first runs tests with names that start with Spikes, whereas the + * second runs tests with names that include Spikes anywhere in them. + * To run tests from a specific file, e.g. 'test/battle/move_effect/spikes.c', use: + * make check TESTS="test/battle/move_effect/spikes.c" * To build a ROM (pokemerald-test.elf) that can be opened in mgba to * view specific tests, e.g. Spikes ones, use: * make pokeemerald-test.elf TESTS="Spikes" diff --git a/include/test/test.h b/include/test/test.h index 835634df7b..48a6e84aa2 100644 --- a/include/test/test.h +++ b/include/test/test.h @@ -37,10 +37,18 @@ struct Test u16 sourceLine; }; +enum TestFilterMode +{ + TEST_FILTER_MODE_TEST_NAME_PREFIX, + TEST_FILTER_MODE_TEST_NAME_INFIX, + TEST_FILTER_MODE_FILENAME_EXACT, +}; + struct TestRunnerState { u8 state; u8 exitCode; + enum TestFilterMode filterMode:8; const char *skipFilename; u32 failedAssumptionsBlockLine; const struct Test *test; diff --git a/include/window.h b/include/window.h index 2dd67b123f..fc35f724d9 100644 --- a/include/window.h +++ b/include/window.h @@ -45,7 +45,7 @@ struct WindowTemplate struct Window { struct WindowTemplate window; - u8 *tileData; + ALIGNED(4) u8 *tileData; }; bool32 InitWindows(const struct WindowTemplate *templates); diff --git a/sound/keysplit_tables.inc b/sound/keysplit_tables.inc index 81301ef62b..a3145e64d2 100644 --- a/sound/keysplit_tables.inc +++ b/sound/keysplit_tables.inc @@ -1,6 +1,6 @@ @ Due to the way mks4agb (Nintendo's tool) works, key split table labels can @ appear before the actual start of the key split table data. If you look at -@ the first keysplit table (KeySplitTable1), you'll notice it's offset backwards +@ the first keysplit table (keysplit_piano), you'll notice it's offset backwards @ by 36 bytes. This is because the key split tables don't map instruments @ for the entire note range (0-127)--they only map subsets, and the upper @ and lower ranges aren't necessarily 0 or 127. @@ -10,384 +10,26 @@ @ begins. Therefore, the notes naturally map to the key split table without @ any extra offset calculation. -.set KeySplitTable1, . - 36 - .byte 0 @ 36 - .byte 0 @ 37 - .byte 0 @ 38 - .byte 0 @ 39 - .byte 0 @ 40 - .byte 0 @ 41 - .byte 0 @ 42 - .byte 0 @ 43 - .byte 0 @ 44 - .byte 0 @ 45 - .byte 0 @ 46 - .byte 0 @ 47 - .byte 0 @ 48 - .byte 0 @ 49 - .byte 0 @ 50 - .byte 0 @ 51 - .byte 0 @ 52 - .byte 0 @ 53 - .byte 0 @ 54 - .byte 1 @ 55 - .byte 1 @ 56 - .byte 1 @ 57 - .byte 1 @ 58 - .byte 1 @ 59 - .byte 1 @ 60 - .byte 1 @ 61 - .byte 1 @ 62 - .byte 1 @ 63 - .byte 1 @ 64 - .byte 1 @ 65 - .byte 1 @ 66 - .byte 1 @ 67 - .byte 1 @ 68 - .byte 1 @ 69 - .byte 2 @ 70 - .byte 2 @ 71 - .byte 2 @ 72 - .byte 2 @ 73 - .byte 2 @ 74 - .byte 2 @ 75 - .byte 2 @ 76 - .byte 2 @ 77 - .byte 2 @ 78 - .byte 2 @ 79 - .byte 2 @ 80 - .byte 2 @ 81 - .byte 2 @ 82 - .byte 2 @ 83 - .byte 2 @ 84 - .byte 2 @ 85 - .byte 2 @ 86 - .byte 2 @ 87 - .byte 2 @ 88 - .byte 2 @ 89 - .byte 2 @ 90 - .byte 3 @ 91 - .byte 3 @ 92 - .byte 3 @ 93 - .byte 3 @ 94 - .byte 3 @ 95 - .byte 3 @ 96 - .byte 3 @ 97 - .byte 3 @ 98 - .byte 3 @ 99 - .byte 3 @ 100 - .byte 3 @ 101 - .byte 3 @ 102 - .byte 3 @ 103 - .byte 3 @ 104 - .byte 3 @ 105 - .byte 3 @ 106 - .byte 3 @ 107 +keysplit piano, 36 + split 0, 55 + split 1, 70 + split 2, 91 + split 3, 108 -.set KeySplitTable2, . - 36 - .byte 0 @ 36 - .byte 0 @ 37 - .byte 0 @ 38 - .byte 0 @ 39 - .byte 0 @ 40 - .byte 0 @ 41 - .byte 0 @ 42 - .byte 0 @ 43 - .byte 0 @ 44 - .byte 0 @ 45 - .byte 0 @ 46 - .byte 0 @ 47 - .byte 0 @ 48 - .byte 0 @ 49 - .byte 0 @ 50 - .byte 0 @ 51 - .byte 0 @ 52 - .byte 0 @ 53 - .byte 0 @ 54 - .byte 0 @ 55 - .byte 0 @ 56 - .byte 0 @ 57 - .byte 0 @ 58 - .byte 0 @ 59 - .byte 0 @ 60 - .byte 0 @ 61 - .byte 0 @ 62 - .byte 0 @ 63 - .byte 0 @ 64 - .byte 0 @ 65 - .byte 0 @ 66 - .byte 0 @ 67 - .byte 0 @ 68 - .byte 1 @ 69 - .byte 1 @ 70 - .byte 1 @ 71 - .byte 1 @ 72 - .byte 1 @ 73 - .byte 1 @ 74 - .byte 1 @ 75 - .byte 1 @ 76 - .byte 1 @ 77 - .byte 1 @ 78 - .byte 1 @ 79 - .byte 1 @ 80 - .byte 2 @ 81 - .byte 2 @ 82 - .byte 2 @ 83 - .byte 2 @ 84 - .byte 2 @ 85 - .byte 2 @ 86 - .byte 2 @ 87 - .byte 2 @ 88 - .byte 2 @ 89 - .byte 2 @ 90 - .byte 2 @ 91 - .byte 2 @ 92 - .byte 2 @ 93 - .byte 2 @ 94 - .byte 2 @ 95 - .byte 2 @ 96 - .byte 2 @ 97 - .byte 2 @ 98 - .byte 2 @ 99 - .byte 2 @ 100 - .byte 2 @ 101 - .byte 2 @ 102 - .byte 2 @ 103 - .byte 2 @ 104 - .byte 2 @ 105 - .byte 2 @ 106 - .byte 2 @ 107 +keysplit strings, 36 + split 0, 69 + split 1, 81 + split 2, 108 -.set KeySplitTable3, . - 36 - .byte 0 @ 36 - .byte 0 @ 37 - .byte 0 @ 38 - .byte 0 @ 39 - .byte 0 @ 40 - .byte 0 @ 41 - .byte 0 @ 42 - .byte 0 @ 43 - .byte 0 @ 44 - .byte 0 @ 45 - .byte 0 @ 46 - .byte 0 @ 47 - .byte 0 @ 48 - .byte 0 @ 49 - .byte 0 @ 50 - .byte 0 @ 51 - .byte 0 @ 52 - .byte 0 @ 53 - .byte 0 @ 54 - .byte 0 @ 55 - .byte 0 @ 56 - .byte 0 @ 57 - .byte 0 @ 58 - .byte 0 @ 59 - .byte 0 @ 60 - .byte 0 @ 61 - .byte 0 @ 62 - .byte 0 @ 63 - .byte 0 @ 64 - .byte 0 @ 65 - .byte 1 @ 66 - .byte 1 @ 67 - .byte 1 @ 68 - .byte 1 @ 69 - .byte 1 @ 70 - .byte 1 @ 71 - .byte 1 @ 72 - .byte 1 @ 73 - .byte 1 @ 74 - .byte 1 @ 75 - .byte 1 @ 76 - .byte 1 @ 77 - .byte 1 @ 78 - .byte 1 @ 79 - .byte 1 @ 80 - .byte 1 @ 81 - .byte 1 @ 82 - .byte 1 @ 83 - .byte 2 @ 84 - .byte 2 @ 85 - .byte 2 @ 86 - .byte 2 @ 87 - .byte 2 @ 88 - .byte 2 @ 89 - .byte 2 @ 90 - .byte 2 @ 91 - .byte 2 @ 92 - .byte 2 @ 93 - .byte 2 @ 94 - .byte 2 @ 95 - .byte 2 @ 96 - .byte 2 @ 97 - .byte 2 @ 98 - .byte 2 @ 99 - .byte 2 @ 100 - .byte 2 @ 101 - .byte 2 @ 102 - .byte 2 @ 103 - .byte 2 @ 104 - .byte 2 @ 105 - .byte 2 @ 106 - .byte 2 @ 107 +keysplit trumpet, 36 + split 0, 66 + split 1, 84 + split 2, 108 -.set KeySplitTable4, . - 24 - .byte 0 @ 24 - .byte 0 @ 25 - .byte 0 @ 26 - .byte 0 @ 27 - .byte 0 @ 28 - .byte 0 @ 29 - .byte 0 @ 30 - .byte 0 @ 31 - .byte 0 @ 32 - .byte 0 @ 33 - .byte 0 @ 34 - .byte 0 @ 35 - .byte 0 @ 36 - .byte 0 @ 37 - .byte 0 @ 38 - .byte 0 @ 39 - .byte 0 @ 40 - .byte 0 @ 41 - .byte 1 @ 42 - .byte 1 @ 43 - .byte 1 @ 44 - .byte 1 @ 45 - .byte 1 @ 46 - .byte 1 @ 47 - .byte 1 @ 48 - .byte 1 @ 49 - .byte 1 @ 50 - .byte 1 @ 51 - .byte 1 @ 52 - .byte 1 @ 53 - .byte 1 @ 54 - .byte 1 @ 55 - .byte 1 @ 56 - .byte 1 @ 57 - .byte 1 @ 58 - .byte 1 @ 59 - .byte 1 @ 60 - .byte 1 @ 61 - .byte 1 @ 62 - .byte 1 @ 63 - .byte 1 @ 64 - .byte 1 @ 65 - .byte 1 @ 66 - .byte 1 @ 67 - .byte 1 @ 68 - .byte 1 @ 69 - .byte 1 @ 70 - .byte 1 @ 71 - .byte 1 @ 72 - .byte 1 @ 73 - .byte 1 @ 74 - .byte 1 @ 75 - .byte 1 @ 76 - .byte 1 @ 77 - .byte 1 @ 78 - .byte 1 @ 79 - .byte 1 @ 80 - .byte 1 @ 81 - .byte 1 @ 82 - .byte 1 @ 83 - .byte 1 @ 84 - .byte 1 @ 85 - .byte 1 @ 86 - .byte 1 @ 87 - .byte 1 @ 88 - .byte 1 @ 89 - .byte 1 @ 90 - .byte 1 @ 91 - .byte 1 @ 92 - .byte 1 @ 93 - .byte 1 @ 94 - .byte 1 @ 95 - .byte 1 @ 96 - .byte 1 @ 97 - .byte 1 @ 98 - .byte 1 @ 99 - .byte 1 @ 100 - .byte 1 @ 101 - .byte 1 @ 102 - .byte 1 @ 103 - .byte 1 @ 104 - .byte 1 @ 105 - .byte 1 @ 106 - .byte 1 @ 107 +keysplit tuba, 24 + split 0, 42 + split 1, 108 -.set KeySplitTable5, . - 36 - .byte 0 @ 36 - .byte 0 @ 37 - .byte 0 @ 38 - .byte 0 @ 39 - .byte 0 @ 40 - .byte 0 @ 41 - .byte 0 @ 42 - .byte 0 @ 43 - .byte 0 @ 44 - .byte 0 @ 45 - .byte 0 @ 46 - .byte 0 @ 47 - .byte 0 @ 48 - .byte 0 @ 49 - .byte 0 @ 50 - .byte 0 @ 51 - .byte 0 @ 52 - .byte 0 @ 53 - .byte 0 @ 54 - .byte 0 @ 55 - .byte 0 @ 56 - .byte 0 @ 57 - .byte 0 @ 58 - .byte 0 @ 59 - .byte 0 @ 60 - .byte 0 @ 61 - .byte 0 @ 62 - .byte 0 @ 63 - .byte 0 @ 64 - .byte 0 @ 65 - .byte 1 @ 66 - .byte 1 @ 67 - .byte 1 @ 68 - .byte 1 @ 69 - .byte 1 @ 70 - .byte 1 @ 71 - .byte 1 @ 72 - .byte 1 @ 73 - .byte 1 @ 74 - .byte 1 @ 75 - .byte 1 @ 76 - .byte 1 @ 77 - .byte 1 @ 78 - .byte 1 @ 79 - .byte 1 @ 80 - .byte 1 @ 81 - .byte 1 @ 82 - .byte 1 @ 83 - .byte 1 @ 84 - .byte 1 @ 85 - .byte 1 @ 86 - .byte 1 @ 87 - .byte 1 @ 88 - .byte 1 @ 89 - .byte 1 @ 90 - .byte 1 @ 91 - .byte 1 @ 92 - .byte 1 @ 93 - .byte 1 @ 94 - .byte 1 @ 95 - .byte 1 @ 96 - .byte 1 @ 97 - .byte 1 @ 98 - .byte 1 @ 99 - .byte 1 @ 100 - .byte 1 @ 101 - .byte 1 @ 102 - .byte 1 @ 103 - .byte 1 @ 104 - .byte 1 @ 105 - .byte 1 @ 106 - .byte 1 @ 107 +keysplit french_horn, 36 + split 0, 66 + split 1, 108 diff --git a/sound/songs/midi/midi.cfg b/sound/songs/midi/midi.cfg index 5802904b41..68df84d7a5 100644 --- a/sound/songs/midi/midi.cfg +++ b/sound/songs/midi/midi.cfg @@ -1,420 +1,420 @@ -mus_abandoned_ship.mid: -E -R50 -G030 -V080 -mus_abnormal_weather.mid: -E -R50 -G089 -V080 -mus_aqua_magma_hideout.mid: -E -R50 -G076 -V084 -mus_awaken_legend.mid: -E -R50 -G012 -V090 -P5 -mus_b_arena.mid: -E -R50 -G104 -V090 -mus_b_dome_lobby.mid: -E -R50 -G111 -V056 -mus_b_dome.mid: -E -R50 -G111 -V090 -mus_b_factory.mid: -E -R50 -G113 -V100 -mus_b_frontier.mid: -E -R50 -G103 -V094 -mus_b_palace.mid: -E -R50 -G108 -V105 -mus_b_pike.mid: -E -R50 -G112 -V092 -mus_b_pyramid_top.mid: -E -R50 -G107 -V077 -mus_b_pyramid.mid: -E -R50 -G106 -V079 -mus_b_tower_rs.mid: -E -R50 -G035 -V080 -mus_b_tower.mid: -E -R50 -G110 -V100 -mus_birch_lab.mid: -E -R50 -G033 -V080 +mus_abandoned_ship.mid: -E -R50 -G_abandoned_ship -V080 +mus_abnormal_weather.mid: -E -R50 -G_abnormal_weather -V080 +mus_aqua_magma_hideout.mid: -E -R50 -G_aqua_magma_hideout -V084 +mus_awaken_legend.mid: -E -R50 -G_fanfare -V090 -P5 +mus_b_arena.mid: -E -R50 -G_b_arena -V090 +mus_b_dome_lobby.mid: -E -R50 -G_b_dome -V056 +mus_b_dome.mid: -E -R50 -G_b_dome -V090 +mus_b_factory.mid: -E -R50 -G_b_factory -V100 +mus_b_frontier.mid: -E -R50 -G_b_frontier -V094 +mus_b_palace.mid: -E -R50 -G_b_palace -V105 +mus_b_pike.mid: -E -R50 -G_b_pike -V092 +mus_b_pyramid_top.mid: -E -R50 -G_b_pyramid_top -V077 +mus_b_pyramid.mid: -E -R50 -G_b_pyramid -V079 +mus_b_tower_rs.mid: -E -R50 -G_b_tower_rs -V080 +mus_b_tower.mid: -E -R50 -G_b_tower -V100 +mus_birch_lab.mid: -E -R50 -G_birch_lab -V080 mus_c_comm_center.mid: -E -R50 -V080 mus_c_vs_legend_beast.mid: -E -R50 -V080 -mus_cable_car.mid: -E -R50 -G071 -V078 -mus_caught.mid: -E -R50 -G025 -V080 -mus_cave_of_origin.mid: -E -R50 -G037 -V080 -mus_contest_lobby.mid: -E -R50 -G098 -V060 -mus_contest_results.mid: -E -R50 -G092 -V080 -mus_contest_winner.mid: -E -R50 -G085 -V100 -mus_contest.mid: -E -R50 -G086 -V088 -mus_credits.mid: -E -R50 -G101 -V100 -mus_cycling.mid: -E -R50 -G049 -V083 -mus_dewford.mid: -E -R50 -G073 -V078 +mus_cable_car.mid: -E -R50 -G_cable_car -V078 +mus_caught.mid: -E -R50 -G_victory_wild -V080 +mus_cave_of_origin.mid: -E -R50 -G_cave_of_origin -V080 +mus_contest_lobby.mid: -E -R50 -G_contest_lobby -V060 +mus_contest_results.mid: -E -R50 -G_contest_results -V080 +mus_contest_winner.mid: -E -R50 -G_contest_winner -V100 +mus_contest.mid: -E -R50 -G_contest -V088 +mus_credits.mid: -E -R50 -G_credits -V100 +mus_cycling.mid: -E -R50 -G_cycling -V083 +mus_dewford.mid: -E -R50 -G_dewford -V078 mus_dummy.mid: -E -R40 -mus_encounter_aqua.mid: -E -R50 -G065 -V086 -mus_encounter_brendan.mid: -E -R50 -G067 -V078 -mus_encounter_champion.mid: -E -R50 -G100 -V076 -mus_encounter_cool.mid: -E -R50 -G063 -V086 -mus_encounter_elite_four.mid: -E -R50 -G096 -V078 -mus_encounter_female.mid: -E -R50 -G053 -V072 -mus_encounter_girl.mid: -E -R50 -G027 -V080 -mus_encounter_hiker.mid: -E -R50 -G097 -V076 -mus_encounter_intense.mid: -E -R50 -G062 -V078 -mus_encounter_interviewer.mid: -E -R50 -G099 -V062 -mus_encounter_magma.mid: -E -R50 -G087 -V072 -mus_encounter_male.mid: -E -R50 -G028 -V080 -mus_encounter_may.mid: -E -R50 -G061 -V078 -mus_encounter_rich.mid: -E -R50 -G043 -V094 -mus_encounter_suspicious.mid: -E -R50 -G069 -V078 -mus_encounter_swimmer.mid: -E -R50 -G036 -V080 -mus_encounter_twins.mid: -E -R50 -G095 -V075 -mus_end.mid: -E -R50 -G102 -V036 -mus_ever_grande.mid: -E -R50 -G068 -V086 -mus_evolution_intro.mid: -E -R50 -G026 -V080 -mus_evolution.mid: -E -R50 -G026 -V080 -mus_evolved.mid: -E -R50 -G012 -V090 -P5 -mus_fallarbor.mid: -E -R50 -G083 -V100 -mus_follow_me.mid: -E -R50 -G066 -V074 -mus_fortree.mid: -E -R50 -G032 -V080 -mus_game_corner.mid: -E -R50 -G072 -V072 +mus_encounter_aqua.mid: -E -R50 -G_encounter_aqua -V086 +mus_encounter_brendan.mid: -E -R50 -G_encounter_brendan -V078 +mus_encounter_champion.mid: -E -R50 -G_encounter_champion -V076 +mus_encounter_cool.mid: -E -R50 -G_encounter_cool -V086 +mus_encounter_elite_four.mid: -E -R50 -G_encounter_elite_four -V078 +mus_encounter_female.mid: -E -R50 -G_encounter_female -V072 +mus_encounter_girl.mid: -E -R50 -G_encounter_girl -V080 +mus_encounter_hiker.mid: -E -R50 -G_encounter_hiker -V076 +mus_encounter_intense.mid: -E -R50 -G_encounter_intense -V078 +mus_encounter_interviewer.mid: -E -R50 -G_encounter_interviewer -V062 +mus_encounter_magma.mid: -E -R50 -G_encounter_magma -V072 +mus_encounter_male.mid: -E -R50 -G_encounter_male -V080 +mus_encounter_may.mid: -E -R50 -G_encounter_may -V078 +mus_encounter_rich.mid: -E -R50 -G_encounter_rich -V094 +mus_encounter_suspicious.mid: -E -R50 -G_encounter_suspicious -V078 +mus_encounter_swimmer.mid: -E -R50 -G_encounter_swimmer -V080 +mus_encounter_twins.mid: -E -R50 -G_encounter_twins -V075 +mus_end.mid: -E -R50 -G_end -V036 +mus_ever_grande.mid: -E -R50 -G_ever_grande -V086 +mus_evolution_intro.mid: -E -R50 -G_evolution -V080 +mus_evolution.mid: -E -R50 -G_evolution -V080 +mus_evolved.mid: -E -R50 -G_fanfare -V090 -P5 +mus_fallarbor.mid: -E -R50 -G_fallarbor -V100 +mus_follow_me.mid: -E -R50 -G_follow_me -V074 +mus_fortree.mid: -E -R50 -G_fortree -V080 +mus_game_corner.mid: -E -R50 -G_game_corner -V072 mus_gsc_pewter.mid: -E -R50 -V080 mus_gsc_route38.mid: -E -R50 -V080 -mus_gym.mid: -E -R50 -G013 -V080 -mus_hall_of_fame_room.mid: -E -R50 -G093 -V080 -mus_hall_of_fame.mid: -E -R50 -G082 -V078 -mus_heal.mid: -E -R50 -G012 -V090 -P5 -mus_help.mid: -E -R50 -G056 -V078 -mus_intro_battle.mid: -E -R50 -G088 -V088 -mus_intro.mid: -E -R50 -G060 -V090 -mus_level_up.mid: -E -R50 -G012 -V090 -P5 -mus_lilycove_museum.mid: -E -R50 -G020 -V080 -mus_lilycove.mid: -E -R50 -G054 -V085 -mus_link_contest_p1.mid: -E -R50 -G039 -V079 -mus_link_contest_p2.mid: -E -R50 -G040 -V090 -mus_link_contest_p3.mid: -E -R50 -G041 -V075 -mus_link_contest_p4.mid: -E -R50 -G042 -V090 -mus_littleroot_test.mid: -E -R50 -G034 -V099 -mus_littleroot.mid: -E -R50 -G051 -V100 -mus_move_deleted.mid: -E -R50 -G012 -V090 -P5 -mus_mt_chimney.mid: -E -R50 -G052 -V078 -mus_mt_pyre_exterior.mid: -E -R50 -G080 -V080 -mus_mt_pyre.mid: -E -R50 -G078 -V088 -mus_obtain_b_points.mid: -E -R50 -G103 -V090 -P5 -mus_obtain_badge.mid: -E -R50 -G012 -V090 -P5 -mus_obtain_berry.mid: -E -R50 -G012 -V090 -P5 -mus_obtain_item.mid: -E -R50 -G012 -V090 -P5 -mus_obtain_symbol.mid: -E -R50 -G103 -V100 -P5 -mus_obtain_tmhm.mid: -E -R50 -G012 -V090 -P5 -mus_oceanic_museum.mid: -E -R50 -G023 -V080 -mus_oldale.mid: -E -R50 -G019 -V080 -mus_petalburg_woods.mid: -E -R50 -G018 -V080 -mus_petalburg.mid: -E -R50 -G015 -V080 -mus_poke_center.mid: -E -R50 -G046 -V092 -mus_poke_mart.mid: -E -R50 -G050 -V085 -mus_rayquaza_appears.mid: -E -R50 -G109 -V090 -mus_register_match_call.mid: -E -R50 -G105 -V090 -P5 -mus_rg_berry_pick.mid: -E -R50 -G132 -V090 -mus_rg_caught_intro.mid: -E -R50 -G179 -V094 -P5 -mus_rg_caught.mid: -E -R50 -G170 -V100 -mus_rg_celadon.mid: -E -R50 -G168 -V070 -mus_rg_cinnabar.mid: -E -R50 -G138 -V090 -mus_rg_credits.mid: -E -R50 -G149 -V090 -mus_rg_cycling.mid: -E -R50 -G141 -V090 -mus_rg_dex_rating.mid: -E -R50 -G175 -V070 -P5 -mus_rg_encounter_boy.mid: -E -R50 -G144 -V090 -mus_rg_encounter_deoxys.mid: -E -R50 -G184 -V079 -mus_rg_encounter_girl.mid: -E -R50 -G143 -V051 -mus_rg_encounter_gym_leader: -E -R50 -G144 -V090 -mus_rg_encounter_rival.mid: -E -R50 -G174 -V079 -mus_rg_encounter_rocket.mid: -E -R50 -G142 -V096 -mus_rg_follow_me.mid: -E -R50 -G131 -V068 -mus_rg_fuchsia.mid: -E -R50 -G167 -V090 -mus_rg_game_corner.mid: -E -R50 -G132 -V090 -mus_rg_game_freak.mid: -E -R50 -G181 -V075 -mus_rg_gym.mid: -E -R50 -G134 -V090 -mus_rg_hall_of_fame.mid: -E -R50 -G145 -V079 -mus_rg_heal.mid: -E -R50 -G140 -V090 -mus_rg_intro_fight.mid: -E -R50 -G136 -V090 -mus_rg_jigglypuff.mid: -E -R50 -G135 -V068 -P5 -mus_rg_lavender.mid: -E -R50 -G139 -V090 -mus_rg_mt_moon.mid: -E -R50 -G147 -V090 -mus_rg_mystery_gift.mid: -E -R50 -G183 -V100 -mus_rg_net_center.mid: -E -R50 -G162 -V096 -mus_rg_new_game_exit.mid: -E -R50 -G182 -V088 -mus_rg_new_game_instruct.mid: -E -R50 -G182 -V085 -mus_rg_new_game_intro.mid: -E -R50 -G182 -V088 -mus_rg_oak_lab.mid: -E -R50 -G160 -V075 -mus_rg_oak.mid: -E -R50 -G161 -V086 -mus_rg_obtain_key_item.mid: -E -R50 -G178 -V077 -P5 -mus_rg_pallet.mid: -E -R50 -G159 -V100 -mus_rg_pewter.mid: -E -R50 -G173 -V084 -mus_rg_photo.mid: -E -R50 -G180 -V100 -P5 -mus_rg_poke_center.mid: -E -R50 -G162 -V096 -mus_rg_poke_flute.mid: -E -R50 -G165 -V048 -P5 -mus_rg_poke_jump.mid: -E -R50 -G132 -V090 -mus_rg_poke_mansion.mid: -E -R50 -G148 -V090 -mus_rg_poke_tower.mid: -E -R50 -G165 -V090 -mus_rg_rival_exit.mid: -E -R50 -G174 -V079 -mus_rg_rocket_hideout.mid: -E -R50 -G133 -V090 -mus_rg_route1.mid: -E -R50 -G150 -V079 -mus_rg_route3.mid: -E -R50 -G152 -V083 -mus_rg_route11.mid: -E -R50 -G153 -V090 -mus_rg_route24.mid: -E -R50 -G151 -V086 -mus_rg_sevii_45.mid: -E -R50 -G188 -V084 -mus_rg_sevii_67.mid: -E -R50 -G189 -V084 -mus_rg_sevii_123.mid: -E -R50 -G173 -V084 -mus_rg_sevii_cave.mid: -E -R50 -G147 -V090 -mus_rg_sevii_dungeon.mid: -E -R50 -G146 -V090 -mus_rg_sevii_route.mid: -E -R50 -G187 -V080 -mus_rg_silph.mid: -E -R50 -G166 -V076 -mus_rg_slow_pallet.mid: -E -R50 -G159 -V092 -mus_rg_ss_anne.mid: -E -R50 -G163 -V090 -mus_rg_surf.mid: -E -R50 -G164 -V071 -mus_rg_teachy_tv_menu.mid: -E -R50 -G186 -V059 -mus_rg_teachy_tv_show.mid: -E -R50 -G131 -V068 -mus_rg_title.mid: -E -R50 -G137 -V090 -mus_rg_trainer_tower.mid: -E -R50 -G134 -V090 -mus_rg_union_room.mid: -E -R50 -G132 -V090 -mus_rg_vermillion.mid: -E -R50 -G172 -V090 -mus_rg_victory_gym_leader.mid: -E -R50 -G171 -V090 -mus_rg_victory_road.mid: -E -R50 -G154 -V090 -mus_rg_victory_trainer.mid: -E -R50 -G169 -V089 -mus_rg_victory_wild.mid: -E -R50 -G170 -V090 -mus_rg_viridian_forest.mid: -E -R50 -G146 -V090 -mus_rg_vs_champion.mid: -E -R50 -G158 -V090 -mus_rg_vs_deoxys.mid: -E -R50 -G185 -V080 -mus_rg_vs_gym_leader.mid: -E -R50 -G155 -V090 -mus_rg_vs_legend.mid: -E -R50 -G157 -V090 -mus_rg_vs_mewtwo.mid: -E -R50 -G157 -V090 -mus_rg_vs_trainer.mid: -E -R50 -G156 -V090 -mus_rg_vs_wild.mid: -E -R50 -G157 -V090 -mus_roulette.mid: -E -R50 -G038 -V080 -mus_route101.mid: -E -R50 -G011 -V080 -mus_route104.mid: -E -R50 -G047 -V097 -mus_route110.mid: -E -R50 -G010 -V080 -mus_route111.mid: -E -R50 -G055 -V076 -mus_route113.mid: -E -R50 -G064 -V084 -mus_route119.mid: -E -R50 -G048 -V096 -mus_route120.mid: -E -R50 -G014 -V080 -mus_route122.mid: -E -R50 -G021 -V080 -mus_rustboro.mid: -E -R50 -G045 -V085 -mus_safari_zone.mid: -E -R50 -G074 -V082 -mus_sailing.mid: -E -R50 -G077 -V086 -mus_school.mid: -E -R50 -G081 -V100 -mus_sealed_chamber.mid: -E -R50 -G084 -V100 -mus_slateport.mid: -E -R50 -G079 -V070 -mus_slots_jackpot.mid: -E -R50 -G012 -V090 -P5 -mus_slots_win.mid: -E -R50 -G012 -V090 -P5 -mus_sootopolis.mid: -E -R50 -G091 -V062 -mus_surf.mid: -E -R50 -G017 -V080 -mus_title.mid: -E -R50 -G059 -V090 -mus_too_bad.mid: -E -R50 -G012 -V090 -P5 -mus_trick_house.mid: -E -R50 -G094 -V070 -mus_underwater.mid: -E -R50 -G057 -V094 -mus_verdanturf.mid: -E -R50 -G044 -V090 -mus_victory_aqua_magma.mid: -E -R50 -G070 -V088 -mus_victory_gym_leader.mid: -E -R50 -G024 -V080 -mus_victory_league.mid: -E -R50 -G029 -V080 -mus_victory_road.mid: -E -R50 -G075 -V076 -mus_victory_trainer.mid: -E -R50 -G058 -V091 -mus_victory_wild.mid: -E -R50 -G025 -V080 -mus_vs_aqua_magma_leader.mid: -E -R50 -G126 -V080 -P1 -mus_vs_aqua_magma.mid: -E -R50 -G118 -V080 -P1 -mus_vs_champion.mid: -E -R50 -G121 -V080 -P1 -mus_vs_elite_four.mid: -E -R50 -G125 -V080 -P1 -mus_vs_frontier_brain.mid: -E -R50 -G115 -V090 -P1 -mus_vs_gym_leader.mid: -E -R50 -G120 -V080 -P1 -mus_vs_kyogre_groudon.mid: -E -R50 -G123 -V080 -P1 -mus_vs_mew.mid: -E -R50 -G116 -V090 -mus_vs_rayquaza.mid: -E -R50 -G114 -V080 -P1 -mus_vs_regi.mid: -E -R50 -G122 -V080 -P1 -mus_vs_rival.mid: -E -R50 -G124 -V080 -P1 -mus_vs_trainer.mid: -E -R50 -G119 -V080 -P1 -mus_vs_wild.mid: -E -R50 -G117 -V080 -P1 -mus_weather_groudon.mid: -E -R50 -G090 -V050 -ph_choice_blend.mid: -E -G130 -P4 -ph_choice_held.mid: -E -G130 -P4 -ph_choice_solo.mid: -E -G130 -P4 -ph_cloth_blend.mid: -E -G130 -P4 -ph_cloth_held.mid: -E -G130 -P4 -ph_cloth_solo.mid: -E -G130 -P4 -ph_cure_blend.mid: -E -G130 -P4 -ph_cure_held.mid: -E -G130 -P4 -ph_cure_solo.mid: -E -G130 -P4 -ph_dress_blend.mid: -E -G130 -P4 -ph_dress_held.mid: -E -G130 -P4 -ph_dress_solo.mid: -E -G130 -P4 -ph_face_blend.mid: -E -G130 -P4 -ph_face_held.mid: -E -G130 -P4 -ph_face_solo.mid: -E -G130 -P4 -ph_fleece_blend.mid: -E -G130 -P4 -ph_fleece_held.mid: -E -G130 -P4 -ph_fleece_solo.mid: -E -G130 -P4 -ph_foot_blend.mid: -E -G130 -P4 -ph_foot_held.mid: -E -G130 -P4 -ph_foot_solo.mid: -E -G130 -P4 -ph_goat_blend.mid: -E -G130 -P4 -ph_goat_held.mid: -E -G130 -P4 -ph_goat_solo.mid: -E -G130 -P4 -ph_goose_blend.mid: -E -G130 -P4 -ph_goose_held.mid: -E -G130 -P4 -ph_goose_solo.mid: -E -G130 -P4 -ph_kit_blend.mid: -E -G130 -P4 -ph_kit_held.mid: -E -G130 -P4 -ph_kit_solo.mid: -E -G130 -P4 -ph_lot_blend.mid: -E -G130 -P4 -ph_lot_held.mid: -E -G130 -P4 -ph_lot_solo.mid: -E -G130 -P4 -ph_mouth_blend.mid: -E -G130 -P4 -ph_mouth_held.mid: -E -G130 -P4 -ph_mouth_solo.mid: -E -G130 -P4 -ph_nurse_blend.mid: -E -G130 -P4 -ph_nurse_held.mid: -E -G130 -P4 -ph_nurse_solo.mid: -E -G130 -P4 -ph_price_blend.mid: -E -G130 -P4 -ph_price_held.mid: -E -G130 -P4 -ph_price_solo.mid: -E -G130 -P4 -ph_strut_blend.mid: -E -G130 -P4 -ph_strut_held.mid: -E -G130 -P4 -ph_strut_solo.mid: -E -G130 -P4 -ph_thought_blend.mid: -E -G130 -P4 -ph_thought_held.mid: -E -G130 -P4 -ph_thought_solo.mid: -E -G130 -P4 -ph_trap_blend.mid: -E -G130 -P4 -ph_trap_held.mid: -E -G130 -P4 -ph_trap_solo.mid: -E -G130 -P4 -se_a.mid: -E -R50 -G128 -V095 -P4 -se_applause.mid: -E -R50 -G128 -V100 -P5 -se_arena_timeup1.mid: -E -R50 -G129 -P5 -se_arena_timeup2.mid: -E -R50 -G129 -P5 -se_ball_bounce_1.mid: -E -R50 -G128 -V100 -P4 -se_ball_bounce_2.mid: -E -R50 -G128 -V100 -P4 -se_ball_bounce_3.mid: -E -R50 -G128 -V100 -P4 -se_ball_bounce_4.mid: -E -R50 -G128 -V100 -P4 -se_ball_open.mid: -E -R50 -G127 -V100 -P5 -se_ball_throw.mid: -E -R50 -G128 -V120 -P5 -se_ball_trade.mid: -E -R50 -G127 -V100 -P5 -se_ball_tray_ball.mid: -E -R50 -G128 -V110 -P5 -se_ball_tray_enter.mid: -E -R50 -G128 -V110 -P5 -se_ball_tray_exit.mid: -E -R50 -G127 -V100 -P5 -se_ball.mid: -E -R50 -G127 -V070 -P4 -se_balloon_blue.mid: -E -R50 -G128 -V105 -P4 -se_balloon_red.mid: -E -R50 -G128 -V105 -P4 -se_balloon_yellow.mid: -E -R50 -G128 -V105 -P4 -se_bang.mid: -E -R50 -G128 -V110 -P4 -se_berry_blender.mid: -E -R50 -G128 -V090 -P4 -se_bike_bell.mid: -E -R50 -G128 -V090 -P4 -se_bike_hop.mid: -E -R50 -G127 -V090 -P4 -se_boo.mid: -E -R50 -G127 -V110 -P4 -se_breakable_door.mid: -E -R50 -G128 -V110 -P4 -se_bridge_walk.mid: -E -R50 -G128 -V095 -P4 -se_card.mid: -E -R50 -G127 -V100 -P4 -se_click.mid: -E -R50 -G127 -V110 -P4 -se_contest_condition_lose.mid: -E -R50 -G127 -V110 -P4 -se_contest_curtain_fall.mid: -E -R50 -G128 -V070 -P5 -se_contest_curtain_rise.mid: -E -R50 -G128 -V070 -P5 -se_contest_heart.mid: -E -R50 -G128 -V090 -P5 -se_contest_icon_change.mid: -E -R50 -G128 -V110 -P5 -se_contest_icon_clear.mid: -E -R50 -G128 -V090 -P5 -se_contest_mons_turn.mid: -E -R50 -G128 -V090 -P5 -se_contest_place.mid: -E -R50 -G127 -V110 -P4 -se_dex_search.mid: -E -R50 -G127 -v100 -P5 -se_ding_dong.mid: -E -R50 -G127 -V090 -P5 -se_door.mid: -E -R50 -G127 -V080 -P5 -se_downpour_stop.mid: -E -R50 -G128 -V100 -P2 -se_downpour.mid: -E -R50 -G128 -V100 -P2 -se_e.mid: -E -R50 -G128 -V120 -P4 -se_effective.mid: -E -R50 -G127 -V110 -P5 -se_egg_hatch.mid: -E -R50 -G128 -V120 -P5 -se_elevator.mid: -E -R50 -G128 -V100 -P4 -se_escalator.mid: -E -R50 -G128 -V100 -P4 -se_exit.mid: -E -R50 -G127 -V120 -P5 -se_exp_max.mid: -E -R50 -G128 -V094 -P5 -se_exp.mid: -E -R50 -G127 -V080 -P5 -se_failure.mid: -E -R50 -G127 -V120 -P4 -se_faint.mid: -E -R50 -G127 -V110 -P5 -se_fall.mid: -E -R50 -G128 -V110 -P4 -se_field_poison.mid: -E -R50 -G127 -V110 -P5 -se_flee.mid: -E -R50 -G127 -V090 -P5 -se_fu_zaku.mid: -E -R50 -G127 -V120 -P4 -se_glass_flute.mid: -E -R50 -G128 -V105 -P5 -se_i.mid: -E -R50 -G128 -V120 -P4 -se_ice_break.mid: -E -R50 -G128 -V100 -P4 -se_ice_crack.mid: -E -R50 -G127 -V100 -P4 -se_ice_stairs.mid: -E -R50 -G128 -V090 -P4 -se_intro_blast.mid: -E -R50 -G127 -V100 -P5 -se_itemfinder.mid: -E -R50 -G127 -V090 -P5 -se_lavaridge_fall_warp.mid: -E -R50 -G127 -P4 -se_ledge.mid: -E -R50 -G127 -V100 -P4 -se_low_health.mid: -E -R50 -G127 -V100 -P3 -se_m_bind.mid: -E -R50 -G128 -V100 -P4 -se_m_comet_punch.mid: -E -R50 -G128 -V120 -P4 -se_m_cut.mid: -E -R50 -G128 -V120 -P4 -se_m_double_slap.mid: -E -R50 -G128 -V110 -P4 -se_m_fire_punch.mid: -E -R50 -G128 -V110 -P4 -se_m_fly.mid: -E -R50 -G128 -V110 -P4 -se_m_gust.mid: -E -R50 -G128 -V110 -P4 -se_m_gust2.mid: -E -R50 -G128 -V110 -P4 -se_m_headbutt.mid: -E -R50 -G128 -V110 -P4 -se_m_horn_attack.mid: -E -R50 -G128 -V110 -P4 -se_m_jump_kick.mid: -E -R50 -G128 -V110 -P4 -se_m_leer.mid: -E -R50 -G128 -V110 -P4 -se_m_mega_kick.mid: -E -R50 -G128 -V090 -P4 -se_m_mega_kick2.mid: -E -R50 -G128 -V110 -P4 -se_m_pay_day.mid: -E -R50 -G128 -V095 -P4 -se_m_razor_wind.mid: -E -R50 -G128 -V110 -P4 -se_m_razor_wind2.mid: -E -R50 -G128 -V090 -P4 -se_m_sand_attack.mid: -E -R50 -G128 -V110 -P4 -se_m_scratch.mid: -E -R50 -G128 -V110 -P4 -se_m_swords_dance.mid: -E -R50 -G128 -V100 -P4 -se_m_tail_whip.mid: -E -R50 -G128 -V110 -P4 -se_m_take_down.mid: -E -R50 -G128 -V105 -P4 -se_m_vicegrip.mid: -E -R50 -G128 -V110 -P4 -se_m_wing_attack.mid: -E -R50 -G128 -V105 -P4 -se_mud_ball.mid: -E -R50 -G128 -V110 -P4 -se_mugshot.mid: -E -R50 -G128 -V090 -P5 -se_n.mid: -E -R50 -G128 -P4 -se_not_effective.mid: -E -R50 -G127 -V110 -P5 -se_note_a.mid: -E -R50 -G128 -V110 -P4 -se_note_b.mid: -E -R50 -G128 -V110 -P4 -se_note_c_high.mid: -E -R50 -G128 -V110 -P4 -se_note_c.mid: -E -R50 -G128 -V110 -P4 -se_note_d.mid: -E -R50 -G128 -V110 -P4 -se_note_e.mid: -E -R50 -G128 -V110 -P4 -se_note_f.mid: -E -R50 -G128 -V110 -P4 -se_note_g.mid: -E -R50 -G128 -V110 -P4 -se_o.mid: -E -R50 -G128 -V120 -P4 -se_orb.mid: -E -R50 -G128 -V100 -P5 -se_pc_login.mid: -E -R50 -G127 -V100 -P5 -se_pc_off.mid: -E -R50 -G127 -V100 -P5 -se_pc_on.mid: -E -R50 -G127 -V100 -P5 -se_pike_curtain_close.mid: -E -R50 -G129 -P5 -se_pike_curtain_open.mid: -E -R50 -G129 -P5 -se_pin.mid: -E -R50 -G127 -V060 -P4 -se_pokenav_call.mid: -E -R50 -G129 -V120 -P5 -se_pokenav_hang_up.mid: -E -R50 -G129 -V110 -P5 -se_pokenav_off.mid: -E -R50 -G127 -V100 -P5 -se_pokenav_on.mid: -E -R50 -G127 -V100 -P5 -se_puddle.mid: -E -R50 -G128 -V020 -P4 -se_rain_stop.mid: -E -R50 -G128 -V080 -P2 -se_rain.mid: -E -R50 -G128 -V080 -P2 -se_repel.mid: -E -R50 -G127 -V090 -P4 -se_rg_bag_cursor.mid: -E -R50 -G129 -P5 -se_rg_bag_pocket.mid: -E -R50 -G129 -P5 -se_rg_ball_click.mid: -E -R50 -G129 -V100 -P5 -se_rg_card_flip.mid: -E -R50 -G129 -P5 -se_rg_card_flipping.mid: -E -R50 -G129 -P5 -se_rg_card_open.mid: -E -R50 -G129 -V112 -P5 -se_rg_deoxys_move.mid: -E -R50 -G129 -V080 -P5 -se_rg_door.mid: -E -R50 -G129 -V100 -P5 -se_rg_help_close.mid: -E -R50 -G129 -V095 -P5 -se_rg_help_error.mid: -E -R50 -G129 -V125 -P5 -se_rg_help_open.mid: -E -R50 -G129 -V096 -P5 -se_rg_poke_jump_failure.mid: -E -R50 -G127 -P5 -se_rg_poke_jump_success.mid: -E -R50 -G128 -V110 -P5 -se_rg_shop.mid: -E -R50 -G129 -V080 -P5 -se_rg_ss_anne_horn.mid: -E -R50 -G129 -V096 -P5 -se_rotating_gate.mid: -E -R50 -G128 -V090 -P4 -se_roulette_ball.mid: -E -R50 -G128 -V110 -P2 -se_roulette_ball2.mid: -E -R50 -G128 -V110 -P2 -se_save.mid: -E -R50 -G128 -V080 -P5 -se_select.mid: -E -R50 -G127 -V080 -P5 -se_shiny.mid: -E -R50 -G128 -V095 -P5 -se_ship.mid: -E -R50 -G127 -V075 -P4 -se_shop.mid: -E -R50 -G127 -V090 -P5 -se_sliding_door.mid: -E -R50 -G128 -V095 -P4 -se_success.mid: -E -R50 -G127 -V080 -P4 -se_sudowoodo_shake.mid: -E -R50 -G129 -V077 -P5 -se_super_effective.mid: -E -R50 -G127 -V110 -P5 -se_switch.mid: -E -R50 -G127 -V100 -P4 -se_taillow_wing_flap.mid: -E -R50 -G128 -V105 -P5 -se_thunder.mid: -E -R50 -G128 -V110 -P3 -se_thunder2.mid: -E -R50 -G128 -V110 -P3 -se_thunderstorm_stop.mid: -E -R50 -G128 -V080 -P2 -se_thunderstorm.mid: -E -R50 -G128 -V080 -P2 -se_truck_door.mid: -E -R50 -G128 -V110 -P4 -se_truck_move.mid: -E -R50 -G128 -P4 -se_truck_stop.mid: -E -R50 -G128 -P4 -se_truck_unload.mid: -E -R50 -G127 -P4 -se_u.mid: -E -R50 -G128 -P4 -se_unlock.mid: -E -R50 -G128 -V100 -P4 -se_use_item.mid: -E -R50 -G127 -V100 -P5 -se_vend.mid: -E -R50 -G128 -V110 -P4 -se_warp_in.mid: -E -R50 -G127 -V090 -P4 -se_warp_out.mid: -E -R50 -G127 -V090 -P4 +mus_gym.mid: -E -R50 -G_gym -V080 +mus_hall_of_fame_room.mid: -E -R50 -G_hall_of_fame_room -V080 +mus_hall_of_fame.mid: -E -R50 -G_hall_of_fame -V078 +mus_heal.mid: -E -R50 -G_fanfare -V090 -P5 +mus_help.mid: -E -R50 -G_help -V078 +mus_intro_battle.mid: -E -R50 -G_intro_battle -V088 +mus_intro.mid: -E -R50 -G_intro -V090 +mus_level_up.mid: -E -R50 -G_fanfare -V090 -P5 +mus_lilycove_museum.mid: -E -R50 -G_lilycove_museum -V080 +mus_lilycove.mid: -E -R50 -G_lilycove -V085 +mus_link_contest_p1.mid: -E -R50 -G_link_contest_p1 -V079 +mus_link_contest_p2.mid: -E -R50 -G_link_contest_p2 -V090 +mus_link_contest_p3.mid: -E -R50 -G_link_contest_p3 -V075 +mus_link_contest_p4.mid: -E -R50 -G_link_contest_p4 -V090 +mus_littleroot_test.mid: -E -R50 -G_littleroot_test -V099 +mus_littleroot.mid: -E -R50 -G_littleroot -V100 +mus_move_deleted.mid: -E -R50 -G_fanfare -V090 -P5 +mus_mt_chimney.mid: -E -R50 -G_mt_chimney -V078 +mus_mt_pyre_exterior.mid: -E -R50 -G_mt_pyre_exterior -V080 +mus_mt_pyre.mid: -E -R50 -G_mt_pyre -V088 +mus_obtain_b_points.mid: -E -R50 -G_b_frontier -V090 -P5 +mus_obtain_badge.mid: -E -R50 -G_fanfare -V090 -P5 +mus_obtain_berry.mid: -E -R50 -G_fanfare -V090 -P5 +mus_obtain_item.mid: -E -R50 -G_fanfare -V090 -P5 +mus_obtain_symbol.mid: -E -R50 -G_b_frontier -V100 -P5 +mus_obtain_tmhm.mid: -E -R50 -G_fanfare -V090 -P5 +mus_oceanic_museum.mid: -E -R50 -G_oceanic_museum -V080 +mus_oldale.mid: -E -R50 -G_oldale -V080 +mus_petalburg_woods.mid: -E -R50 -G_petalburg_woods -V080 +mus_petalburg.mid: -E -R50 -G_petalburg -V080 +mus_poke_center.mid: -E -R50 -G_poke_center -V092 +mus_poke_mart.mid: -E -R50 -G_poke_mart -V085 +mus_rayquaza_appears.mid: -E -R50 -G_rayquaza_appears -V090 +mus_register_match_call.mid: -E -R50 -G_register_match_call -V090 -P5 +mus_rg_berry_pick.mid: -E -R50 -G_rg_game_corner -V090 +mus_rg_caught_intro.mid: -E -R50 -G_rg_caught_intro -V094 -P5 +mus_rg_caught.mid: -E -R50 -G_rg_victory_wild -V100 +mus_rg_celadon.mid: -E -R50 -G_rg_celadon -V070 +mus_rg_cinnabar.mid: -E -R50 -G_rg_cinnabar -V090 +mus_rg_credits.mid: -E -R50 -G_rg_credits -V090 +mus_rg_cycling.mid: -E -R50 -G_rg_cycling -V090 +mus_rg_dex_rating.mid: -E -R50 -G_rg_dex_rating -V070 -P5 +mus_rg_encounter_boy.mid: -E -R50 -G_rg_encounter_boy -V090 +mus_rg_encounter_deoxys.mid: -E -R50 -G_rg_encounter_deoxys -V079 +mus_rg_encounter_girl.mid: -E -R50 -G_rg_encounter_girl -V051 +mus_rg_encounter_gym_leader: -E -R50 -G_rg_encounter_boy -V090 +mus_rg_encounter_rival.mid: -E -R50 -G_rg_encounter_rival -V079 +mus_rg_encounter_rocket.mid: -E -R50 -G_rg_encounter_rocket -V096 +mus_rg_follow_me.mid: -E -R50 -G_rg_follow_me -V068 +mus_rg_fuchsia.mid: -E -R50 -G_rg_fuchsia -V090 +mus_rg_game_corner.mid: -E -R50 -G_rg_game_corner -V090 +mus_rg_game_freak.mid: -E -R50 -G_rg_game_freak -V075 +mus_rg_gym.mid: -E -R50 -G_rg_gym -V090 +mus_rg_hall_of_fame.mid: -E -R50 -G_rg_hall_of_fame -V079 +mus_rg_heal.mid: -E -R50 -G_rg_heal -V090 +mus_rg_intro_fight.mid: -E -R50 -G_rg_intro_fight -V090 +mus_rg_jigglypuff.mid: -E -R50 -G_rg_jigglypuff -V068 -P5 +mus_rg_lavender.mid: -E -R50 -G_rg_lavender -V090 +mus_rg_mt_moon.mid: -E -R50 -G_rg_mt_moon -V090 +mus_rg_mystery_gift.mid: -E -R50 -G_rg_mystery_gift -V100 +mus_rg_net_center.mid: -E -R50 -G_rg_poke_center -V096 +mus_rg_new_game_exit.mid: -E -R50 -G_rg_new_game -V088 +mus_rg_new_game_instruct.mid: -E -R50 -G_rg_new_game -V085 +mus_rg_new_game_intro.mid: -E -R50 -G_rg_new_game -V088 +mus_rg_oak_lab.mid: -E -R50 -G_rg_oak_lab -V075 +mus_rg_oak.mid: -E -R50 -G_rg_oak -V086 +mus_rg_obtain_key_item.mid: -E -R50 -G_rg_obtain_key_item -V077 -P5 +mus_rg_pallet.mid: -E -R50 -G_rg_pallet -V100 +mus_rg_pewter.mid: -E -R50 -G_rg_pewter -V084 +mus_rg_photo.mid: -E -R50 -G_rg_photo -V100 -P5 +mus_rg_poke_center.mid: -E -R50 -G_rg_poke_center -V096 +mus_rg_poke_flute.mid: -E -R50 -G_rg_poke_tower -V048 -P5 +mus_rg_poke_jump.mid: -E -R50 -G_rg_game_corner -V090 +mus_rg_poke_mansion.mid: -E -R50 -G_rg_poke_mansion -V090 +mus_rg_poke_tower.mid: -E -R50 -G_rg_poke_tower -V090 +mus_rg_rival_exit.mid: -E -R50 -G_rg_encounter_rival -V079 +mus_rg_rocket_hideout.mid: -E -R50 -G_rg_rocket_hideout -V090 +mus_rg_route1.mid: -E -R50 -G_rg_route1 -V079 +mus_rg_route3.mid: -E -R50 -G_rg_route3 -V083 +mus_rg_route11.mid: -E -R50 -G_rg_route11 -V090 +mus_rg_route24.mid: -E -R50 -G_rg_route24 -V086 +mus_rg_sevii_45.mid: -E -R50 -G_rg_sevii_45 -V084 +mus_rg_sevii_67.mid: -E -R50 -G_rg_sevii_67 -V084 +mus_rg_sevii_123.mid: -E -R50 -G_rg_pewter -V084 +mus_rg_sevii_cave.mid: -E -R50 -G_rg_mt_moon -V090 +mus_rg_sevii_dungeon.mid: -E -R50 -G_rg_viridian_forest -V090 +mus_rg_sevii_route.mid: -E -R50 -G_rg_sevii_route -V080 +mus_rg_silph.mid: -E -R50 -G_rg_silph -V076 +mus_rg_slow_pallet.mid: -E -R50 -G_rg_pallet -V092 +mus_rg_ss_anne.mid: -E -R50 -G_rg_ss_anne -V090 +mus_rg_surf.mid: -E -R50 -G_rg_surf -V071 +mus_rg_teachy_tv_menu.mid: -E -R50 -G_rg_teachy_tv_menu -V059 +mus_rg_teachy_tv_show.mid: -E -R50 -G_rg_follow_me -V068 +mus_rg_title.mid: -E -R50 -G_rg_title -V090 +mus_rg_trainer_tower.mid: -E -R50 -G_rg_gym -V090 +mus_rg_union_room.mid: -E -R50 -G_rg_game_corner -V090 +mus_rg_vermillion.mid: -E -R50 -G_rg_vermillion -V090 +mus_rg_victory_gym_leader.mid: -E -R50 -G_rg_victory_gym_leader -V090 +mus_rg_victory_road.mid: -E -R50 -G_rg_victory_road -V090 +mus_rg_victory_trainer.mid: -E -R50 -G_rg_victory_trainer -V089 +mus_rg_victory_wild.mid: -E -R50 -G_rg_victory_wild -V090 +mus_rg_viridian_forest.mid: -E -R50 -G_rg_viridian_forest -V090 +mus_rg_vs_champion.mid: -E -R50 -G_rg_vs_champion -V090 +mus_rg_vs_deoxys.mid: -E -R50 -G_rg_vs_deoxys -V080 +mus_rg_vs_gym_leader.mid: -E -R50 -G_rg_vs_gym_leader -V090 +mus_rg_vs_legend.mid: -E -R50 -G_rg_vs_wild -V090 +mus_rg_vs_mewtwo.mid: -E -R50 -G_rg_vs_wild -V090 +mus_rg_vs_trainer.mid: -E -R50 -G_rg_vs_trainer -V090 +mus_rg_vs_wild.mid: -E -R50 -G_rg_vs_wild -V090 +mus_roulette.mid: -E -R50 -G_roulette -V080 +mus_route101.mid: -E -R50 -G_route101 -V080 +mus_route104.mid: -E -R50 -G_route104 -V097 +mus_route110.mid: -E -R50 -G_route110 -V080 +mus_route111.mid: -E -R50 -G_route111 -V076 +mus_route113.mid: -E -R50 -G_route113 -V084 +mus_route119.mid: -E -R50 -G_route119 -V096 +mus_route120.mid: -E -R50 -G_route120 -V080 +mus_route122.mid: -E -R50 -G_route122 -V080 +mus_rustboro.mid: -E -R50 -G_rustboro -V085 +mus_safari_zone.mid: -E -R50 -G_safari_zone -V082 +mus_sailing.mid: -E -R50 -G_sailing -V086 +mus_school.mid: -E -R50 -G_school -V100 +mus_sealed_chamber.mid: -E -R50 -G_sealed_chamber -V100 +mus_slateport.mid: -E -R50 -G_slateport -V070 +mus_slots_jackpot.mid: -E -R50 -G_fanfare -V090 -P5 +mus_slots_win.mid: -E -R50 -G_fanfare -V090 -P5 +mus_sootopolis.mid: -E -R50 -G_sootopolis -V062 +mus_surf.mid: -E -R50 -G_surf -V080 +mus_title.mid: -E -R50 -G_title -V090 +mus_too_bad.mid: -E -R50 -G_fanfare -V090 -P5 +mus_trick_house.mid: -E -R50 -G_trick_house -V070 +mus_underwater.mid: -E -R50 -G_underwater -V094 +mus_verdanturf.mid: -E -R50 -G_verdanturf -V090 +mus_victory_aqua_magma.mid: -E -R50 -G_victory_aqua_magma -V088 +mus_victory_gym_leader.mid: -E -R50 -G_victory_gym_leader -V080 +mus_victory_league.mid: -E -R50 -G_victory_league -V080 +mus_victory_road.mid: -E -R50 -G_victory_road -V076 +mus_victory_trainer.mid: -E -R50 -G_victory_trainer -V091 +mus_victory_wild.mid: -E -R50 -G_victory_wild -V080 +mus_vs_aqua_magma_leader.mid: -E -R50 -G_vs_aqua_magma_leader -V080 -P1 +mus_vs_aqua_magma.mid: -E -R50 -G_vs_aqua_magma -V080 -P1 +mus_vs_champion.mid: -E -R50 -G_vs_champion -V080 -P1 +mus_vs_elite_four.mid: -E -R50 -G_vs_elite_four -V080 -P1 +mus_vs_frontier_brain.mid: -E -R50 -G_vs_frontier_brain -V090 -P1 +mus_vs_gym_leader.mid: -E -R50 -G_vs_gym_leader -V080 -P1 +mus_vs_kyogre_groudon.mid: -E -R50 -G_vs_kyogre_groudon -V080 -P1 +mus_vs_mew.mid: -E -R50 -G_vs_mew -V090 +mus_vs_rayquaza.mid: -E -R50 -G_vs_rayquaza -V080 -P1 +mus_vs_regi.mid: -E -R50 -G_vs_regi -V080 -P1 +mus_vs_rival.mid: -E -R50 -G_vs_rival -V080 -P1 +mus_vs_trainer.mid: -E -R50 -G_vs_trainer -V080 -P1 +mus_vs_wild.mid: -E -R50 -G_vs_wild -V080 -P1 +mus_weather_groudon.mid: -E -R50 -G_weather_groudon -V050 +ph_choice_blend.mid: -E -G_bard -P4 +ph_choice_held.mid: -E -G_bard -P4 +ph_choice_solo.mid: -E -G_bard -P4 +ph_cloth_blend.mid: -E -G_bard -P4 +ph_cloth_held.mid: -E -G_bard -P4 +ph_cloth_solo.mid: -E -G_bard -P4 +ph_cure_blend.mid: -E -G_bard -P4 +ph_cure_held.mid: -E -G_bard -P4 +ph_cure_solo.mid: -E -G_bard -P4 +ph_dress_blend.mid: -E -G_bard -P4 +ph_dress_held.mid: -E -G_bard -P4 +ph_dress_solo.mid: -E -G_bard -P4 +ph_face_blend.mid: -E -G_bard -P4 +ph_face_held.mid: -E -G_bard -P4 +ph_face_solo.mid: -E -G_bard -P4 +ph_fleece_blend.mid: -E -G_bard -P4 +ph_fleece_held.mid: -E -G_bard -P4 +ph_fleece_solo.mid: -E -G_bard -P4 +ph_foot_blend.mid: -E -G_bard -P4 +ph_foot_held.mid: -E -G_bard -P4 +ph_foot_solo.mid: -E -G_bard -P4 +ph_goat_blend.mid: -E -G_bard -P4 +ph_goat_held.mid: -E -G_bard -P4 +ph_goat_solo.mid: -E -G_bard -P4 +ph_goose_blend.mid: -E -G_bard -P4 +ph_goose_held.mid: -E -G_bard -P4 +ph_goose_solo.mid: -E -G_bard -P4 +ph_kit_blend.mid: -E -G_bard -P4 +ph_kit_held.mid: -E -G_bard -P4 +ph_kit_solo.mid: -E -G_bard -P4 +ph_lot_blend.mid: -E -G_bard -P4 +ph_lot_held.mid: -E -G_bard -P4 +ph_lot_solo.mid: -E -G_bard -P4 +ph_mouth_blend.mid: -E -G_bard -P4 +ph_mouth_held.mid: -E -G_bard -P4 +ph_mouth_solo.mid: -E -G_bard -P4 +ph_nurse_blend.mid: -E -G_bard -P4 +ph_nurse_held.mid: -E -G_bard -P4 +ph_nurse_solo.mid: -E -G_bard -P4 +ph_price_blend.mid: -E -G_bard -P4 +ph_price_held.mid: -E -G_bard -P4 +ph_price_solo.mid: -E -G_bard -P4 +ph_strut_blend.mid: -E -G_bard -P4 +ph_strut_held.mid: -E -G_bard -P4 +ph_strut_solo.mid: -E -G_bard -P4 +ph_thought_blend.mid: -E -G_bard -P4 +ph_thought_held.mid: -E -G_bard -P4 +ph_thought_solo.mid: -E -G_bard -P4 +ph_trap_blend.mid: -E -G_bard -P4 +ph_trap_held.mid: -E -G_bard -P4 +ph_trap_solo.mid: -E -G_bard -P4 +se_a.mid: -E -R50 -G_rs_sfx_2 -V095 -P4 +se_applause.mid: -E -R50 -G_rs_sfx_2 -V100 -P5 +se_arena_timeup1.mid: -E -R50 -G_frlg_sfx -P5 +se_arena_timeup2.mid: -E -R50 -G_frlg_sfx -P5 +se_ball_bounce_1.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_ball_bounce_2.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_ball_bounce_3.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_ball_bounce_4.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_ball_open.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_ball_throw.mid: -E -R50 -G_rs_sfx_2 -V120 -P5 +se_ball_trade.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_ball_tray_ball.mid: -E -R50 -G_rs_sfx_2 -V110 -P5 +se_ball_tray_enter.mid: -E -R50 -G_rs_sfx_2 -V110 -P5 +se_ball_tray_exit.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_ball.mid: -E -R50 -G_rs_sfx_1 -V070 -P4 +se_balloon_blue.mid: -E -R50 -G_rs_sfx_2 -V105 -P4 +se_balloon_red.mid: -E -R50 -G_rs_sfx_2 -V105 -P4 +se_balloon_yellow.mid: -E -R50 -G_rs_sfx_2 -V105 -P4 +se_bang.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_berry_blender.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_bike_bell.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_bike_hop.mid: -E -R50 -G_rs_sfx_1 -V090 -P4 +se_boo.mid: -E -R50 -G_rs_sfx_1 -V110 -P4 +se_breakable_door.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_bridge_walk.mid: -E -R50 -G_rs_sfx_2 -V095 -P4 +se_card.mid: -E -R50 -G_rs_sfx_1 -V100 -P4 +se_click.mid: -E -R50 -G_rs_sfx_1 -V110 -P4 +se_contest_condition_lose.mid: -E -R50 -G_rs_sfx_1 -V110 -P4 +se_contest_curtain_fall.mid: -E -R50 -G_rs_sfx_2 -V070 -P5 +se_contest_curtain_rise.mid: -E -R50 -G_rs_sfx_2 -V070 -P5 +se_contest_heart.mid: -E -R50 -G_rs_sfx_2 -V090 -P5 +se_contest_icon_change.mid: -E -R50 -G_rs_sfx_2 -V110 -P5 +se_contest_icon_clear.mid: -E -R50 -G_rs_sfx_2 -V090 -P5 +se_contest_mons_turn.mid: -E -R50 -G_rs_sfx_2 -V090 -P5 +se_contest_place.mid: -E -R50 -G_rs_sfx_1 -V110 -P4 +se_dex_search.mid: -E -R50 -G_rs_sfx_1 -v100 -P5 +se_ding_dong.mid: -E -R50 -G_rs_sfx_1 -V090 -P5 +se_door.mid: -E -R50 -G_rs_sfx_1 -V080 -P5 +se_downpour_stop.mid: -E -R50 -G_rs_sfx_2 -V100 -P2 +se_downpour.mid: -E -R50 -G_rs_sfx_2 -V100 -P2 +se_e.mid: -E -R50 -G_rs_sfx_2 -V120 -P4 +se_effective.mid: -E -R50 -G_rs_sfx_1 -V110 -P5 +se_egg_hatch.mid: -E -R50 -G_rs_sfx_2 -V120 -P5 +se_elevator.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_escalator.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_exit.mid: -E -R50 -G_rs_sfx_1 -V120 -P5 +se_exp_max.mid: -E -R50 -G_rs_sfx_2 -V094 -P5 +se_exp.mid: -E -R50 -G_rs_sfx_1 -V080 -P5 +se_failure.mid: -E -R50 -G_rs_sfx_1 -V120 -P4 +se_faint.mid: -E -R50 -G_rs_sfx_1 -V110 -P5 +se_fall.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_field_poison.mid: -E -R50 -G_rs_sfx_1 -V110 -P5 +se_flee.mid: -E -R50 -G_rs_sfx_1 -V090 -P5 +se_fu_zaku.mid: -E -R50 -G_rs_sfx_1 -V120 -P4 +se_glass_flute.mid: -E -R50 -G_rs_sfx_2 -V105 -P5 +se_i.mid: -E -R50 -G_rs_sfx_2 -V120 -P4 +se_ice_break.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_ice_crack.mid: -E -R50 -G_rs_sfx_1 -V100 -P4 +se_ice_stairs.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_intro_blast.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_itemfinder.mid: -E -R50 -G_rs_sfx_1 -V090 -P5 +se_lavaridge_fall_warp.mid: -E -R50 -G_rs_sfx_1 -P4 +se_ledge.mid: -E -R50 -G_rs_sfx_1 -V100 -P4 +se_low_health.mid: -E -R50 -G_rs_sfx_1 -V100 -P3 +se_m_bind.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_m_comet_punch.mid: -E -R50 -G_rs_sfx_2 -V120 -P4 +se_m_cut.mid: -E -R50 -G_rs_sfx_2 -V120 -P4 +se_m_double_slap.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_fire_punch.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_fly.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_gust.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_gust2.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_headbutt.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_horn_attack.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_jump_kick.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_leer.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_mega_kick.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_m_mega_kick2.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_pay_day.mid: -E -R50 -G_rs_sfx_2 -V095 -P4 +se_m_razor_wind.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_razor_wind2.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_m_sand_attack.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_scratch.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_swords_dance.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_m_tail_whip.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_take_down.mid: -E -R50 -G_rs_sfx_2 -V105 -P4 +se_m_vicegrip.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_m_wing_attack.mid: -E -R50 -G_rs_sfx_2 -V105 -P4 +se_mud_ball.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_mugshot.mid: -E -R50 -G_rs_sfx_2 -V090 -P5 +se_n.mid: -E -R50 -G_rs_sfx_2 -P4 +se_not_effective.mid: -E -R50 -G_rs_sfx_1 -V110 -P5 +se_note_a.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_b.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_c_high.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_c.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_d.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_e.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_f.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_note_g.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_o.mid: -E -R50 -G_rs_sfx_2 -V120 -P4 +se_orb.mid: -E -R50 -G_rs_sfx_2 -V100 -P5 +se_pc_login.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_pc_off.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_pc_on.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_pike_curtain_close.mid: -E -R50 -G_frlg_sfx -P5 +se_pike_curtain_open.mid: -E -R50 -G_frlg_sfx -P5 +se_pin.mid: -E -R50 -G_rs_sfx_1 -V060 -P4 +se_pokenav_call.mid: -E -R50 -G_frlg_sfx -V120 -P5 +se_pokenav_hang_up.mid: -E -R50 -G_frlg_sfx -V110 -P5 +se_pokenav_off.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_pokenav_on.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_puddle.mid: -E -R50 -G_rs_sfx_2 -V020 -P4 +se_rain_stop.mid: -E -R50 -G_rs_sfx_2 -V080 -P2 +se_rain.mid: -E -R50 -G_rs_sfx_2 -V080 -P2 +se_repel.mid: -E -R50 -G_rs_sfx_1 -V090 -P4 +se_rg_bag_cursor.mid: -E -R50 -G_frlg_sfx -P5 +se_rg_bag_pocket.mid: -E -R50 -G_frlg_sfx -P5 +se_rg_ball_click.mid: -E -R50 -G_frlg_sfx -V100 -P5 +se_rg_card_flip.mid: -E -R50 -G_frlg_sfx -P5 +se_rg_card_flipping.mid: -E -R50 -G_frlg_sfx -P5 +se_rg_card_open.mid: -E -R50 -G_frlg_sfx -V112 -P5 +se_rg_deoxys_move.mid: -E -R50 -G_frlg_sfx -V080 -P5 +se_rg_door.mid: -E -R50 -G_frlg_sfx -V100 -P5 +se_rg_help_close.mid: -E -R50 -G_frlg_sfx -V095 -P5 +se_rg_help_error.mid: -E -R50 -G_frlg_sfx -V125 -P5 +se_rg_help_open.mid: -E -R50 -G_frlg_sfx -V096 -P5 +se_rg_poke_jump_failure.mid: -E -R50 -G_rs_sfx_1 -P5 +se_rg_poke_jump_success.mid: -E -R50 -G_rs_sfx_2 -V110 -P5 +se_rg_shop.mid: -E -R50 -G_frlg_sfx -V080 -P5 +se_rg_ss_anne_horn.mid: -E -R50 -G_frlg_sfx -V096 -P5 +se_rotating_gate.mid: -E -R50 -G_rs_sfx_2 -V090 -P4 +se_roulette_ball.mid: -E -R50 -G_rs_sfx_2 -V110 -P2 +se_roulette_ball2.mid: -E -R50 -G_rs_sfx_2 -V110 -P2 +se_save.mid: -E -R50 -G_rs_sfx_2 -V080 -P5 +se_select.mid: -E -R50 -G_rs_sfx_1 -V080 -P5 +se_shiny.mid: -E -R50 -G_rs_sfx_2 -V095 -P5 +se_ship.mid: -E -R50 -G_rs_sfx_1 -V075 -P4 +se_shop.mid: -E -R50 -G_rs_sfx_1 -V090 -P5 +se_sliding_door.mid: -E -R50 -G_rs_sfx_2 -V095 -P4 +se_success.mid: -E -R50 -G_rs_sfx_1 -V080 -P4 +se_sudowoodo_shake.mid: -E -R50 -G_frlg_sfx -V077 -P5 +se_super_effective.mid: -E -R50 -G_rs_sfx_1 -V110 -P5 +se_switch.mid: -E -R50 -G_rs_sfx_1 -V100 -P4 +se_taillow_wing_flap.mid: -E -R50 -G_rs_sfx_2 -V105 -P5 +se_thunder.mid: -E -R50 -G_rs_sfx_2 -V110 -P3 +se_thunder2.mid: -E -R50 -G_rs_sfx_2 -V110 -P3 +se_thunderstorm_stop.mid: -E -R50 -G_rs_sfx_2 -V080 -P2 +se_thunderstorm.mid: -E -R50 -G_rs_sfx_2 -V080 -P2 +se_truck_door.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_truck_move.mid: -E -R50 -G_rs_sfx_2 -P4 +se_truck_stop.mid: -E -R50 -G_rs_sfx_2 -P4 +se_truck_unload.mid: -E -R50 -G_rs_sfx_1 -P4 +se_u.mid: -E -R50 -G_rs_sfx_2 -P4 +se_unlock.mid: -E -R50 -G_rs_sfx_2 -V100 -P4 +se_use_item.mid: -E -R50 -G_rs_sfx_1 -V100 -P5 +se_vend.mid: -E -R50 -G_rs_sfx_2 -V110 -P4 +se_warp_in.mid: -E -R50 -G_rs_sfx_1 -V090 -P4 +se_warp_out.mid: -E -R50 -G_rs_sfx_1 -V090 -P4 diff --git a/sound/songs/se_dex_page.s b/sound/songs/se_dex_page.s index 884f0d12a5..314d11d9fb 100644 --- a/sound/songs/se_dex_page.s +++ b/sound/songs/se_dex_page.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_dex_page_grp, voicegroup127 + .equ se_dex_page_grp, voicegroup_rs_sfx_1 .equ se_dex_page_pri, 5 .equ se_dex_page_rev, reverb_set+50 .equ se_dex_page_mvl, 127 diff --git a/sound/songs/se_dex_scroll.s b/sound/songs/se_dex_scroll.s index 6c7ad77461..6ea8f4783d 100644 --- a/sound/songs/se_dex_scroll.s +++ b/sound/songs/se_dex_scroll.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_dex_scroll_grp, voicegroup127 + .equ se_dex_scroll_grp, voicegroup_rs_sfx_1 .equ se_dex_scroll_pri, 5 .equ se_dex_scroll_rev, reverb_set+50 .equ se_dex_scroll_mvl, 127 diff --git a/sound/songs/se_m_absorb.s b/sound/songs/se_m_absorb.s index 6cd6223664..46b7e1fa20 100644 --- a/sound/songs/se_m_absorb.s +++ b/sound/songs/se_m_absorb.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_absorb_grp, voicegroup128 + .equ se_m_absorb_grp, voicegroup_rs_sfx_2 .equ se_m_absorb_pri, 4 .equ se_m_absorb_rev, reverb_set+50 .equ se_m_absorb_mvl, 127 diff --git a/sound/songs/se_m_absorb_2.s b/sound/songs/se_m_absorb_2.s index 6192013338..54166d9673 100644 --- a/sound/songs/se_m_absorb_2.s +++ b/sound/songs/se_m_absorb_2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_absorb_2_grp, voicegroup128 + .equ se_m_absorb_2_grp, voicegroup_rs_sfx_2 .equ se_m_absorb_2_pri, 4 .equ se_m_absorb_2_rev, reverb_set+50 .equ se_m_absorb_2_mvl, 127 diff --git a/sound/songs/se_m_acid_armor.s b/sound/songs/se_m_acid_armor.s index 346c766047..31f94275a7 100644 --- a/sound/songs/se_m_acid_armor.s +++ b/sound/songs/se_m_acid_armor.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_acid_armor_grp, voicegroup128 + .equ se_m_acid_armor_grp, voicegroup_rs_sfx_2 .equ se_m_acid_armor_pri, 4 .equ se_m_acid_armor_rev, reverb_set+50 .equ se_m_acid_armor_mvl, 127 diff --git a/sound/songs/se_m_attract.s b/sound/songs/se_m_attract.s index 8e18c16dce..ede9f4dd82 100644 --- a/sound/songs/se_m_attract.s +++ b/sound/songs/se_m_attract.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_attract_grp, voicegroup128 + .equ se_m_attract_grp, voicegroup_rs_sfx_2 .equ se_m_attract_pri, 4 .equ se_m_attract_rev, reverb_set+50 .equ se_m_attract_mvl, 127 diff --git a/sound/songs/se_m_attract2.s b/sound/songs/se_m_attract2.s index 9b846f13e4..ddcd230297 100644 --- a/sound/songs/se_m_attract2.s +++ b/sound/songs/se_m_attract2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_attract2_grp, voicegroup128 + .equ se_m_attract2_grp, voicegroup_rs_sfx_2 .equ se_m_attract2_pri, 4 .equ se_m_attract2_rev, reverb_set+50 .equ se_m_attract2_mvl, 127 diff --git a/sound/songs/se_m_barrier.s b/sound/songs/se_m_barrier.s index 54d57700f0..ebf6ddccb9 100644 --- a/sound/songs/se_m_barrier.s +++ b/sound/songs/se_m_barrier.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_barrier_grp, voicegroup128 + .equ se_m_barrier_grp, voicegroup_rs_sfx_2 .equ se_m_barrier_pri, 4 .equ se_m_barrier_rev, reverb_set+50 .equ se_m_barrier_mvl, 127 diff --git a/sound/songs/se_m_baton_pass.s b/sound/songs/se_m_baton_pass.s index 30027e5b68..ec8ddd542a 100644 --- a/sound/songs/se_m_baton_pass.s +++ b/sound/songs/se_m_baton_pass.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_baton_pass_grp, voicegroup128 + .equ se_m_baton_pass_grp, voicegroup_rs_sfx_2 .equ se_m_baton_pass_pri, 4 .equ se_m_baton_pass_rev, reverb_set+50 .equ se_m_baton_pass_mvl, 127 diff --git a/sound/songs/se_m_belly_drum.s b/sound/songs/se_m_belly_drum.s index 919c02b16c..5b5508ed41 100644 --- a/sound/songs/se_m_belly_drum.s +++ b/sound/songs/se_m_belly_drum.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_belly_drum_grp, voicegroup128 + .equ se_m_belly_drum_grp, voicegroup_rs_sfx_2 .equ se_m_belly_drum_pri, 4 .equ se_m_belly_drum_rev, reverb_set+50 .equ se_m_belly_drum_mvl, 127 diff --git a/sound/songs/se_m_bite.s b/sound/songs/se_m_bite.s index 15d690e2e8..c01e160c1a 100644 --- a/sound/songs/se_m_bite.s +++ b/sound/songs/se_m_bite.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bite_grp, voicegroup128 + .equ se_m_bite_grp, voicegroup_rs_sfx_2 .equ se_m_bite_pri, 4 .equ se_m_bite_rev, reverb_set+50 .equ se_m_bite_mvl, 127 diff --git a/sound/songs/se_m_blizzard.s b/sound/songs/se_m_blizzard.s index 6bce3c9872..a274da2211 100644 --- a/sound/songs/se_m_blizzard.s +++ b/sound/songs/se_m_blizzard.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_blizzard_grp, voicegroup128 + .equ se_m_blizzard_grp, voicegroup_rs_sfx_2 .equ se_m_blizzard_pri, 4 .equ se_m_blizzard_rev, reverb_set+50 .equ se_m_blizzard_mvl, 127 diff --git a/sound/songs/se_m_blizzard2.s b/sound/songs/se_m_blizzard2.s index 8c1518e637..2940d80d52 100644 --- a/sound/songs/se_m_blizzard2.s +++ b/sound/songs/se_m_blizzard2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_blizzard2_grp, voicegroup128 + .equ se_m_blizzard2_grp, voicegroup_rs_sfx_2 .equ se_m_blizzard2_pri, 4 .equ se_m_blizzard2_rev, reverb_set+50 .equ se_m_blizzard2_mvl, 127 diff --git a/sound/songs/se_m_bonemerang.s b/sound/songs/se_m_bonemerang.s index 9339809364..16f170b76b 100644 --- a/sound/songs/se_m_bonemerang.s +++ b/sound/songs/se_m_bonemerang.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bonemerang_grp, voicegroup128 + .equ se_m_bonemerang_grp, voicegroup_rs_sfx_2 .equ se_m_bonemerang_pri, 4 .equ se_m_bonemerang_rev, reverb_set+50 .equ se_m_bonemerang_mvl, 127 diff --git a/sound/songs/se_m_brick_break.s b/sound/songs/se_m_brick_break.s index ce13218d24..2270fc24b5 100644 --- a/sound/songs/se_m_brick_break.s +++ b/sound/songs/se_m_brick_break.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_brick_break_grp, voicegroup128 + .equ se_m_brick_break_grp, voicegroup_rs_sfx_2 .equ se_m_brick_break_pri, 4 .equ se_m_brick_break_rev, reverb_set+50 .equ se_m_brick_break_mvl, 127 diff --git a/sound/songs/se_m_bubble.s b/sound/songs/se_m_bubble.s index 4e1b988d59..9c7fb6fadd 100644 --- a/sound/songs/se_m_bubble.s +++ b/sound/songs/se_m_bubble.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bubble_grp, voicegroup128 + .equ se_m_bubble_grp, voicegroup_rs_sfx_2 .equ se_m_bubble_pri, 4 .equ se_m_bubble_rev, reverb_set+50 .equ se_m_bubble_mvl, 127 diff --git a/sound/songs/se_m_bubble2.s b/sound/songs/se_m_bubble2.s index 97e7cbbf85..1b009672bf 100644 --- a/sound/songs/se_m_bubble2.s +++ b/sound/songs/se_m_bubble2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bubble2_grp, voicegroup128 + .equ se_m_bubble2_grp, voicegroup_rs_sfx_2 .equ se_m_bubble2_pri, 4 .equ se_m_bubble2_rev, reverb_set+50 .equ se_m_bubble2_mvl, 127 diff --git a/sound/songs/se_m_bubble3.s b/sound/songs/se_m_bubble3.s index d9a7f1e82b..ea4c1e6fd4 100644 --- a/sound/songs/se_m_bubble3.s +++ b/sound/songs/se_m_bubble3.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bubble3_grp, voicegroup128 + .equ se_m_bubble3_grp, voicegroup_rs_sfx_2 .equ se_m_bubble3_pri, 4 .equ se_m_bubble3_rev, reverb_set+50 .equ se_m_bubble3_mvl, 127 diff --git a/sound/songs/se_m_bubble_beam.s b/sound/songs/se_m_bubble_beam.s index 621882b03f..b1eac882b7 100644 --- a/sound/songs/se_m_bubble_beam.s +++ b/sound/songs/se_m_bubble_beam.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bubble_beam_grp, voicegroup128 + .equ se_m_bubble_beam_grp, voicegroup_rs_sfx_2 .equ se_m_bubble_beam_pri, 4 .equ se_m_bubble_beam_rev, reverb_set+50 .equ se_m_bubble_beam_mvl, 127 diff --git a/sound/songs/se_m_bubble_beam2.s b/sound/songs/se_m_bubble_beam2.s index 0e8cbf5e41..970ef02897 100644 --- a/sound/songs/se_m_bubble_beam2.s +++ b/sound/songs/se_m_bubble_beam2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_bubble_beam2_grp, voicegroup128 + .equ se_m_bubble_beam2_grp, voicegroup_rs_sfx_2 .equ se_m_bubble_beam2_pri, 4 .equ se_m_bubble_beam2_rev, reverb_set+50 .equ se_m_bubble_beam2_mvl, 127 diff --git a/sound/songs/se_m_charge.s b/sound/songs/se_m_charge.s index 47d70a4bff..1ad07164f6 100644 --- a/sound/songs/se_m_charge.s +++ b/sound/songs/se_m_charge.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_charge_grp, voicegroup128 + .equ se_m_charge_grp, voicegroup_rs_sfx_2 .equ se_m_charge_pri, 4 .equ se_m_charge_rev, reverb_set+50 .equ se_m_charge_mvl, 127 diff --git a/sound/songs/se_m_charm.s b/sound/songs/se_m_charm.s index 2bb2e0ef37..9d27f1445a 100644 --- a/sound/songs/se_m_charm.s +++ b/sound/songs/se_m_charm.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_charm_grp, voicegroup128 + .equ se_m_charm_grp, voicegroup_rs_sfx_2 .equ se_m_charm_pri, 4 .equ se_m_charm_rev, reverb_set+50 .equ se_m_charm_mvl, 127 diff --git a/sound/songs/se_m_confuse_ray.s b/sound/songs/se_m_confuse_ray.s index 78407b8c11..e856fe495a 100644 --- a/sound/songs/se_m_confuse_ray.s +++ b/sound/songs/se_m_confuse_ray.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_confuse_ray_grp, voicegroup128 + .equ se_m_confuse_ray_grp, voicegroup_rs_sfx_2 .equ se_m_confuse_ray_pri, 4 .equ se_m_confuse_ray_rev, reverb_set+50 .equ se_m_confuse_ray_mvl, 127 diff --git a/sound/songs/se_m_cosmic_power.s b/sound/songs/se_m_cosmic_power.s index 3e3f53c5ec..3779ea9683 100644 --- a/sound/songs/se_m_cosmic_power.s +++ b/sound/songs/se_m_cosmic_power.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_cosmic_power_grp, voicegroup128 + .equ se_m_cosmic_power_grp, voicegroup_rs_sfx_2 .equ se_m_cosmic_power_pri, 4 .equ se_m_cosmic_power_rev, reverb_set+50 .equ se_m_cosmic_power_mvl, 127 diff --git a/sound/songs/se_m_crabhammer.s b/sound/songs/se_m_crabhammer.s index 6333150dc7..c629edc99c 100644 --- a/sound/songs/se_m_crabhammer.s +++ b/sound/songs/se_m_crabhammer.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_crabhammer_grp, voicegroup128 + .equ se_m_crabhammer_grp, voicegroup_rs_sfx_2 .equ se_m_crabhammer_pri, 4 .equ se_m_crabhammer_rev, reverb_set+50 .equ se_m_crabhammer_mvl, 127 diff --git a/sound/songs/se_m_detect.s b/sound/songs/se_m_detect.s index f06802802a..82196bb2d9 100644 --- a/sound/songs/se_m_detect.s +++ b/sound/songs/se_m_detect.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_detect_grp, voicegroup128 + .equ se_m_detect_grp, voicegroup_rs_sfx_2 .equ se_m_detect_pri, 4 .equ se_m_detect_rev, reverb_set+50 .equ se_m_detect_mvl, 127 diff --git a/sound/songs/se_m_dig.s b/sound/songs/se_m_dig.s index f8d3597d95..be16d77ac5 100644 --- a/sound/songs/se_m_dig.s +++ b/sound/songs/se_m_dig.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_dig_grp, voicegroup128 + .equ se_m_dig_grp, voicegroup_rs_sfx_2 .equ se_m_dig_pri, 4 .equ se_m_dig_rev, reverb_set+50 .equ se_m_dig_mvl, 127 diff --git a/sound/songs/se_m_dive.s b/sound/songs/se_m_dive.s index 83cc423564..879c41eefc 100644 --- a/sound/songs/se_m_dive.s +++ b/sound/songs/se_m_dive.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_dive_grp, voicegroup128 + .equ se_m_dive_grp, voicegroup_rs_sfx_2 .equ se_m_dive_pri, 4 .equ se_m_dive_rev, reverb_set+50 .equ se_m_dive_mvl, 127 diff --git a/sound/songs/se_m_dizzy_punch.s b/sound/songs/se_m_dizzy_punch.s index 31ab74a77f..ccd2a6c956 100644 --- a/sound/songs/se_m_dizzy_punch.s +++ b/sound/songs/se_m_dizzy_punch.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_dizzy_punch_grp, voicegroup128 + .equ se_m_dizzy_punch_grp, voicegroup_rs_sfx_2 .equ se_m_dizzy_punch_pri, 4 .equ se_m_dizzy_punch_rev, reverb_set+50 .equ se_m_dizzy_punch_mvl, 127 diff --git a/sound/songs/se_m_double_team.s b/sound/songs/se_m_double_team.s index 49bcfb13d3..3efab79b04 100644 --- a/sound/songs/se_m_double_team.s +++ b/sound/songs/se_m_double_team.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_double_team_grp, voicegroup128 + .equ se_m_double_team_grp, voicegroup_rs_sfx_2 .equ se_m_double_team_pri, 4 .equ se_m_double_team_rev, reverb_set+50 .equ se_m_double_team_mvl, 127 diff --git a/sound/songs/se_m_dragon_rage.s b/sound/songs/se_m_dragon_rage.s index 608d926115..3a0675c03a 100644 --- a/sound/songs/se_m_dragon_rage.s +++ b/sound/songs/se_m_dragon_rage.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_dragon_rage_grp, voicegroup128 + .equ se_m_dragon_rage_grp, voicegroup_rs_sfx_2 .equ se_m_dragon_rage_pri, 4 .equ se_m_dragon_rage_rev, reverb_set+50 .equ se_m_dragon_rage_mvl, 127 diff --git a/sound/songs/se_m_earthquake.s b/sound/songs/se_m_earthquake.s index 928ddfacd8..76c40d88ca 100644 --- a/sound/songs/se_m_earthquake.s +++ b/sound/songs/se_m_earthquake.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_earthquake_grp, voicegroup128 + .equ se_m_earthquake_grp, voicegroup_rs_sfx_2 .equ se_m_earthquake_pri, 4 .equ se_m_earthquake_rev, reverb_set+50 .equ se_m_earthquake_mvl, 127 diff --git a/sound/songs/se_m_ember.s b/sound/songs/se_m_ember.s index a685ca24c9..010ffaaf1a 100644 --- a/sound/songs/se_m_ember.s +++ b/sound/songs/se_m_ember.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_ember_grp, voicegroup128 + .equ se_m_ember_grp, voicegroup_rs_sfx_2 .equ se_m_ember_pri, 4 .equ se_m_ember_rev, reverb_set+50 .equ se_m_ember_mvl, 127 diff --git a/sound/songs/se_m_encore.s b/sound/songs/se_m_encore.s index cf13ab7618..0f212febb3 100644 --- a/sound/songs/se_m_encore.s +++ b/sound/songs/se_m_encore.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_encore_grp, voicegroup128 + .equ se_m_encore_grp, voicegroup_rs_sfx_2 .equ se_m_encore_pri, 4 .equ se_m_encore_rev, reverb_set+50 .equ se_m_encore_mvl, 127 diff --git a/sound/songs/se_m_encore2.s b/sound/songs/se_m_encore2.s index 61e522acac..86ebb5585b 100644 --- a/sound/songs/se_m_encore2.s +++ b/sound/songs/se_m_encore2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_encore2_grp, voicegroup128 + .equ se_m_encore2_grp, voicegroup_rs_sfx_2 .equ se_m_encore2_pri, 4 .equ se_m_encore2_rev, reverb_set+50 .equ se_m_encore2_mvl, 127 diff --git a/sound/songs/se_m_explosion.s b/sound/songs/se_m_explosion.s index 039c563f78..b0f98c6f40 100644 --- a/sound/songs/se_m_explosion.s +++ b/sound/songs/se_m_explosion.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_explosion_grp, voicegroup128 + .equ se_m_explosion_grp, voicegroup_rs_sfx_2 .equ se_m_explosion_pri, 4 .equ se_m_explosion_rev, reverb_set+50 .equ se_m_explosion_mvl, 127 diff --git a/sound/songs/se_m_faint_attack.s b/sound/songs/se_m_faint_attack.s index ce53c7173e..2011e58b4e 100644 --- a/sound/songs/se_m_faint_attack.s +++ b/sound/songs/se_m_faint_attack.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_faint_attack_grp, voicegroup128 + .equ se_m_faint_attack_grp, voicegroup_rs_sfx_2 .equ se_m_faint_attack_pri, 4 .equ se_m_faint_attack_rev, reverb_set+50 .equ se_m_faint_attack_mvl, 127 diff --git a/sound/songs/se_m_flame_wheel.s b/sound/songs/se_m_flame_wheel.s index 797073466a..f722ae3200 100644 --- a/sound/songs/se_m_flame_wheel.s +++ b/sound/songs/se_m_flame_wheel.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_flame_wheel_grp, voicegroup128 + .equ se_m_flame_wheel_grp, voicegroup_rs_sfx_2 .equ se_m_flame_wheel_pri, 4 .equ se_m_flame_wheel_rev, reverb_set+50 .equ se_m_flame_wheel_mvl, 127 diff --git a/sound/songs/se_m_flame_wheel2.s b/sound/songs/se_m_flame_wheel2.s index 21f911b0ba..09413e52aa 100644 --- a/sound/songs/se_m_flame_wheel2.s +++ b/sound/songs/se_m_flame_wheel2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_flame_wheel2_grp, voicegroup128 + .equ se_m_flame_wheel2_grp, voicegroup_rs_sfx_2 .equ se_m_flame_wheel2_pri, 4 .equ se_m_flame_wheel2_rev, reverb_set+50 .equ se_m_flame_wheel2_mvl, 127 diff --git a/sound/songs/se_m_flamethrower.s b/sound/songs/se_m_flamethrower.s index 4c0c892c1e..0536ae19fd 100644 --- a/sound/songs/se_m_flamethrower.s +++ b/sound/songs/se_m_flamethrower.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_flamethrower_grp, voicegroup128 + .equ se_m_flamethrower_grp, voicegroup_rs_sfx_2 .equ se_m_flamethrower_pri, 4 .equ se_m_flamethrower_rev, reverb_set+50 .equ se_m_flamethrower_mvl, 127 diff --git a/sound/songs/se_m_flatter.s b/sound/songs/se_m_flatter.s index 799fdba912..b6484bbf4f 100644 --- a/sound/songs/se_m_flatter.s +++ b/sound/songs/se_m_flatter.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_flatter_grp, voicegroup128 + .equ se_m_flatter_grp, voicegroup_rs_sfx_2 .equ se_m_flatter_pri, 4 .equ se_m_flatter_rev, reverb_set+50 .equ se_m_flatter_mvl, 127 diff --git a/sound/songs/se_m_giga_drain.s b/sound/songs/se_m_giga_drain.s index 4596a0252c..de8f951755 100644 --- a/sound/songs/se_m_giga_drain.s +++ b/sound/songs/se_m_giga_drain.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_giga_drain_grp, voicegroup128 + .equ se_m_giga_drain_grp, voicegroup_rs_sfx_2 .equ se_m_giga_drain_pri, 4 .equ se_m_giga_drain_rev, reverb_set+50 .equ se_m_giga_drain_mvl, 127 diff --git a/sound/songs/se_m_grasswhistle.s b/sound/songs/se_m_grasswhistle.s index 10c7447873..384908fd8a 100644 --- a/sound/songs/se_m_grasswhistle.s +++ b/sound/songs/se_m_grasswhistle.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_grasswhistle_grp, voicegroup128 + .equ se_m_grasswhistle_grp, voicegroup_rs_sfx_2 .equ se_m_grasswhistle_pri, 4 .equ se_m_grasswhistle_rev, reverb_set+50 .equ se_m_grasswhistle_mvl, 127 diff --git a/sound/songs/se_m_hail.s b/sound/songs/se_m_hail.s index 7f1d1c67da..46b25141b6 100644 --- a/sound/songs/se_m_hail.s +++ b/sound/songs/se_m_hail.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_hail_grp, voicegroup128 + .equ se_m_hail_grp, voicegroup_rs_sfx_2 .equ se_m_hail_pri, 4 .equ se_m_hail_rev, reverb_set+50 .equ se_m_hail_mvl, 127 diff --git a/sound/songs/se_m_harden.s b/sound/songs/se_m_harden.s index e9bd888de8..2171a3e067 100644 --- a/sound/songs/se_m_harden.s +++ b/sound/songs/se_m_harden.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_harden_grp, voicegroup128 + .equ se_m_harden_grp, voicegroup_rs_sfx_2 .equ se_m_harden_pri, 4 .equ se_m_harden_rev, reverb_set+50 .equ se_m_harden_mvl, 127 diff --git a/sound/songs/se_m_haze.s b/sound/songs/se_m_haze.s index 11497c8465..fb134ff042 100644 --- a/sound/songs/se_m_haze.s +++ b/sound/songs/se_m_haze.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_haze_grp, voicegroup128 + .equ se_m_haze_grp, voicegroup_rs_sfx_2 .equ se_m_haze_pri, 4 .equ se_m_haze_rev, reverb_set+50 .equ se_m_haze_mvl, 127 diff --git a/sound/songs/se_m_heal_bell.s b/sound/songs/se_m_heal_bell.s index fbe315c878..407af374fb 100644 --- a/sound/songs/se_m_heal_bell.s +++ b/sound/songs/se_m_heal_bell.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_heal_bell_grp, voicegroup128 + .equ se_m_heal_bell_grp, voicegroup_rs_sfx_2 .equ se_m_heal_bell_pri, 4 .equ se_m_heal_bell_rev, reverb_set+50 .equ se_m_heal_bell_mvl, 127 diff --git a/sound/songs/se_m_heat_wave.s b/sound/songs/se_m_heat_wave.s index da5842f8f8..5430cd4cad 100644 --- a/sound/songs/se_m_heat_wave.s +++ b/sound/songs/se_m_heat_wave.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_heat_wave_grp, voicegroup128 + .equ se_m_heat_wave_grp, voicegroup_rs_sfx_2 .equ se_m_heat_wave_pri, 4 .equ se_m_heat_wave_rev, reverb_set+50 .equ se_m_heat_wave_mvl, 127 diff --git a/sound/songs/se_m_hydro_pump.s b/sound/songs/se_m_hydro_pump.s index c214985e47..93f8459ec1 100644 --- a/sound/songs/se_m_hydro_pump.s +++ b/sound/songs/se_m_hydro_pump.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_hydro_pump_grp, voicegroup128 + .equ se_m_hydro_pump_grp, voicegroup_rs_sfx_2 .equ se_m_hydro_pump_pri, 4 .equ se_m_hydro_pump_rev, reverb_set+50 .equ se_m_hydro_pump_mvl, 127 diff --git a/sound/songs/se_m_hyper_beam.s b/sound/songs/se_m_hyper_beam.s index b6ffcfc2f7..34e49ac460 100644 --- a/sound/songs/se_m_hyper_beam.s +++ b/sound/songs/se_m_hyper_beam.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_hyper_beam_grp, voicegroup128 + .equ se_m_hyper_beam_grp, voicegroup_rs_sfx_2 .equ se_m_hyper_beam_pri, 4 .equ se_m_hyper_beam_rev, reverb_set+50 .equ se_m_hyper_beam_mvl, 127 diff --git a/sound/songs/se_m_hyper_beam2.s b/sound/songs/se_m_hyper_beam2.s index fb21834222..0fffa797c6 100644 --- a/sound/songs/se_m_hyper_beam2.s +++ b/sound/songs/se_m_hyper_beam2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_hyper_beam2_grp, voicegroup128 + .equ se_m_hyper_beam2_grp, voicegroup_rs_sfx_2 .equ se_m_hyper_beam2_pri, 4 .equ se_m_hyper_beam2_rev, reverb_set+50 .equ se_m_hyper_beam2_mvl, 127 diff --git a/sound/songs/se_m_icy_wind.s b/sound/songs/se_m_icy_wind.s index b7e83e0321..dff7f59487 100644 --- a/sound/songs/se_m_icy_wind.s +++ b/sound/songs/se_m_icy_wind.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_icy_wind_grp, voicegroup128 + .equ se_m_icy_wind_grp, voicegroup_rs_sfx_2 .equ se_m_icy_wind_pri, 4 .equ se_m_icy_wind_rev, reverb_set+50 .equ se_m_icy_wind_mvl, 127 diff --git a/sound/songs/se_m_lick.s b/sound/songs/se_m_lick.s index 1aa0c35a28..34f9cbfbbe 100644 --- a/sound/songs/se_m_lick.s +++ b/sound/songs/se_m_lick.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_lick_grp, voicegroup128 + .equ se_m_lick_grp, voicegroup_rs_sfx_2 .equ se_m_lick_pri, 4 .equ se_m_lick_rev, reverb_set+50 .equ se_m_lick_mvl, 127 diff --git a/sound/songs/se_m_lock_on.s b/sound/songs/se_m_lock_on.s index 9c9576d97c..c95eafb3b0 100644 --- a/sound/songs/se_m_lock_on.s +++ b/sound/songs/se_m_lock_on.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_lock_on_grp, voicegroup128 + .equ se_m_lock_on_grp, voicegroup_rs_sfx_2 .equ se_m_lock_on_pri, 4 .equ se_m_lock_on_rev, reverb_set+50 .equ se_m_lock_on_mvl, 127 diff --git a/sound/songs/se_m_metronome.s b/sound/songs/se_m_metronome.s index ba0a55d8b9..de8899b16a 100644 --- a/sound/songs/se_m_metronome.s +++ b/sound/songs/se_m_metronome.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_metronome_grp, voicegroup128 + .equ se_m_metronome_grp, voicegroup_rs_sfx_2 .equ se_m_metronome_pri, 4 .equ se_m_metronome_rev, reverb_set+50 .equ se_m_metronome_mvl, 127 diff --git a/sound/songs/se_m_milk_drink.s b/sound/songs/se_m_milk_drink.s index 57e3a581d6..6380ee398b 100644 --- a/sound/songs/se_m_milk_drink.s +++ b/sound/songs/se_m_milk_drink.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_milk_drink_grp, voicegroup128 + .equ se_m_milk_drink_grp, voicegroup_rs_sfx_2 .equ se_m_milk_drink_pri, 4 .equ se_m_milk_drink_rev, reverb_set+50 .equ se_m_milk_drink_mvl, 127 diff --git a/sound/songs/se_m_minimize.s b/sound/songs/se_m_minimize.s index 778e0ec7c9..32dd545a03 100644 --- a/sound/songs/se_m_minimize.s +++ b/sound/songs/se_m_minimize.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_minimize_grp, voicegroup128 + .equ se_m_minimize_grp, voicegroup_rs_sfx_2 .equ se_m_minimize_pri, 4 .equ se_m_minimize_rev, reverb_set+50 .equ se_m_minimize_mvl, 127 diff --git a/sound/songs/se_m_mist.s b/sound/songs/se_m_mist.s index f46eb130a6..7975b50cc9 100644 --- a/sound/songs/se_m_mist.s +++ b/sound/songs/se_m_mist.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_mist_grp, voicegroup128 + .equ se_m_mist_grp, voicegroup_rs_sfx_2 .equ se_m_mist_pri, 4 .equ se_m_mist_rev, reverb_set+50 .equ se_m_mist_mvl, 127 diff --git a/sound/songs/se_m_moonlight.s b/sound/songs/se_m_moonlight.s index f76181a874..35329544e9 100644 --- a/sound/songs/se_m_moonlight.s +++ b/sound/songs/se_m_moonlight.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_moonlight_grp, voicegroup128 + .equ se_m_moonlight_grp, voicegroup_rs_sfx_2 .equ se_m_moonlight_pri, 4 .equ se_m_moonlight_rev, reverb_set+50 .equ se_m_moonlight_mvl, 127 diff --git a/sound/songs/se_m_morning_sun.s b/sound/songs/se_m_morning_sun.s index 227098da1f..a1196f6fe9 100644 --- a/sound/songs/se_m_morning_sun.s +++ b/sound/songs/se_m_morning_sun.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_morning_sun_grp, voicegroup128 + .equ se_m_morning_sun_grp, voicegroup_rs_sfx_2 .equ se_m_morning_sun_pri, 5 .equ se_m_morning_sun_rev, reverb_set+50 .equ se_m_morning_sun_mvl, 127 diff --git a/sound/songs/se_m_nightmare.s b/sound/songs/se_m_nightmare.s index f995d13103..61e7cde1e3 100644 --- a/sound/songs/se_m_nightmare.s +++ b/sound/songs/se_m_nightmare.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_nightmare_grp, voicegroup128 + .equ se_m_nightmare_grp, voicegroup_rs_sfx_2 .equ se_m_nightmare_pri, 4 .equ se_m_nightmare_rev, reverb_set+50 .equ se_m_nightmare_mvl, 127 diff --git a/sound/songs/se_m_perish_song.s b/sound/songs/se_m_perish_song.s index af30e24579..85614227ed 100644 --- a/sound/songs/se_m_perish_song.s +++ b/sound/songs/se_m_perish_song.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_perish_song_grp, voicegroup128 + .equ se_m_perish_song_grp, voicegroup_rs_sfx_2 .equ se_m_perish_song_pri, 4 .equ se_m_perish_song_rev, reverb_set+50 .equ se_m_perish_song_mvl, 127 diff --git a/sound/songs/se_m_petal_dance.s b/sound/songs/se_m_petal_dance.s index df5752e4bd..6d4e015a77 100644 --- a/sound/songs/se_m_petal_dance.s +++ b/sound/songs/se_m_petal_dance.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_petal_dance_grp, voicegroup128 + .equ se_m_petal_dance_grp, voicegroup_rs_sfx_2 .equ se_m_petal_dance_pri, 4 .equ se_m_petal_dance_rev, reverb_set+50 .equ se_m_petal_dance_mvl, 127 diff --git a/sound/songs/se_m_poison_powder.s b/sound/songs/se_m_poison_powder.s index f48637385b..f9fcd6dc9a 100644 --- a/sound/songs/se_m_poison_powder.s +++ b/sound/songs/se_m_poison_powder.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_poison_powder_grp, voicegroup128 + .equ se_m_poison_powder_grp, voicegroup_rs_sfx_2 .equ se_m_poison_powder_pri, 4 .equ se_m_poison_powder_rev, reverb_set+50 .equ se_m_poison_powder_mvl, 127 diff --git a/sound/songs/se_m_psybeam.s b/sound/songs/se_m_psybeam.s index c7f68cffd6..416a8a9392 100644 --- a/sound/songs/se_m_psybeam.s +++ b/sound/songs/se_m_psybeam.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_psybeam_grp, voicegroup128 + .equ se_m_psybeam_grp, voicegroup_rs_sfx_2 .equ se_m_psybeam_pri, 4 .equ se_m_psybeam_rev, reverb_set+50 .equ se_m_psybeam_mvl, 127 diff --git a/sound/songs/se_m_psybeam2.s b/sound/songs/se_m_psybeam2.s index e26a844c91..2cce6098b1 100644 --- a/sound/songs/se_m_psybeam2.s +++ b/sound/songs/se_m_psybeam2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_psybeam2_grp, voicegroup128 + .equ se_m_psybeam2_grp, voicegroup_rs_sfx_2 .equ se_m_psybeam2_pri, 4 .equ se_m_psybeam2_rev, reverb_set+50 .equ se_m_psybeam2_mvl, 127 diff --git a/sound/songs/se_m_rain_dance.s b/sound/songs/se_m_rain_dance.s index bba4dc2b05..7e5b2d0098 100644 --- a/sound/songs/se_m_rain_dance.s +++ b/sound/songs/se_m_rain_dance.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_rain_dance_grp, voicegroup128 + .equ se_m_rain_dance_grp, voicegroup_rs_sfx_2 .equ se_m_rain_dance_pri, 4 .equ se_m_rain_dance_rev, reverb_set+50 .equ se_m_rain_dance_mvl, 127 diff --git a/sound/songs/se_m_reflect.s b/sound/songs/se_m_reflect.s index 56699c65ea..d5649ab360 100644 --- a/sound/songs/se_m_reflect.s +++ b/sound/songs/se_m_reflect.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_reflect_grp, voicegroup128 + .equ se_m_reflect_grp, voicegroup_rs_sfx_2 .equ se_m_reflect_pri, 4 .equ se_m_reflect_rev, reverb_set+50 .equ se_m_reflect_mvl, 127 diff --git a/sound/songs/se_m_reversal.s b/sound/songs/se_m_reversal.s index 5b62d7156e..56ed6d0576 100644 --- a/sound/songs/se_m_reversal.s +++ b/sound/songs/se_m_reversal.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_reversal_grp, voicegroup128 + .equ se_m_reversal_grp, voicegroup_rs_sfx_2 .equ se_m_reversal_pri, 4 .equ se_m_reversal_rev, reverb_set+50 .equ se_m_reversal_mvl, 127 diff --git a/sound/songs/se_m_rock_throw.s b/sound/songs/se_m_rock_throw.s index 71dddd4475..74ae936b76 100644 --- a/sound/songs/se_m_rock_throw.s +++ b/sound/songs/se_m_rock_throw.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_rock_throw_grp, voicegroup128 + .equ se_m_rock_throw_grp, voicegroup_rs_sfx_2 .equ se_m_rock_throw_pri, 4 .equ se_m_rock_throw_rev, reverb_set+50 .equ se_m_rock_throw_mvl, 127 diff --git a/sound/songs/se_m_sacred_fire.s b/sound/songs/se_m_sacred_fire.s index 0fda9c757a..58a40c9bfb 100644 --- a/sound/songs/se_m_sacred_fire.s +++ b/sound/songs/se_m_sacred_fire.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sacred_fire_grp, voicegroup128 + .equ se_m_sacred_fire_grp, voicegroup_rs_sfx_2 .equ se_m_sacred_fire_pri, 4 .equ se_m_sacred_fire_rev, reverb_set+50 .equ se_m_sacred_fire_mvl, 127 diff --git a/sound/songs/se_m_sacred_fire2.s b/sound/songs/se_m_sacred_fire2.s index f255e712a9..41582debdd 100644 --- a/sound/songs/se_m_sacred_fire2.s +++ b/sound/songs/se_m_sacred_fire2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sacred_fire2_grp, voicegroup128 + .equ se_m_sacred_fire2_grp, voicegroup_rs_sfx_2 .equ se_m_sacred_fire2_pri, 4 .equ se_m_sacred_fire2_rev, reverb_set+50 .equ se_m_sacred_fire2_mvl, 127 diff --git a/sound/songs/se_m_sand_tomb.s b/sound/songs/se_m_sand_tomb.s index 4c14aabcc4..e52a76d108 100644 --- a/sound/songs/se_m_sand_tomb.s +++ b/sound/songs/se_m_sand_tomb.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sand_tomb_grp, voicegroup128 + .equ se_m_sand_tomb_grp, voicegroup_rs_sfx_2 .equ se_m_sand_tomb_pri, 4 .equ se_m_sand_tomb_rev, reverb_set+50 .equ se_m_sand_tomb_mvl, 127 diff --git a/sound/songs/se_m_sandstorm.s b/sound/songs/se_m_sandstorm.s index 4cb12a3892..e4e81dcc62 100644 --- a/sound/songs/se_m_sandstorm.s +++ b/sound/songs/se_m_sandstorm.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sandstorm_grp, voicegroup128 + .equ se_m_sandstorm_grp, voicegroup_rs_sfx_2 .equ se_m_sandstorm_pri, 4 .equ se_m_sandstorm_rev, reverb_set+50 .equ se_m_sandstorm_mvl, 127 diff --git a/sound/songs/se_m_screech.s b/sound/songs/se_m_screech.s index 378cf71281..c28d8d2bbd 100644 --- a/sound/songs/se_m_screech.s +++ b/sound/songs/se_m_screech.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_screech_grp, voicegroup128 + .equ se_m_screech_grp, voicegroup_rs_sfx_2 .equ se_m_screech_pri, 4 .equ se_m_screech_rev, reverb_set+50 .equ se_m_screech_mvl, 127 diff --git a/sound/songs/se_m_self_destruct.s b/sound/songs/se_m_self_destruct.s index 645085e1e5..0ed13b83d4 100644 --- a/sound/songs/se_m_self_destruct.s +++ b/sound/songs/se_m_self_destruct.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_self_destruct_grp, voicegroup128 + .equ se_m_self_destruct_grp, voicegroup_rs_sfx_2 .equ se_m_self_destruct_pri, 4 .equ se_m_self_destruct_rev, reverb_set+50 .equ se_m_self_destruct_mvl, 127 diff --git a/sound/songs/se_m_sing.s b/sound/songs/se_m_sing.s index 8c48c82247..349f6839ce 100644 --- a/sound/songs/se_m_sing.s +++ b/sound/songs/se_m_sing.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sing_grp, voicegroup128 + .equ se_m_sing_grp, voicegroup_rs_sfx_2 .equ se_m_sing_pri, 4 .equ se_m_sing_rev, reverb_set+50 .equ se_m_sing_mvl, 127 diff --git a/sound/songs/se_m_sketch.s b/sound/songs/se_m_sketch.s index c17c4056f2..579a308743 100644 --- a/sound/songs/se_m_sketch.s +++ b/sound/songs/se_m_sketch.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sketch_grp, voicegroup128 + .equ se_m_sketch_grp, voicegroup_rs_sfx_2 .equ se_m_sketch_pri, 4 .equ se_m_sketch_rev, reverb_set+50 .equ se_m_sketch_mvl, 127 diff --git a/sound/songs/se_m_sky_uppercut.s b/sound/songs/se_m_sky_uppercut.s index bed6c19c5f..6a28b5bcd6 100644 --- a/sound/songs/se_m_sky_uppercut.s +++ b/sound/songs/se_m_sky_uppercut.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sky_uppercut_grp, voicegroup128 + .equ se_m_sky_uppercut_grp, voicegroup_rs_sfx_2 .equ se_m_sky_uppercut_pri, 4 .equ se_m_sky_uppercut_rev, reverb_set+50 .equ se_m_sky_uppercut_mvl, 127 diff --git a/sound/songs/se_m_snore.s b/sound/songs/se_m_snore.s index 13e2f6f52b..5774355f21 100644 --- a/sound/songs/se_m_snore.s +++ b/sound/songs/se_m_snore.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_snore_grp, voicegroup128 + .equ se_m_snore_grp, voicegroup_rs_sfx_2 .equ se_m_snore_pri, 4 .equ se_m_snore_rev, reverb_set+50 .equ se_m_snore_mvl, 127 diff --git a/sound/songs/se_m_solar_beam.s b/sound/songs/se_m_solar_beam.s index 6a12b4a10e..0ef97c6be2 100644 --- a/sound/songs/se_m_solar_beam.s +++ b/sound/songs/se_m_solar_beam.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_solar_beam_grp, voicegroup128 + .equ se_m_solar_beam_grp, voicegroup_rs_sfx_2 .equ se_m_solar_beam_pri, 4 .equ se_m_solar_beam_rev, reverb_set+50 .equ se_m_solar_beam_mvl, 127 diff --git a/sound/songs/se_m_spit_up.s b/sound/songs/se_m_spit_up.s index 1073ad01fc..20fe0697d7 100644 --- a/sound/songs/se_m_spit_up.s +++ b/sound/songs/se_m_spit_up.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_spit_up_grp, voicegroup128 + .equ se_m_spit_up_grp, voicegroup_rs_sfx_2 .equ se_m_spit_up_pri, 4 .equ se_m_spit_up_rev, reverb_set+50 .equ se_m_spit_up_mvl, 127 diff --git a/sound/songs/se_m_stat_decrease.s b/sound/songs/se_m_stat_decrease.s index 51218db1e7..8f242be04e 100644 --- a/sound/songs/se_m_stat_decrease.s +++ b/sound/songs/se_m_stat_decrease.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_stat_decrease_grp, voicegroup128 + .equ se_m_stat_decrease_grp, voicegroup_rs_sfx_2 .equ se_m_stat_decrease_pri, 4 .equ se_m_stat_decrease_rev, reverb_set+50 .equ se_m_stat_decrease_mvl, 127 diff --git a/sound/songs/se_m_stat_increase.s b/sound/songs/se_m_stat_increase.s index 2556b6afa7..d5d6b5e918 100644 --- a/sound/songs/se_m_stat_increase.s +++ b/sound/songs/se_m_stat_increase.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_stat_increase_grp, voicegroup128 + .equ se_m_stat_increase_grp, voicegroup_rs_sfx_2 .equ se_m_stat_increase_pri, 4 .equ se_m_stat_increase_rev, reverb_set+50 .equ se_m_stat_increase_mvl, 127 diff --git a/sound/songs/se_m_strength.s b/sound/songs/se_m_strength.s index bda5fc61e5..974a9f976f 100644 --- a/sound/songs/se_m_strength.s +++ b/sound/songs/se_m_strength.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_strength_grp, voicegroup128 + .equ se_m_strength_grp, voicegroup_rs_sfx_2 .equ se_m_strength_pri, 4 .equ se_m_strength_rev, reverb_set+50 .equ se_m_strength_mvl, 127 diff --git a/sound/songs/se_m_string_shot.s b/sound/songs/se_m_string_shot.s index d750d26b9b..ed0701953b 100644 --- a/sound/songs/se_m_string_shot.s +++ b/sound/songs/se_m_string_shot.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_string_shot_grp, voicegroup128 + .equ se_m_string_shot_grp, voicegroup_rs_sfx_2 .equ se_m_string_shot_pri, 4 .equ se_m_string_shot_rev, reverb_set+50 .equ se_m_string_shot_mvl, 127 diff --git a/sound/songs/se_m_string_shot2.s b/sound/songs/se_m_string_shot2.s index b885a7d1a8..ac17f52cc8 100644 --- a/sound/songs/se_m_string_shot2.s +++ b/sound/songs/se_m_string_shot2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_string_shot2_grp, voicegroup128 + .equ se_m_string_shot2_grp, voicegroup_rs_sfx_2 .equ se_m_string_shot2_pri, 4 .equ se_m_string_shot2_rev, reverb_set+50 .equ se_m_string_shot2_mvl, 127 diff --git a/sound/songs/se_m_supersonic.s b/sound/songs/se_m_supersonic.s index c975dad4b6..3029597d1d 100644 --- a/sound/songs/se_m_supersonic.s +++ b/sound/songs/se_m_supersonic.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_supersonic_grp, voicegroup128 + .equ se_m_supersonic_grp, voicegroup_rs_sfx_2 .equ se_m_supersonic_pri, 4 .equ se_m_supersonic_rev, reverb_set+50 .equ se_m_supersonic_mvl, 127 diff --git a/sound/songs/se_m_surf.s b/sound/songs/se_m_surf.s index d3e3077826..1b3fc5cb91 100644 --- a/sound/songs/se_m_surf.s +++ b/sound/songs/se_m_surf.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_surf_grp, voicegroup128 + .equ se_m_surf_grp, voicegroup_rs_sfx_2 .equ se_m_surf_pri, 4 .equ se_m_surf_rev, reverb_set+50 .equ se_m_surf_mvl, 127 diff --git a/sound/songs/se_m_swagger.s b/sound/songs/se_m_swagger.s index 9b4b5756bc..e673444ee4 100644 --- a/sound/songs/se_m_swagger.s +++ b/sound/songs/se_m_swagger.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_swagger_grp, voicegroup128 + .equ se_m_swagger_grp, voicegroup_rs_sfx_2 .equ se_m_swagger_pri, 4 .equ se_m_swagger_rev, reverb_set+50 .equ se_m_swagger_mvl, 127 diff --git a/sound/songs/se_m_swagger2.s b/sound/songs/se_m_swagger2.s index 0a0d767674..9e799ec333 100644 --- a/sound/songs/se_m_swagger2.s +++ b/sound/songs/se_m_swagger2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_swagger2_grp, voicegroup128 + .equ se_m_swagger2_grp, voicegroup_rs_sfx_2 .equ se_m_swagger2_pri, 4 .equ se_m_swagger2_rev, reverb_set+50 .equ se_m_swagger2_mvl, 127 diff --git a/sound/songs/se_m_sweet_scent.s b/sound/songs/se_m_sweet_scent.s index 3b9bd527c8..1099ba3c0f 100644 --- a/sound/songs/se_m_sweet_scent.s +++ b/sound/songs/se_m_sweet_scent.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_sweet_scent_grp, voicegroup128 + .equ se_m_sweet_scent_grp, voicegroup_rs_sfx_2 .equ se_m_sweet_scent_pri, 4 .equ se_m_sweet_scent_rev, reverb_set+50 .equ se_m_sweet_scent_mvl, 127 diff --git a/sound/songs/se_m_swift.s b/sound/songs/se_m_swift.s index c87cbea419..2c01cfcf48 100644 --- a/sound/songs/se_m_swift.s +++ b/sound/songs/se_m_swift.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_swift_grp, voicegroup128 + .equ se_m_swift_grp, voicegroup_rs_sfx_2 .equ se_m_swift_pri, 4 .equ se_m_swift_rev, reverb_set+50 .equ se_m_swift_mvl, 127 diff --git a/sound/songs/se_m_teeter_dance.s b/sound/songs/se_m_teeter_dance.s index 8238afeb27..04a1e61e03 100644 --- a/sound/songs/se_m_teeter_dance.s +++ b/sound/songs/se_m_teeter_dance.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_teeter_dance_grp, voicegroup128 + .equ se_m_teeter_dance_grp, voicegroup_rs_sfx_2 .equ se_m_teeter_dance_pri, 4 .equ se_m_teeter_dance_rev, reverb_set+50 .equ se_m_teeter_dance_mvl, 127 diff --git a/sound/songs/se_m_teleport.s b/sound/songs/se_m_teleport.s index 60f7945d7b..8a4f676ba5 100644 --- a/sound/songs/se_m_teleport.s +++ b/sound/songs/se_m_teleport.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_teleport_grp, voicegroup128 + .equ se_m_teleport_grp, voicegroup_rs_sfx_2 .equ se_m_teleport_pri, 4 .equ se_m_teleport_rev, reverb_set+50 .equ se_m_teleport_mvl, 127 diff --git a/sound/songs/se_m_thunder_wave.s b/sound/songs/se_m_thunder_wave.s index a0b06cb5de..6d0a585e3f 100644 --- a/sound/songs/se_m_thunder_wave.s +++ b/sound/songs/se_m_thunder_wave.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_thunder_wave_grp, voicegroup128 + .equ se_m_thunder_wave_grp, voicegroup_rs_sfx_2 .equ se_m_thunder_wave_pri, 4 .equ se_m_thunder_wave_rev, reverb_set+50 .equ se_m_thunder_wave_mvl, 127 diff --git a/sound/songs/se_m_thunderbolt.s b/sound/songs/se_m_thunderbolt.s index 3b37903131..7b1868fbe6 100644 --- a/sound/songs/se_m_thunderbolt.s +++ b/sound/songs/se_m_thunderbolt.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_thunderbolt_grp, voicegroup128 + .equ se_m_thunderbolt_grp, voicegroup_rs_sfx_2 .equ se_m_thunderbolt_pri, 4 .equ se_m_thunderbolt_rev, reverb_set+50 .equ se_m_thunderbolt_mvl, 127 diff --git a/sound/songs/se_m_thunderbolt2.s b/sound/songs/se_m_thunderbolt2.s index 5068203958..9725b58f52 100644 --- a/sound/songs/se_m_thunderbolt2.s +++ b/sound/songs/se_m_thunderbolt2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_thunderbolt2_grp, voicegroup128 + .equ se_m_thunderbolt2_grp, voicegroup_rs_sfx_2 .equ se_m_thunderbolt2_pri, 4 .equ se_m_thunderbolt2_rev, reverb_set+50 .equ se_m_thunderbolt2_mvl, 127 diff --git a/sound/songs/se_m_toxic.s b/sound/songs/se_m_toxic.s index ae460ad773..3008bc0312 100644 --- a/sound/songs/se_m_toxic.s +++ b/sound/songs/se_m_toxic.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_toxic_grp, voicegroup128 + .equ se_m_toxic_grp, voicegroup_rs_sfx_2 .equ se_m_toxic_pri, 4 .equ se_m_toxic_rev, reverb_set+50 .equ se_m_toxic_mvl, 127 diff --git a/sound/songs/se_m_tri_attack.s b/sound/songs/se_m_tri_attack.s index 13947e6f1a..2a0bd1d4ff 100644 --- a/sound/songs/se_m_tri_attack.s +++ b/sound/songs/se_m_tri_attack.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_tri_attack_grp, voicegroup128 + .equ se_m_tri_attack_grp, voicegroup_rs_sfx_2 .equ se_m_tri_attack_pri, 4 .equ se_m_tri_attack_rev, reverb_set+50 .equ se_m_tri_attack_mvl, 127 diff --git a/sound/songs/se_m_tri_attack2.s b/sound/songs/se_m_tri_attack2.s index 61f11c3967..a54ee3df0e 100644 --- a/sound/songs/se_m_tri_attack2.s +++ b/sound/songs/se_m_tri_attack2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_tri_attack2_grp, voicegroup128 + .equ se_m_tri_attack2_grp, voicegroup_rs_sfx_2 .equ se_m_tri_attack2_pri, 4 .equ se_m_tri_attack2_rev, reverb_set+50 .equ se_m_tri_attack2_mvl, 127 diff --git a/sound/songs/se_m_twister.s b/sound/songs/se_m_twister.s index bbb4f1ec03..a739c89c4f 100644 --- a/sound/songs/se_m_twister.s +++ b/sound/songs/se_m_twister.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_twister_grp, voicegroup128 + .equ se_m_twister_grp, voicegroup_rs_sfx_2 .equ se_m_twister_pri, 4 .equ se_m_twister_rev, reverb_set+50 .equ se_m_twister_mvl, 127 diff --git a/sound/songs/se_m_uproar.s b/sound/songs/se_m_uproar.s index c60cccee4e..2bf7804d52 100644 --- a/sound/songs/se_m_uproar.s +++ b/sound/songs/se_m_uproar.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_uproar_grp, voicegroup128 + .equ se_m_uproar_grp, voicegroup_rs_sfx_2 .equ se_m_uproar_pri, 4 .equ se_m_uproar_rev, reverb_set+50 .equ se_m_uproar_mvl, 127 diff --git a/sound/songs/se_m_vital_throw.s b/sound/songs/se_m_vital_throw.s index 3e04b43e5b..aebda904f2 100644 --- a/sound/songs/se_m_vital_throw.s +++ b/sound/songs/se_m_vital_throw.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_vital_throw_grp, voicegroup128 + .equ se_m_vital_throw_grp, voicegroup_rs_sfx_2 .equ se_m_vital_throw_pri, 4 .equ se_m_vital_throw_rev, reverb_set+50 .equ se_m_vital_throw_mvl, 127 diff --git a/sound/songs/se_m_vital_throw2.s b/sound/songs/se_m_vital_throw2.s index 0d1e64ecb5..34a758c6e2 100644 --- a/sound/songs/se_m_vital_throw2.s +++ b/sound/songs/se_m_vital_throw2.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_vital_throw2_grp, voicegroup128 + .equ se_m_vital_throw2_grp, voicegroup_rs_sfx_2 .equ se_m_vital_throw2_pri, 4 .equ se_m_vital_throw2_rev, reverb_set+50 .equ se_m_vital_throw2_mvl, 127 diff --git a/sound/songs/se_m_waterfall.s b/sound/songs/se_m_waterfall.s index 9e16b9ee76..ad91010e71 100644 --- a/sound/songs/se_m_waterfall.s +++ b/sound/songs/se_m_waterfall.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_waterfall_grp, voicegroup128 + .equ se_m_waterfall_grp, voicegroup_rs_sfx_2 .equ se_m_waterfall_pri, 4 .equ se_m_waterfall_rev, reverb_set+50 .equ se_m_waterfall_mvl, 127 diff --git a/sound/songs/se_m_whirlpool.s b/sound/songs/se_m_whirlpool.s index bf0b9cc722..67563395cc 100644 --- a/sound/songs/se_m_whirlpool.s +++ b/sound/songs/se_m_whirlpool.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_whirlpool_grp, voicegroup128 + .equ se_m_whirlpool_grp, voicegroup_rs_sfx_2 .equ se_m_whirlpool_pri, 4 .equ se_m_whirlpool_rev, reverb_set+50 .equ se_m_whirlpool_mvl, 127 diff --git a/sound/songs/se_m_yawn.s b/sound/songs/se_m_yawn.s index c6af1f3610..fdd6012a22 100644 --- a/sound/songs/se_m_yawn.s +++ b/sound/songs/se_m_yawn.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_m_yawn_grp, voicegroup128 + .equ se_m_yawn_grp, voicegroup_rs_sfx_2 .equ se_m_yawn_pri, 4 .equ se_m_yawn_rev, reverb_set+50 .equ se_m_yawn_mvl, 127 diff --git a/sound/songs/se_wall_hit.s b/sound/songs/se_wall_hit.s index feeeb03b1d..385da03739 100644 --- a/sound/songs/se_wall_hit.s +++ b/sound/songs/se_wall_hit.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_wall_hit_grp, voicegroup127 + .equ se_wall_hit_grp, voicegroup_rs_sfx_1 .equ se_wall_hit_pri, 2 .equ se_wall_hit_rev, reverb_set+50 .equ se_wall_hit_mvl, 127 diff --git a/sound/songs/se_win_open.s b/sound/songs/se_win_open.s index b5d582a8d9..07fb4fadd4 100644 --- a/sound/songs/se_win_open.s +++ b/sound/songs/se_win_open.s @@ -1,6 +1,6 @@ .include "MPlayDef.s" - .equ se_win_open_grp, voicegroup127 + .equ se_win_open_grp, voicegroup_rs_sfx_1 .equ se_win_open_pri, 5 .equ se_win_open_rev, reverb_set+50 .equ se_win_open_mvl, 127 diff --git a/sound/voice_groups.inc b/sound/voice_groups.inc index 8ee57619b6..eabcc5c752 100644 --- a/sound/voice_groups.inc +++ b/sound/voice_groups.inc @@ -1,192 +1,203 @@ -.include "sound/voicegroups/voicegroup000.inc" -.include "sound/voicegroups/voicegroup001.inc" -.include "sound/voicegroups/voicegroup002.inc" -.include "sound/voicegroups/voicegroup003.inc" -.include "sound/voicegroups/voicegroup004.inc" -.include "sound/voicegroups/voicegroup005.inc" -.include "sound/voicegroups/voicegroup006.inc" -.include "sound/voicegroups/voicegroup007.inc" -.include "sound/voicegroups/voicegroup008.inc" -.include "sound/voicegroups/voicegroup009.inc" -.include "sound/voicegroups/voicegroup010.inc" -.include "sound/voicegroups/voicegroup011.inc" -.include "sound/voicegroups/voicegroup012.inc" -.include "sound/voicegroups/voicegroup013.inc" -.include "sound/voicegroups/voicegroup014.inc" -.include "sound/voicegroups/voicegroup015.inc" -.include "sound/voicegroups/voicegroup016.inc" -.include "sound/voicegroups/voicegroup017.inc" -.include "sound/voicegroups/voicegroup018.inc" -.include "sound/voicegroups/voicegroup019.inc" -.include "sound/voicegroups/voicegroup020.inc" -.include "sound/voicegroups/voicegroup021.inc" -.include "sound/voicegroups/voicegroup022.inc" -.include "sound/voicegroups/voicegroup023.inc" -.include "sound/voicegroups/voicegroup024.inc" -.include "sound/voicegroups/voicegroup025.inc" -.include "sound/voicegroups/voicegroup026.inc" -.include "sound/voicegroups/voicegroup027.inc" -.include "sound/voicegroups/voicegroup028.inc" -.include "sound/voicegroups/voicegroup029.inc" -.include "sound/voicegroups/voicegroup030.inc" -.include "sound/voicegroups/voicegroup031.inc" -.include "sound/voicegroups/voicegroup032.inc" -.include "sound/voicegroups/voicegroup033.inc" -.include "sound/voicegroups/voicegroup034.inc" -.include "sound/voicegroups/voicegroup035.inc" -.include "sound/voicegroups/voicegroup036.inc" -.include "sound/voicegroups/voicegroup037.inc" -.include "sound/voicegroups/voicegroup038.inc" -.include "sound/voicegroups/voicegroup039.inc" -.include "sound/voicegroups/voicegroup040.inc" -.include "sound/voicegroups/voicegroup041.inc" -.include "sound/voicegroups/voicegroup042.inc" -.include "sound/voicegroups/voicegroup043.inc" -.include "sound/voicegroups/voicegroup044.inc" -.include "sound/voicegroups/voicegroup045.inc" -.include "sound/voicegroups/voicegroup046.inc" -.include "sound/voicegroups/voicegroup047.inc" -.include "sound/voicegroups/voicegroup048.inc" -.include "sound/voicegroups/voicegroup049.inc" -.include "sound/voicegroups/voicegroup050.inc" -.include "sound/voicegroups/voicegroup051.inc" -.include "sound/voicegroups/voicegroup052.inc" -.include "sound/voicegroups/voicegroup053.inc" -.include "sound/voicegroups/voicegroup054.inc" -.include "sound/voicegroups/voicegroup055.inc" -.include "sound/voicegroups/voicegroup056.inc" -.include "sound/voicegroups/voicegroup057.inc" -.include "sound/voicegroups/voicegroup058.inc" -.include "sound/voicegroups/voicegroup059.inc" -.include "sound/voicegroups/voicegroup060.inc" -.include "sound/voicegroups/voicegroup061.inc" -.include "sound/voicegroups/voicegroup062.inc" -.include "sound/voicegroups/voicegroup063.inc" -.include "sound/voicegroups/voicegroup064.inc" -.include "sound/voicegroups/voicegroup065.inc" -.include "sound/voicegroups/voicegroup066.inc" -.include "sound/voicegroups/voicegroup067.inc" -.include "sound/voicegroups/voicegroup068.inc" -.include "sound/voicegroups/voicegroup069.inc" -.include "sound/voicegroups/voicegroup070.inc" -.include "sound/voicegroups/voicegroup071.inc" -.include "sound/voicegroups/voicegroup072.inc" -.include "sound/voicegroups/voicegroup073.inc" -.include "sound/voicegroups/voicegroup074.inc" -.include "sound/voicegroups/voicegroup075.inc" -.include "sound/voicegroups/voicegroup076.inc" -.include "sound/voicegroups/voicegroup077.inc" -.include "sound/voicegroups/voicegroup078.inc" -.include "sound/voicegroups/voicegroup079.inc" -.include "sound/voicegroups/voicegroup080.inc" -.include "sound/voicegroups/voicegroup081.inc" -.include "sound/voicegroups/voicegroup082.inc" -.include "sound/voicegroups/voicegroup083.inc" -.include "sound/voicegroups/voicegroup084.inc" -.include "sound/voicegroups/voicegroup085.inc" -.include "sound/voicegroups/voicegroup086.inc" -.include "sound/voicegroups/voicegroup087.inc" -.include "sound/voicegroups/voicegroup088.inc" -.include "sound/voicegroups/voicegroup089.inc" -.include "sound/voicegroups/voicegroup090.inc" -.include "sound/voicegroups/voicegroup091.inc" -.include "sound/voicegroups/voicegroup092.inc" -.include "sound/voicegroups/voicegroup093.inc" -.include "sound/voicegroups/voicegroup094.inc" -.include "sound/voicegroups/voicegroup095.inc" -.include "sound/voicegroups/voicegroup096.inc" -.include "sound/voicegroups/voicegroup097.inc" -.include "sound/voicegroups/voicegroup098.inc" -.include "sound/voicegroups/voicegroup099.inc" -.include "sound/voicegroups/voicegroup100.inc" -.include "sound/voicegroups/voicegroup101.inc" -.include "sound/voicegroups/voicegroup102.inc" -.include "sound/voicegroups/voicegroup103.inc" -.include "sound/voicegroups/voicegroup104.inc" -.include "sound/voicegroups/voicegroup105.inc" -.include "sound/voicegroups/voicegroup106.inc" -.include "sound/voicegroups/voicegroup107.inc" -.include "sound/voicegroups/voicegroup108.inc" -.include "sound/voicegroups/voicegroup109.inc" -.include "sound/voicegroups/voicegroup110.inc" -.include "sound/voicegroups/voicegroup111.inc" -.include "sound/voicegroups/voicegroup112.inc" -.include "sound/voicegroups/voicegroup113.inc" -.include "sound/voicegroups/voicegroup114.inc" -.include "sound/voicegroups/voicegroup115.inc" -.include "sound/voicegroups/voicegroup116.inc" -.include "sound/voicegroups/voicegroup117.inc" -.include "sound/voicegroups/voicegroup118.inc" -.include "sound/voicegroups/voicegroup119.inc" -.include "sound/voicegroups/voicegroup120.inc" -.include "sound/voicegroups/voicegroup121.inc" -.include "sound/voicegroups/voicegroup122.inc" -.include "sound/voicegroups/voicegroup123.inc" -.include "sound/voicegroups/voicegroup124.inc" -.include "sound/voicegroups/voicegroup125.inc" -.include "sound/voicegroups/voicegroup126.inc" -.include "sound/voicegroups/voicegroup127.inc" -.include "sound/voicegroups/voicegroup128.inc" +.include "sound/voicegroups/dummy.inc" + +@ drumsets +.include "sound/voicegroups/drumsets/rs.inc" +.include "sound/voicegroups/drumsets/frlg.inc" +.include "sound/voicegroups/drumsets/emerald_1.inc" +.include "sound/voicegroups/drumsets/emerald_2.inc" + +@ key splits +.include "sound/voicegroups/keysplits/piano.inc" +.include "sound/voicegroups/keysplits/strings.inc" +.include "sound/voicegroups/keysplits/trumpet.inc" +.include "sound/voicegroups/unused.inc" +.include "sound/voicegroups/keysplits/tuba.inc" +.include "sound/voicegroups/keysplits/french_horn.inc" + +.include "sound/voicegroups/route110.inc" +.include "sound/voicegroups/route101.inc" +.include "sound/voicegroups/fanfare.inc" +.include "sound/voicegroups/gym.inc" +.include "sound/voicegroups/route120.inc" +.include "sound/voicegroups/petalburg.inc" +.include "sound/voicegroups/drumsets/petalburg.inc" +.include "sound/voicegroups/surf.inc" +.include "sound/voicegroups/petalburg_woods.inc" +.include "sound/voicegroups/oldale.inc" +.include "sound/voicegroups/lilycove_museum.inc" +.include "sound/voicegroups/route122.inc" +.include "sound/voicegroups/drumsets/route101.inc" +.include "sound/voicegroups/oceanic_museum.inc" +.include "sound/voicegroups/victory_gym_leader.inc" +.include "sound/voicegroups/victory_wild.inc" +.include "sound/voicegroups/evolution.inc" +.include "sound/voicegroups/encounter_girl.inc" +.include "sound/voicegroups/encounter_male.inc" +.include "sound/voicegroups/victory_league.inc" +.include "sound/voicegroups/abandoned_ship.inc" +.include "sound/voicegroups/drumsets/route110.inc" +.include "sound/voicegroups/fortree.inc" +.include "sound/voicegroups/birch_lab.inc" +.include "sound/voicegroups/littleroot_test.inc" +.include "sound/voicegroups/b_tower_rs.inc" +.include "sound/voicegroups/encounter_swimmer.inc" +.include "sound/voicegroups/cave_of_origin.inc" +.include "sound/voicegroups/roulette.inc" +.include "sound/voicegroups/link_contest_p1.inc" +.include "sound/voicegroups/link_contest_p2.inc" +.include "sound/voicegroups/link_contest_p3.inc" +.include "sound/voicegroups/link_contest_p4.inc" +.include "sound/voicegroups/encounter_rich.inc" +.include "sound/voicegroups/verdanturf.inc" +.include "sound/voicegroups/rustboro.inc" +.include "sound/voicegroups/poke_center.inc" +.include "sound/voicegroups/route104.inc" +.include "sound/voicegroups/route119.inc" +.include "sound/voicegroups/cycling.inc" +.include "sound/voicegroups/poke_mart.inc" +.include "sound/voicegroups/littleroot.inc" +.include "sound/voicegroups/mt_chimney.inc" +.include "sound/voicegroups/encounter_female.inc" +.include "sound/voicegroups/lilycove.inc" +.include "sound/voicegroups/route111.inc" +.include "sound/voicegroups/help.inc" +.include "sound/voicegroups/underwater.inc" +.include "sound/voicegroups/victory_trainer.inc" +.include "sound/voicegroups/title.inc" +.include "sound/voicegroups/intro.inc" +.include "sound/voicegroups/encounter_may.inc" +.include "sound/voicegroups/encounter_intense.inc" +.include "sound/voicegroups/encounter_cool.inc" +.include "sound/voicegroups/route113.inc" +.include "sound/voicegroups/encounter_aqua.inc" +.include "sound/voicegroups/follow_me.inc" +.include "sound/voicegroups/encounter_brendan.inc" +.include "sound/voicegroups/ever_grande.inc" +.include "sound/voicegroups/encounter_suspicious.inc" +.include "sound/voicegroups/victory_aqua_magma.inc" +.include "sound/voicegroups/cable_car.inc" +.include "sound/voicegroups/game_corner.inc" +.include "sound/voicegroups/dewford.inc" +.include "sound/voicegroups/safari_zone.inc" +.include "sound/voicegroups/victory_road.inc" +.include "sound/voicegroups/aqua_magma_hideout.inc" +.include "sound/voicegroups/sailing.inc" +.include "sound/voicegroups/mt_pyre.inc" +.include "sound/voicegroups/slateport.inc" +.include "sound/voicegroups/mt_pyre_exterior.inc" +.include "sound/voicegroups/school.inc" +.include "sound/voicegroups/hall_of_fame.inc" +.include "sound/voicegroups/fallarbor.inc" +.include "sound/voicegroups/sealed_chamber.inc" +.include "sound/voicegroups/contest_winner.inc" +.include "sound/voicegroups/contest.inc" +.include "sound/voicegroups/encounter_magma.inc" +.include "sound/voicegroups/intro_battle.inc" +.include "sound/voicegroups/abnormal_weather.inc" +.include "sound/voicegroups/weather_groudon.inc" +.include "sound/voicegroups/sootopolis.inc" +.include "sound/voicegroups/contest_results.inc" +.include "sound/voicegroups/hall_of_fame_room.inc" +.include "sound/voicegroups/trick_house.inc" +.include "sound/voicegroups/encounter_twins.inc" +.include "sound/voicegroups/encounter_elite_four.inc" +.include "sound/voicegroups/encounter_hiker.inc" +.include "sound/voicegroups/contest_lobby.inc" +.include "sound/voicegroups/encounter_interviewer.inc" +.include "sound/voicegroups/encounter_champion.inc" +.include "sound/voicegroups/credits.inc" +.include "sound/voicegroups/end.inc" +.include "sound/voicegroups/b_frontier.inc" +.include "sound/voicegroups/b_arena.inc" +.include "sound/voicegroups/register_match_call.inc" +.include "sound/voicegroups/b_pyramid.inc" +.include "sound/voicegroups/b_pyramid_top.inc" +.include "sound/voicegroups/b_palace.inc" +.include "sound/voicegroups/rayquaza_appears.inc" +.include "sound/voicegroups/b_tower.inc" +.include "sound/voicegroups/b_dome.inc" +.include "sound/voicegroups/b_pike.inc" +.include "sound/voicegroups/b_factory.inc" +.include "sound/voicegroups/vs_rayquaza.inc" +.include "sound/voicegroups/vs_frontier_brain.inc" +.include "sound/voicegroups/vs_mew.inc" +.include "sound/voicegroups/vs_wild.inc" +.include "sound/voicegroups/vs_aqua_magma.inc" +.include "sound/voicegroups/vs_trainer.inc" +.include "sound/voicegroups/vs_gym_leader.inc" +.include "sound/voicegroups/vs_champion.inc" +.include "sound/voicegroups/vs_regi.inc" +.include "sound/voicegroups/vs_kyogre_groudon.inc" @ duplicate of vs_rayquaza +.include "sound/voicegroups/vs_rival.inc" +.include "sound/voicegroups/vs_elite_four.inc" +.include "sound/voicegroups/vs_aqua_magma_leader.inc" +.include "sound/voicegroups/rs_sfx_1.inc" +.include "sound/voicegroups/rs_sfx_2.inc" .include "sound/cry_tables.inc" -.include "sound/voicegroups/voicegroup129.inc" -.include "sound/voicegroups/voicegroup130.inc" -.include "sound/voicegroups/voicegroup131.inc" -.include "sound/voicegroups/voicegroup132.inc" -.include "sound/voicegroups/voicegroup133.inc" -.include "sound/voicegroups/voicegroup134.inc" -.include "sound/voicegroups/voicegroup135.inc" -.include "sound/voicegroups/voicegroup136.inc" -.include "sound/voicegroups/voicegroup137.inc" -.include "sound/voicegroups/voicegroup138.inc" -.include "sound/voicegroups/voicegroup139.inc" -.include "sound/voicegroups/voicegroup140.inc" -.include "sound/voicegroups/voicegroup141.inc" -.include "sound/voicegroups/voicegroup142.inc" -.include "sound/voicegroups/voicegroup143.inc" -.include "sound/voicegroups/voicegroup144.inc" -.include "sound/voicegroups/voicegroup145.inc" -.include "sound/voicegroups/voicegroup146.inc" -.include "sound/voicegroups/voicegroup147.inc" -.include "sound/voicegroups/voicegroup148.inc" -.include "sound/voicegroups/voicegroup149.inc" -.include "sound/voicegroups/voicegroup150.inc" -.include "sound/voicegroups/voicegroup151.inc" -.include "sound/voicegroups/voicegroup152.inc" -.include "sound/voicegroups/voicegroup153.inc" -.include "sound/voicegroups/voicegroup154.inc" -.include "sound/voicegroups/voicegroup155.inc" -.include "sound/voicegroups/voicegroup156.inc" -.include "sound/voicegroups/voicegroup157.inc" -.include "sound/voicegroups/voicegroup158.inc" -.include "sound/voicegroups/voicegroup159.inc" -.include "sound/voicegroups/voicegroup160.inc" -.include "sound/voicegroups/voicegroup161.inc" -.include "sound/voicegroups/voicegroup162.inc" -.include "sound/voicegroups/voicegroup163.inc" -.include "sound/voicegroups/voicegroup164.inc" -.include "sound/voicegroups/voicegroup165.inc" -.include "sound/voicegroups/voicegroup166.inc" -.include "sound/voicegroups/voicegroup167.inc" -.include "sound/voicegroups/voicegroup168.inc" -.include "sound/voicegroups/voicegroup169.inc" -.include "sound/voicegroups/voicegroup170.inc" -.include "sound/voicegroups/voicegroup171.inc" -.include "sound/voicegroups/voicegroup172.inc" -.include "sound/voicegroups/voicegroup173.inc" -.include "sound/voicegroups/voicegroup174.inc" -.include "sound/voicegroups/voicegroup175.inc" -.include "sound/voicegroups/voicegroup176.inc" -.include "sound/voicegroups/voicegroup177.inc" -.include "sound/voicegroups/voicegroup178.inc" -.include "sound/voicegroups/voicegroup179.inc" -.include "sound/voicegroups/voicegroup180.inc" -.include "sound/voicegroups/voicegroup181.inc" -.include "sound/voicegroups/voicegroup182.inc" -.include "sound/voicegroups/voicegroup183.inc" -.include "sound/voicegroups/voicegroup184.inc" -.include "sound/voicegroups/voicegroup185.inc" -.include "sound/voicegroups/voicegroup186.inc" -.include "sound/voicegroups/voicegroup187.inc" -.include "sound/voicegroups/voicegroup188.inc" -.include "sound/voicegroups/voicegroup189.inc" -.include "sound/voicegroups/voicegroup190.inc" +.include "sound/voicegroups/frlg_sfx.inc" +.include "sound/voicegroups/bard.inc" +.include "sound/voicegroups/unused_2.inc" @ used by unused GSC radio tower takeover test track in RS + +@ FRLG +.include "sound/voicegroups/rg_follow_me.inc" +.include "sound/voicegroups/rg_game_corner.inc" +.include "sound/voicegroups/rg_rocket_hideout.inc" +.include "sound/voicegroups/rg_gym.inc" +.include "sound/voicegroups/rg_jigglypuff.inc" +.include "sound/voicegroups/rg_intro_fight.inc" +.include "sound/voicegroups/rg_title.inc" +.include "sound/voicegroups/rg_cinnabar.inc" +.include "sound/voicegroups/rg_lavender.inc" +.include "sound/voicegroups/rg_heal.inc" +.include "sound/voicegroups/rg_cycling.inc" +.include "sound/voicegroups/rg_encounter_rocket.inc" +.include "sound/voicegroups/rg_encounter_girl.inc" +.include "sound/voicegroups/rg_encounter_boy.inc" +.include "sound/voicegroups/rg_hall_of_fame.inc" +.include "sound/voicegroups/rg_viridian_forest.inc" +.include "sound/voicegroups/rg_mt_moon.inc" +.include "sound/voicegroups/rg_poke_mansion.inc" +.include "sound/voicegroups/rg_credits.inc" +.include "sound/voicegroups/rg_route1.inc" +.include "sound/voicegroups/rg_route24.inc" +.include "sound/voicegroups/rg_route3.inc" +.include "sound/voicegroups/rg_route11.inc" +.include "sound/voicegroups/rg_victory_road.inc" +.include "sound/voicegroups/rg_vs_gym_leader.inc" +.include "sound/voicegroups/rg_vs_trainer.inc" +.include "sound/voicegroups/rg_vs_wild.inc" +.include "sound/voicegroups/rg_vs_champion.inc" +.include "sound/voicegroups/rg_pallet.inc" +.include "sound/voicegroups/rg_oak_lab.inc" +.include "sound/voicegroups/rg_oak.inc" +.include "sound/voicegroups/rg_poke_center.inc" +.include "sound/voicegroups/rg_ss_anne.inc" +.include "sound/voicegroups/rg_surf.inc" +.include "sound/voicegroups/rg_poke_tower.inc" +.include "sound/voicegroups/rg_silph.inc" +.include "sound/voicegroups/rg_fuchsia.inc" +.include "sound/voicegroups/rg_celadon.inc" +.include "sound/voicegroups/rg_victory_trainer.inc" +.include "sound/voicegroups/rg_victory_wild.inc" +.include "sound/voicegroups/rg_victory_gym_leader.inc" +.include "sound/voicegroups/rg_vermillion.inc" +.include "sound/voicegroups/rg_pewter.inc" +.include "sound/voicegroups/rg_encounter_rival.inc" +.include "sound/voicegroups/rg_unused.inc" +.include "sound/voicegroups/rg_unused_2.inc" +.include "sound/voicegroups/rg_dex_rating.inc" +.include "sound/voicegroups/drumsets/frlg_fanfare_2.inc" +.include "sound/voicegroups/drumsets/frlg_fanfare_1.inc" +.include "sound/voicegroups/rg_obtain_key_item.inc" +.include "sound/voicegroups/rg_caught_intro.inc" +.include "sound/voicegroups/rg_photo.inc" +.include "sound/voicegroups/rg_game_freak.inc" +.include "sound/voicegroups/rg_new_game.inc" +.include "sound/voicegroups/rg_mystery_gift.inc" +.include "sound/voicegroups/rg_encounter_deoxys.inc" +.include "sound/voicegroups/rg_vs_deoxys.inc" +.include "sound/voicegroups/rg_teachy_tv_menu.inc" +.include "sound/voicegroups/rg_sevii_route.inc" +.include "sound/voicegroups/rg_sevii_45.inc" +.include "sound/voicegroups/rg_sevii_67.inc" +.include "sound/voicegroups/drumsets/rg_credits.inc" diff --git a/sound/voicegroups/abandoned_ship.inc b/sound/voicegroups/abandoned_ship.inc new file mode 100644 index 0000000000..dd4ab482fd --- /dev/null +++ b/sound/voicegroups/abandoned_ship.inc @@ -0,0 +1,97 @@ +voice_group abandoned_ship + voice_keysplit_all voicegroup_route110_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 4, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 37, 165, 180, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 165, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + diff --git a/sound/voicegroups/voicegroup089.inc b/sound/voicegroups/abnormal_weather.inc similarity index 96% rename from sound/voicegroups/voicegroup089.inc rename to sound/voicegroups/abnormal_weather.inc index 4b5e7d57bd..36547c4957 100644 --- a/sound/voicegroups/voicegroup089.inc +++ b/sound/voicegroups/abnormal_weather.inc @@ -1,6 +1,6 @@ - .align 2 -voicegroup089:: - voice_keysplit_all voicegroup001 + +voice_group abnormal_weather + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +48,7 @@ voicegroup089:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +60,7 @@ voicegroup089:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup076.inc b/sound/voicegroups/aqua_magma_hideout.inc similarity index 97% rename from sound/voicegroups/voicegroup076.inc rename to sound/voicegroups/aqua_magma_hideout.inc index 378a8ff669..5790be7e96 100644 --- a/sound/voicegroups/voicegroup076.inc +++ b/sound/voicegroups/aqua_magma_hideout.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup076:: - voice_keysplit_all voicegroup001 +voice_group aqua_magma_hideout + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup076:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup104.inc b/sound/voicegroups/b_arena.inc similarity index 98% rename from sound/voicegroups/voicegroup104.inc rename to sound/voicegroups/b_arena.inc index c1b623918b..bb35ad718c 100644 --- a/sound/voicegroups/voicegroup104.inc +++ b/sound/voicegroups/b_arena.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup104:: - voice_keysplit_all voicegroup003 +voice_group b_arena + voice_keysplit_all voicegroup_emerald_drumset_1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_unknown_koto_high, 255, 0, 206, 242 diff --git a/sound/voicegroups/voicegroup111.inc b/sound/voicegroups/b_dome.inc similarity index 98% rename from sound/voicegroups/voicegroup111.inc rename to sound/voicegroups/b_dome.inc index 27b418f462..e54ec9d99c 100644 --- a/sound/voicegroups/voicegroup111.inc +++ b/sound/voicegroups/b_dome.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup111:: - voice_keysplit_all voicegroup002 +voice_group b_dome + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup113.inc b/sound/voicegroups/b_factory.inc similarity index 96% rename from sound/voicegroups/voicegroup113.inc rename to sound/voicegroups/b_factory.inc index 0fa279c8a6..329741050d 100644 --- a/sound/voicegroups/voicegroup113.inc +++ b/sound/voicegroups/b_factory.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup113:: - voice_keysplit_all voicegroup002 +voice_group b_factory + voice_keysplit_all voicegroup_frlg_drumset voice_programmable_wave_alt 60, 0, ProgrammableWaveData_23, 0, 7, 15, 1 voice_programmable_wave_alt 60, 0, ProgrammableWaveData_25, 0, 7, 15, 1 voice_programmable_wave_alt 60, 0, ProgrammableWaveData_24, 0, 7, 15, 1 @@ -56,11 +55,11 @@ voicegroup113:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup103.inc b/sound/voicegroups/b_frontier.inc similarity index 95% rename from sound/voicegroups/voicegroup103.inc rename to sound/voicegroups/b_frontier.inc index cc743edb22..bcdcfded3d 100644 --- a/sound/voicegroups/voicegroup103.inc +++ b/sound/voicegroups/b_frontier.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup103:: +voice_group b_frontier voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit_all voicegroup002 + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup103:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup103:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup108.inc b/sound/voicegroups/b_palace.inc similarity index 97% rename from sound/voicegroups/voicegroup108.inc rename to sound/voicegroups/b_palace.inc index a92ee43c6a..1e0db2616d 100644 --- a/sound/voicegroups/voicegroup108.inc +++ b/sound/voicegroups/b_palace.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup108:: - voice_keysplit_all voicegroup004 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group b_palace + voice_keysplit_all voicegroup_emerald_drumset_2 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup112.inc b/sound/voicegroups/b_pike.inc similarity index 95% rename from sound/voicegroups/voicegroup112.inc rename to sound/voicegroups/b_pike.inc index 9cb2f415a9..deb900a599 100644 --- a/sound/voicegroups/voicegroup112.inc +++ b/sound/voicegroups/b_pike.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup112:: - voice_keysplit_all voicegroup003 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group b_pike + voice_keysplit_all voicegroup_emerald_drumset_1 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_programmable_wave_alt 60, 0, ProgrammableWaveData_21, 0, 7, 15, 1 @@ -48,7 +47,7 @@ voicegroup112:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup112:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup106.inc b/sound/voicegroups/b_pyramid.inc similarity index 94% rename from sound/voicegroups/voicegroup106.inc rename to sound/voicegroups/b_pyramid.inc index 1a1125be8a..855088884f 100644 --- a/sound/voicegroups/voicegroup106.inc +++ b/sound/voicegroups/b_pyramid.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup106:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group b_pyramid + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup106:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup106:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup107.inc b/sound/voicegroups/b_pyramid_top.inc similarity index 96% rename from sound/voicegroups/voicegroup107.inc rename to sound/voicegroups/b_pyramid_top.inc index c43a518ec7..95707f5920 100644 --- a/sound/voicegroups/voicegroup107.inc +++ b/sound/voicegroups/b_pyramid_top.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup107:: - voice_keysplit_all voicegroup002 +voice_group b_pyramid_top + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup107:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup107:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup110.inc b/sound/voicegroups/b_tower.inc similarity index 94% rename from sound/voicegroups/voicegroup110.inc rename to sound/voicegroups/b_tower.inc index 25b6fdaae0..d8fd60920b 100644 --- a/sound/voicegroups/voicegroup110.inc +++ b/sound/voicegroups/b_tower.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup110:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group b_tower + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup110:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup110:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup035.inc b/sound/voicegroups/b_tower_rs.inc similarity index 91% rename from sound/voicegroups/voicegroup035.inc rename to sound/voicegroups/b_tower_rs.inc index 2c3ac4bddd..777e1b3a7c 100644 --- a/sound/voicegroups/voicegroup035.inc +++ b/sound/voicegroups/b_tower_rs.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup035:: - voice_keysplit_all voicegroup031 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group b_tower_rs + voice_keysplit_all voicegroup_route110_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 0, 1, 7, 1 @@ -48,7 +47,7 @@ voicegroup035:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup035:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/bard.inc b/sound/voicegroups/bard.inc new file mode 100644 index 0000000000..57ba0bfd1c --- /dev/null +++ b/sound/voicegroups/bard.inc @@ -0,0 +1,53 @@ +voice_group bard + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_1, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_2, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_3, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_4, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_5, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_6, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_7, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_8, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_9, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_10, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_11, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_12, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_13, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_14, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_15, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_16, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_17, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_18, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_19, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_20, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_21, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_22, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_23, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_24, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_25, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_26, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_27, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_28, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_29, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_30, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_31, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_32, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_33, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_34, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_35, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_36, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_37, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_38, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_39, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_40, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_41, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_42, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_43, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_44, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_45, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_46, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_47, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_48, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_49, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_50, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_Phoneme_51, 255, 0, 255, 0 + diff --git a/sound/voicegroups/voicegroup033.inc b/sound/voicegroups/birch_lab.inc similarity index 94% rename from sound/voicegroups/voicegroup033.inc rename to sound/voicegroups/birch_lab.inc index 34e7e43b71..2b10e4f1e2 100644 --- a/sound/voicegroups/voicegroup033.inc +++ b/sound/voicegroups/birch_lab.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup033:: - voice_keysplit_all voicegroup001 +voice_group birch_lab + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup033:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup033:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup071.inc b/sound/voicegroups/cable_car.inc similarity index 95% rename from sound/voicegroups/voicegroup071.inc rename to sound/voicegroups/cable_car.inc index a4cb9c721f..85d324b02d 100644 --- a/sound/voicegroups/voicegroup071.inc +++ b/sound/voicegroups/cable_car.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup071:: - voice_keysplit_all voicegroup001 +voice_group cable_car + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup071:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup037.inc b/sound/voicegroups/cave_of_origin.inc similarity index 93% rename from sound/voicegroups/voicegroup037.inc rename to sound/voicegroups/cave_of_origin.inc index 057891c01b..36ded3d35f 100644 --- a/sound/voicegroups/voicegroup037.inc +++ b/sound/voicegroups/cave_of_origin.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup037:: - voice_keysplit_all voicegroup031 +voice_group cave_of_origin + voice_keysplit_all voicegroup_route110_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup037:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,9 +57,9 @@ voicegroup037:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup086.inc b/sound/voicegroups/contest.inc similarity index 95% rename from sound/voicegroups/voicegroup086.inc rename to sound/voicegroups/contest.inc index d5298f9b03..24ff586dfc 100644 --- a/sound/voicegroups/voicegroup086.inc +++ b/sound/voicegroups/contest.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup086:: - voice_keysplit_all voicegroup001 +voice_group contest + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup086:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup086:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup098.inc b/sound/voicegroups/contest_lobby.inc similarity index 96% rename from sound/voicegroups/voicegroup098.inc rename to sound/voicegroups/contest_lobby.inc index 3a927368bc..88b1402b39 100644 --- a/sound/voicegroups/voicegroup098.inc +++ b/sound/voicegroups/contest_lobby.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup098:: - voice_keysplit_all voicegroup001 +voice_group contest_lobby + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,9 +55,9 @@ voicegroup098:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup092.inc b/sound/voicegroups/contest_results.inc similarity index 98% rename from sound/voicegroups/voicegroup092.inc rename to sound/voicegroups/contest_results.inc index 90e2858175..ba4f70b996 100644 --- a/sound/voicegroups/voicegroup092.inc +++ b/sound/voicegroups/contest_results.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup092:: - voice_keysplit_all voicegroup001 +voice_group contest_results + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup085.inc b/sound/voicegroups/contest_winner.inc similarity index 97% rename from sound/voicegroups/voicegroup085.inc rename to sound/voicegroups/contest_winner.inc index 6260fb198a..df323c002f 100644 --- a/sound/voicegroups/voicegroup085.inc +++ b/sound/voicegroups/contest_winner.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup085:: - voice_keysplit_all voicegroup001 +voice_group contest_winner + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup085:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup101.inc b/sound/voicegroups/credits.inc similarity index 92% rename from sound/voicegroups/voicegroup101.inc rename to sound/voicegroups/credits.inc index 768c18dea2..d05ac8025c 100644 --- a/sound/voicegroups/voicegroup101.inc +++ b/sound/voicegroups/credits.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup101:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group credits + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 1, 1, 5, 2, 4 @@ -48,7 +47,7 @@ voicegroup101:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup101:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup049.inc b/sound/voicegroups/cycling.inc similarity index 94% rename from sound/voicegroups/voicegroup049.inc rename to sound/voicegroups/cycling.inc index b6b0774cf3..a734c5fe60 100644 --- a/sound/voicegroups/voicegroup049.inc +++ b/sound/voicegroups/cycling.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup049:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group cycling + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup049:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup049:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup073.inc b/sound/voicegroups/dewford.inc similarity index 94% rename from sound/voicegroups/voicegroup073.inc rename to sound/voicegroups/dewford.inc index b10ab81d1a..e0fc659a9b 100644 --- a/sound/voicegroups/voicegroup073.inc +++ b/sound/voicegroups/dewford.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup073:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group dewford + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup073:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup073:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/drumsets/emerald_1.inc b/sound/voicegroups/drumsets/emerald_1.inc new file mode 100644 index 0000000000..80a9957f86 --- /dev/null +++ b/sound/voicegroups/drumsets/emerald_1.inc @@ -0,0 +1,56 @@ +voice_group emerald_drumset_1, 36 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 + voice_directsound_no_resample 66, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 + voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 + voice_directsound_no_resample 64, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 61, 84, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 + voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 + diff --git a/sound/voicegroups/voicegroup004.inc b/sound/voicegroups/drumsets/emerald_2.inc similarity index 60% rename from sound/voicegroups/voicegroup004.inc rename to sound/voicegroups/drumsets/emerald_2.inc index 6aa28d6a9f..4ad57546e0 100644 --- a/sound/voicegroups/voicegroup004.inc +++ b/sound/voicegroups/drumsets/emerald_2.inc @@ -1,41 +1,4 @@ - .align 2 -voicegroup004:: - voice_directsound_no_resample 66, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 - voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 - voice_directsound_no_resample 64, 29, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_directsound_no_resample 64, 94, DirectSoundWaveData_unused_heart_of_asia_indian_drum, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 90, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 61, 84, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 79, DirectSoundWaveData_sd90_open_triangle, 255, 242, 103, 188 - voice_directsound_no_resample 64, 39, DirectSoundWaveData_sd90_open_triangle, 255, 165, 103, 188 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 +voice_group emerald_drumset_2, 36 voice_directsound 62, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 diff --git a/sound/voicegroups/voicegroup003.inc b/sound/voicegroups/drumsets/frlg.inc similarity index 94% rename from sound/voicegroups/voicegroup003.inc rename to sound/voicegroups/drumsets/frlg.inc index d77150fc12..c0a2e59729 100644 --- a/sound/voicegroups/voicegroup003.inc +++ b/sound/voicegroups/drumsets/frlg.inc @@ -1,5 +1,22 @@ - .align 2 -voicegroup003:: +voice_group frlg_drumset, 36 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 + voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 + voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound 84, 104, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 + voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 voice_directsound_no_resample 64, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 voice_directsound_no_resample 64, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 231, 0, 188 voice_directsound_no_resample 64, 89, DirectSoundWaveData_sd90_cowbell, 255, 0, 255, 242 @@ -36,22 +53,4 @@ voicegroup003:: voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 voice_directsound 50, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 voice_directsound 64, 84, DirectSoundWaveData_ethnic_flavours_kotsuzumi, 255, 0, 255, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 64, 104, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 diff --git a/sound/voicegroups/voicegroup177.inc b/sound/voicegroups/drumsets/frlg_fanfare_1.inc similarity index 72% rename from sound/voicegroups/voicegroup177.inc rename to sound/voicegroups/drumsets/frlg_fanfare_1.inc index bd0e738fd4..0ba197265c 100644 --- a/sound/voicegroups/voicegroup177.inc +++ b/sound/voicegroups/drumsets/frlg_fanfare_1.inc @@ -1,41 +1,4 @@ - .align 2 -voicegroup177:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 +voice_group frlg_fanfare_drumset_1, 36 voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 voice_directsound_no_resample 67, 71, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 diff --git a/sound/voicegroups/voicegroup176.inc b/sound/voicegroups/drumsets/frlg_fanfare_2.inc similarity index 89% rename from sound/voicegroups/voicegroup176.inc rename to sound/voicegroups/drumsets/frlg_fanfare_2.inc index ee3c97e493..acc72aa3b7 100644 --- a/sound/voicegroups/voicegroup176.inc +++ b/sound/voicegroups/drumsets/frlg_fanfare_2.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup176:: +voice_group frlg_fanfare_drumset_2, 36 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -28,14 +27,6 @@ voicegroup176:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 7, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,4 +39,12 @@ voicegroup176:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_jingle_bell, 255, 0, 255, 0 diff --git a/sound/voicegroups/voicegroup016.inc b/sound/voicegroups/drumsets/petalburg.inc similarity index 50% rename from sound/voicegroups/voicegroup016.inc rename to sound/voicegroups/drumsets/petalburg.inc index 1b17ac49c7..4008b40f7b 100644 --- a/sound/voicegroups/voicegroup016.inc +++ b/sound/voicegroups/drumsets/petalburg.inc @@ -1,41 +1,4 @@ - .align 2 -voicegroup016:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 0, 2 - voice_noise_alt 60, 0, 0, 0, 1, 0, 1 +voice_group petalburg_drumset, 36 voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 diff --git a/sound/voicegroups/voicegroup190.inc b/sound/voicegroups/drumsets/rg_credits.inc similarity index 68% rename from sound/voicegroups/voicegroup190.inc rename to sound/voicegroups/drumsets/rg_credits.inc index 25a84e84ed..0af80106d6 100644 --- a/sound/voicegroups/voicegroup190.inc +++ b/sound/voicegroups/drumsets/rg_credits.inc @@ -1,41 +1,4 @@ - .align 2 -voicegroup190:: - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 7, 0 - voice_noise_alt 60, 0, 0, 0, 1, 9, 1 +voice_group rg_credits_drumset, 36 voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound_no_resample 64, 52, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 @@ -88,3 +51,4 @@ voicegroup190:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound_no_resample 64, 104, DirectSoundWaveData_ethnic_flavours_atarigane, 255, 0, 255, 0 voice_directsound 63, 64, DirectSoundWaveData_sc88pro_taiko, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/route101.inc b/sound/voicegroups/drumsets/route101.inc new file mode 100644 index 0000000000..779831fc4e --- /dev/null +++ b/sound/voicegroups/drumsets/route101.inc @@ -0,0 +1,31 @@ +voice_group route101_drumset, 36 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 67, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 61, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/route110.inc b/sound/voicegroups/drumsets/route110.inc new file mode 100644 index 0000000000..3535f62927 --- /dev/null +++ b/sound/voicegroups/drumsets/route110.inc @@ -0,0 +1,27 @@ +voice_group route110_drumset, 40 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 32, 49, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 79, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 74, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + diff --git a/sound/voicegroups/drumsets/rs.inc b/sound/voicegroups/drumsets/rs.inc new file mode 100644 index 0000000000..f15d9a514c --- /dev/null +++ b/sound/voicegroups/drumsets/rs.inc @@ -0,0 +1,31 @@ +voice_group rs_drumset, 36 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 + voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 + voice_directsound 48, 44, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 + voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 + voice_directsound 51, 54, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 54, 64, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 + voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_open_hihat, 255, 242, 141, 0 + voice_directsound 57, 69, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 + voice_directsound 60, 79, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 62, 84, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 70, 49, DirectSoundWaveData_unknown_bell, 255, 165, 103, 231 + voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 + voice_directsound_no_resample 60, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 235, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 + voice_directsound_no_resample 30, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 104, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound_no_resample 72, 94, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 + diff --git a/sound/voicegroups/dummy.inc b/sound/voicegroups/dummy.inc new file mode 100644 index 0000000000..43b431f856 --- /dev/null +++ b/sound/voicegroups/dummy.inc @@ -0,0 +1,100 @@ +voice_group dummy + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 0, 9, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 2, 0, 1, 6, 0 + voice_programmable_wave 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 + voice_square_2 60, 0, 3, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 0, 0, 1, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 255, 165, 154, 127 + voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 255, 165, 154, 127 + voice_directsound 60, 0, DirectSoundWaveData_unused_guitar_separates_power_chord, 255, 165, 206, 127 + voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 206, 127 + voice_directsound 60, 0, DirectSoundWaveData_unknown_snare, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 + voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 + diff --git a/sound/voicegroups/voicegroup065.inc b/sound/voicegroups/encounter_aqua.inc similarity index 96% rename from sound/voicegroups/voicegroup065.inc rename to sound/voicegroups/encounter_aqua.inc index 163bce0c7e..f45e9843c4 100644 --- a/sound/voicegroups/voicegroup065.inc +++ b/sound/voicegroups/encounter_aqua.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup065:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group encounter_aqua + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup065:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup067.inc b/sound/voicegroups/encounter_brendan.inc similarity index 96% rename from sound/voicegroups/voicegroup067.inc rename to sound/voicegroups/encounter_brendan.inc index ed8ccef4f8..3e0f96b624 100644 --- a/sound/voicegroups/voicegroup067.inc +++ b/sound/voicegroups/encounter_brendan.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup067:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group encounter_brendan + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup067:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup100.inc b/sound/voicegroups/encounter_champion.inc similarity index 97% rename from sound/voicegroups/voicegroup100.inc rename to sound/voicegroups/encounter_champion.inc index 577d05c354..fde001b902 100644 --- a/sound/voicegroups/voicegroup100.inc +++ b/sound/voicegroups/encounter_champion.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup100:: - voice_keysplit_all voicegroup001 +voice_group encounter_champion + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup100:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup063.inc b/sound/voicegroups/encounter_cool.inc similarity index 97% rename from sound/voicegroups/voicegroup063.inc rename to sound/voicegroups/encounter_cool.inc index 966ae20809..b0e0b9b454 100644 --- a/sound/voicegroups/voicegroup063.inc +++ b/sound/voicegroups/encounter_cool.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup063:: - voice_keysplit_all voicegroup001 +voice_group encounter_cool + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup063:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup096.inc b/sound/voicegroups/encounter_elite_four.inc similarity index 97% rename from sound/voicegroups/voicegroup096.inc rename to sound/voicegroups/encounter_elite_four.inc index b0cb653caf..b7842d6d03 100644 --- a/sound/voicegroups/voicegroup096.inc +++ b/sound/voicegroups/encounter_elite_four.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup096:: - voice_keysplit_all voicegroup001 +voice_group encounter_elite_four + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup096:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup053.inc b/sound/voicegroups/encounter_female.inc similarity index 96% rename from sound/voicegroups/voicegroup053.inc rename to sound/voicegroups/encounter_female.inc index e5f1a4d7e8..e98854b173 100644 --- a/sound/voicegroups/voicegroup053.inc +++ b/sound/voicegroups/encounter_female.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup053:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group encounter_female + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup053:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup027.inc b/sound/voicegroups/encounter_girl.inc similarity index 97% rename from sound/voicegroups/voicegroup027.inc rename to sound/voicegroups/encounter_girl.inc index 517ee87d43..47426833b9 100644 --- a/sound/voicegroups/voicegroup027.inc +++ b/sound/voicegroups/encounter_girl.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup027:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group encounter_girl + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup097.inc b/sound/voicegroups/encounter_hiker.inc similarity index 95% rename from sound/voicegroups/voicegroup097.inc rename to sound/voicegroups/encounter_hiker.inc index fb0542dac6..826fe14025 100644 --- a/sound/voicegroups/voicegroup097.inc +++ b/sound/voicegroups/encounter_hiker.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup097:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group encounter_hiker + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,9 +57,9 @@ voicegroup097:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup062.inc b/sound/voicegroups/encounter_intense.inc similarity index 97% rename from sound/voicegroups/voicegroup062.inc rename to sound/voicegroups/encounter_intense.inc index ad2e6cad7f..650fb2a8a3 100644 --- a/sound/voicegroups/voicegroup062.inc +++ b/sound/voicegroups/encounter_intense.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup062:: - voice_keysplit_all voicegroup001 +voice_group encounter_intense + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup062:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup099.inc b/sound/voicegroups/encounter_interviewer.inc similarity index 97% rename from sound/voicegroups/voicegroup099.inc rename to sound/voicegroups/encounter_interviewer.inc index e750f95831..1f3f5248a7 100644 --- a/sound/voicegroups/voicegroup099.inc +++ b/sound/voicegroups/encounter_interviewer.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup099:: - voice_keysplit_all voicegroup001 +voice_group encounter_interviewer + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup099:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup087.inc b/sound/voicegroups/encounter_magma.inc similarity index 96% rename from sound/voicegroups/voicegroup087.inc rename to sound/voicegroups/encounter_magma.inc index 1ccb69ea55..f41d1f5ad2 100644 --- a/sound/voicegroups/voicegroup087.inc +++ b/sound/voicegroups/encounter_magma.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup087:: - voice_keysplit_all voicegroup001 +voice_group encounter_magma + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup087:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup028.inc b/sound/voicegroups/encounter_male.inc similarity index 96% rename from sound/voicegroups/voicegroup028.inc rename to sound/voicegroups/encounter_male.inc index 9af19f1879..80cc90476c 100644 --- a/sound/voicegroups/voicegroup028.inc +++ b/sound/voicegroups/encounter_male.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup028:: - voice_keysplit_all voicegroup001 +voice_group encounter_male + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 3, 0, 1, 0, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup028:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup061.inc b/sound/voicegroups/encounter_may.inc similarity index 97% rename from sound/voicegroups/voicegroup061.inc rename to sound/voicegroups/encounter_may.inc index d73730ecbc..d4915bb36e 100644 --- a/sound/voicegroups/voicegroup061.inc +++ b/sound/voicegroups/encounter_may.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup061:: - voice_keysplit_all voicegroup001 +voice_group encounter_may + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup061:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup043.inc b/sound/voicegroups/encounter_rich.inc similarity index 94% rename from sound/voicegroups/voicegroup043.inc rename to sound/voicegroups/encounter_rich.inc index d6bd30bcba..d5ed5ddcc0 100644 --- a/sound/voicegroups/voicegroup043.inc +++ b/sound/voicegroups/encounter_rich.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup043:: +voice_group encounter_rich voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup043:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,7 +57,7 @@ voicegroup043:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup069.inc b/sound/voicegroups/encounter_suspicious.inc similarity index 96% rename from sound/voicegroups/voicegroup069.inc rename to sound/voicegroups/encounter_suspicious.inc index 26ea294051..41f59bc128 100644 --- a/sound/voicegroups/voicegroup069.inc +++ b/sound/voicegroups/encounter_suspicious.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup069:: - voice_keysplit_all voicegroup001 +voice_group encounter_suspicious + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup069:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,7 +57,7 @@ voicegroup069:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup036.inc b/sound/voicegroups/encounter_swimmer.inc similarity index 96% rename from sound/voicegroups/voicegroup036.inc rename to sound/voicegroups/encounter_swimmer.inc index c3d2df146c..eaafd5e332 100644 --- a/sound/voicegroups/voicegroup036.inc +++ b/sound/voicegroups/encounter_swimmer.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup036:: - voice_keysplit_all voicegroup001 +voice_group encounter_swimmer + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup036:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup036:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup095.inc b/sound/voicegroups/encounter_twins.inc similarity index 98% rename from sound/voicegroups/voicegroup095.inc rename to sound/voicegroups/encounter_twins.inc index 96b531f8ed..be0a7d70e9 100644 --- a/sound/voicegroups/voicegroup095.inc +++ b/sound/voicegroups/encounter_twins.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup095:: - voice_keysplit_all voicegroup001 +voice_group encounter_twins + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup102.inc b/sound/voicegroups/end.inc similarity index 99% rename from sound/voicegroups/voicegroup102.inc rename to sound/voicegroups/end.inc index 197ed891be..07da4dfad0 100644 --- a/sound/voicegroups/voicegroup102.inc +++ b/sound/voicegroups/end.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup102:: +voice_group end voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup068.inc b/sound/voicegroups/ever_grande.inc similarity index 96% rename from sound/voicegroups/voicegroup068.inc rename to sound/voicegroups/ever_grande.inc index 787ce997b7..bd8acc879e 100644 --- a/sound/voicegroups/voicegroup068.inc +++ b/sound/voicegroups/ever_grande.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup068:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group ever_grande + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup068:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup026.inc b/sound/voicegroups/evolution.inc similarity index 96% rename from sound/voicegroups/voicegroup026.inc rename to sound/voicegroups/evolution.inc index d18047d582..b3513a15e7 100644 --- a/sound/voicegroups/voicegroup026.inc +++ b/sound/voicegroups/evolution.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup026:: - voice_keysplit_all voicegroup001 +voice_group evolution + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup026:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup083.inc b/sound/voicegroups/fallarbor.inc similarity index 91% rename from sound/voicegroups/voicegroup083.inc rename to sound/voicegroups/fallarbor.inc index 4f2fcd809f..3cc2ba6bbe 100644 --- a/sound/voicegroups/voicegroup083.inc +++ b/sound/voicegroups/fallarbor.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup083:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group fallarbor + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup083:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,9 +57,9 @@ voicegroup083:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup012.inc b/sound/voicegroups/fanfare.inc similarity index 92% rename from sound/voicegroups/voicegroup012.inc rename to sound/voicegroups/fanfare.inc index 2fe7cf8180..671564a9bc 100644 --- a/sound/voicegroups/voicegroup012.inc +++ b/sound/voicegroups/fanfare.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup012:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group fanfare + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_directsound 60, 0, DirectSoundWaveData_trinity_30303_mega_bass, 255, 178, 180, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup012:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup012:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup066.inc b/sound/voicegroups/follow_me.inc similarity index 98% rename from sound/voicegroups/voicegroup066.inc rename to sound/voicegroups/follow_me.inc index af4a7f8410..d1b4297392 100644 --- a/sound/voicegroups/voicegroup066.inc +++ b/sound/voicegroups/follow_me.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup066:: - voice_keysplit_all voicegroup001 +voice_group follow_me + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup032.inc b/sound/voicegroups/fortree.inc similarity index 97% rename from sound/voicegroups/voicegroup032.inc rename to sound/voicegroups/fortree.inc index dc60bbdf3b..6f12c7ad94 100644 --- a/sound/voicegroups/voicegroup032.inc +++ b/sound/voicegroups/fortree.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup032:: - voice_keysplit_all voicegroup016 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group fortree + voice_keysplit_all voicegroup_petalburg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup129.inc b/sound/voicegroups/frlg_sfx.inc similarity index 98% rename from sound/voicegroups/voicegroup129.inc rename to sound/voicegroups/frlg_sfx.inc index 8e136bdf48..eadd0959c4 100644 --- a/sound/voicegroups/voicegroup129.inc +++ b/sound/voicegroups/frlg_sfx.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup129:: +voice_group frlg_sfx voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 @@ -58,7 +57,7 @@ voicegroup129:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup072.inc b/sound/voicegroups/game_corner.inc similarity index 94% rename from sound/voicegroups/voicegroup072.inc rename to sound/voicegroups/game_corner.inc index 50fa4e4cfa..127fe4ea05 100644 --- a/sound/voicegroups/voicegroup072.inc +++ b/sound/voicegroups/game_corner.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup072:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group game_corner + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup072:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup072:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup013.inc b/sound/voicegroups/gym.inc similarity index 93% rename from sound/voicegroups/voicegroup013.inc rename to sound/voicegroups/gym.inc index f99c6f3cdc..c4297ff663 100644 --- a/sound/voicegroups/voicegroup013.inc +++ b/sound/voicegroups/gym.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup013:: - voice_keysplit_all voicegroup001 +voice_group gym + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup013:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup013:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup082.inc b/sound/voicegroups/hall_of_fame.inc similarity index 94% rename from sound/voicegroups/voicegroup082.inc rename to sound/voicegroups/hall_of_fame.inc index b6b5506f1a..82651a41e6 100644 --- a/sound/voicegroups/voicegroup082.inc +++ b/sound/voicegroups/hall_of_fame.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup082:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group hall_of_fame + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup082:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup082:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup093.inc b/sound/voicegroups/hall_of_fame_room.inc similarity index 95% rename from sound/voicegroups/voicegroup093.inc rename to sound/voicegroups/hall_of_fame_room.inc index 8cea357335..842ef77514 100644 --- a/sound/voicegroups/voicegroup093.inc +++ b/sound/voicegroups/hall_of_fame_room.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup093:: - voice_keysplit_all voicegroup001 +voice_group hall_of_fame_room + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup093:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,9 +57,9 @@ voicegroup093:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup056.inc b/sound/voicegroups/help.inc similarity index 96% rename from sound/voicegroups/voicegroup056.inc rename to sound/voicegroups/help.inc index ec543b9b33..6bb535c8a3 100644 --- a/sound/voicegroups/voicegroup056.inc +++ b/sound/voicegroups/help.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup056:: - voice_keysplit_all voicegroup001 +voice_group help + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup056:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup056:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup060.inc b/sound/voicegroups/intro.inc similarity index 93% rename from sound/voicegroups/voicegroup060.inc rename to sound/voicegroups/intro.inc index 448841e625..66da0b3051 100644 --- a/sound/voicegroups/voicegroup060.inc +++ b/sound/voicegroups/intro.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup060:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group intro + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup060:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 128, 226, 0, 38 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup060:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup088.inc b/sound/voicegroups/intro_battle.inc similarity index 93% rename from sound/voicegroups/voicegroup088.inc rename to sound/voicegroups/intro_battle.inc index 8f6f216884..8845d3c714 100644 --- a/sound/voicegroups/voicegroup088.inc +++ b/sound/voicegroups/intro_battle.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup088:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group intro_battle + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 @@ -48,7 +47,7 @@ voicegroup088:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup088:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup009.inc b/sound/voicegroups/keysplits/french_horn.inc similarity index 84% rename from sound/voicegroups/voicegroup009.inc rename to sound/voicegroups/keysplits/french_horn.inc index 4a51a02ca3..193fa3957c 100644 --- a/sound/voicegroups/voicegroup009.inc +++ b/sound/voicegroups/keysplits/french_horn.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup009:: +voice_group french_horn_keysplit voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_60, 255, 0, 224, 165 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_french_horn_72, 255, 0, 218, 165 diff --git a/sound/voicegroups/voicegroup005.inc b/sound/voicegroups/keysplits/piano.inc similarity index 92% rename from sound/voicegroups/voicegroup005.inc rename to sound/voicegroups/keysplits/piano.inc index 584451a62f..93484ea8b2 100644 --- a/sound/voicegroups/voicegroup005.inc +++ b/sound/voicegroups/keysplits/piano.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup005:: +voice_group piano_keysplit voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_48, 255, 252, 0, 239 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_60, 255, 250, 0, 221 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_piano1_72, 255, 250, 0, 221 diff --git a/sound/voicegroups/voicegroup006.inc b/sound/voicegroups/keysplits/strings.inc similarity index 90% rename from sound/voicegroups/voicegroup006.inc rename to sound/voicegroups/keysplits/strings.inc index 52b2b335f2..27e445e359 100644 --- a/sound/voicegroups/voicegroup006.inc +++ b/sound/voicegroups/keysplits/strings.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup006:: +voice_group strings_keysplit voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_60, 255, 0, 255, 196 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_72, 255, 0, 255, 196 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_string_ensemble_84, 255, 0, 255, 196 diff --git a/sound/voicegroups/keysplits/trumpet.inc b/sound/voicegroups/keysplits/trumpet.inc new file mode 100644 index 0000000000..eb38b7de74 --- /dev/null +++ b/sound/voicegroups/keysplits/trumpet.inc @@ -0,0 +1,5 @@ +voice_group trumpet_keysplit + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_60, 255, 0, 193, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_72, 255, 0, 193, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_84, 255, 0, 193, 127 + diff --git a/sound/voicegroups/voicegroup008.inc b/sound/voicegroups/keysplits/tuba.inc similarity index 86% rename from sound/voicegroups/voicegroup008.inc rename to sound/voicegroups/keysplits/tuba.inc index 7fc874e87a..5d00a8000a 100644 --- a/sound/voicegroups/voicegroup008.inc +++ b/sound/voicegroups/keysplits/tuba.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup008:: +voice_group tuba_keysplit voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tuba_39, 255, 0, 255, 165 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tuba_51, 255, 0, 255, 165 diff --git a/sound/voicegroups/voicegroup054.inc b/sound/voicegroups/lilycove.inc similarity index 95% rename from sound/voicegroups/voicegroup054.inc rename to sound/voicegroups/lilycove.inc index ddd17ed995..8988ade2b1 100644 --- a/sound/voicegroups/voicegroup054.inc +++ b/sound/voicegroups/lilycove.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup054:: - voice_keysplit_all voicegroup001 +voice_group lilycove + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup054:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,9 +57,9 @@ voicegroup054:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup020.inc b/sound/voicegroups/lilycove_museum.inc similarity index 94% rename from sound/voicegroups/voicegroup020.inc rename to sound/voicegroups/lilycove_museum.inc index 8449fbdd60..06ee86ea9d 100644 --- a/sound/voicegroups/voicegroup020.inc +++ b/sound/voicegroups/lilycove_museum.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup020:: - voice_keysplit voicegroup005, KeySplitTable1 +voice_group lilycove_museum + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup020:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,7 +57,7 @@ voicegroup020:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup041.inc b/sound/voicegroups/link_contest_p1.inc similarity index 95% rename from sound/voicegroups/voicegroup041.inc rename to sound/voicegroups/link_contest_p1.inc index def4e46b00..7b1857db1c 100644 --- a/sound/voicegroups/voicegroup041.inc +++ b/sound/voicegroups/link_contest_p1.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup041:: - voice_keysplit_all voicegroup001 +voice_group link_contest_p1 + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup041:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup041:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup040.inc b/sound/voicegroups/link_contest_p2.inc similarity index 95% rename from sound/voicegroups/voicegroup040.inc rename to sound/voicegroups/link_contest_p2.inc index f390cb3d85..dd547e3662 100644 --- a/sound/voicegroups/voicegroup040.inc +++ b/sound/voicegroups/link_contest_p2.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup040:: - voice_keysplit_all voicegroup001 +voice_group link_contest_p2 + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup040:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup040:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup042.inc b/sound/voicegroups/link_contest_p3.inc similarity index 95% rename from sound/voicegroups/voicegroup042.inc rename to sound/voicegroups/link_contest_p3.inc index 1298ddbd52..f9d5559a5e 100644 --- a/sound/voicegroups/voicegroup042.inc +++ b/sound/voicegroups/link_contest_p3.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup042:: - voice_keysplit_all voicegroup001 +voice_group link_contest_p3 + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup042:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup042:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup039.inc b/sound/voicegroups/link_contest_p4.inc similarity index 95% rename from sound/voicegroups/voicegroup039.inc rename to sound/voicegroups/link_contest_p4.inc index 9e8d16df0b..2abcd10dab 100644 --- a/sound/voicegroups/voicegroup039.inc +++ b/sound/voicegroups/link_contest_p4.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup039:: - voice_keysplit_all voicegroup001 +voice_group link_contest_p4 + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup039:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup039:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup051.inc b/sound/voicegroups/littleroot.inc similarity index 94% rename from sound/voicegroups/voicegroup051.inc rename to sound/voicegroups/littleroot.inc index d3a144622a..2817a022af 100644 --- a/sound/voicegroups/voicegroup051.inc +++ b/sound/voicegroups/littleroot.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup051:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group littleroot + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 2, 1, 4, 4, 2 @@ -48,7 +47,7 @@ voicegroup051:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 99 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup034.inc b/sound/voicegroups/littleroot_test.inc similarity index 94% rename from sound/voicegroups/voicegroup034.inc rename to sound/voicegroups/littleroot_test.inc index fe973b84c3..1788f263c0 100644 --- a/sound/voicegroups/voicegroup034.inc +++ b/sound/voicegroups/littleroot_test.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup034:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group littleroot_test + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 1, 4, 2 @@ -48,7 +47,7 @@ voicegroup034:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup052.inc b/sound/voicegroups/mt_chimney.inc similarity index 94% rename from sound/voicegroups/voicegroup052.inc rename to sound/voicegroups/mt_chimney.inc index 438e2d5f17..2255c50d75 100644 --- a/sound/voicegroups/voicegroup052.inc +++ b/sound/voicegroups/mt_chimney.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup052:: - voice_keysplit_all voicegroup001 +voice_group mt_chimney + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 3, 1, 2, 6, 0 voice_square_2 60, 0, 3, 1, 2, 6, 0 @@ -48,7 +47,7 @@ voicegroup052:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup052:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup078.inc b/sound/voicegroups/mt_pyre.inc similarity index 96% rename from sound/voicegroups/voicegroup078.inc rename to sound/voicegroups/mt_pyre.inc index e3ef10feb7..5d7caa771b 100644 --- a/sound/voicegroups/voicegroup078.inc +++ b/sound/voicegroups/mt_pyre.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup078:: - voice_keysplit_all voicegroup001 +voice_group mt_pyre + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup078:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup078:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup080.inc b/sound/voicegroups/mt_pyre_exterior.inc similarity index 96% rename from sound/voicegroups/voicegroup080.inc rename to sound/voicegroups/mt_pyre_exterior.inc index 6d627ad92e..7f4c2e4363 100644 --- a/sound/voicegroups/voicegroup080.inc +++ b/sound/voicegroups/mt_pyre_exterior.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup080:: - voice_keysplit_all voicegroup001 +voice_group mt_pyre_exterior + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup080:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup080:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup023.inc b/sound/voicegroups/oceanic_museum.inc similarity index 93% rename from sound/voicegroups/voicegroup023.inc rename to sound/voicegroups/oceanic_museum.inc index eede8dc019..1b072e2f44 100644 --- a/sound/voicegroups/voicegroup023.inc +++ b/sound/voicegroups/oceanic_museum.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup023:: - voice_keysplit voicegroup005, KeySplitTable1 - voice_keysplit_all voicegroup001 +voice_group oceanic_museum + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup023:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup023:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup019.inc b/sound/voicegroups/oldale.inc similarity index 94% rename from sound/voicegroups/voicegroup019.inc rename to sound/voicegroups/oldale.inc index a983659c39..177f45c53e 100644 --- a/sound/voicegroups/voicegroup019.inc +++ b/sound/voicegroups/oldale.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup019:: +voice_group oldale voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup019:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,9 +57,9 @@ voicegroup019:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/petalburg.inc b/sound/voicegroups/petalburg.inc new file mode 100644 index 0000000000..ff49460b51 --- /dev/null +++ b/sound/voicegroups/petalburg.inc @@ -0,0 +1,130 @@ +voice_group petalburg + voice_keysplit_all voicegroup_petalburg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2 60, 0, 3, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 3, 0, 2, 0, 0 + voice_square_2 60, 0, 3, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 3, 0, 6, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 0, 2 + voice_noise_alt 60, 0, 0, 0, 1, 0, 1 + diff --git a/sound/voicegroups/voicegroup018.inc b/sound/voicegroups/petalburg_woods.inc similarity index 96% rename from sound/voicegroups/voicegroup018.inc rename to sound/voicegroups/petalburg_woods.inc index 30b63bb26e..5dbe72c9a9 100644 --- a/sound/voicegroups/voicegroup018.inc +++ b/sound/voicegroups/petalburg_woods.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup018:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group petalburg_woods + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 0, 0, 1, 7, 1 @@ -48,7 +47,7 @@ voicegroup018:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup046.inc b/sound/voicegroups/poke_center.inc similarity index 97% rename from sound/voicegroups/voicegroup046.inc rename to sound/voicegroups/poke_center.inc index f653241e35..edcf645bfa 100644 --- a/sound/voicegroups/voicegroup046.inc +++ b/sound/voicegroups/poke_center.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup046:: - voice_keysplit voicegroup005, KeySplitTable1 +voice_group poke_center + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_programmable_wave_alt 60, 0, ProgrammableWaveData_14, 0, 1, 12, 0 voice_square_1_alt 60, 0, 0, 0, 1, 1, 9, 0 voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 @@ -48,7 +47,7 @@ voicegroup046:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup050.inc b/sound/voicegroups/poke_mart.inc similarity index 97% rename from sound/voicegroups/voicegroup050.inc rename to sound/voicegroups/poke_mart.inc index 6b45664eb0..cc6580d5ae 100644 --- a/sound/voicegroups/voicegroup050.inc +++ b/sound/voicegroups/poke_mart.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup050:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group poke_mart + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup109.inc b/sound/voicegroups/rayquaza_appears.inc similarity index 97% rename from sound/voicegroups/voicegroup109.inc rename to sound/voicegroups/rayquaza_appears.inc index a999143737..f7cddd3881 100644 --- a/sound/voicegroups/voicegroup109.inc +++ b/sound/voicegroups/rayquaza_appears.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup109:: - voice_keysplit_all voicegroup004 +voice_group rayquaza_appears + voice_keysplit_all voicegroup_emerald_drumset_2 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup105.inc b/sound/voicegroups/register_match_call.inc similarity index 97% rename from sound/voicegroups/voicegroup105.inc rename to sound/voicegroups/register_match_call.inc index a1a1bc2d61..b35b30fb36 100644 --- a/sound/voicegroups/voicegroup105.inc +++ b/sound/voicegroups/register_match_call.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup105:: - voice_keysplit_all voicegroup002 +voice_group register_match_call + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup179.inc b/sound/voicegroups/rg_caught_intro.inc similarity index 88% rename from sound/voicegroups/voicegroup179.inc rename to sound/voicegroups/rg_caught_intro.inc index e69cace5b8..b2623ba7a0 100644 --- a/sound/voicegroups/voicegroup179.inc +++ b/sound/voicegroups/rg_caught_intro.inc @@ -1,8 +1,7 @@ - .align 2 -voicegroup179:: - voice_keysplit_all voicegroup177 - voice_keysplit_all voicegroup176 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_caught_intro + voice_keysplit_all voicegroup_frlg_fanfare_drumset_1 + voice_keysplit_all voicegroup_frlg_fanfare_drumset_2 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup179:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup179:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup168.inc b/sound/voicegroups/rg_celadon.inc similarity index 95% rename from sound/voicegroups/voicegroup168.inc rename to sound/voicegroups/rg_celadon.inc index ea6b59d2ef..9f9dc36cf9 100644 --- a/sound/voicegroups/voicegroup168.inc +++ b/sound/voicegroups/rg_celadon.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup168:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_celadon + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 @@ -48,7 +47,7 @@ voicegroup168:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup168:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup138.inc b/sound/voicegroups/rg_cinnabar.inc similarity index 95% rename from sound/voicegroups/voicegroup138.inc rename to sound/voicegroups/rg_cinnabar.inc index 227538f5dc..90c207b675 100644 --- a/sound/voicegroups/voicegroup138.inc +++ b/sound/voicegroups/rg_cinnabar.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup138:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_cinnabar + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 @@ -48,7 +47,7 @@ voicegroup138:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup138:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup149.inc b/sound/voicegroups/rg_credits.inc similarity index 91% rename from sound/voicegroups/voicegroup149.inc rename to sound/voicegroups/rg_credits.inc index c0239fef95..951a578236 100644 --- a/sound/voicegroups/voicegroup149.inc +++ b/sound/voicegroups/rg_credits.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup149:: - voice_keysplit_all voicegroup190 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_credits + voice_keysplit_all voicegroup_rg_credits_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1_alt 60, 0, 0, 2, 0, 0, 12, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup149:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 153 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup149:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup141.inc b/sound/voicegroups/rg_cycling.inc similarity index 95% rename from sound/voicegroups/voicegroup141.inc rename to sound/voicegroups/rg_cycling.inc index 1e556a21b6..57e225141b 100644 --- a/sound/voicegroups/voicegroup141.inc +++ b/sound/voicegroups/rg_cycling.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup141:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_cycling + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup141:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup141:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/rg_dex_rating.inc b/sound/voicegroups/rg_dex_rating.inc new file mode 100644 index 0000000000..b349e6a132 --- /dev/null +++ b/sound/voicegroups/rg_dex_rating.inc @@ -0,0 +1,90 @@ +voice_group rg_dex_rating + voice_keysplit_all voicegroup_frlg_fanfare_drumset_1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 165, 154, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 7, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 0 + diff --git a/sound/voicegroups/voicegroup144.inc b/sound/voicegroups/rg_encounter_boy.inc similarity index 96% rename from sound/voicegroups/voicegroup144.inc rename to sound/voicegroups/rg_encounter_boy.inc index 87830a387b..27d34d9136 100644 --- a/sound/voicegroups/voicegroup144.inc +++ b/sound/voicegroups/rg_encounter_boy.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup144:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_encounter_boy + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup144:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup184.inc b/sound/voicegroups/rg_encounter_deoxys.inc similarity index 99% rename from sound/voicegroups/voicegroup184.inc rename to sound/voicegroups/rg_encounter_deoxys.inc index 86f392e65c..7b7fd5bd98 100644 --- a/sound/voicegroups/voicegroup184.inc +++ b/sound/voicegroups/rg_encounter_deoxys.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup184:: +voice_group rg_encounter_deoxys voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup143.inc b/sound/voicegroups/rg_encounter_girl.inc similarity index 96% rename from sound/voicegroups/voicegroup143.inc rename to sound/voicegroups/rg_encounter_girl.inc index 9cb286ac13..6e9989e6be 100644 --- a/sound/voicegroups/voicegroup143.inc +++ b/sound/voicegroups/rg_encounter_girl.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup143:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_encounter_girl + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup143:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/rg_encounter_rival.inc b/sound/voicegroups/rg_encounter_rival.inc new file mode 100644 index 0000000000..445cbad320 --- /dev/null +++ b/sound/voicegroups/rg_encounter_rival.inc @@ -0,0 +1,130 @@ +voice_group rg_encounter_rival + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 + voice_square_2_alt 60, 0, 3, 0, 2, 3, 4 + voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 3, 1 + diff --git a/sound/voicegroups/voicegroup142.inc b/sound/voicegroups/rg_encounter_rocket.inc similarity index 98% rename from sound/voicegroups/voicegroup142.inc rename to sound/voicegroups/rg_encounter_rocket.inc index af5b809bf8..69fd532a0e 100644 --- a/sound/voicegroups/voicegroup142.inc +++ b/sound/voicegroups/rg_encounter_rocket.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup142:: - voice_keysplit_all voicegroup002 +voice_group rg_encounter_rocket + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup131.inc b/sound/voicegroups/rg_follow_me.inc similarity index 97% rename from sound/voicegroups/voicegroup131.inc rename to sound/voicegroups/rg_follow_me.inc index 029afa5be5..5f7563da82 100644 --- a/sound/voicegroups/voicegroup131.inc +++ b/sound/voicegroups/rg_follow_me.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup131:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_follow_me + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 128, 204, 51, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup167.inc b/sound/voicegroups/rg_fuchsia.inc similarity index 97% rename from sound/voicegroups/voicegroup167.inc rename to sound/voicegroups/rg_fuchsia.inc index 0213b7aec0..c2b9ff1d16 100644 --- a/sound/voicegroups/voicegroup167.inc +++ b/sound/voicegroups/rg_fuchsia.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup167:: - voice_keysplit_all voicegroup002 +voice_group rg_fuchsia + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup167:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup132.inc b/sound/voicegroups/rg_game_corner.inc similarity index 94% rename from sound/voicegroups/voicegroup132.inc rename to sound/voicegroups/rg_game_corner.inc index 2806916bca..fb7c6f615e 100644 --- a/sound/voicegroups/voicegroup132.inc +++ b/sound/voicegroups/rg_game_corner.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup132:: - voice_keysplit_all voicegroup002 +voice_group rg_game_corner + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup132:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup132:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup181.inc b/sound/voicegroups/rg_game_freak.inc similarity index 95% rename from sound/voicegroups/voicegroup181.inc rename to sound/voicegroups/rg_game_freak.inc index 92df8710a8..8a7d475dc9 100644 --- a/sound/voicegroups/voicegroup181.inc +++ b/sound/voicegroups/rg_game_freak.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup181:: +voice_group rg_game_freak voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup134.inc b/sound/voicegroups/rg_gym.inc similarity index 93% rename from sound/voicegroups/voicegroup134.inc rename to sound/voicegroups/rg_gym.inc index 1bc01fed07..78791967fa 100644 --- a/sound/voicegroups/voicegroup134.inc +++ b/sound/voicegroups/rg_gym.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup134:: - voice_keysplit_all voicegroup001 +voice_group rg_gym + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup134:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup134:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup145.inc b/sound/voicegroups/rg_hall_of_fame.inc similarity index 95% rename from sound/voicegroups/voicegroup145.inc rename to sound/voicegroups/rg_hall_of_fame.inc index 96cda70e48..b982805140 100644 --- a/sound/voicegroups/voicegroup145.inc +++ b/sound/voicegroups/rg_hall_of_fame.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup145:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_hall_of_fame + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 @@ -48,7 +47,7 @@ voicegroup145:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup145:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup140.inc b/sound/voicegroups/rg_heal.inc similarity index 71% rename from sound/voicegroups/voicegroup140.inc rename to sound/voicegroups/rg_heal.inc index 8206cca1d2..01efe859ed 100644 --- a/sound/voicegroups/voicegroup140.inc +++ b/sound/voicegroups/rg_heal.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup140:: - voice_keysplit_all voicegroup001 +voice_group rg_heal + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 2, 3, 1 voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 diff --git a/sound/voicegroups/voicegroup136.inc b/sound/voicegroups/rg_intro_fight.inc similarity index 96% rename from sound/voicegroups/voicegroup136.inc rename to sound/voicegroups/rg_intro_fight.inc index 0428c8c004..3b7d70b77b 100644 --- a/sound/voicegroups/voicegroup136.inc +++ b/sound/voicegroups/rg_intro_fight.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup136:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_intro_fight + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup136:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup135.inc b/sound/voicegroups/rg_jigglypuff.inc similarity index 97% rename from sound/voicegroups/voicegroup135.inc rename to sound/voicegroups/rg_jigglypuff.inc index 2ea22bf969..8c0abfcb10 100644 --- a/sound/voicegroups/voicegroup135.inc +++ b/sound/voicegroups/rg_jigglypuff.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup135:: - voice_keysplit_all voicegroup002 +voice_group rg_jigglypuff + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup139.inc b/sound/voicegroups/rg_lavender.inc similarity index 94% rename from sound/voicegroups/voicegroup139.inc rename to sound/voicegroups/rg_lavender.inc index e8969de570..59dcb20293 100644 --- a/sound/voicegroups/voicegroup139.inc +++ b/sound/voicegroups/rg_lavender.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup139:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_lavender + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup139:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 226 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 @@ -58,9 +57,9 @@ voicegroup139:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup147.inc b/sound/voicegroups/rg_mt_moon.inc similarity index 94% rename from sound/voicegroups/voicegroup147.inc rename to sound/voicegroups/rg_mt_moon.inc index 4767815824..026bb7edc8 100644 --- a/sound/voicegroups/voicegroup147.inc +++ b/sound/voicegroups/rg_mt_moon.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup147:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_mt_moon + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup147:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup183.inc b/sound/voicegroups/rg_mystery_gift.inc similarity index 98% rename from sound/voicegroups/voicegroup183.inc rename to sound/voicegroups/rg_mystery_gift.inc index ff49e3763b..8f26abe0e0 100644 --- a/sound/voicegroups/voicegroup183.inc +++ b/sound/voicegroups/rg_mystery_gift.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup183:: - voice_keysplit_all voicegroup002 +voice_group rg_mystery_gift + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup182.inc b/sound/voicegroups/rg_new_game.inc similarity index 91% rename from sound/voicegroups/voicegroup182.inc rename to sound/voicegroups/rg_new_game.inc index ec39554958..ffcbcdf748 100644 --- a/sound/voicegroups/voicegroup182.inc +++ b/sound/voicegroups/rg_new_game.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup182:: - voice_keysplit_all voicegroup002 +voice_group rg_new_game + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup182:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 76 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup182:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup161.inc b/sound/voicegroups/rg_oak.inc similarity index 94% rename from sound/voicegroups/voicegroup161.inc rename to sound/voicegroups/rg_oak.inc index c334fa2647..be46da360b 100644 --- a/sound/voicegroups/voicegroup161.inc +++ b/sound/voicegroups/rg_oak.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup161:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_oak + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup161:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,9 +55,9 @@ voicegroup161:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup160.inc b/sound/voicegroups/rg_oak_lab.inc similarity index 96% rename from sound/voicegroups/voicegroup160.inc rename to sound/voicegroups/rg_oak_lab.inc index 160d0cad8f..65fa559da3 100644 --- a/sound/voicegroups/voicegroup160.inc +++ b/sound/voicegroups/rg_oak_lab.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup160:: - voice_keysplit_all voicegroup001 +voice_group rg_oak_lab + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup160:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup178.inc b/sound/voicegroups/rg_obtain_key_item.inc similarity index 97% rename from sound/voicegroups/voicegroup178.inc rename to sound/voicegroups/rg_obtain_key_item.inc index 026d7bb3d8..e9f2bc0078 100644 --- a/sound/voicegroups/voicegroup178.inc +++ b/sound/voicegroups/rg_obtain_key_item.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup178:: - voice_keysplit_all voicegroup177 +voice_group rg_obtain_key_item + voice_keysplit_all voicegroup_frlg_fanfare_drumset_1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup159.inc b/sound/voicegroups/rg_pallet.inc similarity index 98% rename from sound/voicegroups/voicegroup159.inc rename to sound/voicegroups/rg_pallet.inc index f1d2046560..91836ad8dc 100644 --- a/sound/voicegroups/voicegroup159.inc +++ b/sound/voicegroups/rg_pallet.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup159:: +voice_group rg_pallet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup159:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup173.inc b/sound/voicegroups/rg_pewter.inc similarity index 96% rename from sound/voicegroups/voicegroup173.inc rename to sound/voicegroups/rg_pewter.inc index 46979c6258..bdac72177d 100644 --- a/sound/voicegroups/voicegroup173.inc +++ b/sound/voicegroups/rg_pewter.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup173:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_pewter + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 @@ -48,7 +47,7 @@ voicegroup173:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup180.inc b/sound/voicegroups/rg_photo.inc similarity index 98% rename from sound/voicegroups/voicegroup180.inc rename to sound/voicegroups/rg_photo.inc index ea182d38e5..a871efd3d4 100644 --- a/sound/voicegroups/voicegroup180.inc +++ b/sound/voicegroups/rg_photo.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup180:: +voice_group rg_photo voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 64, 249, 0, 188 diff --git a/sound/voicegroups/voicegroup162.inc b/sound/voicegroups/rg_poke_center.inc similarity index 96% rename from sound/voicegroups/voicegroup162.inc rename to sound/voicegroups/rg_poke_center.inc index 3a532b23ee..26abb41add 100644 --- a/sound/voicegroups/voicegroup162.inc +++ b/sound/voicegroups/rg_poke_center.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup162:: - voice_keysplit_all voicegroup002 +voice_group rg_poke_center + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup162:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup148.inc b/sound/voicegroups/rg_poke_mansion.inc similarity index 96% rename from sound/voicegroups/voicegroup148.inc rename to sound/voicegroups/rg_poke_mansion.inc index 4fc324df88..a1d24e89fd 100644 --- a/sound/voicegroups/voicegroup148.inc +++ b/sound/voicegroups/rg_poke_mansion.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup148:: - voice_keysplit_all voicegroup002 +voice_group rg_poke_mansion + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup148:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,7 +57,7 @@ voicegroup148:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup165.inc b/sound/voicegroups/rg_poke_tower.inc similarity index 94% rename from sound/voicegroups/voicegroup165.inc rename to sound/voicegroups/rg_poke_tower.inc index c3262766cb..a05561c50a 100644 --- a/sound/voicegroups/voicegroup165.inc +++ b/sound/voicegroups/rg_poke_tower.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup165:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_poke_tower + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup165:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 226 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1_alt 60, 0, 0, 2, 0, 2, 10, 1 voice_square_2_alt 60, 0, 2, 0, 2, 6, 6 @@ -58,9 +57,9 @@ voicegroup165:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup133.inc b/sound/voicegroups/rg_rocket_hideout.inc similarity index 94% rename from sound/voicegroups/voicegroup133.inc rename to sound/voicegroups/rg_rocket_hideout.inc index be70f6ae33..8d3d81a008 100644 --- a/sound/voicegroups/voicegroup133.inc +++ b/sound/voicegroups/rg_rocket_hideout.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup133:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_rocket_hideout + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup133:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup133:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup150.inc b/sound/voicegroups/rg_route1.inc similarity index 98% rename from sound/voicegroups/voicegroup150.inc rename to sound/voicegroups/rg_route1.inc index c51150d782..237e091282 100644 --- a/sound/voicegroups/voicegroup150.inc +++ b/sound/voicegroups/rg_route1.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup150:: - voice_keysplit_all voicegroup002 +voice_group rg_route1 + voice_keysplit_all voicegroup_frlg_drumset voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup153.inc b/sound/voicegroups/rg_route11.inc similarity index 93% rename from sound/voicegroups/voicegroup153.inc rename to sound/voicegroups/rg_route11.inc index 7206c7ba3d..1ee794137b 100644 --- a/sound/voicegroups/voicegroup153.inc +++ b/sound/voicegroups/rg_route11.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup153:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_route11 + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup153:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup153:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup151.inc b/sound/voicegroups/rg_route24.inc similarity index 91% rename from sound/voicegroups/voicegroup151.inc rename to sound/voicegroups/rg_route24.inc index 29571169d6..7e50c4824f 100644 --- a/sound/voicegroups/voicegroup151.inc +++ b/sound/voicegroups/rg_route24.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup151:: - voice_keysplit_all voicegroup002 +voice_group rg_route24 + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup151:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 127 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup151:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup152.inc b/sound/voicegroups/rg_route3.inc similarity index 94% rename from sound/voicegroups/voicegroup152.inc rename to sound/voicegroups/rg_route3.inc index 06ccc3ae9d..781d2b9a41 100644 --- a/sound/voicegroups/voicegroup152.inc +++ b/sound/voicegroups/rg_route3.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup152:: - voice_keysplit_all voicegroup002 +voice_group rg_route3 + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup152:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup152:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup188.inc b/sound/voicegroups/rg_sevii_45.inc similarity index 96% rename from sound/voicegroups/voicegroup188.inc rename to sound/voicegroups/rg_sevii_45.inc index 8556bcd4d2..c81a569a9b 100644 --- a/sound/voicegroups/voicegroup188.inc +++ b/sound/voicegroups/rg_sevii_45.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup188:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_sevii_45 + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 @@ -48,7 +47,7 @@ voicegroup188:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/rg_sevii_67.inc b/sound/voicegroups/rg_sevii_67.inc new file mode 100644 index 0000000000..6a35208337 --- /dev/null +++ b/sound/voicegroups/rg_sevii_67.inc @@ -0,0 +1,130 @@ +voice_group rg_sevii_67 + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 3 + voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 7, 15, 2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 7, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 1 + diff --git a/sound/voicegroups/voicegroup187.inc b/sound/voicegroups/rg_sevii_route.inc similarity index 94% rename from sound/voicegroups/voicegroup187.inc rename to sound/voicegroups/rg_sevii_route.inc index 640912505a..5b5370a15e 100644 --- a/sound/voicegroups/voicegroup187.inc +++ b/sound/voicegroups/rg_sevii_route.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup187:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_sevii_route + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup187:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup187:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup166.inc b/sound/voicegroups/rg_silph.inc similarity index 94% rename from sound/voicegroups/voicegroup166.inc rename to sound/voicegroups/rg_silph.inc index edd94624c0..0de5b368fa 100644 --- a/sound/voicegroups/voicegroup166.inc +++ b/sound/voicegroups/rg_silph.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup166:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_silph + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup166:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup166:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 236, 188 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup163.inc b/sound/voicegroups/rg_ss_anne.inc similarity index 95% rename from sound/voicegroups/voicegroup163.inc rename to sound/voicegroups/rg_ss_anne.inc index cd7c6ebef2..931b86ed10 100644 --- a/sound/voicegroups/voicegroup163.inc +++ b/sound/voicegroups/rg_ss_anne.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup163:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_ss_anne + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 @@ -48,7 +47,7 @@ voicegroup163:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup163:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_unknown_18, 255, 0, 206, 204 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup164.inc b/sound/voicegroups/rg_surf.inc similarity index 96% rename from sound/voicegroups/voicegroup164.inc rename to sound/voicegroups/rg_surf.inc index d64cfd33ad..b134793f73 100644 --- a/sound/voicegroups/voicegroup164.inc +++ b/sound/voicegroups/rg_surf.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup164:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_surf + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 128, 180, 108, 209 @@ -48,7 +47,7 @@ voicegroup164:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup186.inc b/sound/voicegroups/rg_teachy_tv_menu.inc similarity index 98% rename from sound/voicegroups/voicegroup186.inc rename to sound/voicegroups/rg_teachy_tv_menu.inc index 18dc71d70d..160fbf3d07 100644 --- a/sound/voicegroups/voicegroup186.inc +++ b/sound/voicegroups/rg_teachy_tv_menu.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup186:: +voice_group rg_teachy_tv_menu voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup137.inc b/sound/voicegroups/rg_title.inc similarity index 94% rename from sound/voicegroups/voicegroup137.inc rename to sound/voicegroups/rg_title.inc index cf7422cd23..abfea6de70 100644 --- a/sound/voicegroups/voicegroup137.inc +++ b/sound/voicegroups/rg_title.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup137:: - voice_keysplit_all voicegroup002 +voice_group rg_title + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup137:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup137:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup001.inc b/sound/voicegroups/rg_unused.inc similarity index 62% rename from sound/voicegroups/voicegroup001.inc rename to sound/voicegroups/rg_unused.inc index 20a2795dc1..8dac5129ad 100644 --- a/sound/voicegroups/voicegroup001.inc +++ b/sound/voicegroups/rg_unused.inc @@ -1,5 +1,8 @@ - .align 2 -voicegroup001:: +voice_group rg_unused + voice_keysplit_all voicegroup_frlg_fanfare_drumset_1 + voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -8,25 +11,17 @@ voicegroup001:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 1, 6, 0 - voice_programmable_wave 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 1, 6, 0 - voice_square_2 60, 0, 3, 0, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 0, 0, 1, 6, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 154, 127 diff --git a/sound/voicegroups/rg_unused_2.inc b/sound/voicegroups/rg_unused_2.inc new file mode 100644 index 0000000000..3b46ec9777 --- /dev/null +++ b/sound/voicegroups/rg_unused_2.inc @@ -0,0 +1,6 @@ +voice_group rg_unused_2 + voice_keysplit_all voicegroup_frlg_drumset + voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 + voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + diff --git a/sound/voicegroups/voicegroup172.inc b/sound/voicegroups/rg_vermillion.inc similarity index 95% rename from sound/voicegroups/voicegroup172.inc rename to sound/voicegroups/rg_vermillion.inc index ffd981c830..8c840c14c1 100644 --- a/sound/voicegroups/voicegroup172.inc +++ b/sound/voicegroups/rg_vermillion.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup172:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_vermillion + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 @@ -48,7 +47,7 @@ voicegroup172:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup172:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup171.inc b/sound/voicegroups/rg_victory_gym_leader.inc similarity index 93% rename from sound/voicegroups/voicegroup171.inc rename to sound/voicegroups/rg_victory_gym_leader.inc index f4ae315ce5..76b53e7c32 100644 --- a/sound/voicegroups/voicegroup171.inc +++ b/sound/voicegroups/rg_victory_gym_leader.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup171:: - voice_keysplit_all voicegroup001 +voice_group rg_victory_gym_leader + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup171:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup171:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup154.inc b/sound/voicegroups/rg_victory_road.inc similarity index 92% rename from sound/voicegroups/voicegroup154.inc rename to sound/voicegroups/rg_victory_road.inc index ce70e65d57..5b578c74e4 100644 --- a/sound/voicegroups/voicegroup154.inc +++ b/sound/voicegroups/rg_victory_road.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup154:: - voice_keysplit_all voicegroup002 +voice_group rg_victory_road + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup154:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 127, 154, 235 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup154:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup169.inc b/sound/voicegroups/rg_victory_trainer.inc similarity index 96% rename from sound/voicegroups/voicegroup169.inc rename to sound/voicegroups/rg_victory_trainer.inc index 77ee6ffee4..eb1d34f117 100644 --- a/sound/voicegroups/voicegroup169.inc +++ b/sound/voicegroups/rg_victory_trainer.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup169:: - voice_keysplit_all voicegroup001 +voice_group rg_victory_trainer + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,9 +55,9 @@ voicegroup169:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup025.inc b/sound/voicegroups/rg_victory_wild.inc similarity index 94% rename from sound/voicegroups/voicegroup025.inc rename to sound/voicegroups/rg_victory_wild.inc index 3449629469..bb48fcadea 100644 --- a/sound/voicegroups/voicegroup025.inc +++ b/sound/voicegroups/rg_victory_wild.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup025:: - voice_keysplit_all voicegroup001 +voice_group rg_victory_wild + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,9 +55,9 @@ voicegroup025:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup146.inc b/sound/voicegroups/rg_viridian_forest.inc similarity index 97% rename from sound/voicegroups/voicegroup146.inc rename to sound/voicegroups/rg_viridian_forest.inc index b0f1b92d6f..4c703102c9 100644 --- a/sound/voicegroups/voicegroup146.inc +++ b/sound/voicegroups/rg_viridian_forest.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup146:: - voice_keysplit_all voicegroup002 +voice_group rg_viridian_forest + voice_keysplit_all voicegroup_frlg_drumset voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup146:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup158.inc b/sound/voicegroups/rg_vs_champion.inc similarity index 94% rename from sound/voicegroups/voicegroup158.inc rename to sound/voicegroups/rg_vs_champion.inc index 50fa566068..9068f8d504 100644 --- a/sound/voicegroups/voicegroup158.inc +++ b/sound/voicegroups/rg_vs_champion.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup158:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_vs_champion + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 @@ -48,7 +47,7 @@ voicegroup158:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 153 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup158:: voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 255, 0, 255, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 236, 188 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup185.inc b/sound/voicegroups/rg_vs_deoxys.inc similarity index 95% rename from sound/voicegroups/voicegroup185.inc rename to sound/voicegroups/rg_vs_deoxys.inc index 879a4e8883..172ec41bd0 100644 --- a/sound/voicegroups/voicegroup185.inc +++ b/sound/voicegroups/rg_vs_deoxys.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup185:: - voice_keysplit_all voicegroup002 +voice_group rg_vs_deoxys + voice_keysplit_all voicegroup_frlg_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup185:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup185:: voice_directsound 60, 0, DirectSoundWaveData_classical_choir_voice_ahhs, 85, 0, 154, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup155.inc b/sound/voicegroups/rg_vs_gym_leader.inc similarity index 94% rename from sound/voicegroups/voicegroup155.inc rename to sound/voicegroups/rg_vs_gym_leader.inc index 8150754aab..85d7705a27 100644 --- a/sound/voicegroups/voicegroup155.inc +++ b/sound/voicegroups/rg_vs_gym_leader.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup155:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_vs_gym_leader + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 @@ -48,7 +47,7 @@ voicegroup155:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup155:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 165, 180, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup156.inc b/sound/voicegroups/rg_vs_trainer.inc similarity index 94% rename from sound/voicegroups/voicegroup156.inc rename to sound/voicegroups/rg_vs_trainer.inc index 374464fff9..265366c166 100644 --- a/sound/voicegroups/voicegroup156.inc +++ b/sound/voicegroups/rg_vs_trainer.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup156:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_vs_trainer + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup156:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup156:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup157.inc b/sound/voicegroups/rg_vs_wild.inc similarity index 94% rename from sound/voicegroups/voicegroup157.inc rename to sound/voicegroups/rg_vs_wild.inc index 7dd93abd0a..b006a5dc2b 100644 --- a/sound/voicegroups/voicegroup157.inc +++ b/sound/voicegroups/rg_vs_wild.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup157:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group rg_vs_wild + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 @@ -48,7 +47,7 @@ voicegroup157:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup157:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup038.inc b/sound/voicegroups/roulette.inc similarity index 98% rename from sound/voicegroups/voicegroup038.inc rename to sound/voicegroups/roulette.inc index bcb211d6f5..351d232173 100644 --- a/sound/voicegroups/voicegroup038.inc +++ b/sound/voicegroups/roulette.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup038:: - voice_keysplit_all voicegroup001 +voice_group roulette + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup011.inc b/sound/voicegroups/route101.inc similarity index 97% rename from sound/voicegroups/voicegroup011.inc rename to sound/voicegroups/route101.inc index 5527cc3698..2fb66ade3e 100644 --- a/sound/voicegroups/voicegroup011.inc +++ b/sound/voicegroups/route101.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup011:: - voice_keysplit_all voicegroup022 +voice_group route101 + voice_keysplit_all voicegroup_route101_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup011:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup047.inc b/sound/voicegroups/route104.inc similarity index 94% rename from sound/voicegroups/voicegroup047.inc rename to sound/voicegroups/route104.inc index 84fa9335a8..9a4056df70 100644 --- a/sound/voicegroups/voicegroup047.inc +++ b/sound/voicegroups/route104.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup047:: - voice_keysplit_all voicegroup001 +voice_group route104 + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup047:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup047:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup010.inc b/sound/voicegroups/route110.inc similarity index 91% rename from sound/voicegroups/voicegroup010.inc rename to sound/voicegroups/route110.inc index 8d0f7a56dd..30cb3dedf5 100644 --- a/sound/voicegroups/voicegroup010.inc +++ b/sound/voicegroups/route110.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup010:: - voice_keysplit_all voicegroup031 +voice_group route110 + voice_keysplit_all voicegroup_route110_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup010:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup010:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup055.inc b/sound/voicegroups/route111.inc similarity index 94% rename from sound/voicegroups/voicegroup055.inc rename to sound/voicegroups/route111.inc index 9157030e83..b4ef9e9fae 100644 --- a/sound/voicegroups/voicegroup055.inc +++ b/sound/voicegroups/route111.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup055:: - voice_keysplit_all voicegroup001 +voice_group route111 + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup055:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup055:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup064.inc b/sound/voicegroups/route113.inc similarity index 96% rename from sound/voicegroups/voicegroup064.inc rename to sound/voicegroups/route113.inc index fa56af03ea..9751155097 100644 --- a/sound/voicegroups/voicegroup064.inc +++ b/sound/voicegroups/route113.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup064:: - voice_keysplit_all voicegroup001 +voice_group route113 + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup064:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup064:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup048.inc b/sound/voicegroups/route119.inc similarity index 91% rename from sound/voicegroups/voicegroup048.inc rename to sound/voicegroups/route119.inc index eeb5b682a3..a6b76d54cd 100644 --- a/sound/voicegroups/voicegroup048.inc +++ b/sound/voicegroups/route119.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup048:: - voice_keysplit_all voicegroup001 +voice_group route119 + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup048:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup048:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup014.inc b/sound/voicegroups/route120.inc similarity index 91% rename from sound/voicegroups/voicegroup014.inc rename to sound/voicegroups/route120.inc index 6ce0897d10..b1a529d292 100644 --- a/sound/voicegroups/voicegroup014.inc +++ b/sound/voicegroups/route120.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup014:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group route120 + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 3, 0, 1, 6, 1 @@ -48,7 +47,7 @@ voicegroup014:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup014:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/route122.inc b/sound/voicegroups/route122.inc new file mode 100644 index 0000000000..a18d0142df --- /dev/null +++ b/sound/voicegroups/route122.inc @@ -0,0 +1,89 @@ +voice_group route122 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 2, 0, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 + voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 0, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 0 + diff --git a/sound/voicegroups/voicegroup127.inc b/sound/voicegroups/rs_sfx_1.inc similarity index 98% rename from sound/voicegroups/voicegroup127.inc rename to sound/voicegroups/rs_sfx_1.inc index 476d3f48f6..d07f1d8812 100644 --- a/sound/voicegroups/voicegroup127.inc +++ b/sound/voicegroups/rs_sfx_1.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup127:: +voice_group rs_sfx_1 voice_directsound 60, 0, DirectSoundWaveData_unknown_synth_snare, 255, 249, 103, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup127:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup128.inc b/sound/voicegroups/rs_sfx_2.inc similarity index 99% rename from sound/voicegroups/voicegroup128.inc rename to sound/voicegroups/rs_sfx_2.inc index 69b52d29d6..b93f29b0ff 100644 --- a/sound/voicegroups/voicegroup128.inc +++ b/sound/voicegroups/rs_sfx_2.inc @@ -1,5 +1,4 @@ - .align 2 -voicegroup128:: +voice_group rs_sfx_2 voice_directsound_no_resample 60, 0, DirectSoundWaveData_bicycle_bell, 255, 249, 0, 165 voice_directsound_alt 60, 0, DirectSoundWaveData_bicycle_bell, 255, 0, 255, 165 voice_directsound 60, 0, DirectSoundWaveData_unknown_synth_snare, 255, 0, 255, 165 diff --git a/sound/voicegroups/voicegroup045.inc b/sound/voicegroups/rustboro.inc similarity index 96% rename from sound/voicegroups/voicegroup045.inc rename to sound/voicegroups/rustboro.inc index 2e2016e439..035c96f073 100644 --- a/sound/voicegroups/voicegroup045.inc +++ b/sound/voicegroups/rustboro.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup045:: - voice_keysplit_all voicegroup001 +voice_group rustboro + voice_keysplit_all voicegroup_rs_drumset voice_square_1_alt 60, 0, 0, 1, 0, 2, 0, 1 voice_square_1_alt 60, 0, 0, 3, 1, 2, 6, 0 voice_square_2_alt 60, 0, 3, 1, 2, 6, 0 @@ -10,7 +9,7 @@ voicegroup045:: voice_programmable_wave_alt 60, 0, ProgrammableWaveData_4, 1, 7, 15, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup045:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup074.inc b/sound/voicegroups/safari_zone.inc similarity index 98% rename from sound/voicegroups/voicegroup074.inc rename to sound/voicegroups/safari_zone.inc index 1c3c67f8dc..29eb4db861 100644 --- a/sound/voicegroups/voicegroup074.inc +++ b/sound/voicegroups/safari_zone.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup074:: - voice_keysplit_all voicegroup001 +voice_group safari_zone + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup077.inc b/sound/voicegroups/sailing.inc similarity index 97% rename from sound/voicegroups/voicegroup077.inc rename to sound/voicegroups/sailing.inc index 994d9f411d..4dc40de7d9 100644 --- a/sound/voicegroups/voicegroup077.inc +++ b/sound/voicegroups/sailing.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup077:: - voice_keysplit_all voicegroup001 +voice_group sailing + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup077:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/school.inc b/sound/voicegroups/school.inc new file mode 100644 index 0000000000..8490de2e67 --- /dev/null +++ b/sound/voicegroups/school.inc @@ -0,0 +1,4 @@ +voice_group school + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup_piano_keysplit, keysplit_piano + diff --git a/sound/voicegroups/voicegroup084.inc b/sound/voicegroups/sealed_chamber.inc similarity index 96% rename from sound/voicegroups/voicegroup084.inc rename to sound/voicegroups/sealed_chamber.inc index 510b37c23a..98fda0afa6 100644 --- a/sound/voicegroups/voicegroup084.inc +++ b/sound/voicegroups/sealed_chamber.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup084:: - voice_keysplit_all voicegroup001 +voice_group sealed_chamber + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup084:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup084:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup079.inc b/sound/voicegroups/slateport.inc similarity index 96% rename from sound/voicegroups/voicegroup079.inc rename to sound/voicegroups/slateport.inc index 42b51faea4..10aea36b33 100644 --- a/sound/voicegroups/voicegroup079.inc +++ b/sound/voicegroups/slateport.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup079:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group slateport + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup079:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup091.inc b/sound/voicegroups/sootopolis.inc similarity index 94% rename from sound/voicegroups/voicegroup091.inc rename to sound/voicegroups/sootopolis.inc index 28a64ab488..742e4e4dfa 100644 --- a/sound/voicegroups/voicegroup091.inc +++ b/sound/voicegroups/sootopolis.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup091:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group sootopolis + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup091:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,9 +57,9 @@ voicegroup091:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup017.inc b/sound/voicegroups/surf.inc similarity index 93% rename from sound/voicegroups/voicegroup017.inc rename to sound/voicegroups/surf.inc index 06738d297b..924a9c7832 100644 --- a/sound/voicegroups/voicegroup017.inc +++ b/sound/voicegroups/surf.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup017:: - voice_keysplit_all voicegroup001 +voice_group surf + voice_keysplit_all voicegroup_rs_drumset voice_square_2_alt 60, 0, 2, 0, 3, 3, 1 voice_square_1_alt 60, 0, 0, 2, 0, 3, 3, 1 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup017:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 204 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,9 +57,9 @@ voicegroup017:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup059.inc b/sound/voicegroups/title.inc similarity index 91% rename from sound/voicegroups/voicegroup059.inc rename to sound/voicegroups/title.inc index 5a45d437d3..629171779c 100644 --- a/sound/voicegroups/voicegroup059.inc +++ b/sound/voicegroups/title.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup059:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group title + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 1, 1, 1, 6, 2 @@ -48,7 +47,7 @@ voicegroup059:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 239 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup059:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup094.inc b/sound/voicegroups/trick_house.inc similarity index 95% rename from sound/voicegroups/voicegroup094.inc rename to sound/voicegroups/trick_house.inc index b52e958926..beb29c395f 100644 --- a/sound/voicegroups/voicegroup094.inc +++ b/sound/voicegroups/trick_house.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup094:: - voice_keysplit_all voicegroup001 +voice_group trick_house + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup094:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup094:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup057.inc b/sound/voicegroups/underwater.inc similarity index 97% rename from sound/voicegroups/voicegroup057.inc rename to sound/voicegroups/underwater.inc index 391b7cf8bc..40d42107de 100644 --- a/sound/voicegroups/voicegroup057.inc +++ b/sound/voicegroups/underwater.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup057:: - voice_keysplit_all voicegroup001 +voice_group underwater + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup057:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 0, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 193, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup007.inc b/sound/voicegroups/unused.inc similarity index 95% rename from sound/voicegroups/voicegroup007.inc rename to sound/voicegroups/unused.inc index 66bcd3fa6c..ee5a89b715 100644 --- a/sound/voicegroups/voicegroup007.inc +++ b/sound/voicegroups/unused.inc @@ -1,8 +1,4 @@ - .align 2 -voicegroup007:: - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_60, 255, 0, 193, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_72, 255, 0, 193, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_trumpet_84, 255, 0, 193, 127 +voice_group unused voice_square_1_alt 60, 0, 38, 2, 1, 0, 0, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/unused_2.inc b/sound/voicegroups/unused_2.inc new file mode 100644 index 0000000000..d2e1a4cf04 --- /dev/null +++ b/sound/voicegroups/unused_2.inc @@ -0,0 +1,130 @@ +voice_group unused_2 + voice_keysplit_all voicegroup_rs_drumset + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion_duplicate, 255, 249, 25, 248 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 1, 7, 1 + diff --git a/sound/voicegroups/voicegroup044.inc b/sound/voicegroups/verdanturf.inc similarity index 95% rename from sound/voicegroups/voicegroup044.inc rename to sound/voicegroups/verdanturf.inc index 9a057754b3..afaeca5043 100644 --- a/sound/voicegroups/voicegroup044.inc +++ b/sound/voicegroups/verdanturf.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup044:: - voice_keysplit voicegroup005, KeySplitTable1 +voice_group verdanturf + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup044:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 226, 0, 38 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup070.inc b/sound/voicegroups/victory_aqua_magma.inc similarity index 96% rename from sound/voicegroups/voicegroup070.inc rename to sound/voicegroups/victory_aqua_magma.inc index 59a43180df..f507d1fc98 100644 --- a/sound/voicegroups/voicegroup070.inc +++ b/sound/voicegroups/victory_aqua_magma.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup070:: - voice_keysplit_all voicegroup001 +voice_group victory_aqua_magma + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup070:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,7 +55,7 @@ voicegroup070:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup024.inc b/sound/voicegroups/victory_gym_leader.inc similarity index 93% rename from sound/voicegroups/voicegroup024.inc rename to sound/voicegroups/victory_gym_leader.inc index 3806b462d6..18dc32f568 100644 --- a/sound/voicegroups/voicegroup024.inc +++ b/sound/voicegroups/victory_gym_leader.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup024:: - voice_keysplit_all voicegroup001 +voice_group victory_gym_leader + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup024:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup024:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup029.inc b/sound/voicegroups/victory_league.inc similarity index 93% rename from sound/voicegroups/voicegroup029.inc rename to sound/voicegroups/victory_league.inc index 7c801afcb3..5e5b517bc4 100644 --- a/sound/voicegroups/voicegroup029.inc +++ b/sound/voicegroups/victory_league.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup029:: - voice_keysplit_all voicegroup001 +voice_group victory_league + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup029:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup029:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup075.inc b/sound/voicegroups/victory_road.inc similarity index 93% rename from sound/voicegroups/voicegroup075.inc rename to sound/voicegroups/victory_road.inc index 86af71af4b..eb20af9e8e 100644 --- a/sound/voicegroups/voicegroup075.inc +++ b/sound/voicegroups/victory_road.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup075:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group victory_road + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup075:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 0, 180, 246 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup075:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup058.inc b/sound/voicegroups/victory_trainer.inc similarity index 96% rename from sound/voicegroups/voicegroup058.inc rename to sound/voicegroups/victory_trainer.inc index 56dff5f5bb..c4674a9cde 100644 --- a/sound/voicegroups/voicegroup058.inc +++ b/sound/voicegroups/victory_trainer.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup058:: - voice_keysplit_all voicegroup001 +voice_group victory_trainer + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,9 +55,9 @@ voicegroup058:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup170.inc b/sound/voicegroups/victory_wild.inc similarity index 94% rename from sound/voicegroups/voicegroup170.inc rename to sound/voicegroups/victory_wild.inc index 43c8ae6df7..de30836168 100644 --- a/sound/voicegroups/voicegroup170.inc +++ b/sound/voicegroups/victory_wild.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup170:: - voice_keysplit_all voicegroup001 +voice_group victory_wild + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,9 +55,9 @@ voicegroup170:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup000.inc b/sound/voicegroups/voicegroup000.inc deleted file mode 100644 index 7a2c5772f9..0000000000 --- a/sound/voicegroups/voicegroup000.inc +++ /dev/null @@ -1,65 +0,0 @@ - .align 2 -voicegroup000:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 2, 0, 0, 9, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 204, 193, 239 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup002.inc b/sound/voicegroups/voicegroup002.inc deleted file mode 100644 index bd6f080aa4..0000000000 --- a/sound/voicegroups/voicegroup002.inc +++ /dev/null @@ -1,57 +0,0 @@ - .align 2 -voicegroup002:: - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 255, 165, 154, 127 - voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 255, 165, 154, 127 - voice_directsound 60, 0, DirectSoundWaveData_unused_guitar_separates_power_chord, 255, 165, 206, 127 - voice_directsound 60, 0, DirectSoundWaveData_unused_sc88pro_unison_slap, 255, 165, 206, 127 - voice_directsound 60, 0, DirectSoundWaveData_unknown_snare, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_ohtsuzumi, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_ethnic_flavours_hyoushigi, 255, 0, 255, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 48, 44, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 - voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_close_hihat, 255, 127, 0, 188 - voice_directsound 51, 54, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 54, 64, DirectSoundWaveData_unused_sc55_tom, 255, 216, 77, 204 - voice_directsound_no_resample 60, 79, DirectSoundWaveData_unknown_open_hihat, 255, 242, 141, 0 - voice_directsound 57, 69, DirectSoundWaveData_unused_sc55_tom, 255, 210, 77, 204 - voice_directsound 60, 79, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 62, 84, DirectSoundWaveData_unused_sc55_tom, 255, 204, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 70, 49, DirectSoundWaveData_unknown_bell, 255, 165, 103, 231 - voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_directsound_no_resample 60, 14, DirectSoundWaveData_trinity_cymbal_crash, 255, 235, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - voice_directsound_no_resample 30, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 104, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 94, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_drum_and_percussion_kick, 255, 0, 255, 0 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 180, 175, 228 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sd90_solo_snare, 255, 0, 255, 242 - voice_directsound_no_resample 64, 54, DirectSoundWaveData_sc88pro_tr909_hand_clap, 255, 255, 255, 127 - voice_directsound_no_resample 64, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 64, 24, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 64, 80, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_directsound 68, 34, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 72, 44, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_directsound 76, 84, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound 80, 94, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 226 - voice_directsound_no_resample 33, 89, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound 84, 104, DirectSoundWaveData_sd90_ambient_tom, 255, 0, 255, 235 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 63, 64, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 235, 0, 231 - voice_directsound_no_resample 64, 24, DirectSoundWaveData_dance_drums_ride_bell, 255, 165, 103, 231 - diff --git a/sound/voicegroups/voicegroup015.inc b/sound/voicegroups/voicegroup015.inc deleted file mode 100644 index a528476356..0000000000 --- a/sound/voicegroups/voicegroup015.inc +++ /dev/null @@ -1,95 +0,0 @@ - .align 2 -voicegroup015:: - voice_keysplit_all voicegroup016 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2 60, 0, 3, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 3, 0, 2, 0, 0 - voice_square_2 60, 0, 3, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 3, 0, 6, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 149 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_programmable_wave 60, 0, ProgrammableWaveData_1, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup021.inc b/sound/voicegroups/voicegroup021.inc deleted file mode 100644 index 43aa9150ee..0000000000 --- a/sound/voicegroups/voicegroup021.inc +++ /dev/null @@ -1,54 +0,0 @@ - .align 2 -voicegroup021:: - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 0, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 1, 6, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 1, 6, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 0, 6, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup022.inc b/sound/voicegroups/voicegroup022.inc deleted file mode 100644 index 877f57d6ce..0000000000 --- a/sound/voicegroups/voicegroup022.inc +++ /dev/null @@ -1,68 +0,0 @@ - .align 2 -voicegroup022:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 0, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 1, 7, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_7, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 1 - voice_square_1_alt 60, 0, 0, 0, 0, 0, 7, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_kick, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_rnd_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 32, 34, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 67, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 61, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - diff --git a/sound/voicegroups/voicegroup030.inc b/sound/voicegroups/voicegroup030.inc deleted file mode 100644 index 1e1b5088dd..0000000000 --- a/sound/voicegroups/voicegroup030.inc +++ /dev/null @@ -1,58 +0,0 @@ - .align 2 -voicegroup030:: - voice_keysplit_all voicegroup031 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_2_alt 60, 0, 3, 0, 2, 4, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 4, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 216, 90, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 37, 165, 180, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup031.inc b/sound/voicegroups/voicegroup031.inc deleted file mode 100644 index 178d7ec63d..0000000000 --- a/sound/voicegroups/voicegroup031.inc +++ /dev/null @@ -1,68 +0,0 @@ - .align 2 -voicegroup031:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_3, 0, 7, 15, 1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_trinity_big_boned, 255, 165, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 60, 64, DirectSoundWaveData_sc88pro_orchestra_snare, 255, 0, 255, 242 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 32, 49, DirectSoundWaveData_sc88pro_tambourine, 255, 127, 77, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 8, 0, 255, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 30, 54, DirectSoundWaveData_sc88pro_orchestra_cymbal_crash, 255, 246, 0, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 79, DirectSoundWaveData_sc88pro_mute_high_conga, 255, 0, 255, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound_no_resample 72, 74, DirectSoundWaveData_sc88pro_open_low_conga, 255, 0, 255, 0 - diff --git a/sound/voicegroups/voicegroup081.inc b/sound/voicegroups/voicegroup081.inc deleted file mode 100644 index e9c2011e40..0000000000 --- a/sound/voicegroups/voicegroup081.inc +++ /dev/null @@ -1,5 +0,0 @@ - .align 2 -voicegroup081:: - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup005, KeySplitTable1 - diff --git a/sound/voicegroups/voicegroup130.inc b/sound/voicegroups/voicegroup130.inc deleted file mode 100644 index 7044bb38e4..0000000000 --- a/sound/voicegroups/voicegroup130.inc +++ /dev/null @@ -1,182 +0,0 @@ - .align 2 -voicegroup130:: - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_1, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_2, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_3, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_4, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_5, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_6, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_7, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_8, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_9, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_10, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_11, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_12, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_13, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_14, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_15, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_16, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_17, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_18, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_19, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_20, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_21, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_22, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_23, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_24, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_25, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_26, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_27, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_28, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_29, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_30, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_31, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_32, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_33, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_34, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_35, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_36, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_37, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_38, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_39, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_40, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_41, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_42, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_43, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_44, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_45, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_46, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_47, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_48, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_49, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_50, 255, 0, 255, 0 - voice_directsound 60, 0, DirectSoundWaveData_Phoneme_51, 255, 0, 255, 0 - voice_keysplit_all voicegroup001 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion_duplicate, 255, 249, 25, 248 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 1, 7, 1 - diff --git a/sound/voicegroups/voicegroup174.inc b/sound/voicegroups/voicegroup174.inc deleted file mode 100644 index ab7d43fc72..0000000000 --- a/sound/voicegroups/voicegroup174.inc +++ /dev/null @@ -1,160 +0,0 @@ - .align 2 -voicegroup174:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 249, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 0, 255, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 - voice_square_2_alt 60, 0, 3, 0, 2, 3, 4 - voice_square_1_alt 60, 0, 0, 3, 0, 2, 3, 4 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_2, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_noise_alt 60, 0, 0, 0, 2, 6, 0 - voice_noise_alt 60, 0, 0, 0, 1, 3, 1 - voice_keysplit_all voicegroup177 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 9, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 9, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 154, 127 - voice_keysplit_all voicegroup002 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 3, 1 - voice_square_2_alt 60, 0, 2, 0, 2, 3, 1 - voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 - diff --git a/sound/voicegroups/voicegroup175.inc b/sound/voicegroups/voicegroup175.inc deleted file mode 100644 index a074f216dd..0000000000 --- a/sound/voicegroups/voicegroup175.inc +++ /dev/null @@ -1,55 +0,0 @@ - .align 2 -voicegroup175:: - voice_keysplit_all voicegroup177 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 85, 165, 154, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup189.inc b/sound/voicegroups/voicegroup189.inc deleted file mode 100644 index 6c04cd8320..0000000000 --- a/sound/voicegroups/voicegroup189.inc +++ /dev/null @@ -1,95 +0,0 @@ - .align 2 -voicegroup189:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 - voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 128, 249, 25, 127 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 64, 216, 51, 224 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1_alt 60, 0, 0, 2, 0, 2, 6, 3 - voice_square_2_alt 60, 0, 3, 0, 2, 7, 2 - voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 2 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - diff --git a/sound/voicegroups/voicegroup118.inc b/sound/voicegroups/vs_aqua_magma.inc similarity index 93% rename from sound/voicegroups/voicegroup118.inc rename to sound/voicegroups/vs_aqua_magma.inc index 89e66b21d2..4c1f5578dc 100644 --- a/sound/voicegroups/voicegroup118.inc +++ b/sound/voicegroups/vs_aqua_magma.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup118:: - voice_keysplit_all voicegroup001 +voice_group vs_aqua_magma + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup118:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -58,9 +57,9 @@ voicegroup118:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup126.inc b/sound/voicegroups/vs_aqua_magma_leader.inc similarity index 95% rename from sound/voicegroups/voicegroup126.inc rename to sound/voicegroups/vs_aqua_magma_leader.inc index 51959b4f1e..3ca3c3afa4 100644 --- a/sound/voicegroups/voicegroup126.inc +++ b/sound/voicegroups/vs_aqua_magma_leader.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup126:: - voice_keysplit_all voicegroup001 +voice_group vs_aqua_magma_leader + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup126:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup126:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup121.inc b/sound/voicegroups/vs_champion.inc similarity index 91% rename from sound/voicegroups/voicegroup121.inc rename to sound/voicegroups/vs_champion.inc index f09ddd7741..802dde8a45 100644 --- a/sound/voicegroups/voicegroup121.inc +++ b/sound/voicegroups/vs_champion.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup121:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group vs_champion + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup121:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup121:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup125.inc b/sound/voicegroups/vs_elite_four.inc similarity index 92% rename from sound/voicegroups/voicegroup125.inc rename to sound/voicegroups/vs_elite_four.inc index 644002abf7..9c99b4e03b 100644 --- a/sound/voicegroups/voicegroup125.inc +++ b/sound/voicegroups/vs_elite_four.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup125:: - voice_keysplit_all voicegroup001 +voice_group vs_elite_four + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup125:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup125:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup115.inc b/sound/voicegroups/vs_frontier_brain.inc similarity index 94% rename from sound/voicegroups/voicegroup115.inc rename to sound/voicegroups/vs_frontier_brain.inc index eb4f52b878..0167389e38 100644 --- a/sound/voicegroups/voicegroup115.inc +++ b/sound/voicegroups/vs_frontier_brain.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup115:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group vs_frontier_brain + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 128, 249, 0, 188 @@ -48,7 +47,7 @@ voicegroup115:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 242, 51, 242 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup115:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 165, 180, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup120.inc b/sound/voicegroups/vs_gym_leader.inc similarity index 92% rename from sound/voicegroups/voicegroup120.inc rename to sound/voicegroups/vs_gym_leader.inc index 2c104fb10b..8aad0a65bc 100644 --- a/sound/voicegroups/voicegroup120.inc +++ b/sound/voicegroups/vs_gym_leader.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup120:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group vs_gym_leader + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 2, 6, 1 @@ -48,7 +47,7 @@ voicegroup120:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup120:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup123.inc b/sound/voicegroups/vs_kyogre_groudon.inc similarity index 95% rename from sound/voicegroups/voicegroup123.inc rename to sound/voicegroups/vs_kyogre_groudon.inc index 6178994cca..326a190438 100644 --- a/sound/voicegroups/voicegroup123.inc +++ b/sound/voicegroups/vs_kyogre_groudon.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup123:: - voice_keysplit_all voicegroup001 +voice_group vs_kyogre_groudon + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup123:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup123:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup116.inc b/sound/voicegroups/vs_mew.inc similarity index 94% rename from sound/voicegroups/voicegroup116.inc rename to sound/voicegroups/vs_mew.inc index a86a87f5d1..052284f396 100644 --- a/sound/voicegroups/voicegroup116.inc +++ b/sound/voicegroups/vs_mew.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup116:: - voice_keysplit_all voicegroup002 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group vs_mew + voice_keysplit_all voicegroup_frlg_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2_alt 60, 0, 3, 0, 2, 6, 5 @@ -48,7 +47,7 @@ voicegroup116:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup116:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 127 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup114.inc b/sound/voicegroups/vs_rayquaza.inc similarity index 95% rename from sound/voicegroups/voicegroup114.inc rename to sound/voicegroups/vs_rayquaza.inc index cb078d24c3..c004be789d 100644 --- a/sound/voicegroups/voicegroup114.inc +++ b/sound/voicegroups/vs_rayquaza.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup114:: - voice_keysplit_all voicegroup001 +voice_group vs_rayquaza + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup114:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup114:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup122.inc b/sound/voicegroups/vs_regi.inc similarity index 94% rename from sound/voicegroups/voicegroup122.inc rename to sound/voicegroups/vs_regi.inc index 65356a3d17..ebb9fabd1a 100644 --- a/sound/voicegroups/voicegroup122.inc +++ b/sound/voicegroups/vs_regi.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup122:: - voice_keysplit_all voicegroup001 +voice_group vs_regi + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup122:: voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -60,7 +59,7 @@ voicegroup122:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup124.inc b/sound/voicegroups/vs_rival.inc similarity index 91% rename from sound/voicegroups/voicegroup124.inc rename to sound/voicegroups/vs_rival.inc index 274d76dcd1..8613db3964 100644 --- a/sound/voicegroups/voicegroup124.inc +++ b/sound/voicegroups/vs_rival.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup124:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group vs_rival + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 2, 0, 2, 3, 1 @@ -48,7 +47,7 @@ voicegroup124:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup124:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup119.inc b/sound/voicegroups/vs_trainer.inc similarity index 92% rename from sound/voicegroups/voicegroup119.inc rename to sound/voicegroups/vs_trainer.inc index 8b7fe24c79..5c8f5b305e 100644 --- a/sound/voicegroups/voicegroup119.inc +++ b/sound/voicegroups/vs_trainer.inc @@ -1,7 +1,6 @@ - .align 2 -voicegroup119:: - voice_keysplit_all voicegroup001 - voice_keysplit voicegroup005, KeySplitTable1 +voice_group vs_trainer + voice_keysplit_all voicegroup_rs_drumset + voice_keysplit voicegroup_piano_keysplit, keysplit_piano voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_2 60, 0, 0, 0, 2, 4, 1 @@ -48,7 +47,7 @@ voicegroup119:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound_no_resample 60, 0, DirectSoundWaveData_sc88pro_timpani_with_snare, 255, 246, 0, 226 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup119:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup117.inc b/sound/voicegroups/vs_wild.inc similarity index 91% rename from sound/voicegroups/voicegroup117.inc rename to sound/voicegroups/vs_wild.inc index 3a86ec4f58..5ce57a0d54 100644 --- a/sound/voicegroups/voicegroup117.inc +++ b/sound/voicegroups/vs_wild.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup117:: - voice_keysplit_all voicegroup001 +voice_group vs_wild + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -48,7 +47,7 @@ voicegroup117:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 246, 0, 226 - voice_keysplit voicegroup006, KeySplitTable2 + voice_keysplit voicegroup_strings_keysplit, keysplit_strings voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 @@ -56,11 +55,11 @@ voicegroup117:: voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup007, KeySplitTable3 + voice_keysplit voicegroup_trumpet_keysplit, keysplit_trumpet voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup008, KeySplitTable4 + voice_keysplit voicegroup_tuba_keysplit, keysplit_tuba voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 - voice_keysplit voicegroup009, KeySplitTable5 + voice_keysplit voicegroup_french_horn_keysplit, keysplit_french_horn voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/sound/voicegroups/voicegroup090.inc b/sound/voicegroups/weather_groudon.inc similarity index 98% rename from sound/voicegroups/voicegroup090.inc rename to sound/voicegroups/weather_groudon.inc index 4039ad8d14..dde2a4637b 100644 --- a/sound/voicegroups/voicegroup090.inc +++ b/sound/voicegroups/weather_groudon.inc @@ -1,6 +1,5 @@ - .align 2 -voicegroup090:: - voice_keysplit_all voicegroup001 +voice_group weather_groudon + voice_keysplit_all voicegroup_rs_drumset voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 diff --git a/src/battle_ai_field_statuses.c b/src/battle_ai_field_statuses.c index d85df3e74a..bd7bdd8e17 100644 --- a/src/battle_ai_field_statuses.c +++ b/src/battle_ai_field_statuses.c @@ -227,9 +227,9 @@ static enum FieldEffectOutcome BenefitsFromSun(u32 battler) return FIELD_EFFECT_NEUTRAL; } - if (DoesAbilityBenefitFromWeather(ability, B_WEATHER_SUN) - || HasLightSensitiveMove(battler) - || HasDamagingMoveOfType(battler, TYPE_FIRE) + if (DoesAbilityBenefitFromWeather(ability, B_WEATHER_SUN) + || HasLightSensitiveMove(battler) + || HasDamagingMoveOfType(battler, TYPE_FIRE) || HasMoveWithEffect(battler, EFFECT_HYDRO_STEAM)) return FIELD_EFFECT_POSITIVE; @@ -248,8 +248,8 @@ static enum FieldEffectOutcome BenefitsFromSandstorm(u32 battler) if (gAiLogicData->holdEffects[battler] == HOLD_EFFECT_SAFETY_GOGGLES || IS_BATTLER_ANY_TYPE(battler, TYPE_ROCK, TYPE_GROUND, TYPE_STEEL)) { - if (!(IS_BATTLER_ANY_TYPE(FOE(battler), TYPE_ROCK, TYPE_GROUND, TYPE_STEEL)) - || gAiLogicData->holdEffects[FOE(battler)] == HOLD_EFFECT_SAFETY_GOGGLES + if (!(IS_BATTLER_ANY_TYPE(FOE(battler), TYPE_ROCK, TYPE_GROUND, TYPE_STEEL)) + || gAiLogicData->holdEffects[FOE(battler)] == HOLD_EFFECT_SAFETY_GOGGLES || DoesAbilityBenefitFromWeather(gAiLogicData->abilities[FOE(battler)], B_WEATHER_SANDSTORM)) return FIELD_EFFECT_POSITIVE; else @@ -285,7 +285,7 @@ static enum FieldEffectOutcome BenefitsFromRain(u32 battler) { if (gAiLogicData->holdEffects[battler] == HOLD_EFFECT_UTILITY_UMBRELLA) return FIELD_EFFECT_NEUTRAL; - + if (DoesAbilityBenefitFromWeather(gAiLogicData->abilities[battler], B_WEATHER_RAIN) || HasMoveWithFlag(battler, MoveAlwaysHitsInRain) || HasDamagingMoveOfType(battler, TYPE_WATER)) @@ -316,8 +316,8 @@ static enum FieldEffectOutcome BenefitsFromElectricTerrain(u32 battler) if (grounded && HasBattlerSideMoveWithAdditionalEffect(FOE(battler), MOVE_EFFECT_SLEEP)) return FIELD_EFFECT_POSITIVE; - if (grounded && ((gBattleMons[battler].status1 & STATUS1_SLEEP) - || (gStatuses3[battler] & STATUS3_YAWN) + if (grounded && ((gBattleMons[battler].status1 & STATUS1_SLEEP) + || gBattleMons[battler].volatiles.yawn || HasDamagingMoveOfType(battler, TYPE_ELECTRIC))) return FIELD_EFFECT_POSITIVE; @@ -382,8 +382,7 @@ static enum FieldEffectOutcome BenefitsFromMistyTerrain(u32 battler) && (HasNonVolatileMoveEffect(FOE(battler), MOVE_EFFECT_SLEEP) || HasNonVolatileMoveEffect(BATTLE_PARTNER(FOE(battler)), MOVE_EFFECT_SLEEP))) return FIELD_EFFECT_POSITIVE; - if (grounded && ((gBattleMons[battler].status1 & STATUS1_SLEEP) - || (gStatuses3[battler] & STATUS3_YAWN))) + if (grounded && (gBattleMons[battler].status1 & STATUS1_SLEEP || gBattleMons[battler].volatiles.yawn)) return FIELD_EFFECT_POSITIVE; return FIELD_EFFECT_NEUTRAL; @@ -407,7 +406,7 @@ static enum FieldEffectOutcome BenefitsFromPsychicTerrain(u32 battler) if (grounded || allyGrounded) { // harass priority - if (HasBattlerSideAbility(FOE(battler), ABILITY_GALE_WINGS, gAiLogicData) + if (HasBattlerSideAbility(FOE(battler), ABILITY_GALE_WINGS, gAiLogicData) || HasBattlerSideAbility(FOE(battler), ABILITY_TRIAGE, gAiLogicData) || HasBattlerSideAbility(FOE(battler), ABILITY_PRANKSTER, gAiLogicData)) return FIELD_EFFECT_POSITIVE; @@ -419,7 +418,7 @@ static enum FieldEffectOutcome BenefitsFromPsychicTerrain(u32 battler) if (HasBattlerSideMoveWithEffect(FOE(battler), EFFECT_EXPANDING_FORCE)) return FIELD_EFFECT_NEGATIVE; - if (HasBattlerSideAbility(battler, ABILITY_GALE_WINGS, gAiLogicData) + if (HasBattlerSideAbility(battler, ABILITY_GALE_WINGS, gAiLogicData) || HasBattlerSideAbility(battler, ABILITY_TRIAGE, gAiLogicData) || HasBattlerSideAbility(battler, ABILITY_PRANKSTER, gAiLogicData)) return FIELD_EFFECT_NEGATIVE; @@ -430,12 +429,12 @@ static enum FieldEffectOutcome BenefitsFromPsychicTerrain(u32 battler) static enum FieldEffectOutcome BenefitsFromTrickRoom(u32 battler) { // If we're in singles, we literally only care about speed. - if (!IsDoubleBattle()) + if (IsBattle1v1()) { - if (GetBattlerSideSpeedAverage(battler) < GetBattlerSideSpeedAverage(FOE(battler))) + if (gAiLogicData->speedStats[battler] < gAiLogicData->speedStats[FOE(battler)]) return FIELD_EFFECT_POSITIVE; // If we tie, we shouldn't change trick room state. - else if (GetBattlerSideSpeedAverage(battler) == GetBattlerSideSpeedAverage(FOE(battler))) + else if (gAiLogicData->speedStats[battler] == gAiLogicData->speedStats[FOE(battler)]) return FIELD_EFFECT_NEUTRAL; else return FIELD_EFFECT_NEGATIVE; diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 5460e31dee..ebbabf93c8 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -211,7 +211,7 @@ static u64 GetAiFlags(u16 trainerId) flags = GetTrainerAIFlagsFromId(trainerId); } - if (IsDoubleBattle()) + if (IsDoubleBattle() && flags != 0) { flags |= AI_FLAG_DOUBLE_BATTLE; } @@ -742,7 +742,10 @@ static u32 ChooseMoveOrAction_Singles(u32 battler) u64 flags = gAiThinkingStruct->aiFlags[battler]; u32 opposingBattler = GetOppositeBattler(battler); + gAiThinkingStruct->aiLogicId = 0; + gAiThinkingStruct->movesetIndex = 0; gAiLogicData->partnerMove = 0; // no ally + while (flags != 0) { if (flags & 1) @@ -1078,6 +1081,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 i; u32 weather; u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, gAiLogicData); + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); u32 abilityAtk = aiData->abilities[battlerAtk]; u32 abilityDef = aiData->abilities[battlerDef]; s32 atkPriority = GetBattleMovePriority(battlerAtk, abilityAtk, move); @@ -1088,7 +1092,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IsPowderMove(move) && !IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])) RETURN_SCORE_MINUS(10); - if (!BreaksThroughSemiInvulnerablity(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) + if (!BreaksThroughSemiInvulnerablity(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) RETURN_SCORE_MINUS(10); if (IsTwoTurnNotSemiInvulnerableMove(battlerAtk, move) && CanTargetFaintAi(battlerDef, battlerAtk)) @@ -1166,9 +1170,10 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case MOVE_EFFECT_BURN: ADJUST_SCORE(-5); break; + default: + break; } break; - break; case ABILITY_WONDER_GUARD: if (effectiveness < UQ_4_12(2.0)) RETURN_SCORE_MINUS(20); @@ -1281,7 +1286,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (gDisableStructs[battlerAtk].throatChopTimer > gBattleTurnCounter && IsSoundMove(move)) return 0; // Can't even select move at all // heal block check - if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(battlerAtk, move)) + if (gBattleMons[battlerAtk].volatiles.healBlock && IsHealBlockPreventingMove(battlerAtk, move)) return 0; // Can't even select heal blocked move // primal weather check @@ -1320,7 +1325,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (moveEffect) { case EFFECT_HIT: // only applies to Vital Throw - if (GetBattleMovePriority(battlerAtk, aiData->abilities[battlerAtk], move) < 0 && AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) && aiData->hpPercents[battlerAtk] < 40) + if (GetBattleMovePriority(battlerAtk, aiData->abilities[battlerAtk], move) < 0 && AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && aiData->hpPercents[battlerAtk] < 40) ADJUST_SCORE(-2); // don't want to move last break; default: @@ -1432,7 +1437,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_CHARGE: - if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP) + if (gBattleMons[battlerAtk].volatiles.charge) ADJUST_SCORE(-20); else if (!HasMoveWithType(battlerAtk, TYPE_ELECTRIC)) ADJUST_SCORE(-10); @@ -1761,7 +1766,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-8); break; case EFFECT_LEECH_SEED: - if (gStatuses3[battlerDef] & STATUS3_LEECHSEED + if (gBattleMons[battlerDef].volatiles.leechSeed || IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); @@ -1775,7 +1780,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) && !DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { - if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) ADJUST_SCORE(-10); // no anticipated move to disable @@ -1797,7 +1802,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) && !DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) { - if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) ADJUST_SCORE(-10); // no anticipated move to encore @@ -1891,9 +1896,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); //Don't wipe your team if you're going to lose } else if ((!IsBattlerAlive(FOE(battlerAtk)) || aiData->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF - || gStatuses3[FOE(battlerAtk)] & STATUS3_PERISH_SONG) + || gBattleMons[FOE(battlerAtk)].volatiles.perishSong) && (!IsBattlerAlive(BATTLE_PARTNER(FOE(battlerAtk))) || aiData->abilities[BATTLE_PARTNER(FOE(battlerAtk))] == ABILITY_SOUNDPROOF - || gStatuses3[BATTLE_PARTNER(FOE(battlerAtk))] & STATUS3_PERISH_SONG)) + || gBattleMons[BATTLE_PARTNER(FOE(battlerAtk))].volatiles.perishSong)) { ADJUST_SCORE(-10); //Both enemies are perish songed } @@ -1908,7 +1913,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && CountUsablePartyMons(battlerDef) >= 1) ADJUST_SCORE(-10); - if (gStatuses3[FOE(battlerAtk)] & STATUS3_PERISH_SONG || aiData->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF) + if (gBattleMons[FOE(battlerAtk)].volatiles.perishSong || aiData->abilities[FOE(battlerAtk)] == ABILITY_SOUNDPROOF) ADJUST_SCORE(-10); } break; @@ -1954,8 +1959,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (CountUsablePartyMons(battlerAtk) == 0) ADJUST_SCORE(-10); else if (gBattleMons[battlerAtk].volatiles.substitute - || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK)) - || AnyStatIsRaised(battlerAtk)) + || gBattleMons[battlerAtk].volatiles.powerTrick + || gBattleMons[battlerAtk].volatiles.magnetRise + || gBattleMons[battlerAtk].volatiles.aquaRing + || gBattleMons[battlerAtk].volatiles.root + || AnyStatIsRaised(battlerAtk)) break; else ADJUST_SCORE(-6); @@ -2035,7 +2043,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) || (aiData->partnerMove != MOVE_NONE && IsBattleMoveStatus(aiData->partnerMove)) || gBattleStruct->monToSwitchIntoId[BATTLE_PARTNER(battlerAtk)] != PARTY_SIZE) //Partner is switching out. - ADJUST_SCORE(-10); + ADJUST_SCORE(-20); break; case EFFECT_TRICK: case EFFECT_KNOCK_OFF: @@ -2044,11 +2052,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_INGRAIN: - if (gStatuses3[battlerAtk] & STATUS3_ROOTED) + if (gBattleMons[battlerAtk].volatiles.root) ADJUST_SCORE(-10); break; case EFFECT_AQUA_RING: - if (gStatuses3[battlerAtk] & STATUS3_AQUA_RING) + if (gBattleMons[battlerAtk].volatiles.aquaRing) ADJUST_SCORE(-10); break; case EFFECT_RECYCLE: @@ -2056,11 +2064,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_IMPRISON: - if (gStatuses3[battlerAtk] & STATUS3_IMPRISONED_OTHERS) + if (gBattleMons[battlerAtk].volatiles.imprison) ADJUST_SCORE(-10); break; case EFFECT_REFRESH: - if (!(gBattleMons[battlerDef].status1 & STATUS1_CAN_MOVE)) + if (!(gBattleMons[battlerAtk].status1 & STATUS1_CAN_MOVE)) ADJUST_SCORE(-10); break; case EFFECT_PSYCHO_SHIFT: @@ -2128,7 +2136,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); // don't scare away pokemon twice else if (aiData->hpPercents[battlerDef] < 10 && GetBattlerSecondaryDamage(battlerDef)) ADJUST_SCORE(-10); // don't blow away mon that will faint soon - else if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) + else if (gBattleMons[battlerDef].volatiles.perishSong) ADJUST_SCORE(-10); break; case EFFECT_CONVERSION: @@ -2181,7 +2189,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_SPITE: case EFFECT_MIMIC: - if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) // Attacker should go first + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Attacker should go first { if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF) @@ -2200,14 +2208,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) //TODO break; case EFFECT_LOCK_ON: - if (gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS + if (gBattleMons[battlerDef].volatiles.lockOn || aiData->abilities[battlerAtk] == ABILITY_NO_GUARD || aiData->abilities[battlerDef] == ABILITY_NO_GUARD || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_LASER_FOCUS: - if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS) + if (gBattleMons[battlerDef].volatiles.laserFocus) ADJUST_SCORE(-10); else if (aiData->abilities[battlerDef] == ABILITY_SHELL_ARMOR || aiData->abilities[battlerDef] == ABILITY_BATTLE_ARMOR) ADJUST_SCORE(-8); @@ -2312,7 +2320,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_MIRACLE_EYE: - if (gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED) + if (gBattleMons[battlerDef].volatiles.miracleEye) ADJUST_SCORE(-10); if (gBattleMons[battlerDef].statStages[STAT_EVASION] <= 4 @@ -2320,6 +2328,23 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-9); break; + case EFFECT_COURT_CHANGE: + if (gSideStatuses[GetBattlerSide(FOE(battlerAtk))] & SIDE_STATUS_BAD_COURT) + ADJUST_SCORE(BAD_EFFECT); + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_GOOD_COURT) + ADJUST_SCORE(BAD_EFFECT); + if (AreAnyHazardsOnSide(GetBattlerSide(FOE(battlerAtk))) && CountUsablePartyMons(battlerAtk) != 0) + ADJUST_SCORE(WORST_EFFECT); + if (hasPartner) + { + if (IsHazardMove(aiData->partnerMove) // partner is going to set up hazards + && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove, predictedMove, CONSIDER_PRIORITY)) // partner is going to set up before the Court Change + { + ADJUST_SCORE(-10); + break; // Don't use Defog if partner is going to set up hazards + } + } + break; case EFFECT_DEFOG: if (gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SCREEN_ANY | SIDE_STATUS_SAFEGUARD | SIDE_STATUS_MIST) || AreAnyHazardsOnSide(GetBattlerSide(battlerAtk))) @@ -2340,7 +2365,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (hasPartner) { if (IsHazardMove(aiData->partnerMove) // partner is going to set up hazards - && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove, predictedMove, CONSIDER_PRIORITY)) // partner is going to set up before the potential Defog + && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // partner is going to set up before the potential Defog { ADJUST_SCORE(-10); break; // Don't use Defog if partner is going to set up hazards @@ -2368,7 +2393,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_SEMI_INVULNERABLE: if (predictedMove != MOVE_NONE - && AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) + && AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && GetMoveEffect(predictedMove) == EFFECT_SEMI_INVULNERABLE) ADJUST_SCORE(-10); // Don't Fly/dig/etc if opponent is going to fly/dig/etc after you @@ -2414,7 +2439,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_YAWN: - if (gStatuses3[battlerDef] & STATUS3_YAWN) + if (gBattleMons[battlerDef].volatiles.yawn) ADJUST_SCORE(-10); else if (!AI_CanPutToSleep(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, aiData->partnerMove)) ADJUST_SCORE(-10); @@ -2516,7 +2541,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_ME_FIRST: if (predictedMove != MOVE_NONE) { - if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) ADJUST_SCORE(-10); // Target is predicted to go first, Me First will fail else if (GetMoveEffect(predictedMove) != GetMoveEffect(move)) return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score); @@ -2634,7 +2659,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_EMBARGO: if (!IsBattlerItemEnabled(battlerAtk) - || gStatuses3[battlerDef] & STATUS3_EMBARGO + || gBattleMons[battlerDef].volatiles.embargo || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; @@ -2644,15 +2669,17 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_TELEKINESIS: - if (gStatuses3[battlerDef] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN) - || gFieldStatuses & STATUS_FIELD_GRAVITY - || aiData->holdEffects[battlerDef] == HOLD_EFFECT_IRON_BALL - || IsTelekinesisBannedSpecies(gBattleMons[battlerDef].species) - || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) + if (gBattleMons[battlerDef].volatiles.telekinesis + || gBattleMons[battlerDef].volatiles.root + || gBattleMons[battlerDef].volatiles.smackDown + || gFieldStatuses & STATUS_FIELD_GRAVITY + || aiData->holdEffects[battlerDef] == HOLD_EFFECT_IRON_BALL + || IsTelekinesisBannedSpecies(gBattleMons[battlerDef].species) + || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_HEAL_BLOCK: - if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK + if (gBattleMons[battlerDef].volatiles.healBlock || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; @@ -2681,7 +2708,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_HIT_ENEMY_HEAL_ALLY: // pollen puff if (IsTargetingPartner(battlerAtk, battlerDef)) { - if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battlerDef].volatiles.healBlock) return 0; // cannot even select if (AI_BattlerAtMaxHp(battlerDef)) ADJUST_SCORE(-10); @@ -2690,7 +2717,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_ELECTRIFY: - if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) //|| GetMoveTypeSpecial(battlerDef, predictedMove) == TYPE_ELECTRIC // Move will already be electric type || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); @@ -2722,7 +2749,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_INSTRUCT: { u32 instructedMove; - if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) instructedMove = predictedMove; else instructedMove = gLastMoves[battlerDef]; @@ -2759,21 +2786,21 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_QUASH: if (!hasPartner - || AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) + || AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_AFTER_YOU: if (!IsTargetingPartner(battlerAtk, battlerDef) || !hasPartner - || AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) + || AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; case EFFECT_SUCKER_PUNCH: if ((HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_STATUS) && RandomPercentage(RNG_AI_SUCKER_PUNCH, SUCKER_PUNCH_CHANCE)) // Player has a status move || (IsBattleMoveStatus(predictedMove) && RandomPercentage(RNG_AI_SUCKER_PUNCH, SUCKER_PUNCH_PREDICTION_CHANCE) && (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_PREDICT_MOVE)) // AI actively predicting incoming status move - || AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) // Opponent going first + || AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Opponent going first ADJUST_SCORE(-10); break; case EFFECT_TAILWIND: @@ -2789,9 +2816,11 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_MAGNET_RISE: if (gFieldStatuses & STATUS_FIELD_GRAVITY - || gDisableStructs[battlerAtk].magnetRiseTimer > gBattleTurnCounter + || gDisableStructs[battlerAtk].magnetRiseTimer > gBattleTurnCounter || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_IRON_BALL - || gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_MAGNET_RISE | STATUS3_SMACKED_DOWN) + || gBattleMons[battlerAtk].volatiles.smackDown + || gBattleMons[battlerAtk].volatiles.root + || gBattleMons[battlerAtk].volatiles.magnetRise || !IsBattlerGrounded(battlerAtk)) ADJUST_SCORE(-10); break; @@ -2808,7 +2837,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(-10); break; case EFFECT_FLAIL: - if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) // Opponent should go first + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) // Opponent should go first || aiData->hpPercents[battlerAtk] > 50) ADJUST_SCORE(-4); break; @@ -2825,25 +2854,25 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || GetBattlerWeight(battlerDef) >= 2000) //200.0 kg ADJUST_SCORE(-10); break; - /*case EFFECT_NO_RETREAT: - if (TrappedByNoRetreat(battlerAtk)) + case EFFECT_NO_RETREAT: + if (gDisableStructs[battlerAtk].noRetreat) ADJUST_SCORE(-10); break; case EFFECT_EXTREME_EVOBOOST: - if (MainStatsMaxed(battlerAtk)) + if (AreBattlersStatsMaxed(battlerAtk)) ADJUST_SCORE(-10); break; case EFFECT_CLANGOROUS_SOUL: if (gBattleMons[battlerAtk].hp <= gBattleMons[battlerAtk].maxHP / 3) ADJUST_SCORE(-10); - break;*/ + break; case EFFECT_REVIVAL_BLESSING: if (GetFirstFaintedPartyIndex(battlerAtk) == PARTY_SIZE) ADJUST_SCORE(-10); else if (CanAIFaintTarget(battlerAtk, battlerDef, 0)) ADJUST_SCORE(-10); else if (CanTargetFaintAi(battlerDef, battlerAtk) - && AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) + && AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) ADJUST_SCORE(-10); break; case EFFECT_JUNGLE_HEALING: @@ -2874,17 +2903,24 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 defPrio = GetBattleMovePriority(battlerDef, aiData->abilities[battlerDef], predictedMove); if (predictedMove == MOVE_NONE || IsBattleMoveStatus(predictedMove) - || AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) + || AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) || defPrio < 1 || defPrio > 3) // Opponent going first or not using priority move ADJUST_SCORE(-10); } break; - case EFFECT_COURT_CHANGE: case EFFECT_TEATIME: if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) ADJUST_SCORE(-10); break; + case EFFECT_DARK_VOID: + if (B_DARK_VOID_FAIL >= GEN_7 && gBattleMons[battlerAtk].species != SPECIES_DARKRAI) + ADJUST_SCORE(-10); + break; + case EFFECT_HYPERSPACE_FURY: + if (gBattleMons[battlerAtk].species != SPECIES_HOOPA_UNBOUND) + ADJUST_SCORE(-10); + break; case EFFECT_PLACEHOLDER: return 0; // cannot even select } // move effect checks @@ -2944,6 +2980,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u32 movesetIndex = gAiThinkingStruct->movesetIndex; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); if (IsTargetingPartner(battlerAtk, battlerDef)) return score; @@ -2955,7 +2992,7 @@ static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, AI_ATTACKING) && effect != EFFECT_EXPLOSION && effect != EFFECT_MISTY_EXPLOSION) { - if (AI_IsFaster(battlerAtk, battlerDef, move, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), CONSIDER_PRIORITY)) + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) ADJUST_SCORE(FAST_KILL); else ADJUST_SCORE(SLOW_KILL); @@ -2989,10 +3026,12 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) bool32 partnerProtecting = IsAllyProtectingFromMove(battlerAtk, move, aiData->partnerMove) && !MoveIgnoresProtect(move); bool32 partnerHasBadAbility = (gAbilitiesInfo[atkPartnerAbility].aiRating < 0); u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, gAiLogicData); + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); SetTypeBeforeUsingMove(move, battlerAtk); moveType = GetBattleMoveType(move); + bool32 hasTwoOpponents = HasTwoOpponents(battlerAtk); bool32 hasPartner = HasPartner(battlerAtk); u32 friendlyFireThreshold = GetFriendlyFireKOThreshold(battlerAtk); u32 noOfHitsToKOPartner = GetNoOfHitsToKOBattler(battlerAtk, battlerAtkPartner, gAiThinkingStruct->movesetIndex, AI_ATTACKING); @@ -3036,7 +3075,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // Adjust for always crit moves if (MoveAlwaysCrits(aiData->partnerMove) && aiData->abilities[battlerAtk] == ABILITY_ANGER_POINT) { - if (AI_IsSlower(battlerAtk, battlerAtkPartner, move, predictedMove, CONSIDER_PRIORITY)) // Partner moving first + if (AI_IsSlower(battlerAtk, battlerAtkPartner, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Partner moving first { // discourage raising our attack since it's about to be maxed out if (IsAttackBoostMoveEffect(effect)) @@ -3051,8 +3090,54 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) switch (effect) { case EFFECT_HELPING_HAND: - if (!hasPartner || !HasDamagingMove(battlerAtkPartner)) - ADJUST_SCORE(-20); + if (!hasPartner + || !HasDamagingMove(battlerAtkPartner) + || (aiData->partnerMove != MOVE_NONE && IsBattleMoveStatus(aiData->partnerMove))) + { + ADJUST_SCORE(WORST_EFFECT); + } + else + { + u32 ownHitsToKOFoe1 = GetBestNoOfHitsToKO(battlerAtk, FOE(battlerAtk), AI_ATTACKING); + u32 partnerHitsToKOFoe1 = GetBestNoOfHitsToKO(battlerAtkPartner, FOE(battlerAtk), AI_ATTACKING); + u32 ownHitsToKOFoe2 = GetBestNoOfHitsToKO(battlerAtk, FOE(battlerAtkPartner), AI_ATTACKING); + u32 partnerHitsToKOFoe2 = GetBestNoOfHitsToKO(battlerAtkPartner, FOE(battlerAtkPartner), AI_ATTACKING); + + if (hasTwoOpponents) + { + // Might be about to die + if (CanTargetFaintAi(FOE(battlerAtk), battlerAtk) && CanTargetFaintAi(FOE(battlerAtkPartner), battlerAtk) + && AI_IsSlower(battlerAtk, FOE(battlerAtk), move, predictedMove, DONT_CONSIDER_PRIORITY) + && AI_IsSlower(battlerAtk, FOE(battlerAtkPartner), move, predictedMove, DONT_CONSIDER_PRIORITY)) + ADJUST_SCORE(GOOD_EFFECT); + + if (ownHitsToKOFoe1 > partnerHitsToKOFoe1 && partnerHitsToKOFoe1 > 1 + && ownHitsToKOFoe2 > partnerHitsToKOFoe2 && partnerHitsToKOFoe2 > 1) + ADJUST_SCORE(GOOD_EFFECT); + } + else if (IsBattlerAlive(FOE(battlerAtk))) + { + // Might be about to die + if (CanTargetFaintAi(FOE(battlerAtk), battlerAtk) + && AI_IsSlower(battlerAtk, FOE(battlerAtk), move, predictedMove, DONT_CONSIDER_PRIORITY)) + ADJUST_SCORE(GOOD_EFFECT); + + if (ownHitsToKOFoe1 > partnerHitsToKOFoe1 && partnerHitsToKOFoe1 > 1) + ADJUST_SCORE(GOOD_EFFECT); + } + else if (IsBattlerAlive(FOE(battlerAtkPartner))) + { + // Might be about to die + if (CanTargetFaintAi(FOE(battlerAtkPartner), battlerAtk) + && AI_IsSlower(battlerAtk, FOE(battlerAtkPartner), move, predictedMove, DONT_CONSIDER_PRIORITY)) + ADJUST_SCORE(GOOD_EFFECT); + + if (ownHitsToKOFoe2 > partnerHitsToKOFoe2 && partnerHitsToKOFoe2 > 1) + ADJUST_SCORE(GOOD_EFFECT); + + } + + } break; case EFFECT_PERISH_SONG: if (aiData->partnerMove != 0 && HasTrappingMoveEffect(battlerAtkPartner)) @@ -3209,7 +3294,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case ABILITY_ANGER_POINT: if (MoveAlwaysCrits(move) && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) - && AI_IsFaster(battlerAtk, battlerAtkPartner, move, predictedMove, CONSIDER_PRIORITY) + && AI_IsFaster(battlerAtk, battlerAtkPartner, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && isFriendlyFireOK) { if (MoveAlwaysCrits(move)) @@ -3478,7 +3563,9 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_PURIFY: if (gBattleMons[battlerAtkPartner].status1 & STATUS1_ANY) { - RETURN_SCORE_PLUS(WEAK_EFFECT); + if (gBattleMons[battlerAtkPartner].status1 & STATUS1_CAN_MOVE) + RETURN_SCORE_PLUS(WEAK_EFFECT); + RETURN_SCORE_PLUS(GOOD_EFFECT); } break; case EFFECT_SWAGGER: @@ -3528,7 +3615,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_INSTRUCT: { u16 instructedMove; - if (AI_IsFaster(battlerAtk, battlerAtkPartner, move, predictedMove, CONSIDER_PRIORITY)) + if (AI_IsFaster(battlerAtk, battlerAtkPartner, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) instructedMove = aiData->partnerMove; else instructedMove = gLastMoves[battlerAtkPartner]; @@ -3545,8 +3632,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && HasMoveWithEffect(battlerAtkPartner, EFFECT_TRICK_ROOM)) ADJUST_SCORE(DECENT_EFFECT); - if (AI_IsSlower(battlerAtkPartner, FOE(battlerAtkPartner), aiData->partnerMove, predictedMove, CONSIDER_PRIORITY) // Opponent mon 1 goes before partner - && AI_IsSlower(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), aiData->partnerMove, predictedMove, CONSIDER_PRIORITY)) // Opponent mon 2 goes before partner + if (AI_IsSlower(battlerAtkPartner, FOE(battlerAtkPartner), aiData->partnerMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY) // Opponent mon 1 goes before partner + && AI_IsSlower(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), aiData->partnerMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Opponent mon 2 goes before partner { if (partnerEffect == EFFECT_COUNTER || partnerEffect == EFFECT_MIRROR_COAT) break; // These moves need to go last @@ -3555,8 +3642,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_HEAL_PULSE: case EFFECT_HIT_ENEMY_HEAL_ALLY: - if (AI_IsFaster(battlerAtk, FOE(battlerAtk), move, predictedMove, CONSIDER_PRIORITY) - && AI_IsFaster(battlerAtk, BATTLE_PARTNER(FOE(battlerAtk)), move, predictedMove, CONSIDER_PRIORITY) + if (AI_IsFaster(battlerAtk, FOE(battlerAtk), move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) + && AI_IsFaster(battlerAtk, BATTLE_PARTNER(FOE(battlerAtk)), move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && gBattleMons[battlerAtkPartner].hp < gBattleMons[battlerAtkPartner].maxHP / 2) RETURN_SCORE_PLUS(WEAK_EFFECT); break; @@ -3676,9 +3763,9 @@ static enum MoveComparisonResult CompareMoveAccuracies(u32 battlerAtk, u32 battl static enum MoveComparisonResult CompareMoveSpeeds(u32 battlerAtk, u32 battlerDef, u16 move1, u16 move2) { - u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, gAiLogicData); - u32 speed1 = AI_WhoStrikesFirst(battlerAtk, battlerDef, move1, predictedMove, CONSIDER_PRIORITY); - u32 speed2 = AI_WhoStrikesFirst(battlerAtk, battlerDef, move2, predictedMove, CONSIDER_PRIORITY); + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + u32 speed1 = AI_WhoStrikesFirst(battlerAtk, battlerDef, move1, predictedMoveSpeedCheck, CONSIDER_PRIORITY); + u32 speed2 = AI_WhoStrikesFirst(battlerAtk, battlerDef, move2, predictedMoveSpeedCheck, CONSIDER_PRIORITY); if (speed1 == AI_IS_FASTER && speed2 == AI_IS_SLOWER) return MOVE_WON_COMPARISON; @@ -3914,6 +4001,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) s32 score = 0; u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, gAiLogicData); + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); u32 predictedType = GetMoveType(predictedMove); u32 predictedMoveSlot = GetMoveSlot(GetMovesArray(battlerDef), predictedMove); bool32 isBattle1v1 = IsBattle1v1(); @@ -4010,8 +4098,9 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (predictedMove && GetMoveEffect(predictedMove) != GetMoveEffect(move)) return AI_CheckViability(battlerAtk, battlerDef, predictedMove, score); break; - case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_USER_ALLY: + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_ATK)); + case EFFECT_ATTACK_UP: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); break; case EFFECT_ATTACK_UP_2: @@ -4021,12 +4110,14 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_DEFENSE_UP_3: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF)); break; + case EFFECT_STUFF_CHEEKS: case EFFECT_DEFENSE_UP_2: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF_2)); break; case EFFECT_SPEED_UP: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); break; + case EFFECT_AUTOTOMIZE: case EFFECT_SPEED_UP_2: ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED_2)); break; @@ -4096,6 +4187,32 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); break; + case EFFECT_ROTOTILLER: + if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GRASS) && IsBattlerGrounded(battlerAtk)) + { + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK)); + } + if (hasPartner && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), TYPE_GRASS) && IsBattlerGrounded(BATTLE_PARTNER(battlerAtk))) + { + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_ATK)); + ADJUST_SCORE(IncreaseStatUpScore(BATTLE_PARTNER(battlerAtk), battlerDef, STAT_CHANGE_SPATK)); + } + if (IS_BATTLER_OF_TYPE(FOE(battlerAtk), TYPE_GRASS) && IsBattlerGrounded(FOE(battlerAtk))) + { + if (aiData->abilities[FOE(battlerAtk)] == ABILITY_CONTRARY) + ADJUST_SCORE(WEAK_EFFECT); + else + ADJUST_SCORE(AWFUL_EFFECT); + } + if (IS_BATTLER_OF_TYPE(BATTLE_PARTNER(FOE(battlerAtk)), TYPE_GRASS) && IsBattlerGrounded(BATTLE_PARTNER(FOE(battlerAtk)))) + { + if (aiData->abilities[BATTLE_PARTNER(FOE(battlerAtk))] == ABILITY_CONTRARY) + ADJUST_SCORE(WEAK_EFFECT); + else + ADJUST_SCORE(AWFUL_EFFECT); + } + break; case EFFECT_HAZE: if (AnyStatIsRaised(BATTLE_PARTNER(battlerAtk)) || DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)) @@ -4177,8 +4294,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) { if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_SLP || aiData->holdEffects[battlerAtk] == HOLD_EFFECT_CURE_STATUS - || HasMoveWithEffect(EFFECT_SLEEP_TALK, battlerAtk) - || HasMoveWithEffect(EFFECT_SNORE, battlerAtk) + || HasMoveWithEffect(battlerAtk, EFFECT_SLEEP_TALK) + || HasMoveWithEffect(battlerAtk, EFFECT_SNORE) || aiData->abilities[battlerAtk] == ABILITY_SHED_SKIN || aiData->abilities[battlerAtk] == ABILITY_EARLY_BIRD || (AI_GetWeather() & B_WEATHER_RAIN && gWishFutureKnock.weatherDuration != 1 && aiData->abilities[battlerAtk] == ABILITY_HYDRATION && aiData->holdEffects[battlerAtk] != HOLD_EFFECT_UTILITY_UMBRELLA)) @@ -4189,7 +4306,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_SHEER_COLD: if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; - else if (gStatuses3[battlerAtk] & STATUS3_ALWAYS_HITS) + else if (gBattleMons[battlerAtk].volatiles.lockOn) ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_MEAN_LOOK: @@ -4212,7 +4329,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(IncreaseSubstituteMoveScore(battlerAtk, battlerDef, move)); break; case EFFECT_MIMIC: - if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) { if (gLastMoves[battlerDef] != MOVE_NONE && gLastMoves[battlerDef] != 0xFFFF && (GetMoveEffect(gLastMoves[battlerDef]) != GetMoveEffect(move))) @@ -4221,7 +4338,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_LEECH_SEED: if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) - || gStatuses3[battlerDef] & STATUS3_LEECHSEED + || gBattleMons[battlerDef].volatiles.leechSeed || HasMoveWithEffect(battlerDef, EFFECT_RAPID_SPIN) || aiData->abilities[battlerDef] == ABILITY_LIQUID_OOZE || aiData->abilities[battlerDef] == ABILITY_MAGIC_GUARD) @@ -4270,7 +4387,10 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_BATON_PASS: if ((gAiLogicData->shouldSwitch & (1u << battlerAtk)) && (gBattleMons[battlerAtk].volatiles.substitute - || (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING | STATUS3_MAGNET_RISE | STATUS3_POWER_TRICK)) + || gBattleMons[battlerAtk].volatiles.powerTrick + || gBattleMons[battlerAtk].volatiles.magnetRise + || gBattleMons[battlerAtk].volatiles.aquaRing + || gBattleMons[battlerAtk].volatiles.root || AnyStatIsRaised(battlerAtk))) ADJUST_SCORE(BEST_EFFECT); break; @@ -4281,7 +4401,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) && (gLastMoves[battlerDef] != MOVE_NONE) && (gLastMoves[battlerDef] != 0xFFFF) && (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB) - && (AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY))) + && (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY))) { if (CanTargetMoveFaintAi(gLastMoves[battlerDef], battlerDef, battlerAtk, 1)) ADJUST_SCORE(GOOD_EFFECT); // Disable move that can kill attacker @@ -4321,7 +4441,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_DESTINY_BOND: if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) break; - else if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) && CanTargetFaintAi(battlerDef, battlerAtk)) + else if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SPITE: @@ -4538,7 +4658,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (predictedMove != MOVE_NONE && isBattle1v1) { enum BattleMoveEffects predictedEffect = GetMoveEffect(predictedMove); - if ((AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) + if ((AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) && (predictedEffect == EFFECT_EXPLOSION || predictedEffect == EFFECT_MISTY_EXPLOSION || predictedEffect == EFFECT_PROTECT)) @@ -4587,7 +4707,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_ATTRACT: if (isBattle1v1 - && (AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) + && (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) && BattlerWillFaintFromSecondaryDamage(battlerDef, aiData->abilities[battlerDef])) break; // Don't use if the attract won't have a change to activate if (gBattleMons[battlerDef].status1 & STATUS1_ANY @@ -4603,6 +4723,27 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) //if (CountUsablePartyMons(battlerDef) != 0) //ADJUST_SCORE(8); break; + case EFFECT_COURT_CHANGE: + if (gSideStatuses[GetBattlerSide(FOE(battlerAtk))] & SIDE_STATUS_GOOD_COURT) + ADJUST_SCORE(WEAK_EFFECT); + if (gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_BAD_COURT) + ADJUST_SCORE(WEAK_EFFECT); + + if (AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)) && CountUsablePartyMons(battlerAtk) != 0) + { + ADJUST_SCORE(DECENT_EFFECT); + } + + if (hasPartner) + { + if (IsHazardMove(aiData->partnerMove) // partner is going to set up hazards + && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove, predictedMove, CONSIDER_PRIORITY)) // partner is going to set up before the Court Change + { + ADJUST_SCORE(-10); + break; + } + } + break; case EFFECT_DEFOG: if ((AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)) && CountUsablePartyMons(battlerAtk) != 0) || (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_GOOD_FOG)) @@ -4614,7 +4755,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) if (hasPartner) { if (IsHazardMove(aiData->partnerMove) // Partner is going to set up hazards - && AI_IsSlower(battlerAtk, BATTLE_PARTNER(battlerAtk), move, predictedMove, CONSIDER_PRIORITY)) // Partner going first + && AI_IsSlower(battlerAtk, BATTLE_PARTNER(battlerAtk), move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Partner going first break; // Don't use Defog if partner is going to set up hazards } ADJUST_SCORE(IncreaseStatDownScore(battlerAtk, battlerDef, STAT_EVASION)); @@ -4807,7 +4948,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(WEAK_EFFECT); break; case EFFECT_REFRESH: - if (gBattleMons[battlerAtk].status1 & STATUS1_ANY) + if (gBattleMons[battlerAtk].status1 & STATUS1_CAN_MOVE) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_TAKE_HEART: @@ -4903,9 +5044,9 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_POWER_TRICK: - if (!(gStatuses3[battlerAtk] & STATUS3_POWER_TRICK) - && gBattleMons[battlerAtk].defense > gBattleMons[battlerAtk].attack - && HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL)) + if (!gBattleMons[battlerAtk].volatiles.powerTrick + && gBattleMons[battlerAtk].defense > gBattleMons[battlerAtk].attack + && HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_HEART_SWAP: @@ -4979,7 +5120,7 @@ case EFFECT_GUARD_SPLIT: if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN)) { ADJUST_SCORE(GOOD_EFFECT); - if (gStatuses3[battlerAtk] & STATUS3_YAWN && IsBattlerGrounded(battlerAtk)) + if (gBattleMons[battlerAtk].volatiles.yawn && IsBattlerGrounded(battlerAtk)) ADJUST_SCORE(BEST_EFFECT); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_TERRAIN_EXTENDER || HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_TERRAIN_PULSE)) ADJUST_SCORE(WEAK_EFFECT); @@ -4989,7 +5130,7 @@ case EFFECT_GUARD_SPLIT: if (ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_MISTY_TERRAIN)) { ADJUST_SCORE(GOOD_EFFECT); - if (gStatuses3[battlerAtk] & STATUS3_YAWN && IsBattlerGrounded(battlerAtk)) + if (gBattleMons[battlerAtk].volatiles.yawn && IsBattlerGrounded(battlerAtk)) ADJUST_SCORE(BEST_EFFECT); if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_TERRAIN_EXTENDER || HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_TERRAIN_PULSE)) ADJUST_SCORE(WEAK_EFFECT); @@ -5038,6 +5179,9 @@ case EFFECT_GUARD_SPLIT: { if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && ShouldSetFieldStatus(battlerAtk, STATUS_FIELD_TRICK_ROOM)) ADJUST_SCORE(GOOD_EFFECT); + // Set it for next pokemon in singles. + else if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && !hasPartner && (CountUsablePartyMons(battlerAtk) != 0)) + ADJUST_SCORE(DECENT_EFFECT); // Don't unset it on last turn. else if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer != gBattleTurnCounter && ShouldClearFieldStatus(battlerAtk, STATUS_FIELD_TRICK_ROOM)) ADJUST_SCORE(GOOD_EFFECT); @@ -5108,7 +5252,7 @@ case EFFECT_GUARD_SPLIT: ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_HEAL_BLOCK: - if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) && predictedMove != MOVE_NONE && IsHealingMove(predictedMove)) + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && predictedMove != MOVE_NONE && IsHealingMove(predictedMove)) ADJUST_SCORE(DECENT_EFFECT); // Try to cancel healing move else if (HasHealingEffect(battlerDef) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_LEFTOVERS || (aiData->holdEffects[battlerDef] == HOLD_EFFECT_BLACK_SLUDGE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON))) @@ -5142,13 +5286,49 @@ case EFFECT_GUARD_SPLIT: ADJUST_SCORE(BEST_EFFECT); break; case EFFECT_QUASH: - if (hasPartner && AI_IsSlower(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove, predictedMove, CONSIDER_PRIORITY)) + if (hasPartner && AI_IsSlower(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) ADJUST_SCORE(DECENT_EFFECT); // Attacker partner wouldn't go before target break; case EFFECT_TAILWIND: - if (GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) - ADJUST_SCORE(GOOD_EFFECT); + { + if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer != gBattleTurnCounter) + break; + + if (HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_ELECTRO_BALL)) + ADJUST_SCORE(WEAK_EFFECT); + + if (isBattle1v1) + { + if (aiData->speedStats[battlerAtk] * 2 > aiData->speedStats[battlerDef]) + ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED)); + + if (CountUsablePartyMons(battlerAtk) != 0) + ADJUST_SCORE(WEAK_EFFECT); + } + else + { + u32 tailwindScore = 0; + u32 speed = aiData->speedStats[battlerAtk]; + u32 partnerSpeed = aiData->speedStats[BATTLE_PARTNER(battlerAtk)]; + u32 foe1Speed = aiData->speedStats[FOE(battlerAtk)]; + u32 foe2Speed = aiData->speedStats[BATTLE_PARTNER(FOE(battlerAtk))]; + + if (speed <= foe1Speed && (speed * 2) > foe1Speed) + tailwindScore += 1; + if (speed <= foe2Speed && (speed * 2) > foe2Speed) + tailwindScore += 1; + if (partnerSpeed <= foe1Speed && (speed * 2) > foe1Speed) + tailwindScore += 1; + if (partnerSpeed <= foe1Speed && (speed * 2) > foe1Speed) + tailwindScore += 1; + + if (tailwindScore > 0) + tailwindScore += 1; + + ADJUST_SCORE(tailwindScore); + } break; + } case EFFECT_LUCKY_CHANT: if (isBattle1v1 && CountUsablePartyMons(battlerDef) > 0) ADJUST_SCORE(GOOD_EFFECT); @@ -5157,7 +5337,7 @@ case EFFECT_GUARD_SPLIT: if (IsBattlerGrounded(battlerAtk) && HasDamagingMoveOfType(battlerDef, TYPE_ELECTRIC) && !(effectiveness == UQ_4_12(0.0))) // Doesn't resist ground move { - if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) // Attacker goes first + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Attacker goes first { if (predictedType == TYPE_GROUND) ADJUST_SCORE(GOOD_EFFECT); // Cause the enemy's move to fail @@ -5172,7 +5352,7 @@ case EFFECT_GUARD_SPLIT: } break; case EFFECT_CAMOUFLAGE: - if (predictedMove != MOVE_NONE && AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) // Attacker goes first + if (predictedMove != MOVE_NONE && AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) // Attacker goes first && !IsBattleMoveStatus(move) && effectiveness != UQ_4_12(0.0)) ADJUST_SCORE(DECENT_EFFECT); break; @@ -5199,7 +5379,7 @@ case EFFECT_GUARD_SPLIT: ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_ENDEAVOR: - if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) && !CanTargetFaintAi(battlerDef, battlerAtk)) + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && !CanTargetFaintAi(battlerDef, battlerAtk)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_REVIVAL_BLESSING: @@ -5229,7 +5409,7 @@ case EFFECT_GUARD_SPLIT: break; case EFFECT_RAPID_SPIN: if ((AreAnyHazardsOnSide(GetBattlerSide(battlerAtk)) && CountUsablePartyMons(battlerAtk) != 0) - || (gStatuses3[battlerAtk] & STATUS3_LEECHSEED || gBattleMons[battlerAtk].volatiles.wrapped)) + || (gBattleMons[battlerAtk].volatiles.leechSeed || gBattleMons[battlerAtk].volatiles.wrapped)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_SPECTRAL_THIEF: @@ -5469,7 +5649,7 @@ case EFFECT_GUARD_SPLIT: case MOVE_EFFECT_THROAT_CHOP: if (IsSoundMove(GetBestDmgMoveFromBattler(battlerDef, battlerAtk, AI_DEFENDING))) { - if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY)) + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) ADJUST_SCORE(GOOD_EFFECT); else ADJUST_SCORE(DECENT_EFFECT); @@ -5524,8 +5704,10 @@ static s32 AI_ForceSetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 || gBattleResults.battleTurnCounter != 0) return score; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (gAiThinkingStruct->aiFlags[battlerAtk] & AI_FLAG_SMART_SWITCHING - && AI_IsSlower(battlerAtk, battlerDef, move, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), CONSIDER_PRIORITY) + && AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && CanTargetFaintAi(battlerDef, battlerAtk) && GetBattleMovePriority(battlerAtk, gAiLogicData->abilities[battlerAtk], move) == 0) { @@ -5769,11 +5951,11 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor switch (effect) { case EFFECT_INGRAIN: - if (!(gStatuses3[battlerAtk] & STATUS3_ROOTED)) + if (!gBattleMons[battlerAtk].volatiles.root) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_AQUA_RING: - if (!(gStatuses3[battlerAtk] & STATUS3_AQUA_RING)) + if (!gBattleMons[battlerAtk].volatiles.aquaRing) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_PROTECT: @@ -5783,9 +5965,9 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_BATON_PASS: - if (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING)) + if (gBattleMons[battlerAtk].volatiles.root || gBattleMons[battlerAtk].volatiles.aquaRing) ADJUST_SCORE(DECENT_EFFECT); - if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED) + if (gBattleMons[battlerAtk].volatiles.leechSeed) ADJUST_SCORE(-3); ADJUST_SCORE(CountPositiveStatStages(battlerAtk) - CountNegativeStatStages(battlerAtk)); break; @@ -5811,7 +5993,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || (moveType == TYPE_GROUND && gAiLogicData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_EARTH_EATER) || (moveType == TYPE_WATER && (gAiLogicData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_DRY_SKIN || gAiLogicData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_WATER_ABSORB))) { - if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battlerDef].volatiles.healBlock) return 0; if (CanTargetFaintAi(FOE(battlerAtk), BATTLE_PARTNER(battlerAtk)) @@ -6115,6 +6297,7 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) struct AiLogicData *aiData = gAiLogicData; uq4_12_t effectiveness = aiData->effectiveness[battlerAtk][battlerDef][gAiThinkingStruct->movesetIndex]; u32 predictedMove = GetIncomingMove(battlerAtk, battlerDef, gAiLogicData); + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); // Switch benefit switch (moveEffect) @@ -6126,7 +6309,7 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) ADJUST_SCORE(GOOD_EFFECT); else if (hitsToKO == 1) ADJUST_SCORE(BEST_EFFECT); - else if (IsSwitchOutEffect(GetMoveEffect(predictedMove)) && AI_WhoStrikesFirst(battlerAtk, battlerDef, move, predictedMove, CONSIDER_PRIORITY) == AI_IS_SLOWER) // Pursuit against fast U-Turn + else if (IsSwitchOutEffect(GetMoveEffect(predictedMove)) && AI_WhoStrikesFirst(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY) == AI_IS_SLOWER) // Pursuit against fast U-Turn ADJUST_SCORE(DECENT_EFFECT); break; } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 6f470d3c84..6340b921c6 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -230,7 +230,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) for (i = 0; i < MAX_MON_MOVES; i++) { playerMove = SMART_SWITCHING_OMNISCIENT ? gBattleMons[opposingBattler].moves[i] : playerMoves[i]; - if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) + if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH && gBattleMons[opposingBattler].pp[i] > 0) { damageTaken = AI_GetDamage(opposingBattler, battler, i, AI_DEFENDING, gAiLogicData); if (damageTaken > maxDamageTaken && !AI_DoesChoiceEffectBlockMove(opposingBattler, playerMove)) @@ -238,7 +238,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) maxDamageTaken = damageTaken; bestPlayerMove = playerMove; } - if (GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[battler], playerMove) > 0 && damageTaken > maxDamageTakenPriority && !AI_DoesChoiceEffectBlockMove(opposingBattler, playerMove)) + if (GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[opposingBattler], playerMove) > 0 && damageTaken > maxDamageTakenPriority && !AI_DoesChoiceEffectBlockMove(opposingBattler, playerMove)) { maxDamageTakenPriority = damageTaken; bestPlayerPriorityMove = playerMove; @@ -254,7 +254,7 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) { aiMove = gBattleMons[battler].moves[i]; aiMoveEffect = GetMoveEffect(aiMove); - if (aiMove != MOVE_NONE) + if (aiMove != MOVE_NONE && gBattleMons[battler].pp[i] > 0) { u32 nonVolatileStatus = GetMoveNonVolatileStatus(aiMove); // Check if mon has an "important" status move @@ -675,7 +675,7 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) bool32 hasStatRaised = AnyStatIsRaised(battler); //Perish Song - if (gStatuses3[battler] & STATUS3_PERISH_SONG + if (gBattleMons[battler].volatiles.perishSong && gDisableStructs[battler].perishSongTimer == 0 && monAbility != ABILITY_SOUNDPROOF && RandomPercentage(RNG_AI_SWITCH_PERISH_SONG, GetSwitchChance(SHOULD_SWITCH_PERISH_SONG))) @@ -684,7 +684,7 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) if (gAiThinkingStruct->aiFlags[battler] & AI_FLAG_SMART_SWITCHING) { //Yawn - if (gStatuses3[battler] & STATUS3_YAWN + if (gBattleMons[battler].volatiles.yawn && CanBeSlept(battler, battler, monAbility, BLOCKED_BY_SLEEP_CLAUSE) // TODO: ask for help from pawwkie && gBattleMons[battler].hp > gBattleMons[battler].maxHP / 3 && RandomPercentage(RNG_AI_SWITCH_YAWN, GetSwitchChance(SHOULD_SWITCH_YAWN))) @@ -719,7 +719,7 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) && gAiLogicData->abilities[opposingBattler] != ABILITY_MINDS_EYE && (GetGenConfig(GEN_ILLUMINATE_EFFECT) >= GEN_9 && gAiLogicData->abilities[opposingBattler] != ABILITY_ILLUMINATE) && !gBattleMons[battler].volatiles.foresight - && !(gStatuses3[battler] & STATUS3_MIRACLE_EYED)) + && !gBattleMons[battler].volatiles.miracleEye) switchMon = FALSE; if (switchMon) @@ -749,7 +749,7 @@ static bool32 ShouldSwitchIfBadlyStatused(u32 battler) return SetSwitchinAndSwitch(battler, PARTY_SIZE); //Leech Seed - if (gStatuses3[battler] & STATUS3_LEECHSEED + if (gBattleMons[battler].volatiles.leechSeed && (hasStatRaised ? RandomPercentage(RNG_AI_SWITCH_SEEDED, GetSwitchChance(SHOULD_SWITCH_SEEDED_STATS_RAISED)) : RandomPercentage(RNG_AI_SWITCH_SEEDED, GetSwitchChance(SHOULD_SWITCH_SEEDED)))) return SetSwitchinAndSwitch(battler, PARTY_SIZE); } @@ -770,7 +770,7 @@ static bool32 ShouldSwitchIfAbilityBenefit(u32 battler) bool32 hasStatRaised = AnyStatIsRaised(battler); //Check if ability is blocked - if (gStatuses3[battler] & STATUS3_GASTRO_ACID + if (gBattleMons[battler].volatiles.gastroAcid || IsNeutralizingGasOnField()) return FALSE; @@ -1109,7 +1109,7 @@ bool32 ShouldSwitch(u32 battler) return FALSE; if (gBattleMons[battler].volatiles.escapePrevention) return FALSE; - if (gStatuses3[battler] & STATUS3_ROOTED) + if (gBattleMons[battler].volatiles.root) return FALSE; if (IsAbilityPreventingEscape(battler)) return FALSE; @@ -1260,7 +1260,7 @@ void ModifySwitchAfterMoveScoring(u32 battler) return; if (gBattleMons[battler].volatiles.escapePrevention) return; - if (gStatuses3[battler] & STATUS3_ROOTED) + if (gBattleMons[battler].volatiles.root) return; if (IsAbilityPreventingEscape(battler)) return; @@ -1522,6 +1522,24 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva return bestMonId; } +static u32 GetFirstNonIvalidMon(u32 firstId, u32 lastId, u32 invalidMons, u32 battlerIn1, u32 battlerIn2) +{ + if (!IsDoubleBattle()) + return PARTY_SIZE; + + if (PARTY_SIZE != gBattleStruct->monToSwitchIntoId[battlerIn1] + && PARTY_SIZE != gBattleStruct->monToSwitchIntoId[battlerIn2]) + return PARTY_SIZE; + + for (u32 chosenMonId = (lastId-1); chosenMonId >= firstId; chosenMonId--) + { + if ((1 << (chosenMonId)) & invalidMons) + continue; + return chosenMonId; // first non invalid mon found + } + return PARTY_SIZE; +} + bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) { // List that makes mon not grounded @@ -1972,7 +1990,7 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle for (i = 0; i < MAX_MON_MOVES; i++) { playerMove = SMART_SWITCHING_OMNISCIENT ? gBattleMons[opposingBattler].moves[i] : playerMoves[i]; - if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) + if (playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH && gBattleMons[opposingBattler].pp[i] > 0) { damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, AI_DEFENDING); if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move @@ -1997,7 +2015,8 @@ static s32 GetMaxPriorityDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposi for (i = 0; i < MAX_MON_MOVES; i++) { playerMove = SMART_SWITCHING_OMNISCIENT ? gBattleMons[opposingBattler].moves[i] : playerMoves[i]; - if (GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[opposingBattler], playerMove) > 0 && playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH) + if (GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[opposingBattler], playerMove) > 0 + && playerMove != MOVE_NONE && !IsBattleMoveStatus(playerMove) && GetMoveEffect(playerMove) != EFFECT_FOCUS_PUNCH && gBattleMons[opposingBattler].pp[i] > 0) { damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, AI_DEFENDING); if (playerMove == gBattleStruct->choicedMove[opposingBattler]) // If player is choiced, only care about the choice locked move @@ -2098,6 +2117,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 aiMove, hitsToKOAI, hitsToKOPlayer, hitsToKOAIPriority, bestPlayerMove = MOVE_NONE, bestPlayerPriorityMove = MOVE_NONE, maxHitsToKO = 0; u32 bestResist = UQ_4_12(2.0), bestResistEffective = UQ_4_12(2.0), typeMatchup; // 2.0 is the default "Neutral" matchup from GetBattleMonTypeMatchup bool32 isFreeSwitch = IsFreeSwitch(switchType, battlerIn1, opposingBattler), isSwitchinFirst, isSwitchinFirstPriority, canSwitchinWin1v1; + u32 invalidMons = 0; // Iterate through mons for (i = firstId; i < lastId; i++) @@ -2109,6 +2129,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, || i == gBattleStruct->monToSwitchIntoId[battlerIn1] || i == gBattleStruct->monToSwitchIntoId[battlerIn2]) { + invalidMons |= 1u << i; continue; } // Save Ace Pokemon for last @@ -2116,6 +2137,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, { aceMonId = i; aceMonCount++; + invalidMons |= 1u << i; continue; } else @@ -2135,6 +2157,10 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Check through current mon's moves for (j = 0; j < MAX_MON_MOVES; j++) { + // Check that move has PP remaining before running calcs + if (gAiLogicData->switchinCandidate.battleMon.pp[j] < 1) + continue; + aiMove = gAiLogicData->switchinCandidate.battleMon.moves[j]; damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, gAiLogicData->switchinCandidate.battleMon, AI_ATTACKING); hitsToKOPlayer = GetNoOfHitsToKOBattlerDmg(damageDealt, opposingBattler); @@ -2270,6 +2296,11 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, && (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) || gAiLogicData->ejectButtonSwitch || gAiLogicData->ejectPackSwitch)) return aceMonId; + // Fallback + u32 bestMonId = GetFirstNonIvalidMon(firstId, lastId, invalidMons, battlerIn1, battlerIn2); + if (bestMonId != PARTY_SIZE) + return bestMonId; + return PARTY_SIZE; } @@ -2387,6 +2418,11 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, enum SwitchType switchType) && (IsSwitchOutEffect(GetMoveEffect(gCurrentMove)) || gAiLogicData->ejectButtonSwitch || gAiLogicData->ejectPackSwitch)) return aceMonId; + // Fallback + bestMonId = GetFirstNonIvalidMon(firstId, lastId, invalidMons, battlerIn1, battlerIn2); + if (bestMonId != PARTY_SIZE) + return bestMonId; + return PARTY_SIZE; } } @@ -2425,7 +2461,7 @@ static bool32 ShouldUseItem(u32 battler) || gBattleMons[battler].volatiles.semiInvulnerable == STATE_SKY_DROP) return FALSE; - if (gStatuses3[battler] & STATUS3_EMBARGO) + if (gBattleMons[battler].volatiles.embargo) return FALSE; if (AiExpectsToFaintPlayer(battler)) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index e044f7b3e9..84d247a617 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -199,6 +199,14 @@ u32 GetIncomingMove(u32 battler, u32 opposingBattler, struct AiLogicData *aiData return aiData->lastUsedMove[opposingBattler]; } +// When not predicting, don't want to reference player's previous move; leads to weird behaviour for cases like Fake Out or Protect, especially in doubles +u32 GetIncomingMoveSpeedCheck(u32 battler, u32 opposingBattler, struct AiLogicData *aiData) +{ + if (aiData->predictingMove && CanAiPredictMove()) + return aiData->predictedMove[opposingBattler]; + return MOVE_NONE; +} + void ClearBattlerMoveHistory(u32 battlerId) { memset(gBattleHistory->usedMoves[battlerId], 0, sizeof(gBattleHistory->usedMoves[battlerId])); @@ -467,7 +475,7 @@ bool32 IsBattlerTrapped(u32 battlerAtk, u32 battlerDef) return TRUE; if (gBattleMons[battlerDef].volatiles.semiInvulnerable == STATE_SKY_DROP) return TRUE; - if (gStatuses3[battlerDef] & STATUS3_ROOTED) + if (gBattleMons[battlerDef].volatiles.root) return TRUE; if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) return TRUE; @@ -497,6 +505,7 @@ u32 GetTotalBaseStat(u32 species) bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler) { int i; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAI, opposingBattler, gAiLogicData); for (i = 0; i < MAX_MON_MOVES; i++) { @@ -504,7 +513,7 @@ bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler) enum BattleMoveEffects effect = GetMoveEffect(move); if (effect == EFFECT_PROTECT && move != MOVE_ENDURE) return TRUE; - if (effect == EFFECT_SEMI_INVULNERABLE && AI_IsSlower(battlerAI, opposingBattler, GetAIChosenMove(battlerAI), GetIncomingMove(battlerAI, opposingBattler, gAiLogicData), CONSIDER_PRIORITY)) + if (effect == EFFECT_SEMI_INVULNERABLE && AI_IsSlower(battlerAI, opposingBattler, GetAIChosenMove(battlerAI), predictedMoveSpeedCheck, CONSIDER_PRIORITY)) return TRUE; } return FALSE; @@ -1243,6 +1252,29 @@ u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum D return GetNoOfHitsToKOBattlerDmg(AI_GetDamage(battlerAtk, battlerDef, moveIndex, calcContext, gAiLogicData), battlerDef); } +u32 GetBestNoOfHitsToKO(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext) +{ + u32 result = 100; + u32 tempResult = 0; + + struct AiLogicData *aiData = gAiLogicData; + s32 moveIndex; + u16 *moves = GetMovesArray(battlerAtk); + u32 moveLimitations = aiData->moveLimitations[battlerAtk]; + + for (moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++) + { + if (IsMoveUnusable(moveIndex, moves[moveIndex], moveLimitations)) + continue; + + tempResult = GetNoOfHitsToKOBattler(battlerAtk, battlerDef, moveIndex, calcContext); + if (tempResult != 0 && tempResult < result) + result = tempResult; + } + + return result; +} + u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext) { int bestDmg = AI_GetDamage(battlerAtk, battlerDef, gAiThinkingStruct->movesetIndex, calcContext, gAiLogicData); @@ -1632,11 +1664,11 @@ enum ItemHoldEffect AI_DecideHoldEffectForTurn(u32 battlerId) if (gAiThinkingStruct->aiFlags[battlerId] & AI_FLAG_NEGATE_UNAWARE) return holdEffect; - if (gStatuses3[battlerId] & STATUS3_EMBARGO) + if (gBattleMons[battlerId].volatiles.embargo) return HOLD_EFFECT_NONE; if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) return HOLD_EFFECT_NONE; - if (gAiLogicData->abilities[battlerId] == ABILITY_KLUTZ && !(gStatuses3[battlerId] & STATUS3_GASTRO_ACID)) + if (gAiLogicData->abilities[battlerId] == ABILITY_KLUTZ && !gBattleMons[battlerId].volatiles.gastroAcid) return HOLD_EFFECT_NONE; return holdEffect; @@ -1890,7 +1922,7 @@ bool32 ShouldTryOHKO(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbil if (!DoesBattlerIgnoreAbilityChecks(battlerAtk, atkAbility, move) && defAbility == ABILITY_STURDY) return FALSE; - if ((((gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS) + if (((gBattleMons[battlerDef].volatiles.lockOn && gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk) || atkAbility == ABILITY_NO_GUARD || defAbility == ABILITY_NO_GUARD) && gBattleMons[battlerAtk].level >= gBattleMons[battlerDef].level) @@ -1935,7 +1967,8 @@ bool32 IsBattlerDamagedByStatus(u32 battler) || gBattleMons[battler].volatiles.nightmare || gBattleMons[battler].volatiles.cursed || gBattleMons[battler].volatiles.saltCure - || gStatuses3[battler] & (STATUS3_PERISH_SONG | STATUS3_LEECHSEED) + || gBattleMons[battler].volatiles.leechSeed + || gBattleMons[battler].volatiles.perishSong || gSideStatuses[GetBattlerSide(battler)] & (SIDE_STATUS_SEA_OF_FIRE | SIDE_STATUS_DAMAGE_NON_TYPES); } @@ -2030,8 +2063,9 @@ bool32 CanLowerStat(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData, if (stat == STAT_SPEED) { + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); // If AI is faster and doesn't have any mons left, lowering speed doesn't give any - return !(AI_IsFaster(battlerAtk, battlerDef, move, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), DONT_CONSIDER_PRIORITY) + return !(AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY) && CountUsablePartyMons(battlerAtk) == 0 && !HasBattlerSideMoveWithEffect(battlerAtk, EFFECT_ELECTRO_BALL)); } @@ -2073,9 +2107,12 @@ u32 IncreaseStatDownScore(u32 battlerAtk, u32 battlerDef, u32 stat) tempScore += DECENT_EFFECT; break; case STAT_SPEED: - if (AI_IsSlower(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), DONT_CONSIDER_PRIORITY)) + { + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (AI_IsSlower(battlerAtk, battlerDef, gAiThinkingStruct->moveConsidered, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY)) tempScore += DECENT_EFFECT; break; + } case STAT_SPATK: if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) tempScore += DECENT_EFFECT; @@ -2087,9 +2124,9 @@ u32 IncreaseStatDownScore(u32 battlerAtk, u32 battlerDef, u32 stat) case STAT_ACC: if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) tempScore += WEAK_EFFECT; - if (gStatuses3[battlerDef] & STATUS3_LEECHSEED) + if (gBattleMons[battlerDef].volatiles.leechSeed) tempScore += WEAK_EFFECT; - if (gStatuses3[battlerDef] & STATUS3_ROOTED) + if (gBattleMons[battlerDef].volatiles.root) tempScore += WEAK_EFFECT; if (gBattleMons[battlerDef].volatiles.cursed) tempScore += WEAK_EFFECT; @@ -2097,9 +2134,9 @@ u32 IncreaseStatDownScore(u32 battlerAtk, u32 battlerDef, u32 stat) case STAT_EVASION: if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) tempScore += WEAK_EFFECT; - if (gStatuses3[battlerDef] & STATUS3_LEECHSEED) + if (gBattleMons[battlerDef].volatiles.leechSeed) tempScore += WEAK_EFFECT; - if (gStatuses3[battlerDef] & STATUS3_ROOTED) + if (gBattleMons[battlerDef].volatiles.root) tempScore += WEAK_EFFECT; if (gBattleMons[battlerDef].volatiles.cursed) tempScore += WEAK_EFFECT; @@ -2601,11 +2638,13 @@ bool32 IsStatRaisingEffect(enum BattleMoveEffects effect) { switch (effect) { + case EFFECT_ATTACK_UP_USER_ALLY: case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_2: case EFFECT_DEFENSE_UP: case EFFECT_DEFENSE_UP_2: case EFFECT_DEFENSE_UP_3: + case EFFECT_AUTOTOMIZE: case EFFECT_SPEED_UP: case EFFECT_SPEED_UP_2: case EFFECT_SPECIAL_ATTACK_UP: @@ -2864,13 +2903,13 @@ bool32 IsTwoTurnNotSemiInvulnerableMove(u32 battlerAtk, u32 move) } } -static u32 GetLeechSeedDamage(u32 battlerId) +static u32 GetLeechSeedDamage(u32 battler) { u32 damage = 0; - if ((gStatuses3[battlerId] & STATUS3_LEECHSEED) - && gBattleMons[gStatuses3[battlerId] & STATUS3_LEECHSEED_BATTLER].hp != 0) + u32 leechSeeder = gBattleMons[battler].volatiles.leechSeed; + if (leechSeeder && gBattleMons[leechSeeder - 1].hp != 0) { - damage = GetNonDynamaxMaxHP(battlerId) / 8; + damage = GetNonDynamaxMaxHP(battler) / 8; if (damage == 0) damage = 1; } @@ -3111,6 +3150,7 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 mov { bool32 hasStatBoost = AnyUsefulStatIsRaised(battlerAtk) || gBattleMons[battlerDef].statStages[STAT_EVASION] >= 9; //Significant boost in evasion for any class u32 battlerToSwitch; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); battlerToSwitch = gBattleStruct->AI_monToSwitchIntoId[battlerAtk]; @@ -3131,7 +3171,7 @@ enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 mov if (IsBattlerPredictedToSwitch(battlerDef)) return SHOULD_PIVOT; // Try pivoting so you can switch to a better matchup to counter your new opponent - if (AI_IsFaster(battlerAtk, battlerDef, move, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), CONSIDER_PRIORITY)) // Attacker goes first + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) // Attacker goes first { if (!CanAIFaintTarget(battlerAtk, battlerDef, 0)) // Can't KO foe otherwise { @@ -3513,10 +3553,11 @@ bool32 AI_CanBeInfatuated(u32 battlerAtk, u32 battlerDef, u32 defAbility) u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbility, u32 move) { + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); if (((!IsMoldBreakerTypeAbility(battlerAtk, gAiLogicData->abilities[battlerAtk]) && (defAbility == ABILITY_SHIELD_DUST || defAbility == ABILITY_INNER_FOCUS)) || gAiLogicData->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK || DoesSubstituteBlockMove(battlerAtk, battlerDef, move) - || AI_IsSlower(battlerAtk, battlerDef, move, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), CONSIDER_PRIORITY))) // Opponent goes first + || AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY))) // Opponent goes first { return 0; } @@ -3524,7 +3565,7 @@ u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbi || gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS || gBattleMons[battlerDef].volatiles.infatuation || gBattleMons[battlerDef].volatiles.confusionTurns > 0) - || ((AI_IsFaster(battlerAtk, battlerDef, move, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), CONSIDER_PRIORITY)) && CanTargetFaintAi(battlerDef, battlerAtk))) + || ((AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) && CanTargetFaintAi(battlerDef, battlerAtk))) { return 2; // good idea to flinch } @@ -3557,7 +3598,8 @@ bool32 IsFlinchGuaranteed(u32 battlerAtk, u32 battlerDef, u32 move) if (!MoveHasAdditionalEffect(move, MOVE_EFFECT_FLINCH)) return FALSE; - if (AI_IsSlower(battlerAtk, battlerDef, move, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), CONSIDER_PRIORITY)) + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (AI_IsSlower(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) return FALSE; u32 i; @@ -3592,7 +3634,7 @@ bool32 HasChoiceEffect(u32 battler) if (ability == ABILITY_KLUTZ) return FALSE; - + enum ItemHoldEffect holdEffect = gAiLogicData->holdEffects[battler]; switch (holdEffect) { @@ -3672,27 +3714,6 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) return FALSE; } -u32 GetBattlerSideSpeedAverage(u32 battler) -{ - u32 speed1 = 0; - u32 speed2 = 0; - u32 numBattlersAlive = 0; - - if (IsBattlerAlive(battler)) - { - speed1 = gAiLogicData->speedStats[battler]; - numBattlersAlive++; - } - - if (HasPartner(battler)) - { - speed2 = gAiLogicData->speedStats[BATTLE_PARTNER(battler)]; - numBattlersAlive++; - } - - return (speed1 + speed2) / numBattlersAlive; -} - bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 moveIndex) { if (recoilDmg >= gBattleMons[battlerAtk].hp //Recoil kills attacker @@ -3709,12 +3730,13 @@ bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 mo bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage) { - if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), CONSIDER_PRIORITY)) + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) { // using item or user goes first s32 healDmg = (GetMoveAbsorbPercentage(move) * damage) / 100; - if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battlerAtk].volatiles.healBlock) healDmg = 0; if (CanTargetFaintAi(battlerDef, battlerAtk) @@ -3737,11 +3759,12 @@ bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent) { u32 maxHP = gBattleMons[battlerAtk].maxHP; u32 healAmount = (healPercent * maxHP) / 100; + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); if (healAmount > maxHP) healAmount = maxHP; - if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battlerAtk].volatiles.healBlock) healAmount = 0; - if (AI_IsFaster(battlerAtk, battlerDef, move, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), CONSIDER_PRIORITY)) + if (AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, CONSIDER_PRIORITY)) { if (CanTargetFaintAi(battlerDef, battlerAtk) && !CanTargetFaintAiWithMod(battlerDef, battlerAtk, healAmount, 0)) @@ -3800,7 +3823,7 @@ bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects mo bool32 IsBattle1v1() { if (IsDoubleBattle() - && ((IsBattlerAlive(B_POSITION_PLAYER_LEFT) && IsBattlerAlive(B_POSITION_PLAYER_RIGHT)) + && ((IsBattlerAlive(B_POSITION_PLAYER_LEFT) && IsBattlerAlive(B_POSITION_PLAYER_RIGHT)) || (IsBattlerAlive(B_POSITION_OPPONENT_LEFT) && IsBattlerAlive(B_POSITION_OPPONENT_RIGHT)))) return FALSE; return TRUE; @@ -3860,7 +3883,7 @@ bool32 AreMovesEquivalent(u32 battlerAtk, u32 battlerAtkPartner, u32 move, u32 p return FALSE; u32 battlerDef = gBattleStruct->moveTarget[battlerAtk]; - + // We don't care the effect is basically the same; we would use this move anyway. if (GetBestDmgMoveFromBattler(battlerAtk, battlerDef, AI_ATTACKING) == move) return FALSE; @@ -4478,7 +4501,8 @@ static enum AIScore IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, { enum AIScore tempScore = NO_INCREASE; u32 noOfHitsToFaint = NoOfHitsForTargetToFaintBattler(battlerDef, battlerAtk); - u32 aiIsFaster = AI_IsFaster(battlerAtk, battlerDef, MOVE_NONE, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), DONT_CONSIDER_PRIORITY); // Don't care about the priority of our setup move, care about outspeeding otherwise + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + u32 aiIsFaster = AI_IsFaster(battlerAtk, battlerDef, MOVE_NONE, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY); // Don't care about the priority of our setup move, care about outspeeding otherwise u32 shouldSetUp = ((noOfHitsToFaint >= 2 && aiIsFaster) || (noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS); u32 i; u32 statId = GetStatBeingChanged(statChange); @@ -5024,8 +5048,9 @@ enum AIConsiderGimmick ShouldTeraFromCalcs(u32 battler, u32 opposingBattler, str } else { + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battler, opposingBattler, gAiLogicData); // will we go first? - if (AI_WhoStrikesFirst(battler, opposingBattler, killingMove, GetIncomingMove(battler, opposingBattler, gAiLogicData), CONSIDER_PRIORITY) == AI_IS_FASTER && GetBattleMovePriority(battler, gAiLogicData->abilities[battler], killingMove) >= GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[opposingBattler], hardPunishingMove)) + if (AI_WhoStrikesFirst(battler, opposingBattler, killingMove, predictedMoveSpeedCheck, CONSIDER_PRIORITY) == AI_IS_FASTER && GetBattleMovePriority(battler, gAiLogicData->abilities[battler], killingMove) >= GetBattleMovePriority(opposingBattler, gAiLogicData->abilities[opposingBattler], hardPunishingMove)) return USE_GIMMICK; } } @@ -5148,15 +5173,15 @@ void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) ADJUST_SCORE_PTR(GOOD_EFFECT); if (AreAnyHazardsOnSide(GetBattlerSide(battlerDef)) && CountUsablePartyMons(battlerDef) != 0) ADJUST_SCORE_PTR(-2); - - if (gBattleMons[battlerAtk].volatiles.substitute && AI_IsFaster(battlerAtk, battlerDef, move, GetIncomingMove(battlerAtk, battlerDef, gAiLogicData), DONT_CONSIDER_PRIORITY)) + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, battlerDef, gAiLogicData); + if (gBattleMons[battlerAtk].volatiles.substitute && AI_IsFaster(battlerAtk, battlerDef, move, predictedMoveSpeedCheck, DONT_CONSIDER_PRIORITY)) ADJUST_SCORE_PTR(-10); if (gBattleMons[battlerDef].volatiles.substitute) ADJUST_SCORE_PTR(GOOD_EFFECT); - if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED) + if (gBattleMons[battlerAtk].volatiles.leechSeed) ADJUST_SCORE_PTR(DECENT_EFFECT); - if (gStatuses3[battlerDef] & STATUS3_LEECHSEED) + if (gBattleMons[battlerDef].volatiles.leechSeed) ADJUST_SCORE_PTR(-2); } @@ -5187,9 +5212,9 @@ bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, st default: break; } - + u32 predictedMoveSpeedCheck = GetIncomingMoveSpeedCheck(battlerAtk, opposingBattler, gAiLogicData); return (preventsStatLoss - && AI_IsFaster(battlerAtk, battlerAtkPartner, MOVE_NONE, GetIncomingMove(battlerAtk, opposingBattler, gAiLogicData), CONSIDER_PRIORITY) + && AI_IsFaster(battlerAtk, battlerAtkPartner, MOVE_NONE, predictedMoveSpeedCheck, CONSIDER_PRIORITY) && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL)); } @@ -5209,7 +5234,7 @@ u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) scoreIncrease += BEST_EFFECT; } - if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) + if (gBattleMons[battlerDef].volatiles.perishSong) scoreIncrease += GOOD_EFFECT; if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP) @@ -5250,9 +5275,9 @@ bool32 IsBattlerItemEnabled(u32 battler) return TRUE; if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) return FALSE; - if (gStatuses3[battler] & STATUS3_EMBARGO) + if (gBattleMons[battler].volatiles.embargo) return FALSE; - if (gBattleMons[battler].ability == ABILITY_KLUTZ && !(gStatuses3[battler] & STATUS3_GASTRO_ACID)) + if (gBattleMons[battler].ability == ABILITY_KLUTZ && !gBattleMons[battler].volatiles.gastroAcid) return FALSE; return TRUE; } @@ -5393,7 +5418,7 @@ bool32 CanEffectChangeAbility(u32 battlerAtk, u32 battlerDef, u32 effect, struct } } - if (gStatuses3[battlerDef] & STATUS3_GASTRO_ACID) + if (gBattleMons[battlerDef].volatiles.gastroAcid) return FALSE; u32 atkAbility = aiData->abilities[battlerAtk]; diff --git a/src/battle_anim.c b/src/battle_anim.c index 76e37b7eea..100d2d376d 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -195,6 +195,7 @@ static const u8* const sBattleAnims_StatusConditions[NUM_B_ANIMS_STATUS] = [B_ANIM_STATUS_FRZ] = gBattleAnimStatus_Freeze, [B_ANIM_STATUS_CURSED] = gBattleAnimStatus_Curse, [B_ANIM_STATUS_NIGHTMARE] = gBattleAnimStatus_Nightmare, + [B_ANIM_STATUS_FRB] = gBattleAnimStatus_Frostbite, }; static const u8* const sBattleAnims_General[NUM_B_ANIMS_GENERAL] = diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 12bd7859b9..128862994b 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -6863,6 +6863,32 @@ static void TrySwapWishBattlerIds(u32 battlerAtk, u32 battlerPartner) SWAP(gWishFutureKnock.wishPartyId[battlerAtk], gWishFutureKnock.wishPartyId[battlerPartner], temp); } +static void TrySwapAttractBattlerIds(u32 battlerAtk, u32 battlerPartner) +{ + u32 attractedTo; + + // our own infatuation handled with gBattleMons struct data swapping + + // if another battler is infatuated with one of us, change to other battler + for (u32 i = 0; i < gBattlersCount; i++) + { + if (i == battlerAtk || i == battlerPartner || !gBattleMons[i].volatiles.infatuation) + continue; + + attractedTo = INFATUATED_WITH(i); + if (attractedTo == battlerAtk) + { + gBattleMons[i].volatiles.infatuation = INFATUATED_WITH(battlerPartner); + break; + } + else if (attractedTo == battlerPartner) + { + gBattleMons[i].volatiles.infatuation = INFATUATED_WITH(battlerAtk); + break; + } + } +} + static void SwapBattlerMoveData(u32 battler1, u32 battler2) { u32 temp; @@ -6906,7 +6932,6 @@ static void AnimTask_AllySwitchDataSwap(u8 taskId) SWAP(gBattleSpritesDataPtr->battlerData[battlerAtk].invisible, gBattleSpritesDataPtr->battlerData[battlerPartner].invisible, temp); SWAP(gTransformedPersonalities[battlerAtk], gTransformedPersonalities[battlerPartner], temp); SWAP(gTransformedShininess[battlerAtk], gTransformedShininess[battlerPartner], temp); - SWAP(gStatuses3[battlerAtk], gStatuses3[battlerPartner], temp); SwapBattlerMoveData(battlerAtk, battlerPartner); @@ -6934,6 +6959,7 @@ static void AnimTask_AllySwitchDataSwap(u8 taskId) TrySwapSkyDropTargets(battlerAtk, battlerPartner); TrySwapStickyWebBattlerId(battlerAtk, battlerPartner); TrySwapWishBattlerIds(battlerAtk, battlerPartner); + TrySwapAttractBattlerIds(battlerAtk, battlerPartner); // For Snipe Shot and abilities Stalwart/Propeller Tail - keep the original target. for (i = 0; i < gBattlersCount; i++) diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 6efac4c79b..65de36237b 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -2550,6 +2550,32 @@ void AnimTask_HideSwapSprite(u8 taskId) } } +void AnimTask_HideOpponentShadows(u8 taskId) +{ + u32 battlerLeft = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerLeft].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerLeft].shadowSpriteIdSecondary].callback = SpriteCB_SetInvisible; + if (IsDoubleBattle()) + { + u32 battlerRight = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerRight].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerRight].shadowSpriteIdSecondary].callback = SpriteCB_SetInvisible; + } + DestroyAnimVisualTask(taskId); +} + +void AnimTask_SetOpponentShadowCallbacks(u8 taskId) +{ + u32 battlerLeft = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + SetBattlerShadowSpriteCallback(battlerLeft, gBattleMons[battlerLeft].species); + if (IsDoubleBattle()) + { + u32 battlerRight = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + SetBattlerShadowSpriteCallback(battlerRight, gBattleMons[battlerRight].species); + } + DestroyAnimVisualTask(taskId); +} + void AnimTask_TransformMon(u8 taskId) { int i, j; diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 513e286d12..5426f0239f 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -206,7 +206,7 @@ static void PlayerPartnerHandleDrawTrainerPic(u32 battler) if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) { - trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic; + trainerPicId = gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic; xPos = 90; yPos = (8 - gTrainerBacksprites[trainerPicId].coordinates.size) * 4 + 80; } @@ -320,9 +320,9 @@ static void PlayerPartnerHandleIntroTrainerBallThrow(u32 battler) enum DifficultyLevel difficulty = GetBattlePartnerDifficultyLevel(gPartnerTrainerId); if (gPartnerTrainerId > TRAINER_PARTNER(PARTNER_NONE)) - trainerPal = gTrainerBacksprites[gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerPic].palette.data; + trainerPal = gTrainerBacksprites[gBattlePartners[difficulty][gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)].trainerBackPic].palette.data; else if (IsAiVsAiBattle()) - trainerPal = gTrainerSprites[GetTrainerPicFromId(gPartnerTrainerId)].palette.data; + trainerPal = gTrainerSprites[GetTrainerBackPicFromId(gPartnerTrainerId)].palette.data; else trainerPal = gTrainerSprites[GetFrontierTrainerFrontSpriteId(gPartnerTrainerId)].palette.data; // 2 vs 2 multi battle in Battle Frontier, load front sprite and pal. diff --git a/src/battle_controllers.c b/src/battle_controllers.c index d0e6117433..f2880d31af 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -12,9 +12,11 @@ #include "battle_tv.h" #include "cable_club.h" #include "event_object_movement.h" +#include "item.h" #include "link.h" #include "link_rfu.h" #include "m4a.h" +#include "overworld.h" #include "palette.h" #include "party_menu.h" #include "recorded_battle.h" @@ -25,6 +27,7 @@ #include "util.h" #include "text.h" #include "constants/abilities.h" +#include "constants/item_effects.h" #include "constants/songs.h" #include "pokemon_animation.h" @@ -2890,6 +2893,8 @@ static void LaunchKOAnimation(u32 battlerId, u16 animId, bool32 isFront) u32 species = GetBattlerVisualSpecies(battlerId); u32 spriteId = gBattlerSpriteIds[battlerId]; + gBattleStruct->battlerKOAnimsRunning++; + if (isFront) { LaunchAnimationTaskForFrontSprite(&gSprites[spriteId], animId); @@ -3076,3 +3081,46 @@ void BtlController_HandleSwitchInTryShinyAnim(u32 battler) } } } + +void UpdateFriendshipFromXItem(u32 battler) +{ + struct Pokemon *party = GetBattlerParty(battler); + + u8 friendship; + gBattleResources->bufferA[battler][1] = REQUEST_FRIENDSHIP_BATTLE; + GetBattlerMonData(battler, party, gBattlerPartyIndexes[battler], &friendship); + + u16 heldItem; + gBattleResources->bufferA[battler][1] = REQUEST_HELDITEM_BATTLE; + GetBattlerMonData(battler, party, gBattlerPartyIndexes[battler], (u8*)&heldItem); + + if (friendship < X_ITEM_MAX_FRIENDSHIP) + { + if (GetItemHoldEffect(heldItem) == HOLD_EFFECT_FRIENDSHIP_UP) + friendship += 150 * X_ITEM_FRIENDSHIP_INCREASE / 100; + else + friendship += X_ITEM_FRIENDSHIP_INCREASE; + + u8 pokeball; + gBattleResources->bufferA[battler][1] = REQUEST_POKEBALL_BATTLE; + GetBattlerMonData(battler, party, gBattlerPartyIndexes[battler], &pokeball); + + if (pokeball == BALL_LUXURY) + friendship++; + + u8 metLocation; + gBattleResources->bufferA[battler][1] = REQUEST_MET_LOCATION_BATTLE; + GetBattlerMonData(battler, party, gBattlerPartyIndexes[battler], &metLocation); + + if (metLocation == GetCurrentRegionMapSectionId()) + friendship++; + + if (friendship > MAX_FRIENDSHIP) + friendship = MAX_FRIENDSHIP; + + gBattleMons[battler].friendship = friendship; + gBattleResources->bufferA[battler][3] = friendship; + gBattleResources->bufferA[battler][1] = REQUEST_FRIENDSHIP_BATTLE; + SetBattlerMonData(battler, GetBattlerParty(battler), gBattlerPartyIndexes[battler]); + } +} diff --git a/src/battle_debug.c b/src/battle_debug.c index a991ac341a..149cb4065c 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -105,7 +105,6 @@ enum LIST_ITEM_STAT_STAGES, LIST_ITEM_STATUS1, LIST_ITEM_VOLATILE, - LIST_ITEM_STATUS3, LIST_ITEM_HAZARDS, LIST_ITEM_SIDE_STATUS, LIST_ITEM_AI, @@ -140,30 +139,6 @@ enum LIST_STATUS1_FROSTBITE, }; -enum -{ - LIST_STATUS3_LEECH_SEED_HEALER, - LIST_STATUS3_LEECH_SEEDED, - LIST_STATUS3_ALWAYS_HITS, - LIST_STATUS3_PERISH_SONG, - LIST_STATUS3_MINIMIZED, - LIST_STATUS3_CHARGED_UP, - LIST_STATUS3_ROOTED, - LIST_STATUS3_YAWN, - LIST_STATUS3_IMPRISONED_OTHERS, - LIST_STATUS3_GRUDGE, - LIST_STATUS3_GASTRO_ACID, - LIST_STATUS3_EMBARGO, - LIST_STATUS3_SMACKED_DOWN, - LIST_STATUS3_TELEKINESIS, - LIST_STATUS3_MIRACLE_EYED, - LIST_STATUS3_MAGNET_RISE, - LIST_STATUS3_HEAL_BLOCK, - LIST_STATUS3_AQUA_RING, - LIST_STATUS3_LASER_FOCUS, - LIST_STATUS3_POWER_TRICK, -}; - enum { LIST_SIDE_STICKY_WEB, @@ -346,7 +321,6 @@ static const struct ListMenuItem sMainListItems[] = {COMPOUND_STRING("Stat Stages"), LIST_ITEM_STAT_STAGES}, {COMPOUND_STRING("Status1"), LIST_ITEM_STATUS1}, {COMPOUND_STRING("Volatiles"), LIST_ITEM_VOLATILE}, - {COMPOUND_STRING("Status3"), LIST_ITEM_STATUS3}, {COMPOUND_STRING("Hazards"), LIST_ITEM_HAZARDS}, {COMPOUND_STRING("Side Status"), LIST_ITEM_SIDE_STATUS}, {COMPOUND_STRING("AI"), LIST_ITEM_AI}, @@ -402,30 +376,25 @@ static const struct ListMenuItem sVolatileStatusListItems[] = {COMPOUND_STRING("Salt Cure"), VOLATILE_SALT_CURE}, {COMPOUND_STRING("Syrup Bomb"), VOLATILE_SYRUP_BOMB}, {COMPOUND_STRING("Glaive Rush"), VOLATILE_GLAIVE_RUSH}, -}; - -static const struct ListMenuItem sStatus3ListItems[] = -{ - {COMPOUND_STRING("Leech Seed Healer"), LIST_STATUS3_LEECH_SEED_HEALER}, - {COMPOUND_STRING("Leech Seeded"), LIST_STATUS3_LEECH_SEEDED}, - {COMPOUND_STRING("Always Hits"), LIST_STATUS3_ALWAYS_HITS}, - {COMPOUND_STRING("Perish Song"), LIST_STATUS3_PERISH_SONG}, - {COMPOUND_STRING("Minimized"), LIST_STATUS3_MINIMIZED}, - {COMPOUND_STRING("Charged Up"), LIST_STATUS3_CHARGED_UP}, - {COMPOUND_STRING("Rooted"), LIST_STATUS3_ROOTED}, - {COMPOUND_STRING("Yawn"), LIST_STATUS3_YAWN}, - {COMPOUND_STRING("Imprisoned Others"), LIST_STATUS3_IMPRISONED_OTHERS}, - {COMPOUND_STRING("Grudge"), LIST_STATUS3_GRUDGE}, - {COMPOUND_STRING("Gastro Acid"), LIST_STATUS3_GASTRO_ACID}, - {COMPOUND_STRING("Embargo"), LIST_STATUS3_EMBARGO}, - {COMPOUND_STRING("Smacked Down"), LIST_STATUS3_SMACKED_DOWN}, - {COMPOUND_STRING("Telekinesis"), LIST_STATUS3_TELEKINESIS}, - {COMPOUND_STRING("Miracle Eyed"), LIST_STATUS3_MIRACLE_EYED}, - {COMPOUND_STRING("Magnet Rise"), LIST_STATUS3_MAGNET_RISE}, - {COMPOUND_STRING("Heal Block"), LIST_STATUS3_HEAL_BLOCK}, - {COMPOUND_STRING("Aqua Ring"), LIST_STATUS3_AQUA_RING}, - {COMPOUND_STRING("Laser Focus"), LIST_STATUS3_LASER_FOCUS}, - {COMPOUND_STRING("Power Trick"), LIST_STATUS3_POWER_TRICK}, + {COMPOUND_STRING("Leech Seed"), VOLATILE_LEECH_SEED}, + {COMPOUND_STRING("Lock On"), VOLATILE_LOCK_ON}, + {COMPOUND_STRING("Perish Song"), VOLATILE_PERISH_SONG}, + {COMPOUND_STRING("Minimize"), VOLATILE_MINIMIZE}, + {COMPOUND_STRING("Charge"), VOLATILE_CHARGE}, + {COMPOUND_STRING("Root"), VOLATILE_ROOT}, + {COMPOUND_STRING("Yawn"), VOLATILE_YAWN}, + {COMPOUND_STRING("Imprison"), VOLATILE_IMPRISON}, + {COMPOUND_STRING("Grudge"), VOLATILE_GRUDGE}, + {COMPOUND_STRING("Gastro Acid"), VOLATILE_GASTRO_ACID}, + {COMPOUND_STRING("Embargo"), VOLATILE_EMBARGO}, + {COMPOUND_STRING("Smack Down"), VOLATILE_SMACK_DOWN}, + {COMPOUND_STRING("Telekinesis"), VOLATILE_TELEKINESIS}, + {COMPOUND_STRING("Miracle Eye"), VOLATILE_MIRACLE_EYE}, + {COMPOUND_STRING("Magnet Rise"), VOLATILE_MAGNET_RISE}, + {COMPOUND_STRING("Heal Block"), VOLATILE_HEAL_BLOCK}, + {COMPOUND_STRING("Aqua Ring"), VOLATILE_AQUA_RING}, + {COMPOUND_STRING("Laser Focus"), VOLATILE_LASER_FOCUS}, + {COMPOUND_STRING("Power Trick"), VOLATILE_POWER_TRICK}, }; static const struct ListMenuItem sHazardsListItems[] = @@ -1403,11 +1372,6 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data) listTemplate.items = sVolatileStatusListItems; itemsCount = ARRAY_COUNT(sVolatileStatusListItems); break; - case LIST_ITEM_STATUS3: - listTemplate.items = sStatus3ListItems; - itemsCount = ARRAY_COUNT(sStatus3ListItems); - data->bitfield = sStatus3Bitfield; - break; case LIST_ITEM_AI: listTemplate.items = sAIListItems; itemsCount = ARRAY_COUNT(sAIListItems); @@ -2024,7 +1988,7 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) data->modifyArrows.typeOfVal = VAL_BITFIELD_32; goto CASE_ITEM_STATUS; case LIST_ITEM_VOLATILE: - data->modifyArrows.currValue = GetMonVolatile(data->battlerId, data->currentSecondaryListItemId); + data->modifyArrows.currValue = GetBattlerVolatile(data->battlerId, data->currentSecondaryListItemId); data->modifyArrows.typeOfVal = VAL_VOLATILE; data->modifyArrows.minValue = 0; #define UNPACK_VOLATILE_MAX_SIZE(_enum, _fieldName, _typeMaxValue, ...) case _enum: data->modifyArrows.maxValue = min(MAX_u16, GET_VOLATILE_MAXIMUM(_typeMaxValue)); break; @@ -2045,11 +2009,6 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) } data->modifyArrows.maxDigits = MAX_DIGITS(data->modifyArrows.maxValue); break; - case LIST_ITEM_STATUS3: - data->modifyArrows.modifiedValPtr = &gStatuses3[data->battlerId]; - data->modifyArrows.currValue = GetBitfieldValue(gStatuses3[data->battlerId], data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); - data->modifyArrows.typeOfVal = VAL_BITFIELD_32; - goto CASE_ITEM_STATUS; case LIST_ITEM_AI: data->modifyArrows.modifiedValPtr = &gAiThinkingStruct->aiFlags[data->battlerId]; data->modifyArrows.currValue = GetBitfieldValue(gAiThinkingStruct->aiFlags[data->battlerId], data->bitfield[data->currentSecondaryListItemId].currBit, data->bitfield[data->currentSecondaryListItemId].bitsCount); diff --git a/src/battle_end_turn.c b/src/battle_end_turn.c index 87ed8542a7..224cea1030 100644 --- a/src/battle_end_turn.c +++ b/src/battle_end_turn.c @@ -163,14 +163,14 @@ static bool32 HandleEndTurnVarious(u32 battler) for (i = 0; i < gBattlersCount; i++) { - if (gStatuses3[i] & STATUS3_ALWAYS_HITS) - gStatuses3[i] -= STATUS3_ALWAYS_HITS_TURN(1); + if (gBattleMons[i].volatiles.lockOn > 0) + gBattleMons[i].volatiles.lockOn--; if (gDisableStructs[i].chargeTimer && --gDisableStructs[i].chargeTimer == 0) - gStatuses3[i] &= ~STATUS3_CHARGED_UP; + gBattleMons[i].volatiles.charge = FALSE; - if (gStatuses3[i] & STATUS3_LASER_FOCUS && gDisableStructs[i].laserFocusTimer == gBattleTurnCounter) - gStatuses3[i] &= ~STATUS3_LASER_FOCUS; + if (gBattleMons[i].volatiles.laserFocus && gDisableStructs[i].laserFocusTimer == gBattleTurnCounter) + gBattleMons[i].volatiles.laserFocus = FALSE; gBattleStruct->hpBefore[i] = gBattleMons[i].hp; } @@ -409,7 +409,7 @@ static bool32 HandleEndTurnWish(u32 battler) } gBattleStruct->moveDamage[battler] *= -1; - if (gStatuses3[battler] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battler].volatiles.healBlock) BattleScriptExecute(BattleScript_WishButHealBlocked); else if (gBattleMons[battler].hp == gBattleMons[battler].maxHP) BattleScriptExecute(BattleScript_WishButFullHp); @@ -486,7 +486,7 @@ static bool32 HandleEndTurnFirstEventBlock(u32 battler) if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerAlive(battler) && !IsBattlerAtMaxHp(battler) - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) + && !gBattleMons[battler].volatiles.healBlock && !IsSemiInvulnerable(battler, CHECK_ALL) && IsBattlerGrounded(battler)) { @@ -542,8 +542,8 @@ static bool32 HandleEndTurnAquaRing(u32 battler) gBattleStruct->turnEffectsBattlerId++; - if (gStatuses3[battler] & STATUS3_AQUA_RING - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battler].volatiles.aquaRing + && !gBattleMons[battler].volatiles.healBlock && !IsBattlerAtMaxHp(battler) && IsBattlerAlive(battler)) { @@ -561,8 +561,8 @@ static bool32 HandleEndTurnIngrain(u32 battler) gBattleStruct->turnEffectsBattlerId++; - if (gStatuses3[battler] & STATUS3_ROOTED - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battler].volatiles.root + && !gBattleMons[battler].volatiles.healBlock && !IsBattlerAtMaxHp(battler) && IsBattlerAlive(battler)) { @@ -580,24 +580,24 @@ static bool32 HandleEndTurnLeechSeed(u32 battler) gBattleStruct->turnEffectsBattlerId++; - if (gStatuses3[battler] & STATUS3_LEECHSEED - && IsBattlerAlive(gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER) + if (gBattleMons[battler].volatiles.leechSeed + && IsBattlerAlive(gBattleMons[battler].volatiles.leechSeed - 1) && IsBattlerAlive(battler) && !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) { - gBattlerTarget = gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER; // Notice gBattlerTarget is actually the HP receiver. + gBattlerTarget = gBattleMons[battler].volatiles.leechSeed - 1; // leech seed receiver gBattleScripting.animArg1 = gBattlerTarget; gBattleScripting.animArg2 = gBattlerAttacker; gBattleStruct->moveDamage[gBattlerAttacker] = max(1, GetNonDynamaxMaxHP(battler) / 8); gBattleStruct->moveDamage[gBattlerTarget] = GetDrainedBigRootHp(gBattlerTarget, gBattleStruct->moveDamage[gBattlerAttacker]); - gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE; + gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE; if (GetBattlerAbility(battler) == ABILITY_LIQUID_OOZE) { gBattleStruct->moveDamage[gBattlerTarget] = gBattleStruct->moveDamage[gBattlerTarget] * -1; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_OOZE; BattleScriptExecute(BattleScript_LeechSeedTurnDrainLiquidOoze); } - else if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) + else if (gBattleMons[gBattlerTarget].volatiles.healBlock) { BattleScriptExecute(BattleScript_LeechSeedTurnDrainHealBlock); } @@ -626,7 +626,7 @@ static bool32 HandleEndTurnPoison(u32 battler) { if (ability == ABILITY_POISON_HEAL) { - if (!IsBattlerAtMaxHp(battler) && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + if (!IsBattlerAtMaxHp(battler) && !gBattleMons[battler].volatiles.healBlock) { gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 8; if (gBattleStruct->moveDamage[battler] == 0) @@ -946,9 +946,9 @@ static bool32 HandleEndTurnMagnetRise(u32 battler) gBattleStruct->turnEffectsBattlerId++; - if (gStatuses3[battler] & STATUS3_MAGNET_RISE && gDisableStructs[battler].magnetRiseTimer == gBattleTurnCounter) + if (gBattleMons[battler].volatiles.magnetRise && gDisableStructs[battler].magnetRiseTimer == gBattleTurnCounter) { - gStatuses3[battler] &= ~STATUS3_MAGNET_RISE; + gBattleMons[battler].volatiles.magnetRise = FALSE; BattleScriptExecute(BattleScript_BufferEndTurn); PREPARE_STRING_BUFFER(gBattleTextBuff1, STRINGID_ELECTROMAGNETISM); effect = TRUE; @@ -963,9 +963,9 @@ static bool32 HandleEndTurnTelekinesis(u32 battler) gBattleStruct->turnEffectsBattlerId++; - if (gStatuses3[battler] & STATUS3_TELEKINESIS && gDisableStructs[battler].telekinesisTimer == gBattleTurnCounter) + if (gBattleMons[battler].volatiles.telekinesis && gDisableStructs[battler].telekinesisTimer == gBattleTurnCounter) { - gStatuses3[battler] &= ~STATUS3_TELEKINESIS; + gBattleMons[battler].volatiles.telekinesis = FALSE; BattleScriptExecute(BattleScript_TelekinesisEndTurn); effect = TRUE; } @@ -979,9 +979,9 @@ static bool32 HandleEndTurnHealBlock(u32 battler) gBattleStruct->turnEffectsBattlerId++; - if (gStatuses3[battler] & STATUS3_HEAL_BLOCK && gDisableStructs[battler].healBlockTimer == gBattleTurnCounter) + if (gBattleMons[battler].volatiles.healBlock && gDisableStructs[battler].healBlockTimer == gBattleTurnCounter) { - gStatuses3[battler] &= ~STATUS3_HEAL_BLOCK; + gBattleMons[battler].volatiles.healBlock = FALSE; BattleScriptExecute(BattleScript_BufferEndTurn); PREPARE_MOVE_BUFFER(gBattleTextBuff1, MOVE_HEAL_BLOCK); effect = TRUE; @@ -996,9 +996,9 @@ static bool32 HandleEndTurnEmbargo(u32 battler) gBattleStruct->turnEffectsBattlerId++; - if (gStatuses3[battler] & STATUS3_EMBARGO && gDisableStructs[battler].embargoTimer == gBattleTurnCounter) + if (gBattleMons[battler].volatiles.embargo && gDisableStructs[battler].embargoTimer == gBattleTurnCounter) { - gStatuses3[battler] &= ~STATUS3_EMBARGO; + gBattleMons[battler].volatiles.embargo = FALSE; BattleScriptExecute(BattleScript_EmbargoEndTurn); effect = TRUE; } @@ -1014,10 +1014,11 @@ static bool32 HandleEndTurnYawn(u32 battler) gBattleStruct->turnEffectsBattlerId++; - if (gStatuses3[battler] & STATUS3_YAWN) + if (gBattleMons[battler].volatiles.yawn > 0) { - gStatuses3[battler] -= STATUS3_YAWN_TURN(1); - if (!(gStatuses3[battler] & STATUS3_YAWN) && !(gBattleMons[battler].status1 & STATUS1_ANY) + gBattleMons[battler].volatiles.yawn--; + if (!gBattleMons[battler].volatiles.yawn + && !(gBattleMons[battler].status1 & STATUS1_ANY) && ability != ABILITY_VITAL_SPIRIT && ability != ABILITY_INSOMNIA && !UproarWakeUpCheck(battler) @@ -1064,12 +1065,12 @@ static bool32 HandleEndTurnPerishSong(u32 battler) gBattleStruct->turnEffectsBattlerId++; - if (IsBattlerAlive(battler) && gStatuses3[battler] & STATUS3_PERISH_SONG) + if (IsBattlerAlive(battler) && gBattleMons[battler].volatiles.perishSong) { PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff1, 1, gDisableStructs[battler].perishSongTimer); if (gDisableStructs[battler].perishSongTimer == 0) { - gStatuses3[battler] &= ~STATUS3_PERISH_SONG; + gBattleMons[battler].volatiles.perishSong = FALSE; gBattleStruct->moveDamage[battler] = gBattleMons[battler].hp; BattleScriptExecute(BattleScript_PerishSongTakesLife); } diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 8689af1fe0..bddf1b6d19 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -464,8 +464,10 @@ void InitAndLaunchChosenStatusAnimation(u32 battler, bool32 isVolatile, u32 stat gBattleSpritesDataPtr->healthBoxesData[battler].statusAnimActive = 1; if (!isVolatile) { - if (status == STATUS1_FREEZE || status == STATUS1_FROSTBITE) + if (status == STATUS1_FREEZE) LaunchStatusAnimation(battler, B_ANIM_STATUS_FRZ); + else if (status == STATUS1_FROSTBITE) + LaunchStatusAnimation(battler, B_ANIM_STATUS_FRB); else if (status == STATUS1_POISON || status & STATUS1_TOXIC_POISON) LaunchStatusAnimation(battler, B_ANIM_STATUS_PSN); else if (status == STATUS1_BURN) @@ -996,13 +998,6 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); } - // Terastallization's tint - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) - { - BlendPalette(paletteOffset, 16, 8, GetTeraTypeRGB(GetBattlerTeraType(battlerAtk))); - CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16)); - } - gSprites[gBattlerSpriteIds[battlerAtk]].y = GetBattlerSpriteDefault_Y(battlerAtk); StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], 0); } diff --git a/src/battle_main.c b/src/battle_main.c index ac60bab82a..3c3b363e86 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -193,7 +193,6 @@ EWRAM_DATA u32 gHitMarker = 0; EWRAM_DATA u8 gBideTarget[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u32 gSideStatuses[NUM_BATTLE_SIDES] = {0}; EWRAM_DATA struct SideTimer gSideTimers[NUM_BATTLE_SIDES] = {0}; -EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u16 gPauseCounterBattle = 0; EWRAM_DATA u16 gPaydayMoney = 0; @@ -3025,7 +3024,6 @@ static void BattleStartClearSetData(void) for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - gStatuses3[i] = 0; gDisableStructs[i].isFirstTurn = 2; gLastMoves[i] = MOVE_NONE; gLastLandedMoves[i] = MOVE_NONE; @@ -3148,9 +3146,9 @@ void SwitchInClearSetData(u32 battler, struct Volatiles *volatilesCopy) { if (gBattleMons[i].volatiles.escapePrevention && gDisableStructs[i].battlerPreventingEscape == battler) gBattleMons[i].volatiles.escapePrevention = FALSE; - if ((gStatuses3[i] & STATUS3_ALWAYS_HITS) && gDisableStructs[i].battlerWithSureHit == battler) + if (gBattleMons[i].volatiles.lockOn && gDisableStructs[i].battlerWithSureHit == battler) { - gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; + gBattleMons[i].volatiles.lockOn = 0; gDisableStructs[i].battlerWithSureHit = 0; } } @@ -3168,26 +3166,19 @@ void SwitchInClearSetData(u32 battler, struct Volatiles *volatilesCopy) * gBattleMons[battler].volatiles.escapePrevention = volatilesCopy->escapePrevention; * ...etc */ - gStatuses3[battler] &= (STATUS3_LEECHSEED_BATTLER | STATUS3_LEECHSEED | STATUS3_ALWAYS_HITS | STATUS3_PERISH_SONG | STATUS3_ROOTED - | STATUS3_GASTRO_ACID | STATUS3_EMBARGO | STATUS3_TELEKINESIS | STATUS3_MAGNET_RISE | STATUS3_HEAL_BLOCK - | STATUS3_AQUA_RING | STATUS3_POWER_TRICK); + for (i = 0; i < gBattlersCount; i++) { if (!IsBattlerAlly(battler, i) - && (gStatuses3[i] & STATUS3_ALWAYS_HITS) != 0 + && gBattleMons[i].volatiles.lockOn != 0 && (gDisableStructs[i].battlerWithSureHit == battler)) { - gStatuses3[i] &= ~STATUS3_ALWAYS_HITS; - gStatuses3[i] |= STATUS3_ALWAYS_HITS_TURN(2); + gBattleMons[i].volatiles.lockOn = 0; } } - if (gStatuses3[battler] & STATUS3_POWER_TRICK) + if (gBattleMons[battler].volatiles.powerTrick) SWAP(gBattleMons[battler].attack, gBattleMons[battler].defense, i); } - else - { - gStatuses3[battler] = 0; - } for (i = 0; i < gBattlersCount; i++) { @@ -3197,6 +3188,8 @@ void SwitchInClearSetData(u32 battler, struct Volatiles *volatilesCopy) gBattleMons[i].volatiles.wrapped = FALSE; if (gBattleMons[i].volatiles.syrupBomb && gBattleStruct->stickySyrupdBy[i] == battler) gBattleMons[i].volatiles.syrupBomb = FALSE; + if (gDisableStructs[i].octolock && gDisableStructs[i].octolockedBy == battler) + gDisableStructs[i].octolock = FALSE; } gActionSelectionCursor[battler] = 0; @@ -3301,8 +3294,11 @@ const u8* FaintClearSetData(u32 battler) for (i = 0; i < NUM_BATTLE_STATS; i++) gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE; + bool32 keepGastroAcid = FALSE; + if (gBattleMons[battler].volatiles.gastroAcid) + keepGastroAcid = TRUE; memset(&gBattleMons[battler].volatiles, 0, sizeof(struct Volatiles)); - gStatuses3[battler] &= STATUS3_GASTRO_ACID; // Edge case: Keep Gastro Acid if pokemon's ability can have effect after fainting, for example Innards Out. + gBattleMons[battler].volatiles.gastroAcid = keepGastroAcid; // Edge case: Keep Gastro Acid if pokemon's ability can have effect after fainting, for example Innards Out. for (i = 0; i < gBattlersCount; i++) { @@ -3314,6 +3310,8 @@ const u8* FaintClearSetData(u32 battler) gBattleMons[i].volatiles.wrapped = FALSE; if (gBattleMons[i].volatiles.syrupBomb && gBattleStruct->stickySyrupdBy[i] == battler) gBattleMons[i].volatiles.syrupBomb = FALSE; + if (gDisableStructs[i].octolock && gDisableStructs[i].octolockedBy == battler) + gDisableStructs[i].octolock = FALSE; } gActionSelectionCursor[battler] = 0; @@ -3987,7 +3985,7 @@ void BattleTurnPassed(void) gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; gHitMarker &= ~HITMARKER_UNABLE_TO_USE_MOVE; gHitMarker &= ~HITMARKER_PLAYER_FAINTED; - gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; + gHitMarker &= ~HITMARKER_PASSIVE_HP_UPDATE; gBattleScripting.animTurn = 0; gBattleScripting.animTargetsHit = 0; gBattleScripting.moveendState = 0; @@ -5373,7 +5371,7 @@ static void RunTurnActionsFunctions(void) if (gCurrentTurnActionNumber >= gBattlersCount) // everyone did their actions, turn finished { - gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; + gHitMarker &= ~HITMARKER_PASSIVE_HP_UPDATE; gBattleMainFunc = sEndTurnFuncsTable[gBattleOutcome & 0x7F]; } else diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8bd6d3ab6a..c08324b6e8 100755 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -335,6 +335,7 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u static void ResetValuesForCalledMove(void); static void TryRestoreDamageAfterCheekPouch(u32 battler); static bool32 TrySymbiosis(u32 battler, u32 itemId, bool32 moveEnd); +static bool32 CanAbilityShieldActivateForBattler(u32 battler); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -369,7 +370,7 @@ static void Cmd_jumpifvolatile(void); static void Cmd_jumpifability(void); static void Cmd_jumpifsideaffecting(void); static void Cmd_jumpifstat(void); -static void Cmd_jumpifstatus3condition(void); +static void Cmd_unused_0x21(void); static void Cmd_jumpbasedontype(void); static void Cmd_getexp(void); static void Cmd_checkteamslost(void); @@ -467,7 +468,7 @@ static void Cmd_setseeded(void); static void Cmd_manipulatedamage(void); static void Cmd_trysetrest(void); static void Cmd_jumpifnotfirstturn(void); -static void Cmd_setmiracleeye(void); +static void Cmd_unused_0x83(void); static void Cmd_jumpifuproarwakes(void); static void Cmd_stockpile(void); static void Cmd_stockpiletobasedamage(void); @@ -535,7 +536,7 @@ static void Cmd_trysetfutureattack(void); static void Cmd_trydobeatup(void); static void Cmd_setsemiinvulnerablebit(void); static void Cmd_tryfiretwoturnmovenowbyeffect(void); -static void Cmd_setminimize(void); +static void Cmd_unused_0xC7(void); static void Cmd_unused_c8(void); static void Cmd_trymemento(void); static void Cmd_setforcedtarget(void); @@ -557,7 +558,7 @@ static void Cmd_setroom(void); static void Cmd_tryswapabilities(void); static void Cmd_tryimprison(void); static void Cmd_setstealthrock(void); -static void Cmd_setuserstatus3(void); +static void Cmd_trysetvolatile(void); static void Cmd_assistattackselect(void); static void Cmd_trysetmagiccoat(void); static void Cmd_trysetsnatch(void); @@ -628,7 +629,7 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_jumpifability, //0x1E Cmd_jumpifsideaffecting, //0x1F Cmd_jumpifstat, //0x20 - Cmd_jumpifstatus3condition, //0x21 + Cmd_unused_0x21, //0x21 Cmd_jumpbasedontype, //0x22 Cmd_getexp, //0x23 Cmd_checkteamslost, //0x24 @@ -726,7 +727,7 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_manipulatedamage, //0x80 Cmd_trysetrest, //0x81 Cmd_jumpifnotfirstturn, //0x82 - Cmd_setmiracleeye, //0x83 + Cmd_unused_0x83, //0x83 Cmd_jumpifuproarwakes, //0x84 Cmd_stockpile, //0x85 Cmd_stockpiletobasedamage, //0x86 @@ -794,7 +795,7 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_trydobeatup, //0xC4 Cmd_setsemiinvulnerablebit, //0xC5 Cmd_tryfiretwoturnmovenowbyeffect, //0xC6 - Cmd_setminimize, //0xC7 + Cmd_unused_0xC7, //0xC7 Cmd_unused_c8, //0xC8 Cmd_trymemento, //0xC9 Cmd_setforcedtarget, //0xCA @@ -816,7 +817,7 @@ void (*const gBattleScriptingCommandsTable[])(void) = Cmd_tryswapabilities, //0xDA Cmd_tryimprison, //0xDB Cmd_setstealthrock, //0xDC - Cmd_setuserstatus3, //0xDD + Cmd_trysetvolatile, //0xDD Cmd_assistattackselect, //0xDE Cmd_trysetmagiccoat, //0xDF Cmd_trysetsnatch, //0xE0 @@ -1364,7 +1365,7 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u if (move == NO_ACC_CALC_CHECK_LOCK_ON) { - if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) + if (gBattleMons[gBattlerTarget].volatiles.lockOn && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) gBattlescriptCurrInstr = nextInstr; else if (IsSemiInvulnerable(gBattlerTarget, CHECK_ALL)) gBattlescriptCurrInstr = failInstr; @@ -1621,7 +1622,7 @@ s32 CalcCritChanceStage(u32 battlerAtk, u32 battlerDef, u32 move, bool32 recordA { critChance = CRITICAL_HIT_BLOCKED; } - else if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS + else if (gBattleMons[battlerAtk].volatiles.laserFocus || MoveAlwaysCrits(move) || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)) { @@ -1704,7 +1705,7 @@ s32 CalcCritChanceStageGen1(u32 battlerAtk, u32 battlerDef, u32 move, bool32 rec } // Guaranteed crits - else if (gStatuses3[battlerAtk] & STATUS3_LASER_FOCUS + else if (gBattleMons[battlerAtk].volatiles.laserFocus || MoveAlwaysCrits(move) || (abilityAtk == ABILITY_MERCILESS && gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY)) { @@ -1871,7 +1872,7 @@ static void Cmd_adjustdamage(void) u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); bool32 calcSpreadMoveDamage = IsSpreadMove(moveTarget) && !IsBattleMoveStatus(gCurrentMove); - bool32 enduredHit = FALSE; + u32 enduredHit = 0; for (battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) { @@ -1917,30 +1918,30 @@ static void Cmd_adjustdamage(void) if (moveEffect == EFFECT_FALSE_SWIPE) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; } else if (gProtectStructs[battlerDef].endured) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_FOE_ENDURED; } else if (holdEffect == HOLD_EFFECT_FOCUS_BAND && rand < param) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; RecordItemEffectBattle(battlerDef, holdEffect); gLastUsedItem = gBattleMons[battlerDef].item; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_FOE_HUNG_ON; } else if (B_STURDY >= GEN_5 && GetBattlerAbility(battlerDef) == ABILITY_STURDY && IsBattlerAtMaxHp(battlerDef)) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; RecordAbilityBattle(battlerDef, ABILITY_STURDY); gLastUsedAbility = ABILITY_STURDY; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_STURDIED; } else if (holdEffect == HOLD_EFFECT_FOCUS_SASH && IsBattlerAtMaxHp(battlerDef)) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; RecordItemEffectBattle(battlerDef, holdEffect); gLastUsedItem = gBattleMons[battlerDef].item; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_FOE_HUNG_ON; @@ -1951,20 +1952,18 @@ static void Cmd_adjustdamage(void) || (affectionScore == AFFECTION_FOUR_HEARTS && rand < 15) || (affectionScore == AFFECTION_THREE_HEARTS && rand < 10)) { - enduredHit = TRUE; + enduredHit |= 1u << battlerDef; gBattleStruct->moveResultFlags[battlerDef] |= MOVE_RESULT_FOE_ENDURED_AFFECTION; } } // Handle reducing the dmg to 1 hp. - if (enduredHit) + if (enduredHit & 1u << battlerDef) { gBattleStruct->moveDamage[battlerDef] = gBattleMons[battlerDef].hp - 1; gSpecialStatuses[battlerDef].enduredDamage = TRUE; - } - - if (gSpecialStatuses[battlerDef].enduredDamage) gProtectStructs[battlerDef].assuranceDoubled = TRUE; + } } if (calcSpreadMoveDamage) @@ -2244,14 +2243,14 @@ static void Cmd_waitanimation(void) { CMD_ARGS(); - if (gBattleControllerExecFlags == 0) + if (gBattleControllerExecFlags == 0 && gBattleStruct->battlerKOAnimsRunning == 0) gBattlescriptCurrInstr = cmd->nextInstr; } static void DoublesHPBarReduction(void) { if (gBattleStruct->doneDoublesSpreadHit - || gHitMarker & (HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE)) + || gHitMarker & (HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_HP_UPDATE)) return; for (u32 battlerDef = 0; battlerDef < gBattlersCount; battlerDef++) @@ -2283,7 +2282,7 @@ static void Cmd_healthbarupdate(void) if (gBattleControllerExecFlags) return; - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_HP_UPDATE)) { if (DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && gDisableStructs[battler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { @@ -2321,13 +2320,14 @@ static void Cmd_healthbarupdate(void) static void Cmd_datahpupdate(void) { CMD_ARGS(u8 battler); + bool32 isPassiveHpUpdate = gHitMarker & HITMARKER_PASSIVE_HP_UPDATE; if (gBattleControllerExecFlags) return; u32 battler = GetBattlerForBattleScript(cmd->battler); - if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) + if (!(gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_HP_UPDATE)) { if (DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && gDisableStructs[battler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { @@ -2405,7 +2405,7 @@ static void Cmd_datahpupdate(void) // Note: While physicalDmg/specialDmg below are only distinguished between for Counter/Mirror Coat, they are // used in combination as general damage trackers for other purposes. specialDmg is additionally used // to help determine if a fire move should defrost the target. - if (IsBattleMovePhysical(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE) && effect != EFFECT_PAIN_SPLIT) + if (IsBattleMovePhysical(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_HP_UPDATE) && effect != EFFECT_PAIN_SPLIT) { gProtectStructs[battler].physicalDmg = gBattleStruct->moveDamage[battler]; gSpecialStatuses[battler].physicalDmg = gBattleStruct->moveDamage[battler]; @@ -2415,7 +2415,7 @@ static void Cmd_datahpupdate(void) gProtectStructs[battler].physicalBattlerId = gBattlerTarget; gProtectStructs[battler].assuranceDoubled = TRUE; } - else if (!IsBattleMovePhysical(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_DAMAGE) && effect != EFFECT_PAIN_SPLIT) + else if (!IsBattleMovePhysical(gCurrentMove) && !(gHitMarker & HITMARKER_PASSIVE_HP_UPDATE) && effect != EFFECT_PAIN_SPLIT) { // Record special damage/attacker for Mirror Coat gProtectStructs[battler].specialDmg = gBattleStruct->moveDamage[battler]; @@ -2427,20 +2427,22 @@ static void Cmd_datahpupdate(void) gProtectStructs[battler].assuranceDoubled = TRUE; } } - gHitMarker &= ~HITMARKER_PASSIVE_DAMAGE; + gHitMarker &= ~HITMARKER_PASSIVE_HP_UPDATE; // Send updated HP BtlController_EmitSetMonData(battler, B_COMM_TO_CONTROLLER, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[battler].hp), &gBattleMons[battler].hp); MarkBattlerForControllerExec(battler); } if (gBattlerAttacker != gBattlerTarget + && !isPassiveHpUpdate && GetMoveCategory(gCurrentMove) != DAMAGE_CATEGORY_STATUS && IsBattlerTurnDamaged(gBattlerTarget)) GetBattlerPartyState(gBattlerTarget)->timesGotHit++; if (GetMoveEffect(gCurrentMove) == EFFECT_KNOCK_OFF + && !isPassiveHpUpdate && IsBattlerTurnDamaged(gBattlerTarget) - && gBattleMons[gBattlerTarget].item != 0 + && gBattleMons[gBattlerTarget].item != ITEM_NONE && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerTarget].item) && !NoAliveMonsForEitherParty()) @@ -3565,9 +3567,9 @@ void SetMoveEffect(u32 battler, u32 effectBattler, bool32 primary, bool32 certai BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_AromaVeilProtectsRet; } - else if (!(gStatuses3[gEffectBattler] & STATUS3_HEAL_BLOCK)) + else if (!gBattleMons[gEffectBattler].volatiles.healBlock) { - gStatuses3[gEffectBattler] |= STATUS3_HEAL_BLOCK; + gBattleMons[gEffectBattler].volatiles.healBlock = TRUE; gDisableStructs[gEffectBattler].healBlockTimer = gBattleTurnCounter + 2; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_EffectPsychicNoise; @@ -3637,10 +3639,9 @@ void SetMoveEffect(u32 battler, u32 effectBattler, bool32 primary, bool32 certai gBattlescriptCurrInstr = BattleScript_MoveEffectHaze; break; case MOVE_EFFECT_LEECH_SEED: - if (!IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS) && !(gStatuses3[gBattlerTarget] & STATUS3_LEECHSEED)) + if (!IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS) && !gBattleMons[gBattlerTarget].volatiles.leechSeed) { - gStatuses3[gBattlerTarget] |= gBattlerAttacker; - gStatuses3[gBattlerTarget] |= STATUS3_LEECHSEED; + gBattleMons[gBattlerTarget].volatiles.leechSeed = LEECHSEEDED_BY(gBattlerAttacker); BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_MoveEffectLeechSeed; } @@ -3944,11 +3945,11 @@ void SetMoveEffect(u32 battler, u32 effectBattler, bool32 primary, bool32 certai } case MOVE_EFFECT_YAWN_FOE: { - if (!(gStatuses3[gBattlerTarget] & STATUS3_YAWN) + if (gBattleMons[gBattlerTarget].volatiles.yawn == 0 && CanBeSlept(gBattlerTarget, gBattlerTarget, GetBattlerAbility(gBattlerTarget), BLOCKED_BY_SLEEP_CLAUSE) && RandomPercentage(RNG_G_MAX_SNOOZE, 50)) { - gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); + gBattleMons[gBattlerTarget].volatiles.yawn = 2; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_EffectYawnSuccess; } @@ -4248,7 +4249,7 @@ static void Cmd_tryfaintmon(void) gBattleStruct->moveDamage[destinyBondBattler] = gBattleMons[destinyBondBattler].hp; gBattlescriptCurrInstr = BattleScript_DestinyBondTakesLife; } - if ((gStatuses3[gBattlerTarget] & STATUS3_GRUDGE) + if (gBattleMons[gBattlerTarget].volatiles.grudge && !(gHitMarker & HITMARKER_GRUDGE) && !IsBattlerAlly(gBattlerAttacker, gBattlerTarget) && IsBattlerAlive(gBattlerAttacker) @@ -4340,7 +4341,7 @@ static void Cmd_jumpifvolatile(void) u8 battler = GetBattlerForBattleScript(cmd->battler); const u8 *jumpInstr = cmd->jumpInstr; - if (GetMonVolatile(battler, cmd->_volatile) && IsBattlerAlive(battler)) + if (GetBattlerVolatile(battler, cmd->_volatile) != 0 && IsBattlerAlive(battler)) gBattlescriptCurrInstr = jumpInstr; else gBattlescriptCurrInstr = cmd->nextInstr; @@ -4422,25 +4423,8 @@ static void Cmd_jumpifstat(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_jumpifstatus3condition(void) +static void Cmd_unused_0x21(void) { - CMD_ARGS(u8 battler, u32 flags, bool8 jumpIfTrue, const u8 *jumpInstr); - - u32 battler = GetBattlerForBattleScript(cmd->battler); - if (cmd->jumpIfTrue) - { - if ((gStatuses3[battler] & cmd->flags) != 0) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->jumpInstr; - } - else - { - if ((gStatuses3[battler] & cmd->flags) != 0) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - } } static void Cmd_jumpbasedontype(void) @@ -4772,7 +4756,7 @@ static void Cmd_getexp(void) if (battler != 0xFF) { CopyMonLevelAndBaseStatsToBattleMon(battler, &gPlayerParty[*expMonId]); - if (gStatuses3[battler] & STATUS3_POWER_TRICK) + if (gBattleMons[battler].volatiles.powerTrick) SWAP(gBattleMons[battler].attack, gBattleMons[battler].defense, temp); } @@ -5540,28 +5524,6 @@ static inline bool32 IsProtectivePadsProtected(u32 battler, enum ItemHoldEffect return TRUE; } -static inline bool32 IsProtectEffectAffected(u32 battler, u32 move) -{ - enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - if (IsProtectivePadsProtected(battler, holdEffect)) - return TRUE; - - if (holdEffect == HOLD_EFFECT_CLEAR_AMULET) - { - RecordItemEffectBattle(battler, holdEffect); - return TRUE; - } - - u32 ability = GetBattlerAbility(gBattlerAttacker); - if (CanAbilityPreventStatLoss(ability)) - { - RecordAbilityBattle(battler, ability); - return TRUE; - } - - return FALSE; -} - static inline bool32 CanEjectButtonTrigger(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects moveEffect) { if (GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_EJECT_BUTTON @@ -5717,7 +5679,9 @@ static bool32 HandleMoveEndMoveBlock(u32 moveEffect) switch (moveEffect) { case EFFECT_KNOCK_OFF: - if (gBattleStruct->battlerState[gBattlerTarget].itemCanBeKnockedOff && IsBattlerAlive(gBattlerAttacker)) + if (gBattleStruct->battlerState[gBattlerTarget].itemCanBeKnockedOff + && gBattleMons[gBattlerTarget].item != ITEM_NONE + && IsBattlerAlive(gBattlerAttacker)) { u32 side = GetBattlerSide(gBattlerTarget); gLastUsedItem = gBattleMons[gBattlerTarget].item; @@ -5741,6 +5705,7 @@ static bool32 HandleMoveEndMoveBlock(u32 moveEffect) BattleScriptCall(BattleScript_KnockedOff); effect = TRUE; } + gBattleStruct->battlerState[gBattlerTarget].itemCanBeKnockedOff = FALSE; break; case EFFECT_STEAL_ITEM: if (!CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item) @@ -5786,7 +5751,7 @@ static bool32 HandleMoveEndMoveBlock(u32 moveEffect) { BattleScriptCall(BattleScript_AbilityPreventsPhasingOutRet); } - else if (gStatuses3[gBattlerTarget] & STATUS3_ROOTED) + else if (gBattleMons[gBattlerTarget].volatiles.root) { BattleScriptCall(BattleScript_PrintMonIsRootedRet); } @@ -5808,9 +5773,10 @@ static bool32 HandleMoveEndMoveBlock(u32 moveEffect) && IsBattlerAlive(gBattlerTarget) && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) { + gBattleMons[gBattlerTarget].volatiles.smackDown = TRUE; + gBattleMons[gBattlerTarget].volatiles.telekinesis = FALSE; + gBattleMons[gBattlerTarget].volatiles.magnetRise = FALSE; gBattleMons[gBattlerTarget].volatiles.semiInvulnerable = STATE_NONE; - gStatuses3[gBattlerTarget] |= STATUS3_SMACKED_DOWN; - gStatuses3[gBattlerTarget] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS); BattleScriptCall(BattleScript_MoveEffectSmackDown); effect = TRUE; } @@ -6067,14 +6033,14 @@ static void Cmd_moveend(void) { case EFFECT_ABSORB: case EFFECT_DREAM_EATER: - if (!(gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK) + if (!gBattleMons[gBattlerAttacker].volatiles.healBlock && gBattleStruct->moveDamage[gBattlerTarget] > 0 && IsBattlerAlive(gBattlerAttacker)) { gBattleStruct->moveDamage[gBattlerAttacker] = max(1, (gBattleStruct->moveDamage[gBattlerTarget] * GetMoveAbsorbPercentage(gCurrentMove) / 100)); gBattleStruct->moveDamage[gBattlerAttacker] = GetDrainedBigRootHp(gBattlerAttacker, gBattleStruct->moveDamage[gBattlerAttacker]); - gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE; + gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE | HITMARKER_PASSIVE_HP_UPDATE; effect = TRUE; if ((moveEffect == EFFECT_DREAM_EATER && GetGenConfig(GEN_DREAM_EATER_LIQUID_OOZE) < GEN_5) || GetBattlerAbility(gBattlerTarget) != ABILITY_LIQUID_OOZE) @@ -6085,7 +6051,6 @@ static void Cmd_moveend(void) else { gBattleStruct->moveDamage[gBattlerAttacker] *= -1; - gHitMarker |= HITMARKER_PASSIVE_DAMAGE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_ABSORB_OOZE; BattleScriptCall(BattleScript_EffectAbsorbLiquidOoze); } @@ -6927,7 +6892,7 @@ static void Cmd_moveend(void) if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) SetActiveGimmick(gBattlerAttacker, GIMMICK_NONE); if (B_CHARGE >= GEN_9 && moveType == TYPE_ELECTRIC && (IsBattlerTurnDamaged(gBattlerTarget) || gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT)) - gStatuses3[gBattlerAttacker] &= ~(STATUS3_CHARGED_UP); + gBattleMons[gBattlerAttacker].volatiles.charge = FALSE; // check if Stellar type boost should be used up if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && GetBattlerTeraType(gBattlerAttacker) == TYPE_STELLAR @@ -7040,13 +7005,13 @@ static void Cmd_sethealblock(void) { CMD_ARGS(const u8 *failInstr); - if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) + if (gBattleMons[gBattlerTarget].volatiles.healBlock) { gBattlescriptCurrInstr = cmd->failInstr; } else { - gStatuses3[gBattlerTarget] |= STATUS3_HEAL_BLOCK; + gBattleMons[gBattlerTarget].volatiles.healBlock = TRUE; gDisableStructs[gBattlerTarget].healBlockTimer = gBattleTurnCounter + 5; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -8583,7 +8548,7 @@ static bool32 TryCheekPouch(u32 battler, u32 itemId) { if (GetItemPocket(itemId) == POCKET_BERRIES && GetBattlerAbility(battler) == ABILITY_CHEEK_POUCH - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) + && !gBattleMons[battler].volatiles.healBlock && GetBattlerPartyState(battler)->ateBerry && !IsBattlerAtMaxHp(battler)) { @@ -9769,7 +9734,7 @@ static void Cmd_setseeded(void) { CMD_ARGS(); - if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT || gStatuses3[gBattlerTarget] & STATUS3_LEECHSEED) + if (gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_NO_EFFECT || gBattleMons[gBattlerTarget].volatiles.leechSeed) { gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_MISS; @@ -9781,8 +9746,7 @@ static void Cmd_setseeded(void) } else { - gStatuses3[gBattlerTarget] |= gBattlerAttacker; - gStatuses3[gBattlerTarget] |= STATUS3_LEECHSEED; + gBattleMons[gBattlerTarget].volatiles.leechSeed = LEECHSEEDED_BY(gBattlerAttacker); gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_SET; } @@ -9864,19 +9828,8 @@ static void Cmd_jumpifnotfirstturn(void) gBattlescriptCurrInstr = jumpInstr; } -static void Cmd_setmiracleeye(void) +static void Cmd_unused_0x83(void) { - CMD_ARGS(const u8 *failInstr); - - if (!(gStatuses3[gBattlerTarget] & STATUS3_MIRACLE_EYED)) - { - gStatuses3[gBattlerTarget] |= STATUS3_MIRACLE_EYED; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } } bool8 UproarWakeUpCheck(u8 battler) @@ -10953,7 +10906,7 @@ static void Cmd_tryKO(void) else { if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level - && ((gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS + && ((gBattleMons[gBattlerTarget].volatiles.lockOn && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) || IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_NO_GUARD) || IsAbilityAndRecord(gBattlerTarget, targetAbility, ABILITY_NO_GUARD))) @@ -11358,13 +11311,12 @@ static void Cmd_counterdamagecalculator(void) && sideAttacker != sideTarget && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp) { - gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].physicalDmg * 2; - if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) gBattlerTarget = gSideTimers[sideTarget].followmeTarget; else gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; + gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].physicalDmg * 2; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -11385,13 +11337,13 @@ static void Cmd_mirrorcoatdamagecalculator(void) && sideAttacker != sideTarget && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp) { - gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].specialDmg * 2; if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) gBattlerTarget = gSideTimers[sideTarget].followmeTarget; else gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; + gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].specialDmg * 2; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -11625,9 +11577,7 @@ static void Cmd_settypetorandomresistance(void) static void Cmd_setalwayshitflag(void) { CMD_ARGS(); - - gStatuses3[gBattlerTarget] &= ~STATUS3_ALWAYS_HITS; - gStatuses3[gBattlerTarget] |= STATUS3_ALWAYS_HITS_TURN(2); + gBattleMons[gBattlerTarget].volatiles.lockOn = 2; gDisableStructs[gBattlerTarget].battlerWithSureHit = gBattlerAttacker; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -12021,7 +11971,7 @@ static void Cmd_trysetperishsong(void) for (i = 0; i < gBattlersCount; i++) { - if (gStatuses3[i] & STATUS3_PERISH_SONG + if (gBattleMons[i].volatiles.perishSong || GetBattlerAbility(i) == ABILITY_SOUNDPROOF || BlocksPrankster(gCurrentMove, gBattlerAttacker, i, TRUE) || gBattleMons[i].volatiles.semiInvulnerable == STATE_COMMANDER) @@ -12030,7 +11980,7 @@ static void Cmd_trysetperishsong(void) } else { - gStatuses3[i] |= STATUS3_PERISH_SONG; + gBattleMons[i].volatiles.perishSong = TRUE; gDisableStructs[i].perishSongTimer = 3; } } @@ -12111,13 +12061,13 @@ static void Cmd_setembargo(void) { CMD_ARGS(const u8 *failInstr); - if (gStatuses3[gBattlerTarget] & STATUS3_EMBARGO) + if (gBattleMons[gBattlerTarget].volatiles.embargo) { gBattlescriptCurrInstr = cmd->failInstr; } else { - gStatuses3[gBattlerTarget] |= STATUS3_EMBARGO; + gBattleMons[gBattlerTarget].volatiles.embargo = TRUE; gDisableStructs[gBattlerTarget].embargoTimer = gBattleTurnCounter + 5; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -12355,10 +12305,9 @@ static void Cmd_rapidspinfree(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, gBattleStruct->wrappedMove[gBattlerAttacker]); BattleScriptCall(BattleScript_WrapFree); } - else if (gStatuses3[gBattlerAttacker] & STATUS3_LEECHSEED) + else if (gBattleMons[gBattlerAttacker].volatiles.leechSeed) { - gStatuses3[gBattlerAttacker] &= ~STATUS3_LEECHSEED; - gStatuses3[gBattlerAttacker] &= ~STATUS3_LEECHSEED_BATTLER; + gBattleMons[gBattlerAttacker].volatiles.leechSeed = 0; BattleScriptCall(BattleScript_LeechSeedFree); } else if (AreAnyHazardsOnSide(atkSide)) @@ -12617,14 +12566,8 @@ static void Cmd_tryfiretwoturnmovenowbyeffect(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static void Cmd_setminimize(void) +static void Cmd_unused_0xC7(void) { - CMD_ARGS(); - - if (gHitMarker & HITMARKER_OBEYS) - gStatuses3[gBattlerAttacker] |= STATUS3_MINIMIZED; - - gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_unused_c8(void) @@ -12678,7 +12621,7 @@ static void Cmd_setcharge(void) CMD_ARGS(u8 battler); u8 battler = GetBattlerForBattleScript(cmd->battler); - gStatuses3[battler] |= STATUS3_CHARGED_UP; + gBattleMons[battler].volatiles.charge = TRUE; if (B_CHARGE < GEN_9) gDisableStructs[battler].chargeTimer = 2; else @@ -12939,22 +12882,40 @@ static void Cmd_tryswapitems(void) } } +static bool32 CanAbilityShieldActivateForBattler(u32 battler) +{ + if (GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD) + return FALSE; + + RecordItemEffectBattle(battler, HOLD_EFFECT_ABILITY_SHIELD); + gBattlerAbility = battler; + gLastUsedItem = gBattleMons[battler].item; + return TRUE; +} + // Role Play, Doodle static void Cmd_trycopyability(void) { CMD_ARGS(u8 battler, const u8 *failInstr); u32 battler = GetBattlerForBattleScript(cmd->battler); + u32 partner = BATTLE_PARTNER(battler); u16 defAbility = gBattleMons[gBattlerTarget].ability; + bool32 shouldConsiderPartner = IsBattlerAlive(partner) && GetMoveEffect(gCurrentMove) == EFFECT_DOODLE; if (gBattleMons[battler].ability == defAbility || defAbility == ABILITY_NONE || gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed - || (IsBattlerAlive(BATTLE_PARTNER(battler)) && gAbilitiesInfo[gBattleMons[BATTLE_PARTNER(battler)].ability].cantBeSuppressed && GetMoveEffect(gCurrentMove) == EFFECT_DOODLE) + || (shouldConsiderPartner && gAbilitiesInfo[gBattleMons[partner].ability].cantBeSuppressed) || gAbilitiesInfo[defAbility].cantBeCopied) { gBattlescriptCurrInstr = cmd->failInstr; } + else if (CanAbilityShieldActivateForBattler(battler) || (shouldConsiderPartner && CanAbilityShieldActivateForBattler(partner))) + { + gBattlescriptCurrInstr = BattleScript_MoveEnd; + BattleScriptCall(BattleScript_AbilityShieldProtects); + } else { gBattleScripting.abilityPopupOverwrite = gBattleMons[battler].ability; @@ -12968,7 +12929,7 @@ static void Cmd_trywish(void) { CMD_ARGS(const u8 *failInstr); - if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) + if (gBattleMons[gBattlerTarget].volatiles.healBlock) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -13010,12 +12971,17 @@ static void Cmd_setgastroacid(void) { gBattlescriptCurrInstr = cmd->failInstr; } + else if (GetBattlerHoldEffectIgnoreAbility(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + { + RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); + gBattlescriptCurrInstr = cmd->failInstr; + } else { if (gBattleMons[gBattlerTarget].ability == ABILITY_NEUTRALIZING_GAS) gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; - gStatuses3[gBattlerTarget] |= STATUS3_GASTRO_ACID; + gBattleMons[gBattlerTarget].volatiles.gastroAcid = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -13024,7 +12990,7 @@ static void Cmd_setyawn(void) { CMD_ARGS(const u8 *failInstr); - if (gStatuses3[gBattlerTarget] & STATUS3_YAWN + if (gBattleMons[gBattlerTarget].volatiles.yawn || gBattleMons[gBattlerTarget].status1 & STATUS1_ANY) { gBattlescriptCurrInstr = cmd->failInstr; @@ -13043,7 +13009,7 @@ static void Cmd_setyawn(void) } else { - gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); + gBattleMons[gBattlerTarget].volatiles.yawn = 2; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -13111,10 +13077,10 @@ static void Cmd_tryswapabilities(void) RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); gBattlescriptCurrInstr = cmd->failInstr; } - else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + else if (CanAbilityShieldActivateForBattler(gBattlerAttacker) || CanAbilityShieldActivateForBattler(gBattlerTarget)) { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = cmd->failInstr; + gBattlescriptCurrInstr = BattleScript_MoveEnd; + BattleScriptCall(BattleScript_AbilityShieldProtects); } else { @@ -13139,13 +13105,13 @@ static void Cmd_tryimprison(void) { CMD_ARGS(const u8 *failInstr); - if ((gStatuses3[gBattlerAttacker] & STATUS3_IMPRISONED_OTHERS)) + if (gBattleMons[gBattlerAttacker].volatiles.imprison) { gBattlescriptCurrInstr = cmd->failInstr; } else if (B_IMPRISON >= GEN_5) { - gStatuses3[gBattlerAttacker] |= STATUS3_IMPRISONED_OTHERS; + gBattleMons[gBattlerAttacker].volatiles.imprison = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -13171,7 +13137,7 @@ static void Cmd_tryimprison(void) } if (attackerMoveId != MAX_MON_MOVES) { - gStatuses3[gBattlerAttacker] |= STATUS3_IMPRISONED_OTHERS; + gBattleMons[gBattlerAttacker].volatiles.imprison = TRUE; gBattlescriptCurrInstr = cmd->nextInstr; break; } @@ -13198,23 +13164,30 @@ static void Cmd_setstealthrock(void) } } -static void Cmd_setuserstatus3(void) +static void Cmd_trysetvolatile(void) { - CMD_ARGS(u32 flags, const u8 *failInstr); + CMD_ARGS(u8 battler, u8 _volatile, const u8 *failInstr); - u32 flags = cmd->flags; + u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gStatuses3[gBattlerAttacker] & flags) + if (GetBattlerVolatile(battler, cmd->_volatile) != 0) { gBattlescriptCurrInstr = cmd->failInstr; } else { - gStatuses3[gBattlerAttacker] |= flags; - if (flags & STATUS3_MAGNET_RISE) - gDisableStructs[gBattlerAttacker].magnetRiseTimer = gBattleTurnCounter + 5; - if (flags & STATUS3_LASER_FOCUS) - gDisableStructs[gBattlerAttacker].laserFocusTimer = gBattleTurnCounter + 2; + SetMonVolatile(battler, cmd->_volatile, TRUE); + switch (cmd->_volatile) + { + case VOLATILE_MAGNET_RISE: + gDisableStructs[battler].magnetRiseTimer = gBattleTurnCounter + 5; + break; + case VOLATILE_LASER_FOCUS: + gDisableStructs[battler].laserFocusTimer = gBattleTurnCounter + 2; + break; + default: + break; + } gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -13529,7 +13502,7 @@ bool32 DoesDisguiseBlockMove(u32 battler, u32 move) { if (!(gBattleMons[battler].species == SPECIES_MIMIKYU_DISGUISED || gBattleMons[battler].species == SPECIES_MIMIKYU_TOTEM_DISGUISED) || gBattleMons[battler].volatiles.transformed - || (!gProtectStructs[battler].confusionSelfDmg && (IsBattleMoveStatus(move) || gHitMarker & HITMARKER_PASSIVE_DAMAGE)) + || (!gProtectStructs[battler].confusionSelfDmg && (IsBattleMoveStatus(move) || gHitMarker & HITMARKER_PASSIVE_HP_UPDATE)) || gHitMarker & HITMARKER_IGNORE_DISGUISE || !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_DISGUISE)) return FALSE; @@ -14459,7 +14432,9 @@ static void Cmd_settelekinesis(void) { CMD_ARGS(const u8 *failInstr); - if (gStatuses3[gBattlerTarget] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN) + if (gBattleMons[gBattlerTarget].volatiles.telekinesis + || gBattleMons[gBattlerTarget].volatiles.root + || gBattleMons[gBattlerTarget].volatiles.smackDown || gFieldStatuses & STATUS_FIELD_GRAVITY || IsTelekinesisBannedSpecies(gBattleMons[gBattlerTarget].species)) { @@ -14467,7 +14442,7 @@ static void Cmd_settelekinesis(void) } else { - gStatuses3[gBattlerTarget] |= STATUS3_TELEKINESIS; + gBattleMons[gBattlerTarget].volatiles.telekinesis = TRUE; gDisableStructs[gBattlerTarget].telekinesisTimer = gBattleTurnCounter + 3; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -14539,7 +14514,7 @@ static void Cmd_setnonvolatilestatus(void) switch (cmd->trigger) { case TRIGGER_ON_ABILITY: - if (gBattleScripting.moveEffect == MOVE_EFFECT_CONFUSION) + if (gBattleScripting.moveEffect >= MOVE_EFFECT_CONFUSION) SetMoveEffect(gBattleScripting.battler, gEffectBattler, FALSE, FALSE); else SetNonVolatileStatusCondition(gEffectBattler, gBattleScripting.moveEffect, TRIGGER_ON_ABILITY); @@ -14563,10 +14538,10 @@ static void Cmd_tryworryseed(void) RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); gBattlescriptCurrInstr = cmd->failInstr; } - else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + else if (CanAbilityShieldActivateForBattler(gBattlerTarget)) { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = cmd->failInstr; + gBattlescriptCurrInstr = BattleScript_MoveEnd; + BattleScriptCall(BattleScript_AbilityShieldProtects); } else { @@ -14667,26 +14642,26 @@ void BS_CalcMetalBurstDmg(void) && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId)) && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp) { - gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].physicalDmg * 150 / 100; if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) gBattlerTarget = gSideTimers[sideTarget].followmeTarget; else gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; + gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].physicalDmg * 150 / 100; gBattlescriptCurrInstr = cmd->nextInstr; } else if (gProtectStructs[gBattlerAttacker].specialDmg && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId)) && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp) { - gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].specialDmg * 150 / 100; if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) gBattlerTarget = gSideTimers[sideTarget].followmeTarget; else gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; + gBattleStruct->moveDamage[gBattlerTarget] = gProtectStructs[gBattlerAttacker].specialDmg * 150 / 100; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -15353,18 +15328,18 @@ void BS_TryReflectType(void) void BS_TrySetOctolock(void) { - NATIVE_ARGS(u8 battler, const u8 *failInstr); - u32 battler = GetBattlerForBattleScript(cmd->battler); + NATIVE_ARGS(const u8 *failInstr); - if (gDisableStructs[battler].octolock) + if (gDisableStructs[gBattlerTarget].octolock) { gBattlescriptCurrInstr = cmd->failInstr; } else { - gDisableStructs[battler].octolock = TRUE; - gBattleMons[battler].volatiles.escapePrevention = TRUE; - gDisableStructs[battler].battlerPreventingEscape = gBattlerAttacker; + gDisableStructs[gBattlerTarget].octolock = TRUE; + gDisableStructs[gBattlerTarget].octolockedBy = gBattlerAttacker; + gBattleMons[gBattlerTarget].volatiles.escapePrevention = TRUE; + gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -16055,6 +16030,16 @@ void BS_ActivateTerrainChangeAbilities(void) AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0); } +void BS_ResetTerrainAbilityFlags(void) +{ + NATIVE_ARGS(); + // reset terrain ability checks + for (u32 i = 0; i < gBattlersCount; i++) + gDisableStructs[i].terrainAbilityDone = 0; + + gBattlescriptCurrInstr = cmd->nextInstr; +} + void BS_StoreHealingWish(void) { NATIVE_ARGS(u8 battler); @@ -16673,10 +16658,15 @@ void BS_TryActivateAbilityShield(void) { NATIVE_ARGS(u8 battler); u32 battler = GetBattlerForBattleScript(cmd->battler); + u32 ability = GetBattlerAbility(battler); gBattlescriptCurrInstr = cmd->nextInstr; - if (GetBattlerAbilityNoAbilityShield(battler) != GetBattlerAbility(battler)) + if (ability != ABILITY_NONE // if ability would be negated by breaking effects Ability Shield doesn't print message + && ability == GetBattlerAbilityInternal(battler, TRUE, TRUE)) + return; + + if (GetBattlerAbilityNoAbilityShield(battler) != ability) { gLastUsedItem = gBattleMons[battler].item; RecordItemEffectBattle(battler, GetItemHoldEffect(gLastUsedItem)); @@ -16901,7 +16891,8 @@ void BS_GravityOnAirborneMons(void) CancelMultiTurnMoves(gBattlerTarget, SKY_DROP_GRAVITY_ON_AIRBORNE); gBattleMons[gBattlerTarget].volatiles.semiInvulnerable = STATE_NONE; - gStatuses3[gBattlerTarget] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS); + gBattleMons[gBattlerTarget].volatiles.magnetRise = FALSE; + gBattleMons[gBattlerTarget].volatiles.telekinesis = FALSE; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -17230,6 +17221,12 @@ void BS_SwitchinAbilities(void) AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, battler, 0, 0, 0); AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, battler, 0, 0, 0); AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0); + + if (gBattleWeather & B_WEATHER_ANY && HasWeatherEffect()) + AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, 0, 0, 0); + + if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0); } void BS_InstantHpDrop(void) @@ -17371,10 +17368,10 @@ void BS_SetSimpleBeam(void) RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); gBattlescriptCurrInstr = cmd->failInstr; } - else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + else if (CanAbilityShieldActivateForBattler(gBattlerTarget)) { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = cmd->failInstr; + gBattlescriptCurrInstr = BattleScript_MoveEnd; + BattleScriptCall(BattleScript_AbilityShieldProtects); } else { @@ -17396,10 +17393,10 @@ void BS_TryEntrainment(void) RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); gBattlescriptCurrInstr = cmd->failInstr; } - else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + else if (CanAbilityShieldActivateForBattler(gBattlerTarget)) { - RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = cmd->failInstr; + gBattlescriptCurrInstr = BattleScript_MoveEnd; + BattleScriptCall(BattleScript_AbilityShieldProtects); } else { @@ -17674,7 +17671,7 @@ void BS_PowerTrick(void) { NATIVE_ARGS(); u32 temp; - gStatuses3[gBattlerAttacker] ^= STATUS3_POWER_TRICK; + gBattleMons[gBattlerAttacker].volatiles.powerTrick = !gBattleMons[gBattlerAttacker].volatiles.powerTrick; SWAP(gBattleMons[gBattlerAttacker].attack, gBattleMons[gBattlerAttacker].defense, temp); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -18297,9 +18294,9 @@ void BS_CureCertainStatuses(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_TORMENT; } // Check heal block - if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) + if (gBattleMons[gBattlerTarget].volatiles.healBlock) { - gStatuses3[gBattlerTarget] &= ~(STATUS3_HEAL_BLOCK); + gBattleMons[gBattlerTarget].volatiles.healBlock = FALSE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK; } // Check disable diff --git a/src/battle_tower.c b/src/battle_tower.c index 6eeac96d4a..2d0cbbe11e 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -25,6 +25,7 @@ #include "battle_factory.h" #include "constants/abilities.h" #include "constants/apprentice.h" +#include "constants/battle_ai.h" #include "constants/battle_dome.h" #include "constants/battle_frontier.h" #include "constants/battle_frontier_mons.h" diff --git a/src/battle_transition.c b/src/battle_transition.c index 4b350dd706..114248b93d 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -2587,7 +2587,7 @@ static void Mugshots_CreateTrainerPics(struct Task *task) u8 trainerAPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentA); u8 trainerBPicId = GetTrainerPicFromId(TRAINER_BATTLE_PARAM.opponentB); - u8 partnerPicId = gTrainerPicToTrainerBackPic[GetTrainerPicFromId(gPartnerTrainerId)]; + u8 partnerPicId = GetTrainerPicFromId(gPartnerTrainerId); s16 opponentARotationScales = 0; s16 opponentBRotationScales = 0; diff --git a/src/battle_tv.c b/src/battle_tv.c index 6f974f5ba3..5e3939ed5c 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -589,7 +589,7 @@ void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruc tvPtr->side[atkSide].usedMoveSlot = moveSlot; AddMovePoints(PTS_MOVE_EFFECT, moveSlot, move, 0); AddPointsBasedOnWeather(weatherFlags, move, moveSlot); - if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP) + if (gBattleMons[gBattlerAttacker].volatiles.charge) AddMovePoints(PTS_ELECTRIC, move, moveSlot, 0); if (move == MOVE_WISH) diff --git a/src/battle_util.c b/src/battle_util.c index 09bbc5f8c5..61616f502e 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -44,6 +44,7 @@ #include "constants/battle_string_ids.h" #include "constants/hold_effects.h" #include "constants/items.h" +#include "constants/item_effects.h" #include "constants/moves.h" #include "constants/songs.h" #include "constants/species.h" @@ -598,6 +599,11 @@ void HandleAction_UseItem(void) ClearVariousBattlerFlags(gBattlerAttacker); gLastUsedItem = gBattleResources->bufferB[gBattlerAttacker][1] | (gBattleResources->bufferB[gBattlerAttacker][2] << 8); + if (X_ITEM_FRIENDSHIP_INCREASE > 0 + && GetItemEffectType(gLastUsedItem) == ITEM_EFFECT_X_ITEM + && !ShouldSkipFriendshipChange()) + UpdateFriendshipFromXItem(gBattlerAttacker); + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[GetItemBattleUsage(gLastUsedItem) - 1]; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; } @@ -873,9 +879,13 @@ void HandleAction_NothingIsFainted(void) gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; gBattleStruct->synchronizeMoveEffect = MOVE_EFFECT_NONE; - gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_PASSIVE_DAMAGE - | HITMARKER_OBEYS); + gHitMarker &= ~(HITMARKER_DESTINYBOND + | HITMARKER_IGNORE_SUBSTITUTE + | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT + | HITMARKER_STATUS_ABILITY_EFFECT + | HITMARKER_PASSIVE_HP_UPDATE + | HITMARKER_OBEYS); } void HandleAction_ActionFinished(void) @@ -886,9 +896,14 @@ void HandleAction_ActionFinished(void) gCurrentTurnActionNumber++; gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; SpecialStatusesClear(); - gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED - | HITMARKER_NO_PPDEDUCT | HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_PASSIVE_DAMAGE - | HITMARKER_OBEYS | HITMARKER_IGNORE_DISGUISE); + gHitMarker &= ~(HITMARKER_DESTINYBOND + | HITMARKER_IGNORE_SUBSTITUTE + | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT + | HITMARKER_STATUS_ABILITY_EFFECT + | HITMARKER_PASSIVE_HP_UPDATE + | HITMARKER_OBEYS + | HITMARKER_IGNORE_DISGUISE); ClearDamageCalcResults(); gCurrentMove = 0; @@ -1281,7 +1296,7 @@ static bool32 IsGravityPreventingMove(u32 move) bool32 IsHealBlockPreventingMove(u32 battler, u32 move) { - if (!(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + if (!gBattleMons[battler].volatiles.healBlock) return FALSE; return IsHealingMove(move); @@ -1656,7 +1671,7 @@ u8 GetImprisonedMovesCount(u32 battler, u16 move) for (i = 0; i < gBattlersCount; i++) { - if (battlerSide != GetBattlerSide(i) && gStatuses3[i] & STATUS3_IMPRISONED_OTHERS) + if (battlerSide != GetBattlerSide(i) && gBattleMons[i].volatiles.imprison) { s32 j; for (j = 0; j < MAX_MON_MOVES; j++) @@ -1892,7 +1907,7 @@ void SetAtkCancellerForCalledMove(void) static enum MoveCanceller CancellerFlags(void) { gBattleMons[gBattlerAttacker].volatiles.destinyBond = FALSE; - gStatuses3[gBattlerAttacker] &= ~STATUS3_GRUDGE; + gBattleMons[gBattlerAttacker].volatiles.grudge = FALSE; gBattleMons[gBattlerAttacker].volatiles.glaiveRush = FALSE; return MOVE_STEP_SUCCESS; } @@ -2095,7 +2110,7 @@ static enum MoveCanceller CancellerDisabled(void) static enum MoveCanceller CancellerVolatileBlocked(void) { - if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove)) + if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gBattleMons[gBattlerAttacker].volatiles.healBlock && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].unableToUseMove = TRUE; gBattleScripting.battler = gBattlerAttacker; @@ -3173,7 +3188,7 @@ bool32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 return FALSE; case MOVE_ABSORBED_BY_DRAIN_HP_ABILITY: gBattleStruct->pledgeMove = FALSE; - if (IsBattlerAtMaxHp(battlerDef) || (B_HEAL_BLOCKING >= GEN_5 && gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK)) + if (IsBattlerAtMaxHp(battlerDef) || (B_HEAL_BLOCKING >= GEN_5 && gBattleMons[battlerDef].volatiles.healBlock)) { if ((gProtectStructs[battlerAtk].notFirstStrike)) battleScript = BattleScript_MonMadeMoveUseless; @@ -3533,6 +3548,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (gSpecialStatuses[battler].switchInAbilityDone) break; + if (GetBattlerHoldEffectIgnoreAbility(battler, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + break; side = (BATTLE_OPPOSITE(GetBattlerPosition(battler))) & BIT_SIDE; target1 = GetBattlerAtPosition(side); @@ -4096,7 +4113,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!gSpecialStatuses[battler].switchInAbilityDone && IsDoubleBattle() - && !(gStatuses3[partner] & STATUS3_HEAL_BLOCK) + && !gBattleMons[partner].volatiles.healBlock && gBattleMons[partner].hp < gBattleMons[partner].maxHP && IsBattlerAlive(partner)) { @@ -4213,7 +4230,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && !IsBattlerAtMaxHp(battler) && gBattleMons[battler].volatiles.semiInvulnerable != STATE_UNDERGROUND && gBattleMons[battler].volatiles.semiInvulnerable != STATE_UNDERWATER - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + && !gBattleMons[battler].volatiles.healBlock) { BattleScriptPushCursorAndCallback(BattleScript_IceBodyHeal); gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16; @@ -4230,7 +4247,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_RAIN_DISH: if (IsBattlerWeatherAffected(battler, B_WEATHER_RAIN) && !IsBattlerAtMaxHp(battler) - && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + && !gBattleMons[battler].volatiles.healBlock) { BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates); gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / (gLastUsedAbility == ABILITY_RAIN_DISH ? 16 : 8); @@ -4529,7 +4546,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && gBattleMons[gBattlerAttacker].ability != ABILITY_LINGERING_AROMA && !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSuppressed) { - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + if (GetBattlerHoldEffectIgnoreAbility(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) { RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD); break; @@ -4549,11 +4566,16 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && !(GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) && !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSwapped) { - if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + if (GetBattlerHoldEffectIgnoreAbility(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) { RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD); break; } + if (GetBattlerHoldEffectIgnoreAbility(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) + { + RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); + break; + } gLastUsedAbility = gBattleMons[gBattlerAttacker].ability; gBattleMons[gBattlerAttacker].ability = gDisableStructs[gBattlerAttacker].overwrittenAbility = gBattleMons[gBattlerTarget].ability; @@ -4832,14 +4854,14 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(battler) && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker, TRUE), move) - && !(gStatuses3[gBattlerAttacker] & STATUS3_PERISH_SONG)) + && !gBattleMons[gBattlerAttacker].volatiles.perishSong) { - if (!(gStatuses3[battler] & STATUS3_PERISH_SONG)) + if (!gBattleMons[battler].volatiles.perishSong) { - gStatuses3[battler] |= STATUS3_PERISH_SONG; + gBattleMons[battler].volatiles.perishSong = TRUE; gDisableStructs[battler].perishSongTimer = 3; } - gStatuses3[gBattlerAttacker] |= STATUS3_PERISH_SONG; + gBattleMons[gBattlerAttacker].volatiles.perishSong = TRUE; gDisableStructs[gBattlerAttacker].perishSongTimer = 3; BattleScriptCall(BattleScript_PerishBodyActivates); effect++; @@ -5339,7 +5361,7 @@ bool32 IsNeutralizingGasOnField(void) for (i = 0; i < gBattlersCount; i++) { - if (IsBattlerAlive(i) && gBattleMons[i].ability == ABILITY_NEUTRALIZING_GAS && !(gStatuses3[i] & STATUS3_GASTRO_ACID)) + if (IsBattlerAlive(i) && gBattleMons[i].ability == ABILITY_NEUTRALIZING_GAS && !gBattleMons[i].volatiles.gastroAcid) return TRUE; } @@ -5348,7 +5370,7 @@ bool32 IsNeutralizingGasOnField(void) bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability) { - if (gStatuses3[battler] & STATUS3_GASTRO_ACID) + if (gBattleMons[battler].volatiles.gastroAcid) return FALSE; if (ability == ABILITY_MOLD_BREAKER @@ -5400,7 +5422,7 @@ u32 GetBattlerAbilityInternal(u32 battler, u32 ignoreMoldBreaker, u32 noAbilityS { // Edge case: pokemon under the effect of gastro acid transforms into a pokemon with Comatose (Todo: verify how other unsuppressable abilities behave) if (gBattleMons[battler].volatiles.transformed - && gStatuses3[battler] & STATUS3_GASTRO_ACID + && gBattleMons[battler].volatiles.gastroAcid && gBattleMons[battler].ability == ABILITY_COMATOSE) return ABILITY_NONE; @@ -5410,7 +5432,7 @@ u32 GetBattlerAbilityInternal(u32 battler, u32 ignoreMoldBreaker, u32 noAbilityS return gBattleMons[battler].ability; } - if (gStatuses3[battler] & STATUS3_GASTRO_ACID) + if (gBattleMons[battler].volatiles.gastroAcid) return ABILITY_NONE; if (!hasAbilityShield @@ -5502,7 +5524,7 @@ bool32 CanBattlerEscape(u32 battler) // no ability check return FALSE; else if (gBattleMons[battler].volatiles.wrapped) return FALSE; - else if (gStatuses3[battler] & STATUS3_ROOTED) + else if (gBattleMons[battler].volatiles.root) return FALSE; else if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) return FALSE; @@ -5870,7 +5892,7 @@ bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId) static enum ItemEffect HealConfuseBerry(u32 battler, u32 itemId, u32 flavorId, enum ItemCaseId caseID) { if (HasEnoughHpToEatBerry(battler, (B_CONFUSE_BERRIES_HEAL >= GEN_7 ? 4 : 2), itemId) - && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) + && (B_HEAL_BLOCKING < GEN_5 || !gBattleMons[battler].volatiles.healBlock)) { PREPARE_FLAVOR_BUFFER(gBattleTextBuff1, flavorId); @@ -5998,7 +6020,7 @@ static enum ItemEffect TrySetEnigmaBerry(u32 battler) && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && ((IsBattlerTurnDamaged(battler) && gBattleStruct->moveResultFlags[battler] & MOVE_RESULT_SUPER_EFFECTIVE) || gBattleScripting.overrideBerryRequirements) && !(gBattleScripting.overrideBerryRequirements && gBattleMons[battler].hp == gBattleMons[battler].maxHP) - && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) + && (B_HEAL_BLOCKING < GEN_5 || !gBattleMons[battler].volatiles.healBlock)) { gBattleScripting.battler = battler; gBattleStruct->moveDamage[battler] = (gBattleMons[battler].maxHP * 25 / 100) * -1; @@ -6120,7 +6142,7 @@ static u32 ItemRestorePp(u32 battler, u32 itemId, enum ItemCaseId caseID) static u32 ItemHealHp(u32 battler, u32 itemId, enum ItemCaseId caseID, bool32 percentHeal) { if (!(gBattleScripting.overrideBerryRequirements && gBattleMons[battler].hp == gBattleMons[battler].maxHP) - && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) + && (B_HEAL_BLOCKING < GEN_5 || !gBattleMons[battler].volatiles.healBlock) && HasEnoughHpToEatBerry(battler, 2, itemId)) { if (percentHeal) @@ -6191,9 +6213,9 @@ static bool32 GetMentalHerbEffect(u32 battler) ret = TRUE; } // Check heal block - if (gStatuses3[battler] & STATUS3_HEAL_BLOCK) + if (gBattleMons[battler].volatiles.healBlock) { - gStatuses3[battler] &= ~STATUS3_HEAL_BLOCK; + gBattleMons[battler].volatiles.healBlock = FALSE; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_HEALBLOCK; ret = TRUE; } @@ -6784,7 +6806,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler) case HOLD_EFFECT_LEFTOVERS: LEFTOVERS: if (gBattleMons[battler].hp < gBattleMons[battler].maxHP - && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) + && (B_HEAL_BLOCKING < GEN_5 || !gBattleMons[battler].volatiles.healBlock)) { gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16; if (gBattleStruct->moveDamage[battler] == 0) @@ -7020,7 +7042,7 @@ u32 ItemBattleEffects(enum ItemCaseId caseID, u32 battler) && IsBattlerAlive(gBattlerAttacker) && GetMoveEffect(gCurrentMove) != EFFECT_FUTURE_SIGHT && GetMoveEffect(gCurrentMove) != EFFECT_PAIN_SPLIT - && (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))) + && (B_HEAL_BLOCKING < GEN_5 || !gBattleMons[battler].volatiles.healBlock)) { gLastUsedItem = atkItem; gPotentialItemEffectBattler = gBattlerAttacker; @@ -7294,7 +7316,7 @@ void ClearVariousBattlerFlags(u32 battler) gDisableStructs[battler].furyCutterCounter = 0; gBattleMons[battler].volatiles.destinyBond = FALSE; gBattleMons[battler].volatiles.glaiveRush = FALSE; - gStatuses3[battler] &= ~STATUS3_GRUDGE; + gBattleMons[battler].volatiles.grudge = FALSE; } void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands @@ -7534,11 +7556,11 @@ enum ItemHoldEffect GetBattlerHoldEffectInternal(u32 battler, bool32 checkNegati { if (checkNegating) { - if (gStatuses3[battler] & STATUS3_EMBARGO) + if (gBattleMons[battler].volatiles.embargo) return HOLD_EFFECT_NONE; if (gFieldStatuses & STATUS_FIELD_MAGIC_ROOM) return HOLD_EFFECT_NONE; - if (checkAbility && GetBattlerAbility(battler) == ABILITY_KLUTZ && !(gStatuses3[battler] & STATUS3_GASTRO_ACID)) + if (checkAbility && GetBattlerAbility(battler) == ABILITY_KLUTZ && !gBattleMons[battler].volatiles.gastroAcid) return HOLD_EFFECT_NONE; } @@ -7703,13 +7725,13 @@ static bool32 IsBattlerGroundedInverseCheck(u32 battler, enum InverseBattleCheck return TRUE; if (gFieldStatuses & STATUS_FIELD_GRAVITY) return TRUE; - if (B_ROOTED_GROUNDING >= GEN_4 && gStatuses3[battler] & STATUS3_ROOTED) + if (B_ROOTED_GROUNDING >= GEN_4 && gBattleMons[battler].volatiles.root) return TRUE; - if (gStatuses3[battler] & STATUS3_SMACKED_DOWN) + if (gBattleMons[battler].volatiles.smackDown) return TRUE; - if (gStatuses3[battler] & STATUS3_TELEKINESIS) + if (gBattleMons[battler].volatiles.telekinesis) return FALSE; - if (gStatuses3[battler] & STATUS3_MAGNET_RISE) + if (gBattleMons[battler].volatiles.magnetRise) return FALSE; if (holdEffect == HOLD_EFFECT_AIR_BALLOON) return FALSE; @@ -8295,7 +8317,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(struct DamageContext *ctx) modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); if (gSpecialStatuses[battlerAtk].gemBoost) modifier = uq4_12_multiply(modifier, uq4_12_add(UQ_4_12(1.0), PercentToUQ4_12(gSpecialStatuses[battlerAtk].gemParam))); - if (gStatuses3[battlerAtk] & STATUS3_CHARGED_UP && moveType == TYPE_ELECTRIC) + if (gBattleMons[battlerAtk].volatiles.charge && moveType == TYPE_ELECTRIC) modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); if (GetMoveEffect(gChosenMove) == EFFECT_ME_FIRST) modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); @@ -8694,7 +8716,7 @@ static inline u32 CalcAttackStat(struct DamageContext *ctx) case ABILITY_TRANSISTOR: if (moveType == TYPE_ELECTRIC) { - if (B_TRANSISTOR_BOOST >= GEN_9) + if (GetGenConfig(GEN_CONFIG_TRANSISTOR_BOOST) >= GEN_9) modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); else modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); @@ -8755,6 +8777,14 @@ static inline u32 CalcAttackStat(struct DamageContext *ctx) RecordAbilityBattle(battlerDef, ABILITY_THICK_FAT); } break; + case ABILITY_PURIFYING_SALT: + if (moveType == TYPE_GHOST) + { + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(0.5)); + if (ctx->updateFlags) + RecordAbilityBattle(battlerDef, ABILITY_PURIFYING_SALT); + } + break; } // ally's abilities @@ -8837,31 +8867,38 @@ static inline u32 CalcDefenseStat(struct DamageContext *ctx) uq4_12_t modifier; u32 battlerDef = ctx->battlerDef; u32 move = ctx->move; - u32 moveType = ctx->moveType; enum BattleMoveEffects moveEffect = GetMoveEffect(move); - if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped - { - def = gBattleMons[battlerDef].spDefense; - spDef = gBattleMons[battlerDef].defense; - } - else - { - def = gBattleMons[battlerDef].defense; - spDef = gBattleMons[battlerDef].spDefense; - } + def = gBattleMons[battlerDef].defense; + spDef = gBattleMons[battlerDef].spDefense; if (moveEffect == EFFECT_PSYSHOCK || IsBattleMovePhysical(move)) // uses defense stat instead of sp.def { - defStat = def; + if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped + { + defStat = spDef; + usesDefStat = FALSE; + } + else + { + defStat = def; + usesDefStat = TRUE; + } defStage = gBattleMons[battlerDef].statStages[STAT_DEF]; - usesDefStat = TRUE; } else // is special { - defStat = spDef; + if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped + { + defStat = def; + usesDefStat = TRUE; + } + else + { + defStat = spDef; + usesDefStat = FALSE; + } defStage = gBattleMons[battlerDef].statStages[STAT_SPDEF]; - usesDefStat = FALSE; } // Self-destruct / Explosion cut defense in half @@ -8916,10 +8953,6 @@ static inline u32 CalcDefenseStat(struct DamageContext *ctx) if (gBattleMons[battlerDef].species == SPECIES_CHERRIM_SUNSHINE && IsBattlerWeatherAffected(battlerDef, B_WEATHER_SUN) && !usesDefStat) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; - case ABILITY_PURIFYING_SALT: - if (moveType == TYPE_GHOST) - modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); - break; } // ally's abilities @@ -9086,7 +9119,7 @@ static inline uq4_12_t GetZMaxMoveAgainstProtectionModifier(struct DamageContext static inline uq4_12_t GetMinimizeModifier(u32 move, u32 battlerDef) { - if (MoveIncreasesPowerToMinimizedTargets(move) && gStatuses3[battlerDef] & STATUS3_MINIMIZED) + if (MoveIncreasesPowerToMinimizedTargets(move) && gBattleMons[battlerDef].volatiles.minimize) return UQ_4_12(2.0); return UQ_4_12(1.0); } @@ -9396,7 +9429,7 @@ s32 DoFixedDamageMoveCalc(struct DamageContext *ctx) dmg = gBattleMons[ctx->battlerAtk].level; break; case EFFECT_PSYWAVE: - randDamage = B_PSYWAVE_DMG >= GEN_6 ? (Random() % 101) : ((Random() % 11) * 10); + randDamage = B_PSYWAVE_DMG >= GEN_5 ? (Random() % 101) : ((Random() % 11) * 10); dmg = gBattleMons[ctx->battlerAtk].level * (randDamage + 50) / 100; break; case EFFECT_FIXED_HP_DAMAGE: @@ -9564,7 +9597,7 @@ static inline void MulByTypeEffectiveness(struct DamageContext *ctx, uq4_12_t *m RecordAbilityBattle(ctx->battlerAtk, ctx->abilityAtk); } - if (ctx->moveType == TYPE_PSYCHIC && defType == TYPE_DARK && gStatuses3[ctx->battlerDef] & STATUS3_MIRACLE_EYED && mod == UQ_4_12(0.0)) + if (ctx->moveType == TYPE_PSYCHIC && defType == TYPE_DARK && gBattleMons[ctx->battlerDef].volatiles.miracleEye && mod == UQ_4_12(0.0)) mod = UQ_4_12(1.0); if (GetMoveEffect(ctx->move) == EFFECT_SUPER_EFFECTIVE_ON_ARG && defType == GetMoveArgType(ctx->move)) mod = UQ_4_12(2.0); @@ -10519,7 +10552,7 @@ bool32 CanFling(u32 battler) if (item == ITEM_NONE || (B_KLUTZ_FLING_INTERACTION >= GEN_5 && GetBattlerAbility(battler) == ABILITY_KLUTZ) || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM - || gStatuses3[battler] & STATUS3_EMBARGO + || gBattleMons[battler].volatiles.embargo || GetFlingPowerFromItemId(item) == 0 || !CanBattlerGetOrLoseItem(battler, item)) return FALSE; @@ -10838,7 +10871,7 @@ bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move) { if (GetMoveEffect(move) == EFFECT_HIT_ENEMY_HEAL_ALLY && IsBattlerAlly(battlerAtk, battlerDef) - && gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK) + && gBattleMons[battlerAtk].volatiles.healBlock) return FALSE; // Pokémon affected by Heal Block cannot target allies with Pollen Puff if (IsBattlerAlly(battlerAtk, battlerDef) && (GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX || IsGimmickSelected(battlerAtk, GIMMICK_DYNAMAX))) @@ -11463,7 +11496,7 @@ bool32 TrySwitchInEjectPack(enum ItemCaseId caseID) // Gets the value of a volatile status flag for a certain battler // Primarily used for the debug menu and scripts. Outside of it explicit references are preferred -u32 GetMonVolatile(u32 battler, enum Volatile _volatile) +u32 GetBattlerVolatile(u32 battler, enum Volatile _volatile) { switch (_volatile) { @@ -11603,7 +11636,7 @@ bool32 CanMoveSkipAccuracyCalc(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u enum BattleMoveEffects moveEffect = GetMoveEffect(move); u32 nonVolatileStatus = GetMoveNonVolatileStatus(move); - if ((gStatuses3[battlerDef] & STATUS3_ALWAYS_HITS && gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk) + if ((gBattleMons[battlerDef].volatiles.lockOn && gDisableStructs[battlerDef].battlerWithSureHit == battlerAtk) || (B_TOXIC_NEVER_MISS >= GEN_6 && nonVolatileStatus == MOVE_EFFECT_TOXIC && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) || gBattleMons[battlerDef].volatiles.glaiveRush) { @@ -11625,7 +11658,7 @@ bool32 CanMoveSkipAccuracyCalc(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u ability = ABILITY_NO_GUARD; } // If the target is under the effects of Telekinesis, and the move isn't a OH-KO move, move hits. - else if (gStatuses3[battlerDef] & STATUS3_TELEKINESIS + else if (gBattleMons[battlerDef].volatiles.telekinesis && !IsSemiInvulnerable(battlerDef, CHECK_ALL) && moveEffect != EFFECT_OHKO && moveEffect != EFFECT_SHEER_COLD) @@ -11653,7 +11686,7 @@ bool32 CanMoveSkipAccuracyCalc(u32 battlerAtk, u32 battlerDef, u32 abilityAtk, u } } else if (B_MINIMIZE_DMG_ACC >= GEN_6 - && (gStatuses3[battlerDef] & STATUS3_MINIMIZED) + && gBattleMons[battlerDef].volatiles.minimize && MoveIncreasesPowerToMinimizedTargets(move)) { effect = TRUE; @@ -11698,7 +11731,7 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u if (defAbility == ABILITY_UNAWARE) accStage = DEFAULT_STAT_STAGE; - if (gBattleMons[battlerDef].volatiles.foresight || gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED) + if (gBattleMons[battlerDef].volatiles.foresight || gBattleMons[battlerDef].volatiles.miracleEye) buff = accStage; else buff = accStage + DEFAULT_STAT_STAGE - evasionStage; diff --git a/src/data/battle_partners.party b/src/data/battle_partners.party index e1ecfe35fa..8de1dc0f2b 100644 --- a/src/data/battle_partners.party +++ b/src/data/battle_partners.party @@ -4,6 +4,7 @@ Class: Pkmn Trainer 1 Pic: Brendan Gender: Male Music: Male +Back Pic: Brendan === PARTNER_STEVEN === Name: STEVEN @@ -11,6 +12,8 @@ Class: Rival Pic: Steven Gender: Male Music: Male +Back Pic: Steven +AI: Basic Trainer Metang Brave Nature diff --git a/src/data/moves_info.h b/src/data/moves_info.h index a4cff9c375..fb5dbeb3e9 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -2671,10 +2671,10 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = [MOVE_TELEPORT] = { .name = COMPOUND_STRING("Teleport"), - #if B_TELEPORT_BEHAVIOUR >= GEN_8 + #if B_TELEPORT_BEHAVIOR >= GEN_8 .description = COMPOUND_STRING( "Switches the user out last.\n" - "Flees when used by wild {PKMN}.") + "Flees when used by wild {PKMN}."), #else .description = COMPOUND_STRING( "A psychic move for fleeing\n" diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 93ff78ad7c..851424021f 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -334,14 +334,8 @@ const u8 gItemEffect_PPMax[9] = { VITAMIN_FRIENDSHIP_CHANGE(6), }; -#define STAT_BOOST_FRIENDSHIP_CHANGE \ - [6] = 1, /* Friendship change, low */ \ - [7] = 1 /* Friendship change, mid */ - const u8 gItemEffect_GuardSpec[8] = { [3] = ITEM3_GUARD_SPEC, - [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - STAT_BOOST_FRIENDSHIP_CHANGE, }; // The first item effect value for the stat boost items @@ -350,44 +344,30 @@ const u8 gItemEffect_GuardSpec[8] = { const u8 gItemEffect_DireHit[8] = { [0] = 1 << 5, // ITEM0_DIRE_HIT - [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - STAT_BOOST_FRIENDSHIP_CHANGE, }; const u8 gItemEffect_XAttack[8] = { [1] = ITEM1_X_ATTACK, - [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - STAT_BOOST_FRIENDSHIP_CHANGE, }; const u8 gItemEffect_XDefense[8] = { [1] = ITEM1_X_DEFENSE, - [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - STAT_BOOST_FRIENDSHIP_CHANGE, }; const u8 gItemEffect_XSpeed[8] = { [1] = ITEM1_X_SPEED, - [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - STAT_BOOST_FRIENDSHIP_CHANGE, }; const u8 gItemEffect_XAccuracy[8] = { [1] = ITEM1_X_ACCURACY, - [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - STAT_BOOST_FRIENDSHIP_CHANGE, }; const u8 gItemEffect_XSpecialAttack[8] = { [1] = ITEM1_X_SPATK, - [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - STAT_BOOST_FRIENDSHIP_CHANGE, }; const u8 gItemEffect_XSpecialDefense[8] = { [1] = ITEM1_X_SPDEF, - [5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID, - STAT_BOOST_FRIENDSHIP_CHANGE, }; const u8 gItemEffect_EvoItem[6] = { diff --git a/src/data/pokemon/trainer_class_lookups.h b/src/data/pokemon/trainer_class_lookups.h index b3f9282a43..9ce0b629e3 100644 --- a/src/data/pokemon/trainer_class_lookups.h +++ b/src/data/pokemon/trainer_class_lookups.h @@ -84,18 +84,6 @@ const u16 gFacilityClassToPicIndex[] = [FACILITY_CLASS_RS_MAY] = TRAINER_PIC_RS_MAY, }; -const u16 gTrainerPicToTrainerBackPic[] = -{ - [TRAINER_BACK_PIC_BRENDAN] = TRAINER_PIC_BRENDAN, - [TRAINER_BACK_PIC_MAY] = TRAINER_PIC_MAY, - [TRAINER_BACK_PIC_RED] = TRAINER_PIC_RED, - [TRAINER_BACK_PIC_LEAF] = TRAINER_PIC_LEAF, - [TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = TRAINER_PIC_RS_BRENDAN, - [TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = TRAINER_PIC_RS_MAY, - [TRAINER_BACK_PIC_WALLY] = TRAINER_PIC_WALLY, - [TRAINER_BACK_PIC_STEVEN] = TRAINER_PIC_STEVEN, -}; - const enum TrainerClassID gFacilityClassToTrainerClass[] = { [FACILITY_CLASS_HIKER] = TRAINER_CLASS_HIKER, diff --git a/src/data/wild_encounters.json.txt b/src/data/wild_encounters.json.txt deleted file mode 100755 index 8ae70efc6e..0000000000 --- a/src/data/wild_encounters.json.txt +++ /dev/null @@ -1,103 +0,0 @@ -{{ doNotModifyHeader }} - -## for wild_encounter_group in wild_encounter_groups -{% if wild_encounter_group.for_maps %} -## for wild_encounter_field in wild_encounter_group.fields -{% if not existsIn(wild_encounter_field, "groups") %} -## for encounter_rate in wild_encounter_field.encounter_rates -{% if loop.index == 0 %} -#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ loop.index }} {{ encounter_rate }} {% else %}#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ loop.index }} ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ subtract(loop.index, 1) }} + {{ encounter_rate }}{% endif %} {{ setVarInt(wild_encounter_field.type, loop.index) }} -## endfor -#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_TOTAL (ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ getVar(wild_encounter_field.type) }}) -{% else %} -## for field_subgroup_key, field_subgroup_subarray in wild_encounter_field.groups -## for field_subgroup_index in field_subgroup_subarray -{% if loop.index == 0 %} -#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ field_subgroup_index }} {{ at(wild_encounter_field.encounter_rates, field_subgroup_index) }} {% else %}#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ field_subgroup_index }} ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ getVar("previous_slot") }} + {{ at(wild_encounter_field.encounter_rates, field_subgroup_index) }}{% endif %}{{ setVarInt(concat(wild_encounter_field.type, field_subgroup_key), field_subgroup_index) }}{{ setVarInt("previous_slot", field_subgroup_index) }} -## endfor -#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_TOTAL (ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ getVar(concat(wild_encounter_field.type, field_subgroup_key)) }}) -## endfor -{% endif %} -## endfor -{% endif %} - - - -## for encounter in wild_encounter_group.encounters -{% if existsIn(encounter, "land_mons") %} -const struct WildPokemon {{ encounter.base_label }}_LandMons[] = -{ -## for wild_mon in encounter.land_mons.mons - { {{ wild_mon.min_level }}, {{ wild_mon.max_level }}, {{ wild_mon.species }} }, -## endfor -}; - -const struct WildPokemonInfo {{ encounter.base_label }}_LandMonsInfo = { {{encounter.land_mons.encounter_rate}}, {{ encounter.base_label }}_LandMons }; -{% endif %} -{% if existsIn(encounter, "water_mons") %} -const struct WildPokemon {{ encounter.base_label }}_WaterMons[] = -{ -## for wild_mon in encounter.water_mons.mons - { {{ wild_mon.min_level }}, {{ wild_mon.max_level }}, {{ wild_mon.species }} }, -## endfor -}; - -const struct WildPokemonInfo {{ encounter.base_label }}_WaterMonsInfo = { {{encounter.water_mons.encounter_rate}}, {{ encounter.base_label }}_WaterMons }; -{% endif %} -{% if existsIn(encounter, "rock_smash_mons") %} -const struct WildPokemon {{ encounter.base_label }}_RockSmashMons[] = -{ -## for wild_mon in encounter.rock_smash_mons.mons - { {{ wild_mon.min_level }}, {{ wild_mon.max_level }}, {{ wild_mon.species }} }, -## endfor -}; - -const struct WildPokemonInfo {{ encounter.base_label }}_RockSmashMonsInfo = { {{encounter.rock_smash_mons.encounter_rate}}, {{ encounter.base_label }}_RockSmashMons }; -{% endif %} -{% if existsIn(encounter, "fishing_mons") %} -const struct WildPokemon {{ encounter.base_label }}_FishingMons[] = -{ -## for wild_mon in encounter.fishing_mons.mons - { {{ wild_mon.min_level }}, {{ wild_mon.max_level }}, {{ wild_mon.species }} }, -## endfor -}; - -const struct WildPokemonInfo {{ encounter.base_label }}_FishingMonsInfo = { {{encounter.fishing_mons.encounter_rate}}, {{ encounter.base_label }}_FishingMons }; -{% endif %} - -{% if existsIn(encounter, "hidden_mons") %} -const struct WildPokemon {{ encounter.base_label }}_HiddenMons[] = -{ -## for wild_mon in encounter.hidden_mons.mons - { {{ wild_mon.min_level }}, {{ wild_mon.max_level }}, {{ wild_mon.species }} }, -## endfor -}; - -const struct WildPokemonInfo {{ encounter.base_label }}_HiddenMonsInfo = { {{encounter.hidden_mons.encounter_rate}}, {{ encounter.base_label }}_HiddenMons }; -{% endif %} - -## endfor -const struct WildPokemonHeader {{ wild_encounter_group.label }}[] = -{ -## for encounter in wild_encounter_group.encounters - { - .mapGroup = {% if wild_encounter_group.for_maps %}MAP_GROUP({{ encounter.map }}){% else %}0{% endif %}, - .mapNum = {% if wild_encounter_group.for_maps %}MAP_NUM({{ encounter.map }}){% else %}{{ loop.index1 }}{% endif %}, - .landMonsInfo = {% if existsIn(encounter, "land_mons") %}&{{ encounter.base_label }}_LandMonsInfo{% else %}NULL{% endif %}, - .waterMonsInfo = {% if existsIn(encounter, "water_mons") %}&{{ encounter.base_label }}_WaterMonsInfo{% else %}NULL{% endif %}, - .rockSmashMonsInfo = {% if existsIn(encounter, "rock_smash_mons") %}&{{ encounter.base_label }}_RockSmashMonsInfo{% else %}NULL{% endif %}, - .fishingMonsInfo = {% if existsIn(encounter, "fishing_mons") %}&{{ encounter.base_label }}_FishingMonsInfo{% else %}NULL{% endif %}, - .hiddenMonsInfo = {% if existsIn(encounter, "hidden_mons") %}&{{ encounter.base_label }}_HiddenMonsInfo{% else %}NULL{% endif %}, - }, -## endfor - { - .mapGroup = MAP_GROUP(MAP_UNDEFINED), - .mapNum = MAP_NUM(MAP_UNDEFINED), - .landMonsInfo = NULL, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - .hiddenMonsInfo = NULL, - }, -}; -## endfor diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 1f9d2af8fa..fb3e79a655 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -986,7 +986,7 @@ static void Task_EvolutionScene(u8 taskId) if (var == MAX_MON_MOVES) { // Didn't select move slot - gTasks[taskId].tLearnMoveNoState = (P_ASK_MOVE_CONFIRMATION) ? MVSTATE_ASK_CANCEL : MVSTATE_CANCEL; + gTasks[taskId].tLearnMoveState = (P_ASK_MOVE_CONFIRMATION) ? MVSTATE_ASK_CANCEL : MVSTATE_CANCEL; } else { @@ -1370,7 +1370,7 @@ static void Task_TradeEvolutionScene(u8 taskId) if (var == MAX_MON_MOVES) { // Didn't select move slot - gTasks[taskId].tLearnMoveNoState = (P_ASK_MOVE_CONFIRMATION) ? T_MVSTATE_ASK_CANCEL : T_MVSTATE_CANCEL; + gTasks[taskId].tLearnMoveState = (P_ASK_MOVE_CONFIRMATION) ? T_MVSTATE_ASK_CANCEL : T_MVSTATE_CANCEL; } else { diff --git a/src/international_string_util.c b/src/international_string_util.c index feba03c97f..b5a904c773 100644 --- a/src/international_string_util.c +++ b/src/international_string_util.c @@ -220,7 +220,7 @@ void FillWindowTilesByRow(int windowId, int columnStart, int rowStart, int numFi fillSize = numFillTiles * TILE_SIZE_4BPP; windowRowSize = window->window.width * TILE_SIZE_4BPP; - windowTileData = window->tileData + (rowStart * windowRowSize) + (columnStart * TILE_SIZE_4BPP); + windowTileData = (u8 *)window->tileData + (rowStart * windowRowSize) + (columnStart * TILE_SIZE_4BPP); if (numRows > 0) { for (i = numRows; i != 0; i--) diff --git a/src/item.c b/src/item.c index 6802b2272c..162798acde 100644 --- a/src/item.c +++ b/src/item.c @@ -32,6 +32,7 @@ static bool32 CheckPyramidBagHasItem(u16 itemId, u16 count); static bool32 CheckPyramidBagHasSpace(u16 itemId, u16 count); static const u8 *GetItemPluralName(u16); static bool32 DoesItemHavePluralName(u16); +static void NONNULL BagPocket_CompactItems(struct BagPocket *pocket); EWRAM_DATA struct BagPocket gBagPockets[POCKETS_COUNT] = {0}; @@ -391,6 +392,9 @@ static bool32 NONNULL BagPocket_RemoveItem(struct BagPocket *pocket, u16 itemId, } } + if (totalQuantity == count) + BagPocket_CompactItems(pocket); + Free(tempPocketSlotQuantities); return totalQuantity >= count; } diff --git a/src/item_use.c b/src/item_use.c index 5895016399..0681575f45 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -1244,8 +1244,8 @@ bool32 CannotUseItemsInBattle(u16 itemId, struct Pokemon *mon) u16 hp = GetMonData(mon, MON_DATA_HP); // Embargo Check - if ((gPartyMenu.slotId == 0 && gStatuses3[B_POSITION_PLAYER_LEFT] & STATUS3_EMBARGO) - || (gPartyMenu.slotId == 1 && gStatuses3[B_POSITION_PLAYER_RIGHT] & STATUS3_EMBARGO)) + if ((gPartyMenu.slotId == 0 && gBattleMons[B_POSITION_PLAYER_LEFT].volatiles.embargo) + || (gPartyMenu.slotId == 1 && gBattleMons[B_POSITION_PLAYER_RIGHT].volatiles.embargo)) { return TRUE; } @@ -1414,41 +1414,35 @@ void ItemUseOutOfBattle_EnigmaBerry(u8 taskId) void ItemUseOutOfBattle_FormChange(u8 taskId) { gItemUseCB = ItemUseCB_FormChange; - gTasks[taskId].data[0] = FALSE; SetUpItemUseCallback(taskId); } void ItemUseOutOfBattle_FormChange_ConsumedOnUse(u8 taskId) { gItemUseCB = ItemUseCB_FormChange_ConsumedOnUse; - gTasks[taskId].data[0] = TRUE; SetUpItemUseCallback(taskId); } void ItemUseOutOfBattle_RotomCatalog(u8 taskId) { gItemUseCB = ItemUseCB_RotomCatalog; - gTasks[taskId].data[0] = TRUE; SetUpItemUseCallback(taskId); } void ItemUseOutOfBattle_ZygardeCube(u8 taskId) { gItemUseCB = ItemUseCB_ZygardeCube; - gTasks[taskId].data[0] = TRUE; SetUpItemUseCallback(taskId); } void ItemUseOutOfBattle_Fusion(u8 taskId) { gItemUseCB = ItemUseCB_Fusion; - gTasks[taskId].data[0] = FALSE; SetUpItemUseCallback(taskId); } void Task_UseHoneyOnField(u8 taskId) { - //ResetInitialPlayerAvatarState(); StartSweetScentFieldEffect(); DestroyTask(taskId); } @@ -1459,7 +1453,6 @@ static void ItemUseOnFieldCB_Honey(u8 taskId) RemoveBagItem(gSpecialVar_ItemId, 1); CopyItemName(gSpecialVar_ItemId, gStringVar2); StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2); - gTasks[taskId].data[0] = 0; DisplayItemMessageOnField(taskId, gStringVar4, Task_UseHoneyOnField); } @@ -1544,7 +1537,7 @@ static void Task_DisplayPokeFluteMessage(u8 taskId) { if (WaitFanfare(FALSE)) { - if (gTasks[taskId].data[3] == 0) + if (!gTasks[taskId].tUsingRegisteredKeyItem) DisplayItemMessage(taskId, FONT_NORMAL, sText_PokeFluteAwakenedMon, CloseItemMessage); else DisplayItemMessageOnField(taskId, sText_PokeFluteAwakenedMon, Task_CloseCantUseKeyItemMessage); @@ -1570,14 +1563,14 @@ void ItemUseOutOfBattle_PokeFlute(u8 taskId) if (wokeSomeoneUp) { - if (gTasks[taskId].data[3] == 0) + if (!gTasks[taskId].tUsingRegisteredKeyItem) DisplayItemMessage(taskId, FONT_NORMAL, sText_PlayedPokeFlute, Task_PlayPokeFlute); else DisplayItemMessageOnField(taskId, sText_PlayedPokeFlute, Task_PlayPokeFlute); } else { - if (gTasks[taskId].data[3] == 0) + if (!gTasks[taskId].tUsingRegisteredKeyItem) DisplayItemMessage(taskId, FONT_NORMAL, sText_PlayedPokeFluteCatchy, CloseItemMessage); else DisplayItemMessageOnField(taskId, sText_PlayedPokeFluteCatchy, Task_CloseCantUseKeyItemMessage); diff --git a/src/m4a_tables.c b/src/m4a_tables.c index 6fb3b273a3..5bc1075494 100644 --- a/src/m4a_tables.c +++ b/src/m4a_tables.c @@ -261,7 +261,7 @@ const struct PokemonCrySong gPokemonCrySongTemplate = .blockCount = 0, .priority = 255, .reverb = 0, - .tone = (struct ToneData *)&voicegroup000, + .tone = (struct ToneData *)&voicegroup_dummy, .part = {NULL, NULL}, .gap = 0, .part0 = TUNE, diff --git a/src/pokemon.c b/src/pokemon.c index 62abadca7c..745c761356 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -82,7 +82,6 @@ static union PokemonSubstruct *GetSubstruct(struct BoxPokemon *boxMon, u32 perso static void EncryptBoxMon(struct BoxPokemon *boxMon); static void DecryptBoxMon(struct BoxPokemon *boxMon); static void Task_PlayMapChosenOrBattleBGM(u8 taskId); -static bool8 ShouldSkipFriendshipChange(void); void TrySpecialOverworldEvo(); EWRAM_DATA static u8 sLearningMoveTableID = 0; @@ -4896,7 +4895,6 @@ u32 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 switch (evolutions[i].method) { - case EVO_SCRIPT_TRIGGER: case EVO_SPIN: if (gSpecialVar_0x8000 == evolutions[i].param) conditionsMet = TRUE; @@ -4914,6 +4912,23 @@ u32 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 } } break; + case EVO_MODE_SCRIPT_TRIGGER: + for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++) + { + if (SanitizeSpeciesId(evolutions[i].targetSpecies) == SPECIES_NONE) + continue; + if (evolutions[i].method != EVO_SCRIPT_TRIGGER) + continue; + if (DoesMonMeetAdditionalConditions(mon, evolutions[i].params, NULL, PARTY_SIZE, canStopEvo, evoState)) + { + // All checks passed, so stop checking the rest of the evolutions. + // This is different from vanilla where the loop continues. + // If you have overlapping evolutions, put the ones you want to happen first on top of the list. + targetSpecies = evolutions[i].targetSpecies; + break; + } + } + break; } // Pikachu, Meowth, Eevee and Duraludon cannot evolve if they have the @@ -6342,7 +6357,7 @@ bool8 HasTwoFramesAnimation(u16 species) && !gTestRunnerHeadless; } -static bool8 ShouldSkipFriendshipChange(void) +bool8 ShouldSkipFriendshipChange(void) { if (gMain.inBattle && gBattleTypeFlags & (BATTLE_TYPE_FRONTIER)) return TRUE; @@ -6760,6 +6775,37 @@ void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv) } // Attempts to perform non-level/item related overworld evolutions; called by tryspecialevo command. +void TryScriptEvolution(void) +{ + u8 i; + bool32 canStopEvo = gSpecialVar_0x8001; + u16 tryMultiple = gSpecialVar_0x8002; + + for (i = 0; i < PARTY_SIZE; i++) + { + u32 targetSpecies = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_SCRIPT_TRIGGER, 0, NULL, &canStopEvo, CHECK_EVO); + + if (targetSpecies != SPECIES_NONE && !(sTriedEvolving & (1u << i))) + { + GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_SCRIPT_TRIGGER, 0, NULL, &canStopEvo, DO_EVO); + sTriedEvolving |= 1u << i; + if(gMain.callback2 == TryScriptEvolution) // This fixes small graphics glitches. + EvolutionScene(&gPlayerParty[i], targetSpecies, canStopEvo, i); + else + BeginEvolutionScene(&gPlayerParty[i], targetSpecies, canStopEvo, i); + + if (tryMultiple) + gCB2_AfterEvolution = TryScriptEvolution; + else + gCB2_AfterEvolution = CB2_ReturnToField; + return; + } + } + + sTriedEvolving = 0; + SetMainCallback2(CB2_ReturnToField); +} + void TrySpecialOverworldEvo(void) { u8 i; diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 56b3a2326c..346536c8aa 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -523,6 +523,11 @@ static void Task_HandleMonAnimation(u8 taskId) sprite->data[2] = gTasks[taskId].tSpeciesId; sprite->data[1] = 0; + // Task_HandleMonAnimation handles more than just KO animations, + // but if the counter is non-zero then only KO animations are running. + // This assumption is not checked. + if (gBattleStruct->battlerKOAnimsRunning > 0) + gBattleStruct->battlerKOAnimsRunning--; DestroyTask(taskId); } } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index b63f6d17eb..1f69af7e96 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -3765,7 +3765,7 @@ static void BufferStat(u8 *dst, u8 statIndex, u32 stat, u32 strId, u32 n) static const u8 sTextNatureNeutral[] = _("{COLOR}{01}"); u8 *txtPtr; - if (statIndex == 0 || !SUMMARY_SCREEN_NATURE_COLORS || gNaturesInfo[sMonSummaryScreen->summary.mintNature].statUp == gNaturesInfo[sMonSummaryScreen->summary.mintNature].statDown) + if (statIndex == 0 || !P_SUMMARY_SCREEN_NATURE_COLORS || gNaturesInfo[sMonSummaryScreen->summary.mintNature].statUp == gNaturesInfo[sMonSummaryScreen->summary.mintNature].statDown) txtPtr = StringCopy(dst, sTextNatureNeutral); else if (statIndex == gNaturesInfo[sMonSummaryScreen->summary.mintNature].statUp) txtPtr = StringCopy(dst, sTextNatureUp); diff --git a/src/text.c b/src/text.c index 29ffc5ea3a..8166b35302 100644 --- a/src/text.c +++ b/src/text.c @@ -427,6 +427,13 @@ void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor) u16 *current = sFontHalfRowLookupTable; + if (fgColor == sLastTextFgColor + && bgColor == sLastTextBgColor + && shadowColor == sLastTextShadowColor) + { + return; + } + sLastTextBgColor = bgColor; sLastTextFgColor = fgColor; sLastTextShadowColor = shadowColor; @@ -629,27 +636,35 @@ static u8 UNUSED GetLastTextColor(u8 colorType) } } -inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 j, u32 i, u32 *glyphPixels, s32 width, s32 height) +inline static void GLYPH_COPY(u8 *windowTiles, u32 widthOffset, u32 x0, u32 y0, u32 *glyphPixels, s32 width, s32 height) { - u32 xAdd, yAdd, pixelData, bits, toOrr, dummyX; - u8 *dst; + if (width <= 0) + return; - xAdd = j + width; - yAdd = i + height; - dummyX = j; - for (; i < yAdd; i++) + u32 widthMask = (1 << (width * 4)) - 1; + + u32 shift0 = (x0 % 8) * 4, shift8 = 32 - shift0; + + u32 *alignedWindowTilesX = (u32 *)(windowTiles + ((x0 / 8) * TILE_SIZE_4BPP)); + + u32 y1 = y0 + height; + for (u32 y = y0; y < y1; y++) { - pixelData = *glyphPixels++; - for (j = dummyX; j < xAdd; j++) - { - if ((toOrr = pixelData & 0xF)) - { - dst = windowTiles + ((j / 8) * 32) + ((j % 8) / 2) + ((i / 8) * widthOffset) + ((i % 8) * 4); - bits = ((j & 1) * 4); - *dst = (toOrr << bits) | (*dst & (0xF0 >> bits)); - } - pixelData >>= 4; - } + u32 pixels = *glyphPixels++ & widthMask; + + u32 mask = pixels; + mask = mask | (mask >> 2); + mask = mask | (mask >> 1); + mask = mask & 0x11111111; + mask = mask * 0xF; + + u32 pixels0 = pixels << shift0, pixels8 = pixels >> shift8; + u32 mask0 = mask << shift0, mask8 = mask >> shift8; + + u32 *alignedWindowTiles = (u32 *)((u8 *)alignedWindowTilesX + ((y / 8) * widthOffset) + ((y % 8) * 4)); + + alignedWindowTiles[0] = (alignedWindowTiles[0] & ~mask0) | pixels0; + alignedWindowTiles[8] = (alignedWindowTiles[8] & ~mask8) | pixels8; } } diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 15829c3bd5..1a7dc68c72 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -529,7 +529,6 @@ void ClearRematchMovementByTrainerId(void) TryGetObjectEventIdByLocalIdAndMap(objectEventTemplates[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objEventId); objectEvent = &gObjectEvents[objEventId]; - GetRandomFaceDirectionMovementType(&objectEventTemplates[i]); TryOverrideTemplateCoordsForObjectEvent(objectEvent, sFaceDirectionMovementTypeByFacingDirection[objectEvent->facingDirection]); if (gSelectedObjectEvent == objEventId) @@ -705,22 +704,11 @@ static u8 GetResponseMovementTypeFromTrainerGraphicsId(u8 graphicsId) #endif //FREE_MATCH_CALL static u16 GetTrainerFlagFromScript(const u8 *script) - /* - * The trainer flag is a little-endian short located +2 from - * the script pointer, assuming the trainerbattle command is - * first in the script. Because scripts are unaligned, and - * because the ARM processor requires shorts to be 16-bit - * aligned, this function needs to perform explicit bitwise - * operations to get the correct flag. - * - * 5c XX YY ZZ ... - * -- -- - */ { - u16 trainerFlag; - - script += 2; - trainerFlag = script[0]; + // The trainer flag is located 3 bytes (command + flags + localIdA) from the script pointer, assuming the trainerbattle command is first in the script. + // Because scripts are unaligned, and because the ARM processor requires shorts to be 16-bit aligned, this function needs to perform explicit bitwise operations to get the correct flag. + script += 3; + u16 trainerFlag = script[0]; trainerFlag |= script[1] << 8; return trainerFlag; } diff --git a/test/battle/ability/bad_dreams.c b/test/battle/ability/bad_dreams.c index 41cedf8e3e..491d5a91a2 100644 --- a/test/battle/ability/bad_dreams.c +++ b/test/battle/ability/bad_dreams.c @@ -35,6 +35,8 @@ SINGLE_BATTLE_TEST("Bad Dreams causes the sleeping enemy Pokemon to lose 1/8 of } } +TO_DO_BATTLE_TEST("Bad Dreams affects Pokémon with Comatose") + DOUBLE_BATTLE_TEST("Bad Dreams does not activate if only the partner Pokemon is sleeping") { GIVEN { @@ -57,7 +59,7 @@ DOUBLE_BATTLE_TEST("Bad Dreams does not activate if only the partner Pokemon is } } -DOUBLE_BATTLE_TEST("Bad Dreams activates for both sleeping pokemon on the player side") +DOUBLE_BATTLE_TEST("Bad Dreams activates for both sleeping Pokémon on the player side") { GIVEN { PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} diff --git a/test/battle/ability/battle_bond.c b/test/battle/ability/battle_bond.c index 401df267b6..d268536964 100644 --- a/test/battle/ability/battle_bond.c +++ b/test/battle/ability/battle_bond.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(!IsBattleMoveStatus(MOVE_WATER_GUN)); } -// Battle Bond transforms the pokemon when fainting any battler(opposing or partner), unless it's the last pokemon and the battle ends. +// Battle Bond transforms the Pokémon when fainting any battler(opposing or partner), unless it's the last Pokémon and the battle ends. SINGLE_BATTLE_TEST("Battle Bond transforms player's Greninja - Singles") { u32 monsCountPlayer, monsCountOpponent; diff --git a/test/battle/ability/cheek_pouch.c b/test/battle/ability/cheek_pouch.c index 3c932c4aa1..ffd1c8416e 100644 --- a/test/battle/ability/cheek_pouch.c +++ b/test/battle/ability/cheek_pouch.c @@ -1,6 +1,15 @@ #include "global.h" #include "test/battle.h" +TO_DO_BATTLE_TEST("Cheek Pouch restores 33% max HP") +TO_DO_BATTLE_TEST("Cheek Pouch restores HP after the berry's effect") +TO_DO_BATTLE_TEST("Cheek Pouch activates via Bug Bite/Pluck if it would trigger an effect") +TO_DO_BATTLE_TEST("Cheek Pouch activates when receiving from Fling if it would trigger an effect") +TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate when using Natural Gift") +TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate when using Fling") +TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate when using a berry from the bag") +TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate under Heal Block's effect") + SINGLE_BATTLE_TEST("Cheek Pouch activation doesn't mutate damage when restoring HP mid battle") { s16 damage; diff --git a/test/battle/ability/comatose.c b/test/battle/ability/comatose.c index d714ee5e3d..c049d5624d 100644 --- a/test/battle/ability/comatose.c +++ b/test/battle/ability/comatose.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Comatose prevents status-inducing moves") } } -SINGLE_BATTLE_TEST("Comatose may be suppressed if pokemon transformed into a pokemon with Comatose ability and was under the effects of Gastro Acid") +SINGLE_BATTLE_TEST("Comatose may be suppressed if Pokémon transformed into a Pokémon with Comatose ability and was under the effects of Gastro Acid") { u32 move; @@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Comatose may be suppressed if pokemon transformed into a pok } } -SINGLE_BATTLE_TEST("Comatose pokemon doesn't get poisoned by Toxic Spikes on switch-in") +SINGLE_BATTLE_TEST("Comatose Pokémon doesn't get poisoned by Toxic Spikes on switch-in") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Comatose pokemon doesn't get poisoned by Toxic Spikes on swi } } -SINGLE_BATTLE_TEST("Comatose pokemon don't get poisoned by Toxic Spikes on switch-in if forced in by phazing with Mold Breaker") +SINGLE_BATTLE_TEST("Comatose Pokémon don't get poisoned by Toxic Spikes on switch-in if forced in by phazing with Mold Breaker") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -87,3 +87,8 @@ SINGLE_BATTLE_TEST("Comatose pokemon don't get poisoned by Toxic Spikes on switc NOT HP_BAR(player); } } + +TO_DO_BATTLE_TEST("Comatose makes Rest fail") +TO_DO_BATTLE_TEST("Comatose isn't affected by Mold Breaker, Turboblaze or Teravolt") +TO_DO_BATTLE_TEST("Comatose isn't affected by Poison Touch + Sunsteel Strike") +TO_DO_BATTLE_TEST("Comatose boosts Dream Ball's multiplier") diff --git a/test/battle/ability/competitive.c b/test/battle/ability/competitive.c index cc3e582eab..96472fa2c9 100644 --- a/test/battle/ability/competitive.c +++ b/test/battle/ability/competitive.c @@ -1,4 +1,337 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Competitive (Ability) test titles") +DOUBLE_BATTLE_TEST("Competitive sharply raises player's Sp. Atk after Intimidate") +{ + u32 abilityLeft, abilityRight; + + PARAMETRIZE { abilityLeft = ABILITY_FRIEND_GUARD; abilityRight = ABILITY_FRIEND_GUARD; } + PARAMETRIZE { abilityLeft = ABILITY_FRIEND_GUARD; abilityRight = ABILITY_COMPETITIVE; } + PARAMETRIZE { abilityLeft = ABILITY_COMPETITIVE; abilityRight = ABILITY_FRIEND_GUARD; } + PARAMETRIZE { abilityLeft = ABILITY_COMPETITIVE; abilityRight = ABILITY_COMPETITIVE; } + + GIVEN { + PLAYER(SPECIES_IGGLYBUFF) { Ability(abilityLeft); } + PLAYER(SPECIES_JIGGLYPUFF) { Ability(abilityRight); } + OPPONENT(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SCRATCH, target:opponentLeft); MOVE(playerRight, MOVE_SCRATCH, target:opponentRight); } + } SCENE { + //1st mon Intimidate + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("The opposing Gyarados's Intimidate cuts Igglybuff's Attack!"); + if (abilityLeft == ABILITY_COMPETITIVE) { + ABILITY_POPUP(playerLeft, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("The opposing Gyarados's Intimidate cuts Jigglypuff's Attack!"); + if (abilityRight == ABILITY_COMPETITIVE) { + ABILITY_POPUP(playerRight, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Jigglypuff's Sp. Atk sharply rose!"); + } + + //2nd mon Intimidate + ABILITY_POPUP(opponentRight, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("The opposing Arbok's Intimidate cuts Igglybuff's Attack!"); + if (abilityLeft == ABILITY_COMPETITIVE) { + ABILITY_POPUP(playerLeft, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("The opposing Arbok's Intimidate cuts Jigglypuff's Attack!"); + if (abilityRight == ABILITY_COMPETITIVE) { + ABILITY_POPUP(playerRight, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Jigglypuff's Sp. Atk sharply rose!"); + } + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + (abilityLeft == ABILITY_COMPETITIVE ? 4 : 0)); + EXPECT_EQ(playerRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + (abilityRight == ABILITY_COMPETITIVE ? 4 : 0)); + } +} + +// Same as above, but for opponent. +DOUBLE_BATTLE_TEST("Competitive sharply raises opponent's Sp. Atk after Intimidate") +{ + u32 abilityLeft, abilityRight; + + PARAMETRIZE { abilityLeft = ABILITY_FRIEND_GUARD; abilityRight = ABILITY_FRIEND_GUARD; } + PARAMETRIZE { abilityLeft = ABILITY_FRIEND_GUARD; abilityRight = ABILITY_COMPETITIVE; } + PARAMETRIZE { abilityLeft = ABILITY_COMPETITIVE; abilityRight = ABILITY_FRIEND_GUARD; } + PARAMETRIZE { abilityLeft = ABILITY_COMPETITIVE; abilityRight = ABILITY_COMPETITIVE; } + + GIVEN { + OPPONENT(SPECIES_IGGLYBUFF) { Ability(abilityLeft); } + OPPONENT(SPECIES_JIGGLYPUFF) { Ability(abilityRight); } + PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } + PLAYER(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_SCRATCH, target:playerLeft); MOVE(opponentRight, MOVE_SCRATCH, target:playerRight); } + } SCENE { + //1st mon Intimidate + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Gyarados's Intimidate cuts the opposing Igglybuff's Attack!"); + if (abilityLeft == ABILITY_COMPETITIVE) { + ABILITY_POPUP(opponentLeft, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("The opposing Igglybuff's Sp. Atk sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Gyarados's Intimidate cuts the opposing Jigglypuff's Attack!"); + if (abilityRight == ABILITY_COMPETITIVE) { + ABILITY_POPUP(opponentRight, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("The opposing Jigglypuff's Sp. Atk sharply rose!"); + } + + //2nd mon Intimidate + ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Arbok's Intimidate cuts the opposing Igglybuff's Attack!"); + if (abilityLeft == ABILITY_COMPETITIVE) { + ABILITY_POPUP(opponentLeft, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("The opposing Igglybuff's Sp. Atk sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Arbok's Intimidate cuts the opposing Jigglypuff's Attack!"); + if (abilityRight == ABILITY_COMPETITIVE) { + ABILITY_POPUP(opponentRight, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("The opposing Jigglypuff's Sp. Atk sharply rose!"); + } + } THEN { + EXPECT_EQ(opponentLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + (abilityLeft == ABILITY_COMPETITIVE ? 4 : 0)); + EXPECT_EQ(opponentRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + (abilityRight == ABILITY_COMPETITIVE ? 4 : 0)); + } +} + +SINGLE_BATTLE_TEST("Competitive activates after Sticky Web lowers Speed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_STICKY_WEB); } + TURN { SWITCH(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent); + // Switch-in - Sticky Web activates + SEND_IN_MESSAGE("Igglybuff"); + MESSAGE("Igglybuff was caught in a sticky web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Speed fell!"); + // Competitive activates + ABILITY_POPUP(player, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + } +} + +SINGLE_BATTLE_TEST("Competitive doesn't activate after Sticky Web lowers Speed if Court Changed (gen8)") +{ + GIVEN { + WITH_CONFIG(GEN_CONFIG_DEFIANT_STICKY_WEB, GEN_8); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); } + TURN { SWITCH(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); + // Switch-in - Sticky Web activates + SEND_IN_MESSAGE("Igglybuff"); + MESSAGE("Igglybuff was caught in a sticky web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Speed fell!"); + // Competitive doesn't activate + NONE_OF { + ABILITY_POPUP(player, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + } + } +} + +SINGLE_BATTLE_TEST("Competitive correctly activates after Sticky Web lowers Speed if Court Changed (Gen8)") +{ + GIVEN { + WITH_CONFIG(GEN_CONFIG_DEFIANT_STICKY_WEB, GEN_8); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); } + TURN { SWITCH(player, 1); } + TURN { MOVE(opponent, MOVE_GROWL);} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); + // Switch-in - Sticky Web activates + SEND_IN_MESSAGE("Igglybuff"); + MESSAGE("Igglybuff was caught in a sticky web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Speed fell!"); + // Competitive doesn't activate + NONE_OF { + ABILITY_POPUP(player, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + } + // Competitive triggers correctly after Sticky Web + ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Attack fell!"); + ABILITY_POPUP(player, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + } +} + +DOUBLE_BATTLE_TEST("Competitive is activated by Cotton Down for non-ally pokemon") +{ + GIVEN { + PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); } + PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); } + OPPONENT(SPECIES_ELDEGOSS) { Ability(ABILITY_COTTON_DOWN); } + OPPONENT(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SCRATCH, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, playerLeft); + ABILITY_POPUP(opponentLeft, ABILITY_COTTON_DOWN); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Igglybuff's Speed fell!"); + ABILITY_POPUP(playerLeft, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Igglybuff's Speed fell!"); + ABILITY_POPUP(playerRight, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("The opposing Igglybuff's Speed fell!"); + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(playerRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 2); + EXPECT_EQ(playerRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("Competitive activates before White Herb") +{ + u32 move; + + PARAMETRIZE { move = MOVE_LEER; } + PARAMETRIZE { move = MOVE_CONFIDE; } + + GIVEN { + PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); Item(ITEM_WHITE_HERB); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + + ABILITY_POPUP(player, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + + if (move == MOVE_LEER) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Igglybuff returned its stats to normal using its White Herb!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Igglybuff returned its stats to normal using its White Herb!"); + } + } + } THEN { + if (move == MOVE_LEER) { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 2); + } else { + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + } + } +} + +SINGLE_BATTLE_TEST("Competitive activates for each stat that is lowered") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_TICKLE) == EFFECT_TICKLE); + PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TICKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TICKLE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + + MESSAGE("Igglybuff's Attack fell!"); + ABILITY_POPUP(player, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + + MESSAGE("Igglybuff's Defense fell!"); + ABILITY_POPUP(player, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + + } THEN { + EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 4); + } +} + +SINGLE_BATTLE_TEST("Competitive doesn't activate if the pokemon lowers it's own stats") +{ + u32 move; + + PARAMETRIZE { move = MOVE_SUPERPOWER; } + PARAMETRIZE { move = MOVE_CLOSE_COMBAT; } + PARAMETRIZE { move = MOVE_MAKE_IT_RAIN; } + PARAMETRIZE { move = MOVE_SPIN_OUT; } + + GIVEN { + ASSUME(MoveHasAdditionalEffectSelf(MOVE_SUPERPOWER, MOVE_EFFECT_ATK_DEF_DOWN)); + ASSUME(MoveHasAdditionalEffectSelf(MOVE_CLOSE_COMBAT, MOVE_EFFECT_DEF_SPDEF_DOWN)); + ASSUME(MoveHasAdditionalEffectSelf(MOVE_MAKE_IT_RAIN, MOVE_EFFECT_SP_ATK_MINUS_1)); + ASSUME(MoveHasAdditionalEffectSelf(MOVE_SPIN_OUT, MOVE_EFFECT_SPD_MINUS_2)); + PLAYER(SPECIES_IGGLYBUFF) { Ability(ABILITY_COMPETITIVE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + + NONE_OF { + ABILITY_POPUP(player, ABILITY_COMPETITIVE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Igglybuff's Sp. Atk sharply rose!"); + } + } THEN { + if (move == MOVE_SUPERPOWER) + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 1); + else + EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c index 633c4e8b90..c69360a1e1 100644 --- a/test/battle/ability/contrary.c +++ b/test/battle/ability/contrary.c @@ -241,3 +241,5 @@ SINGLE_BATTLE_TEST("Sticky Web raises Speed by 1 for Contrary mon on switch-in") MESSAGE("The opposing Snivy's Speed rose!"); } } + +TO_DO_BATTLE_TEST("Contrary does not invert stat changes that have been Baton-passed") diff --git a/test/battle/ability/corrosion.c b/test/battle/ability/corrosion.c index 1e589967db..ca6b602002 100644 --- a/test/battle/ability/corrosion.c +++ b/test/battle/ability/corrosion.c @@ -238,3 +238,10 @@ SINGLE_BATTLE_TEST("Corrosion's effect is lost if the move used by the Pokémon } } } + +TO_DO_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Baneful Bunker") +TO_DO_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Psycho Shift while poisoned") +TO_DO_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Fling while holding a Toxic Orb") +TO_DO_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Fling while holding a Poison Barb") +TO_DO_BATTLE_TEST("Dynamax: Corrosion can poison Poison/Steel types if the Pokémon uses G-Max Malodor") +TO_DO_BATTLE_TEST("Corrosion does not affect Poison Spikes") diff --git a/test/battle/ability/costar.c b/test/battle/ability/costar.c index 7107b00d61..3d041a8d53 100644 --- a/test/battle/ability/costar.c +++ b/test/battle/ability/costar.c @@ -28,3 +28,5 @@ DOUBLE_BATTLE_TEST("Costar copies an ally's stat stages upon entering battle") // Copy from Ruin ability tests TO_DO_BATTLE_TEST("Costar's message displays correctly after all battlers fainted - Player"); TO_DO_BATTLE_TEST("Costar's message displays correctly after all battlers fainted - Opponent"); + +TO_DO_BATTLE_TEST("Costar can copy an ally's critical hit ratio"); diff --git a/test/battle/ability/cud_chew.c b/test/battle/ability/cud_chew.c index 82e7666bdd..aca9e79447 100644 --- a/test/battle/ability/cud_chew.c +++ b/test/battle/ability/cud_chew.c @@ -47,3 +47,5 @@ SINGLE_BATTLE_TEST("Cud Chew will activate Oran Berry effect again on the next t EXPECT_EQ(opponent->hp, 40); } } + +TO_DO_BATTLE_TEST("Cud Chew will activate Lum Berry effect again on the next turn") diff --git a/test/battle/ability/cursed_body.c b/test/battle/ability/cursed_body.c index 26d97a9f11..25dbdc4b5b 100644 --- a/test/battle/ability/cursed_body.c +++ b/test/battle/ability/cursed_body.c @@ -15,3 +15,11 @@ SINGLE_BATTLE_TEST("Cursed Body triggers 30% of the time") MESSAGE("Wobbuffet's Aqua Jet was disabled by the opposing Frillish's Cursed Body!"); } } + +TO_DO_BATTLE_TEST("Cursed Body cannot disable Struggle") +TO_DO_BATTLE_TEST("Cursed Body can trigger if the attacker is behind a Substitute") +TO_DO_BATTLE_TEST("Cursed Body cannot trigger if the target is behind a Substitute") +TO_DO_BATTLE_TEST("Cursed Body does not stop a multistrike move mid-execution") +TO_DO_BATTLE_TEST("Cursed Body disables the move that called another move instead of the called move") +TO_DO_BATTLE_TEST("Cursed Body disables damaging Z-Moves, but not the base move") // Rotom Powers can restore Z-Moves +TO_DO_BATTLE_TEST("Cursed Body disables the base move of a status Z-Move") diff --git a/test/battle/ability/cute_charm.c b/test/battle/ability/cute_charm.c index 0bba66b8ac..0813296a2e 100644 --- a/test/battle/ability/cute_charm.c +++ b/test/battle/ability/cute_charm.c @@ -46,7 +46,11 @@ SINGLE_BATTLE_TEST("Cute Charm cannot infatuate same gender") } } -SINGLE_BATTLE_TEST("Cute Charm triggers 30% of the time") +TO_DO_BATTLE_TEST("Cute Charm cannot infatuate if either Pokémon are Gender-unknown") + +TO_DO_BATTLE_TEST("Cute Charm triggers 1/3 of the time (Gen 3)") + +SINGLE_BATTLE_TEST("Cute Charm triggers 30% of the time (Gen 4+)") { PASSES_RANDOMLY(3, 10, RNG_CUTE_CHARM); GIVEN { diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c index f1e28ca324..3102980378 100644 --- a/test/battle/ability/defiant.c +++ b/test/battle/ability/defiant.c @@ -51,7 +51,7 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises player's Attack after Intimidate") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); MESSAGE("Primeape's Attack sharply rose!"); } - } FINALLY { + } THEN { // -2 from Intimidates and +4 from Defiants gets +2 total EXPECT_EQ(playerLeft->statStages[STAT_ATK], (abilityLeft == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); EXPECT_EQ(playerRight->statStages[STAT_ATK], (abilityRight == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); @@ -109,7 +109,7 @@ DOUBLE_BATTLE_TEST("Defiant sharply raises opponent's Attack after Intimidate") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); MESSAGE("The opposing Primeape's Attack sharply rose!"); } - } FINALLY { + } THEN { // -2 from Intimidates and +4 from Defiants gets +2 total EXPECT_EQ(opponentLeft->statStages[STAT_ATK], (abilityLeft == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); EXPECT_EQ(opponentRight->statStages[STAT_ATK], (abilityRight == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); @@ -210,7 +210,7 @@ SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed if Court Cha } } -DOUBLE_BATTLE_TEST("Defiant is activated by Cotton Down for non-ally pokemon") +DOUBLE_BATTLE_TEST("Defiant is activated by Cotton Down for non-ally Pokémon") { GIVEN { PLAYER(SPECIES_MANKEY) { Ability(ABILITY_DEFIANT); } @@ -311,7 +311,7 @@ SINGLE_BATTLE_TEST("Defiant activates for each stat that is lowered") } } -SINGLE_BATTLE_TEST("Defiant doesn't activate if the pokemon lowers it's own stats") +SINGLE_BATTLE_TEST("Defiant doesn't activate if the Pokémon lowers it's own stats") { u32 move; diff --git a/test/battle/ability/desolate_land.c b/test/battle/ability/desolate_land.c index e058b7b514..0b99040189 100644 --- a/test/battle/ability/desolate_land.c +++ b/test/battle/ability/desolate_land.c @@ -53,7 +53,7 @@ DOUBLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves and prints th } } -SINGLE_BATTLE_TEST("Desolate Land does not block a move if pokemon is asleep and uses a Water-type move") // Sleep/confusion/paralysis all happen before the check for primal weather +SINGLE_BATTLE_TEST("Desolate Land does not block a move if Pokémon is asleep and uses a Water-type move") // Sleep/confusion/paralysis all happen before the check for primal weather { GIVEN { PLAYER(SPECIES_GROUDON) {Item(ITEM_RED_ORB);} diff --git a/test/battle/ability/flower_veil.c b/test/battle/ability/flower_veil.c index 2b36d08d60..cb72cd33ae 100644 --- a/test/battle/ability/flower_veil.c +++ b/test/battle/ability/flower_veil.c @@ -62,3 +62,5 @@ DOUBLE_BATTLE_TEST("Flower Veil prevents Toxic bad poison on partner - left targ MESSAGE("The opposing Chikorita surrounded itself with a veil of petals!"); } } + +TO_DO_BATTLE_TEST("Flower Veil's stat reduction protection considers Contrary") // Eg. If a move would reduce stats due to Contrary, it will be protected by Mist. diff --git a/test/battle/ability/frisk.c b/test/battle/ability/frisk.c index e6d7f275fb..e20d2f5205 100644 --- a/test/battle/ability/frisk.c +++ b/test/battle/ability/frisk.c @@ -1,7 +1,7 @@ #include "global.h" #include "test/battle.h" -DOUBLE_BATTLE_TEST("Frisk does not trigger when pokemon hold no items") +DOUBLE_BATTLE_TEST("Frisk does not trigger when Pokémon hold no items") { GIVEN { PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); }; diff --git a/test/battle/ability/immunity.c b/test/battle/ability/immunity.c index f1efc66004..c02a37c69a 100644 --- a/test/battle/ability/immunity.c +++ b/test/battle/ability/immunity.c @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Immunity prevents Toxic Spikes poison") } } -SINGLE_BATTLE_TEST("Immunity doesn't prevent pokemon from being poisoned by Toxic Spikes on switch-in if forced in by phazing with Mold Breaker, but it cures it immediately") +SINGLE_BATTLE_TEST("Immunity doesn't prevent Pokémon from being poisoned by Toxic Spikes on switch-in if forced in by phazing with Mold Breaker, but it cures it immediately") { GIVEN { ASSUME(GetMoveEffect(MOVE_DRAGON_TAIL) == EFFECT_HIT_SWITCH_TARGET); diff --git a/test/battle/ability/insomnia.c b/test/battle/ability/insomnia.c index 61bb1931fa..c95b294907 100644 --- a/test/battle/ability/insomnia.c +++ b/test/battle/ability/insomnia.c @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Insomnia prevents yawn") } } -SINGLE_BATTLE_TEST("Insomnia prevents rest") +SINGLE_BATTLE_TEST("Insomnia prevents Rest") { GIVEN { ASSUME(GetMoveEffect(MOVE_REST) == EFFECT_REST); diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index cefda4d1b8..c7308bfdaf 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -376,7 +376,7 @@ DOUBLE_BATTLE_TEST("Intimidate will correctly decrease the attack of the second } } -SINGLE_BATTLE_TEST("Intimdate does not lose timing after mega evolution and switch out by a hit escape move") +SINGLE_BATTLE_TEST("Intimidate does not lose timing after mega evolution and switch out by a hit escape move") { GIVEN { ASSUME(GetMoveEffect(MOVE_U_TURN) == EFFECT_HIT_ESCAPE); diff --git a/test/battle/ability/mimicry.c b/test/battle/ability/mimicry.c index 849659e953..67eab20575 100644 --- a/test/battle/ability/mimicry.c +++ b/test/battle/ability/mimicry.c @@ -70,3 +70,57 @@ SINGLE_BATTLE_TEST("Mimicry restores the battler's types when terrain is removed EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[1], TYPE_STEEL); } } + +DOUBLE_BATTLE_TEST("Mimicry can trigger multiple times in a turn") +{ + GIVEN { + PLAYER(SPECIES_STUNFISK_GALAR) { Speed(50); Ability(ABILITY_MIMICRY); } + PLAYER(SPECIES_MORELULL) { Speed(40); } + OPPONENT(SPECIES_IGGLYBUFF) { Speed(60); } + OPPONENT(SPECIES_BAGON) { Speed(70); } + } WHEN { + TURN { MOVE(opponentRight, MOVE_ELECTRIC_TERRAIN); MOVE(opponentLeft, MOVE_MISTY_TERRAIN); } + } SCENE { + MESSAGE("The opposing Bagon used Electric Terrain!"); + ABILITY_POPUP(playerLeft, ABILITY_MIMICRY); + MESSAGE("Stunfisk's type changed to Electric!"); + // igglybuff + MESSAGE("The opposing Igglybuff used Misty Terrain!"); + ABILITY_POPUP(playerLeft, ABILITY_MIMICRY); + MESSAGE("Stunfisk's type changed to Fairy!"); + } THEN { + EXPECT_EQ(gBattleMons[0].types[0], TYPE_FAIRY); + EXPECT_EQ(gBattleMons[0].types[1], TYPE_FAIRY); + EXPECT_EQ(gBattleMons[0].types[2], TYPE_MYSTERY); + } +} + +DOUBLE_BATTLE_TEST("Mimicry triggers after Skill Swap") +{ + GIVEN { + PLAYER(SPECIES_STUNFISK_GALAR) { Speed(40); Ability(ABILITY_MIMICRY); } + PLAYER(SPECIES_SHIFTRY) { Speed(50); Ability(ABILITY_CHLOROPHYLL); } + OPPONENT(SPECIES_SHUCKLE) { Speed(30); } + OPPONENT(SPECIES_CHANSEY) { Speed(20); } + } WHEN { + TURN { MOVE(playerRight, MOVE_GRASSY_TERRAIN); } + TURN { MOVE(playerRight, MOVE_SKILL_SWAP, target: playerLeft); + MOVE(playerLeft, MOVE_SPLASH); + } + } SCENE { + // turn 1 + MESSAGE("Shiftry used Grassy Terrain!"); + ABILITY_POPUP(playerLeft, ABILITY_MIMICRY); + MESSAGE("Stunfisk's type changed to Grass!"); + // turn 2 + MESSAGE("Shiftry used Skill Swap!"); + ABILITY_POPUP(playerRight, ABILITY_MIMICRY); + MESSAGE("Shiftry's type changed to Grass!"); + MESSAGE("Stunfisk used Splash!"); // make sure popup occurs before the subsequent move + } THEN { + EXPECT_EQ(playerLeft->types[0], TYPE_GRASS); + EXPECT_EQ(playerLeft->types[1], TYPE_GRASS); + EXPECT_EQ(playerRight->types[0], TYPE_GRASS); + EXPECT_EQ(playerRight->types[1], TYPE_GRASS); + } +} diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index 66d7ad5284..7d027398f3 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -1,7 +1,7 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Mirror Armor lowers a stat of the attacking pokemon") +SINGLE_BATTLE_TEST("Mirror Armor lowers a stat of the attacking Pokémon") { u16 move, statId; diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c index a39fb91df8..1dda9f7926 100644 --- a/test/battle/ability/moxie.c +++ b/test/battle/ability/moxie.c @@ -4,8 +4,8 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh raises Attack by one stage after directly causing a Pokemon to faint") { u32 species = 0, ability = 0, abilityPopUp = 0; - PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } - PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { ASSUME(GetMoveTarget(MOVE_EARTHQUAKE) == MOVE_TARGET_FOES_AND_ALLY); @@ -37,8 +37,8 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh raises Attack by one stage after direct DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger if Pokemon faint to indirect damage or damage from other Pokemon") { u32 species = 0, ability = 0, abilityPopUp = 0; - PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } - PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { PLAYER(species) { Ability(ability); } @@ -74,8 +74,8 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger if Pokemon faint to in SINGLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger when already at maximum Attack stage") { u32 species = 0, ability = 0, abilityPopUp = 0; - PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } - PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { ASSUME(GetMoveEffect(MOVE_BELLY_DRUM) == EFFECT_BELLY_DRUM); @@ -112,9 +112,9 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not increase damage done by the sa { s16 damage[2]; u32 species = 0, ability = 0, abilityPopUp = 0; - PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } - PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } - PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { ASSUME(GetMoveTarget(MOVE_EARTHQUAKE) == MOVE_TARGET_FOES_AND_ALLY); diff --git a/test/battle/ability/opportunist.c b/test/battle/ability/opportunist.c index 78de0b057f..3fac02b5b7 100644 --- a/test/battle/ability/opportunist.c +++ b/test/battle/ability/opportunist.c @@ -210,7 +210,7 @@ DOUBLE_BATTLE_TEST("Opportunist copies the stat increase of each opposing mon") } -DOUBLE_BATTLE_TEST("Opportunist copies the stat of each pokemon that were raised at the same time") +DOUBLE_BATTLE_TEST("Opportunist copies the stat of each Pokémon that were raised at the same time") { GIVEN { PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/primordial_sea.c b/test/battle/ability/primordial_sea.c index e895d8ba48..39d350d3a0 100644 --- a/test/battle/ability/primordial_sea.c +++ b/test/battle/ability/primordial_sea.c @@ -52,7 +52,7 @@ DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints th } } -SINGLE_BATTLE_TEST("Primordial Sea does not block a move if pokemon is asleep and uses a Fire-type move") // Sleep/confusion/paralysis all happen before the check for primal weather +SINGLE_BATTLE_TEST("Primordial Sea does not block a move if Pokémon is asleep and uses a Fire-type move") // Sleep/confusion/paralysis all happen before the check for primal weather { GIVEN { PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB);} @@ -63,4 +63,4 @@ SINGLE_BATTLE_TEST("Primordial Sea does not block a move if pokemon is asleep an NOT MESSAGE("The Fire-type attack fizzled out in the heavy rain!"); MESSAGE("The opposing Wobbuffet is fast asleep."); } -} \ No newline at end of file +} diff --git a/test/battle/ability/purifying_salt.c b/test/battle/ability/purifying_salt.c index 49060e6596..23f097e8aa 100644 --- a/test/battle/ability/purifying_salt.c +++ b/test/battle/ability/purifying_salt.c @@ -105,7 +105,7 @@ SINGLE_BATTLE_TEST("Purifying Salt user can't be poisoned by Toxic Spikes") } } -SINGLE_BATTLE_TEST("Purifying Salt doesn't prevent pokemon from being poisoned by Toxic Spikes on switch-in if forced in by phazing with Mold Breaker") +SINGLE_BATTLE_TEST("Purifying Salt doesn't prevent Pokémon from being poisoned by Toxic Spikes on switch-in if forced in by phazing with Mold Breaker") { GIVEN { ASSUME(GetMoveEffect(MOVE_DRAGON_TAIL) == EFFECT_HIT_SWITCH_TARGET); diff --git a/test/battle/ability/volt_absorb.c b/test/battle/ability/volt_absorb.c index 5d88cb95e4..becc76fd13 100644 --- a/test/battle/ability/volt_absorb.c +++ b/test/battle/ability/volt_absorb.c @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Volt Absorb is only triggered once on multi strike moves") } } -DOUBLE_BATTLE_TEST("Volt Absorb does not stop Electric Typed Explosion from damaging other pokemon") // Fixed issue #1961 +DOUBLE_BATTLE_TEST("Volt Absorb does not stop Electric Typed Explosion from damaging other Pokémon") // Fixed issue #1961 { s16 damage1, damage2; GIVEN { diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index 4c65a23489..4c86673473 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -661,20 +661,6 @@ AI_SINGLE_BATTLE_TEST("AI stays choice locked into moves in spite of the player' } } -AI_SINGLE_BATTLE_TEST("AI won't use Sucker Punch if it expects a move of the same priority bracket and the opponent is faster") -{ - GIVEN { - ASSUME(GetMovePriority(MOVE_QUICK_ATTACK) == 1); - ASSUME(GetMovePriority(MOVE_SUCKER_PUNCH) == 1); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_WOBBUFFET) { Speed(300); Moves(MOVE_QUICK_ATTACK); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(100); Moves(MOVE_SUCKER_PUNCH, MOVE_SCRATCH); } - } WHEN { - TURN { MOVE(player, MOVE_QUICK_ATTACK); EXPECT_MOVE(opponent, MOVE_SUCKER_PUNCH); } - TURN { MOVE(player, MOVE_QUICK_ATTACK); EXPECT_MOVE(opponent, MOVE_SCRATCH); } - } -} - AI_SINGLE_BATTLE_TEST("AI won't use Sucker Punch if it expects a status move a percentage of the time") { PASSES_RANDOMLY(SUCKER_PUNCH_CHANCE, 100, RNG_AI_SUCKER_PUNCH); @@ -1022,3 +1008,18 @@ AI_SINGLE_BATTLE_TEST("AI has a chance to prioritize last chance priority damage TURN { MOVE(player, MOVE_CELEBRATE); EXPECT_MOVE(opponent, MOVE_AQUA_JET); } } } + +AI_DOUBLE_BATTLE_TEST("AI won't be confused by player's previous priority moves when evaluating KOs") +{ + PASSES_RANDOMLY(100, 100); + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_BEAUTIFLY) { Speed(1); Moves(MOVE_DETECT, MOVE_SCRATCH); } + PLAYER(SPECIES_MASQUERAIN) { Speed(10); Moves(MOVE_DETECT, MOVE_SCRATCH); } + OPPONENT(SPECIES_CRADILY) { Speed(5); Moves(MOVE_POWER_GEM); } + OPPONENT(SPECIES_ZIGZAGOON) { Speed(4); Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_DETECT); MOVE(playerRight, MOVE_DETECT); EXPECT_MOVE(opponentLeft, MOVE_POWER_GEM, target:playerLeft); EXPECT_MOVE(opponentRight, MOVE_CELEBRATE); } + TURN { MOVE(playerLeft, MOVE_DETECT); MOVE(playerRight, MOVE_DETECT); EXPECT_MOVE(opponentLeft, MOVE_POWER_GEM, target:playerLeft); EXPECT_MOVE(opponentRight, MOVE_CELEBRATE); } + } +} diff --git a/test/battle/ai/ai_check_viability.c b/test/battle/ai/ai_check_viability.c index f18f7aceb1..4dff0e08ca 100644 --- a/test/battle/ai/ai_check_viability.c +++ b/test/battle/ai/ai_check_viability.c @@ -197,12 +197,22 @@ AI_SINGLE_BATTLE_TEST("AI chooses moves with secondary effect that have a 100% c AI_DOUBLE_BATTLE_TEST("AI chooses moves that cure self or partner") { - u32 status1_0, status1_1, partnerAbility; + u32 status1_0, status1_1, partnerAbility, move; + + PARAMETRIZE { status1_0 = STATUS1_NONE; status1_1 = STATUS1_NONE; + move = MOVE_HEAL_BELL; partnerAbility = ABILITY_SCRAPPY; } + PARAMETRIZE { status1_0 = STATUS1_TOXIC_POISON; status1_1 = STATUS1_NONE; + move = MOVE_HEAL_BELL; partnerAbility = ABILITY_SCRAPPY; } + PARAMETRIZE { status1_0 = STATUS1_NONE; status1_1 = STATUS1_PARALYSIS; + move = MOVE_HEAL_BELL; partnerAbility = ABILITY_SCRAPPY; } + PARAMETRIZE { status1_0 = STATUS1_NONE; status1_1 = STATUS1_PARALYSIS; + move = MOVE_HEAL_BELL; partnerAbility = ABILITY_SOUNDPROOF; } + + PARAMETRIZE { status1_0 = STATUS1_NONE; status1_1 = STATUS1_NONE; + move = MOVE_REFRESH; partnerAbility = ABILITY_SCRAPPY; } + PARAMETRIZE { status1_0 = STATUS1_TOXIC_POISON; status1_1 = STATUS1_NONE; + move = MOVE_REFRESH; partnerAbility = ABILITY_SCRAPPY; } - PARAMETRIZE { status1_0 = STATUS1_NONE; status1_1 = STATUS1_NONE; partnerAbility = ABILITY_SCRAPPY; } - PARAMETRIZE { status1_0 = STATUS1_TOXIC_POISON; status1_1 = STATUS1_NONE; partnerAbility = ABILITY_SCRAPPY; } - PARAMETRIZE { status1_0 = STATUS1_NONE; status1_1 = STATUS1_PARALYSIS; partnerAbility = ABILITY_SCRAPPY; } - PARAMETRIZE { status1_0 = STATUS1_NONE; status1_1 = STATUS1_PARALYSIS; partnerAbility = ABILITY_SOUNDPROOF; } GIVEN { ASSUME(GetMoveEffect(MOVE_HEAL_BELL) == EFFECT_HEAL_BELL); @@ -210,11 +220,11 @@ AI_DOUBLE_BATTLE_TEST("AI chooses moves that cure self or partner") AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_REGIROCK) { Moves(MOVE_ROCK_SLIDE, MOVE_HEAL_BELL, MOVE_ACID); Status1(status1_0); } + OPPONENT(SPECIES_REGIROCK) { Moves(MOVE_ROCK_SLIDE, move, MOVE_ACID); Status1(status1_0); } OPPONENT(SPECIES_EXPLOUD) { Status1(status1_1); Ability(partnerAbility); } } WHEN { if (status1_0 != STATUS1_NONE || (status1_1 != STATUS1_NONE && partnerAbility != ABILITY_SOUNDPROOF)) - TURN { EXPECT_MOVE(opponentLeft, MOVE_HEAL_BELL); } + TURN { EXPECT_MOVE(opponentLeft, move); } else TURN { EXPECT_MOVE(opponentLeft, MOVE_ROCK_SLIDE); } } @@ -340,6 +350,24 @@ AI_SINGLE_BATTLE_TEST("AI uses Skill Swap against Poison Heal") } } +AI_SINGLE_BATTLE_TEST("AI uses Trick Room (singles)") +{ + u32 speed; + PARAMETRIZE { speed = 10; } + PARAMETRIZE { speed = 20; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Speed(11); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(speed); Moves(MOVE_TACKLE, MOVE_TRICK_ROOM); } + } WHEN { + if (speed == 10) + TURN { EXPECT_MOVE(opponent, MOVE_TRICK_ROOM); } + else + TURN { NOT_EXPECT_MOVE(opponent, MOVE_TRICK_ROOM); } + } +} + AI_SINGLE_BATTLE_TEST("AI uses Quick Guard against Quick Attack when opponent would take poison damage") { PASSES_RANDOMLY(PREDICT_MOVE_CHANCE, 100, RNG_AI_PREDICT_MOVE); diff --git a/test/battle/ai/ai_doubles.c b/test/battle/ai/ai_doubles.c index ab6b4a4425..ff880fb2e2 100644 --- a/test/battle/ai/ai_doubles.c +++ b/test/battle/ai/ai_doubles.c @@ -594,6 +594,71 @@ AI_DOUBLE_BATTLE_TEST("AI uses Trick Room intelligently") TURN { NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } } } + +AI_DOUBLE_BATTLE_TEST("AI uses Helping Hand if it's about to die") +{ + u32 hp; + + PARAMETRIZE { hp = 1; } + PARAMETRIZE { hp = 500; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_HELPING_HAND) == EFFECT_HELPING_HAND); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); } + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET) { HP(hp); Moves(MOVE_HELPING_HAND, MOVE_MUDDY_WATER); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_MUDDY_WATER); } + } WHEN { + if (hp == 1) + TURN { EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); } + else + TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI uses Helping Hand if the ally does notably more damage") +{ + + GIVEN { + ASSUME(GetMoveEffect(MOVE_HELPING_HAND) == EFFECT_HELPING_HAND); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); } + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_HELPING_HAND, MOVE_MUD_SLAP); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_MUDDY_WATER); } + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI uses Tailwind") +{ + u32 speed1, speed2, speed3, speed4; + + PARAMETRIZE { speed1 = 20; speed2 = 20; speed3 = 20; speed4 = 20; } + PARAMETRIZE { speed1 = 20; speed2 = 20; speed3 = 5; speed4 = 5; } + PARAMETRIZE { speed1 = 20; speed2 = 20; speed3 = 15; speed4 = 15; } + PARAMETRIZE { speed1 = 1; speed2 = 1; speed3 = 5; speed4 = 5; } + PARAMETRIZE { speed1 = 1; speed2 = 20; speed3 = 15; speed4 = 15; } + PARAMETRIZE { speed1 = 1; speed2 = 20; speed3 = 20; speed4 = 15; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_AFTER_YOU) == EFFECT_AFTER_YOU); + ASSUME(GetMoveEffect(MOVE_TRICK_ROOM) == EFFECT_TRICK_ROOM); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_DOUBLE_BATTLE); + PLAYER(SPECIES_WOBBUFFET) { Speed(speed1); } + PLAYER(SPECIES_WOBBUFFET) { Speed(speed2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(speed3); Moves(MOVE_TAILWIND, MOVE_HEADBUTT); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(speed4); Moves(MOVE_TAILWIND, MOVE_HEADBUTT); } + } WHEN { + if (speed3 > 10) + TURN { EXPECT_MOVE(opponentLeft, MOVE_TAILWIND); } + else + TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TAILWIND); } + } +} + AI_DOUBLE_BATTLE_TEST("AI uses Guard Split to improve its stats") { diff --git a/test/battle/ai/ai_flag_predict_move.c b/test/battle/ai/ai_flag_predict_move.c index 97a7c12afa..6a8554b734 100644 --- a/test/battle/ai/ai_flag_predict_move.c +++ b/test/battle/ai/ai_flag_predict_move.c @@ -27,3 +27,18 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_PREDICT_MOVE: AI will still attack you when it sh TURN { MOVE(player, MOVE_SURF); EXPECT_MOVE(opponent, MOVE_LEAF_BLADE); } } } + +AI_SINGLE_BATTLE_TEST("AI won't use Sucker Punch if it expects a move of the same priority bracket and the opponent is faster") +{ + PASSES_RANDOMLY(PREDICT_MOVE_CHANCE, 100, RNG_AI_PREDICT_MOVE); + GIVEN { + ASSUME(GetMovePriority(MOVE_QUICK_ATTACK) == 1); + ASSUME(GetMovePriority(MOVE_SUCKER_PUNCH) == 1); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT | AI_FLAG_PREDICT_MOVE); + PLAYER(SPECIES_WOBBUFFET) { Speed(300); Moves(MOVE_QUICK_ATTACK); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); Moves(MOVE_SUCKER_PUNCH, MOVE_SCRATCH); } + } WHEN { + TURN { MOVE(player, MOVE_QUICK_ATTACK); EXPECT_MOVE(opponent, MOVE_SCRATCH); } + TURN { MOVE(player, MOVE_QUICK_ATTACK); EXPECT_MOVE(opponent, MOVE_SCRATCH); } + } +} diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index 79ffccc618..8db6fa9479 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -40,7 +40,7 @@ AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill") } } -AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle (all bad moves)") +AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same Pokémon for 2 spots in a double battle (all bad moves)") { u32 flags; @@ -98,7 +98,7 @@ AI_SINGLE_BATTLE_TEST("When AI switches out due to having no move that affects t } } -AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle (Wonder Guard)") +AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same Pokémon for 2 spots in a double battle (Wonder Guard)") { PASSES_RANDOMLY(SHOULD_SWITCH_WONDER_GUARD_PERCENTAGE, 100, RNG_AI_SWITCH_WONDER_GUARD); GIVEN { @@ -1385,3 +1385,18 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will consider Hidden Power wh TURN { MOVE(player, MOVE_HIDDEN_POWER); EXPECT_SWITCH(opponent, 1); } } } + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: Fake Out style moves won't confuse choiced AI into thinking it does no damage") +{ + + GIVEN { + ASSUME(gItemsInfo[ITEM_CHOICE_SCARF].holdEffect == HOLD_EFFECT_CHOICE_SCARF); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_FAKE_OUT, MOVE_SCRATCH); } + OPPONENT(SPECIES_INFERNAPE) { Item(ITEM_CHOICE_SCARF); Moves(MOVE_CLOSE_COMBAT); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_SCRATCH); } + } WHEN { + TURN { MOVE(player, MOVE_FAKE_OUT); EXPECT_MOVE(opponent, MOVE_CLOSE_COMBAT); } + TURN { MOVE(player, MOVE_SCRATCH); EXPECT_MOVE(opponent, MOVE_CLOSE_COMBAT); } + } +} diff --git a/test/battle/ai/can_use_all_moves.c b/test/battle/ai/can_use_all_moves.c new file mode 100644 index 0000000000..3bf33a98c1 --- /dev/null +++ b/test/battle/ai/can_use_all_moves.c @@ -0,0 +1,702 @@ +#include "global.h" +#include "test/battle.h" +#include "battle_ai_util.h" + +// All tests here compare the move to Splash, a move that does nothing and scores 90: the same as Thundershock on a ground type. +// The switch case for effects skips moves that have been human reviewed in three categories: something is wrong in some way; the move is equivalent to Splash for a good reason but a test is not known to exist; a test is known to exist. +// Jump to "TODO: AI HANDLING" and "TODO: AI TESTS" +// In many cases, AI handling exists but is likely insufficient in some way. + +AI_DOUBLE_BATTLE_TEST("AI uses Final Gambit") +{ + KNOWN_FAILING; + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, MOVE_FINAL_GAMBIT); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, MOVE_FINAL_GAMBIT); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI uses Guillotine") +{ + KNOWN_FAILING; + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, MOVE_GUILLOTINE); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, MOVE_GUILLOTINE); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI uses Sheer Cold") +{ + KNOWN_FAILING; + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, MOVE_SHEER_COLD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, MOVE_SHEER_COLD); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI can use all moves, 1-100") +{ + u32 moveStart = 0; + u32 moveCap = 100; + + if (moveCap > MOVES_COUNT) + moveCap = MOVES_COUNT - 1; + + s32 j; + u32 move = MOVE_NONE; + + enum BattleMoveEffects effect; + + for (j = moveStart + 1; j <= moveCap; j++) + { + effect = GetMoveEffect(j); + + // Stat raising effects are not meant to be used when you have only Splash. + if (IsStatRaisingEffect(effect)) + continue; + + switch (effect) + { + //TODO: AI HANDLING + case EFFECT_OHKO: // Guillotine is crashing the test entirely. + case EFFECT_MIST: + case EFFECT_TELEPORT: + + //TODO: AI TESTS + case EFFECT_RESTORE_HP: + case EFFECT_MIMIC: + case EFFECT_DISABLE: + + // tests exist elsewhere + + // Skipped on purpose. + case EFFECT_PROTECT: + case EFFECT_NON_VOLATILE_STATUS: + case EFFECT_DO_NOTHING: + case EFFECT_HOLD_HANDS: + case EFFECT_CELEBRATE: + case EFFECT_HAPPY_HOUR: + break; + default: + PARAMETRIZE { move = j; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_HP_AWARE | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, move); Status1(STATUS1_BURN); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, move); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, move); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI can use all moves, 101-200") +{ + u32 moveStart = 100; + u32 moveCap = 200; + + if (moveCap > MOVES_COUNT) + moveCap = MOVES_COUNT - 1; + + s32 j; + u32 move = MOVE_NONE; + + enum BattleMoveEffects effect; + + for (j = moveStart + 1; j <= moveCap; j++) + { + effect = GetMoveEffect(j); + + // Stat raising effects are not meant to be used when you have only Splash. + if (IsStatRaisingEffect(effect)) + continue; + + switch (effect) + { + //TODO: AI HANDLING + case EFFECT_LIGHT_SCREEN: + case EFFECT_REFLECT: + case EFFECT_BIDE: + case EFFECT_NIGHTMARE: + case EFFECT_SNORE: + case EFFECT_SKETCH: + case EFFECT_BELLY_DRUM: + case EFFECT_DESTINY_BOND: + case EFFECT_MIRROR_MOVE: + case EFFECT_REST: + case EFFECT_SUBSTITUTE: + + //TODO: AI TESTS + case EFFECT_RESTORE_HP: + case EFFECT_MIMIC: + case EFFECT_SOFTBOILED: + case EFFECT_DREAM_EATER: + case EFFECT_CONVERSION: + case EFFECT_PERISH_SONG: + case EFFECT_FOCUS_ENERGY: + case EFFECT_SPITE: + + // tests exist elsewhere + case EFFECT_HAZE: + + // Skipped on purpose. + case EFFECT_PROTECT: + case EFFECT_NON_VOLATILE_STATUS: + case EFFECT_DO_NOTHING: + case EFFECT_HOLD_HANDS: + case EFFECT_CELEBRATE: + case EFFECT_HAPPY_HOUR: + break; + default: + PARAMETRIZE { move = j; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_HP_AWARE | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, move); Status1(STATUS1_BURN); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, move); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, move); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI can use all moves, 201-300") +{ + u32 moveStart = 200; + u32 moveCap = 300; + + if (moveCap > MOVES_COUNT) + moveCap = MOVES_COUNT - 1; + + s32 j; + u32 move = MOVE_NONE; + + enum BattleMoveEffects effect; + + for (j = moveStart + 1; j <= moveCap; j++) + { + effect = GetMoveEffect(j); + + // Stat raising effects are not meant to be used when you have only Splash. + if (IsStatRaisingEffect(effect)) + continue; + + switch (effect) + { + //TODO: AI HANDLING + case EFFECT_SLEEP_TALK: // logic exists but does not account for Rest correctly + case EFFECT_SAFEGUARD: // logic exists but does not account for Rest correctly + case EFFECT_FOLLOW_ME: + case EFFECT_SNATCH: + case EFFECT_GRUDGE: + case EFFECT_CAMOUFLAGE: + case EFFECT_IMPRISON: + case EFFECT_INGRAIN: + case EFFECT_MAGIC_COAT: + case EFFECT_MUD_SPORT: + + //TODO: AI TESTS + case EFFECT_RESTORE_HP: + case EFFECT_SOFTBOILED: + case EFFECT_ENDURE: + case EFFECT_BATON_PASS: + case EFFECT_ENCORE: + case EFFECT_MORNING_SUN: + case EFFECT_MOONLIGHT: + case EFFECT_SYNTHESIS: + case EFFECT_SPIT_UP: + case EFFECT_SWALLOW: + case EFFECT_WISH: + case EFFECT_RECYCLE: + + // tests exist elsewhere + case EFFECT_HEAL_BELL: + case EFFECT_SUNNY_DAY: + case EFFECT_RAIN_DANCE: + case EFFECT_HAIL: + case EFFECT_ROLE_PLAY: + case EFFECT_REFRESH: + + // Skipped on purpose. + case EFFECT_PROTECT: + case EFFECT_NON_VOLATILE_STATUS: + case EFFECT_SANDSTORM: + case EFFECT_DO_NOTHING: + case EFFECT_HOLD_HANDS: + case EFFECT_CELEBRATE: + case EFFECT_HAPPY_HOUR: + break; + default: + PARAMETRIZE { move = j; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_HP_AWARE | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, move); Status1(STATUS1_BURN); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, move); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, move); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI can use all moves, 301-400") +{ + u32 moveStart = 300; + u32 moveCap = 400; + + if (moveCap > MOVES_COUNT) + moveCap = MOVES_COUNT - 1; + + s32 j; + u32 move = MOVE_NONE; + + enum BattleMoveEffects effect; + + for (j = moveStart + 1; j <= moveCap; j++) + { + effect = GetMoveEffect(j); + + // Stat raising effects are not meant to be used when you have only Splash. + if (IsStatRaisingEffect(effect)) + continue; + + switch (effect) + { + //TODO: AI HANDLING + case EFFECT_SHEER_COLD: // Guillotine is crashing the test entirely. + case EFFECT_WATER_SPORT: + case EFFECT_LUCKY_CHANT: + case EFFECT_ME_FIRST: + case EFFECT_PSYCHO_SHIFT: + case EFFECT_COPYCAT: + case EFFECT_LAST_RESORT: + case EFFECT_AQUA_RING: + case EFFECT_GRAVITY: + case EFFECT_HEALING_WISH: + + //TODO: AI TESTS + case EFFECT_RESTORE_HP: + case EFFECT_ROOST: + case EFFECT_GUARD_SWAP: + case EFFECT_POWER_SWAP: + case EFFECT_HEART_SWAP: + case EFFECT_TAILWIND: + case EFFECT_POWER_TRICK: + case EFFECT_MAGNET_RISE: + + // tests exist elsewhere + case EFFECT_HEAL_BELL: + case EFFECT_ATTACK_UP_USER_ALLY: + + // Skipped on purpose. + case EFFECT_PROTECT: + case EFFECT_NON_VOLATILE_STATUS: + case EFFECT_DO_NOTHING: + case EFFECT_HOLD_HANDS: + case EFFECT_CELEBRATE: + case EFFECT_HAPPY_HOUR: + break; + default: + PARAMETRIZE { move = j; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_HP_AWARE | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, move); Status1(STATUS1_BURN); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, move); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, move); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI can use all moves, 401-500") +{ + u32 moveStart = 400; + u32 moveCap = 500; + + if (moveCap > MOVES_COUNT) + moveCap = MOVES_COUNT - 1; + + s32 j; + u32 move = MOVE_NONE; + + enum BattleMoveEffects effect; + + for (j = moveStart + 1; j <= moveCap; j++) + { + effect = GetMoveEffect(j); + + // Stat raising effects are not meant to be used when you have only Splash. + if (IsStatRaisingEffect(effect)) + continue; + + switch (effect) + { + //TODO: AI HANDLING + case EFFECT_HEALING_WISH: + case EFFECT_WONDER_ROOM: + case EFFECT_FOLLOW_ME: + case EFFECT_MAGIC_ROOM: + case EFFECT_AFTER_YOU: + + //TODO: AI TESTS + case EFFECT_RESTORE_HP: + case EFFECT_CAPTIVATE: + + // tests exist elsewhere + case EFFECT_TRICK_ROOM: + case EFFECT_GUARD_SPLIT: + case EFFECT_POWER_SPLIT: + + // Skipped on purpose. + case EFFECT_PROTECT: + case EFFECT_NON_VOLATILE_STATUS: + case EFFECT_DO_NOTHING: + case EFFECT_HOLD_HANDS: + case EFFECT_CELEBRATE: + case EFFECT_HAPPY_HOUR: + break; + default: + PARAMETRIZE { move = j; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_HP_AWARE | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, move); Status1(STATUS1_BURN); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, move); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, move); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI can use all moves, 501-600") +{ + u32 moveStart = 515; + u32 moveCap = 600; + + if (moveCap > MOVES_COUNT) + moveCap = MOVES_COUNT - 1; + + s32 j; + u32 move = MOVE_NONE; + + enum BattleMoveEffects effect; + + for (j = moveStart + 1; j <= moveCap; j++) + { + effect = GetMoveEffect(j); + + // Stat raising effects are not meant to be used when you have only Splash. + if (IsStatRaisingEffect(effect)) + continue; + + switch (effect) + { + case EFFECT_FINAL_GAMBIT: + //TODO: AI HANDLING + case EFFECT_ALLY_SWITCH: + case EFFECT_QUASH: + case EFFECT_REFLECT_TYPE: + case EFFECT_SKY_DROP: + case EFFECT_MAT_BLOCK: + case EFFECT_ION_DELUGE: + case EFFECT_AROMATIC_MIST: + case EFFECT_POWDER: + case EFFECT_FLOWER_SHIELD: + case EFFECT_ELECTRIFY: + + //TODO: AI TESTS + case EFFECT_RESTORE_HP: + case EFFECT_HEAL_PULSE: + case EFFECT_BELCH: + case EFFECT_TOPSY_TURVY: + case EFFECT_FAIRY_LOCK: + + // tests exist elsewhere + case EFFECT_ROTOTILLER: + case EFFECT_GRASSY_TERRAIN: + case EFFECT_MISTY_TERRAIN: + + // Skipped on purpose. + case EFFECT_PROTECT: + case EFFECT_NON_VOLATILE_STATUS: + case EFFECT_DO_NOTHING: + case EFFECT_HOLD_HANDS: + case EFFECT_CELEBRATE: + case EFFECT_HAPPY_HOUR: + break; + default: + PARAMETRIZE { move = j; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_HP_AWARE | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, move); Status1(STATUS1_BURN); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, move); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, move); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI can use all moves, 601-700") +{ + u32 moveStart = 600; + u32 moveCap = 700; + + if (moveCap > MOVES_COUNT) + moveCap = MOVES_COUNT - 1; + + s32 j; + u32 move = MOVE_NONE; + + enum BattleMoveEffects effect; + + for (j = moveStart + 1; j <= moveCap; j++) + { + effect = GetMoveEffect(j); + + // Stat raising effects are not meant to be used when you have only Splash. + if (IsStatRaisingEffect(effect)) + continue; + + switch (effect) + { + //TODO: AI HANDLING + case EFFECT_MAGNETIC_FLUX: + case EFFECT_GEAR_UP: + case EFFECT_FAIL_IF_NOT_ARG_TYPE: + case EFFECT_STUFF_CHEEKS: + case EFFECT_NO_RETREAT: + case EFFECT_TEATIME: + + //TODO: AI TESTS + case EFFECT_RESTORE_HP: + case EFFECT_SHORE_UP: + case EFFECT_HEAL_PULSE: + case EFFECT_LASER_FOCUS: + case EFFECT_PURIFY: + case EFFECT_INSTRUCT: + case EFFECT_SOAK: + + // tests exist elsewhere + case EFFECT_ELECTRIC_TERRAIN: + case EFFECT_PSYCHIC_TERRAIN: + case EFFECT_AURORA_VEIL: + + // Skipped on purpose. + case EFFECT_PROTECT: + case EFFECT_NON_VOLATILE_STATUS: + case EFFECT_DO_NOTHING: + case EFFECT_HOLD_HANDS: + case EFFECT_CELEBRATE: + case EFFECT_HAPPY_HOUR: + break; + default: + PARAMETRIZE { move = j; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_HP_AWARE | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, move); Status1(STATUS1_BURN); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, move); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, move); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI can use all moves, 701-800") +{ + u32 moveStart = 700; + u32 moveCap = 800; + + if (moveCap > MOVES_COUNT) + moveCap = MOVES_COUNT - 1; + + s32 j; + u32 move = MOVE_NONE; + + enum BattleMoveEffects effect; + + for (j = moveStart + 1; j <= moveCap; j++) + { + effect = GetMoveEffect(j); + + // Stat raising effects are not meant to be used when you have only Splash. + if (IsStatRaisingEffect(effect)) + continue; + + switch (effect) + { + //TODO: AI HANDLING + case EFFECT_CLANGOROUS_SOUL: + case EFFECT_LIFE_DEW: + case EFFECT_POLTERGEIST: + case EFFECT_COACHING: + case EFFECT_REVIVAL_BLESSING: + case EFFECT_FILLET_AWAY: + + //TODO: AI TESTS + case EFFECT_RESTORE_HP: + case EFFECT_STEEL_ROLLER: + case EFFECT_JUNGLE_HEALING: + case EFFECT_POWER_TRICK: + case EFFECT_TAKE_HEART: + + // tests exist elsewhere + case EFFECT_COURT_CHANGE: + case EFFECT_DOODLE: + + // Skipped on purpose. + case EFFECT_PROTECT: + case EFFECT_NON_VOLATILE_STATUS: + case EFFECT_DO_NOTHING: + case EFFECT_HOLD_HANDS: + case EFFECT_CELEBRATE: + case EFFECT_HAPPY_HOUR: + break; + default: + PARAMETRIZE { move = j; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_HP_AWARE | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, move); Status1(STATUS1_BURN); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, move); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, move); } + } +} + +AI_DOUBLE_BATTLE_TEST("AI can use all moves, 801-900") +{ + u32 moveStart = 800; + u32 moveCap = 900; + + if (moveCap > MOVES_COUNT) + moveCap = MOVES_COUNT - 1; + + s32 j; + u32 move = MOVE_NONE; + + enum BattleMoveEffects effect; + + for (j = moveStart + 1; j <= moveCap; j++) + { + effect = GetMoveEffect(j); + + // Stat raising effects are not meant to be used when you have only Splash. + if (IsStatRaisingEffect(effect)) + continue; + + switch (effect) + { + //TODO: AI HANDLING + case EFFECT_SHED_TAIL: + case EFFECT_FAIL_IF_NOT_ARG_TYPE: + + //TODO: AI TESTS + case EFFECT_CHILLY_RECEPTION: + case EFFECT_TIDY_UP: + + // tests exist elsewhere + case EFFECT_SNOWSCAPE: + case EFFECT_DRAGON_CHEER: + + // Skipped on purpose. + case EFFECT_PROTECT: + case EFFECT_NON_VOLATILE_STATUS: + case EFFECT_DO_NOTHING: + case EFFECT_HOLD_HANDS: + case EFFECT_CELEBRATE: + case EFFECT_HAPPY_HOUR: + break; + default: + PARAMETRIZE { move = j; } + } + } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_HP_AWARE | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, move); Status1(STATUS1_BURN); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, move); Item(ITEM_STARF_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, move); } + } +} diff --git a/test/battle/ai/check_bad_move.c b/test/battle/ai/check_bad_move.c index 79b960ec60..776dcd7de2 100644 --- a/test/battle/ai/check_bad_move.c +++ b/test/battle/ai/check_bad_move.c @@ -15,6 +15,7 @@ AI_SINGLE_BATTLE_TEST("AI will not try to lower opposing stats if target is prot PARAMETRIZE { ability = ABILITY_CLEAR_BODY; species = SPECIES_BELDUM; move = MOVE_NOBLE_ROAR; } GIVEN { + WITH_CONFIG(GEN_ILLUMINATE_EFFECT, GEN_9); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_OMNISCIENT); PLAYER(species) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, move); } diff --git a/test/battle/damage_formula.c b/test/battle/damage_formula.c index 0679725510..f41f6a2145 100644 --- a/test/battle/damage_formula.c +++ b/test/battle/damage_formula.c @@ -231,23 +231,36 @@ SINGLE_BATTLE_TEST("Gem boosted Damage calculation") #define NUM_DAMAGE_SPREADS (DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO) + 1 -static const s16 sThunderShockTransistorSpread[] = { 54, 55, 56, 57, 57, 58, 59, 60, 60, 60, 61, 62, 63, 63, 64, 65 }; +static const s16 sThunderShockTransistorSpreadGen9[] = { 54, 55, 56, 57, 57, 58, 59, 60, 60, 60, 61, 62, 63, 63, 64, 65 }; +static const s16 sThunderShockTransistorSpreadGen8[] = { 63, 64, 65, 66, 66, 67, 68, 69, 69, 70, 71, 72, 72, 73, 74, 75 }; static const s16 sThunderShockRegularSpread[] = { 42, 42, 43, 43, 44, 45, 45, 45, 46, 46, 47, 48, 48, 48, 49, 50 }; -static const s16 sWildChargeTransistorSpread[] = { 123, 124, 126, 127, 129, 130, 132, 133, 135, 136, 138, 139, 141, 142, 144, 145 }; +static const s16 sWildChargeTransistorSpreadGen9[] = { 123, 124, 126, 127, 129, 130, 132, 133, 135, 136, 138, 139, 141, 142, 144, 145 }; +static const s16 sWildChargeTransistorSpreadGen8[] = { 141, 143, 145, 147, 148, 150, 151, 153, 155, 156, 158, 160, 162, 163, 165, 167 }; static const s16 sWildChargeRegularSpread[] = { 94, 96, 96, 98, 99, 100, 101, 102, 103, 105, 105, 107, 108, 109, 110, 111 }; DOUBLE_BATTLE_TEST("Transistor Damage calculation", s16 damage) { s16 expectedDamageTransistorSpec = 0, expectedDamageRegularPhys = 0, expectedDamageRegularSpec = 0, expectedDamageTransistorPhys = 0; s16 damagePlayerLeft, damagePlayerRight, damageOpponentLeft, damageOpponentRight; + u32 gen = 0; for (u32 spread = 0; spread < 16; ++spread) { - PARAMETRIZE { expectedDamageTransistorSpec = sThunderShockTransistorSpread[spread], + PARAMETRIZE { gen = GEN_9, + expectedDamageTransistorSpec = sThunderShockTransistorSpreadGen9[spread], + expectedDamageRegularSpec = sThunderShockRegularSpread[spread]; + expectedDamageTransistorPhys = sWildChargeTransistorSpreadGen9[spread], + expectedDamageRegularPhys = sWildChargeRegularSpread[spread]; + } + } + for (u32 spread = 0; spread < 16; ++spread) { + PARAMETRIZE { gen = GEN_8, + expectedDamageTransistorSpec = sThunderShockTransistorSpreadGen8[spread], expectedDamageRegularSpec = sThunderShockRegularSpread[spread], - expectedDamageTransistorPhys = sWildChargeTransistorSpread[spread], + expectedDamageTransistorPhys = sWildChargeTransistorSpreadGen8[spread], expectedDamageRegularPhys = sWildChargeRegularSpread[spread]; } } GIVEN { + WITH_CONFIG(GEN_CONFIG_TRANSISTOR_BOOST, gen); ASSUME(GetMoveType(MOVE_WILD_CHARGE) == TYPE_ELECTRIC); ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC); ASSUME(GetMoveCategory(MOVE_WILD_CHARGE) == DAMAGE_CATEGORY_PHYSICAL); @@ -260,10 +273,10 @@ DOUBLE_BATTLE_TEST("Transistor Damage calculation", s16 damage) OPPONENT(SPECIES_REGIELEKI) { Ability(ABILITY_TRANSISTOR); } } WHEN { TURN { - MOVE(playerLeft, MOVE_THUNDER_SHOCK, target: opponentLeft, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - i)); - MOVE(playerRight, MOVE_THUNDER_SHOCK, target: opponentRight, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - i)); - MOVE(opponentLeft, MOVE_WILD_CHARGE, target: playerLeft, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - i)); - MOVE(opponentRight, MOVE_WILD_CHARGE, target: playerRight, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - i)); + MOVE(playerLeft, MOVE_THUNDER_SHOCK, target: opponentLeft, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - (i % 16))); + MOVE(playerRight, MOVE_THUNDER_SHOCK, target: opponentRight, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - (i % 16))); + MOVE(opponentLeft, MOVE_WILD_CHARGE, target: playerLeft, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - (i % 16))); + MOVE(opponentRight, MOVE_WILD_CHARGE, target: playerRight, WITH_RNG(RNG_DAMAGE_MODIFIER, 15 - (i % 16))); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_SHOCK, playerLeft); diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index f9fb2e0081..8220fee053 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -601,7 +601,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon cannot use Max Guard while holdin // Almost anything that calculates damage based on HP has been changed to non-Dynamax HP. // This includes Leftovers, Life Orb, Heal Pulse, Rocky Helmet, Sandstorm, etc. etc. -// There are some redundant cases (i.e Substitute) that can never be used by a Dynamaxed pokemon. +// There are some redundant cases (i.e Substitute) that can never be used by a Dynamaxed Pokémon. // Anything that is conditional based off max HP still uses gBattleMons[battler].maxHP. // Below are some tests, but very far from all encompassing: @@ -1660,3 +1660,6 @@ SINGLE_BATTLE_TEST("Dynamax: Destiny Bond fails if a dynamaxed battler is presen MESSAGE("The move was blocked by the power of Dynamax!"); } } + +TO_DO_BATTLE_TEST("Dynamax: Contrary inverts stat-lowering Max Moves, without showing a message") +TO_DO_BATTLE_TEST("Dynamax: Contrary inverts stat-increasing Max Moves, without showing a message") diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index 441487c002..56416663ff 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -755,7 +755,7 @@ SINGLE_BATTLE_TEST("(TERA) Terapagos retains its base defensive profile when Ter } } -SINGLE_BATTLE_TEST("(TERA) Illusion breaks if the pokemon Terastallizes when illusioned as a mon that changes forms by Terastallizing") +SINGLE_BATTLE_TEST("(TERA) Illusion breaks if the Pokémon Terastallizes when illusioned as a mon that changes forms by Terastallizing") { u32 species; PARAMETRIZE { species = SPECIES_TERAPAGOS; } @@ -791,19 +791,16 @@ SINGLE_BATTLE_TEST("(TERA) Illusion doesn't break upon Terastallizing when illus } } -/* -// This test freezes the emulator -SINGLE_BATTLE_TEST("(TERA) Transformed pokemon can't Terastalize") +SINGLE_BATTLE_TEST("(TERA) Transformed Pokémon can't Terastalize") { GIVEN { - PLAYER(SPECIES_DITTO); - OPPONENT(SPECIES_TERAPAGOS) { Moves(MOVE_CELEBRATE); } + PLAYER(SPECIES_DITTO) { Moves(MOVE_TRANSFORM, MOVE_CELEBRATE); } + OPPONENT(SPECIES_TERAPAGOS) { Moves(MOVE_TRANSFORM, MOVE_CELEBRATE); } } WHEN { TURN { MOVE(player, MOVE_TRANSFORM); } TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } } } -*/ SINGLE_BATTLE_TEST("(TERA) Pokemon with Tera forms change upon Terastallizing") { diff --git a/test/battle/gimmick/zmove.c b/test/battle/gimmick/zmove.c index 97dbbf0aca..1cea196ae7 100644 --- a/test/battle/gimmick/zmove.c +++ b/test/battle/gimmick/zmove.c @@ -679,3 +679,7 @@ SINGLE_BATTLE_TEST("(Z-MOVE) Z-Revelation Dance always transforms into Breakneck ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); } } + +TO_DO_BATTLE_TEST("(Z-MOVE) Stat changes from status Z-Moves are not inverted by Contrary") +TO_DO_BATTLE_TEST("(Z-MOVE) Stat changes from Extreme Evoboost are inverted by Contrary") +TO_DO_BATTLE_TEST("(Z-MOVE) Stat changes from Clangorous Soulblaze are inverted by Contrary") diff --git a/test/battle/hold_effect/ability_shield.c b/test/battle/hold_effect/ability_shield.c index ded39ff05b..9f98ea98ef 100644 --- a/test/battle/hold_effect/ability_shield.c +++ b/test/battle/hold_effect/ability_shield.c @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Ability Shield protects against Neutralizing Gas") } } -SINGLE_BATTLE_TEST("Ability Shield protects against Mold Breaker") +SINGLE_BATTLE_TEST("Ability Shield protects against Mold Breaker (no message)") { u32 item; @@ -50,16 +50,20 @@ SINGLE_BATTLE_TEST("Ability Shield protects against Mold Breaker") TURN { MOVE(opponent, MOVE_EARTHQUAKE); } } SCENE { if (item == ITEM_ABILITY_SHIELD) { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Flygon's Ability is protected by the effects of its Ability Shield!"); + HP_BAR(player); + } ABILITY_POPUP(player, ABILITY_LEVITATE); - NOT HP_BAR(player); } else { - NOT ABILITY_POPUP(player, ABILITY_LEVITATE); HP_BAR(player); + NOT ABILITY_POPUP(player, ABILITY_LEVITATE); } } } -SINGLE_BATTLE_TEST("Ability Shield protects against Mycelium Might") +SINGLE_BATTLE_TEST("Ability Shield protects against Mycelium Might (no message)") { u32 item; @@ -79,7 +83,10 @@ SINGLE_BATTLE_TEST("Ability Shield protects against Mycelium Might") NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent); STATUS_ICON(player, sleep: TRUE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Vigoroth's Ability is protected by the effects of its Ability Shield!"); } + ABILITY_POPUP(player, ABILITY_VITAL_SPIRIT); } else { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent); STATUS_ICON(player, sleep: TRUE); @@ -87,7 +94,7 @@ SINGLE_BATTLE_TEST("Ability Shield protects against Mycelium Might") } } -SINGLE_BATTLE_TEST("Ability Shield protects against Sunsteel Strike") +SINGLE_BATTLE_TEST("Ability Shield protects against Sunsteel Strike (no message)") { u32 item; @@ -103,10 +110,38 @@ SINGLE_BATTLE_TEST("Ability Shield protects against Sunsteel Strike") } SCENE { if (item == ITEM_ABILITY_SHIELD) { NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Shedinja's Ability is protected by the effects of its Ability Shield!"); MESSAGE("Shedinja fainted!"); } + ABILITY_POPUP(player, ABILITY_WONDER_GUARD); } else { MESSAGE("Shedinja fainted!"); + NOT ABILITY_POPUP(player, ABILITY_WONDER_GUARD); + } + } +} + +SINGLE_BATTLE_TEST("Ability Shield protects the user's ability from being suppressed by Gastro Acid") +{ + u32 item; + + PARAMETRIZE { item = ITEM_ABILITY_SHIELD; } + PARAMETRIZE { item = ITEM_NONE; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_GASTRO_ACID) == EFFECT_GASTRO_ACID); + PLAYER(SPECIES_BLAZIKEN) { Ability(ABILITY_SPEED_BOOST); Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_GASTRO_ACID); } + } SCENE { + if (item == ITEM_ABILITY_SHIELD) { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_GASTRO_ACID, opponent); + ABILITY_POPUP(player, ABILITY_SPEED_BOOST); + } else { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GASTRO_ACID, opponent); + NOT ABILITY_POPUP(player, ABILITY_SPEED_BOOST); } } } @@ -130,9 +165,41 @@ SINGLE_BATTLE_TEST("Ability Shield protects against Skill Swap") ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, opponent); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Gyarados's Ability is protected by the effects of its Ability Shield!"); } else { ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, opponent); ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); } } } + +SINGLE_BATTLE_TEST("Ability Shield protects against Skill Swap even if user has Klutz") +{ + u32 item; + + PARAMETRIZE { item = ITEM_ABILITY_SHIELD; } + PARAMETRIZE { item = ITEM_NONE; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP); + PLAYER(SPECIES_LOPUNNY) { Ability(ABILITY_KLUTZ); Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SKILL_SWAP); } + } SCENE { + if (item == ITEM_ABILITY_SHIELD) { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Lopunny's Ability is protected by the effects of its Ability Shield!"); + } else { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SKILL_SWAP, opponent); + } + } +} + +// These currently do not activate, but probably should do held item animation + message +TO_DO_BATTLE_TEST("Ability Shield prevents the user's Trace from changing its ability"); +TO_DO_BATTLE_TEST("Ability Shield prevents the user's Receiver from changing its ability"); +TO_DO_BATTLE_TEST("Ability Shield protects against Wandering Spirit"); +TO_DO_BATTLE_TEST("Ability Shield protects against Mummy/Lingering Aroma"); diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c index 133eeafb41..dabf44e085 100644 --- a/test/battle/hold_effect/cure_status.c +++ b/test/battle/hold_effect/cure_status.c @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Aspear and Lum Berries cure freeze or frostbite") TURN { MOVE(player, MOVE_ICE_PUNCH); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_ICE_PUNCH, player); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + ANIMATION(ANIM_TYPE_STATUS, (B_USE_FROSTBITE ? B_ANIM_STATUS_FRB : B_ANIM_STATUS_FRZ), opponent); FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); FREEZE_OR_FROSTBURN_STATUS(opponent, FALSE); @@ -116,6 +116,8 @@ SINGLE_BATTLE_TEST("Chesto and Lum Berries cure sleep") } } +TO_DO_BATTLE_TEST("Chesto and Lum Berries don't trigger if the holder has Comatose") + SINGLE_BATTLE_TEST("Cheri and Lum Berries cure paralysis") { u16 item; @@ -158,7 +160,7 @@ SINGLE_BATTLE_TEST("Perism and Lum Berries cure confusion") } } -SINGLE_BATTLE_TEST("Berry hold effect cures status if a pokemon enters a battle") +SINGLE_BATTLE_TEST("Berry hold effect cures status if a Pokémon enters a battle") { u16 status; u16 item; @@ -289,6 +291,5 @@ DOUBLE_BATTLE_TEST("Lum Berry correctly cures all battlers if multiple fainted t EXPECT_EQ(playerLeft->status1, STATUS1_NONE); EXPECT_EQ(playerRight->status1, STATUS1_NONE); EXPECT_EQ(opponentLeft->status1, STATUS1_NONE); - } } diff --git a/test/battle/hold_effect/eject_pack.c b/test/battle/hold_effect/eject_pack.c index 39724bdffb..a4696eb8ff 100644 --- a/test/battle/hold_effect/eject_pack.c +++ b/test/battle/hold_effect/eject_pack.c @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Eject Pack does not cause the new Pokémon to lose HP due to ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Wobbuffet is switched out with the Eject Pack!"); SEND_IN_MESSAGE("Wynaut"); - NOT MESSAGE("Wynaut was hurt by its Life Orb!"); + NOT HP_BAR(player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); } } diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index a21318d246..6b5e08c450 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -455,7 +455,7 @@ SINGLE_BATTLE_TEST("Red Card does not cause the dragged out mon to lose hp due t ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); MESSAGE("The opposing Wobbuffet held up its Red Card against Wobbuffet!"); MESSAGE("Wynaut was dragged out!"); - NOT MESSAGE("Wynaut was hurt by its Life Orb!"); + NOT HP_BAR(player); } } diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c index e2d329bcf6..346e41fbfe 100644 --- a/test/battle/hold_effect/safety_goggles.c +++ b/test/battle/hold_effect/safety_goggles.c @@ -44,4 +44,32 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Sandstorm") } } -TO_DO_BATTLE_TEST("Safety Goggles blocks Effect Spore's effect"); +SINGLE_BATTLE_TEST("Safety Goggles blocks Effect Spore's effect") +{ + PASSES_RANDOMLY(100, 100, RNG_EFFECT_SPORE); + GIVEN { + ASSUME(MoveMakesContact(MOVE_SCRATCH)); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); } + OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); + + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); + MESSAGE("Wobbuffet was poisoned by the opposing Breloom's Effect Spore!"); + STATUS_ICON(player, poison: TRUE); + + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player); + MESSAGE("The opposing Breloom's Effect Spore paralyzed Wobbuffet, so it may be unable to move!"); + STATUS_ICON(player, paralysis: TRUE); + + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); + MESSAGE("The opposing Breloom's Effect Spore made Wobbuffet sleep!"); + STATUS_ICON(player, sleep: TRUE); + } + } +} diff --git a/test/battle/item_effect/increase_stat.c b/test/battle/item_effect/increase_stat.c index 3f162ea828..b56f1a2b84 100644 --- a/test/battle/item_effect/increase_stat.c +++ b/test/battle/item_effect/increase_stat.c @@ -1,5 +1,6 @@ #include "global.h" #include "test/battle.h" +#include "constants/item_effects.h" SINGLE_BATTLE_TEST("X Attack sharply raises battler's Attack stat", s16 damage) { @@ -257,3 +258,25 @@ SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Speed stat", s16 damage) } } } + +SINGLE_BATTLE_TEST("Using X items in battle raises Friendship", s16 damage) +{ + u32 startingFriendship; + u8 metLocation = MAPSEC_NONE; + PARAMETRIZE { startingFriendship = 0; } + PARAMETRIZE { startingFriendship = X_ITEM_MAX_FRIENDSHIP; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Friendship(startingFriendship); }; + // Set met location to MAPSEC_NONE to avoid getting the friendship boost + // from being met in the current map section + SetMonData(&PLAYER_PARTY[0], MON_DATA_MET_LOCATION, &metLocation); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_X_ACCURACY); MOVE(opponent, MOVE_CELEBRATE); } + } THEN { + if (startingFriendship == X_ITEM_MAX_FRIENDSHIP) + EXPECT_EQ(player->friendship, X_ITEM_MAX_FRIENDSHIP); + else + EXPECT_EQ(player->friendship, X_ITEM_FRIENDSHIP_INCREASE); + } +} diff --git a/test/battle/move.c b/test/battle/move.c index 64500bb211..f69c7b2eb4 100644 --- a/test/battle/move.c +++ b/test/battle/move.c @@ -226,7 +226,7 @@ DOUBLE_BATTLE_TEST("Moves do not fail if an alive partner is the target") } } -DOUBLE_BATTLE_TEST("Moves fail if they target into a pokemon that was fainted by the previous move") +DOUBLE_BATTLE_TEST("Moves fail if they target into a Pokémon that was fainted by the previous move") { GIVEN { ASSUME(GetMoveTarget(MOVE_HYPER_VOICE) == MOVE_TARGET_BOTH); diff --git a/test/battle/move_effect/after_you.c b/test/battle/move_effect/after_you.c index 42eb0f3ff9..222b94c7b6 100644 --- a/test/battle/move_effect/after_you.c +++ b/test/battle/move_effect/after_you.c @@ -52,7 +52,7 @@ DOUBLE_BATTLE_TEST("After You does nothing if the target has already moved") } } -DOUBLE_BATTLE_TEST("After You calculates correct turn order if only one pokemon is left on the opposing side") +DOUBLE_BATTLE_TEST("After You calculates correct turn order if only one Pokémon is left on the opposing side") { GIVEN { PLAYER(SPECIES_GRENINJA) { Speed(120); } diff --git a/test/battle/move_effect/ally_switch.c b/test/battle/move_effect/ally_switch.c index 59844879d4..e3f99cb73b 100644 --- a/test/battle/move_effect/ally_switch.c +++ b/test/battle/move_effect/ally_switch.c @@ -90,7 +90,7 @@ DOUBLE_BATTLE_TEST("Ally Switch does not redirect the target of Snipe Shot") } } -DOUBLE_BATTLE_TEST("Ally Switch does not redirect moves done by pokemon with Stalwart and Propeller Tail") +DOUBLE_BATTLE_TEST("Ally Switch does not redirect moves done by Pokémon with Stalwart and Propeller Tail") { u16 ability; PARAMETRIZE { ability = ABILITY_STALWART; } @@ -348,5 +348,63 @@ DOUBLE_BATTLE_TEST("Ally switch updates last used moves for Mimic") } } +DOUBLE_BATTLE_TEST("Ally Switch does not update leech seed battler") +{ + GIVEN { + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_SOLOSIS); + OPPONENT(SPECIES_BULBASAUR) { HP(50); MaxHP(100); } + OPPONENT(SPECIES_RALTS) { HP(50); MaxHP(100); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_LEECH_SEED, target: playerLeft); } + TURN { MOVE(opponentRight, MOVE_ALLY_SWITCH); } + TURN { ; } + } SCENE { + // turn 1 + MESSAGE("The opposing Bulbasaur used Leech Seed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_LEECH_SEED_DRAIN, playerLeft); + HP_BAR(playerLeft); + HP_BAR(opponentLeft); + + MESSAGE("The opposing Ralts used Ally Switch!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, opponentRight); + MESSAGE("The opposing Ralts and the opposing Bulbasaur switched places!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_LEECH_SEED_DRAIN, playerLeft); + HP_BAR(playerLeft); + HP_BAR(opponentLeft); // Ralts now gets hp gain + } THEN { + EXPECT_GT(opponentLeft->hp, 50); + EXPECT_GT(opponentRight->hp, 50); + } +} + +DOUBLE_BATTLE_TEST("Ally Switch updates attract battler") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(100); Gender(MON_MALE); } + PLAYER(SPECIES_SOLOSIS) { Speed(50); } + OPPONENT(SPECIES_CLEFAIRY) { Speed(20); Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM); } + OPPONENT(SPECIES_RALTS) { Speed(30); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + TURN { MOVE(opponentRight, MOVE_ALLY_SWITCH); } + TURN { ; } + } SCENE { + // turn 1 + MESSAGE("Wobbuffet used Tackle!"); + HP_BAR(opponentLeft); + ABILITY_POPUP(opponentLeft, ABILITY_CUTE_CHARM); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, playerLeft); + MESSAGE("The opposing Clefairy's Cute Charm infatuated Wobbuffet!"); + // turn 2 + MESSAGE("The opposing Ralts used Ally Switch!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ALLY_SWITCH, opponentRight); + MESSAGE("The opposing Ralts and the opposing Clefairy switched places!"); + // turn 3 + MESSAGE("Wobbuffet is in love with the opposing Clefairy!"); // tracks attract battler + } +} + // Triple Battles required to test //TO_DO_BATTLE_TEST("Ally Switch fails if the user is in the middle of the field in a Triple Battle"); diff --git a/test/battle/move_effect/beak_blast.c b/test/battle/move_effect/beak_blast.c index 75796de13a..8c28e7f8ea 100644 --- a/test/battle/move_effect/beak_blast.c +++ b/test/battle/move_effect/beak_blast.c @@ -33,7 +33,7 @@ DOUBLE_BATTLE_TEST("Beak Blast's charging message is shown before other moves ar } } -DOUBLE_BATTLE_TEST("Beak Blast burns all who make contact with the pokemon") +DOUBLE_BATTLE_TEST("Beak Blast burns all who make contact with the Pokémon") { GIVEN { ASSUME(GetMovePriority(MOVE_BEAK_BLAST) < 0); diff --git a/test/battle/move_effect/beat_up.c b/test/battle/move_effect/beat_up.c index 5e11360531..dd0d19925f 100644 --- a/test/battle/move_effect/beat_up.c +++ b/test/battle/move_effect/beat_up.c @@ -3,6 +3,7 @@ // General TO_DO_BATTLE_TEST("Beat Up hits the target for each non-fainted, non-statused member in the party"); +TO_DO_BATTLE_TEST("Beat Up doesn't consider Comatose as a status") TO_DO_BATTLE_TEST("Beat Up's strikes have each an independent chance of a critical hit"); // B_BEAT_UP Gen2-4 diff --git a/test/battle/move_effect/belly_drum.c b/test/battle/move_effect/belly_drum.c index 1580487cca..20024f5b91 100644 --- a/test/battle/move_effect/belly_drum.c +++ b/test/battle/move_effect/belly_drum.c @@ -130,6 +130,91 @@ SINGLE_BATTLE_TEST("Belly Drum minimizes the user's Attack stat with Contrary", } } -TO_DO_BATTLE_TEST("Belly Drum maximizes the user's Attack stat, even when below 0"); -TO_DO_BATTLE_TEST("Belly Drum fails if the user's Attack is already at +6, even with Contrary"); -TO_DO_BATTLE_TEST("Belly Drum deducts HP if the user has contrary and is at -6"); +SINGLE_BATTLE_TEST("Belly Drum maximizes the user's Attack stat, even when below 0", s16 damage) +{ + bool32 raiseAttack; + PARAMETRIZE { raiseAttack = FALSE; } + PARAMETRIZE { raiseAttack = TRUE; } + GIVEN { + ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseAttack) TURN { MOVE(opponent, MOVE_GROWL); MOVE(player, MOVE_BELLY_DRUM); } + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + if (raiseAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet cut its own HP and maximized its Attack!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } THEN { + if (raiseAttack) EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 6); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(4), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Belly Drum fails if the user's Attack is already at +6, even with Contrary") +{ + KNOWN_FAILING; + GIVEN { + ASSUME(GetMoveEffect(MOVE_CHARM) == EFFECT_ATTACK_DOWN_2); + PLAYER(SPECIES_SERPERIOR) { Ability(ABILITY_CONTRARY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_CHARM); } + TURN { MOVE(opponent, MOVE_CHARM); } + TURN { MOVE(opponent, MOVE_CHARM); } + TURN { MOVE(player, MOVE_BELLY_DRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Serperior's Attack sharply rose!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Serperior's Attack sharply rose!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Serperior's Attack sharply rose!"); + + MESSAGE("But it failed!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); + HP_BAR(player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + } + } +} + +SINGLE_BATTLE_TEST("Belly Drum deducts HP if the user has Contrary and is at -6") +{ + KNOWN_FAILING; + GIVEN { + ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2); + PLAYER(SPECIES_SERPERIOR) { Ability(ABILITY_CONTRARY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SWORDS_DANCE); } + TURN { MOVE(player, MOVE_SWORDS_DANCE); } + TURN { MOVE(player, MOVE_SWORDS_DANCE); } + TURN { MOVE(player, MOVE_BELLY_DRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Serperior's Attack harshly fell!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Serperior's Attack harshly fell!"); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Serperior's Attack harshly fell!"); + + NOT MESSAGE("But it failed!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + HP_BAR(player, hp: maxHP / 2); + MESSAGE("Wobbuffet cut its own HP and maximized its Attack!"); + } +} diff --git a/test/battle/move_effect/bolt_beak.c b/test/battle/move_effect/bolt_beak.c index fdd95da700..f7c11858da 100644 --- a/test/battle/move_effect/bolt_beak.c +++ b/test/battle/move_effect/bolt_beak.c @@ -1,5 +1,51 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Bolt Beak's base power is doubled if it attacks before the target"); -TO_DO_BATTLE_TEST("Bolt Beak's base power is doubled the target switches out"); +SINGLE_BATTLE_TEST("Bolt Beak's base power is doubled if it attacks before the target", s16 damage) +{ + u32 speed; + PARAMETRIZE { speed = 1; } + PARAMETRIZE { speed = 3; } + GIVEN { + ASSUME(GetMoveEffect(MOVE_BOLT_BEAK) == EFFECT_BOLT_BEAK); + PLAYER(SPECIES_DRACOZOLT) { Speed(speed); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + } WHEN { + TURN { MOVE(player, MOVE_BOLT_BEAK); } + } SCENE { + if (speed == 1) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_BOLT_BEAK, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + if (speed == 3) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + } + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Bolt Beak's base power is doubled the target switches out", s16 damage) +{ + bool32 switchOut; + PARAMETRIZE { switchOut = FALSE; } + PARAMETRIZE { switchOut = TRUE; } + GIVEN { + ASSUME(GetMoveEffect(MOVE_BOLT_BEAK) == EFFECT_BOLT_BEAK); + PLAYER(SPECIES_DRACOZOLT) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + } WHEN { + TURN { + MOVE(player, MOVE_BOLT_BEAK); + if (switchOut) + SWITCH(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BOLT_BEAK, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} diff --git a/test/battle/move_effect/counter.c b/test/battle/move_effect/counter.c index d45e75b478..ece0ea9a9f 100644 --- a/test/battle/move_effect/counter.c +++ b/test/battle/move_effect/counter.c @@ -1,6 +1,12 @@ #include "global.h" #include "test/battle.h" +ASSUMPTIONS +{ + ASSUME(GetMoveEffect(MOVE_COUNTER) == EFFECT_COUNTER); + ASSUME(GetMoveCategory(MOVE_POUND) == DAMAGE_CATEGORY_PHYSICAL); +} + SINGLE_BATTLE_TEST("Counter is not affected by Protect effects") { u32 move; @@ -38,9 +44,110 @@ SINGLE_BATTLE_TEST("Counter is not affected by Protect effects") } } -TO_DO_BATTLE_TEST("Counter will do twice as much damage received from the opponent"); -TO_DO_BATTLE_TEST("Counter cannot affect ally Pokémon"); -TO_DO_BATTLE_TEST("Counter hits the last opponent that hit the user"); //Doubles +SINGLE_BATTLE_TEST("Counter will do twice as much damage received from the opponent") +{ + s16 normalDmg; + s16 counterDmg; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_POUND); MOVE(player, MOVE_COUNTER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponent); + HP_BAR(player, captureDamage: &normalDmg); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COUNTER, player); + HP_BAR(opponent, captureDamage: &counterDmg); + } THEN { + EXPECT_MUL_EQ(normalDmg, Q_4_12(2.0), counterDmg); + } +} + +DOUBLE_BATTLE_TEST("Counter cannot affect ally Pokémon") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { + MOVE(playerLeft, MOVE_POUND, target: playerRight); + MOVE(playerRight, MOVE_COUNTER, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, playerLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_COUNTER, playerRight); + } +} + +DOUBLE_BATTLE_TEST("Counter hits the last opponent that hit the user") +{ + s16 normalDmg; + s16 counterDmg; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_POUND, target: playerLeft); + MOVE(opponentRight, MOVE_SLAM, target: playerLeft); + MOVE(playerLeft, MOVE_COUNTER); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SLAM, opponentRight); + HP_BAR(playerLeft, captureDamage: &normalDmg); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COUNTER, playerLeft); + HP_BAR(opponentRight, captureDamage: &counterDmg); + } THEN { + EXPECT_MUL_EQ(normalDmg, Q_4_12(2.0), counterDmg); + } +} + +DOUBLE_BATTLE_TEST("Counter respects Follow me") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { + MOVE(opponentRight, MOVE_FOLLOW_ME); + MOVE(opponentLeft, MOVE_POUND, target: playerLeft); + MOVE(playerLeft, MOVE_COUNTER, target: opponentLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FOLLOW_ME, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COUNTER, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Counter fails if mon that damaged counter user is no longer on the field") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_POUND, target: playerLeft); + MOVE(playerRight, MOVE_POUND, target: opponentLeft); + MOVE(playerLeft, MOVE_COUNTER, target: opponentLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, playerRight); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_COUNTER, playerLeft); + } +} // Gen 1 TO_DO_BATTLE_TEST("Counter can only counter Normal and Fighting-type moves (Gen 1)"); diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 56d38c165d..40a1fe4e86 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -217,3 +217,35 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps G-Max Vine Lash, G-Max } } } + +AI_SINGLE_BATTLE_TEST("AI uses Court Change") +{ + u32 move; + + PARAMETRIZE { move = MOVE_HEADBUTT; } + PARAMETRIZE { move = MOVE_REFLECT; } + PARAMETRIZE { move = MOVE_LIGHT_SCREEN; } + PARAMETRIZE { move = MOVE_SAFEGUARD; } + PARAMETRIZE { move = MOVE_SPIKES; } + PARAMETRIZE { move = MOVE_STEALTH_ROCK; } + PARAMETRIZE { move = MOVE_TOXIC_SPIKES; } + PARAMETRIZE { move = MOVE_TAILWIND; } + PARAMETRIZE { move = MOVE_STICKY_WEB; } + PARAMETRIZE { move = MOVE_MIST; } + PARAMETRIZE { move = MOVE_LUCKY_CHANT; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_ZIGZAGOON) { Moves(move, MOVE_CELEBRATE); } + PLAYER(SPECIES_ZIGZAGOON) { Moves(move, MOVE_CELEBRATE); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_COURT_CHANGE, MOVE_HEADBUTT); } + OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_COURT_CHANGE, MOVE_HEADBUTT); } + } WHEN { + TURN { MOVE(player, move); EXPECT_MOVE(opponent, MOVE_HEADBUTT); } + if (move == MOVE_HEADBUTT) + TURN { MOVE(player, MOVE_CELEBRATE); NOT_EXPECT_MOVE(opponent, MOVE_COURT_CHANGE); } + else + TURN { MOVE(player, MOVE_CELEBRATE); EXPECT_MOVE(opponent, MOVE_COURT_CHANGE); } + } +} + diff --git a/test/battle/move_effect/double_power_on_arg_status.c b/test/battle/move_effect/double_power_on_arg_status.c index d733d04c4f..14bfdb57af 100644 --- a/test/battle/move_effect/double_power_on_arg_status.c +++ b/test/battle/move_effect/double_power_on_arg_status.c @@ -29,6 +29,8 @@ SINGLE_BATTLE_TEST("Hex deals double damage to foes with a status", s16 damage) } } +TO_DO_BATTLE_TEST("Hex deals double damage to Pokémon with Comatose") + SINGLE_BATTLE_TEST("Venoshock's power doubles if the target is poisoned/badly poisoned", s16 damage) { u32 status1; diff --git a/test/battle/move_effect/dragon_cheer.c b/test/battle/move_effect/dragon_cheer.c index c6dfa3c4dd..a7fff9e7d5 100644 --- a/test/battle/move_effect/dragon_cheer.c +++ b/test/battle/move_effect/dragon_cheer.c @@ -103,3 +103,29 @@ DOUBLE_BATTLE_TEST("Dragon Cheer fails if critical hit stage was already increas } TO_DO_BATTLE_TEST("Baton Pass passes Dragon Cheer's effect"); + +AI_DOUBLE_BATTLE_TEST("AI uses Dragon Cheer") +{ + u32 species; + PARAMETRIZE { species = SPECIES_DRATINI; } + PARAMETRIZE { species = SPECIES_WOBBUFFET; } + + GIVEN { + ASSUME(GetSpeciesType(SPECIES_DRATINI, 0) == TYPE_DRAGON); + ASSUME(GetSpeciesType(SPECIES_WOBBUFFET, 0) != TYPE_DRAGON); + ASSUME(GetSpeciesType(SPECIES_WOBBUFFET, 1) != TYPE_DRAGON); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); } + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); } + OPPONENT(species) { Moves(MOVE_DRAGON_CHEER, MOVE_POUND); } + OPPONENT(species) { Moves(MOVE_DRAGON_CHEER, MOVE_POUND); } + } WHEN { + if (species == SPECIES_DRATINI) + TURN { EXPECT_MOVE(opponentLeft, MOVE_DRAGON_CHEER); } + else + TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_DRAGON_CHEER); } + } +} + + + diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 3e86b60b0b..4b06b92fc1 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -114,28 +114,32 @@ SINGLE_BATTLE_TEST("Embargo negates a held item's Speed reduction") } } -WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect friendship") -{ - u32 initialFriendship; - u32 finalFriendship; +// This is a useful test, but under the current circumstances, we can't actually test this without modifying +// X_ITEM_FRIENDSHIP_INCREASE. Since HOLD_EFFECT_FRIENDSHIP_UP applies a 1.5x modifier, and the stock +// Friendship increase is 1, the held item effect actually does not affect the Friendship gained. +// +// WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect friendship") +// { +// u32 initialFriendship; +// u32 finalFriendship; - KNOWN_FAILING; // Pokémon are currently not obtaining Friendship for using items in battle. - GIVEN { - ASSUME(gItemsInfo[ITEM_X_ACCURACY].battleUsage == EFFECT_ITEM_INCREASE_STAT); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SOOTHE_BELL); }; - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { USE_ITEM(player, ITEM_X_ACCURACY); } - TURN { MOVE(player, MOVE_SING); } - } SCENE { - MESSAGE("Wobbuffet used Sing!"); - MESSAGE("Wild Wobbuffet fell asleep!"); - } THEN { - initialFriendship = GetMonData(&PLAYER_PARTY[0], MON_DATA_FRIENDSHIP); - finalFriendship = GetMonData(&gPlayerParty[0], MON_DATA_FRIENDSHIP); - EXPECT_EQ(finalFriendship, initialFriendship + 2); - } -} +// KNOWN_FAILING; // Pokémon are currently not obtaining Friendship for using items in battle. +// GIVEN { +// ASSUME(gItemsInfo[ITEM_X_ACCURACY].battleUsage == EFFECT_ITEM_INCREASE_STAT); +// PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SOOTHE_BELL); }; +// OPPONENT(SPECIES_WOBBUFFET); +// } WHEN { +// TURN { USE_ITEM(player, ITEM_X_ACCURACY); } +// TURN { MOVE(player, MOVE_SING); } +// } SCENE { +// MESSAGE("Wobbuffet used Sing!"); +// MESSAGE("Wild Wobbuffet fell asleep!"); +// } THEN { +// initialFriendship = GetMonData(&PLAYER_PARTY[0], MON_DATA_FRIENDSHIP); +// finalFriendship = GetMonData(&gPlayerParty[0], MON_DATA_FRIENDSHIP); +// EXPECT_EQ(finalFriendship, initialFriendship + 2); +// } +// } SINGLE_BATTLE_TEST("Embargo doesn't block a held item's form-changing effect, but it does block its other effects", s16 damage) { diff --git a/test/battle/move_effect/facade.c b/test/battle/move_effect/facade.c index cc1e21e34f..2ed337cd1c 100644 --- a/test/battle/move_effect/facade.c +++ b/test/battle/move_effect/facade.c @@ -1,4 +1,6 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Facade (Move Effect) test titles") +TO_DO_BATTLE_TEST("Facade doubles in power when the user is Paralyzed and Poisoned") +TO_DO_BATTLE_TEST("Facade does not ignore burn's attack-halving effect, cancelling out its power (Gen3-5)") +TO_DO_BATTLE_TEST("Facade ignores burn's attack-halving effect, making it double in power (Gen3-5)") diff --git a/test/battle/move_effect/fail_if_not_arg_type.c b/test/battle/move_effect/fail_if_not_arg_type.c index 3a8cb67a2d..c1371d393d 100644 --- a/test/battle/move_effect/fail_if_not_arg_type.c +++ b/test/battle/move_effect/fail_if_not_arg_type.c @@ -32,12 +32,33 @@ SINGLE_BATTLE_TEST("Burn Up fails if the user isn't a Fire-type") } WHEN { TURN { MOVE(player, MOVE_BURN_UP); } } SCENE { - NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); } MESSAGE("Wobbuffet used Burn Up!"); + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); } MESSAGE("But it failed!"); } } +TO_DO_BATTLE_TEST("Burn Up doesn't thaw the user if it fails due to the user not being Fire-type") + +SINGLE_BATTLE_TEST("Burn Up fails if the user has Protean/Libero and is not a Fire-type") +{ + KNOWN_FAILING; + GIVEN { + WITH_CONFIG(GEN_PROTEAN_LIBERO, GEN_6); + PLAYER(SPECIES_REGIROCK); + OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_PROTEAN); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_BURN_UP); } + } SCENE { + MESSAGE("The opposing Kecleon used Burn Up!"); + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); } + MESSAGE("But it failed!"); + } +} + +TO_DO_BATTLE_TEST("(TERA) Burn Up user does not lose their Fire type if they've Terastallized into Fire type") + SINGLE_BATTLE_TEST("Burn Up user loses its Fire-type if enemy faints") { GIVEN { diff --git a/test/battle/move_effect/fairy_lock.c b/test/battle/move_effect/fairy_lock.c index a42aa6aa48..e2a941d7e7 100644 --- a/test/battle/move_effect/fairy_lock.c +++ b/test/battle/move_effect/fairy_lock.c @@ -1,4 +1,9 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Fairy Lock (Move Effect) test titles") +TO_DO_BATTLE_TEST("Fairy Lock prevents all Pokémon from switching out on their next turn") +TO_DO_BATTLE_TEST("Fairy Lock does not prevent switch out via Dragon Tail") +TO_DO_BATTLE_TEST("Fairy Lock does not prevent switch out via Whirlwind") +TO_DO_BATTLE_TEST("Fairy Lock does not prevent switch out via Eject Button") +TO_DO_BATTLE_TEST("Fairy Lock does not prevent switch out via Red Card") +TO_DO_BATTLE_TEST("Fairy Lock prevents a Pokémon from switching out on the following turn after replacing a fainted mon") diff --git a/test/battle/move_effect/false_swipe.c b/test/battle/move_effect/false_swipe.c index da2cbf6a21..3e84404067 100644 --- a/test/battle/move_effect/false_swipe.c +++ b/test/battle/move_effect/false_swipe.c @@ -1,4 +1,6 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write False Swipe (Move Effect) test titles") +TO_DO_BATTLE_TEST("False Swipe always leaves the target with at least 1 HP") +TO_DO_BATTLE_TEST("False Swipe still hits the target if it has 1 HP") // Test with Rocky Helmet or something +TO_DO_BATTLE_TEST("False Swipe does not reduce its damage when hitting a substitute") diff --git a/test/battle/move_effect/fell_stinger.c b/test/battle/move_effect/fell_stinger.c index 994cba3457..a5112fe897 100644 --- a/test/battle/move_effect/fell_stinger.c +++ b/test/battle/move_effect/fell_stinger.c @@ -1,7 +1,7 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Fell Stinger raises user's Attack by 3 stages if it faints target") +SINGLE_BATTLE_TEST("Fell Stinger raises user's Attack by 2 stages (Gen6) or 3 stages (Gen7+) if it faints target") { u32 config; diff --git a/test/battle/move_effect/fillet_away.c b/test/battle/move_effect/fillet_away.c index f9b679bfe5..70f180a700 100644 --- a/test/battle/move_effect/fillet_away.c +++ b/test/battle/move_effect/fillet_away.c @@ -72,3 +72,5 @@ SINGLE_BATTLE_TEST("Fillet Away's HP cost doesn't trigger effects that trigger o NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } + +TO_DO_BATTLE_TEST("Fillet Away fails if the user's Attack, Sp. Atk and Speed are all maxed out") diff --git a/test/battle/move_effect/final_gambit.c b/test/battle/move_effect/final_gambit.c index 5eba955b28..020e415f0a 100644 --- a/test/battle/move_effect/final_gambit.c +++ b/test/battle/move_effect/final_gambit.c @@ -72,3 +72,17 @@ SINGLE_BATTLE_TEST("Final Gambit does not faint user if target is immune") EXPECT_NE(GetMonData(&gEnemyParty[0], MON_DATA_HP), 0); } } + +TO_DO_BATTLE_TEST("Final Gambit faints the user, and the target receives damage equal to the user's HP") // User should faint before the target +TO_DO_BATTLE_TEST("Final Gambit doesn't faint the user if it misses") +TO_DO_BATTLE_TEST("Final Gambit doesn't faint the user if the target is immune") +TO_DO_BATTLE_TEST("Final Gambit doesn't faint the user if the target is protected") +TO_DO_BATTLE_TEST("Final Gambit doesn't trigger the user's Focus Band") +TO_DO_BATTLE_TEST("Final Gambit doesn't trigger the user's Focus Sash") +TO_DO_BATTLE_TEST("Final Gambit doesn't trigger the user's Sturdy") +TO_DO_BATTLE_TEST("Final Gambit triggers the target's Focus Band") +TO_DO_BATTLE_TEST("Final Gambit triggers the target's Focus Sash") +TO_DO_BATTLE_TEST("Final Gambit triggers the target's Sturdy") +TO_DO_BATTLE_TEST("Final Gambit triggers the target's Endure") +TO_DO_BATTLE_TEST("Final Gambit fails in Max Raids") +TO_DO_BATTLE_TEST("Final Gambit fails in Tera Raids") diff --git a/test/battle/move_effect/first_turn_only.c b/test/battle/move_effect/first_turn_only.c index b26245a3d9..045a84f899 100644 --- a/test/battle/move_effect/first_turn_only.c +++ b/test/battle/move_effect/first_turn_only.c @@ -1,4 +1,8 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Fake Out/First Impression (Move Effect) test titles") +TO_DO_BATTLE_TEST("Fake Out can only be used on the user's first turn") +TO_DO_BATTLE_TEST("Fake Out fails if it's called via Instruct") + +TO_DO_BATTLE_TEST("First Impression can only be used on the user's first turn") +TO_DO_BATTLE_TEST("First Impression fails if it's called via Instruct") diff --git a/test/battle/move_effect/fixed_damage_arg.c b/test/battle/move_effect/fixed_damage_arg.c index ca39ff1c83..02942ba7c7 100644 --- a/test/battle/move_effect/fixed_damage_arg.c +++ b/test/battle/move_effect/fixed_damage_arg.c @@ -27,7 +27,9 @@ SINGLE_BATTLE_TEST("Sonic Boom deals fixed damage", s16 damage) } } -SINGLE_BATTLE_TEST("Sonic Boom doesn't affect ghost types") +TO_DO_BATTLE_TEST("Sonic Boom affects ghost types (Gen1)") + +SINGLE_BATTLE_TEST("Sonic Boom doesn't affect ghost types (Gen2+)") { GIVEN { PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/flail.c b/test/battle/move_effect/flail.c index af5544d9b4..e1ba1a2e5e 100644 --- a/test/battle/move_effect/flail.c +++ b/test/battle/move_effect/flail.c @@ -1,4 +1,21 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Flail (Move Effect) test titles") +TO_DO_BATTLE_TEST("Flail has 20 power when HP is greater or equal than 68.8% (Gen2-3)") +TO_DO_BATTLE_TEST("Flail has 20 power when HP is greater or equal than 67.2% (Gen4+)") +TO_DO_BATTLE_TEST("Flail has 40 power when HP is greater or equal than 35.4% (Gen2-3)") +TO_DO_BATTLE_TEST("Flail has 40 power when HP is greater or equal than 34.4% (Gen4+)") +TO_DO_BATTLE_TEST("Flail has 80 power when HP is greater or equal than 20.8% (Gen2-3)") +TO_DO_BATTLE_TEST("Flail has 80 power when HP is greater or equal than 20.3% (Gen4+)") +TO_DO_BATTLE_TEST("Flail has 100 power when HP is greater or equal than 10.4% (Gen2-3)") +TO_DO_BATTLE_TEST("Flail has 100 power when HP is greater or equal than 9.4% (Gen4+)") +TO_DO_BATTLE_TEST("Flail has 150 power when HP is greater or equal than 4.2% (Gen2-3)") +TO_DO_BATTLE_TEST("Flail has 150 power when HP is greater or equal than 3.1% (Gen4+)") +TO_DO_BATTLE_TEST("Flail has 200 power when HP is less than 4.2% (Gen2-3)") +TO_DO_BATTLE_TEST("Flail has 200 power when HP is less than 3.1% (Gen4+)") + +TO_DO_BATTLE_TEST("Flail cannot get a Critical Hit (Gen2)") +TO_DO_BATTLE_TEST("Flail can get a Critical Hit (Gen3+)") + +TO_DO_BATTLE_TEST("Flail's damage doesn't vary by a random factor (Gen2)") +TO_DO_BATTLE_TEST("Flail's damage varies by a random factor (Gen3+)") diff --git a/test/battle/move_effect/flatter.c b/test/battle/move_effect/flatter.c index 7effb09329..d9d05a98f2 100644 --- a/test/battle/move_effect/flatter.c +++ b/test/battle/move_effect/flatter.c @@ -1,4 +1,9 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Flatter (Move Effect) test titles") +TO_DO_BATTLE_TEST("Flatter raises the target's Sp. Atk and confuses them") +TO_DO_BATTLE_TEST("Flatter raises the target's Sp. Atk even if they're already confused") +TO_DO_BATTLE_TEST("Flatter raises the target's Sp. Atk even when protected by Safeguard") +TO_DO_BATTLE_TEST("Flatter raises the target's Sp. Atk even when protected Own Tempo") +TO_DO_BATTLE_TEST("Flatter confuses the target even when they have their Sp. Atk maxed") +TO_DO_BATTLE_TEST("Flatter confuses the target even when at -6 Sp. Atk and has Contrary") diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index b98020474b..5435fbcafe 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING); } -SINGLE_BATTLE_TEST("Fling fails if pokemon holds no item") +SINGLE_BATTLE_TEST("Fling fails if Pokémon holds no item") { u16 item; @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Fling fails if pokemon holds no item") } } -SINGLE_BATTLE_TEST("Fling fails if pokemon is under the effects of Embargo or Magic Room") +SINGLE_BATTLE_TEST("Fling fails if Pokémon is under the effects of Embargo or Magic Room") { u16 move; @@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Fling fails if pokemon is under the effects of Embargo or Ma } } -SINGLE_BATTLE_TEST("Fling fails for pokemon with Klutz ability") +SINGLE_BATTLE_TEST("Fling fails for Pokémon with Klutz ability") { u16 ability; @@ -80,6 +80,9 @@ SINGLE_BATTLE_TEST("Fling fails for pokemon with Klutz ability") } } +TO_DO_BATTLE_TEST("Fling fails if the item changes the Pokémon's form") +TO_DO_BATTLE_TEST("Fling works if the item changes a Pokémon's form but not the one holding it") //Eg. non-matching Mega Stones + SINGLE_BATTLE_TEST("Fling's thrown item can be regained with Recycle") { GIVEN { @@ -150,7 +153,7 @@ SINGLE_BATTLE_TEST("Fling - Item is lost when target protects itself") } } -SINGLE_BATTLE_TEST("Fling doesn't consume the item if pokemon is asleep/frozen/paralyzed") +SINGLE_BATTLE_TEST("Fling doesn't consume the item if Pokémon is asleep/frozen/paralyzed") { u32 status; u16 item; @@ -446,14 +449,16 @@ SINGLE_BATTLE_TEST("Fling deals damage based on items fling power") PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_VENUSAURITE); } OPPONENT(SPECIES_REGIROCK); } WHEN { - TURN { MOVE(player, MOVE_CRUNCH); } TURN { MOVE(player, MOVE_FLING); } + TURN { MOVE(player, MOVE_CRUNCH); } } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_CRUNCH, player); - HP_BAR(opponent, captureDamage: &damage[0]); ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player); + HP_BAR(opponent, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CRUNCH, player); HP_BAR(opponent, captureDamage: &damage[1]); } THEN { EXPECT_EQ(damage[0], damage[1]); } } + +TO_DO_BATTLE_TEST("Fling deals damage based on a TM's move power") diff --git a/test/battle/move_effect/flower_shield.c b/test/battle/move_effect/flower_shield.c index b064b0620a..9eac08eb4d 100644 --- a/test/battle/move_effect/flower_shield.c +++ b/test/battle/move_effect/flower_shield.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(GetMoveEffect(MOVE_FLOWER_SHIELD) == EFFECT_FLOWER_SHIELD); } -DOUBLE_BATTLE_TEST("Flower Shield raises the defense of all grass type pokemon") +DOUBLE_BATTLE_TEST("Flower Shield raises the defense of all Grass-type Pokémon") { GIVEN { ASSUME(GetSpeciesType(SPECIES_TANGELA, 0) == TYPE_GRASS); @@ -35,3 +35,5 @@ DOUBLE_BATTLE_TEST("Flower Shield raises the defense of all grass type pokemon") MESSAGE("The opposing Sunflora's Defense rose!"); } } + +TO_DO_BATTLE_TEST("Flower Shield fails if there's no Grass-type Pokémon on the field") diff --git a/test/battle/move_effect/focus_energy.c b/test/battle/move_effect/focus_energy.c index 621000c4b9..48924132ef 100644 --- a/test/battle/move_effect/focus_energy.c +++ b/test/battle/move_effect/focus_energy.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Focus Energy increases the user's critical hit ratio by 1 st u32 genConfig = 0, chance = 0; for (u32 j = GEN_1; j <= GEN_9; j++) { PARAMETRIZE { genConfig = j; useFocusEnergy = FALSE; chance = j >= GEN_7 ? 24 : 16; } // ~4.16%/6.25% with Wobbuffet's base speed - PARAMETRIZE { genConfig = j; useFocusEnergy = TRUE; + PARAMETRIZE { genConfig = j; useFocusEnergy = TRUE; if (j >= GEN_6) chance = 2; // 50% / 25% else if (j >= GEN_3) @@ -39,3 +39,6 @@ SINGLE_BATTLE_TEST("Focus Energy increases the user's critical hit ratio by 1 st MESSAGE("A critical hit!"); } } + +TO_DO_BATTLE_TEST("Focus Energy fails if critical hit stage was already increased by Dragon Cheer") +TO_DO_BATTLE_TEST("Baton Pass passes Focus Energy's effect"); diff --git a/test/battle/move_effect/focus_punch.c b/test/battle/move_effect/focus_punch.c index 7696831dab..e186c094a8 100644 --- a/test/battle/move_effect/focus_punch.c +++ b/test/battle/move_effect/focus_punch.c @@ -75,6 +75,18 @@ DOUBLE_BATTLE_TEST("Focus Punch activation is based on Speed") } } +TO_DO_BATTLE_TEST("Focus Punch activates when the user's Substitute is hit"); +TO_DO_BATTLE_TEST("Focus Punch activates when the user is hit by a status move"); +TO_DO_BATTLE_TEST("Focus Punch uses PP when losing focus (Gen 3-4)"); +TO_DO_BATTLE_TEST("Focus Punch doesn't use PP when losing focus (Gen 5+)"); +TO_DO_BATTLE_TEST("Focus Punch losing focus is considered as the last move used (Gen 3-4)"); //Eg. Encore +TO_DO_BATTLE_TEST("Focus Punch losing focus is not considered as the last move used (Gen 5+)"); //Eg. Encore +TO_DO_BATTLE_TEST("Focus Punch's initial message is not considered as using the move for Zoom Lens"); +TO_DO_BATTLE_TEST("Focus Punch's initial message is not shown if the user selected a different move and was Encored into using Focus Punch"); +TO_DO_BATTLE_TEST("Focus Punch will use the selected move's priority when being Encored into Focus Punch"); +TO_DO_BATTLE_TEST("Focus Punch will lose focus if damaged when used by selecting a different move and being Encored (Gen 3-4)"); +TO_DO_BATTLE_TEST("Focus Punch will NOT lose focus if damaged when used by selecting a different move and being Encored (Gen 5+)"); + AI_SINGLE_BATTLE_TEST("AI won't use Focus Punch if it predicts a damaging move") { GIVEN { diff --git a/test/battle/move_effect/follow_me.c b/test/battle/move_effect/follow_me.c index 89591b8c6e..1acf193864 100644 --- a/test/battle/move_effect/follow_me.c +++ b/test/battle/move_effect/follow_me.c @@ -34,6 +34,19 @@ DOUBLE_BATTLE_TEST("Follow Me redirects single target moves used by opponents to } } +TO_DO_BATTLE_TEST("Follow Me doesn't redirect opponent moves that can't affect opponents") //Eg. Helping Hand +TO_DO_BATTLE_TEST("Follow Me no longer redirects if the center of attention faints mid-turn") +TO_DO_BATTLE_TEST("Follow Me can only redirect charging moves on the turn that they would hit") +TO_DO_BATTLE_TEST("Follow Me can only redirect Future Sight/Doom Desire on the turn they were selected (Gen3-5)") +TO_DO_BATTLE_TEST("Follow Me does not redirect Future Sight/Doom Desire (Gen 6+)") +TO_DO_BATTLE_TEST("Follow Me draws Electric/Water moves even if there's a Pokémon with Lightning Rod/Storm Drain") +TO_DO_BATTLE_TEST("Follow Me prioritizes the first Pokémon that used it") // There can be 2 centers of attention. If the first is gone, the 2nd is used +//TO_DO_BATTLE_TEST("Triples: Follow Me can only draw non-adjacent moves if they use a long-range move") +TO_DO_BATTLE_TEST("Follow Me can be used in Single Battles (Gen3-SwSh)") +TO_DO_BATTLE_TEST("Follow Me fails in Single Battles (BDSP+)") +TO_DO_BATTLE_TEST("Follow Me cannot redirect Sky Drop") +TO_DO_BATTLE_TEST("Follow Me does not draw attack when the user is being Sky-Dropped") + DOUBLE_BATTLE_TEST("Spotlight redirects single target moves used by the opposing side to Spotlight's target") { struct BattlePokemon *moveTarget = NULL; diff --git a/test/battle/move_effect/foresight.c b/test/battle/move_effect/foresight.c index 082e2d6fa4..59209030d0 100644 --- a/test/battle/move_effect/foresight.c +++ b/test/battle/move_effect/foresight.c @@ -1,4 +1,14 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Foresight (Move Effect) test titles") +TO_DO_BATTLE_TEST("Foresight removes Ghost's type immunity to Normal and Fighting types") +TO_DO_BATTLE_TEST("Foresight causes accuracy/evasion stat changes only between the user/target when the user's accuracy stage is less than the target's evasion stage (Gen 2)") +TO_DO_BATTLE_TEST("Foresight causes all moves against the target to ignore evasion stat changes (Gen 3)") +TO_DO_BATTLE_TEST("Foresight causes all moves against the target to ignore only positive evasion stat changes (Gen 4+)") // Eg. Doesn't ignore Sweet Scent +TO_DO_BATTLE_TEST("Foresight doesn't cause moves used against the target to always hit (Gen 2-3)") +TO_DO_BATTLE_TEST("Foresight causes moves used against the target to always hit (Gen 4+)") +TO_DO_BATTLE_TEST("Foresight does not make moves hit semi-invulnerable targets") +TO_DO_BATTLE_TEST("Foresight fails if the target is already under its effect (Gen 2 and Gen5+)") +TO_DO_BATTLE_TEST("Foresight doesn't fail if the target is already under its effect (Gen 3-4)") +TO_DO_BATTLE_TEST("Baton Pass passes Foresight's effect (Gen 2)"); +TO_DO_BATTLE_TEST("Baton Pass doesn't pass Foresight's effect (Gen 3+)"); diff --git a/test/battle/move_effect/foul_play.c b/test/battle/move_effect/foul_play.c index 7df04201ef..58af6bc4f0 100644 --- a/test/battle/move_effect/foul_play.c +++ b/test/battle/move_effect/foul_play.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(GetMoveEffect(MOVE_FOUL_PLAY) == EFFECT_FOUL_PLAY); } -SINGLE_BATTLE_TEST("Foul Play uses physical attack stat of target", s16 damage) +SINGLE_BATTLE_TEST("Foul Play uses the target's Attack stat and stat stages of target", s16 damage) { u32 move; @@ -27,3 +27,7 @@ SINGLE_BATTLE_TEST("Foul Play uses physical attack stat of target", s16 damage) EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); } } + +TO_DO_BATTLE_TEST("Foul Play uses the user's attack modifiers - Held Item") +TO_DO_BATTLE_TEST("Foul Play uses the user's attack modifiers - Ability") +TO_DO_BATTLE_TEST("Foul Play uses the user's attack modifiers - Burn") diff --git a/test/battle/move_effect/frustration.c b/test/battle/move_effect/frustration.c index eb994c5076..bc9682a954 100644 --- a/test/battle/move_effect/frustration.c +++ b/test/battle/move_effect/frustration.c @@ -1,4 +1,6 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Frustration (Move Effect) test titles") +TO_DO_BATTLE_TEST("Frustration's power increases the lower friendship of the user is") +TO_DO_BATTLE_TEST("Frustration does 0 damage at max Friendship (Gen2)") +TO_DO_BATTLE_TEST("Frustration does 1 damage at max Friendship (Gen3+)") diff --git a/test/battle/move_effect/fury_cutter.c b/test/battle/move_effect/fury_cutter.c index 10d9d8a64e..74362c6316 100644 --- a/test/battle/move_effect/fury_cutter.c +++ b/test/battle/move_effect/fury_cutter.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(GetMoveEffect(MOVE_FURY_CUTTER) == EFFECT_FURY_CUTTER); } -SINGLE_BATTLE_TEST("Fury Cutter power doubles with each use, up to 160 power") +SINGLE_BATTLE_TEST("Fury Cutter's power doubles with each use, up to 160 power") { s16 damage[6]; int turn; @@ -37,6 +37,10 @@ SINGLE_BATTLE_TEST("Fury Cutter power doubles with each use, up to 160 power") } } +TO_DO_BATTLE_TEST("Fury Cutter's power is reset if the user misses") +TO_DO_BATTLE_TEST("Fury Cutter's power is reset if the user is switched out") +TO_DO_BATTLE_TEST("Fury Cutter's power is reset if the trainer uses an item") + SINGLE_BATTLE_TEST("Fury Cutter counter is the same for both hits of Parental Bond") { s16 damage[4]; diff --git a/test/battle/move_effect/fusion_combo.c b/test/battle/move_effect/fusion_combo.c index 7561536b11..30c4508a00 100644 --- a/test/battle/move_effect/fusion_combo.c +++ b/test/battle/move_effect/fusion_combo.c @@ -1,4 +1,6 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Fusion Flare/Bolt (Move Effect) test titles") +TO_DO_BATTLE_TEST("Fusion Flare and Fusion Bolt double in power if the other move was immediately used in the same turn") +TO_DO_BATTLE_TEST("Fusion Flare and Fusion Bolt do not double in power if there was a move used in-between the two of them") +TO_DO_BATTLE_TEST("Fusion Flare and Fusion Bolt double in power if used by the same Pokémon in the same turn") // Use Instruct to replicate this diff --git a/test/battle/move_effect/future_sight.c b/test/battle/move_effect/future_sight.c index 3995e8479f..246c384a07 100644 --- a/test/battle/move_effect/future_sight.c +++ b/test/battle/move_effect/future_sight.c @@ -60,13 +60,14 @@ SINGLE_BATTLE_TEST("Future Sight is not boosted by Life Orb is original user if ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); MESSAGE("The opposing Regice took the Future Sight attack!"); HP_BAR(opponent, captureDamage: &futureSightDmg); - NOT MESSAGE("Raichu was hurt by its Life Orb!"); + NOT HP_BAR(player); } THEN { EXPECT_EQ(seedFlareDmg, futureSightDmg); } } -SINGLE_BATTLE_TEST("Future Sight receives STAB from party mon") +TO_DO_BATTLE_TEST("Future Sight does not receive STAB from party mon (Gen 2-4)") +SINGLE_BATTLE_TEST("Future Sight receives STAB from party mon (Gen 5+)") { s16 seedFlareDmg; s16 futureSightDmg; @@ -91,7 +92,8 @@ SINGLE_BATTLE_TEST("Future Sight receives STAB from party mon") } } -SINGLE_BATTLE_TEST("Future Sight is affected by type effectiveness") +TO_DO_BATTLE_TEST("Future Sight is not affected by type effectiveness (Gen 2-4)") +SINGLE_BATTLE_TEST("Future Sight is affected by type effectiveness (Gen 5+)") { GIVEN { PLAYER(SPECIES_PIKACHU); @@ -113,6 +115,9 @@ SINGLE_BATTLE_TEST("Future Sight is affected by type effectiveness") } } +TO_DO_BATTLE_TEST("Future Sight ignores Wonder Guard (Gen 2-4)") +TO_DO_BATTLE_TEST("Future Sight doesn't ignore Wonder Guard (Gen 5+)") + SINGLE_BATTLE_TEST("Future Sight will miss timing if target faints before it is about to get hit") { GIVEN { diff --git a/test/battle/move_effect/grassy_terrain.c b/test/battle/move_effect/grassy_terrain.c index 8b1895928b..2b5e166bfd 100644 --- a/test/battle/move_effect/grassy_terrain.c +++ b/test/battle/move_effect/grassy_terrain.c @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain lasts for 5 turns") } } -SINGLE_BATTLE_TEST("Grassy Terrain heals the pokemon on the field for the duration of the terrain, including last turn") +SINGLE_BATTLE_TEST("Grassy Terrain heals the Pokémon on the field for the duration of the terrain, including last turn") { GIVEN { PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/haze.c b/test/battle/move_effect/haze.c index 81a30d5796..3f530834fe 100644 --- a/test/battle/move_effect/haze.c +++ b/test/battle/move_effect/haze.c @@ -30,3 +30,6 @@ SINGLE_BATTLE_TEST("Haze resets stat changes", s16 damage) EXPECT_EQ(results[0].damage, results[1].damage); } } + +TO_DO_BATTLE_TEST("Haze resets Focus Energy (Gen 1 and 4)") +TO_DO_BATTLE_TEST("Haze doesn't reset Focus Energy (Gen 2-3 and 5+)") diff --git a/test/battle/move_effect/healing_wish.c b/test/battle/move_effect/healing_wish.c index a29b04367c..f303456a38 100644 --- a/test/battle/move_effect/healing_wish.c +++ b/test/battle/move_effect/healing_wish.c @@ -49,7 +49,7 @@ DOUBLE_BATTLE_TEST("Lunar Dance causes the user to faint and fully heals the rep } } -SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched pokemon can be healed") +SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched Pokémon can be healed") { GIVEN { ASSUME(B_HEALING_WISH_SWITCH >= GEN_8); diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c index a268f991b4..0ced64d7e5 100644 --- a/test/battle/move_effect/hit_escape.c +++ b/test/battle/move_effect/hit_escape.c @@ -159,7 +159,7 @@ SINGLE_BATTLE_TEST("Hit Escape: Held items are consumed immediately after a mon } } -SINGLE_BATTLE_TEST("Hit Escape: Electric Seed boost is received by the right pokemon after U-turn and Intimidate") +SINGLE_BATTLE_TEST("Hit Escape: Electric Seed boost is received by the right Pokémon after U-turn and Intimidate") { GIVEN { PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }; diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index 6af2409d42..3fdeadcecc 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -394,3 +394,19 @@ SINGLE_BATTLE_TEST("Knock Off doesn't remove item if it's prevented by Sticky Ho ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); } } + +SINGLE_BATTLE_TEST("Knock Off does not activate if the item was previously consumed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); } + } WHEN { + TURN { MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); + MESSAGE("The opposing Wobbuffet's Air Balloon popped!"); + NOT MESSAGE("Wobbuffet knocked off the opposing Wobbuffet's Air Balloon!"); + } THEN { + EXPECT(opponent->item == ITEM_NONE); + } +} diff --git a/test/battle/move_effect/mist.c b/test/battle/move_effect/mist.c index 332d82a6f9..dedf84cebc 100644 --- a/test/battle/move_effect/mist.c +++ b/test/battle/move_effect/mist.c @@ -2,3 +2,5 @@ #include "test/battle.h" TO_DO_BATTLE_TEST("TODO: Write Mist (Move Effect) test titles") + +TO_DO_BATTLE_TEST("Mist's protection considers Contrary") // Eg. If a move would reduce stats due to Contrary, it will be protected by Mist. diff --git a/test/battle/move_effect/nightmare.c b/test/battle/move_effect/nightmare.c index c243664f2d..4cf051ba7d 100644 --- a/test/battle/move_effect/nightmare.c +++ b/test/battle/move_effect/nightmare.c @@ -2,3 +2,5 @@ #include "test/battle.h" TO_DO_BATTLE_TEST("TODO: Write Nightmare (Move Effect) test titles") + +TO_DO_BATTLE_TEST("Nightmare affects Pokémon with Comatose") diff --git a/test/battle/move_effect/octolock.c b/test/battle/move_effect/octolock.c index 6fa1406c32..74e0b0fc4c 100644 --- a/test/battle/move_effect/octolock.c +++ b/test/battle/move_effect/octolock.c @@ -154,3 +154,28 @@ SINGLE_BATTLE_TEST("Octolock triggers Defiant for both stat reductions") MESSAGE("The opposing Bisharp's Attack sharply rose!"); } } + +SINGLE_BATTLE_TEST("Octolock ends after user that set the lock switches out") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_OCTOLOCK); } + TURN { SWITCH(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_OCTOLOCK, player); + MESSAGE("The opposing Wobbuffet can no longer escape because of Octolock!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("The opposing Wobbuffet's Defense fell!"); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("The opposing Wobbuffet's Defense fell!"); + MESSAGE("The opposing Wobbuffet's Sp. Def fell!"); + } + + } +} diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 661ae941b9..2f7cfeba5e 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -162,7 +162,7 @@ SINGLE_BATTLE_TEST("Protect: Spiky Shield does 1/8 dmg of max hp of attackers ma } } -SINGLE_BATTLE_TEST("Protect: Baneful Bunker poisons pokemon for moves making contact") +SINGLE_BATTLE_TEST("Protect: Baneful Bunker poisons Pokémon for moves making contact") { u16 usedMove = MOVE_NONE; @@ -194,7 +194,7 @@ SINGLE_BATTLE_TEST("Protect: Baneful Bunker poisons pokemon for moves making con } } -SINGLE_BATTLE_TEST("Protect: Baneful Bunker can't poison pokemon if they are already statused") +SINGLE_BATTLE_TEST("Protect: Baneful Bunker can't poison Pokémon if they are already statused") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -214,7 +214,7 @@ SINGLE_BATTLE_TEST("Protect: Baneful Bunker can't poison pokemon if they are alr } } -SINGLE_BATTLE_TEST("Protect: Burning Bulwark burns pokemon for moves making contact") +SINGLE_BATTLE_TEST("Protect: Burning Bulwark burns Pokémon for moves making contact") { u16 usedMove = MOVE_NONE; @@ -246,7 +246,7 @@ SINGLE_BATTLE_TEST("Protect: Burning Bulwark burns pokemon for moves making cont } } -SINGLE_BATTLE_TEST("Protect: Burning Bulwark can't burn pokemon if they are already statused") +SINGLE_BATTLE_TEST("Protect: Burning Bulwark can't burn Pokémon if they are already statused") { GIVEN { PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/purify.c b/test/battle/move_effect/purify.c index 134c96119f..5f1651e96f 100644 --- a/test/battle/move_effect/purify.c +++ b/test/battle/move_effect/purify.c @@ -1,4 +1,26 @@ #include "global.h" #include "test/battle.h" +AI_DOUBLE_BATTLE_TEST("AI uses Purify") +{ + u32 status1; + + PARAMETRIZE { status1 = STATUS1_NONE; } + PARAMETRIZE { status1 = STATUS1_FREEZE; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_HEADBUTT, MOVE_PURIFY); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); Moves(MOVE_HEADBUTT); } + } WHEN { + if (status1 == STATUS1_NONE) + TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_PURIFY); } + else + TURN { EXPECT_MOVE(opponentLeft, MOVE_PURIFY, target: opponentRight); } + } +} + TO_DO_BATTLE_TEST("TODO: Write Purify (Move Effect) test titles") +TO_DO_BATTLE_TEST("Purify doesn't heal HP if the target has Comatose") diff --git a/test/battle/move_effect/quash.c b/test/battle/move_effect/quash.c index 1d2f89230c..0869b45aeb 100644 --- a/test/battle/move_effect/quash.c +++ b/test/battle/move_effect/quash.c @@ -44,7 +44,7 @@ DOUBLE_BATTLE_TEST("Quash is not affected by dynamic speed") } } -DOUBLE_BATTLE_TEST("Quash calculates correct turn order if only one pokemon is left on the opposing side") +DOUBLE_BATTLE_TEST("Quash calculates correct turn order if only one Pokémon is left on the opposing side") { GIVEN { PLAYER(SPECIES_GRENINJA) { Speed(120); } diff --git a/test/battle/move_effect/rage_fist.c b/test/battle/move_effect/rage_fist.c index e803a05a9d..ba8fcecc06 100644 --- a/test/battle/move_effect/rage_fist.c +++ b/test/battle/move_effect/rage_fist.c @@ -342,3 +342,28 @@ SINGLE_BATTLE_TEST("Rage Fist doesn't get increased power if Substitute is hit") EXPECT_EQ(timesGotHit[0], timesGotHit[1]); } } + +SINGLE_BATTLE_TEST("Rage Fist - X") +{ + s16 timesGotHit[2]; + + GIVEN { + ASSUME(GetMoveEffect(MOVE_GIGA_DRAIN) == EFFECT_ABSORB); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RAGE_FIST); MOVE(opponent, MOVE_GIGA_DRAIN); } + TURN { MOVE(player, MOVE_RAGE_FIST); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, player); + HP_BAR(opponent, captureDamage: ×GotHit[0]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_GIGA_DRAIN, opponent); + HP_BAR(player); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, player); + HP_BAR(opponent, captureDamage: ×GotHit[1]); + } THEN { + EXPECT_MUL_EQ(timesGotHit[0], Q_4_12(2.0), timesGotHit[1]); + } +} diff --git a/test/battle/move_effect/return.c b/test/battle/move_effect/return.c index 50945ca556..2a2614200d 100644 --- a/test/battle/move_effect/return.c +++ b/test/battle/move_effect/return.c @@ -1,4 +1,6 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Return (Move Effect) test titles") +TO_DO_BATTLE_TEST("Return's power increases the higher friendship of the user is") +TO_DO_BATTLE_TEST("Return does 0 damage at min Friendship (Gen2)") +TO_DO_BATTLE_TEST("Return does 1 damage at min Friendship (Gen3+)") diff --git a/test/battle/move_effect/rototiller.c b/test/battle/move_effect/rototiller.c index 73ad6c9c85..b86228a3f1 100644 --- a/test/battle/move_effect/rototiller.c +++ b/test/battle/move_effect/rototiller.c @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Rototiller fails if there are no valid targets") } } -SINGLE_BATTLE_TEST("Rototiller doesn't affect pokemon that are semi-invulnerable") +SINGLE_BATTLE_TEST("Rototiller doesn't affect Pokémon that are semi-invulnerable") { GIVEN { ASSUME(GetSpeciesType(SPECIES_TANGELA, 0) == TYPE_GRASS); @@ -96,3 +96,19 @@ SINGLE_BATTLE_TEST("Rototiller fails if the only valid target is semi-invulnerab EXPECT_EQ(opponent->statStages[STAT_SPATK], DEFAULT_STAT_STAGE); } } + +AI_DOUBLE_BATTLE_TEST("AI uses Rototiller") +{ + GIVEN { + ASSUME(GetSpeciesType(SPECIES_TANGELA, 0) == TYPE_GRASS); + ASSUME(GetSpeciesType(SPECIES_WOBBUFFET, 0) != TYPE_GRASS); + ASSUME(GetSpeciesType(SPECIES_WOBBUFFET, 1) != TYPE_GRASS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); } + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); } + OPPONENT(SPECIES_TANGELA) { Moves(MOVE_ROTOTILLER, MOVE_POUND); } + OPPONENT(SPECIES_TANGELA); + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, MOVE_ROTOTILLER); } + } +} diff --git a/test/battle/move_effect/round.c b/test/battle/move_effect/round.c index 0bac324b0f..985822d46d 100644 --- a/test/battle/move_effect/round.c +++ b/test/battle/move_effect/round.c @@ -94,7 +94,7 @@ DOUBLE_BATTLE_TEST("Round still preserves the turn order outside of the other Ro } } -DOUBLE_BATTLE_TEST("Round causes opposing pokemon to use Round immediately") +DOUBLE_BATTLE_TEST("Round causes opposing Pokémon to use Round immediately") { GIVEN { ASSUME(gItemsInfo[ITEM_LAGGING_TAIL].holdEffect == HOLD_EFFECT_LAGGING_TAIL); diff --git a/test/battle/move_effect/shed_tail.c b/test/battle/move_effect/shed_tail.c index 491c7b3552..ba284f0c0d 100644 --- a/test/battle/move_effect/shed_tail.c +++ b/test/battle/move_effect/shed_tail.c @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Shed Tail's HP cost can trigger a berry before the user swit } } -SINGLE_BATTLE_TEST("Shed Tail fails if there are no usable pokemon left") +SINGLE_BATTLE_TEST("Shed Tail fails if there are no usable Pokémon left") { GIVEN { PLAYER(SPECIES_WOBBUFFET) diff --git a/test/battle/move_effect/sky_drop.c b/test/battle/move_effect/sky_drop.c index 32adc67d73..b3bc6739af 100644 --- a/test/battle/move_effect/sky_drop.c +++ b/test/battle/move_effect/sky_drop.c @@ -122,3 +122,16 @@ SINGLE_BATTLE_TEST("Sky Drop stops the confusion count until the target is dropp ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player); } } + +SINGLE_BATTLE_TEST("Sky Drop fails if the targe is in a semi-invulnerable state") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_FLY); MOVE(player, MOVE_SKY_DROP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLY, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SKY_DROP, player); + } +} diff --git a/test/battle/move_effect/stealth_rock.c b/test/battle/move_effect/stealth_rock.c index ccd0ea496b..1ea6bea23b 100644 --- a/test/battle/move_effect/stealth_rock.c +++ b/test/battle/move_effect/stealth_rock.c @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Stealth Rock damage on switch in based on typing") } } -SINGLE_BATTLE_TEST("Stealth Rock damages the correct pokemon when Eject Button is triggered") +SINGLE_BATTLE_TEST("Stealth Rock damages the correct Pokémon when Eject Button is triggered") { GIVEN { PLAYER(SPECIES_METAPOD) { Item(ITEM_EJECT_BUTTON); } @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Stealth Rock damages the correct pokemon when Eject Button i } } -DOUBLE_BATTLE_TEST("Stealth Rock damages the correct pokemon when Eject Button is triggered in double battle") +DOUBLE_BATTLE_TEST("Stealth Rock damages the correct Pokémon when Eject Button is triggered in double battle") { GIVEN { PLAYER(SPECIES_METAPOD) { Item(ITEM_EJECT_BUTTON); } diff --git a/test/battle/move_effect/strength_sap.c b/test/battle/move_effect/strength_sap.c index c38048ba8f..675d5090ee 100644 --- a/test/battle/move_effect/strength_sap.c +++ b/test/battle/move_effect/strength_sap.c @@ -141,6 +141,8 @@ SINGLE_BATTLE_TEST("Strength Sap fails if target is at -6 Atk") } } +TO_DO_BATTLE_TEST("Strength Sap doesn't fail if target has Contrary and is at +6 Atk, restoring HP based on +5 Atk") + SINGLE_BATTLE_TEST("Strength Sap restores more HP if Big Root is held", s16 hp) { u32 item; diff --git a/test/battle/move_effect/stuff_cheeks.c b/test/battle/move_effect/stuff_cheeks.c index 9e6a34c306..b8dda1d8b6 100644 --- a/test/battle/move_effect/stuff_cheeks.c +++ b/test/battle/move_effect/stuff_cheeks.c @@ -103,3 +103,16 @@ SINGLE_BATTLE_TEST("Stuff Cheeks fails if the user's berry is removed before the MESSAGE("But it failed!"); } } + +AI_SINGLE_BATTLE_TEST("AI uses Stuff Cheeks") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_STUFF_CHEEKS) == EFFECT_STUFF_CHEEKS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_HEADBUTT); } + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_HEADBUTT); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIECHI_BERRY); Moves(MOVE_HEADBUTT, MOVE_STUFF_CHEEKS); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_STUFF_CHEEKS); } + } +} diff --git a/test/battle/move_effect/swagger.c b/test/battle/move_effect/swagger.c index 5845d4292f..3217e48903 100644 --- a/test/battle/move_effect/swagger.c +++ b/test/battle/move_effect/swagger.c @@ -1,4 +1,10 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Swagger (Move Effect) test titles") +TO_DO_BATTLE_TEST("Swagger raises the target's Attack and confuses them") +TO_DO_BATTLE_TEST("Swagger raises the target's Attack even if they're already confused") +TO_DO_BATTLE_TEST("Swagger raises the target's Attack even when protected by Safeguard") +TO_DO_BATTLE_TEST("Swagger raises the target's Attack even when protected Own Tempo") +TO_DO_BATTLE_TEST("Swagger doesn't confuse the target when they have their Attack maxed (Gen2)") +TO_DO_BATTLE_TEST("Swagger confuses the target even when they have their Attack maxed (Gen3+)") +TO_DO_BATTLE_TEST("Swagger confuses the target even when at -6 Attack and has Contrary") diff --git a/test/battle/move_effect/teleport.c b/test/battle/move_effect/teleport.c index f77dffc658..76fb499722 100644 --- a/test/battle/move_effect/teleport.c +++ b/test/battle/move_effect/teleport.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(GetMoveEffect(MOVE_TELEPORT) == EFFECT_TELEPORT); } -SINGLE_BATTLE_TEST("Teleport fails when there is no pokemon to switch in") +SINGLE_BATTLE_TEST("Teleport fails when there is no Pokémon to switch in") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Teleport fails when there is no pokemon to switch in") } } -SINGLE_BATTLE_TEST("Teleport fails when there no alive pokemon left") +SINGLE_BATTLE_TEST("Teleport fails when there no alive Pokémon left") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Teleport fails when there no alive pokemon left") } } -SINGLE_BATTLE_TEST("Teleport forces the pokemon to switch out") +SINGLE_BATTLE_TEST("Teleport forces the Pokémon to switch out") { GIVEN { PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/uproar.c b/test/battle/move_effect/uproar.c index cbe17ce066..23bcdce458 100644 --- a/test/battle/move_effect/uproar.c +++ b/test/battle/move_effect/uproar.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(GetMoveEffect(MOVE_UPROAR) == EFFECT_UPROAR); } -DOUBLE_BATTLE_TEST("Uproar status causes sleeping pokemon to wake up during an attack") +DOUBLE_BATTLE_TEST("Uproar status causes sleeping Pokémon to wake up during an attack") { PASSES_RANDOMLY(1, 2, RNG_RANDOM_TARGET); // test fails if we target soundproof mon GIVEN { diff --git a/test/battle/move_effect_secondary/bug_bite.c b/test/battle/move_effect_secondary/bug_bite.c index 70e0966caa..e6df81dc70 100644 --- a/test/battle/move_effect_secondary/bug_bite.c +++ b/test/battle/move_effect_secondary/bug_bite.c @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Bug Bite eats the target's berry and immediately gains its e PLAYER(SPECIES_WOBBUFFET) { HP(399); MaxHP(400); Status1(status1); Moves(MOVE_SLEEP_TALK, MOVE_BUG_BITE); } OPPONENT(SPECIES_WOBBUFFET) { Item(item); } } WHEN { - // Chesto Berry can only be applied if the pokemon is asleep and uses Sleep Talk. + // Chesto Berry can only be applied if the Pokémon is asleep and uses Sleep Talk. if (item == ITEM_CHESTO_BERRY) { TURN { MOVE(player, MOVE_SLEEP_TALK); } } else { diff --git a/test/battle/move_effect_secondary/dire_claw.c b/test/battle/move_effect_secondary/dire_claw.c index 35c6e73d94..ad9ffcc4e2 100644 --- a/test/battle/move_effect_secondary/dire_claw.c +++ b/test/battle/move_effect_secondary/dire_claw.c @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze poison/electric types respe } } -SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep pokemon with abilities preventing respective statuses") +SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep Pokémon with abilities preventing respective statuses") { u8 statusAnim; u16 species, ability; diff --git a/test/battle/move_effect_secondary/freeze.c b/test/battle/move_effect_secondary/freeze.c index 01a4b31c06..352845766d 100644 --- a/test/battle/move_effect_secondary/freeze.c +++ b/test/battle/move_effect_secondary/freeze.c @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Powder Snow inflicts freeze") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER_SNOW, player); HP_BAR(opponent); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + ANIMATION(ANIM_TYPE_STATUS, (B_USE_FROSTBITE ? B_ANIM_STATUS_FRB : B_ANIM_STATUS_FRZ), opponent); FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } } @@ -85,11 +85,11 @@ SINGLE_BATTLE_TEST("Freezing Glare shouldn't freeze Psychic-types") ANIMATION(ANIM_TYPE_MOVE, MOVE_FREEZING_GLARE, player); HP_BAR(opponent); #if B_STATUS_TYPE_IMMUNITY > GEN_1 - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + ANIMATION(ANIM_TYPE_STATUS, (B_USE_FROSTBITE ? B_ANIM_STATUS_FRB : B_ANIM_STATUS_FRZ), opponent); FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); #else NONE_OF { - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + ANIMATION(ANIM_TYPE_STATUS, (B_USE_FROSTBITE ? B_ANIM_STATUS_FRB : B_ANIM_STATUS_FRZ), opponent); FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } #endif diff --git a/test/battle/move_effect_secondary/remove_status.c b/test/battle/move_effect_secondary/remove_status.c index 0ff3d0f78c..0a07ef6368 100644 --- a/test/battle/move_effect_secondary/remove_status.c +++ b/test/battle/move_effect_secondary/remove_status.c @@ -113,6 +113,8 @@ SINGLE_BATTLE_TEST("Wake-Up Slap gets increased power against sleeping targets") } } +TO_DO_BATTLE_TEST("Wake-Up Slap gets increased power against Pokémon with Comatose") + DOUBLE_BATTLE_TEST("Sparkling Aria cures burns from all Pokemon on the field and behind substitutes") { GIVEN { diff --git a/test/battle/move_effect_secondary/tri_attack.c b/test/battle/move_effect_secondary/tri_attack.c index e84573dcdf..bba72b7677 100644 --- a/test/battle/move_effect_secondary/tri_attack.c +++ b/test/battle/move_effect_secondary/tri_attack.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") u8 statusAnim; PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; } + PARAMETRIZE { statusAnim = (B_USE_FROSTBITE ? B_ANIM_STATUS_FRB : B_ANIM_STATUS_FRZ); } PASSES_RANDOMLY(1, 3, RNG_TRI_ATTACK); GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); if (statusAnim == B_ANIM_STATUS_BRN) { STATUS_ICON(opponent, burn: TRUE); - } else if (statusAnim == B_ANIM_STATUS_FRZ) { + } else if (statusAnim == (B_USE_FROSTBITE ? B_ANIM_STATUS_FRB : B_ANIM_STATUS_FRZ)) { FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } else if (statusAnim == B_ANIM_STATUS_PRZ) { STATUS_ICON(opponent, paralysis: TRUE); @@ -74,9 +74,9 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ } #if B_USE_FROSTBITE == TRUE -SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/frostbite pokemon with abilities preventing respective statuses") +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/frostbite Pokémon with abilities preventing respective statuses") #else -SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilities preventing respective statuses") +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze Pokémon with abilities preventing respective statuses") #endif { u8 statusAnim; diff --git a/test/battle/move_effects_combined/flinch_status.c b/test/battle/move_effects_combined/flinch_status.c index 75c9461880..0d37170726 100644 --- a/test/battle/move_effects_combined/flinch_status.c +++ b/test/battle/move_effects_combined/flinch_status.c @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Thunder, Ice and Fire Fang inflict status 10% of the time") ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponent); STATUS_ICON(opponent, paralysis: TRUE); } if (move == MOVE_ICE_FANG) { - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + ANIMATION(ANIM_TYPE_STATUS, (B_USE_FROSTBITE ? B_ANIM_STATUS_FRB : B_ANIM_STATUS_FRZ), opponent); FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE); } if (move == MOVE_FIRE_FANG) { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent); diff --git a/test/battle/spread_moves.c b/test/battle/spread_moves.c index a37fb847db..d5e6b5c26d 100644 --- a/test/battle/spread_moves.c +++ b/test/battle/spread_moves.c @@ -83,7 +83,7 @@ DOUBLE_BATTLE_TEST("Spread Moves: A spread move attack will activate both resist } } -DOUBLE_BATTLE_TEST("Spread Moves: If a spread move attack will activate a resist berries on one pokemon, only the damage for that mon will be reduced") +DOUBLE_BATTLE_TEST("Spread Moves: If a spread move attack will activate a resist berries on one Pokémon, only the damage for that mon will be reduced") { s16 opponentLeftDmg[2]; s16 opponentRightDmg[2]; @@ -433,3 +433,23 @@ DOUBLE_BATTLE_TEST("Spread Moves: Unless move hits every target user will not in MESSAGE("It's super effective on the opposing Torkoal and Torkoal!"); } } + +DOUBLE_BATTLE_TEST("Spread Moves: Focus Sash activates correctly") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT) { HP(2); MaxHP(2); Item(ITEM_FOCUS_SASH); } + OPPONENT(SPECIES_WOBBUFFET) { HP(2); MaxHP(2); Item(ITEM_FOCUS_SASH); } + OPPONENT(SPECIES_WYNAUT) { HP(2); MaxHP(2); Item(ITEM_FOCUS_SASH); } + } WHEN { + TURN { MOVE(playerRight, MOVE_HYPER_VOICE); MOVE(playerLeft, MOVE_EXPLOSION); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPER_VOICE, playerRight); + MESSAGE("The opposing Wynaut hung on using its Focus Sash!"); + MESSAGE("The opposing Wobbuffet hung on using its Focus Sash!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); + MESSAGE("The opposing Wobbuffet fainted!"); + MESSAGE("Wynaut hung on using its Focus Sash!"); + MESSAGE("The opposing Wynaut fainted!"); + } +} diff --git a/test/battle/status1/frostbite.c b/test/battle/status1/frostbite.c index f45508f800..e221a0eae3 100644 --- a/test/battle/status1/frostbite.c +++ b/test/battle/status1/frostbite.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Frostbite reduces the special attack by 50 percent") } THEN { EXPECT_EQ(reducedDamage * 2, normaleDamage); } } -SINGLE_BATTLE_TEST("Frostbite deals 1/16th (Gen7+) or 1/8th damage to affected pokemon") +SINGLE_BATTLE_TEST("Frostbite deals 1/16th (Gen7+) or 1/8th damage to affected Pokémon") { s16 frostbiteDamage; @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Frostbite deals 1/16th (Gen7+) or 1/8th damage to affected p TURN {} } SCENE { MESSAGE("The opposing Wobbuffet was hurt by its frostbite!"); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRB, opponent); HP_BAR(opponent, captureDamage: &frostbiteDamage); } THEN { EXPECT_EQ(frostbiteDamage, opponent->maxHP / ((B_BURN_DAMAGE >= GEN_7) ? 16 : 8)); } } @@ -86,11 +86,11 @@ SINGLE_BATTLE_TEST("Frostbite is healed when the user uses a thawing move") HP_BAR(opponent); if (move == MOVE_EMBER) { MESSAGE("Wobbuffet was hurt by its frostbite!"); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRB, player); } else { NONE_OF { MESSAGE("Wobbuffet was hurt by its frostbite!"); - ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, player); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRB, player); } } } diff --git a/test/test_runner.c b/test/test_runner.c index 99ba3f42ab..fe9a5eccb6 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -34,6 +34,25 @@ static void Intr_Timer2(void); extern const struct Test __start_tests[]; extern const struct Test __stop_tests[]; +static enum TestFilterMode DetectFilterMode(const char *pattern) +{ + size_t n = strlen(pattern); + if (n > 2 && pattern[n-2] == '.' && pattern[n-1] == 'c') + return TEST_FILTER_MODE_FILENAME_EXACT; + else if (pattern[0] == '*') // TODO: Support '*pattern*'. + return TEST_FILTER_MODE_TEST_NAME_INFIX; + else + return TEST_FILTER_MODE_TEST_NAME_PREFIX; +} + +static bool32 ExactMatch(const char *pattern, const char *string) +{ + if (string == NULL) + return TRUE; + + return strcmp(pattern, string) == 0; +} + static bool32 PrefixMatch(const char *pattern, const char *string) { if (string == NULL) @@ -50,6 +69,14 @@ static bool32 PrefixMatch(const char *pattern, const char *string) } } +static bool32 InfixMatch(const char *pattern, const char *string) +{ + if (string == NULL) + return TRUE; + + return strstr(string, &pattern[1]) != NULL; +} + enum { STATE_INIT, @@ -171,6 +198,8 @@ top: return; } + gTestRunnerState.filterMode = DetectFilterMode(gTestRunnerArgv); + MoveSaveBlocks_ResetHeap(); ClearSav1(); ClearSav2(); @@ -231,11 +260,17 @@ top: gTestRunnerState.state = STATE_EXIT; return; } - if (gTestRunnerState.test->runner != &gAssumptionsRunner - && !PrefixMatch(gTestRunnerArgv, gTestRunnerState.test->name)) - ++gTestRunnerState.test; - else - break; + if (gTestRunnerState.test->runner != &gAssumptionsRunner) + { + if ((gTestRunnerState.filterMode == TEST_FILTER_MODE_TEST_NAME_PREFIX && !PrefixMatch(gTestRunnerArgv, gTestRunnerState.test->name)) + || (gTestRunnerState.filterMode == TEST_FILTER_MODE_TEST_NAME_INFIX && !InfixMatch(gTestRunnerArgv, gTestRunnerState.test->name)) + || (gTestRunnerState.filterMode == TEST_FILTER_MODE_FILENAME_EXACT && !ExactMatch(gTestRunnerArgv, gTestRunnerState.test->filename))) + { + ++gTestRunnerState.test; + continue; + } + } + break; } Test_MgbaPrintf(":N%s", gTestRunnerState.test->name); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index e13a31bd9f..a0f3e0e953 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -444,7 +444,7 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) if (sum == 0) Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomWeightedArray called with zero sum"); - if (gCurrentTurnActionNumber < gBattlersCount) + if (gCurrentTurnActionNumber < gBattlersCount || tag == RNG_SHELL_SIDE_ARM) { u32 battlerId = gBattlerByTurnOrder[gCurrentTurnActionNumber]; turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; @@ -2216,6 +2216,17 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) DATA.battleRecordTurns[DATA.turns][battlerId].secondaryEffect = 1 + ctx.secondaryEffect; if (ctx.explicitRNG) DATA.battleRecordTurns[DATA.turns][battlerId].rng = ctx.rng; + + u32 shellSideArmCount = 0; + for (u32 i = 0; i < STATE->battlersCount; i++) + { + if (DATA.battleRecordTurns[DATA.turns][i].rng.tag == RNG_SHELL_SIDE_ARM) + { + shellSideArmCount++; + if (shellSideArmCount > 1) + Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":L Tried to use fixed RNG for multiple Shell Side Arm moves in the same turn"); + } + } if (!(DATA.actionBattlers & (1 << battlerId))) { diff --git a/tools/mid2agb/agb.cpp b/tools/mid2agb/agb.cpp index 3bc4f601ac..ab89436373 100644 --- a/tools/mid2agb/agb.cpp +++ b/tools/mid2agb/agb.cpp @@ -46,7 +46,7 @@ static int s_memaccParam2; void PrintAgbHeader() { std::fprintf(g_outputFile, "\t.include \"MPlayDef.s\"\n\n"); - std::fprintf(g_outputFile, "\t.equ\t%s_grp, voicegroup%03u\n", g_asmLabel.c_str(), g_voiceGroup); + std::fprintf(g_outputFile, "\t.equ\t%s_grp, voicegroup%s\n", g_asmLabel.c_str(), g_voiceGroup.c_str()); std::fprintf(g_outputFile, "\t.equ\t%s_pri, %u\n", g_asmLabel.c_str(), g_priority); if (g_reverb >= 0) diff --git a/tools/mid2agb/main.cpp b/tools/mid2agb/main.cpp index ea2b294ac8..ca5a3da8a7 100644 --- a/tools/mid2agb/main.cpp +++ b/tools/mid2agb/main.cpp @@ -35,7 +35,7 @@ FILE* g_outputFile = nullptr; std::string g_asmLabel; int g_masterVolume = 127; -int g_voiceGroup = 0; +std::string g_voiceGroup = "_dummy"; int g_priority = 0; int g_reverb = -1; int g_clocksPerBeat = 1; @@ -52,7 +52,7 @@ bool g_compressionEnabled = true; "\n" "options -L??? label for assembler (default:output_file)\n" " -V??? master volume (default:127)\n" - " -G??? voice group number (default:0)\n" + " -G??? voice group label (default:_dummy)\n" " -P??? priority (default:0)\n" " -R??? reverb (default:off)\n" " -X 48 clocks/beat (default:24 clocks/beat)\n" @@ -149,7 +149,7 @@ int main(int argc, char** argv) arg = GetArgument(argc, argv, i); if (arg == nullptr) PrintUsage(); - g_voiceGroup = std::stoi(arg); + g_voiceGroup = arg; break; case 'L': arg = GetArgument(argc, argv, i); diff --git a/tools/mid2agb/main.h b/tools/mid2agb/main.h index 6e71e73fd4..76443e5db9 100644 --- a/tools/mid2agb/main.h +++ b/tools/mid2agb/main.h @@ -29,7 +29,7 @@ extern FILE* g_outputFile; extern std::string g_asmLabel; extern int g_masterVolume; -extern int g_voiceGroup; +extern std::string g_voiceGroup; extern int g_priority; extern int g_reverb; extern int g_clocksPerBeat; diff --git a/tools/trainerproc/main.c b/tools/trainerproc/main.c index 5330c9fe3d..c3a39dc5a1 100644 --- a/tools/trainerproc/main.c +++ b/tools/trainerproc/main.c @@ -155,6 +155,9 @@ struct Trainer struct String macro; int macro_line; + + struct String back_pic; + int back_pic_line; }; static bool is_empty_string(struct String s) @@ -175,7 +178,7 @@ static bool is_literal_string(struct String s1, const char *s2) } } -static bool starts_with(struct String s, const char *prefix) +static bool __attribute__((unused)) starts_with(struct String s, const char *prefix) { int n = strlen(prefix); return strncmp((const char *)s.string, prefix, n) == 0; @@ -1300,6 +1303,13 @@ static bool parse_trainer(struct Parser *p, const struct Parsed *parsed, struct trainer->macro_line = value.location.line; trainer->macro = token_string(&value); } + else if (is_literal_token(&key, "Back Pic")) + { + if (trainer->back_pic_line) + any_error = !set_show_parse_error(p, key.location, "duplicate 'Back Pic'"); + trainer->back_pic_line = value.location.line; + trainer->back_pic = token_string(&value); + } else { any_error = !set_show_parse_error(p, key.location, "expected one of 'Name', 'Class', 'Pic', 'Gender', 'Music', 'Items', 'Battle Type', 'Difficulty', 'Party Size', 'Pool Rules', 'Pool Pick Functions', 'Pool Prune' or 'AI'"); @@ -1776,10 +1786,7 @@ static void fprint_trainers(const char *output_path, FILE *f, struct Parsed *par { fprintf(f, "#line %d\n", trainer->pic_line); fprintf(f, " .trainerPic = "); - if (starts_with(trainer->id, "PARTNER_")) - fprint_constant(f, "TRAINER_BACK_PIC", trainer->pic); - else - fprint_constant(f, "TRAINER_PIC", trainer->pic); + fprint_constant(f, "TRAINER_PIC", trainer->pic); fprintf(f, ",\n"); } @@ -1884,6 +1891,21 @@ static void fprint_trainers(const char *output_path, FILE *f, struct Parsed *par fprint_string(f, trainer->copy_pool); fprintf(f, ",\n"); } + if (!is_empty_string(trainer->back_pic)) + { + fprintf(f, "#line %d\n", trainer->back_pic_line); + fprintf(f, " .trainerBackPic = "); + fprint_constant(f, "TRAINER_BACK_PIC", trainer->back_pic); + fprintf(f, ",\n"); + } + else // defaults to front pic in absence of defined back pic + { + fprintf(f, "#line %d\n", trainer->back_pic_line); + fprintf(f, " .trainerBackPic = "); + fprint_constant(f, "TRAINER_PIC", trainer->pic); + fprintf(f, ",\n"); + } + if (trainer->macro_line) { fprintf(f, "#line %d\n", trainer->macro_line);