diff --git a/constants/battle_constants.asm b/constants/battle_constants.asm index 9bff323..be245a6 100644 --- a/constants/battle_constants.asm +++ b/constants/battle_constants.asm @@ -96,6 +96,7 @@ DEF SPDSPCDV_SHINY EQU $AA const BATTLETYPE_FORCEITEM const BATTLETYPE_CELEBI const BATTLETYPE_SUICUNE + const BATTLETYPE_INVERSE ; BattleVarPairs indexes (see home/battle_vars.asm) const_def diff --git a/data/types/type_matchups.asm b/data/types/type_matchups.asm index 1f80362..14e61bc 100644 --- a/data/types/type_matchups.asm +++ b/data/types/type_matchups.asm @@ -1,132 +1,253 @@ TypeMatchups: - ; attacker, defender, *= - db NORMAL, ROCK, NOT_VERY_EFFECTIVE - db NORMAL, STEEL, NOT_VERY_EFFECTIVE - db FIRE, FIRE, NOT_VERY_EFFECTIVE - db FIRE, WATER, NOT_VERY_EFFECTIVE - db FIRE, GRASS, SUPER_EFFECTIVE - db FIRE, ICE, SUPER_EFFECTIVE - db FIRE, BUG, SUPER_EFFECTIVE - db FIRE, ROCK, NOT_VERY_EFFECTIVE - db FIRE, DRAGON, NOT_VERY_EFFECTIVE - db FIRE, STEEL, SUPER_EFFECTIVE - db FIRE, FAIRY, SUPER_EFFECTIVE - db WATER, FIRE, SUPER_EFFECTIVE - db WATER, WATER, NOT_VERY_EFFECTIVE - db WATER, GRASS, NOT_VERY_EFFECTIVE - db WATER, GROUND, SUPER_EFFECTIVE - db WATER, ROCK, SUPER_EFFECTIVE - db WATER, DRAGON, NOT_VERY_EFFECTIVE - db ELECTRIC, WATER, SUPER_EFFECTIVE - db ELECTRIC, ELECTRIC, NOT_VERY_EFFECTIVE - db ELECTRIC, GRASS, NOT_VERY_EFFECTIVE - db ELECTRIC, GROUND, NO_EFFECT - db ELECTRIC, FLYING, SUPER_EFFECTIVE - db ELECTRIC, DRAGON, NOT_VERY_EFFECTIVE - db GRASS, FIRE, NOT_VERY_EFFECTIVE - db GRASS, WATER, SUPER_EFFECTIVE - db GRASS, GRASS, NOT_VERY_EFFECTIVE - db GRASS, POISON, NOT_VERY_EFFECTIVE - db GRASS, GROUND, SUPER_EFFECTIVE - db GRASS, FLYING, NOT_VERY_EFFECTIVE - db GRASS, BUG, NOT_VERY_EFFECTIVE - db GRASS, ROCK, SUPER_EFFECTIVE - db GRASS, DRAGON, NOT_VERY_EFFECTIVE - db GRASS, STEEL, NOT_VERY_EFFECTIVE - db ICE, WATER, NOT_VERY_EFFECTIVE - db ICE, GRASS, SUPER_EFFECTIVE - db ICE, ICE, NOT_VERY_EFFECTIVE - db ICE, GROUND, SUPER_EFFECTIVE - db ICE, FLYING, SUPER_EFFECTIVE - db ICE, DRAGON, SUPER_EFFECTIVE - db ICE, STEEL, NOT_VERY_EFFECTIVE - db ICE, FAIRY, SUPER_EFFECTIVE - db ICE, FIRE, NOT_VERY_EFFECTIVE - db FIGHTING, NORMAL, SUPER_EFFECTIVE - db FIGHTING, ICE, SUPER_EFFECTIVE - db FIGHTING, POISON, NOT_VERY_EFFECTIVE - db FIGHTING, FLYING, NOT_VERY_EFFECTIVE - db FIGHTING, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE - db FIGHTING, BUG, NOT_VERY_EFFECTIVE - db FIGHTING, ROCK, SUPER_EFFECTIVE - db FIGHTING, DARK, SUPER_EFFECTIVE - db FIGHTING, STEEL, SUPER_EFFECTIVE - db FIGHTING, FAIRY, NOT_VERY_EFFECTIVE - db POISON, GRASS, SUPER_EFFECTIVE - db POISON, POISON, NOT_VERY_EFFECTIVE - db POISON, GROUND, NOT_VERY_EFFECTIVE - db POISON, ROCK, NOT_VERY_EFFECTIVE - db POISON, GHOST, NOT_VERY_EFFECTIVE - db POISON, STEEL, NO_EFFECT - db GROUND, FIRE, SUPER_EFFECTIVE - db GROUND, ELECTRIC, SUPER_EFFECTIVE - db GROUND, GRASS, NOT_VERY_EFFECTIVE - db GROUND, POISON, SUPER_EFFECTIVE - db GROUND, FLYING, NO_EFFECT - db GROUND, BUG, NOT_VERY_EFFECTIVE - db GROUND, ROCK, SUPER_EFFECTIVE - db GROUND, STEEL, SUPER_EFFECTIVE - db FLYING, ELECTRIC, NOT_VERY_EFFECTIVE - db FLYING, GRASS, SUPER_EFFECTIVE - db FLYING, FIGHTING, SUPER_EFFECTIVE - db FLYING, BUG, SUPER_EFFECTIVE - db FLYING, ROCK, NOT_VERY_EFFECTIVE - db FLYING, STEEL, NOT_VERY_EFFECTIVE - db PSYCHIC_TYPE, FIGHTING, SUPER_EFFECTIVE - db PSYCHIC_TYPE, POISON, SUPER_EFFECTIVE + ; attacker, defender, *= + db NORMAL, ROCK, NOT_VERY_EFFECTIVE + db NORMAL, STEEL, NOT_VERY_EFFECTIVE + db FIRE, FIRE, NOT_VERY_EFFECTIVE + db FIRE, WATER, NOT_VERY_EFFECTIVE + db FIRE, GRASS, SUPER_EFFECTIVE + db FIRE, ICE, SUPER_EFFECTIVE + db FIRE, BUG, SUPER_EFFECTIVE + db FIRE, ROCK, NOT_VERY_EFFECTIVE + db FIRE, DRAGON, NOT_VERY_EFFECTIVE + db FIRE, STEEL, SUPER_EFFECTIVE + db FIRE, FAIRY, SUPER_EFFECTIVE + db WATER, FIRE, SUPER_EFFECTIVE + db WATER, WATER, NOT_VERY_EFFECTIVE + db WATER, GRASS, NOT_VERY_EFFECTIVE + db WATER, GROUND, SUPER_EFFECTIVE + db WATER, ROCK, SUPER_EFFECTIVE + db WATER, DRAGON, NOT_VERY_EFFECTIVE + db ELECTRIC, WATER, SUPER_EFFECTIVE + db ELECTRIC, ELECTRIC, NOT_VERY_EFFECTIVE + db ELECTRIC, GRASS, NOT_VERY_EFFECTIVE + db ELECTRIC, GROUND, NO_EFFECT + db ELECTRIC, FLYING, SUPER_EFFECTIVE + db ELECTRIC, DRAGON, NOT_VERY_EFFECTIVE + db GRASS, FIRE, NOT_VERY_EFFECTIVE + db GRASS, WATER, SUPER_EFFECTIVE + db GRASS, GRASS, NOT_VERY_EFFECTIVE + db GRASS, POISON, NOT_VERY_EFFECTIVE + db GRASS, GROUND, SUPER_EFFECTIVE + db GRASS, FLYING, NOT_VERY_EFFECTIVE + db GRASS, BUG, NOT_VERY_EFFECTIVE + db GRASS, ROCK, SUPER_EFFECTIVE + db GRASS, DRAGON, NOT_VERY_EFFECTIVE + db GRASS, STEEL, NOT_VERY_EFFECTIVE + db ICE, WATER, NOT_VERY_EFFECTIVE + db ICE, GRASS, SUPER_EFFECTIVE + db ICE, ICE, NOT_VERY_EFFECTIVE + db ICE, GROUND, SUPER_EFFECTIVE + db ICE, FLYING, SUPER_EFFECTIVE + db ICE, DRAGON, SUPER_EFFECTIVE + db ICE, STEEL, NOT_VERY_EFFECTIVE + db ICE, FAIRY, SUPER_EFFECTIVE + db ICE, FIRE, NOT_VERY_EFFECTIVE + db FIGHTING, NORMAL, SUPER_EFFECTIVE + db FIGHTING, ICE, SUPER_EFFECTIVE + db FIGHTING, POISON, NOT_VERY_EFFECTIVE + db FIGHTING, FLYING, NOT_VERY_EFFECTIVE + db FIGHTING, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE + db FIGHTING, BUG, NOT_VERY_EFFECTIVE + db FIGHTING, ROCK, SUPER_EFFECTIVE + db FIGHTING, DARK, SUPER_EFFECTIVE + db FIGHTING, STEEL, SUPER_EFFECTIVE + db FIGHTING, FAIRY, NOT_VERY_EFFECTIVE + db POISON, GRASS, SUPER_EFFECTIVE + db POISON, POISON, NOT_VERY_EFFECTIVE + db POISON, GROUND, NOT_VERY_EFFECTIVE + db POISON, ROCK, NOT_VERY_EFFECTIVE + db POISON, GHOST, NOT_VERY_EFFECTIVE + db POISON, STEEL, NO_EFFECT + db GROUND, FIRE, SUPER_EFFECTIVE + db GROUND, ELECTRIC, SUPER_EFFECTIVE + db GROUND, GRASS, NOT_VERY_EFFECTIVE + db GROUND, POISON, SUPER_EFFECTIVE + db GROUND, FLYING, NO_EFFECT + db GROUND, BUG, NOT_VERY_EFFECTIVE + db GROUND, ROCK, SUPER_EFFECTIVE + db GROUND, STEEL, SUPER_EFFECTIVE + db FLYING, ELECTRIC, NOT_VERY_EFFECTIVE + db FLYING, GRASS, SUPER_EFFECTIVE + db FLYING, FIGHTING, SUPER_EFFECTIVE + db FLYING, BUG, SUPER_EFFECTIVE + db FLYING, ROCK, NOT_VERY_EFFECTIVE + db FLYING, STEEL, NOT_VERY_EFFECTIVE + db PSYCHIC_TYPE, FIGHTING, SUPER_EFFECTIVE + db PSYCHIC_TYPE, POISON, SUPER_EFFECTIVE db PSYCHIC_TYPE, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE - db PSYCHIC_TYPE, DARK, NO_EFFECT - db PSYCHIC_TYPE, STEEL, NOT_VERY_EFFECTIVE - db BUG, FIRE, NOT_VERY_EFFECTIVE - db BUG, GRASS, SUPER_EFFECTIVE - db BUG, FIGHTING, NOT_VERY_EFFECTIVE - db BUG, POISON, NOT_VERY_EFFECTIVE - db BUG, FLYING, NOT_VERY_EFFECTIVE - db BUG, PSYCHIC_TYPE, SUPER_EFFECTIVE - db BUG, GHOST, NOT_VERY_EFFECTIVE - db BUG, DARK, SUPER_EFFECTIVE - db BUG, STEEL, NOT_VERY_EFFECTIVE - db BUG, FAIRY, NOT_VERY_EFFECTIVE - db ROCK, FIRE, SUPER_EFFECTIVE - db ROCK, ICE, SUPER_EFFECTIVE - db ROCK, FIGHTING, NOT_VERY_EFFECTIVE - db ROCK, GROUND, NOT_VERY_EFFECTIVE - db ROCK, FLYING, SUPER_EFFECTIVE - db ROCK, BUG, SUPER_EFFECTIVE - db ROCK, STEEL, NOT_VERY_EFFECTIVE - db GHOST, NORMAL, NO_EFFECT - db GHOST, PSYCHIC_TYPE, SUPER_EFFECTIVE - db GHOST, DARK, NOT_VERY_EFFECTIVE - db GHOST, STEEL, NOT_VERY_EFFECTIVE - db GHOST, GHOST, SUPER_EFFECTIVE - db DRAGON, DRAGON, SUPER_EFFECTIVE - db DRAGON, STEEL, NOT_VERY_EFFECTIVE - db DRAGON, FAIRY, NO_EFFECT - db DARK, FIGHTING, NOT_VERY_EFFECTIVE - db DARK, PSYCHIC_TYPE, SUPER_EFFECTIVE - db DARK, GHOST, SUPER_EFFECTIVE - db DARK, DARK, NOT_VERY_EFFECTIVE - db DARK, STEEL, NOT_VERY_EFFECTIVE - db DARK, FAIRY, NOT_VERY_EFFECTIVE - db STEEL, FIRE, NOT_VERY_EFFECTIVE - db STEEL, WATER, NOT_VERY_EFFECTIVE - db STEEL, ELECTRIC, NOT_VERY_EFFECTIVE - db STEEL, ICE, SUPER_EFFECTIVE - db STEEL, ROCK, SUPER_EFFECTIVE - db STEEL, STEEL, NOT_VERY_EFFECTIVE - db STEEL, FAIRY, SUPER_EFFECTIVE - db FAIRY, FIRE, NOT_VERY_EFFECTIVE - db FAIRY, BUG, SUPER_EFFECTIVE - db FAIRY, FIGHTING, SUPER_EFFECTIVE - db FAIRY, ICE, NOT_VERY_EFFECTIVE - db FAIRY, DRAGON, SUPER_EFFECTIVE - db FAIRY, DARK, SUPER_EFFECTIVE - db FAIRY, STEEL, NOT_VERY_EFFECTIVE + db PSYCHIC_TYPE, DARK, NO_EFFECT + db PSYCHIC_TYPE, STEEL, NOT_VERY_EFFECTIVE + db BUG, FIRE, NOT_VERY_EFFECTIVE + db BUG, GRASS, SUPER_EFFECTIVE + db BUG, FIGHTING, NOT_VERY_EFFECTIVE + db BUG, POISON, NOT_VERY_EFFECTIVE + db BUG, FLYING, NOT_VERY_EFFECTIVE + db BUG, PSYCHIC_TYPE, SUPER_EFFECTIVE + db BUG, GHOST, NOT_VERY_EFFECTIVE + db BUG, DARK, SUPER_EFFECTIVE + db BUG, STEEL, NOT_VERY_EFFECTIVE + db BUG, FAIRY, NOT_VERY_EFFECTIVE + db ROCK, FIRE, SUPER_EFFECTIVE + db ROCK, ICE, SUPER_EFFECTIVE + db ROCK, FIGHTING, NOT_VERY_EFFECTIVE + db ROCK, GROUND, NOT_VERY_EFFECTIVE + db ROCK, FLYING, SUPER_EFFECTIVE + db ROCK, BUG, SUPER_EFFECTIVE + db ROCK, STEEL, NOT_VERY_EFFECTIVE + db GHOST, NORMAL, NO_EFFECT + db GHOST, PSYCHIC_TYPE, SUPER_EFFECTIVE + db GHOST, DARK, NOT_VERY_EFFECTIVE + db GHOST, STEEL, NOT_VERY_EFFECTIVE + db GHOST, GHOST, SUPER_EFFECTIVE + db DRAGON, DRAGON, SUPER_EFFECTIVE + db DRAGON, STEEL, NOT_VERY_EFFECTIVE + db DRAGON, FAIRY, NO_EFFECT + db DARK, FIGHTING, NOT_VERY_EFFECTIVE + db DARK, PSYCHIC_TYPE, SUPER_EFFECTIVE + db DARK, GHOST, SUPER_EFFECTIVE + db DARK, DARK, NOT_VERY_EFFECTIVE + db DARK, STEEL, NOT_VERY_EFFECTIVE + db DARK, FAIRY, NOT_VERY_EFFECTIVE + db STEEL, FIRE, NOT_VERY_EFFECTIVE + db STEEL, WATER, NOT_VERY_EFFECTIVE + db STEEL, ELECTRIC, NOT_VERY_EFFECTIVE + db STEEL, ICE, SUPER_EFFECTIVE + db STEEL, ROCK, SUPER_EFFECTIVE + db STEEL, STEEL, NOT_VERY_EFFECTIVE + db STEEL, FAIRY, SUPER_EFFECTIVE + db FAIRY, FIRE, NOT_VERY_EFFECTIVE + db FAIRY, BUG, SUPER_EFFECTIVE + db FAIRY, FIGHTING, SUPER_EFFECTIVE + db FAIRY, ICE, NOT_VERY_EFFECTIVE + db FAIRY, DRAGON, SUPER_EFFECTIVE + db FAIRY, DARK, SUPER_EFFECTIVE + db FAIRY, STEEL, NOT_VERY_EFFECTIVE db -2 ; end (with Foresight) ; Foresight removes Ghost's immunities. - db NORMAL, GHOST, NO_EFFECT - db FIGHTING, GHOST, NO_EFFECT + db NORMAL, GHOST, NO_EFFECT + db FIGHTING, GHOST, NO_EFFECT db -1 ; end + +InverseTypeMatchups: + ; attacker, defender, *= + db NORMAL, ROCK, SUPER_EFFECTIVE + db NORMAL, STEEL, SUPER_EFFECTIVE + db FIRE, FIRE, SUPER_EFFECTIVE + db FIRE, WATER, SUPER_EFFECTIVE + db FIRE, GRASS, NOT_VERY_EFFECTIVE + db FIRE, ICE, NOT_VERY_EFFECTIVE + db FIRE, BUG, NOT_VERY_EFFECTIVE + db FIRE, ROCK, SUPER_EFFECTIVE + db FIRE, DRAGON, SUPER_EFFECTIVE + db FIRE, STEEL, NOT_VERY_EFFECTIVE + db WATER, FIRE, NOT_VERY_EFFECTIVE + db WATER, WATER, SUPER_EFFECTIVE + db WATER, GRASS, SUPER_EFFECTIVE + db WATER, GROUND, NOT_VERY_EFFECTIVE + db WATER, ROCK, NOT_VERY_EFFECTIVE + db WATER, DRAGON, SUPER_EFFECTIVE + db ELECTRIC, WATER, NOT_VERY_EFFECTIVE + db ELECTRIC, ELECTRIC, SUPER_EFFECTIVE + db ELECTRIC, GRASS, SUPER_EFFECTIVE + db ELECTRIC, GROUND, SUPER_EFFECTIVE + db ELECTRIC, FLYING, NOT_VERY_EFFECTIVE + db ELECTRIC, DRAGON, SUPER_EFFECTIVE + db GRASS, FIRE, SUPER_EFFECTIVE + db GRASS, WATER, NOT_VERY_EFFECTIVE + db GRASS, GRASS, SUPER_EFFECTIVE + db GRASS, POISON, SUPER_EFFECTIVE + db GRASS, GROUND, NOT_VERY_EFFECTIVE + db GRASS, FLYING, SUPER_EFFECTIVE + db GRASS, BUG, SUPER_EFFECTIVE + db GRASS, ROCK, NOT_VERY_EFFECTIVE + db GRASS, DRAGON, SUPER_EFFECTIVE + db GRASS, STEEL, SUPER_EFFECTIVE + db ICE, WATER, SUPER_EFFECTIVE + db ICE, GRASS, NOT_VERY_EFFECTIVE + db ICE, ICE, SUPER_EFFECTIVE + db ICE, GROUND, NOT_VERY_EFFECTIVE + db ICE, FLYING, NOT_VERY_EFFECTIVE + db ICE, DRAGON, NOT_VERY_EFFECTIVE + db ICE, STEEL, SUPER_EFFECTIVE + db ICE, FIRE, SUPER_EFFECTIVE + db FIGHTING, NORMAL, NOT_VERY_EFFECTIVE + db FIGHTING, ICE, NOT_VERY_EFFECTIVE + db FIGHTING, POISON, SUPER_EFFECTIVE + db FIGHTING, FLYING, SUPER_EFFECTIVE + db FIGHTING, PSYCHIC_TYPE, SUPER_EFFECTIVE + db FIGHTING, BUG, SUPER_EFFECTIVE + db FIGHTING, ROCK, NOT_VERY_EFFECTIVE + db FIGHTING, DARK, NOT_VERY_EFFECTIVE + db FIGHTING, STEEL, NOT_VERY_EFFECTIVE + db POISON, GRASS, NOT_VERY_EFFECTIVE + db POISON, POISON, SUPER_EFFECTIVE + db POISON, GROUND, SUPER_EFFECTIVE + db POISON, ROCK, SUPER_EFFECTIVE + db POISON, GHOST, SUPER_EFFECTIVE + db POISON, STEEL, SUPER_EFFECTIVE + db GROUND, FIRE, NOT_VERY_EFFECTIVE + db GROUND, ELECTRIC, NOT_VERY_EFFECTIVE + db GROUND, GRASS, SUPER_EFFECTIVE + db GROUND, POISON, NOT_VERY_EFFECTIVE + db GROUND, FLYING, SUPER_EFFECTIVE + db GROUND, BUG, SUPER_EFFECTIVE + db GROUND, ROCK, NOT_VERY_EFFECTIVE + db GROUND, STEEL, NOT_VERY_EFFECTIVE + db FLYING, ELECTRIC, SUPER_EFFECTIVE + db FLYING, GRASS, NOT_VERY_EFFECTIVE + db FLYING, FIGHTING, NOT_VERY_EFFECTIVE + db FLYING, BUG, NOT_VERY_EFFECTIVE + db FLYING, ROCK, SUPER_EFFECTIVE + db FLYING, STEEL, SUPER_EFFECTIVE + db PSYCHIC_TYPE, FIGHTING, NOT_VERY_EFFECTIVE + db PSYCHIC_TYPE, POISON, NOT_VERY_EFFECTIVE + db PSYCHIC_TYPE, PSYCHIC_TYPE, SUPER_EFFECTIVE + db PSYCHIC_TYPE, DARK, SUPER_EFFECTIVE + db PSYCHIC_TYPE, STEEL, SUPER_EFFECTIVE + db BUG, FIRE, SUPER_EFFECTIVE + db BUG, GRASS, NOT_VERY_EFFECTIVE + db BUG, FIGHTING, SUPER_EFFECTIVE + db BUG, POISON, SUPER_EFFECTIVE + db BUG, FLYING, SUPER_EFFECTIVE + db BUG, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE + db BUG, GHOST, SUPER_EFFECTIVE + db BUG, DARK, NOT_VERY_EFFECTIVE + db BUG, STEEL, SUPER_EFFECTIVE + db ROCK, FIRE, NOT_VERY_EFFECTIVE + db ROCK, ICE, NOT_VERY_EFFECTIVE + db ROCK, FIGHTING, SUPER_EFFECTIVE + db ROCK, GROUND, SUPER_EFFECTIVE + db ROCK, FLYING, NOT_VERY_EFFECTIVE + db ROCK, BUG, NOT_VERY_EFFECTIVE + db ROCK, STEEL, SUPER_EFFECTIVE + db GHOST, NORMAL, SUPER_EFFECTIVE + db GHOST, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE + db GHOST, DARK, SUPER_EFFECTIVE + db GHOST, STEEL, SUPER_EFFECTIVE + db GHOST, GHOST, NOT_VERY_EFFECTIVE + db DRAGON, DRAGON, NOT_VERY_EFFECTIVE + db DRAGON, STEEL, SUPER_EFFECTIVE + db DARK, FIGHTING, SUPER_EFFECTIVE + db DARK, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE + db DARK, GHOST, NOT_VERY_EFFECTIVE + db DARK, DARK, SUPER_EFFECTIVE + db DARK, STEEL, SUPER_EFFECTIVE + db STEEL, FIRE, SUPER_EFFECTIVE + db STEEL, WATER, SUPER_EFFECTIVE + db STEEL, ELECTRIC, SUPER_EFFECTIVE + db STEEL, ICE, NOT_VERY_EFFECTIVE + db STEEL, ROCK, NOT_VERY_EFFECTIVE + db STEEL, STEEL, SUPER_EFFECTIVE + db NORMAL, GHOST, SUPER_EFFECTIVE + db FIGHTING, GHOST, SUPER_EFFECTIVE + db FAIRY, FIRE, SUPER_EFFECTIVE + db FAIRY, BUG, NOT_VERY_EFFECTIVE + db FAIRY, FIGHTING, NOT_VERY_EFFECTIVE + db FAIRY, ICE, SUPER_EFFECTIVE + db FAIRY, DRAGON, NOT_VERY_EFFECTIVE + db FAIRY, DARK, NOT_VERY_EFFECTIVE + db FAIRY, STEEL, SUPER_EFFECTIVE + db -1 ; end diff --git a/engine/battle/effect_commands.asm b/engine/battle/effect_commands.asm index 29cc929..6d3141b 100644 --- a/engine/battle/effect_commands.asm +++ b/engine/battle/effect_commands.asm @@ -359,7 +359,7 @@ CantMove: ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar push hl - ld hl, .fly_dig_moves + ld hl, FlyDigMoves call CheckMoveInList pop hl ret nc @@ -371,13 +371,6 @@ CantMove: res SUBSTATUS_UNDERWATER, [hl] jp AppearUserRaiseSub -.fly_dig_moves - dw FLY - dw DIG - dw BOUNCE - dw WATER_SPORT - dw -1 - OpponentCantMove: call BattleCommand_SwitchTurn call CantMove @@ -1370,7 +1363,13 @@ BattleCommand_Stab: ld a, BATTLE_VARS_MOVE_TYPE call GetBattleVar ld b, a + ld a, [wBattleType] + cp BATTLETYPE_INVERSE + jr z, .inverse ld hl, TypeMatchups + jr .TypesLoop +.inverse + ld hl, InverseTypeMatchups .TypesLoop: ; ld a, [hli] @@ -1497,7 +1496,13 @@ CheckTypeMatchup: ld c, [hl] ld a, EFFECTIVE ld [wTypeMatchup], a + ld a, [wBattleType] + cp BATTLETYPE_INVERSE + jr z, .inverse ld hl, TypeMatchups + jr .TypesLoop +.inverse + ld hl, InverseTypeMatchups .TypesLoop: ; ld a, [hli] call GetNextTypeMatchupsByte @@ -1511,7 +1516,6 @@ CheckTypeMatchup: bit SUBSTATUS_IDENTIFIED, a jr nz, .End jr .TypesLoop - .Next: cp d jr nz, .Nope @@ -1788,6 +1792,7 @@ BattleCommand_CheckHit: call GetBattleVar and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND jr nz, .flying_or_underground + ld a, BATTLE_VARS_SUBSTATUS4_OPP call GetBattleVar and 1 << SUBSTATUS_UNDERWATER @@ -1795,12 +1800,34 @@ BattleCommand_CheckHit: ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar - cp SURF + ld hl, SURF + call GetMoveIDFromIndex + ld a, h + if HIGH(SURF) + cp HIGH(SURF) + else + and a + endc + ld a, l + pop hl + ret nz + cp LOW(SURF) ret z - cp WHIRLPOOL + ld hl, WHIRLPOOL + call GetMoveIDFromIndex + ld a, h + if HIGH(WHIRLPOOL) + cp HIGH(WHIRLPOOL) + else + and a + endc + ld a, l + pop hl + ret nz + cp LOW(WHIRLPOOL) ret -.flying_or_underground +.flying_or_underground bit SUBSTATUS_FLYING, a ld hl, .FlyMoves jr z, .check_move_in_list @@ -2071,18 +2098,11 @@ BattleCommand_MoveAnimNoSub: ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar - ld hl, .fly_dig_moves + ld hl, FlyDigMoves call CheckMoveInList ret nc jp AppearUserLowerSub -.fly_dig_moves - dw FLY - dw DIG - dw BOUNCE - dw WATER_SPORT - dw -1 - .alternate_anim ld a, [wBattleAnimParam] and 1 @@ -2167,7 +2187,7 @@ BattleCommand_FailureText: call GetBattleVarAddr push hl - ld hl, .fly_dig_moves + ld hl, FlyDigMoves call CheckMoveInList pop hl jr c, .fly_dig @@ -2200,13 +2220,6 @@ BattleCommand_FailureText: call AppearUserRaiseSub jp EndMoveEffect -.fly_dig_moves - dw FLY - dw DIG - dw WATER_SPORT - dw BOUNCE - dw -1 - BattleCommand_ApplyDamage: ld a, BATTLE_VARS_SUBSTATUS1_OPP call GetBattleVar @@ -5645,26 +5658,134 @@ BattleCommand_Charge: call LoadMoveAnim ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar - - ld hl, .fly_dig_moves ; attempt to resolve 16-bit issue with bounce and water sport - this can probably be made more efficient with a farcallable list - call CheckMoveInList + ld hl, WATER_SPORT + call GetMoveIDFromIndex + ld a, h + if HIGH(WATER_SPORT) + cp HIGH(WATER_SPORT) + else + and a + endc + ld a, l pop hl - jr c, .got_move_type + ret nz + cp LOW(WATER_SPORT) + jp z, .set_diving + ld hl, FLY + call GetMoveIDFromIndex + ld a, h + if HIGH(FLY) + cp HIGH(FLY) + else + and a + endc + ld a, l + pop hl + ret nz + cp LOW(FLY) + jr z, .set_flying + ld hl, BOUNCE + call GetMoveIDFromIndex + ld a, h + if HIGH(BOUNCE) + cp HIGH(BOUNCE) + else + and a + endc + ld a, l + pop hl + ret nz + cp LOW(BOUNCE) + jr z, .set_flying + ld hl, DIG + call GetMoveIDFromIndex + ld a, h + if HIGH(DIG) + cp HIGH(DIG) + else + and a + endc + ld a, l + pop hl + ret nz + cp LOW(DIG) + jr z, .set_flying call BattleCommand_RaiseSub - xor a + jr .not_flying -.got_move_type - ; a will contain the substatus 3 bit to set (1 << bit), or 0 if none (not flying/digging underground) - and a - ld l, a - push hl - call nz, DisappearUser +.flying + call DisappearUser +.not_flying ld a, BATTLE_VARS_SUBSTATUS3 call GetBattleVarAddr - pop bc - ld a, c - or [hl] - ld [hl], a + ld a, BATTLE_VARS_MOVE_ANIM + call GetBattleVar + ld b, a + ld hl, WATER_SPORT + call GetMoveIDFromIndex + ld a, h + if HIGH(WATER_SPORT) + cp HIGH(WATER_SPORT) + else + and a + endc + ld a, l + pop hl + ret nz + cp LOW(WATER_SPORT) + jr z, .set_diving + ld hl, FLY + call GetMoveIDFromIndex + ld a, h + if HIGH(FLY) + cp HIGH(FLY) + else + and a + endc + ld a, l + pop hl + ret nz + cp LOW(FLY) + jr z, .set_flying + ld hl, BOUNCE + call GetMoveIDFromIndex + ld a, h + if HIGH(BOUNCE) + cp HIGH(BOUNCE) + else + and a + endc + ld a, l + pop hl + ret nz + cp LOW(BOUNCE) + jr z, .set_flying + ld hl, DIG + call GetMoveIDFromIndex + ld a, h + if HIGH(DIG) + cp HIGH(DIG) + else + and a + endc + ld a, l + pop hl + ret nz + cp LOW(DIG) + jr z, .set_flying + jr nz, .dont_set_digging + set SUBSTATUS_UNDERGROUND, [hl] + jr .dont_set_digging + +.set_diving + ld a, BATTLE_VARS_SUBSTATUS4 + call GetBattleVarAddr + set SUBSTATUS_UNDERWATER, [hl] + jr .dont_set_digging +.set_flying + set SUBSTATUS_FLYING, [hl] + +.dont_set_digging call CheckUserIsCharging jr nz, .mimic ld a, BATTLE_VARS_LAST_COUNTER_MOVE @@ -5750,13 +5871,6 @@ BattleCommand_Charge: text_jump HidUnderwaterText db "@" -.fly_dig_moves - dw FLY - dw DIG - dw BOUNCE - dw WATER_SPORT - dw -1 - BattleCommand_TrapTarget: ld a, [wAttackMissed] and a @@ -6132,6 +6246,7 @@ BattleCommand_DoubleUnderwaterDamage: ld a, BATTLE_VARS_SUBSTATUS4_OPP call GetBattleVar bit SUBSTATUS_UNDERWATER, a + ret z ; fallthrough DoubleDamage: @@ -6952,3 +7067,10 @@ CheckMoveInList: pop de pop bc ret + +FlyDigMoves: + dw FLY + dw DIG + dw BOUNCE + dw WATER_SPORT + dw -1 diff --git a/maps/DebugRoom.asm b/maps/DebugRoom.asm index f8a404b..1826396 100644 --- a/maps/DebugRoom.asm +++ b/maps/DebugRoom.asm @@ -8,12 +8,12 @@ DebugRoom_MapScripts: DebugPokemon1Script: opentext - getmonname STRING_BUFFER_3, AZUMARILL + getmonname STRING_BUFFER_3, BIPULLA writetext ReceivedDebugPokemonText playsound SFX_CAUGHT_MON waitsfx promptbutton - givepoke AZUMARILL, 4, HM_WATER_SPORT + givepoke BIPULLA, 15, HM_WATER_SPORT closetext end @@ -39,11 +39,11 @@ DebugPokemon3Script: faceplayer opentext writetext DebugTextA - cry STROMEN + cry BELLSPROUT pause 15 closetext - loadvar VAR_BATTLETYPE, BATTLETYPE_SHINY - loadwildmon COATL, 75 + loadvar VAR_BATTLETYPE, BATTLETYPE_INVERSE + loadwildmon BELLSPROUT, 10 startbattle reloadmapafterbattle end @@ -56,11 +56,11 @@ DebugPokemon4Script: faceplayer opentext writetext DebugTextB - cry STROMEN + cry BELLSPROUT pause 15 closetext loadvar VAR_BATTLETYPE, BATTLETYPE_SUICUNE - loadwildmon COATL, 75 + loadwildmon BELLSPROUT, 10 startbattle reloadmapafterbattle end