From 5b58aec93fc50fa787df64f8069fdf823b9e57f4 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 1 Feb 2024 13:26:57 -0500 Subject: [PATCH] v2.4.0: added holiday pastys for pride, birthdays, and new years --- .../assets/messages/items/items.properties | 8 ++ core/src/main/assets/sprites/items.png | Bin 21986 -> 22458 bytes .../items/food/Food.java | 6 +- .../items/food/Pasty.java | 82 +++++++++++++++++- .../sprites/ItemSpriteSheet.java | 6 +- .../shatteredpixeldungeon/utils/Holiday.java | 33 ++----- 6 files changed, 102 insertions(+), 33 deletions(-) diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index cf63c05bf..f2a073f49 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -578,14 +578,22 @@ items.food.pasty.name=pasty items.food.pasty.fish_name=steamed fish items.food.pasty.amulet_name=amulet of yendor? items.food.pasty.egg_name=easter egg +items.food.pasty.rainbow_name=rainbow potion +items.food.pasty.shattered_name=green cake items.food.pasty.pie_name=pumpkin pie +items.food.pasty.vanilla_name=blue cake items.food.pasty.cane_name=candy cane +items.food.pasty.sparkling_name=sparkling potion items.food.pasty.desc=An authentic Cornish pasty with a traditional filling of beef and potato. Delicious! items.food.pasty.fish_desc=A whole steamed fish, magically preserved on a bed of greens. It's tradition to save some fish for later around this time of year, so you'll keep some leftovers instead of eating it all at once.\n\nHappy Lunar New Year! items.food.pasty.amulet_desc=You've finally found it, the magical amulet of - wait a minute, this is just a foil-wrapped chocolate made to look like the amulet! It won't grant you limitless power, but at least it'll fill you up and give you a little artifact charge.\n\nApril Fools! items.food.pasty.egg_desc=A great big chocolate egg, wrapped in colorful yellow foil. There's easily enough chocolate here to fill you up, and the sugar might give your artifacts a tiny bit of extra charge.\n\nHappy Easter! +items.food.pasty.rainbow_desc=This colorful potion is a kind of liquid food. In addition to satisfying your hunger, it has a little magic in it which will calm an adjacent non-boss enemy, making them temporarily hesitant to fight you.\n\nHappy Pride! +items.food.pasty.shattered_desc=This large slice of vanilla cake has colorful sprinkles and green frosting. The cake was made to celebrate years of experience, and will grant a small amount of that experience to you when eaten.\n\nShattered Pixel Dungeon was first released on August 5th 2014. Happy birthday Shattered Pixel Dungeon! items.food.pasty.pie_desc=A great big slice of pumpkin pie. Its sweet and spicy flavor will fill you up and give you a tiny bit of healing.\n\nHappy Halloween! +items.food.pasty.vanilla_desc=This large slice of vanilla cake has colorful sprinkles and blue frosting. The cake was made to celebrate years of experience, and will grant a small amount of that experience to you when eaten.\n\nThe original Pixel Dungeon was first released on December 4th 2012. Happy birthday Pixel Dungeon! items.food.pasty.cane_desc=A huge sugary sweet candy cane. It's big enough to fill you up, and the sugar might give your wands a tiny bit of extra charge too.\n\nHappy Holidays! +items.food.pasty.sparkling_desc=This sparkling potion is a kind of liquid food. It satisfies hunger and simulates sparkling wine, but isn't actually alcoholic. The warm feeling in your belly will grant a little bit of shielding.\n\nHappy New Year! items.food.pasty$fishleftover.name=fish leftovers items.food.pasty$fishleftover.eat_msg=That food tasted ok. items.food.pasty$fishleftover.desc=Some surplus fish from your previous meal. You can eat it any time you like to restore a little hunger. diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index a1d5cbe8ad8616d4112a377fa88de0568702834b..8fccff60f27ec5b32b1f8e7fc30d784dc1ab7bbd 100644 GIT binary patch literal 22458 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 ZtG^xybv1b@*^?I>wQ>04%^~kw{{zz4j4}WK literal 21986 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 GX8s4sJgpc2 diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java index 96928bf39..4755ec98b 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Food.java @@ -80,7 +80,7 @@ public class Food extends Item { hero.sprite.operate( hero.pos ); hero.busy(); SpellSprite.show( hero, SpellSprite.FOOD ); - Sample.INSTANCE.play( Assets.Sounds.EAT ); + eatSFX(); hero.spend( eatingTime() ); @@ -92,6 +92,10 @@ public class Food extends Item { } } + protected void eatSFX(){ + Sample.INSTANCE.play( Assets.Sounds.EAT ); + } + protected float eatingTime(){ if (Dungeon.hero.hasTalent(Talent.IRON_STOMACH) || Dungeon.hero.hasTalent(Talent.ENERGIZING_MEAL) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Pasty.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Pasty.java index 433d4e300..37103b896 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Pasty.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/food/Pasty.java @@ -23,14 +23,22 @@ package com.shatteredpixel.shatteredpixeldungeon.items.food; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.ArtifactRecharge; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Barrier; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Charm; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.effects.FloatingText; +import com.shatteredpixel.shatteredpixeldungeon.effects.particles.RainbowParticle; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.shatteredpixel.shatteredpixeldungeon.ui.TargetHealthIndicator; import com.shatteredpixel.shatteredpixeldungeon.utils.Holiday; import com.watabou.noosa.audio.Sample; @@ -60,15 +68,38 @@ public class Pasty extends Food { case EASTER: image = ItemSpriteSheet.EASTER_EGG; break; + case PRIDE: + image = ItemSpriteSheet.RAINBOW_POTION; + break; + case SHATTEREDPD_BIRTHDAY: + image = ItemSpriteSheet.SHATTERED_CAKE; + break; case HALLOWEEN: image = ItemSpriteSheet.PUMPKIN_PIE; break; + case PD_BIRTHDAY: + image = ItemSpriteSheet.VANILLA_CAKE; + break; case WINTER_HOLIDAYS: image = ItemSpriteSheet.CANDY_CANE; break; + case NEW_YEARS: + image = ItemSpriteSheet.SPARKLING_POTION; + break; } } - + + @Override + protected void eatSFX() { + switch(Holiday.getCurrentHoliday()){ + case PRIDE: + case NEW_YEARS: + Sample.INSTANCE.play( Assets.Sounds.DRINK ); + return; + } + super.eatSFX(); + } + @Override protected void satisfy(Hero hero) { if (Holiday.getCurrentHoliday() == Holiday.LUNAR_NEW_YEAR){ @@ -94,6 +125,33 @@ public class Pasty extends Food { ArtifactRecharge.chargeArtifacts(hero, 2f); ScrollOfRecharging.charge( hero ); break; + case PRIDE: + Char target = null; + + //charms an adjacent non-boss enemy, prioritizing the one the hero is focusing on + for (Char ch : Actor.chars()){ + if (!Char.hasProp(ch, Char.Property.BOSS) + && !Char.hasProp(ch, Char.Property.MINIBOSS) + && ch.alignment == Char.Alignment.ENEMY + && Dungeon.level.adjacent(hero.pos, ch.pos)){ + if (target == null || ch == TargetHealthIndicator.instance.target()){ + target = ch; + } + } + } + + if (target != null){ + Buff.affect(target, Charm.class, 5f).object = hero.id(); + } + hero.sprite.emitter().burst(RainbowParticle.BURST, 15); + break; + case SHATTEREDPD_BIRTHDAY: + case PD_BIRTHDAY: + //gives 10% of level in exp, min of 2 + int expToGive = Math.max(2, hero.maxExp()/10); + hero.sprite.showStatusWithIcon(CharSprite.POSITIVE, Integer.toString(expToGive), FloatingText.EXPERIENCE); + hero.earnExp(expToGive, PotionOfExperience.class); + break; case HALLOWEEN: //heals for 5% max hp, min of 3 int toHeal = Math.max(3, hero.HT/20); @@ -104,6 +162,12 @@ public class Pasty extends Food { hero.belongings.charge(0.5f); //2 turns worth ScrollOfRecharging.charge( hero ); break; + case NEW_YEARS: + //shields for 10% of max hp, min of 5 + int toShield = Math.max(5, hero.HT/10); + Buff.affect(hero, Barrier.class).setShield(toShield); + hero.sprite.showStatusWithIcon( CharSprite.POSITIVE, Integer.toString(toShield), FloatingText.SHIELDING ); + break; } } @@ -118,10 +182,18 @@ public class Pasty extends Food { return Messages.get(this, "amulet_name"); case EASTER: return Messages.get(this, "egg_name"); + case PRIDE: + return Messages.get(this, "rainbow_name"); + case SHATTEREDPD_BIRTHDAY: + return Messages.get(this, "shattered_name"); case HALLOWEEN: return Messages.get(this, "pie_name"); + case PD_BIRTHDAY: + return Messages.get(this, "vanilla_name"); case WINTER_HOLIDAYS: return Messages.get(this, "cane_name"); + case NEW_YEARS: + return Messages.get(this, "sparkling_name"); } } @@ -136,10 +208,18 @@ public class Pasty extends Food { return Messages.get(this, "amulet_desc"); case EASTER: return Messages.get(this, "egg_desc"); + case PRIDE: + return Messages.get(this, "rainbow_desc"); + case SHATTEREDPD_BIRTHDAY: + return Messages.get(this, "shattered_desc"); case HALLOWEEN: return Messages.get(this, "pie_desc"); + case PD_BIRTHDAY: + return Messages.get(this, "vanilla_desc"); case WINTER_HOLIDAYS: return Messages.get(this, "cane_desc"); + case NEW_YEARS: + return Messages.get(this, "sparkling_desc"); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java index bdf12c4b5..84c4e5c81 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -687,11 +687,11 @@ public class ItemSpriteSheet { assignItemRect(CHOC_AMULET, 16, 16); assignItemRect(EASTER_EGG, 12, 14); assignItemRect(RAINBOW_POTION, 12, 14); - assignItemRect(SHATTERED_CAKE, 15, 11); + assignItemRect(SHATTERED_CAKE, 14, 13); assignItemRect(PUMPKIN_PIE, 16, 12); - assignItemRect(VANILLA_CAKE, 15, 11); + assignItemRect(VANILLA_CAKE, 14, 13); assignItemRect(CANDY_CANE, 13, 16); - assignItemRect(SPARKLING_POTION,12, 14); + assignItemRect(SPARKLING_POTION, 7, 16); } private static final int QUEST = xy(1, 30); //16 slots diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/utils/Holiday.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/utils/Holiday.java index 1aebb6f8d..0ab2a7fbd 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/utils/Holiday.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/utils/Holiday.java @@ -28,7 +28,6 @@ public enum Holiday { NONE, - //TODO many of these don't actually do anything atm LUNAR_NEW_YEAR, //Varies, sometime in late Jan to Late Feb (7 days) APRIL_FOOLS, //April 1st, can override easter (1 day) EASTER, //Varies, sometime in Late Mar to Late Apr (6-7 days) @@ -62,32 +61,6 @@ public enum Holiday { //requires a gregorian calendar public static Holiday getHolidayForDate(GregorianCalendar cal){ - //legacy holiday logic from late 2016 to early 2024 - //only halloween and winter holidays, and they had longer dates determined by week of month - //TODO maybe remove this after early 2024 passes? - // Do we really care about historical accuracy for folks who turn their system date back? - if (cal.get(Calendar.YEAR) < 2024 - || (cal.get(Calendar.YEAR) == 2024 && cal.get(Calendar.DAY_OF_YEAR) <= 10)){ - switch(cal.get(Calendar.MONTH)){ - case Calendar.JANUARY: - if (cal.get(Calendar.WEEK_OF_MONTH) == 1) - return WINTER_HOLIDAYS; - break; - case Calendar.OCTOBER: - if (cal.get(Calendar.WEEK_OF_MONTH) >= 2) - return HALLOWEEN; - break; - case Calendar.NOVEMBER: - if (cal.get(Calendar.DAY_OF_MONTH) == 1) - return HALLOWEEN; - break; - case Calendar.DECEMBER: - if (cal.get(Calendar.WEEK_OF_MONTH) >= 3) - return WINTER_HOLIDAYS; - break; - } - } - //Lunar New Year if (isLunarNewYear(cal.get(Calendar.YEAR), cal.get(Calendar.DAY_OF_YEAR))){ @@ -151,8 +124,12 @@ public enum Holiday { public static boolean isLunarNewYear(int year, int dayOfYear){ int lunarNewYearDayOfYear; switch (year){ - //yes, I really did hardcode this all the way to 2100 + //yes, I really did hardcode this all the way from 2020 to 2100 default: lunarNewYearDayOfYear = 31+5; break; //defaults to February 5th + case 2020: lunarNewYearDayOfYear = 25; break; //January 25th + case 2021: lunarNewYearDayOfYear = 31+12; break; //February 12th + case 2022: lunarNewYearDayOfYear = 31+1; break; //February 1st + case 2023: lunarNewYearDayOfYear = 22; break; //January 22nd case 2024: lunarNewYearDayOfYear = 31+10; break; //February 10th case 2025: lunarNewYearDayOfYear = 29; break; //January 29th case 2026: lunarNewYearDayOfYear = 31+17; break; //February 17th