v2.5.0: improved badge logic, most new badges now work in seeded runs
This commit is contained in:
@@ -176,7 +176,7 @@ badges$badge.researcher_5.title=Grandmaster Researcher
|
|||||||
badges$badge.researcher_5.desc=Fill in every catalog entry in your journal
|
badges$badge.researcher_5.desc=Fill in every catalog entry in your journal
|
||||||
badges$badge.catalog_one_equipment.title=Well Equipped
|
badges$badge.catalog_one_equipment.title=Well Equipped
|
||||||
badges$badge.catalog_one_equipment.desc=Fill in one catalog entry for every type of equipment item in your journal
|
badges$badge.catalog_one_equipment.desc=Fill in one catalog entry for every type of equipment item in your journal
|
||||||
badges$badge.catalog_potions_scrolls.title=Every Glyph and Color
|
badges$badge.catalog_potions_scrolls.title=Fully Stocked
|
||||||
badges$badge.catalog_potions_scrolls.desc=Identify every regular potion and scroll in one run
|
badges$badge.catalog_potions_scrolls.desc=Identify every regular potion and scroll in one run
|
||||||
badges$badge.all_rare_enemies.title=Big Game Hunter
|
badges$badge.all_rare_enemies.title=Big Game Hunter
|
||||||
badges$badge.all_rare_enemies.desc=Fill in all catalog entries for rare enemies in your journal
|
badges$badge.all_rare_enemies.desc=Fill in all catalog entries for rare enemies in your journal
|
||||||
|
|||||||
@@ -53,7 +53,14 @@ import java.util.LinkedHashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class Badges {
|
public class Badges {
|
||||||
|
|
||||||
|
public enum BadgeType {
|
||||||
|
HIDDEN, //internal badges used for data tracking
|
||||||
|
LOCAL, //unlocked on a per-run basis and added to overall player profile
|
||||||
|
GLOBAL, //unlocked for the save profile only, usually over multiple runs
|
||||||
|
JOURNAL //profile-based and also tied to the journal, which means they even unlock in seeded runs
|
||||||
|
}
|
||||||
|
|
||||||
public enum Badge {
|
public enum Badge {
|
||||||
MASTERY_WARRIOR,
|
MASTERY_WARRIOR,
|
||||||
MASTERY_MAGE,
|
MASTERY_MAGE,
|
||||||
@@ -78,14 +85,14 @@ public class Badges {
|
|||||||
FOOD_EATEN_1 ( 13 ),
|
FOOD_EATEN_1 ( 13 ),
|
||||||
ITEMS_CRAFTED_1 ( 14 ),
|
ITEMS_CRAFTED_1 ( 14 ),
|
||||||
BOSS_SLAIN_1 ( 15 ),
|
BOSS_SLAIN_1 ( 15 ),
|
||||||
CATALOG_ONE_EQUIPMENT ( 16, true ),
|
CATALOG_ONE_EQUIPMENT ( 16, BadgeType.JOURNAL ),
|
||||||
DEATH_FROM_FIRE ( 17 ),
|
DEATH_FROM_FIRE ( 17 ),
|
||||||
DEATH_FROM_POISON ( 18 ),
|
DEATH_FROM_POISON ( 18 ),
|
||||||
DEATH_FROM_GAS ( 19 ),
|
DEATH_FROM_GAS ( 19 ),
|
||||||
DEATH_FROM_HUNGER ( 20 ),
|
DEATH_FROM_HUNGER ( 20 ),
|
||||||
DEATH_FROM_FALLING ( 21 ),
|
DEATH_FROM_FALLING ( 21 ),
|
||||||
RESEARCHER_1 ( 22, true ),
|
RESEARCHER_1 ( 22, BadgeType.JOURNAL ),
|
||||||
GAMES_PLAYED_1 ( 23, true ),
|
GAMES_PLAYED_1 ( 23, BadgeType.GLOBAL ),
|
||||||
HIGH_SCORE_1 ( 24 ),
|
HIGH_SCORE_1 ( 24 ),
|
||||||
|
|
||||||
//silver
|
//silver
|
||||||
@@ -118,9 +125,9 @@ public class Badges {
|
|||||||
BOSS_SLAIN_1_ROGUE,
|
BOSS_SLAIN_1_ROGUE,
|
||||||
BOSS_SLAIN_1_HUNTRESS,
|
BOSS_SLAIN_1_HUNTRESS,
|
||||||
BOSS_SLAIN_1_DUELIST,
|
BOSS_SLAIN_1_DUELIST,
|
||||||
BOSS_SLAIN_1_ALL_CLASSES ( 54, true ),
|
BOSS_SLAIN_1_ALL_CLASSES ( 54, BadgeType.GLOBAL ),
|
||||||
RESEARCHER_2 ( 55, true ),
|
RESEARCHER_2 ( 55, BadgeType.JOURNAL ),
|
||||||
GAMES_PLAYED_2 ( 56, true ),
|
GAMES_PLAYED_2 ( 56, BadgeType.GLOBAL ),
|
||||||
HIGH_SCORE_2 ( 57 ),
|
HIGH_SCORE_2 ( 57 ),
|
||||||
|
|
||||||
//gold
|
//gold
|
||||||
@@ -145,13 +152,13 @@ public class Badges {
|
|||||||
BOSS_SLAIN_4 ( 78 ),
|
BOSS_SLAIN_4 ( 78 ),
|
||||||
ALL_RINGS_IDENTIFIED , //still exists internally for pre-2.5 saves
|
ALL_RINGS_IDENTIFIED , //still exists internally for pre-2.5 saves
|
||||||
ALL_ARTIFACTS_IDENTIFIED , //still exists internally for pre-2.5 saves
|
ALL_ARTIFACTS_IDENTIFIED , //still exists internally for pre-2.5 saves
|
||||||
ALL_RARE_ENEMIES ( 79, true ),
|
ALL_RARE_ENEMIES ( 79, BadgeType.JOURNAL ),
|
||||||
DEATH_FROM_GRIM_TRAP ( 80 ), //also disintegration traps
|
DEATH_FROM_GRIM_TRAP ( 80 ), //also disintegration traps
|
||||||
VICTORY ( 81 ),
|
VICTORY ( 81 ),
|
||||||
BOSS_CHALLENGE_1 ( 82 ),
|
BOSS_CHALLENGE_1 ( 82 ),
|
||||||
BOSS_CHALLENGE_2 ( 83 ),
|
BOSS_CHALLENGE_2 ( 83 ),
|
||||||
RESEARCHER_3 ( 84, true ),
|
RESEARCHER_3 ( 84, BadgeType.JOURNAL ),
|
||||||
GAMES_PLAYED_3 ( 85, true ),
|
GAMES_PLAYED_3 ( 85, BadgeType.GLOBAL ),
|
||||||
HIGH_SCORE_3 ( 86 ),
|
HIGH_SCORE_3 ( 86 ),
|
||||||
|
|
||||||
//platinum
|
//platinum
|
||||||
@@ -159,7 +166,7 @@ public class Badges {
|
|||||||
LEVEL_REACHED_5 ( 97 ),
|
LEVEL_REACHED_5 ( 97 ),
|
||||||
HAPPY_END ( 98 ),
|
HAPPY_END ( 98 ),
|
||||||
HAPPY_END_REMAINS ( 99 ),
|
HAPPY_END_REMAINS ( 99 ),
|
||||||
RODNEY ( 100, true ),
|
RODNEY ( 100, BadgeType.JOURNAL ),
|
||||||
ALL_WEAPONS_IDENTIFIED , //still exists internally for pre-2.5 saves
|
ALL_WEAPONS_IDENTIFIED , //still exists internally for pre-2.5 saves
|
||||||
ALL_ARMOR_IDENTIFIED , //still exists internally for pre-2.5 saves
|
ALL_ARMOR_IDENTIFIED , //still exists internally for pre-2.5 saves
|
||||||
ALL_WANDS_IDENTIFIED , //still exists internally for pre-2.5 saves
|
ALL_WANDS_IDENTIFIED , //still exists internally for pre-2.5 saves
|
||||||
@@ -169,8 +176,8 @@ public class Badges {
|
|||||||
VICTORY_ROGUE,
|
VICTORY_ROGUE,
|
||||||
VICTORY_HUNTRESS,
|
VICTORY_HUNTRESS,
|
||||||
VICTORY_DUELIST,
|
VICTORY_DUELIST,
|
||||||
VICTORY_ALL_CLASSES ( 101, true ),
|
VICTORY_ALL_CLASSES ( 101, BadgeType.GLOBAL ),
|
||||||
DEATH_FROM_ALL ( 102, true ),
|
DEATH_FROM_ALL ( 102, BadgeType.GLOBAL ),
|
||||||
BOSS_SLAIN_3_GLADIATOR,
|
BOSS_SLAIN_3_GLADIATOR,
|
||||||
BOSS_SLAIN_3_BERSERKER,
|
BOSS_SLAIN_3_BERSERKER,
|
||||||
BOSS_SLAIN_3_WARLOCK,
|
BOSS_SLAIN_3_WARLOCK,
|
||||||
@@ -181,18 +188,18 @@ public class Badges {
|
|||||||
BOSS_SLAIN_3_WARDEN,
|
BOSS_SLAIN_3_WARDEN,
|
||||||
BOSS_SLAIN_3_CHAMPION,
|
BOSS_SLAIN_3_CHAMPION,
|
||||||
BOSS_SLAIN_3_MONK,
|
BOSS_SLAIN_3_MONK,
|
||||||
BOSS_SLAIN_3_ALL_SUBCLASSES ( 103, true ),
|
BOSS_SLAIN_3_ALL_SUBCLASSES ( 103, BadgeType.GLOBAL ),
|
||||||
BOSS_CHALLENGE_3 ( 104 ),
|
BOSS_CHALLENGE_3 ( 104 ),
|
||||||
BOSS_CHALLENGE_4 ( 105 ),
|
BOSS_CHALLENGE_4 ( 105 ),
|
||||||
RESEARCHER_4 ( 106, true ),
|
RESEARCHER_4 ( 106, BadgeType.JOURNAL ),
|
||||||
GAMES_PLAYED_4 ( 107, true ),
|
GAMES_PLAYED_4 ( 107, BadgeType.GLOBAL ),
|
||||||
HIGH_SCORE_4 ( 108 ),
|
HIGH_SCORE_4 ( 108 ),
|
||||||
CHAMPION_1 ( 109 ),
|
CHAMPION_1 ( 109 ),
|
||||||
|
|
||||||
//diamond
|
//diamond
|
||||||
BOSS_CHALLENGE_5 ( 120 ),
|
BOSS_CHALLENGE_5 ( 120 ),
|
||||||
RESEARCHER_5 ( 121, true ),
|
RESEARCHER_5 ( 121, BadgeType.JOURNAL ),
|
||||||
GAMES_PLAYED_5 ( 122, true ),
|
GAMES_PLAYED_5 ( 122, BadgeType.GLOBAL ),
|
||||||
HIGH_SCORE_5 ( 123 ),
|
HIGH_SCORE_5 ( 123 ),
|
||||||
CHAMPION_2 ( 124 ),
|
CHAMPION_2 ( 124 ),
|
||||||
CHAMPION_3 ( 125 );
|
CHAMPION_3 ( 125 );
|
||||||
@@ -200,14 +207,19 @@ public class Badges {
|
|||||||
public boolean meta;
|
public boolean meta;
|
||||||
|
|
||||||
public int image;
|
public int image;
|
||||||
|
public BadgeType type;
|
||||||
Badge( int image ) {
|
|
||||||
this( image, false );
|
Badge(){
|
||||||
|
this(-1, BadgeType.HIDDEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
Badge( int image, boolean meta ) {
|
Badge( int image ) {
|
||||||
|
this( image, BadgeType.LOCAL );
|
||||||
|
}
|
||||||
|
|
||||||
|
Badge( int image, BadgeType type ) {
|
||||||
this.image = image;
|
this.image = image;
|
||||||
this.meta = meta;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String title(){
|
public String title(){
|
||||||
@@ -217,10 +229,6 @@ public class Badges {
|
|||||||
public String desc(){
|
public String desc(){
|
||||||
return Messages.get(this, name()+".desc");
|
return Messages.get(this, name()+".desc");
|
||||||
}
|
}
|
||||||
|
|
||||||
Badge() {
|
|
||||||
this( -1 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HashSet<Badge> global;
|
private static HashSet<Badge> global;
|
||||||
@@ -1094,14 +1102,14 @@ public class Badges {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void displayBadge( Badge badge ) {
|
private static void displayBadge( Badge badge ) {
|
||||||
|
|
||||||
if (badge == null || !Dungeon.customSeedText.isEmpty()) {
|
if (badge == null || (badge.type != BadgeType.JOURNAL && !Dungeon.customSeedText.isEmpty())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isUnlocked( badge )) {
|
if (isUnlocked( badge )) {
|
||||||
|
|
||||||
if (!badge.meta) {
|
if (badge.type == BadgeType.LOCAL) {
|
||||||
GLog.h( Messages.get(Badges.class, "endorsed", badge.title()) );
|
GLog.h( Messages.get(Badges.class, "endorsed", badge.title()) );
|
||||||
GLog.newLine();
|
GLog.newLine();
|
||||||
}
|
}
|
||||||
@@ -1132,7 +1140,7 @@ public class Badges {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void unlock( Badge badge ){
|
public static void unlock( Badge badge ){
|
||||||
if (!isUnlocked(badge) && Dungeon.customSeedText.isEmpty()){
|
if (!isUnlocked(badge) && (badge.type == BadgeType.JOURNAL || Dungeon.customSeedText.isEmpty())){
|
||||||
global.add( badge );
|
global.add( badge );
|
||||||
saveNeeded = true;
|
saveNeeded = true;
|
||||||
}
|
}
|
||||||
@@ -1145,7 +1153,7 @@ public class Badges {
|
|||||||
Iterator<Badge> iterator = badges.iterator();
|
Iterator<Badge> iterator = badges.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
Badge badge = iterator.next();
|
Badge badge = iterator.next();
|
||||||
if ((!global && badge.meta) || badge.image == -1) {
|
if ((!global && badge.type != BadgeType.LOCAL) || badge.type == BadgeType.HIDDEN) {
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -385,7 +385,7 @@ public class PixelScene extends Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
WndJournal.last_index = 4;
|
WndJournal.last_index = 4;
|
||||||
WndJournal.BadgesTab.global = badge.meta;
|
WndJournal.BadgesTab.global = badge.type != Badges.BadgeType.LOCAL;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class BadgesGrid extends Component {
|
|||||||
|
|
||||||
for (Badges.Badge badge : Badges.filterReplacedBadges( global )) {
|
for (Badges.Badge badge : Badges.filterReplacedBadges( global )) {
|
||||||
|
|
||||||
if (badge.image == -1) {
|
if (badge.type == Badges.BadgeType.HIDDEN) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ public class BadgesGrid extends Component {
|
|||||||
|
|
||||||
ArrayList<Badges.Badge> lockedBadges = new ArrayList<>();
|
ArrayList<Badges.Badge> lockedBadges = new ArrayList<>();
|
||||||
for (Badges.Badge badge : Badges.Badge.values()) {
|
for (Badges.Badge badge : Badges.Badge.values()) {
|
||||||
if (badge.image != -1 && !Badges.isUnlocked(badge)) {
|
if (badge.type != Badges.BadgeType.HIDDEN && !Badges.isUnlocked(badge)) {
|
||||||
lockedBadges.add(badge);
|
lockedBadges.add(badge);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public class BadgesList extends ScrollPane {
|
|||||||
|
|
||||||
for (Badges.Badge badge : Badges.filterReplacedBadges( global )) {
|
for (Badges.Badge badge : Badges.filterReplacedBadges( global )) {
|
||||||
|
|
||||||
if (badge.image == -1) {
|
if (badge.type == Badges.BadgeType.HIDDEN) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user