v0.9.3: adjusted Yog for bosses challenge:
Baseline changes: - Yog fists now seek the hero when wandering Challenge changes: - laser damage up to 30-50 from 20-30 - Two fists are now spawned each time! - minion deck is now stronger
This commit is contained in:
parent
75ec1c549d
commit
d3ebcd0f4b
|
@ -1088,6 +1088,8 @@ actors.mobs.yogdzewa$larva.name=god's larva
|
|||
actors.mobs.yogdzewa$larva.rankings_desc=Devoured by Yog-Dzewa
|
||||
actors.mobs.yogdzewa$larva.desc=These tiny spawn of Yog-Dzewa are simple minions that are easy to produce. While individually weak, they are summoned quickly and can become overwhelming in large numbers.
|
||||
actors.mobs.yogdzewa$yogripper.rankings_desc=Devoured by Yog-Dzewa
|
||||
actors.mobs.yogdzewa$yogeye.rankings_desc=Devoured by Yog-Dzewa
|
||||
actors.mobs.yogdzewa$yogscorpio.rankings_desc=Devoured by Yog-Dzewa
|
||||
|
||||
actors.mobs.yogfist.invuln_warn=The fist is invulnerable while near to the eye!
|
||||
actors.mobs.yogfist.rankings_desc=Devoured by Yog-Dzewa
|
||||
|
|
|
@ -86,6 +86,6 @@ challenges.no_scrolls_desc=A certain rune is harder to find. Unfortunately, it's
|
|||
challenges.champion_enemies=Hostile champions
|
||||
challenges.champion_enemies_desc=You're not the only one who can level up!\n\n- Regular enemies have a 1/8 chance to spawn with a special champion buff.\n- Champions wake up if they spawn asleep\n- The hero knows when a champion spawns\n- Champions are immune to corruption\n\nThere are six types of champion enemy:\n_Blazing (orange):_ +25% melee damage, ignites on hit, immune to fire, spreads flames on death\n_Projecting (purple):_ +25% melee damage, can attack anything they see\n_Antimagic (green):_ -25% damage taken, immune to magical effects\n_Giant (blue):_ -75% damage taken, +1 melee range, cannot move into tunnels\n_Blessed (yellow):_ +200% accuracy, +200% evasion\n_Growing (red):_ +20% accuracy, evasion, damage, and effective HP. Increases by 1% every 3 turns.
|
||||
challenges.stronger_bosses=Badder bosses
|
||||
challenges.stronger_bosses_desc=TODO\n\n_Goo:_ +20% health\n_-_ Healing in water ramps up, to 3/turn\n_-_ Pumps up in 1 turn instead of 2\n\n_Tengu:_ +25% health\n_-_ Phase 1: traps are much deadlier\n_-_ Phase 2: abilities are more frequent\n\n_DM-300:_ +33% health\n_-_ Pylons are tougher and 3 activate\n_-_ Abilities are more powerful and frequent\n_-_ DM-300 is faster when supercharged\n_-_ Exposed wires are twice as common\n\n_Dwarf King:_ +50% health\n_-_ Minions are stronger in all phases\n_-_ Phase 1: faster abilities and summons\n_-_ Phase 2: 2 more minions per round\n_-_ Phase 3: 2x health, faster summons
|
||||
challenges.stronger_bosses_desc=Bosses are much tougher with this challenge!\n\n_Goo:_ +20% health\n_-_ Healing in water ramps up, to 3/turn\n_-_ Pumps up in 1 turn instead of 2\n_Tengu:_ +25% health\n_-_ Phase 1: traps are much deadlier\n_-_ Phase 2: abilities are more frequent\n_DM-300:_ +33% health\n_-_ Pylons are tougher and 3 activate\n_-_ Abilities are more powerful and frequent\n_-_ DM-300 is faster when supercharged\n_-_ Exposed wires are twice as common\n_Dwarf King:_ +50% health\n_-_ Minions are stronger in all phases\n_-_ Phase 1: faster abilities and summons\n_-_ Phase 2: 2 more minions per round\n_-_ Phase 3: 2x health, faster summons\n_Yog-Dzewa:_\n_-_ Two fists are summoned at a time!\n_-_ +60% laser damage\n_-_ Stronger minions
|
||||
|
||||
rankings$record.something=Killed by Something
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
|
||||
|
@ -90,26 +91,59 @@ public class YogDzewa extends Mob {
|
|||
private static final int MIN_SUMMON_CD = 10;
|
||||
private static final int MAX_SUMMON_CD = 15;
|
||||
|
||||
private static Class getPairedFist(Class fist){
|
||||
if (fist == YogFist.BurningFist.class) return YogFist.SoiledFist.class;
|
||||
if (fist == YogFist.SoiledFist.class) return YogFist.BurningFist.class;
|
||||
if (fist == YogFist.RottingFist.class) return YogFist.RustedFist.class;
|
||||
if (fist == YogFist.RustedFist.class) return YogFist.RottingFist.class;
|
||||
if (fist == YogFist.BrightFist.class) return YogFist.DarkFist.class;
|
||||
if (fist == YogFist.DarkFist.class) return YogFist.BrightFist.class;
|
||||
return null;
|
||||
}
|
||||
|
||||
private ArrayList<Class> fistSummons = new ArrayList<>();
|
||||
private ArrayList<Class> challengeSummons = new ArrayList<>();
|
||||
{
|
||||
Random.pushGenerator(Dungeon.seedCurDepth());
|
||||
fistSummons.add(Random.Int(2) == 0 ? YogFist.BurningFist.class : YogFist.SoiledFist.class);
|
||||
fistSummons.add(Random.Int(2) == 0 ? YogFist.RottingFist.class : YogFist.RustedFist.class);
|
||||
fistSummons.add(Random.Int(2) == 0 ? YogFist.BrightFist.class : YogFist.DarkFist.class);
|
||||
Random.shuffle(fistSummons);
|
||||
//randomly place challenge summons so that two fists of a pair can never spawn together
|
||||
if (Random.Int(2) == 0){
|
||||
challengeSummons.add(getPairedFist(fistSummons.get(1)));
|
||||
challengeSummons.add(getPairedFist(fistSummons.get(2)));
|
||||
challengeSummons.add(getPairedFist(fistSummons.get(0)));
|
||||
} else {
|
||||
challengeSummons.add(getPairedFist(fistSummons.get(2)));
|
||||
challengeSummons.add(getPairedFist(fistSummons.get(0)));
|
||||
challengeSummons.add(getPairedFist(fistSummons.get(1)));
|
||||
}
|
||||
Random.popGenerator();
|
||||
}
|
||||
|
||||
private static final int SUMMON_DECK_SIZE = 4;
|
||||
private ArrayList<Class> regularSummons = new ArrayList<>();
|
||||
{
|
||||
for (int i = 0; i < SUMMON_DECK_SIZE; i++){
|
||||
if (Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){
|
||||
for (int i = 0; i < 6; i++){
|
||||
if (i >= 4){
|
||||
regularSummons.add(YogRipper.class);
|
||||
}
|
||||
if (i >= Statistics.spawnersAlive){
|
||||
regularSummons.add(Larva.class);
|
||||
} else {
|
||||
regularSummons.add( i % 2 == 0 ? YogEye.class : YogScorpio.class);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < 6; i++){
|
||||
if (i >= Statistics.spawnersAlive){
|
||||
regularSummons.add(Larva.class);
|
||||
} else {
|
||||
regularSummons.add(YogRipper.class);
|
||||
}
|
||||
}
|
||||
}
|
||||
Random.shuffle(regularSummons);
|
||||
}
|
||||
|
||||
|
@ -175,7 +209,11 @@ public class YogDzewa extends Mob {
|
|||
Dungeon.observe();
|
||||
}
|
||||
for (Char ch : affected) {
|
||||
if (Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){
|
||||
ch.damage(Random.NormalIntRange(30, 50), new Eye.DeathGaze());
|
||||
} else {
|
||||
ch.damage(Random.NormalIntRange(20, 30), new Eye.DeathGaze());
|
||||
}
|
||||
|
||||
if (Dungeon.level.heroFOV[pos]) {
|
||||
ch.sprite.flash();
|
||||
|
@ -322,7 +360,27 @@ public class YogDzewa extends Mob {
|
|||
GLog.n(Messages.get(this, "darkness"));
|
||||
sprite.showStatus(CharSprite.POSITIVE, Messages.get(this, "invulnerable"));
|
||||
|
||||
YogFist fist = (YogFist) Reflection.newInstance(fistSummons.remove(0));
|
||||
addFist((YogFist)Reflection.newInstance(fistSummons.remove(0)));
|
||||
|
||||
if (Dungeon.isChallenged(Challenges.STRONGER_BOSSES)){
|
||||
addFist((YogFist)Reflection.newInstance(challengeSummons.remove(0)));
|
||||
}
|
||||
|
||||
CellEmitter.get(Dungeon.level.exit-1).burst(ShadowParticle.UP, 25);
|
||||
CellEmitter.get(Dungeon.level.exit).burst(ShadowParticle.UP, 100);
|
||||
CellEmitter.get(Dungeon.level.exit+1).burst(ShadowParticle.UP, 25);
|
||||
|
||||
if (abilityCooldown < 5) abilityCooldown = 5;
|
||||
if (summonCooldown < 5) summonCooldown = 5;
|
||||
|
||||
}
|
||||
|
||||
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
|
||||
if (lock != null) lock.addTime(dmgTaken);
|
||||
|
||||
}
|
||||
|
||||
public void addFist(YogFist fist){
|
||||
fist.pos = Dungeon.level.exit;
|
||||
|
||||
CellEmitter.get(Dungeon.level.exit-1).burst(ShadowParticle.UP, 25);
|
||||
|
@ -333,23 +391,22 @@ public class YogDzewa extends Mob {
|
|||
if (summonCooldown < 5) summonCooldown = 5;
|
||||
|
||||
int targetPos = Dungeon.level.exit + Dungeon.level.width();
|
||||
if (Actor.findChar(targetPos) == null){
|
||||
|
||||
if (!Dungeon.isChallenged(Challenges.STRONGER_BOSSES)
|
||||
&& Actor.findChar(targetPos) == null){
|
||||
fist.pos = targetPos;
|
||||
} else if (Actor.findChar(targetPos-1) == null){
|
||||
fist.pos = targetPos-1;
|
||||
} else if (Actor.findChar(targetPos+1) == null){
|
||||
fist.pos = targetPos+1;
|
||||
} else if (Actor.findChar(targetPos) == null){
|
||||
fist.pos = targetPos;
|
||||
}
|
||||
|
||||
GameScene.add(fist, 4);
|
||||
Actor.addDelayed( new Pushing( fist, Dungeon.level.exit, fist.pos ), -1 );
|
||||
}
|
||||
|
||||
LockedFloor lock = Dungeon.hero.buff(LockedFloor.class);
|
||||
if (lock != null) lock.addTime(dmgTaken);
|
||||
|
||||
}
|
||||
|
||||
public void updateVisibility( Level level ){
|
||||
if (phase > 1 && isAlive()){
|
||||
level.viewDistance = 4 - (phase-1);
|
||||
|
@ -453,6 +510,7 @@ public class YogDzewa extends Mob {
|
|||
|
||||
private static final String FIST_SUMMONS = "fist_summons";
|
||||
private static final String REGULAR_SUMMONS = "regular_summons";
|
||||
private static final String CHALLENGE_SUMMONS = "challenges_summons";
|
||||
|
||||
private static final String TARGETED_CELLS = "targeted_cells";
|
||||
|
||||
|
@ -465,6 +523,7 @@ public class YogDzewa extends Mob {
|
|||
bundle.put(SUMMON_CD, summonCooldown);
|
||||
|
||||
bundle.put(FIST_SUMMONS, fistSummons.toArray(new Class[0]));
|
||||
bundle.put(CHALLENGE_SUMMONS, challengeSummons.toArray(new Class[0]));
|
||||
bundle.put(REGULAR_SUMMONS, regularSummons.toArray(new Class[0]));
|
||||
|
||||
int[] bundleArr = new int[targetedCells.size()];
|
||||
|
@ -485,6 +544,8 @@ public class YogDzewa extends Mob {
|
|||
|
||||
fistSummons.clear();
|
||||
Collections.addAll(fistSummons, bundle.getClassArray(FIST_SUMMONS));
|
||||
challengeSummons.clear();
|
||||
Collections.addAll(challengeSummons, bundle.getClassArray(CHALLENGE_SUMMONS));
|
||||
regularSummons.clear();
|
||||
Collections.addAll(regularSummons, bundle.getClassArray(REGULAR_SUMMONS));
|
||||
|
||||
|
@ -525,7 +586,16 @@ public class YogDzewa extends Mob {
|
|||
|
||||
}
|
||||
|
||||
//used so death to yog's ripper demons have their own rankings description and are more aggro
|
||||
public static class YogRipper extends RipperDemon {
|
||||
//used so death to yog's ripper demons have their own rankings description
|
||||
public static class YogRipper extends RipperDemon {}
|
||||
public static class YogEye extends Eye {
|
||||
{
|
||||
maxLvl = -2;
|
||||
}
|
||||
}
|
||||
public static class YogScorpio extends Scorpio {
|
||||
{
|
||||
maxLvl = -2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -81,6 +81,13 @@ public abstract class YogFist extends Mob {
|
|||
@Override
|
||||
protected boolean act() {
|
||||
if (paralysed <= 0 && rangedCooldown > 0) rangedCooldown--;
|
||||
|
||||
if (Dungeon.hero.invisible <= 0 && state == WANDERING){
|
||||
beckon(Dungeon.hero.pos);
|
||||
state = HUNTING;
|
||||
enemy = Dungeon.hero;
|
||||
}
|
||||
|
||||
return super.act();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user