@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,156 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* snova.ts: a TypeScript port of BSD trek(6), from snova.c.
|
|
3
|
+
* Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): snova.c 1.10 2018/02/08.
|
|
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 A supernova: in a random quadrant or, set off by the ship, in its
|
|
35
|
+
* own. The quadrant is uninhabitable for the rest of the game; the ship
|
|
36
|
+
* within two sectors of the star is lost.
|
|
37
|
+
*
|
|
38
|
+
* @module
|
|
39
|
+
*/
|
|
40
|
+
import { INHABIT, L_SNOVA, NQUADS, NSECTS, SSRADIO, STAR } from './consts.js';
|
|
41
|
+
import { damaged } from './damaged.js';
|
|
42
|
+
import { killb, killd } from './kill.js';
|
|
43
|
+
import { lose } from './lose.js';
|
|
44
|
+
import { ranf } from './rand.js';
|
|
45
|
+
import { win } from './win.js';
|
|
46
|
+
/*
|
|
47
|
+
** CAUSE SUPERNOVA TO OCCUR
|
|
48
|
+
**
|
|
49
|
+
** A supernova occurs. If 'ix' < 0, a random quadrant is chosen;
|
|
50
|
+
** otherwise, the current quadrant is taken, and (ix, iy) give
|
|
51
|
+
** the sector quadrants of the star which is blowing up.
|
|
52
|
+
**
|
|
53
|
+
** If the supernova turns out to be in the quadrant you are in,
|
|
54
|
+
** you go into "emergency override mode", which tries to get you
|
|
55
|
+
** out of the quadrant as fast as possible. However, if you
|
|
56
|
+
** don't have enough fuel, or if you by chance run into something,
|
|
57
|
+
** or some such thing, you blow up anyway. Oh yeh, if you are
|
|
58
|
+
** within two sectors of the star, there is nothing that can
|
|
59
|
+
** be done for you.
|
|
60
|
+
**
|
|
61
|
+
** When a star has gone supernova, the quadrant becomes uninhab-
|
|
62
|
+
** itable for the rest of eternity, i.e., the game. If you ever
|
|
63
|
+
** try stopping in such a quadrant, you will go into emergency
|
|
64
|
+
** override mode.
|
|
65
|
+
*/
|
|
66
|
+
/** Cause a supernova to occur. */
|
|
67
|
+
export async function snova(t, x, y) {
|
|
68
|
+
const { Ship, Sect, Now, Game } = t.s;
|
|
69
|
+
let qx;
|
|
70
|
+
let qy;
|
|
71
|
+
let ix;
|
|
72
|
+
let iy = 0;
|
|
73
|
+
let f;
|
|
74
|
+
let dx;
|
|
75
|
+
let dy;
|
|
76
|
+
let n;
|
|
77
|
+
let q;
|
|
78
|
+
f = 0;
|
|
79
|
+
ix = x;
|
|
80
|
+
if (ix < 0) {
|
|
81
|
+
/* choose a quadrant */
|
|
82
|
+
while (true) {
|
|
83
|
+
qx = ranf(t.rnd, NQUADS);
|
|
84
|
+
qy = ranf(t.rnd, NQUADS);
|
|
85
|
+
q = t.s.Quad[qx][qy];
|
|
86
|
+
if (q.stars > 0)
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
if (Ship.quadx === qx && Ship.quady === qy) {
|
|
90
|
+
/* select a particular star */
|
|
91
|
+
n = ranf(t.rnd, q.stars);
|
|
92
|
+
for (ix = 0; ix < NSECTS; ix++) {
|
|
93
|
+
for (iy = 0; iy < NSECTS; iy++) {
|
|
94
|
+
if (Sect[ix][iy] === STAR || Sect[ix][iy] === INHABIT) {
|
|
95
|
+
if ((n -= 1) <= 0)
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (n <= 0)
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
f = 1;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
/* current quadrant */
|
|
107
|
+
iy = y;
|
|
108
|
+
qx = Ship.quadx;
|
|
109
|
+
qy = Ship.quady;
|
|
110
|
+
q = t.s.Quad[qx][qy];
|
|
111
|
+
f = 1;
|
|
112
|
+
}
|
|
113
|
+
if (f) {
|
|
114
|
+
/* supernova is in same quadrant as Enterprise */
|
|
115
|
+
t.io.printf('\x07\nRED ALERT: supernova occurring at %d,%d\n', ix, iy);
|
|
116
|
+
dx = ix - Ship.sectx;
|
|
117
|
+
dy = iy - Ship.secty;
|
|
118
|
+
if (dx * dx + dy * dy <= 2) {
|
|
119
|
+
t.io.printf('*** Emergency override attem');
|
|
120
|
+
await t.io.sleep(1);
|
|
121
|
+
t.io.printf('\n');
|
|
122
|
+
await lose(t, L_SNOVA);
|
|
123
|
+
}
|
|
124
|
+
q.scanned = 1000;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
if (!damaged(t, SSRADIO)) {
|
|
128
|
+
q.scanned = 1000;
|
|
129
|
+
t.io.printf('\nUhura: Captain, Starfleet Command reports a supernova\n');
|
|
130
|
+
t.io.printf(' in quadrant %d,%d. Caution is advised\n', qx, qy);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/* clear out the supernova'ed quadrant */
|
|
134
|
+
dx = q.klings;
|
|
135
|
+
dy = q.stars;
|
|
136
|
+
Now.klings -= dx;
|
|
137
|
+
if (x >= 0) {
|
|
138
|
+
/* Enterprise caused supernova */
|
|
139
|
+
Game.kills += dy;
|
|
140
|
+
if (q.bases)
|
|
141
|
+
await killb(t, qx, qy);
|
|
142
|
+
Game.killk += dx;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
if (q.bases)
|
|
146
|
+
await killb(t, qx, qy);
|
|
147
|
+
}
|
|
148
|
+
await killd(t, qx, qy, x >= 0 ? 1 : 0);
|
|
149
|
+
q.stars = -1;
|
|
150
|
+
q.klings = 0;
|
|
151
|
+
if (Now.klings <= 0) {
|
|
152
|
+
t.io.printf('Lucky devil, that supernova destroyed the last klingon\n');
|
|
153
|
+
await win(t);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=snova.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snova.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/snova.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* srscan.ts: a TypeScript port of BSD trek(6), from srscan.c.
|
|
3
|
+
* Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): srscan.c 1.11 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 short range sensor scan of the current quadrant, with the
|
|
35
|
+
* status report beside it, as the original prints them.
|
|
36
|
+
*
|
|
37
|
+
* @module
|
|
38
|
+
*/
|
|
39
|
+
import { LIFESUP, NSECTS, Q_DISTRESSED, SHIELD, SRSCAN } from './consts.js';
|
|
40
|
+
import { check_out } from './check_out.js';
|
|
41
|
+
import { damaged } from './damaged.js';
|
|
42
|
+
import { getynpar, testnl } from './getpar.js';
|
|
43
|
+
import { Lentab, Skitab } from './setup.js';
|
|
44
|
+
import { systemname } from './systemname.js';
|
|
45
|
+
/*
|
|
46
|
+
** SHORT RANGE SENSOR SCAN
|
|
47
|
+
**
|
|
48
|
+
** A short range scan is taken of the current quadrant. If the
|
|
49
|
+
** flag 'f' is one, it is an "auto srscan", which is not done
|
|
50
|
+
** unless in 'fast' mode. It does a status report and a srscan.
|
|
51
|
+
** If 'f' is -1, you get a status report only. If it is zero,
|
|
52
|
+
** you get a srscan and an optional status report. The status
|
|
53
|
+
** report is taken if you enter "srscan yes"; for all srscans
|
|
54
|
+
** thereafter you get a status report with your srscan until
|
|
55
|
+
** you type "srscan no". It defaults to on.
|
|
56
|
+
**
|
|
57
|
+
** The current quadrant is filled in on the computer chart.
|
|
58
|
+
*/
|
|
59
|
+
/** The condition names, by Ship.cond. */
|
|
60
|
+
const Color = ['GREEN', 'DOCKED', 'YELLOW', 'RED'];
|
|
61
|
+
/** SHORT RANGE SENSOR SCAN */
|
|
62
|
+
export async function srscan(t, f) {
|
|
63
|
+
let statinfo;
|
|
64
|
+
let s;
|
|
65
|
+
let percent;
|
|
66
|
+
let q = null;
|
|
67
|
+
let p;
|
|
68
|
+
if (f >= 0 && check_out(t, SRSCAN)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (f) {
|
|
72
|
+
statinfo = 1;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
if (!(await testnl(t)))
|
|
76
|
+
t.s.Etc.statreport = await getynpar(t, 'status report');
|
|
77
|
+
statinfo = t.s.Etc.statreport;
|
|
78
|
+
}
|
|
79
|
+
if (f > 0) {
|
|
80
|
+
t.s.Etc.statreport = 1;
|
|
81
|
+
if (!t.s.Etc.fast)
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (f >= 0) {
|
|
85
|
+
t.io.printf('\nShort range sensor scan\n');
|
|
86
|
+
q = t.s.Quad[t.s.Ship.quadx][t.s.Ship.quady];
|
|
87
|
+
q.scanned = q.klings * 100 + q.bases * 10 + q.stars;
|
|
88
|
+
t.io.printf(' ');
|
|
89
|
+
for (let i = 0; i < NSECTS; i++) {
|
|
90
|
+
t.io.printf('%d ', i);
|
|
91
|
+
}
|
|
92
|
+
t.io.printf('\n');
|
|
93
|
+
}
|
|
94
|
+
for (let i = 0; i < NSECTS; i++) {
|
|
95
|
+
if (f >= 0) {
|
|
96
|
+
t.io.printf('%d ', i);
|
|
97
|
+
for (let j = 0; j < NSECTS; j++)
|
|
98
|
+
t.io.printf('%c ', t.s.Sect[i][j]);
|
|
99
|
+
t.io.printf('%d', i);
|
|
100
|
+
if (statinfo)
|
|
101
|
+
t.io.printf(' ');
|
|
102
|
+
}
|
|
103
|
+
if (statinfo) {
|
|
104
|
+
switch (i) {
|
|
105
|
+
case 0:
|
|
106
|
+
t.io.printf('stardate %.2f', t.s.Now.date);
|
|
107
|
+
break;
|
|
108
|
+
case 1:
|
|
109
|
+
t.io.printf('condition %s', Color[t.s.Ship.cond]);
|
|
110
|
+
if (t.s.Ship.cloaked)
|
|
111
|
+
t.io.printf(', CLOAKED');
|
|
112
|
+
break;
|
|
113
|
+
case 2:
|
|
114
|
+
t.io.printf('position %d,%d/%d,%d', t.s.Ship.quadx, t.s.Ship.quady, t.s.Ship.sectx, t.s.Ship.secty);
|
|
115
|
+
break;
|
|
116
|
+
case 3:
|
|
117
|
+
t.io.printf('warp factor %.1f', t.s.Ship.warp);
|
|
118
|
+
break;
|
|
119
|
+
case 4:
|
|
120
|
+
t.io.printf('total energy %d', t.s.Ship.energy);
|
|
121
|
+
break;
|
|
122
|
+
case 5:
|
|
123
|
+
t.io.printf('torpedoes %d', t.s.Ship.torped);
|
|
124
|
+
break;
|
|
125
|
+
case 6:
|
|
126
|
+
s = 'down';
|
|
127
|
+
if (t.s.Ship.shldup)
|
|
128
|
+
s = 'up';
|
|
129
|
+
if (damaged(t, SHIELD))
|
|
130
|
+
s = 'damaged';
|
|
131
|
+
percent = Math.trunc(100.0 * t.s.Ship.shield / t.s.Param.shield);
|
|
132
|
+
t.io.printf('shields %s, %d%%', s, percent);
|
|
133
|
+
break;
|
|
134
|
+
case 7:
|
|
135
|
+
t.io.printf('Klingons left %d', t.s.Now.klings);
|
|
136
|
+
break;
|
|
137
|
+
case 8:
|
|
138
|
+
t.io.printf('time left %.2f', t.s.Now.time);
|
|
139
|
+
break;
|
|
140
|
+
case 9:
|
|
141
|
+
t.io.printf('life support ');
|
|
142
|
+
if (damaged(t, LIFESUP)) {
|
|
143
|
+
t.io.printf('damaged, reserves = %.2f', t.s.Ship.reserves);
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
t.io.printf('active');
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
t.io.printf('\n');
|
|
151
|
+
}
|
|
152
|
+
if (f < 0) {
|
|
153
|
+
t.io.printf('current crew %d\n', t.s.Ship.crew);
|
|
154
|
+
t.io.printf('brig space %d\n', t.s.Ship.brigfree);
|
|
155
|
+
t.io.printf('Klingon power %d\n', t.s.Param.klingpwr);
|
|
156
|
+
let n = t.s.Game.length - 1;
|
|
157
|
+
if (t.s.Game.length > 2)
|
|
158
|
+
n--;
|
|
159
|
+
p = Lentab[n];
|
|
160
|
+
t.io.printf('Length, Skill %s%s, ', p.abbrev, p.full);
|
|
161
|
+
p = Skitab[t.s.Game.skill - 1];
|
|
162
|
+
t.io.printf('%s%s\n', p.abbrev, p.full);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
t.io.printf(' ');
|
|
166
|
+
for (let i = 0; i < NSECTS; i++)
|
|
167
|
+
t.io.printf('%d ', i);
|
|
168
|
+
t.io.printf('\n');
|
|
169
|
+
// q is set: f >= 0 here
|
|
170
|
+
const here = q;
|
|
171
|
+
if (here.qsystemname & Q_DISTRESSED)
|
|
172
|
+
t.io.printf('Distressed ');
|
|
173
|
+
if (here.qsystemname)
|
|
174
|
+
t.io.printf('Starsystem %s\n', systemname(t, here) ?? '(null)');
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=srscan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"srscan.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/srscan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/** One quadrant of the galaxy. */
|
|
2
|
+
export interface Quad {
|
|
3
|
+
/** Number of bases in this quadrant. */
|
|
4
|
+
bases: number;
|
|
5
|
+
/** Number of Klingons in this quadrant. */
|
|
6
|
+
klings: number;
|
|
7
|
+
/** Number of black holes in this quadrant. */
|
|
8
|
+
holes: number;
|
|
9
|
+
/** Star chart entry: -1 unscanned, else 100*klings + 10*bases + stars (1000 for a supernova). */
|
|
10
|
+
scanned: number;
|
|
11
|
+
/** Number of stars in this quadrant (-1 after a supernova). */
|
|
12
|
+
stars: number;
|
|
13
|
+
/** Starsystem name index, with Q_DISTRESSED. */
|
|
14
|
+
qsystemname: number;
|
|
15
|
+
}
|
|
16
|
+
/** One pending event. */
|
|
17
|
+
export interface TrekEvent {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
/** Trap stardate. */
|
|
21
|
+
date: number;
|
|
22
|
+
/** Event type, with E_GHOST / E_HIDDEN. */
|
|
23
|
+
evcode: number;
|
|
24
|
+
/** Starsystem name. */
|
|
25
|
+
systemname: number;
|
|
26
|
+
}
|
|
27
|
+
/** One Klingon in the current quadrant. */
|
|
28
|
+
export interface Kling {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
/** Power left. */
|
|
32
|
+
power: number;
|
|
33
|
+
/** Distance to the Enterprise. */
|
|
34
|
+
dist: number;
|
|
35
|
+
/** Average over this move. */
|
|
36
|
+
avgdist: number;
|
|
37
|
+
/** Set if surrender has been requested. */
|
|
38
|
+
srndreq: number;
|
|
39
|
+
}
|
|
40
|
+
/** A coordinate pair. */
|
|
41
|
+
export interface XY {
|
|
42
|
+
x: number;
|
|
43
|
+
y: number;
|
|
44
|
+
}
|
|
45
|
+
/** The starship. */
|
|
46
|
+
export interface Ship {
|
|
47
|
+
warp: number;
|
|
48
|
+
warp2: number;
|
|
49
|
+
warp3: number;
|
|
50
|
+
/** Shield up flag. */
|
|
51
|
+
shldup: number;
|
|
52
|
+
/** Set if the cloaking device is on. */
|
|
53
|
+
cloaked: number;
|
|
54
|
+
energy: number;
|
|
55
|
+
shield: number;
|
|
56
|
+
/** Life support reserves. */
|
|
57
|
+
reserves: number;
|
|
58
|
+
crew: number;
|
|
59
|
+
/** Space left in the brig. */
|
|
60
|
+
brigfree: number;
|
|
61
|
+
torped: number;
|
|
62
|
+
/** Set if we have moved. */
|
|
63
|
+
cloakgood: number;
|
|
64
|
+
quadx: number;
|
|
65
|
+
quady: number;
|
|
66
|
+
sectx: number;
|
|
67
|
+
secty: number;
|
|
68
|
+
/** Condition code. */
|
|
69
|
+
cond: number;
|
|
70
|
+
/** Set if SINS is working but not calibrated. */
|
|
71
|
+
sinsbad: number;
|
|
72
|
+
/** Name of the current starship. */
|
|
73
|
+
shipname: string;
|
|
74
|
+
/** Current starship: ENTERPRISE or QUEENE. */
|
|
75
|
+
ship: string;
|
|
76
|
+
/** Number of distress calls. */
|
|
77
|
+
distressed: number;
|
|
78
|
+
}
|
|
79
|
+
/** The game as a whole. */
|
|
80
|
+
export interface Game {
|
|
81
|
+
killk: number;
|
|
82
|
+
deaths: number;
|
|
83
|
+
negenbar: number;
|
|
84
|
+
killb: number;
|
|
85
|
+
kills: number;
|
|
86
|
+
skill: number;
|
|
87
|
+
length: number;
|
|
88
|
+
killed: number;
|
|
89
|
+
killinhab: number;
|
|
90
|
+
tourn: number;
|
|
91
|
+
passwd: string;
|
|
92
|
+
snap: number;
|
|
93
|
+
helps: number;
|
|
94
|
+
captives: number;
|
|
95
|
+
}
|
|
96
|
+
/** This move. */
|
|
97
|
+
export interface Move {
|
|
98
|
+
free: number;
|
|
99
|
+
endgame: number;
|
|
100
|
+
shldchg: number;
|
|
101
|
+
newquad: number;
|
|
102
|
+
resting: number;
|
|
103
|
+
time: number;
|
|
104
|
+
}
|
|
105
|
+
/** The game's parameters, set by skill and length. */
|
|
106
|
+
export interface Param {
|
|
107
|
+
bases: number;
|
|
108
|
+
klings: number;
|
|
109
|
+
date: number;
|
|
110
|
+
time: number;
|
|
111
|
+
resource: number;
|
|
112
|
+
energy: number;
|
|
113
|
+
shield: number;
|
|
114
|
+
reserves: number;
|
|
115
|
+
crew: number;
|
|
116
|
+
brigfree: number;
|
|
117
|
+
torped: number;
|
|
118
|
+
damfac: number[];
|
|
119
|
+
dockfac: number;
|
|
120
|
+
regenfac: number;
|
|
121
|
+
stopengy: number;
|
|
122
|
+
shupengy: number;
|
|
123
|
+
klingpwr: number;
|
|
124
|
+
warptime: number;
|
|
125
|
+
phasfac: number;
|
|
126
|
+
moveprob: number[];
|
|
127
|
+
movefac: number[];
|
|
128
|
+
eventdly: number[];
|
|
129
|
+
navigcrud: number[];
|
|
130
|
+
cloakenergy: number;
|
|
131
|
+
damprob: number[];
|
|
132
|
+
hitfac: number;
|
|
133
|
+
klingcrew: number;
|
|
134
|
+
srndrprob: number;
|
|
135
|
+
energylow: number;
|
|
136
|
+
}
|
|
137
|
+
/** The present. */
|
|
138
|
+
export interface Now {
|
|
139
|
+
bases: number;
|
|
140
|
+
klings: number;
|
|
141
|
+
date: number;
|
|
142
|
+
time: number;
|
|
143
|
+
resource: number;
|
|
144
|
+
distressed: number;
|
|
145
|
+
/** Index into Event[] of each event type's pending event, -1 for none. */
|
|
146
|
+
eventptr: number[];
|
|
147
|
+
/** Locations of starbases. */
|
|
148
|
+
base: XY[];
|
|
149
|
+
}
|
|
150
|
+
/** What a time warp restores: the galaxy, the events and the present. */
|
|
151
|
+
export interface Snapshot {
|
|
152
|
+
Quad: Quad[][];
|
|
153
|
+
Event: TrekEvent[];
|
|
154
|
+
Now: Now;
|
|
155
|
+
}
|
|
156
|
+
/** Everything else. */
|
|
157
|
+
export interface Etc {
|
|
158
|
+
/** Sorted Klingon list. */
|
|
159
|
+
klingon: Kling[];
|
|
160
|
+
/** Number of Klingons in this sector; < 0 means automatic override mode. */
|
|
161
|
+
nkling: number;
|
|
162
|
+
/** Set if speed > 300 baud. */
|
|
163
|
+
fast: number;
|
|
164
|
+
/** Starbase in the current quadrant. */
|
|
165
|
+
starbase: XY;
|
|
166
|
+
/** Snapshot for the time warp, null before one is taken. */
|
|
167
|
+
snapshot: Snapshot | null;
|
|
168
|
+
/** Set to get a status report on a srscan. */
|
|
169
|
+
statreport: number;
|
|
170
|
+
}
|
|
171
|
+
/** One game's state. */
|
|
172
|
+
export interface TrekState {
|
|
173
|
+
Quad: Quad[][];
|
|
174
|
+
/** Current sector map, Sect[x][y]. */
|
|
175
|
+
Sect: string[][];
|
|
176
|
+
Event: TrekEvent[];
|
|
177
|
+
Ship: Ship;
|
|
178
|
+
Game: Game;
|
|
179
|
+
Move: Move;
|
|
180
|
+
Param: Param;
|
|
181
|
+
Now: Now;
|
|
182
|
+
Etc: Etc;
|
|
183
|
+
Trace: number;
|
|
184
|
+
}
|
|
185
|
+
/** A fresh, zeroed game state (the C's static storage is zeroed too). */
|
|
186
|
+
export declare function state_new(): TrekState;
|
|
187
|
+
/** A deep copy of what a snapshot holds (structuredClone keeps no references to the live state). */
|
|
188
|
+
export declare function snapshot_take(s: TrekState): Snapshot;
|
|
189
|
+
/** Puts a snapshot back over the live state. */
|
|
190
|
+
export declare function snapshot_restore(s: TrekState, snap: Snapshot): void;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* state.ts: a TypeScript port of BSD trek(6), from trek.h, externs.c.
|
|
3
|
+
* Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): trek.h 1.19 2024/02/10; externs.c 1.10 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 trek's global state, as one object per game.
|
|
35
|
+
*
|
|
36
|
+
* The C keeps everything in globals (Quad, Sect, Event, Ship, Game, Move,
|
|
37
|
+
* Param, Now, Etc); here they are fields of one TrekState, so two sessions
|
|
38
|
+
* never share a galaxy. Field names are the C names. Where the C used a
|
|
39
|
+
* pointer into Event[], the port keeps an index into it (-1 for none), so
|
|
40
|
+
* a snapshot (Etc.snapshot, the time warp) copies cleanly.
|
|
41
|
+
*
|
|
42
|
+
* @module
|
|
43
|
+
*/
|
|
44
|
+
import { MAXBASES, MAXEVENTS, MAXKLQUAD, NDEV, NEVENTS, NQUADS, NSECTS } from './consts.js';
|
|
45
|
+
/** A fresh, zeroed game state (the C's static storage is zeroed too). */
|
|
46
|
+
export function state_new() {
|
|
47
|
+
const quad = () => ({ bases: 0, klings: 0, holes: 0, scanned: 0, stars: 0, qsystemname: 0 });
|
|
48
|
+
const event = () => ({ x: 0, y: 0, date: 0, evcode: 0, systemname: 0 });
|
|
49
|
+
const kling = () => ({ x: 0, y: 0, power: 0, dist: 0, avgdist: 0, srndreq: 0 });
|
|
50
|
+
const zeros = (n) => new Array(n).fill(0);
|
|
51
|
+
return {
|
|
52
|
+
Quad: Array.from({ length: NQUADS }, () => Array.from({ length: NQUADS }, quad)),
|
|
53
|
+
Sect: Array.from({ length: NSECTS }, () => new Array(NSECTS).fill('\0')),
|
|
54
|
+
Event: Array.from({ length: MAXEVENTS }, event),
|
|
55
|
+
Ship: {
|
|
56
|
+
warp: 0, warp2: 0, warp3: 0, shldup: 0, cloaked: 0, energy: 0, shield: 0, reserves: 0, crew: 0, brigfree: 0,
|
|
57
|
+
torped: 0, cloakgood: 0, quadx: 0, quady: 0, sectx: 0, secty: 0, cond: 0, sinsbad: 0, shipname: '', ship: '\0', distressed: 0,
|
|
58
|
+
},
|
|
59
|
+
Game: { killk: 0, deaths: 0, negenbar: 0, killb: 0, kills: 0, skill: 0, length: 0, killed: 0, killinhab: 0, tourn: 0, passwd: '', snap: 0, helps: 0, captives: 0 },
|
|
60
|
+
Move: { free: 0, endgame: 0, shldchg: 0, newquad: 0, resting: 0, time: 0 },
|
|
61
|
+
Param: {
|
|
62
|
+
bases: 0, klings: 0, date: 0, time: 0, resource: 0, energy: 0, shield: 0, reserves: 0, crew: 0, brigfree: 0, torped: 0,
|
|
63
|
+
damfac: zeros(NDEV), dockfac: 0, regenfac: 0, stopengy: 0, shupengy: 0, klingpwr: 0, warptime: 0, phasfac: 0,
|
|
64
|
+
moveprob: zeros(6), movefac: zeros(6), eventdly: zeros(NEVENTS), navigcrud: zeros(2), cloakenergy: 0,
|
|
65
|
+
damprob: zeros(NDEV), hitfac: 0, klingcrew: 0, srndrprob: 0, energylow: 0,
|
|
66
|
+
},
|
|
67
|
+
Now: { bases: 0, klings: 0, date: 0, time: 0, resource: 0, distressed: 0, eventptr: new Array(NEVENTS).fill(-1), base: Array.from({ length: MAXBASES }, () => ({ x: 0, y: 0 })) },
|
|
68
|
+
Etc: { klingon: Array.from({ length: MAXKLQUAD }, kling), nkling: 0, fast: 0, starbase: { x: 0, y: 0 }, snapshot: null, statreport: 0 },
|
|
69
|
+
Trace: 0,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/** A deep copy of what a snapshot holds (structuredClone keeps no references to the live state). */
|
|
73
|
+
export function snapshot_take(s) {
|
|
74
|
+
return structuredClone({ Quad: s.Quad, Event: s.Event, Now: s.Now });
|
|
75
|
+
}
|
|
76
|
+
/** Puts a snapshot back over the live state. */
|
|
77
|
+
export function snapshot_restore(s, snap) {
|
|
78
|
+
const copy = structuredClone(snap);
|
|
79
|
+
// In place, as the C's memcpy: a routine holding `Now` or a quadrant keeps seeing the live one.
|
|
80
|
+
copy.Quad.forEach((row, x) => row.forEach((one, y) => { Object.assign(s.Quad[x][y], one); }));
|
|
81
|
+
copy.Event.forEach((one, n) => { Object.assign(s.Event[n], one); });
|
|
82
|
+
Object.assign(s.Now, copy.Now);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/state.ts"],"names":[],"mappings":"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"}
|