v0.3.5: first half of gladiator rework (new combo baseline, no finishers yet)
This commit is contained in:
parent
637d6b62ee
commit
0cb6e96dee
|
@ -716,7 +716,7 @@ public class Badges {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void validateMasteryCombo( int n ) {
|
public static void validateMasteryCombo( int n ) {
|
||||||
if (!local.contains( Badge.MASTERY_COMBO ) && n == 7) {
|
if (!local.contains( Badge.MASTERY_COMBO ) && n == 10) {
|
||||||
Badge badge = Badge.MASTERY_COMBO;
|
Badge badge = Badge.MASTERY_COMBO;
|
||||||
local.add( badge );
|
local.add( badge );
|
||||||
displayBadge( badge );
|
displayBadge( badge );
|
||||||
|
|
|
@ -21,14 +21,23 @@
|
||||||
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
|
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
|
||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.ui.ActionIndicator;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||||
|
import com.watabou.noosa.Image;
|
||||||
|
import com.watabou.utils.Bundle;
|
||||||
|
|
||||||
public class Combo extends Buff {
|
public class Combo extends Buff implements ActionIndicator.Action {
|
||||||
|
|
||||||
public int count = 0;
|
private int count = 0;
|
||||||
|
private float comboTime = 0f;
|
||||||
|
private int misses = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int icon() {
|
public int icon() {
|
||||||
|
@ -40,37 +49,87 @@ public class Combo extends Buff {
|
||||||
return Messages.get(this, "name");
|
return Messages.get(this, "name");
|
||||||
}
|
}
|
||||||
|
|
||||||
public int hit( Char enemy, int damage ) {
|
public void hit() {
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
|
comboTime = 3f;
|
||||||
|
misses = 0;
|
||||||
|
|
||||||
if (count >= 3) {
|
if (count >= 2) {
|
||||||
|
|
||||||
|
ActionIndicator.setAction( this );
|
||||||
Badges.validateMasteryCombo( count );
|
Badges.validateMasteryCombo( count );
|
||||||
|
|
||||||
GLog.p( Messages.get(this, "combo", count) );
|
GLog.p( Messages.get(this, "combo", count) );
|
||||||
postpone( 1.41f - count / 10f );
|
|
||||||
return (int)(damage * (count - 2) / 5f);
|
|
||||||
|
|
||||||
} else {
|
}
|
||||||
|
|
||||||
postpone( 1.1f );
|
}
|
||||||
return 0;
|
|
||||||
|
|
||||||
|
public void miss(){
|
||||||
|
misses++;
|
||||||
|
if (misses >= 2){
|
||||||
|
detach();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void detach() {
|
||||||
|
super.detach();
|
||||||
|
ActionIndicator.clearAction(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean act() {
|
public boolean act() {
|
||||||
detach();
|
comboTime-=TICK;
|
||||||
|
spend(TICK);
|
||||||
|
if (comboTime <= 0) {
|
||||||
|
detach();
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String desc() {
|
public String desc() {
|
||||||
return Messages.get(this, "desc") +
|
return Messages.get(this, "desc");
|
||||||
(count <= 2 ?
|
}
|
||||||
Messages.get(this, "notenough") :
|
|
||||||
Messages.get(this, "bonusdmg", ((count - 2) * 20f)));
|
private static final String COUNT = "count";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void storeInBundle(Bundle bundle) {
|
||||||
|
super.storeInBundle(bundle);
|
||||||
|
bundle.put(COUNT, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void restoreFromBundle(Bundle bundle) {
|
||||||
|
super.restoreFromBundle(bundle);
|
||||||
|
count = bundle.getInt( COUNT );
|
||||||
|
if (count >= 2) ActionIndicator.setAction(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Image getIcon() {
|
||||||
|
Image icon;
|
||||||
|
if (((Hero)target).belongings.weapon != null){
|
||||||
|
icon = new ItemSprite(Dungeon.hero.belongings.weapon);
|
||||||
|
} else {
|
||||||
|
icon = new ItemSprite(new Item(){ {image = ItemSpriteSheet.WEAPON; }});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count >= 10) icon.tint(0xFFFF0000);
|
||||||
|
else if (count >= 8)icon.tint(0xFFFFCC00);
|
||||||
|
else if (count >= 6)icon.tint(0xFFFFFF00);
|
||||||
|
else if (count >= 4)icon.tint(0xFFCCFF00);
|
||||||
|
else icon.tint(0xFF00FF00);
|
||||||
|
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doAction() {
|
||||||
|
ActionIndicator.clearAction(this);
|
||||||
|
//TODO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,7 +78,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicalInfusion;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicalInfusion;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||||
|
@ -845,11 +844,6 @@ public class Hero extends Char {
|
||||||
if (wep != null) wep.proc( this, enemy, damage );
|
if (wep != null) wep.proc( this, enemy, damage );
|
||||||
|
|
||||||
switch (subClass) {
|
switch (subClass) {
|
||||||
case GLADIATOR:
|
|
||||||
if (wep instanceof MeleeWeapon || wep == null) {
|
|
||||||
damage += Buff.affect( this, Combo.class ).hit( enemy, damage );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SNIPER:
|
case SNIPER:
|
||||||
if (rangedWeapon != null) {
|
if (rangedWeapon != null) {
|
||||||
Buff.prolong( this, SnipersMark.class, attackDelay() * 1.1f ).object = enemy.id();
|
Buff.prolong( this, SnipersMark.class, attackDelay() * 1.1f ).object = enemy.id();
|
||||||
|
@ -1330,7 +1324,17 @@ public class Hero extends Char {
|
||||||
|
|
||||||
AttackIndicator.target(enemy);
|
AttackIndicator.target(enemy);
|
||||||
|
|
||||||
attack( enemy );
|
boolean hit = attack( enemy );
|
||||||
|
|
||||||
|
if (subClass == HeroSubClass.GLADIATOR){
|
||||||
|
if (hit) {
|
||||||
|
Buff.affect( this, Combo.class ).hit();
|
||||||
|
} else {
|
||||||
|
Combo combo = buff(Combo.class);
|
||||||
|
if (combo != null) combo.miss();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
curAction = null;
|
curAction = null;
|
||||||
|
|
||||||
Invisibility.dispel();
|
Invisibility.dispel();
|
||||||
|
|
|
@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.SnipersMark;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.SnipersMark;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||||
|
@ -132,6 +133,9 @@ public class Item implements Bundlable {
|
||||||
curUser = hero;
|
curUser = hero;
|
||||||
curItem = this;
|
curItem = this;
|
||||||
|
|
||||||
|
Combo combo = hero.buff(Combo.class);
|
||||||
|
if (combo != null) combo.detach();
|
||||||
|
|
||||||
if (action.equals( AC_DROP )) {
|
if (action.equals( AC_DROP )) {
|
||||||
|
|
||||||
doDrop( hero );
|
doDrop( hero );
|
||||||
|
|
|
@ -76,9 +76,7 @@ actors.buffs.chill.desc=Not quite frozen, but still much too cold.\n\nChilled ta
|
||||||
|
|
||||||
actors.buffs.combo.name=Combo
|
actors.buffs.combo.name=Combo
|
||||||
actors.buffs.combo.combo=%d hit combo!
|
actors.buffs.combo.combo=%d hit combo!
|
||||||
actors.buffs.combo.desc=Through building momentum, the gladiator deals bonus damage.\n\nYour combo will keep building with quick attacks. The higher your combo gets, the faster your attacks will need to be. Failing to land a hit quickly enough will reset the combo.
|
actors.buffs.combo.desc=TODO
|
||||||
actors.buffs.combo.notenough=\n\nYour combo has not built up enough to give you bonus damage yet.
|
|
||||||
actors.buffs.combo.bonusdmg=\n\nCurrent combo bonus damage: %f%%.
|
|
||||||
|
|
||||||
actors.buffs.corruption.name=Corrupted
|
actors.buffs.corruption.name=Corrupted
|
||||||
actors.buffs.corruption.desc=Corruption seeps into the essence of a being, twisting them against their former nature.\n\nCorrupted creatures will attack and aggravate their allies, and ignore their former enemies. Corruption is damaging as well, and will slowly cause its target to succumb.\n\nCorruption is permanent, its effects only end in death.
|
actors.buffs.corruption.desc=Corruption seeps into the essence of a being, twisting them against their former nature.\n\nCorrupted creatures will attack and aggravate their allies, and ignore their former enemies. Corruption is damaging as well, and will slowly cause its target to succumb.\n\nCorruption is permanent, its effects only end in death.
|
||||||
|
|
|
@ -49,7 +49,7 @@ badges$badge.item_level_4=Item of level 12 acquired
|
||||||
badges$badge.rare=All rare monsters slain
|
badges$badge.rare=All rare monsters slain
|
||||||
badges$badge.victory=Amulet of Yendor obtained
|
badges$badge.victory=Amulet of Yendor obtained
|
||||||
badges$badge.victory_all_classes=Amulet of Yendor obtained by Warrior, Mage, Rogue & Huntress
|
badges$badge.victory_all_classes=Amulet of Yendor obtained by Warrior, Mage, Rogue & Huntress
|
||||||
badges$badge.mastery_combo=7-hit combo
|
badges$badge.mastery_combo=10-hit combo
|
||||||
badges$badge.potions_cooked_1=3 potions cooked
|
badges$badge.potions_cooked_1=3 potions cooked
|
||||||
badges$badge.potions_cooked_2=6 potions cooked
|
badges$badge.potions_cooked_2=6 potions cooked
|
||||||
badges$badge.potions_cooked_3=9 potions cooked
|
badges$badge.potions_cooked_3=9 potions cooked
|
||||||
|
|
|
@ -70,8 +70,9 @@ public class ActionIndicator extends Tag {
|
||||||
updateIcon();
|
updateIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void clearAction(){
|
public static void clearAction(Action action){
|
||||||
action = null;
|
if (ActionIndicator.action == action)
|
||||||
|
ActionIndicator.action = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateIcon(){
|
public static void updateIcon(){
|
||||||
|
|
Loading…
Reference in New Issue
Block a user