v3.3.0: Further thrown weapon changes

- tomahawk bleed is now more clearly shown in desc
- tomahawk bleed up to ~40% from 33%
- reverted boomerang damage nerf after further consideration
This commit is contained in:
Evan Debenham
2025-11-19 11:36:33 -05:00
parent aa4be941c1
commit b975708a84
7 changed files with 56 additions and 10 deletions

View File

@@ -2193,7 +2193,7 @@ items.weapon.missiles.forcecube.stats_desc=This weapon spreads the force of its
items.weapon.missiles.forcecube.desc=These oddly-shaped magical cubes are small enough to hold in your hand, but are incredibly heavy.
items.weapon.missiles.heavyboomerang.name=heavy boomerang
items.weapon.missiles.heavyboomerang.stats_desc=This weapon circles back to the location it was thrown from after a few turns.
items.weapon.missiles.heavyboomerang.stats_desc=This weapon circles back to the location it was thrown from after five turns.
items.weapon.missiles.heavyboomerang.desc=This large boomerang is difficult to wield effectively, but will deal considerable damage.
items.weapon.missiles.javelin.name=javelin
@@ -2252,7 +2252,8 @@ items.weapon.missiles.throwingstone.desc=These stones are sanded down to make th
items.weapon.missiles.throwingstone.discover_hint=One of the heroes starts with this item.
items.weapon.missiles.tomahawk.name=tomahawk
items.weapon.missiles.tomahawk.stats_desc=This weapon inflicts bleed equal to half the damage dealt to its target.
items.weapon.missiles.tomahawk.stats_desc=This weapon inflicts _%1$d-%2$d bleed_ to its target.
items.weapon.missiles.tomahawk.typical_stats_desc=This weapon typically inflicts _%1$d-%2$d bleed_ to its target.
items.weapon.missiles.tomahawk.desc=These throwing axes have a serrated edge that tears as they stick to an enemy.
items.weapon.missiles.trident.name=trident

View File

@@ -380,6 +380,7 @@ windows.wndupgrade.resin=This wand has been enhanced with arcane resin, normal u
windows.wndupgrade.thrown_dust=Weapons from this set that aren't in your inventory will crumble to dust.
windows.wndupgrade.damage=Damage
windows.wndupgrade.dart_damage=Dart Damage
windows.wndupgrade.bleeding=Bleeding
windows.wndupgrade.blocking=Blocking
windows.wndupgrade.weight=Weight
windows.wndupgrade.durability=Durability

View File

@@ -105,6 +105,10 @@ abstract public class Weapon extends KindOfWeapon {
return Math.round(dmg * damageFactor);
}
public float damageFactor(float dmg){
return dmg * damageFactor;
}
public float delayFactor(float dly){
return dly * delayFactor;
}

View File

@@ -45,12 +45,6 @@ public class HeavyBoomerang extends MissileWeapon {
baseUses = 5;
}
@Override
public int min(int lvl) {
return 2 * (tier-1) + //6 base, down from 8
0*lvl; //0 scaling, down from 1
}
@Override
public int max(int lvl) {
return 4 * tier + //16 base, down from 20

View File

@@ -653,7 +653,7 @@ abstract public class MissileWeapon extends Weapon {
}
info += "\n\n";
String statsInfo = Messages.get(this, "stats_desc");
String statsInfo = statsInfo();
if (!statsInfo.equals("")) info += statsInfo + " ";
info += Messages.get(MissileWeapon.class, "distance");
@@ -685,6 +685,10 @@ abstract public class MissileWeapon extends Weapon {
return info;
}
public String statsInfo(){
return Messages.get(this, "stats_desc");
}
@Override
public int value() {

View File

@@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.watabou.utils.Random;
@@ -50,11 +51,43 @@ public class Tomahawk extends MissileWeapon {
return Math.round(4f * tier) + //16 base, down from 20
(tier-1)*lvl; //3 scaling, down from 4
}
public float minBleed(){
return minBleed(buffedLvl());
}
public float minBleed(int lvl){
return 3 + lvl/2f;
}
public float maxBleed(){
return maxBleed(buffedLvl());
}
public float maxBleed(int lvl){
return 6 + lvl;
}
@Override
public int proc( Char attacker, Char defender, int damage ) {
//33% damage roll as bleed, but ignores armor and str bonus
Buff.affect( defender, Bleeding.class ).set( Math.round(augment.damageFactor(Random.NormalIntRange(min(), max()))/3f) );
//currently 2-5.3, plus 0.33-1 per level
//increasing to 40% results in: 2.4-6.4, plus 0.4-1.2 per level
//maybe standardize that to 3-6 plus 0.5-1 per level
Buff.affect( defender, Bleeding.class ).set( augment.damageFactor(Random.NormalFloat(minBleed(), maxBleed())) );
return super.proc( attacker, defender, damage );
}
public String statsInfo(){
if (isIdentified()){
return Messages.get(this, "stats_desc",
Math.round(augment.damageFactor(minBleed())),
Math.round(augment.damageFactor(maxBleed())));
} else {
return Messages.get(this, "typical_stats_desc",
Math.round(augment.damageFactor(minBleed(0))),
Math.round(augment.damageFactor(maxBleed(0))));
}
}
}

View File

@@ -38,6 +38,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RoundShield;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Tomahawk;
import com.shatteredpixel.shatteredpixeldungeon.messages.Languages;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
@@ -211,6 +212,14 @@ public class WndUpgrade extends Window {
bottom);
}
//bleeding (tomahawk)
if (toUpgrade instanceof Tomahawk){
bottom = fillFields(Messages.get(this, "bleeding"),
Math.round(((Tomahawk) toUpgrade).minBleed(levelFrom)) + "-" + Math.round(((Tomahawk) toUpgrade).maxBleed(levelFrom)),
Math.round(((Tomahawk) toUpgrade).minBleed(levelTo)) + "-" + Math.round(((Tomahawk) toUpgrade).maxBleed(levelTo)),
bottom);
}
if (Dungeon.hero != null && Dungeon.hero.heroClass == HeroClass.DUELIST
&& toUpgrade instanceof MeleeWeapon && ((MeleeWeapon) toUpgrade).upgradeAbilityStat(levelFrom) != null){
bottom = fillFields(Messages.get(toUpgrade, "upgrade_ability_stat_name"),