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