v0.7.0: Artifact spawning and boss reward changes:

- master thieve's armband now drops regularly
- thieves now rarely drop a random ring or artifact instead of armband
- Goo and DM-300 now drop unique alchemy ingredients, no artifacts
- Lloyd's beacon and cape of thorns effectively removed from the game
This commit is contained in:
Evan Debenham 2018-09-05 17:54:25 -04:00
parent f78331ccef
commit 1bbab016ac
11 changed files with 138 additions and 28 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -38,8 +38,8 @@ public class Bandit extends Thief {
{
spriteClass = BanditSprite.class;
//1 in 50 chance to be a crazy bandit, equates to overall 1/150 chance.
lootChance = 0.333f;
//1 in 50 chance to be a crazy bandit, equates to overall 1/100 chance.
lootChance = 0.5f;
}
@Override

View File

@ -35,9 +35,9 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CapeOfThorns;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon;
import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.MetalShard;
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
@ -48,6 +48,7 @@ import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.Camera;
import com.watabou.noosa.audio.Sample;
import com.watabou.utils.Bundle;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Random;
public class DM300 extends Mob {
@ -59,8 +60,6 @@ public class DM300 extends Mob {
EXP = 30;
defenseSkill = 18;
loot = new CapeOfThorns();
lootChance = 0.333f;
properties.add(Property.BOSS);
properties.add(Property.INORGANIC);
@ -146,6 +145,16 @@ public class DM300 extends Mob {
GameScene.bossSlain();
Dungeon.level.drop( new SkeletonKey( Dungeon.depth ), pos ).sprite.drop();
//60% chance of 2 shards, 30% chance of 3, 10% chance for 4. Average of 2.5
int shards = Random.chances(new float[]{0, 0, 6, 3, 1});
for (int i = 0; i < shards; i++){
int ofs;
do {
ofs = PathFinder.NEIGHBOURS8[Random.Int(8)];
} while (!Dungeon.level.passable[pos + ofs]);
Dungeon.level.drop( new MetalShard(), pos + ofs ).sprite.drop( pos );
}
Badges.validateBossSlain();
LloydsBeacon beacon = Dungeon.hero.belongings.getItem(LloydsBeacon.class);

View File

@ -33,8 +33,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.ElmoParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon;
import com.shatteredpixel.shatteredpixeldungeon.items.keys.SkeletonKey;
import com.shatteredpixel.shatteredpixeldungeon.items.quest.GooBlob;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
@ -56,9 +56,6 @@ public class Goo extends Mob {
defenseSkill = 8;
spriteClass = GooSprite.class;
loot = new LloydsBeacon();
lootChance = 0.333f;
properties.add(Property.BOSS);
properties.add(Property.DEMONIC);
properties.add(Property.ACIDIC);
@ -236,6 +233,16 @@ public class Goo extends Mob {
GameScene.bossSlain();
Dungeon.level.drop( new SkeletonKey( Dungeon.depth ), pos ).sprite.drop();
//60% chance of 2 blobs, 30% chance of 3, 10% chance for 4. Average of 2.5
int blobs = Random.chances(new float[]{0, 0, 6, 3, 1});
for (int i = 0; i < blobs; i++){
int ofs;
do {
ofs = PathFinder.NEIGHBOURS8[Random.Int(8)];
} while (!Dungeon.level.passable[pos + ofs]);
Dungeon.level.drop( new GooBlob(), pos + ofs ).sprite.drop( pos );
}
Badges.validateBossSlain();
yell( Messages.get(this, "defeated") );

View File

@ -28,10 +28,10 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
import com.shatteredpixel.shatteredpixeldungeon.items.Gold;
import com.shatteredpixel.shatteredpixeldungeon.items.Honeypot;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.MasterThievesArmband;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ThiefSprite;
@ -52,8 +52,7 @@ public class Thief extends Mob {
EXP = 5;
maxLvl = 10;
//see createloot
loot = null;
loot = Random.oneOf(Generator.Category.RING, Generator.Category.ARTIFACT);
lootChance = 0.01f;
WANDERING = new Wandering();
@ -102,15 +101,6 @@ public class Thief extends Mob {
}
super.rollToDropLoot();
}
@Override
protected Item createLoot(){
if (!Dungeon.LimitedDrops.THIEVES_ARMBAND.dropped()) {
Dungeon.LimitedDrops.THIEVES_ARMBAND.drop();
return new MasterThievesArmband().identify();
} else
return new Gold(Random.NormalIntRange(100, 250));
}
@Override
public int attackSkill( Char target ) {

View File

@ -224,7 +224,7 @@ public class Generator {
return item instanceof Bag ? Integer.MAX_VALUE : Integer.MAX_VALUE - 1;
}
private static final float[] INITIAL_ARTIFACT_PROBS = new float[]{ 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1};
private static final float[] INITIAL_ARTIFACT_PROBS = new float[]{ 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1};
static {
GOLD.classes = new Class<?>[]{

View File

@ -0,0 +1,48 @@
/*
* Pixel Dungeon
* Copyright (C) 2012-2015 Oleg Dolya
*
* Shattered Pixel Dungeon
* Copyright (C) 2014-2018 Evan Debenham
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package com.shatteredpixel.shatteredpixeldungeon.items.quest;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
public class GooBlob extends Item {
{
image = ItemSpriteSheet.BLOB;
stackable = true;
}
@Override
public boolean isUpgradable() {
return false;
}
@Override
public boolean isIdentified() {
return true;
}
@Override
public int price() {
return 40;
}
}

View File

@ -0,0 +1,48 @@
/*
* Pixel Dungeon
* Copyright (C) 2012-2015 Oleg Dolya
*
* Shattered Pixel Dungeon
* Copyright (C) 2014-2018 Evan Debenham
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*/
package com.shatteredpixel.shatteredpixeldungeon.items.quest;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
public class MetalShard extends Item {
{
image = ItemSpriteSheet.SHARD;
stackable = true;
}
@Override
public boolean isUpgradable() {
return false;
}
@Override
public boolean isIdentified() {
return true;
}
@Override
public int price() {
return 80;
}
}

View File

@ -33,13 +33,11 @@ import com.shatteredpixel.shatteredpixeldungeon.items.armor.RogueArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.ScaleArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.armor.WarriorArmor;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.AlchemistsToolkit;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CapeOfThorns;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.ChaliceOfBlood;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakOfShadows;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.DriedRose;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.EtherealChains;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.HornOfPlenty;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.LloydsBeacon;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.MasterThievesArmband;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.SandalsOfNature;
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TalismanOfForesight;
@ -219,13 +217,13 @@ public enum Catalog {
RINGS.seen.put( RingOfWealth.class, false);
ARTIFACTS.seen.put( AlchemistsToolkit.class, false);
ARTIFACTS.seen.put( CapeOfThorns.class, false);
//ARTIFACTS.seen.put( CapeOfThorns.class, false);
ARTIFACTS.seen.put( ChaliceOfBlood.class, false);
ARTIFACTS.seen.put( CloakOfShadows.class, false);
ARTIFACTS.seen.put( DriedRose.class, false);
ARTIFACTS.seen.put( EtherealChains.class, false);
ARTIFACTS.seen.put( HornOfPlenty.class, false);
ARTIFACTS.seen.put( LloydsBeacon.class, false);
//ARTIFACTS.seen.put( LloydsBeacon.class, false);
ARTIFACTS.seen.put( MasterThievesArmband.class, false);
ARTIFACTS.seen.put( SandalsOfNature.class, false);
ARTIFACTS.seen.put( TalismanOfForesight.class, false);

View File

@ -588,6 +588,8 @@ public class ItemSpriteSheet {
public static final int PICKAXE = QUEST+4;
public static final int ORE = QUEST+5;
public static final int TOKEN = QUEST+6;
public static final int BLOB = QUEST+7;
public static final int SHARD = QUEST+8;
static{
assignItemRect(SKULL, 16, 11);
assignItemRect(DUST, 12, 11);
@ -596,6 +598,8 @@ public class ItemSpriteSheet {
assignItemRect(PICKAXE, 14, 14);
assignItemRect(ORE, 15, 15);
assignItemRect(TOKEN, 12, 12);
assignItemRect(BLOB, 10, 9);
assignItemRect(SHARD, 8, 10);
}
private static final int BAGS = xy(1, 31); //16 slots

View File

@ -260,8 +260,8 @@ items.artifacts.lloydsbeacon.desc=Lloyd's beacon is an intricate magical device
items.artifacts.lloydsbeacon.desc_set=This beacon was set somewhere on the level %d of Pixel Dungeon.
items.artifacts.masterthievesarmband.name=master thieves' armband
items.artifacts.masterthievesarmband.desc=This purple velvet armband bears the mark of a master thief. This doesn't belong to you, but it probably didn't belong to the person you took it from either.
items.artifacts.masterthievesarmband.desc_worn=With the armband around your wrist, every piece of gold you find makes you desire other people's property more. Perhaps it wouldn't be too hard to steal from pixel mart...
items.artifacts.masterthievesarmband.desc=This purple velvet armband bears the mark of a master thief. This doesn't belong to you, but it probably didn't belong to its last user either.
items.artifacts.masterthievesarmband.desc_worn=With the armband around your wrist, every piece of gold you find makes you desire other people's property more. Perhaps it wouldn't be too hard to steal from a shop...
items.artifacts.sandalsofnature.name=sandals of nature
items.artifacts.sandalsofnature.name_1=shoes of nature
@ -672,6 +672,12 @@ items.quest.dwarftoken.desc=Many dwarves and some of their larger creations carr
items.quest.embers.name=elemental embers
items.quest.embers.desc=Special embers which can only be harvested from young fire elementals. They radiate thermal energy.
items.quest.gooblob.name=blob of goo
items.quest.gooblob.desc=A jiggly blob of goop, split off from Goo as it died. It's almost like a big ball of jelly, though you wouldn't dare eat it.\n\nIt does nothing on its own, but perhaps it could be used as an ingredient. At the very least it should sell for a decent price.
items.quest.metalshard.name=cursed metal shard
items.quest.metalshard.desc=A shard of rusted cursed metal, which broke off DM-300 as it was destroyed. You can feel an inactive malevolent magic within it.\n\nIt does nothing on its own, but perhaps it could be used as an ingredient. At the very least it should sell for a decent price.
items.quest.pickaxe.name=pickaxe
items.quest.pickaxe.ac_mine=MINE
items.quest.pickaxe.no_vein=There is no dark gold vein near you to mine.