v2.2.0: tense musing now also plays during the game's first three quests
This commit is contained in:
@@ -52,8 +52,11 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ElementalSprite;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.audio.Music;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Callback;
|
||||
import com.watabou.utils.PathFinder;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
@@ -381,6 +384,17 @@ public abstract class Elemental extends Mob {
|
||||
if (alignment == Alignment.ENEMY) {
|
||||
Dungeon.level.drop( new Embers(), pos ).sprite.drop();
|
||||
Statistics.questScores[1] = 2000;
|
||||
Game.runOnRenderThread(new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
Music.INSTANCE.fadeOut(1f, new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
Dungeon.level.playLevelMusic();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@ import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndQuest;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.windows.WndSadGhost;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.audio.Music;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Callback;
|
||||
@@ -173,7 +174,18 @@ public class Ghost extends NPC {
|
||||
Game.runOnRenderThread(new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
GameScene.show( new WndQuest( Ghost.this, txt_quest ) );
|
||||
GameScene.show( new WndQuest( Ghost.this, txt_quest ){
|
||||
@Override
|
||||
public void hide() {
|
||||
super.hide();
|
||||
Music.INSTANCE.fadeOut(1f, new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
Dungeon.level.playLevelMusic();
|
||||
}
|
||||
});
|
||||
}
|
||||
} );
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -335,8 +347,24 @@ public class Ghost extends NPC {
|
||||
Sample.INSTANCE.play( Assets.Sounds.GHOST );
|
||||
processed = true;
|
||||
Statistics.questScores[0] = 1000;
|
||||
|
||||
Game.runOnRenderThread(new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
Music.INSTANCE.fadeOut(1f, new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
Dungeon.level.playLevelMusic();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean active(){
|
||||
return given && !processed && depth == Dungeon.depth;
|
||||
}
|
||||
|
||||
public static void complete() {
|
||||
weapon = null;
|
||||
|
||||
@@ -26,7 +26,11 @@ import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AscensionChallenge;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Elemental;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.RotHeart;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Generator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.CeremonialCandle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.quest.CorpseDust;
|
||||
@@ -34,10 +38,11 @@ import com.shatteredpixel.shatteredpixeldungeon.items.quest.Embers;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.wands.Wand;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.journal.Notes;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.RegularLevel;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.Room;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.MassGraveRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.RotGardenRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.RitualSiteRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.quest.RotGardenRoom;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.plants.Rotberry;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
|
||||
@@ -349,6 +354,79 @@ public class Wandmaker extends NPC {
|
||||
}
|
||||
return rooms;
|
||||
}
|
||||
|
||||
//quest is active if:
|
||||
public static boolean active(){
|
||||
//it is not completed
|
||||
if (wand1 == null || wand2 == null || !(Dungeon.level instanceof RegularLevel)){
|
||||
return false;
|
||||
}
|
||||
|
||||
//and...
|
||||
if (type == 1){
|
||||
//hero is in the mass grave room
|
||||
if (((RegularLevel) Dungeon.level).room(Dungeon.hero.pos) instanceof MassGraveRoom) {
|
||||
return true;
|
||||
}
|
||||
|
||||
//or if they are corpse dust cursed
|
||||
for (Buff b : Dungeon.hero.buffs()) {
|
||||
if (b instanceof CorpseDust.DustGhostSpawner) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
} else if (type == 2){
|
||||
//hero is in the ritual room and all 4 candles are with them
|
||||
if (((RegularLevel) Dungeon.level).room(Dungeon.hero.pos) instanceof RitualSiteRoom) {
|
||||
int candles = 0;
|
||||
if (Dungeon.hero.belongings.getItem(CeremonialCandle.class) != null){
|
||||
candles += Dungeon.hero.belongings.getItem(CeremonialCandle.class).quantity();
|
||||
}
|
||||
|
||||
if (candles >= 4){
|
||||
return true;
|
||||
}
|
||||
|
||||
for (Heap h : Dungeon.level.heaps.valueList()){
|
||||
if (((RegularLevel) Dungeon.level).room(h.pos) instanceof RitualSiteRoom){
|
||||
for (Item i : h.items){
|
||||
if (i instanceof CeremonialCandle){
|
||||
candles += i.quantity();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (candles >= 4){
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//or they have summoned but not killed the newborn elemental
|
||||
for (Mob m : Dungeon.level.mobs) {
|
||||
if (m instanceof Elemental.NewbornFireElemental) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
} else {
|
||||
//hero is in the rot garden room and the rot heart is alive
|
||||
if (((RegularLevel) Dungeon.level).room(Dungeon.hero.pos) instanceof RotGardenRoom) {
|
||||
for (Mob m : Dungeon.level.mobs) {
|
||||
if (m instanceof RotHeart) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void complete() {
|
||||
wand1 = null;
|
||||
|
||||
@@ -32,8 +32,11 @@ import com.shatteredpixel.shatteredpixeldungeon.items.Item;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.audio.Music;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
import com.watabou.utils.Bundle;
|
||||
import com.watabou.utils.Callback;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -141,6 +144,18 @@ public class CorpseDust extends Item {
|
||||
mob.die(null);
|
||||
}
|
||||
}
|
||||
Game.runOnRenderThread(new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
//maybe have a fade here?
|
||||
Music.INSTANCE.fadeOut(1f, new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
Dungeon.level.playLevelMusic();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static String SPAWNPOWER = "spawnpower";
|
||||
|
||||
@@ -51,6 +51,7 @@ import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.Group;
|
||||
import com.watabou.noosa.Image;
|
||||
import com.watabou.noosa.Tilemap;
|
||||
import com.watabou.noosa.audio.Music;
|
||||
import com.watabou.utils.Callback;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
@@ -59,6 +60,11 @@ import java.util.Arrays;
|
||||
|
||||
public class MiningLevel extends CavesLevel {
|
||||
|
||||
@Override
|
||||
public void playLevelMusic() {
|
||||
Music.INSTANCE.play(Assets.Music.CAVES_TENSE, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ArrayList<Room> initRooms() {
|
||||
ArrayList<Room> initRooms = new ArrayList<>();
|
||||
|
||||
@@ -24,6 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.levels;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.Wandmaker;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.FlameParticle;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
|
||||
@@ -45,10 +46,12 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.traps.TeleportationTrap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.traps.ToxicTrap;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
|
||||
import com.watabou.noosa.Game;
|
||||
import com.watabou.noosa.Group;
|
||||
import com.watabou.noosa.Halo;
|
||||
import com.watabou.noosa.audio.Music;
|
||||
import com.watabou.noosa.particles.Emitter;
|
||||
import com.watabou.utils.Callback;
|
||||
import com.watabou.utils.PointF;
|
||||
import com.watabou.utils.Random;
|
||||
|
||||
@@ -63,7 +66,7 @@ public class PrisonLevel extends RegularLevel {
|
||||
|
||||
@Override
|
||||
public void playLevelMusic() {
|
||||
if (Statistics.amuletObtained){
|
||||
if (Wandmaker.Quest.active() || Statistics.amuletObtained){
|
||||
Music.INSTANCE.play(Assets.Music.PRISON_TENSE, true);
|
||||
} else {
|
||||
Music.INSTANCE.playTracks(
|
||||
@@ -71,6 +74,7 @@ public class PrisonLevel extends RegularLevel {
|
||||
new float[]{1, 1, 0.5f},
|
||||
false);
|
||||
}
|
||||
wandmakerQuestWasActive = Wandmaker.Quest.active();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -132,6 +136,34 @@ public class PrisonLevel extends RegularLevel {
|
||||
1, 1, 1, 1, 1, 1 };
|
||||
}
|
||||
|
||||
private Boolean wandmakerQuestWasActive = null;
|
||||
|
||||
@Override
|
||||
public void occupyCell(Char ch) {
|
||||
super.occupyCell(ch);
|
||||
if (ch == Dungeon.hero) {
|
||||
if (wandmakerQuestWasActive == null) {
|
||||
wandmakerQuestWasActive = Wandmaker.Quest.active();
|
||||
return;
|
||||
}
|
||||
if (Wandmaker.Quest.active() != wandmakerQuestWasActive) {
|
||||
wandmakerQuestWasActive = Wandmaker.Quest.active();
|
||||
|
||||
Game.runOnRenderThread(new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
Music.INSTANCE.fadeOut(1f, new Callback() {
|
||||
@Override
|
||||
public void call() {
|
||||
Dungeon.level.playLevelMusic();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String tileName( int tile ) {
|
||||
switch (tile) {
|
||||
|
||||
@@ -67,7 +67,7 @@ public class SewerLevel extends RegularLevel {
|
||||
}
|
||||
|
||||
public void playLevelMusic(){
|
||||
if (Statistics.amuletObtained){
|
||||
if (Ghost.Quest.active() || Statistics.amuletObtained){
|
||||
Music.INSTANCE.play(Assets.Music.SEWERS_TENSE, true);
|
||||
} else {
|
||||
Music.INSTANCE.playTracks(
|
||||
|
||||
Reference in New Issue
Block a user