From ef2fec4c8c2d516542e6e57047445b3375b52888 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 7 May 2024 14:01:09 -0400 Subject: [PATCH] v2.4.0: finished impl of mimic tooth --- .../assets/messages/actors/actors.properties | 6 + .../assets/messages/items/items.properties | 2 +- core/src/main/assets/sprites/items.png | Bin 23420 -> 23498 bytes .../actors/mobs/EbonyMimic.java | 118 ++++++++++++++++++ .../actors/mobs/Mimic.java | 2 + .../items/trinkets/MimicTooth.java | 16 ++- .../levels/RegularLevel.java | 30 +++++ .../sprites/ItemSpriteSheet.java | 2 +- .../sprites/MimicSprite.java | 27 +++- 9 files changed, 197 insertions(+), 6 deletions(-) create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/EbonyMimic.java diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 4f2c5fb1a..c90e748cf 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -1198,6 +1198,12 @@ actors.mobs.dwarfking$dkmonk.rankings_desc=Fell Before the King of Dwarves actors.mobs.dwarfking$dkwarlock.rankings_desc=Fell Before the King of Dwarves actors.mobs.dwarfking$dkgolem.rankings_desc=Fell Before the King of Dwarves +actors.mobs.ebonymimic.name=ebony mimic +actors.mobs.ebonymimic.reveal=There was a mimic there! +actors.mobs.ebonymimic.hidden_name=suspicious outline +actors.mobs.ebonymimic.hidden_desc=There seems to be something here, but it's almost totally transparent. +actors.mobs.ebonymimic.desc=Mimics are magical creatures which can take any shape they wish. In dungeons they almost always choose a shape of a treasure chest, in order to lure in unsuspecting adventurers.\n\nEbony mimics are extremely tough mimics with the ability to make themselves almost invisible. They lurk on things that adventurers are likely to interact with, but do contain loot of their own as well. + actors.mobs.elemental$fireelemental.name=fire elemental actors.mobs.elemental$fireelemental.desc=Elementals are chaotic creatures that are often created when powerful occult magic isn't properly controlled. Elementals have minimal intelligence, and are usually associated with a particular type of magic.\n\nFire elementals are a common type of elemental which deals damage with fiery magic. They will set their target ablaze with melee attacks, and can occasionally shoot bolts of fire as well. actors.mobs.elemental$newbornfireelemental.name=newborn fire elemental diff --git a/core/src/main/assets/messages/items/items.properties b/core/src/main/assets/messages/items/items.properties index dbbd6d240..de3e2fe20 100644 --- a/core/src/main/assets/messages/items/items.properties +++ b/core/src/main/assets/messages/items/items.properties @@ -1304,7 +1304,7 @@ 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. items.trinkets.mimictooth.name=mimic tooth -items.trinkets.mimictooth.desc=TODO\n\nAt its current level this trinket will make all kinds of mimics _%sx_ more common, and will make mimics more difficult to detect. +items.trinkets.mimictooth.desc=This large sharp tooth must have been pulled from a very unhappy mimic. It seems to be influencing the mimics of the dungeon, making them more frequent and dangerous.\n\nAt its current level this trinket will make all kinds of mimic _%1$sx_ more common, will make mimics much more difficult to detect, and will give each floor a _%2$s%%_ chance to contain an ebony mimic. items.trinkets.mossyclump.name=mossy clump items.trinkets.mossyclump.desc=This clump of wet moss seems to hold onto its moisture no matter how hard you squeeze it. It seems to be magically tied to the dungeon itself, making grass and water more likely to appear.\n\nAt its current level this trinket will make _%d%%_ of regular floors become filled with either water or grass instead.\n\nThis trinket costs a relatively large amount of energy to upgrade. diff --git a/core/src/main/assets/sprites/items.png b/core/src/main/assets/sprites/items.png index 5c78a277fc50ef7350be065a083f3f45ee235a2a..3f1a41f26ed5b61ba69d858c41b67679ad1d5aae 100644 GIT binary patch literal 23498 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 IKA(jD0~Wv?+W-In diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/EbonyMimic.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/EbonyMimic.java new file mode 100644 index 000000000..7f3fc7fa0 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/EbonyMimic.java @@ -0,0 +1,118 @@ +/* + * 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.actors.mobs; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; +import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; +import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; +import com.shatteredpixel.shatteredpixeldungeon.items.EquipableItem; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.armor.Armor; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.Artifact; +import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon; +import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; +import com.shatteredpixel.shatteredpixeldungeon.levels.features.Door; +import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.MimicSprite; +import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; +import com.watabou.noosa.audio.Sample; +import com.watabou.utils.Random; + +public class EbonyMimic extends Mimic { + + { + spriteClass = MimicSprite.Ebony.class; + } + + @Override + public String name() { + if (alignment == Alignment.NEUTRAL){ + return Messages.get(this, "hidden_name"); + } else { + return super.name(); + } + } + + @Override + public String description() { + if (alignment == Alignment.NEUTRAL){ + return Messages.get(this, "hidden_desc"); + } else { + return super.description(); + } + } + + public void stopHiding(){ + state = HUNTING; + if (sprite != null) sprite.idle(); + if (Actor.chars().contains(this) && Dungeon.level.heroFOV[pos]) { + enemy = Dungeon.hero; + target = Dungeon.hero.pos; + GLog.w(Messages.get(this, "reveal") ); + CellEmitter.get(pos).burst(Speck.factory(Speck.STAR), 10); + Sample.INSTANCE.play(Assets.Sounds.MIMIC, 1, 0.85f); + } + if (Dungeon.level.map[pos] == Terrain.DOOR){ + Door.enter( pos ); + } + } + + @Override + public int damageRoll() { + if (alignment == Alignment.NEUTRAL){ + return Math.round(super.damageRoll()*1.5f); //BIG damage on surprise + } else { + return super.damageRoll(); + } + } + + @Override + public void setLevel(int level) { + super.setLevel(Math.round(level*1.5f)); + } + + @Override + protected void generatePrize( boolean useDecks ) { + super.generatePrize( useDecks ); + //all existing prize items are guaranteed uncursed, and have a 50% chance to be +1 if they were +0 + for (Item i : items){ + if (i instanceof EquipableItem || i instanceof Wand){ + i.cursed = false; + i.cursedKnown = true; + if (i instanceof Weapon && ((Weapon) i).hasCurseEnchant()){ + ((Weapon) i).enchant(null); + } + if (i instanceof Armor && ((Armor) i).hasCurseGlyph()){ + ((Armor) i).inscribe(null); + } + if (!(i instanceof MissileWeapon || i instanceof Artifact) && i.level() == 0 && Random.Int(2) == 0){ + i.upgrade(); + } + } + } + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mimic.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mimic.java index e0ba09ade..83fab97cc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mimic.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Mimic.java @@ -296,6 +296,8 @@ public class Mimic extends Mob { m = new GoldenMimic(); } else if (mimicType == CrystalMimic.class) { m = new CrystalMimic(); + } else if (mimicType == EbonyMimic.class) { + m = new EbonyMimic(); } else { m = new Mimic(); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/MimicTooth.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/MimicTooth.java index ede02c843..517a84d25 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/MimicTooth.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/trinkets/MimicTooth.java @@ -38,7 +38,9 @@ public class MimicTooth extends Trinket { @Override public String desc() { - return Messages.get(this, "desc", Float.toString(mimicChanceMultiplier(buffedLvl()))); + return Messages.get(this, "desc", + Messages.decimalFormat("#.##", mimicChanceMultiplier(buffedLvl())), + Messages.decimalFormat("#.##", 100*ebonyMimicChance(buffedLvl()))); } public static float mimicChanceMultiplier(){ @@ -57,4 +59,16 @@ public class MimicTooth extends Trinket { return trinketLevel(MimicTooth.class) >= 0; } + public static float ebonyMimicChance(){ + return ebonyMimicChance(trinketLevel(MimicTooth.class)); + } + + public static float ebonyMimicChance( int level ){ + if (level >= 0){ + return 0.125f + 0.125f * level; + } else { + return 0; + } + } + } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java index 821a10c6d..305eab8ab 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/RegularLevel.java @@ -31,6 +31,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.Blob; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.SacrificialFire; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Talent; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.EbonyMimic; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GoldenMimic; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob; @@ -630,6 +631,35 @@ public abstract class RegularLevel extends Level { } Random.popGenerator(); + //ebony mimics >:) + Random.pushGenerator(Random.Long()); + if (Random.Float() < MimicTooth.ebonyMimicChance()){ + ArrayList candidateCells = new ArrayList<>(); + if (Random.Int(2) == 0){ + for (Heap h : heaps.valueList()){ + if (h.type == Heap.Type.HEAP + && !(room(h.pos) instanceof SpecialRoom) + && findMob(h.pos) == null){ + candidateCells.add(h.pos); + } + } + } else { + if (Random.Int(5) == 0 && findMob(exit()) == null){ + candidateCells.add(exit()); + } else { + for (int i = 0; i < length(); i++) { + if (map[i] == Terrain.DOOR && findMob(i) == null) { + candidateCells.add(i); + } + } + } + } + + int pos = Random.element(candidateCells); + mobs.add(Mimic.spawnAt(pos, EbonyMimic.class, false)); + } + Random.popGenerator(); + } private static HashMap limitedDocs = new HashMap<>(); 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 e5a50b7a6..ad10a4e24 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/ItemSpriteSheet.java @@ -490,7 +490,7 @@ public class ItemSpriteSheet { assignItemRect(SUNDIAL, 16, 12); assignItemRect(CLOVER, 11, 15); assignItemRect(TRAP_MECHANISM, 13, 15); - assignItemRect(MIMIC_TOOTH, 7, 13); + assignItemRect(MIMIC_TOOTH, 8, 15); } private static final int SCROLLS = xy(1, 19); //16 slots diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MimicSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MimicSprite.java index 341b9a6b0..18bceb41f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MimicSprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/MimicSprite.java @@ -28,9 +28,9 @@ import com.watabou.noosa.TextureFilm; public class MimicSprite extends MobSprite { - private Animation advancedHiding; + protected Animation advancedHiding; - private Animation hiding; + protected Animation hiding; { //adjust shadow slightly to account for 1 empty bottom pixel (used for border while hiding) @@ -68,7 +68,7 @@ public class MimicSprite extends MobSprite { attack.frames( frames, 3+c, 7+c, 8+c, 9+c ); die = new Animation( 5, false ); - die.frames( frames, 10+c, 111+c, 12+c ); + die.frames( frames, 10+c, 11+c, 12+c ); play( idle ); } @@ -112,4 +112,25 @@ public class MimicSprite extends MobSprite { } } + public static class Ebony extends MimicSprite{ + @Override + protected int texOffset() { + return 48; + } + + @Override + public void hideMimic() { + super.hideMimic(); + alpha(0.2f); + } + + @Override + public void play(Animation anim) { + if (curAnim == advancedHiding && anim != advancedHiding){ + alpha(1f); + } + super.play(anim); + } + } + }