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 7d15379d1..3b3becdd0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Generator.java @@ -141,8 +141,10 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortswor import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Bolas; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.FishingSpear; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Javelin; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Kunai; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Shuriken; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingClub; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingHammer; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingKnife; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingSpear; @@ -382,15 +384,17 @@ public class Generator { MIS_T2.classes = new Class[]{ FishingSpear.class, + ThrowingClub.class, Shuriken.class }; - MIS_T2.probs = new float[]{ 4, 3 }; + MIS_T2.probs = new float[]{ 6, 5, 4 }; MIS_T3.classes = new Class[]{ ThrowingSpear.class, + Kunai.class, Bolas.class }; - MIS_T3.probs = new float[]{ 4, 3 }; + MIS_T3.probs = new float[]{ 6, 5, 4 }; MIS_T4.classes = new Class[]{ Javelin.class, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/Kunai.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/Kunai.java new file mode 100644 index 000000000..8bcd3f3cf --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/Kunai.java @@ -0,0 +1,68 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2019 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.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; +import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.utils.Random; + +public class Kunai extends MissileWeapon { + + { + image = ItemSpriteSheet.KUNAI; + + tier = 3; + baseUses = 5; + } + + private Char enemy; + + @Override + protected void onThrow(int cell) { + enemy = Actor.findChar(cell); + super.onThrow(cell); + } + + @Override + public int damageRoll(Char owner) { + if (owner instanceof Hero) { + Hero hero = (Hero)owner; + if (enemy instanceof Mob && ((Mob) enemy).surprisedBy(hero)) { + //deals 60% toward max to max on surprise, instead of min to max. + int diff = max() - min(); + int damage = augment.damageFactor(Random.NormalIntRange( + min() + Math.round(diff*0.6f), + max())); + int exStr = hero.STR() - STRReq(); + if (exStr > 0) { + damage += Random.IntRange(0, exStr); + } + return damage; + } + } + return super.damageRoll(owner); + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/ThrowingClub.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/ThrowingClub.java new file mode 100644 index 000000000..041e2c0fa --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/weapon/missiles/ThrowingClub.java @@ -0,0 +1,41 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2019 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.sprites.ItemSpriteSheet; + +public class ThrowingClub extends MissileWeapon { + + { + image = ItemSpriteSheet.THROWING_CLUB; + + tier = 2; + baseUses = 15; + sticky = false; + } + + @Override + public int max(int lvl) { + return 4 * tier + //8 base, down from 10 + (tier) * lvl; //scaling unchanged + } +} 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 e19add185..d6ac6bf76 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MissileSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MissileSprite.java @@ -29,6 +29,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Bolas; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Boomerang; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.FishingSpear; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Javelin; +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; @@ -85,6 +86,7 @@ public class MissileSprite extends ItemSprite implements Tweener.Listener { ANGULAR_SPEEDS.put(ThrowingKnife.class, 0); ANGULAR_SPEEDS.put(FishingSpear.class, 0); ANGULAR_SPEEDS.put(ThrowingSpear.class, 0); + ANGULAR_SPEEDS.put(Kunai.class, 0); ANGULAR_SPEEDS.put(Javelin.class, 0); ANGULAR_SPEEDS.put(Trident.class, 0); diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties index a61fa630b..a934ae9cd 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/items/items.properties @@ -1382,15 +1382,15 @@ items.weapon.missiles.boomerang.name=boomerang items.weapon.missiles.boomerang.desc=Thrown to the enemy this flat curved wooden missile will return to the hands of its thrower. items.weapon.missiles.boomerang.durability=Due to its solid construction, this boomerang will not break from use. -items.weapon.missiles.curaredart.name=curare dart -items.weapon.missiles.curaredart.desc=These darts are tipped with an earthroot-based compound which will paralyze their target for a short time. - items.weapon.missiles.fishingspear.name=fishing spear items.weapon.missiles.fishingspear.desc=Tiny throwing spears designed for fishing. They work well as an improvised weapon too. items.weapon.missiles.javelin.name=javelin items.weapon.missiles.javelin.desc=These larger throwing spears are weighted to keep the spike at their tip foremost as they sail through the air. +items.weapon.missiles.kunai.name=kunai +items.weapon.missiles.kunai.desc=These small knives are very powerful in the hands of a skilled user. They are most effective against unaware enemies. + items.weapon.missiles.missileweapon.stats=This _tier-%1$d_ thrown weapon deals _%2$d-%3$d damage_ and requires _%4$d strength_ to use properly. items.weapon.missiles.missileweapon.distance=This weapon is designed to be used at a distance, it is more accurate against distant enemies, but also much less accurate at melee range. items.weapon.missiles.missileweapon.durability=Thrown weapons will wear out and break as they are used. @@ -1401,6 +1401,9 @@ items.weapon.missiles.missileweapon.about_to_break=Your thrown weapon is about t items.weapon.missiles.shuriken.name=shuriken items.weapon.missiles.shuriken.desc=Star-shaped pieces of metal with razor-sharp blades. They are lightweight and easy to use on the move. A single shuriken can be thrown instantly after moving. +items.weapon.missiles.throwingclub.name=throwing club +items.weapon.missiles.throwingclub.desc=A fairly simply thrown weapon, essentially a large rock fastened to a stick. While they are a bit lacking in damage, their solid stone head means they are quite durable, and won't stick to enemies. + items.weapon.missiles.throwinghammer.name=throwing hammer items.weapon.missiles.throwinghammer.desc=These hefty hammers are designed to be thrown at an enemy. While they are a bit lacking in damage, their smooth all-metal construction means they are quite durable, and won't stick to enemies.