From 28e1c18694080d95d397e586f2c23f73d84dfc71 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Thu, 4 Apr 2024 17:13:06 -0400 Subject: [PATCH] v2.4.0: added two more trinkets --- .../main/java/com/watabou/utils/Random.java | 2 +- .../assets/messages/items/items.properties | 12 +- core/src/main/assets/sprites/items.png | Bin 22925 -> 23425 bytes .../shatteredpixeldungeon/actors/Char.java | 7 +- .../items/Generator.java | 8 +- .../items/trinkets/ThirteenLeafClover.java | 60 +++++++++ .../items/trinkets/TrapMechanism.java | 117 ++++++++++++++++++ .../shatteredpixeldungeon/levels/Level.java | 4 + .../sprites/ItemSpriteSheet.java | 4 + 9 files changed, 207 insertions(+), 7 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/ThirteenLeafClover.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/TrapMechanism.java diff --git a/SPD-classes/src/main/java/com/watabou/utils/Random.java b/SPD-classes/src/main/java/com/watabou/utils/Random.java index 47ae2c7b9..d1b6c5bff 100644 --- a/SPD-classes/src/main/java/com/watabou/utils/Random.java +++ b/SPD-classes/src/main/java/com/watabou/utils/Random.java @@ -121,7 +121,7 @@ public class Random { //returns an inverse triangularly distributed int in the range [min, max] //this makes results more likely as they get further from the middle of the range - public static int InvNormalIntRange( int min, int max){ + public static int InvNormalIntRange( int min, int max ){ float roll1 = Float(), roll2 = Float(); if (Math.abs(roll1-0.5f) >= Math.abs(roll2-0.5f)){ return min + (int)(roll1*(max - min + 1)); diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index 9f492ff8b..28bba3764 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1294,6 +1294,10 @@ items.stones.stoneofshock.desc=This runestone unleashes a blast of electrical en ###trinkets +items.trinkets.dimensionalsundial.name=dimensional sundial +items.trinkets.dimensionalsundial.warning=Your sundial isn't casting a shadow, you feel uneasy. +items.trinkets.dimensionalsundial.desc=This small handheld sundial is somehow able to cast a shadow in the depths of the dungeon, even if you aren't holding it upright. Even more strangely, the shadow's position seems to have no relation to the sun in this world. When no shadow is cast, the sundial seems to attract danger.\n\nAt its current level, this trinket will increase the spawning rate of enemies by _%d%%_ when it is nighttime in real life (9pm to 7am). + items.trinkets.exoticcrystals.name=exotic crystals items.trinkets.exoticcrystals.desc=These small pink crystals have the same shape as crystals of alchemical energy. While they can't be used for energy directly, they seem to be somehow influencing the potions and scrolls you find.\n\nAt its current level this trinket will replace %d%% of potion or scroll drops with their exotic equivalents. This does not affect potions of strength, scrolls of upgrade, or items that are generated to help solve hazard rooms. @@ -1309,9 +1313,11 @@ items.trinkets.petrifiedseed.desc=This seed has been fossilised, either by slow items.trinkets.ratskull.name=rat skull items.trinkets.ratskull.desc=This macabre trinket isn't much larger than the skull of a normal rat, which is somehow a rarity down in this dungeon. The skull's magical influence seems to attract the more rare denizens of the dungeon, making them appear far more often.\n\nAt its current level this trinket will make rare exotic enemies _%dx_ as likely to appear. The skull is only half as effective at attracting crystal mimics and armored statues, however. -items.trinkets.dimensionalsundial.name=dimensional sundial -items.trinkets.dimensionalsundial.warning=Your sundial isn't casting a shadow, you feel uneasy. -items.trinkets.dimensionalsundial.desc=Despite being underground, this sundial is still casting a shadow according to the sun's position. Even more strangely, the shadow's position seems to have no relation to the sun in this world. When no shadow is cast, the sundial seems to attract danger.\n\nAt its current level, this trinket will increase the spawning rate of enemies by _%d%%_ when it is nighttime in real life (9pm to 7am). +items.trinkets.thirteenleafclover.name=thirteen leaf clover +items.trinkets.thirteenleafclover.desc=Somehow stewing in the alchemy pot has caused this clover to grow a bunch of extra leaves! It's not really clear if this trinket is lucky or unlucky, perhaps this trinket will make your luck more chaotic?\n\nNormally when dealing or blocking damage, the game makes numbers closer to the average more common. At its current level this trinket has a _%d%%_ chance to invert this, making numbers closer to the maximum or minimum more likely to appear instead. + +items.trinkets.trapmechanism.name=trap mechanism +items.trinkets.trapmechanism.desc=The core mechanism of one of the dungeon's pitfall traps, carefully carved out of the floor so it can be carried. It seems to be magically tied to the dungeon itself, making terrain more hazardous for you and the dungeon's inhabitants.\n\nAt its current level this trinket will make _%d%%_ of regular floors become filled with either traps or chasms instead. items.trinkets.trinketcatalyst.name=trinket catalyst items.trinkets.trinketcatalyst.window_text=The water begins to glow as you use the catalyst. There are a few nearby items you could imbue with magical energy. diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index 760d0e8b803b04b1ec65d9060eaadc84a57b7ab0..d596ea8986b3d4a6f809a93d2eecfde0bd24b901 100644 GIT binary patch literal 23425 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 + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.trinkets; + +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.utils.Random; + +public class ThirteenLeafClover extends Trinket { + + { + image = ItemSpriteSheet.CLOVER; + } + + @Override + protected int upgradeEnergyCost() { + return 1+level(); //TODO + } + + @Override + public String desc() { + return Messages.get(this, "desc", (int)(100*combatDistributionInverseChance(buffedLvl()))); + } + + public static float combatDistributionInverseChance(){ + return combatDistributionInverseChance(trinketLevel(ThirteenLeafClover.class)); + } + + public static float combatDistributionInverseChance( int level ){ + if (level <= -1){ + return 0; + } else { + return 0.25f + 0.25f*level; + } + } + + public static int invCombatRoll( int min, int max){ + return Random.InvNormalIntRange( min, max ); + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/TrapMechanism.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/TrapMechanism.java new file mode 100644 index 000000000..edd957225 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/TrapMechanism.java @@ -0,0 +1,117 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2024 Evan Debenham + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +package com.shatteredpixel.shatteredpixeldungeon.items.trinkets; + +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.levels.Level; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; +import com.watabou.utils.Bundle; +import com.watabou.utils.Random; + +import java.util.ArrayList; + +public class TrapMechanism extends Trinket { + + { + image = ItemSpriteSheet.TRAP_MECHANISM; + } + + @Override + protected int upgradeEnergyCost() { + return 1+level(); //TODO + } + + @Override + public String desc() { + return Messages.get(this, "desc", (int)(100*overrideNormalLevelChance(buffedLvl()))); + } + + public static float overrideNormalLevelChance(){ + return overrideNormalLevelChance(trinketLevel(TrapMechanism.class)); + } + + public static float overrideNormalLevelChance( int level ){ + if (level == -1){ + return 0f; + } else { + return 0.25f + 0.25f*level; + } + } + + //true for traps, false for chasm + //ensures a little consistency of RNG + private ArrayList levelFeels = new ArrayList<>(); + private int shuffles = 0; + + public static Level.Feeling getNextFeeling(){ + TrapMechanism mech = Dungeon.hero.belongings.getItem(TrapMechanism.class); + if (mech == null) { + return Level.Feeling.NONE; + } + if (mech.levelFeels.isEmpty()){ + Random.pushGenerator(Dungeon.seed+1); + mech.levelFeels.add(true); + mech.levelFeels.add(true); + mech.levelFeels.add(true); + mech.levelFeels.add(false); + mech.levelFeels.add(false); + mech.levelFeels.add(false); + for (int i = 0; i <= mech.shuffles; i++) { + Random.shuffle(mech.levelFeels); + } + mech.shuffles++; + Random.popGenerator(); + } + + return mech.levelFeels.remove(0) ? Level.Feeling.TRAPS : Level.Feeling.CHASM; + } + + private static final String FEELS = "feels"; + private static final String SHUFFLES = "shuffles"; + + @Override + public void storeInBundle(Bundle bundle) { + super.storeInBundle(bundle); + if (!levelFeels.isEmpty()){ + boolean[] storeFeels = new boolean[levelFeels.size()]; + for (int i = 0; i < storeFeels.length; i++){ + storeFeels[i] = levelFeels.get(i); + } + bundle.put(FEELS, storeFeels); + } + bundle.put( SHUFFLES, shuffles ); + } + + @Override + public void restoreFromBundle(Bundle bundle) { + super.restoreFromBundle(bundle); + levelFeels.clear(); + if (bundle.contains(FEELS)){ + for (boolean b : bundle.getBooleanArray(FEELS)){ + levelFeels.add(b); + } + } + shuffles = bundle.getInt( SHUFFLES ); + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java index fc9b87f65..9d8563f29 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/Level.java @@ -69,6 +69,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfEnchantment; import com.shatteredpixel.shatteredpixeldungeon.items.stones.StoneOfIntuition; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.MossyClump; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.DimensionalSundial; +import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrapMechanism; import com.shatteredpixel.shatteredpixeldungeon.items.trinkets.TrinketCatalyst; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfWarding; @@ -262,8 +263,11 @@ public abstract class Level implements Bundlable { feeling = Feeling.SECRETS; break; default: + //if-else statements are fine here as only one chance can be above 0 at a time if (Random.Float() < MossyClump.overrideNormalLevelChance()){ feeling = MossyClump.getNextFeeling(); + } else if (Random.Float() < TrapMechanism.overrideNormalLevelChance()) { + feeling = TrapMechanism.getNextFeeling(); } else { feeling = Feeling.NONE; } 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 b92dbf3e0..cbbef9580 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -475,6 +475,8 @@ public class ItemSpriteSheet { public static final int EXOTIC_CRYSTALS = TRINKETS+3; public static final int MOSSY_CLUMP = TRINKETS+4; public static final int SUNDIAL = TRINKETS+5; + public static final int CLOVER = TRINKETS+6; + public static final int TRAP_MECHANISM = TRINKETS+7; static{ assignItemRect(RAT_SKULL, 16, 11); assignItemRect(PARCHMENT_SCRAP, 10, 14); @@ -482,6 +484,8 @@ public class ItemSpriteSheet { assignItemRect(EXOTIC_CRYSTALS, 14, 13); assignItemRect(MOSSY_CLUMP, 12, 11); assignItemRect(SUNDIAL, 16, 12); + assignItemRect(CLOVER, 11, 15); + assignItemRect(TRAP_MECHANISM, 13, 15); } private static final int SCROLLS = xy(1, 19); //16 slots