From 346b4b78e6d0d4e776f2201104d67bbc170f51cc Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 4 Mar 2016 23:48:34 -0500 Subject: [PATCH] v0.3.5: added support for longer reach weapons --- .../shatteredpixeldungeon/actors/hero/Hero.java | 8 ++++++-- .../shatteredpixeldungeon/items/KindOfWeapon.java | 7 ++++--- .../shatteredpixeldungeon/items/weapon/melee/Spear.java | 8 +++++++- .../shatteredpixeldungeon/messages/items/items.properties | 2 +- .../shatteredpixeldungeon/ui/AttackIndicator.java | 6 ++++-- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java index 7b4a85576..172b604f0 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/hero/Hero.java @@ -75,8 +75,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfMight; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfTenacity; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping; -import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicalInfusion; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; @@ -800,7 +800,11 @@ public class Hero extends Char { enemy = action.target; - if (Level.adjacent( pos, enemy.pos ) && enemy.isAlive() && !isCharmedBy( enemy )) { + boolean inRange = belongings.weapon != null ? + Level.distance( pos, enemy.pos ) <= belongings.weapon.reachFactor(this) + : Level.adjacent( pos, enemy.pos ); + + if (inRange && enemy.isAlive() && !isCharmedBy( enemy )) { spend( attackDelay() ); sprite.attack( enemy.pos ); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/KindOfWeapon.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/KindOfWeapon.java index 26d17bd14..ad0860735 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/KindOfWeapon.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/KindOfWeapon.java @@ -20,9 +20,6 @@ */ package com.shatteredpixel.shatteredpixeldungeon.items; -import java.util.ArrayList; - -import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -97,6 +94,10 @@ abstract public class KindOfWeapon extends EquipableItem { public float speedFactor( Hero hero ) { return 1f; } + + public int reachFactor( Hero hero ){ + return 1; + } public void proc( Char attacker, Char defender, int damage ) { } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Spear.java b/src/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Spear.java index 82b7b3112..c34df4dcd 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Spear.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/items/weapon/melee/Spear.java @@ -20,6 +20,7 @@ */ package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; public class Spear extends MeleeWeapon { @@ -27,7 +28,12 @@ public class Spear extends MeleeWeapon { { image = ItemSpriteSheet.SPEAR; } - + + @Override + public int reachFactor(Hero hero) { + return 2; + } + public Spear() { super( 2, 1f, 1.5f ); } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties b/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties index aaab5cb1c..13d98d122 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties +++ b/src/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties @@ -732,7 +732,7 @@ items.weapon.melee.shortsword.ac_reforge=REFORGE items.weapon.melee.shortsword.desc=It is indeed quite short, just a few inches longer, than a dagger. items.weapon.melee.spear.name=spear -items.weapon.melee.spear.stats_desc=This is a rather slow weapon. +items.weapon.melee.spear.stats_desc=This is a rather slow weapon.\nThis weapon has extra reach. items.weapon.melee.spear.desc=A slender wooden rod tipped with sharpened iron. items.weapon.melee.sword.name=sword diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java b/src/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java index c106cc186..b6b2732c9 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/ui/AttackIndicator.java @@ -96,13 +96,15 @@ public class AttackIndicator extends Tag { } private void checkEnemies() { - + int heroPos = Dungeon.hero.pos; candidates.clear(); int v = Dungeon.hero.visibleEnemies(); for (int i=0; i < v; i++) { Mob mob = Dungeon.hero.visibleEnemy( i ); - if (Level.adjacent( heroPos, mob.pos )) { + if (Dungeon.hero.belongings.weapon != null ? + Level.distance( heroPos, mob.pos ) <= Dungeon.hero.belongings.weapon.reachFactor(Dungeon.hero) + : Level.adjacent( heroPos, mob.pos )) { candidates.add( mob ); } }