Add thrall table (but don't use it yet)
This commit is contained in:
		
							
								
								
									
										185
									
								
								src/thralls.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								src/thralls.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,185 @@ | ||||
| import {CheckData} from "./newmap.ts"; | ||||
| import { | ||||
|   bat0, | ||||
|   bat1, | ||||
|   charm0, | ||||
|   charm1, | ||||
|   lore0, | ||||
|   lore1, | ||||
|   party0, | ||||
|   party1, | ||||
|   stare0, | ||||
|   stare1, | ||||
|   stealth0, | ||||
|   stealth1 | ||||
| } from "./skills.ts"; | ||||
|  | ||||
| export type Thrall = { | ||||
|   id: number | ||||
| } | ||||
|  | ||||
| class ThrallsTable { | ||||
|   #thralls: ThrallData[] | ||||
|  | ||||
|   constructor() { | ||||
|     this.#thralls = []; | ||||
|   } | ||||
|  | ||||
|   add(data: ThrallData) { | ||||
|     let id = this.#thralls.length; | ||||
|     this.#thralls.push(data); | ||||
|     return {id}; | ||||
|   } | ||||
|  | ||||
|   get(thrall: Thrall): ThrallData { | ||||
|     return this.#thralls[thrall.id] | ||||
|   } | ||||
| } | ||||
| export type ThrallData = { | ||||
|   label: string | ||||
|   initialCheck: CheckData | ||||
| } | ||||
|  | ||||
| let table = new ThrallsTable(); | ||||
|  | ||||
| // Thralls are labeled by which zone's item they like | ||||
| // Their initial check is, generally, the initial check of the | ||||
| // thrall n-2 or thrall n+1 (ex: Party's initial check is Stealth | ||||
| // or Lore) | ||||
| export let thrallParty = table.add({ | ||||
|   label: "Garrett", | ||||
|   initialCheck: { | ||||
|     label: "That's Garrett. He plays poker, but he goes to the zoo to cool down after he's lost a lot of chips. His ice cream cone has melted.", | ||||
|     options: [ | ||||
|       { | ||||
|         skill: () => stealth1,  // Disguise | ||||
|         locked: "\"What's wrong, Garrett?\"", | ||||
|         failure: "\"If you're not a large pile of money, don't talk to me.\"\n\nHe sobs into his ice cream.", | ||||
|         unlockable: "*look like a large pile of money*", | ||||
|         success: "He scoops you eagerly into his wallet.", | ||||
|       }, | ||||
|       { | ||||
|         skill: () => lore0,  // Respect Elders | ||||
|         locked: "TODO", | ||||
|         failure: "TODO", | ||||
|         unlockable: "TODO", | ||||
|         success: "TODO", | ||||
|       }, | ||||
|     ] | ||||
|   } | ||||
| }) | ||||
|  | ||||
| export let thrallLore = table.add({ | ||||
|   label: "Lupin", | ||||
|   initialCheck: { | ||||
|     label: "That's Lupin. He's a Wolf Scout, but hardcore about it. He's a packleader.", | ||||
|     options: [ | ||||
|       { | ||||
|         skill: () => stare1, // Hypnotize | ||||
|         locked: "TODO", | ||||
|         failure: "TODO", | ||||
|         unlockable: "\"I'm a wolf too.\"", | ||||
|         success: "He blinks a few times under your gaze -- then touches your muzzle -- then his own -- then arfs submissively.", | ||||
|       }, | ||||
|       { | ||||
|         skill: () => bat0, // Screech | ||||
|         locked: "TODO", | ||||
|         failure: "TODO", | ||||
|         unlockable: "\"Wolf Scouts AWOO!\"", | ||||
|         success: "Taken aback at how well you know the cheer, he freezes -- then joins you with a similar howl.", | ||||
|       }, | ||||
|     ] | ||||
|   } | ||||
| }) | ||||
|  | ||||
| export let thrallBat = table.add({ | ||||
|   label: "Monica", | ||||
|   initialCheck: { | ||||
|     label: "That's Monica. You've seen her cook on TV! Looks like she's enjoying a kiwi flan.", | ||||
|     options: [ | ||||
|       { | ||||
|         skill: () => party1, // Rave | ||||
|         locked: "TODO", | ||||
|         failure: "TODO", | ||||
|         unlockable: "Slide her a sachet of cocaine.", | ||||
|         success: "\"No way. Ketamine if you've got it.\" You do.\n\n(It's not effective on vampires.)", | ||||
|       }, | ||||
|       { | ||||
|         skill: () => charm0, // Flatter | ||||
|         locked: "TODO", | ||||
|         failure: "TODO", | ||||
|         unlockable: "\"You're the best cook ever!\"", | ||||
|         success: "\"Settle down!\" she says, lowering your volume with a sweep of her hand. \"It's true though.\"", | ||||
|       }, | ||||
|     ] | ||||
|   } | ||||
| }) | ||||
|  | ||||
| export let thrallCharm = table.add({ | ||||
|   label: "Renfield", | ||||
|   initialCheck: { | ||||
|     label: "Doesn't this guy seem a little creepy? His nametag says Renfield. Not sure you should trust him...", | ||||
|     options: [ | ||||
|       { | ||||
|         skill: () => lore1,  // Brick by Brick | ||||
|         locked: "TODO", | ||||
|         failure: "TODO", | ||||
|         unlockable: "\"Wanna see my crypt?\"", | ||||
|         success: "He salivates -- swallowing hard before he manages, in response to the prospect, a firm \"YES!\"", | ||||
|       }, | ||||
|       { | ||||
|         skill: () => stealth0,  // Be Quiet | ||||
|         locked: "TODO", | ||||
|         failure: "TODO", | ||||
|         unlockable: "Say absolutely nothing.", | ||||
|         success: "His mind overflows with fantasy, and when you let a glint of fang peek through, he claps his arms affectionately around your supercold torso.", | ||||
|       }, | ||||
|     ] | ||||
|   } | ||||
| }) | ||||
|  | ||||
| export let thrallStealth = table.add({ | ||||
|   label: "Narthyss", | ||||
|   initialCheck: { | ||||
|     label: "Narthyss (dragon, heiress) actually owns the club, so she probably wouldn't talk to you... Would she?", | ||||
|     options: [ | ||||
|       { | ||||
|         skill: () => bat1,  // Flap | ||||
|         locked: "TODO", | ||||
|         failure: "TODO", | ||||
|         unlockable: "Hang upside-down and offer her a martini.", | ||||
|         success: "\"You're ADORABLE!\" She's yours forever.", | ||||
|       }, | ||||
|       { | ||||
|         skill: () => stare0,  // Dazzle | ||||
|         locked: "TODO", | ||||
|         failure: "TODO", | ||||
|         unlockable: "TODO", | ||||
|         success: "TODO", | ||||
|       }, | ||||
|     ] | ||||
|   } | ||||
| }) | ||||
|  | ||||
| export let thrallStare = table.add({ | ||||
|   label: "Ridley", | ||||
|   initialCheck: { | ||||
|     label: "Ridley is the library's catalogue system. It can give you an incorrect answer to any question. (It has a couple gears loose.)", | ||||
|     options: [ | ||||
|       { | ||||
|         skill: () => charm1,  // Befriend | ||||
|         locked: "\"How many Rs in 'strawberry'?\"", | ||||
|         failure: "It generates an image of a sad fruit shrugging in a muddy plantation.", | ||||
|         unlockable: "TODO", | ||||
|         success: "TODO", | ||||
|       }, | ||||
|       { | ||||
|         skill: () => party0,  // Chug | ||||
|         locked: "TODO", | ||||
|         failure: "TODO", | ||||
|         unlockable: "Drink a whole bottle of ink.", | ||||
|         success: "TODO", | ||||
|       }, | ||||
|     ] | ||||
|   } | ||||
| }) | ||||
		Reference in New Issue
	
	Block a user