connect majority actions to sound effects;add more placeholder loops and effects

This commit is contained in:
jorsi
2020-05-30 19:48:44 -04:00
parent 71786c3671
commit 1d84e5f85c
20 changed files with 202 additions and 119 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+97 -38
View File
@@ -2,30 +2,28 @@
* Module that takes care of audio playback * Module that takes care of audio playback
*/ */
var AudioEngine = { var AudioEngine = {
canPlayAudio: false, FADE_TIME: 1,
AUDIO_BUFFER_CACHE: {}, AUDIO_BUFFER_CACHE: {},
audioContext: null, audioContext: null,
master: null, master: null,
tracks: {
// Tracks for playing music and sound effects 'bg1': null,
// 0 - Background music 'bg2': null,
// 1 - Background music 'events': null,
// 2 - Event music 'sfx': null
// 3 - Sound effects },
tracks: null, currentBackgroundChannel: 'bg1',
currentBackgroundChannel: 0, currentBackgroundAudio: null,
currentTrack: null, currentEventAudio: null,
init: function(options) { init: function(options) {
// for legacy browsers // for legacy browsers
AudioEngine.audioContext = new (window.AudioContext || window.webkitAudioContext); AudioEngine.audioContext = new (window.AudioContext || window.webkitAudioContext);
audioLog('starting audio engine'); audioLog('starting audio engine');
console.log(AudioEngine.audioContext); console.log(AudioEngine.audioContext);
audioLog('state: ' + AudioEngine.audioContext.state);
if (AudioEngine.audioContext.state === 'suspended') { if (AudioEngine.audioContext.state === 'suspended') {
AudioEngine.audioContext.resume().then(function () { AudioEngine.audioContext.resume().then(function () {
AudioEngine.createChannels(); AudioEngine.createChannels();
AudioEngine.canPlayAudio = true;
}); });
} else { } else {
AudioEngine.createChannels(); AudioEngine.createChannels();
@@ -34,72 +32,133 @@ var AudioEngine = {
createChannels() { createChannels() {
// create master // create master
AudioEngine.master = AudioEngine.audioContext.createGain(); AudioEngine.master = AudioEngine.audioContext.createGain();
AudioEngine.master.gain.setValueAtTime(1.0, AudioEngine.audioContext.currentTime);
AudioEngine.master.connect(AudioEngine.audioContext.destination); AudioEngine.master.connect(AudioEngine.audioContext.destination);
// create 4 tracks to output to master // create 4 tracks to output to master
AudioEngine.tracks = []; AudioEngine.tracks['bg1'] = AudioEngine.audioContext.createGain();
for (var i = 0; i < 4; i++) { AudioEngine.tracks['bg1'].connect(AudioEngine.master);
AudioEngine.tracks[i] = AudioEngine.audioContext.createGain(); AudioEngine.tracks['bg1'].gain.setValueAtTime(1.0, AudioEngine.audioContext.currentTime);
AudioEngine.tracks[i].connect(AudioEngine.master); AudioEngine.tracks['bg2'] = AudioEngine.audioContext.createGain();
} AudioEngine.tracks['bg2'].connect(AudioEngine.master);
AudioEngine.tracks['bg2'].gain.setValueAtTime(1.0, AudioEngine.audioContext.currentTime);
AudioEngine.tracks['events'] = AudioEngine.audioContext.createGain();
AudioEngine.tracks['events'].connect(AudioEngine.master);
AudioEngine.tracks['events'].gain.setValueAtTime(1.0, AudioEngine.audioContext.currentTime);
AudioEngine.tracks['sfx'] = AudioEngine.audioContext.createGain();
AudioEngine.tracks['sfx'].connect(AudioEngine.master);
AudioEngine.tracks['sfx'].gain.setValueAtTime(1.0, AudioEngine.audioContext.currentTime);
},
options: {}, // Nothing for now,
_canPlayAudio: function() {
if (AudioEngine.audioContext.state === 'suspended') {
audioLog('can\'t play audio');
return false;
}
return true;
}, },
options: {}, // Nothing for now
_playSound: function(buffer) { _playSound: function(buffer) {
if (!AudioEngine.canPlayAudio) return; if (!AudioEngine._canPlayAudio()) return;
var source = AudioEngine.audioContext.createBufferSource(); var source = AudioEngine.audioContext.createBufferSource();
source.buffer = buffer; source.buffer = buffer;
source.connect(AudioEngine.tracks[1]); source.connect(AudioEngine.tracks['sfx']);
source.start(AudioEngine.audioContext.currentTime); source.start(AudioEngine.audioContext.currentTime);
}, },
_fadeTrack: function(buffer) { _fadeTrack: function(buffer) {
if (!AudioEngine.canPlayAudio) return; if (!AudioEngine._canPlayAudio()) return;
var newTrack = AudioEngine.audioContext.createBufferSource(); audioLog('_fadeMusic');
newTrack.buffer = buffer; console.log(buffer);
newTrack.loop = true;
var bufferSource = AudioEngine.audioContext.createBufferSource();
bufferSource.buffer = buffer;
bufferSource.loop = true;
// figure out which background track to start on // figure out which background track to start on
// in order to do crossfade // in order to do crossfade
var nextBackgroundChannel; var nextBackgroundChannel;
if (AudioEngine.currentBackgroundChannel === 0) { if (AudioEngine.currentBackgroundChannel === 'bg1') {
nextBackgroundChannel = 1; nextBackgroundChannel = 'bg2';
} else { } else {
nextBackgroundChannel = 0; nextBackgroundChannel = 'bg1';
} }
// fade in new track // fade in new track
var fadeTime = AudioEngine.audioContext.currentTime + 2.0; var fadeTime = AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME;
newTrack.connect(AudioEngine.tracks[nextBackgroundChannel]); bufferSource.connect(AudioEngine.tracks[nextBackgroundChannel]);
newTrack.start(0); bufferSource.start(AudioEngine.audioContext.currentTime);
AudioEngine.tracks[nextBackgroundChannel].gain.setValueAtTime(0.0, AudioEngine.audioContext.currentTime); AudioEngine.tracks[nextBackgroundChannel].gain.setValueAtTime(0.0, AudioEngine.audioContext.currentTime);
AudioEngine.tracks[nextBackgroundChannel].gain.linearRampToValueAtTime(.1, fadeTime); AudioEngine.tracks[nextBackgroundChannel].gain.linearRampToValueAtTime(1.0, fadeTime);
// fade out old track // fade out old track
AudioEngine.tracks[AudioEngine.currentBackgroundChannel].gain.linearRampToValueAtTime(0.0, fadeTime); AudioEngine.tracks[AudioEngine.currentBackgroundChannel].gain.linearRampToValueAtTime(0.0, fadeTime);
if (AudioEngine.currentTrack) { if (AudioEngine.currentBackgroundAudio) {
AudioEngine.currentTrack.stop(fadeTime + 0.3); // make sure fade has completed AudioEngine.currentBackgroundAudio.stop(fadeTime + 0.3); // make sure fade has completed
} }
// switch background track // switch background track
AudioEngine.currentBackgroundChannel = nextBackgroundChannel; AudioEngine.currentBackgroundChannel = nextBackgroundChannel;
AudioEngine.currentTrack = newTrack; AudioEngine.currentBackgroundAudio = bufferSource;
},
_playEvent: function(buffer) {
if (!AudioEngine._canPlayAudio()) return;
var bufferSource = AudioEngine.audioContext.createBufferSource();
bufferSource.buffer = buffer;
bufferSource.loop = true;
var fadeTime = AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME * 2;
// turn down background music
AudioEngine.tracks['bg1'].gain.linearRampToValueAtTime(0.2, fadeTime);
AudioEngine.tracks['bg2'].gain.linearRampToValueAtTime(0.2, fadeTime);
// fade in event music
bufferSource.connect(AudioEngine.tracks['events']);
bufferSource.start(0);
AudioEngine.currentEventAudio = bufferSource;
AudioEngine.tracks['events'].gain.setValueAtTime(0.0, AudioEngine.audioContext.currentTime);
AudioEngine.tracks['events'].gain.linearRampToValueAtTime(1.0, fadeTime);
},
_stopEventMusic: function() {
var fadeTime = AudioEngine.audioContext.currentTime + AudioEngine.FADE_TIME * 2;
// fade out event music and stop
AudioEngine.tracks['events'].gain.linearRampToValueAtTime(0.0, fadeTime);
if (AudioEngine.currentEventAudio) {
AudioEngine.currentEventAudio.stop(fadeTime + 1); // make sure fade has completed
AudioEngine.currentEventAudio = null;
}
// turn up background music
AudioEngine.tracks[AudioEngine.currentBackgroundChannel].gain.linearRampToValueAtTime(1.0, fadeTime);
}, },
changeMusic: function(src) { changeMusic: function(src) {
AudioEngine.loadAudioFile(src) AudioEngine.loadAudioFile(src)
.then(function (buffer) { .then(function (buffer) {
audioLog('changeMusic: ' + src);
AudioEngine._fadeTrack(buffer); AudioEngine._fadeTrack(buffer);
}); });
audioLog('change music: ' + src); },
audioLog('audio engine status: ' + AudioEngine.audioContext.state); playEventMusic: function(src) {
AudioEngine.loadAudioFile(src)
.then(function (buffer) {
audioLog('playEventMusic: ' + src);
AudioEngine._playEvent(buffer);
});
},
stopEventMusic: function() {
audioLog('stopEventMusic');
AudioEngine._stopEventMusic();
}, },
playSound: function(src) { playSound: function(src) {
AudioEngine.loadAudioFile(src) AudioEngine.loadAudioFile(src)
.then(function (buffer) { .then(function (buffer) {
audioLog('playSound: ' + src);
AudioEngine._playSound(buffer); AudioEngine._playSound(buffer);
}); });
audioLog('play sound: ' + src);
audioLog('audio engine status: ' + AudioEngine.audioContext.state);
}, },
loadAudioFile(src) { loadAudioFile(src) {
if (AudioEngine.AUDIO_BUFFER_CACHE[src]) { if (AudioEngine.AUDIO_BUFFER_CACHE[src]) {
+3 -2
View File
@@ -540,7 +540,6 @@ var Events = {
clearTimeout(Events._enemyAttackTimer); clearTimeout(Events._enemyAttackTimer);
Events.endEvent(); Events.endEvent();
World.die(); World.die();
AudioEngine.playSound(Events.SOUNDS['lose-fight']); AudioEngine.playSound(Events.SOUNDS['lose-fight']);
} }
}); });
@@ -1044,7 +1043,7 @@ var Events = {
Events.startEvent(possibleEvents[r]); Events.startEvent(possibleEvents[r]);
console.log('event', possibleEvents[r].audio); console.log('event', possibleEvents[r].audio);
AudioEngine.playSound(Events.SOUNDS['trigger-event']); AudioEngine.playSound(Events.SOUNDS['trigger-event']);
AudioEngine.changeMusic(possibleEvents[r].audio); AudioEngine.playEventMusic(possibleEvents[r].audio);
} }
} }
@@ -1066,6 +1065,7 @@ var Events = {
// play audio only when fight is possible // play audio only when fight is possible
if (possibleFights.length > 0) { if (possibleFights.length > 0) {
AudioEngine.playSound(Events.SOUNDS['trigger-fight']); AudioEngine.playSound(Events.SOUNDS['trigger-fight']);
AudioEngine.playEventMusic(possibleFights[r].audio);
} }
}, },
@@ -1112,6 +1112,7 @@ var Events = {
}, },
endEvent: function() { endEvent: function() {
AudioEngine.stopEventMusic();
Events.eventPanel().animate({opacity:0}, Events._PANEL_FADE, 'linear', function() { Events.eventPanel().animate({opacity:0}, Events._PANEL_FADE, 'linear', function() {
Events.eventPanel().remove(); Events.eventPanel().remove();
Events.activeEvent().eventPanel = null; Events.activeEvent().eventPanel = null;
+2
View File
@@ -607,6 +607,7 @@ var Outside = {
Notifications.notify(Outside, _("dry brush and dead branches litter the forest floor")); Notifications.notify(Outside, _("dry brush and dead branches litter the forest floor"));
var gatherAmt = $SM.get('game.buildings["cart"]', true) > 0 ? 50 : 10; var gatherAmt = $SM.get('game.buildings["cart"]', true) > 0 ? 50 : 10;
$SM.add('stores.wood', gatherAmt); $SM.add('stores.wood', gatherAmt);
AudioEngine.playSound(Outside.SOUNDS['gather-wood']);
}, },
checkTraps: function() { checkTraps: function() {
@@ -647,6 +648,7 @@ var Outside = {
Notifications.notify(Outside, s); Notifications.notify(Outside, s);
$SM.addM('stores', drops); $SM.addM('stores', drops);
AudioEngine.playSound(Outside.SOUNDS['check-traps']);
}, },
handleStateUpdates: function(e){ handleStateUpdates: function(e){
+1
View File
@@ -327,6 +327,7 @@ var Path = {
World.onArrival(); World.onArrival();
$('#outerSlider').animate({left: '-700px'}, 300); $('#outerSlider').animate({left: '-700px'}, 300);
Engine.activeModule = World; Engine.activeModule = World;
AudioEngine.playSound(Path.SOUNDS['embark']);
}, },
handleStateUpdates: function(e){ handleStateUpdates: function(e){
+77 -74
View File
@@ -18,43 +18,7 @@ var Room = {
}, },
SOUNDS: { SOUNDS: {
'light-fire': '/audio/light-fire.wav', 'light-fire': '/audio/light-fire.wav',
'stoke-fire': '/audio/stoke-fire.wav', 'stoke-fire': '/audio/stoke-fire.wav'
'build-trap': '/audio/build-trap.wav',
'build-cart': '/audio/build-cart.wav',
'build-hut': '/audio/build-hut.wav',
'build-lodge': '/audio/build-lodge.wav',
'build-trading-post': '/audio/build-trading-post.wav',
'build-tannery': '/audio/build-tannery.wav',
'build-smokehouse': '/audio/build-smokehouse.wav',
'build-workshop': '/audio/build-workshop.wav',
'build-steelworks': '/audio/build-steelworks.wav',
'build-armoury': '/audio/build-armoury.wav',
'craft-torch': '/audio/craft-torch.wav',
'craft-waterskin': '/audio/craft-waterskin.wav',
'craft-bone-spear': '/audio/craft-bone-spear.wav',
'craft-rucksack': '/audio/craft-rucksack.wav',
'craft-cask': '/audio/craft-cask.wav',
'craft-leather-armour': '/audio/craft-leather-armour.wav',
'craft-wagon': '/audio/craft-wagon.wav',
'craft-iron-armour': '/audio/craft-iron-armour.wav',
'craft-iron-sword': '/audio/craft-iron-sword.wav',
'craft-water-tank': '/audio/craft-water-tank.wav',
'craft-convoy': '/audio/craft-convoy.wav',
'craft-steel-armour': '/audio/craft-steel-armour.wav',
'craft-steel-sword': '/audio/craft-steel-sword.wav',
'craft-rifle': '/audio/craft-rifle.wav',
'buy-scales': '/audio/buy-scales.wav',
'buy-teeth': '/audio/buy-teeth.wav',
'buy-compass': '/audio/buy-compass.wav',
'buy-iron': '/audio/buy-iron.wav',
'buy-steel': '/audio/buy-steel.wav',
'buy-bolas': '/audio/buy-bolas.wav',
'buy-bullets': '/audio/buy-bullets.wav',
'buy-bayonet': '/audio/buy-bayonet.wav',
'buy-alien-alloy': '/audio/buy-alien-alloy.wav',
'buy-energy-cell': '/audio/buy-energy-cell.wav',
'buy-grenade': '/audio/buy-grenade.wav',
'buy-coal': '/audio/buy-coal.wav',
}, },
buttons: {}, buttons: {},
Craftables: { Craftables: {
@@ -71,7 +35,8 @@ var Room = {
return { return {
'wood': 10 + (n * 10) 'wood': 10 + (n * 10)
}; };
} },
audio: '/audio/build-trap.wav'
}, },
'cart': { 'cart': {
name: _('cart'), name: _('cart'),
@@ -84,7 +49,8 @@ var Room = {
return { return {
'wood': 30 'wood': 30
}; };
} },
audio: '/audio/build-cart.wav'
}, },
'hut': { 'hut': {
name: _('hut'), name: _('hut'),
@@ -99,7 +65,8 @@ var Room = {
return { return {
'wood': 100 + (n * 50) 'wood': 100 + (n * 50)
}; };
} },
audio: '/audio/build-hut.wav'
}, },
'lodge': { 'lodge': {
name: _('lodge'), name: _('lodge'),
@@ -114,7 +81,8 @@ var Room = {
fur: 10, fur: 10,
meat: 5 meat: 5
}; };
} },
audio: '/audio/build-lodge.wav'
}, },
'trading post': { 'trading post': {
name: _('trading post'), name: _('trading post'),
@@ -128,7 +96,8 @@ var Room = {
'wood': 400, 'wood': 400,
'fur': 100 'fur': 100
}; };
} },
audio: '/audio/build-trading-post.wav'
}, },
'tannery': { 'tannery': {
name: _('tannery'), name: _('tannery'),
@@ -142,7 +111,8 @@ var Room = {
'wood': 500, 'wood': 500,
'fur': 50 'fur': 50
}; };
} },
audio: '/audio/build-tannery.wav'
}, },
'smokehouse': { 'smokehouse': {
name: _('smokehouse'), name: _('smokehouse'),
@@ -156,7 +126,8 @@ var Room = {
'wood': 600, 'wood': 600,
'meat': 50 'meat': 50
}; };
} },
audio: '/audio/build-smokehouse.wav'
}, },
'workshop': { 'workshop': {
name: _('workshop'), name: _('workshop'),
@@ -171,7 +142,8 @@ var Room = {
'leather': 100, 'leather': 100,
'scales': 10 'scales': 10
}; };
} },
audio: '/audio/build-workshop.wav'
}, },
'steelworks': { 'steelworks': {
name: _('steelworks'), name: _('steelworks'),
@@ -186,7 +158,8 @@ var Room = {
'iron': 100, 'iron': 100,
'coal': 100 'coal': 100
}; };
} },
audio: '/audio/build-steelworks.wav'
}, },
'armoury': { 'armoury': {
name: _('armoury'), name: _('armoury'),
@@ -201,7 +174,8 @@ var Room = {
'steel': 100, 'steel': 100,
'sulphur': 50 'sulphur': 50
}; };
} },
audio: '/audio/build-armoury.wav'
}, },
'torch': { 'torch': {
name: _('torch'), name: _('torch'),
@@ -213,7 +187,8 @@ var Room = {
'wood': 1, 'wood': 1,
'cloth': 1 'cloth': 1
}; };
} },
audio: '/audio/craft-torch.wav'
}, },
'waterskin': { 'waterskin': {
name: _('waterskin'), name: _('waterskin'),
@@ -225,7 +200,8 @@ var Room = {
return { return {
'leather': 50 'leather': 50
}; };
} },
audio: '/audio/craft-waterskin.wav'
}, },
'cask': { 'cask': {
name: _('cask'), name: _('cask'),
@@ -238,7 +214,8 @@ var Room = {
'leather': 100, 'leather': 100,
'iron': 20 'iron': 20
}; };
} },
audio: '/audio/craft-cask.wav'
}, },
'water tank': { 'water tank': {
name: _('water tank'), name: _('water tank'),
@@ -251,7 +228,8 @@ var Room = {
'iron': 100, 'iron': 100,
'steel': 50 'steel': 50
}; };
} },
audio: '/audio/craft-water-tank.wav'
}, },
'bone spear': { 'bone spear': {
name: _('bone spear'), name: _('bone spear'),
@@ -263,7 +241,8 @@ var Room = {
'wood': 100, 'wood': 100,
'teeth': 5 'teeth': 5
}; };
} },
audio: '/audio/craft-bone-spear.wav'
}, },
'rucksack': { 'rucksack': {
name: _('rucksack'), name: _('rucksack'),
@@ -275,7 +254,8 @@ var Room = {
return { return {
'leather': 200 'leather': 200
}; };
} },
audio: '/audio/craft-rucksack.wav'
}, },
'wagon': { 'wagon': {
name: _('wagon'), name: _('wagon'),
@@ -288,7 +268,8 @@ var Room = {
'wood': 500, 'wood': 500,
'iron': 100 'iron': 100
}; };
} },
audio: '/audio/craft-wagon.wav'
}, },
'convoy': { 'convoy': {
name: _('convoy'), name: _('convoy'),
@@ -302,7 +283,8 @@ var Room = {
'iron': 200, 'iron': 200,
'steel': 100 'steel': 100
}; };
} },
audio: '/audio/craft-convoy.wav'
}, },
'l armour': { 'l armour': {
name: _('l armour'), name: _('l armour'),
@@ -314,7 +296,8 @@ var Room = {
'leather': 200, 'leather': 200,
'scales': 20 'scales': 20
}; };
} },
audio: '/audio/craft-leather-armour.wav'
}, },
'i armour': { 'i armour': {
name: _('i armour'), name: _('i armour'),
@@ -326,7 +309,8 @@ var Room = {
'leather': 200, 'leather': 200,
'iron': 100 'iron': 100
}; };
} },
audio: '/audio/craft-iron-armour.wav'
}, },
's armour': { 's armour': {
name: _('s armour'), name: _('s armour'),
@@ -338,7 +322,8 @@ var Room = {
'leather': 200, 'leather': 200,
'steel': 100 'steel': 100
}; };
} },
audio: '/audio/craft-steel-armour.wav'
}, },
'iron sword': { 'iron sword': {
name: _('iron sword'), name: _('iron sword'),
@@ -351,7 +336,8 @@ var Room = {
'leather': 50, 'leather': 50,
'iron': 20 'iron': 20
}; };
} },
audio: '/audio/craft-iron-sword.wav'
}, },
'steel sword': { 'steel sword': {
name: _('steel sword'), name: _('steel sword'),
@@ -364,7 +350,8 @@ var Room = {
'leather': 100, 'leather': 100,
'steel': 20 'steel': 20
}; };
} },
audio: '/audio/craft-steel-sword.wav'
}, },
'rifle': { 'rifle': {
name: _('rifle'), name: _('rifle'),
@@ -376,7 +363,8 @@ var Room = {
'steel': 50, 'steel': 50,
'sulphur': 50 'sulphur': 50
}; };
} },
audio: '/audio/craft-rifle.wav'
} }
}, },
@@ -385,13 +373,15 @@ var Room = {
type: 'good', type: 'good',
cost: function () { cost: function () {
return { fur: 150 }; return { fur: 150 };
} },
audio: '/audio/buy-scales.wav'
}, },
'teeth': { 'teeth': {
type: 'good', type: 'good',
cost: function () { cost: function () {
return { fur: 300 }; return { fur: 300 };
} },
audio: '/audio/buy-teeth.wav'
}, },
'iron': { 'iron': {
type: 'good', type: 'good',
@@ -400,7 +390,8 @@ var Room = {
'fur': 150, 'fur': 150,
'scales': 50 'scales': 50
}; };
} },
audio: '/audio/buy-iron.wav'
}, },
'coal': { 'coal': {
type: 'good', type: 'good',
@@ -409,7 +400,8 @@ var Room = {
'fur': 200, 'fur': 200,
'teeth': 50 'teeth': 50
}; };
} },
audio: '/audio/buy-coal.wav'
}, },
'steel': { 'steel': {
type: 'good', type: 'good',
@@ -419,7 +411,8 @@ var Room = {
'scales': 50, 'scales': 50,
'teeth': 50 'teeth': 50
}; };
} },
audio: '/audio/buy-steel.wav'
}, },
'medicine': { 'medicine': {
type: 'good', type: 'good',
@@ -427,7 +420,8 @@ var Room = {
return { return {
'scales': 50, 'teeth': 30 'scales': 50, 'teeth': 30
}; };
} },
audio: '/audio/buy-medicine.wav'
}, },
'bullets': { 'bullets': {
type: 'good', type: 'good',
@@ -435,7 +429,8 @@ var Room = {
return { return {
'scales': 10 'scales': 10
}; };
} },
audio: '/audio/buy-bullets.wav'
}, },
'energy cell': { 'energy cell': {
type: 'good', type: 'good',
@@ -444,7 +439,8 @@ var Room = {
'scales': 10, 'scales': 10,
'teeth': 10 'teeth': 10
}; };
} },
audio: '/audio/buy-energy-cell.wav'
}, },
'bolas': { 'bolas': {
type: 'weapon', type: 'weapon',
@@ -452,7 +448,8 @@ var Room = {
return { return {
'teeth': 10 'teeth': 10
}; };
} },
audio: '/audio/buy-bolas.wav'
}, },
'grenade': { 'grenade': {
type: 'weapon', type: 'weapon',
@@ -461,7 +458,8 @@ var Room = {
'scales': 100, 'scales': 100,
'teeth': 50 'teeth': 50
}; };
} },
audio: '/audio/buy-grenade.wav'
}, },
'bayonet': { 'bayonet': {
type: 'weapon', type: 'weapon',
@@ -470,7 +468,8 @@ var Room = {
'scales': 500, 'scales': 500,
'teeth': 250 'teeth': 250
}; };
} },
audio: '/audio/buy-bayonet.wav'
}, },
'alien alloy': { 'alien alloy': {
type: 'good', type: 'good',
@@ -480,7 +479,8 @@ var Room = {
'scales': 750, 'scales': 750,
'teeth': 300 'teeth': 300
}; };
} },
audio: '/audio/buy-alien-alloy.wav'
}, },
'compass': { 'compass': {
type: 'special', type: 'special',
@@ -491,7 +491,8 @@ var Room = {
scales: 20, scales: 20,
teeth: 10 teeth: 10
}; };
} },
audio: '/audio/buy-compass.wav'
} }
}, },
@@ -1000,6 +1001,7 @@ var Room = {
Notifications.notify(Room, good.buildMsg); Notifications.notify(Room, good.buildMsg);
$SM.add('stores["' + thing + '"]', 1); $SM.add('stores["' + thing + '"]', 1);
AudioEngine.playSound(good.audio);
}, },
build: function (buildBtn) { build: function (buildBtn) {
@@ -1054,6 +1056,7 @@ var Room = {
$SM.add('game.buildings["' + thing + '"]', 1); $SM.add('game.buildings["' + thing + '"]', 1);
break; break;
} }
AudioEngine.playSound(craftable.audio);
}, },
needsWorkshop: function (type) { needsWorkshop: function (type) {
+3
View File
@@ -121,6 +121,7 @@ var Ship = {
Button.setDisabled($('#liftoffButton', Ship.panel), false); Button.setDisabled($('#liftoffButton', Ship.panel), false);
} }
$('#hullRow .row_val', Ship.panel).text($SM.get('game.spaceShip.hull')); $('#hullRow .row_val', Ship.panel).text($SM.get('game.spaceShip.hull'));
AudioEngine.playSound(Ship.SOUNDS['reinforce-hull']);
}, },
upgradeEngine: function() { upgradeEngine: function() {
@@ -131,6 +132,7 @@ var Ship = {
$SM.add('stores["alien alloy"]', -Ship.ALLOY_PER_THRUSTER); $SM.add('stores["alien alloy"]', -Ship.ALLOY_PER_THRUSTER);
$SM.add('game.spaceShip.thrusters', 1); $SM.add('game.spaceShip.thrusters', 1);
$('#engineRow .row_val', Ship.panel).text($SM.get('game.spaceShip.thrusters')); $('#engineRow .row_val', Ship.panel).text($SM.get('game.spaceShip.thrusters'));
AudioEngine.playSound(Ship.SOUNDS['upgrade-engine']);
}, },
getMaxHull: function() { getMaxHull: function() {
@@ -175,6 +177,7 @@ var Ship = {
$('#outerSlider').animate({top: '700px'}, 300); $('#outerSlider').animate({top: '700px'}, 300);
Space.onArrival(); Space.onArrival();
Engine.activeModule = Space; Engine.activeModule = Space;
AudioEngine.playSound(Ship.SOUNDS['lift-off']);
}, },
handleStateUpdates: function(e){ handleStateUpdates: function(e){
+15 -5
View File
@@ -25,6 +25,7 @@ var Space = {
'asteroid-hit-1': '/audio/asteroid-hit-1.wav', 'asteroid-hit-1': '/audio/asteroid-hit-1.wav',
'asteroid-hit-2': '/audio/asteroid-hit-2.wav', 'asteroid-hit-2': '/audio/asteroid-hit-2.wav',
'asteroid-hit-3': '/audio/asteroid-hit-3.wav', 'asteroid-hit-3': '/audio/asteroid-hit-3.wav',
'crash': '/audio/crash.wav',
}, },
stars: null, stars: null,
backStars: null, backStars: null,
@@ -68,6 +69,7 @@ var Space = {
Space.hull = Ship.getMaxHull(); Space.hull = Ship.getMaxHull();
Space.altitude = 0; Space.altitude = 0;
Space.setTitle(); Space.setTitle();
AudioEngine.changeMusic(Space.MUSIC[0]);
Space.updateHull(); Space.updateHull();
Space.up = Space.up =
@@ -81,7 +83,6 @@ var Space = {
}); });
Space.startAscent(); Space.startAscent();
Space._shipTimer = setInterval(Space.moveShip, 33); Space._shipTimer = setInterval(Space.moveShip, 33);
Space.setMusic();
}, },
setTitle: function() { setTitle: function() {
@@ -89,16 +90,22 @@ var Space = {
var t; var t;
if(Space.altitude < 10) { if(Space.altitude < 10) {
t = _("Troposphere"); t = _("Troposphere");
AudioEngine.changeMusic(Space.MUSIC[1]);
} else if(Space.altitude < 20) { } else if(Space.altitude < 20) {
t = _("Stratosphere"); t = _("Stratosphere");
AudioEngine.changeMusic(Space.MUSIC[2]);
} else if(Space.altitude < 30) { } else if(Space.altitude < 30) {
t = _("Mesosphere"); t = _("Mesosphere");
AudioEngine.changeMusic(Space.MUSIC[3]);
} else if(Space.altitude < 45) { } else if(Space.altitude < 45) {
t = _("Thermosphere"); t = _("Thermosphere");
AudioEngine.changeMusic(Space.MUSIC[4]);
} else if(Space.altitude < 60){ } else if(Space.altitude < 60){
t = _("Exosphere"); t = _("Exosphere");
AudioEngine.changeMusic(Space.MUSIC[5]);
} else { } else {
t = _("Space"); t = _("Space");
AudioEngine.changeMusic(Space.MUSIC[0]);
} }
document.title = t; document.title = t;
} }
@@ -151,6 +158,11 @@ var Space = {
t.remove(); t.remove();
Space.hull--; Space.hull--;
Space.updateHull(); Space.updateHull();
// play random asteroid hit
var r = Math.floor(Math.random() * 2) + 1;
AudioEngine.playSound(Space.SOUNDS['asteroid-hit-' + r]);
if(Space.hull === 0) { if(Space.hull === 0) {
Space.crash(); Space.crash();
} }
@@ -373,6 +385,7 @@ var Space = {
Ship.onArrival(); Ship.onArrival();
Button.cooldown($('#liftoffButton')); Button.cooldown($('#liftoffButton'));
Engine.event('progress', 'crash'); Engine.event('progress', 'crash');
AudioEngine.playSound(Space.SOUNDS['crash']);
}, },
endGame: function() { endGame: function() {
@@ -395,6 +408,7 @@ var Space = {
} }
delete Outside._popTimeout; delete Outside._popTimeout;
AudioEngine.changeMusic(Space.MUSIC[6]);
$('#hullRemaining', Space.panel).animate({opacity: 0}, 500, 'linear'); $('#hullRemaining', Space.panel).animate({opacity: 0}, 500, 'linear');
Space.ship.animate({ Space.ship.animate({
top: '350px', top: '350px',
@@ -547,9 +561,5 @@ var Space = {
handleStateUpdates: function(e){ handleStateUpdates: function(e){
},
setMusic: function () {
AudioEngine.changeMusic(Space.MUSIC[0]);
} }
}; };
+4
View File
@@ -8,6 +8,8 @@ var World = {
'footsteps-1': '/audio/footsteps-1.wav', 'footsteps-1': '/audio/footsteps-1.wav',
'footsteps-2': '/audio/footsteps-2.wav', 'footsteps-2': '/audio/footsteps-2.wav',
'footsteps-3': '/audio/footsteps-3.wav', 'footsteps-3': '/audio/footsteps-3.wav',
'death-starved': '/audio/death-starved.wav',
'death-dehydrated': '/audio/death-dehydrated.wav',
}, },
RADIUS: 30, RADIUS: 30,
VILLAGE_POS: [30, 30], VILLAGE_POS: [30, 30],
@@ -488,6 +490,7 @@ var World = {
$SM.addPerk('slow metabolism'); $SM.addPerk('slow metabolism');
} }
World.die(); World.die();
AudioEngine.playSound(World.SOUNDS['death-starved']);
return false; return false;
} }
} else { } else {
@@ -517,6 +520,7 @@ var World = {
$SM.addPerk('desert rat'); $SM.addPerk('desert rat');
} }
World.die(); World.die();
AudioEngine.playSound(World.SOUNDS['death-dehydrated']);
return false; return false;
} }
} else { } else {