1
0
forked from sent/waves
waves/public/assets/g/adarkroom/script/events/executioner.js
2025-04-09 17:11:14 -05:00

2344 lines
57 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 ships 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'
}
}
}
}
}
};