v0.2.3: partial implementation of Timekeeper's Hourglass
This commit is contained in:
parent
e6e0966635
commit
ee9aad9078
|
@ -17,27 +17,13 @@
|
|||
*/
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.hero;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ResultDescriptions;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Drowsy;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NPC;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CapeOfThorns;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.*;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||
import com.watabou.noosa.Camera;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Bones;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.GamesInProgress;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ResultDescriptions;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barkskin;
|
||||
|
@ -45,8 +31,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bleeding;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Blindness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Burning;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Charm;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Drowsy;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Fury;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
|
@ -56,32 +44,45 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Paralysis;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Poison;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Regeneration;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Roots;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Charm;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.SnipersMark;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vertigo;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Weakness;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.NPC;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.CheckedCell;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Flare;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Amulet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Ankh;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.DewVial;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap.Type;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.KindOfWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CapeOfThorns;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.GoldenKey;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.Key;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfStrength;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEvasion;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfForce;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfFuror;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfHaste;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfMight;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfTenacity;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfUpgrade;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.features.AlchemyPot;
|
||||
|
@ -100,9 +101,15 @@ import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndMessage;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndResurrect;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndTradeItem;
|
||||
import com.watabou.noosa.Camera;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class Hero extends Char {
|
||||
|
||||
private static final String TXT_LEAVE = "One does not simply leave Pixel Dungeon.";
|
||||
|
@ -589,7 +596,7 @@ public class Hero extends Char {
|
|||
Item item = heap.pickUp();
|
||||
if (item.doPickUp( this )) {
|
||||
|
||||
if (item instanceof Dewdrop) {
|
||||
if (item instanceof Dewdrop || item instanceof TimekeepersHourglass.sandBag) {
|
||||
|
||||
} else {
|
||||
|
||||
|
|
|
@ -0,0 +1,160 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.QuickSlot;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundle;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by debenhame on 01/12/2014.
|
||||
*/
|
||||
public class TimekeepersHourglass extends Artifact {
|
||||
//TODO: string, effect implementation.
|
||||
|
||||
{
|
||||
name = "timekeeper's hourglass";
|
||||
image = 0;
|
||||
|
||||
level = 0;
|
||||
levelCap = 5;
|
||||
charge = 5+level;
|
||||
chargeCap = 5+level;
|
||||
defaultAction = AC_ACTIVATE;
|
||||
}
|
||||
|
||||
public static final String AC_ACTIVATE = "ACTIVATE";
|
||||
|
||||
//keeps track of generated sandbags.
|
||||
public int sandBags = 0;
|
||||
|
||||
@Override
|
||||
public ArrayList<String> actions( Hero hero ) {
|
||||
ArrayList<String> actions = super.actions( hero );
|
||||
if (isEquipped( hero ) && charge > 0)
|
||||
actions.add(AC_ACTIVATE);
|
||||
return actions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute( Hero hero, String action ) {
|
||||
if (action.equals(AC_ACTIVATE)){
|
||||
//todo: add logic here
|
||||
} else
|
||||
super.execute(hero, action);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ArtifactBuff passiveBuff() {
|
||||
return new hourglassRecharge();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item upgrade() {
|
||||
chargeCap++;
|
||||
|
||||
//for artifact transmutation.
|
||||
while (level+1 > sandBags)
|
||||
sandBags ++;
|
||||
|
||||
return super.upgrade();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
return "";
|
||||
}
|
||||
|
||||
//needs to bundle chargecap as it is dynamic.
|
||||
private static final String CHARGECAP = "chargecap";
|
||||
private static final String SANDBAGS = "sandbags";
|
||||
|
||||
@Override
|
||||
public void storeInBundle( Bundle bundle ) {
|
||||
super.storeInBundle(bundle);
|
||||
bundle.put( CHARGECAP, chargeCap );
|
||||
bundle.put( SANDBAGS, sandBags );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreFromBundle( Bundle bundle ) {
|
||||
super.restoreFromBundle(bundle);
|
||||
chargeCap = bundle.getInt( CHARGECAP );
|
||||
sandBags = bundle.getInt( SANDBAGS );
|
||||
}
|
||||
|
||||
public class hourglassRecharge extends ArtifactBuff {
|
||||
@Override
|
||||
public boolean act() {
|
||||
if (charge < chargeCap) {
|
||||
partialCharge += 1 / (40f - (chargeCap - charge)*3f);
|
||||
|
||||
if (partialCharge >= 1) {
|
||||
partialCharge --;
|
||||
charge ++;
|
||||
|
||||
if (charge == chargeCap){
|
||||
partialCharge = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QuickSlot.refresh();
|
||||
|
||||
spend( TICK );
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public class timeStasis extends ArtifactBuff {
|
||||
//todo: add logic here
|
||||
}
|
||||
|
||||
public class timeFreeze extends ArtifactBuff {
|
||||
//todo: add logic here
|
||||
}
|
||||
|
||||
public static class sandBag extends Item {
|
||||
|
||||
{
|
||||
name = "bag of magic sand";
|
||||
image = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doPickUp( Hero hero ) {
|
||||
TimekeepersHourglass hourglass = hero.belongings.getItem( TimekeepersHourglass.class );
|
||||
if (hourglass != null) {
|
||||
hourglass.upgrade();
|
||||
Sample.INSTANCE.play( Assets.SND_ITEM );
|
||||
if (hourglass.level == hourglass.levelCap)
|
||||
GLog.p("Your hourglass is filled with magical sand!");
|
||||
else
|
||||
GLog.i("you add the sand to your hourglass.");
|
||||
hero.spendAndNext(TIME_TO_PICK_UP);
|
||||
return true;
|
||||
} else {
|
||||
GLog.w("You have no hourglass to place this sand into.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc(){
|
||||
return "This small bag of finely ground sand should work perfectly with your hourglass.\n\n" +
|
||||
"It seems odd that the shopkeeper would have this specific item right when you need it.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int price() {
|
||||
return 20;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -17,8 +17,6 @@
|
|||
*/
|
||||
package com.shatteredpixel.shatteredpixeldungeon.levels.painters;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.ImpShopkeeper;
|
||||
|
@ -29,7 +27,11 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Torch;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Weightstone;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.*;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.LeatherArmor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.MailArmor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.PlateArmor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ScaleArmor;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.ScrollHolder;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.SeedPouch;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.bags.WandHolster;
|
||||
|
@ -38,7 +40,14 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
|
|||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfMagicMapping;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRemoveCurse;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.*;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.BattleAxe;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Glaive;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Longsword;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Mace;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Quarterstaff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Spear;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Sword;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WarHammer;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.LastShopLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Room;
|
||||
|
@ -46,6 +55,8 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
|||
import com.watabou.utils.Point;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ShopPainter extends Painter {
|
||||
|
||||
private static int pasWidth;
|
||||
|
@ -145,6 +156,28 @@ public class ShopPainter extends Painter {
|
|||
|
||||
items.add( new Ankh() );
|
||||
|
||||
TimekeepersHourglass hourglass = Dungeon.hero.belongings.getItem(TimekeepersHourglass.class);
|
||||
|
||||
if (hourglass != null){
|
||||
int bags = 0;
|
||||
switch (Dungeon.depth) {
|
||||
case 21:
|
||||
bags = (int)Math.ceil(( 5-hourglass.sandBags) * 0.80f ); break;
|
||||
case 16:
|
||||
bags = (int)Math.ceil(( 5-hourglass.sandBags) * 0.50f ); break;
|
||||
case 11:
|
||||
bags = (int)Math.ceil(( 5-hourglass.sandBags) * 0.25f ); break;
|
||||
case 6:
|
||||
bags = (int)Math.ceil(( 5-hourglass.sandBags) * 0.20f ); break;
|
||||
}
|
||||
|
||||
|
||||
for(int i = 1; i <= bags; i++){
|
||||
items.add( new TimekeepersHourglass.sandBag());
|
||||
hourglass.sandBags ++;
|
||||
}
|
||||
}
|
||||
|
||||
Item[] range =items.toArray( new Item[0] );
|
||||
Random.shuffle( range );
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user