From 87703dbc4e7d932e6560dc3551a99f5445f5ba2f Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 19 Dec 2023 14:13:56 -0500 Subject: [PATCH] v2.3.0: added basic no-functionality fungal core, and a few fungi fixes --- .../assets/messages/actors/actors.properties | 3 + core/src/main/assets/sprites/fungal_core.png | Bin 0 -> 221 bytes .../shatteredpixeldungeon/Assets.java | 1 + .../actors/mobs/FungalCore.java | 56 ++++++++++ .../actors/mobs/FungalSentry.java | 5 + .../levels/features/HighGrass.java | 2 +- .../levels/rooms/quest/MineGiantRoom.java | 5 + .../sprites/FungalCoreSprite.java | 97 ++++++++++++++++++ .../sprites/FungalSentrySprite.java | 19 ++-- 9 files changed, 178 insertions(+), 10 deletions(-) create mode 100644 core/src/main/assets/sprites/fungal_core.png create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FungalCore.java create mode 100644 core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FungalCoreSprite.java diff --git a/core/src/main/assets/messages/actors/actors.properties b/core/src/main/assets/messages/actors/actors.properties index 5462bc4c1..de5ac6eaf 100644 --- a/core/src/main/assets/messages/actors/actors.properties +++ b/core/src/main/assets/messages/actors/actors.properties @@ -1202,6 +1202,9 @@ actors.mobs.eye.desc=Evil Eyes are floating balls of pent up demonic energy. Whi actors.mobs.fetidrat.name=fetid rat actors.mobs.fetidrat.desc=Something is clearly wrong with this rat. Its greasy black fur and rotting skin are very different from the healthy rats you've seen previously. Its pale green eyes make it seem especially menacing.\n\nThe rat carries a cloud of horrible stench with it, it's overpoweringly strong up close.\n\nDark ooze dribbles from the rat's mouth, it eats through the floor but seems to dissolve in water. +actors.mobs.fungalcore.name=fungal core +actors.mobs.fungalcore.desc=This gigantic mushroom must be the source of all the fungal activity in this cave. TODO. + actors.mobs.fungalsentry.name=fungal sentry actors.mobs.fungalsentry.desc=This especially tall mushroom acts as a point of defense for the larger fungal network living in this cave.\n\nIt is immobile, but will shoot precise blasts of poison at anything that gets within its line of sight. While the impact of these blasts is fairly weak, _they can stack up deadly amounts of poison very quickly._ While it can be killed, it's probably best to avoid it. diff --git a/core/src/main/assets/sprites/fungal_core.png b/core/src/main/assets/sprites/fungal_core.png new file mode 100644 index 0000000000000000000000000000000000000000..6e44829e1b3c582ad0fa490be33a509842c319ee GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!VDxecyh&nluCe4h%1mz$+O#eEipRPEN-_; z&+H)oX1lmpGZQZ@O$oVRf4lnL_=WmWGlA+DOM?7@862M7NCR@xJzX3_Dj1U!5=26p z7*dnjiVhr*R?t|oWXYpNOQg6=luQylq!=!-vm|CZgv1$`@CNYudh@b2ekf8X*N_t6 zVv~LQ^Z + */ + +package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; + +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Blacksmith; +import com.shatteredpixel.shatteredpixeldungeon.sprites.FungalCoreSprite; + +public class FungalCore extends Mob { + + { + HP = HT = 300; + spriteClass = FungalCoreSprite.class; + + EXP = 20; + + state = PASSIVE; + + properties.add(Property.IMMOVABLE); + properties.add(Property.BOSS); + } + + @Override + public boolean reset() { + return true; + } + + @Override + public float spawningWeight() { + return 0; + } + + @Override + public void die(Object cause) { + super.die(cause); + Blacksmith.Quest.beatBoss(); + } +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FungalSentry.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FungalSentry.java index 7fac0a507..6326bbc12 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FungalSentry.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/FungalSentry.java @@ -51,6 +51,11 @@ public class FungalSentry extends Mob { return true; } + @Override + public float spawningWeight() { + return 0; + } + @Override protected boolean getCloser(int target) { return false; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/HighGrass.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/HighGrass.java index 15d9e0cad..3779aa6c8 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/HighGrass.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/features/HighGrass.java @@ -117,7 +117,7 @@ public class HighGrass { if (Dungeon.level instanceof MiningLevel && Blacksmith.Quest.Type() == Blacksmith.Quest.FUNGI && Random.Int(3) != 0){ - naturalismLevel = 0; + naturalismLevel = -1; } if (naturalismLevel >= 0) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineGiantRoom.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineGiantRoom.java index 735048572..6bcde1930 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineGiantRoom.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/levels/rooms/quest/MineGiantRoom.java @@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.CrystalSpire; +import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.FungalCore; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.GnollGeomancer; import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Blacksmith; import com.shatteredpixel.shatteredpixeldungeon.levels.Level; @@ -134,6 +135,10 @@ public class MineGiantRoom extends CaveRoom { Painter.fillEllipse(level, this, 4, Terrain.HIGH_GRASS); Painter.fillEllipse(level, this, 5, Terrain.GRASS); + Point p = center(); + FungalCore m = new FungalCore(); + m.pos = level.pointToCell(p); + level.mobs.add(m); } else { Painter.fillEllipse(level, this, 3, Terrain.EMPTY); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FungalCoreSprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FungalCoreSprite.java new file mode 100644 index 000000000..ad3462df5 --- /dev/null +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FungalCoreSprite.java @@ -0,0 +1,97 @@ +/* + * Pixel Dungeon + * Copyright (C) 2012-2015 Oleg Dolya + * + * Shattered Pixel Dungeon + * Copyright (C) 2014-2023 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.sprites; + +import com.shatteredpixel.shatteredpixeldungeon.Assets; +import com.shatteredpixel.shatteredpixeldungeon.Dungeon; +import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; +import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonWallsTilemap; +import com.watabou.noosa.TextureFilm; + +public class FungalCoreSprite extends MobSprite { + + public FungalCoreSprite(){ + super(); + + texture( Assets.Sprites.FUNGAL_CORE ); + + TextureFilm frames = new TextureFilm( texture, 27, 27 ); + + idle = new Animation( 0, true ); + idle.frames( frames, 0); + + run = new Animation( 0, true ); + run.frames( frames, 0); + + attack = new Animation( 24, false ); + attack.frames( frames, 0 ); + + zap = attack.clone(); + + die = new Animation( 12, false ); + die.frames( frames, 0 ); + + play( idle ); + + } + + boolean wasVisible = false; + + @Override + public void update() { + super.update(); + if (curAnim != die && ch != null && visible != wasVisible){ + if (visible){ + DungeonWallsTilemap.skipCells.add(ch.pos - 2* Dungeon.level.width()); + DungeonWallsTilemap.skipCells.add(ch.pos - Dungeon.level.width()); + } else { + DungeonWallsTilemap.skipCells.remove(ch.pos - 2*Dungeon.level.width()); + DungeonWallsTilemap.skipCells.remove(ch.pos - Dungeon.level.width()); + } + GameScene.updateMap(ch.pos-2*Dungeon.level.width()); + GameScene.updateMap(ch.pos-Dungeon.level.width()); + wasVisible = visible; + } + } + + @Override + public void die() { + super.die(); + if (ch != null && visible){ + DungeonWallsTilemap.skipCells.remove(ch.pos - 2*Dungeon.level.width()); + DungeonWallsTilemap.skipCells.remove(ch.pos - Dungeon.level.width()); + GameScene.updateMap(ch.pos-2*Dungeon.level.width()); + GameScene.updateMap(ch.pos-Dungeon.level.width()); + } + } + + @Override + public void turnTo(int from, int to) { + //do nothing + } + + @Override + public int blood() { + return 0xFF88CC44; + } + +} diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FungalSentrySprite.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FungalSentrySprite.java index a160147f6..82cef4049 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FungalSentrySprite.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/sprites/FungalSentrySprite.java @@ -24,18 +24,17 @@ package com.shatteredpixel.shatteredpixeldungeon.sprites; import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.effects.MagicMissile; -import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.watabou.noosa.TextureFilm; import com.watabou.utils.Callback; -public class FungalSentrySprite extends CharSprite { +public class FungalSentrySprite extends MobSprite { private int cellToAttack; public FungalSentrySprite(){ super(); - texture(Assets.Sprites.FUNGAL_SENTRY ); + texture( Assets.Sprites.FUNGAL_SENTRY ); TextureFilm frames = new TextureFilm( texture, 18, 18 ); @@ -57,8 +56,6 @@ public class FungalSentrySprite extends CharSprite { } - //TODO blood - @Override public void attack( int cell ) { if (!Dungeon.level.adjacent( cell, ch.pos )) { @@ -89,10 +86,14 @@ public class FungalSentrySprite extends CharSprite { } } - public class ScorpioShot extends Item { - { - image = ItemSpriteSheet.FISHING_SPEAR; - } + @Override + public void turnTo(int from, int to) { + //do nothing + } + + @Override + public int blood() { + return 0xFF88CC44; } }