@vibemancer/core 0.1.3 → 0.1.5
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-W7HWJFQ4.js +10599 -0
- package/dist/chunk-W7HWJFQ4.js.map +1 -0
- package/dist/index-browser.d.ts +1300 -1051
- package/dist/index-browser.js +55 -17
- package/dist/index.d.ts +53 -3
- package/dist/index.js +200 -54
- package/dist/index.js.map +1 -1
- package/package.json +21 -15
- 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.ts +2 -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-B7YYYBEC.js +0 -9140
- package/dist/chunk-B7YYYBEC.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,17 +139,18 @@ 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
|
+
isInLava,
|
|
142
154
|
magnitude,
|
|
143
155
|
missile,
|
|
144
156
|
move,
|
|
@@ -151,15 +163,17 @@ import {
|
|
|
151
163
|
normalizeAngle,
|
|
152
164
|
predictPosition,
|
|
153
165
|
resetAllHooks,
|
|
166
|
+
resetRuleset,
|
|
154
167
|
resolveWizardCollision,
|
|
155
|
-
runBotWithContext,
|
|
156
168
|
runWithHooks,
|
|
169
|
+
runWizardWithContext,
|
|
157
170
|
scoreFight,
|
|
158
171
|
scoreFightAsWizard2,
|
|
159
172
|
seekerMissile,
|
|
160
173
|
setParamValues,
|
|
161
174
|
shield,
|
|
162
175
|
simulate,
|
|
176
|
+
simulateMinDuration,
|
|
163
177
|
sortByDistance,
|
|
164
178
|
spiralMissile,
|
|
165
179
|
startCast,
|
|
@@ -170,6 +184,8 @@ import {
|
|
|
170
184
|
sweptCircleCollision,
|
|
171
185
|
testBot,
|
|
172
186
|
tick,
|
|
187
|
+
turnToAngle,
|
|
188
|
+
turnToward,
|
|
173
189
|
updateShield,
|
|
174
190
|
useArenaSize,
|
|
175
191
|
useBlinkCooldown,
|
|
@@ -182,11 +198,14 @@ import {
|
|
|
182
198
|
useEnemy,
|
|
183
199
|
useHealth,
|
|
184
200
|
useLastHitTick,
|
|
201
|
+
useLastMissileConfig,
|
|
185
202
|
useMemo,
|
|
186
203
|
useMyProjectiles,
|
|
187
204
|
useMyThreatsToEnemy,
|
|
188
205
|
useParam,
|
|
189
206
|
usePosition,
|
|
207
|
+
useProjectiles,
|
|
208
|
+
useRandom,
|
|
190
209
|
useRef,
|
|
191
210
|
useShieldStrength,
|
|
192
211
|
useState,
|
|
@@ -197,10 +216,10 @@ import {
|
|
|
197
216
|
useVelocity,
|
|
198
217
|
validateHookCall,
|
|
199
218
|
validateMissileConfig,
|
|
200
|
-
|
|
201
|
-
|
|
219
|
+
withMissileContext,
|
|
220
|
+
withWizardContext,
|
|
202
221
|
wrapWithParams
|
|
203
|
-
} from "./chunk-
|
|
222
|
+
} from "./chunk-W7HWJFQ4.js";
|
|
204
223
|
|
|
205
224
|
// src/engine/sandbox.ts
|
|
206
225
|
import ivm from "isolated-vm";
|
|
@@ -247,50 +266,17 @@ function generateMatchEntryPoint(bot1SourcePath, bot1ExportName, bot2SourcePath,
|
|
|
247
266
|
const bot2Path = bot2SourcePath.replace(/\\/g, "/");
|
|
248
267
|
const srcPath = enginePath.replace(/\/engine\/?$/, "");
|
|
249
268
|
return `
|
|
250
|
-
import {${bot1ExportName} as
|
|
251
|
-
import {${bot2ExportName} as
|
|
269
|
+
import {${bot1ExportName} as __Bot1} from '${bot1Path}';
|
|
270
|
+
import {${bot2ExportName} as __Bot2} from '${bot2Path}';
|
|
252
271
|
import {fight, simulate} from '${srcPath}/engine/simulation.ts';
|
|
253
272
|
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
273
|
|
|
286
274
|
globalThis.__fight = function __fight(options) {
|
|
287
|
-
__resolveBots();
|
|
288
275
|
const result = fight(__Bot1, __Bot2, options);
|
|
289
276
|
return result;
|
|
290
277
|
};
|
|
291
278
|
|
|
292
279
|
globalThis.__simulate = function __simulate(options) {
|
|
293
|
-
__resolveBots();
|
|
294
280
|
const {params1, params2, ...simOptions} = options;
|
|
295
281
|
const bot1 = params1 ? wrapWithParams(__Bot1, params1) : __Bot1;
|
|
296
282
|
const bot2 = params2 ? wrapWithParams(__Bot2, params2) : __Bot2;
|
|
@@ -402,7 +388,7 @@ var MatchSandbox = class _MatchSandbox {
|
|
|
402
388
|
*/
|
|
403
389
|
static async create(bot1, bot2, options) {
|
|
404
390
|
const memoryLimitMB = options?.memoryLimitMB ?? 512;
|
|
405
|
-
const timeoutMs = options?.timeoutMs ??
|
|
391
|
+
const timeoutMs = options?.timeoutMs ?? 6e4;
|
|
406
392
|
const bundle = await compileMatchBundle(bot1, bot2, options?.compileOptions);
|
|
407
393
|
const isolate = new ivm.Isolate({ memoryLimit: memoryLimitMB });
|
|
408
394
|
try {
|
|
@@ -427,7 +413,7 @@ var MatchSandbox = class _MatchSandbox {
|
|
|
427
413
|
*/
|
|
428
414
|
static async fromBundle(bundle, options) {
|
|
429
415
|
const memoryLimitMB = options?.memoryLimitMB ?? 512;
|
|
430
|
-
const timeoutMs = options?.timeoutMs ??
|
|
416
|
+
const timeoutMs = options?.timeoutMs ?? 6e4;
|
|
431
417
|
const isolate = new ivm.Isolate({ memoryLimit: memoryLimitMB });
|
|
432
418
|
try {
|
|
433
419
|
const context = await isolate.createContext();
|
|
@@ -539,12 +525,150 @@ async function sandboxSimulate(bot1, bot2, options) {
|
|
|
539
525
|
sandbox.dispose();
|
|
540
526
|
}
|
|
541
527
|
}
|
|
528
|
+
|
|
529
|
+
// src/engine/bundle-fight.ts
|
|
530
|
+
import path2 from "path";
|
|
531
|
+
import ivm2 from "isolated-vm";
|
|
532
|
+
import { build as build2 } from "esbuild";
|
|
533
|
+
var MEMORY_LIMIT_MB = 256;
|
|
534
|
+
var FIGHT_TIMEOUT_MS = 6e4;
|
|
535
|
+
var FREEZE_BANNER = `
|
|
536
|
+
Object.freeze(Object.prototype);
|
|
537
|
+
Object.freeze(Array.prototype);
|
|
538
|
+
Object.freeze(Function.prototype);
|
|
539
|
+
Object.freeze(String.prototype);
|
|
540
|
+
Object.freeze(Number.prototype);
|
|
541
|
+
Object.freeze(Boolean.prototype);
|
|
542
|
+
Object.freeze(RegExp.prototype);
|
|
543
|
+
Object.freeze(Date.prototype);
|
|
544
|
+
Object.freeze(Error.prototype);
|
|
545
|
+
Object.freeze(Map.prototype);
|
|
546
|
+
Object.freeze(Set.prototype);
|
|
547
|
+
Object.freeze(Math);
|
|
548
|
+
Object.freeze(JSON);
|
|
549
|
+
(function() {
|
|
550
|
+
var g = typeof globalThis !== 'undefined' ? globalThis : typeof self !== 'undefined' ? self : {};
|
|
551
|
+
var blocked = [
|
|
552
|
+
'fetch', 'XMLHttpRequest', 'WebSocket', 'EventSource',
|
|
553
|
+
'importScripts', 'Worker', 'SharedWorker',
|
|
554
|
+
'Request', 'Response', 'Headers',
|
|
555
|
+
'navigator', 'BroadcastChannel',
|
|
556
|
+
'indexedDB', 'caches'
|
|
557
|
+
];
|
|
558
|
+
for (var i = 0; i < blocked.length; i++) {
|
|
559
|
+
try { Object.defineProperty(g, blocked[i], {value: undefined, writable: false, configurable: false}); }
|
|
560
|
+
catch(e) {}
|
|
561
|
+
}
|
|
562
|
+
})();
|
|
563
|
+
`;
|
|
564
|
+
var cachedTemplate = null;
|
|
565
|
+
function buildMatchTemplate() {
|
|
566
|
+
if (!cachedTemplate) {
|
|
567
|
+
cachedTemplate = (async () => {
|
|
568
|
+
const engineDir = getEngineDir();
|
|
569
|
+
const coreSrc = path2.dirname(engineDir).replace(/\\/g, "/");
|
|
570
|
+
const entryPoint = `
|
|
571
|
+
import {fight, simulate} from '${coreSrc}/engine/simulation.ts';
|
|
572
|
+
import {wrapWithParams} from '${coreSrc}/engine/params-runtime.ts';
|
|
573
|
+
|
|
574
|
+
const __Bot1 = (globalThis as any).__injectedBot1;
|
|
575
|
+
const __Bot2 = (globalThis as any).__injectedBot2;
|
|
576
|
+
|
|
577
|
+
if (!__Bot1) throw new Error('Bot 1 not injected (set globalThis.__injectedBot1)');
|
|
578
|
+
if (!__Bot2) throw new Error('Bot 2 not injected (set globalThis.__injectedBot2)');
|
|
579
|
+
|
|
580
|
+
(globalThis as any).__fight = function __fight(options: any) {
|
|
581
|
+
return fight(__Bot1, __Bot2, options);
|
|
582
|
+
};
|
|
583
|
+
|
|
584
|
+
(globalThis as any).__simulate = function __simulate(options: any) {
|
|
585
|
+
const {params1, params2, ...simOptions} = options;
|
|
586
|
+
const bot1 = params1 ? wrapWithParams(__Bot1, params1) : __Bot1;
|
|
587
|
+
const bot2 = params2 ? wrapWithParams(__Bot2, params2) : __Bot2;
|
|
588
|
+
return simulate(bot1, bot2, simOptions);
|
|
589
|
+
};
|
|
590
|
+
`;
|
|
591
|
+
const result = await build2({
|
|
592
|
+
stdin: { contents: entryPoint, resolveDir: engineDir, loader: "ts" },
|
|
593
|
+
bundle: true,
|
|
594
|
+
write: false,
|
|
595
|
+
format: "iife",
|
|
596
|
+
platform: "neutral",
|
|
597
|
+
target: "es2022",
|
|
598
|
+
banner: { js: FREEZE_BANNER },
|
|
599
|
+
logLevel: "error",
|
|
600
|
+
external: [
|
|
601
|
+
"isolated-vm",
|
|
602
|
+
"esbuild",
|
|
603
|
+
"node:path",
|
|
604
|
+
"node:fs",
|
|
605
|
+
"node:url",
|
|
606
|
+
"node:worker_threads",
|
|
607
|
+
"node:crypto",
|
|
608
|
+
"node:os",
|
|
609
|
+
"node:child_process"
|
|
610
|
+
]
|
|
611
|
+
});
|
|
612
|
+
if (!result.outputFiles?.[0]) throw new Error("esbuild produced no match-template output");
|
|
613
|
+
return result.outputFiles[0].text;
|
|
614
|
+
})();
|
|
615
|
+
}
|
|
616
|
+
return cachedTemplate;
|
|
617
|
+
}
|
|
618
|
+
async function runBundleFight(bundle1, bundle2, options) {
|
|
619
|
+
const template = options.matchTemplate ?? await buildMatchTemplate();
|
|
620
|
+
const skipHistory = options.skipHistory ?? true;
|
|
621
|
+
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";
|
|
622
|
+
const isolate = new ivm2.Isolate({ memoryLimit: MEMORY_LIMIT_MB });
|
|
623
|
+
try {
|
|
624
|
+
const context = await isolate.createContext();
|
|
625
|
+
const jail = context.global;
|
|
626
|
+
await jail.set("global", jail.derefInto());
|
|
627
|
+
const script = await isolate.compileScript(code);
|
|
628
|
+
await script.run(context, { timeout: FIGHT_TIMEOUT_MS });
|
|
629
|
+
const fightFn = await jail.get("__fight");
|
|
630
|
+
const result = await fightFn.apply(
|
|
631
|
+
void 0,
|
|
632
|
+
[new ivm2.ExternalCopy({ seed: options.seed, skipHistory }).copyInto()],
|
|
633
|
+
{ timeout: FIGHT_TIMEOUT_MS, result: { copy: true } }
|
|
634
|
+
);
|
|
635
|
+
return result;
|
|
636
|
+
} finally {
|
|
637
|
+
if (!isolate.isDisposed) isolate.dispose();
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
async function runBundleSimulate(bundle1, bundle2, options = {}) {
|
|
641
|
+
const template = options.matchTemplate ?? await buildMatchTemplate();
|
|
642
|
+
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";
|
|
643
|
+
const isolate = new ivm2.Isolate({ memoryLimit: MEMORY_LIMIT_MB });
|
|
644
|
+
try {
|
|
645
|
+
const context = await isolate.createContext();
|
|
646
|
+
const jail = context.global;
|
|
647
|
+
await jail.set("global", jail.derefInto());
|
|
648
|
+
const script = await isolate.compileScript(code);
|
|
649
|
+
await script.run(context, { timeout: FIGHT_TIMEOUT_MS });
|
|
650
|
+
const simulateFn = await jail.get("__simulate");
|
|
651
|
+
const simOptions = {
|
|
652
|
+
seed: options.seed ?? 1,
|
|
653
|
+
spawnDistance: options.spawnDistance,
|
|
654
|
+
maxTicks: options.maxTicks
|
|
655
|
+
};
|
|
656
|
+
const result = await simulateFn.apply(
|
|
657
|
+
void 0,
|
|
658
|
+
[new ivm2.ExternalCopy(simOptions).copyInto()],
|
|
659
|
+
{ timeout: FIGHT_TIMEOUT_MS, result: { copy: true } }
|
|
660
|
+
);
|
|
661
|
+
return result;
|
|
662
|
+
} finally {
|
|
663
|
+
if (!isolate.isDisposed) isolate.dispose();
|
|
664
|
+
}
|
|
665
|
+
}
|
|
542
666
|
export {
|
|
543
667
|
ALL_BOTS,
|
|
544
|
-
|
|
668
|
+
ARENA_MAX,
|
|
669
|
+
ARENA_MIN,
|
|
545
670
|
ARENA_SIZE,
|
|
546
671
|
ARENA_WATER_BUFFER,
|
|
547
|
-
ARENA_WIDTH,
|
|
548
672
|
Archlich,
|
|
549
673
|
Archmage,
|
|
550
674
|
BLINK_CAST_TIME,
|
|
@@ -570,6 +694,11 @@ export {
|
|
|
570
694
|
Golem,
|
|
571
695
|
Hogger,
|
|
572
696
|
Infernalist,
|
|
697
|
+
KNOCKBACK_DAMAGE_THRESHOLD,
|
|
698
|
+
KNOCKBACK_DECAY,
|
|
699
|
+
KNOCKBACK_DELAY,
|
|
700
|
+
KNOCKBACK_SPEED_PER_DAMAGE,
|
|
701
|
+
LAVA_BORDER_WIDTH,
|
|
573
702
|
Lich,
|
|
574
703
|
MATCH_DURATION,
|
|
575
704
|
MAX_HEALTH,
|
|
@@ -593,6 +722,8 @@ export {
|
|
|
593
722
|
MatchSandbox,
|
|
594
723
|
Nightblade,
|
|
595
724
|
Pyromancer,
|
|
725
|
+
RULES,
|
|
726
|
+
RULESET_RANGES,
|
|
596
727
|
Rookie,
|
|
597
728
|
SHIELD_CAST_TIME,
|
|
598
729
|
SHIELD_DECAY_PER_SECOND,
|
|
@@ -630,11 +761,12 @@ export {
|
|
|
630
761
|
angleDiff,
|
|
631
762
|
angleInRange,
|
|
632
763
|
angleTo,
|
|
633
|
-
antiHomingMissile,
|
|
634
764
|
applyDamage,
|
|
765
|
+
applyRulesetOverrides,
|
|
635
766
|
blink,
|
|
636
767
|
browserSandboxFight,
|
|
637
768
|
browserSandboxSimulate,
|
|
769
|
+
buildMatchTemplate,
|
|
638
770
|
calculateBlinkCooldown,
|
|
639
771
|
calculateMissileCastTime,
|
|
640
772
|
calculateMissileRadius,
|
|
@@ -653,18 +785,22 @@ export {
|
|
|
653
785
|
createInitialState,
|
|
654
786
|
createRandom,
|
|
655
787
|
createWorkerScript,
|
|
788
|
+
currentRuleset,
|
|
656
789
|
diagnoseTrace,
|
|
657
790
|
directionAway,
|
|
658
791
|
directionTo,
|
|
659
792
|
distanceTo,
|
|
660
793
|
effectiveTurnRateCost,
|
|
661
794
|
extractAction,
|
|
795
|
+
extractMissileAction,
|
|
662
796
|
extractStats,
|
|
663
797
|
extractTraceEvents,
|
|
664
798
|
fight,
|
|
665
799
|
findInRange,
|
|
666
800
|
findNearest,
|
|
801
|
+
fitMissileForEscapingTarget,
|
|
667
802
|
fitMissileToBudget,
|
|
803
|
+
flyStraight,
|
|
668
804
|
formatDiagnosis,
|
|
669
805
|
formatStats,
|
|
670
806
|
formatTraceEvents,
|
|
@@ -672,17 +808,18 @@ export {
|
|
|
672
808
|
generateCandidates,
|
|
673
809
|
generateCombos,
|
|
674
810
|
getAdaptiveMissileConfig,
|
|
675
|
-
getBotContext,
|
|
676
811
|
getEffectiveRange,
|
|
677
812
|
getLeadPosition,
|
|
678
813
|
getMissileCastTime,
|
|
814
|
+
getMissileContext,
|
|
679
815
|
getPlayerState,
|
|
816
|
+
getWizardContext,
|
|
680
817
|
hashCombine,
|
|
681
818
|
homingMissile,
|
|
682
819
|
idle,
|
|
683
820
|
inRange,
|
|
684
821
|
interceptAngle,
|
|
685
|
-
|
|
822
|
+
isInLava,
|
|
686
823
|
magnitude,
|
|
687
824
|
missile,
|
|
688
825
|
move,
|
|
@@ -695,9 +832,12 @@ export {
|
|
|
695
832
|
normalizeAngle,
|
|
696
833
|
predictPosition,
|
|
697
834
|
resetAllHooks,
|
|
835
|
+
resetRuleset,
|
|
698
836
|
resolveWizardCollision,
|
|
699
|
-
|
|
837
|
+
runBundleFight,
|
|
838
|
+
runBundleSimulate,
|
|
700
839
|
runWithHooks,
|
|
840
|
+
runWizardWithContext,
|
|
701
841
|
sandboxFight,
|
|
702
842
|
sandboxSimulate,
|
|
703
843
|
scoreFight,
|
|
@@ -706,6 +846,7 @@ export {
|
|
|
706
846
|
setParamValues,
|
|
707
847
|
shield,
|
|
708
848
|
simulate,
|
|
849
|
+
simulateMinDuration,
|
|
709
850
|
sortByDistance,
|
|
710
851
|
spiralMissile,
|
|
711
852
|
startCast,
|
|
@@ -716,6 +857,8 @@ export {
|
|
|
716
857
|
sweptCircleCollision,
|
|
717
858
|
testBot,
|
|
718
859
|
tick,
|
|
860
|
+
turnToAngle,
|
|
861
|
+
turnToward,
|
|
719
862
|
updateShield,
|
|
720
863
|
useArenaSize,
|
|
721
864
|
useBlinkCooldown,
|
|
@@ -728,11 +871,14 @@ export {
|
|
|
728
871
|
useEnemy,
|
|
729
872
|
useHealth,
|
|
730
873
|
useLastHitTick,
|
|
874
|
+
useLastMissileConfig,
|
|
731
875
|
useMemo,
|
|
732
876
|
useMyProjectiles,
|
|
733
877
|
useMyThreatsToEnemy,
|
|
734
878
|
useParam,
|
|
735
879
|
usePosition,
|
|
880
|
+
useProjectiles,
|
|
881
|
+
useRandom,
|
|
736
882
|
useRef,
|
|
737
883
|
useShieldStrength,
|
|
738
884
|
useState,
|
|
@@ -743,8 +889,8 @@ export {
|
|
|
743
889
|
useVelocity,
|
|
744
890
|
validateHookCall,
|
|
745
891
|
validateMissileConfig,
|
|
746
|
-
|
|
747
|
-
|
|
892
|
+
withMissileContext,
|
|
893
|
+
withWizardContext,
|
|
748
894
|
wrapWithParams
|
|
749
895
|
};
|
|
750
896
|
//# sourceMappingURL=index.js.map
|