@fnndsc/brasa 0.37.0 → 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.
Files changed (213) hide show
  1. package/NOTICE +48 -0
  2. package/dist/buildinfo.json +1 -1
  3. package/dist/builtins/fs/cp.js +9 -5
  4. package/dist/builtins/fs/cp.js.map +1 -1
  5. package/dist/builtins/fs/destination.d.ts +15 -1
  6. package/dist/builtins/fs/destination.js +35 -2
  7. package/dist/builtins/fs/destination.js.map +1 -1
  8. package/dist/builtins/fs/mv.js +9 -5
  9. package/dist/builtins/fs/mv.js.map +1 -1
  10. package/dist/builtins/fs/rm.js +17 -1
  11. package/dist/builtins/fs/rm.js.map +1 -1
  12. package/dist/builtins/games/lab.js +3 -1
  13. package/dist/builtins/games/lab.js.map +1 -1
  14. package/dist/builtins/games/shelf.js +1 -1
  15. package/dist/builtins/games/shelf.js.map +1 -1
  16. package/dist/builtins/games/stdin.d.ts +0 -13
  17. package/dist/builtins/games/stdin.js +9 -0
  18. package/dist/builtins/games/stdin.js.map +1 -1
  19. package/dist/builtins/games/trek/abandon.d.ts +3 -0
  20. package/dist/builtins/games/trek/abandon.js +159 -0
  21. package/dist/builtins/games/trek/abandon.js.map +1 -0
  22. package/dist/builtins/games/trek/attack.d.ts +3 -0
  23. package/dist/builtins/games/trek/attack.js +185 -0
  24. package/dist/builtins/games/trek/attack.js.map +1 -0
  25. package/dist/builtins/games/trek/autover.d.ts +3 -0
  26. package/dist/builtins/games/trek/autover.js +79 -0
  27. package/dist/builtins/games/trek/autover.js.map +1 -0
  28. package/dist/builtins/games/trek/capture.d.ts +3 -0
  29. package/dist/builtins/games/trek/capture.js +117 -0
  30. package/dist/builtins/games/trek/capture.js.map +1 -0
  31. package/dist/builtins/games/trek/check_out.d.ts +3 -0
  32. package/dist/builtins/games/trek/check_out.js +67 -0
  33. package/dist/builtins/games/trek/check_out.js.map +1 -0
  34. package/dist/builtins/games/trek/checkcond.d.ts +3 -0
  35. package/dist/builtins/games/trek/checkcond.js +101 -0
  36. package/dist/builtins/games/trek/checkcond.js.map +1 -0
  37. package/dist/builtins/games/trek/compkl.d.ts +8 -0
  38. package/dist/builtins/games/trek/compkl.js +66 -0
  39. package/dist/builtins/games/trek/compkl.js.map +1 -0
  40. package/dist/builtins/games/trek/computer.d.ts +3 -0
  41. package/dist/builtins/games/trek/computer.js +310 -0
  42. package/dist/builtins/games/trek/computer.js.map +1 -0
  43. package/dist/builtins/games/trek/consts.d.ts +109 -0
  44. package/dist/builtins/games/trek/consts.js +159 -0
  45. package/dist/builtins/games/trek/consts.js.map +1 -0
  46. package/dist/builtins/games/trek/context.d.ts +27 -0
  47. package/dist/builtins/games/trek/context.js +2 -0
  48. package/dist/builtins/games/trek/context.js.map +1 -0
  49. package/dist/builtins/games/trek/damage.d.ts +3 -0
  50. package/dist/builtins/games/trek/damage.js +87 -0
  51. package/dist/builtins/games/trek/damage.js.map +1 -0
  52. package/dist/builtins/games/trek/damaged.d.ts +3 -0
  53. package/dist/builtins/games/trek/damaged.js +58 -0
  54. package/dist/builtins/games/trek/damaged.js.map +1 -0
  55. package/dist/builtins/games/trek/dcrept.d.ts +3 -0
  56. package/dist/builtins/games/trek/dcrept.js +86 -0
  57. package/dist/builtins/games/trek/dcrept.js.map +1 -0
  58. package/dist/builtins/games/trek/destruct.d.ts +3 -0
  59. package/dist/builtins/games/trek/destruct.js +114 -0
  60. package/dist/builtins/games/trek/destruct.js.map +1 -0
  61. package/dist/builtins/games/trek/dock.d.ts +5 -0
  62. package/dist/builtins/games/trek/dock.js +133 -0
  63. package/dist/builtins/games/trek/dock.js.map +1 -0
  64. package/dist/builtins/games/trek/dumpgame.d.ts +15 -0
  65. package/dist/builtins/games/trek/dumpgame.js +29 -0
  66. package/dist/builtins/games/trek/dumpgame.js.map +1 -0
  67. package/dist/builtins/games/trek/dumpme.d.ts +3 -0
  68. package/dist/builtins/games/trek/dumpme.js +81 -0
  69. package/dist/builtins/games/trek/dumpme.js.map +1 -0
  70. package/dist/builtins/games/trek/dumpssradio.d.ts +6 -0
  71. package/dist/builtins/games/trek/dumpssradio.js +72 -0
  72. package/dist/builtins/games/trek/dumpssradio.js.map +1 -0
  73. package/dist/builtins/games/trek/events.d.ts +3 -0
  74. package/dist/builtins/games/trek/events.js +407 -0
  75. package/dist/builtins/games/trek/events.js.map +1 -0
  76. package/dist/builtins/games/trek/getcodi.d.ts +14 -0
  77. package/dist/builtins/games/trek/getcodi.js +24 -0
  78. package/dist/builtins/games/trek/getcodi.js.map +1 -0
  79. package/dist/builtins/games/trek/getpar.d.ts +40 -0
  80. package/dist/builtins/games/trek/getpar.js +174 -0
  81. package/dist/builtins/games/trek/getpar.js.map +1 -0
  82. package/dist/builtins/games/trek/help.d.ts +3 -0
  83. package/dist/builtins/games/trek/help.js +155 -0
  84. package/dist/builtins/games/trek/help.js.map +1 -0
  85. package/dist/builtins/games/trek/impulse.d.ts +6 -0
  86. package/dist/builtins/games/trek/impulse.js +85 -0
  87. package/dist/builtins/games/trek/impulse.js.map +1 -0
  88. package/dist/builtins/games/trek/initquad.d.ts +17 -0
  89. package/dist/builtins/games/trek/initquad.js +79 -0
  90. package/dist/builtins/games/trek/initquad.js.map +1 -0
  91. package/dist/builtins/games/trek/io.d.ts +102 -0
  92. package/dist/builtins/games/trek/io.js +216 -0
  93. package/dist/builtins/games/trek/io.js.map +1 -0
  94. package/dist/builtins/games/trek/kill.d.ts +21 -0
  95. package/dist/builtins/games/trek/kill.js +194 -0
  96. package/dist/builtins/games/trek/kill.js.map +1 -0
  97. package/dist/builtins/games/trek/klmove.d.ts +3 -0
  98. package/dist/builtins/games/trek/klmove.js +181 -0
  99. package/dist/builtins/games/trek/klmove.js.map +1 -0
  100. package/dist/builtins/games/trek/lose.d.ts +9 -0
  101. package/dist/builtins/games/trek/lose.js +36 -0
  102. package/dist/builtins/games/trek/lose.js.map +1 -0
  103. package/dist/builtins/games/trek/lrscan.d.ts +3 -0
  104. package/dist/builtins/games/trek/lrscan.js +96 -0
  105. package/dist/builtins/games/trek/lrscan.js.map +1 -0
  106. package/dist/builtins/games/trek/main.d.ts +24 -0
  107. package/dist/builtins/games/trek/main.js +37 -0
  108. package/dist/builtins/games/trek/main.js.map +1 -0
  109. package/dist/builtins/games/trek/move.d.ts +3 -0
  110. package/dist/builtins/games/trek/move.js +229 -0
  111. package/dist/builtins/games/trek/move.js.map +1 -0
  112. package/dist/builtins/games/trek/nova.d.ts +3 -0
  113. package/dist/builtins/games/trek/nova.js +135 -0
  114. package/dist/builtins/games/trek/nova.js.map +1 -0
  115. package/dist/builtins/games/trek/out.d.ts +3 -0
  116. package/dist/builtins/games/trek/out.js +52 -0
  117. package/dist/builtins/games/trek/out.js.map +1 -0
  118. package/dist/builtins/games/trek/phaser.d.ts +3 -0
  119. package/dist/builtins/games/trek/phaser.js +341 -0
  120. package/dist/builtins/games/trek/phaser.js.map +1 -0
  121. package/dist/builtins/games/trek/play.d.ts +3 -0
  122. package/dist/builtins/games/trek/play.js +112 -0
  123. package/dist/builtins/games/trek/play.js.map +1 -0
  124. package/dist/builtins/games/trek/printf.d.ts +31 -0
  125. package/dist/builtins/games/trek/printf.js +157 -0
  126. package/dist/builtins/games/trek/printf.js.map +1 -0
  127. package/dist/builtins/games/trek/ram.d.ts +3 -0
  128. package/dist/builtins/games/trek/ram.js +97 -0
  129. package/dist/builtins/games/trek/ram.js.map +1 -0
  130. package/dist/builtins/games/trek/rand.d.ts +29 -0
  131. package/dist/builtins/games/trek/rand.js +109 -0
  132. package/dist/builtins/games/trek/rand.js.map +1 -0
  133. package/dist/builtins/games/trek/rest.d.ts +3 -0
  134. package/dist/builtins/games/trek/rest.js +76 -0
  135. package/dist/builtins/games/trek/rest.js.map +1 -0
  136. package/dist/builtins/games/trek/schedule.d.ts +23 -0
  137. package/dist/builtins/games/trek/schedule.js +55 -0
  138. package/dist/builtins/games/trek/schedule.js.map +1 -0
  139. package/dist/builtins/games/trek/score.d.ts +8 -0
  140. package/dist/builtins/games/trek/score.js +61 -0
  141. package/dist/builtins/games/trek/score.js.map +1 -0
  142. package/dist/builtins/games/trek/setup.d.ts +18 -0
  143. package/dist/builtins/games/trek/setup.js +251 -0
  144. package/dist/builtins/games/trek/setup.js.map +1 -0
  145. package/dist/builtins/games/trek/setwarp.d.ts +8 -0
  146. package/dist/builtins/games/trek/setwarp.js +28 -0
  147. package/dist/builtins/games/trek/setwarp.js.map +1 -0
  148. package/dist/builtins/games/trek/shield.d.ts +3 -0
  149. package/dist/builtins/games/trek/shield.js +139 -0
  150. package/dist/builtins/games/trek/shield.js.map +1 -0
  151. package/dist/builtins/games/trek/snova.d.ts +3 -0
  152. package/dist/builtins/games/trek/snova.js +156 -0
  153. package/dist/builtins/games/trek/snova.js.map +1 -0
  154. package/dist/builtins/games/trek/srscan.d.ts +3 -0
  155. package/dist/builtins/games/trek/srscan.js +176 -0
  156. package/dist/builtins/games/trek/srscan.js.map +1 -0
  157. package/dist/builtins/games/trek/state.d.ts +190 -0
  158. package/dist/builtins/games/trek/state.js +84 -0
  159. package/dist/builtins/games/trek/state.js.map +1 -0
  160. package/dist/builtins/games/trek/style.d.ts +7 -0
  161. package/dist/builtins/games/trek/style.js +93 -0
  162. package/dist/builtins/games/trek/style.js.map +1 -0
  163. package/dist/builtins/games/trek/systemname.d.ts +10 -0
  164. package/dist/builtins/games/trek/systemname.js +12 -0
  165. package/dist/builtins/games/trek/systemname.js.map +1 -0
  166. package/dist/builtins/games/trek/torped.d.ts +3 -0
  167. package/dist/builtins/games/trek/torped.js +232 -0
  168. package/dist/builtins/games/trek/torped.js.map +1 -0
  169. package/dist/builtins/games/trek/trek.d.ts +27 -0
  170. package/dist/builtins/games/trek/trek.js +96 -0
  171. package/dist/builtins/games/trek/trek.js.map +1 -0
  172. package/dist/builtins/games/trek/visual.d.ts +3 -0
  173. package/dist/builtins/games/trek/visual.js +87 -0
  174. package/dist/builtins/games/trek/visual.js.map +1 -0
  175. package/dist/builtins/games/trek/warp.d.ts +5 -0
  176. package/dist/builtins/games/trek/warp.js +173 -0
  177. package/dist/builtins/games/trek/warp.js.map +1 -0
  178. package/dist/builtins/games/trek/win.d.ts +12 -0
  179. package/dist/builtins/games/trek/win.js +34 -0
  180. package/dist/builtins/games/trek/win.js.map +1 -0
  181. package/dist/builtins/help.js +36 -1
  182. package/dist/builtins/help.js.map +1 -1
  183. package/dist/builtins/helpSections.d.ts +15 -0
  184. package/dist/builtins/helpSections.js +37 -2
  185. package/dist/builtins/helpSections.js.map +1 -1
  186. package/dist/builtins/net/query.js +11 -2
  187. package/dist/builtins/net/query.js.map +1 -1
  188. package/dist/builtins/res/play.js +9 -0
  189. package/dist/builtins/res/play.js.map +1 -1
  190. package/dist/chris/help.js +12 -0
  191. package/dist/chris/help.js.map +1 -1
  192. package/dist/core/cancellation.d.ts +7 -0
  193. package/dist/core/cancellation.js +18 -0
  194. package/dist/core/cancellation.js.map +1 -1
  195. package/dist/core/commandOrder.js +3 -3
  196. package/dist/core/commandOrder.js.map +1 -1
  197. package/dist/core/commandRegistry.d.ts +8 -0
  198. package/dist/core/commandRegistry.js.map +1 -1
  199. package/dist/core/coreCommands.js +3 -0
  200. package/dist/core/coreCommands.js.map +1 -1
  201. package/dist/core/engine.d.ts +16 -0
  202. package/dist/core/engine.js +12 -2
  203. package/dist/core/engine.js.map +1 -1
  204. package/dist/core/listing.js +9 -0
  205. package/dist/core/listing.js.map +1 -1
  206. package/dist/core/turn.d.ts +50 -0
  207. package/dist/core/turn.js +60 -0
  208. package/dist/core/turn.js.map +1 -0
  209. package/dist/notes.json +1 -1
  210. package/dist/session/recorder.d.ts +0 -15
  211. package/dist/session/recorder.js +9 -0
  212. package/dist/session/recorder.js.map +1 -1
  213. 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":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,OAAO,EAAkB,MAAM,aAAa,CAAC;AAEtD,4DAA4D;AAC5D,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEL;IAD5B,qCAAqC;IACrC,YAA4B,IAAY;QACtC,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QADH,SAAI,GAAJ,IAAI,CAAQ;IAExC,CAAC;CACF;AAED,+DAA+D;AAC/D,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC;QACE,KAAK,CAAC,YAAY,CAAC,CAAC;IACtB,CAAC;CACF;AAYD,6CAA6C;AAC7C,MAAM,CAAC,MAAM,GAAG,GAAW,CAAC,CAAC,CAAC;AAE9B,8CAA8C;AAC9C,MAAM,OAAO,MAAM;IAOY;IAN7B,kEAAkE;IAC1D,OAAO,GAAW,EAAE,CAAC;IAC7B,sCAAsC;IAC9B,KAAK,GAAa,EAAE,CAAC;IAE7B,6CAA6C;IAC7C,YAA6B,QAAsB;QAAtB,aAAQ,GAAR,QAAQ,CAAc;IAAG,CAAC;IAEvD,2BAA2B;IACpB,MAAM,CAAC,MAAc,EAAE,GAAG,IAAiB;QAChD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,kBAAkB;IACX,OAAO,CAAC,CAAkB;QAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,sEAAsE;IAC9D,WAAW;QACjB,MAAM,GAAG,GAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO;QACpB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,oEAAoE;IAC7D,MAAM;QACX,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,wEAAwE;IACjE,KAAK,CAAC,OAAO;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAW,IAAI,CAAC,OAAO,CAAC;YACpC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,MAAM,IAAI,GAAkB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,GAAG,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,IAAI,IAAI;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAY,CAAC;IACtC,CAAC;IAED,wDAAwD;IACjD,MAAM,CAAC,CAAS;QACrB,IAAI,CAAC,KAAK,GAAG;YAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,sBAAsB;IACf,KAAK,CAAC,KAAK,CAAC,OAAe;QAChC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,kBAAkB;IACX,IAAI,CAAC,IAAY;QACtB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,8EAA8E;IAE9E,iGAAiG;IACzF,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC,GAAW,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YAAE,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrG,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO;QAClB,IAAI,CAAC,GAAW,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC9C,IAAI,IAAI,GAAW,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YAAC,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QACvF,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAAC,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QACxF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,4EAA4E;YAC5E,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,UAAU;QACrB,IAAI,CAAC,GAAW,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC9C,IAAI,IAAI,GAAW,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACzD,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YAAC,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QACvF,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QAC9E,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YAAC,IAAI,IAAI,GAAG,CAAC;YAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,CAAC;QAAC,CAAC;QACvI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAW,IAAI,CAAC;YAC1B,IAAI,IAAI,GAAG,CAAC;YACZ,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;gBAAC,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,CAAC;YACvF,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBAAC,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAC,CAAC;YAAC,CAAC;iBAAM,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC;YAAC,CAAC;QACxH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IACtD,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,QAAQ,CAAC,GAAW;QAC/B,IAAI,CAAC,GAAW,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACnF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACf,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,GAAW;QAC9C,IAAI,CAAC,GAAW,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC/C,IAAI,IAAI,GAAW,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAChF,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;CACF"}
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;;;;;GAKG;AACH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE3J,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B;;;;EAIE;AAEF;;;;;;;;EAQE;AAEF,gCAAgC;AAChC,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,CAAO,EAAE,EAAU,EAAE,EAAU;IACzD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,yCAAyC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE/D,0BAA0B;IAC1B,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAChB,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IACzC,8BAA8B;IAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC;IAC5C,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAEhB,0CAA0C;IAC1C,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,6BAA6B;YAC7B,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvE,MAAM;QACR,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAElC,yBAAyB;IACzB,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;AACvC,CAAC;AAED;;EAEE;AAEF,iCAAiC;AACjC,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,CAAO,EAAE,EAAU,EAAE,EAAU;IACzD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,GAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAEjC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO;IACzB,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;QACzB,2BAA2B;QAC3B,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI;YAAE,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;aACjC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI;YAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IACZ,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;IACf,IAAI,CAAS,CAAC;IACd,KAAK,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE,EAAE,CAAC;QAClB,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM;IAC1D,CAAC;IACD,MAAM,IAAI,GAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAC1B,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,+BAA+B,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;YACzB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC;YACvE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,wCAAwC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;IAKI;AAEJ,oCAAoC;AACpC,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,CAAO,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;IAClE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAO,CAAC;IAEZ,IAAI,CAAC,EAAE,CAAC;QACN,sBAAsB;QACtB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACvB,MAAM,IAAI,GAAkB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QAC1B,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,8CAA8C,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,wBAAwB;QACxB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,CAAC,WAAW,GAAG,YAAY,EAAE,CAAC;QACjC,2BAA2B;QAC3B,MAAM,CAAC,GAAW,CAAC,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC3C,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,oCAAoC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACvF,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC;IAClB,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;IAKI;AAEJ,8BAA8B;AAC9B,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,CAAO,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;IAClE,MAAM,CAAC,GAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,SAAS;QACrC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,OAAO;gBACV,IAAI,CAAC,EAAE,CAAC;oBACN,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,iDAAiD,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACrE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnB,CAAC;gBACD,MAAM;YAER,KAAK,OAAO,CAAC;YACb,KAAK,OAAO;gBACV,IAAI,CAAC,EAAE,CAAC;oBACN,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,oDAAoD,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC;oBAC7B,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnB,CAAC;qBAAM,CAAC;oBACN,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC;gBACtB,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Trek } from './context.js';
2
+ /** Moves the Klingons of the current quadrant. */
3
+ export declare function klmove(t: Trek, fl: number): Promise<void>;
@@ -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>;