v0.4.0: lots of refactoring to on-upgrade logic
This commit is contained in:
committed by
Evan Debenham
parent
9f65ff4e5b
commit
4c8bcade38
@@ -273,6 +273,8 @@ public class Item implements Bundlable {
|
||||
|
||||
public void level( int value ){
|
||||
level = value;
|
||||
|
||||
updateQuickslot();
|
||||
}
|
||||
|
||||
public Item upgrade() {
|
||||
|
||||
@@ -227,26 +227,11 @@ public class Armor extends EquipableItem {
|
||||
}
|
||||
|
||||
public Item upgrade( boolean inscribe ) {
|
||||
|
||||
if (glyph != null) {
|
||||
if (inscribe && glyph.curse()){
|
||||
inscribe( Glyph.random() );
|
||||
} else if (!inscribe && Random.Float() > Math.pow(0.9, level())) {
|
||||
if (!glyph.curse())
|
||||
GLog.w( Messages.get(Armor.class, "incompatible") );
|
||||
else if (cursedKnown) {
|
||||
GLog.p(Messages.get(Item.class, "remove_curse"));
|
||||
Dungeon.hero.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10 );
|
||||
}
|
||||
inscribe( null );
|
||||
} else if (!inscribe && glyph.curse() && cursed && cursedKnown){
|
||||
GLog.p( Messages.get(Item.class, "weaken_curse") );
|
||||
Dungeon.hero.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10 );
|
||||
}
|
||||
} else {
|
||||
if (inscribe) {
|
||||
inscribe( Glyph.random() );
|
||||
}
|
||||
|
||||
if (inscribe && (glyph == null || glyph.curse())){
|
||||
inscribe( Glyph.random() );
|
||||
} else if (!inscribe && Random.Float() > Math.pow(0.9, level())){
|
||||
inscribe(null);
|
||||
}
|
||||
|
||||
if (seal != null && seal.level() == 0)
|
||||
@@ -406,8 +391,16 @@ public class Armor extends EquipableItem {
|
||||
return inscribe( gl );
|
||||
}
|
||||
|
||||
public boolean isInscribed() {
|
||||
return glyph != null;
|
||||
public boolean hasGlyph(Class<?extends Glyph> type) {
|
||||
return glyph != null && glyph.getClass() == type;
|
||||
}
|
||||
|
||||
public boolean hasGoodGlyph(){
|
||||
return glyph != null && !glyph.curse();
|
||||
}
|
||||
|
||||
public boolean hasCurseGlyph(){
|
||||
return glyph != null && glyph.curse();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -127,28 +127,6 @@ public class Ring extends KindofMisc {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item upgrade() {
|
||||
|
||||
if (cursed && cursedKnown) {
|
||||
GLog.p( Messages.get(Item.class, "weaken_curse") );
|
||||
Dungeon.hero.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10 );
|
||||
}
|
||||
|
||||
super.upgrade();
|
||||
|
||||
if (buff != null) {
|
||||
|
||||
Char owner = buff.target;
|
||||
buff.detach();
|
||||
if ((buff = buff()) != null) {
|
||||
buff.attachTo( owner );
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isKnown() {
|
||||
return handler.isKnown( this );
|
||||
}
|
||||
@@ -263,11 +241,6 @@ public class Ring extends KindofMisc {
|
||||
|
||||
public class RingBuff extends Buff {
|
||||
|
||||
public int level;
|
||||
public RingBuff() {
|
||||
level = Ring.this.level();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean attachTo( Char target ) {
|
||||
|
||||
@@ -284,7 +257,6 @@ public class Ring extends KindofMisc {
|
||||
public boolean act() {
|
||||
|
||||
if (!isIdentified() && --ticksToKnow <= 0) {
|
||||
String gemName = name();
|
||||
identify();
|
||||
GLog.w( Messages.get(Ring.class, "identify", Ring.this.toString()) );
|
||||
Badges.validateItemLevelAquired( Ring.this );
|
||||
@@ -294,5 +266,9 @@ public class Ring extends KindofMisc {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public int level(){
|
||||
return Ring.this.level();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ public class ScrollOfRemoveCurse extends InventoryScroll {
|
||||
}
|
||||
if (item instanceof Weapon){
|
||||
Weapon w = (Weapon) item;
|
||||
if (w.enchantment != null && w.enchantment.curse()){
|
||||
if (w.hasCurseEnchant()){
|
||||
w.enchant(null);
|
||||
w.cursed = false;
|
||||
procced = true;
|
||||
@@ -76,7 +76,7 @@ public class ScrollOfRemoveCurse extends InventoryScroll {
|
||||
}
|
||||
if (item instanceof Armor){
|
||||
Armor a = (Armor) item;
|
||||
if (a.glyph != null && a.glyph.curse()){
|
||||
if (a.hasCurseGlyph()){
|
||||
a.inscribe(null);
|
||||
a.cursed = false;
|
||||
procced = true;
|
||||
|
||||
@@ -21,9 +21,15 @@
|
||||
package com.shatteredpixel.shatteredpixeldungeon.items.scrolls;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ShadowParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndBag;
|
||||
@@ -40,10 +46,69 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
||||
@Override
|
||||
protected void onItemSelected( Item item ) {
|
||||
|
||||
item.upgrade();
|
||||
|
||||
upgrade( curUser );
|
||||
GLog.p( Messages.get(this, "looks_better", item.name()) );
|
||||
|
||||
//logic for telling the user when item properties change from upgrades
|
||||
//...yes this is rather messy
|
||||
if (item instanceof Weapon){
|
||||
Weapon w = (Weapon) item;
|
||||
boolean wasCursed = w.cursed;
|
||||
boolean hadCursedEnchant = w.hasCurseEnchant();
|
||||
boolean hadGoodEnchant = w.hasGoodEnchant();
|
||||
|
||||
w.upgrade();
|
||||
|
||||
if (hadCursedEnchant && !w.hasCurseEnchant()){
|
||||
removeCurse( Dungeon.hero );
|
||||
} else if (wasCursed && !w.cursed){
|
||||
weakenCurse( Dungeon.hero );
|
||||
}
|
||||
if (hadGoodEnchant && !w.hasGoodEnchant()){
|
||||
GLog.w( Messages.get(Weapon.class, "incompatible") );
|
||||
}
|
||||
|
||||
} else if (item instanceof Armor){
|
||||
Armor a = (Armor) item;
|
||||
boolean wasCursed = a.cursed;
|
||||
boolean hadCursedGlyph = a.hasCurseGlyph();
|
||||
boolean hadGoodGlyph = a.hasGoodGlyph();
|
||||
|
||||
a.upgrade();
|
||||
|
||||
if (hadCursedGlyph && a.glyph == null){
|
||||
removeCurse( Dungeon.hero );
|
||||
} else if (wasCursed && !a.cursed){
|
||||
weakenCurse( Dungeon.hero );
|
||||
}
|
||||
if (hadGoodGlyph && !a.hasGoodGlyph()){
|
||||
GLog.w( Messages.get(Armor.class, "incompatible") );
|
||||
}
|
||||
|
||||
} else if (item instanceof Wand) {
|
||||
boolean wasCursed = item.cursed;
|
||||
|
||||
item.upgrade();
|
||||
|
||||
if (wasCursed && !item.cursed){
|
||||
removeCurse( Dungeon.hero );
|
||||
}
|
||||
|
||||
} else if (item instanceof Ring) {
|
||||
boolean wasCursed = item.cursed;
|
||||
|
||||
item.upgrade();
|
||||
|
||||
if (wasCursed && !item.cursed){
|
||||
if (item.level() < 1){
|
||||
weakenCurse( Dungeon.hero );
|
||||
} else {
|
||||
removeCurse( Dungeon.hero );
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
item.upgrade();
|
||||
}
|
||||
|
||||
Badges.validateItemLevelAquired( item );
|
||||
}
|
||||
@@ -52,4 +117,14 @@ public class ScrollOfUpgrade extends InventoryScroll {
|
||||
hero.sprite.emitter().start( Speck.factory( Speck.UP ), 0.2f, 3 );
|
||||
}
|
||||
|
||||
public static void weakenCurse( Hero hero ){
|
||||
GLog.p( Messages.get(ScrollOfUpgrade.class, "weaken_curse") );
|
||||
hero.sprite.emitter().start( ShadowParticle.UP, 0.05f, 5 );
|
||||
}
|
||||
|
||||
public static void removeCurse( Hero hero ){
|
||||
GLog.p( Messages.get(ScrollOfUpgrade.class, "remove_curse") );
|
||||
hero.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -186,17 +186,11 @@ public abstract class Wand extends Item {
|
||||
@Override
|
||||
public Item upgrade() {
|
||||
|
||||
boolean cursedPreUpgrade = cursed;
|
||||
|
||||
super.upgrade();
|
||||
|
||||
if (cursedPreUpgrade && Random.Float() > Math.pow(0.9, level())){
|
||||
GLog.p( Messages.get(Item.class, "remove_curse") );
|
||||
Dungeon.hero.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10 );
|
||||
} else {
|
||||
cursed = cursedPreUpgrade;
|
||||
}
|
||||
|
||||
if (Random.Float() > Math.pow(0.9, level()))
|
||||
cursed = false;
|
||||
|
||||
updateLevel();
|
||||
curCharges = Math.min( curCharges + 1, maxCharges );
|
||||
updateQuickslot();
|
||||
|
||||
@@ -205,25 +205,11 @@ abstract public class Weapon extends KindOfWeapon {
|
||||
public abstract int STRReq(int lvl);
|
||||
|
||||
public Item upgrade( boolean enchant ) {
|
||||
if (enchantment != null) {
|
||||
if (enchant && enchantment.curse()){
|
||||
enchant( Enchantment.random() );
|
||||
} else if (!enchant && Random.Float() > Math.pow(0.9, level())) {
|
||||
if (!enchantment.curse())
|
||||
GLog.w( Messages.get(Weapon.class, "incompatible") );
|
||||
else {
|
||||
GLog.p(Messages.get(Item.class, "remove_curse"));
|
||||
Dungeon.hero.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10 );
|
||||
}
|
||||
enchant( null );
|
||||
} else if (!enchant && enchantment.curse() && cursed && cursedKnown){
|
||||
GLog.p( Messages.get(Item.class, "weaken_curse") );
|
||||
Dungeon.hero.sprite.emitter().start( ShadowParticle.UP, 0.05f, 10 );
|
||||
}
|
||||
} else {
|
||||
if (enchant) {
|
||||
enchant( );
|
||||
}
|
||||
|
||||
if (enchant && (enchantment == null || enchantment.curse())){
|
||||
enchant( Enchantment.random() );
|
||||
} else if (!enchant && Random.Float() > Math.pow(0.9, level())){
|
||||
enchant(null);
|
||||
}
|
||||
|
||||
return super.upgrade();
|
||||
@@ -275,8 +261,15 @@ abstract public class Weapon extends KindOfWeapon {
|
||||
return enchant( ench );
|
||||
}
|
||||
|
||||
public boolean isEnchanted() {
|
||||
return enchantment != null;
|
||||
public boolean hasEnchant(Class<?extends Enchantment> type) {
|
||||
return enchantment != null && enchantment.getClass() == type;
|
||||
}
|
||||
|
||||
public boolean hasGoodEnchant(){
|
||||
return enchantment != null && !enchantment.curse();
|
||||
}
|
||||
|
||||
public boolean hasCurseEnchant(){ return enchantment != null && enchantment.curse();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user