diff options
-rwxr-xr-x | data/battle/weather_modifiers.asm | 10 | ||||
-rwxr-xr-x | data/types/badge_type_boosts.asm | 21 | ||||
-rwxr-xr-x | engine/battle/misc.asm | 219 | ||||
-rw-r--r-- | main.asm | 12 |
4 files changed, 251 insertions, 11 deletions
diff --git a/data/battle/weather_modifiers.asm b/data/battle/weather_modifiers.asm new file mode 100755 index 00000000..d0acdc25 --- /dev/null +++ b/data/battle/weather_modifiers.asm @@ -0,0 +1,10 @@ +WeatherTypeModifiers: + db WEATHER_RAIN, WATER, MORE_EFFECTIVE + db WEATHER_RAIN, FIRE, NOT_VERY_EFFECTIVE + db WEATHER_SUN, FIRE, MORE_EFFECTIVE + db WEATHER_SUN, WATER, NOT_VERY_EFFECTIVE + db -1 ; end + +WeatherMoveModifiers: + db WEATHER_RAIN, EFFECT_SOLARBEAM, NOT_VERY_EFFECTIVE + db -1 ; end diff --git a/data/types/badge_type_boosts.asm b/data/types/badge_type_boosts.asm new file mode 100755 index 00000000..fb353df7 --- /dev/null +++ b/data/types/badge_type_boosts.asm @@ -0,0 +1,21 @@ +BadgeTypeBoosts: +; entries correspond to wJohtoBadges constants + db FLYING ; ZEPHYRBADGE + db BUG ; HIVEBADGE + db NORMAL ; PLAINBADGE + db GHOST ; FOGBADGE + db STEEL ; MINERALBADGE + db FIGHTING ; STORMBADGE + db ICE ; GLACIERBADGE + db DRAGON ; RISINGBADGE + ; fallthrough +; entries correspond to wKantoBadges constants + db ROCK ; BOULDERBADGE + db WATER ; CASCADEBADGE + db ELECTRIC ; THUNDERBADGE + db GRASS ; RAINBOWBADGE + db POISON ; SOULBADGE + db PSYCHIC_TYPE ; MARSHBADGE + db FIRE ; VOLCANOBADGE + db GROUND ; EARTHBADGE + db -1 ; end diff --git a/engine/battle/misc.asm b/engine/battle/misc.asm new file mode 100755 index 00000000..ae178a4b --- /dev/null +++ b/engine/battle/misc.asm @@ -0,0 +1,219 @@ +_DisappearUser: + xor a + ldh [hBGMapMode], a + ldh a, [hBattleTurn] + and a + jr z, .player + call GetEnemyFrontpicCoords + jr .okay +.player + call GetPlayerBackpicCoords +.okay + call ClearBox + jr FinishAppearDisappearUser + +_AppearUserRaiseSub: + farcall BattleCommand_RaiseSubNoAnim + jr AppearUser + +_AppearUserLowerSub: + farcall BattleCommand_LowerSubNoAnim + +AppearUser: + xor a + ldh [hBGMapMode], a + ldh a, [hBattleTurn] + and a + jr z, .player + call GetEnemyFrontpicCoords + xor a + jr .okay +.player + call GetPlayerBackpicCoords + ld a, $31 +.okay + ldh [hGraphicStartTile], a + predef PlaceGraphic +FinishAppearDisappearUser: + ld a, $1 + ldh [hBGMapMode], a + ret + +GetEnemyFrontpicCoords: + hlcoord 12, 0 + lb bc, 7, 7 + ret + +GetPlayerBackpicCoords: + hlcoord 2, 6 + lb bc, 6, 6 + ret + +DoWeatherModifiers: + ld de, WeatherTypeModifiers + ld a, [wBattleWeather] + ld b, a + ld a, [wCurType] + ld c, a + +.CheckWeatherType: + ld a, [de] + inc de + cp -1 + jr z, .done_weather_types + + cp b + jr nz, .NextWeatherType + + ld a, [de] + cp c + jr z, .ApplyModifier + +.NextWeatherType: + inc de + inc de + jr .CheckWeatherType + +.done_weather_types + ld de, WeatherMoveModifiers + + ld a, BATTLE_VARS_MOVE_EFFECT + call GetBattleVar + ld c, a + +.CheckWeatherMove: + ld a, [de] + inc de + cp -1 + jr z, .done + + cp b + jr nz, .NextWeatherMove + + ld a, [de] + cp c + jr z, .ApplyModifier + +.NextWeatherMove: + inc de + inc de + jr .CheckWeatherMove + +.ApplyModifier: + xor a + ldh [hMultiplicand + 0], a + ld a, [wCurDamage] + ldh [hMultiplicand + 1], a + ld a, [wCurDamage + 1] + ldh [hMultiplicand + 2], a + + inc de + ld a, [de] + ldh [hMultiplier], a + + call Multiply + + ld a, 10 + ldh [hDivisor], a + ld b, 4 + call Divide + + ldh a, [hQuotient + 1] + and a + ld bc, -1 + jr nz, .Update + + ldh a, [hQuotient + 2] + ld b, a + ldh a, [hQuotient + 3] + ld c, a + or b + jr nz, .Update + + ld bc, 1 + +.Update: + ld a, b + ld [wCurDamage], a + ld a, c + ld [wCurDamage + 1], a + +.done + ret + +INCLUDE "data/battle/weather_modifiers.asm" + +DoBadgeTypeBoosts: + ld a, [wLinkMode] + and a + ret nz + + ldh a, [hBattleTurn] + and a + ret nz + + push de + push bc + + ld hl, BadgeTypeBoosts + + ld a, [wKantoBadges] + ld b, a + ld a, [wJohtoBadges] + ld c, a + +.CheckBadge: + ld a, [hl] + cp -1 + jr z, .done + + srl b + rr c + jr nc, .NextBadge + + ld a, [wCurType] + cp [hl] + jr z, .ApplyBoost + +.NextBadge: + inc hl + jr .CheckBadge + +.ApplyBoost: + ld a, [wCurDamage] + ld h, a + ld d, a + ld a, [wCurDamage + 1] + ld l, a + ld e, a + + srl d + rr e + srl d + rr e + srl d + rr e + + ld a, e + or d + jr nz, .done_min + ld e, 1 + +.done_min + add hl, de + jr nc, .Update + + ld hl, $ffff + +.Update: + ld a, h + ld [wCurDamage], a + ld a, l + ld [wCurDamage + 1], a + +.done + pop bc + pop de + ret + +INCLUDE "data/types/badge_type_boosts.asm" @@ -382,17 +382,7 @@ INCLUDE "engine/link/time_capsule_2.asm" INCLUDE "engine/pokedex/unown_dex.asm" INCLUDE "engine/events/magikarp.asm" INCLUDE "engine/battle/hidden_power.asm" - -_DisappearUser:: - dr $fbe5a, $fbe6f -_AppearUserRaiseSub:: - dr $fbe6f, $fbe77 -_AppearUserLowerSub:: - dr $fbe77, $fbeaa -DoWeatherModifiers:: - dr $fbeaa, $fbf2b -DoBadgeTypeBoosts:: - dr $fbf2b, $fbf93 +INCLUDE "engine/battle/misc.asm" SECTION "bank3F", ROMX |