From d6cf71e790d5c898b7e500209acc82c880d1d2c3 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Sun, 14 Jul 2019 15:43:26 -0400 Subject: [PATCH] v0.7.4: added allies to the surface scene --- .../items/artifacts/DriedRose.java | 10 +++- .../scenes/SurfaceScene.java | 50 ++++++++++++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/DriedRose.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/DriedRose.java index 9318ec978..81bf1ecdc 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/DriedRose.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/artifacts/DriedRose.java @@ -45,8 +45,8 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.AntiMagic; import com.shatteredpixel.shatteredpixeldungeon.items.armor.glyphs.Brimstone; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRetribution; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.exotic.ScrollOfPsionicBlast; +import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon; -import com.shatteredpixel.shatteredpixeldungeon.messages.Languages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.scenes.CellSelector; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; @@ -270,6 +270,14 @@ public class DriedRose extends Artifact { return super.upgrade(); } + + public Weapon ghostWeapon(){ + return weapon; + } + + public Armor ghostArmor(){ + return armor; + } private static final String TALKEDTO = "talkedto"; private static final String FIRSTSUMMON = "firstsummon"; 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 8ff2c9279..e2e3773d0 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/SurfaceScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/SurfaceScene.java @@ -25,8 +25,15 @@ import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Badges; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.HeroClass; +import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose; +import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfLivingEarth; +import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfWarding; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.EarthGuardianSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.GhostSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.RatSprite; +import com.shatteredpixel.shatteredpixeldungeon.sprites.WardSprite; import com.shatteredpixel.shatteredpixeldungeon.ui.Archs; import com.shatteredpixel.shatteredpixeldungeon.ui.RedButton; import com.watabou.gltextures.SmartTexture; @@ -45,6 +52,7 @@ import com.watabou.noosa.TouchArea; import com.watabou.noosa.Visual; import com.watabou.noosa.audio.Music; import com.watabou.utils.Point; +import com.watabou.utils.PointF; import com.watabou.utils.Random; import java.nio.FloatBuffer; @@ -132,13 +140,53 @@ public class SurfaceScene extends PixelScene { a.x = (SKY_WIDTH - a.width) / 2; a.y = SKY_HEIGHT - a.height; align(a); - window.add( a ); final Pet pet = new Pet(); pet.rm = pet.gm = pet.bm = 1.2f; pet.x = SKY_WIDTH / 2 + 2; pet.y = SKY_HEIGHT - pet.height; align(pet); + + //allies. Attempts to pick highest level, but prefers rose > earth > ward. + //Rose level is halved because it's easier to upgrade + CharSprite allySprite = null; + + //picks the highest between ghost's weapon, armor, and rose level/2 + int roseLevel = 0; + DriedRose rose = Dungeon.hero.belongings.getItem(DriedRose.class); + if (rose != null){ + roseLevel = rose.level()/2; + if (rose.ghostWeapon() != null){ + roseLevel = Math.max(roseLevel, rose.ghostWeapon().level()); + } + if (rose.ghostArmor() != null){ + roseLevel = Math.max(roseLevel, rose.ghostArmor().level()); + } + } + + int earthLevel = Dungeon.hero.belongings.getItem(WandOfLivingEarth.class) == null ? 0 : Dungeon.hero.belongings.getItem(WandOfLivingEarth.class).level(); + int wardLevel = Dungeon.hero.belongings.getItem(WandOfWarding.class) == null ? 0 : Dungeon.hero.belongings.getItem(WandOfWarding.class).level(); + + if (roseLevel >= 3 && roseLevel >= earthLevel && roseLevel >= wardLevel){ + allySprite = new GhostSprite(); + if (dayTime) allySprite.alpha(0.4f); + } else if (earthLevel >= 3 && earthLevel >= wardLevel){ + allySprite = new EarthGuardianSprite(); + } else if (wardLevel >= 3){ + allySprite = new WardSprite(); + ((WardSprite) allySprite).updateTier(Math.min(wardLevel+2, 6)); + } + + if (allySprite != null){ + allySprite.add(CharSprite.State.PARALYSED); + allySprite.scale = new PointF(2, 2); + allySprite.x = a.x - allySprite.width()*0.75f; + allySprite.y = SKY_HEIGHT - allySprite.height(); + align(allySprite); + window.add(allySprite); + } + + window.add( a ); window.add( pet ); window.add( new TouchArea( sky ) {