v0.9.3: adjusted nature's power, now stacks additively with furor

This commit is contained in:
Evan Debenham 2021-05-26 19:11:46 -04:00
parent 86dd8bd810
commit 52b46ae266
9 changed files with 41 additions and 35 deletions
core/src/main/java/com/shatteredpixel/shatteredpixeldungeon

View File

@ -581,13 +581,13 @@ public class Hero extends Char {
if (belongings.weapon != null) {
return belongings.weapon.speedFactor( this );
return belongings.weapon.delayFactor( this );
} else {
//Normally putting furor speed on unarmed attacks would be unnecessary
//But there's going to be that one guy who gets a furor+force ring combo
//This is for that one guy, you shall get your fists of fury!
return RingOfFuror.attackDelayMultiplier(this);
return 1f/RingOfFuror.attackSpeedMultiplier(this);
}
}

View File

@ -95,7 +95,7 @@ public class Statue extends Mob {
@Override
public float attackDelay() {
return super.attackDelay()*weapon.speedFactor( this );
return super.attackDelay()*weapon.delayFactor( this );
}
@Override

View File

@ -107,7 +107,7 @@ abstract public class KindOfWeapon extends EquipableItem {
return 1f;
}
public float speedFactor( Char owner ) {
public float delayFactor(Char owner ) {
return 1f;
}

View File

@ -33,11 +33,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Corruption;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.LockedFloor;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Wraith;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.DirectableAlly;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Ghost;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NPC;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShaftParticle;
@ -567,7 +565,7 @@ public class DriedRose extends Artifact {
public float attackDelay() {
float delay = super.attackDelay();
if (rose != null && rose.weapon != null){
delay *= rose.weapon.speedFactor(this);
delay *= rose.weapon.delayFactor(this);
}
return delay;
}

View File

@ -46,8 +46,8 @@ public class RingOfFuror extends Ring {
return new Furor();
}
public static float attackDelayMultiplier(Char target ){
return 1f / (float)Math.pow(1.105, getBuffedBonus(target, Furor.class));
public static float attackSpeedMultiplier(Char target ){
return (float)Math.pow(1.105, getBuffedBonus(target, Furor.class));
}
public class Furor extends RingBuff {

View File

@ -238,29 +238,31 @@ public class SpiritBow extends Weapon {
}
@Override
public float speedFactor(Char owner) {
protected float baseDelay(Char owner) {
if (sniperSpecial){
switch (augment){
case NONE: default:
return 0f;
case SPEED:
return 1f * RingOfFuror.attackDelayMultiplier(owner);
return 1f * RingOfFuror.attackSpeedMultiplier(owner);
case DAMAGE:
return 2f * RingOfFuror.attackDelayMultiplier(owner);
return 2f * RingOfFuror.attackSpeedMultiplier(owner);
}
} else {
float speed = super.speedFactor(owner);
if (owner.buff(NaturesPower.naturesPowerTracker.class) != null){
// 1.33x speed to 1.5x speed, depending on talent points
speed /= ((32 + ((Hero)owner).pointsInTalent(Talent.GROWING_POWER)) / 24f);
}
return speed;
} else{
return super.baseDelay(owner);
}
}
@Override
protected float speedMultiplier(Char owner) {
float speed = super.speedMultiplier(owner);
if (owner.buff(NaturesPower.naturesPowerTracker.class) != null){
// +33% speed to +50% speed, depending on talent points
speed += ((8 + ((Hero)owner).pointsInTalent(Talent.GROWING_POWER)) / 24f);
}
return speed;
}
@Override
public int level() {
return (Dungeon.hero == null ? 0 : Dungeon.hero.lvl/5) + (curseInfusionBonus ? 1 : 0);
@ -318,8 +320,8 @@ public class SpiritBow extends Weapon {
}
@Override
public float speedFactor(Char user) {
return SpiritBow.this.speedFactor(user);
public float delayFactor(Char user) {
return SpiritBow.this.delayFactor(user);
}
@Override

View File

@ -181,18 +181,24 @@ abstract public class Weapon extends KindOfWeapon {
}
@Override
public float speedFactor( Char owner ) {
public float delayFactor( Char owner ) {
return baseDelay(owner) * (1f/speedMultiplier(owner));
}
int encumbrance = 0;
protected float baseDelay( Char owner ){
float delay = augment.delayFactor(this.DLY);
if (owner instanceof Hero) {
encumbrance = STRReq() - ((Hero)owner).STR();
int encumbrance = STRReq() - ((Hero)owner).STR();
if (encumbrance > 0){
delay *= Math.pow( 1.2, encumbrance );
}
}
float DLY = augment.delayFactor(this.DLY);
return delay;
}
DLY *= RingOfFuror.attackDelayMultiplier(owner);
return (encumbrance > 0 ? (float)(DLY * Math.pow( 1.2, encumbrance )) : DLY);
protected float speedMultiplier(Char owner ){
return RingOfFuror.attackSpeedMultiplier(owner);
}
@Override

View File

@ -235,7 +235,7 @@ abstract public class MissileWeapon extends Weapon {
@Override
public float castDelay(Char user, int dst) {
return speedFactor( user );
return delayFactor( user );
}
protected void rangedHit( Char enemy, int cell ){

View File

@ -44,8 +44,8 @@ public class Shuriken extends MissileWeapon {
}
@Override
public float speedFactor(Char owner) {
public float delayFactor(Char owner) {
if (owner instanceof Hero && ((Hero) owner).justMoved) return 0;
else return super.speedFactor(owner);
else return super.delayFactor(owner);
}
}