@gamebob/axon-surge 0.38.0 → 0.39.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.
@@ -2303,7 +2303,7 @@ class xr extends fr {
2303
2303
  t.restore();
2304
2304
  }
2305
2305
  }
2306
- class br extends xr {
2306
+ class Sr extends xr {
2307
2307
  drawMiasmaClouds(e, t, a) {
2308
2308
  if (this.renderer.ctx)
2309
2309
  for (const i of e)
@@ -2341,13 +2341,13 @@ class br extends xr {
2341
2341
  this.renderer.ctx.save(), this.renderer.ctx.globalAlpha = t.alpha, this.renderer.ctx.fillStyle = t.color, this.renderer.ctx.font = `900 ${t.size}px ${M}`, this.renderer.ctx.textAlign = "center", this.renderer.ctx.shadowColor = t.color, this.renderer.ctx.shadowBlur = 12, this.renderer.ctx.fillText(t.text, t.position.x, t.position.y), this.renderer.ctx.restore();
2342
2342
  }
2343
2343
  }
2344
- const Sr = {
2344
+ const br = {
2345
2345
  common: p.spore,
2346
2346
  rare: p.parasite,
2347
2347
  epic: p.cluster,
2348
2348
  legendary: p.core
2349
2349
  };
2350
- class Cr extends br {
2350
+ class Cr extends Sr {
2351
2351
  drawOrbitingModifierOrbs(e) {
2352
2352
  if (!this.renderer.ctx) return;
2353
2353
  const { orbs: t, time: a, i18nService: i, canReroll: o = !0, rerollsRemaining: n = 1 } = e, s = this.renderer.themeManager.getPalette(), l = this.getDisplayScale();
@@ -2359,7 +2359,7 @@ class Cr extends br {
2359
2359
  }
2360
2360
  }
2361
2361
  drawOrbitingOrb(e) {
2362
- const { orb: t, time: a, palette: i, displayScale: o, i18nService: n } = e, s = Sr[t.definition.rarity], l = t.radius + Math.sin(a * 6 + t.orbitAngle) * 3, c = this.renderer.ctx;
2362
+ const { orb: t, time: a, palette: i, displayScale: o, i18nService: n } = e, s = br[t.definition.rarity], l = t.radius + Math.sin(a * 6 + t.orbitAngle) * 3, c = this.renderer.ctx;
2363
2363
  c.save(), c.shadowColor = s, c.shadowBlur = t.isGrabbed ? 36 : this.getOrbShadowBlur(t), this.drawOrbAura(t, l, s), this.drawOrbBody({ orb: t, pulseR: l, time: a, palette: i, rarityColor: s }), this.drawOrbLabel({ orb: t, pulseR: l, palette: i, rarityColor: s, displayScale: o, i18nService: n }), c.restore();
2364
2364
  }
2365
2365
  getOrbShadowBlur(e) {
@@ -2593,7 +2593,7 @@ class Rr {
2593
2593
  });
2594
2594
  }
2595
2595
  drawParticle(e) {
2596
- const { ctx: t, w: a, h: i, time: o, hue: n, secondaryHue: s, level: l, isLight: c, centerX: d, centerY: u, clearRadius: h, index: m } = e, g = m + l * 17, y = this.unitNoise(g * 1.7) * a, j = this.unitNoise(g * 2.9 + 13) * i, R = Math.hypot(y - d, j - u), k = Math.min(1, Math.max(0, (R - h) / (Math.min(a, i) * 0.28))), St = 0.7 + Math.sin(o * (0.6 + m % 4 * 0.08) + g) * 0.3, Ct = (c ? 0.34 : 0.3) * k * St;
2596
+ const { ctx: t, w: a, h: i, time: o, hue: n, secondaryHue: s, level: l, isLight: c, centerX: d, centerY: u, clearRadius: h, index: m } = e, g = m + l * 17, y = this.unitNoise(g * 1.7) * a, j = this.unitNoise(g * 2.9 + 13) * i, R = Math.hypot(y - d, j - u), k = Math.min(1, Math.max(0, (R - h) / (Math.min(a, i) * 0.28))), bt = 0.7 + Math.sin(o * (0.6 + m % 4 * 0.08) + g) * 0.3, Ct = (c ? 0.34 : 0.3) * k * bt;
2597
2597
  t.fillStyle = `hsla(${m % 3 === 0 ? s : n}, ${c ? 82 : 78}%, ${c ? 40 : 70}%, ${Ct})`, t.beginPath(), t.arc(y, j, 0.65 + m % 3 * 0.45, 0, Math.PI * 2), t.fill();
2598
2598
  }
2599
2599
  unitNoise(e) {
@@ -3961,6 +3961,8 @@ const C = {
3961
3961
  coreRosterSkillPoints: "EXPERIENCIA NUCLEICA",
3962
3962
  coreRosterNext: "SIGUIENTE DESBLOQUEO",
3963
3963
  coreRosterNoNext: "No hay otro desbloqueo definido.",
3964
+ coreRosterScrollUp: "Ver elevaciones anteriores",
3965
+ coreRosterScrollDown: "Ver más elevaciones",
3964
3966
  coreOriginStyleDescription: "Agarra, arrastra y lanza enemigos para convertirlos en munición.",
3965
3967
  coreLauncherTitle: "EL LANZADOR",
3966
3968
  coreLauncherDescription: "La conciencia que convierte cada criatura en munición.",
@@ -4203,6 +4205,8 @@ const C = {
4203
4205
  coreRosterSkillPoints: "NUCLEIC EXPERIENCE",
4204
4206
  coreRosterNext: "NEXT UNLOCK",
4205
4207
  coreRosterNoNext: "No further unlock is defined.",
4208
+ coreRosterScrollUp: "View previous elevations",
4209
+ coreRosterScrollDown: "View more elevations",
4206
4210
  coreOriginStyleDescription: "Grab, drag, and throw enemies to turn them into ammunition.",
4207
4211
  coreLauncherTitle: "THE LAUNCHER",
4208
4212
  coreLauncherDescription: "The consciousness that turns every creature into ammunition.",
@@ -4405,6 +4409,8 @@ const C = {
4405
4409
  coreRosterSkillPoints: "EXPÉRIENCE NUCLÉIQUE",
4406
4410
  coreRosterNext: "PROCHAIN DÉVERROUILLAGE",
4407
4411
  coreRosterNoNext: "Aucun autre déverrouillage n'est défini.",
4412
+ coreRosterScrollUp: "Voir les élévations précédentes",
4413
+ coreRosterScrollDown: "Voir plus d'élévations",
4408
4414
  coreOriginStyleDescription: "Saisissez, faites glisser et lancez les ennemis pour en faire des munitions.",
4409
4415
  coreSmasherTitle: "L'ÉCRASEUR",
4410
4416
  coreSmasherDescription: "La conscience qui soutient que tout corps est infiniment plus utile lorsqu'il est plat.",
@@ -4592,6 +4598,8 @@ const C = {
4592
4598
  coreRosterSkillPoints: "NUKLEARE ERFAHRUNG",
4593
4599
  coreRosterNext: "NÄCHSTE FREISCHALTUNG",
4594
4600
  coreRosterNoNext: "Keine weitere Freischaltung definiert.",
4601
+ coreRosterScrollUp: "Vorherige Elevationen anzeigen",
4602
+ coreRosterScrollDown: "Weitere Elevationen anzeigen",
4595
4603
  coreOriginStyleDescription: "Greife, ziehe und schleudere Feinde, um sie in Munition zu verwandeln.",
4596
4604
  coreSmasherTitle: "DER ZERMALMER",
4597
4605
  coreSmasherDescription: "Das Bewusstsein, das behauptet, dass jeder Körper unendlich nützlicher ist, wenn er flach ist.",
@@ -4779,6 +4787,8 @@ const C = {
4779
4787
  coreRosterSkillPoints: "ESPERIENZA NUCLEICA",
4780
4788
  coreRosterNext: "PROSSIMO SBLOCCO",
4781
4789
  coreRosterNoNext: "Nessun altro sblocco definito.",
4790
+ coreRosterScrollUp: "Mostra elevazioni precedenti",
4791
+ coreRosterScrollDown: "Mostra altre elevazioni",
4782
4792
  coreOriginStyleDescription: "Afferra, trascina e lancia i nemici per trasformarli in munizioni.",
4783
4793
  coreSmasherTitle: "IL FRANTUMATORE",
4784
4794
  coreSmasherDescription: "La coscienza che sostiene che ogni corpo sia infinitamente più utile quando è piatto.",
@@ -4966,6 +4976,8 @@ const C = {
4966
4976
  coreRosterSkillPoints: "EXPERIÊNCIA NUCLEICA",
4967
4977
  coreRosterNext: "PRÓXIMO DESBLOQUEIO",
4968
4978
  coreRosterNoNext: "Nenhum outro desbloqueio definido.",
4979
+ coreRosterScrollUp: "Ver elevações anteriores",
4980
+ coreRosterScrollDown: "Ver mais elevações",
4969
4981
  coreOriginStyleDescription: "Agarra, arrasta e lança inimigos para transformá-los em munição.",
4970
4982
  coreSmasherTitle: "O ESMAGADOR",
4971
4983
  coreSmasherDescription: "A consciência que transforma um agarre num esmagamento.",
@@ -5153,6 +5165,8 @@ const C = {
5153
5165
  coreRosterSkillPoints: "NUCLEAIRE ERVARING",
5154
5166
  coreRosterNext: "VOLGENDE VRIJSPELING",
5155
5167
  coreRosterNoNext: "Geen volgende vrijspeling gedefinieerd.",
5168
+ coreRosterScrollUp: "Vorige elevaties bekijken",
5169
+ coreRosterScrollDown: "Meer elevaties bekijken",
5156
5170
  coreOriginStyleDescription: "Grijp, sleep en werp vijanden om ze in munitie te veranderen.",
5157
5171
  coreSmasherTitle: "DE VERPLETTERAAR",
5158
5172
  coreSmasherDescription: "Het bewustzijn dat een greep in een verpletterende klap verandert.",
@@ -5340,6 +5354,8 @@ const C = {
5340
5354
  coreRosterSkillPoints: "NUKLEÄR ERFARENHET",
5341
5355
  coreRosterNext: "NÄSTA UPPLÅSNING",
5342
5356
  coreRosterNoNext: "Ingen ytterligare upplåsning definierad.",
5357
+ coreRosterScrollUp: "Visa tidigare elevationer",
5358
+ coreRosterScrollDown: "Visa fler elevationer",
5343
5359
  coreOriginStyleDescription: "Greppa, dra och kasta fiender för att göra dem till ammunition.",
5344
5360
  coreSmasherTitle: "MIAŻDŻYCEL",
5345
5361
  coreSmasherDescription: "Medvetandet som förvandlar ett grepp till en krossande smäll.",
@@ -5527,6 +5543,8 @@ const C = {
5527
5543
  coreRosterSkillPoints: "DOŚWIADCZENIE NUKLEICZNE",
5528
5544
  coreRosterNext: "NASTĘPNE ODBLOKOWANIE",
5529
5545
  coreRosterNoNext: "Nie zdefiniowano kolejnego odblokowania.",
5546
+ coreRosterScrollUp: "Pokaż wcześniejsze elewacje",
5547
+ coreRosterScrollDown: "Pokaż więcej elewacji",
5530
5548
  coreOriginStyleDescription: "Chwytaj, przeciągaj i rzucaj wrogami, zmieniając ich w amunicję.",
5531
5549
  coreSmasherTitle: "SANG PENGHANCUR",
5532
5550
  coreSmasherDescription: "Świadomość, która zmienia chwyt w miażdżące uderzenie.",
@@ -5714,6 +5732,8 @@ const C = {
5714
5732
  coreRosterSkillPoints: "PENGALAMAN NUKLEAT",
5715
5733
  coreRosterNext: "PEMBUKAAN BERIKUTNYA",
5716
5734
  coreRosterNoNext: "Belum ada pembukaan lain.",
5735
+ coreRosterScrollUp: "Lihat elevasi sebelumnya",
5736
+ coreRosterScrollDown: "Lihat elevasi lainnya",
5717
5737
  coreOriginStyleDescription: "Tangkap, seret, dan lempar musuh untuk mengubahnya menjadi amunisi.",
5718
5738
  coreSmasherTitle: "EZİCİ",
5719
5739
  coreSmasherDescription: "Kesadaran yang mengubah cengkeraman menjadi hantaman penghancur.",
@@ -5901,6 +5921,8 @@ const C = {
5901
5921
  coreRosterSkillPoints: "NÜKLEİK DENEYİM",
5902
5922
  coreRosterNext: "SONRAKİ AÇILIM",
5903
5923
  coreRosterNoNext: "Başka açılım tanımlanmadı.",
5924
+ coreRosterScrollUp: "Önceki yükselişleri gör",
5925
+ coreRosterScrollDown: "Daha fazla yükseliş gör",
5904
5926
  coreOriginStyleDescription: "Düşmanları yakala, sürükle ve fırlat; onları mühimmata dönüştür.",
5905
5927
  coreSmasherTitle: "КРУШИТЕЛЬ",
5906
5928
  coreSmasherDescription: "Kavrayışı ezici bir darbeye dönüştüren bilinç.",
@@ -6088,6 +6110,8 @@ const C = {
6088
6110
  coreRosterSkillPoints: "НУКЛЕИЧЕСКИЙ ОПЫТ",
6089
6111
  coreRosterNext: "СЛЕДУЮЩЕЕ ОТКРЫТИЕ",
6090
6112
  coreRosterNoNext: "Следующее открытие не определено.",
6113
+ coreRosterScrollUp: "Показать предыдущие возвышения",
6114
+ coreRosterScrollDown: "Показать другие возвышения",
6091
6115
  coreOriginStyleDescription: "Хватайте, тащите и бросайте врагов, превращая их в боеприпасы.",
6092
6116
  coreSmasherTitle: "スマッシャー",
6093
6117
  coreSmasherDescription: "Сознание, превращающее захват в сокрушительный удар.",
@@ -6275,6 +6299,8 @@ const C = {
6275
6299
  coreRosterSkillPoints: "ヌクレア経験",
6276
6300
  coreRosterNext: "次のアンロック",
6277
6301
  coreRosterNoNext: "次のアンロックは未定義です。",
6302
+ coreRosterScrollUp: "前のエレベーションを見る",
6303
+ coreRosterScrollDown: "さらにエレベーションを見る",
6278
6304
  coreOriginStyleDescription: "敵をつかみ、引き寄せ、投げて弾薬に変える。",
6279
6305
  coreSmasherTitle: "THE SMASHER",
6280
6306
  coreSmasherDescription: "つかんだものを粉砕の一撃に変える意識。",
@@ -6462,6 +6488,8 @@ const C = {
6462
6488
  coreRosterSkillPoints: "뉴클레익 경험",
6463
6489
  coreRosterNext: "다음 해금",
6464
6490
  coreRosterNoNext: "다음 해금은 정의되지 않았습니다.",
6491
+ coreRosterScrollUp: "이전 엘리베이션 보기",
6492
+ coreRosterScrollDown: "더 많은 엘리베이션 보기",
6465
6493
  coreOriginStyleDescription: "적을 붙잡고 끌어당기고 던져 탄약으로 바꿉니다.",
6466
6494
  coreSmasherTitle: "분쇄기",
6467
6495
  coreSmasherDescription: "붙잡기를 분쇄의 일격으로 바꾸는 의식입니다.",
@@ -6649,6 +6677,8 @@ const C = {
6649
6677
  coreRosterSkillPoints: "核质经验",
6650
6678
  coreRosterNext: "下一个解锁",
6651
6679
  coreRosterNoNext: "尚未定义下一个解锁。",
6680
+ coreRosterScrollUp: "查看之前的晋升",
6681
+ coreRosterScrollDown: "查看更多晋升",
6652
6682
  coreOriginStyleDescription: "抓住、拖拽并投掷敌人,将其变成弹药。",
6653
6683
  coreSmasherTitle: "粉碎者",
6654
6684
  coreSmasherDescription: "将抓取转化为粉碎一击的意识。",
@@ -7965,7 +7995,7 @@ const xa = {
7965
7995
  };
7966
7996
  for (const [r, e] of Object.entries(xa))
7967
7997
  Object.assign(C[r], e);
7968
- const ba = {
7998
+ const Sa = {
7969
7999
  es: {
7970
8000
  codexSporeLore: "Organismo tóxico que convierte el rechazo en una reunión útil.",
7971
8001
  codexClusterLore: "Energía dopaminérgica contenida en una criatura que no sabe bajar el ritmo.",
@@ -8897,9 +8927,9 @@ const ba = {
8897
8927
  codexHeavyEntryCaused6: "最后一次放电落下时,大寂静仍在寻找最弱者。它在一个已经无用的地方继续执行使命,并因此哭泣。"
8898
8928
  }
8899
8929
  };
8900
- for (const [r, e] of Object.entries(ba))
8930
+ for (const [r, e] of Object.entries(Sa))
8901
8931
  Object.assign(C[r], e);
8902
- const Sa = {
8932
+ const ba = {
8903
8933
  es: {
8904
8934
  codexPiercerLore: "Criatura puntiaguda que atraviesa la materia siguiendo campos electromagnéticos.",
8905
8935
  codexParasiteLore: "Criatura social que convierte cada encuentro en un abrazo gravitatorio."
@@ -8961,7 +8991,7 @@ const Sa = {
8961
8991
  codexParasiteLore: "把每次相遇都变成引力拥抱的社交生物。"
8962
8992
  }
8963
8993
  };
8964
- for (const [r, e] of Object.entries(Sa))
8994
+ for (const [r, e] of Object.entries(ba))
8965
8995
  Object.assign(C[r], e);
8966
8996
  const Ca = ["es", "en", "fr", "de", "it", "pt", "nl", "sv", "pl", "id", "tr", "ru", "ja", "ko", "zh"];
8967
8997
  function re(r) {
@@ -9701,7 +9731,7 @@ class Ka {
9701
9731
  }
9702
9732
  renderSkinSelector(e, t) {
9703
9733
  const a = t.id === "core-default" ? "DEFAULT" : t.id.replace("core-", "").replaceAll("-", " ").toUpperCase(), i = this.getSkinStatus(t);
9704
- return `<button type="button" class="axon-core-skin-selector-entry ${this.getSkinStateClass(t)}" data-core-action="equip-skin" data-core-id="${e.id}" data-skin-id="${t.id}" ${this.getDisabledAttribute(t.unlocked)} aria-label="${a} · ${i}" aria-pressed="${t.selected}"><span class="axon-core-skin-portrait"><canvas class="axon-core-skin-miniature" width="120" height="120" data-skin-preview-id="${t.id}" data-skin-preview-silhouette="${t.unlocked ? "false" : "true"}" aria-hidden="true"></canvas></span>${this.renderSelectionMark()}</button>`;
9734
+ return `<button type="button" class="axon-core-skin-selector-entry ${this.getSkinStateClass(t)}" data-core-action="equip-skin" data-core-id="${e.id}" data-skin-id="${t.id}" ${this.getDisabledAttribute(t.unlocked)} aria-label="${a} · ${i}" aria-pressed="${t.selected}"><span class="axon-core-skin-portrait"><canvas class="axon-core-skin-miniature" width="120" height="120" data-skin-preview-id="${t.id}" data-skin-preview-silhouette="${t.unlocked ? "false" : "true"}" aria-hidden="true"></canvas></span></button>`;
9705
9735
  }
9706
9736
  getSkinStatus(e) {
9707
9737
  return e.selected ? this.i18n.translate("coreRosterSelected") : e.unlocked ? this.i18n.translate("coreRosterSelect") : this.i18n.translate("coreRosterLocked");
@@ -9712,9 +9742,6 @@ class Ka {
9712
9742
  getDisabledAttribute(e) {
9713
9743
  return e ? "" : "disabled";
9714
9744
  }
9715
- renderSelectionMark() {
9716
- return '<svg class="axon-core-skin-selected-mark" viewBox="0 0 24 24" aria-hidden="true"><path d="m12 3 2.1 6.1L20 12l-5.9 2.1L12 21l-2.1-6.9L4 12l5.9-2.9L12 3Z"/></svg>';
9717
- }
9718
9745
  renderOrganicGrowthIcon() {
9719
9746
  return '<svg viewBox="0 0 44 44" role="img" aria-hidden="true"><circle cx="22" cy="22" r="3.2"/><ellipse cx="22" cy="22" rx="17" ry="7"/><ellipse cx="22" cy="22" rx="17" ry="7" transform="rotate(60 22 22)"/><ellipse cx="22" cy="22" rx="17" ry="7" transform="rotate(-60 22 22)"/><circle class="axon-atom-electron" cx="39" cy="22" r="2.3"/><circle class="axon-atom-electron" cx="13.5" cy="7.3" r="2.3"/><circle class="axon-atom-electron" cx="13.5" cy="36.7" r="2.3"/></svg>';
9720
9747
  }
@@ -9739,7 +9766,10 @@ class Ka {
9739
9766
  }
9740
9767
  renderSkillTree(e) {
9741
9768
  const t = this.getWisdomProgress(e), a = e.wisdomTrack.map((i, o) => this.renderElevationRow(i, o, e.profile.wisdomLevel, t)).join("");
9742
- return `<div class="axon-core-tree-layout"><section class="axon-core-elevation-ledger"><header class="axon-core-elevation-ledger-header"><div><span>${this.i18n.translate("coreRosterWisdom")}</span><strong>${e.profile.wisdomLevel}/${e.wisdomTrack.length}</strong></div><div class="axon-core-elevation-legend"><span class="is-complete">${this.i18n.translate("coreRosterCurrent")}</span><span class="is-next">${this.i18n.translate("coreRosterNext")}</span><span class="is-locked">${this.i18n.translate("coreRosterLocked")}</span></div></header><div class="axon-core-elevation-list">${a}</div></section></div>`;
9769
+ return `<div class="axon-core-tree-layout"><section class="axon-core-elevation-ledger"><header class="axon-core-elevation-ledger-header"><div><span>${this.i18n.translate("coreRosterWisdom")}</span><strong>${e.profile.wisdomLevel}/${e.wisdomTrack.length}</strong></div><div class="axon-core-elevation-legend"><span class="is-complete">${this.i18n.translate("coreRosterCurrent")}</span><span class="is-next">${this.i18n.translate("coreRosterNext")}</span><span class="is-locked">${this.i18n.translate("coreRosterLocked")}</span></div></header><div class="axon-core-elevation-list-shell"><button type="button" class="axon-core-elevation-scroll-button axon-core-elevation-scroll-up" data-elevation-scroll="up" aria-label="${this.i18n.translate("coreRosterScrollUp")}" hidden>${this.renderScrollArrow("up")}</button><div class="axon-core-elevation-list">${a}</div><button type="button" class="axon-core-elevation-scroll-button axon-core-elevation-scroll-down" data-elevation-scroll="down" aria-label="${this.i18n.translate("coreRosterScrollDown")}" hidden>${this.renderScrollArrow("down")}</button></div></section></div>`;
9770
+ }
9771
+ renderScrollArrow(e) {
9772
+ return `<svg viewBox="0 0 24 24" aria-hidden="true"><path d="m5 9 7 7 7-7" transform="${e === "up" ? "rotate(180 12 12)" : ""}"/></svg>`;
9743
9773
  }
9744
9774
  renderElevationRow(e, t, a, i) {
9745
9775
  const o = this.getElevationRowState(t, a), n = this.getElevationRowStateLabel(o), s = o === "next" ? i : 0;
@@ -9810,7 +9840,9 @@ class Fa {
9810
9840
  }
9811
9841
  render() {
9812
9842
  const e = this.roster.getSnapshots(), t = this.previewCoreId ? this.roster.getSnapshot(this.previewCoreId) : this.roster.getSelectedCore();
9813
- this.stopPreview(), this.container.innerHTML = this.view === "elevations" ? this.renderElevationsMarkup(t) : this.renderMarkup(e, t), this.bindEvents(), this.isOpen && this.startPreview();
9843
+ this.stopPreview();
9844
+ const a = this.view === "elevations";
9845
+ this.container.classList.toggle("axon-core-roster-elevations-view", a), this.container.innerHTML = this.view === "elevations" ? this.renderElevationsMarkup(t) : this.renderMarkup(e, t), this.bindEvents(), this.isOpen && this.startPreview();
9814
9846
  }
9815
9847
  renderMarkup(e, t) {
9816
9848
  return `<div class="axon-core-roster-shell axon-core-roster-immersive-shell axon-genetic-memory-shell">${this.renderHeader()}<p class="axon-core-roster-hint">${this.i18n.translate("coreRosterHint")}</p><div class="axon-core-roster-stage"><nav class="axon-core-roster-selector" aria-label="${this.i18n.translate("coreRosterTitle")}"><div class="axon-core-selector-heading"><span>${this.i18n.translate("coreRosterCombatProfile")}</span><small>${this.i18n.translate("coreRosterSelected")}</small></div><div class="axon-core-selector-list">${e.map((a, i) => this.renderer.renderSelector(a, i)).join("")}</div></nav><main class="axon-core-showcase" data-accent="${t.accent}">${this.renderer.renderShowcase(t)}</main></div></div>`;
@@ -9824,7 +9856,28 @@ class Fa {
9824
9856
  bindEvents() {
9825
9857
  this.container.querySelector("#axon-core-roster-close")?.addEventListener("click", this.onClose), this.container.querySelectorAll("[data-core-action]").forEach((e) => {
9826
9858
  e.addEventListener("click", () => this.handleCoreAction(e));
9827
- });
9859
+ }), this.bindElevationScrollControls();
9860
+ }
9861
+ bindElevationScrollControls() {
9862
+ const e = this.container.querySelector(".axon-core-elevation-list");
9863
+ e && (this.container.querySelectorAll("[data-elevation-scroll]").forEach((t) => {
9864
+ t.addEventListener("click", () => this.scrollElevations(e, t.dataset.elevationScroll === "up" ? -1 : 1));
9865
+ }), e.addEventListener("scroll", () => this.updateElevationScrollControls(e)), this.focusCurrentElevation(e), this.updateElevationScrollControls(e));
9866
+ }
9867
+ focusCurrentElevation(e) {
9868
+ const t = [...e.querySelectorAll(".axon-core-elevation-row")], a = e.querySelector(".axon-core-elevation-next") ?? t[t.length - 1];
9869
+ if (!a) return;
9870
+ const i = a.offsetTop - Math.max(0, (e.clientHeight - a.offsetHeight) / 2);
9871
+ e.scrollTop = Math.max(0, i);
9872
+ }
9873
+ scrollElevations(e, t) {
9874
+ e.scrollBy({ top: t * Math.max(120, e.clientHeight * 0.72), behavior: "smooth" });
9875
+ }
9876
+ updateElevationScrollControls(e) {
9877
+ const t = [...this.container.querySelectorAll("[data-elevation-scroll]")], a = t.find((n) => n.dataset.elevationScroll === "up"), i = t.find((n) => n.dataset.elevationScroll === "down");
9878
+ if (!a || !i) return;
9879
+ const o = e.scrollHeight > e.clientHeight + 2;
9880
+ a.hidden = !o, i.hidden = !o, a.disabled = e.scrollTop <= 2, i.disabled = e.scrollTop + e.clientHeight >= e.scrollHeight - 2;
9828
9881
  }
9829
9882
  handleCoreAction(e) {
9830
9883
  const t = e.dataset.coreAction;
@@ -10179,7 +10232,7 @@ class Va {
10179
10232
  return `
10180
10233
  <div class="axon-title-halo">
10181
10234
  <h1 class="axon-title">${this.i18n.translate("title")}</h1>
10182
- <p class="axon-version-mark">v0.38.0</p>
10235
+ <p class="axon-version-mark">v0.39.0</p>
10183
10236
  <button id="axon-start-btn" class="axon-start-button">${this.i18n.translate("startButton")}</button>
10184
10237
  ${this.renderSecondaryActions()}
10185
10238
  </div>
@@ -10513,11 +10566,11 @@ class L {
10513
10566
  this.accentColor = null, this.eyeProfile = "none", this.visualProfile = "default", this.variantState = {}, this.variantTrail = [], this.strategy = null;
10514
10567
  }
10515
10568
  }
10516
- const b = (r, e, t) => r?.[e] ?? t, Ee = (r, e) => r?.[e] ?? null, Ja = (r, e) => ({
10569
+ const S = (r, e, t) => r?.[e] ?? t, Ee = (r, e) => r?.[e] ?? null, Ja = (r, e) => ({
10517
10570
  ...r.behavior,
10518
10571
  ...e?.behaviorOverrides ?? {}
10519
10572
  }), Xa = (r, e) => e.synergyKey ?? e.behavior.synergyKey?.(r) ?? e.id, Qa = (r) => r.initialRotation === "random" ? Math.random() * Math.PI * 2 : 0, ei = (r, e) => {
10520
- const t = b(e, "canBeManipulatedByCore", !0);
10573
+ const t = S(e, "canBeManipulatedByCore", !0);
10521
10574
  return {
10522
10575
  variantId: Ee(e, "id"),
10523
10576
  variantRendererId: Ee(e, "rendererId"),
@@ -10525,15 +10578,15 @@ const b = (r, e, t) => r?.[e] ?? t, Ee = (r, e) => r?.[e] ?? null, Ja = (r, e) =
10525
10578
  isGrabbed: !1,
10526
10579
  isThrown: !1,
10527
10580
  canBeManipulatedByCore: t,
10528
- canBeDamagedByCore: b(e, "canBeDamagedByCore", !0),
10529
- canBeKilledByCoreRepelWave: b(e, "canBeKilledByCoreRepelWave", !1),
10581
+ canBeDamagedByCore: S(e, "canBeDamagedByCore", !0),
10582
+ canBeKilledByCoreRepelWave: S(e, "canBeKilledByCoreRepelWave", !1),
10530
10583
  isGrabbable: !!r.canBeGrabbed && t,
10531
- variantPulseInterval: b(e, "pulseInterval", 0),
10584
+ variantPulseInterval: S(e, "pulseInterval", 0),
10532
10585
  variantPulseTimer: 0,
10533
- blocksFrontImpacts: b(e, "blocksFrontImpacts", !1),
10534
- frontCoverageArc: b(e, "frontCoverageArc", 0),
10535
- frontCoverageRadiusMultiplier: b(e, "frontCoverageRadiusMultiplier", 1),
10536
- visualProfile: b(e, "visualProfile", "default"),
10586
+ blocksFrontImpacts: S(e, "blocksFrontImpacts", !1),
10587
+ frontCoverageArc: S(e, "frontCoverageArc", 0),
10588
+ frontCoverageRadiusMultiplier: S(e, "frontCoverageRadiusMultiplier", 1),
10589
+ visualProfile: S(e, "visualProfile", "default"),
10537
10590
  variantState: {},
10538
10591
  variantTrail: []
10539
10592
  };
@@ -10560,7 +10613,7 @@ class ti {
10560
10613
  Object.assign(e, ei(t, a));
10561
10614
  }
10562
10615
  applyDefinition(e, t, a) {
10563
- e.radius = t.radius, e.hitRadiusPadding = t.hitRadiusPadding ?? 0.2, e.color = b(a, "color", t.color), e.accentColor = Ee(a, "accentColor"), e.eyeProfile = b(a, "eyeProfile", t.eyeProfile), e.strategy = t.impactStrategyFactory?.() ?? null, e.behavior = Ja(t, a), e.synergyKey = Xa(e, t), e.maxSpeed = t.maxSpeed * b(a, "maxSpeedMultiplier", 1), e.rotation = Qa(t);
10616
+ e.radius = t.radius, e.hitRadiusPadding = t.hitRadiusPadding ?? 0.2, e.color = S(a, "color", t.color), e.accentColor = Ee(a, "accentColor"), e.eyeProfile = S(a, "eyeProfile", t.eyeProfile), e.strategy = t.impactStrategyFactory?.() ?? null, e.behavior = Ja(t, a), e.synergyKey = Xa(e, t), e.maxSpeed = t.maxSpeed * S(a, "maxSpeedMultiplier", 1), e.rotation = Qa(t);
10564
10617
  }
10565
10618
  applyMotion(e, t, a, i) {
10566
10619
  e.position = { ...t };
@@ -11079,7 +11132,7 @@ const ii = (r) => ({
11079
11132
  const e = r.getConfig().cluster;
11080
11133
  r.updateConfig({ cluster: { ...e, hasHoming: !0 } });
11081
11134
  }
11082
- }), bi = (r) => ({
11135
+ }), Si = (r) => ({
11083
11136
  id: "piercer_aoe",
11084
11137
  titleKey: "pu_piercer_aoe_title",
11085
11138
  descKey: "pu_piercer_aoe_desc",
@@ -11093,7 +11146,7 @@ const ii = (r) => ({
11093
11146
  const e = r.getConfig().piercer;
11094
11147
  r.updateConfig({ piercer: { ...e, terminalAoERadius: (e.terminalAoERadius || 0) + 160 } });
11095
11148
  }
11096
- }), Si = (r) => ({
11149
+ }), bi = (r) => ({
11097
11150
  id: "piercer_homing",
11098
11151
  requiredUnlockId: "piercer_homing",
11099
11152
  requiredEnemyId: "piercer",
@@ -11131,8 +11184,8 @@ const ii = (r) => ({
11131
11184
  vi(r),
11132
11185
  fi(r),
11133
11186
  xi(r),
11134
- bi(r),
11135
11187
  Si(r),
11188
+ bi(r),
11136
11189
  Ci(r)
11137
11190
  ], Ii = (r) => [
11138
11191
  ...ui(r),
@@ -12399,17 +12452,17 @@ function xo(r) {
12399
12452
  const e = /* @__PURE__ */ new Set();
12400
12453
  for (const [t, a] of Object.entries(r))
12401
12454
  for (const i of a)
12402
- bo(i.id, t, i.condition.target, e);
12455
+ So(i.id, t, i.condition.target, e);
12403
12456
  return r;
12404
12457
  }
12405
- function bo(r, e, t, a) {
12458
+ function So(r, e, t, a) {
12406
12459
  const i = `${e}:${r}`;
12407
12460
  if (!r || a.has(i)) throw new Error(`Duplicate or empty ${e} objective: ${r}`);
12408
12461
  if (t <= 0 || !Number.isFinite(t))
12409
12462
  throw new Error(`Invalid ${e} objective target: ${r}`);
12410
12463
  a.add(i);
12411
12464
  }
12412
- function So(r, e) {
12465
+ function bo(r, e) {
12413
12466
  const t = Co(e);
12414
12467
  if (!r) return t;
12415
12468
  try {
@@ -12494,7 +12547,7 @@ function Z(r) {
12494
12547
  function ue(r) {
12495
12548
  return Object.fromEntries(r);
12496
12549
  }
12497
- const wo = 2, qe = 1, ko = 480 * 60 * 1e3, S = () => ({
12550
+ const wo = 2, qe = 1, ko = 480 * 60 * 1e3, b = () => ({
12498
12551
  progress: 0,
12499
12552
  completed: !1,
12500
12553
  claimed: !1,
@@ -12547,7 +12600,7 @@ class Oo {
12547
12600
  return (e ? this.getDefinitions(e) : [...this.definitions.missions, ...this.definitions.challenges, ...this.definitions.achievements]).filter((a) => e !== "mission" || this.activeMissionIds.includes(a.id)).map((a) => this.getSnapshot(a.kind, a.id));
12548
12601
  }
12549
12602
  getSnapshot(e, t) {
12550
- const a = this.getDefinition(e, t), i = this.progress.get(e).get(t) ?? S(), o = {
12603
+ const a = this.getDefinition(e, t), i = this.progress.get(e).get(t) ?? b(), o = {
12551
12604
  ...i,
12552
12605
  kind: e,
12553
12606
  id: t,
@@ -12560,7 +12613,7 @@ class Oo {
12560
12613
  return n.rules !== void 0 && (o.rules = n.rules), n.preset !== void 0 && (o.preset = n.preset), n.requiredCoreId !== void 0 && (o.requiredCoreId = n.requiredCoreId), n.providerId !== void 0 && (o.providerId = n.providerId), o;
12561
12614
  }
12562
12615
  installMission(e, t = Date.now()) {
12563
- this.missionDefinitions.set(e.id, e), this.progress.get("mission").set(e.id, S()), this.activeMissionIds = [e.id], this.missionAssignedAt = t, this.persist(), this.notify({ kind: "mission", id: e.id, type: "rotated" });
12616
+ this.missionDefinitions.set(e.id, e), this.progress.get("mission").set(e.id, b()), this.activeMissionIds = [e.id], this.missionAssignedAt = t, this.persist(), this.notify({ kind: "mission", id: e.id, type: "rotated" });
12564
12617
  }
12565
12618
  canRerollMission(e = Date.now()) {
12566
12619
  return !!(this.getSnapshots("mission")[0] && (this.missionRerolls > 0 || e - this.missionAssignedAt >= ko));
@@ -12583,13 +12636,13 @@ class Oo {
12583
12636
  }
12584
12637
  startChallenge(e, t) {
12585
12638
  if (!this.canStartChallenge(e, t)) return !1;
12586
- const a = this.progress.get("challenge").get(e) ?? S();
12587
- return this.progress.get("challenge").set(e, { ...S(), claims: a.claims }), this.activeChallengeId = e, this.persist(), this.notify({ kind: "challenge", id: e, type: "challenge-started" }), !0;
12639
+ const a = this.progress.get("challenge").get(e) ?? b();
12640
+ return this.progress.get("challenge").set(e, { ...b(), claims: a.claims }), this.activeChallengeId = e, this.persist(), this.notify({ kind: "challenge", id: e, type: "challenge-started" }), !0;
12588
12641
  }
12589
12642
  cancelActiveChallenge() {
12590
12643
  if (!this.activeChallengeId) return;
12591
- const e = this.activeChallengeId, t = this.progress.get("challenge").get(e) ?? S();
12592
- t.completed || (this.progress.get("challenge").set(e, { ...S(), claims: t.claims }), this.notify({ kind: "challenge", id: e, type: "challenge-failed" })), this.activeChallengeId = null, this.persist();
12644
+ const e = this.activeChallengeId, t = this.progress.get("challenge").get(e) ?? b();
12645
+ t.completed || (this.progress.get("challenge").set(e, { ...b(), claims: t.claims }), this.notify({ kind: "challenge", id: e, type: "challenge-failed" })), this.activeChallengeId = null, this.persist();
12593
12646
  }
12594
12647
  getDefinitions(e) {
12595
12648
  return Mo(this.definitions, this.missionDefinitions, e);
@@ -12626,10 +12679,10 @@ class Oo {
12626
12679
  hydrateDefaults() {
12627
12680
  for (const e of ["mission", "challenge", "achievement"])
12628
12681
  for (const t of this.getDefinitions(e))
12629
- this.progress.get(e).set(t.id, S());
12682
+ this.progress.get(e).set(t.id, b());
12630
12683
  }
12631
12684
  load() {
12632
- const e = So(this.storage, this.activeMissionIds);
12685
+ const e = bo(this.storage, this.activeMissionIds);
12633
12686
  e.activeMissionDefinition && this.registerStoredMission(e.activeMissionDefinition), this.loadProgress("mission", e.missions), this.loadProgress("challenge", e.challenges), this.loadProgress("achievement", e.achievements), this.activeMissionIds = this.getKnownMissionIds(e.activeMissionIds), this.missionAssignedAt = e.missionAssignedAt ?? Date.now(), this.missionRerolls = typeof e.missionRerolls == "number" ? Math.max(0, Math.floor(e.missionRerolls)) : 1, this.activeChallengeId = null, this.unlockedRewardIds = new Set(e.unlockedRewardIds), e.version !== wo && this.persist();
12634
12687
  }
12635
12688
  getKnownMissionIds(e) {
@@ -12637,7 +12690,7 @@ class Oo {
12637
12690
  return a.length > 0 ? a : this.definitions.missions.slice(0, qe).map((i) => i.id);
12638
12691
  }
12639
12692
  registerStoredMission(e) {
12640
- this.missionDefinitions.set(e.id, e), this.progress.get("mission").set(e.id, S());
12693
+ this.missionDefinitions.set(e.id, e), this.progress.get("mission").set(e.id, b());
12641
12694
  }
12642
12695
  loadProgress(e, t) {
12643
12696
  const a = this.progress.get(e);
@@ -12676,14 +12729,14 @@ class jo extends Oo {
12676
12729
  }
12677
12730
  claim(e, t) {
12678
12731
  if (e !== "mission") return !1;
12679
- const a = this.getDefinition(e, t), i = this.progress.get(e).get(t) ?? S();
12732
+ const a = this.getDefinition(e, t), i = this.progress.get(e).get(t) ?? b();
12680
12733
  if (!i.completed || i.claimed) return !1;
12681
12734
  for (const n of a.rewards) this.applyReward(n);
12682
12735
  const o = i.claims + 1;
12683
12736
  return this.progress.get(e).set(t, No(e, a, i, o)), this.persist(), this.notify({ kind: e, id: t, type: "claimed" }), !0;
12684
12737
  }
12685
12738
  debugComplete(e, t) {
12686
- const a = this.getDefinition(e, t), i = this.progress.get(e), o = i.get(t) ?? S();
12739
+ const a = this.getDefinition(e, t), i = this.progress.get(e), o = i.get(t) ?? b();
12687
12740
  return i.set(t, {
12688
12741
  ...o,
12689
12742
  progress: a.condition.target,
@@ -12698,7 +12751,7 @@ class jo extends Oo {
12698
12751
  for (const i of t) this.updateDefinition(i, a);
12699
12752
  }
12700
12753
  updateDefinition(e, t) {
12701
- const a = this.progress.get(e.kind), i = a.get(e.id) ?? S();
12754
+ const a = this.progress.get(e.kind), i = a.get(e.id) ?? b();
12702
12755
  if (i.completed || !_o(e.condition, t)) return;
12703
12756
  const o = Math.max(1, Math.floor(t.amount ?? 1)), n = Lo(e.condition.event, i.progress, o), s = n >= e.condition.target;
12704
12757
  a.set(e.id, {
@@ -13643,7 +13696,7 @@ const rn = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
13643
13696
  const t = e.right - e.left, a = e.bottom - e.top, i = gt(e);
13644
13697
  let o = Me(r) * i;
13645
13698
  return o <= t ? { x: e.left + o, y: e.top } : (o -= t, o <= a ? { x: e.right, y: e.top + o } : (o -= a, o <= t ? { x: e.right - o, y: e.bottom } : (o -= t, { x: e.left, y: e.bottom - o })));
13646
- }, bn = (r, e) => {
13699
+ }, Sn = (r, e) => {
13647
13700
  const t = e.right - e.left, a = e.bottom - e.top;
13648
13701
  return [
13649
13702
  {
@@ -13663,14 +13716,14 @@ const rn = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
13663
13716
  progress: 0.75 + (1 - Math.max(0, Math.min(1, (r.y - e.top) / a))) * 0.25
13664
13717
  }
13665
13718
  ].reduce((o, n) => n.distance < o.distance ? n : o).progress;
13666
- }, Sn = (r, e) => {
13719
+ }, bn = (r, e) => {
13667
13720
  const t = Me(r);
13668
13721
  return t < 0.25 ? 0 : t < 0.5 ? Math.PI / 2 : t < 0.75 ? Math.PI : -Math.PI / 2;
13669
13722
  }, Cn = (r, e) => {
13670
13723
  const t = r.variantState;
13671
13724
  if (t.initialized === 1) return;
13672
13725
  const a = mt(r, e.width, e.height);
13673
- t.initialized = 1, t.phase = 0, t.progress = bn(r.position, a), t.direction = Math.random() < 0.5 ? 1 : -1, t.remaining = 0.25, t.perimeterSpeed = 520, t.chargeSpeed = 560;
13726
+ t.initialized = 1, t.phase = 0, t.progress = Sn(r.position, a), t.direction = Math.random() < 0.5 ? 1 : -1, t.remaining = 0.25, t.perimeterSpeed = 520, t.chargeSpeed = 560;
13674
13727
  }, An = (r, e) => {
13675
13728
  const t = r.variantState;
13676
13729
  t.phase = 1;
@@ -13683,7 +13736,7 @@ const rn = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
13683
13736
  return;
13684
13737
  }
13685
13738
  r.position = xn(t.progress, a), r.velocity = { x: 0, y: 0 };
13686
- const o = Sn(t.progress);
13739
+ const o = bn(t.progress);
13687
13740
  r.rotation = (t.direction ?? 1) > 0 ? o : o + Math.PI;
13688
13741
  }, Rn = (r, e) => {
13689
13742
  r.isGrabbed || r.isThrown || (Cn(r, e), r.variantState.phase === 0 && In(r, e));
@@ -14077,7 +14130,7 @@ const rn = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
14077
14130
  canBeDamagedByCore: !0,
14078
14131
  canBeKilledByCoreRepelWave: !1
14079
14132
  }
14080
- ], be = new Fo({
14133
+ ], Se = new Fo({
14081
14134
  enemies: Kn,
14082
14135
  variants: [...Wn, ...qn, ...$n, ...Yn, ...Fn, ...Zn],
14083
14136
  areas: [
@@ -14156,7 +14209,7 @@ const rn = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
14156
14209
  ],
14157
14210
  tutorials: Gn
14158
14211
  });
14159
- be.validate();
14212
+ Se.validate();
14160
14213
  class Jn {
14161
14214
  canvas;
14162
14215
  context;
@@ -14642,19 +14695,19 @@ class vs {
14642
14695
  }
14643
14696
  function fs(r, e) {
14644
14697
  const t = new L("mission-specimen");
14645
- return xs(t, r), bs(t, r, e), t.behavior = Ss(r.behavior, e?.behaviorOverrides), t.position = { x: 0, y: 0 }, t.active = !0, t;
14698
+ return xs(t, r), Ss(t, r, e), t.behavior = bs(r.behavior, e?.behaviorOverrides), t.position = { x: 0, y: 0 }, t.active = !0, t;
14646
14699
  }
14647
14700
  function xs(r, e) {
14648
14701
  r.type = e.id, r.radius = e.radius;
14649
14702
  }
14650
- function bs(r, e, t) {
14703
+ function Ss(r, e, t) {
14651
14704
  if (t) {
14652
14705
  r.variantId = t.id, r.variantRendererId = t.rendererId ?? null, r.color = t.color ?? e.color, r.accentColor = t.accentColor ?? null, r.eyeProfile = t.eyeProfile ?? e.eyeProfile, r.visualProfile = t.visualProfile ?? "default";
14653
14706
  return;
14654
14707
  }
14655
14708
  r.variantId = null, r.variantRendererId = null, r.color = e.color, r.accentColor = null, r.eyeProfile = e.eyeProfile, r.visualProfile = "default";
14656
14709
  }
14657
- function Ss(r, e) {
14710
+ function bs(r, e) {
14658
14711
  return { ...r, ...e ?? {} };
14659
14712
  }
14660
14713
  function Cs(r, e) {
@@ -15384,7 +15437,7 @@ function Ys(r, e) {
15384
15437
  }
15385
15438
  function Zs(r) {
15386
15439
  const e = Ti();
15387
- r.configManager = new N(), r.content = be, 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(be), r.bossEncounter = new Ko(ht());
15440
+ 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());
15388
15441
  }
15389
15442
  function Js(r, e) {
15390
15443
  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());
@@ -15783,16 +15836,16 @@ function fl(r, e) {
15783
15836
  t.effectId && vl[t.effectId](e, t);
15784
15837
  }
15785
15838
  function xl(r) {
15786
- bl(r), Sl(r);
15839
+ Sl(r), bl(r);
15787
15840
  const e = Cl(r);
15788
15841
  wl(r, e);
15789
15842
  }
15790
- function bl(r) {
15843
+ function Sl(r) {
15791
15844
  r.eventBus.on("onCoreDamaged", () => {
15792
15845
  r.settingsModal.isHapticsEnabled() && r.platform.haptics.notification("error");
15793
15846
  });
15794
15847
  }
15795
- function Sl(r) {
15848
+ function bl(r) {
15796
15849
  r.eventBus.on("onGameOver", () => {
15797
15850
  if (!r.isDeathSequenceActive) {
15798
15851
  if (r.isChallengeRun()) {
@@ -16317,12 +16370,12 @@ function fc(r, e) {
16317
16370
  }
16318
16371
  function xc(r) {
16319
16372
  for (const e of r.enemies)
16320
- bc(r, e) && Ac(r, e);
16373
+ Sc(r, e) && Ac(r, e);
16321
16374
  }
16322
- function bc(r, e) {
16323
- return Sc(e) && Cc(r, e);
16375
+ function Sc(r, e) {
16376
+ return bc(e) && Cc(r, e);
16324
16377
  }
16325
- function Sc(r) {
16378
+ function bc(r) {
16326
16379
  return r.active && r.bossLaunchPhase === "outbound" && !r.isGrabbed && !r.isThrown && !r.wasManipulated;
16327
16380
  }
16328
16381
  function Cc(r, e) {
@@ -16498,7 +16551,7 @@ const zc = {
16498
16551
  yellowThreshold: 32,
16499
16552
  redThreshold: 256
16500
16553
  };
16501
- class Se {
16554
+ class be {
16502
16555
  id;
16503
16556
  position;
16504
16557
  velocity;
@@ -16568,7 +16621,7 @@ class Se {
16568
16621
  this.lifecycle.beginMerge(this, e);
16569
16622
  }
16570
16623
  }
16571
- class bt {
16624
+ class St {
16572
16625
  id;
16573
16626
  definition;
16574
16627
  position = { x: 0, y: 0 };
@@ -16628,7 +16681,7 @@ function Gc(r, e) {
16628
16681
  }
16629
16682
  function Vc(r) {
16630
16683
  const e = r.powerUpRegistry.getRandomOptions(3, r.geneticMemory, r.waveDirector.getAvailableEnemyIds(), r.coreRoster.getSelectedCoreId());
16631
- return e.map((t, a) => new bt("orb_" + Date.now() + "_" + a, t, a * Math.PI * 2 / e.length));
16684
+ return e.map((t, a) => new St("orb_" + Date.now() + "_" + a, t, a * Math.PI * 2 / e.length));
16632
16685
  }
16633
16686
  function Wc(r) {
16634
16687
  for (const e of r.enemies)
@@ -16637,7 +16690,7 @@ function Wc(r) {
16637
16690
  enemyId: e.type,
16638
16691
  ...e.variantId ? { variantId: e.variantId } : {},
16639
16692
  coreId: r.coreRoster.getSelectedCoreId()
16640
- }), r.experienceOrbs.push(new Se(e.position, 1, r.configManager.getConfig().experience)), r.getEcosomaDropPolicy().shouldDrop(r.progressBar.getLevel()) && r.ecosomaOrbs.push(new ft(e.position)));
16693
+ }), 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)));
16641
16694
  }
16642
16695
  function qc(r, e) {
16643
16696
  r.codex.recordSeen(e.type), e.variantId && r.isEnemyVisible(e) && r.codex.recordVariant(e.type, e.variantId);
@@ -16663,7 +16716,7 @@ class Ze {
16663
16716
  }
16664
16717
  function Zc(r, e) {
16665
16718
  const t = r.configManager.getConfig();
16666
- Se.attractNearby(r.experienceOrbs, t.experience, e), Se.mergeNearby(r.experienceOrbs, t.experience.mergeDistance);
16719
+ be.attractNearby(r.experienceOrbs, t.experience, e), be.mergeNearby(r.experienceOrbs, t.experience.mergeDistance);
16667
16720
  for (const a of r.experienceOrbs) Jc(r, a, e, t.magnet);
16668
16721
  r.experienceOrbs = r.experienceOrbs.filter((a) => a.active);
16669
16722
  }
@@ -16731,7 +16784,7 @@ function id(r) {
16731
16784
  const e = r.powerUpRegistry.getRandomOptions(3, r.geneticMemory, r.waveDirector.getAvailableEnemyIds(), r.coreRoster.getSelectedCoreId());
16732
16785
  r.orbitingOrbs = e.map((t, a) => {
16733
16786
  const i = a * Math.PI * 2 / e.length;
16734
- return new bt(`orb_${Date.now()}_${a}`, t, i);
16787
+ return new St(`orb_${Date.now()}_${a}`, t, i);
16735
16788
  });
16736
16789
  }
16737
16790
  function od(r) {
@@ -229,6 +229,8 @@ export interface Translations {
229
229
  coreRosterSkillPoints: string;
230
230
  coreRosterNext: string;
231
231
  coreRosterNoNext: string;
232
+ coreRosterScrollUp: string;
233
+ coreRosterScrollDown: string;
232
234
  coreOriginStyleDescription: string;
233
235
  coreLauncherTitle: string;
234
236
  coreLauncherDescription: string;