From 613182fd8de4e8ab899beae63745121f78636855 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 20 Apr 2023 13:49:47 -0400 Subject: [PATCH] v2.1.0: added a new katana weapon, which acts like a T4 rapier --- .../assets/messages/items/items.properties | 7 +- core/src/main/assets/sprites/items.png | Bin 20647 -> 20855 bytes .../items/Generator.java | 8 ++- .../items/weapon/melee/Katana.java | 60 ++++++++++++++++++ .../items/weapon/melee/Rapier.java | 30 +++++---- .../sprites/ItemSpriteSheet.java | 2 + 6 files changed, 89 insertions(+), 18 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Katana.java diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 3a269471e..6b4d9e030 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1585,9 +1585,10 @@ items.weapon.melee.handaxe.ability_name=heavy blow items.weapon.melee.handaxe.ability_desc=The Duelist can perform a _heavy blow_ with a hand axe. This strong but predictable attack has -75% accuracy, but deals +65% damage and applies vulnerable and weaken for 5 turns if it hits. Heavy blow can surprise attack. items.weapon.melee.handaxe.desc=A light axe, most commonly used for felling trees. The wide blade works well against foes as well. -items.weapon.melee.knuckles.name=knuckleduster -items.weapon.melee.knuckles.stats_desc=This is a very fast weapon. -items.weapon.melee.knuckles.desc=A piece of iron shaped to fit around the knuckles. Keeps the hands free, yet allows for better attacks than an empty fist. +items.weapon.melee.katana.name=katana +items.weapon.melee.katana.stats_desc=This weapon blocks 0-3 damage. +items.weapon.melee.katana.ability_desc=The Duelist can _lunge_ with a katana at an enemy 1 tile away. This moves toward the enemy, deals +50% damage, and is guaranteed to hit. +items.weapon.melee.katana.desc=A slender sword with a large metal guard above the handle. items.weapon.melee.longsword.name=longsword items.weapon.melee.longsword.ability_name=cleave diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index 3acc1e7c1a6abd357fbe4f811efdbceb53cd7777..0c46d64daaac91f279a76adc8cd716445a0ba77d 100644 GIT binary patch literal 20855 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
  • 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 literal 20647 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 Uh{68LNJ3z@&pz)8&+xQ=0|9Ok!~g&Q diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java index e5b450f07..27aa5fa7b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java @@ -129,6 +129,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Greataxe; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Greatshield; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Greatsword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.HandAxe; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Katana; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Longsword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Mace; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; @@ -377,9 +378,10 @@ public class Generator { Flail.class, RunicBlade.class, AssassinsBlade.class, - Crossbow.class + Crossbow.class, + Katana.class }; - WEP_T4.probs = new float[]{ 6, 5, 5, 4, 4, 4 }; + WEP_T4.probs = new float[]{ 6, 5, 5, 4, 4, 4, 4 }; WEP_T5.classes = new Class[]{ Greatsword.class, @@ -620,7 +622,7 @@ public class Generator { floorSet = (int)GameMath.gate(0, floorSet, floorSetTierProbs.length-1); Category c = wepTiers[Random.chances(floorSetTierProbs[floorSet])]; - MeleeWeapon w = (MeleeWeapon)Reflection.newInstance(c.classes[Random.chances(c.probs)]); + MeleeWeapon w = (MeleeWeapon)random(c); w.random(); return w; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Katana.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Katana.java new file mode 100644 index 000000000..511841ab2 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Katana.java @@ -0,0 +1,60 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2023 Evan Debenham + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; + +public class Katana extends MeleeWeapon { + + { + image = ItemSpriteSheet.KATANA; + hitSound = Assets.Sounds.HIT_SLASH; + hitSoundPitch = 1.1f; + + tier = 4; + } + + @Override + public int max(int lvl) { + return 4*(tier+1) + //20 base, down from 25 + lvl*(tier+1); //scaling unchanged + } + + @Override + public int defenseFactor( Char owner ) { + return 3; //3 extra defence + } + + @Override + public String targetingPrompt() { + return Messages.get(this, "prompt"); + } + + @Override + protected void duelistAbility(Hero hero, Integer target) { + Rapier.lungeAbility(hero, target, 1.5f, 0, this); + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Rapier.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Rapier.java index 80569995e..c30c4e4b9 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Rapier.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Rapier.java @@ -67,6 +67,12 @@ public class Rapier extends MeleeWeapon { @Override protected void duelistAbility(Hero hero, Integer target) { + //+(3+lvl) damage, equivalent to +67% damage, but more consistent + int dmgBoost = augment.damageFactor(3 + level()); + lungeAbility(hero, target, 1, dmgBoost, this); + } + + public static void lungeAbility(Hero hero, Integer target, float dmgMulti, int dmgBoost, MeleeWeapon wep){ if (target == null){ return; } @@ -75,20 +81,20 @@ public class Rapier extends MeleeWeapon { //duelist can lunge out of her FOV, but this wastes the ability instead of cancelling if there is no target if (Dungeon.level.heroFOV[target]) { if (enemy == null || enemy == hero || hero.isCharmedBy(enemy)) { - GLog.w(Messages.get(this, "ability_no_target")); + GLog.w(Messages.get(wep, "ability_no_target")); return; } } if (hero.rooted || Dungeon.level.distance(hero.pos, target) < 2 - || Dungeon.level.distance(hero.pos, target)-1 > reachFactor(hero)){ - GLog.w(Messages.get(this, "ability_bad_position")); + || Dungeon.level.distance(hero.pos, target)-1 > wep.reachFactor(hero)){ + GLog.w(Messages.get(wep, "ability_bad_position")); return; } int lungeCell = -1; for (int i : PathFinder.NEIGHBOURS8){ - if (Dungeon.level.distance(hero.pos+i, target) <= reachFactor(hero) + if (Dungeon.level.distance(hero.pos+i, target) <= wep.reachFactor(hero) && Actor.findChar(hero.pos+i) == null && (Dungeon.level.passable[hero.pos+i] || (Dungeon.level.avoid[hero.pos+i] && hero.flying))){ if (lungeCell == -1 || Dungeon.level.trueDistance(hero.pos + i, target) < Dungeon.level.trueDistance(lungeCell, target)){ @@ -98,7 +104,7 @@ public class Rapier extends MeleeWeapon { } if (lungeCell == -1){ - GLog.w(Messages.get(this, "ability_bad_position")); + GLog.w(Messages.get(wep, "ability_bad_position")); return; } @@ -118,25 +124,25 @@ public class Rapier extends MeleeWeapon { hero.sprite.attack(enemy.pos, new Callback() { @Override public void call() { - //+3+lvl damage, equivalent to +67% damage, but more consistent - beforeAbilityUsed(hero); + + wep.beforeAbilityUsed(hero); AttackIndicator.target(enemy); - if (hero.attack(enemy, 1f, augment.damageFactor(3 + level()), Char.INFINITE_ACCURACY)) { + if (hero.attack(enemy, dmgMulti, dmgBoost, Char.INFINITE_ACCURACY)) { Sample.INSTANCE.play(Assets.Sounds.HIT_STRONG); if (!enemy.isAlive()) { - onAbilityKill(hero); + wep.onAbilityKill(hero); } } Invisibility.dispel(); hero.spendAndNext(hero.attackDelay()); - afterAbilityUsed(hero); + wep.afterAbilityUsed(hero); } }); } else { - beforeAbilityUsed(hero); + wep.beforeAbilityUsed(hero); GLog.w(Messages.get(Rapier.class, "ability_no_target")); hero.spendAndNext(hero.speed()); - afterAbilityUsed(hero); + wep.afterAbilityUsed(hero); } } }); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index fbcb7ac67..44b22b2b0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -245,6 +245,7 @@ public class ItemSpriteSheet { public static final int RUNIC_BLADE = WEP_TIER4+3; public static final int ASSASSINS_BLADE = WEP_TIER4+4; public static final int CROSSBOW = WEP_TIER4+5; + public static final int KATANA = WEP_TIER4+6; static{ assignItemRect(LONGSWORD, 15, 15); assignItemRect(BATTLE_AXE, 16, 16); @@ -252,6 +253,7 @@ public class ItemSpriteSheet { assignItemRect(RUNIC_BLADE, 14, 14); assignItemRect(ASSASSINS_BLADE, 14, 15); assignItemRect(CROSSBOW, 15, 15); + assignItemRect(KATANA, 15, 16); } private static final int WEP_TIER5 = xy(1, 9); //8 slots