v2.2.0: improved code for levelgen statues and mimic vs. non-levelgen
This commit is contained in:
@@ -170,7 +170,7 @@ public class CrystalMimic extends Mimic {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void generatePrize() {
|
||||
protected void generatePrize( boolean useDecks ) {
|
||||
//Crystal mimic already contains a prize item. Just guarantee it isn't cursed.
|
||||
for (Item i : items){
|
||||
i.cursed = false;
|
||||
|
||||
@@ -82,8 +82,8 @@ public class GoldenMimic extends Mimic {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void generatePrize() {
|
||||
super.generatePrize();
|
||||
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){
|
||||
|
||||
@@ -46,7 +46,6 @@ import com.watabou.utils.Random;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class Mimic extends Mob {
|
||||
|
||||
@@ -274,20 +273,19 @@ public class Mimic extends Mob {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static Mimic spawnAt( int pos, Item item ){
|
||||
return spawnAt( pos, Arrays.asList(item), Mimic.class);
|
||||
public static Mimic spawnAt( int pos, Item... items){
|
||||
return spawnAt(pos, Mimic.class, items);
|
||||
}
|
||||
|
||||
public static Mimic spawnAt( int pos, Item item, Class mimicType ){
|
||||
return spawnAt( pos, Arrays.asList(item), mimicType);
|
||||
public static Mimic spawnAt( int pos, Class mimicType, Item... items){
|
||||
return spawnAt(pos, mimicType, true, items);
|
||||
}
|
||||
|
||||
public static Mimic spawnAt( int pos, List<Item> items ) {
|
||||
return spawnAt( pos, items, Mimic.class);
|
||||
public static Mimic spawnAt( int pos, boolean useDecks, Item... items){
|
||||
return spawnAt(pos, Mimic.class, useDecks, items);
|
||||
}
|
||||
|
||||
public static Mimic spawnAt( int pos, List<Item> items, Class mimicType ) {
|
||||
|
||||
public static Mimic spawnAt( int pos, Class mimicType, boolean useDecks, Item... items){
|
||||
Mimic m;
|
||||
if (mimicType == GoldenMimic.class){
|
||||
m = new GoldenMimic();
|
||||
@@ -297,17 +295,17 @@ public class Mimic extends Mob {
|
||||
m = new Mimic();
|
||||
}
|
||||
|
||||
m.items = new ArrayList<>( items );
|
||||
m.items = new ArrayList<>( Arrays.asList(items) );
|
||||
m.setLevel( Dungeon.depth );
|
||||
m.pos = pos;
|
||||
|
||||
//generate an extra reward for killing the mimic
|
||||
m.generatePrize();
|
||||
|
||||
m.generatePrize(useDecks);
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
protected void generatePrize(){
|
||||
protected void generatePrize( boolean useDecks ){
|
||||
Item reward = null;
|
||||
do {
|
||||
switch (Random.Int(5)) {
|
||||
@@ -315,16 +313,16 @@ public class Mimic extends Mob {
|
||||
reward = new Gold().random();
|
||||
break;
|
||||
case 1:
|
||||
reward = Generator.randomMissile(true);
|
||||
reward = Generator.randomMissile(!useDecks);
|
||||
break;
|
||||
case 2:
|
||||
reward = Generator.randomArmor();
|
||||
break;
|
||||
case 3:
|
||||
reward = Generator.randomWeapon(true);
|
||||
reward = Generator.randomWeapon(!useDecks);
|
||||
break;
|
||||
case 4:
|
||||
reward = Generator.randomUsingDefaults(Generator.Category.RING);
|
||||
reward = useDecks ? Generator.random(Generator.Category.RING) : Generator.randomUsingDefaults(Generator.Category.RING);
|
||||
break;
|
||||
}
|
||||
} while (reward == null || Challenges.isItemBlocked(reward));
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ShatteredPixelDungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
@@ -32,7 +31,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Grim;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.InterlevelScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.StatueSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.utils.Bundle;
|
||||
@@ -60,13 +58,13 @@ public class Statue extends Mob {
|
||||
defenseSkill = 4 + Dungeon.depth;
|
||||
}
|
||||
|
||||
public void createWeapon(){
|
||||
//this is a bit of a hack. I'm strongly considering redesigning this system code-wise though
|
||||
if (ShatteredPixelDungeon.scene() instanceof InterlevelScene) {
|
||||
public void createWeapon( boolean useDecks ){
|
||||
if (useDecks) {
|
||||
weapon = (MeleeWeapon) Generator.random(Generator.Category.WEAPON);
|
||||
} else {
|
||||
weapon = (MeleeWeapon) Generator.randomUsingDefaults(Generator.Category.WEAPON);
|
||||
}
|
||||
levelGenStatue = useDecks;
|
||||
weapon.cursed = false;
|
||||
weapon.enchant( Enchantment.random() );
|
||||
}
|
||||
@@ -191,13 +189,17 @@ public class Statue extends Mob {
|
||||
}
|
||||
|
||||
public static Statue random(){
|
||||
Statue statue = null;
|
||||
return random( true );
|
||||
}
|
||||
|
||||
public static Statue random( boolean useDecks ){
|
||||
Statue statue;
|
||||
if (Random.Int(10) == 0){
|
||||
statue = new ArmoredStatue();
|
||||
} else {
|
||||
statue = new Statue();
|
||||
}
|
||||
statue.createWeapon();
|
||||
statue.createWeapon(useDecks);
|
||||
return statue;
|
||||
}
|
||||
|
||||
|
||||
@@ -357,7 +357,7 @@ public class CursedWand {
|
||||
}
|
||||
}
|
||||
|
||||
Mimic mimic = Mimic.spawnAt(spawnCell, new ArrayList<Item>(), GoldenMimic.class);
|
||||
Mimic mimic = Mimic.spawnAt(spawnCell, GoldenMimic.class, false);
|
||||
mimic.stopHiding();
|
||||
mimic.alignment = Char.Alignment.ENEMY;
|
||||
Item reward;
|
||||
|
||||
@@ -386,7 +386,7 @@ public abstract class RegularLevel extends Level {
|
||||
(toDrop.isUpgradable() && Random.Int(4 - toDrop.level()) == 0)){
|
||||
|
||||
if (Dungeon.depth > 1 && Random.Int(10) == 0 && findMob(cell) == null){
|
||||
mobs.add(Mimic.spawnAt(cell, toDrop, GoldenMimic.class));
|
||||
mobs.add(Mimic.spawnAt(cell, GoldenMimic.class, toDrop));
|
||||
} else {
|
||||
Heap dropped = drop(toDrop, cell);
|
||||
if (heaps.get(cell) == dropped) {
|
||||
|
||||
@@ -71,7 +71,7 @@ public class CrystalVaultRoom extends SpecialRoom {
|
||||
|
||||
level.drop( i1, i1Pos ).type = Heap.Type.CRYSTAL_CHEST;
|
||||
if (Random.Int(10) == 0){
|
||||
level.mobs.add(Mimic.spawnAt(i2Pos, i2, CrystalMimic.class));
|
||||
level.mobs.add(Mimic.spawnAt(i2Pos, CrystalMimic.class, i2));
|
||||
} else {
|
||||
level.drop(i2, i2Pos).type = Heap.Type.CRYSTAL_CHEST;
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ public class DistortionTrap extends Trap{
|
||||
mob = Reflection.newInstance(Bestiary.getMobRotation(floor).get(0));
|
||||
break;
|
||||
case 2:
|
||||
switch (Random.Int(4)){
|
||||
switch (2){
|
||||
case 0: default:
|
||||
Wraith.spawnAt(point, true);
|
||||
continue; //wraiths spawn themselves, no need to do more
|
||||
@@ -123,13 +123,12 @@ public class DistortionTrap extends Trap{
|
||||
mob = Piranha.random();
|
||||
break;
|
||||
case 2:
|
||||
mob = Mimic.spawnAt(point, new ArrayList<>());
|
||||
mob = Mimic.spawnAt(point, false);
|
||||
((Mimic)mob).stopHiding();
|
||||
mob.alignment = Char.Alignment.ENEMY;
|
||||
break;
|
||||
case 3:
|
||||
mob = Statue.random();
|
||||
((Statue) mob).levelGenStatue = false;
|
||||
mob = Statue.random(false);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -58,7 +58,7 @@ public class GuardianTrap extends Trap {
|
||||
|
||||
for (int i = 0; i < (scalingDepth() - 5)/5; i++){
|
||||
Guardian guardian = new Guardian();
|
||||
guardian.createWeapon();
|
||||
guardian.createWeapon(false);
|
||||
guardian.state = guardian.WANDERING;
|
||||
guardian.pos = Dungeon.level.randomRespawnCell( guardian );
|
||||
if (guardian.pos != -1) {
|
||||
@@ -81,7 +81,7 @@ public class GuardianTrap extends Trap {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createWeapon() {
|
||||
public void createWeapon( boolean useDecks ) {
|
||||
weapon = (MeleeWeapon) Generator.randomUsingDefaults(Generator.Category.WEAPON);
|
||||
weapon.cursed = false;
|
||||
weapon.enchant(null);
|
||||
|
||||
Reference in New Issue
Block a user