diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index af22ac8e2..1700c6093 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -507,7 +507,7 @@ actors.hero.heroclass.huntress_unlock=To unlock the Huntress _hit enemies with t actors.hero.heroclass.duelist=Duelist actors.hero.heroclass.duelist_desc_short=The Duelist is a weapons master who can use her weapon to trigger a _special weapon ability._ This special ability is _different for every weapon._ -actors.hero.heroclass.duelist_desc=The Duelist starts with a _unique rapier_ with a special ability that recharges over time.\n\nEvery weapon in the game has a _different special ability_ that the Duelist can use.\n\nThe duelist also starts with _three throwing knives_, cloth armor, a waterskin, and a velvet pouch.\n\nThe Duelist automatically identifies:\n_-_ Scrolls of Identify\n_-_ Potions of Strength\n_-_ Scrolls of Mirror Image +actors.hero.heroclass.duelist_desc=The Duelist starts with a _unique rapier_ with a special ability that recharges over time.\n\nEvery weapon in the game has a _different special ability_ that the Duelist can use.\n\nThe duelist also starts with _two throwing spikes_, cloth armor, a waterskin, and a velvet pouch.\n\nThe Duelist automatically identifies:\n_-_ Scrolls of Identify\n_-_ Potions of Strength\n_-_ Scrolls of Mirror Image actors.hero.heroclass.duelist_unlock=To unlock the Duelist _equip a tier 2 or higher weapon with no strength penalty._ actors.hero.herosubclass.berserker=berserker diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index c371a76a5..2007ce121 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1785,6 +1785,9 @@ items.weapon.missiles.throwingknife.desc=These lightweight knives are balanced t items.weapon.missiles.throwingspear.name=throwing spear items.weapon.missiles.throwingspear.desc=These lightweight spears have thin frames which are clearly designed to be thrown, and not thrusted. +items.weapon.missiles.throwingspike.name=throwing spike +items.weapon.missiles.throwingspike.desc=These pointed shafts of metal are meant to be thrown into distant enemies. While they aren't very strong, their simple all-metal construction makes them reasonably durable. + items.weapon.missiles.throwingstone.name=throwing stone items.weapon.missiles.throwingstone.desc=These stones are sanded down to make them able to be thrown with more power than a regular stone. Despite the craftsmanship, they still aren't a very reliable weapon. diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index effe9d6be..da51340fe 100644 Binary files a/core/src/main/assets/sprites/items.png and b/core/src/main/assets/sprites/items.png differ diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java index 0c7b7095a..b7e0af3fc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/hero/HeroClass.java @@ -68,6 +68,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Rapier; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortsword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingKnife; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingSpike; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingStone; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.watabou.utils.DeviceCompat; @@ -216,11 +217,11 @@ public enum HeroClass { (hero.belongings.weapon = new Rapier()).identify(); hero.belongings.weapon.activate(hero); - ThrowingKnife knives = new ThrowingKnife(); - knives.quantity(3).collect(); + ThrowingSpike spikes = new ThrowingSpike(); + spikes.quantity(2).collect(); Dungeon.quickslot.setSlot(0, hero.belongings.weapon); - Dungeon.quickslot.setSlot(1, knives); + Dungeon.quickslot.setSlot(1, spikes); new PotionOfStrength().identify(); new ScrollOfMirrorImage().identify(); 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 927ae2494..acbf373bb 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java @@ -157,6 +157,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingCl import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingHammer; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingKnife; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingSpear; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingSpike; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingStone; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Tomahawk; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Trident; @@ -411,7 +412,8 @@ public class Generator { MIS_T1.classes = new Class[]{ ThrowingStone.class, - ThrowingKnife.class + ThrowingKnife.class, + ThrowingSpike.class }; MIS_T1.probs = new float[]{ 6, 5 }; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/ThrowingSpike.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/ThrowingSpike.java new file mode 100644 index 000000000..32bce40f1 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/ThrowingSpike.java @@ -0,0 +1,39 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2022 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.missiles; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; + +public class ThrowingSpike extends MissileWeapon { + + { + image = ItemSpriteSheet.THROWING_SPIKE; + hitSound = Assets.Sounds.HIT_STAB; + hitSoundPitch = 1.2f; + + bones = false; + + tier = 1; + } + +} 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 306db33ad..91ae74762 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -272,10 +272,10 @@ public class ItemSpriteSheet { //8 free slots - private static final int MISSILE_WEP = xy(1, 10); //16 slots. 3 per tier + boomerang + private static final int MISSILE_WEP = xy(1, 10); //16 slots. 3 per tier + bow public static final int SPIRIT_BOW = MISSILE_WEP+0; - public static final int DART = MISSILE_WEP+1; + public static final int THROWING_SPIKE = MISSILE_WEP+1; public static final int THROWING_KNIFE = MISSILE_WEP+2; public static final int THROWING_STONE = MISSILE_WEP+3; @@ -298,7 +298,7 @@ public class ItemSpriteSheet { static{ assignItemRect(SPIRIT_BOW, 16, 16); - assignItemRect(DART, 15, 15); + assignItemRect(THROWING_SPIKE, 11, 10); assignItemRect(THROWING_KNIFE, 12, 13); assignItemRect(THROWING_STONE, 12, 10); @@ -319,21 +319,22 @@ public class ItemSpriteSheet { assignItemRect(FORCE_CUBE, 11, 12); } - public static final int TIPPED_DARTS = xy(1, 11); //16 slots - public static final int ROT_DART = TIPPED_DARTS+0; - public static final int INCENDIARY_DART = TIPPED_DARTS+1; - public static final int ADRENALINE_DART = TIPPED_DARTS+2; - public static final int HEALING_DART = TIPPED_DARTS+3; - public static final int CHILLING_DART = TIPPED_DARTS+4; - public static final int SHOCKING_DART = TIPPED_DARTS+5; - public static final int POISON_DART = TIPPED_DARTS+6; - public static final int CLEANSING_DART = TIPPED_DARTS+7; - public static final int PARALYTIC_DART = TIPPED_DARTS+8; - public static final int HOLY_DART = TIPPED_DARTS+9; - public static final int DISPLACING_DART = TIPPED_DARTS+10; - public static final int BLINDING_DART = TIPPED_DARTS+11; + public static final int DARTS = xy(1, 11); //16 slots + public static final int DART = DARTS+0; + public static final int ROT_DART = DARTS+1; + public static final int INCENDIARY_DART = DARTS+2; + public static final int ADRENALINE_DART = DARTS+3; + public static final int HEALING_DART = DARTS+4; + public static final int CHILLING_DART = DARTS+5; + public static final int SHOCKING_DART = DARTS+6; + public static final int POISON_DART = DARTS+7; + public static final int CLEANSING_DART = DARTS+8; + public static final int PARALYTIC_DART = DARTS+9; + public static final int HOLY_DART = DARTS+10; + public static final int DISPLACING_DART = DARTS+11; + public static final int BLINDING_DART = DARTS+12; static { - for (int i = TIPPED_DARTS; i < TIPPED_DARTS+16; i++) + for (int i = DARTS; i < DARTS+16; i++) assignItemRect(i, 15, 15); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MissileSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MissileSprite.java index 732205d78..00c84afe2 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MissileSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MissileSprite.java @@ -33,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Kunai; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Shuriken; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingKnife; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingSpear; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingSpike; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Trident; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.Dart; import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap; @@ -90,6 +91,7 @@ public class MissileSprite extends ItemSprite implements Tweener.Listener { static { ANGULAR_SPEEDS.put(Dart.class, 0); ANGULAR_SPEEDS.put(ThrowingKnife.class, 0); + ANGULAR_SPEEDS.put(ThrowingSpike.class, 0); ANGULAR_SPEEDS.put(FishingSpear.class, 0); ANGULAR_SPEEDS.put(ThrowingSpear.class, 0); ANGULAR_SPEEDS.put(Kunai.class, 0); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHeroInfo.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHeroInfo.java index a314ecb3c..0b0891e5a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHeroInfo.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/windows/WndHeroInfo.java @@ -195,7 +195,7 @@ public class WndHeroInfo extends WndTabbed { case DUELIST: icons = new Image[]{ new ItemSprite(ItemSpriteSheet.RAPIER), new ItemSprite(ItemSpriteSheet.WAR_HAMMER), - new ItemSprite(ItemSpriteSheet.THROWING_KNIFE), + new ItemSprite(ItemSpriteSheet.THROWING_SPIKE), new ItemSprite(ItemSpriteSheet.SCROLL_ISAZ)}; break; }