From 15cd9f3306b55b25a150cb619a512558d61590f1 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Mon, 27 Nov 2023 13:38:39 -0500 Subject: [PATCH] v2.3.0: added two badges for hero remains items --- core/src/main/assets/interfaces/badges.png | Bin 5724 -> 5774 bytes core/src/main/assets/interfaces/surface.png | Bin 1499 -> 1599 bytes .../main/assets/messages/misc/misc.properties | 4 + .../shatteredpixeldungeon/Badges.java | 90 +++++++++++------- .../shatteredpixeldungeon/Bones.java | 3 + .../shatteredpixeldungeon/Dungeon.java | 2 + .../shatteredpixeldungeon/Statistics.java | 6 +- .../scenes/SurfaceScene.java | 9 ++ 8 files changed, 77 insertions(+), 37 deletions(-) diff --git a/core/src/main/assets/interfaces/badges.png b/core/src/main/assets/interfaces/badges.png index 61af3e18d979db4eafea22e5726d791233af45eb..977a8d1b4b667bf4557224e1c234d04af2911a45 100644 GIT binary patch delta 5141 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 JTzHTW^*`Jz4)6c~ delta 5090 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 UYwGcr5v$+6y$9{`ca!7)4>D)Rj{pDw diff --git a/core/src/main/assets/interfaces/surface.png b/core/src/main/assets/interfaces/surface.png index 98d73c695d3debbf8a85d64a833f1c0d63a89bba..652a2e83a42b4b4d145775821ad0781353f82441 100644 GIT binary patch delta 1507 zcmV<91swX@3%?AIBnV?rOjJbx005CJPJet^4rWRVT0jK)_tE+F(BQU8R3eF600001 zbW%=J06^y0W&i*Mib+I4RCod0m4$M{Fc3t2K3_P3;Q#+=wX+j-R4^3`&mb(km7-L= z5g^rQYEUf~5!I#<8Lz+W1jOo%H1$?xv_D~EdH!mfoitlBli}_!|NVZS)KTmg=YM~& zLki${Jf2iXEj|5dKF0vgt)u{UI|Oh#oz&d9jgA0jy7p)9obw(87hHOwiV}qrqJo!2 zhZ(^K%=QkX!h=*62|&B_M*wKe%-_*ES-1dk+<2Hk6m1e}BqAfnDQTPyMi$b2F8x87 z09&*2$0~U#?fN`gXso<$n=UG=1V+29P7jH8LZAEMKfzP)+_1vD;mqYE=u- z2ke0|fb9KVK`|SD?EYA_Vj}VoyFUf~ZD0@N1n63R3Rs|=&H8(+e+Q0RF!V0w@l>{db2UyQe+^;vXEVu~_pQ0L6<6SlbT3@1z~6)78O*0ffKU0c8N- zja;+Il@Nwu@KX-Jz;5n;()W{Tp65edMy)*A07XKw1L0iU4|qzWTi^ zJO*BEsw(8br$oFSy*9zeF@OE$yzn`tz&TabhMf@mfL2x25y)Ht+*jBi`xC%#vOV6* z47mE!>TZy5RAN;H=BiQxB4YzPa6t;d7xC)_l2m{n_}`6kBLb)@ivJ5n$iikAt!sCK zg((3j@K1q+ddHug^3VF}nNTwUQ33sDgk2frHx+Raq1C{K0B(YbtbZVf4v0vANi)Qa z6>?91u&%{StgQllC&BoKSwVL+GR(^0@i>R{HQ%Xyb;r#Va9$CFj0hx!S1)i}gk47H zxRMCBxd6RSdHlPfWo$PY;#v`sH;m75gzk%u%@B{*J38Xn1p5h~BkpgC(hb>`fTPk3E1k+eiR`U3ax+R0f$=k=D z<^oVv7C;dIZ4g~EJPN}MMFj04yTM4%4dcI(PYu(PApNlKc7N^z$8Hz~0%(3i*UT9G zbL;&tnI`cyKIES1bAE$fcgUPw0D3h zeE^LBged?IpThuP+7Y40k5Lg81ISh2>FLP;Ve*}$iGQ%#EWjJ4FAPgRxe;N-^E)~EbPM7ij?8|9!fYW7pfL9-YlK<>T zfZOH+z<=9#fE%0uFdl&P0XWZjm|CJ5G(s2;pi=@IjnL5utp{*4LPsNXG(t220LB9d zMgY|OM{BQlW{5@roB$wL0cdRiP-VEO5r6=pj2=_80I0D6QW;r4LA^7Ijl?*CLgmD2 zGzQ2)0tL)D&`JO-Ljuehz-}!dBnlKDf&>Ww5>P1uU`eD2~tFT5m|p00^RCQfqrQF&5)d`KH`WYJ^(!>vkc_@9)AD;002ov JPDHLkV1j&(p;G_= delta 1406 zcmV-^1%dj%4BHEkBnVniOjJex|NoIJPJjCM(fRez;I>NaNV=;40004WQchCMs+j``_v3F~9B(w;DNeCx_nMNJH;wicGJ&h^UsO z$n*N$PC%^aOIZw5p7tj!y63OfA4)keGkM&7<3AdWYW4gx>YV@B#zQG5lgU)|sejYc zpXO~0AYDatJRIf#rqijKr)yjfpslx0aCbC>ha;MTzi=0#&6icpMj-MwJQHw$WjgX7 zZT$(mMa%r1)(&_8`3KF12~?tGjT)(PM$VORuwY~XL^|}(945f3UH6B3ROet=`y9DTZ_!R7dXwCg`_5Q?kwGvyeh5pwQa3uOS?EG15JDmUA9|8Jb z$4o@k{>U}M6}e#;2$%k^6aTx_`#)$eOl-c*3Ie6Z@toi;jsgoamSlPCTYvm#3~a)W zY1gw+p{H#60&tIC3>>EMJp;AF7g`nr`S5*m1Q7rKv4a2>y#sAt4CS6(0_uRWS~2G! zK)^AOxkLbe6Og|%A1}GhTm(l%011$NokkzcBLbLKWZ)|?emWi#+rT<3s(}0#jYOQU zUPW*#{7qWE6S6CU`(BsP27muxA22?udJE(o0eM})_RyYyJOZ#iewG+eho@B{knpI) zrWL-ADiZKpHlKhpAq8?>#Aq*&kSYO$;)vcX2|!dK_(ec+R5Du;9McLX1|0+x_@{uN z5jR;->}~5pL%K zx%R2yI|p*woeU*zF#u*@KSvQtyoQ^ht<)71aTdYx1Z0Z1zbHyI^P zH9+twiK8N#3nGkuwtqbGc%}fOO29jQSzZw>8=(gLLj-F6XIv8=wzTqsEJYxE=#gTz z8!Q_L0RBD(0ZIr4gHa;{{G@>y(GSdgY5--nmH>dQ5vg#zA<|Mn&_9)-x6p7p7hqIr z0Ym^?Wf1!OT4CW&49Ka8*d2^qZwczDp}aKHPVlOSjQOCqr0SBE=$a z?x1t=%hDhqQfToU0=8{j1jHQyas3`95l}J$Vgdm(B{354x+UO6lJr=+6O2wk0K1?O zC>``KemGhV0^(l?2>F*^1{(p95;~{|Dnjph0Pn6QI1fOZijea$s7*zP zc>uXZ=oX=q0o)>Vi_k4X76E{H0O9oa0jYAp=`Tb${n!kYG!JpjHw zkgUo1#cO;O>7&dMSY`)nlLvH&z`~t@T?BBA2t(WadkZ8n7>FnekZ1%HMPmXQB&tCZ zjIsluk^n)~2&$+_6i}j=O+q6g5)DBK*3G{O{9F0_r;?_rudc5C0#%QwjT^tblmGw# M07*qoM6N<$g2}si{{R30 diff --git a/core/src/main/assets/messages/misc/misc.properties b/core/src/main/assets/messages/misc/misc.properties index ab718a91a..18f23a337 100644 --- a/core/src/main/assets/messages/misc/misc.properties +++ b/core/src/main/assets/messages/misc/misc.properties @@ -80,6 +80,8 @@ badges$badge.boss_slain_1_all_classes.title=Jack of Many Trades badges$badge.boss_slain_1_all_classes.desc=Defeat the first boss with every hero class badges$badge.boss_slain_3_all_subclasses.title=Jack of All Trades badges$badge.boss_slain_3_all_subclasses.desc=Defeat the third boss with every hero subclass +badges$badge.boss_slain_remains.title=Taste Vengeance! +badges$badge.boss_slain_remains.desc=Defeat a boss while holding the signature item of a hero who died to that boss badges$badge.strength_attained_1.title=Novice Bodybuilder badges$badge.strength_attained_1.desc=Reach 12 base points of strength badges$badge.strength_attained_2.title=Adept Bodybuilder @@ -164,6 +166,8 @@ badges$badge.high_score_5.title=Grandmaster Score Chaser badges$badge.high_score_5.desc=End a run with a score of 1,000,000 or higher badges$badge.happy_end.title=Happy Ending badges$badge.happy_end.desc=Take the Amulet of Yendor to the surface +badges$badge.happy_end_remains.title=You Made It Too +badges$badge.happy_end_remains.desc=Bring a fallen hero's signature item to the surface badges$badge.champion_1.title=Bronze Champion badges$badge.champion_1.desc=Beat the game with 1 or more challenges enabled badges$badge.champion_2.title=Silver Champion diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java index 60ea34ad6..f515789ef 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Badges.java @@ -29,6 +29,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.bags.MagicalHolster; import com.shatteredpixel.shatteredpixeldungeon.items.bags.PotionBandolier; import com.shatteredpixel.shatteredpixeldungeon.items.bags.ScrollHolder; import com.shatteredpixel.shatteredpixeldungeon.items.bags.VelvetPouch; +import com.shatteredpixel.shatteredpixeldungeon.items.remains.RemainsItem; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon; import com.shatteredpixel.shatteredpixeldungeon.journal.Catalog; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; @@ -83,35 +84,36 @@ public class Badges { //silver NO_MONSTERS_SLAIN ( 32 ), - MONSTERS_SLAIN_3 ( 33 ), - MONSTERS_SLAIN_4 ( 34 ), - GOLD_COLLECTED_3 ( 35 ), - GOLD_COLLECTED_4 ( 36 ), - ITEM_LEVEL_2 ( 37 ), - ITEM_LEVEL_3 ( 38 ), - LEVEL_REACHED_2 ( 39 ), - LEVEL_REACHED_3 ( 40 ), - STRENGTH_ATTAINED_2 ( 41 ), - STRENGTH_ATTAINED_3 ( 42 ), - FOOD_EATEN_2 ( 43 ), - FOOD_EATEN_3 ( 44 ), - ITEMS_CRAFTED_2 ( 45 ), - ITEMS_CRAFTED_3 ( 46 ), - BOSS_SLAIN_2 ( 47 ), - BOSS_SLAIN_3 ( 48 ), - ALL_POTIONS_IDENTIFIED ( 49 ), - ALL_SCROLLS_IDENTIFIED ( 50 ), - DEATH_FROM_ENEMY_MAGIC ( 51 ), - DEATH_FROM_FRIENDLY_MAGIC ( 52 ), - DEATH_FROM_SACRIFICE ( 53 ), + BOSS_SLAIN_REMAINS ( 33 ), + MONSTERS_SLAIN_3 ( 34 ), + MONSTERS_SLAIN_4 ( 35 ), + GOLD_COLLECTED_3 ( 36 ), + GOLD_COLLECTED_4 ( 37 ), + ITEM_LEVEL_2 ( 38 ), + ITEM_LEVEL_3 ( 39 ), + LEVEL_REACHED_2 ( 40 ), + LEVEL_REACHED_3 ( 41 ), + STRENGTH_ATTAINED_2 ( 42 ), + STRENGTH_ATTAINED_3 ( 43 ), + FOOD_EATEN_2 ( 44 ), + FOOD_EATEN_3 ( 45 ), + ITEMS_CRAFTED_2 ( 46 ), + ITEMS_CRAFTED_3 ( 47 ), + BOSS_SLAIN_2 ( 48 ), + BOSS_SLAIN_3 ( 49 ), + ALL_POTIONS_IDENTIFIED ( 50 ), + ALL_SCROLLS_IDENTIFIED ( 51 ), + DEATH_FROM_ENEMY_MAGIC ( 52 ), + DEATH_FROM_FRIENDLY_MAGIC ( 53 ), + DEATH_FROM_SACRIFICE ( 54 ), BOSS_SLAIN_1_WARRIOR, BOSS_SLAIN_1_MAGE, BOSS_SLAIN_1_ROGUE, BOSS_SLAIN_1_HUNTRESS, BOSS_SLAIN_1_DUELIST, - BOSS_SLAIN_1_ALL_CLASSES ( 54, true ), - GAMES_PLAYED_2 ( 55, true ), - HIGH_SCORE_2 ( 56 ), + BOSS_SLAIN_1_ALL_CLASSES ( 55, true ), + GAMES_PLAYED_2 ( 56, true ), + HIGH_SCORE_2 ( 57 ), //gold PIRANHAS ( 64 ), @@ -146,17 +148,18 @@ public class Badges { ITEM_LEVEL_5 ( 96 ), LEVEL_REACHED_5 ( 97 ), HAPPY_END ( 98 ), - ALL_WEAPONS_IDENTIFIED ( 99 ), - ALL_ARMOR_IDENTIFIED ( 100 ), - ALL_WANDS_IDENTIFIED ( 101 ), - ALL_ITEMS_IDENTIFIED ( 102, true ), + HAPPY_END_REMAINS ( 99 ), + ALL_WEAPONS_IDENTIFIED ( 100 ), + ALL_ARMOR_IDENTIFIED ( 101 ), + ALL_WANDS_IDENTIFIED ( 102 ), + ALL_ITEMS_IDENTIFIED ( 103, true ), VICTORY_WARRIOR, VICTORY_MAGE, VICTORY_ROGUE, VICTORY_HUNTRESS, VICTORY_DUELIST, - VICTORY_ALL_CLASSES ( 103, true ), - DEATH_FROM_ALL ( 104, true ), + VICTORY_ALL_CLASSES ( 104, true ), + DEATH_FROM_ALL ( 105, true ), BOSS_SLAIN_3_GLADIATOR, BOSS_SLAIN_3_BERSERKER, BOSS_SLAIN_3_WARLOCK, @@ -167,12 +170,12 @@ public class Badges { BOSS_SLAIN_3_WARDEN, BOSS_SLAIN_3_CHAMPION, BOSS_SLAIN_3_MONK, - BOSS_SLAIN_3_ALL_SUBCLASSES ( 105, true ), - BOSS_CHALLENGE_3 ( 106 ), - BOSS_CHALLENGE_4 ( 107 ), - GAMES_PLAYED_4 ( 108, true ), - HIGH_SCORE_4 ( 109 ), - CHAMPION_1 ( 110 ), + BOSS_SLAIN_3_ALL_SUBCLASSES ( 106, true ), + BOSS_CHALLENGE_3 ( 107 ), + BOSS_CHALLENGE_4 ( 108 ), + GAMES_PLAYED_4 ( 109, true ), + HIGH_SCORE_4 ( 110 ), + CHAMPION_1 ( 111 ), //diamond BOSS_CHALLENGE_5 ( 120 ), @@ -794,6 +797,14 @@ public class Badges { } } } + + if (Statistics.qualifiedForBossRemainsBadge && Dungeon.hero.belongings.getItem(RemainsItem.class) != null){ + badge = Badge.BOSS_SLAIN_REMAINS; + if (!isUnlocked( badge )) { + displayBadge( badge ); + } + } + } } @@ -994,10 +1005,17 @@ public class Badges { if (!local.contains( Badge.HAPPY_END )){ local.add( Badge.HAPPY_END ); } + + if(!local.contains( Badge.HAPPY_END_REMAINS ) && Dungeon.hero.belongings.getItem(RemainsItem.class) != null){ + local.add( Badge.HAPPY_END_REMAINS ); + } } public static void validateHappyEnd() { displayBadge( Badge.HAPPY_END ); + if (local.contains(Badge.HAPPY_END_REMAINS)) { + displayBadge(Badge.HAPPY_END_REMAINS); + } } public static void validateChampion( int challenges ) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Bones.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Bones.java index db563edc1..a8a681d83 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Bones.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Bones.java @@ -239,6 +239,9 @@ public class Bones { if (heroClass != null) { result.add(RemainsItem.get(heroClass)); + if (Dungeon.bossLevel()){ + Statistics.qualifiedForBossRemainsBadge = true; + } } if (item != null) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index c22af2446..7500043af 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -382,6 +382,8 @@ public class Dungeon { } } } + + Statistics.qualifiedForBossRemainsBadge = false; level.create(); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java index ae19b681c..9956ac438 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Statistics.java @@ -61,6 +61,7 @@ public class Statistics { public static boolean qualifiedForNoKilling = false; public static boolean completedWithNoKilling = false; + public static boolean qualifiedForBossRemainsBadge = false; public static boolean qualifiedForBossChallengeBadge = false; public static boolean amuletObtained = false; @@ -100,6 +101,7 @@ public class Statistics { duration = 0; qualifiedForNoKilling = false; + qualifiedForBossRemainsBadge = false; qualifiedForBossChallengeBadge = false; amuletObtained = false; @@ -139,6 +141,7 @@ public class Statistics { private static final String DURATION = "duration"; private static final String NO_KILLING_QUALIFIED = "qualifiedForNoKilling"; + private static final String BOSS_REMAINS_QUALIFIED = "qualifiedForBossRemainsBadge"; private static final String BOSS_CHALLENGE_QUALIFIED= "qualifiedForBossChallengeBadge"; private static final String AMULET = "amuletObtained"; @@ -181,6 +184,7 @@ public class Statistics { bundle.put( DURATION, duration ); bundle.put(NO_KILLING_QUALIFIED, qualifiedForNoKilling); + bundle.put(BOSS_REMAINS_QUALIFIED, qualifiedForBossRemainsBadge); bundle.put(BOSS_CHALLENGE_QUALIFIED, qualifiedForBossChallengeBadge); bundle.put( AMULET, amuletObtained ); @@ -227,7 +231,7 @@ public class Statistics { duration = bundle.getFloat( DURATION ); qualifiedForNoKilling = bundle.getBoolean( NO_KILLING_QUALIFIED ); - + qualifiedForBossRemainsBadge = bundle.getBoolean( BOSS_REMAINS_QUALIFIED ); qualifiedForBossChallengeBadge = bundle.getBoolean( BOSS_CHALLENGE_QUALIFIED ); amuletObtained = bundle.getBoolean( AMULET ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/SurfaceScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/SurfaceScene.java index 02f32a7a0..4a6fa388a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/SurfaceScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/SurfaceScene.java @@ -27,6 +27,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.abilities.Ratmogrify; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose; +import com.shatteredpixel.shatteredpixeldungeon.items.remains.RemainsItem; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLivingEarth; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfWarding; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; @@ -217,6 +218,14 @@ public class SurfaceScene extends PixelScene { align(allySprite); window.add(allySprite); } + + if (Dungeon.hero.belongings.getItem(RemainsItem.class) != null){ + Image grave = new Image(Assets.Interfaces.SURFACE, 88, 74, 16, 22); + + grave.x = a.x + a.width() + 10; + grave.y = a.y + a.height() - grave.height(); + window.add(grave); + } window.add( a ); window.add( pet );