v2.2.0: improved code for levelgen statues and mimic vs. non-levelgen

This commit is contained in:
Evan Debenham
2023-10-12 13:10:42 -04:00
parent ebd6c9e5be
commit a86e20c793
9 changed files with 34 additions and 35 deletions

View File

@@ -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;

View File

@@ -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){

View File

@@ -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));

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);