use of com.watabou.pixeldungeon.actors.mobs.Mob in project pixel-dungeon by watabou.
the class ShopPainter method placeShopkeeper.
private static void placeShopkeeper(Level level, Room room) {
int pos;
do {
pos = room.random();
} while (level.heaps.get(pos) != null);
Mob shopkeeper = level instanceof LastShopLevel ? new ImpShopkeeper() : new Shopkeeper();
shopkeeper.pos = pos;
level.mobs.add(shopkeeper);
if (level instanceof LastShopLevel) {
for (int i = 0; i < Level.NEIGHBOURS9.length; i++) {
int p = shopkeeper.pos + Level.NEIGHBOURS9[i];
if (level.map[p] == Terrain.EMPTY_SP) {
level.map[p] = Terrain.WATER;
}
}
}
}
use of com.watabou.pixeldungeon.actors.mobs.Mob in project pixel-dungeon by watabou.
the class SewerBossLevel method createMobs.
@Override
protected void createMobs() {
Mob mob = Bestiary.mob(Dungeon.depth);
mob.pos = roomExit.random();
mobs.add(mob);
}
use of com.watabou.pixeldungeon.actors.mobs.Mob in project pixel-dungeon by watabou.
the class ScrollOfPsionicBlast method doRead.
@Override
protected void doRead() {
GameScene.flash(0xFFFFFF);
Sample.INSTANCE.play(Assets.SND_BLAST);
Invisibility.dispel();
for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) {
if (Level.fieldOfView[mob.pos]) {
Buff.prolong(mob, Blindness.class, Random.Int(3, 6));
mob.damage(Random.IntRange(1, mob.HT * 2 / 3), this);
}
}
Buff.prolong(curUser, Blindness.class, Random.Int(3, 6));
Dungeon.observe();
setKnown();
readAnimation();
}
use of com.watabou.pixeldungeon.actors.mobs.Mob in project pixel-dungeon by watabou.
the class ScrollOfWipeOut method doRead.
private void doRead() {
GameScene.flash(0xFF6644);
Invisibility.dispel();
for (Mob mob : Dungeon.level.mobs.toArray(new Mob[0])) {
if (!Bestiary.isBoss(mob)) {
Sample.INSTANCE.play(Assets.SND_CURSED, 0.3f, 0.3f, Random.Float(0.6f, 0.9f));
mob.die(this);
}
}
for (Heap heap : Dungeon.level.heaps.values()) {
switch(heap.type) {
case FOR_SALE:
heap.type = Type.HEAP;
if (Dungeon.visible[heap.pos]) {
CellEmitter.center(heap.pos).burst(Speck.factory(Speck.COIN), 2);
}
break;
case MIMIC:
heap.type = Type.HEAP;
heap.sprite.link();
Sample.INSTANCE.play(Assets.SND_CURSED, 0.3f, 0.3f, Random.Float(0.6f, 0.9f));
break;
default:
}
}
curUser.spend(TIME_TO_READ);
curUser.busy();
((HeroSprite) curUser.sprite).read();
}
use of com.watabou.pixeldungeon.actors.mobs.Mob in project pixel-dungeon by watabou.
the class GameScene method create.
@Override
public void create() {
Music.INSTANCE.play(Assets.TUNE, true);
Music.INSTANCE.volume(1f);
PixelDungeon.lastClass(Dungeon.hero.heroClass.ordinal());
super.create();
Camera.main.zoom(defaultZoom + PixelDungeon.zoom());
scene = this;
terrain = new Group();
add(terrain);
water = new SkinnedBlock(Level.WIDTH * DungeonTilemap.SIZE, Level.HEIGHT * DungeonTilemap.SIZE, Dungeon.level.waterTex());
terrain.add(water);
ripples = new Group();
terrain.add(ripples);
tiles = new DungeonTilemap();
terrain.add(tiles);
Dungeon.level.addVisuals(this);
plants = new Group();
add(plants);
int size = Dungeon.level.plants.size();
for (int i = 0; i < size; i++) {
addPlantSprite(Dungeon.level.plants.valueAt(i));
}
heaps = new Group();
add(heaps);
size = Dungeon.level.heaps.size();
for (int i = 0; i < size; i++) {
addHeapSprite(Dungeon.level.heaps.valueAt(i));
}
emitters = new Group();
effects = new Group();
emoicons = new Group();
mobs = new Group();
add(mobs);
for (Mob mob : Dungeon.level.mobs) {
addMobSprite(mob);
if (Statistics.amuletObtained) {
mob.beckon(Dungeon.hero.pos);
}
}
add(emitters);
add(effects);
gases = new Group();
add(gases);
for (Blob blob : Dungeon.level.blobs.values()) {
blob.emitter = null;
addBlobSprite(blob);
}
fog = new FogOfWar(Level.WIDTH, Level.HEIGHT);
fog.updateVisibility(Dungeon.visible, Dungeon.level.visited, Dungeon.level.mapped);
add(fog);
brightness(PixelDungeon.brightness());
spells = new Group();
add(spells);
statuses = new Group();
add(statuses);
add(emoicons);
hero = new HeroSprite();
hero.place(Dungeon.hero.pos);
hero.updateArmor();
mobs.add(hero);
add(new HealthIndicator());
add(cellSelector = new CellSelector(tiles));
StatusPane sb = new StatusPane();
sb.camera = uiCamera;
sb.setSize(uiCamera.width, 0);
add(sb);
toolbar = new Toolbar();
toolbar.camera = uiCamera;
toolbar.setRect(0, uiCamera.height - toolbar.height(), uiCamera.width, toolbar.height());
add(toolbar);
AttackIndicator attack = new AttackIndicator();
attack.camera = uiCamera;
attack.setPos(uiCamera.width - attack.width(), toolbar.top() - attack.height());
add(attack);
log = new GameLog();
log.camera = uiCamera;
log.setRect(0, toolbar.top(), attack.left(), 0);
add(log);
busy = new BusyIndicator();
busy.camera = uiCamera;
busy.x = 1;
busy.y = sb.bottom() + 1;
add(busy);
switch(InterlevelScene.mode) {
case RESURRECT:
WandOfBlink.appear(Dungeon.hero, Dungeon.level.entrance);
new Flare(8, 32).color(0xFFFF66, true).show(hero, 2f);
break;
case RETURN:
WandOfBlink.appear(Dungeon.hero, Dungeon.hero.pos);
break;
case FALL:
Chasm.heroLand();
break;
case DESCEND:
switch(Dungeon.depth) {
case 1:
WndStory.showChapter(WndStory.ID_SEWERS);
break;
case 6:
WndStory.showChapter(WndStory.ID_PRISON);
break;
case 11:
WndStory.showChapter(WndStory.ID_CAVES);
break;
case 16:
WndStory.showChapter(WndStory.ID_METROPOLIS);
break;
case 22:
WndStory.showChapter(WndStory.ID_HALLS);
break;
}
if (Dungeon.hero.isAlive() && Dungeon.depth != 22) {
Badges.validateNoKilling();
}
break;
default:
}
ArrayList<Item> dropped = Dungeon.droppedItems.get(Dungeon.depth);
if (dropped != null) {
for (Item item : dropped) {
int pos = Dungeon.level.randomRespawnCell();
if (item instanceof Potion) {
((Potion) item).shatter(pos);
} else if (item instanceof Plant.Seed) {
Dungeon.level.plant((Plant.Seed) item, pos);
} else {
Dungeon.level.drop(item, pos);
}
}
Dungeon.droppedItems.remove(Dungeon.depth);
}
Camera.main.target = hero;
if (InterlevelScene.mode != InterlevelScene.Mode.NONE) {
if (Dungeon.depth < Statistics.deepestFloor) {
GLog.h(TXT_WELCOME_BACK, Dungeon.depth);
} else {
GLog.h(TXT_WELCOME, Dungeon.depth);
Sample.INSTANCE.play(Assets.SND_DESCEND);
}
switch(Dungeon.level.feeling) {
case CHASM:
GLog.w(TXT_CHASM);
break;
case WATER:
GLog.w(TXT_WATER);
break;
case GRASS:
GLog.w(TXT_GRASS);
break;
default:
}
if (Dungeon.level instanceof RegularLevel && ((RegularLevel) Dungeon.level).secretDoors > Random.IntRange(3, 4)) {
GLog.w(TXT_SECRETS);
}
if (Dungeon.nightMode && !Dungeon.bossLevel()) {
GLog.w(TXT_NIGHT_MODE);
}
InterlevelScene.mode = InterlevelScene.Mode.NONE;
fadeIn();
}
}
Aggregations