@vibemancer/core 0.1.4 → 0.1.6
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/README.md +2 -2
- package/dist/chunk-G5T65F3W.js +10617 -0
- package/dist/chunk-G5T65F3W.js.map +1 -0
- package/dist/index-browser.d.ts +1328 -1051
- package/dist/index-browser.js +59 -17
- package/dist/index.d.ts +53 -3
- package/dist/index.js +204 -54
- package/dist/index.js.map +1 -1
- package/package.json +21 -15
- package/src/banned-bot-names.ts +53 -0
- package/src/bots/Hero.ts +867 -0
- package/src/bots/berserker/01_Stormchaser.ts +162 -120
- package/src/bots/berserker/02_Stormcaller.ts +160 -116
- package/src/bots/berserker/03_Stormforger.ts +162 -129
- package/src/bots/caster/01_Flamecaller.ts +126 -84
- package/src/bots/caster/02_Pyromancer.ts +148 -101
- package/src/bots/caster/03_Infernalist.ts +180 -160
- package/src/bots/defensive/01_Turtle.ts +48 -44
- package/src/bots/defensive/02_Sentinel.ts +57 -53
- package/src/bots/defensive/03_Golem.ts +85 -97
- package/src/bots/duelist/01_Battlemage.ts +157 -122
- package/src/bots/duelist/02_Warmage.ts +166 -121
- package/src/bots/duelist/03_Archmage.ts +198 -178
- package/src/bots/homing/01_Bonemancer.ts +20 -32
- package/src/bots/homing/02_Lich.ts +145 -93
- package/src/bots/homing/03_Archlich.ts +129 -60
- package/src/bots/kiter/01_Spellspinner.ts +145 -107
- package/src/bots/kiter/02_Spellweaver.ts +153 -105
- package/src/bots/kiter/03_Spellbinder.ts +168 -123
- package/src/bots/melee/01_Shadowblade.ts +131 -75
- package/src/bots/melee/02_Nightblade.ts +174 -130
- package/src/bots/melee/03_Voidblade.ts +266 -168
- package/src/bots/registry.ts +44 -37
- package/src/bots/shared.ts +185 -25
- package/src/bots/sniper/01_Spellshot.ts +151 -98
- package/src/bots/sniper/02_Spelltracer.ts +173 -128
- package/src/bots/sniper/03_Spellseeker.ts +177 -152
- package/src/bots/standalone/Critter.ts +46 -52
- package/src/bots/standalone/Doombringer.ts +36 -40
- package/src/bots/standalone/Hogger.ts +120 -89
- package/src/bots/standalone/Rookie.ts +21 -23
- package/src/bots/standalone/TargetDummy.ts +5 -6
- package/src/bots/test/cheater.ts +91 -85
- package/src/bots/test/crasher.ts +26 -28
- package/src/engine/bundle-fight.ts +242 -0
- package/src/engine/hooks-runtime.ts +58 -18
- package/src/engine/manual-match.ts +33 -25
- package/src/engine/missile-templates.ts +25 -43
- package/src/engine/optimizer.ts +7 -7
- package/src/engine/params-runtime.ts +3 -3
- package/src/engine/physics.ts +33 -23
- package/src/engine/sandbox-browser.ts +8 -7
- package/src/engine/sandbox-compile.ts +1 -1
- package/src/engine/sandbox-harness.ts +299 -367
- package/src/engine/sandbox.ts +3 -3
- package/src/engine/simulation.ts +291 -76
- package/src/engine/spells.ts +9 -12
- package/src/engine-version.ts +1 -1
- package/src/hooks/action-builders.ts +76 -21
- package/src/hooks/index.ts +17 -9
- package/src/hooks/state-hooks.ts +61 -25
- package/src/hooks/threat-analysis.ts +44 -20
- package/src/hooks/types.ts +62 -5
- package/src/index-browser.ts +1 -0
- package/src/index.ts +3 -0
- package/src/rules.ts +209 -63
- package/src/stats.ts +2 -2
- package/src/testing.ts +6 -30
- package/src/trace.ts +63 -3
- package/src/types.ts +127 -14
- package/src/utils/angles.ts +1 -0
- package/src/utils/combat.ts +98 -6
- package/src/utils/spatial.ts +3 -3
- package/dist/chunk-74FFJCFF.js +0 -9140
- package/dist/chunk-74FFJCFF.js.map +0 -1
- package/src/hooks/bot-wrapper.ts +0 -84
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ALL_BOTS,
|
|
3
|
-
|
|
3
|
+
ARENA_MAX,
|
|
4
|
+
ARENA_MIN,
|
|
4
5
|
ARENA_SIZE,
|
|
5
6
|
ARENA_WATER_BUFFER,
|
|
6
|
-
ARENA_WIDTH,
|
|
7
7
|
Archlich,
|
|
8
8
|
Archmage,
|
|
9
9
|
BLINK_CAST_TIME,
|
|
@@ -28,6 +28,11 @@ import {
|
|
|
28
28
|
Golem,
|
|
29
29
|
Hogger,
|
|
30
30
|
Infernalist,
|
|
31
|
+
KNOCKBACK_DAMAGE_THRESHOLD,
|
|
32
|
+
KNOCKBACK_DECAY,
|
|
33
|
+
KNOCKBACK_DELAY,
|
|
34
|
+
KNOCKBACK_SPEED_PER_DAMAGE,
|
|
35
|
+
LAVA_BORDER_WIDTH,
|
|
31
36
|
Lich,
|
|
32
37
|
MATCH_DURATION,
|
|
33
38
|
MAX_HEALTH,
|
|
@@ -50,6 +55,8 @@ import {
|
|
|
50
55
|
ManualMatch,
|
|
51
56
|
Nightblade,
|
|
52
57
|
Pyromancer,
|
|
58
|
+
RULES,
|
|
59
|
+
RULESET_RANGES,
|
|
53
60
|
Rookie,
|
|
54
61
|
SHIELD_CAST_TIME,
|
|
55
62
|
SHIELD_DECAY_PER_SECOND,
|
|
@@ -87,8 +94,8 @@ import {
|
|
|
87
94
|
angleDiff,
|
|
88
95
|
angleInRange,
|
|
89
96
|
angleTo,
|
|
90
|
-
antiHomingMissile,
|
|
91
97
|
applyDamage,
|
|
98
|
+
applyRulesetOverrides,
|
|
92
99
|
blink,
|
|
93
100
|
browserSandboxFight,
|
|
94
101
|
browserSandboxSimulate,
|
|
@@ -109,18 +116,22 @@ import {
|
|
|
109
116
|
createInitialState,
|
|
110
117
|
createRandom,
|
|
111
118
|
createWorkerScript,
|
|
119
|
+
currentRuleset,
|
|
112
120
|
diagnoseTrace,
|
|
113
121
|
directionAway,
|
|
114
122
|
directionTo,
|
|
115
123
|
distanceTo,
|
|
116
124
|
effectiveTurnRateCost,
|
|
117
125
|
extractAction,
|
|
126
|
+
extractMissileAction,
|
|
118
127
|
extractStats,
|
|
119
128
|
extractTraceEvents,
|
|
120
129
|
fight,
|
|
121
130
|
findInRange,
|
|
122
131
|
findNearest,
|
|
132
|
+
fitMissileForEscapingTarget,
|
|
123
133
|
fitMissileToBudget,
|
|
134
|
+
flyStraight,
|
|
124
135
|
formatDiagnosis,
|
|
125
136
|
formatStats,
|
|
126
137
|
formatTraceEvents,
|
|
@@ -128,18 +139,21 @@ import {
|
|
|
128
139
|
generateCandidates,
|
|
129
140
|
generateCombos,
|
|
130
141
|
getAdaptiveMissileConfig,
|
|
131
|
-
getBotContext,
|
|
132
142
|
getEffectiveRange,
|
|
133
143
|
getLeadPosition,
|
|
134
144
|
getMissileCastTime,
|
|
145
|
+
getMissileContext,
|
|
135
146
|
getPlayerState,
|
|
147
|
+
getWizardContext,
|
|
136
148
|
hashCombine,
|
|
137
149
|
homingMissile,
|
|
138
150
|
idle,
|
|
139
151
|
inRange,
|
|
140
152
|
interceptAngle,
|
|
141
|
-
|
|
153
|
+
isBannedBotName,
|
|
154
|
+
isInLava,
|
|
142
155
|
magnitude,
|
|
156
|
+
matchesAnyBanRule,
|
|
143
157
|
missile,
|
|
144
158
|
move,
|
|
145
159
|
moveInDirection,
|
|
@@ -151,15 +165,17 @@ import {
|
|
|
151
165
|
normalizeAngle,
|
|
152
166
|
predictPosition,
|
|
153
167
|
resetAllHooks,
|
|
168
|
+
resetRuleset,
|
|
154
169
|
resolveWizardCollision,
|
|
155
|
-
runBotWithContext,
|
|
156
170
|
runWithHooks,
|
|
171
|
+
runWizardWithContext,
|
|
157
172
|
scoreFight,
|
|
158
173
|
scoreFightAsWizard2,
|
|
159
174
|
seekerMissile,
|
|
160
175
|
setParamValues,
|
|
161
176
|
shield,
|
|
162
177
|
simulate,
|
|
178
|
+
simulateMinDuration,
|
|
163
179
|
sortByDistance,
|
|
164
180
|
spiralMissile,
|
|
165
181
|
startCast,
|
|
@@ -170,6 +186,8 @@ import {
|
|
|
170
186
|
sweptCircleCollision,
|
|
171
187
|
testBot,
|
|
172
188
|
tick,
|
|
189
|
+
turnToAngle,
|
|
190
|
+
turnToward,
|
|
173
191
|
updateShield,
|
|
174
192
|
useArenaSize,
|
|
175
193
|
useBlinkCooldown,
|
|
@@ -182,11 +200,14 @@ import {
|
|
|
182
200
|
useEnemy,
|
|
183
201
|
useHealth,
|
|
184
202
|
useLastHitTick,
|
|
203
|
+
useLastMissileConfig,
|
|
185
204
|
useMemo,
|
|
186
205
|
useMyProjectiles,
|
|
187
206
|
useMyThreatsToEnemy,
|
|
188
207
|
useParam,
|
|
189
208
|
usePosition,
|
|
209
|
+
useProjectiles,
|
|
210
|
+
useRandom,
|
|
190
211
|
useRef,
|
|
191
212
|
useShieldStrength,
|
|
192
213
|
useState,
|
|
@@ -197,10 +218,10 @@ import {
|
|
|
197
218
|
useVelocity,
|
|
198
219
|
validateHookCall,
|
|
199
220
|
validateMissileConfig,
|
|
200
|
-
|
|
201
|
-
|
|
221
|
+
withMissileContext,
|
|
222
|
+
withWizardContext,
|
|
202
223
|
wrapWithParams
|
|
203
|
-
} from "./chunk-
|
|
224
|
+
} from "./chunk-G5T65F3W.js";
|
|
204
225
|
|
|
205
226
|
// src/engine/sandbox.ts
|
|
206
227
|
import ivm from "isolated-vm";
|
|
@@ -247,50 +268,17 @@ function generateMatchEntryPoint(bot1SourcePath, bot1ExportName, bot2SourcePath,
|
|
|
247
268
|
const bot2Path = bot2SourcePath.replace(/\\/g, "/");
|
|
248
269
|
const srcPath = enginePath.replace(/\/engine\/?$/, "");
|
|
249
270
|
return `
|
|
250
|
-
import {${bot1ExportName} as
|
|
251
|
-
import {${bot2ExportName} as
|
|
271
|
+
import {${bot1ExportName} as __Bot1} from '${bot1Path}';
|
|
272
|
+
import {${bot2ExportName} as __Bot2} from '${bot2Path}';
|
|
252
273
|
import {fight, simulate} from '${srcPath}/engine/simulation.ts';
|
|
253
274
|
import {wrapWithParams} from '${srcPath}/engine/params-runtime.ts';
|
|
254
|
-
import {wrapNewBot} from '${srcPath}/hooks/bot-wrapper.ts';
|
|
255
|
-
|
|
256
|
-
// Auto-detect new-style bots (hooks API) and wrap them for the simulation engine.
|
|
257
|
-
// New-style: uses hooks, returns FinalAction (has _toAction method).
|
|
258
|
-
// Old-style: accepts ({state, config, random}), returns WizardActions directly.
|
|
259
|
-
// We detect by doing a dry-run call \u2014 if the result has _toAction, it's new-style.
|
|
260
|
-
//
|
|
261
|
-
// Detection is deferred until the first fight/simulate call so that malicious
|
|
262
|
-
// bots (infinite loops, memory bombs) time out during fight(), not during
|
|
263
|
-
// sandbox creation. __resolveBots memoizes the wrapped functions.
|
|
264
|
-
function __wrap(bot) {
|
|
265
|
-
if (bot.length > 0) return bot; // Old-style: has parameters
|
|
266
|
-
// 0-param function could be either style. Try calling it to check return type.
|
|
267
|
-
try {
|
|
268
|
-
var result = bot();
|
|
269
|
-
if (result && typeof result._toAction === 'function') {
|
|
270
|
-
return wrapNewBot(bot);
|
|
271
|
-
}
|
|
272
|
-
} catch(e) {
|
|
273
|
-
// If it throws (e.g. hooks not initialized), it must be new-style
|
|
274
|
-
return wrapNewBot(bot);
|
|
275
|
-
}
|
|
276
|
-
return bot;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
var __Bot1 = null;
|
|
280
|
-
var __Bot2 = null;
|
|
281
|
-
function __resolveBots() {
|
|
282
|
-
if (__Bot1 === null) __Bot1 = __wrap(__RawBot1);
|
|
283
|
-
if (__Bot2 === null) __Bot2 = __wrap(__RawBot2);
|
|
284
|
-
}
|
|
285
275
|
|
|
286
276
|
globalThis.__fight = function __fight(options) {
|
|
287
|
-
__resolveBots();
|
|
288
277
|
const result = fight(__Bot1, __Bot2, options);
|
|
289
278
|
return result;
|
|
290
279
|
};
|
|
291
280
|
|
|
292
281
|
globalThis.__simulate = function __simulate(options) {
|
|
293
|
-
__resolveBots();
|
|
294
282
|
const {params1, params2, ...simOptions} = options;
|
|
295
283
|
const bot1 = params1 ? wrapWithParams(__Bot1, params1) : __Bot1;
|
|
296
284
|
const bot2 = params2 ? wrapWithParams(__Bot2, params2) : __Bot2;
|
|
@@ -402,7 +390,7 @@ var MatchSandbox = class _MatchSandbox {
|
|
|
402
390
|
*/
|
|
403
391
|
static async create(bot1, bot2, options) {
|
|
404
392
|
const memoryLimitMB = options?.memoryLimitMB ?? 512;
|
|
405
|
-
const timeoutMs = options?.timeoutMs ??
|
|
393
|
+
const timeoutMs = options?.timeoutMs ?? 6e4;
|
|
406
394
|
const bundle = await compileMatchBundle(bot1, bot2, options?.compileOptions);
|
|
407
395
|
const isolate = new ivm.Isolate({ memoryLimit: memoryLimitMB });
|
|
408
396
|
try {
|
|
@@ -427,7 +415,7 @@ var MatchSandbox = class _MatchSandbox {
|
|
|
427
415
|
*/
|
|
428
416
|
static async fromBundle(bundle, options) {
|
|
429
417
|
const memoryLimitMB = options?.memoryLimitMB ?? 512;
|
|
430
|
-
const timeoutMs = options?.timeoutMs ??
|
|
418
|
+
const timeoutMs = options?.timeoutMs ?? 6e4;
|
|
431
419
|
const isolate = new ivm.Isolate({ memoryLimit: memoryLimitMB });
|
|
432
420
|
try {
|
|
433
421
|
const context = await isolate.createContext();
|
|
@@ -539,12 +527,150 @@ async function sandboxSimulate(bot1, bot2, options) {
|
|
|
539
527
|
sandbox.dispose();
|
|
540
528
|
}
|
|
541
529
|
}
|
|
530
|
+
|
|
531
|
+
// src/engine/bundle-fight.ts
|
|
532
|
+
import path2 from "path";
|
|
533
|
+
import ivm2 from "isolated-vm";
|
|
534
|
+
import { build as build2 } from "esbuild";
|
|
535
|
+
var MEMORY_LIMIT_MB = 256;
|
|
536
|
+
var FIGHT_TIMEOUT_MS = 6e4;
|
|
537
|
+
var FREEZE_BANNER = `
|
|
538
|
+
Object.freeze(Object.prototype);
|
|
539
|
+
Object.freeze(Array.prototype);
|
|
540
|
+
Object.freeze(Function.prototype);
|
|
541
|
+
Object.freeze(String.prototype);
|
|
542
|
+
Object.freeze(Number.prototype);
|
|
543
|
+
Object.freeze(Boolean.prototype);
|
|
544
|
+
Object.freeze(RegExp.prototype);
|
|
545
|
+
Object.freeze(Date.prototype);
|
|
546
|
+
Object.freeze(Error.prototype);
|
|
547
|
+
Object.freeze(Map.prototype);
|
|
548
|
+
Object.freeze(Set.prototype);
|
|
549
|
+
Object.freeze(Math);
|
|
550
|
+
Object.freeze(JSON);
|
|
551
|
+
(function() {
|
|
552
|
+
var g = typeof globalThis !== 'undefined' ? globalThis : typeof self !== 'undefined' ? self : {};
|
|
553
|
+
var blocked = [
|
|
554
|
+
'fetch', 'XMLHttpRequest', 'WebSocket', 'EventSource',
|
|
555
|
+
'importScripts', 'Worker', 'SharedWorker',
|
|
556
|
+
'Request', 'Response', 'Headers',
|
|
557
|
+
'navigator', 'BroadcastChannel',
|
|
558
|
+
'indexedDB', 'caches'
|
|
559
|
+
];
|
|
560
|
+
for (var i = 0; i < blocked.length; i++) {
|
|
561
|
+
try { Object.defineProperty(g, blocked[i], {value: undefined, writable: false, configurable: false}); }
|
|
562
|
+
catch(e) {}
|
|
563
|
+
}
|
|
564
|
+
})();
|
|
565
|
+
`;
|
|
566
|
+
var cachedTemplate = null;
|
|
567
|
+
function buildMatchTemplate() {
|
|
568
|
+
if (!cachedTemplate) {
|
|
569
|
+
cachedTemplate = (async () => {
|
|
570
|
+
const engineDir = getEngineDir();
|
|
571
|
+
const coreSrc = path2.dirname(engineDir).replace(/\\/g, "/");
|
|
572
|
+
const entryPoint = `
|
|
573
|
+
import {fight, simulate} from '${coreSrc}/engine/simulation.ts';
|
|
574
|
+
import {wrapWithParams} from '${coreSrc}/engine/params-runtime.ts';
|
|
575
|
+
|
|
576
|
+
const __Bot1 = (globalThis as any).__injectedBot1;
|
|
577
|
+
const __Bot2 = (globalThis as any).__injectedBot2;
|
|
578
|
+
|
|
579
|
+
if (!__Bot1) throw new Error('Bot 1 not injected (set globalThis.__injectedBot1)');
|
|
580
|
+
if (!__Bot2) throw new Error('Bot 2 not injected (set globalThis.__injectedBot2)');
|
|
581
|
+
|
|
582
|
+
(globalThis as any).__fight = function __fight(options: any) {
|
|
583
|
+
return fight(__Bot1, __Bot2, options);
|
|
584
|
+
};
|
|
585
|
+
|
|
586
|
+
(globalThis as any).__simulate = function __simulate(options: any) {
|
|
587
|
+
const {params1, params2, ...simOptions} = options;
|
|
588
|
+
const bot1 = params1 ? wrapWithParams(__Bot1, params1) : __Bot1;
|
|
589
|
+
const bot2 = params2 ? wrapWithParams(__Bot2, params2) : __Bot2;
|
|
590
|
+
return simulate(bot1, bot2, simOptions);
|
|
591
|
+
};
|
|
592
|
+
`;
|
|
593
|
+
const result = await build2({
|
|
594
|
+
stdin: { contents: entryPoint, resolveDir: engineDir, loader: "ts" },
|
|
595
|
+
bundle: true,
|
|
596
|
+
write: false,
|
|
597
|
+
format: "iife",
|
|
598
|
+
platform: "neutral",
|
|
599
|
+
target: "es2022",
|
|
600
|
+
banner: { js: FREEZE_BANNER },
|
|
601
|
+
logLevel: "error",
|
|
602
|
+
external: [
|
|
603
|
+
"isolated-vm",
|
|
604
|
+
"esbuild",
|
|
605
|
+
"node:path",
|
|
606
|
+
"node:fs",
|
|
607
|
+
"node:url",
|
|
608
|
+
"node:worker_threads",
|
|
609
|
+
"node:crypto",
|
|
610
|
+
"node:os",
|
|
611
|
+
"node:child_process"
|
|
612
|
+
]
|
|
613
|
+
});
|
|
614
|
+
if (!result.outputFiles?.[0]) throw new Error("esbuild produced no match-template output");
|
|
615
|
+
return result.outputFiles[0].text;
|
|
616
|
+
})();
|
|
617
|
+
}
|
|
618
|
+
return cachedTemplate;
|
|
619
|
+
}
|
|
620
|
+
async function runBundleFight(bundle1, bundle2, options) {
|
|
621
|
+
const template = options.matchTemplate ?? await buildMatchTemplate();
|
|
622
|
+
const skipHistory = options.skipHistory ?? true;
|
|
623
|
+
const code = bundle1 + "\nvar __savedBot1 = globalThis.__injectedBot1;\nglobalThis.__injectedBot1 = undefined;\n" + bundle2 + "\nglobalThis.__injectedBot2 = globalThis.__injectedBot1;\n\nglobalThis.__injectedBot1 = __savedBot1;\n__savedBot1 = undefined;\n" + template + "\ndelete globalThis.__injectedBot1;\ndelete globalThis.__injectedBot2;\n";
|
|
624
|
+
const isolate = new ivm2.Isolate({ memoryLimit: MEMORY_LIMIT_MB });
|
|
625
|
+
try {
|
|
626
|
+
const context = await isolate.createContext();
|
|
627
|
+
const jail = context.global;
|
|
628
|
+
await jail.set("global", jail.derefInto());
|
|
629
|
+
const script = await isolate.compileScript(code);
|
|
630
|
+
await script.run(context, { timeout: FIGHT_TIMEOUT_MS });
|
|
631
|
+
const fightFn = await jail.get("__fight");
|
|
632
|
+
const result = await fightFn.apply(
|
|
633
|
+
void 0,
|
|
634
|
+
[new ivm2.ExternalCopy({ seed: options.seed, skipHistory }).copyInto()],
|
|
635
|
+
{ timeout: FIGHT_TIMEOUT_MS, result: { copy: true } }
|
|
636
|
+
);
|
|
637
|
+
return result;
|
|
638
|
+
} finally {
|
|
639
|
+
if (!isolate.isDisposed) isolate.dispose();
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
async function runBundleSimulate(bundle1, bundle2, options = {}) {
|
|
643
|
+
const template = options.matchTemplate ?? await buildMatchTemplate();
|
|
644
|
+
const code = bundle1 + "\nvar __savedBot1 = globalThis.__injectedBot1;\nglobalThis.__injectedBot1 = undefined;\n" + bundle2 + "\nglobalThis.__injectedBot2 = globalThis.__injectedBot1;\n\nglobalThis.__injectedBot1 = __savedBot1;\n__savedBot1 = undefined;\n" + template + "\ndelete globalThis.__injectedBot1;\ndelete globalThis.__injectedBot2;\n";
|
|
645
|
+
const isolate = new ivm2.Isolate({ memoryLimit: MEMORY_LIMIT_MB });
|
|
646
|
+
try {
|
|
647
|
+
const context = await isolate.createContext();
|
|
648
|
+
const jail = context.global;
|
|
649
|
+
await jail.set("global", jail.derefInto());
|
|
650
|
+
const script = await isolate.compileScript(code);
|
|
651
|
+
await script.run(context, { timeout: FIGHT_TIMEOUT_MS });
|
|
652
|
+
const simulateFn = await jail.get("__simulate");
|
|
653
|
+
const simOptions = {
|
|
654
|
+
seed: options.seed ?? 1,
|
|
655
|
+
spawnDistance: options.spawnDistance,
|
|
656
|
+
maxTicks: options.maxTicks
|
|
657
|
+
};
|
|
658
|
+
const result = await simulateFn.apply(
|
|
659
|
+
void 0,
|
|
660
|
+
[new ivm2.ExternalCopy(simOptions).copyInto()],
|
|
661
|
+
{ timeout: FIGHT_TIMEOUT_MS, result: { copy: true } }
|
|
662
|
+
);
|
|
663
|
+
return result;
|
|
664
|
+
} finally {
|
|
665
|
+
if (!isolate.isDisposed) isolate.dispose();
|
|
666
|
+
}
|
|
667
|
+
}
|
|
542
668
|
export {
|
|
543
669
|
ALL_BOTS,
|
|
544
|
-
|
|
670
|
+
ARENA_MAX,
|
|
671
|
+
ARENA_MIN,
|
|
545
672
|
ARENA_SIZE,
|
|
546
673
|
ARENA_WATER_BUFFER,
|
|
547
|
-
ARENA_WIDTH,
|
|
548
674
|
Archlich,
|
|
549
675
|
Archmage,
|
|
550
676
|
BLINK_CAST_TIME,
|
|
@@ -570,6 +696,11 @@ export {
|
|
|
570
696
|
Golem,
|
|
571
697
|
Hogger,
|
|
572
698
|
Infernalist,
|
|
699
|
+
KNOCKBACK_DAMAGE_THRESHOLD,
|
|
700
|
+
KNOCKBACK_DECAY,
|
|
701
|
+
KNOCKBACK_DELAY,
|
|
702
|
+
KNOCKBACK_SPEED_PER_DAMAGE,
|
|
703
|
+
LAVA_BORDER_WIDTH,
|
|
573
704
|
Lich,
|
|
574
705
|
MATCH_DURATION,
|
|
575
706
|
MAX_HEALTH,
|
|
@@ -593,6 +724,8 @@ export {
|
|
|
593
724
|
MatchSandbox,
|
|
594
725
|
Nightblade,
|
|
595
726
|
Pyromancer,
|
|
727
|
+
RULES,
|
|
728
|
+
RULESET_RANGES,
|
|
596
729
|
Rookie,
|
|
597
730
|
SHIELD_CAST_TIME,
|
|
598
731
|
SHIELD_DECAY_PER_SECOND,
|
|
@@ -630,11 +763,12 @@ export {
|
|
|
630
763
|
angleDiff,
|
|
631
764
|
angleInRange,
|
|
632
765
|
angleTo,
|
|
633
|
-
antiHomingMissile,
|
|
634
766
|
applyDamage,
|
|
767
|
+
applyRulesetOverrides,
|
|
635
768
|
blink,
|
|
636
769
|
browserSandboxFight,
|
|
637
770
|
browserSandboxSimulate,
|
|
771
|
+
buildMatchTemplate,
|
|
638
772
|
calculateBlinkCooldown,
|
|
639
773
|
calculateMissileCastTime,
|
|
640
774
|
calculateMissileRadius,
|
|
@@ -653,18 +787,22 @@ export {
|
|
|
653
787
|
createInitialState,
|
|
654
788
|
createRandom,
|
|
655
789
|
createWorkerScript,
|
|
790
|
+
currentRuleset,
|
|
656
791
|
diagnoseTrace,
|
|
657
792
|
directionAway,
|
|
658
793
|
directionTo,
|
|
659
794
|
distanceTo,
|
|
660
795
|
effectiveTurnRateCost,
|
|
661
796
|
extractAction,
|
|
797
|
+
extractMissileAction,
|
|
662
798
|
extractStats,
|
|
663
799
|
extractTraceEvents,
|
|
664
800
|
fight,
|
|
665
801
|
findInRange,
|
|
666
802
|
findNearest,
|
|
803
|
+
fitMissileForEscapingTarget,
|
|
667
804
|
fitMissileToBudget,
|
|
805
|
+
flyStraight,
|
|
668
806
|
formatDiagnosis,
|
|
669
807
|
formatStats,
|
|
670
808
|
formatTraceEvents,
|
|
@@ -672,18 +810,21 @@ export {
|
|
|
672
810
|
generateCandidates,
|
|
673
811
|
generateCombos,
|
|
674
812
|
getAdaptiveMissileConfig,
|
|
675
|
-
getBotContext,
|
|
676
813
|
getEffectiveRange,
|
|
677
814
|
getLeadPosition,
|
|
678
815
|
getMissileCastTime,
|
|
816
|
+
getMissileContext,
|
|
679
817
|
getPlayerState,
|
|
818
|
+
getWizardContext,
|
|
680
819
|
hashCombine,
|
|
681
820
|
homingMissile,
|
|
682
821
|
idle,
|
|
683
822
|
inRange,
|
|
684
823
|
interceptAngle,
|
|
685
|
-
|
|
824
|
+
isBannedBotName,
|
|
825
|
+
isInLava,
|
|
686
826
|
magnitude,
|
|
827
|
+
matchesAnyBanRule,
|
|
687
828
|
missile,
|
|
688
829
|
move,
|
|
689
830
|
moveInDirection,
|
|
@@ -695,9 +836,12 @@ export {
|
|
|
695
836
|
normalizeAngle,
|
|
696
837
|
predictPosition,
|
|
697
838
|
resetAllHooks,
|
|
839
|
+
resetRuleset,
|
|
698
840
|
resolveWizardCollision,
|
|
699
|
-
|
|
841
|
+
runBundleFight,
|
|
842
|
+
runBundleSimulate,
|
|
700
843
|
runWithHooks,
|
|
844
|
+
runWizardWithContext,
|
|
701
845
|
sandboxFight,
|
|
702
846
|
sandboxSimulate,
|
|
703
847
|
scoreFight,
|
|
@@ -706,6 +850,7 @@ export {
|
|
|
706
850
|
setParamValues,
|
|
707
851
|
shield,
|
|
708
852
|
simulate,
|
|
853
|
+
simulateMinDuration,
|
|
709
854
|
sortByDistance,
|
|
710
855
|
spiralMissile,
|
|
711
856
|
startCast,
|
|
@@ -716,6 +861,8 @@ export {
|
|
|
716
861
|
sweptCircleCollision,
|
|
717
862
|
testBot,
|
|
718
863
|
tick,
|
|
864
|
+
turnToAngle,
|
|
865
|
+
turnToward,
|
|
719
866
|
updateShield,
|
|
720
867
|
useArenaSize,
|
|
721
868
|
useBlinkCooldown,
|
|
@@ -728,11 +875,14 @@ export {
|
|
|
728
875
|
useEnemy,
|
|
729
876
|
useHealth,
|
|
730
877
|
useLastHitTick,
|
|
878
|
+
useLastMissileConfig,
|
|
731
879
|
useMemo,
|
|
732
880
|
useMyProjectiles,
|
|
733
881
|
useMyThreatsToEnemy,
|
|
734
882
|
useParam,
|
|
735
883
|
usePosition,
|
|
884
|
+
useProjectiles,
|
|
885
|
+
useRandom,
|
|
736
886
|
useRef,
|
|
737
887
|
useShieldStrength,
|
|
738
888
|
useState,
|
|
@@ -743,8 +893,8 @@ export {
|
|
|
743
893
|
useVelocity,
|
|
744
894
|
validateHookCall,
|
|
745
895
|
validateMissileConfig,
|
|
746
|
-
|
|
747
|
-
|
|
896
|
+
withMissileContext,
|
|
897
|
+
withWizardContext,
|
|
748
898
|
wrapWithParams
|
|
749
899
|
};
|
|
750
900
|
//# sourceMappingURL=index.js.map
|