@fnndsc/brasa 0.37.1 → 0.38.1

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 (206) 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 +6 -0
  182. package/dist/builtins/help.js.map +1 -1
  183. package/dist/builtins/net/query.js +11 -2
  184. package/dist/builtins/net/query.js.map +1 -1
  185. package/dist/builtins/res/play.js +9 -0
  186. package/dist/builtins/res/play.js.map +1 -1
  187. package/dist/core/cancellation.d.ts +7 -0
  188. package/dist/core/cancellation.js +18 -0
  189. package/dist/core/cancellation.js.map +1 -1
  190. package/dist/core/commandOrder.js +3 -3
  191. package/dist/core/commandOrder.js.map +1 -1
  192. package/dist/core/coreCommands.js +3 -0
  193. package/dist/core/coreCommands.js.map +1 -1
  194. package/dist/core/engine.d.ts +16 -0
  195. package/dist/core/engine.js +12 -2
  196. package/dist/core/engine.js.map +1 -1
  197. package/dist/core/listing.js +9 -0
  198. package/dist/core/listing.js.map +1 -1
  199. package/dist/core/turn.d.ts +50 -0
  200. package/dist/core/turn.js +60 -0
  201. package/dist/core/turn.js.map +1 -0
  202. package/dist/notes.json +1 -1
  203. package/dist/session/recorder.d.ts +0 -15
  204. package/dist/session/recorder.js +9 -0
  205. package/dist/session/recorder.js.map +1 -1
  206. package/package.json +7 -6
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @file The scans as the bridge shows them: the game's own lines, each
3
+ * read once it is complete, with the short range grid in glyphs and
4
+ * colours and the long range counts coloured by what they count.
5
+ *
6
+ * Only the look changes: every glyph is one column wide, so the layout and
7
+ * the words are the original's, and `trek --classic` (or a plain output)
8
+ * skips this entirely.
9
+ *
10
+ * @module
11
+ */
12
+ import chalk from 'chalk';
13
+ /** A short range scan row: its number, ten sectors, its number again, the status beside it. */
14
+ const SRS_ROW = /^(\d) ((?:[^ ] | ){10})(\d)(.*)$/;
15
+ /** A long range scan row: its number, then the cells between bars. */
16
+ const LRS_ROW = /^(\d|\s) !(.*)$/;
17
+ /** A sector's glyph and colour. */
18
+ const SECTOR = {
19
+ '.': () => chalk.gray('·'),
20
+ '*': () => chalk.yellow('✶'),
21
+ '#': () => chalk.green.bold('◈'),
22
+ '@': () => chalk.magenta('◉'),
23
+ K: (one) => chalk.red.bold(one),
24
+ E: (one) => chalk.cyan.bold(one),
25
+ Q: (one) => chalk.cyan.bold(one),
26
+ };
27
+ /** A condition's colour, on the status line that names it. */
28
+ const CONDITION = {
29
+ GREEN: (word) => chalk.green.bold(word),
30
+ YELLOW: (word) => chalk.yellow.bold(word),
31
+ RED: (word) => chalk.red.bold(word),
32
+ DOCKED: (word) => chalk.cyan.bold(word),
33
+ };
34
+ /**
35
+ * The status beside a scan row, its condition coloured.
36
+ *
37
+ * @param status - The text after the row.
38
+ * @returns The text, styled.
39
+ */
40
+ function status_style(status) {
41
+ return status.replace(/^(\s*condition\s+)(GREEN|YELLOW|RED|DOCKED)/, (_all, lead, word) => `${lead}${CONDITION[word](word)}`);
42
+ }
43
+ /**
44
+ * A long range count, coloured by place: Klingons in the hundreds, starbases
45
+ * in the tens, stars in the units.
46
+ *
47
+ * @param digits - The count as printed.
48
+ * @returns The count, styled.
49
+ */
50
+ function count_style(digits) {
51
+ const places = digits.split('');
52
+ return places.map((digit, at) => {
53
+ const fromRight = places.length - 1 - at;
54
+ if (fromRight === 0)
55
+ return chalk.yellow(digit);
56
+ if (fromRight === 1)
57
+ return chalk.green(digit);
58
+ return chalk.red.bold(digit);
59
+ }).join('');
60
+ }
61
+ /**
62
+ * One line of the game, styled when it is a scan's.
63
+ *
64
+ * @param line - A complete line, without its newline.
65
+ * @returns The line to show.
66
+ */
67
+ export function trekLine_style(line) {
68
+ const srs = SRS_ROW.exec(line);
69
+ if (srs !== null) {
70
+ const [, row = '', cells = '', again = '', status = ''] = srs;
71
+ let shown = '';
72
+ for (let at = 0; at < cells.length; at += 2) {
73
+ const one = cells[at];
74
+ const glyph = SECTOR[one];
75
+ shown += `${glyph === undefined ? one : glyph(one)} `;
76
+ }
77
+ return `${chalk.gray(row)} ${shown}${chalk.gray(again)}${status_style(status)}`;
78
+ }
79
+ const lrs = LRS_ROW.exec(line);
80
+ if (lrs !== null && line.endsWith('!')) {
81
+ const [, row = '', cells = ''] = lrs;
82
+ const body = cells
83
+ .replace(/\d+/g, (digits) => count_style(digits))
84
+ .replace(/!/g, chalk.gray('!'))
85
+ .replace(/\*/g, chalk.gray('*'))
86
+ .replace(/\/\/\//g, chalk.red('///'));
87
+ return `${chalk.gray(row)} ${chalk.gray('!')}${body}`;
88
+ }
89
+ if (/^ {2}-+$/.test(line))
90
+ return chalk.gray(line);
91
+ return line;
92
+ }
93
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/style.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @file The name of a quadrant's starsystem, knowing about distressed
3
+ * systems (whose name is held by the distress event).
4
+ *
5
+ * @module
6
+ */
7
+ import type { Trek } from './context.js';
8
+ import type { Quad } from './state.js';
9
+ /** RETRIEVE THE STARSYSTEM NAME: null when the quadrant has none. */
10
+ export declare function systemname(t: Trek, q: Quad): string | null;
@@ -0,0 +1,12 @@
1
+ import { Q_DISTRESSED, Q_SYSTEM, Systemname } from './consts.js';
2
+ /** RETRIEVE THE STARSYSTEM NAME: null when the quadrant has none. */
3
+ export function systemname(t, q) {
4
+ let i = q.qsystemname;
5
+ if (i & Q_DISTRESSED)
6
+ i = t.s.Event[i & Q_SYSTEM].systemname;
7
+ i &= Q_SYSTEM;
8
+ if (i === 0)
9
+ return null;
10
+ return Systemname[i];
11
+ }
12
+ //# sourceMappingURL=systemname.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemname.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/systemname.ts"],"names":[],"mappings":"AAuCA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGjE,qEAAqE;AACrE,MAAM,UAAU,UAAU,CAAC,CAAO,EAAE,CAAO;IACzC,IAAI,CAAC,GAAW,CAAC,CAAC,WAAW,CAAC;IAC9B,IAAI,CAAC,GAAG,YAAY;QAAE,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAe,CAAC,UAAU,CAAC;IAC5E,CAAC,IAAI,QAAQ,CAAC;IACd,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,UAAU,CAAC,CAAC,CAAW,CAAC;AACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Trek } from './context.js';
2
+ /** Photon torpedo control. */
3
+ export declare function torped(t: Trek, _v: number): Promise<void>;
@@ -0,0 +1,232 @@
1
+ /*
2
+ * torped.ts: a TypeScript port of BSD trek(6), from torped.c.
3
+ * Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): torped.c 1.14 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 Photon torpedo control: one torpedo, or a burst of three across a
35
+ * spread angle, each on a randomly crudded course that may misfire.
36
+ *
37
+ * @module
38
+ */
39
+ import { BASE, DOCKED, EMPTY, HOLE, INHABIT, KLINGON, NSECTS, STAR, TORPED } from './consts.js';
40
+ import { check_out } from './check_out.js';
41
+ import { damage } from './damage.js';
42
+ import { damaged } from './damaged.js';
43
+ import { getintpar, getynpar, testnl } from './getpar.js';
44
+ import { killb, killk, kills } from './kill.js';
45
+ import { nova } from './nova.js';
46
+ import { franf, ranf } from './rand.js';
47
+ /*
48
+ ** PHOTON TORPEDO CONTROL
49
+ **
50
+ ** Either one or three photon torpedoes are fired. If three
51
+ ** are fired, it is called a "burst" and you also specify
52
+ ** a spread angle.
53
+ **
54
+ ** Torpedoes are never 100% accurate. There is always a random
55
+ ** cludge factor in their course which is increased if you have
56
+ ** your shields up. Hence, you will find that they are more
57
+ ** accurate at close range. However, they have the advantage that
58
+ ** at long range they don't lose any of their power as phasers
59
+ ** do, i.e., a hit is a hit is a hit, by any other name.
60
+ **
61
+ ** When the course spreads too much, you get a misfire, and the
62
+ ** course is randomized even more. You also have the chance that
63
+ ** the misfire damages your torpedo tubes.
64
+ */
65
+ /** Photon torpedo control. */
66
+ export async function torped(t, _v) {
67
+ const { Ship, Etc, Sect, Game, Move } = t.s;
68
+ let ix;
69
+ let iy;
70
+ let x;
71
+ let y;
72
+ let dx;
73
+ let dy;
74
+ let angle;
75
+ let course;
76
+ let course2;
77
+ let k;
78
+ let bigger;
79
+ let burst;
80
+ let n;
81
+ if (Ship.cloaked) {
82
+ t.io.printf('Federation regulations do not permit attack while cloaked.\n');
83
+ return;
84
+ }
85
+ if (check_out(t, TORPED))
86
+ return;
87
+ if (Ship.torped <= 0) {
88
+ t.io.printf('All photon torpedos expended\n');
89
+ return;
90
+ }
91
+ /* get the course */
92
+ course = await getintpar(t, 'Torpedo course');
93
+ if (course < 0 || course > 360)
94
+ return;
95
+ burst = -1;
96
+ /* need at least three torpedoes for a burst */
97
+ if (Ship.torped < 3) {
98
+ t.io.printf('No-burst mode selected\n');
99
+ burst = 0;
100
+ }
101
+ else {
102
+ /* see if the user wants one */
103
+ if (!(await testnl(t))) {
104
+ k = await t.io.getchar();
105
+ t.io.ungetc(k);
106
+ if (k >= 48 && k <= 57)
107
+ burst = 1;
108
+ }
109
+ }
110
+ if (burst < 0) {
111
+ burst = await getynpar(t, 'Do you want a burst');
112
+ }
113
+ if (burst) {
114
+ burst = await getintpar(t, 'burst angle');
115
+ if (burst <= 0)
116
+ return;
117
+ if (burst > 15) {
118
+ t.io.printf('Maximum burst angle is 15 degrees\n');
119
+ return;
120
+ }
121
+ }
122
+ const sectsize = NSECTS;
123
+ n = -1;
124
+ if (burst) {
125
+ n = 1;
126
+ course -= burst;
127
+ }
128
+ for (; n && n <= 3; n++) {
129
+ /* select a nice random course */
130
+ course2 = course + (await randcourse(t, n));
131
+ /* convert to radians */
132
+ angle = course2 * 0.0174532925;
133
+ dx = -Math.cos(angle);
134
+ dy = Math.sin(angle);
135
+ bigger = Math.abs(dx);
136
+ x = Math.abs(dy);
137
+ if (x > bigger)
138
+ bigger = x;
139
+ dx /= bigger;
140
+ dy /= bigger;
141
+ x = Ship.sectx + 0.5;
142
+ y = Ship.secty + 0.5;
143
+ if (Ship.cond !== DOCKED)
144
+ Ship.torped -= 1;
145
+ t.io.printf('Torpedo track');
146
+ if (n > 0)
147
+ t.io.printf(', torpedo number %d', n);
148
+ t.io.printf(':\n%6.1f\t%4.1f\n', x, y);
149
+ while (true) {
150
+ ix = Math.trunc((x += dx));
151
+ iy = Math.trunc((y += dy));
152
+ if (x < 0.0 || x >= sectsize || y < 0.0 || y >= sectsize) {
153
+ t.io.printf('Torpedo missed\n');
154
+ break;
155
+ }
156
+ t.io.printf('%6.1f\t%4.1f\n', x, y);
157
+ switch (Sect[ix][iy]) {
158
+ case EMPTY:
159
+ continue;
160
+ case HOLE:
161
+ t.io.printf('Torpedo disappears into a black hole\n');
162
+ break;
163
+ case KLINGON:
164
+ for (k = 0; k < Etc.nkling; k++) {
165
+ if (Etc.klingon[k].x !== ix || Etc.klingon[k].y !== iy)
166
+ continue;
167
+ Etc.klingon[k].power -= 500 + ranf(t.rnd, 501);
168
+ if (Etc.klingon[k].power > 0) {
169
+ t.io.printf('*** Hit on Klingon at %d,%d: extensive damages\n', ix, iy);
170
+ break;
171
+ }
172
+ await killk(t, ix, iy);
173
+ break;
174
+ }
175
+ break;
176
+ case STAR:
177
+ await nova(t, ix, iy);
178
+ break;
179
+ case INHABIT:
180
+ await kills(t, ix, iy, -1);
181
+ break;
182
+ case BASE:
183
+ await killb(t, Ship.quadx, Ship.quady);
184
+ Game.killb += 1;
185
+ break;
186
+ default:
187
+ t.io.printf('Unknown object %c at %d,%d destroyed\n', Sect[ix][iy], ix, iy);
188
+ Sect[ix][iy] = EMPTY;
189
+ break;
190
+ }
191
+ break;
192
+ }
193
+ if (damaged(t, TORPED) || t.s.Quad[Ship.quadx][Ship.quady].stars < 0)
194
+ break;
195
+ course += burst;
196
+ }
197
+ Move.free = 0;
198
+ }
199
+ /*
200
+ ** RANDOMIZE COURSE
201
+ **
202
+ ** This routine randomizes the course for torpedo number 'n'.
203
+ ** Other things handled by this routine are misfires, damages
204
+ ** to the tubes, etc.
205
+ */
206
+ /** Randomize the course for torpedo number n. */
207
+ async function randcourse(t, n) {
208
+ const { Ship, Param } = t.s;
209
+ let r;
210
+ let d;
211
+ d = Math.trunc((franf(t.rnd) + franf(t.rnd) - 1.0) * 20);
212
+ if (Math.abs(d) > 12) {
213
+ t.io.printf('Photon tubes misfire');
214
+ if (n < 0)
215
+ t.io.printf('\n');
216
+ else
217
+ t.io.printf(' on torpedo %d\n', n);
218
+ if (ranf(t.rnd, 2)) {
219
+ await damage(t, TORPED, 0.2 * Math.abs(d) * (franf(t.rnd) + 1.0));
220
+ }
221
+ d = Math.trunc(d * (1.0 + 2.0 * franf(t.rnd)));
222
+ }
223
+ if (Ship.shldup || Ship.cond === DOCKED) {
224
+ r = Ship.shield;
225
+ r = 1.0 + r / Param.shield;
226
+ if (Ship.cond === DOCKED)
227
+ r = 2.0;
228
+ d = Math.trunc(d * r);
229
+ }
230
+ return d;
231
+ }
232
+ //# sourceMappingURL=torped.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"torped.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/torped.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { CommandEnvelope } from '@fnndsc/menu';
2
+ import type { TrekDump } from './context.js';
3
+ import { type TrekTerminal } from './io.js';
4
+ import { type TrekOptions } from './main.js';
5
+ /** How a game is played: the game's own options, the look, and where it runs. */
6
+ export interface TrekPlay extends TrekOptions {
7
+ /** The random seed. */
8
+ seed: number;
9
+ /** True to style the scans. */
10
+ styled: boolean;
11
+ }
12
+ /**
13
+ * Plays a game of trek on a terminal.
14
+ *
15
+ * @param terminal - Where it is played.
16
+ * @param play - How.
17
+ * @param dump - The saved game slot.
18
+ * @returns The exit status.
19
+ */
20
+ export declare function trek_play(terminal: TrekTerminal, play: TrekPlay, dump?: TrekDump): Promise<number>;
21
+ /**
22
+ * `trek [--classic] [-f | -s] [--seed N]`.
23
+ *
24
+ * @param args - The words after the command.
25
+ * @returns The game's end.
26
+ */
27
+ export declare function builtin_trek(args: string[]): Promise<CommandEnvelope>;
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @file `trek`: the 1976 Berkeley space war game (BSD trek(6)), played by
3
+ * question in the console or a terminal.
4
+ *
5
+ * The game is a line-for-line port (see main.ts and its neighbours) that
6
+ * prints through a TrekIO; this module wires that to the session: lines to
7
+ * the data channel, each pending partial line as the question asked, sleeps
8
+ * as real pauses. Scans wear glyphs and colours unless `--classic` asks for
9
+ * the original look or the output has no colour.
10
+ *
11
+ * @module
12
+ */
13
+ import chalk from 'chalk';
14
+ import { envelope_error, envelope_ok } from '@fnndsc/menu';
15
+ import { repl_question } from '../../../core/question.js';
16
+ import { sink_get } from '../../../core/sink.js';
17
+ import { TrekIO } from './io.js';
18
+ import { trek_main } from './main.js';
19
+ import { TrekRandom } from './rand.js';
20
+ import { state_new } from './state.js';
21
+ import { trekLine_style } from './style.js';
22
+ /** The session's saved game: `dump` writes it, a `restart` length reads it back. */
23
+ const TREK_DUMP = { saved: null };
24
+ /**
25
+ * Plays a game of trek on a terminal.
26
+ *
27
+ * @param terminal - Where it is played.
28
+ * @param play - How.
29
+ * @param dump - The saved game slot.
30
+ * @returns The exit status.
31
+ */
32
+ export async function trek_play(terminal, play, dump = TREK_DUMP) {
33
+ const shown = play.styled ? terminal_styled(terminal) : terminal;
34
+ const t = { s: state_new(), io: new TrekIO(shown), rnd: new TrekRandom(play.seed), dump };
35
+ return trek_main(t, { fast: play.fast, trace: play.trace });
36
+ }
37
+ /**
38
+ * A terminal whose complete lines are styled before they are written.
39
+ *
40
+ * @param terminal - The terminal underneath.
41
+ * @returns The styling terminal.
42
+ */
43
+ function terminal_styled(terminal) {
44
+ const lines_style = (text) => text.split('\n').map(trekLine_style).join('\n');
45
+ return {
46
+ write: (text) => terminal.write(lines_style(text)),
47
+ ask: (prompt) => terminal.ask(prompt),
48
+ sleep: (seconds) => terminal.sleep(seconds),
49
+ };
50
+ }
51
+ /** The session's terminal: the data channel, the question, a real pause. */
52
+ const SESSION_TERMINAL = {
53
+ write: (text) => sink_get().data_write(text),
54
+ ask: async (prompt) => {
55
+ // What is printed before the last newline is output; the rest is the question.
56
+ const cut = prompt.lastIndexOf('\n');
57
+ if (cut >= 0)
58
+ sink_get().data_write(prompt.slice(0, cut + 1));
59
+ return repl_question(prompt.slice(cut + 1));
60
+ },
61
+ sleep: (seconds) => new Promise((resolve) => { setTimeout(resolve, seconds * 1000); }),
62
+ };
63
+ /** The flags trek takes. */
64
+ const USAGE = 'trek: usage: trek [--classic] [-f | -s] [--seed N]\n';
65
+ /**
66
+ * `trek [--classic] [-f | -s] [--seed N]`.
67
+ *
68
+ * @param args - The words after the command.
69
+ * @returns The game's end.
70
+ */
71
+ export async function builtin_trek(args) {
72
+ let classic = false;
73
+ let fast = 1;
74
+ let seed = Math.floor(Date.now() / 1000);
75
+ for (let at = 0; at < args.length; at++) {
76
+ const word = args[at];
77
+ if (word === '--classic')
78
+ classic = true;
79
+ else if (word === '-f')
80
+ fast++;
81
+ else if (word === '-s')
82
+ fast = 0;
83
+ else if (word === '--seed' && at + 1 < args.length && /^-?\d+$/.test(args[at + 1]))
84
+ seed = Number(args[++at]);
85
+ else
86
+ return envelope_error('', undefined, word.startsWith('-') ? `trek: unknown option '${word}'\n${USAGE}` : USAGE);
87
+ }
88
+ try {
89
+ const code = await trek_play(SESSION_TERMINAL, { seed, fast, trace: 0, styled: !classic && chalk.level > 0 });
90
+ return envelope_ok('', { kind: 'games.trek', data: { seed, exit: code } });
91
+ }
92
+ catch (error) {
93
+ return envelope_error('', undefined, `trek: cannot ask here (${error instanceof Error ? error.message : String(error)})\n`);
94
+ }
95
+ }
96
+ //# sourceMappingURL=trek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trek.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/trek.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Trek } from './context.js';
2
+ /** VISUAL SCAN */
3
+ export declare function visual(t: Trek, _z: number): Promise<void>;
@@ -0,0 +1,87 @@
1
+ /*
2
+ * visual.ts: a TypeScript port of BSD trek(6), from visual.c.
3
+ * Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): visual.c 1.10 2009/08/12.
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 visual scan: three sectors in the direction asked, for when
35
+ * the sensors are out.
36
+ *
37
+ * @module
38
+ */
39
+ import { NSECTS } from './consts.js';
40
+ import { getintpar } from './getpar.js';
41
+ /*
42
+ ** VISUAL SCAN
43
+ **
44
+ ** A visual scan is made in a particular direction of three sectors
45
+ ** in the general direction specified. This takes time, and
46
+ ** Klingons can attack you, so it should be done only when sensors
47
+ ** are out.
48
+ */
49
+ /* This struct[] has the delta x, delta y for particular directions */
50
+ // As compiled: struct xy holds unsigned chars, so the C's -1 is stored as 255 and those
51
+ // directions look off the edge ('?'). Kept, so the scan reads as the original's does.
52
+ const Visdelta = [
53
+ { x: 255, y: 255 },
54
+ { x: 255, y: 0 },
55
+ { x: 255, y: 1 },
56
+ { x: 0, y: 1 },
57
+ { x: 1, y: 1 },
58
+ { x: 1, y: 0 },
59
+ { x: 1, y: 255 },
60
+ { x: 0, y: 255 },
61
+ { x: 255, y: 255 },
62
+ { x: 255, y: 0 },
63
+ { x: 255, y: 1 },
64
+ ];
65
+ /** The sector at a delta from the ship: its character, or '?' off the edge. */
66
+ function look(t, v) {
67
+ const ix = t.s.Ship.sectx + v.x;
68
+ const iy = t.s.Ship.secty + v.y;
69
+ const co = ix < 0 || ix >= NSECTS || iy < 0 || iy >= NSECTS ? '?' : t.s.Sect[ix][iy];
70
+ return { ix, iy, co };
71
+ }
72
+ /** VISUAL SCAN */
73
+ export async function visual(t, _z) {
74
+ let co = await getintpar(t, 'direction');
75
+ if (co < 0 || co > 360)
76
+ return;
77
+ co = Math.trunc((co + 22) / 45);
78
+ const a = look(t, Visdelta[co]);
79
+ t.io.printf('%d,%d %c ', a.ix, a.iy, a.co);
80
+ const b = look(t, Visdelta[co + 1]);
81
+ t.io.printf('%c ', b.co);
82
+ const c = look(t, Visdelta[co + 2]);
83
+ t.io.printf('%c %d,%d\n', c.co, c.ix, c.iy);
84
+ t.s.Move.time = 0.05;
85
+ t.s.Move.free = 0;
86
+ }
87
+ //# sourceMappingURL=visual.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/visual.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Trek } from './context.js';
2
+ /** The move and ram commands: asks the course and distance, then warps. */
3
+ export declare function dowarp(t: Trek, fl: number): Promise<void>;
4
+ /** Moves under warp power on course c for distance d. */
5
+ export declare function warp(t: Trek, fl: number, c: number, d: number): Promise<void>;