@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.
- 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 +36 -1
- package/dist/builtins/help.js.map +1 -1
- package/dist/builtins/helpSections.d.ts +15 -0
- package/dist/builtins/helpSections.js +37 -2
- package/dist/builtins/helpSections.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/chris/help.js +12 -0
- package/dist/chris/help.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/commandRegistry.d.ts +8 -0
- package/dist/core/commandRegistry.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,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file C's printf formatting, as trek uses it.
|
|
3
|
+
*
|
|
4
|
+
* trek prints through printf with widths, precisions and flags
|
|
5
|
+
* (`%5.1f`, `%14.14s`, `%-3d`); a faithful port prints exactly what the C
|
|
6
|
+
* printed, so this formats as C does: conversions d i u c s f e g x o and
|
|
7
|
+
* %%, flags - + space 0 #, width and precision (either may be `*`).
|
|
8
|
+
* Written for the port (no BSD source here).
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Formats as C's sprintf.
|
|
14
|
+
*
|
|
15
|
+
* @param format - The format string.
|
|
16
|
+
* @param args - The values, in order.
|
|
17
|
+
* @returns The text.
|
|
18
|
+
*/
|
|
19
|
+
export function sprintf(format, ...args) {
|
|
20
|
+
let out = '';
|
|
21
|
+
let next = 0;
|
|
22
|
+
const take = () => args[next++] ?? 0;
|
|
23
|
+
const spec = /%([-+ 0#]*)(\*|\d+)?(?:\.(\*|\d*))?(?:hh|h|ll|l|L|z|j|t)?([diucsfFeEgGxXo%])/g;
|
|
24
|
+
let last = 0;
|
|
25
|
+
let match;
|
|
26
|
+
while ((match = spec.exec(format)) !== null) {
|
|
27
|
+
out += format.slice(last, match.index);
|
|
28
|
+
last = spec.lastIndex;
|
|
29
|
+
const [, flags = '', widthSpec, precSpec, conversion = ''] = match;
|
|
30
|
+
if (conversion === '%') {
|
|
31
|
+
out += '%';
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
let width = widthSpec === undefined ? 0 : widthSpec === '*' ? Number(take()) : Number(widthSpec);
|
|
35
|
+
let left = flags.includes('-');
|
|
36
|
+
if (width < 0) {
|
|
37
|
+
left = true;
|
|
38
|
+
width = -width;
|
|
39
|
+
}
|
|
40
|
+
const precision = precSpec === undefined ? null : precSpec === '*' ? Number(take()) : Number(precSpec || '0');
|
|
41
|
+
const value = take();
|
|
42
|
+
let body;
|
|
43
|
+
let sign = '';
|
|
44
|
+
let numeric = true;
|
|
45
|
+
switch (conversion) {
|
|
46
|
+
case 'd':
|
|
47
|
+
case 'i':
|
|
48
|
+
case 'u': {
|
|
49
|
+
const n = Math.trunc(Number(value));
|
|
50
|
+
sign = n < 0 ? '-' : flags.includes('+') ? '+' : flags.includes(' ') ? ' ' : '';
|
|
51
|
+
body = String(Math.abs(n));
|
|
52
|
+
if (precision !== null)
|
|
53
|
+
body = precision === 0 && n === 0 ? '' : body.padStart(precision, '0');
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
case 'x':
|
|
57
|
+
case 'X':
|
|
58
|
+
case 'o': {
|
|
59
|
+
const n = Math.trunc(Number(value)) >>> 0;
|
|
60
|
+
body = n.toString(conversion === 'o' ? 8 : 16);
|
|
61
|
+
if (conversion === 'X')
|
|
62
|
+
body = body.toUpperCase();
|
|
63
|
+
if (precision !== null)
|
|
64
|
+
body = body.padStart(precision, '0');
|
|
65
|
+
if (flags.includes('#') && n !== 0)
|
|
66
|
+
body = (conversion === 'o' ? '0' : conversion === 'x' ? '0x' : '0X') + body;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case 'c':
|
|
70
|
+
numeric = false;
|
|
71
|
+
body = typeof value === 'number' ? String.fromCharCode(value) : String(value).charAt(0);
|
|
72
|
+
break;
|
|
73
|
+
case 's':
|
|
74
|
+
numeric = false;
|
|
75
|
+
body = String(value);
|
|
76
|
+
if (precision !== null)
|
|
77
|
+
body = body.slice(0, precision);
|
|
78
|
+
break;
|
|
79
|
+
default: {
|
|
80
|
+
const n = Number(value);
|
|
81
|
+
sign = n < 0 || Object.is(n, -0) ? '-' : flags.includes('+') ? '+' : flags.includes(' ') ? ' ' : '';
|
|
82
|
+
body = float_format(Math.abs(n), conversion, precision ?? 6, flags.includes('#'));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
let text = sign + body;
|
|
86
|
+
if (text.length < width) {
|
|
87
|
+
if (left)
|
|
88
|
+
text = text.padEnd(width);
|
|
89
|
+
else if (numeric && flags.includes('0') && !(precision !== null && 'diuxXo'.includes(conversion)))
|
|
90
|
+
text = sign + body.padStart(width - sign.length, '0');
|
|
91
|
+
else
|
|
92
|
+
text = text.padStart(width);
|
|
93
|
+
}
|
|
94
|
+
out += text;
|
|
95
|
+
}
|
|
96
|
+
return out + format.slice(last);
|
|
97
|
+
}
|
|
98
|
+
/** A non-negative double in %f, %e or %g. */
|
|
99
|
+
function float_format(n, conversion, precision, alternate) {
|
|
100
|
+
if (!Number.isFinite(n))
|
|
101
|
+
return Number.isNaN(n) ? 'nan' : 'inf';
|
|
102
|
+
const lower = conversion.toLowerCase();
|
|
103
|
+
if (lower === 'f')
|
|
104
|
+
return fixed_exact(n, precision);
|
|
105
|
+
if (lower === 'e')
|
|
106
|
+
return exp_format(n, precision, conversion === 'E');
|
|
107
|
+
// %g: precision 0 is 1; %e when the exponent is < -4 or >= precision.
|
|
108
|
+
const p = precision === 0 ? 1 : precision;
|
|
109
|
+
const exponent = n === 0 ? 0 : Math.floor(Math.log10(Number(n.toExponential(p - 1))));
|
|
110
|
+
let text = exponent < -4 || exponent >= p ? exp_format(n, p - 1, conversion === 'G') : n.toFixed(Math.max(0, p - 1 - exponent));
|
|
111
|
+
if (!alternate) {
|
|
112
|
+
text = text.replace(/(\.\d*?)0+(e|E|$)/, '$1$2').replace(/\.(e|E|$)/, '$1');
|
|
113
|
+
}
|
|
114
|
+
return text;
|
|
115
|
+
}
|
|
116
|
+
/** %e: d.ddde+XX, at least two exponent digits. */
|
|
117
|
+
function exp_format(n, precision, upper) {
|
|
118
|
+
const [mantissa, exp = '0'] = n.toExponential(precision).split('e');
|
|
119
|
+
const e = Number(exp);
|
|
120
|
+
const text = `${mantissa}e${e < 0 ? '-' : '+'}${String(Math.abs(e)).padStart(2, '0')}`;
|
|
121
|
+
return upper ? text.toUpperCase() : text;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* %f as glibc prints it: the double's exact binary value rounded to the
|
|
125
|
+
* precision, an exact tie to even. (JavaScript's toFixed rounds a tie up:
|
|
126
|
+
* `%.0f` of 2.5 is 2 in C and 3 in toFixed.)
|
|
127
|
+
*
|
|
128
|
+
* @param n - A non-negative finite double.
|
|
129
|
+
* @param precision - Digits after the point.
|
|
130
|
+
* @returns The digits.
|
|
131
|
+
*/
|
|
132
|
+
export function fixed_exact(n, precision) {
|
|
133
|
+
const view = new DataView(new ArrayBuffer(8));
|
|
134
|
+
view.setFloat64(0, n);
|
|
135
|
+
const bits = view.getBigUint64(0);
|
|
136
|
+
const biased = Number((bits >> 52n) & 0x7ffn);
|
|
137
|
+
const fraction = bits & ((1n << 52n) - 1n);
|
|
138
|
+
// n = mantissa * 2^exponent, exactly.
|
|
139
|
+
const mantissa = biased === 0 ? fraction : fraction | (1n << 52n);
|
|
140
|
+
const exponent = (biased === 0 ? 1 : biased) - 1075;
|
|
141
|
+
const scale = 10n ** BigInt(precision);
|
|
142
|
+
let digits;
|
|
143
|
+
if (exponent >= 0) {
|
|
144
|
+
digits = (mantissa << BigInt(exponent)) * scale;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const numerator = mantissa * scale;
|
|
148
|
+
const denominator = 1n << BigInt(-exponent);
|
|
149
|
+
digits = numerator / denominator;
|
|
150
|
+
const twice = (numerator % denominator) * 2n;
|
|
151
|
+
if (twice > denominator || (twice === denominator && digits % 2n === 1n))
|
|
152
|
+
digits += 1n;
|
|
153
|
+
}
|
|
154
|
+
const text = digits.toString().padStart(precision + 1, '0');
|
|
155
|
+
return precision === 0 ? text : `${text.slice(0, text.length - precision)}.${text.slice(text.length - precision)}`;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=printf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"printf.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/printf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ram.ts: a TypeScript port of BSD trek(6), from ram.c.
|
|
3
|
+
* Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): ram.c 1.8 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 Ramming an object: a Klingon, a star or a starbase.
|
|
35
|
+
*
|
|
36
|
+
* @module
|
|
37
|
+
*/
|
|
38
|
+
import { BASE, INHABIT, KLINGON, L_STAR, NDEV, SINS, STAR } from './consts.js';
|
|
39
|
+
import { damage } from './damage.js';
|
|
40
|
+
import { damaged } from './damaged.js';
|
|
41
|
+
import { killb, killk } from './kill.js';
|
|
42
|
+
import { lose } from './lose.js';
|
|
43
|
+
import { franf, ranf } from './rand.js';
|
|
44
|
+
/*
|
|
45
|
+
** RAM SOME OBJECT
|
|
46
|
+
**
|
|
47
|
+
** You have run into some sort of object. It may be a Klingon,
|
|
48
|
+
** a star, or a starbase. If you run into a star, you are really
|
|
49
|
+
** stupid, because there is no hope for you.
|
|
50
|
+
**
|
|
51
|
+
** If you run into something else, you destroy that object. You
|
|
52
|
+
** also rack up incredible damages.
|
|
53
|
+
*/
|
|
54
|
+
/** Rams whatever is at ix,iy. */
|
|
55
|
+
export async function ram(t, ix, iy) {
|
|
56
|
+
const { Ship, Game, Param } = t.s;
|
|
57
|
+
let i;
|
|
58
|
+
t.io.printf('\x07RED ALERT\x07: collision imminent\n');
|
|
59
|
+
const c = t.s.Sect[ix][iy];
|
|
60
|
+
switch (c) {
|
|
61
|
+
case KLINGON:
|
|
62
|
+
t.io.printf('%s rams Klingon at %d,%d\n', Ship.shipname, ix, iy);
|
|
63
|
+
await killk(t, ix, iy);
|
|
64
|
+
break;
|
|
65
|
+
case STAR:
|
|
66
|
+
case INHABIT:
|
|
67
|
+
t.io.printf("Yeoman Rand: Captain, isn't it getting hot in here?\n");
|
|
68
|
+
await t.io.sleep(2);
|
|
69
|
+
t.io.printf('Spock: Hull temperature approaching 550 Degrees ' +
|
|
70
|
+
'Kelvin.\n');
|
|
71
|
+
await lose(t, L_STAR);
|
|
72
|
+
// falls through (lose() never returns)
|
|
73
|
+
case BASE:
|
|
74
|
+
t.io.printf('You ran into the starbase at %d,%d\n', ix, iy);
|
|
75
|
+
await killb(t, Ship.quadx, Ship.quady);
|
|
76
|
+
/* don't penalize the captain if it wasn't his fault */
|
|
77
|
+
if (!damaged(t, SINS))
|
|
78
|
+
Game.killb += 1;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
await t.io.sleep(2);
|
|
82
|
+
t.io.printf('%s heavily damaged\n', Ship.shipname);
|
|
83
|
+
/* select the number of deaths to occur */
|
|
84
|
+
i = 10 + ranf(t.rnd, 20 * Game.skill);
|
|
85
|
+
Game.deaths += i;
|
|
86
|
+
Ship.crew -= i;
|
|
87
|
+
t.io.printf('McCoy: Take it easy Jim; we had %d casualties.\n', i);
|
|
88
|
+
/* damage devices with an 80% probability */
|
|
89
|
+
for (i = 0; i < NDEV; i++) {
|
|
90
|
+
if (ranf(t.rnd, 100) < 20)
|
|
91
|
+
continue;
|
|
92
|
+
await damage(t, i, (2.5 * (franf(t.rnd) + franf(t.rnd)) + 1.0) * Param.damfac[i]);
|
|
93
|
+
}
|
|
94
|
+
/* no chance that your shields remained up in all that */
|
|
95
|
+
Ship.shldup = 0;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=ram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ram.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/ram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** glibc's random(), from a seed. */
|
|
2
|
+
export declare class TrekRandom {
|
|
3
|
+
private table;
|
|
4
|
+
private front;
|
|
5
|
+
private rear;
|
|
6
|
+
/**
|
|
7
|
+
* @param seed - As srandom() takes it.
|
|
8
|
+
*/
|
|
9
|
+
constructor(seed: number);
|
|
10
|
+
/** Seeds as glibc's srandom (TYPE_3, degree 31, separation 3). */
|
|
11
|
+
srandom(seed: number): void;
|
|
12
|
+
/** The next value, 0 .. RANDOM_MAX. */
|
|
13
|
+
random(): number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* ranf: a random integer, 0 .. max-1 (0 when max <= 0).
|
|
17
|
+
*
|
|
18
|
+
* @param rnd - The source.
|
|
19
|
+
* @param max - The bound.
|
|
20
|
+
* @returns The integer.
|
|
21
|
+
*/
|
|
22
|
+
export declare function ranf(rnd: TrekRandom, max: number): number;
|
|
23
|
+
/**
|
|
24
|
+
* franf: a random double, 0 .. 1.
|
|
25
|
+
*
|
|
26
|
+
* @param rnd - The source.
|
|
27
|
+
* @returns The double.
|
|
28
|
+
*/
|
|
29
|
+
export declare function franf(rnd: TrekRandom): number;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* rand.ts: a TypeScript port of BSD trek(6), from ranf.c.
|
|
3
|
+
* Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): ranf.c 1.7 2009/05/25.
|
|
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 random source: ranf() and franf() over random().
|
|
35
|
+
*
|
|
36
|
+
* random() is glibc's, reproduced exactly (the additive feedback generator
|
|
37
|
+
* of degree 31, seeded as srandom() seeds it), so a game played here from a
|
|
38
|
+
* seed is the game the C plays from the same seed: the port is checked
|
|
39
|
+
* against the original, transcript for transcript.
|
|
40
|
+
*
|
|
41
|
+
* @module
|
|
42
|
+
*/
|
|
43
|
+
import { RANDOM_MAX } from './consts.js';
|
|
44
|
+
/** glibc's random(), from a seed. */
|
|
45
|
+
export class TrekRandom {
|
|
46
|
+
table = [];
|
|
47
|
+
front = 0;
|
|
48
|
+
rear = 0;
|
|
49
|
+
/**
|
|
50
|
+
* @param seed - As srandom() takes it.
|
|
51
|
+
*/
|
|
52
|
+
constructor(seed) {
|
|
53
|
+
this.srandom(seed);
|
|
54
|
+
}
|
|
55
|
+
/** Seeds as glibc's srandom (TYPE_3, degree 31, separation 3). */
|
|
56
|
+
srandom(seed) {
|
|
57
|
+
let word = seed | 0;
|
|
58
|
+
if (word === 0)
|
|
59
|
+
word = 1;
|
|
60
|
+
const state = new Array(31);
|
|
61
|
+
state[0] = word;
|
|
62
|
+
for (let i = 1; i < 31; i++) {
|
|
63
|
+
// 16807 * state[i-1] % 2147483647, by Schrage's method, as glibc does.
|
|
64
|
+
const hi = Math.trunc(word / 127773);
|
|
65
|
+
const lo = word % 127773;
|
|
66
|
+
word = 16807 * lo - 2836 * hi;
|
|
67
|
+
if (word < 0)
|
|
68
|
+
word += 2147483647;
|
|
69
|
+
state[i] = word;
|
|
70
|
+
}
|
|
71
|
+
this.table = state;
|
|
72
|
+
this.front = 3;
|
|
73
|
+
this.rear = 0;
|
|
74
|
+
// glibc discards the first 310 outputs.
|
|
75
|
+
for (let i = 0; i < 310; i++)
|
|
76
|
+
this.random();
|
|
77
|
+
}
|
|
78
|
+
/** The next value, 0 .. RANDOM_MAX. */
|
|
79
|
+
random() {
|
|
80
|
+
const sum = (this.table[this.front] + this.table[this.rear]) | 0;
|
|
81
|
+
this.table[this.front] = sum;
|
|
82
|
+
const result = (sum >>> 1) & RANDOM_MAX;
|
|
83
|
+
this.front = (this.front + 1) % 31;
|
|
84
|
+
this.rear = (this.rear + 1) % 31;
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* ranf: a random integer, 0 .. max-1 (0 when max <= 0).
|
|
90
|
+
*
|
|
91
|
+
* @param rnd - The source.
|
|
92
|
+
* @param max - The bound.
|
|
93
|
+
* @returns The integer.
|
|
94
|
+
*/
|
|
95
|
+
export function ranf(rnd, max) {
|
|
96
|
+
if (max <= 0)
|
|
97
|
+
return 0;
|
|
98
|
+
return rnd.random() % max;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* franf: a random double, 0 .. 1.
|
|
102
|
+
*
|
|
103
|
+
* @param rnd - The source.
|
|
104
|
+
* @returns The double.
|
|
105
|
+
*/
|
|
106
|
+
export function franf(rnd) {
|
|
107
|
+
return rnd.random() / RANDOM_MAX;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=rand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rand.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/rand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,qCAAqC;AACrC,MAAM,OAAO,UAAU;IACb,KAAK,GAAa,EAAE,CAAC;IACrB,KAAK,GAAW,CAAC,CAAC;IAClB,IAAI,GAAW,CAAC,CAAC;IAEzB;;OAEG;IACH,YAAY,IAAY;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,kEAAkE;IAC3D,OAAO,CAAC,IAAY;QACzB,IAAI,IAAI,GAAW,IAAI,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAI,KAAK,CAAC;YAAE,IAAI,GAAG,CAAC,CAAC;QACzB,MAAM,KAAK,GAAa,IAAI,KAAK,CAAS,EAAE,CAAC,CAAC;QAC9C,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAChB,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,uEAAuE;YACvE,MAAM,EAAE,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;YAC7C,MAAM,EAAE,GAAW,IAAI,GAAG,MAAM,CAAC;YACjC,IAAI,GAAG,KAAK,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;YAC9B,IAAI,IAAI,GAAG,CAAC;gBAAE,IAAI,IAAI,UAAU,CAAC;YACjC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,wCAAwC;QACxC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACtD,CAAC;IAED,uCAAuC;IAChC,MAAM;QACX,MAAM,GAAG,GAAW,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAY,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAY,CAAC,GAAG,CAAC,CAAC;QACjG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QAC7B,MAAM,MAAM,GAAW,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAAC,GAAe,EAAE,GAAW;IAC/C,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,GAAe;IACnC,OAAO,GAAG,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* rest.ts: a TypeScript port of BSD trek(6), from rest.c.
|
|
3
|
+
* Ported from NetBSD src/games/trek (trunk 7a9ca154a8f6144307865f23390a3c63b400b801): rest.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 Resting for repairs: waiting for something to happen, never
|
|
35
|
+
* through a long range tractor beam.
|
|
36
|
+
*
|
|
37
|
+
* @module
|
|
38
|
+
*/
|
|
39
|
+
import { DOCKED, E_LRTB } from './consts.js';
|
|
40
|
+
import { getfltpar, getynpar } from './getpar.js';
|
|
41
|
+
/*
|
|
42
|
+
** REST FOR REPAIRS
|
|
43
|
+
**
|
|
44
|
+
** You sit around and wait for repairs to happen. Actually, you
|
|
45
|
+
** sit around and wait for anything to happen. I do want to point
|
|
46
|
+
** out however, that Klingons are not as patient as you are, and
|
|
47
|
+
** they tend to attack you while you are resting.
|
|
48
|
+
**
|
|
49
|
+
** You can never rest through a long range tractor beam.
|
|
50
|
+
**
|
|
51
|
+
** In events() you will be given an opportunity to cancel the
|
|
52
|
+
** rest period if anything momentous happens.
|
|
53
|
+
*/
|
|
54
|
+
/** The rest command. */
|
|
55
|
+
export async function rest(t, _v) {
|
|
56
|
+
const { Ship, Move } = t.s;
|
|
57
|
+
let tm;
|
|
58
|
+
/* get the time to rest */
|
|
59
|
+
tm = await getfltpar(t, 'How long');
|
|
60
|
+
if (tm <= 0.0)
|
|
61
|
+
return;
|
|
62
|
+
const percent = Math.trunc(100 * tm / t.s.Now.time + 0.5);
|
|
63
|
+
if (percent >= 70) {
|
|
64
|
+
t.io.printf('Spock: That would take %d%% of our remaining time.\n', percent);
|
|
65
|
+
if (!(await getynpar(t, 'Are you really certain that is wise')))
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
Move.time = tm;
|
|
69
|
+
/* boundary condition is the LRTB */
|
|
70
|
+
tm = t.s.Event[t.s.Now.eventptr[E_LRTB]].date - t.s.Now.date;
|
|
71
|
+
if (Ship.cond !== DOCKED && Move.time > tm)
|
|
72
|
+
Move.time = tm + 0.0001;
|
|
73
|
+
Move.free = 0;
|
|
74
|
+
Move.resting = 1;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=rest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/rest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;;;;;GAKG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;EAYE;AAEF,wBAAwB;AACxB,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,CAAO,EAAE,EAAU;IAC5C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAU,CAAC;IAEf,0BAA0B;IAC1B,EAAE,GAAG,MAAM,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACpC,IAAI,EAAE,IAAI,GAAG;QAAE,OAAO;IACtB,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IAClE,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;QAClB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,sDAAsD,EAChE,OAAO,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,CAAC,EAAE,qCAAqC,CAAC,CAAC;YAAE,OAAO;IAC1E,CAAC;IACD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IAEf,oCAAoC;IACpC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE;QAAE,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;IACpE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACd,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The event queue: scheduling, rescheduling and unscheduling an
|
|
3
|
+
* event, and the abbreviated forms whose dates are drawn at random.
|
|
4
|
+
*
|
|
5
|
+
* An event is named by its slot in `Event`; -1 stands for the C's NULL.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import type { Trek } from './context.js';
|
|
10
|
+
/**
|
|
11
|
+
* SCHEDULE AN EVENT: an event of type 'type' is scheduled for time NOW +
|
|
12
|
+
* 'offset' into the first available slot; 'x', 'y' and 'z' are its
|
|
13
|
+
* attributes. The slot is returned.
|
|
14
|
+
*/
|
|
15
|
+
export declare function schedule(t: Trek, type: number, offset: number, x: number, y: number, z: number): number;
|
|
16
|
+
/** RESCHEDULE AN EVENT: the event in slot 'e' is rescheduled to the current time plus 'offset'. */
|
|
17
|
+
export declare function reschedule(t: Trek, e: number, offset: number): void;
|
|
18
|
+
/** UNSCHEDULE AN EVENT: the event at slot 'e' is deleted. */
|
|
19
|
+
export declare function unschedule(t: Trek, e: number): void;
|
|
20
|
+
/** Abbreviated schedule routine: the event index and a factor for the time figure. */
|
|
21
|
+
export declare function xsched(t: Trek, ev: number, factor: number, x: number, y: number, z: number): number;
|
|
22
|
+
/** Simplified reschedule routine: the event, its index and the division factor. */
|
|
23
|
+
export declare function xresched(t: Trek, e: number, ev: number, factor: number): void;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { E_EVENT, E_GHOST, MAXEVENTS, TOOLARGE } from './consts.js';
|
|
2
|
+
import { franf } from './rand.js';
|
|
3
|
+
/**
|
|
4
|
+
* SCHEDULE AN EVENT: an event of type 'type' is scheduled for time NOW +
|
|
5
|
+
* 'offset' into the first available slot; 'x', 'y' and 'z' are its
|
|
6
|
+
* attributes. The slot is returned.
|
|
7
|
+
*/
|
|
8
|
+
export function schedule(t, type, offset, x, y, z) {
|
|
9
|
+
const date = t.s.Now.date + offset;
|
|
10
|
+
for (let i = 0; i < MAXEVENTS; i++) {
|
|
11
|
+
const e = t.s.Event[i];
|
|
12
|
+
if (e.evcode)
|
|
13
|
+
continue;
|
|
14
|
+
// got a slot
|
|
15
|
+
if (t.s.Trace)
|
|
16
|
+
t.io.printf('schedule: type %d @ %.2f slot %d parm %d %d %d\n', type, date, i, x, y, z);
|
|
17
|
+
e.evcode = type;
|
|
18
|
+
e.date = date;
|
|
19
|
+
e.x = x;
|
|
20
|
+
e.y = y;
|
|
21
|
+
e.systemname = z;
|
|
22
|
+
t.s.Now.eventptr[type & ~E_GHOST] = i;
|
|
23
|
+
return i;
|
|
24
|
+
}
|
|
25
|
+
t.io.printf('trek: Cannot schedule event %d parm %d %d %d\n', type, x, y, z);
|
|
26
|
+
return t.io.exit(1);
|
|
27
|
+
}
|
|
28
|
+
/** RESCHEDULE AN EVENT: the event in slot 'e' is rescheduled to the current time plus 'offset'. */
|
|
29
|
+
export function reschedule(t, e, offset) {
|
|
30
|
+
const ev = t.s.Event[e];
|
|
31
|
+
const date = t.s.Now.date + offset;
|
|
32
|
+
ev.date = date;
|
|
33
|
+
if (t.s.Trace)
|
|
34
|
+
t.io.printf('reschedule: type %d parm %d %d %d @ %.2f\n', ev.evcode, ev.x, ev.y, ev.systemname, date);
|
|
35
|
+
}
|
|
36
|
+
/** UNSCHEDULE AN EVENT: the event at slot 'e' is deleted. */
|
|
37
|
+
export function unschedule(t, e) {
|
|
38
|
+
const ev = t.s.Event[e];
|
|
39
|
+
if (t.s.Trace)
|
|
40
|
+
t.io.printf('unschedule: type %d @ %.2f parm %d %d %d\n', ev.evcode, ev.date, ev.x, ev.y, ev.systemname);
|
|
41
|
+
t.s.Now.eventptr[ev.evcode & E_EVENT] = -1;
|
|
42
|
+
ev.date = TOOLARGE;
|
|
43
|
+
ev.evcode = 0;
|
|
44
|
+
}
|
|
45
|
+
/** Abbreviated schedule routine: the event index and a factor for the time figure. */
|
|
46
|
+
export function xsched(t, ev, factor, x, y, z) {
|
|
47
|
+
const when = -t.s.Param.eventdly[ev] * t.s.Param.time * Math.log(franf(t.rnd)) / factor;
|
|
48
|
+
return schedule(t, ev, when, x, y, z);
|
|
49
|
+
}
|
|
50
|
+
/** Simplified reschedule routine: the event, its index and the division factor. */
|
|
51
|
+
export function xresched(t, e, ev, factor) {
|
|
52
|
+
const when = -t.s.Param.eventdly[ev] * t.s.Param.time * Math.log(franf(t.rnd)) / factor;
|
|
53
|
+
reschedule(t, e, when);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=schedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../../../src/builtins/games/trek/schedule.ts"],"names":[],"mappings":"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"}
|