v2.0.0: added a unique starting thrown weapon for the duelist

This commit is contained in:
Evan Debenham
2022-12-16 14:03:34 -05:00
parent 65b89da180
commit 04b2619ff9
9 changed files with 71 additions and 23 deletions

View File

@@ -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

View File

@@ -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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -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();

View File

@@ -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 };

View File

@@ -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 <http://www.gnu.org/licenses/>
*/
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;
}
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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;
}