@gamebob/axon-surge 0.39.0 → 0.40.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.
@@ -6771,6 +6771,7 @@ const C = {
6771
6771
  objectivesSubtitle: "MISIÓN • DESAFÍO • LOGRO",
6772
6772
  objectivesMissions: "MISIONES",
6773
6773
  objectivesChallenges: "DESAFÍOS",
6774
+ challengeSingular: "DESAFÍO",
6774
6775
  objectivesAchievements: "LOGROS",
6775
6776
  objectiveSystemHint: "ELIGE TU PRÓXIMO PROPÓSITO",
6776
6777
  objectiveNoObjectives: "SIN OBJETIVOS DISPONIBLES",
@@ -6797,6 +6798,7 @@ const C = {
6797
6798
  objectivesSubtitle: "MISSION • CHALLENGE • ACHIEVEMENT",
6798
6799
  objectivesMissions: "MISSIONS",
6799
6800
  objectivesChallenges: "CHALLENGES",
6801
+ challengeSingular: "CHALLENGE",
6800
6802
  objectivesAchievements: "ACHIEVEMENTS",
6801
6803
  objectiveSystemHint: "CHOOSE YOUR NEXT PURPOSE",
6802
6804
  objectiveNoObjectives: "NO OBJECTIVES AVAILABLE",
@@ -6823,6 +6825,7 @@ const C = {
6823
6825
  objectivesSubtitle: "MISSION • DÉFI • SUCCÈS",
6824
6826
  objectivesMissions: "MISSIONS",
6825
6827
  objectivesChallenges: "DÉFIS",
6828
+ challengeSingular: "DÉFI",
6826
6829
  objectivesAchievements: "SUCCÈS",
6827
6830
  objectiveSystemHint: "CHOISISSEZ VOTRE PROCHAIN BUT",
6828
6831
  objectiveNoObjectives: "AUCUN OBJECTIF DISPONIBLE",
@@ -6849,6 +6852,7 @@ const C = {
6849
6852
  objectivesSubtitle: "MISSION • HERAUSFORDERUNG • ERFOLG",
6850
6853
  objectivesMissions: "MISSIONEN",
6851
6854
  objectivesChallenges: "HERAUSFORDERUNGEN",
6855
+ challengeSingular: "HERAUSFORDERUNG",
6852
6856
  objectivesAchievements: "ERFOLGE",
6853
6857
  objectiveSystemHint: "WÄHLE DEIN NÄCHSTES ZIEL",
6854
6858
  objectiveNoObjectives: "KEINE ZIELE VERFÜGBAR",
@@ -6875,6 +6879,7 @@ const C = {
6875
6879
  objectivesSubtitle: "MISSIONE • SFIDA • OBIETTIVO",
6876
6880
  objectivesMissions: "MISSIONI",
6877
6881
  objectivesChallenges: "SFIDE",
6882
+ challengeSingular: "SFIDA",
6878
6883
  objectivesAchievements: "OBIETTIVI",
6879
6884
  objectiveSystemHint: "SCEGLI IL TUO PROSSIMO SCOPO",
6880
6885
  objectiveNoObjectives: "NESSUN OBIETTIVO DISPONIBILE",
@@ -6901,6 +6906,7 @@ const C = {
6901
6906
  objectivesSubtitle: "MISSÃO • DESAFIO • CONQUISTA",
6902
6907
  objectivesMissions: "MISSÕES",
6903
6908
  objectivesChallenges: "DESAFIOS",
6909
+ challengeSingular: "DESAFIO",
6904
6910
  objectivesAchievements: "CONQUISTAS",
6905
6911
  objectiveSystemHint: "ESCOLHE O TEU PRÓXIMO PROPÓSITO",
6906
6912
  objectiveNoObjectives: "SEM OBJETIVOS DISPONÍVEIS",
@@ -6927,6 +6933,7 @@ const C = {
6927
6933
  objectivesSubtitle: "MISSIE • UITDAGING • PRESTATIE",
6928
6934
  objectivesMissions: "MISSIES",
6929
6935
  objectivesChallenges: "UITDAGINGEN",
6936
+ challengeSingular: "UITDAGING",
6930
6937
  objectivesAchievements: "PRESTATIES",
6931
6938
  objectiveSystemHint: "KIES JE VOLGENDE DOEL",
6932
6939
  objectiveNoObjectives: "GEEN DOELEN BESCHIKBAAR",
@@ -6953,6 +6960,7 @@ const C = {
6953
6960
  objectivesSubtitle: "UPPDRAG • UTMANING • PRESTATION",
6954
6961
  objectivesMissions: "UPPDRAG",
6955
6962
  objectivesChallenges: "UTMANINGAR",
6963
+ challengeSingular: "UTMANING",
6956
6964
  objectivesAchievements: "PRESTATIONER",
6957
6965
  objectiveSystemHint: "VÄLJ DITT NÄSTA MÅL",
6958
6966
  objectiveNoObjectives: "INGA MÅL TILLGÄNGLIGA",
@@ -6979,6 +6987,7 @@ const C = {
6979
6987
  objectivesSubtitle: "MISJA • WYZWANIE • OSIĄGNIĘCIE",
6980
6988
  objectivesMissions: "MISJE",
6981
6989
  objectivesChallenges: "WYZWANIA",
6990
+ challengeSingular: "WYZWANIE",
6982
6991
  objectivesAchievements: "OSIĄGNIĘCIA",
6983
6992
  objectiveSystemHint: "WYBIERZ NASTĘPNY CEL",
6984
6993
  objectiveNoObjectives: "BRAK DOSTĘPNYCH CELÓW",
@@ -7005,6 +7014,7 @@ const C = {
7005
7014
  objectivesSubtitle: "MISI • TANTANGAN • PENCAPAIAN",
7006
7015
  objectivesMissions: "MISI",
7007
7016
  objectivesChallenges: "TANTANGAN",
7017
+ challengeSingular: "TANTANGAN",
7008
7018
  objectivesAchievements: "PENCAPAIAN",
7009
7019
  objectiveSystemHint: "PILIH TUJUAN BERIKUTNYA",
7010
7020
  objectiveNoObjectives: "TIDAK ADA TUJUAN",
@@ -7031,6 +7041,7 @@ const C = {
7031
7041
  objectivesSubtitle: "GÖREV • MEYDAN OKUMA • BAŞARIM",
7032
7042
  objectivesMissions: "GÖREVLER",
7033
7043
  objectivesChallenges: "MEYDAN OKUMALAR",
7044
+ challengeSingular: "MEYDAN OKUMA",
7034
7045
  objectivesAchievements: "BAŞARIMLAR",
7035
7046
  objectiveSystemHint: "SONRAKİ AMACINI SEÇ",
7036
7047
  objectiveNoObjectives: "KULLANILABİLİR HEDEF YOK",
@@ -7057,6 +7068,7 @@ const C = {
7057
7068
  objectivesSubtitle: "МИССИЯ • ИСПЫТАНИЕ • ДОСТИЖЕНИЕ",
7058
7069
  objectivesMissions: "МИССИИ",
7059
7070
  objectivesChallenges: "ИСПЫТАНИЯ",
7071
+ challengeSingular: "ИСПЫТАНИЕ",
7060
7072
  objectivesAchievements: "ДОСТИЖЕНИЯ",
7061
7073
  objectiveSystemHint: "ВЫБЕРИТЕ СЛЕДУЮЩУЮ ЦЕЛЬ",
7062
7074
  objectiveNoObjectives: "НЕТ ДОСТУПНЫХ ЦЕЛЕЙ",
@@ -7083,6 +7095,7 @@ const C = {
7083
7095
  objectivesSubtitle: "ミッション • チャレンジ • 実績",
7084
7096
  objectivesMissions: "ミッション",
7085
7097
  objectivesChallenges: "チャレンジ",
7098
+ challengeSingular: "チャレンジ",
7086
7099
  objectivesAchievements: "実績",
7087
7100
  objectiveSystemHint: "次の目的を選択",
7088
7101
  objectiveNoObjectives: "利用可能な目標はありません",
@@ -7109,6 +7122,7 @@ const C = {
7109
7122
  objectivesSubtitle: "임무 • 도전 • 업적",
7110
7123
  objectivesMissions: "임무",
7111
7124
  objectivesChallenges: "도전",
7125
+ challengeSingular: "도전",
7112
7126
  objectivesAchievements: "업적",
7113
7127
  objectiveSystemHint: "다음 목적을 선택하세요",
7114
7128
  objectiveNoObjectives: "사용 가능한 목표가 없습니다",
@@ -7135,6 +7149,7 @@ const C = {
7135
7149
  objectivesSubtitle: "任务 • 挑战 • 成就",
7136
7150
  objectivesMissions: "任务",
7137
7151
  objectivesChallenges: "挑战",
7152
+ challengeSingular: "挑战",
7138
7153
  objectivesAchievements: "成就",
7139
7154
  objectiveSystemHint: "选择你的下一个目标",
7140
7155
  objectiveNoObjectives: "没有可用目标",
@@ -10232,7 +10247,7 @@ class Va {
10232
10247
  return `
10233
10248
  <div class="axon-title-halo">
10234
10249
  <h1 class="axon-title">${this.i18n.translate("title")}</h1>
10235
- <p class="axon-version-mark">v0.39.0</p>
10250
+ <p class="axon-version-mark">v0.40.0</p>
10236
10251
  <button id="axon-start-btn" class="axon-start-button">${this.i18n.translate("startButton")}</button>
10237
10252
  ${this.renderSecondaryActions()}
10238
10253
  </div>
@@ -14954,8 +14969,8 @@ function Ps(r) {
14954
14969
  }
14955
14970
  });
14956
14971
  }
14957
- const Ms = 1500, Ds = 4700;
14958
- class Os {
14972
+ const Ms = 7600;
14973
+ class Ds {
14959
14974
  container;
14960
14975
  i18n;
14961
14976
  onClose;
@@ -14969,9 +14984,7 @@ class Os {
14969
14984
  }
14970
14985
  show(e, t) {
14971
14986
  this.stopTimer(), this.titleKey = e, this.descriptionKey = t, this.phase = "blackout", this.isOpen = !0, this.container.style.display = "flex", this.render(), this.timer = window.setTimeout(() => {
14972
- this.phase = "reveal", this.render(), this.timer = window.setTimeout(() => {
14973
- this.phase = "final", this.render();
14974
- }, Ds);
14987
+ this.phase = "final", this.render();
14975
14988
  }, Ms);
14976
14989
  }
14977
14990
  hide() {
@@ -14987,20 +15000,10 @@ class Os {
14987
15000
  !this.titleKey || !this.descriptionKey || (this.container.dataset.phase = this.phase, this.container.innerHTML = `<div class="axon-challenge-completion-scene">
14988
15001
  <div class="axon-challenge-completion-void"></div>
14989
15002
  <div class="axon-challenge-completion-stars" aria-hidden="true"></div>
14990
- <div class="axon-challenge-completion-echo axon-challenge-echo-one" aria-hidden="true"></div>
14991
- <div class="axon-challenge-completion-echo axon-challenge-echo-two" aria-hidden="true"></div>
14992
15003
  <div class="axon-challenge-completion-announcement">
14993
- <span class="axon-challenge-completion-kicker">${this.i18n.translate("objectivesChallenges")}</span>
15004
+ <span class="axon-challenge-completion-kicker">${this.i18n.translate("challengeSingular")}</span>
14994
15005
  <strong>${this.i18n.translate("objectiveCompleted")}</strong>
14995
15006
  </div>
14996
- <div class="axon-challenge-completion-relic" aria-hidden="true">
14997
- <span class="axon-challenge-completion-orbit axon-challenge-orbit-one"></span>
14998
- <span class="axon-challenge-completion-orbit axon-challenge-orbit-two"></span>
14999
- <span class="axon-challenge-completion-core"></span>
15000
- <span class="axon-challenge-completion-blade"></span>
15001
- <span class="axon-challenge-completion-guard"></span>
15002
- <span class="axon-challenge-completion-hilt"></span>
15003
- </div>
15004
15007
  <div class="axon-challenge-completion-card">
15005
15008
  <span class="axon-challenge-completion-card-kicker">${this.i18n.translate("objectiveCompleted")}</span>
15006
15009
  <h2>${this.i18n.translate(this.titleKey)}</h2>
@@ -15013,7 +15016,7 @@ class Os {
15013
15016
  this.timer !== null && window.clearTimeout(this.timer), this.timer = null;
15014
15017
  }
15015
15018
  }
15016
- class Ns {
15019
+ class Os {
15017
15020
  container;
15018
15021
  i18n;
15019
15022
  onRetry;
@@ -15055,7 +15058,7 @@ class Ns {
15055
15058
  }), this.container.querySelector("[data-challenge-exit]")?.addEventListener("click", this.onExit));
15056
15059
  }
15057
15060
  }
15058
- class Ls {
15061
+ class Ns {
15059
15062
  container;
15060
15063
  i18n;
15061
15064
  timeoutId = null;
@@ -15074,7 +15077,7 @@ class Ls {
15074
15077
  this.timeoutId !== null && window.clearTimeout(this.timeoutId), this.container.remove();
15075
15078
  }
15076
15079
  }
15077
- class _s {
15080
+ class Ls {
15078
15081
  container;
15079
15082
  i18n;
15080
15083
  roster;
@@ -15160,7 +15163,7 @@ class _s {
15160
15163
  this.animationFrame !== null && window.cancelAnimationFrame(this.animationFrame), this.animationFrame = null;
15161
15164
  }
15162
15165
  }
15163
- class js {
15166
+ class _s {
15164
15167
  constructor(e) {
15165
15168
  this.map = e, e.addEventListener("pointerdown", this.handlePointerDown), e.addEventListener("pointermove", this.handlePointerMove), e.addEventListener("pointerup", this.handlePointerUp), e.addEventListener("pointercancel", this.handlePointerUp);
15166
15169
  }
@@ -15186,7 +15189,7 @@ class js {
15186
15189
  };
15187
15190
  }
15188
15191
  const me = 22;
15189
- class Bs {
15192
+ class js {
15190
15193
  constructor(e, t, a, i) {
15191
15194
  this.container = e, this.i18n = t, this.memory = a, this.onNodeSelected = i;
15192
15195
  }
@@ -15253,7 +15256,7 @@ class Bs {
15253
15256
  ${i}`, a.addEventListener("click", () => this.onNodeSelected(e.id)), a;
15254
15257
  }
15255
15258
  }
15256
- class Hs {
15259
+ class Bs {
15257
15260
  container;
15258
15261
  i18n;
15259
15262
  memory;
@@ -15267,14 +15270,14 @@ class Hs {
15267
15270
  this.isOpen && e.key === "Escape" && (e.preventDefault(), this.hide(), this.onClose());
15268
15271
  };
15269
15272
  constructor(e, t, a, i) {
15270
- this.i18n = t, this.memory = a, this.onClose = i, this.container = document.createElement("section"), this.container.className = "axon-genetic-memory", this.container.setAttribute("aria-label", this.i18n.translate("geneticMemoryTitle")), this.mapRenderer = new Bs(this.container, this.i18n, this.memory, (o) => {
15273
+ this.i18n = t, this.memory = a, this.onClose = i, this.container = document.createElement("section"), this.container.className = "axon-genetic-memory", this.container.setAttribute("aria-label", this.i18n.translate("geneticMemoryTitle")), this.mapRenderer = new js(this.container, this.i18n, this.memory, (o) => {
15271
15274
  this.selectedNodeId = o, this.renderDetail();
15272
15275
  }), this.unsubscribe = a.subscribe(() => this.render()), e.appendChild(this.container), window.addEventListener("keydown", this.handleKeyDown), this.render();
15273
15276
  }
15274
15277
  render() {
15275
15278
  this.mapPan?.destroy(), this.container.innerHTML = this.renderShell(), this.container.querySelector("#axon-genetic-close")?.addEventListener("click", this.onClose), this.mapRenderer.render(this.memory.getNodes(), this.isOpen);
15276
15279
  const e = this.container.querySelector(".axon-genetic-map");
15277
- this.mapPan = e ? new js(e) : null, this.renderDetail();
15280
+ this.mapPan = e ? new _s(e) : null, this.renderDetail();
15278
15281
  }
15279
15282
  renderShell() {
15280
15283
  return `<div class="axon-genetic-memory-shell">
@@ -15366,11 +15369,11 @@ class Hs {
15366
15369
  return e === "powerup" ? this.i18n.translate("geneticTypePowerup") : e === "passive" ? this.i18n.translate("geneticTypePassive") : e === "enemy" ? this.i18n.translate("geneticTypeEnemy") : this.i18n.translate("geneticTypeCore");
15367
15370
  }
15368
15371
  }
15369
- function Us(r) {
15370
- r.coreRunSummaryOverlay = zs(r), r.geneticMemoryOverlay = Ks(r), r.codexToast = new Ls(r.container, r.i18n), r.challengeResultOverlay = Fs(r), r.challengeCompletionCinematic = Gs(r);
15372
+ function Hs(r) {
15373
+ r.coreRunSummaryOverlay = Us(r), r.geneticMemoryOverlay = zs(r), r.codexToast = new Ns(r.container, r.i18n), r.challengeResultOverlay = Ks(r), r.challengeCompletionCinematic = Fs(r);
15371
15374
  }
15372
- function zs(r) {
15373
- return new _s({
15375
+ function Us(r) {
15376
+ return new Ls({
15374
15377
  parent: r.container,
15375
15378
  i18n: r.i18n,
15376
15379
  roster: r.coreRoster,
@@ -15382,13 +15385,13 @@ function zs(r) {
15382
15385
  }
15383
15386
  });
15384
15387
  }
15385
- function Ks(r) {
15386
- return new Hs(r.container, r.i18n, r.geneticMemory, () => {
15388
+ function zs(r) {
15389
+ return new Bs(r.container, r.i18n, r.geneticMemory, () => {
15387
15390
  r.geneticMemoryOverlay.hide(), r.showStartMenu();
15388
15391
  });
15389
15392
  }
15390
- function Fs(r) {
15391
- return new Ns({
15393
+ function Ks(r) {
15394
+ return new Os({
15392
15395
  parent: r.container,
15393
15396
  i18n: r.i18n,
15394
15397
  onRetry: (e) => {
@@ -15399,8 +15402,8 @@ function Fs(r) {
15399
15402
  }
15400
15403
  });
15401
15404
  }
15402
- function Gs(r) {
15403
- return new Os({
15405
+ function Fs(r) {
15406
+ return new Ds({
15404
15407
  parent: r.container,
15405
15408
  i18n: r.i18n,
15406
15409
  onClose: () => {
@@ -15408,23 +15411,23 @@ function Gs(r) {
15408
15411
  }
15409
15412
  });
15410
15413
  }
15411
- function Vs(r, e) {
15414
+ function Gs(r, e) {
15412
15415
  ({
15413
- "completed:achievement": () => Ws(r, e.id),
15414
- "completed:challenge": () => qs(r, e.id),
15415
- "challenge-failed:challenge": () => $s(r, e.id),
15416
+ "completed:achievement": () => Vs(r, e.id),
15417
+ "completed:challenge": () => Ws(r, e.id),
15418
+ "challenge-failed:challenge": () => qs(r, e.id),
15416
15419
  "claimed:mission": () => r.refreshGeneratedMission(!0)
15417
15420
  })[`${e.type}:${e.kind}`]?.();
15418
15421
  }
15419
- function Ws(r, e) {
15422
+ function Vs(r, e) {
15420
15423
  const t = r.objectives.getSnapshot("achievement", e);
15421
15424
  r.objectiveToast.show(t.titleKey, t.descriptionKey);
15422
15425
  }
15423
- function qs(r, e) {
15426
+ function Ws(r, e) {
15424
15427
  const t = r.objectives.getSnapshot("challenge", e);
15425
15428
  r.challengeRunId = null, r.isRunning = !1, r.isPaused = !0, r.inputManager.forceRelease(), r.tutorialOverlay.hide(), r.clearTransientRunEntities(), r.challengeCompletionCinematic.show(t.titleKey, t.descriptionKey);
15426
15429
  }
15427
- function $s(r, e) {
15430
+ function qs(r, e) {
15428
15431
  const t = r.objectives.getSnapshot("challenge", e);
15429
15432
  if (r.isDeathSequenceActive) {
15430
15433
  r.pendingChallengeFailureId = e;
@@ -15432,20 +15435,20 @@ function $s(r, e) {
15432
15435
  }
15433
15436
  r.challengeResultOverlay.showFailed(e, t.titleKey);
15434
15437
  }
15435
- function Ys(r, e) {
15436
- Zs(r), Js(r, e), Xs(r), Qs(r), el(r), tl(r), rl(r), Us(r), ks(r), al(r), Wa(r), il(r), $a(r);
15438
+ function $s(r, e) {
15439
+ Ys(r), Zs(r, e), Js(r), Xs(r), Qs(r), el(r), tl(r), Hs(r), ks(r), rl(r), Wa(r), al(r), $a(r);
15437
15440
  }
15438
- function Zs(r) {
15441
+ function Ys(r) {
15439
15442
  const e = Ti();
15440
15443
  r.configManager = new N(), r.content = Se, r.corePreview = new Je(0, 0, r.configManager.getConfig().core), r.powerUpRegistry = new ai(r.configManager, Ii), r.geneticMemory = new W(Ri, new T(e)), r.coreRoster = new Zi(Di, r.geneticMemory, e), r.codex = new oo(po, e), r.missionGenerator = new vo(r.codex), r.bossCodex = new F(fo, e), r.objectives = new jo(Bo, e, (t) => r.applyObjectiveReward(t)), r.areaDirector = new Ho(Se), r.bossEncounter = new Ko(ht());
15441
15444
  }
15442
- function Js(r, e) {
15445
+ function Zs(r, e) {
15443
15446
  r.container = e.root, r.container.classList.add("axon-game-root"), r.i18n = new Ya(e.language), r.themeManager = new pr(e.theme, r.container), r.platform = e.platform || new Za(), r.canvas = document.createElement("canvas"), r.canvas.className = "axon-canvas", r.container.appendChild(r.canvas), r.resizeCanvas(), window.addEventListener("resize", () => r.resizeCanvas());
15444
15447
  }
15445
- function Xs(r) {
15448
+ function Js(r) {
15446
15449
  r.eventBus = new At(), r.entityFactory = new ti(r.content), r.core = new Je(r.canvas.width / 2, r.canvas.height / 2, r.configManager.getConfig().core), r.inputManager = new Mt(r.canvas, r.configManager.getConfig()), r.physicsEngine = new ir(r.eventBus, r.i18n, r.entityFactory, r.configManager), r.waveDirector = new dr(r.entityFactory, new ur(r.content, r.geneticMemory), new ri(500)), r.waveDirector.setArea(r.areaDirector.getArea()), r.renderer = new ga(r.canvas, r.themeManager, r.configManager), r.juice = new ya();
15447
15450
  }
15448
- function Qs(r) {
15451
+ function Xs(r) {
15449
15452
  r.settingsModal = new Ia({
15450
15453
  parent: r.container,
15451
15454
  i18n: r.i18n,
@@ -15462,17 +15465,17 @@ function Qs(r) {
15462
15465
  }
15463
15466
  });
15464
15467
  }
15465
- function el(r) {
15468
+ function Qs(r) {
15466
15469
  r.coreInteraction = new It(r.inputManager, r.core), r.interactiveTutorial = new wa(r.entityFactory, new Ie(), null, at()), r.tutorialOverlay = new ka(r.container, r.i18n, r.interactiveTutorial), r.hud = new Pa(r.container, () => {
15467
15470
  r.isPaused = !0, r.settingsModal.show();
15468
15471
  }), r.hud.show();
15469
15472
  }
15470
- function tl(r) {
15473
+ function el(r) {
15471
15474
  r.progressBar = new Ma((e) => {
15472
15475
  r.waveDirector.wave = e, r.triggerLevelUp(e);
15473
15476
  }), r.performanceAudit = new Da(r.container, r.debugPerformanceEnabled, r.i18n);
15474
15477
  }
15475
- function rl(r) {
15478
+ function tl(r) {
15476
15479
  r.coreRosterOverlay = new Fa({
15477
15480
  parent: r.container,
15478
15481
  i18n: r.i18n,
@@ -15493,7 +15496,7 @@ function rl(r) {
15493
15496
  environment: Re
15494
15497
  });
15495
15498
  }
15496
- function al(r) {
15499
+ function rl(r) {
15497
15500
  r.challengesOverlay = new je({
15498
15501
  parent: r.container,
15499
15502
  i18n: r.i18n,
@@ -15519,7 +15522,7 @@ function al(r) {
15519
15522
  getSelectedCoreId: () => r.coreRoster.getSelectedCoreId()
15520
15523
  });
15521
15524
  }
15522
- function il(r) {
15525
+ function al(r) {
15523
15526
  r.unsubscribeCodex = r.codex.subscribe((e) => {
15524
15527
  r.refreshGeneratedMission(), r.startMenu.renderContent(), e.length > 0 && r.codexToast.show();
15525
15528
  }), r.unsubscribeBossCodex = r.bossCodex.subscribe(() => {
@@ -15527,14 +15530,35 @@ function il(r) {
15527
15530
  }), r.unsubscribeCoreRoster = r.coreRoster.subscribe(() => {
15528
15531
  r.syncSelectedCorePreview(), r.startMenu.renderContent();
15529
15532
  }), r.unsubscribeObjectives = r.objectives.subscribe((e) => {
15530
- ol(r), Vs(r, e);
15533
+ il(r), Gs(r, e);
15531
15534
  });
15532
15535
  }
15533
- function ol(r) {
15536
+ function il(r) {
15534
15537
  r.startMenu.renderContent(), r.missionsDrawer.render(), r.challengesOverlay.renderContent(), r.achievementsOverlay.renderContent();
15535
15538
  }
15536
15539
  const $e = 0.25, Q = 1.8;
15537
- class nl {
15540
+ function ol() {
15541
+ if (typeof window > "u" || !sl(window.location.hostname)) return null;
15542
+ const r = new URLSearchParams(window.location.search);
15543
+ return nl(r.get("debugChallengeEnd") ?? r.get("debugChallenge"));
15544
+ }
15545
+ function nl(r) {
15546
+ return r === "complete" || r === "completed" || r === "win" ? "complete" : r === "lost" || r === "failed" || r === "fail" ? "lost" : null;
15547
+ }
15548
+ function sl(r) {
15549
+ return r === "localhost" || r === "127.0.0.1";
15550
+ }
15551
+ function ll(r) {
15552
+ const e = r.debugChallengeResult, t = r.challengeRunId;
15553
+ if (!(!e || !t)) {
15554
+ if (e === "complete") {
15555
+ r.objectives.debugComplete("challenge", t);
15556
+ return;
15557
+ }
15558
+ r.isRunning = !1, r.isPaused = !0, r.inputManager.forceRelease(), r.tutorialOverlay.hide(), r.objectives.cancelActiveChallenge(), r.challengeRunId = null, r.clearTransientRunEntities();
15559
+ }
15560
+ }
15561
+ class cl {
15538
15562
  container;
15539
15563
  canvas;
15540
15564
  i18n;
@@ -15607,6 +15631,7 @@ class nl {
15607
15631
  debugPerformanceEnabled = typeof window < "u" && new URLSearchParams(window.location.search).has("debug");
15608
15632
  debugBossEnabled = typeof window < "u" && (window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1") && new URLSearchParams(window.location.search).has("debugBoss");
15609
15633
  debugAchievementEnabled = typeof window < "u" && (window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1") && new URLSearchParams(window.location.search).has("debugAchievement");
15634
+ debugChallengeResult = ol();
15610
15635
  rerollsRemaining = 1;
15611
15636
  score = { value: 0 };
15612
15637
  combo = { value: 0 };
@@ -15676,25 +15701,25 @@ class nl {
15676
15701
  clearTransientRunEntities() {
15677
15702
  }
15678
15703
  constructor(e) {
15679
- Ys(this, e);
15704
+ $s(this, e);
15680
15705
  }
15681
15706
  }
15682
- function sl(r, e) {
15707
+ function dl(r, e) {
15683
15708
  r.i18n.setLanguage(e), r.onLanguageChanged(e);
15684
15709
  }
15685
- function ll(r, e) {
15710
+ function ul(r, e) {
15686
15711
  r.themeManager.setTheme(e);
15687
15712
  }
15688
- function cl(r) {
15713
+ function hl(r) {
15689
15714
  return r.i18n.getLanguage();
15690
15715
  }
15691
- function dl(r) {
15716
+ function pl(r) {
15692
15717
  return r.themeManager.getTheme();
15693
15718
  }
15694
- function ul(r, e) {
15719
+ function ml(r, e) {
15695
15720
  r.startMenu.renderContent(), r.tutorialOverlay.updateLanguage(), r.coreRosterOverlay.updateLanguage(), r.geneticMemoryOverlay.updateLanguage(), r.coreRunSummaryOverlay.updateLanguage(), r.codexOverlay.updateLanguage(), r.codexToast.updateLanguage(), r.missionsDrawer.updateLanguage(), r.challengesOverlay.updateLanguage(), r.achievementsOverlay.updateLanguage(), r.objectiveToast.updateLanguage(), r.challengeResultOverlay.updateLanguage(), r.challengeCompletionCinematic.updateLanguage();
15696
15721
  }
15697
- function hl(r) {
15722
+ function gl(r) {
15698
15723
  r.ambientEnemies = [];
15699
15724
  for (let e = 0; e < 16; e++) {
15700
15725
  const t = r.content.enemies.values().filter((l) => l.ambientSpawn && (!l.requiredUnlockId || r.geneticMemory.isUnlocked(l.requiredUnlockId))).map((l) => l.id);
@@ -15709,15 +15734,15 @@ function hl(r) {
15709
15734
  r.ambientEnemies.push(s);
15710
15735
  }
15711
15736
  }
15712
- function pl(r) {
15737
+ function yl(r) {
15713
15738
  const e = r.coreRoster.getSelectedCore();
15714
15739
  r.core.setMechanic(e.mechanic), r.core.setSkinId(r.coreRoster.getSelectedSkinId(e.id)), r.core.setElevationVisualLevel(r.coreRoster.getSelectedElevationVisualLevel(e.id)), r.coreInteraction.setMechanic(e.mechanic);
15715
15740
  }
15716
- function ml(r) {
15741
+ function El(r) {
15717
15742
  const e = r.container.clientWidth || window.innerWidth, t = r.container.clientHeight || window.innerHeight, a = 1100, i = 750, o = e / Math.max(1, t);
15718
15743
  o < 1 ? (r.canvas.width = a, r.canvas.height = Math.round(a / o)) : e < 1e3 || t < i ? (r.canvas.height = i, r.canvas.width = Math.round(i * o)) : (r.canvas.width = e, r.canvas.height = t), r.core && (r.core.position = { x: r.canvas.width / 2, y: r.canvas.height / 2 });
15719
15744
  }
15720
- class gl {
15745
+ class vl {
15721
15746
  origin;
15722
15747
  position;
15723
15748
  previousPosition;
@@ -15752,7 +15777,7 @@ class gl {
15752
15777
  return this.origin;
15753
15778
  }
15754
15779
  }
15755
- const yl = {
15780
+ const fl = {
15756
15781
  "toxic-radius": (r) => {
15757
15782
  const e = r.getConfig().toxicPool;
15758
15783
  r.updateConfig({
@@ -15786,11 +15811,11 @@ const yl = {
15786
15811
  r.addCoreRing(1);
15787
15812
  }
15788
15813
  };
15789
- function El(r, e) {
15814
+ function xl(r, e) {
15790
15815
  for (const t of r.getActivePassiveEffectIds())
15791
- yl[t](e);
15816
+ fl[t](e);
15792
15817
  }
15793
- const vl = {
15818
+ const Sl = {
15794
15819
  "core-life-ring": (r) => r.addCoreRing(1),
15795
15820
  "core-protection": (r, e) => {
15796
15821
  const t = e.effectValue ?? 120, a = r.getConfig().core;
@@ -15831,21 +15856,21 @@ const vl = {
15831
15856
  "core-skin": () => {
15832
15857
  }
15833
15858
  };
15834
- function fl(r, e) {
15859
+ function bl(r, e) {
15835
15860
  for (const t of r.getActiveWisdomEffects())
15836
- t.effectId && vl[t.effectId](e, t);
15861
+ t.effectId && Sl[t.effectId](e, t);
15837
15862
  }
15838
- function xl(r) {
15839
- Sl(r), bl(r);
15840
- const e = Cl(r);
15841
- wl(r, e);
15863
+ function Cl(r) {
15864
+ Al(r), Il(r);
15865
+ const e = Rl(r);
15866
+ Ml(r, e);
15842
15867
  }
15843
- function Sl(r) {
15868
+ function Al(r) {
15844
15869
  r.eventBus.on("onCoreDamaged", () => {
15845
15870
  r.settingsModal.isHapticsEnabled() && r.platform.haptics.notification("error");
15846
15871
  });
15847
15872
  }
15848
- function bl(r) {
15873
+ function Il(r) {
15849
15874
  r.eventBus.on("onGameOver", () => {
15850
15875
  if (!r.isDeathSequenceActive) {
15851
15876
  if (r.isChallengeRun()) {
@@ -15859,27 +15884,27 @@ function bl(r) {
15859
15884
  function Ye(r) {
15860
15885
  r.isRunning = !1, r.isPaused = !1, r.isDeathSequenceActive = !0, r.deathSequenceElapsed = 0;
15861
15886
  }
15862
- function Cl(r) {
15887
+ function Rl(r) {
15863
15888
  return {
15864
- pointerDown: (e = !1) => Al(r, e),
15865
- pointerUp: () => Tl(r)
15889
+ pointerDown: (e = !1) => Tl(r, e),
15890
+ pointerUp: () => Pl(r)
15866
15891
  };
15867
15892
  }
15868
- function Al(r, e) {
15893
+ function Tl(r, e) {
15869
15894
  if (!r.isRunning || r.isPaused || r.isLevelUpActive) return;
15870
15895
  const t = r.coreInteraction.pointerDown(r.enemies, e);
15871
- Il(r, t), Rl(r, t, e), t && r.settingsModal.isHapticsEnabled() && r.platform.haptics.impact("light");
15896
+ wl(r, t), kl(r, t, e), t && r.settingsModal.isHapticsEnabled() && r.platform.haptics.impact("light");
15872
15897
  }
15873
- function Il(r, e) {
15898
+ function wl(r, e) {
15874
15899
  !e?.enemy || e.mechanic !== "launcher" && e.mechanic !== "smasher" || (r.codex.recordControlled(e.enemy.type), r.coreRoster.recordSkillEvent("controlled"), r.objectives.record({
15875
15900
  type: "enemy-controlled",
15876
15901
  enemyId: e.enemy.type,
15877
15902
  coreId: r.coreRoster.getSelectedCoreId()
15878
15903
  }));
15879
15904
  }
15880
- function Rl(r, e, t) {
15905
+ function kl(r, e, t) {
15881
15906
  e?.mechanic !== "repellent" || !e.waveOrigin || r.repelProjectiles.push(
15882
- new gl({
15907
+ new vl({
15883
15908
  origin: r.core.position,
15884
15909
  target: e.waveOrigin,
15885
15910
  color: r.core.getColorHex(),
@@ -15889,12 +15914,12 @@ function Rl(r, e, t) {
15889
15914
  })
15890
15915
  );
15891
15916
  }
15892
- function Tl(r) {
15917
+ function Pl(r) {
15893
15918
  if (!r.isRunning || r.isPaused || r.isLevelUpActive) return;
15894
15919
  const e = r.coreInteraction.getMechanic(), t = r.coreInteraction.pointerUp();
15895
15920
  e === "smasher" && t && (r.pendingSmasherRelease = t), t && r.settingsModal.isHapticsEnabled() && r.platform.haptics.impact("medium");
15896
15921
  }
15897
- function wl(r, e) {
15922
+ function Ml(r, e) {
15898
15923
  r.canvas.addEventListener("mousedown", (t) => {
15899
15924
  t.button === 0 && e.pointerDown(!1);
15900
15925
  }), r.canvas.addEventListener("mouseup", (t) => {
@@ -15903,40 +15928,40 @@ function wl(r, e) {
15903
15928
  passive: !0
15904
15929
  }), r.canvas.addEventListener("touchend", e.pointerUp, { passive: !0 }), r.canvas.addEventListener("touchcancel", e.pointerUp, { passive: !0 });
15905
15930
  }
15906
- function kl(r) {
15931
+ function Dl(r) {
15907
15932
  r.missionsDrawer.setAvailable(!1), r.configManager.resetToDefault();
15908
15933
  const e = r.coreRoster.getSelectedCore(), t = r.challengeRunId ? r.objectives.getActiveChallenge() : void 0;
15909
- Pl(r, e, t), Dl(r, e.id, t);
15934
+ Ol(r, e, t), Ll(r, e.id, t);
15910
15935
  }
15911
- function Pl(r, e, t) {
15912
- r.core.setMechanic(e.mechanic), r.core.setSkinId(r.coreRoster.getSelectedSkinId(e.id)), r.core.setElevationVisualLevel(r.coreRoster.getSelectedElevationVisualLevel(e.id)), r.coreInteraction.setMechanic(e.mechanic), El(r.geneticMemory, r.configManager), r.coreRoster.startRun(), fl(r.coreRoster, r.configManager), r.core.setConfig(r.configManager.getConfig().core), r.objectives.record({ type: "run-started", coreId: e.id }), r.score.value = 0, r.combo.value = 0, r.pendingChallengeFailureId = null, r.clearTransientRunState(), r.isDeathSequenceActive = !1, r.deathSequenceElapsed = 0, r.enemies = [], r.ambientEnemies = [], r.experienceOrbs = [], r.ecosomaOrbs = [], r.bossCatalyst = null, r.resetBossExposureBurst(), r.orbitingOrbs = [], r.isLevelUpActive = !1, r.pendingLevelUps = [], r.rerollsRemaining = t?.preset?.disableRerolls ? 0 : r.getRerollLimit(), r.waveDirector.setChallengeSpawnProfile(t?.preset?.spawnProfile ?? null), Ml(r, t);
15936
+ function Ol(r, e, t) {
15937
+ r.core.setMechanic(e.mechanic), r.core.setSkinId(r.coreRoster.getSelectedSkinId(e.id)), r.core.setElevationVisualLevel(r.coreRoster.getSelectedElevationVisualLevel(e.id)), r.coreInteraction.setMechanic(e.mechanic), xl(r.geneticMemory, r.configManager), r.coreRoster.startRun(), bl(r.coreRoster, r.configManager), r.core.setConfig(r.configManager.getConfig().core), r.objectives.record({ type: "run-started", coreId: e.id }), r.score.value = 0, r.combo.value = 0, r.pendingChallengeFailureId = null, r.clearTransientRunState(), r.isDeathSequenceActive = !1, r.deathSequenceElapsed = 0, r.enemies = [], r.ambientEnemies = [], r.experienceOrbs = [], r.ecosomaOrbs = [], r.bossCatalyst = null, r.resetBossExposureBurst(), r.orbitingOrbs = [], r.isLevelUpActive = !1, r.pendingLevelUps = [], r.rerollsRemaining = t?.preset?.disableRerolls ? 0 : r.getRerollLimit(), r.waveDirector.setChallengeSpawnProfile(t?.preset?.spawnProfile ?? null), Nl(r, t);
15913
15938
  }
15914
- function Ml(r, e) {
15939
+ function Nl(r, e) {
15915
15940
  r.core.reset(r.canvas.width / 2, r.canvas.height / 2), r.areaDirector.reset(e?.preset?.areaId ?? "area-caldo"), r.areaDirector.setBossesDisabled(e?.preset?.disableBosses === !0), r.waveDirector.setArea(r.areaDirector.getArea()), r.enemies.push(...r.waveDirector.spawnInitialChallengeEnemies(r.canvas.width, r.canvas.height, r.core.position)), r.recordEnemyObservations(r.enemies), r.debugBossEnabled && r.areaDirector.recordKill(r.areaDirector.getKillThreshold()), r.bossEncounter.reset(), r.areaTransitionElapsed = 0, r.areaIntroElapsed = r.debugBossEnabled ? Q : 0, r.waveDirector.reset(), r.inputManager.reset(), r.hud.show(), r.hud.update(0), r.progressBar.reset(), r.isPaused = !1, r.isRunning = !0;
15916
15941
  }
15917
- function Dl(r, e, t) {
15918
- const a = t?.preset?.tutorialId, i = Ol(r, e, a, !!t);
15919
- r.interactiveTutorial.setDefinition(i), Nl(r, a !== void 0) ? (r.interactiveTutorial.start(r.canvas.width, r.canvas.height, r.enemies), r.tutorialOverlay.show()) : (r.interactiveTutorial.isActive = !1, r.tutorialOverlay.hide());
15942
+ function Ll(r, e, t) {
15943
+ const a = t?.preset?.tutorialId, i = _l(r, e, a, !!t);
15944
+ r.interactiveTutorial.setDefinition(i), jl(r, a !== void 0) ? (r.interactiveTutorial.start(r.canvas.width, r.canvas.height, r.enemies), r.tutorialOverlay.show()) : (r.interactiveTutorial.isActive = !1, r.tutorialOverlay.hide());
15920
15945
  }
15921
- function Ol(r, e, t, a) {
15946
+ function _l(r, e, t, a) {
15922
15947
  return a ? t ? r.content.getTutorial(t) ?? null : null : r.content.getTutorialForCore(e) ?? null;
15923
15948
  }
15924
- function Nl(r, e) {
15949
+ function jl(r, e) {
15925
15950
  return !r.interactiveTutorial.hasDefinition() || r.debugBossEnabled ? !1 : e || r.interactiveTutorial.isTutorialEnabled();
15926
15951
  }
15927
- function Ll(r) {
15952
+ function Bl(r) {
15928
15953
  r.clearTransientRunEntities(), r.juice.reset();
15929
15954
  }
15930
- function _l(r, e) {
15955
+ function Hl(r, e) {
15931
15956
  for (let t = r.repelProjectiles.length - 1; t >= 0; t--) {
15932
15957
  const a = r.repelProjectiles[t];
15933
- (!a || jl(r, a, e, t)) && r.repelProjectiles.splice(t, 1);
15958
+ (!a || Ul(r, a, e, t)) && r.repelProjectiles.splice(t, 1);
15934
15959
  }
15935
15960
  }
15936
- function jl(r, e, t, a) {
15937
- return e.update(t) === !1 ? !1 : (r.isRepelProjectileBlocked(e) || (Math.hypot(e.target.x - r.core.position.x, e.target.y - r.core.position.y) <= r.core.getHitboxRadius() ? Bl(r) : Hl(r, e, a)), !0);
15961
+ function Ul(r, e, t, a) {
15962
+ return e.update(t) === !1 ? !1 : (r.isRepelProjectileBlocked(e) || (Math.hypot(e.target.x - r.core.position.x, e.target.y - r.core.position.y) <= r.core.getHitboxRadius() ? zl(r) : Kl(r, e, a)), !0);
15938
15963
  }
15939
- function Bl(r) {
15964
+ function zl(r) {
15940
15965
  Xe.damageCore({
15941
15966
  core: r.core,
15942
15967
  enemies: r.enemies,
@@ -15953,7 +15978,7 @@ function Bl(r) {
15953
15978
  allowProtection: !1
15954
15979
  });
15955
15980
  }
15956
- function Hl(r, e, t) {
15981
+ function Kl(r, e, t) {
15957
15982
  const a = r.coreInteraction.resolveRepelWave(r.enemies, e.target, e.isTouch);
15958
15983
  for (const i of a)
15959
15984
  r.codex.recordControlled(i.type), r.objectives.record({
@@ -15973,12 +15998,12 @@ function Hl(r, e, t) {
15973
15998
  isSpectral: e.isSpectral
15974
15999
  });
15975
16000
  }
15976
- function Ul(r, e) {
16001
+ function Fl(r, e) {
15977
16002
  const t = e.position.x - e.previousPosition.x, a = e.position.y - e.previousPosition.y, i = t * t + a * a;
15978
16003
  if (i <= 1e-4) return !1;
15979
16004
  const o = Math.atan2(-a, -t);
15980
16005
  return r.enemies.some(
15981
- (n) => zl({
16006
+ (n) => Gl({
15982
16007
  enemy: n,
15983
16008
  projectile: e,
15984
16009
  movementX: t,
@@ -15988,16 +16013,16 @@ function Ul(r, e) {
15988
16013
  })
15989
16014
  );
15990
16015
  }
15991
- function zl(r) {
16016
+ function Gl(r) {
15992
16017
  const { enemy: e, projectile: t, movementX: a, movementY: i, segmentLengthSquared: o, approachAngle: n } = r;
15993
16018
  if (!e.active || e.isDying || e.isGrabbed || e.isThrown || !e.isFrontCoverageHit(n)) return !1;
15994
16019
  const s = e.position.x - t.previousPosition.x, l = e.position.y - t.previousPosition.y, c = Math.max(0, Math.min(1, (s * a + l * i) / o)), d = t.previousPosition.x + a * c, u = t.previousPosition.y + i * c, h = e.position.x - d, m = e.position.y - u, g = e.getFrontCoverageRadius() + t.radius;
15995
16020
  return h * h + m * m <= g * g;
15996
16021
  }
15997
- function Kl(r) {
16022
+ function Vl(r) {
15998
16023
  r.enemies = [], r.pools = [], r.vortices = [], r.shockwaves = [], r.repelProjectiles = [], r.pendingSmasherRelease = null, r.smasherBossImpactCooldown = 0, r.particles = [], r.floatingTexts = [], r.experienceOrbs = [], r.ecosomaOrbs = [], r.orbitingOrbs = [], r.pendingLevelUps = [], r.inputManager?.forceRelease();
15999
16024
  }
16000
- function Fl(r, e) {
16025
+ function Wl(r, e) {
16001
16026
  if (r.deathSequenceElapsed = Math.min(ye, r.deathSequenceElapsed + e), r.juice.update(e, r.floatingTexts, r.particles), !(r.deathSequenceElapsed < ye)) {
16002
16027
  if (r.isDeathSequenceActive = !1, r.clearTransientRunState(), r.initAmbientArena(), r.pendingChallengeFailureId) {
16003
16028
  const t = r.pendingChallengeFailureId;
@@ -16013,27 +16038,27 @@ function Fl(r, e) {
16013
16038
  r.showStartMenu();
16014
16039
  }
16015
16040
  }
16016
- function Gl(r, e) {
16017
- if (r.performanceAudit.beginFrame(), Vl(r), $l(r, e) || (r.core.update(e), r.smasherBossImpactCooldown = Math.max(0, r.smasherBossImpactCooldown - e), r.coreInteraction.updateHover(r.inputManager.pointerPosition, r.isRunning && r.inputManager.hasPointerPosition, r.inputManager.lastPointerWasTouch), Yl(r, e), Zl(r, e)) || (r.areaIntroElapsed = Math.min(Q, r.areaIntroElapsed + Math.max(0, e)), Xl(r, e))) return;
16018
- Ql(r, e), ec(r, e);
16019
- const t = ic(r, e);
16020
- nc(r, e), r.spawnExperienceDrops(), r.isLevelUpActive || (r.updateExperienceOrbs(e), r.updateEcosomaOrbs(e)), r.progressBar.update(e), r.hud.update(r.combo.value, ql(r)), r.juice.update(e, r.floatingTexts, r.particles), r.enemies = r.enemies.filter((a) => a.active), G(r, r.enemies.length, t);
16041
+ function ql(r, e) {
16042
+ if (r.performanceAudit.beginFrame(), $l(r), Jl(r, e) || (r.core.update(e), r.smasherBossImpactCooldown = Math.max(0, r.smasherBossImpactCooldown - e), r.coreInteraction.updateHover(r.inputManager.pointerPosition, r.isRunning && r.inputManager.hasPointerPosition, r.inputManager.lastPointerWasTouch), Xl(r, e), Ql(r, e)) || (r.areaIntroElapsed = Math.min(Q, r.areaIntroElapsed + Math.max(0, e)), tc(r, e))) return;
16043
+ rc(r, e), ac(r, e);
16044
+ const t = sc(r, e);
16045
+ cc(r, e), r.spawnExperienceDrops(), r.isLevelUpActive || (r.updateExperienceOrbs(e), r.updateEcosomaOrbs(e)), r.progressBar.update(e), r.hud.update(r.combo.value, Zl(r)), r.juice.update(e, r.floatingTexts, r.particles), r.enemies = r.enemies.filter((a) => a.active), G(r, r.enemies.length, t);
16021
16046
  }
16022
- function Vl(r) {
16023
- const e = r.isPaused ? "PAUSED" : Wl(r);
16047
+ function $l(r) {
16048
+ const e = r.isPaused ? "PAUSED" : Yl(r);
16024
16049
  r.performanceAudit.setState(e), r.performanceAudit.setEcosomaDropChance(r.getEcosomaDropPolicy().getChance(r.progressBar.getLevel()));
16025
16050
  }
16026
- function Wl(r) {
16051
+ function Yl(r) {
16027
16052
  return r.isRunning ? "GAME" : "MENU";
16028
16053
  }
16029
- function ql(r) {
16054
+ function Zl(r) {
16030
16055
  const e = r.objectives.getActiveChallenge();
16031
16056
  return !e || e.condition.event !== "enemy-defeated" ? null : e.condition.target - e.progress;
16032
16057
  }
16033
- function $l(r, e) {
16058
+ function Jl(r, e) {
16034
16059
  return r.areaDirector.getPhase() !== "boss" || !r.bossEncounter.isIntroPaused() ? !1 : (r.bossEncounter.update(e, r.core.position), G(r, 0), !0);
16035
16060
  }
16036
- function Yl(r, e) {
16061
+ function Xl(r, e) {
16037
16062
  r.isRunning && !r.isPaused && r.updateRepelProjectiles(e);
16038
16063
  }
16039
16064
  function G(r, e, t = 0) {
@@ -16046,22 +16071,22 @@ function G(r, e, t = 0) {
16046
16071
  floatingTexts: r.floatingTexts.length
16047
16072
  });
16048
16073
  }
16049
- function Zl(r, e) {
16074
+ function Ql(r, e) {
16050
16075
  if (r.isDeathSequenceActive)
16051
16076
  return r.updateDeathSequence(e), G(r, 0), !0;
16052
16077
  if (r.isRunning && !r.isPaused) return !1;
16053
16078
  for (const t of r.ambientEnemies)
16054
- t.update(e), Jl(r, t);
16079
+ t.update(e), ec(r, t);
16055
16080
  return r.recordEnemyObservations(r.ambientEnemies), G(r, r.ambientEnemies.length), !0;
16056
16081
  }
16057
- function Jl(r, e) {
16082
+ function ec(r, e) {
16058
16083
  e.position.x < -40 && (e.position.x = r.canvas.width + 40), e.position.x > r.canvas.width + 40 && (e.position.x = -40), e.position.y < -40 && (e.position.y = r.canvas.height + 40), e.position.y > r.canvas.height + 40 && (e.position.y = -40);
16059
16084
  }
16060
- function Xl(r, e) {
16085
+ function tc(r, e) {
16061
16086
  const t = r.areaDirector.getPhase();
16062
16087
  return t !== "reward" && t !== "transition" ? !1 : (t === "reward" ? r.updateBossReward(e) : r.updateAreaTransition(e), r.progressBar.update(e), r.juice.update(e, r.floatingTexts, r.particles), G(r, 0), !0);
16063
16088
  }
16064
- function Ql(r, e) {
16089
+ function rc(r, e) {
16065
16090
  const t = r.areaDirector.getPhase();
16066
16091
  if (r.interactiveTutorial.isActive) {
16067
16092
  r.interactiveTutorial.update({
@@ -16082,20 +16107,20 @@ function Ql(r, e) {
16082
16107
  const a = r.waveDirector.update({ dt: e, activeEnemies: r.enemies, width: r.canvas.width, height: r.canvas.height, corePos: r.core.position });
16083
16108
  a && (r.enemies.push(a), r.recordEnemyObservation(a)), r.recordEnemyObservations(r.enemies);
16084
16109
  }
16085
- function ec(r, e) {
16110
+ function ac(r, e) {
16086
16111
  if (!r.isLevelUpActive) return;
16087
16112
  r.inputManager.tryGrabOrb(r.orbitingOrbs);
16088
16113
  const t = r.inputManager.grabbedOrb;
16089
- !r.inputManager.isPointerDown && t && (t.isGrabbed = !1, r.inputManager.grabbedOrb = null), tc(r);
16114
+ !r.inputManager.isPointerDown && t && (t.isGrabbed = !1, r.inputManager.grabbedOrb = null), ic(r);
16090
16115
  for (const a of r.orbitingOrbs)
16091
- a.isHovered = Math.hypot(r.inputManager.pointerPosition.x - a.position.x, r.inputManager.pointerPosition.y - a.position.y) <= a.radius * 1.5, a === t && r.inputManager.isPointerDown ? rc(r, a) : a.update(e, r.core.position);
16116
+ a.isHovered = Math.hypot(r.inputManager.pointerPosition.x - a.position.x, r.inputManager.pointerPosition.y - a.position.y) <= a.radius * 1.5, a === t && r.inputManager.isPointerDown ? oc(r, a) : a.update(e, r.core.position);
16092
16117
  }
16093
- function tc(r) {
16118
+ function ic(r) {
16094
16119
  if (!r.inputManager.isPointerDown || r.inputManager.grabbedOrb || r.rerollsRemaining <= 0) return;
16095
16120
  const e = r.canvas.width / 2, t = r.canvas.height / 2 + 300;
16096
16121
  Math.hypot(r.inputManager.pointerPosition.x - e, r.inputManager.pointerPosition.y - t) <= 80 && (r.triggerReroll(), r.inputManager.consumePointerDown());
16097
16122
  }
16098
- function rc(r, e) {
16123
+ function oc(r, e) {
16099
16124
  e.position = { ...r.inputManager.pointerPosition };
16100
16125
  const t = r.core.position.x - e.position.x, a = r.core.position.y - e.position.y;
16101
16126
  if (!(Math.hypot(t, a) > r.core.radius + e.radius)) {
@@ -16110,11 +16135,11 @@ function rc(r, e) {
16110
16135
  maxLifetime: 1.6,
16111
16136
  size: 26
16112
16137
  });
16113
- for (let i = 0; i < 45; i++) r.particles.push(ac(r, e.definition.color));
16138
+ for (let i = 0; i < 45; i++) r.particles.push(nc(r, e.definition.color));
16114
16139
  r.inputManager.forceRelease(), r.orbitingOrbs = [], r.presentNextLevelUp();
16115
16140
  }
16116
16141
  }
16117
- function ac(r, e) {
16142
+ function nc(r, e) {
16118
16143
  const t = Math.random() * Math.PI * 2, a = 200 + Math.random() * 400;
16119
16144
  return {
16120
16145
  id: Math.random().toString(),
@@ -16127,7 +16152,7 @@ function ac(r, e) {
16127
16152
  maxLifetime: 0.7
16128
16153
  };
16129
16154
  }
16130
- function ic(r, e) {
16155
+ function sc(r, e) {
16131
16156
  if (r.isLevelUpActive) return 0;
16132
16157
  const t = r.debugPerformanceEnabled ? performance.now() : 0;
16133
16158
  return r.physicsEngine.update({
@@ -16149,13 +16174,13 @@ function ic(r, e) {
16149
16174
  smasherRelease: r.pendingSmasherRelease,
16150
16175
  onSmasherArmBreak: () => r.inputManager.forceRelease(),
16151
16176
  preserveSmasherCapturedEnemy: r.objectives.getActiveChallenge()?.preset?.preserveSmasherCapturedEnemy === !0,
16152
- onChallengeFailure: () => oc(r)
16177
+ onChallengeFailure: () => lc(r)
16153
16178
  }), r.pendingSmasherRelease = null, r.debugPerformanceEnabled ? performance.now() - t : 0;
16154
16179
  }
16155
- function oc(r) {
16180
+ function lc(r) {
16156
16181
  r.isChallengeRun() && (r.isRunning = !1, r.isPaused = !1, r.isDeathSequenceActive = !0, r.deathSequenceElapsed = 0, r.inputManager.forceRelease(), r.tutorialOverlay.hide(), r.objectives.cancelActiveChallenge(), r.challengeRunId = null);
16157
16182
  }
16158
- function nc(r, e) {
16183
+ function cc(r, e) {
16159
16184
  if (r.areaDirector.getPhase() !== "boss") return;
16160
16185
  const t = r.bossEncounter.update(e, r.core.position);
16161
16186
  if (t) {
@@ -16164,7 +16189,7 @@ function nc(r, e) {
16164
16189
  }
16165
16190
  r.updateBossMinionReentryPaths(), r.updateBossExposureBurst(e), r.processSmasherBossImpact(), r.processBossImpacts(), r.finishBossIfDefeated();
16166
16191
  }
16167
- function sc(r) {
16192
+ function dc(r) {
16168
16193
  r.coreRoster.recordSkillEvent("kill"), r.combo.value >= 2 && r.coreRoster.recordSkillEvent("combo", r.combo.value), r.combo.value >= 2 && r.objectives.record({
16169
16194
  type: "combo",
16170
16195
  amount: r.combo.value,
@@ -16181,7 +16206,7 @@ function sc(r) {
16181
16206
  size: 22
16182
16207
  }));
16183
16208
  }
16184
- function lc(r) {
16209
+ function uc(r) {
16185
16210
  if (r.bossEncounter.getPhase() !== "inactive") return;
16186
16211
  const e = r.areaDirector.getArea().bossId;
16187
16212
  if (!e) return;
@@ -16197,20 +16222,20 @@ function lc(r) {
16197
16222
  targetCandidates: r.waveDirector.getBossTentacleTargets()
16198
16223
  }), r.bossCodex.recordEncounter(t.id), r.bossCodex.recordPhase(t.id, 1), r.juice.triggerFlash(0.85), r.juice.triggerScreenShake({ x: 0, y: 1 }, 26);
16199
16224
  }
16200
- function cc(r) {
16225
+ function hc(r) {
16201
16226
  r.enemies = [], r.pools = [], r.vortices = [], r.shockwaves = [], r.experienceOrbs = [], r.inputManager.forceRelease();
16202
16227
  }
16203
- function dc(r) {
16228
+ function pc(r) {
16204
16229
  if (r.bossEncounter.getPhase() === "inactive") return;
16205
16230
  let e = !1;
16206
16231
  for (const t of r.enemies) {
16207
- if (!uc(t)) continue;
16232
+ if (!mc(t)) continue;
16208
16233
  const a = r.bossEncounter.hit(t.position, t.type, r.core.position);
16209
16234
  a !== "none" && (vt(r, t.position, t.color, a), t.isThrown = !1, t.triggerDissolveDeath(!1), a === "tentacle-broken" && r.bossEncounter.getPhase() === "exposed" && (e = !0));
16210
16235
  }
16211
16236
  e && r.releaseBossExposureBurst();
16212
16237
  }
16213
- function uc(r) {
16238
+ function mc(r) {
16214
16239
  return r.active && r.isThrown && !r.isDying;
16215
16240
  }
16216
16241
  function vt(r, e, t, a) {
@@ -16229,17 +16254,17 @@ function vt(r, e, t, a) {
16229
16254
  }
16230
16255
  a === "boss-damaged" && r.juice.triggerScreenShake({ x: 0, y: 1 }, 12), a === "defeated" && r.juice.triggerFlash(1);
16231
16256
  }
16232
- function hc(r) {
16233
- if (!pc(r)) return;
16257
+ function gc(r) {
16258
+ if (!yc(r)) return;
16234
16259
  const e = r.inputManager.grabbedEnemy;
16235
16260
  if (!e || !e.active || e.isDying) return;
16236
16261
  const t = r.bossEncounter.hit(e.position, e.type, r.core.position);
16237
- t !== "none" && (r.smasherBossImpactCooldown = 0.28, vt(r, e.position, e.color, t), mc(r, e, t), gc(r, e, t));
16262
+ t !== "none" && (r.smasherBossImpactCooldown = 0.28, vt(r, e.position, e.color, t), Ec(r, e, t), vc(r, e, t));
16238
16263
  }
16239
- function pc(r) {
16264
+ function yc(r) {
16240
16265
  return r.coreInteraction.getMechanic() === "smasher" && r.smasherBossImpactCooldown <= 0;
16241
16266
  }
16242
- function mc(r, e, t) {
16267
+ function Ec(r, e, t) {
16243
16268
  r.juice.triggerHitstop(0.08), r.juice.triggerFlash(t === "area-impact" ? 0.25 : 0.5), r.juice.triggerScreenShake(
16244
16269
  {
16245
16270
  x: e.position.x - r.core.position.x,
@@ -16248,7 +16273,7 @@ function mc(r, e, t) {
16248
16273
  t === "area-impact" ? 8 : 14
16249
16274
  );
16250
16275
  }
16251
- function gc(r, e, t) {
16276
+ function vc(r, e, t) {
16252
16277
  if (t === "tentacle-broken" && r.bossEncounter.getPhase() === "exposed" && r.releaseBossExposureBurst(), !r.core.consumeSmasherImpact()) return;
16253
16278
  r.core.startSmasherRetraction(e.position, e.color);
16254
16279
  const a = r.inputManager.releaseGrabbedEnemy();
@@ -16299,7 +16324,7 @@ class ft {
16299
16324
  }, !0;
16300
16325
  }
16301
16326
  }
16302
- class yc {
16327
+ class fc {
16303
16328
  id;
16304
16329
  radius = 17;
16305
16330
  interactionRadius = 132;
@@ -16335,10 +16360,10 @@ class yc {
16335
16360
  }
16336
16361
  }
16337
16362
  }
16338
- function Ec(r, e) {
16363
+ function xc(r, e) {
16339
16364
  return e === "area-impact" ? 290 : e === "defeated" ? 360 : 210;
16340
16365
  }
16341
- function vc(r) {
16366
+ function Sc(r) {
16342
16367
  r.bossExposureBurstRemaining = 26, r.bossExposureBurstAccumulator = 0.22, r.bossExposureBurstSide = 1;
16343
16368
  const e = r.bossEncounter.getBossPosition(r.core.position);
16344
16369
  r.shockwaves.push({
@@ -16352,7 +16377,7 @@ function vc(r) {
16352
16377
  maxLifetime: 1.2
16353
16378
  }), r.juice.triggerFlash(0.75), r.juice.triggerScreenShake({ x: 0, y: 1 }, 42);
16354
16379
  }
16355
- function fc(r, e) {
16380
+ function bc(r, e) {
16356
16381
  if (r.bossEncounter.getPhase() !== "exposed") {
16357
16382
  r.resetBossExposureBurst();
16358
16383
  return;
@@ -16368,30 +16393,30 @@ function fc(r, e) {
16368
16393
  i && (r.enemies.push(i), r.recordEnemyObservation(i)), r.bossExposureBurstRemaining -= 1;
16369
16394
  }
16370
16395
  }
16371
- function xc(r) {
16396
+ function Cc(r) {
16372
16397
  for (const e of r.enemies)
16373
- Sc(r, e) && Ac(r, e);
16398
+ Ac(r, e) && Tc(r, e);
16374
16399
  }
16375
- function Sc(r, e) {
16376
- return bc(e) && Cc(r, e);
16400
+ function Ac(r, e) {
16401
+ return Ic(e) && Rc(r, e);
16377
16402
  }
16378
- function bc(r) {
16403
+ function Ic(r) {
16379
16404
  return r.active && r.bossLaunchPhase === "outbound" && !r.isGrabbed && !r.isThrown && !r.wasManipulated;
16380
16405
  }
16381
- function Cc(r, e) {
16406
+ function Rc(r, e) {
16382
16407
  return e.position.x < -90 || e.position.x > r.canvas.width + 90 || e.position.y < -90 || e.position.y > r.canvas.height + 90;
16383
16408
  }
16384
- function Ac(r, e) {
16409
+ function Tc(r, e) {
16385
16410
  const t = {
16386
16411
  x: r.core.position.x + (Math.random() - 0.5) * 140,
16387
16412
  y: r.core.position.y + (Math.random() - 0.5) * 140
16388
16413
  }, a = Math.atan2(t.y - e.position.y, t.x - e.position.x), i = Math.max(260, e.maxSpeed * 1.8);
16389
16414
  e.bossLaunchPhase = "reentry", e.velocity = { x: Math.cos(a) * i, y: Math.sin(a) * i }, e.launchDelay = 0.05;
16390
16415
  }
16391
- function Ic(r) {
16416
+ function wc(r) {
16392
16417
  r.bossExposureBurstRemaining = 0, r.bossExposureBurstAccumulator = 0, r.bossExposureBurstSide = 1;
16393
16418
  }
16394
- function Rc(r) {
16419
+ function kc(r) {
16395
16420
  if (r.bossEncounter.getPhase() !== "defeated") return;
16396
16421
  const e = r.areaDirector.getArea().bossId;
16397
16422
  if (!e) return;
@@ -16402,9 +16427,9 @@ function Rc(r) {
16402
16427
  coreId: r.coreRoster.getSelectedCoreId()
16403
16428
  }), r.areaDirector.beginReward(), r.bossCodex.recordVictory(e);
16404
16429
  const a = r.getBossRewardPosition();
16405
- r.bossCatalyst = new yc(a), Tc(r, a, t.ecosomaDropMin, t.ecosomaDropMax), wc(r);
16430
+ r.bossCatalyst = new fc(a), Pc(r, a, t.ecosomaDropMin, t.ecosomaDropMax), Mc(r);
16406
16431
  }
16407
- function Tc(r, e, t, a) {
16432
+ function Pc(r, e, t, a) {
16408
16433
  const i = Math.max(3, Math.floor(t ?? 3)), o = Math.max(i, Math.floor(a ?? 5)), n = i + Math.floor(Math.random() * (o - i + 1));
16409
16434
  for (let s = 0; s < n; s++) {
16410
16435
  const l = s * Math.PI * 2 / n, c = 24 + Math.random() * 28;
@@ -16416,30 +16441,30 @@ function Tc(r, e, t, a) {
16416
16441
  );
16417
16442
  }
16418
16443
  }
16419
- function wc(r) {
16444
+ function Mc(r) {
16420
16445
  r.enemies = [], r.pools = [], r.vortices = [], r.shockwaves = [], r.repelProjectiles = [], r.bossEncounter.reset(), r.resetBossExposureBurst(), r.juice.triggerFlash(1);
16421
16446
  }
16422
- function kc(r) {
16447
+ function Dc(r) {
16423
16448
  const e = r.bossEncounter.getBossPosition(r.core.position), t = e.x - r.core.position.x, a = e.y - r.core.position.y, i = Math.hypot(t, a), o = Math.min(r.canvas.width, r.canvas.height) * 0.3, n = i > o ? o / i : 1, s = 28;
16424
16449
  return {
16425
16450
  x: Math.max(s, Math.min(r.canvas.width - s, r.core.position.x + t * n)),
16426
16451
  y: Math.max(s, Math.min(r.canvas.height - s, r.core.position.y + a * n))
16427
16452
  };
16428
16453
  }
16429
- function Pc(r, e) {
16454
+ function Oc(r, e) {
16430
16455
  if (r.bossCatalyst?.active && (r.tryCollectCatalyst(), r.bossCatalyst.update(e, r.core.position, r.core.getHitboxRadius()), !r.bossCatalyst.active && r.bossCatalyst.absorbedByCore)) {
16431
16456
  const t = r.areaDirector.getArea().bossId;
16432
16457
  t && r.bossCodex.recordDropCollected(t), r.areaDirector.beginTransition(), r.areaTransitionElapsed = 0, r.juice.triggerFlash(0.75);
16433
16458
  }
16434
16459
  r.updateEcosomaOrbs(e), r.juice.update(e, r.floatingTexts, r.particles);
16435
16460
  }
16436
- function Mc(r) {
16461
+ function Nc(r) {
16437
16462
  const e = r.bossCatalyst;
16438
16463
  if (!e || !e.active || e.isAbsorbing) return;
16439
16464
  const t = r.configManager.getConfig().magnet, a = Math.hypot(r.core.position.x - e.position.x, r.core.position.y - e.position.y), i = Math.hypot(r.inputManager.pointerPosition.x - e.position.x, r.inputManager.pointerPosition.y - e.position.y);
16440
16465
  (a <= r.core.getHitboxRadius() + t.corePickupRadius || i <= Math.max(t.psionicRadius + t.pickupRadius + e.radius, e.interactionRadius)) && e.beginAbsorption();
16441
16466
  }
16442
- function Dc(r, e) {
16467
+ function Lc(r, e) {
16443
16468
  if (r.areaTransitionElapsed = Math.min(r.areaTransitionDuration, r.areaTransitionElapsed + Math.max(0, e)), r.updateEcosomaOrbs(e), !(r.areaTransitionElapsed < r.areaTransitionDuration) && r.areaDirector.completeTransition()) {
16444
16469
  const t = r.areaDirector.getArea();
16445
16470
  r.coreRoster.setRunArea(t.areaNumber ?? 1, t.experienceMultiplier), r.coreRoster.recordSkillEvent("area"), r.objectives.record({
@@ -16449,15 +16474,15 @@ function Dc(r, e) {
16449
16474
  }), r.waveDirector.setArea(t), r.areaIntroElapsed = 0, r.bossEncounter.reset(), r.bossCatalyst = null, r.clearArenaForBoss(), r.juice.triggerFlash(0.65);
16450
16475
  }
16451
16476
  }
16452
- const Oc = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, xt = (r, e) => {
16477
+ const _c = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, xt = (r, e) => {
16453
16478
  const t = /* @__PURE__ */ new Map();
16454
16479
  for (const a of r) {
16455
16480
  if (!a.active || a.isAbsorbing || a.isMerging) continue;
16456
- const i = Oc(a.position.x, a.position.y, e), o = t.get(i);
16481
+ const i = _c(a.position.x, a.position.y, e), o = t.get(i);
16457
16482
  o ? o.push(a) : t.set(i, [a]);
16458
16483
  }
16459
16484
  return t;
16460
- }, ee = (r) => !r.active || r.isAbsorbing || r.isMerging, Nc = (r, e) => {
16485
+ }, ee = (r) => !r.active || r.isAbsorbing || r.isMerging, jc = (r, e) => {
16461
16486
  if (r.length < 2 || e <= 0) return;
16462
16487
  const t = xt(r, e);
16463
16488
  for (const a of r) {
@@ -16466,18 +16491,18 @@ const Oc = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, xt = (r, e)
16466
16491
  for (let n = -1; n <= 1; n++)
16467
16492
  for (let s = -1; s <= 1; s++) {
16468
16493
  const l = t.get(`${i + n}:${o + s}`);
16469
- l && Lc(a, l, e);
16494
+ l && Bc(a, l, e);
16470
16495
  }
16471
16496
  }
16472
- }, Lc = (r, e, t) => {
16497
+ }, Bc = (r, e, t) => {
16473
16498
  for (const a of e) {
16474
16499
  if (a === r || ee(a)) continue;
16475
16500
  const i = Math.hypot(a.position.x - r.position.x, a.position.y - r.position.y), o = Math.min(12, Math.max(0, Math.max(r.radius, a.radius) - r.getBaseRadius()));
16476
16501
  i <= t + o && r.mergeWith(a);
16477
16502
  }
16478
- }, _c = (r, e, t) => {
16503
+ }, Hc = (r, e, t) => {
16479
16504
  const a = e.magneticAttractionDistance;
16480
- if (!jc(r, e)) return;
16505
+ if (!Uc(r, e)) return;
16481
16506
  const i = xt(r, a);
16482
16507
  for (const o of r) {
16483
16508
  if (ee(o)) continue;
@@ -16485,7 +16510,7 @@ const Oc = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, xt = (r, e)
16485
16510
  for (let l = -1; l <= 1; l++)
16486
16511
  for (let c = -1; c <= 1; c++) {
16487
16512
  const d = i.get(`${n + l}:${s + c}`);
16488
- d && Bc({
16513
+ d && zc({
16489
16514
  orb: o,
16490
16515
  bucket: d,
16491
16516
  distanceLimit: a,
@@ -16494,7 +16519,7 @@ const Oc = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, xt = (r, e)
16494
16519
  });
16495
16520
  }
16496
16521
  }
16497
- }, jc = (r, e) => r.length >= 2 && e.magneticAttractionDistance > 0 && e.magneticAttractionStrength > 0, Bc = (r) => {
16522
+ }, Uc = (r, e) => r.length >= 2 && e.magneticAttractionDistance > 0 && e.magneticAttractionStrength > 0, zc = (r) => {
16498
16523
  const { orb: e, bucket: t, distanceLimit: a, strength: i, dt: o } = r;
16499
16524
  for (const n of t) {
16500
16525
  if (n === e || ee(n) || n.id <= e.id) continue;
@@ -16503,12 +16528,12 @@ const Oc = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, xt = (r, e)
16503
16528
  const d = i * (1 - c / a) ** 2 * o, u = s / c, h = l / c;
16504
16529
  e.velocity.x += u * d, e.velocity.y += h * d, n.velocity.x -= u * d, n.velocity.y -= h * d;
16505
16530
  }
16506
- }, Hc = (r, e) => {
16531
+ }, Kc = (r, e) => {
16507
16532
  const t = Math.log2(r), a = Math.min(e.maxRadius, e.baseRadius + t * e.radiusGrowthPerLevel);
16508
16533
  let i = p.experience;
16509
16534
  return r >= e.blueThreshold && (i = p.experienceBlue), r >= e.yellowThreshold && (i = p.experienceYellow), r >= e.redThreshold && (i = p.experienceRed), { radius: a, color: i };
16510
16535
  };
16511
- class Uc {
16536
+ class Fc {
16512
16537
  constructor(e) {
16513
16538
  this.config = e;
16514
16539
  }
@@ -16539,7 +16564,7 @@ class Uc {
16539
16564
  return e.velocity = { x: o / s * l, y: n / s * l }, !1;
16540
16565
  }
16541
16566
  }
16542
- const zc = {
16567
+ const Gc = {
16543
16568
  mergeDistance: 34,
16544
16569
  magneticAttractionDistance: 190,
16545
16570
  magneticAttractionStrength: 900,
@@ -16566,8 +16591,8 @@ class be {
16566
16591
  absorbedByCore = !1;
16567
16592
  config;
16568
16593
  lifecycle;
16569
- constructor(e, t = 1, a = zc) {
16570
- this.id = `xp_${Date.now()}_${Math.random()}`, this.position = { ...e }, this.value = Math.max(1, t), this.config = a, this.lifecycle = new Uc(a), this.radius = a.baseRadius, this.color = p.experience, this.updateAppearance();
16594
+ constructor(e, t = 1, a = Gc) {
16595
+ this.id = `xp_${Date.now()}_${Math.random()}`, this.position = { ...e }, this.value = Math.max(1, t), this.config = a, this.lifecycle = new Fc(a), this.radius = a.baseRadius, this.color = p.experience, this.updateAppearance();
16571
16596
  const i = Math.random() * Math.PI * 2, o = 25 + Math.random() * 45;
16572
16597
  this.velocity = {
16573
16598
  x: Math.cos(i) * o,
@@ -16575,10 +16600,10 @@ class be {
16575
16600
  };
16576
16601
  }
16577
16602
  static mergeNearby(e, t) {
16578
- Nc(e, t);
16603
+ jc(e, t);
16579
16604
  }
16580
16605
  static attractNearby(e, t, a) {
16581
- _c(e, t, a);
16606
+ Hc(e, t, a);
16582
16607
  }
16583
16608
  beginAbsorption() {
16584
16609
  this.active && (this.isAbsorbing = !0);
@@ -16611,7 +16636,7 @@ class be {
16611
16636
  }
16612
16637
  }
16613
16638
  updateAppearance() {
16614
- const e = Hc(this.value, this.config);
16639
+ const e = Kc(this.value, this.config);
16615
16640
  this.radius = e.radius, this.color = e.color;
16616
16641
  }
16617
16642
  getBaseRadius() {
@@ -16638,22 +16663,22 @@ class St {
16638
16663
  this.active && !this.isGrabbed && !this.isHovered && (this.orbitAngle += e * 0.25, this.position.x = t.x + Math.cos(this.orbitAngle) * this.orbitDistance, this.position.y = t.y + Math.sin(this.orbitAngle) * this.orbitDistance);
16639
16664
  }
16640
16665
  }
16641
- function Kc(r, e) {
16666
+ function Vc(r, e) {
16642
16667
  r.objectives.record({
16643
16668
  type: "level-reached",
16644
16669
  amount: e,
16645
16670
  coreId: r.coreRoster.getSelectedCoreId()
16646
16671
  }), r.pendingLevelUps.push(e), r.isLevelUpActive || r.presentNextLevelUp();
16647
16672
  }
16648
- function Fc(r) {
16673
+ function Wc(r) {
16649
16674
  const e = r.pendingLevelUps.shift();
16650
16675
  if (e === void 0) {
16651
16676
  r.isLevelUpActive = !1;
16652
16677
  return;
16653
16678
  }
16654
- r.isLevelUpActive = !0, r.inputManager.forceRelease(), r.juice.triggerFlash(0.3), r.juice.triggerScreenShake({ x: 0, y: 1 }, 8), Gc(r, e), r.orbitingOrbs = Vc(r), r.rerollsRemaining = r.isChallengeRun() ? 0 : r.getRerollLimit();
16679
+ r.isLevelUpActive = !0, r.inputManager.forceRelease(), r.juice.triggerFlash(0.3), r.juice.triggerScreenShake({ x: 0, y: 1 }, 8), qc(r, e), r.orbitingOrbs = $c(r), r.rerollsRemaining = r.isChallengeRun() ? 0 : r.getRerollLimit();
16655
16680
  }
16656
- function Gc(r, e) {
16681
+ function qc(r, e) {
16657
16682
  r.floatingTexts.push({
16658
16683
  id: Math.random().toString(),
16659
16684
  text: r.i18n.translate("levelUpChoose", { level: e }),
@@ -16679,11 +16704,11 @@ function Gc(r, e) {
16679
16704
  });
16680
16705
  }
16681
16706
  }
16682
- function Vc(r) {
16707
+ function $c(r) {
16683
16708
  const e = r.powerUpRegistry.getRandomOptions(3, r.geneticMemory, r.waveDirector.getAvailableEnemyIds(), r.coreRoster.getSelectedCoreId());
16684
16709
  return e.map((t, a) => new St("orb_" + Date.now() + "_" + a, t, a * Math.PI * 2 / e.length));
16685
16710
  }
16686
- function Wc(r) {
16711
+ function Yc(r) {
16687
16712
  for (const e of r.enemies)
16688
16713
  e.experienceDropPending && (e.experienceDropPending = !1, r.codex.recordKill(e.type, e.codexDeathSourceType), r.objectives.record({
16689
16714
  type: "enemy-defeated",
@@ -16692,13 +16717,13 @@ function Wc(r) {
16692
16717
  coreId: r.coreRoster.getSelectedCoreId()
16693
16718
  }), r.experienceOrbs.push(new be(e.position, 1, r.configManager.getConfig().experience)), r.getEcosomaDropPolicy().shouldDrop(r.progressBar.getLevel()) && r.ecosomaOrbs.push(new ft(e.position)));
16694
16719
  }
16695
- function qc(r, e) {
16720
+ function Zc(r, e) {
16696
16721
  r.codex.recordSeen(e.type), e.variantId && r.isEnemyVisible(e) && r.codex.recordVariant(e.type, e.variantId);
16697
16722
  }
16698
- function $c(r, e) {
16723
+ function Jc(r, e) {
16699
16724
  for (const t of e) t.active && !t.isDying && r.recordEnemyObservation(t);
16700
16725
  }
16701
- function Yc(r, e) {
16726
+ function Xc(r, e) {
16702
16727
  const t = e.getHitRadius();
16703
16728
  return e.position.x >= -t && e.position.x <= r.canvas.width + t && e.position.y >= -t && e.position.y <= r.canvas.height + t;
16704
16729
  }
@@ -16714,26 +16739,26 @@ class Ze {
16714
16739
  return t >= 0 && t < this.getChance(e);
16715
16740
  }
16716
16741
  }
16717
- function Zc(r, e) {
16742
+ function Qc(r, e) {
16718
16743
  const t = r.configManager.getConfig();
16719
16744
  be.attractNearby(r.experienceOrbs, t.experience, e), be.mergeNearby(r.experienceOrbs, t.experience.mergeDistance);
16720
- for (const a of r.experienceOrbs) Jc(r, a, e, t.magnet);
16745
+ for (const a of r.experienceOrbs) ed(r, a, e, t.magnet);
16721
16746
  r.experienceOrbs = r.experienceOrbs.filter((a) => a.active);
16722
16747
  }
16723
- function Jc(r, e, t, a) {
16748
+ function ed(r, e, t, a) {
16724
16749
  if (e.active) {
16725
16750
  if (e.isMerging) {
16726
16751
  e.update(t, r.core.position, r.core.getHitboxRadius(), a.absorptionSpeed);
16727
16752
  return;
16728
16753
  }
16729
- Xc(r, e, a) && e.beginAbsorption(), e.update(t, r.core.position, r.core.getHitboxRadius(), a.absorptionSpeed), !e.active && e.absorbedByCore && Qc(r, e);
16754
+ td(r, e, a) && e.beginAbsorption(), e.update(t, r.core.position, r.core.getHitboxRadius(), a.absorptionSpeed), !e.active && e.absorbedByCore && rd(r, e);
16730
16755
  }
16731
16756
  }
16732
- function Xc(r, e, t) {
16757
+ function td(r, e, t) {
16733
16758
  const a = Math.hypot(r.core.position.x - e.position.x, r.core.position.y - e.position.y), i = Math.hypot(r.inputManager.pointerPosition.x - e.position.x, r.inputManager.pointerPosition.y - e.position.y);
16734
16759
  return a <= r.core.getHitboxRadius() + t.corePickupRadius || i <= t.psionicRadius + t.pickupRadius + e.radius;
16735
16760
  }
16736
- function Qc(r, e) {
16761
+ function rd(r, e) {
16737
16762
  r.progressBar.addExperience(e.value), r.juice.triggerFlash(0.12), r.floatingTexts.push({
16738
16763
  id: Math.random().toString(),
16739
16764
  text: r.i18n.translate("experienceCollected", { amount: e.value }),
@@ -16746,14 +16771,14 @@ function Qc(r, e) {
16746
16771
  size: 18
16747
16772
  });
16748
16773
  }
16749
- function ed(r, e) {
16774
+ function ad(r, e) {
16750
16775
  const { magnet: t, ecosoma: a } = r.configManager.getConfig();
16751
- for (const i of r.ecosomaOrbs) td({ engine: r, orb: i, dt: e, magnet: t, ecosoma: a });
16776
+ for (const i of r.ecosomaOrbs) id({ engine: r, orb: i, dt: e, magnet: t, ecosoma: a });
16752
16777
  r.ecosomaOrbs = r.ecosomaOrbs.filter((i) => i.active);
16753
16778
  }
16754
- function td(r) {
16779
+ function id(r) {
16755
16780
  const { engine: e, orb: t, dt: a, magnet: i, ecosoma: o } = r;
16756
- t.active && (rd(e, t, i) && t.beginAbsorption(), t.update(a, e.core.position, e.core.getHitboxRadius(), o), !t.active && t.absorbedByCore && (e.geneticMemory.collectEcosoma(t.value), e.objectives.record({ type: "ecosoma-collected", amount: t.value }), e.juice.triggerFlash(0.18), e.floatingTexts.push({
16781
+ t.active && (od(e, t, i) && t.beginAbsorption(), t.update(a, e.core.position, e.core.getHitboxRadius(), o), !t.active && t.absorbedByCore && (e.geneticMemory.collectEcosoma(t.value), e.objectives.record({ type: "ecosoma-collected", amount: t.value }), e.juice.triggerFlash(0.18), e.floatingTexts.push({
16757
16782
  id: Math.random().toString(),
16758
16783
  text: e.i18n.translate("ecosomaCollected", { amount: t.value }),
16759
16784
  position: { ...e.core.position },
@@ -16765,11 +16790,11 @@ function td(r) {
16765
16790
  size: 17
16766
16791
  })));
16767
16792
  }
16768
- function rd(r, e, t) {
16793
+ function od(r, e, t) {
16769
16794
  const a = Math.hypot(r.core.position.x - e.position.x, r.core.position.y - e.position.y), i = Math.hypot(r.inputManager.pointerPosition.x - e.position.x, r.inputManager.pointerPosition.y - e.position.y);
16770
16795
  return a <= r.core.getHitboxRadius() + t.corePickupRadius || i <= t.psionicRadius + t.pickupRadius + e.radius;
16771
16796
  }
16772
- function ad(r) {
16797
+ function nd(r) {
16773
16798
  const e = r.configManager.getConfig().ecosoma;
16774
16799
  return r.debugPerformanceEnabled ? new Ze({
16775
16800
  ...e,
@@ -16778,7 +16803,7 @@ function ad(r) {
16778
16803
  maxDropChance: $e
16779
16804
  }) : new Ze(e);
16780
16805
  }
16781
- function id(r) {
16806
+ function sd(r) {
16782
16807
  if (r.rerollsRemaining <= 0) return;
16783
16808
  r.rerollsRemaining -= 1, r.juice.triggerFlash(0.4);
16784
16809
  const e = r.powerUpRegistry.getRandomOptions(3, r.geneticMemory, r.waveDirector.getAvailableEnemyIds(), r.coreRoster.getSelectedCoreId());
@@ -16787,11 +16812,11 @@ function id(r) {
16787
16812
  return new St(`orb_${Date.now()}_${a}`, t, i);
16788
16813
  });
16789
16814
  }
16790
- function od(r) {
16815
+ function ld(r) {
16791
16816
  const e = r.debugPerformanceEnabled ? performance.now() : 0;
16792
- r.renderer.render(nd(r)), ld(r), r.performanceAudit.finishRender(e);
16817
+ r.renderer.render(cd(r)), ud(r), r.performanceAudit.finishRender(e);
16793
16818
  }
16794
- function nd(r) {
16819
+ function cd(r) {
16795
16820
  const e = {
16796
16821
  core: r.core,
16797
16822
  enemies: r.getRenderList(),
@@ -16810,13 +16835,13 @@ function nd(r) {
16810
16835
  experienceProgress: r.progressBar.getProgress(),
16811
16836
  levelUpPulse: r.progressBar.getLevelUpPulse(),
16812
16837
  levelUpActive: r.isLevelUpActive,
16813
- areaVisual: sd(r),
16838
+ areaVisual: dd(r),
16814
16839
  boss: r.bossEncounter.getSnapshot(r.core.position),
16815
16840
  bossCatalyst: r.bossCatalyst
16816
16841
  };
16817
16842
  return r.isRunning && r.interactiveTutorial.isActive && (e.tutorial = r.interactiveTutorial), r.isDeathSequenceActive && (e.deathSequenceProgress = r.deathSequenceElapsed / ye), e;
16818
16843
  }
16819
- function sd(r) {
16844
+ function dd(r) {
16820
16845
  const e = r.areaDirector.getPhase();
16821
16846
  return {
16822
16847
  areaId: r.areaDirector.getAreaId(),
@@ -16828,7 +16853,7 @@ function sd(r) {
16828
16853
  entryProgress: r.isRunning && e === "area" ? Math.min(1, r.areaIntroElapsed / Q) : 1
16829
16854
  };
16830
16855
  }
16831
- function ld(r) {
16856
+ function ud(r) {
16832
16857
  r.isLevelUpActive && r.orbitingOrbs.length > 0 && r.renderer.drawings.drawOrbitingModifierOrbs({
16833
16858
  orbs: r.orbitingOrbs,
16834
16859
  time: r.core.pulsePhase,
@@ -16837,207 +16862,207 @@ function ld(r) {
16837
16862
  rerollsRemaining: r.rerollsRemaining
16838
16863
  });
16839
16864
  }
16840
- function cd(r) {
16865
+ function hd(r) {
16841
16866
  return r.isRunning ? r.enemies : r.isDeathSequenceActive ? [] : r.ambientEnemies;
16842
16867
  }
16843
- function dd(r) {
16868
+ function pd(r) {
16844
16869
  return r.debugRerollsEnabled ? 99 : 1;
16845
16870
  }
16846
- function ud(r, e = !1) {
16871
+ function md(r, e = !1) {
16847
16872
  if (!e && r.objectives.getSnapshots("mission").length > 0) return;
16848
16873
  const t = r.missionGenerator.generate();
16849
16874
  t && r.objectives.installMission(t);
16850
16875
  }
16851
- function hd(r) {
16876
+ function gd(r) {
16852
16877
  if (!r.objectives.canRerollMission()) return;
16853
16878
  const e = r.missionGenerator.generate();
16854
16879
  e && r.objectives.rerollMission(e);
16855
16880
  }
16856
- function pd(r) {
16881
+ function yd(r) {
16857
16882
  r.missionsDrawer.setAvailable(!0), r.startMenu.show();
16858
16883
  }
16859
- function md(r, e) {
16860
- r.objectives.startChallenge(e, r.coreRoster.getSelectedCoreId()) && (r.challengeRunId = e, r.challengesOverlay.hide(), r.startGame());
16884
+ function Ed(r, e) {
16885
+ r.objectives.startChallenge(e, r.coreRoster.getSelectedCoreId()) && (r.challengeRunId = e, r.challengesOverlay.hide(), r.startGame(), ll(r));
16861
16886
  }
16862
- function gd(r) {
16887
+ function vd(r) {
16863
16888
  return r.challengeRunId !== null;
16864
16889
  }
16865
- function yd(r, e) {
16890
+ function fd(r, e) {
16866
16891
  if (e.type === "ecosoma") {
16867
16892
  r.geneticMemory.collectEcosoma(e.amount);
16868
16893
  return;
16869
16894
  }
16870
16895
  e.type === "powerup" && r.geneticMemory.grantUnlock(e.unlockId);
16871
16896
  }
16872
- function Ed(r) {
16897
+ function xd(r) {
16873
16898
  r.gameLoop.stop(), r.performanceAudit.destroy(), r.coreRosterOverlay.destroy(), r.geneticMemoryOverlay.destroy(), r.coreRunSummaryOverlay.destroy(), r.challengeResultOverlay.destroy(), r.challengeCompletionCinematic.destroy(), r.unsubscribeCodex?.(), r.unsubscribeBossCodex?.(), r.unsubscribeCoreRoster?.(), r.codexOverlay.destroy(), r.codexToast.destroy(), r.missionsDrawer.destroy(), r.challengesOverlay.destroy(), r.achievementsOverlay.destroy(), r.objectiveToast.destroy(), r.unsubscribeObjectives?.(), window.removeEventListener("keydown", r.handleLanguageHold), window.removeEventListener("keydown", r.handleDebugAchievement), window.removeEventListener("keyup", r.handleLanguageRelease), r.canvas.remove();
16874
16899
  }
16875
- class vd extends nl {
16900
+ class Sd extends cl {
16876
16901
  constructor(e) {
16877
16902
  super(e);
16878
16903
  }
16879
16904
  setLanguage(e) {
16880
- sl(this, e);
16905
+ dl(this, e);
16881
16906
  }
16882
16907
  setTheme(e) {
16883
- ll(this, e);
16908
+ ul(this, e);
16884
16909
  }
16885
16910
  getLanguage() {
16886
- return cl(this);
16911
+ return hl(this);
16887
16912
  }
16888
16913
  getTheme() {
16889
- return dl(this);
16914
+ return pl(this);
16890
16915
  }
16891
16916
  onLanguageChanged(e) {
16892
- ul(this);
16917
+ ml(this);
16893
16918
  }
16894
16919
  initAmbientArena() {
16895
- hl(this);
16920
+ gl(this);
16896
16921
  }
16897
16922
  syncSelectedCorePreview() {
16898
- pl(this);
16923
+ yl(this);
16899
16924
  }
16900
16925
  resizeCanvas() {
16901
- ml(this);
16926
+ El(this);
16902
16927
  }
16903
16928
  setupEvents() {
16904
- xl(this);
16929
+ Cl(this);
16905
16930
  }
16906
16931
  startGame() {
16907
- kl(this);
16932
+ Dl(this);
16908
16933
  }
16909
16934
  clearTransientRunState() {
16910
- Ll(this);
16935
+ Bl(this);
16911
16936
  }
16912
16937
  updateRepelProjectiles(e) {
16913
- _l(this, e);
16938
+ Hl(this, e);
16914
16939
  }
16915
16940
  isRepelProjectileBlocked(e) {
16916
- return Ul(this, e);
16941
+ return Fl(this, e);
16917
16942
  }
16918
16943
  clearTransientRunEntities() {
16919
- Kl(this);
16944
+ Vl(this);
16920
16945
  }
16921
16946
  updateDeathSequence(e) {
16922
- Fl(this, e);
16947
+ Wl(this, e);
16923
16948
  }
16924
16949
  update(e) {
16925
- Gl(this, e);
16950
+ ql(this, e);
16926
16951
  }
16927
16952
  handleEnemyKill() {
16928
- sc(this);
16953
+ dc(this);
16929
16954
  }
16930
16955
  startBossIfReady() {
16931
- lc(this);
16956
+ uc(this);
16932
16957
  }
16933
16958
  clearArenaForBoss() {
16934
- cc(this);
16959
+ hc(this);
16935
16960
  }
16936
16961
  processBossImpacts() {
16937
- dc(this);
16962
+ pc(this);
16938
16963
  }
16939
16964
  processSmasherBossImpact() {
16940
- hc(this);
16965
+ gc(this);
16941
16966
  }
16942
16967
  getBossImpactRadius(e) {
16943
- return Ec(this, e);
16968
+ return xc(this, e);
16944
16969
  }
16945
16970
  releaseBossExposureBurst() {
16946
- vc(this);
16971
+ Sc(this);
16947
16972
  }
16948
16973
  updateBossExposureBurst(e) {
16949
- fc(this, e);
16974
+ bc(this, e);
16950
16975
  }
16951
16976
  updateBossMinionReentryPaths() {
16952
- xc(this);
16977
+ Cc(this);
16953
16978
  }
16954
16979
  resetBossExposureBurst() {
16955
- Ic(this);
16980
+ wc(this);
16956
16981
  }
16957
16982
  finishBossIfDefeated() {
16958
- Rc(this);
16983
+ kc(this);
16959
16984
  }
16960
16985
  getBossRewardPosition() {
16961
- return kc(this);
16986
+ return Dc(this);
16962
16987
  }
16963
16988
  updateBossReward(e) {
16964
- Pc(this, e);
16989
+ Oc(this, e);
16965
16990
  }
16966
16991
  tryCollectCatalyst() {
16967
- Mc(this);
16992
+ Nc(this);
16968
16993
  }
16969
16994
  updateAreaTransition(e) {
16970
- Dc(this, e);
16995
+ Lc(this, e);
16971
16996
  }
16972
16997
  triggerLevelUp(e) {
16973
- Kc(this, e);
16998
+ Vc(this, e);
16974
16999
  }
16975
17000
  presentNextLevelUp() {
16976
- Fc(this);
17001
+ Wc(this);
16977
17002
  }
16978
17003
  spawnExperienceDrops() {
16979
- Wc(this);
17004
+ Yc(this);
16980
17005
  }
16981
17006
  recordEnemyObservation(e) {
16982
- qc(this, e);
17007
+ Zc(this, e);
16983
17008
  }
16984
17009
  recordEnemyObservations(e) {
16985
- $c(this, e);
17010
+ Jc(this, e);
16986
17011
  }
16987
17012
  isEnemyVisible(e) {
16988
- return Yc(this, e);
17013
+ return Xc(this, e);
16989
17014
  }
16990
17015
  updateExperienceOrbs(e) {
16991
- Zc(this, e);
17016
+ Qc(this, e);
16992
17017
  }
16993
17018
  updateEcosomaOrbs(e) {
16994
- ed(this, e);
17019
+ ad(this, e);
16995
17020
  }
16996
17021
  getEcosomaDropPolicy() {
16997
- return ad(this);
17022
+ return nd(this);
16998
17023
  }
16999
17024
  triggerReroll() {
17000
- id(this);
17025
+ sd(this);
17001
17026
  }
17002
17027
  render() {
17003
- od(this);
17028
+ ld(this);
17004
17029
  }
17005
17030
  getRenderList() {
17006
- return cd(this);
17031
+ return hd(this);
17007
17032
  }
17008
17033
  getRerollLimit() {
17009
- return dd(this);
17034
+ return pd(this);
17010
17035
  }
17011
17036
  refreshGeneratedMission(e = !1) {
17012
- ud(this, e);
17037
+ md(this, e);
17013
17038
  }
17014
17039
  rerollMission() {
17015
- hd(this);
17040
+ gd(this);
17016
17041
  }
17017
17042
  showStartMenu() {
17018
- pd(this);
17043
+ yd(this);
17019
17044
  }
17020
17045
  startChallenge(e) {
17021
- md(this, e);
17046
+ Ed(this, e);
17022
17047
  }
17023
17048
  isChallengeRun() {
17024
- return gd(this);
17049
+ return vd(this);
17025
17050
  }
17026
17051
  applyObjectiveReward(e) {
17027
- yd(this, e);
17052
+ fd(this, e);
17028
17053
  }
17029
17054
  destroy() {
17030
- Ed(this);
17055
+ xd(this);
17031
17056
  }
17032
17057
  }
17033
- function fd(r) {
17034
- return new vd(r);
17058
+ function bd(r) {
17059
+ return new Sd(r);
17035
17060
  }
17036
17061
  export {
17037
17062
  Za as BrowserPlatform,
17038
- vd as GameEngine,
17063
+ Sd as GameEngine,
17039
17064
  Ca as LANGUAGES,
17040
17065
  pr as ThemeManager,
17041
- fd as createAxonSurge,
17066
+ bd as createAxonSurge,
17042
17067
  re as isLanguage
17043
17068
  };