v1.2.0: implemented boss music!

This commit is contained in:
Evan Debenham
2022-03-16 12:43:04 -04:00
parent d761db0838
commit 0d3c865095
27 changed files with 245 additions and 33 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -115,18 +115,23 @@ public class Assets {
public static final String SEWERS_1 = "music/sewers_1.ogg";
public static final String SEWERS_2 = "music/sewers_2.ogg";
public static final String SEWERS_BOSS = "music/sewers_boss.ogg";
public static final String PRISON_1 = "music/prison_1.ogg";
public static final String PRISON_2 = "music/prison_2.ogg";
public static final String PRISON_BOSS = "music/prison_boss.ogg";
public static final String CAVES_1 = "music/caves_1.ogg";
public static final String CAVES_2 = "music/caves_2.ogg";
public static final String CAVES_BOSS = "music/caves_boss.ogg";
public static final String CITY_1 = "music/city_1.ogg";
public static final String CITY_2 = "music/city_2.ogg";
public static final String CITY_BOSS = "music/city_boss.ogg";
public static final String HALLS_1 = "music/halls_1.ogg";
public static final String HALLS_2 = "music/halls_2.ogg";
public static final String HALLS_BOSS = "music/halls_boss.ogg";
}
public static class Sounds {

View File

@@ -203,7 +203,7 @@ public class Dungeon {
quickslot.reset();
QuickSlotButton.reset();
depth = 0;
depth = 24;
gold = 0;
energy = 0;

View File

@@ -228,6 +228,7 @@ public class Goo extends Mob {
public void damage(int dmg, Object src) {
if (!BossHealthBar.isAssigned()){
BossHealthBar.assignBoss( this );
Dungeon.level.seal();
}
boolean bleeding = (HP*2 <= HT);
super.damage(dmg, src);
@@ -271,6 +272,7 @@ public class Goo extends Mob {
super.notice();
if (!BossHealthBar.isAssigned()) {
BossHealthBar.assignBoss(this);
Dungeon.level.seal();
yell(Messages.get(this, "notice"));
for (Char ch : Actor.chars()){
if (ch instanceof DriedRose.GhostHero){

View File

@@ -21,6 +21,7 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Challenges;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.Statistics;
@@ -53,7 +54,10 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.YogSprite;
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.Game;
import com.watabou.noosa.audio.Music;
import com.watabou.utils.Bundle;
import com.watabou.utils.Callback;
import com.watabou.utils.GameMath;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Random;
@@ -475,6 +479,12 @@ public class YogDzewa extends Mob {
((DriedRose.GhostHero) ch).sayBoss();
}
}
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
Music.INSTANCE.play(Assets.Music.HALLS_BOSS, true);
}
});
if (phase == 0) {
phase = 1;
summonCooldown = Random.NormalFloat(MIN_SUMMON_CD, MAX_SUMMON_CD);

View File

@@ -48,12 +48,15 @@ import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
import com.watabou.noosa.Camera;
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.noosa.audio.Sample;
import com.watabou.noosa.particles.Emitter;
import com.watabou.utils.Bundle;
import com.watabou.utils.Callback;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Point;
import com.watabou.utils.Random;
@@ -68,6 +71,21 @@ public class CavesBossLevel extends Level {
color2 = 0xb9d661;
}
@Override
public void playLevelMusic() {
if (locked){
Music.INSTANCE.play(Assets.Music.CAVES_BOSS, true);
//if wall isn't broken
} else if (map[14 + 13*width()] == Terrain.SIGN){
Music.INSTANCE.stop();
} else {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.CAVES_1, Assets.Music.CAVES_2, Assets.Music.CAVES_2},
new float[]{1, 1, 0.5f},
false);
}
}
@Override
public String tilesTex() {
return Assets.Environment.TILES_CAVES;
@@ -266,6 +284,13 @@ public class CavesBossLevel extends Level {
} while (!openSpace[boss.pos] || map[boss.pos] == Terrain.EMPTY_SP || Actor.findChar(boss.pos) != null);
GameScene.add( boss );
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
Music.INSTANCE.play(Assets.Music.CAVES_BOSS, true);
}
});
}
@Override
@@ -288,6 +313,13 @@ public class CavesBossLevel extends Level {
Dungeon.observe();
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
Music.INSTANCE.stop();
}
});
}
public void activatePylon(){

View File

@@ -45,6 +45,7 @@ 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.audio.Music;
import com.watabou.noosa.particles.PixelParticle;
import com.watabou.utils.PointF;
import com.watabou.utils.Random;
@@ -57,7 +58,15 @@ public class CavesLevel extends RegularLevel {
color1 = 0x534f3e;
color2 = 0xb9d661;
}
@Override
public void playLevelMusic() {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.CAVES_1, Assets.Music.CAVES_2, Assets.Music.CAVES_2},
new float[]{1, 1, 0.5f},
false);
}
@Override
protected ArrayList<Room> initRooms() {
return Blacksmith.Quest.spawn(super.initRooms());

View File

@@ -37,10 +37,13 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.ImpShopRoo
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
import com.watabou.noosa.Game;
import com.watabou.noosa.Group;
import com.watabou.noosa.Tilemap;
import com.watabou.noosa.audio.Music;
import com.watabou.noosa.tweeners.AlphaTweener;
import com.watabou.utils.Bundle;
import com.watabou.utils.Callback;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Point;
import com.watabou.utils.Random;
@@ -80,6 +83,21 @@ public class CityBossLevel extends Level {
private ImpShopRoom impShop;
@Override
public void playLevelMusic() {
if (locked){
Music.INSTANCE.play(Assets.Music.CITY_BOSS, true);
//if top door isn't unlocked
} else if (map[topDoor] == Terrain.LOCKED_DOOR){
Music.INSTANCE.stop();
} else {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.CITY_1, Assets.Music.CITY_2, Assets.Music.CITY_2},
new float[]{1, 1, 0.5f},
false);
}
}
@Override
public String tilesTex() {
return Assets.Environment.TILES_CITY;
@@ -290,6 +308,13 @@ public class CityBossLevel extends Level {
set( bottomDoor, Terrain.LOCKED_DOOR );
GameScene.updateMap( bottomDoor );
Dungeon.observe();
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
Music.INSTANCE.play(Assets.Music.CITY_BOSS, true);
}
});
}
@Override
@@ -306,6 +331,13 @@ public class CityBossLevel extends Level {
spawnShop();
}
Dungeon.observe();
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
Music.INSTANCE.stop();
}
});
}
private void spawnShop(){

View File

@@ -46,6 +46,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.traps.WeakeningTrap;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
import com.watabou.noosa.Group;
import com.watabou.noosa.audio.Music;
import com.watabou.noosa.particles.Emitter;
import com.watabou.noosa.particles.PixelParticle;
import com.watabou.utils.PointF;
@@ -57,7 +58,15 @@ public class CityLevel extends RegularLevel {
color1 = 0x4b6636;
color2 = 0xf2f2f2;
}
@Override
public void playLevelMusic() {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.CITY_1, Assets.Music.CITY_2, Assets.Music.CITY_2},
new float[]{1, 1, 0.5f},
false);
}
@Override
protected int standardRooms(boolean forceMax) {
if (forceMax) return 8;

View File

@@ -37,9 +37,12 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.painters.Painter;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
import com.watabou.noosa.Game;
import com.watabou.noosa.Group;
import com.watabou.noosa.Tilemap;
import com.watabou.noosa.audio.Music;
import com.watabou.utils.Bundle;
import com.watabou.utils.Callback;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Random;
@@ -60,6 +63,21 @@ public class HallsBossLevel extends Level {
private static final int ROOM_TOP = 8;
private static final int ROOM_BOTTOM = ROOM_TOP + 8;
@Override
public void playLevelMusic() {
if (locked){
Music.INSTANCE.play(Assets.Music.HALLS_BOSS, true);
//if exit isn't unlocked
} else if (map[exit] != Terrain.EXIT){
Music.INSTANCE.stop();
} else {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.HALLS_1, Assets.Music.HALLS_2, Assets.Music.HALLS_2},
new float[]{1, 1, 0.5f},
false);
}
}
@Override
public String tilesTex() {
return Assets.Environment.TILES_HALLS;
@@ -230,6 +248,13 @@ public class HallsBossLevel extends Level {
}
Dungeon.observe();
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
Music.INSTANCE.stop();
}
});
}
@Override

View File

@@ -51,6 +51,7 @@ import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
import com.watabou.glwrap.Blending;
import com.watabou.noosa.Game;
import com.watabou.noosa.Group;
import com.watabou.noosa.audio.Music;
import com.watabou.noosa.particles.PixelParticle;
import com.watabou.utils.PointF;
import com.watabou.utils.Random;
@@ -67,6 +68,14 @@ public class HallsLevel extends RegularLevel {
color2 = 0xa68521;
}
@Override
public void playLevelMusic() {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.HALLS_1, Assets.Music.HALLS_2, Assets.Music.HALLS_2},
new float[]{1, 1, 0.5f},
false);
}
@Override
protected ArrayList<Room> initRooms() {
ArrayList<Room> rooms = super.initRooms();

View File

@@ -305,6 +305,10 @@ public abstract class Level implements Bundlable {
}
createMobs();
}
public void playLevelMusic(){
//do nothing by default
}
@Override
public void restoreFromBundle( Bundle bundle ) {

View File

@@ -49,12 +49,15 @@ import com.shatteredpixel.shatteredpixeldungeon.tiles.CustomTilemap;
import com.shatteredpixel.shatteredpixeldungeon.ui.TargetHealthIndicator;
import com.shatteredpixel.shatteredpixeldungeon.utils.BArray;
import com.watabou.noosa.Camera;
import com.watabou.noosa.Game;
import com.watabou.noosa.Group;
import com.watabou.noosa.Tilemap;
import com.watabou.noosa.audio.Music;
import com.watabou.noosa.audio.Sample;
import com.watabou.noosa.tweeners.AlphaTweener;
import com.watabou.utils.Bundlable;
import com.watabou.utils.Bundle;
import com.watabou.utils.Callback;
import com.watabou.utils.PathFinder;
import com.watabou.utils.Point;
import com.watabou.utils.Random;
@@ -82,7 +85,21 @@ public class PrisonBossLevel extends Level {
private State state;
private Tengu tengu;
@Override
public void playLevelMusic() {
if (state == State.START){
Music.INSTANCE.stop();
} else if (state == State.WON) {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.PRISON_1, Assets.Music.PRISON_2, Assets.Music.PRISON_2},
new float[]{1, 1, 0.5f},
false);
} else {
Music.INSTANCE.play(Assets.Music.PRISON_BOSS, true);
}
}
public State state(){
return state;
}
@@ -395,6 +412,13 @@ public class PrisonBossLevel extends Level {
tengu.notice();
state = State.FIGHT_START;
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
Music.INSTANCE.play(Assets.Music.PRISON_BOSS, true);
}
});
break;
case FIGHT_START:
@@ -485,6 +509,12 @@ public class PrisonBossLevel extends Level {
Sample.INSTANCE.play(Assets.Sounds.BLAST);
state = State.WON;
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
Music.INSTANCE.stop();
}
});
break;
}
}

View File

@@ -46,6 +46,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
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.PointF;
import com.watabou.utils.Random;
@@ -58,7 +59,15 @@ public class PrisonLevel extends RegularLevel {
color1 = 0x6a723d;
color2 = 0x88924c;
}
@Override
public void playLevelMusic() {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.PRISON_1, Assets.Music.PRISON_2, Assets.Music.PRISON_2},
new float[]{1, 1, 0.5f},
false);
}
@Override
protected ArrayList<Room> initRooms() {
return Wandmaker.Quest.spawnRoom(super.initRooms());

View File

@@ -21,9 +21,12 @@
package com.shatteredpixel.shatteredpixeldungeon.levels;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Bones;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Goo;
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob;
import com.shatteredpixel.shatteredpixeldungeon.items.Heap;
import com.shatteredpixel.shatteredpixeldungeon.items.Item;
import com.shatteredpixel.shatteredpixeldungeon.levels.builders.Builder;
@@ -37,8 +40,12 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.sewerboss.SewerBoss
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.sewerboss.SewerBossExitRoom;
import com.shatteredpixel.shatteredpixeldungeon.levels.rooms.standard.StandardRoom;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.BossHealthBar;
import com.watabou.noosa.Game;
import com.watabou.noosa.Group;
import com.watabou.noosa.audio.Music;
import com.watabou.utils.Bundle;
import com.watabou.utils.Callback;
import com.watabou.utils.Random;
import java.util.ArrayList;
@@ -52,6 +59,32 @@ public class SewerBossLevel extends SewerLevel {
private int stairs = 0;
@Override
public void playLevelMusic() {
if (locked){
Music.INSTANCE.play(Assets.Music.SEWERS_BOSS, true);
return;
}
boolean gooAlive = false;
for (Mob m : mobs){
if (m instanceof Goo) {
gooAlive = true;
break;
}
}
if (gooAlive){
Music.INSTANCE.stop();
} else {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.SEWERS_1, Assets.Music.SEWERS_2, Assets.Music.SEWERS_2},
new float[]{1, 1, 0.5f},
false);
}
}
@Override
protected ArrayList<Room> initRooms() {
ArrayList<Room> initRooms = new ArrayList<>();
@@ -144,6 +177,13 @@ public class SewerBossLevel extends SewerLevel {
stairs = entrance;
entrance = 0;
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
Music.INSTANCE.play(Assets.Music.SEWERS_BOSS, true);
}
});
}
}
@@ -158,6 +198,12 @@ public class SewerBossLevel extends SewerLevel {
set( entrance, Terrain.ENTRANCE );
GameScene.updateMap( entrance );
Game.runOnRenderThread(new Callback() {
@Override
public void call() {
Music.INSTANCE.stop();
}
});
}
}

View File

@@ -44,6 +44,7 @@ import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.tiles.DungeonTilemap;
import com.watabou.noosa.Game;
import com.watabou.noosa.Group;
import com.watabou.noosa.audio.Music;
import com.watabou.noosa.particles.Emitter;
import com.watabou.noosa.particles.PixelParticle;
import com.watabou.utils.ColorMath;
@@ -56,6 +57,13 @@ public class SewerLevel extends RegularLevel {
color1 = 0x48763c;
color2 = 0x59994a;
}
public void playLevelMusic(){
Music.INSTANCE.playTracks(
new String[]{Assets.Music.SEWERS_1, Assets.Music.SEWERS_2, Assets.Music.SEWERS_2},
new float[]{1, 1, 0.5f},
false);
}
@Override
protected int standardRooms(boolean forceMax) {

View File

@@ -198,32 +198,7 @@ public class GameScene extends PixelScene {
return;
}
if (Dungeon.depth <= 5) {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.SEWERS_1, Assets.Music.SEWERS_2, Assets.Music.SEWERS_2},
new float[]{1, 1, 0.5f},
false);
} else if (Dungeon.depth <= 10) {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.PRISON_1, Assets.Music.PRISON_2, Assets.Music.PRISON_2},
new float[]{1, 1, 0.5f},
false);
} else if (Dungeon.depth <= 15) {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.CAVES_1, Assets.Music.CAVES_2, Assets.Music.CAVES_2},
new float[]{1, 1, 0.5f},
false);
} else if (Dungeon.depth <= 20) {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.CITY_1, Assets.Music.CITY_2, Assets.Music.CITY_2},
new float[]{1, 1, 0.5f},
false);
} else {
Music.INSTANCE.playTracks(
new String[]{Assets.Music.HALLS_1, Assets.Music.HALLS_2, Assets.Music.HALLS_2},
new float[]{1, 1, 0.5f},
false);
}
Dungeon.level.playLevelMusic();
SPDSettings.lastClass(Dungeon.hero.heroClass.ordinal());

View File

@@ -49,6 +49,8 @@ public enum Icons {
//grey icons, mainly used for buttons, spacing for 16x16
EXIT,
DISPLAY, //2 separate images, changes based on orientation
DISPLAY_LAND,
DISPLAY_PORT,
DATA,
AUDIO,
LANGS,
@@ -164,10 +166,15 @@ public enum Icons {
break;
case DISPLAY:
if (!PixelScene.landscape()){
icon.frame( icon.texture.uvRectBySize( 16, 32, 12, 16 ) );
return get(DISPLAY_PORT);
} else {
icon.frame( icon.texture.uvRectBySize( 32, 32, 16, 12 ) );
return get(DISPLAY_LAND);
}
case DISPLAY_PORT:
icon.frame( icon.texture.uvRectBySize( 16, 32, 12, 16 ) );
break;
case DISPLAY_LAND:
icon.frame( icon.texture.uvRectBySize( 32, 32, 16, 12 ) );
break;
case DATA:
icon.frame( icon.texture.uvRectBySize( 48, 32, 16, 15 ) );

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.