v0.6.3: implement drops for new ranged weapons

This commit is contained in:
Evan Debenham 2018-01-04 21:33:52 -05:00
parent 9816333fd7
commit 232e8a986f
13 changed files with 139 additions and 52 deletions

View File

@ -150,8 +150,10 @@ public class Mimic extends Mob {
//generate an extra reward for killing the mimic //generate an extra reward for killing the mimic
switch(Random.Int(5)){ switch(Random.Int(5)){
case 0: case 1: case 0:
m.items.add(new Gold().random()); break; m.items.add(new Gold().random()); break;
case 1:
m.items.add(Generator.randomMissile()); break;
case 2: case 2:
m.items.add(Generator.randomArmor().identify()); break; m.items.add(Generator.randomArmor().identify()); break;
case 3: case 3:

View File

@ -89,8 +89,8 @@ public class Skeleton extends Mob {
protected Item createLoot() { protected Item createLoot() {
Item loot; Item loot;
do { do {
loot = Generator.random(Generator.Category.WEAPON); loot = Random.Int(4) == 0 ? Generator.randomMissile() : Generator.randomWeapon();
//50% chance of re-rolling tier 4 or 5 items //50% chance of re-rolling tier 4 or 5 melee weapons
} while (loot instanceof MeleeWeapon && ((MeleeWeapon) loot).tier >= 4 && Random.Int(2) == 0); } while (loot instanceof MeleeWeapon && ((MeleeWeapon) loot).tier >= 4 && Random.Int(2) == 0);
loot.level(0); loot.level(0);
return loot; return loot;

View File

@ -30,7 +30,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon.Enchantment; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon.Enchantment;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Grim; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Grim;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Vampiric; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Vampiric;
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.sprites.StatueSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.StatueSprite;
@ -52,8 +51,8 @@ public class Statue extends Mob {
super(); super();
do { do {
weapon = (Weapon)Generator.random( Generator.Category.WEAPON ); weapon = Generator.randomWeapon();
} while (!(weapon instanceof MeleeWeapon) || weapon.cursed); } while (weapon.cursed);
weapon.enchant( Enchantment.random() ); weapon.enchant( Enchantment.random() );

View File

@ -97,7 +97,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfPrismaticLight
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfRegrowth;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfTransfusion; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfTransfusion;
import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfVenom; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfVenom;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.Weapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.AssassinsBlade; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.AssassinsBlade;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.BattleAxe; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.BattleAxe;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Dagger; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Dagger;
@ -112,6 +111,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Knuckles;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Longsword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Longsword;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Mace; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Mace;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MagesStaff;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.MeleeWeapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Quarterstaff; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Quarterstaff;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RoundShield; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RoundShield;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RunicBlade; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.RunicBlade;
@ -123,6 +123,18 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Sword;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WarHammer; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WarHammer;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Whip; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Whip;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortsword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WornShortsword;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Bolas;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.CurareDart;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Dart;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.FishingSpear;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.IncendiaryDart;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Javelin;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Shuriken;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingHammer;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingKnife;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Tomahawk;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Trident;
import com.shatteredpixel.shatteredpixeldungeon.plants.BlandfruitBush; import com.shatteredpixel.shatteredpixeldungeon.plants.BlandfruitBush;
import com.shatteredpixel.shatteredpixeldungeon.plants.Blindweed; import com.shatteredpixel.shatteredpixeldungeon.plants.Blindweed;
import com.shatteredpixel.shatteredpixeldungeon.plants.Dreamfoil; import com.shatteredpixel.shatteredpixeldungeon.plants.Dreamfoil;
@ -147,21 +159,34 @@ import java.util.LinkedHashMap;
public class Generator { public class Generator {
public enum Category { public enum Category {
WEAPON ( 6, Weapon.class ), WEAPON ( 6, MeleeWeapon.class),
WEP_T1 ( 0, Weapon.class), WEP_T1 ( 0, MeleeWeapon.class),
WEP_T2 ( 0, Weapon.class), WEP_T2 ( 0, MeleeWeapon.class),
WEP_T3 ( 0, Weapon.class), WEP_T3 ( 0, MeleeWeapon.class),
WEP_T4 ( 0, Weapon.class), WEP_T4 ( 0, MeleeWeapon.class),
WEP_T5 ( 0, Weapon.class), WEP_T5 ( 0, MeleeWeapon.class),
ARMOR ( 4, Armor.class ), ARMOR ( 4, Armor.class ),
MISSILE ( 5, MissileWeapon.class ),
MIS_T1 ( 0, MissileWeapon.class ),
MIS_T2 ( 0, MissileWeapon.class ),
MIS_T3 ( 0, MissileWeapon.class ),
MIS_T4 ( 0, MissileWeapon.class ),
MIS_T5 ( 0, MissileWeapon.class ),
POTION ( 20, Potion.class ), POTION ( 20, Potion.class ),
SCROLL ( 20, Scroll.class ), SCROLL ( 20, Scroll.class ),
WAND ( 3, Wand.class ), WAND ( 3, Wand.class ),
RING ( 1, Ring.class ), RING ( 1, Ring.class ),
ARTIFACT( 1, Artifact.class), ARTIFACT( 1, Artifact.class),
SEED ( 0, Plant.Seed.class ), SEED ( 0, Plant.Seed.class ),
FOOD ( 0, Food.class ), FOOD ( 0, Food.class ),
GOLD ( 25, Gold.class );
GOLD ( 20, Gold.class );
public Class<?>[] classes; public Class<?>[] classes;
public float[] probs; public float[] probs;
@ -296,6 +321,41 @@ public class Generator {
PlateArmor.class }; PlateArmor.class };
ARMOR.probs = new float[]{ 0, 0, 0, 0, 0 }; ARMOR.probs = new float[]{ 0, 0, 0, 0, 0 };
//see Generator.randomMissile
MISSILE.classes = new Class<?>[]{};
MISSILE.probs = new float[]{};
MIS_T1.classes = new Class<?>[]{
Dart.class,
ThrowingKnife.class
};
MIS_T1.probs = new float[]{ 1, 1 };
MIS_T2.classes = new Class<?>[]{
Shuriken.class,
IncendiaryDart.class,
CurareDart.class
};
MIS_T2.probs = new float[]{ 5, 2, 2 };
MIS_T3.classes = new Class<?>[]{
FishingSpear.class,
Bolas.class
};
MIS_T3.probs = new float[]{ 4, 3 };
MIS_T4.classes = new Class<?>[]{
Javelin.class,
Tomahawk.class
};
MIS_T4.probs = new float[]{ 4, 3 };
MIS_T5.classes = new Class<?>[]{
Trident.class,
ThrowingHammer.class
};
MIS_T5.probs = new float[]{ 4, 3 };
FOOD.classes = new Class<?>[]{ FOOD.classes = new Class<?>[]{
Food.class, Food.class,
Pasty.class, Pasty.class,
@ -384,6 +444,8 @@ public class Generator {
return randomArmor(); return randomArmor();
case WEAPON: case WEAPON:
return randomWeapon(); return randomWeapon();
case MISSILE:
return randomMissile();
case ARTIFACT: case ARTIFACT:
Item item = randomArtifact(); Item item = randomArtifact();
//if we're out of artifacts, return a ring instead. //if we're out of artifacts, return a ring instead.
@ -439,17 +501,44 @@ public class Generator {
Category.WEP_T5 Category.WEP_T5
}; };
public static Weapon randomWeapon(){ public static MeleeWeapon randomWeapon(){
return randomWeapon(Dungeon.depth / 5); return randomWeapon(Dungeon.depth / 5);
} }
public static Weapon randomWeapon(int floorSet) { public static MeleeWeapon randomWeapon(int floorSet) {
floorSet = (int)GameMath.gate(0, floorSet, floorSetTierProbs.length-1); floorSet = (int)GameMath.gate(0, floorSet, floorSetTierProbs.length-1);
try { try {
Category c = wepTiers[Random.chances(floorSetTierProbs[floorSet])]; Category c = wepTiers[Random.chances(floorSetTierProbs[floorSet])];
Weapon w = (Weapon)c.classes[Random.chances(c.probs)].newInstance(); MeleeWeapon w = (MeleeWeapon)c.classes[Random.chances(c.probs)].newInstance();
w.random();
return w;
} catch (Exception e) {
ShatteredPixelDungeon.reportException(e);
return null;
}
}
public static final Category[] misTiers = new Category[]{
Category.MIS_T1,
Category.MIS_T2,
Category.MIS_T3,
Category.MIS_T4,
Category.MIS_T5
};
public static MissileWeapon randomMissile(){
return randomMissile(Dungeon.depth / 5);
}
public static MissileWeapon randomMissile(int floorSet) {
floorSet = (int)GameMath.gate(0, floorSet, floorSetTierProbs.length-1);
try {
Category c = misTiers[Random.chances(floorSetTierProbs[floorSet])];
MissileWeapon w = (MissileWeapon)c.classes[Random.chances(c.probs)].newInstance();
w.random(); w.random();
return w; return w;
} catch (Exception e) { } catch (Exception e) {

View File

@ -52,7 +52,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass; import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourglass;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfRecharging;
import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.CursingTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.CursingTrap;
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ShockingTrap; import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ShockingTrap;
@ -389,7 +388,7 @@ public class CursedWand {
do { do {
reward = Generator.random(Random.oneOf(Generator.Category.WEAPON, Generator.Category.ARMOR, reward = Generator.random(Random.oneOf(Generator.Category.WEAPON, Generator.Category.ARMOR,
Generator.Category.RING, Generator.Category.WAND)); Generator.Category.RING, Generator.Category.WAND));
} while (reward.level() < 2 && !(reward instanceof MissileWeapon)); } while (reward.level() < 1);
Sample.INSTANCE.play(Assets.SND_MIMIC, 1, 1, 0.5f); Sample.INSTANCE.play(Assets.SND_MIMIC, 1, 1, 0.5f);
mimic.items.clear(); mimic.items.clear();
mimic.items.add(reward); mimic.items.add(reward);
@ -442,7 +441,7 @@ public class CursedWand {
do { do {
result = Generator.random(Random.oneOf(Generator.Category.WEAPON, Generator.Category.ARMOR, result = Generator.random(Random.oneOf(Generator.Category.WEAPON, Generator.Category.ARMOR,
Generator.Category.RING, Generator.Category.ARTIFACT)); Generator.Category.RING, Generator.Category.ARTIFACT));
} while (result.level() < 0 && !(result instanceof MissileWeapon)); } while (result.cursed);
if (result.isUpgradable()) result.upgrade(); if (result.isUpgradable()) result.upgrade();
result.cursed = result.cursedKnown = true; result.cursed = result.cursedKnown = true;
GLog.w( Messages.get(CursedWand.class, "transmogrify") ); GLog.w( Messages.get(CursedWand.class, "transmogrify") );

View File

@ -55,6 +55,6 @@ public abstract class TippedDart extends Dart {
@Override @Override
public int price() { public int price() {
return quantity * 8; return quantity * 6;
} }
} }

View File

@ -22,8 +22,6 @@
package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret; package com.shatteredpixel.shatteredpixeldungeon.levels.rooms.secret;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
@ -46,12 +44,7 @@ public class SecretArtilleryRoom extends SecretRoom {
} while ( level.map[itemPos] != Terrain.EMPTY_SP } while ( level.map[itemPos] != Terrain.EMPTY_SP
|| level.heaps.get(itemPos) != null); || level.heaps.get(itemPos) != null);
Item item; level.drop(Generator.randomMissile(), itemPos);
do{
item = Generator.randomWeapon();
} while (!(item instanceof MissileWeapon));
level.drop(item, itemPos);
} }
entrance().set(Door.Type.HIDDEN); entrance().set(Door.Type.HIDDEN);

View File

@ -25,7 +25,6 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.features.Maze; import com.shatteredpixel.shatteredpixeldungeon.levels.features.Maze;
@ -102,7 +101,7 @@ public class SecretMazeRoom extends SecretRoom {
} else { } else {
prize = Generator.randomArmor((Dungeon.depth / 5) + 1); prize = Generator.randomArmor((Dungeon.depth / 5) + 1);
} }
} while (prize.cursed || prize instanceof MissileWeapon); } while (prize.cursed);
//33% chance for an extra update. //33% chance for an extra update.
if (Random.Int(3) == 0){ if (Random.Int(3) == 0){

View File

@ -54,7 +54,7 @@ public class ArmoryRoom extends SpecialRoom {
Painter.set( level, statue, Terrain.STATUE ); Painter.set( level, statue, Terrain.STATUE );
} }
int n = Random.IntRange( 1, 2 ); int n = Random.IntRange( 2, 3 );
for (int i=0; i < n; i++) { for (int i=0; i < n; i++) {
int pos; int pos;
do { do {
@ -68,11 +68,15 @@ public class ArmoryRoom extends SpecialRoom {
} }
private static Item prize( Level level ) { private static Item prize( Level level ) {
return Random.Int( 6 ) == 0 ? switch (Random.Int( 5 )){
new Bomb().random() : case 0:
Generator.random( Random.oneOf( return new Bomb().random();
Generator.Category.ARMOR, case 1:
Generator.Category.WEAPON return Generator.randomWeapon();
) ); case 2:
return Generator.randomArmor();
default:
return Generator.randomMissile();
}
} }
} }

View File

@ -27,7 +27,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfInvisibility;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
@ -105,7 +104,7 @@ public class PoolRoom extends SpecialRoom {
} while (prize.cursed); } while (prize.cursed);
//33% chance for an extra update. //33% chance for an extra update.
if (!(prize instanceof MissileWeapon) && Random.Int(3) == 0){ if (Random.Int(3) == 0){
prize.upgrade(); prize.upgrade();
} }

View File

@ -61,11 +61,14 @@ import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Mace;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Shortsword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Shortsword;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Sword; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.Sword;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WarHammer; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.melee.WarHammer;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.CurareDart; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Bolas;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.FishingSpear;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.IncendiaryDart; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.IncendiaryDart;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Javelin; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Javelin;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Shuriken; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Shuriken;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.ThrowingHammer;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Tomahawk; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Tomahawk;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.Trident;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
@ -165,32 +168,32 @@ public class ShopRoom extends SpecialRoom {
case 6: case 6:
itemsToSpawn.add( (Random.Int( 2 ) == 0 ? new Shortsword().identify() : new HandAxe()).identify() ); itemsToSpawn.add( (Random.Int( 2 ) == 0 ? new Shortsword().identify() : new HandAxe()).identify() );
itemsToSpawn.add( Random.Int( 2 ) == 0 ? itemsToSpawn.add( Random.Int( 2 ) == 0 ?
new IncendiaryDart().quantity(Random.NormalIntRange(2, 4)) : new Shuriken().random() :
new CurareDart().quantity(Random.NormalIntRange(1, 3))); new IncendiaryDart().random());
itemsToSpawn.add( new LeatherArmor().identify() ); itemsToSpawn.add( new LeatherArmor().identify() );
break; break;
case 11: case 11:
itemsToSpawn.add( (Random.Int( 2 ) == 0 ? new Sword().identify() : new Mace()).identify() ); itemsToSpawn.add( (Random.Int( 2 ) == 0 ? new Sword().identify() : new Mace()).identify() );
itemsToSpawn.add( Random.Int( 2 ) == 0 ? itemsToSpawn.add( Random.Int( 2 ) == 0 ?
new CurareDart().quantity(Random.NormalIntRange(2, 5)) : new FishingSpear().random() :
new Shuriken().quantity(Random.NormalIntRange(3, 6))); new Bolas().random());
itemsToSpawn.add( new MailArmor().identify() ); itemsToSpawn.add( new MailArmor().identify() );
break; break;
case 16: case 16:
itemsToSpawn.add( (Random.Int( 2 ) == 0 ? new Longsword().identify() : new BattleAxe()).identify() ); itemsToSpawn.add( (Random.Int( 2 ) == 0 ? new Longsword().identify() : new BattleAxe()).identify() );
itemsToSpawn.add( Random.Int( 2 ) == 0 ? itemsToSpawn.add( Random.Int( 2 ) == 0 ?
new Shuriken().quantity(Random.NormalIntRange(4, 7)) : new Javelin().random() :
new Javelin().quantity(Random.NormalIntRange(3, 6))); new Tomahawk().random());
itemsToSpawn.add( new ScaleArmor().identify() ); itemsToSpawn.add( new ScaleArmor().identify() );
break; break;
case 21: case 21:
itemsToSpawn.add( Random.Int( 2 ) == 0 ? new Greatsword().identify() : new WarHammer().identify() ); itemsToSpawn.add( Random.Int( 2 ) == 0 ? new Greatsword().identify() : new WarHammer().identify() );
itemsToSpawn.add( Random.Int(2) == 0 ? itemsToSpawn.add( Random.Int(2) == 0 ?
new Javelin().quantity(Random.NormalIntRange(4, 7)) : new Trident().random() :
new Tomahawk().quantity(Random.NormalIntRange(4, 7))); new ThrowingHammer().random());
itemsToSpawn.add( new PlateArmor().identify() ); itemsToSpawn.add( new PlateArmor().identify() );
itemsToSpawn.add( new Torch() ); itemsToSpawn.add( new Torch() );
itemsToSpawn.add( new Torch() ); itemsToSpawn.add( new Torch() );

View File

@ -27,7 +27,6 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap; import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfLevitation;
import com.shatteredpixel.shatteredpixeldungeon.items.weapon.missiles.MissileWeapon;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level; import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain; import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter; import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
@ -136,7 +135,7 @@ public class TrapsRoom extends SpecialRoom {
} while (prize.cursed); } while (prize.cursed);
//33% chance for an extra update. //33% chance for an extra update.
if (!(prize instanceof MissileWeapon) && Random.Int(3) == 0){ if (Random.Int(3) == 0){
prize.upgrade(); prize.upgrade();
} }

View File

@ -56,7 +56,8 @@ public class BlacksmithRoom extends StandardRoom {
level.drop( level.drop(
Generator.random( Random.oneOf( Generator.random( Random.oneOf(
Generator.Category.ARMOR, Generator.Category.ARMOR,
Generator.Category.WEAPON Generator.Category.WEAPON,
Generator.Category.MISSILE
) ), pos ); ) ), pos );
} }