v2.5.0: more thoroughly filled out equipment and consumable catalog tabs

This commit is contained in:
Evan Debenham
2024-06-11 15:35:29 -04:00
parent 6a313b1355
commit a3f2ab7a89
15 changed files with 216 additions and 58 deletions
@@ -122,7 +122,9 @@ windows.wndjournal$notestab.landmarks=Landmarks
windows.wndjournal$catalogtab.title=Catalogs windows.wndjournal$catalogtab.title=Catalogs
windows.wndjournal$catalogtab.title_equipment=Equipment windows.wndjournal$catalogtab.title_equipment=Equipment
windows.wndjournal$catalogtab.title_consumables=Consumables windows.wndjournal$catalogtab.title_consumables=Consumables
windows.wndjournal$catalogtab.not_seen=You haven't identified this item yet. windows.wndjournal$catalogtab.not_seen_item=You haven't found and identified that item in any of your runs yet.
windows.wndjournal$catalogtab.not_seen_enchantment=You haven't found and identified a weapon with that enchantmet in any of your runs yet.
windows.wndjournal$catalogtab.not_seen_glyph=You haven't found and identified an armor with that glyph in any of your runs yet.
windows.wndjournal$loretab.title=Documents windows.wndjournal$loretab.title=Documents
windows.wndkeybindings.controller_info=The left stick moves your character\nThe right stick controls an on-screen pointer windows.wndkeybindings.controller_info=The left stick moves your character\nThe right stick controls an on-screen pointer
@@ -71,6 +71,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortswor
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingKnife; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingKnife;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingSpike; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingSpike;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingStone; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingStone;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.watabou.utils.DeviceCompat; import com.watabou.utils.DeviceCompat;
@@ -164,6 +165,7 @@ public enum HeroClass {
if (hero.belongings.armor != null){ if (hero.belongings.armor != null){
hero.belongings.armor.affixSeal(new BrokenSeal()); hero.belongings.armor.affixSeal(new BrokenSeal());
Catalog.setSeen(BrokenSeal.class); //as it's not added to the inventory
} }
new PotionOfHealing().identify(); new PotionOfHealing().identify();
@@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText; import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
@@ -49,6 +50,7 @@ public class Dewdrop extends Item {
public boolean doPickUp(Hero hero, int pos) { public boolean doPickUp(Hero hero, int pos) {
Waterskin flask = hero.belongings.getItem( Waterskin.class ); Waterskin flask = hero.belongings.getItem( Waterskin.class );
Catalog.setSeen(getClass());
if (flask != null && !flask.isFull()){ if (flask != null && !flask.isFull()){
@@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText; import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
@@ -54,6 +55,8 @@ public class EnergyCrystal extends Item {
@Override @Override
public boolean doPickUp(Hero hero, int pos) { public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
Dungeon.energy += quantity; Dungeon.energy += quantity;
//TODO track energy collected maybe? We do already track recipes crafted though.. //TODO track energy collected maybe? We do already track recipes crafted though..
@@ -27,6 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics; import com.shatteredpixel.shatteredpixeldungeon.Statistics;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText; import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
@@ -58,6 +59,8 @@ public class Gold extends Item {
@Override @Override
public boolean doPickUp(Hero hero, int pos) { public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
Dungeon.gold += quantity; Dungeon.gold += quantity;
Statistics.goldCollected += quantity; Statistics.goldCollected += quantity;
Badges.validateGoldCollected(); Badges.validateGoldCollected();
@@ -268,7 +268,7 @@ public class Item implements Bundlable {
} }
public boolean collect() { public final boolean collect() {
return collect( Dungeon.hero.belongings.backpack ); return collect( Dungeon.hero.belongings.backpack );
} }
@@ -57,8 +57,10 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Stone;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Swiftness; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Swiftness;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Thorns; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Thorns;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Viscosity;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfArcana; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfArcana;
import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.ParchmentScrap; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.ParchmentScrap;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.HeroSprite;
@@ -201,6 +203,26 @@ public class Armor extends EquipableItem {
} }
} }
@Override
public boolean collect(Bag container) {
if(super.collect(container)){
if (isIdentified() && glyph != null){
Catalog.setSeen(glyph.getClass());
}
return true;
} else {
return false;
}
}
@Override
public Item identify(boolean byHero) {
if (glyph != null && byHero && Dungeon.hero != null && Dungeon.hero.isAlive()){
Catalog.setSeen(glyph.getClass());
}
return super.identify(byHero);
}
@Override @Override
public boolean doEquip( Hero hero ) { public boolean doEquip( Hero hero ) {
@@ -613,6 +635,10 @@ public class Armor extends EquipableItem {
if (seal != null){ if (seal != null){
seal.setGlyph(glyph); seal.setGlyph(glyph);
} }
if (isIdentified() && Dungeon.hero != null
&& Dungeon.hero.isAlive() && Dungeon.hero.belongings.contains(this)){
Catalog.setSeen(glyph.getClass());
}
return this; return this;
} }
@@ -660,7 +686,7 @@ public class Armor extends EquipableItem {
10 //3.33% each 10 //3.33% each
}; };
private static final Class<?>[] curses = new Class<?>[]{ public static final Class<?>[] curses = new Class<?>[]{
AntiEntropy.class, Corrosion.class, Displacement.class, Metabolism.class, AntiEntropy.class, Corrosion.class, Displacement.class, Metabolism.class,
Multiplicity.class, Stench.class, Overgrowth.class, Bulk.class Multiplicity.class, Stench.class, Overgrowth.class, Bulk.class
}; };
@@ -53,6 +53,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRetributio
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfPsionicBlast; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfPsionicBlast;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.AlchemyScene;
import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector;
@@ -489,6 +490,7 @@ public class DriedRose extends Artifact {
@Override @Override
public boolean doPickUp(Hero hero, int pos) { public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
DriedRose rose = hero.belongings.getItem( DriedRose.class ); DriedRose rose = hero.belongings.getItem( DriedRose.class );
if (rose == null){ if (rose == null){
@@ -34,6 +34,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEnergy; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfEnergy;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.Trap;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.plants.Plant; import com.shatteredpixel.shatteredpixeldungeon.plants.Plant;
@@ -475,6 +476,7 @@ public class TimekeepersHourglass extends Artifact {
@Override @Override
public boolean doPickUp(Hero hero, int pos) { public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
TimekeepersHourglass hourglass = hero.belongings.getItem( TimekeepersHourglass.class ); TimekeepersHourglass hourglass = hero.belongings.getItem( TimekeepersHourglass.class );
if (hourglass != null && !hourglass.cursed) { if (hourglass != null && !hourglass.cursed) {
hourglass.upgrade(); hourglass.upgrade();
@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.keys;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes; import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.windows.WndJournal; import com.shatteredpixel.shatteredpixeldungeon.windows.WndJournal;
@@ -49,6 +50,7 @@ public abstract class Key extends Item {
@Override @Override
public boolean doPickUp(Hero hero, int pos) { public boolean doPickUp(Hero hero, int pos) {
Catalog.setSeen(getClass());
GameScene.pickUpJournal(this, pos); GameScene.pickUpJournal(this, pos);
WndJournal.last_index = 2; WndJournal.last_index = 2;
Notes.add(this); Notes.add(this);
@@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.duelist.ElementalStrike; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.duelist.ElementalStrike;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.KindOfWeapon; import com.shatteredpixel.shatteredpixeldungeon.items.KindOfWeapon;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.Bag;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfArcana; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfArcana;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfForce; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfForce;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfFuror; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfFuror;
@@ -58,6 +59,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Unstab
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Vampiric; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Vampiric;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RunicBlade; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RunicBlade;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Scimitar; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Scimitar;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
@@ -177,6 +179,26 @@ abstract public class Weapon extends KindOfWeapon {
availableUsesToID = USES_TO_ID/2f; availableUsesToID = USES_TO_ID/2f;
} }
@Override
public boolean collect(Bag container) {
if(super.collect(container)){
if (isIdentified() && enchantment != null){
Catalog.setSeen(enchantment.getClass());
}
return true;
} else {
return false;
}
}
@Override
public Item identify(boolean byHero) {
if (enchantment != null && byHero && Dungeon.hero != null && Dungeon.hero.isAlive()){
Catalog.setSeen(enchantment.getClass());
}
return super.identify(byHero);
}
@Override @Override
public float accuracyFactor(Char owner, Char target) { public float accuracyFactor(Char owner, Char target) {
@@ -331,6 +353,10 @@ abstract public class Weapon extends KindOfWeapon {
if (ench == null || !ench.curse()) curseInfusionBonus = false; if (ench == null || !ench.curse()) curseInfusionBonus = false;
enchantment = ench; enchantment = ench;
updateQuickslot(); updateQuickslot();
if (isIdentified() && Dungeon.hero != null
&& Dungeon.hero.isAlive() && Dungeon.hero.belongings.contains(this)){
Catalog.setSeen(ench.getClass());
}
return this; return this;
} }
@@ -378,7 +404,7 @@ abstract public class Weapon extends KindOfWeapon {
10 //3.33% each 10 //3.33% each
}; };
private static final Class<?>[] curses = new Class<?>[]{ public static final Class<?>[] curses = new Class<?>[]{
Annoying.class, Displacing.class, Dazzling.class, Explosive.class, Annoying.class, Displacing.class, Dazzling.class, Explosive.class,
Sacrificial.class, Wayward.class, Polarized.class, Friendly.class Sacrificial.class, Wayward.class, Polarized.class, Friendly.class
}; };
@@ -25,18 +25,19 @@ import com.shatteredpixel.shatteredpixeldungeon.Badges;
import com.shatteredpixel.shatteredpixeldungeon.items.Amulet; import com.shatteredpixel.shatteredpixeldungeon.items.Amulet;
import com.shatteredpixel.shatteredpixeldungeon.items.Ankh; import com.shatteredpixel.shatteredpixeldungeon.items.Ankh;
import com.shatteredpixel.shatteredpixeldungeon.items.ArcaneResin; import com.shatteredpixel.shatteredpixeldungeon.items.ArcaneResin;
import com.shatteredpixel.shatteredpixeldungeon.items.BrokenSeal;
import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop; import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop;
import com.shatteredpixel.shatteredpixeldungeon.items.EnergyCrystal; import com.shatteredpixel.shatteredpixeldungeon.items.EnergyCrystal;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Gold; import com.shatteredpixel.shatteredpixeldungeon.items.Gold;
import com.shatteredpixel.shatteredpixeldungeon.items.Honeypot; import com.shatteredpixel.shatteredpixeldungeon.items.Honeypot;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown; import com.shatteredpixel.shatteredpixeldungeon.items.KingsCrown;
import com.shatteredpixel.shatteredpixeldungeon.items.LiquidMetal; import com.shatteredpixel.shatteredpixeldungeon.items.LiquidMetal;
import com.shatteredpixel.shatteredpixeldungeon.items.Stylus; import com.shatteredpixel.shatteredpixeldungeon.items.Stylus;
import com.shatteredpixel.shatteredpixeldungeon.items.TengusMask; import com.shatteredpixel.shatteredpixeldungeon.items.TengusMask;
import com.shatteredpixel.shatteredpixeldungeon.items.Torch; import com.shatteredpixel.shatteredpixeldungeon.items.Torch;
import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin; import com.shatteredpixel.shatteredpixeldungeon.items.Waterskin;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.MagicalHolster; import com.shatteredpixel.shatteredpixeldungeon.items.bags.MagicalHolster;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.PotionBandolier; import com.shatteredpixel.shatteredpixeldungeon.items.bags.PotionBandolier;
import com.shatteredpixel.shatteredpixeldungeon.items.bags.ScrollHolder; import com.shatteredpixel.shatteredpixeldungeon.items.bags.ScrollHolder;
@@ -83,6 +84,11 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfIc
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfMight;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfToxicEssence; import com.shatteredpixel.shatteredpixeldungeon.items.potions.elixirs.ElixirOfToxicEssence;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.exotic.ExoticPotion;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.CeremonialCandle;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.CorpseDust;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.DarkGold;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.DwarfToken;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.Embers;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob; import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard; import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard;
import com.shatteredpixel.shatteredpixeldungeon.items.remains.BowFragment; import com.shatteredpixel.shatteredpixeldungeon.items.remains.BowFragment;
@@ -104,6 +110,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.spells.UnstableSpell;
import com.shatteredpixel.shatteredpixeldungeon.items.spells.WildEnergy; import com.shatteredpixel.shatteredpixeldungeon.items.spells.WildEnergy;
import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrinketCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrinketCatalyst;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.SpiritBow;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.TippedDart; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.darts.TippedDart;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@@ -119,6 +126,8 @@ public enum Catalog {
//EQUIPMENT //EQUIPMENT
MELEE_WEAPONS, MELEE_WEAPONS,
ARMOR, ARMOR,
ENCHANTMENTS,
GLYPHS,
THROWN_WEAPONS, THROWN_WEAPONS,
WANDS, WANDS,
RINGS, RINGS,
@@ -140,16 +149,16 @@ public enum Catalog {
SPELLS, SPELLS,
MISC_CONSUMABLES; MISC_CONSUMABLES;
private LinkedHashMap<Class<? extends Item>, Boolean> seen = new LinkedHashMap<>(); private LinkedHashMap<Class<?>, Boolean> seen = new LinkedHashMap<>();
public Collection<Class<? extends Item>> items(){ public Collection<Class<?>> items(){
return seen.keySet(); return seen.keySet();
} }
//should only be used when initializing //should only be used when initializing
private void addItems( Class<?>... items){ private void addItems( Class<?>... items){
for (Class<?> item : items){ for (Class<?> item : items){
seen.put((Class<? extends Item>) item, false); seen.put(item, false);
} }
} }
@@ -186,6 +195,16 @@ public enum Catalog {
THROWN_WEAPONS.addItems(Generator.Category.MIS_T4.classes); THROWN_WEAPONS.addItems(Generator.Category.MIS_T4.classes);
THROWN_WEAPONS.addItems(Generator.Category.MIS_T5.classes); THROWN_WEAPONS.addItems(Generator.Category.MIS_T5.classes);
ENCHANTMENTS.addItems(Weapon.Enchantment.common);
ENCHANTMENTS.addItems(Weapon.Enchantment.uncommon);
ENCHANTMENTS.addItems(Weapon.Enchantment.rare);
ENCHANTMENTS.addItems(Weapon.Enchantment.curses);
GLYPHS.addItems(Armor.Glyph.common);
GLYPHS.addItems(Armor.Glyph.uncommon);
GLYPHS.addItems(Armor.Glyph.rare);
GLYPHS.addItems(Armor.Glyph.curses);
WANDS.addItems(Generator.Category.WAND.classes); WANDS.addItems(Generator.Category.WAND.classes);
RINGS.addItems(Generator.Category.RING.classes); RINGS.addItems(Generator.Category.RING.classes);
@@ -194,7 +213,7 @@ public enum Catalog {
TRINKETS.addItems(Generator.Category.TRINKET.classes); TRINKETS.addItems(Generator.Category.TRINKET.classes);
MISC_EQUIPMENT.addItems( SpiritBow.class, Waterskin.class, VelvetPouch.class, MISC_EQUIPMENT.addItems(BrokenSeal.class, SpiritBow.class, Waterskin.class, VelvetPouch.class,
PotionBandolier.class, ScrollHolder.class, MagicalHolster.class, Amulet.class); PotionBandolier.class, ScrollHolder.class, MagicalHolster.class, Amulet.class);
@@ -232,6 +251,7 @@ public enum Catalog {
MISC_CONSUMABLES.addItems( Gold.class, EnergyCrystal.class, Dewdrop.class, MISC_CONSUMABLES.addItems( Gold.class, EnergyCrystal.class, Dewdrop.class,
IronKey.class, GoldenKey.class, CrystalKey.class, SkeletonKey.class, IronKey.class, GoldenKey.class, CrystalKey.class, SkeletonKey.class,
TrinketCatalyst.class, Stylus.class, Torch.class, Honeypot.class, Ankh.class, TrinketCatalyst.class, Stylus.class, Torch.class, Honeypot.class, Ankh.class,
CorpseDust.class, Embers.class, CeremonialCandle.class, DarkGold.class, DwarfToken.class,
GooBlob.class, TengusMask.class, MetalShard.class, KingsCrown.class, GooBlob.class, TengusMask.class, MetalShard.class, KingsCrown.class,
LiquidMetal.class, ArcaneResin.class, LiquidMetal.class, ArcaneResin.class,
SealShard.class, BrokenStaff.class, CloakScrap.class, BowFragment.class, BrokenHilt.class); SealShard.class, BrokenStaff.class, CloakScrap.class, BowFragment.class, BrokenHilt.class);
@@ -253,6 +273,8 @@ public enum Catalog {
static { static {
equipmentCatalogs.add(MELEE_WEAPONS); equipmentCatalogs.add(MELEE_WEAPONS);
equipmentCatalogs.add(ARMOR); equipmentCatalogs.add(ARMOR);
equipmentCatalogs.add(ENCHANTMENTS);
equipmentCatalogs.add(GLYPHS);
equipmentCatalogs.add(THROWN_WEAPONS); equipmentCatalogs.add(THROWN_WEAPONS);
equipmentCatalogs.add(WANDS); equipmentCatalogs.add(WANDS);
equipmentCatalogs.add(RINGS); equipmentCatalogs.add(RINGS);
@@ -277,7 +299,7 @@ public enum Catalog {
consumableCatalogs.add(MISC_CONSUMABLES); consumableCatalogs.add(MISC_CONSUMABLES);
} }
public static boolean isSeen(Class<? extends Item> itemClass){ public static boolean isSeen(Class<?> itemClass){
for (Catalog cat : values()) { for (Catalog cat : values()) {
if (cat.seen.containsKey(itemClass)) { if (cat.seen.containsKey(itemClass)) {
return cat.seen.get(itemClass); return cat.seen.get(itemClass);
@@ -286,10 +308,10 @@ public enum Catalog {
return false; return false;
} }
public static void setSeen(Class<? extends Item> itemClass){ public static void setSeen(Class<?> cls){
for (Catalog cat : values()) { for (Catalog cat : values()) {
if (cat.seen.containsKey(itemClass) && !cat.seen.get(itemClass)) { if (cat.seen.containsKey(cls) && !cat.seen.get(cls)) {
cat.seen.put(itemClass, true); cat.seen.put(cls, true);
Journal.saveNeeded = true; Journal.saveNeeded = true;
} }
} }
@@ -305,15 +327,15 @@ public enum Catalog {
ArrayList<Class> seen = new ArrayList<>(); ArrayList<Class> seen = new ArrayList<>();
//if we have identified all items of a set, we use the badge to keep track instead. //if we have identified all items of a set, we use the badge to keep track instead.
if (!Badges.isUnlocked(Badges.Badge.ALL_ITEMS_IDENTIFIED)) { //if (!Badges.isUnlocked(Badges.Badge.ALL_ITEMS_IDENTIFIED)) {
for (Catalog cat : values()) { for (Catalog cat : values()) {
if (!Badges.isUnlocked(catalogBadges.get(cat))) { //if (!Badges.isUnlocked(catalogBadges.get(cat))) {
for (Class<? extends Item> item : cat.items()) { for (Class<?> item : cat.items()) {
if (cat.seen.get(item)) seen.add(item); if (cat.seen.get(item)) seen.add(item);
} }
} //}
} }
} //}
bundle.put( CATALOG_ITEMS, seen.toArray(new Class[0]) ); bundle.put( CATALOG_ITEMS, seen.toArray(new Class[0]) );
@@ -335,13 +357,13 @@ public enum Catalog {
}*/ }*/
//catalog-specific badge logic //catalog-specific badge logic
/*for (Catalog cat : values()){ for (Catalog cat : values()){
if (Badges.isUnlocked(catalogBadges.get(cat))){ if (Badges.isUnlocked(catalogBadges.get(cat))){
for (Class<? extends Item> item : cat.items()){ for (Class<?> item : cat.items()){
cat.seen.put(item, true); cat.seen.put(item, true);
} }
} }
}*/ }
//general save/load //general save/load
if (bundle.contains(CATALOG_ITEMS)) { if (bundle.contains(CATALOG_ITEMS)) {
@@ -351,7 +373,7 @@ public enum Catalog {
} }
for (Catalog cat : values()) { for (Catalog cat : values()) {
for (Class<? extends Item> item : cat.items()) { for (Class<?> item : cat.items()) {
if (seenClasses.contains(item)) { if (seenClasses.contains(item)) {
cat.seen.put(item, true); cat.seen.put(item, true);
} }
@@ -38,6 +38,7 @@ import com.watabou.glwrap.Matrix;
import com.watabou.glwrap.Vertexbuffer; import com.watabou.glwrap.Vertexbuffer;
import com.watabou.noosa.Camera; import com.watabou.noosa.Camera;
import com.watabou.noosa.Game; import com.watabou.noosa.Game;
import com.watabou.noosa.Image;
import com.watabou.noosa.MovieClip; import com.watabou.noosa.MovieClip;
import com.watabou.noosa.NoosaScript; import com.watabou.noosa.NoosaScript;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
@@ -125,6 +126,16 @@ public class ItemSprite extends MovieClip {
} }
} }
@Override
public void copy(Image other) {
super.copy(other);
if (other instanceof ItemSprite && ((ItemSprite) other).glowing != null){
glow(((ItemSprite) other).glowing);
}
}
public void visible(boolean value){ public void visible(boolean value){
this.visible = value; this.visible = value;
if (emitter != null && !visible){ if (emitter != null && !visible){
@@ -22,6 +22,7 @@
package com.shatteredpixel.shatteredpixeldungeon.ui; package com.shatteredpixel.shatteredpixeldungeon.ui;
import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.PixelScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSprite;
import com.watabou.noosa.ColorBlock; import com.watabou.noosa.ColorBlock;
import com.watabou.noosa.Image; import com.watabou.noosa.Image;
import com.watabou.noosa.ui.Component; import com.watabou.noosa.ui.Component;
@@ -112,7 +113,13 @@ public class ScrollingGridPane extends ScrollPane {
public GridItem( Image icon ) { public GridItem( Image icon ) {
super(); super();
if (icon instanceof ItemSprite){
this.icon = new ItemSprite();
} else {
this.icon = new Image();
}
this.icon.copy(icon); this.icon.copy(icon);
add(this.icon);
} }
public void addSecondIcon( Image icon ){ public void addSecondIcon( Image icon ){
@@ -133,9 +140,6 @@ public class ScrollingGridPane extends ScrollPane {
protected void createChildren() { protected void createChildren() {
bg = new ColorBlock( 1, 1, 0x9953564D); bg = new ColorBlock( 1, 1, 0x9953564D);
add(bg); add(bg);
icon = new Image();
add( icon );
} }
@Override @Override
@@ -25,10 +25,12 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon; import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor; import com.shatteredpixel.shatteredpixeldungeon.items.armor.ClassArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion;
import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring; import com.shatteredpixel.shatteredpixeldungeon.items.rings.Ring;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog; import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog;
import com.shatteredpixel.shatteredpixeldungeon.journal.Document; import com.shatteredpixel.shatteredpixeldungeon.journal.Document;
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes; import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
@@ -556,52 +558,101 @@ public class WndJournal extends WndTabbed {
} }
private static void addGridItems( ScrollingGridPane grid, Collection<Class<? extends Item>> itemClasses) { private static void addGridItems( ScrollingGridPane grid, Collection<Class<?>> classes) {
for (Class<? extends Item> itemClass : itemClasses) { for (Class<?> itemClass : classes) {
Item item = Reflection.newInstance(itemClass);
boolean itemSeen = Catalog.isSeen(itemClass);
if (itemSeen) { boolean seen = Catalog.isSeen(itemClass);;
if (item instanceof Ring) { Image sprite = null;
((Ring) item).anonymize(); Image secondIcon = null;
} else if (item instanceof Potion) { String title = "";
((Potion) item).anonymize(); String desc = "";
} else if (item instanceof Scroll) {
((Scroll) item).anonymize(); if (Item.class.isAssignableFrom(itemClass)) {
Item item = (Item) Reflection.newInstance(itemClass);
if (seen) {
if (item instanceof Ring) {
((Ring) item).anonymize();
} else if (item instanceof Potion) {
((Potion) item).anonymize();
} else if (item instanceof Scroll) {
((Scroll) item).anonymize();
}
} }
sprite = new ItemSprite(item.image, seen ? item.glowing() : null);
if (!seen) {
sprite.lightness(0);
title = "???";
desc = Messages.get(CatalogTab.class, "not_seen_item");
} else {
title = Messages.titleCase(item.trueName());
desc = item instanceof ClassArmor ? item.desc() : item.info();
if (item.icon != -1) {
secondIcon = new Image(Assets.Sprites.ITEM_ICONS);
secondIcon.frame(ItemSpriteSheet.Icons.film.get(item.icon));
}
}
} else if (Weapon.Enchantment.class.isAssignableFrom(itemClass)){
Weapon.Enchantment ench = (Weapon.Enchantment) Reflection.newInstance(itemClass);
if (seen){
sprite = new ItemSprite(ItemSpriteSheet.WORN_SHORTSWORD, ench.glowing());
title = Messages.titleCase(ench.name());
desc = ench.desc();
} else {
sprite = new ItemSprite(ItemSpriteSheet.WORN_SHORTSWORD);
sprite.lightness(0f);
title = "???";
desc = Messages.get(CatalogTab.class, "not_seen_enchantment");
}
} else if (Armor.Glyph.class.isAssignableFrom(itemClass)){
Armor.Glyph glyph = (Armor.Glyph) Reflection.newInstance(itemClass);
if (seen){
sprite = new ItemSprite(ItemSpriteSheet.ARMOR_CLOTH, glyph.glowing());
title = Messages.titleCase(glyph.name());
desc = glyph.desc();
} else {
sprite = new ItemSprite(ItemSpriteSheet.ARMOR_CLOTH);
sprite.lightness(0f);
title = "???";
desc = Messages.get(CatalogTab.class, "not_seen_glyph");
}
} }
Image sprite = new ItemSprite(item); String finalTitle = title;
if (!itemSeen) sprite.lightness(0); String finalDesc = desc;
ScrollingGridPane.GridItem gridItem = new ScrollingGridPane.GridItem( ScrollingGridPane.GridItem gridItem = new ScrollingGridPane.GridItem(sprite) {
sprite) {
@Override @Override
public boolean onClick(float x, float y) { public boolean onClick(float x, float y) {
if (inside(x, y)) { if (inside(x, y)) {
Image sprite = new Image(icon); //TODO need to dupe!
if (itemSeen) { Image sprite;
GameScene.show(new WndTitledMessage(sprite, if (icon instanceof ItemSprite){
Messages.titleCase(item.trueName()), sprite = new ItemSprite();
item instanceof ClassArmor ? item.desc() : item.info())); sprite.copy(icon);
} else { } else {
sprite.lightness(0); sprite = new Image(icon);
GameScene.show(new WndTitledMessage(sprite,
"???",
Messages.get(CatalogTab.class, "not_seen")));
} }
GameScene.show(new WndTitledMessage(sprite, finalTitle, finalDesc));
return true; return true;
} else { } else {
return false; return false;
} }
} }
}; };
if (itemSeen) { if (secondIcon != null){
if (item.icon != -1) { gridItem.addSecondIcon(secondIcon);
Image icon = new Image(Assets.Sprites.ITEM_ICONS); }
icon.frame(ItemSpriteSheet.Icons.film.get(item.icon)); if (!seen) {
gridItem.addSecondIcon(icon);
}
} else {
gridItem.hardLightBG(2f, 1f, 2f); gridItem.hardLightBG(2f, 1f, 2f);
} }
grid.addItem(gridItem); grid.addItem(gridItem);