forked from sent/waves
2344 lines
57 KiB
JavaScript
2344 lines
57 KiB
JavaScript
Enemies = window.Enemies ?? {};
|
||
Enemies.Executioner = {
|
||
'guard': {
|
||
combat: true,
|
||
notification: _('tripped a motion sensor.'),
|
||
enemy: 'mechanical guard',
|
||
enemyName: _('mechanical guard'),
|
||
ranged: true,
|
||
chara: 'G',
|
||
damage: 10,
|
||
hit: 0.8,
|
||
attackDelay: 2,
|
||
health: 60,
|
||
loot: {
|
||
'energy cell': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'laser rifle': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.8
|
||
},
|
||
'alien alloy': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
},
|
||
'quadruped': {
|
||
combat: true,
|
||
notification: _('a mobile defence platform trundles around the corner.'),
|
||
enemy: 'mechanical quadruped',
|
||
enemyName: _('mechanical quadruped'),
|
||
ranged: false,
|
||
chara: 'Q',
|
||
damage: 8,
|
||
hit: 0.8,
|
||
attackDelay: 1,
|
||
health: 70,
|
||
loot: {
|
||
'alien alloy': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 1
|
||
},
|
||
'alien alloy': {
|
||
min: 2,
|
||
max: 4,
|
||
chance: 0.2
|
||
}
|
||
}
|
||
},
|
||
'medic': {
|
||
combat: true,
|
||
notification: _('a medical drone wheels out of control.'),
|
||
enemy: 'broken medic',
|
||
enemyName: _('broken medic'),
|
||
ranged: false,
|
||
chara: 'M',
|
||
damage: 15,
|
||
hit: 0.8,
|
||
attackDelay: 3,
|
||
health: 80,
|
||
atHealth: {
|
||
40: fighter => {
|
||
Events.setStatus(fighter, 'venomous');
|
||
return 'venomous';
|
||
}
|
||
},
|
||
loot: {
|
||
'alien alloy': {
|
||
min: 1,
|
||
max: 2,
|
||
chance: 1
|
||
},
|
||
'hypo': {
|
||
min: 1,
|
||
max: 4,
|
||
chance: 0.2
|
||
}
|
||
}
|
||
},
|
||
'turret': {
|
||
combat: true,
|
||
notification: _('one of the defence turrets still works.'),
|
||
enemy: 'defence turret',
|
||
enemyName: _('defence turret'),
|
||
ranged: true,
|
||
chara: 'T',
|
||
damage: 25,
|
||
hit: 0.8,
|
||
attackDelay: 4,
|
||
health: 50,
|
||
loot: {
|
||
'energy cell': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'alien alloy': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.8
|
||
},
|
||
'laser rifle': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
}
|
||
};
|
||
|
||
Events.Executioner = {
|
||
"executioner-intro": { /* Exploring a ravaged battleship */
|
||
title: _('A Ravaged Battleship'),
|
||
audio: AudioLibrary.LANDMARK_CRASHED_SHIP,
|
||
scenes: {
|
||
'start': {
|
||
notification: _('the remains of a huge ship are embedded in the earth.'),
|
||
text: [
|
||
_('the remains of a massive battleship lie here, like a silent sealed city.'),
|
||
_('it lists to the side in a deep crevasse, cut when it fell from the sky.'),
|
||
_('the hatches are all sealed, but the hull is blown out just above the dirt, providing an entrance.')
|
||
],
|
||
buttons: {
|
||
'enter': {
|
||
text: _('enter'),
|
||
cost: { torch: 1 },
|
||
nextScene: {1: '1'}
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'1': {
|
||
text: [
|
||
_('the interior of the ship is cold and dark. what little light there is only accentuates its harsh angles.'),
|
||
_('the walls hum faintly.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.4: '2-1', 0.8: '2-2', 1: '2-3' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'2-1': {
|
||
'text': [
|
||
_('thick, sticky webbing covers the walls of the corridor.'),
|
||
_('deeper into the ship, the darkness seems almost to writhe.'),
|
||
_('a small knapsack hangs from a cluster of webs, a few feet from the floor.')
|
||
],
|
||
loot: {
|
||
'cured meat': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'bullets': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.5
|
||
},
|
||
'energy cell': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '3-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-1': {
|
||
notification: _('a huge arthropod lunges from the shadows, its mandibles thrashing.'),
|
||
combat: true,
|
||
enemy: 'chitinous horror',
|
||
chara: 'H',
|
||
damage: 1,
|
||
hit: 0.7,
|
||
attackDelay: 0.25,
|
||
health: 60,
|
||
loot: {
|
||
'meat': {
|
||
min: 5,
|
||
max: 10,
|
||
chance: 0.8
|
||
},
|
||
'scales': {
|
||
min: 5,
|
||
max: 10,
|
||
chance: 0.5
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '4-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'4-1': {
|
||
notification: _('the webs part, and a grotesque insect lurches forward.'),
|
||
combat: true,
|
||
enemy: 'chitinous queen',
|
||
chara: 'Q',
|
||
damage: 1,
|
||
hit: 0.7,
|
||
attackDelay: 0.25,
|
||
health: 70,
|
||
loot: {
|
||
'meat': {
|
||
min: 8,
|
||
max: 12,
|
||
chance: 0.8
|
||
},
|
||
'scales': {
|
||
min: 8,
|
||
max: 12,
|
||
chance: 0.5
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '5' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'2-2': {
|
||
notification: _('an operative waits in ambush around the corner.'),
|
||
combat: true,
|
||
enemy: 'operative',
|
||
chara: 'O',
|
||
damage: 8,
|
||
hit: 0.8,
|
||
attackDelay: 2,
|
||
health: 60,
|
||
loot: {
|
||
'bayonet': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.5
|
||
},
|
||
'bullets': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'cured meat': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '3-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-2': {
|
||
'text': [
|
||
_('the military has set up a small camp just inside the ship.'),
|
||
_('crude attempts have been made to cut into the walls.'),
|
||
_('scraps of copper wire litter the floor.'),
|
||
_('two bedrolls are wedged into a corner.')
|
||
],
|
||
loot: {
|
||
'cured meat': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 1
|
||
},
|
||
'torch': {
|
||
min: 1,
|
||
max: 3,
|
||
chance: 0.8
|
||
},
|
||
'bullets': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.5
|
||
},
|
||
'alien alloy': {
|
||
min: 1,
|
||
max: 2,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '4-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'4-2': {
|
||
notification: _('a dusty researcher clumsily hides in the shadows.'),
|
||
combat: true,
|
||
enemy: 'researcher',
|
||
chara: 'R',
|
||
damage: 1,
|
||
hit: 0.8,
|
||
attackDelay: 2,
|
||
health: 20,
|
||
loot: {
|
||
'torch': {
|
||
min: 1,
|
||
max: 3,
|
||
chance: 0.8
|
||
},
|
||
'cloth': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'cured meat': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '5' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'2-3': {
|
||
'text': [
|
||
_('debris is stacked in the corridor, forming a low barricade.'),
|
||
_('the walls are scorched and melted.'),
|
||
_('behind the barricade, a few weapons lay abandoned.')
|
||
],
|
||
loot: {
|
||
'laser rifle': {
|
||
min: 1,
|
||
max: 3,
|
||
chance: 1
|
||
},
|
||
'energy cell': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'plasma rifle': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '3-3' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-3': {
|
||
'text': [
|
||
_('the partially devoured remains of several wanderers are piled before a dark corridor.'),
|
||
_('shuffling noises can be heard from within.')
|
||
],
|
||
loot: {
|
||
'energy cell': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.5
|
||
},
|
||
'cloth': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '4-3' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'4-3': {
|
||
combat: true,
|
||
enemy: 'ancient beast',
|
||
enemyName: _('ancient beast'),
|
||
chara: 'A',
|
||
damage: 6,
|
||
hit: 0.8,
|
||
attackDelay: 1,
|
||
health: 60,
|
||
loot: {
|
||
'fur': {
|
||
min: 5,
|
||
max: 10,
|
||
chance: 1
|
||
},
|
||
'meat': {
|
||
min: 5,
|
||
max: 10,
|
||
chance: 1
|
||
},
|
||
'teeth': {
|
||
min: 5,
|
||
max: 10,
|
||
chance: 0.8
|
||
}
|
||
},
|
||
notification: _('an ancient beast has made these ruins its home.'),
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '5' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'5': {
|
||
'text': [
|
||
_('a maintenance panel is embedded in the wall next to a large sealed door.'),
|
||
_('perhaps the ship’s systems are still operational.')
|
||
],
|
||
buttons: {
|
||
'power': {
|
||
text: _('power cycle'),
|
||
nextScene: { 1: '6' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'6': {
|
||
combat: true,
|
||
notification: _('as the lights come online, so too do the defence systems.'),
|
||
enemy: 'automated turret',
|
||
enemyName: _('automated turret'),
|
||
ranged: true,
|
||
chara: 'T',
|
||
damage: 10,
|
||
hit: 0.8,
|
||
attackDelay: 2.5,
|
||
health: 60,
|
||
loot: {
|
||
'energy cell': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'laser rifle': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '7' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'7': {
|
||
'text': [
|
||
_('beyond the bulkhead is a small antechamber, seemingly untouched by scavengers.'),
|
||
_('a large hatch grinds open, and the wind rushes in.'),
|
||
_('a strange device sits on the floor. looks important.')
|
||
],
|
||
onLoad: () => {
|
||
World.drawRoad();
|
||
World.state.executioner = true;
|
||
},
|
||
buttons: {
|
||
'leave': {
|
||
text: _('take device and leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
"executioner-antechamber": { /* Deeper into a ravaged battleship */
|
||
title: _('A Ravaged Battleship'),
|
||
audio: AudioLibrary.LANDMARK_CRASHED_SHIP,
|
||
scenes: {
|
||
'start': {
|
||
'text': [
|
||
_('a large hatch opens into a wide corridor.'),
|
||
_('the corridor leads to a bank of elevators, which appear to be functional.')
|
||
],
|
||
buttons: {
|
||
'engineering': {
|
||
text: _('engineering'),
|
||
available: function() {
|
||
return !World.state.engineering;
|
||
},
|
||
nextEvent: 'executioner-engineering'
|
||
},
|
||
'medical': {
|
||
text: _('medical'),
|
||
available: function() {
|
||
return !World.state.medical;
|
||
},
|
||
nextEvent: 'executioner-medical'
|
||
},
|
||
'martial': {
|
||
text: _('martial'),
|
||
available: function() {
|
||
return !World.state.martial;
|
||
},
|
||
nextEvent: 'executioner-martial'
|
||
},
|
||
'command': {
|
||
text: _('command deck'),
|
||
available: function() {
|
||
return World.state.engineering && World.state.medical && World.state.martial;
|
||
},
|
||
nextEvent: 'executioner-command'
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
"executioner-engineering": { /* Engineering wing */
|
||
title: _('Engineering Wing'),
|
||
audio: AudioLibrary.LANDMARK_CRASHED_SHIP,
|
||
scenes: {
|
||
'start': {
|
||
'text': [
|
||
_('elevator doors open to a blasted corridor. debris covers the floor, piled into makeshift defences.'),
|
||
_('emergency lighting flickers.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.3: '1-1', 0.7: '1-2', 1: '1-3' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'1-1': {
|
||
text: [
|
||
_('an automated assembly line performs its empty routines, long since deprived of materials.'),
|
||
_('its final works lie forgotten, covered by a thin layer of dust.')
|
||
],
|
||
loot: {
|
||
'energy cell': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'laser rifle': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '2-1a', 1: '2-1b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'2-1a': {
|
||
combat: true,
|
||
notification: _('assembly arms spin wildly out of control.'),
|
||
enemy: 'unruly welder',
|
||
enemyName: _('unruly welder'),
|
||
ranged: false,
|
||
chara: 'W',
|
||
damage: 13,
|
||
hit: 0.8,
|
||
attackDelay: 2,
|
||
health: 50,
|
||
loot: {
|
||
'energy cell': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'alien alloy': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '3-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'2-1b': {
|
||
text: [
|
||
_('assembly arms spark and jitter.'),
|
||
_('a cacophony of decrepit machinery fills the room.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '3-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-1': {
|
||
...Enemies.Executioner.guard,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '4' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'1-2': {
|
||
...Enemies.Executioner.turret,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '2-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'2-2': {
|
||
text: [
|
||
_('must have been the engine room, once. the massive machines now stand inert, twisted and scorched by explosions.'),
|
||
_('the destruction is uniform and precise.'),
|
||
_('bits of them can be scavenged.')
|
||
],
|
||
loot: {
|
||
'alien alloy': {
|
||
min: 2,
|
||
max: 5,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '3-2a', 1: '3-2b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-2a': {
|
||
...Enemies.Executioner.guard,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '4' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-2b': {
|
||
text: [
|
||
_('none of the ship\'s engines escaped the destruction.'),
|
||
_('it\'s no mystery why she no longer flies.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '4' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'1-3': {
|
||
text: [
|
||
_('sparks cascade from a reactivated power junction, and catch.'),
|
||
_('the flames fill the corridor.')
|
||
],
|
||
buttons: {
|
||
'water': {
|
||
text: _('extinguish'),
|
||
cost: { 'water': 5 },
|
||
nextScene: { 0.5: '2-3a', 1: '2-3b' }
|
||
},
|
||
'run': {
|
||
text: _('rush through'),
|
||
cost: { 'hp': 10 },
|
||
nextScene: { 0.5: '2-3a', 1: '2-3b' }
|
||
}
|
||
}
|
||
},
|
||
'2-3a': {
|
||
...Enemies.Executioner.guard,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '3-3' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'2-3b': {
|
||
text: [
|
||
_('rows of inert security robots hang suspended from the ceiling.'),
|
||
_('wires run overhead, corroded and useless.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '3-3' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-3': {
|
||
text: [
|
||
_('more signs of past combat down the hall. guard post is ransacked.'),
|
||
_('still, some things can be found.')
|
||
],
|
||
loot: {
|
||
'energy cell': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'laser rifle': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.7
|
||
},
|
||
'grenade': {
|
||
min: 1,
|
||
max: 3,
|
||
chance: 0.6
|
||
},
|
||
'plasma rifle': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '4' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'4': {
|
||
text: [
|
||
_('marks on the door read \'research and development.\' everything seems mostly untouched, but dead.'),
|
||
_('one machine thrums with power, and might still work.')
|
||
],
|
||
buttons: {
|
||
'use': {
|
||
text: _('use machine'),
|
||
cost: { 'alien alloy': 1 },
|
||
onChoose: function() {
|
||
World.setHp(World.getMaxHealth());
|
||
},
|
||
nextScene: { 1: '4-heal' }
|
||
},
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '5-1', 1: '5-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'4-heal': {
|
||
text: [
|
||
_('step inside, and the machine whirs. muscle and bone reknit. good as new.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '5-1', 1: '5-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'5-1': {
|
||
...Enemies.Executioner.turret,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '6' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'5-2': {
|
||
text: [
|
||
_('the machines here look unfinished, abandoned by their creator. wires and other scrap are scattered about the work benches.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '6' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'6': {
|
||
text: [
|
||
_('experimental plans cover one wall, held by an unseen force.'),
|
||
_('this one looks useful.')
|
||
],
|
||
loot: {
|
||
'hypo blueprint': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '7-intro' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'7-intro': {
|
||
text: [
|
||
_('clattering metal and old servos. something is coming...')
|
||
],
|
||
buttons: {
|
||
'fight': {
|
||
text: _('fight'),
|
||
nextScene: { 1: '7' }
|
||
}
|
||
}
|
||
},
|
||
'7': {
|
||
combat: true,
|
||
notification: _('an unfinished automaton whirs to life.'),
|
||
enemy: 'unstable prototype',
|
||
enemyName: _('unstable prototype'),
|
||
ranged: false,
|
||
chara: 'P',
|
||
damage: 5,
|
||
hit: 0.8,
|
||
attackDelay: 2,
|
||
health: 150,
|
||
specials:[{
|
||
delay: 5,
|
||
action: (fighter) => {
|
||
Events.setStatus(fighter, 'shield');
|
||
return 'shield';
|
||
}
|
||
}],
|
||
loot: {
|
||
'alien alloy': {
|
||
min: 1,
|
||
max: 3,
|
||
chance: 1
|
||
},
|
||
'kinetic armour blueprint': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '8' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'8': {
|
||
text: [
|
||
_('at the back of the workshop, elevator doors twitch and buzz.'),
|
||
_('looks like a way out of here.')
|
||
],
|
||
onLoad: () => {
|
||
World.state.engineering = true;
|
||
},
|
||
buttons: {
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
"executioner-martial": { /* Martial wing */
|
||
title: _('Martial Wing'),
|
||
audio: AudioLibrary.LANDMARK_CRASHED_SHIP,
|
||
scenes: {
|
||
'start': {
|
||
text: [
|
||
_('metal grinds, and the elevator doors open halfway. beyond is a brightly lit battlefield. remains litter the corridor, undisturbed by scavengers.'),
|
||
_('looks like they tried to barricade the elevators.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'1': {
|
||
text: [
|
||
_('further along, the corridor branches.'),
|
||
_('the door to the left is sealed and refuses to open.')
|
||
],
|
||
buttons: {
|
||
'explode': {
|
||
text: _('blow it down'),
|
||
cost: { grenade: 1 },
|
||
nextScene: { 1: '2-1' }
|
||
},
|
||
'right': {
|
||
text: _('continue right'),
|
||
nextScene: { 0.5: '2-2', 1: '2-3' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'2-1': {
|
||
text: [
|
||
_('the blast throws the door inwards.'),
|
||
_('through the bulkhead is a large room, walls lined with weapon racks. fighting seems to have passed it by.')
|
||
],
|
||
loot: {
|
||
'energy blade': {
|
||
min: 2,
|
||
max: 5,
|
||
chance: 1
|
||
},
|
||
'laser rifle': {
|
||
min: 2,
|
||
max: 5,
|
||
chance: 1
|
||
},
|
||
'energy cell': {
|
||
min: 5,
|
||
max: 20,
|
||
chance: 1
|
||
},
|
||
'grenade': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
},
|
||
'plasma rifle': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '3-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-1': {
|
||
...Enemies.Executioner.turret,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '4-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'4-1': {
|
||
text: [
|
||
_('another door at the end of the hall, sealed from this side.'),
|
||
_('should be able to open it.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '5' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'2-2': {
|
||
...Enemies.Executioner.turret,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 0.5: '3-2a', 1: '3-2b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-2a': {
|
||
...Enemies.Executioner.quadruped,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '4-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-2b': {
|
||
text: [
|
||
_('the corridor is eerily silent.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '4-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'4-2': {
|
||
text: [
|
||
_('crew cabins flank the hall, devoid of life.'),
|
||
_('a few useful items can be scavenged.')
|
||
],
|
||
loot: {
|
||
'energy cell': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 1
|
||
},
|
||
'energy blade': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 0.2
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '5' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'2-3': {
|
||
text: [
|
||
_('ruined defence turrets flank the corridor.'),
|
||
_('could put the scrap to good use.')
|
||
],
|
||
loot: {
|
||
'alien alloy': {
|
||
min: 1,
|
||
max: 3,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '3-3a', 1: '3-3b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-3a': {
|
||
...Enemies.Executioner.guard,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '4-3' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3-3b': {
|
||
text: [
|
||
_('small sensors in the walls still look to be operational.'),
|
||
_('easily avoided.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '4-3' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'4-3': {
|
||
...Enemies.Executioner.quadruped,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '5' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'5': {
|
||
text: [
|
||
_('large barricades bisect the corridor, scorched by weapons fire.'),
|
||
_('bodies litter the ground on either side.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '6' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'6': {
|
||
text: [
|
||
_('documents are scattered down the hall, most charred and curled.'),
|
||
_('this one looks interesting.')
|
||
],
|
||
loot: {
|
||
'plasma rifle blueprint': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '7-1', 1: '7-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'7-1': {
|
||
text: [
|
||
_('the next door leads to a ransacked planning room.'),
|
||
_('maps of the surface can still be found amongst the debris.')
|
||
],
|
||
buttons: {
|
||
'scavenge': {
|
||
text: _('scavenge maps'),
|
||
onChoose: () => {
|
||
for (let i = 0; i < 3; i++) {
|
||
World.applyMap();
|
||
}
|
||
},
|
||
nextScene: { 1: '8-1a' }
|
||
},
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '8-1b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'8-1a': {
|
||
...Enemies.Executioner.guard,
|
||
notification: _('drew some attention with all that noise.'),
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '9-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'8-1b': {
|
||
text: [
|
||
_('slipped past an automated sentry.'),
|
||
_('if only they\'d been destroyed along with everything else.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '9-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'9-1': {
|
||
...Enemies.Executioner.guard,
|
||
notification: _('ran straight into another one.'),
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '10' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'7-2': {
|
||
text: [
|
||
_('the corridor passes through a security checkpoint. the defences are blown apart, ragged edges scorched by laser fire.'),
|
||
_('past the checkpoint, banks of containment cells can be seen.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '8-2a', 1: '8-2b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'8-2a': {
|
||
text: [
|
||
_('the cells are all empty.'),
|
||
_('power cables running across the ceiling are split in several places, sparking occasionally.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '9-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'8-2b': {
|
||
text: [
|
||
_('the guards died at their posts, shot through with superheated plasma.'),
|
||
_('their weapons lie on the floor beside them.')
|
||
],
|
||
loot: {
|
||
'laser rifle': {
|
||
min: 2,
|
||
max: 2,
|
||
chance: 1
|
||
},
|
||
'energy cell': {
|
||
min: 5,
|
||
max: 10,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '9-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'9-2': {
|
||
...Enemies.Executioner.quadruped,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '10' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'10': {
|
||
'text': [
|
||
_('the corridor opens onto a vast training complex, obstacles and features blackened by real combat.'),
|
||
_('a regenerative machine hums uncannily by one of the courses.')
|
||
],
|
||
buttons: {
|
||
'use': {
|
||
text: _('use machine'),
|
||
cost: { 'alien alloy': 1 },
|
||
onChoose: function() {
|
||
World.setHp(World.getMaxHealth());
|
||
},
|
||
nextScene: { 1: '11' }
|
||
},
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '11' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'11': {
|
||
'text': [
|
||
_('motion from the centre of the yard.'),
|
||
_('a sparring automaton, still fully function and crusted with timeworn blood, lunges forward.')
|
||
],
|
||
buttons: {
|
||
'engage': {
|
||
text: _('engage'),
|
||
nextScene: { 1: '12' }
|
||
}
|
||
}
|
||
},
|
||
'12': {
|
||
combat: true,
|
||
notification: _('the machine attacks, blades whirling.'),
|
||
enemy: 'murderous robot',
|
||
enemyName: _('murderous robot'),
|
||
ranged: false,
|
||
chara: 'M',
|
||
damage: 10,
|
||
hit: 0.8,
|
||
attackDelay: 3,
|
||
health: 250,
|
||
specials:[{
|
||
delay: 13,
|
||
action: (fighter) => {
|
||
Events.setStatus(fighter, 'energised');
|
||
return 'energised';
|
||
}
|
||
}],
|
||
loot: {
|
||
'alien alloy': {
|
||
min: 1,
|
||
max: 3,
|
||
chance: 1
|
||
},
|
||
'disruptor blueprint': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '13' }
|
||
}
|
||
}
|
||
},
|
||
'13': {
|
||
'text': [
|
||
_('the ruins of the sparring machine clatter to the ground.'),
|
||
_('picked this deck clean.')
|
||
],
|
||
onLoad: () => {
|
||
World.state.martial = true;
|
||
},
|
||
buttons: {
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
"executioner-medical": { /* Medical wing */
|
||
title: _('Medical Wing'),
|
||
audio: AudioLibrary.LANDMARK_CRASHED_SHIP,
|
||
scenes: {
|
||
'start': {
|
||
'text': [
|
||
_('elevator doors open to an empty corridor.'),
|
||
_('a few dusty corpses can be seen further down, but this deck appears to have been spared most of the combat.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'1': {
|
||
...Enemies.Executioner.turret,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'2': {
|
||
'text': [
|
||
_('past the checkpoint, the corridor is undamaged save for sporadic graffiti.'),
|
||
_('there was no fighting here.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '3a', 1: '3b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3a': {
|
||
...Enemies.Executioner.quadruped,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '4' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3b': {
|
||
'text': [
|
||
_('automated guardians still stalk the halls, unaware that their masters have long gone.'),
|
||
_('clumsy machines, and easily avoided.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '4' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'4': {
|
||
'text': [
|
||
_('medical gurneys are fixed to grooves running down the corridor walls.'),
|
||
_('the automated patient transport system now sits motionless.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '5-1', 1: '5-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'5-1': {
|
||
...Enemies.Executioner.medic,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 0.5: '6-1a', 1: '6-1b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'6-1a': {
|
||
...Enemies.Executioner.medic,
|
||
notification: _('it had friends.'),
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '7-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'6-1b': {
|
||
'text': [
|
||
_('more medical robots stand frozen, attached by a network of wires.'),
|
||
_('they take no notice of the intrusion.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '7-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'7-1': {
|
||
'text': [
|
||
_('weapons are strewn about the medical dispatch bay. must have been used as a muster point.'),
|
||
_('more strange graffiti adorns the walls.')
|
||
],
|
||
loot: {
|
||
'laser rifle': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 1
|
||
},
|
||
'energy cell': {
|
||
min: 3,
|
||
max: 10,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '8' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'5-2': {
|
||
'text': [
|
||
_('this ward has been converted to a makeshift strategy room, maps scrawled hastily on any flat surface.'),
|
||
_('a secure locker is set into one wall.')
|
||
],
|
||
buttons: {
|
||
'force': {
|
||
text: _('force locker'),
|
||
nextScene: { 1: '6-2a-intro' }
|
||
},
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '6-2b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'6-2a-intro': {
|
||
'text': [
|
||
_('hinges rusted through. no challenge.'),
|
||
],
|
||
loot: {
|
||
'energy cell': {
|
||
min: 5,
|
||
max: 10,
|
||
chance: 1
|
||
},
|
||
'hypo': {
|
||
min: 1,
|
||
max: 3,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '6-2a' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'6-2a': {
|
||
...Enemies.Executioner.medic,
|
||
notification: _('the noise draws attention.'),
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '7-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'6-2b': {
|
||
'text': [
|
||
_('better to move without drawing attention.'),
|
||
_('noises can be heard from the corridor outside.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '7-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'7-2': {
|
||
...Enemies.Executioner.quadruped,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '8' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'8': {
|
||
combat: true,
|
||
notification: _('something\'s wrong with this robot.'),
|
||
enemy: 'unstable automaton',
|
||
enemyName: _('unstable automaton'),
|
||
ranged: false,
|
||
chara: 'A',
|
||
damage: 10,
|
||
hit: 0.7,
|
||
attackDelay: 2,
|
||
health: 100,
|
||
explosion: 30,
|
||
loot: {
|
||
'glowstone blueprint': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '9' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'9': {
|
||
'text': [
|
||
_('another checkpoint ahead, fitted with heavy doors.'),
|
||
_('security is even tighter here.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '10a', 1: '10b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'10a': {
|
||
...Enemies.Executioner.guard,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '11' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'10b': {
|
||
'text': [
|
||
_('slipped through unnoticed.'),
|
||
_('air whistles as the doors open. this section must have lower pressure than the rest of the ship.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '11' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'11': {
|
||
...Enemies.Executioner.medic,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 0.5: '12-1', 1: '12-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'12-1': {
|
||
'text': [
|
||
_('the air is cooler here. low cabinets ring the room, doors dusted with frost.'),
|
||
_('samples of something biological inside.')
|
||
],
|
||
loot: {
|
||
'cured meat': {
|
||
min: 5,
|
||
max: 10,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '13-1a', 1: '13-1b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'13-1a': {
|
||
...Enemies.Executioner.guard,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '14-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'13-1b': {
|
||
'text': [
|
||
_('security drones still patrol the hallways.'),
|
||
_('predictable paths.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '14-1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'14-1': {
|
||
...Enemies.Executioner.medic,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '15' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'12-2': {
|
||
'text': [
|
||
_('surgical tools are scattered on the floor, near what appears the be the remains of a fire.'),
|
||
_('strange.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '13-2a', 1: '13-2b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'13-2a': {
|
||
...Enemies.Executioner.medic,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '14-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'13-2b': {
|
||
'text': [
|
||
_('the air in this room has a metallic tinge. floor is covered in dark powder.'),
|
||
_('some completed explosives in the corner.')
|
||
],
|
||
loot: {
|
||
'grenade': {
|
||
min: 3,
|
||
max: 8,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '14-2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'14-2': {
|
||
...Enemies.Executioner.medic,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '15' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'15': {
|
||
'text': [
|
||
_('containment cells arranged at the back of the room, all open.'),
|
||
_('something moving up ahead.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '16' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'16': {
|
||
combat: true,
|
||
notification: _('a mutated beast leaps from its cell.'),
|
||
enemy: 'malformed experiment',
|
||
enemyName: _('malformed experiment'),
|
||
ranged: false,
|
||
chara: 'E',
|
||
damage: 5,
|
||
hit: 0.8,
|
||
attackDelay: 2,
|
||
health: 200,
|
||
specials: [{
|
||
delay: 16,
|
||
action: (fighter) => {
|
||
Events.setStatus(fighter, 'enraged');
|
||
return 'enraged';
|
||
}
|
||
}],
|
||
loot: {
|
||
'stim blueprint': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '17' }
|
||
}
|
||
}
|
||
},
|
||
'17': {
|
||
'text': [
|
||
_('the creature\'s tortured breathing ceases.'),
|
||
_('nothing more here.')
|
||
],
|
||
onLoad: () => {
|
||
World.state.medical = true;
|
||
},
|
||
buttons: {
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
"executioner-command": { /* Command deck */
|
||
title: _('Command Deck'),
|
||
audio: AudioLibrary.LANDMARK_CRASHED_SHIP,
|
||
scenes: {
|
||
'start': {
|
||
'text': [
|
||
_('the path to the command bridge is wide, walls adorned with decorative shields.'),
|
||
_('fighting hadn\'t reached here, it seems.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '1' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
|
||
'1': {
|
||
...Enemies.Executioner.guard,
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '2' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'2': {
|
||
'text': [
|
||
_('detour through the officer\'s lounge.'),
|
||
_('might be something useful here.')
|
||
],
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 0.5: '3a', 1: '3b' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3a': {
|
||
'text': [
|
||
_('small weapons cache in a cabinet.'),
|
||
_('lucky.')
|
||
],
|
||
loot: {
|
||
'energy cell': {
|
||
min: 3,
|
||
max: 10,
|
||
chance: 1
|
||
},
|
||
'grenade': {
|
||
min: 1,
|
||
max: 5,
|
||
chance: 0.8
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '4' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'3b': {
|
||
'text': [
|
||
_('found some medical supplies in a discarded bag.')
|
||
],
|
||
loot: {
|
||
'hypo': {
|
||
min: 1,
|
||
max: 3,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
nextScene: { 1: '4' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'4': {
|
||
'text': [
|
||
_('the command deck is empty, save for a squat figure sitting motionless in the centre of the room.'),
|
||
_('in a flash, the figure is standing.')
|
||
],
|
||
buttons: {
|
||
'approach': {
|
||
text: _('approach'),
|
||
nextScene: { 1: '5' }
|
||
},
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
},
|
||
'5': {
|
||
'text': [
|
||
_('wanderer form, but not quite flesh. not quite metal either. a crystal set into its chest pulses with light.'),
|
||
_('it says it saw the rebellion coming. said it made arrangements.'),
|
||
_('says it can\'t die.')
|
||
],
|
||
buttons: {
|
||
'observe': {
|
||
text: _('observe'),
|
||
nextScene: { 1: '6' }
|
||
}
|
||
}
|
||
},
|
||
'6': {
|
||
combat: true,
|
||
notification: _('the immortal wanderer attacks.'),
|
||
enemy: 'immortal wanderer',
|
||
enemyName: _('immortal wanderer'),
|
||
ranged: false,
|
||
chara: '@',
|
||
damage: 12,
|
||
hit: 0.8,
|
||
attackDelay: 2,
|
||
health: 500,
|
||
onLoad: () => {
|
||
Events._lastSpecial = 'none';
|
||
},
|
||
specials: [{
|
||
delay: 7,
|
||
action: (fighter) => {
|
||
const last = Events._lastSpecial ?? 'none';
|
||
const possible = [ 'shield', 'enraged', 'meditation' ].filter(p => p !== last);
|
||
const status = possible[Math.floor(Math.random() * possible.length)];
|
||
Events.setStatus(fighter, status);
|
||
Events._lastSpecial = status;
|
||
return status;
|
||
}
|
||
}],
|
||
loot: {
|
||
'fleet beacon': {
|
||
min: 1,
|
||
max: 1,
|
||
chance: 1
|
||
}
|
||
},
|
||
buttons: {
|
||
'continue': {
|
||
text: _('continue'),
|
||
cooldown: Events._LEAVE_COOLDOWN,
|
||
nextScene: { 1: '7' }
|
||
}
|
||
}
|
||
},
|
||
'7': {
|
||
'text': [
|
||
_('the crystal pulses brightly, then goes dark. the assailant shimmers as its shape becomes less defined.'),
|
||
_('then it is gone.'),
|
||
_('time to get out of here.')
|
||
],
|
||
onLoad: () => {
|
||
World.clearDungeon();
|
||
},
|
||
buttons: {
|
||
'leave': {
|
||
text: _('leave'),
|
||
nextScene: 'end'
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}; |