v2.4.0: Big Duelist charge speed changes:
- charge speed down by 33% - ALL weapon abilities buffed to compensate - Champion weapons now share a charge count - Champion now gives bonus charges and charge speed Champion's secondary charge talent does nothing ATM, and RoF has not been changed, both coming in later commits
This commit is contained in:
@@ -595,8 +595,8 @@ actors.hero.herosubclass.warden=warden
|
||||
actors.hero.herosubclass.warden_short_desc=The _Warden_ can see through tall grass and gains bonus effects when she plants seeds and tramples plants.
|
||||
actors.hero.herosubclass.warden_desc=The Warden has a strong connection to nature which grants her a variety of bonus effects relating to grass and plants. She is able to see through tall and furrowed grass as if it were empty space.\n\nThe Warden causes grass to sprout up around any seed she throws or plants, and gains special effects when trampling plants. These special effects replace the regular plant effects, meaning that no plant is harmful for her to step on.
|
||||
actors.hero.herosubclass.champion=champion
|
||||
actors.hero.herosubclass.champion_short_desc=The _Champion_ can wield two weapons. Her regular attacks use her primary weapon, but she can swap weapons and use either weapon's ability.
|
||||
actors.hero.herosubclass.champion_desc=The Champion is a master of melee weapons who can equip a secondary weapon in addition to her primary one. Her regular attacks use her primary weapon, but she can swap her primary weapon instantly.\n\nThe secondary weapon's ability can be used at any time and has its own ability charges. Her secondary weapon charges have a 50% reduced charge cap and charge speed.
|
||||
actors.hero.herosubclass.champion_short_desc=The _Champion_ can wield two weapons and gets more weapon charges. Her regular attacks use her primary weapon, but she can swap weapons and use either weapon's ability.
|
||||
actors.hero.herosubclass.champion_desc=The Champion is a master of melee weapons who can equip a secondary weapon in addition to her primary one. Her regular attacks use her primary weapon, but she can swap her primary weapon instantly and use either weapon's ability.\n\nShe also gains 2 more max weapon ability charges and +50% weapon ability recharge speed.
|
||||
actors.hero.herosubclass.monk=monk
|
||||
actors.hero.herosubclass.monk_short_desc=The _Monk_ builds energy while fighting. This energy can be spent on a variety of unique abilities.
|
||||
actors.hero.herosubclass.monk_desc=The Monk is a master of physical technique. As she defeats enemies, she gains energy which can be used on a variety of defensive and utility-focused abilities. This energy does not fade over time, but has a cap based on the Monk's level.\n\n1 Energy: quickly strike with fists\n2 Energy: focus to dodge next attack\n3 Energy: instantly dash nearby\n4 Energy: kick an enemy away\n5 Energy: meditate to restore charges
|
||||
|
||||
@@ -1589,22 +1589,22 @@ items.weapon.enchantments.vampiric.elestrike_desc=An elemental strike with a vam
|
||||
items.weapon.melee.assassinsblade.name=assassin's blade
|
||||
items.weapon.melee.assassinsblade.stats_desc=This weapon is stronger against unaware enemies.
|
||||
items.weapon.melee.assassinsblade.ability_name=sneak
|
||||
items.weapon.melee.assassinsblade.typical_ability_desc=The Duelist can _sneak_ while wielding an assassin's blade. This ability lets the Duelist instantly blink up to 3 tiles away and typically grants her _%d turns of invisibility,_ but costs 2 charges.
|
||||
items.weapon.melee.assassinsblade.ability_desc=The Duelist can _sneak_ while wielding an assassin's blade. This ability lets the Duelist instantly blink up to 3 tiles away and grants her _%d turns of invisibility,_ but costs 2 charges.
|
||||
items.weapon.melee.assassinsblade.typical_ability_desc=The Duelist can _sneak_ while wielding an assassin's blade. This ability lets the Duelist instantly blink up to 3 tiles away and typically grants her _%d turns of invisibility._
|
||||
items.weapon.melee.assassinsblade.ability_desc=The Duelist can _sneak_ while wielding an assassin's blade. This ability lets the Duelist instantly blink up to 3 tiles away and grants her _%d turns of invisibility._
|
||||
items.weapon.melee.assassinsblade.desc=A small wavy blade made of obsidian, difficult to use despite being lightweight, but deadly if it finds the right mark.
|
||||
|
||||
items.weapon.melee.battleaxe.name=battle axe
|
||||
items.weapon.melee.battleaxe.stats_desc=This is a rather accurate weapon.
|
||||
items.weapon.melee.battleaxe.ability_name=heavy blow
|
||||
items.weapon.melee.battleaxe.typical_ability_desc=The Duelist can perform a _heavy blow_ with a battle axe. This concentrated attack typically deals _%1$d-%2$d damage_ and dazes for 5 turns, reducing accuracy and evasion by 50%%. This ability costs 2 charges if it does not surprise the enemy.
|
||||
items.weapon.melee.battleaxe.ability_desc=The Duelist can perform a _heavy blow_ with a battle axe. This concentrated attack deals _%1$d-%2$d damage_ and dazes for 5 turns, reducing accuracy and evasion by 50%%. This ability costs 2 charges if it does not surprise the enemy.
|
||||
items.weapon.melee.battleaxe.typical_ability_desc=The Duelist can perform a _heavy blow_ with a battle axe. This concentrated attack typically deals _%1$d-%2$d damage_ if it surprised the enemy, and dazes them for 5 turns which reduces accuracy and evasion by 50%%. Heavy blow deals regular damage if it does not surprise the enemy.
|
||||
items.weapon.melee.battleaxe.ability_desc=The Duelist can perform a _heavy blow_ with a battle axe. This concentrated attack deals _%1$d-%2$d damage_ if it surprised the enemy, and dazes them for 5 turns which reduces accuracy and evasion by 50%%. Heavy blow deals regular damage if it does not surprise the enemy.
|
||||
items.weapon.melee.battleaxe.desc=The enormous steel head of this battle axe puts considerable heft behind each wide stroke.
|
||||
|
||||
items.weapon.melee.crossbow.name=crossbow
|
||||
items.weapon.melee.crossbow.stats_desc=This weapon enhances the damage of thrown darts when equipped, and will even grant its enchantment to them.
|
||||
items.weapon.melee.crossbow.ability_name=charged shot
|
||||
items.weapon.melee.crossbow.typical_ability_desc=The Duelist can ready a _charged shot_ with a crossbow. This ability activates instantly and causes the next fired dart to always hit, apply on-hit effects to enemies in a 5x5 tile area, and typically last for _%d more uses_ if it is tipped.
|
||||
items.weapon.melee.crossbow.ability_desc=The Duelist can ready a _charged shot_ with a crossbow. This ability activates instantly and causes the next fired dart to always hit, apply on-hit effects to enemies in a 5x5 tile area, and last last for _%d more uses_ if it is tipped.
|
||||
items.weapon.melee.crossbow.typical_ability_desc=The Duelist can ready a _charged shot_ with a crossbow. This ability activates instantly and causes the next fired dart to always hit, apply on-hit effects to enemies in a 7x7 tile area, and typically last for _%d more uses_ if it is tipped.
|
||||
items.weapon.melee.crossbow.ability_desc=The Duelist can ready a _charged shot_ with a crossbow. This ability activates instantly and causes the next fired dart to always hit, apply on-hit effects to enemies in a 7x7 tile area, and last last for _%d more uses_ if it is tipped.
|
||||
items.weapon.melee.crossbow.desc=A fairly intricate weapon which shoots bolts at exceptional speeds. While it isn't designed for it, this crossbow's heft and sturdy construction make it a decent melee weapon as well.
|
||||
items.weapon.melee.crossbow$chargedshot.name=charged shot
|
||||
items.weapon.melee.crossbow$chargedshot.desc=The Duelist is focusing power into her crossbow. The next dart she fires with it will always hit and apply tipped dart effects and the crossbow's enchantment in a 5x5 area. Positive dart effects will only affect allies, and harmful effects will only apply to enemies.\n\nTipped darts will also have four extra uses when fired using a charged shot. The Duelist cannot use this ability to apply positive dart effects to herself.
|
||||
@@ -1612,23 +1612,23 @@ items.weapon.melee.crossbow$chargedshot.desc=The Duelist is focusing power into
|
||||
items.weapon.melee.dagger.name=dagger
|
||||
items.weapon.melee.dagger.stats_desc=This weapon is stronger against unaware enemies.
|
||||
items.weapon.melee.dagger.ability_name=sneak
|
||||
items.weapon.melee.dagger.typical_ability_desc=The Duelist can _sneak_ while wielding a dagger. This ability lets the Duelist instantly blink up to 5 tiles away and typically grants her _%d turns of invisibility_, but costs 2 charges.
|
||||
items.weapon.melee.dagger.ability_desc=The Duelist can _sneak_ while wielding a dagger. This ability lets the Duelist instantly blink up to 5 tiles away and grants her _%d turns of invisibility_, but costs 2 charges.
|
||||
items.weapon.melee.dagger.typical_ability_desc=The Duelist can _sneak_ while wielding a dagger. This ability lets the Duelist instantly blink up to 5 tiles away and typically grants her _%d turns of invisibility._
|
||||
items.weapon.melee.dagger.ability_desc=The Duelist can _sneak_ while wielding a dagger. This ability lets the Duelist instantly blink up to 5 tiles away and grants her _%d turns of invisibility._
|
||||
items.weapon.melee.dagger.desc=A simple iron dagger with a worn wooden handle.
|
||||
|
||||
items.weapon.melee.dirk.name=dirk
|
||||
items.weapon.melee.dirk.stats_desc=This weapon is stronger against unaware enemies.
|
||||
items.weapon.melee.dirk.ability_name=sneak
|
||||
items.weapon.melee.dirk.typical_ability_desc=The Duelist can _sneak_ while wielding a dirk. This ability lets the Duelist instantly blink up to 4 tiles away and typically grants her _%d turns of invisibility_, but costs 2 charges.
|
||||
items.weapon.melee.dirk.ability_desc=The Duelist can _sneak_ while wielding a dirk. This ability lets the Duelist instantly blink up to 4 tiles away and grants her _%d turns of invisibility_, but costs 2 charges.
|
||||
items.weapon.melee.dirk.typical_ability_desc=The Duelist can _sneak_ while wielding a dirk. This ability lets the Duelist instantly blink up to 4 tiles away and typically grants her _%d turns of invisibility._
|
||||
items.weapon.melee.dirk.ability_desc=The Duelist can _sneak_ while wielding a dirk. This ability lets the Duelist instantly blink up to 4 tiles away and grants her _%d turns of invisibility._
|
||||
items.weapon.melee.dirk.desc=A longer thrusting dagger, gives a bit more steel to plunge into foes.
|
||||
|
||||
items.weapon.melee.flail.name=flail
|
||||
items.weapon.melee.flail.stats_desc=This is a rather inaccurate weapon.\nThis weapon cannot surprise attack.
|
||||
items.weapon.melee.flail.ability_name=spin
|
||||
items.weapon.melee.flail.spin_warn=You can't spin the flail any more.
|
||||
items.weapon.melee.flail.typical_ability_desc=The Duelist can _spin_ a flail to build up power for a short time. Each turn the flail is spun it will typically deal _+%d damage_, to a max of 3 times. A spinning flail is also guaranteed to hit. Starting to spin the flail costs 2 charges.
|
||||
items.weapon.melee.flail.ability_desc=The Duelist can _spin_ a flail to build up power for a short time. Each turn the flail is spun it will deal _+%d damage_, to a max of 3 times. A spinning flail is also guaranteed to hit. Starting to spin the flail costs 2 charges.
|
||||
items.weapon.melee.flail.typical_ability_desc=The Duelist can _spin_ a flail to build up power for a short time. Each turn the flail is spun it will typically deal _+%d damage_, to a max of 3 times. A spinning flail is also guaranteed to hit. Only starting to spin the flail costs a charge.
|
||||
items.weapon.melee.flail.ability_desc=The Duelist can _spin_ a flail to build up power for a short time. Each turn the flail is spun it will deal _+%d damage_, to a max of 3 times. A spinning flail is also guaranteed to hit. Only starting to spin the flail costs a charge.
|
||||
items.weapon.melee.flail.desc=A spiked ball attached to a handle by a length of chain. Very unwieldy, but devastating if it lands a solid hit.
|
||||
items.weapon.melee.flail$spinabilitytracker.name=spinning
|
||||
items.weapon.melee.flail$spinabilitytracker.desc=The Duelist is spinning her flail, building damage for her next attack with it. Each spin takes one turn but increases damage, to a max of three spins. The flail is also guaranteed to hit while spinning.\n\nCurrent spins: %1$d%%.\nTurns remaining: %2$s.
|
||||
@@ -1657,29 +1657,29 @@ items.weapon.melee.gloves.desc=These studded gloves don't provide any real prote
|
||||
items.weapon.melee.greataxe.name=greataxe
|
||||
items.weapon.melee.greataxe.stats_desc=This weapon is incredibly heavy.
|
||||
items.weapon.melee.greataxe.ability_name=retribution
|
||||
items.weapon.melee.greataxe.typical_ability_desc=The Duelist can perform a _retribution_ attack with a greataxe if she is below 50%% health. This devastating attack typically deals _%1$d-%2$d damage_ and is guaranteed to hit.
|
||||
items.weapon.melee.greataxe.ability_desc=The Duelist can perform a _retribution_ attack with a greataxe if she is below 50%% health. This devastating attack typically deals _%1$d-%2$d damage_ and is guaranteed to hit.
|
||||
items.weapon.melee.greataxe.typical_ability_desc=The Duelist can perform a _retribution_ attack with a greataxe if she is below 50%% health. This devastating attack typically deals _%1$d-%2$d damage,_ is guaranteed to hit, and is instantaneous if it kills an enemy.
|
||||
items.weapon.melee.greataxe.ability_desc=The Duelist can perform a _retribution_ attack with a greataxe if she is below 50%% health. This devastating attack deals _%1$d-%2$d damage,_ is guaranteed to hit, and is instantaneous if it kills an enemy.
|
||||
items.weapon.melee.greataxe.desc=Meant to be wielded over the shoulder, this titanic axe is as powerful as it is heavy.
|
||||
|
||||
items.weapon.melee.greatshield.name=greatshield
|
||||
items.weapon.melee.greatshield.typical_stats_desc=Typically this weapon blocks 0-%d damage. This blocking scales with upgrades.
|
||||
items.weapon.melee.greatshield.stats_desc=This weapon blocks 0-%d damage. This blocking scales with upgrades.
|
||||
items.weapon.melee.greatshield.ability_name=guard
|
||||
items.weapon.melee.greatshield.typical_ability_desc=The Duelist can _guard_ herself with a greatshield, completely negating the next physical or magical attack made against her typically within _%d turns_.
|
||||
items.weapon.melee.greatshield.ability_desc=The Duelist can _guard_ herself with a greatshield, completely negating the next physical or magical attack made against her within _%d turns_.
|
||||
items.weapon.melee.greatshield.typical_ability_desc=The Duelist can _guard_ herself with a greatshield, completely negating all physical or magical attacks made against her typically for _%d turns_. Once the Duelist has blocked an attack, attacking back or using magic will end guarding.
|
||||
items.weapon.melee.greatshield.ability_desc=The Duelist can _guard_ herself with a greatshield, completely negating all physical or magical attacks made against her for _%d turns_. Once the Duelist has blocked an attack, attacking back or using magic will end guarding.
|
||||
items.weapon.melee.greatshield.desc=More like a mobile wall than a shield, this gigantic mass of metal aids defense, but doesn't leave much room for attacking.
|
||||
|
||||
items.weapon.melee.greatsword.name=greatsword
|
||||
items.weapon.melee.greatsword.ability_name=cleave
|
||||
items.weapon.melee.greatsword.typical_ability_desc=The Duelist can _cleave_ an enemy with a greatsword. This typically deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.greatsword.ability_desc=The Duelist can _cleave_ an enemy with a greatsword. This deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.greatsword.typical_ability_desc=The Duelist can _cleave_ an enemy with a greatsword. This typically deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy it is instantaneous and the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.greatsword.ability_desc=The Duelist can _cleave_ an enemy with a greatsword. This deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy it is instantaneous and the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.greatsword.desc=This towering blade inflicts heavy damage by investing its heft into every swing.
|
||||
|
||||
items.weapon.melee.handaxe.name=hand axe
|
||||
items.weapon.melee.handaxe.stats_desc=This is a rather accurate weapon.
|
||||
items.weapon.melee.handaxe.ability_name=heavy blow
|
||||
items.weapon.melee.handaxe.typical_ability_desc=The Duelist can perform a _heavy blow_ with a hand axe. This concentrated attack typically deals _%1$d-%2$d damage_ and dazes for 5 turns, reducing accuracy and evasion by 50%%. This ability costs 2 charges if it does not surprise the enemy.
|
||||
items.weapon.melee.handaxe.ability_desc=The Duelist can perform a _heavy blow_ with a hand axe. This concentrated attack deals _%1$d-%2$d damage_ and dazes for 5 turns, reducing accuracy and evasion by 50%%. This ability costs 2 charges if it does not surprise the enemy.
|
||||
items.weapon.melee.handaxe.typical_ability_desc=The Duelist can perform a _heavy blow_ with a hand axe. This concentrated attack typically deals _%1$d-%2$d damage_ if it surprised the enemy, and dazes them for 5 turns which reduces accuracy and evasion by 50%%. Heavy blow deals regular damage if it does not surprise the enemy.
|
||||
items.weapon.melee.handaxe.ability_desc=The Duelist can perform a _heavy blow_ with a hand axe. This concentrated attack deals _%1$d-%2$d damage_ if it surprised the enemy, and dazes them for 5 turns which reduces accuracy and evasion by 50%%. Heavy blow deals regular damage if it does not surprise the enemy.
|
||||
items.weapon.melee.handaxe.desc=A light axe, most commonly used for felling trees. The wide blade works well against foes as well.
|
||||
|
||||
items.weapon.melee.katana.name=katana
|
||||
@@ -1698,8 +1698,8 @@ items.weapon.melee.longsword.desc=This sword's long razor-sharp steel blade shin
|
||||
items.weapon.melee.mace.name=mace
|
||||
items.weapon.melee.mace.stats_desc=This is a rather accurate weapon.
|
||||
items.weapon.melee.mace.ability_name=heavy blow
|
||||
items.weapon.melee.mace.typical_ability_desc=The Duelist can perform a _heavy blow_ with a mace. This concentrated attack typically deals _%1$d-%2$d damage_ and dazes for 5 turns, reducing accuracy and evasion by 50%%. This ability costs 2 charges if it does not surprise the enemy.
|
||||
items.weapon.melee.mace.ability_desc=The Duelist can perform a _heavy blow_ with a mace. This concentrated attack deals _%1$d-%2$d damage_ and dazes for 5 turns, reducing accuracy and evasion by 50%%. This ability costs 2 charges if it does not surprise the enemy.
|
||||
items.weapon.melee.mace.typical_ability_desc=The Duelist can perform a _heavy blow_ with a mace. This concentrated attack typically deals _%1$d-%2$d damage_ if it surprised the enemy, and dazes them for 5 turns which reduces accuracy and evasion by 50%%. Heavy blow deals regular damage if it does not surprise the enemy.
|
||||
items.weapon.melee.mace.ability_desc=The Duelist can perform a _heavy blow_ with a mace. This concentrated attack deals _%1$d-%2$d damage_ if it surprised the enemy, and dazes them for 5 turns which reduces accuracy and evasion by 50%%. Heavy blow deals regular damage if it does not surprise the enemy.
|
||||
items.weapon.melee.mace.desc=The large iron head of this weapon inflicts substantial damage.
|
||||
|
||||
items.weapon.melee.magesstaff.name=mage's staff
|
||||
@@ -1739,15 +1739,15 @@ items.weapon.melee.meleeweapon.swap_full=You can't do that with a full inventory
|
||||
|
||||
items.weapon.melee.shortsword.name=shortsword
|
||||
items.weapon.melee.shortsword.ability_name=cleave
|
||||
items.weapon.melee.shortsword.typical_ability_desc=The Duelist can _cleave_ an enemy with a shortsword. This typically deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.shortsword.ability_desc=The Duelist can _cleave_ an enemy with a shortsword. This deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.shortsword.typical_ability_desc=The Duelist can _cleave_ an enemy with a shortsword. This typically deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy it is instantaneous and the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.shortsword.ability_desc=The Duelist can _cleave_ an enemy with a shortsword. This deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy it is instantaneous and the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.shortsword.desc=A quite short sword, only a few inches longer than a dagger.
|
||||
|
||||
items.weapon.melee.quarterstaff.name=quarterstaff
|
||||
items.weapon.melee.quarterstaff.stats_desc=This weapon blocks 0-2 damage.
|
||||
items.weapon.melee.quarterstaff.ability_name=defensive stance
|
||||
items.weapon.melee.quarterstaff.typical_ability_desc=The Duelist can assume a _defensive stance_ with a quarterstaff. This stance triples her evasion typically for _%d turns_ and takes no time to activate, but costs 2 charges.
|
||||
items.weapon.melee.quarterstaff.ability_desc=The Duelist can assume a _defensive stance_ with a quarterstaff. This stance triples her evasion for _%d turns_ and takes no time to activate, but costs 2 charges.
|
||||
items.weapon.melee.quarterstaff.typical_ability_desc=The Duelist can assume a _defensive stance_ with a quarterstaff. This stance takes no times to activate and triples her evasion typically for _%d turns._
|
||||
items.weapon.melee.quarterstaff.ability_desc=The Duelist can assume a _defensive stance_ with a quarterstaff. This stance takes no times to activate and triples her evasion for _%d turns._
|
||||
items.weapon.melee.quarterstaff.desc=A staff of hardwood, its ends are shod with iron.
|
||||
items.weapon.melee.quarterstaff$defensivestance.name=defensive stance
|
||||
items.weapon.melee.quarterstaff$defensivestance.desc=The Duelist is using her quarterstaff to deflect incoming blows and projectiles. As long as she is in this stance, her evasion against all attacks is tripled.\n\nTurns remaining: %s.
|
||||
@@ -1763,12 +1763,12 @@ items.weapon.melee.roundshield.name=round shield
|
||||
items.weapon.melee.roundshield.typical_stats_desc=Typically this weapon blocks 0-%d damage. This blocking scales with upgrades.
|
||||
items.weapon.melee.roundshield.stats_desc=This weapon blocks 0-%d damage. This blocking scales with upgrades.
|
||||
items.weapon.melee.roundshield.ability_name=guard
|
||||
items.weapon.melee.roundshield.typical_ability_desc=The Duelist can _guard_ herself with a round shield, completely negating the next physical or magical attack made against her typically within _%d turns_.
|
||||
items.weapon.melee.roundshield.ability_desc=The Duelist can _guard_ herself with a round shield, completely negating the next physical or magical attack made against her within _%d turns_.
|
||||
items.weapon.melee.roundshield.typical_ability_desc=The Duelist can _guard_ herself with a round shield, completely negating all physical or magical attacks made against her typically for _%d turns_. Once the Duelist has blocked an attack, attacking back or using magic will end guarding.
|
||||
items.weapon.melee.roundshield.ability_desc=The Duelist can _guard_ herself with a round shield, completely negating all physical or magical attacks made against her for _%d turns_. Once the Duelist has blocked an attack, attacking back or using magic will end guarding.
|
||||
items.weapon.melee.roundshield.desc=This large shield effectively blocks attacks and makes a decent weapon in a pinch.
|
||||
items.weapon.melee.roundshield$guardtracker.name=guarding
|
||||
items.weapon.melee.roundshield$guardtracker.guarded=guarded
|
||||
items.weapon.melee.roundshield$guardtracker.desc=The Duelist has readied her shield in anticipation of an incoming attack. The next physical or magical attack made against her will be completely negated.\n\nTurns remaining: %s.
|
||||
items.weapon.melee.roundshield$guardtracker.desc=The Duelist has readied her shield in anticipation of incoming attacks. Physical or magical attack made against her will be completely negated.\n\nTurns remaining: %s.
|
||||
|
||||
items.weapon.melee.runicblade.name=runic blade
|
||||
items.weapon.melee.runicblade.stats_desc=This weapon benefits more from upgrades.
|
||||
@@ -1780,26 +1780,26 @@ items.weapon.melee.runicblade.desc=A mysterious weapon from a distant land, with
|
||||
items.weapon.melee.sai.name=sai
|
||||
items.weapon.melee.sai.stats_desc=This is a very fast weapon.
|
||||
items.weapon.melee.sai.ability_name=combo strike
|
||||
items.weapon.melee.sai.typical_ability_desc=The Duelist can perform a _combo strike_ with sai. This attack is guaranteed to hit and typically deals _+%d damage_ for each time the Duelist has already successfully attacked with melee or thrown weapons in the last 5 turns.
|
||||
items.weapon.melee.sai.ability_desc=The Duelist can perform a _combo strike_ with sai. This attack is guaranteed to hit and deals _+%d damage_ for each time the Duelist has already successfully attacked with melee or thrown weapons in the last 5 turns.
|
||||
items.weapon.melee.sai.typical_ability_desc=The Duelist can perform a _combo strike_ with sai. This attack is guaranteed to hit and typically deals _+%d damage_ for each time the Duelist has successfully attacked with a melee or thrown weapon recently. Not successfully attacking for 5 turns resets this combo.
|
||||
items.weapon.melee.sai.ability_desc=The Duelist can perform a _combo strike_ with sai. This attack is guaranteed to hit and deals _+%d damage_ for each time the Duelist has successfully attacked with a melee or thrown weapon recently. Not successfully attacking for 5 turns resets this combo.
|
||||
items.weapon.melee.sai.desc=Two thin blades meant to be wielded in one hand each. Excellent for tearing down enemies with a flurry of cuts.
|
||||
items.weapon.melee.sai$combostriketracker.name=combo strike
|
||||
items.weapon.melee.sai$combostriketracker.desc=The Duelist is building combo that can be used to increase the damage of the combo strike ability. Each strike made with a melee or thrown weapon in the last 5 turns will count.\n\nRecent hits: %d.
|
||||
items.weapon.melee.sai$combostriketracker.desc=The Duelist is building combo that can be used to increase the damage of the combo strike ability. Each sucessful attack made with a melee or thrown weapon will count, but not successfully attacking for 5 turns resets this combo.\n\nRecent hits: %1$d.\n\nTurns until hits are lost: %2$s.
|
||||
|
||||
items.weapon.melee.scimitar.name=scimitar
|
||||
items.weapon.melee.scimitar.stats_desc=This is a rather fast weapon.
|
||||
items.weapon.melee.scimitar.ability_name=sword dance
|
||||
items.weapon.melee.scimitar.typical_ability_desc=The Duelist can perform a _sword dance_ with a scimitar. This stance grants the Duelist +60%% attack speed and +25%% accuracy typically for _%d turns_, takes no time to activate, and costs 2 charges.
|
||||
items.weapon.melee.scimitar.ability_desc=The Duelist can perform a _sword dance_ with a scimitar. This stance grants the Duelist +60%% attack speed and +25%% accuracy for _%d turns_, takes no time to activate, and costs 2 charges.
|
||||
items.weapon.melee.scimitar.typical_ability_desc=The Duelist can perform a _sword dance_ with a scimitar. This stance takes no time to activate and grants the Duelist +60%% attack speed and +50%% accuracy typically for _%d turns._
|
||||
items.weapon.melee.scimitar.ability_desc=The Duelist can perform a _sword dance_ with a scimitar. This stance takes no time to activate and grants the Duelist +60%% attack speed and +50%% accuracy for _%d turns._
|
||||
items.weapon.melee.scimitar.desc=A thick curved blade. Its shape allows for faster, yet less powerful attacks.
|
||||
items.weapon.melee.scimitar$sworddance.name=sword dance
|
||||
items.weapon.melee.scimitar$sworddance.desc=The Duelist is making quick momentum based strikes in a sort of dance. While this stance is active, she attacks 60%% faster (enough to attack exactly twice a turn with a scimitar) and has +25%% accuracy.\n\nTurns remaining: %s.
|
||||
items.weapon.melee.scimitar$sworddance.desc=The Duelist is making quick momentum based strikes in a sort of dance. While this stance is active, she attacks 60%% faster (enough to attack exactly twice a turn with a scimitar) and has +50%% accuracy.\n\nTurns remaining: %s.
|
||||
|
||||
items.weapon.melee.sickle.name=sickle
|
||||
items.weapon.melee.sickle.stats_desc=This is a rather inaccurate weapon.
|
||||
items.weapon.melee.sickle.ability_name=harvest
|
||||
items.weapon.melee.sickle.typical_ability_desc=The Duelist can _harvest_ an enemy with a sickle. This devastating attack typically inflicts _%1$d-%2$d bleeding_ instead of damage and is guaranteed to hit, but costs 2 charges.
|
||||
items.weapon.melee.sickle.ability_desc=The Duelist can _harvest_ an enemy with a sickle. This devastating attack inflicts _%1$d-%2$d bleeding_ instead of damage and is guaranteed to hit, but costs 2 charges.
|
||||
items.weapon.melee.sickle.typical_ability_desc=The Duelist can _harvest_ an enemy with a sickle. This devastating attack is guaranteed to hit and typically deals _%d damage,_ but applies the damage as bleeding instead.
|
||||
items.weapon.melee.sickle.ability_desc=The Duelist can _harvest_ an enemy with a sickle. This devastating attack is guaranteed to hit and deals _%d damage,_ but applies the damage as bleeding instead.
|
||||
items.weapon.melee.sickle.desc=A handheld farming tool that can double as a strong but unwieldy weapon.
|
||||
|
||||
items.weapon.melee.spear.name=spear
|
||||
@@ -1811,8 +1811,8 @@ items.weapon.melee.spear.desc=A slender wooden rod tipped with sharpened iron.
|
||||
|
||||
items.weapon.melee.sword.name=sword
|
||||
items.weapon.melee.sword.ability_name=cleave
|
||||
items.weapon.melee.sword.typical_ability_desc=The Duelist can _cleave_ an enemy with a sword. This typically deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.sword.ability_desc=The Duelist can _cleave_ an enemy with a sword. This deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.sword.typical_ability_desc=The Duelist can _cleave_ an enemy with a sword. This typically deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy it is instantaneous and the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.sword.ability_desc=The Duelist can _cleave_ an enemy with a sword. This deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy it is instantaneous and the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.sword.desc=A nicely balanced sword. Not too large, but still notably longer than a shortsword.
|
||||
items.weapon.melee.sword$cleavetracker.name=cleave
|
||||
items.weapon.melee.sword$cleavetracker.desc=The Duelist is ready to follow up on her previous cleave. The next use of cleave will not cost any weapon ability charge.\n\nTurns remaining: %s.
|
||||
@@ -1820,15 +1820,15 @@ items.weapon.melee.sword$cleavetracker.desc=The Duelist is ready to follow up on
|
||||
items.weapon.melee.warhammer.name=war hammer
|
||||
items.weapon.melee.warhammer.stats_desc=This is a rather accurate weapon.
|
||||
items.weapon.melee.warhammer.ability_name=heavy blow
|
||||
items.weapon.melee.warhammer.typical_ability_desc=The Duelist can perform a _heavy blow_ with a war hammer. This concentrated attack typically deals _%1$d-%2$d damage_ and dazes for 5 turns, reducing accuracy and evasion by 50%%. This ability costs 2 charges if it does not surprise the enemy.
|
||||
items.weapon.melee.warhammer.ability_desc=The Duelist can perform a _heavy blow_ with a war hammer. This concentrated attack deals _%1$d-%2$d damage_ and dazes for 5 turns, reducing accuracy and evasion by 50%%. This ability costs 2 charges if it does not surprise the enemy.
|
||||
items.weapon.melee.warhammer.typical_ability_desc=The Duelist can perform a _heavy blow_ with a war hammer. This concentrated attack typically deals _%1$d-%2$d damage_ if it surprised the enemy, and dazes them for 5 turns which reduces accuracy and evasion by 50%%. Heavy blow deals regular damage if it does not surprise the enemy.
|
||||
items.weapon.melee.warhammer.ability_desc=The Duelist can perform a _heavy blow_ with a war hammer. This concentrated attack deals _%1$d-%2$d damage_ if it surprised the enemy, and dazes them for 5 turns which reduces accuracy and evasion by 50%%. Heavy blow deals regular damage if it does not surprise the enemy.
|
||||
items.weapon.melee.warhammer.desc=Few creatures can withstand the crushing blow of this towering mass of lead and steel, but it takes great strength to use effectively.
|
||||
|
||||
items.weapon.melee.warscythe.name=war scythe
|
||||
items.weapon.melee.warscythe.stats_desc=This is a rather inaccurate weapon.
|
||||
items.weapon.melee.warscythe.ability_name=harvest
|
||||
items.weapon.melee.warscythe.typical_ability_desc=The Duelist can _harvest_ an enemy with a war scythe. This devastating attack typically inflicts _%1$d-%2$d bleeding_ instead of damage and is guaranteed to hit, but costs 2 charges.
|
||||
items.weapon.melee.warscythe.ability_desc=The Duelist can _harvest_ an enemy with a war scythe. This devastating attack inflicts _%1$d-%2$d bleeding_ instead of damage and is guaranteed to hit, but costs 2 charges.
|
||||
items.weapon.melee.warscythe.typical_ability_desc=The Duelist can _harvest_ an enemy with a war scythe. This devastating attack is guaranteed to hit and typically deals _%d damage,_ but applies the damage as bleeding instead.
|
||||
items.weapon.melee.warscythe.ability_desc=The Duelist can _harvest_ an enemy with a war scythe. This devastating attack is guaranteed to hit and typically deals _%d damage,_ but applies the damage as bleeding instead.
|
||||
items.weapon.melee.warscythe.desc=This large and unwieldy tool has been reinforced to make it better at cutting foes than crops.
|
||||
|
||||
items.weapon.melee.whip.name=whip
|
||||
@@ -1840,8 +1840,8 @@ items.weapon.melee.whip.desc=While the barbed length of rope at the end of this
|
||||
|
||||
items.weapon.melee.wornshortsword.name=worn shortsword
|
||||
items.weapon.melee.wornshortsword.ability_name=cleave
|
||||
items.weapon.melee.wornshortsword.typical_ability_desc=The Duelist can _cleave_ an enemy with a worn shortsword. This typically deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.wornshortsword.ability_desc=The Duelist can _cleave_ an enemy with a worn shortsword. This deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.wornshortsword.typical_ability_desc=The Duelist can _cleave_ an enemy with a worn shortsword. This typically deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy it is instantaneous and the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.wornshortsword.ability_desc=The Duelist can _cleave_ an enemy with a worn shortsword. This deals _%1$d-%2$d damage_ and is guaranteed to hit. If cleave kills an enemy it is instantaneous and the Duelist can use cleave again within 5 turns for free.
|
||||
items.weapon.melee.wornshortsword.desc=A quite short sword, worn down through heavy use. It is both weaker and a bit lighter than a shortsword in better condition.
|
||||
|
||||
|
||||
@@ -2073,7 +2073,7 @@ items.kindofmisc.unequip_message=You must unequip one of these items first. Sele
|
||||
|
||||
items.kindofweapon.swift_equip=You swiftly equip your weapon.
|
||||
items.kindofweapon.equip_cursed=Your grip involuntarily tightens around the weapon.
|
||||
items.kindofweapon.which_equip_msg=Which weapon slot would you like to equip this item to?\n\nThe Champion directly attacks with her primary weapon, but can use the ability of either weapon. Both weapons have their own charge count.\n\nThe Champion can also swap her primary and secondary weapon instantly.
|
||||
items.kindofweapon.which_equip_msg=Which weapon slot would you like to equip this item to?\n\nThe Champion directly attacks with her primary weapon, but can use the ability of either weapon. Both weapons share the same charge count.\n\nThe Champion can also swap her primary and secondary weapon instantly.
|
||||
items.kindofweapon.which_equip_primary=Primary (%s)
|
||||
items.kindofweapon.which_equip_secondary=Secondary (%s)
|
||||
items.kindofweapon.empty=empty
|
||||
|
||||
@@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroSubClass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RoundShield;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Swiftthistle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
@@ -111,5 +112,10 @@ public class Invisibility extends FlavourBuff {
|
||||
if (bubble != null){
|
||||
bubble.detach();
|
||||
}
|
||||
|
||||
RoundShield.GuardTracker guard = ch.buff(RoundShield.GuardTracker.class);
|
||||
if (guard != null && guard.hasBlocked){
|
||||
guard.detach();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,7 +479,7 @@ public class Hero extends Char {
|
||||
}
|
||||
|
||||
if (buff(Scimitar.SwordDance.class) != null){
|
||||
accuracy *= 1.25f;
|
||||
accuracy *= 1.50f;
|
||||
}
|
||||
|
||||
if (!RingOfForce.fightingUnarmed(this)) {
|
||||
@@ -542,7 +542,8 @@ public class Hero extends Char {
|
||||
}
|
||||
|
||||
if (buff(RoundShield.GuardTracker.class) != null){
|
||||
buff(RoundShield.GuardTracker.class).detach();
|
||||
buff(RoundShield.GuardTracker.class).hasBlocked = true;
|
||||
BuffIndicator.refreshHero();
|
||||
Sample.INSTANCE.play(Assets.Sounds.HIT_PARRY, 1, Random.Float(0.96f, 1.05f));
|
||||
return Messages.get(RoundShield.GuardTracker.class, "guarded");
|
||||
}
|
||||
|
||||
@@ -74,11 +74,6 @@ public class AssassinsBlade extends MeleeWeapon {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
Dagger.sneakAbility(hero, target, 3, 2+buffedLvl(), this);
|
||||
|
||||
@@ -22,9 +22,7 @@
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
|
||||
@@ -50,25 +48,16 @@ public class BattleAxe extends MeleeWeapon {
|
||||
return Messages.get(this, "prompt");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
if (target == null || (target instanceof Mob && ((Mob) target).surprisedBy(hero))) {
|
||||
return 1;
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(4+lvl) damage, roughly equivalent to +35% damage
|
||||
int dmgBoost = augment.damageFactor(4 + buffedLvl());
|
||||
//+(5+1.5*lvl) damage, roughly +40% base dmg, +50% scaling
|
||||
int dmgBoost = augment.damageFactor(5 + Math.round(1.5f*buffedLvl()));
|
||||
Mace.heavyBlowAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? 4 + buffedLvl() : 4;
|
||||
int dmgBoost = levelKnown ? 5 + Math.round(1.5f*buffedLvl()) : 5;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -79,9 +79,9 @@ public class Crossbow extends MeleeWeapon {
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", 2+buffedLvl());
|
||||
return Messages.get(this, "ability_desc", 3+buffedLvl());
|
||||
} else {
|
||||
return Messages.get(this, "typical_ability_desc", 2);
|
||||
return Messages.get(this, "typical_ability_desc", 3);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -88,11 +88,6 @@ public class Dagger extends MeleeWeapon {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
sneakAbility(hero, target, 5, 2+buffedLvl(), this);
|
||||
|
||||
@@ -74,11 +74,6 @@ public class Dirk extends MeleeWeapon {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
Dagger.sneakAbility(hero, target, 4, 2+buffedLvl(), this);
|
||||
|
||||
@@ -81,7 +81,9 @@ public class Flail extends MeleeWeapon {
|
||||
});
|
||||
//we detach and calculate bonus here in case the attack misses (e.g. vs. monks)
|
||||
spin.detach();
|
||||
spinBoost = spin.spins * augment.damageFactor(Math.round(6.5f + 1.5f*buffedLvl()));
|
||||
//+(6+2*lvl) damage per spin, roughly +30% base damage, +45% scaling
|
||||
// so +90% base dmg, +135% scaling at 3 spins
|
||||
spinBoost = spin.spins * augment.damageFactor(6 + 2*buffedLvl());
|
||||
return Float.POSITIVE_INFINITY;
|
||||
} else {
|
||||
spinBoost = 0;
|
||||
@@ -94,7 +96,7 @@ public class Flail extends MeleeWeapon {
|
||||
if (Dungeon.hero.buff(SpinAbilityTracker.class) != null){
|
||||
return 0;
|
||||
} else {
|
||||
return 2;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,7 +126,7 @@ public class Flail extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? Math.round(6.5f + 1.5f*buffedLvl()) : 7;
|
||||
int dmgBoost = levelKnown ? 6 + 2*buffedLvl() : 6;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -50,14 +50,14 @@ public class Gauntlet extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(3.5+0.75*lvl) damage, roughly equivalent to +35% damage
|
||||
int dmgBoost = augment.damageFactor(Math.round(3.5f + 0.75f*buffedLvl()));
|
||||
//+(4+0.75*lvl) damage, roughly +40% base damage, +40% scaling
|
||||
int dmgBoost = augment.damageFactor(4 + Math.round(0.75f*buffedLvl()));
|
||||
Sai.comboStrikeAbility(hero, target, 0, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? Math.round(3.5f + 0.75f*buffedLvl()) : 4;
|
||||
int dmgBoost = levelKnown ? 4 + Math.round(0.75f*buffedLvl()) : 4;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -51,14 +51,14 @@ public class Glaive extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(7+1.33*lvl) damage, roughly equivalent to +30% damage
|
||||
int dmgBoost = augment.damageFactor(7 + Math.round(1.33f*buffedLvl()));
|
||||
//+(12+2*lvl) damage, roughly +55% base damage, +45% scaling
|
||||
int dmgBoost = augment.damageFactor(12 + 2*buffedLvl());
|
||||
Spear.spikeAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? 7 + Math.round(1.33f*buffedLvl()) : 7;
|
||||
int dmgBoost = levelKnown ? 12 + 2*buffedLvl() : 12;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -52,14 +52,14 @@ public class Gloves extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(1.5+0.5*lvl) damage, roughly equivalent to +45% damage
|
||||
int dmgBoost = augment.damageFactor(Math.round(1.5f + 0.5f*buffedLvl()));
|
||||
//+(2+0.5*lvl) damage, roughly +67% base damage, +50% scaling
|
||||
int dmgBoost = augment.damageFactor(2 + Math.round(0.5f*buffedLvl()));
|
||||
Sai.comboStrikeAbility(hero, target, 0, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? Math.round(1.5f + 0.5f*buffedLvl()) : 2;
|
||||
int dmgBoost = levelKnown ? 2 + Math.round(0.5f*buffedLvl()) : 2;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -91,17 +91,20 @@ public class Greataxe extends MeleeWeapon {
|
||||
beforeAbilityUsed(hero, enemy);
|
||||
AttackIndicator.target(enemy);
|
||||
|
||||
//+(12.5+(1.75*lvl)) damage, equivalent to +50% damage
|
||||
int dmgBoost = augment.damageFactor(Math.round(12.5f + 1.75f*buffedLvl()));
|
||||
//+(12+(2*lvl)) damage, roughly +50% base damage, +55% scaling
|
||||
int dmgBoost = augment.damageFactor(12 + 2*buffedLvl());
|
||||
|
||||
if (hero.attack(enemy, 1, dmgBoost, Char.INFINITE_ACCURACY)){
|
||||
Sample.INSTANCE.play(Assets.Sounds.HIT_STRONG);
|
||||
if (!enemy.isAlive()){
|
||||
onAbilityKill(hero, enemy);
|
||||
}
|
||||
}
|
||||
|
||||
Invisibility.dispel();
|
||||
hero.spendAndNext(hero.attackDelay());
|
||||
if (!enemy.isAlive()){
|
||||
hero.next();
|
||||
onAbilityKill(hero, enemy);
|
||||
} else {
|
||||
hero.spendAndNext(hero.attackDelay());
|
||||
}
|
||||
afterAbilityUsed(hero);
|
||||
}
|
||||
});
|
||||
@@ -109,7 +112,7 @@ public class Greataxe extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? Math.round(12.5f + 1.75f*buffedLvl()) : 13;
|
||||
int dmgBoost = levelKnown ? 12 + 2*buffedLvl() : 12;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -55,15 +55,15 @@ public class Greatshield extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
RoundShield.guardAbility(hero, 5+buffedLvl(), this);
|
||||
RoundShield.guardAbility(hero, 3+buffedLvl(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", 5+buffedLvl());
|
||||
return Messages.get(this, "ability_desc", 3+buffedLvl());
|
||||
} else {
|
||||
return Messages.get(this, "typical_ability_desc", 5);
|
||||
return Messages.get(this, "typical_ability_desc", 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,14 +53,14 @@ public class Greatsword extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(3.5+0.7*lvl) damage, roughly equivalent to +20% damage
|
||||
int dmgBoost = augment.damageFactor(Math.round(3.5f + 0.7f*buffedLvl()));
|
||||
//+(5+lvl) damage, roughly +30% base dmg, +30% scaling
|
||||
int dmgBoost = augment.damageFactor(5 + buffedLvl());
|
||||
Sword.cleaveAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? Math.round(3.5f + 0.7f*buffedLvl()) : 4;
|
||||
int dmgBoost = levelKnown ? 5 + buffedLvl() : 5;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -22,9 +22,7 @@
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
|
||||
@@ -50,25 +48,16 @@ public class HandAxe extends MeleeWeapon {
|
||||
return Messages.get(this, "prompt");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
if (target == null || (target instanceof Mob && ((Mob) target).surprisedBy(hero))) {
|
||||
return 1;
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(3+lvl) damage, roughly equivalent to +45% damage
|
||||
int dmgBoost = augment.damageFactor(3 + buffedLvl());
|
||||
//+(4+1.5*lvl) damage, roughly +55% base dmg, +75% scaling
|
||||
int dmgBoost = augment.damageFactor(4 + Math.round(1.5f*buffedLvl()));
|
||||
Mace.heavyBlowAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? 3 + buffedLvl() : 3;
|
||||
int dmgBoost = levelKnown ? 4 + Math.round(1.5f*buffedLvl()) : 4;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -55,14 +55,14 @@ public class Katana extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(4+lvl) damage, equivalent to +33% damage
|
||||
int dmgBoost = augment.damageFactor(4 + buffedLvl());
|
||||
//+(6+1.5*lvl) damage, roughly +50% damage
|
||||
int dmgBoost = augment.damageFactor(6 + Math.round(1.5f*buffedLvl()));
|
||||
Rapier.lungeAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? 4+buffedLvl() : 4;
|
||||
int dmgBoost = levelKnown ? 6 + Math.round(1.5f*buffedLvl()) : 6;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -53,14 +53,14 @@ public class Longsword extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(3.5+0.7*lvl) damage, roughly equivalent to +23% damage
|
||||
int dmgBoost = augment.damageFactor(Math.round(3.5f + 0.7f*buffedLvl()));
|
||||
//+(4+lvl) damage, roughly +30% base dmg, +33% scaling
|
||||
int dmgBoost = augment.damageFactor(4 + buffedLvl());
|
||||
Sword.cleaveAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? Math.round(3.5f + 0.7f*buffedLvl()) : 4;
|
||||
int dmgBoost = levelKnown ? 4 + buffedLvl() : 4;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -59,25 +59,16 @@ public class Mace extends MeleeWeapon {
|
||||
return Messages.get(this, "prompt");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
if (target == null || (target instanceof Mob && ((Mob) target).surprisedBy(hero))) {
|
||||
return 1;
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(4+lvl) damage, roughly equivalent to +40% damage
|
||||
int dmgBoost = augment.damageFactor(4 + buffedLvl());
|
||||
//+(4+1.5*lvl) damage, roughly +55% base dmg, +60% scaling
|
||||
int dmgBoost = augment.damageFactor(5 + Math.round(1.5f*buffedLvl()));
|
||||
Mace.heavyBlowAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? 4 + buffedLvl() : 4;
|
||||
int dmgBoost = levelKnown ? 5 + Math.round(1.5f*buffedLvl()) : 5;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
@@ -104,28 +95,20 @@ public class Mace extends MeleeWeapon {
|
||||
}
|
||||
hero.belongings.abilityWeapon = null;
|
||||
|
||||
//need to separately check charges here, as non-surprise attacks cost 2
|
||||
//no bonus damage if attack isn't a surprise
|
||||
if (enemy instanceof Mob && !((Mob) enemy).surprisedBy(hero)){
|
||||
Charger charger = Buff.affect(hero, Charger.class);
|
||||
if (Dungeon.hero.belongings.weapon == wep) {
|
||||
if (charger.charges + charger.partialCharge < wep.abilityChargeUse(hero, enemy)){
|
||||
GLog.w(Messages.get(wep, "ability_no_charge"));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (charger.secondCharges + charger.secondPartialCharge < wep.abilityChargeUse(hero, enemy)){
|
||||
GLog.w(Messages.get(wep, "ability_no_charge"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
dmgMulti = Math.min(1, dmgMulti);
|
||||
dmgBoost = 0;
|
||||
}
|
||||
|
||||
float finalDmgMulti = dmgMulti;
|
||||
int finalDmgBoost = dmgBoost;
|
||||
hero.sprite.attack(enemy.pos, new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
wep.beforeAbilityUsed(hero, enemy);
|
||||
AttackIndicator.target(enemy);
|
||||
if (hero.attack(enemy, dmgMulti, dmgBoost, Char.INFINITE_ACCURACY)) {
|
||||
if (hero.attack(enemy, finalDmgMulti, finalDmgBoost, Char.INFINITE_ACCURACY)) {
|
||||
Sample.INSTANCE.play(Assets.Sounds.HIT_STRONG);
|
||||
if (enemy.isAlive()){
|
||||
Buff.affect(enemy, Daze.class, Daze.DURATION);
|
||||
|
||||
@@ -117,11 +117,7 @@ public class MeleeWeapon extends Weapon {
|
||||
//do nothing
|
||||
} else if (STRReq() > hero.STR()){
|
||||
GLog.w(Messages.get(this, "ability_low_str"));
|
||||
} else if (hero.belongings.weapon == this &&
|
||||
(Buff.affect(hero, Charger.class).charges + Buff.affect(hero, Charger.class).partialCharge) < abilityChargeUse(hero, null)) {
|
||||
GLog.w(Messages.get(this, "ability_no_charge"));
|
||||
} else if (hero.belongings.secondWep == this &&
|
||||
(Buff.affect(hero, Charger.class).secondCharges + Buff.affect(hero, Charger.class).secondPartialCharge) < abilityChargeUse(hero, null)) {
|
||||
} else if ((Buff.affect(hero, Charger.class).charges + Buff.affect(hero, Charger.class).partialCharge) < abilityChargeUse(hero, null)) {
|
||||
GLog.w(Messages.get(this, "ability_no_charge"));
|
||||
} else {
|
||||
|
||||
@@ -198,18 +194,10 @@ public class MeleeWeapon extends Weapon {
|
||||
hero.belongings.abilityWeapon = this;
|
||||
Charger charger = Buff.affect(hero, Charger.class);
|
||||
|
||||
if (Dungeon.hero.belongings.weapon == this) {
|
||||
charger.partialCharge -= abilityChargeUse(hero, target);
|
||||
while (charger.partialCharge < 0 && charger.charges > 0) {
|
||||
charger.charges--;
|
||||
charger.partialCharge++;
|
||||
}
|
||||
} else {
|
||||
charger.secondPartialCharge -= abilityChargeUse(hero, target);
|
||||
while (charger.secondPartialCharge < 0 && charger.secondCharges > 0) {
|
||||
charger.secondCharges--;
|
||||
charger.secondPartialCharge++;
|
||||
}
|
||||
charger.partialCharge -= abilityChargeUse(hero, target);
|
||||
while (charger.partialCharge < 0 && charger.charges > 0) {
|
||||
charger.charges--;
|
||||
charger.partialCharge++;
|
||||
}
|
||||
|
||||
if (hero.heroClass == HeroClass.DUELIST
|
||||
@@ -426,11 +414,7 @@ public class MeleeWeapon extends Weapon {
|
||||
if (isEquipped(Dungeon.hero)
|
||||
&& Dungeon.hero.buff(Charger.class) != null) {
|
||||
Charger buff = Dungeon.hero.buff(Charger.class);
|
||||
if (Dungeon.hero.belongings.weapon == this) {
|
||||
return buff.charges + "/" + buff.chargeCap();
|
||||
} else {
|
||||
return buff.secondCharges + "/" + buff.secondChargeCap();
|
||||
}
|
||||
return buff.charges + "/" + buff.chargeCap();
|
||||
} else {
|
||||
return super.status();
|
||||
}
|
||||
@@ -456,19 +440,22 @@ public class MeleeWeapon extends Weapon {
|
||||
|
||||
public static class Charger extends Buff implements ActionIndicator.Action {
|
||||
|
||||
public int charges = 3;
|
||||
public int charges = 2;
|
||||
public float partialCharge;
|
||||
//offhand charge as well?
|
||||
|
||||
//champion subclass
|
||||
public int secondCharges = 3;
|
||||
public float secondPartialCharge;
|
||||
|
||||
@Override
|
||||
public boolean act() {
|
||||
if (charges < chargeCap()){
|
||||
if (Regeneration.regenOn()){
|
||||
partialCharge += 1/(40f-(chargeCap()-charges)); // 40 to 30 turns per charge
|
||||
//60 to 45 turns per charge
|
||||
float chargeToGain = 1/(60f-1.5f*(chargeCap()-charges));
|
||||
|
||||
//40 to 30 turns per charge for champion
|
||||
if (Dungeon.hero.subClass == HeroSubClass.CHAMPION){
|
||||
chargeToGain *= 1.5f;
|
||||
}
|
||||
|
||||
partialCharge += chargeToGain;
|
||||
}
|
||||
|
||||
int points = ((Hero)target).pointsInTalent(Talent.WEAPON_RECHARGING);
|
||||
@@ -486,24 +473,6 @@ public class MeleeWeapon extends Weapon {
|
||||
partialCharge = 0;
|
||||
}
|
||||
|
||||
if (Dungeon.hero.subClass == HeroSubClass.CHAMPION
|
||||
&& secondCharges < secondChargeCap()) {
|
||||
if (Regeneration.regenOn()) {
|
||||
// 80 to 60 turns per charge without talent
|
||||
// up to 53.333 to 40 turns per charge at max talent level
|
||||
secondPartialCharge += secondChargeMultiplier() / (40f-(secondChargeCap()-secondCharges));
|
||||
}
|
||||
|
||||
if (secondPartialCharge >= 1) {
|
||||
secondCharges++;
|
||||
secondPartialCharge--;
|
||||
updateQuickslot();
|
||||
}
|
||||
|
||||
} else {
|
||||
secondPartialCharge = 0;
|
||||
}
|
||||
|
||||
if (ActionIndicator.action != this && Dungeon.hero.subClass == HeroSubClass.CHAMPION) {
|
||||
ActionIndicator.setAction(this);
|
||||
}
|
||||
@@ -526,16 +495,11 @@ public class MeleeWeapon extends Weapon {
|
||||
}
|
||||
|
||||
public int chargeCap(){
|
||||
return Math.min(10, 3 + (Dungeon.hero.lvl-1)/3);
|
||||
}
|
||||
|
||||
public int secondChargeCap(){
|
||||
return Math.round(chargeCap() * secondChargeMultiplier());
|
||||
}
|
||||
|
||||
public float secondChargeMultiplier(){
|
||||
//50% - 75%, depending on talent
|
||||
return 0.5f + 0.0834f*Dungeon.hero.pointsInTalent(Talent.SECONDARY_CHARGE);
|
||||
if (Dungeon.hero.subClass == HeroSubClass.CHAMPION){
|
||||
return Math.min(10, 4 + (Dungeon.hero.lvl - 1) / 4);
|
||||
} else {
|
||||
return Math.min(8, 2 + (Dungeon.hero.lvl - 1) / 4);
|
||||
}
|
||||
}
|
||||
|
||||
public void gainCharge( float charge ){
|
||||
@@ -553,16 +517,11 @@ public class MeleeWeapon extends Weapon {
|
||||
public static final String CHARGES = "charges";
|
||||
private static final String PARTIALCHARGE = "partialCharge";
|
||||
|
||||
public static final String SECOND_CHARGES = "second_charges";
|
||||
private static final String SECOND_PARTIALCHARGE = "second_partialCharge";
|
||||
|
||||
@Override
|
||||
public void storeInBundle(Bundle bundle) {
|
||||
super.storeInBundle(bundle);
|
||||
bundle.put(CHARGES, charges);
|
||||
bundle.put(PARTIALCHARGE, partialCharge);
|
||||
bundle.put(SECOND_CHARGES, secondCharges);
|
||||
bundle.put(SECOND_PARTIALCHARGE, secondPartialCharge);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -570,8 +529,6 @@ public class MeleeWeapon extends Weapon {
|
||||
super.restoreFromBundle(bundle);
|
||||
charges = bundle.getInt(CHARGES);
|
||||
partialCharge = bundle.getFloat(PARTIALCHARGE);
|
||||
secondCharges = bundle.getInt(SECOND_CHARGES);
|
||||
secondPartialCharge = bundle.getFloat(SECOND_PARTIALCHARGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -51,11 +51,6 @@ public class Quarterstaff extends MeleeWeapon {
|
||||
return 2; //2 extra defence
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
beforeAbilityUsed(hero, null);
|
||||
|
||||
@@ -68,14 +68,14 @@ public class Rapier extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(3+lvl) damage, equivalent to +67% damage
|
||||
int dmgBoost = augment.damageFactor(3 + buffedLvl());
|
||||
//+(4+lvl) damage, roughly +90% base damage, +67% scaling
|
||||
int dmgBoost = augment.damageFactor(4 + buffedLvl());
|
||||
lungeAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? 3+buffedLvl() : 3;
|
||||
int dmgBoost = levelKnown ? 4+buffedLvl() : 4;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.watabou.noosa.Image;
|
||||
|
||||
public class RoundShield extends MeleeWeapon {
|
||||
|
||||
@@ -62,21 +63,21 @@ public class RoundShield extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
RoundShield.guardAbility(hero, 8+buffedLvl(), this);
|
||||
RoundShield.guardAbility(hero, 5+buffedLvl(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", 8+buffedLvl());
|
||||
return Messages.get(this, "ability_desc", 5+buffedLvl());
|
||||
} else {
|
||||
return Messages.get(this, "typical_ability_desc", 8);
|
||||
return Messages.get(this, "typical_ability_desc", 5);
|
||||
}
|
||||
}
|
||||
|
||||
public static void guardAbility(Hero hero, int duration, MeleeWeapon wep){
|
||||
wep.beforeAbilityUsed(hero, null);
|
||||
Buff.prolong(hero, GuardTracker.class, duration);
|
||||
Buff.prolong(hero, GuardTracker.class, duration).hasBlocked = false;
|
||||
hero.sprite.operate(hero.pos);
|
||||
hero.spendAndNext(Actor.TICK);
|
||||
wep.afterAbilityUsed(hero);
|
||||
@@ -89,11 +90,22 @@ public class RoundShield extends MeleeWeapon {
|
||||
type = buffType.POSITIVE;
|
||||
}
|
||||
|
||||
public boolean hasBlocked = false;
|
||||
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.DUEL_GUARD;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tintIcon(Image icon) {
|
||||
if (hasBlocked){
|
||||
icon.tint(0x651f66, 0.5f);
|
||||
} else {
|
||||
icon.resetColor();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float iconFadePercent() {
|
||||
return Math.max(0, (5 - visualcooldown()) / 5);
|
||||
|
||||
@@ -74,7 +74,7 @@ public class RunicBlade extends MeleeWeapon {
|
||||
|
||||
//we apply here because of projecting
|
||||
RunicSlashTracker tracker = Buff.affect(hero, RunicSlashTracker.class);
|
||||
tracker.boost = 2f + 0.25f*buffedLvl();
|
||||
tracker.boost = 2f + 0.50f*buffedLvl();
|
||||
hero.belongings.abilityWeapon = this;
|
||||
if (!hero.canAttack(enemy)){
|
||||
GLog.w(Messages.get(this, "ability_bad_position"));
|
||||
@@ -106,7 +106,7 @@ public class RunicBlade extends MeleeWeapon {
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", 200+25*buffedLvl());
|
||||
return Messages.get(this, "ability_desc", 200+50*buffedLvl());
|
||||
} else {
|
||||
return Messages.get(this, "typical_ability_desc", 200);
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
@@ -61,14 +62,14 @@ public class Sai extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(2.5+0.5*lvl) damage, roughly equivalent to +40% damage
|
||||
int dmgBoost = augment.damageFactor(Math.round(2.5f + 0.5f*buffedLvl()));
|
||||
//+(3+0.67*lvl) damage, roughly +45% base damage, +45% scaling
|
||||
int dmgBoost = augment.damageFactor(3 + Math.round(0.67f*buffedLvl()));
|
||||
Sai.comboStrikeAbility(hero, target, 0, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? Math.round(2.5f + 0.5f*buffedLvl()) : 3;
|
||||
int dmgBoost = levelKnown ? 3 + Math.round(0.67f*buffedLvl()) : 3;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(dmgBoost));
|
||||
} else {
|
||||
@@ -104,7 +105,7 @@ public class Sai extends MeleeWeapon {
|
||||
int recentHits = 0;
|
||||
ComboStrikeTracker buff = hero.buff(ComboStrikeTracker.class);
|
||||
if (buff != null){
|
||||
recentHits = buff.totalHits();
|
||||
recentHits = buff.hits;
|
||||
buff.detach();
|
||||
}
|
||||
|
||||
@@ -130,14 +131,12 @@ public class Sai extends MeleeWeapon {
|
||||
type = buffType.POSITIVE;
|
||||
}
|
||||
|
||||
public static int DURATION = 6; //to account for the turn the attack is made in
|
||||
public int[] hits = new int[DURATION];
|
||||
public static int DURATION = 5;
|
||||
private float comboTime = 0f;
|
||||
public int hits = 0;
|
||||
|
||||
@Override
|
||||
public int icon() {
|
||||
//pre-v2.1 saves
|
||||
if (totalHits() == 0) return BuffIndicator.NONE;
|
||||
|
||||
if (Dungeon.hero.belongings.weapon() instanceof Gloves
|
||||
|| Dungeon.hero.belongings.weapon() instanceof Sai
|
||||
|| Dungeon.hero.belongings.weapon() instanceof Gauntlet
|
||||
@@ -152,59 +151,63 @@ public class Sai extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
public boolean act() {
|
||||
|
||||
//shuffle all hits down one turn
|
||||
for (int i = 0; i < DURATION; i++){
|
||||
if (i == DURATION-1){
|
||||
hits[i] = 0;
|
||||
} else {
|
||||
hits[i] = hits[i+1];
|
||||
}
|
||||
}
|
||||
|
||||
if (totalHits() == 0){
|
||||
comboTime-=TICK;
|
||||
spend(TICK);
|
||||
if (comboTime <= 0) {
|
||||
detach();
|
||||
}
|
||||
|
||||
spend(TICK);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addHit(){
|
||||
hits[DURATION-1]++;
|
||||
hits++;
|
||||
comboTime = 5f;
|
||||
|
||||
if (hits >= 2){
|
||||
GLog.p( Messages.get(Combo.class, "combo", hits) );
|
||||
}
|
||||
}
|
||||
|
||||
public int totalHits(){
|
||||
int sum = 0;
|
||||
for (int i = 0; i < DURATION; i++){
|
||||
sum += hits[i];
|
||||
}
|
||||
return sum;
|
||||
@Override
|
||||
public float iconFadePercent() {
|
||||
return Math.max(0, (DURATION - comboTime)/ DURATION);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String iconTextDisplay() {
|
||||
return Integer.toString(totalHits());
|
||||
return Integer.toString((int)comboTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return Messages.get(this, "desc", totalHits());
|
||||
return Messages.get(this, "desc", hits, dispTurns(comboTime));
|
||||
}
|
||||
|
||||
private static final String TIME = "combo_time";
|
||||
public static String RECENT_HITS = "recent_hits";
|
||||
|
||||
@Override
|
||||
public void storeInBundle(Bundle bundle) {
|
||||
super.storeInBundle(bundle);
|
||||
bundle.put(TIME, comboTime);
|
||||
bundle.put(RECENT_HITS, hits);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle(Bundle bundle) {
|
||||
super.restoreFromBundle(bundle);
|
||||
if (bundle.contains(RECENT_HITS)) {
|
||||
hits = bundle.getIntArray(RECENT_HITS);
|
||||
if (bundle.contains(TIME)){
|
||||
comboTime = bundle.getInt(TIME);
|
||||
hits = bundle.getInt(RECENT_HITS);
|
||||
} else {
|
||||
//pre-2.4.0 saves
|
||||
comboTime = 5f;
|
||||
hits = 0;
|
||||
if (bundle.contains(RECENT_HITS)) {
|
||||
for (int i : bundle.getIntArray(RECENT_HITS)) {
|
||||
hits += i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
@@ -47,11 +46,6 @@ public class Scimitar extends MeleeWeapon {
|
||||
lvl*(tier+1); //scaling unchanged
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
beforeAbilityUsed(hero, null);
|
||||
|
||||
@@ -53,14 +53,14 @@ public class Shortsword extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(2.5+0.6*lvl) damage, roughly equivalent to +30% damage
|
||||
int dmgBoost = augment.damageFactor(Math.round(2.5f + 0.6f*buffedLvl()));
|
||||
//+(3+lvl) damage, roughly +35% base dmg, +50% scaling
|
||||
int dmgBoost = augment.damageFactor(3 + buffedLvl());
|
||||
Sword.cleaveAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? Math.round(2.5f + 0.6f*buffedLvl()) : 3;
|
||||
int dmgBoost = levelKnown ? 3 + buffedLvl() : 3;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -53,11 +53,6 @@ public class Sickle extends MeleeWeapon {
|
||||
lvl*(tier+1); //scaling unchanged
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String targetingPrompt() {
|
||||
return Messages.get(this, "prompt");
|
||||
@@ -65,19 +60,18 @@ public class Sickle extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(1.1+lvl/5) damage, roughly equivalent to +10% damage
|
||||
//..yes such a small boost is very silly
|
||||
int dmgBoost = augment.damageFactor(Math.round(1.1f + buffedLvl()/5f));
|
||||
harvestAbility(hero, target, 1f, dmgBoost, this);
|
||||
//replaces damage with 12+2*lvl bleed, roughly 110% avg dmg at base, 100% avg scaling
|
||||
int bleedAmt = augment.damageFactor(12 + 2*buffedLvl());
|
||||
Sickle.harvestAbility(hero, target, 0f, bleedAmt, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? Math.round(1.1f + buffedLvl()/5f) : 1;
|
||||
int bleedAmt = levelKnown ? 12 + 2*buffedLvl() : 12;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(bleedAmt));
|
||||
} else {
|
||||
return Messages.get(this, "typical_ability_desc", min(0)+dmgBoost, max(0)+dmgBoost);
|
||||
return Messages.get(this, "typical_ability_desc", bleedAmt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,14 +61,14 @@ public class Spear extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(5+lvl) damage, roughly equivalent to +45% damage
|
||||
int dmgBoost = augment.damageFactor(5 + buffedLvl());
|
||||
//+(7+1.5*lvl) damage, roughly +65% base damage, +60% scaling
|
||||
int dmgBoost = augment.damageFactor(7 + Math.round(1.5f*buffedLvl()));
|
||||
Spear.spikeAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? 5 + buffedLvl() : 5;
|
||||
int dmgBoost = levelKnown ? 7 + Math.round(1.5f*buffedLvl()) : 7;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -63,14 +63,14 @@ public class Sword extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(3+0.67*lvl) damage, roughly equivalent to +27% damage
|
||||
int dmgBoost = augment.damageFactor(3 + Math.round(0.67f*buffedLvl()));
|
||||
//+(4+lvl) damage, roughly +35% base dmg, +40% scaling
|
||||
int dmgBoost = augment.damageFactor(4 + buffedLvl());
|
||||
Sword.cleaveAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? 3+Math.round(0.67f*buffedLvl()) : 3;
|
||||
int dmgBoost = levelKnown ? 4 + buffedLvl() : 4;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
@@ -107,11 +107,17 @@ public class Sword extends MeleeWeapon {
|
||||
}
|
||||
|
||||
Invisibility.dispel();
|
||||
hero.spendAndNext(hero.attackDelay());
|
||||
|
||||
if (!enemy.isAlive()){
|
||||
hero.next();
|
||||
wep.onAbilityKill(hero, enemy);
|
||||
Buff.prolong(hero, CleaveTracker.class, 5f);
|
||||
if (hero.buff(CleaveTracker.class) != null) {
|
||||
hero.buff(CleaveTracker.class).detach();
|
||||
} else {
|
||||
Buff.prolong(hero, CleaveTracker.class, 4f); //1 less as attack was instant
|
||||
}
|
||||
} else {
|
||||
hero.spendAndNext(hero.attackDelay());
|
||||
if (hero.buff(CleaveTracker.class) != null) {
|
||||
hero.buff(CleaveTracker.class).detach();
|
||||
}
|
||||
|
||||
@@ -22,9 +22,7 @@
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
|
||||
@@ -50,25 +48,16 @@ public class WarHammer extends MeleeWeapon {
|
||||
return Messages.get(this, "prompt");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
if (target == null || (target instanceof Mob && ((Mob) target).surprisedBy(hero))) {
|
||||
return 1;
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(4+lvl) damage, roughly equivalent to +30% damage
|
||||
int dmgBoost = augment.damageFactor(4 + buffedLvl());
|
||||
//+(6+1.5*lvl) damage, roughly +40% base dmg, +45% scaling
|
||||
int dmgBoost = augment.damageFactor(6 + Math.round(1.5f*buffedLvl()));
|
||||
Mace.heavyBlowAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? 4 + buffedLvl() : 4;
|
||||
int dmgBoost = levelKnown ? 6 + Math.round(1.5f*buffedLvl()) : 6;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
@@ -44,11 +43,6 @@ public class WarScythe extends MeleeWeapon {
|
||||
lvl*(tier+1); //scaling unchanged
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int baseChargeUse(Hero hero, Char target){
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String targetingPrompt() {
|
||||
return Messages.get(this, "prompt");
|
||||
@@ -56,16 +50,18 @@ public class WarScythe extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//uses the weapon's norma damage
|
||||
Sickle.harvestAbility(hero, target, 1f, 0, this);
|
||||
//replaces damage with 22.5+3.5*lvl bleed, exactly 100% avg damage.
|
||||
int bleedAmt = augment.damageFactor(Math.round(22.5f + 3.5f*buffedLvl()));
|
||||
Sickle.harvestAbility(hero, target, 0f, bleedAmt, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
if (levelKnown) {
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()), augment.damageFactor(max()));
|
||||
int bleedAmt = levelKnown ? Math.round(22.5f + 3.5f*buffedLvl()) : 23;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(bleedAmt));
|
||||
} else {
|
||||
return Messages.get(this, "typical_ability_desc", min(0), max(0));
|
||||
return Messages.get(this, "typical_ability_desc", bleedAmt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -82,8 +82,10 @@ public class Whip extends MeleeWeapon {
|
||||
@Override
|
||||
public void call() {
|
||||
beforeAbilityUsed(hero, finalClosest);
|
||||
//+(2+0.5*lvl) damage, roughly +20% base damage, +25% scaling
|
||||
int dmgBoost = augment.damageFactor(2 + Math.round(0.5f*buffedLvl()));
|
||||
for (Char ch : targets) {
|
||||
hero.attack(ch, 1, 0, ch == finalClosest ? Char.INFINITE_ACCURACY : 1);
|
||||
hero.attack(ch, 1, dmgBoost, Char.INFINITE_ACCURACY);
|
||||
if (!ch.isAlive()){
|
||||
onAbilityKill(hero, ch);
|
||||
}
|
||||
@@ -97,10 +99,11 @@ public class Whip extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
if (levelKnown) {
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()), augment.damageFactor(max()));
|
||||
int dmgBoost = levelKnown ? 2 + Math.round(0.5f*buffedLvl()) : 2;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
return Messages.get(this, "typical_ability_desc", min(0), max(0));
|
||||
return Messages.get(this, "typical_ability_desc", min(0)+dmgBoost, max(0)+dmgBoost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,14 +55,14 @@ public class WornShortsword extends MeleeWeapon {
|
||||
|
||||
@Override
|
||||
protected void duelistAbility(Hero hero, Integer target) {
|
||||
//+(2+lvl/2) damage, roughly equivalent to +33% damage
|
||||
int dmgBoost = augment.damageFactor(2 + Math.round(buffedLvl()/2f));
|
||||
//+(3+lvl) damage, roughly +55% base dmg, +67% scaling
|
||||
int dmgBoost = augment.damageFactor(3 + buffedLvl());
|
||||
Sword.cleaveAbility(hero, target, 1, dmgBoost, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String abilityInfo() {
|
||||
int dmgBoost = levelKnown ? 2+Math.round(buffedLvl()/2f) : 2;
|
||||
int dmgBoost = levelKnown ? 3 + buffedLvl() : 3;
|
||||
if (levelKnown){
|
||||
return Messages.get(this, "ability_desc", augment.damageFactor(min()+dmgBoost), augment.damageFactor(max()+dmgBoost));
|
||||
} else {
|
||||
|
||||
@@ -168,7 +168,7 @@ public class Dart extends MissileWeapon {
|
||||
//don't update xbow here, as dart may be the active weapon atm
|
||||
processingChargedShot = true;
|
||||
if (chargedShotPos != -1 && bow != null && Dungeon.hero.buff(Crossbow.ChargedShot.class) != null) {
|
||||
PathFinder.buildDistanceMap(chargedShotPos, Dungeon.level.passable, 2);
|
||||
PathFinder.buildDistanceMap(chargedShotPos, Dungeon.level.passable, 3);
|
||||
//necessary to clone as some on-hit effects use Pathfinder
|
||||
int[] distance = PathFinder.distance.clone();
|
||||
for (Char ch : Actor.chars()){
|
||||
|
||||
@@ -181,9 +181,9 @@ public abstract class TippedDart extends Dart {
|
||||
|
||||
float usages = Math.round(MAX_DURABILITY/use);
|
||||
|
||||
//grants 4 extra uses with charged shot
|
||||
//grants 3+lvl extra uses with charged shot
|
||||
if (bow != null && Dungeon.hero.buff(Crossbow.ChargedShot.class) != null){
|
||||
usages += 2 + bow.buffedLvl();
|
||||
usages += 3 + bow.buffedLvl();
|
||||
}
|
||||
|
||||
//at 100 uses, items just last forever.
|
||||
|
||||
Reference in New Issue
Block a user