Files
adarkroom/script/events/executioner.js
T

2344 lines
57 KiB
JavaScript
Raw Normal View History

2023-06-09 12:38:16 -04:00
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,
2023-06-12 14:40:55 -04:00
nextScene: { 1: '4-3' }
2023-06-09 12:38:16 -04:00
},
'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'),
2023-06-12 10:20:28 -04:00
nextScene: { 1: '8' }
2023-06-09 12:38:16 -04:00
},
'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'
}
}
}
}
}
};