@fnndsc/brasa 0.37.1 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +48 -0
- package/dist/buildinfo.json +1 -1
- package/dist/builtins/fs/cp.js +9 -5
- package/dist/builtins/fs/cp.js.map +1 -1
- package/dist/builtins/fs/destination.d.ts +15 -1
- package/dist/builtins/fs/destination.js +35 -2
- package/dist/builtins/fs/destination.js.map +1 -1
- package/dist/builtins/fs/mv.js +9 -5
- package/dist/builtins/fs/mv.js.map +1 -1
- package/dist/builtins/fs/rm.js +17 -1
- package/dist/builtins/fs/rm.js.map +1 -1
- package/dist/builtins/games/lab.js +3 -1
- package/dist/builtins/games/lab.js.map +1 -1
- package/dist/builtins/games/shelf.js +1 -1
- package/dist/builtins/games/shelf.js.map +1 -1
- package/dist/builtins/games/stdin.d.ts +0 -13
- package/dist/builtins/games/stdin.js +9 -0
- package/dist/builtins/games/stdin.js.map +1 -1
- package/dist/builtins/games/trek/abandon.d.ts +3 -0
- package/dist/builtins/games/trek/abandon.js +159 -0
- package/dist/builtins/games/trek/abandon.js.map +1 -0
- package/dist/builtins/games/trek/attack.d.ts +3 -0
- package/dist/builtins/games/trek/attack.js +185 -0
- package/dist/builtins/games/trek/attack.js.map +1 -0
- package/dist/builtins/games/trek/autover.d.ts +3 -0
- package/dist/builtins/games/trek/autover.js +79 -0
- package/dist/builtins/games/trek/autover.js.map +1 -0
- package/dist/builtins/games/trek/capture.d.ts +3 -0
- package/dist/builtins/games/trek/capture.js +117 -0
- package/dist/builtins/games/trek/capture.js.map +1 -0
- package/dist/builtins/games/trek/check_out.d.ts +3 -0
- package/dist/builtins/games/trek/check_out.js +67 -0
- package/dist/builtins/games/trek/check_out.js.map +1 -0
- package/dist/builtins/games/trek/checkcond.d.ts +3 -0
- package/dist/builtins/games/trek/checkcond.js +101 -0
- package/dist/builtins/games/trek/checkcond.js.map +1 -0
- package/dist/builtins/games/trek/compkl.d.ts +8 -0
- package/dist/builtins/games/trek/compkl.js +66 -0
- package/dist/builtins/games/trek/compkl.js.map +1 -0
- package/dist/builtins/games/trek/computer.d.ts +3 -0
- package/dist/builtins/games/trek/computer.js +310 -0
- package/dist/builtins/games/trek/computer.js.map +1 -0
- package/dist/builtins/games/trek/consts.d.ts +109 -0
- package/dist/builtins/games/trek/consts.js +159 -0
- package/dist/builtins/games/trek/consts.js.map +1 -0
- package/dist/builtins/games/trek/context.d.ts +27 -0
- package/dist/builtins/games/trek/context.js +2 -0
- package/dist/builtins/games/trek/context.js.map +1 -0
- package/dist/builtins/games/trek/damage.d.ts +3 -0
- package/dist/builtins/games/trek/damage.js +87 -0
- package/dist/builtins/games/trek/damage.js.map +1 -0
- package/dist/builtins/games/trek/damaged.d.ts +3 -0
- package/dist/builtins/games/trek/damaged.js +58 -0
- package/dist/builtins/games/trek/damaged.js.map +1 -0
- package/dist/builtins/games/trek/dcrept.d.ts +3 -0
- package/dist/builtins/games/trek/dcrept.js +86 -0
- package/dist/builtins/games/trek/dcrept.js.map +1 -0
- package/dist/builtins/games/trek/destruct.d.ts +3 -0
- package/dist/builtins/games/trek/destruct.js +114 -0
- package/dist/builtins/games/trek/destruct.js.map +1 -0
- package/dist/builtins/games/trek/dock.d.ts +5 -0
- package/dist/builtins/games/trek/dock.js +133 -0
- package/dist/builtins/games/trek/dock.js.map +1 -0
- package/dist/builtins/games/trek/dumpgame.d.ts +15 -0
- package/dist/builtins/games/trek/dumpgame.js +29 -0
- package/dist/builtins/games/trek/dumpgame.js.map +1 -0
- package/dist/builtins/games/trek/dumpme.d.ts +3 -0
- package/dist/builtins/games/trek/dumpme.js +81 -0
- package/dist/builtins/games/trek/dumpme.js.map +1 -0
- package/dist/builtins/games/trek/dumpssradio.d.ts +6 -0
- package/dist/builtins/games/trek/dumpssradio.js +72 -0
- package/dist/builtins/games/trek/dumpssradio.js.map +1 -0
- package/dist/builtins/games/trek/events.d.ts +3 -0
- package/dist/builtins/games/trek/events.js +407 -0
- package/dist/builtins/games/trek/events.js.map +1 -0
- package/dist/builtins/games/trek/getcodi.d.ts +14 -0
- package/dist/builtins/games/trek/getcodi.js +24 -0
- package/dist/builtins/games/trek/getcodi.js.map +1 -0
- package/dist/builtins/games/trek/getpar.d.ts +40 -0
- package/dist/builtins/games/trek/getpar.js +174 -0
- package/dist/builtins/games/trek/getpar.js.map +1 -0
- package/dist/builtins/games/trek/help.d.ts +3 -0
- package/dist/builtins/games/trek/help.js +155 -0
- package/dist/builtins/games/trek/help.js.map +1 -0
- package/dist/builtins/games/trek/impulse.d.ts +6 -0
- package/dist/builtins/games/trek/impulse.js +85 -0
- package/dist/builtins/games/trek/impulse.js.map +1 -0
- package/dist/builtins/games/trek/initquad.d.ts +17 -0
- package/dist/builtins/games/trek/initquad.js +79 -0
- package/dist/builtins/games/trek/initquad.js.map +1 -0
- package/dist/builtins/games/trek/io.d.ts +102 -0
- package/dist/builtins/games/trek/io.js +216 -0
- package/dist/builtins/games/trek/io.js.map +1 -0
- package/dist/builtins/games/trek/kill.d.ts +21 -0
- package/dist/builtins/games/trek/kill.js +194 -0
- package/dist/builtins/games/trek/kill.js.map +1 -0
- package/dist/builtins/games/trek/klmove.d.ts +3 -0
- package/dist/builtins/games/trek/klmove.js +181 -0
- package/dist/builtins/games/trek/klmove.js.map +1 -0
- package/dist/builtins/games/trek/lose.d.ts +9 -0
- package/dist/builtins/games/trek/lose.js +36 -0
- package/dist/builtins/games/trek/lose.js.map +1 -0
- package/dist/builtins/games/trek/lrscan.d.ts +3 -0
- package/dist/builtins/games/trek/lrscan.js +96 -0
- package/dist/builtins/games/trek/lrscan.js.map +1 -0
- package/dist/builtins/games/trek/main.d.ts +24 -0
- package/dist/builtins/games/trek/main.js +37 -0
- package/dist/builtins/games/trek/main.js.map +1 -0
- package/dist/builtins/games/trek/move.d.ts +3 -0
- package/dist/builtins/games/trek/move.js +229 -0
- package/dist/builtins/games/trek/move.js.map +1 -0
- package/dist/builtins/games/trek/nova.d.ts +3 -0
- package/dist/builtins/games/trek/nova.js +135 -0
- package/dist/builtins/games/trek/nova.js.map +1 -0
- package/dist/builtins/games/trek/out.d.ts +3 -0
- package/dist/builtins/games/trek/out.js +52 -0
- package/dist/builtins/games/trek/out.js.map +1 -0
- package/dist/builtins/games/trek/phaser.d.ts +3 -0
- package/dist/builtins/games/trek/phaser.js +341 -0
- package/dist/builtins/games/trek/phaser.js.map +1 -0
- package/dist/builtins/games/trek/play.d.ts +3 -0
- package/dist/builtins/games/trek/play.js +112 -0
- package/dist/builtins/games/trek/play.js.map +1 -0
- package/dist/builtins/games/trek/printf.d.ts +31 -0
- package/dist/builtins/games/trek/printf.js +157 -0
- package/dist/builtins/games/trek/printf.js.map +1 -0
- package/dist/builtins/games/trek/ram.d.ts +3 -0
- package/dist/builtins/games/trek/ram.js +97 -0
- package/dist/builtins/games/trek/ram.js.map +1 -0
- package/dist/builtins/games/trek/rand.d.ts +29 -0
- package/dist/builtins/games/trek/rand.js +109 -0
- package/dist/builtins/games/trek/rand.js.map +1 -0
- package/dist/builtins/games/trek/rest.d.ts +3 -0
- package/dist/builtins/games/trek/rest.js +76 -0
- package/dist/builtins/games/trek/rest.js.map +1 -0
- package/dist/builtins/games/trek/schedule.d.ts +23 -0
- package/dist/builtins/games/trek/schedule.js +55 -0
- package/dist/builtins/games/trek/schedule.js.map +1 -0
- package/dist/builtins/games/trek/score.d.ts +8 -0
- package/dist/builtins/games/trek/score.js +61 -0
- package/dist/builtins/games/trek/score.js.map +1 -0
- package/dist/builtins/games/trek/setup.d.ts +18 -0
- package/dist/builtins/games/trek/setup.js +251 -0
- package/dist/builtins/games/trek/setup.js.map +1 -0
- package/dist/builtins/games/trek/setwarp.d.ts +8 -0
- package/dist/builtins/games/trek/setwarp.js +28 -0
- package/dist/builtins/games/trek/setwarp.js.map +1 -0
- package/dist/builtins/games/trek/shield.d.ts +3 -0
- package/dist/builtins/games/trek/shield.js +139 -0
- package/dist/builtins/games/trek/shield.js.map +1 -0
- package/dist/builtins/games/trek/snova.d.ts +3 -0
- package/dist/builtins/games/trek/snova.js +156 -0
- package/dist/builtins/games/trek/snova.js.map +1 -0
- package/dist/builtins/games/trek/srscan.d.ts +3 -0
- package/dist/builtins/games/trek/srscan.js +176 -0
- package/dist/builtins/games/trek/srscan.js.map +1 -0
- package/dist/builtins/games/trek/state.d.ts +190 -0
- package/dist/builtins/games/trek/state.js +84 -0
- package/dist/builtins/games/trek/state.js.map +1 -0
- package/dist/builtins/games/trek/style.d.ts +7 -0
- package/dist/builtins/games/trek/style.js +93 -0
- package/dist/builtins/games/trek/style.js.map +1 -0
- package/dist/builtins/games/trek/systemname.d.ts +10 -0
- package/dist/builtins/games/trek/systemname.js +12 -0
- package/dist/builtins/games/trek/systemname.js.map +1 -0
- package/dist/builtins/games/trek/torped.d.ts +3 -0
- package/dist/builtins/games/trek/torped.js +232 -0
- package/dist/builtins/games/trek/torped.js.map +1 -0
- package/dist/builtins/games/trek/trek.d.ts +27 -0
- package/dist/builtins/games/trek/trek.js +96 -0
- package/dist/builtins/games/trek/trek.js.map +1 -0
- package/dist/builtins/games/trek/visual.d.ts +3 -0
- package/dist/builtins/games/trek/visual.js +87 -0
- package/dist/builtins/games/trek/visual.js.map +1 -0
- package/dist/builtins/games/trek/warp.d.ts +5 -0
- package/dist/builtins/games/trek/warp.js +173 -0
- package/dist/builtins/games/trek/warp.js.map +1 -0
- package/dist/builtins/games/trek/win.d.ts +12 -0
- package/dist/builtins/games/trek/win.js +34 -0
- package/dist/builtins/games/trek/win.js.map +1 -0
- package/dist/builtins/help.js +6 -0
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/net/query.js +11 -2
- package/dist/builtins/net/query.js.map +1 -1
- package/dist/builtins/res/play.js +9 -0
- package/dist/builtins/res/play.js.map +1 -1
- package/dist/core/cancellation.d.ts +7 -0
- package/dist/core/cancellation.js +18 -0
- package/dist/core/cancellation.js.map +1 -1
- package/dist/core/commandOrder.js +3 -3
- package/dist/core/commandOrder.js.map +1 -1
- package/dist/core/coreCommands.js +3 -0
- package/dist/core/coreCommands.js.map +1 -1
- package/dist/core/engine.d.ts +16 -0
- package/dist/core/engine.js +12 -2
- package/dist/core/engine.js.map +1 -1
- package/dist/core/listing.js +9 -0
- package/dist/core/listing.js.map +1 -1
- package/dist/core/turn.d.ts +50 -0
- package/dist/core/turn.js +60 -0
- package/dist/core/turn.js.map +1 -0
- package/dist/notes.json +1 -1
- package/dist/session/recorder.d.ts +0 -15
- package/dist/session/recorder.js +9 -0
- package/dist/session/recorder.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file trek's terminal: printf out, a character stream in.
|
|
3
|
+
*
|
|
4
|
+
* The C reads its input a character at a time (getchar, ungetc, scanf),
|
|
5
|
+
* which is what lets a player type ahead — `move 2 45 3` on one line — and
|
|
6
|
+
* what makes it prompt only when the next character is a newline. This is
|
|
7
|
+
* that stream over a surface that answers questions a line at a time: when
|
|
8
|
+
* the stream runs dry, the partial line printed so far (`Command: `) is the
|
|
9
|
+
* question asked, and the answer, with its newline, is what getchar reads.
|
|
10
|
+
*
|
|
11
|
+
* exit() and longjmp() are thrown, as TrekExit and TrekReset, and caught
|
|
12
|
+
* where the C's main() and setjmp() stood. Written for the port.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import { sprintf } from './printf.js';
|
|
17
|
+
/** exit(code): the game is over and the command returns. */
|
|
18
|
+
export class TrekExit extends Error {
|
|
19
|
+
code;
|
|
20
|
+
/** @param code - The exit status. */
|
|
21
|
+
constructor(code) {
|
|
22
|
+
super(`trek exited ${code}`);
|
|
23
|
+
this.code = code;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** longjmp(env, 1): back to main's "Another game" question. */
|
|
27
|
+
export class TrekReset extends Error {
|
|
28
|
+
constructor() {
|
|
29
|
+
super('trek reset');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** End of input, as getchar() returns it. */
|
|
33
|
+
export const EOF = -1;
|
|
34
|
+
/** The terminal the game reads and writes. */
|
|
35
|
+
export class TrekIO {
|
|
36
|
+
terminal;
|
|
37
|
+
/** Printed, not yet written out (the tail is the next prompt). */
|
|
38
|
+
pending = '';
|
|
39
|
+
/** Characters typed, not yet read. */
|
|
40
|
+
input = [];
|
|
41
|
+
/** @param terminal - What it is wired to. */
|
|
42
|
+
constructor(terminal) {
|
|
43
|
+
this.terminal = terminal;
|
|
44
|
+
}
|
|
45
|
+
/** printf(format, ...). */
|
|
46
|
+
printf(format, ...args) {
|
|
47
|
+
this.pending += sprintf(format, ...args);
|
|
48
|
+
this.lines_flush();
|
|
49
|
+
}
|
|
50
|
+
/** putchar(c). */
|
|
51
|
+
putchar(c) {
|
|
52
|
+
this.pending += typeof c === 'number' ? String.fromCharCode(c) : c;
|
|
53
|
+
this.lines_flush();
|
|
54
|
+
}
|
|
55
|
+
/** Writes out every complete line printed; the partial tail waits. */
|
|
56
|
+
lines_flush() {
|
|
57
|
+
const cut = this.pending.lastIndexOf('\n');
|
|
58
|
+
if (cut < 0)
|
|
59
|
+
return;
|
|
60
|
+
this.terminal.write(this.pending.slice(0, cut + 1));
|
|
61
|
+
this.pending = this.pending.slice(cut + 1);
|
|
62
|
+
}
|
|
63
|
+
/** Writes out everything printed, the partial tail too (fflush). */
|
|
64
|
+
fflush() {
|
|
65
|
+
if (this.pending !== '')
|
|
66
|
+
this.terminal.write(this.pending);
|
|
67
|
+
this.pending = '';
|
|
68
|
+
}
|
|
69
|
+
/** getchar(): the next character typed, asking when none is waiting. */
|
|
70
|
+
async getchar() {
|
|
71
|
+
if (this.input.length === 0) {
|
|
72
|
+
const prompt = this.pending;
|
|
73
|
+
this.pending = '';
|
|
74
|
+
const line = await this.terminal.ask(prompt);
|
|
75
|
+
if (line === null)
|
|
76
|
+
return EOF;
|
|
77
|
+
for (const char of `${line}\n`)
|
|
78
|
+
this.input.push(char.charCodeAt(0));
|
|
79
|
+
}
|
|
80
|
+
return this.input.shift();
|
|
81
|
+
}
|
|
82
|
+
/** ungetc(c): puts a character back to be read next. */
|
|
83
|
+
ungetc(c) {
|
|
84
|
+
if (c !== EOF)
|
|
85
|
+
this.input.unshift(c);
|
|
86
|
+
}
|
|
87
|
+
/** sleep(seconds). */
|
|
88
|
+
async sleep(seconds) {
|
|
89
|
+
this.lines_flush();
|
|
90
|
+
await this.terminal.sleep(seconds);
|
|
91
|
+
}
|
|
92
|
+
/** exit(code). */
|
|
93
|
+
exit(code) {
|
|
94
|
+
this.fflush();
|
|
95
|
+
throw new TrekExit(code);
|
|
96
|
+
}
|
|
97
|
+
/* ------------------------------------------------- scanf, as trek uses it */
|
|
98
|
+
/** Skips white space, as a scanf numeric conversion does; returns the next character, unread. */
|
|
99
|
+
async space_skip() {
|
|
100
|
+
let c = await this.getchar();
|
|
101
|
+
while (c === 32 || c === 9 || c === 10 || c === 11 || c === 12 || c === 13)
|
|
102
|
+
c = await this.getchar();
|
|
103
|
+
return c;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* scanf("%d"): skips white space and reads an integer.
|
|
107
|
+
*
|
|
108
|
+
* @returns The count (1 read, 0 no match, -1 end of input) and the value.
|
|
109
|
+
*/
|
|
110
|
+
async scanInt() {
|
|
111
|
+
let c = await this.space_skip();
|
|
112
|
+
if (c === EOF)
|
|
113
|
+
return { count: -1, value: 0 };
|
|
114
|
+
let text = '';
|
|
115
|
+
if (c === 43 || c === 45) {
|
|
116
|
+
text += String.fromCharCode(c);
|
|
117
|
+
c = await this.getchar();
|
|
118
|
+
}
|
|
119
|
+
while (c >= 48 && c <= 57) {
|
|
120
|
+
text += String.fromCharCode(c);
|
|
121
|
+
c = await this.getchar();
|
|
122
|
+
}
|
|
123
|
+
this.ungetc(c);
|
|
124
|
+
if (!/\d/.test(text)) {
|
|
125
|
+
// Nothing that is a number: the sign (if any) is spent, as glibc spends it.
|
|
126
|
+
return { count: 0, value: 0 };
|
|
127
|
+
}
|
|
128
|
+
return { count: 1, value: Number.parseInt(text, 10) | 0 };
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* scanf("%lf"): skips white space and reads a decimal number.
|
|
132
|
+
*
|
|
133
|
+
* @returns The count (1 read, 0 no match, -1 end of input) and the value.
|
|
134
|
+
*/
|
|
135
|
+
async scanDouble() {
|
|
136
|
+
let c = await this.space_skip();
|
|
137
|
+
if (c === EOF)
|
|
138
|
+
return { count: -1, value: 0 };
|
|
139
|
+
let text = '';
|
|
140
|
+
const digit = (x) => x >= 48 && x <= 57;
|
|
141
|
+
if (c === 43 || c === 45) {
|
|
142
|
+
text += String.fromCharCode(c);
|
|
143
|
+
c = await this.getchar();
|
|
144
|
+
}
|
|
145
|
+
while (digit(c)) {
|
|
146
|
+
text += String.fromCharCode(c);
|
|
147
|
+
c = await this.getchar();
|
|
148
|
+
}
|
|
149
|
+
if (c === 46) {
|
|
150
|
+
text += '.';
|
|
151
|
+
c = await this.getchar();
|
|
152
|
+
while (digit(c)) {
|
|
153
|
+
text += String.fromCharCode(c);
|
|
154
|
+
c = await this.getchar();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (/\d/.test(text) && (c === 101 || c === 69)) {
|
|
158
|
+
const mark = text;
|
|
159
|
+
text += 'e';
|
|
160
|
+
c = await this.getchar();
|
|
161
|
+
if (c === 43 || c === 45) {
|
|
162
|
+
text += String.fromCharCode(c);
|
|
163
|
+
c = await this.getchar();
|
|
164
|
+
}
|
|
165
|
+
if (digit(c)) {
|
|
166
|
+
while (digit(c)) {
|
|
167
|
+
text += String.fromCharCode(c);
|
|
168
|
+
c = await this.getchar();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
text = mark;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
this.ungetc(c);
|
|
176
|
+
if (!/\d/.test(text))
|
|
177
|
+
return { count: 0, value: 0 };
|
|
178
|
+
return { count: 1, value: Number.parseFloat(text) };
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* scanf("%*[set]"): reads and discards characters in the set (no white
|
|
182
|
+
* space skipped first).
|
|
183
|
+
*
|
|
184
|
+
* @param set - The characters.
|
|
185
|
+
* @returns -1 at end of input before any, else 0.
|
|
186
|
+
*/
|
|
187
|
+
async scanSkip(set) {
|
|
188
|
+
let c = await this.getchar();
|
|
189
|
+
if (c === EOF)
|
|
190
|
+
return -1;
|
|
191
|
+
while (c !== EOF && set.includes(String.fromCharCode(c)))
|
|
192
|
+
c = await this.getchar();
|
|
193
|
+
this.ungetc(c);
|
|
194
|
+
return 0;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* scanf("%N[^set]"): reads up to N characters not in the set.
|
|
198
|
+
*
|
|
199
|
+
* @param stop - The characters that end it.
|
|
200
|
+
* @param max - At most this many.
|
|
201
|
+
* @returns The count (1 read, 0 none, -1 end of input) and the text.
|
|
202
|
+
*/
|
|
203
|
+
async scanUntil(stop, max) {
|
|
204
|
+
let c = await this.getchar();
|
|
205
|
+
if (c === EOF)
|
|
206
|
+
return { count: -1, value: '' };
|
|
207
|
+
let text = '';
|
|
208
|
+
while (c !== EOF && !stop.includes(String.fromCharCode(c)) && text.length < max) {
|
|
209
|
+
text += String.fromCharCode(c);
|
|
210
|
+
c = await this.getchar();
|
|
211
|
+
}
|
|
212
|
+
this.ungetc(c);
|
|
213
|
+
return { count: text.length > 0 ? 1 : 0, value: text };
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/io.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Trek } from './context.js';
|
|
2
|
+
/** Handle a Klingon's death. */
|
|
3
|
+
export declare function killk(t: Trek, ix: number, iy: number): Promise<void>;
|
|
4
|
+
/** Handle a starbase's death. */
|
|
5
|
+
export declare function killb(t: Trek, qx: number, qy: number): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
** kill an inhabited starsystem
|
|
8
|
+
**
|
|
9
|
+
** x, y are quad coords if f == 0, else sector coords
|
|
10
|
+
** f != 0 -- this quad; f < 0 -- Enterprise's fault
|
|
11
|
+
**/
|
|
12
|
+
/** Kill an inhabited starsystem. */
|
|
13
|
+
export declare function kills(t: Trek, x: number, y: number, f: number): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
** "kill" a distress call
|
|
16
|
+
**
|
|
17
|
+
** x, y are quadrant coordinates
|
|
18
|
+
** f is set if user is to be informed
|
|
19
|
+
**/
|
|
20
|
+
/** "Kill" a distress call. */
|
|
21
|
+
export declare function killd(t: Trek, x: number, y: number, f: number): Promise<void>;
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* kill.ts: a TypeScript port of BSD trek(6), from kill.c.
|
|
3
|
+
* Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): kill.c 1.11 2009/05/24.
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 1980, 1993
|
|
6
|
+
* The Regents of the University of California. All rights reserved.
|
|
7
|
+
*
|
|
8
|
+
* Redistribution and use in source and binary forms, with or without
|
|
9
|
+
* modification, are permitted provided that the following conditions
|
|
10
|
+
* are met:
|
|
11
|
+
* 1. Redistributions of source code must retain the above copyright
|
|
12
|
+
* notice, this list of conditions and the following disclaimer.
|
|
13
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
|
14
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
15
|
+
* documentation and/or other materials provided with the distribution.
|
|
16
|
+
* 3. Neither the name of the University nor the names of its contributors
|
|
17
|
+
* may be used to endorse or promote products derived from this software
|
|
18
|
+
* without specific prior written permission.
|
|
19
|
+
*
|
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
21
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
24
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
25
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
26
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
27
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
28
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
29
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
30
|
+
* SUCH DAMAGE.
|
|
31
|
+
*
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* @file The killing off of almost anything: a Klingon, a starbase, an
|
|
35
|
+
* inhabited starsystem, a distress call.
|
|
36
|
+
*
|
|
37
|
+
* @module
|
|
38
|
+
*/
|
|
39
|
+
import { DOCKED, E_ENSLV, E_GHOST, E_KATSB, E_KDESB, E_REPRO, EMPTY, MAXEVENTS, Q_DISTRESSED, Q_SYSTEM, SSRADIO, Systemname, TOOLARGE } from './consts.js';
|
|
40
|
+
import { damaged } from './damaged.js';
|
|
41
|
+
import { undock } from './dock.js';
|
|
42
|
+
import { schedule, unschedule } from './schedule.js';
|
|
43
|
+
import { systemname } from './systemname.js';
|
|
44
|
+
import { win } from './win.js';
|
|
45
|
+
/*
|
|
46
|
+
** KILL KILL KILL !!!
|
|
47
|
+
**
|
|
48
|
+
** This file handles the killing off of almost anything.
|
|
49
|
+
*/
|
|
50
|
+
/*
|
|
51
|
+
** Handle a Klingon's death
|
|
52
|
+
**
|
|
53
|
+
** The Klingon at the sector given by the parameters is killed
|
|
54
|
+
** and removed from the Klingon list. Notice that it is not
|
|
55
|
+
** removed from the event list; this is done later, when the
|
|
56
|
+
** the event is to be caught. Also, the time left is recomputed,
|
|
57
|
+
** and the game is won if that was the last klingon.
|
|
58
|
+
*/
|
|
59
|
+
/** Handle a Klingon's death. */
|
|
60
|
+
export async function killk(t, ix, iy) {
|
|
61
|
+
const { Now, Sect, Quad, Ship, Game, Etc } = t.s;
|
|
62
|
+
t.io.printf(' *** Klingon at %d,%d destroyed ***\n', ix, iy);
|
|
63
|
+
/* remove the scoundrel */
|
|
64
|
+
Now.klings -= 1;
|
|
65
|
+
Sect[ix][iy] = EMPTY;
|
|
66
|
+
Quad[Ship.quadx][Ship.quady].klings -= 1;
|
|
67
|
+
/* %%% IS THIS SAFE???? %%% */
|
|
68
|
+
Quad[Ship.quadx][Ship.quady].scanned -= 100;
|
|
69
|
+
Game.killk += 1;
|
|
70
|
+
/* find the Klingon in the Klingon list */
|
|
71
|
+
for (let i = 0; i < Etc.nkling; i++) {
|
|
72
|
+
if (ix === Etc.klingon[i].x && iy === Etc.klingon[i].y) {
|
|
73
|
+
/* purge him from the list */
|
|
74
|
+
Etc.nkling -= 1;
|
|
75
|
+
for (; i < Etc.nkling; i++)
|
|
76
|
+
Etc.klingon[i] = { ...Etc.klingon[i + 1] };
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/* find out if that was the last one */
|
|
81
|
+
if (Now.klings <= 0)
|
|
82
|
+
await win(t);
|
|
83
|
+
/* recompute time left */
|
|
84
|
+
Now.time = Now.resource / Now.klings;
|
|
85
|
+
}
|
|
86
|
+
/*
|
|
87
|
+
** handle a starbase's death
|
|
88
|
+
*/
|
|
89
|
+
/** Handle a starbase's death. */
|
|
90
|
+
export async function killb(t, qx, qy) {
|
|
91
|
+
const { Now, Sect, Ship, Etc } = t.s;
|
|
92
|
+
const q = t.s.Quad[qx][qy];
|
|
93
|
+
if (q.bases <= 0)
|
|
94
|
+
return;
|
|
95
|
+
if (!damaged(t, SSRADIO)) {
|
|
96
|
+
/* then update starchart */
|
|
97
|
+
if (q.scanned < 1000)
|
|
98
|
+
q.scanned -= 10;
|
|
99
|
+
else if (q.scanned > 1000)
|
|
100
|
+
q.scanned = -1;
|
|
101
|
+
}
|
|
102
|
+
q.bases = 0;
|
|
103
|
+
Now.bases -= 1;
|
|
104
|
+
let b;
|
|
105
|
+
for (b = 0;; b++) {
|
|
106
|
+
if (qx === Now.base[b].x && qy === Now.base[b].y)
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
const last = Now.base[Now.bases];
|
|
110
|
+
Now.base[b] = { ...last };
|
|
111
|
+
if (qx === Ship.quadx && qy === Ship.quady) {
|
|
112
|
+
Sect[Etc.starbase.x][Etc.starbase.y] = EMPTY;
|
|
113
|
+
if (Ship.cond === DOCKED)
|
|
114
|
+
await undock(t, 0);
|
|
115
|
+
t.io.printf('Starbase at %d,%d destroyed\n', Etc.starbase.x, Etc.starbase.y);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
if (!damaged(t, SSRADIO)) {
|
|
119
|
+
t.io.printf('Uhura: Starfleet command reports that the starbase in\n');
|
|
120
|
+
t.io.printf(' quadrant %d,%d has been destroyed\n', qx, qy);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
schedule(t, E_KATSB | E_GHOST, TOOLARGE, qx, qy, 0);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
** kill an inhabited starsystem
|
|
129
|
+
**
|
|
130
|
+
** x, y are quad coords if f == 0, else sector coords
|
|
131
|
+
** f != 0 -- this quad; f < 0 -- Enterprise's fault
|
|
132
|
+
**/
|
|
133
|
+
/** Kill an inhabited starsystem. */
|
|
134
|
+
export async function kills(t, x, y, f) {
|
|
135
|
+
const { Ship, Game } = t.s;
|
|
136
|
+
let q;
|
|
137
|
+
if (f) {
|
|
138
|
+
/* current quadrant */
|
|
139
|
+
q = t.s.Quad[Ship.quadx][Ship.quady];
|
|
140
|
+
t.s.Sect[x][y] = EMPTY;
|
|
141
|
+
const name = systemname(t, q);
|
|
142
|
+
if (name === null)
|
|
143
|
+
return;
|
|
144
|
+
t.io.printf('Inhabited starsystem %s at %d,%d destroyed\n', name, x, y);
|
|
145
|
+
if (f < 0)
|
|
146
|
+
Game.killinhab += 1;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
/* different quadrant */
|
|
150
|
+
q = t.s.Quad[x][y];
|
|
151
|
+
}
|
|
152
|
+
if (q.qsystemname & Q_DISTRESSED) {
|
|
153
|
+
/* distressed starsystem */
|
|
154
|
+
const e = q.qsystemname & Q_SYSTEM;
|
|
155
|
+
t.io.printf('Distress call for %s invalidated\n', Systemname[t.s.Event[e].systemname]);
|
|
156
|
+
unschedule(t, e);
|
|
157
|
+
}
|
|
158
|
+
q.qsystemname = 0;
|
|
159
|
+
q.stars -= 1;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
** "kill" a distress call
|
|
163
|
+
**
|
|
164
|
+
** x, y are quadrant coordinates
|
|
165
|
+
** f is set if user is to be informed
|
|
166
|
+
**/
|
|
167
|
+
/** "Kill" a distress call. */
|
|
168
|
+
export async function killd(t, x, y, f) {
|
|
169
|
+
const q = t.s.Quad[x][y];
|
|
170
|
+
for (let i = 0; i < MAXEVENTS; i++) {
|
|
171
|
+
const e = t.s.Event[i];
|
|
172
|
+
if (e.x !== x || e.y !== y)
|
|
173
|
+
continue;
|
|
174
|
+
switch (e.evcode) {
|
|
175
|
+
case E_KDESB:
|
|
176
|
+
if (f) {
|
|
177
|
+
t.io.printf('Distress call for starbase in %d,%d nullified\n', x, y);
|
|
178
|
+
unschedule(t, i);
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
case E_ENSLV:
|
|
182
|
+
case E_REPRO:
|
|
183
|
+
if (f) {
|
|
184
|
+
t.io.printf('Distress call for %s in quadrant %d,%d nullified\n', Systemname[e.systemname], x, y);
|
|
185
|
+
q.qsystemname = e.systemname;
|
|
186
|
+
unschedule(t, i);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
e.evcode |= E_GHOST;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=kill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kill.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/kill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* klmove.ts: a TypeScript port of BSD trek(6), from klmove.c.
|
|
3
|
+
* Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): klmove.c 1.9 2009/05/24.
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 1980, 1993
|
|
6
|
+
* The Regents of the University of California. All rights reserved.
|
|
7
|
+
*
|
|
8
|
+
* Redistribution and use in source and binary forms, with or without
|
|
9
|
+
* modification, are permitted provided that the following conditions
|
|
10
|
+
* are met:
|
|
11
|
+
* 1. Redistributions of source code must retain the above copyright
|
|
12
|
+
* notice, this list of conditions and the following disclaimer.
|
|
13
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
|
14
|
+
* notice, this list of conditions and the following disclaimer in the
|
|
15
|
+
* documentation and/or other materials provided with the distribution.
|
|
16
|
+
* 3. Neither the name of the University nor the names of its contributors
|
|
17
|
+
* may be used to endorse or promote products derived from this software
|
|
18
|
+
* without specific prior written permission.
|
|
19
|
+
*
|
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
21
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
24
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
25
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
26
|
+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
27
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
28
|
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
29
|
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
30
|
+
* SUCH DAMAGE.
|
|
31
|
+
*
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* @file Moving the Klingons around a quadrant: toward or away from the
|
|
35
|
+
* ship, around stars, and out into the next quadrant.
|
|
36
|
+
*
|
|
37
|
+
* @module
|
|
38
|
+
*/
|
|
39
|
+
import { compkldist } from './compkl.js';
|
|
40
|
+
import { EMPTY, KLINGON, MAXKLQUAD, NQUADS, NSECTS, SRSCAN } from './consts.js';
|
|
41
|
+
import { damaged } from './damaged.js';
|
|
42
|
+
import { ranf } from './rand.js';
|
|
43
|
+
/*
|
|
44
|
+
** Move Klingons Around
|
|
45
|
+
**
|
|
46
|
+
** This is a largely incomprehensible block of code that moves
|
|
47
|
+
** Klingons around in a quadrant. It was written in a very
|
|
48
|
+
** "program as you go" fashion, and is a prime candidate for
|
|
49
|
+
** rewriting.
|
|
50
|
+
**
|
|
51
|
+
** The flag `fl' is zero before an attack, one after an attack,
|
|
52
|
+
** and two if you are leaving a quadrant. This serves to
|
|
53
|
+
** change the probability and distance that it moves.
|
|
54
|
+
**
|
|
55
|
+
** Basically, what it will try to do is to move a certain number
|
|
56
|
+
** of steps either toward you or away from you. It will avoid
|
|
57
|
+
** stars whenever possible. Nextx and nexty are the next
|
|
58
|
+
** sector to move to on a per-Klingon basis; they are roughly
|
|
59
|
+
** equivalent to Ship.sectx and Ship.secty for the starship. Lookx and
|
|
60
|
+
** looky are the sector that you are going to look at to see
|
|
61
|
+
** if you can move their. Dx and dy are the increment. Fudgex
|
|
62
|
+
** and fudgey are the things you change around to change your
|
|
63
|
+
** course around stars.
|
|
64
|
+
*/
|
|
65
|
+
/** Moves the Klingons of the current quadrant. */
|
|
66
|
+
export async function klmove(t, fl) {
|
|
67
|
+
const { Ship, Param, Move, Etc } = t.s;
|
|
68
|
+
let k;
|
|
69
|
+
let dx;
|
|
70
|
+
let dy;
|
|
71
|
+
let nextx;
|
|
72
|
+
let nexty;
|
|
73
|
+
let lookx;
|
|
74
|
+
let looky;
|
|
75
|
+
let motion;
|
|
76
|
+
let fudgex;
|
|
77
|
+
let fudgey;
|
|
78
|
+
let qx;
|
|
79
|
+
let qy;
|
|
80
|
+
let bigger;
|
|
81
|
+
let i;
|
|
82
|
+
if (t.s.Trace)
|
|
83
|
+
t.io.printf('klmove: fl = %d, Etc.nkling = %d\n', fl, Etc.nkling);
|
|
84
|
+
for (let n = 0; n < Etc.nkling; n++) {
|
|
85
|
+
k = Etc.klingon[n];
|
|
86
|
+
i = 100;
|
|
87
|
+
if (fl)
|
|
88
|
+
i = Math.trunc(100.0 * k.power / Param.klingpwr);
|
|
89
|
+
if (ranf(t.rnd, i) >= Param.moveprob[2 * Move.newquad + fl])
|
|
90
|
+
continue;
|
|
91
|
+
/* compute distance to move */
|
|
92
|
+
motion = ranf(t.rnd, 75) - 25;
|
|
93
|
+
motion = Math.trunc(motion * (k.avgdist * Param.movefac[2 * Move.newquad + fl]));
|
|
94
|
+
/* compute direction */
|
|
95
|
+
dx = Ship.sectx - k.x + ranf(t.rnd, 3) - 1;
|
|
96
|
+
dy = Ship.secty - k.y + ranf(t.rnd, 3) - 1;
|
|
97
|
+
bigger = dx;
|
|
98
|
+
if (dy > bigger)
|
|
99
|
+
bigger = dy;
|
|
100
|
+
if (bigger === 0.0)
|
|
101
|
+
bigger = 1.0;
|
|
102
|
+
dx = dx / bigger + 0.5;
|
|
103
|
+
dy = dy / bigger + 0.5;
|
|
104
|
+
if (motion < 0) {
|
|
105
|
+
motion = -motion;
|
|
106
|
+
dx = -dx;
|
|
107
|
+
dy = -dy;
|
|
108
|
+
}
|
|
109
|
+
fudgex = fudgey = 1;
|
|
110
|
+
/* try to move the klingon */
|
|
111
|
+
nextx = k.x;
|
|
112
|
+
nexty = k.y;
|
|
113
|
+
for (; motion > 0; motion--) {
|
|
114
|
+
lookx = Math.trunc(nextx + dx);
|
|
115
|
+
looky = Math.trunc(nexty + dy);
|
|
116
|
+
if (lookx < 0 || lookx >= NSECTS ||
|
|
117
|
+
looky < 0 || looky >= NSECTS) {
|
|
118
|
+
/* new quadrant */
|
|
119
|
+
qx = Ship.quadx;
|
|
120
|
+
qy = Ship.quady;
|
|
121
|
+
if (lookx < 0)
|
|
122
|
+
qx -= 1;
|
|
123
|
+
else if (lookx >= NSECTS)
|
|
124
|
+
qx += 1;
|
|
125
|
+
if (looky < 0)
|
|
126
|
+
qy -= 1;
|
|
127
|
+
else if (looky >= NSECTS)
|
|
128
|
+
qy += 1;
|
|
129
|
+
if (qx < 0 || qx >= NQUADS ||
|
|
130
|
+
qy < 0 || qy >= NQUADS ||
|
|
131
|
+
t.s.Quad[qx][qy].stars < 0 ||
|
|
132
|
+
t.s.Quad[qx][qy].klings > MAXKLQUAD - 1) {
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
if (!damaged(t, SRSCAN)) {
|
|
136
|
+
t.io.printf('Klingon at %d,%d escapes to ' +
|
|
137
|
+
'quadrant %d,%d\n', k.x, k.y, qx, qy);
|
|
138
|
+
motion = t.s.Quad[qx][qy].scanned;
|
|
139
|
+
if (motion >= 0 && motion < 1000)
|
|
140
|
+
t.s.Quad[qx][qy].scanned += 100;
|
|
141
|
+
motion = t.s.Quad[Ship.quadx][Ship.quady].scanned;
|
|
142
|
+
if (motion >= 0 && motion < 1000)
|
|
143
|
+
t.s.Quad[Ship.quadx][Ship.quady].scanned -= 100;
|
|
144
|
+
}
|
|
145
|
+
t.s.Sect[k.x][k.y] = EMPTY;
|
|
146
|
+
t.s.Quad[qx][qy].klings += 1;
|
|
147
|
+
Etc.nkling -= 1;
|
|
148
|
+
// *k = Etc.klingon[Etc.nkling]: a struct copy into this slot
|
|
149
|
+
Etc.klingon[n] = { ...Etc.klingon[Etc.nkling] };
|
|
150
|
+
t.s.Quad[Ship.quadx][Ship.quady].klings -= 1;
|
|
151
|
+
k = null;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
if (t.s.Sect[lookx][looky] !== EMPTY) {
|
|
155
|
+
lookx = nextx + fudgex;
|
|
156
|
+
if (lookx < 0 || lookx >= NSECTS)
|
|
157
|
+
lookx = Math.trunc(nextx + dx);
|
|
158
|
+
if (t.s.Sect[lookx][looky] !== EMPTY) {
|
|
159
|
+
fudgex = -fudgex;
|
|
160
|
+
looky = nexty + fudgey;
|
|
161
|
+
if (looky < 0 || looky >= NSECTS ||
|
|
162
|
+
t.s.Sect[lookx][looky] !== EMPTY) {
|
|
163
|
+
fudgey = -fudgey;
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
nextx = lookx;
|
|
169
|
+
nexty = looky;
|
|
170
|
+
}
|
|
171
|
+
if (k && (k.x !== nextx || k.y !== nexty)) {
|
|
172
|
+
if (!damaged(t, SRSCAN)) {
|
|
173
|
+
t.io.printf('Klingon at %d,%d moves to %d,%d\n', k.x, k.y, nextx, nexty);
|
|
174
|
+
}
|
|
175
|
+
t.s.Sect[k.x][k.y] = EMPTY;
|
|
176
|
+
t.s.Sect[k.x = nextx][k.y = nexty] = KLINGON;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
compkldist(t, 0);
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=klmove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"klmove.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/klmove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The game lost: why, the score, and back to the question of
|
|
3
|
+
* another game.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import type { Trek } from './context.js';
|
|
8
|
+
/** PRINT OUT LOSER MESSAGES, then the score, and the game is restarted. */
|
|
9
|
+
export declare function lose(t: Trek, why: number): Promise<never>;
|