@gamebob/axon-surge 0.36.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/axon-surge.js +604 -388
- package/dist/challenges/ChallengeSpawnProfile.d.ts +11 -0
- package/dist/challenges/ChallengeSpawnProfile.d.ts.map +1 -0
- package/dist/content/ContentRegistry.d.ts +1 -0
- package/dist/content/ContentRegistry.d.ts.map +1 -1
- package/dist/content/ContentTypes.d.ts +2 -0
- package/dist/content/ContentTypes.d.ts.map +1 -1
- package/dist/content/DefaultTutorials.d.ts.map +1 -1
- package/dist/core/GameEngineInitialization.d.ts.map +1 -1
- package/dist/director/TutorialSetup.d.ts +1 -1
- package/dist/director/TutorialSetup.d.ts.map +1 -1
- package/dist/director/WaveDirector.d.ts +3 -0
- package/dist/director/WaveDirector.d.ts.map +1 -1
- package/dist/director/WaveSpawnResolver.d.ts +4 -0
- package/dist/director/WaveSpawnResolver.d.ts.map +1 -1
- package/dist/entities/EnemyEntity.d.ts +1 -0
- package/dist/entities/EnemyEntity.d.ts.map +1 -1
- package/dist/i18n/locales.d.ts +8 -0
- package/dist/i18n/locales.d.ts.map +1 -1
- package/dist/objectives/DefaultObjectives.d.ts.map +1 -1
- package/dist/objectives/ObjectiveTypes.d.ts +4 -0
- package/dist/objectives/ObjectiveTypes.d.ts.map +1 -1
- package/dist/physics/PhysicsEngine.d.ts +2 -0
- package/dist/physics/PhysicsEngine.d.ts.map +1 -1
- package/dist/physics/handlers/CoreCollisionHandler.d.ts +5 -0
- package/dist/physics/handlers/CoreCollisionHandler.d.ts.map +1 -1
- package/dist/physics/handlers/SmasherCollisionHandler.d.ts +2 -0
- package/dist/physics/handlers/SmasherCollisionHandler.d.ts.map +1 -1
- package/dist/ui/ObjectiveToast.d.ts +3 -0
- package/dist/ui/ObjectiveToast.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/axon-surge.js
CHANGED
|
@@ -56,7 +56,7 @@ class xt {
|
|
|
56
56
|
this.core.setRepelHoverDirection(null);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
class
|
|
59
|
+
class bt {
|
|
60
60
|
constructor(e) {
|
|
61
61
|
this.config = e, this.smasherImpactsRemaining = Math.max(1, e.smasherMaxImpacts), this.smasherSecondaryImpactsRemaining = Math.max(1, e.smasherMaxImpacts);
|
|
62
62
|
}
|
|
@@ -150,7 +150,7 @@ class St {
|
|
|
150
150
|
this.repelDirection = { x: 1, y: 0 }, this.repelHoverDirection = { x: 1, y: 0 }, this.repelHoverCompression = 0, this.repelPulse = 0, this.smasherImpactsRemaining = Math.max(1, this.config.smasherMaxImpacts), this.smasherSecondaryImpactsRemaining = Math.max(1, this.config.smasherMaxImpacts), this.smasherCooldownTimer = 0, this.smasherImpactPulse = 0, this.smasherBreakPulse = 0, this.smasherRetractionOrigin = null, this.smasherArmColor = "#ffffff", this.protectionTimer = 0, this.smasherFreshGrab = !1, this.smasherUsingSecondary = !1, this.smasherCapturedType = null, this.smasherPowerTimer = 0, this.repairProgress = 0;
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
|
-
class
|
|
153
|
+
class St {
|
|
154
154
|
color = { r: 0, g: 240, b: 255 };
|
|
155
155
|
powerUpColors = [];
|
|
156
156
|
absorbPowerUpColor(e, t) {
|
|
@@ -204,7 +204,7 @@ class Ct {
|
|
|
204
204
|
}
|
|
205
205
|
class qe {
|
|
206
206
|
constructor(e, t, a) {
|
|
207
|
-
this.config = a, this.mechanics = new
|
|
207
|
+
this.config = a, this.mechanics = new bt(this.config), this.integrityController = new Ct(this.config), this.position = { x: e, y: t }, this.radius = this.config.radius, this.maxInvulnerabilityDuration = this.config.invulnerabilityDuration, this.organicSeed = Math.random() * 100;
|
|
208
208
|
}
|
|
209
209
|
position;
|
|
210
210
|
radius;
|
|
@@ -212,7 +212,7 @@ class qe {
|
|
|
212
212
|
organicSeed;
|
|
213
213
|
maxInvulnerabilityDuration;
|
|
214
214
|
mechanics;
|
|
215
|
-
appearance = new
|
|
215
|
+
appearance = new St();
|
|
216
216
|
integrityController;
|
|
217
217
|
get customColor() {
|
|
218
218
|
return this.appearance.color;
|
|
@@ -552,9 +552,9 @@ class Tt {
|
|
|
552
552
|
return a;
|
|
553
553
|
}
|
|
554
554
|
}
|
|
555
|
-
class
|
|
555
|
+
class Se {
|
|
556
556
|
static killEnemy(e, t, a, i) {
|
|
557
|
-
!e.active || e.isDying || (i && (e.codexDeathSourceType = i), e.experienceDropPending = !0, a.shockwaves.push({
|
|
557
|
+
!e.active || e.isDying || e.isChallengeInvulnerable || (i && (e.codexDeathSourceType = i), e.experienceDropPending = !0, a.shockwaves.push({
|
|
558
558
|
id: Math.random().toString(),
|
|
559
559
|
position: { ...e.position },
|
|
560
560
|
radius: 10,
|
|
@@ -621,23 +621,23 @@ const p = {
|
|
|
621
621
|
};
|
|
622
622
|
class $e {
|
|
623
623
|
static update(e) {
|
|
624
|
-
const {
|
|
625
|
-
for (const
|
|
626
|
-
if (
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
624
|
+
const { enemies: t } = e;
|
|
625
|
+
for (const a of t)
|
|
626
|
+
if (this.processEnemyImpact(e, a)) break;
|
|
627
|
+
}
|
|
628
|
+
static processEnemyImpact(e, t) {
|
|
629
|
+
if (!this.isEnemyEligible(t) || this.isAutoDeflected(e, t)) return !1;
|
|
630
|
+
const { core: a } = e, i = a.position.x - t.position.x, o = a.position.y - t.position.y;
|
|
631
|
+
return Math.hypot(i, o) > a.getHitboxRadius() + t.radius ? !1 : (t.active = !1, this.damageCore({ ...e, direction: { x: i, y: o }, threatPosition: { ...t.position }, allowProtection: !0 }), this.notifyChallengeFailure(e, t), !0);
|
|
632
|
+
}
|
|
633
|
+
static isEnemyEligible(e) {
|
|
634
|
+
return e.active && !e.isGrabbed && !e.isDying && e.launchDelay <= 0;
|
|
635
|
+
}
|
|
636
|
+
static isAutoDeflected(e, t) {
|
|
637
|
+
return this.tryAutoDeflectFragment({ core: e.core, enemy: t, shockwaves: e.shockwaves, particles: e.particles, juice: e.juice, config: e.config });
|
|
638
|
+
}
|
|
639
|
+
static notifyChallengeFailure(e, t) {
|
|
640
|
+
t.isChallengeInvulnerable && e.onChallengeFailure?.();
|
|
641
641
|
}
|
|
642
642
|
static damageCore(e) {
|
|
643
643
|
const { core: t, juice: a, eventBus: i, direction: o } = e;
|
|
@@ -806,17 +806,17 @@ const wt = (r, e) => {
|
|
|
806
806
|
onKill: e.onKill,
|
|
807
807
|
killEnemy: e.killEnemy
|
|
808
808
|
}), e.killEnemy = (t, a, i) => {
|
|
809
|
-
|
|
809
|
+
Se.killEnemy(t, a, e.effectContext(), i);
|
|
810
810
|
}, e;
|
|
811
811
|
}, Dt = (r) => {
|
|
812
|
-
const e = Mt(r), t =
|
|
812
|
+
const e = Mt(r), t = Nt(e);
|
|
813
813
|
wt(e, t);
|
|
814
|
-
},
|
|
814
|
+
}, Nt = (r) => {
|
|
815
815
|
let e = !1;
|
|
816
816
|
for (const t of r.enemies.slice())
|
|
817
|
-
|
|
817
|
+
Ot(t) && (e = !0, Lt(r, t));
|
|
818
818
|
return e;
|
|
819
|
-
},
|
|
819
|
+
}, Ot = (r) => r.active && r.isThrown && !r.isDying && r.launchDelay <= 0, Lt = (r, e) => {
|
|
820
820
|
if (_t(r, e)) {
|
|
821
821
|
r = jt(r, e);
|
|
822
822
|
return;
|
|
@@ -905,7 +905,7 @@ class Zt {
|
|
|
905
905
|
for (const a of t.enemies.slice()) {
|
|
906
906
|
if (!this.canEnterPool(a)) continue;
|
|
907
907
|
const i = a.position.x - e.position.x, o = a.position.y - e.position.y;
|
|
908
|
-
i * i + o * o > e.radius * e.radius || (
|
|
908
|
+
i * i + o * o > e.radius * e.radius || (Se.killEnemy(a, 0, t.runtime, e.sourceType), t.currentThrowState.kills++, t.onKill?.());
|
|
909
909
|
}
|
|
910
910
|
}
|
|
911
911
|
static canEnterPool(e) {
|
|
@@ -966,7 +966,12 @@ class Xt {
|
|
|
966
966
|
this.canProcessGrab(e) && this.processGrabbed(e);
|
|
967
967
|
}
|
|
968
968
|
static processRelease(e) {
|
|
969
|
-
const { releasedEnemy: t, enemies: a, core: i, context: o } = e
|
|
969
|
+
const { releasedEnemy: t, enemies: a, core: i, context: o } = e;
|
|
970
|
+
if (e.preserveCapturedEnemy) {
|
|
971
|
+
this.releasePreservedEnemy(t, i), i.preserveSmasherPower();
|
|
972
|
+
return;
|
|
973
|
+
}
|
|
974
|
+
const n = i.wasFreshSmasherGrab();
|
|
970
975
|
this.crush(t, o, 0), o.config.core.smasherCreaturePowerTier >= 2 && this.applyCreaturePower({
|
|
971
976
|
type: t.type,
|
|
972
977
|
origin: t.position,
|
|
@@ -988,7 +993,7 @@ class Xt {
|
|
|
988
993
|
const { grabbedEnemy: a, enemies: i, core: o, context: n, onArmBreak: s } = t;
|
|
989
994
|
if (!this.isImpactTarget(e, a)) return !1;
|
|
990
995
|
const c = e.position.x - a.position.x, l = e.position.y - a.position.y, d = Math.atan2(l, c);
|
|
991
|
-
return n.currentThrowState.pos = { ...a.position }, n.killEnemy(e, d, a.type), n.currentThrowState.kills += 1, n.onKill(), n.config.core.smasherCreaturePowerTier >= 1 && this.applyCreaturePower({ type: a.type, origin: a.position, enemies: i, context: n, multiplier: 1 }), this.pushImpactFeedback(a, n, c, l), this.preservesImpact(t, e) || !o.consumeSmasherImpact() ? !1 : (o.startSmasherRetraction(a.position, a.color), this.crush(a, n, d), n.currentThrowState.kills += 1, n.onKill(), s(), !0);
|
|
996
|
+
return n.currentThrowState.pos = { ...a.position }, n.killEnemy(e, d, a.type), n.currentThrowState.kills += 1, n.onKill(), n.config.core.smasherCreaturePowerTier >= 1 && this.applyCreaturePower({ type: a.type, origin: a.position, enemies: i, context: n, multiplier: 1 }), this.pushImpactFeedback(a, n, c, l), this.preservesImpact(t, e) || !o.consumeSmasherImpact() ? !1 : (o.startSmasherRetraction(a.position, a.color), t.preserveCapturedEnemy ? (this.releasePreservedEnemy(a, o), s(), !0) : (this.crush(a, n, d), n.currentThrowState.kills += 1, n.onKill(), s(), !0));
|
|
992
997
|
}
|
|
993
998
|
static isImpactTarget(e, t) {
|
|
994
999
|
if (!this.canCrushTarget(e, t)) return !1;
|
|
@@ -1005,6 +1010,16 @@ class Xt {
|
|
|
1005
1010
|
static crush(e, t, a) {
|
|
1006
1011
|
!e.active || e.isDying || t.killEnemy(e, a);
|
|
1007
1012
|
}
|
|
1013
|
+
static releasePreservedEnemy(e, t) {
|
|
1014
|
+
e.isGrabbed = !1, e.isThrown = !1, e.wasManipulated = !1, e.bossLaunchPhase = "none";
|
|
1015
|
+
const a = t.position.x - e.position.x, i = t.position.y - e.position.y, o = Math.hypot(a, i);
|
|
1016
|
+
if (o <= 1e-3) return;
|
|
1017
|
+
const n = Math.max(e.maxSpeed, Math.hypot(e.velocity.x, e.velocity.y));
|
|
1018
|
+
e.velocity = {
|
|
1019
|
+
x: a / o * n,
|
|
1020
|
+
y: i / o * n
|
|
1021
|
+
};
|
|
1022
|
+
}
|
|
1008
1023
|
static applyCreaturePower(e) {
|
|
1009
1024
|
if (e.type === "spore") return this.applyToxicPower(e);
|
|
1010
1025
|
if (e.type === "parasite") return this.applyAttractorPower(e);
|
|
@@ -1170,7 +1185,8 @@ class Qt {
|
|
|
1170
1185
|
score: c,
|
|
1171
1186
|
width: l,
|
|
1172
1187
|
height: d,
|
|
1173
|
-
config: u
|
|
1188
|
+
config: u,
|
|
1189
|
+
...e.onChallengeFailure ? { onChallengeFailure: e.onChallengeFailure } : {}
|
|
1174
1190
|
});
|
|
1175
1191
|
}
|
|
1176
1192
|
processThrownCollision(e) {
|
|
@@ -1203,7 +1219,8 @@ class Qt {
|
|
|
1203
1219
|
core: a,
|
|
1204
1220
|
context: i,
|
|
1205
1221
|
onArmBreak: e.onSmasherArmBreak ?? (() => {
|
|
1206
|
-
})
|
|
1222
|
+
}),
|
|
1223
|
+
preserveCapturedEnemy: e.preserveSmasherCapturedEnemy === !0
|
|
1207
1224
|
});
|
|
1208
1225
|
}
|
|
1209
1226
|
processEnvironmentalCollisions(e) {
|
|
@@ -1248,7 +1265,7 @@ class Qt {
|
|
|
1248
1265
|
E.merge(t, a, i, o.effectAggregation), i.length > 32 && i.splice(0, i.length - 32);
|
|
1249
1266
|
}
|
|
1250
1267
|
createRuntime(e) {
|
|
1251
|
-
const t = {}, a = (i, o, n) =>
|
|
1268
|
+
const t = {}, a = (i, o, n) => Se.killEnemy(i, o, t, n);
|
|
1252
1269
|
return Object.assign(t, {
|
|
1253
1270
|
enemies: e.enemies,
|
|
1254
1271
|
pools: e.pools,
|
|
@@ -1473,6 +1490,20 @@ class or {
|
|
|
1473
1490
|
setArea(e) {
|
|
1474
1491
|
this.spawnResolver.setArea(e), this.reset();
|
|
1475
1492
|
}
|
|
1493
|
+
setChallengeSpawnProfile(e) {
|
|
1494
|
+
this.spawnResolver.setChallengeSpawnProfile(e);
|
|
1495
|
+
}
|
|
1496
|
+
spawnInitialChallengeEnemies(e, t, a) {
|
|
1497
|
+
const i = this.spawnResolver.getChallengeSpawnProfile();
|
|
1498
|
+
return i ? i.initialEnemies.map((o) => {
|
|
1499
|
+
const n = this.pool.get();
|
|
1500
|
+
return this.factory.configureEnemy(n, o.enemyId, {
|
|
1501
|
+
spawnPos: f.getOffscreenPosition(e, t),
|
|
1502
|
+
corePos: a,
|
|
1503
|
+
variantId: o.variantId
|
|
1504
|
+
}), n.isChallengeInvulnerable = o.invulnerable === !0, n;
|
|
1505
|
+
}) : [];
|
|
1506
|
+
}
|
|
1476
1507
|
getAvailableEnemyIds() {
|
|
1477
1508
|
return this.spawnResolver.getAvailableEnemyIds();
|
|
1478
1509
|
}
|
|
@@ -1546,9 +1577,16 @@ class nr {
|
|
|
1546
1577
|
this.content = e, this.unlockState = t;
|
|
1547
1578
|
}
|
|
1548
1579
|
area = null;
|
|
1580
|
+
challengeSpawnProfile = null;
|
|
1549
1581
|
setArea(e) {
|
|
1550
1582
|
this.area = e;
|
|
1551
1583
|
}
|
|
1584
|
+
setChallengeSpawnProfile(e) {
|
|
1585
|
+
this.challengeSpawnProfile = e;
|
|
1586
|
+
}
|
|
1587
|
+
getChallengeSpawnProfile() {
|
|
1588
|
+
return this.challengeSpawnProfile;
|
|
1589
|
+
}
|
|
1552
1590
|
getAvailableEnemyIds() {
|
|
1553
1591
|
return new Set(this.getAvailableEnemyDefinitions().map((e) => e.id));
|
|
1554
1592
|
}
|
|
@@ -1591,12 +1629,14 @@ class nr {
|
|
|
1591
1629
|
return Math.max(0, this.area?.patternWeights?.[e] ?? t);
|
|
1592
1630
|
}
|
|
1593
1631
|
selectVariantForSpawn(e) {
|
|
1594
|
-
const t = this.
|
|
1595
|
-
if (
|
|
1596
|
-
const a = this.
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1632
|
+
const t = this.challengeSpawnProfile?.variantByEnemyId[e];
|
|
1633
|
+
if (t) return t;
|
|
1634
|
+
const a = this.area?.id;
|
|
1635
|
+
if (!a) return;
|
|
1636
|
+
const i = this.content.variants.values().filter((n) => n.baseEnemyId === e && (n.spawnChanceByArea[a] ?? 0) > 0);
|
|
1637
|
+
let o = Math.random();
|
|
1638
|
+
for (const n of i)
|
|
1639
|
+
if (o -= n.spawnChanceByArea[a] ?? 0, o <= 0) return n.id;
|
|
1600
1640
|
}
|
|
1601
1641
|
}
|
|
1602
1642
|
function A(r, e) {
|
|
@@ -2456,7 +2496,7 @@ class xr extends vr {
|
|
|
2456
2496
|
return `#${s(0)}${s(2)}${s(4)}`;
|
|
2457
2497
|
}
|
|
2458
2498
|
}
|
|
2459
|
-
class
|
|
2499
|
+
class br extends xr {
|
|
2460
2500
|
render(e) {
|
|
2461
2501
|
if (!this.renderer.ctx) return;
|
|
2462
2502
|
const t = this.renderer.themeManager.getPalette(), { width: a, height: i } = this.renderer.canvas, o = e.juice.getShakeOffset();
|
|
@@ -2532,7 +2572,7 @@ class Sr extends xr {
|
|
|
2532
2572
|
}), this.drawFloatingTexts(d), u && this.drawAreaIntro(u, t), h?.phase === "intro" && this.drawBossIntro(h, t, o.pulsePhase), m.flashAlpha > 0 && (g.fillStyle = `rgba(255, 255, 255, ${m.flashAlpha})`, g.fillRect(0, 0, a, i));
|
|
2533
2573
|
}
|
|
2534
2574
|
}
|
|
2535
|
-
class
|
|
2575
|
+
class Sr {
|
|
2536
2576
|
maxDistance = 800;
|
|
2537
2577
|
maxThickness = 18;
|
|
2538
2578
|
minThickness = 5;
|
|
@@ -2795,18 +2835,18 @@ function Mr(r) {
|
|
|
2795
2835
|
e.save(), e.strokeStyle = o.effectHighlight, e.globalAlpha = 0.22, e.lineWidth = 1.5, e.beginPath(), e.arc(0, 0, n, 0, Math.PI * 2), e.stroke(), e.globalAlpha = 1, Dr(e, i, t.radius);
|
|
2796
2836
|
for (let l = 0; l < s; l += 1) {
|
|
2797
2837
|
const d = c + l * Math.PI * 2 / s, u = Math.cos(d) * n, h = Math.sin(d) * n, m = t.radius * (0.2 + Math.sin(a * 4 + l) * 0.025);
|
|
2798
|
-
|
|
2838
|
+
Nr({ ctx: e, palette: o, color: i, x: u, y: h, radius: m });
|
|
2799
2839
|
}
|
|
2800
2840
|
e.restore();
|
|
2801
2841
|
}
|
|
2802
2842
|
function Dr(r, e, t) {
|
|
2803
2843
|
r.fillStyle = e, r.beginPath(), r.arc(0, 0, t * 0.5, 0, Math.PI * 2), r.fill();
|
|
2804
2844
|
}
|
|
2805
|
-
function
|
|
2845
|
+
function Nr(r) {
|
|
2806
2846
|
const { ctx: e, palette: t, color: a, x: i, y: o, radius: n } = r;
|
|
2807
2847
|
e.fillStyle = a, e.beginPath(), e.arc(i, o, n, 0, Math.PI * 2), e.fill(), e.fillStyle = t.effectHighlight, e.globalAlpha = 0.65, e.beginPath(), e.arc(i - n * 0.25, o - n * 0.25, n * 0.24, 0, Math.PI * 2), e.fill(), e.globalAlpha = 1;
|
|
2808
2848
|
}
|
|
2809
|
-
class
|
|
2849
|
+
class Or extends _ {
|
|
2810
2850
|
drawShape(e) {
|
|
2811
2851
|
const { ctx: t, enemy: a } = e;
|
|
2812
2852
|
t.beginPath(), t.arc(0, 0, a.radius, 0, Math.PI * 2), this.isOutline(e) ? (t.stroke(), P(e)) : t.fill();
|
|
@@ -2994,7 +3034,7 @@ class $r {
|
|
|
2994
3034
|
renderers = /* @__PURE__ */ new Map();
|
|
2995
3035
|
variantStyles = /* @__PURE__ */ new Map([["mononreuronal", "outline"]]);
|
|
2996
3036
|
constructor(e) {
|
|
2997
|
-
this.register("circle", new
|
|
3037
|
+
this.register("circle", new Or()), this.register("piercer", new Ur()), this.register("spore", new Wr()), this.register("cluster", new kr()), this.register("parasite", new Hr()), this.register("heavy", new Lr(e));
|
|
2998
3038
|
}
|
|
2999
3039
|
register(e, t) {
|
|
3000
3040
|
this.renderers.set(e, t);
|
|
@@ -3435,9 +3475,9 @@ class ea {
|
|
|
3435
3475
|
smasherRenderer;
|
|
3436
3476
|
pulpocrataRenderer;
|
|
3437
3477
|
constructor(e, t, a) {
|
|
3438
|
-
this.canvas = e, this.ctx = e.getContext("2d"), this.themeManager = t, this.indicatorRenderer = new
|
|
3478
|
+
this.canvas = e, this.ctx = e.getContext("2d"), this.themeManager = t, this.indicatorRenderer = new Sr(), this.bgRenderer = new Cr(), this.tutorialArrowRenderer = new Ar(), this.enemyShapeRenderer = new J(a), this.coreDeathEffectRenderer = new Yr(), this.smasherRenderer = new Jr(), this.pulpocrataRenderer = new Xe(), this.configManager = a;
|
|
3439
3479
|
}
|
|
3440
|
-
drawings = new
|
|
3480
|
+
drawings = new br(this);
|
|
3441
3481
|
renderCorePortrait(e) {
|
|
3442
3482
|
this.drawings.renderCorePortrait(e);
|
|
3443
3483
|
}
|
|
@@ -6963,195 +7003,315 @@ const ia = {
|
|
|
6963
7003
|
objectiveChallengeFirstSurgeTitle: "EL NÚCLEO HACE UNA COSA",
|
|
6964
7004
|
objectiveChallengeFirstSurgeDescription: "Una run de la sopa: llega al nivel 3 sin cambiar las reglas.",
|
|
6965
7005
|
objectiveChallengeFirstSurgeRule: "Usa El Lanzador y sobrevive hasta el nivel 3.",
|
|
7006
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7007
|
+
objectiveChallengeExcaliburDescription: "Usa The Smasher, conserva la única espada roja y derrota al boss.",
|
|
7008
|
+
objectiveChallengeExcaliburRule: "La espada roja sobrevive al soltarla; los Mononreuronal no se pueden controlar.",
|
|
6966
7009
|
objectiveChallengeSoupNoFeetTitle: "LA SOPA NO TIENE PIES",
|
|
6967
7010
|
objectiveChallengeSoupNoFeetDescription: "La sopa insiste en moverse. Llega al nivel 4 con El Lanzador.",
|
|
6968
7011
|
objectiveChallengeSoupNoFeetRule: "Mantén El Lanzador y llega al nivel 4.",
|
|
6969
7012
|
objectiveChallengeNotButtonTitle: "NO TOQUES ESE BOTÓN",
|
|
6970
7013
|
objectiveChallengeNotButtonDescription: "La costra empieza a hablar. Llega al nivel 5 sin rerolls.",
|
|
6971
7014
|
objectiveChallengeNotButtonRule: "Entra en La Costra y sobrevive hasta el nivel 5.",
|
|
6972
|
-
objectiveChallengeNoRerolls: "Sin rerolls: las decisiones se quedan pegadas."
|
|
7015
|
+
objectiveChallengeNoRerolls: "Sin rerolls: las decisiones se quedan pegadas.",
|
|
7016
|
+
objectiveChallengeFailed: "DESAFÍO PERDIDO",
|
|
7017
|
+
objectiveChallengeFailedDescription: "La espada alcanzó al Núcleo. La run ha terminado.",
|
|
7018
|
+
tutorialExcaliburStep1Text: "DESENVAINA LA ESPADA, MI REY",
|
|
7019
|
+
tutorialExcaliburStep2Text: "ARRÁSTRALA CONTRA EL ENEMIGO. QUE LA SANGRE SEA DE OTRO.",
|
|
7020
|
+
tutorialExcaliburWarning: "NO LA SUELTES HACIA EL NÚCLEO: HASTA UNA ESPADA INVENCIBLE PUEDE TENER MALAS MANERAS."
|
|
6973
7021
|
},
|
|
6974
7022
|
en: {
|
|
6975
7023
|
challengeModeHint: "ENTRIES TO PRESET RUNS",
|
|
6976
7024
|
objectiveChallengeFirstSurgeTitle: "THE CORE DOES A THING",
|
|
6977
7025
|
objectiveChallengeFirstSurgeDescription: "A Soup run: reach level 3 without changing the rules.",
|
|
6978
7026
|
objectiveChallengeFirstSurgeRule: "Use The Launcher and survive to level 3.",
|
|
7027
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7028
|
+
objectiveChallengeExcaliburDescription: "Use The Smasher, keep the single red sword alive, and defeat the boss.",
|
|
7029
|
+
objectiveChallengeExcaliburRule: "The red sword survives release; Mononreuronal enemies cannot be controlled.",
|
|
6979
7030
|
objectiveChallengeSoupNoFeetTitle: "THE SOUP HAS NO FEET",
|
|
6980
7031
|
objectiveChallengeSoupNoFeetDescription: "The soup insists on moving. Reach level 4 with The Launcher.",
|
|
6981
7032
|
objectiveChallengeSoupNoFeetRule: "Keep The Launcher and reach level 4.",
|
|
6982
7033
|
objectiveChallengeNotButtonTitle: "DO NOT TOUCH THAT BUTTON",
|
|
6983
7034
|
objectiveChallengeNotButtonDescription: "The Scab starts talking. Reach level 5 without rerolls.",
|
|
6984
7035
|
objectiveChallengeNotButtonRule: "Enter The Scab and survive to level 5.",
|
|
6985
|
-
objectiveChallengeNoRerolls: "No rerolls: decisions stay stuck."
|
|
7036
|
+
objectiveChallengeNoRerolls: "No rerolls: decisions stay stuck.",
|
|
7037
|
+
objectiveChallengeFailed: "CHALLENGE LOST",
|
|
7038
|
+
objectiveChallengeFailedDescription: "The sword reached the Core. The run is over.",
|
|
7039
|
+
tutorialExcaliburStep1Text: "DRAW THE SWORD, MY KING",
|
|
7040
|
+
tutorialExcaliburStep2Text: "DRAG IT INTO THE ENEMY. LET SOMEONE ELSE BLEED.",
|
|
7041
|
+
tutorialExcaliburWarning: "DO NOT RELEASE IT TOWARD THE CORE: EVEN AN INVINCIBLE SWORD CAN HAVE BAD MANNERS."
|
|
6986
7042
|
},
|
|
6987
7043
|
fr: {
|
|
6988
7044
|
challengeModeHint: "ENTRÉES VERS DES RUNS PRÉRÉGLÉES",
|
|
6989
7045
|
objectiveChallengeFirstSurgeTitle: "LE NOYAU FAIT UN TRUC",
|
|
6990
7046
|
objectiveChallengeFirstSurgeDescription: "Une run de la Soupe : atteignez le niveau 3 sans changer les règles.",
|
|
6991
7047
|
objectiveChallengeFirstSurgeRule: "Utilisez le Lanceur et survivez jusqu'au niveau 3.",
|
|
7048
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7049
|
+
objectiveChallengeExcaliburDescription: "Utilisez The Smasher, gardez l'unique épée rouge en vie et battez le boss.",
|
|
7050
|
+
objectiveChallengeExcaliburRule: "L'épée rouge survit lorsqu'elle est relâchée ; les Mononreuronal ne peuvent pas être contrôlés.",
|
|
6992
7051
|
objectiveChallengeSoupNoFeetTitle: "LA SOUPE N'A PAS DE PIEDS",
|
|
6993
7052
|
objectiveChallengeSoupNoFeetDescription: "La Soupe insiste pour bouger. Atteignez le niveau 4 avec le Lanceur.",
|
|
6994
7053
|
objectiveChallengeSoupNoFeetRule: "Gardez le Lanceur et atteignez le niveau 4.",
|
|
6995
7054
|
objectiveChallengeNotButtonTitle: "NE TOUCHEZ PAS CE BOUTON",
|
|
6996
7055
|
objectiveChallengeNotButtonDescription: "La Croûte commence à parler. Atteignez le niveau 5 sans relance.",
|
|
6997
7056
|
objectiveChallengeNotButtonRule: "Entrez dans la Croûte et survivez jusqu'au niveau 5.",
|
|
6998
|
-
objectiveChallengeNoRerolls: "Sans relance : les décisions restent collées."
|
|
7057
|
+
objectiveChallengeNoRerolls: "Sans relance : les décisions restent collées.",
|
|
7058
|
+
objectiveChallengeFailed: "DÉFI PERDU",
|
|
7059
|
+
objectiveChallengeFailedDescription: "L'épée a atteint le Noyau. La run est terminée.",
|
|
7060
|
+
tutorialExcaliburStep1Text: "DÉGAINE L'ÉPÉE, MON ROI",
|
|
7061
|
+
tutorialExcaliburStep2Text: "TRAÎNE-LA CONTRE L'ENNEMI. QUE QUELQU'UN D'AUTRE SAIGNE.",
|
|
7062
|
+
tutorialExcaliburWarning: "NE LA RELÂCHE PAS VERS LE NOYAU : MÊME UNE ÉPÉE INVINCIBLE PEUT MANQUER DE MANIÈRES."
|
|
6999
7063
|
},
|
|
7000
7064
|
de: {
|
|
7001
7065
|
challengeModeHint: "EINTRÄGE FÜR VORGEFERTIGTE RUNS",
|
|
7002
7066
|
objectiveChallengeFirstSurgeTitle: "DER KERN MACHT EIN DING",
|
|
7003
7067
|
objectiveChallengeFirstSurgeDescription: "Ein Suppen-Run: Erreiche Level 3 ohne die Regeln zu ändern.",
|
|
7004
7068
|
objectiveChallengeFirstSurgeRule: "Nutze den Werfer und überlebe bis Level 3.",
|
|
7069
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7070
|
+
objectiveChallengeExcaliburDescription: "Nutze The Smasher, halte das einzige rote Schwert am Leben und besiege den Boss.",
|
|
7071
|
+
objectiveChallengeExcaliburRule: "Das rote Schwert überlebt das Loslassen; Mononreuronal können nicht kontrolliert werden.",
|
|
7005
7072
|
objectiveChallengeSoupNoFeetTitle: "DIE SUPPE HAT KEINE FÜSSE",
|
|
7006
7073
|
objectiveChallengeSoupNoFeetDescription: "Die Suppe will sich bewegen. Erreiche Level 4 mit dem Werfer.",
|
|
7007
7074
|
objectiveChallengeSoupNoFeetRule: "Behalte den Werfer und erreiche Level 4.",
|
|
7008
7075
|
objectiveChallengeNotButtonTitle: "DRÜCK DIESEN KNOPF NICHT",
|
|
7009
7076
|
objectiveChallengeNotButtonDescription: "Die Kruste beginnt zu sprechen. Erreiche Level 5 ohne Neuwürfe.",
|
|
7010
7077
|
objectiveChallengeNotButtonRule: "Betritt die Kruste und überlebe bis Level 5.",
|
|
7011
|
-
objectiveChallengeNoRerolls: "Keine Neuwürfe: Entscheidungen kleben fest."
|
|
7078
|
+
objectiveChallengeNoRerolls: "Keine Neuwürfe: Entscheidungen kleben fest.",
|
|
7079
|
+
objectiveChallengeFailed: "HERAUSFORDERUNG VERLOREN",
|
|
7080
|
+
objectiveChallengeFailedDescription: "Das Schwert hat den Kern erreicht. Der Lauf ist vorbei.",
|
|
7081
|
+
tutorialExcaliburStep1Text: "ZIEH DAS SCHWERT, MEIN KÖNIG",
|
|
7082
|
+
tutorialExcaliburStep2Text: "ZIEH ES IN DEN FEIND. JEMAND ANDERES SOLL BLUTEN.",
|
|
7083
|
+
tutorialExcaliburWarning: "LASS ES NICHT AUF DEN KERN LOS: AUCH EIN UNVERWUNDBARES SCHWERT KANN SCHLECHTE MANIEREN HABEN."
|
|
7012
7084
|
},
|
|
7013
7085
|
it: {
|
|
7014
7086
|
challengeModeHint: "INGRESSI A RUN PREIMPOSTATE",
|
|
7015
7087
|
objectiveChallengeFirstSurgeTitle: "IL NUCLEO FA UNA COSA",
|
|
7016
7088
|
objectiveChallengeFirstSurgeDescription: "Una run della Zuppa: raggiungi il livello 3 senza cambiare le regole.",
|
|
7017
7089
|
objectiveChallengeFirstSurgeRule: "Usa il Lanciatore e sopravvivi fino al livello 3.",
|
|
7090
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7091
|
+
objectiveChallengeExcaliburDescription: "Usa The Smasher, mantieni viva l'unica spada rossa e sconfiggi il boss.",
|
|
7092
|
+
objectiveChallengeExcaliburRule: "La spada rossa sopravvive quando viene lasciata; i Mononreuronal non possono essere controllati.",
|
|
7018
7093
|
objectiveChallengeSoupNoFeetTitle: "LA ZUPPA NON HA PIEDI",
|
|
7019
7094
|
objectiveChallengeSoupNoFeetDescription: "La Zuppa insiste per muoversi. Raggiungi il livello 4 col Lanciatore.",
|
|
7020
7095
|
objectiveChallengeSoupNoFeetRule: "Mantieni il Lanciatore e raggiungi il livello 4.",
|
|
7021
7096
|
objectiveChallengeNotButtonTitle: "NON TOCCARE QUEL PULSANTE",
|
|
7022
7097
|
objectiveChallengeNotButtonDescription: "La Crosta inizia a parlare. Raggiungi il livello 5 senza reroll.",
|
|
7023
7098
|
objectiveChallengeNotButtonRule: "Entra nella Crosta e sopravvivi fino al livello 5.",
|
|
7024
|
-
objectiveChallengeNoRerolls: "Niente reroll: le decisioni restano incollate."
|
|
7099
|
+
objectiveChallengeNoRerolls: "Niente reroll: le decisioni restano incollate.",
|
|
7100
|
+
objectiveChallengeFailed: "SFIDA PERSA",
|
|
7101
|
+
objectiveChallengeFailedDescription: "La spada ha raggiunto il Nucleo. La run è finita.",
|
|
7102
|
+
tutorialExcaliburStep1Text: "SFODERA LA SPADA, MIO RE",
|
|
7103
|
+
tutorialExcaliburStep2Text: "TRASCINALA CONTRO IL NEMICO. CHE SANGUINI QUALCUN ALTRO.",
|
|
7104
|
+
tutorialExcaliburWarning: "NON LASCIARLA ANDARE VERSO IL NUCLEO: ANCHE UNA SPADA INVINCIBILE PUÒ AVERE CATTIVE MANIERE."
|
|
7025
7105
|
},
|
|
7026
7106
|
pt: {
|
|
7027
7107
|
challengeModeHint: "ENTRADAS PARA RUNS PRÉ-CONFIGURADAS",
|
|
7028
7108
|
objectiveChallengeFirstSurgeTitle: "O NÚCLEO FAZ UMA COISA",
|
|
7029
7109
|
objectiveChallengeFirstSurgeDescription: "Uma run da Sopa: chega ao nível 3 sem mudar as regras.",
|
|
7030
7110
|
objectiveChallengeFirstSurgeRule: "Usa o Lançador e sobrevive até ao nível 3.",
|
|
7111
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7112
|
+
objectiveChallengeExcaliburDescription: "Usa The Smasher, mantém viva a única espada vermelha e derrota o boss.",
|
|
7113
|
+
objectiveChallengeExcaliburRule: "A espada vermelha sobrevive quando é largada; os Mononreuronal não podem ser controlados.",
|
|
7031
7114
|
objectiveChallengeSoupNoFeetTitle: "A SOPA NÃO TEM PÉS",
|
|
7032
7115
|
objectiveChallengeSoupNoFeetDescription: "A sopa insiste em mexer-se. Chega ao nível 4 com o Lançador.",
|
|
7033
7116
|
objectiveChallengeSoupNoFeetRule: "Mantém o Lançador e chega ao nível 4.",
|
|
7034
7117
|
objectiveChallengeNotButtonTitle: "NÃO TOQUES NESSE BOTÃO",
|
|
7035
7118
|
objectiveChallengeNotButtonDescription: "A Crosta começa a falar. Chega ao nível 5 sem rerolls.",
|
|
7036
7119
|
objectiveChallengeNotButtonRule: "Entra na Crosta e sobrevive até ao nível 5.",
|
|
7037
|
-
objectiveChallengeNoRerolls: "Sem rerolls: as decisões ficam coladas."
|
|
7120
|
+
objectiveChallengeNoRerolls: "Sem rerolls: as decisões ficam coladas.",
|
|
7121
|
+
objectiveChallengeFailed: "DESAFIO PERDIDO",
|
|
7122
|
+
objectiveChallengeFailedDescription: "A espada alcançou o Núcleo. A run terminou.",
|
|
7123
|
+
tutorialExcaliburStep1Text: "DESEMBANHA A ESPADA, MEU REI",
|
|
7124
|
+
tutorialExcaliburStep2Text: "ARRASTA-A CONTRA O INIMIGO. QUE OUTRO SANGRE.",
|
|
7125
|
+
tutorialExcaliburWarning: "NÃO A SOLTES CONTRA O NÚCLEO: ATÉ UMA ESPADA INVENCÍVEL PODE TER MÁS MANEIRAS."
|
|
7038
7126
|
},
|
|
7039
7127
|
nl: {
|
|
7040
7128
|
challengeModeHint: "TOEGANG TOT VOORAF INGESTELDE RUNS",
|
|
7041
7129
|
objectiveChallengeFirstSurgeTitle: "DE KERN DOET EEN DING",
|
|
7042
7130
|
objectiveChallengeFirstSurgeDescription: "Een Soep-run: bereik niveau 3 zonder de regels te veranderen.",
|
|
7043
7131
|
objectiveChallengeFirstSurgeRule: "Gebruik de Werper en overleef tot niveau 3.",
|
|
7132
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7133
|
+
objectiveChallengeExcaliburDescription: "Gebruik The Smasher, houd het enige rode zwaard in leven en versla de baas.",
|
|
7134
|
+
objectiveChallengeExcaliburRule: "Het rode zwaard overleeft het loslaten; Mononreuronal kunnen niet worden bestuurd.",
|
|
7044
7135
|
objectiveChallengeSoupNoFeetTitle: "DE SOEP HEEFT GEEN VOETEN",
|
|
7045
7136
|
objectiveChallengeSoupNoFeetDescription: "De soep wil blijven bewegen. Bereik niveau 4 met de Werper.",
|
|
7046
7137
|
objectiveChallengeSoupNoFeetRule: "Behoud de Werper en bereik niveau 4.",
|
|
7047
7138
|
objectiveChallengeNotButtonTitle: "RAAK DIE KNOP NIET AAN",
|
|
7048
7139
|
objectiveChallengeNotButtonDescription: "De Korst begint te praten. Bereik niveau 5 zonder rerolls.",
|
|
7049
7140
|
objectiveChallengeNotButtonRule: "Ga de Korst in en overleef tot niveau 5.",
|
|
7050
|
-
objectiveChallengeNoRerolls: "Geen rerolls: beslissingen blijven plakken."
|
|
7141
|
+
objectiveChallengeNoRerolls: "Geen rerolls: beslissingen blijven plakken.",
|
|
7142
|
+
objectiveChallengeFailed: "UITDAGING VERLOREN",
|
|
7143
|
+
objectiveChallengeFailedDescription: "Het zwaard bereikte de Kern. De run is voorbij.",
|
|
7144
|
+
tutorialExcaliburStep1Text: "TREK HET ZWAARD, MIJN KONING",
|
|
7145
|
+
tutorialExcaliburStep2Text: "SLEEP HET TEGEN DE VIJAND. LAAT IEMAND ANDERS BLOEDEN.",
|
|
7146
|
+
tutorialExcaliburWarning: "LAAT HET NIET NAAR DE KERN LOS: OOK EEN ONAANTASTBAAR ZWAARD KAN SLECHTE MANIEREN HEBBEN."
|
|
7051
7147
|
},
|
|
7052
7148
|
sv: {
|
|
7053
7149
|
challengeModeHint: "INGÅNGAR TILL FÖRINSTÄLLDA RUNS",
|
|
7054
7150
|
objectiveChallengeFirstSurgeTitle: "KÄRNAN GÖR EN SAK",
|
|
7055
7151
|
objectiveChallengeFirstSurgeDescription: "En Soppa-run: nå nivå 3 utan att ändra reglerna.",
|
|
7056
7152
|
objectiveChallengeFirstSurgeRule: "Använd Kastaren och överlev till nivå 3.",
|
|
7153
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7154
|
+
objectiveChallengeExcaliburDescription: "Använd The Smasher, håll det enda röda svärdet vid liv och besegra bossen.",
|
|
7155
|
+
objectiveChallengeExcaliburRule: "Det röda svärdet överlever när det släpps; Mononreuronal kan inte kontrolleras.",
|
|
7057
7156
|
objectiveChallengeSoupNoFeetTitle: "SOPPAN HAR INGA FÖTTER",
|
|
7058
7157
|
objectiveChallengeSoupNoFeetDescription: "Soppan vill röra sig. Nå nivå 4 med Kastaren.",
|
|
7059
7158
|
objectiveChallengeSoupNoFeetRule: "Behåll Kastaren och nå nivå 4.",
|
|
7060
7159
|
objectiveChallengeNotButtonTitle: "RÖR INTE DEN DÄR KNAPPEN",
|
|
7061
7160
|
objectiveChallengeNotButtonDescription: "Skorpan börjar prata. Nå nivå 5 utan omkastningar.",
|
|
7062
7161
|
objectiveChallengeNotButtonRule: "Gå in i Skorpan och överlev till nivå 5.",
|
|
7063
|
-
objectiveChallengeNoRerolls: "Inga omkastningar: besluten sitter fast."
|
|
7162
|
+
objectiveChallengeNoRerolls: "Inga omkastningar: besluten sitter fast.",
|
|
7163
|
+
objectiveChallengeFailed: "UTMANING FÖRLORAD",
|
|
7164
|
+
objectiveChallengeFailedDescription: "Svärdet nådde kärnan. Runen är över.",
|
|
7165
|
+
tutorialExcaliburStep1Text: "DRA SVÄRDET, MIN KUNG",
|
|
7166
|
+
tutorialExcaliburStep2Text: "DRA DET MOT FIENDEN. LÅT NÅGON ANNAN BLÖDA.",
|
|
7167
|
+
tutorialExcaliburWarning: "SLÄPP DET INTE MOT KÄRNAN: ÄVEN ETT ODÖDLIGT SVÄRD KAN HA DÅLIGA MANÉR."
|
|
7064
7168
|
},
|
|
7065
7169
|
pl: {
|
|
7066
7170
|
challengeModeHint: "WEJŚCIA DO USTAWIONYCH RUN",
|
|
7067
7171
|
objectiveChallengeFirstSurgeTitle: "RDZEŃ ROBI RZECZ",
|
|
7068
7172
|
objectiveChallengeFirstSurgeDescription: "Run z Zupą: osiągnij poziom 3 bez zmiany zasad.",
|
|
7069
7173
|
objectiveChallengeFirstSurgeRule: "Użyj Wyrzutni i przetrwaj do poziomu 3.",
|
|
7174
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7175
|
+
objectiveChallengeExcaliburDescription: "Użyj The Smashera, utrzymaj przy życiu jedyny czerwony miecz i pokonaj bossa.",
|
|
7176
|
+
objectiveChallengeExcaliburRule: "Czerwony miecz przetrwa puszczenie; Mononreuronal nie można kontrolować.",
|
|
7070
7177
|
objectiveChallengeSoupNoFeetTitle: "ZUPA NIE MA STÓP",
|
|
7071
7178
|
objectiveChallengeSoupNoFeetDescription: "Zupa chce się ruszać. Osiągnij poziom 4 z Wyrzutnią.",
|
|
7072
7179
|
objectiveChallengeSoupNoFeetRule: "Zachowaj Wyrzutnię i osiągnij poziom 4.",
|
|
7073
7180
|
objectiveChallengeNotButtonTitle: "NIE DOTYKAJ TEGO PRZYCISKU",
|
|
7074
7181
|
objectiveChallengeNotButtonDescription: "Strup zaczyna mówić. Osiągnij poziom 5 bez przerzutów.",
|
|
7075
7182
|
objectiveChallengeNotButtonRule: "Wejdź w Strup i przetrwaj do poziomu 5.",
|
|
7076
|
-
objectiveChallengeNoRerolls: "Bez przerzutów: decyzje przyklejają się."
|
|
7183
|
+
objectiveChallengeNoRerolls: "Bez przerzutów: decyzje przyklejają się.",
|
|
7184
|
+
objectiveChallengeFailed: "WYZWANIE PRZEGRANE",
|
|
7185
|
+
objectiveChallengeFailedDescription: "Miecz dotarł do Rdzenia. Run dobiegł końca.",
|
|
7186
|
+
tutorialExcaliburStep1Text: "DOBĄDŹ MIECZA, MÓJ KRÓLU",
|
|
7187
|
+
tutorialExcaliburStep2Text: "PRZECIĄGNIJ GO NA WROGA. NIECH KTOŚ INNY KRWAWI.",
|
|
7188
|
+
tutorialExcaliburWarning: "NIE WYPUSZCZAJ GO NA RDZEŃ: NAWET NIEZWYKŁY MIECZ MOŻE BYĆ NIEGRZECZNY."
|
|
7077
7189
|
},
|
|
7078
7190
|
id: {
|
|
7079
7191
|
challengeModeHint: "MASUKAN KE RUN YANG SUDAH DIATUR",
|
|
7080
7192
|
objectiveChallengeFirstSurgeTitle: "INTI MELAKUKAN SESUATU",
|
|
7081
7193
|
objectiveChallengeFirstSurgeDescription: "Run Sup: capai level 3 tanpa mengubah aturan.",
|
|
7082
7194
|
objectiveChallengeFirstSurgeRule: "Gunakan Peluncur dan bertahan sampai level 3.",
|
|
7195
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7196
|
+
objectiveChallengeExcaliburDescription: "Gunakan The Smasher, pertahankan satu-satunya pedang merah dan kalahkan bos.",
|
|
7197
|
+
objectiveChallengeExcaliburRule: "Pedang merah tetap hidup setelah dilepas; Mononreuronal tidak dapat dikendalikan.",
|
|
7083
7198
|
objectiveChallengeSoupNoFeetTitle: "SUP TIDAK PUNYA KAKI",
|
|
7084
7199
|
objectiveChallengeSoupNoFeetDescription: "Sup ingin terus bergerak. Capai level 4 dengan Peluncur.",
|
|
7085
7200
|
objectiveChallengeSoupNoFeetRule: "Pertahankan Peluncur dan capai level 4.",
|
|
7086
7201
|
objectiveChallengeNotButtonTitle: "JANGAN SENTUH TOMBOL ITU",
|
|
7087
7202
|
objectiveChallengeNotButtonDescription: "Kerak mulai berbicara. Capai level 5 tanpa reroll.",
|
|
7088
7203
|
objectiveChallengeNotButtonRule: "Masuk ke Kerak dan bertahan sampai level 5.",
|
|
7089
|
-
objectiveChallengeNoRerolls: "Tanpa reroll: keputusan tetap menempel."
|
|
7204
|
+
objectiveChallengeNoRerolls: "Tanpa reroll: keputusan tetap menempel.",
|
|
7205
|
+
objectiveChallengeFailed: "TANTANGAN GAGAL",
|
|
7206
|
+
objectiveChallengeFailedDescription: "Pedang mencapai Inti. Run berakhir.",
|
|
7207
|
+
tutorialExcaliburStep1Text: "CABUT PEDANGNYA, RAJAKU",
|
|
7208
|
+
tutorialExcaliburStep2Text: "SERET KE MUSUH. BIARKAN YANG LAIN BERDARAH.",
|
|
7209
|
+
tutorialExcaliburWarning: "JANGAN LEPASKAN KE ARAH INTI: PEDANG TAK TERKALAHKAN PUN BISA TAK SOPAN."
|
|
7090
7210
|
},
|
|
7091
7211
|
tr: {
|
|
7092
7212
|
challengeModeHint: "ÖNCEDEN AYARLANMIŞ KOŞULARA GİRİŞ",
|
|
7093
7213
|
objectiveChallengeFirstSurgeTitle: "ÇEKİRDEK BİR ŞEY YAPIYOR",
|
|
7094
7214
|
objectiveChallengeFirstSurgeDescription: "Bir Çorba koşusu: kuralları değiştirmeden 3. seviyeye ulaş.",
|
|
7095
7215
|
objectiveChallengeFirstSurgeRule: "Fırlatıcıyı kullan ve 3. seviyeye kadar hayatta kal.",
|
|
7216
|
+
objectiveChallengeExcaliburTitle: "EXCALIBUR",
|
|
7217
|
+
objectiveChallengeExcaliburDescription: "The Smasher'ı kullan, tek kırmızı kılıcı hayatta tut ve boss'u yen.",
|
|
7218
|
+
objectiveChallengeExcaliburRule: "Kırmızı kılıç bırakıldığında hayatta kalır; Mononreuronal kontrol edilemez.",
|
|
7096
7219
|
objectiveChallengeSoupNoFeetTitle: "ÇORBANIN AYAĞI YOK",
|
|
7097
7220
|
objectiveChallengeSoupNoFeetDescription: "Çorba hareket etmekte ısrar ediyor. Fırlatıcı ile 4. seviyeye ulaş.",
|
|
7098
7221
|
objectiveChallengeSoupNoFeetRule: "Fırlatıcıyı koru ve 4. seviyeye ulaş.",
|
|
7099
7222
|
objectiveChallengeNotButtonTitle: "O DÜĞMEYE DOKUNMA",
|
|
7100
7223
|
objectiveChallengeNotButtonDescription: "Kabuk konuşmaya başlıyor. Yenilemeden 5. seviyeye ulaş.",
|
|
7101
7224
|
objectiveChallengeNotButtonRule: "Kabuğa gir ve 5. seviyeye kadar hayatta kal.",
|
|
7102
|
-
objectiveChallengeNoRerolls: "Yenileme yok: kararlar yapışıp kalır."
|
|
7225
|
+
objectiveChallengeNoRerolls: "Yenileme yok: kararlar yapışıp kalır.",
|
|
7226
|
+
objectiveChallengeFailed: "MEYDAN OKUMA KAYBEDİLDİ",
|
|
7227
|
+
objectiveChallengeFailedDescription: "Kırmızı kılıç Çekirdeğe ulaştı. Koşu sona erdi.",
|
|
7228
|
+
tutorialExcaliburStep1Text: "KILIÇI ÇEK, KRALIM",
|
|
7229
|
+
tutorialExcaliburStep2Text: "ONU DÜŞMANA SÜRÜKLE. BAŞKASI KANASIN.",
|
|
7230
|
+
tutorialExcaliburWarning: "ONU ÇEKİRDEĞE DOĞRU BIRAKMA: ÖLÜMSÜZ BİR KILIÇ BİLE KÖTÜ TERBİYELİ OLABİLİR."
|
|
7103
7231
|
},
|
|
7104
7232
|
ru: {
|
|
7105
7233
|
challengeModeHint: "ВХОДЫ В ЗАРАНЕЕ НАСТРОЕННЫЕ ЗАБЕГИ",
|
|
7106
7234
|
objectiveChallengeFirstSurgeTitle: "ЯДРО ДЕЛАЕТ ШТУКУ",
|
|
7107
7235
|
objectiveChallengeFirstSurgeDescription: "Забег по Супу: достигните 3 уровня, не меняя правил.",
|
|
7108
7236
|
objectiveChallengeFirstSurgeRule: "Используйте Метателя и доживите до 3 уровня.",
|
|
7237
|
+
objectiveChallengeExcaliburTitle: "ЭКСКАЛИБУР",
|
|
7238
|
+
objectiveChallengeExcaliburDescription: "Используйте The Smasher, сохраните единственный красный меч и победите босса.",
|
|
7239
|
+
objectiveChallengeExcaliburRule: "Красный меч выживает после отпускания; Мононреуроналов нельзя контролировать.",
|
|
7109
7240
|
objectiveChallengeSoupNoFeetTitle: "У СУПА НЕТ НОГ",
|
|
7110
7241
|
objectiveChallengeSoupNoFeetDescription: "Суп настаивает, что он движется. Достигните 4 уровня с Метателем.",
|
|
7111
7242
|
objectiveChallengeSoupNoFeetRule: "Сохраните Метателя и достигните 4 уровня.",
|
|
7112
7243
|
objectiveChallengeNotButtonTitle: "НЕ ТРОГАЙТЕ ЭТУ КНОПКУ",
|
|
7113
7244
|
objectiveChallengeNotButtonDescription: "Струп начинает говорить. Достигните 5 уровня без перебросов.",
|
|
7114
7245
|
objectiveChallengeNotButtonRule: "Войдите в Струп и доживите до 5 уровня.",
|
|
7115
|
-
objectiveChallengeNoRerolls: "Без перебросов: решения приклеились."
|
|
7246
|
+
objectiveChallengeNoRerolls: "Без перебросов: решения приклеились.",
|
|
7247
|
+
objectiveChallengeFailed: "ИСПЫТАНИЕ ПРОИГРАНО",
|
|
7248
|
+
objectiveChallengeFailedDescription: "Меч достиг Ядра. Забег окончен.",
|
|
7249
|
+
tutorialExcaliburStep1Text: "ВЫТАЩИ МЕЧ, МОЙ КОРОЛЬ",
|
|
7250
|
+
tutorialExcaliburStep2Text: "ТАЩИ ЕГО НА ВРАГА. ПУСТЬ КРОВЬ ПРОЛЬЁТСЯ У ДРУГОГО.",
|
|
7251
|
+
tutorialExcaliburWarning: "НЕ ОТПУСКАЙ ЕГО К ЯДРУ: ДАЖЕ НЕУЯЗВИМЫЙ МЕЧ МОЖЕТ БЫТЬ НЕВОСПИТАННЫМ."
|
|
7116
7252
|
},
|
|
7117
7253
|
ja: {
|
|
7118
7254
|
challengeModeHint: "設定済みランへの入口",
|
|
7119
7255
|
objectiveChallengeFirstSurgeTitle: "コアが何かをする",
|
|
7120
7256
|
objectiveChallengeFirstSurgeDescription: "スープのラン:ルールを変えずにレベル3へ到達する。",
|
|
7121
7257
|
objectiveChallengeFirstSurgeRule: "ランチャーでレベル3まで生き残る。",
|
|
7258
|
+
objectiveChallengeExcaliburTitle: "エクスカリバー",
|
|
7259
|
+
objectiveChallengeExcaliburDescription: "スマッシャーで、唯一の赤い剣を生かしたままボスを倒す。",
|
|
7260
|
+
objectiveChallengeExcaliburRule: "赤い剣は離しても生き残る。モノニューロナルは操作できない。",
|
|
7122
7261
|
objectiveChallengeSoupNoFeetTitle: "スープに足はない",
|
|
7123
7262
|
objectiveChallengeSoupNoFeetDescription: "スープは動きたがっている。ランチャーでレベル4へ。",
|
|
7124
7263
|
objectiveChallengeSoupNoFeetRule: "ランチャーを維持してレベル4へ到達する。",
|
|
7125
7264
|
objectiveChallengeNotButtonTitle: "そのボタンに触るな",
|
|
7126
7265
|
objectiveChallengeNotButtonDescription: "かさぶたが話し始める。リロールなしでレベル5へ。",
|
|
7127
7266
|
objectiveChallengeNotButtonRule: "かさぶたに入り、レベル5まで生き残る。",
|
|
7128
|
-
objectiveChallengeNoRerolls: "リロール禁止:決断は貼りついたまま。"
|
|
7267
|
+
objectiveChallengeNoRerolls: "リロール禁止:決断は貼りついたまま。",
|
|
7268
|
+
objectiveChallengeFailed: "チャレンジ失敗",
|
|
7269
|
+
objectiveChallengeFailedDescription: "剣がコアに到達した。ランは終了した。",
|
|
7270
|
+
tutorialExcaliburStep1Text: "剣を抜け、我が王よ",
|
|
7271
|
+
tutorialExcaliburStep2Text: "敵へ引きずれ。血を流すのは別の者だ。",
|
|
7272
|
+
tutorialExcaliburWarning: "コアへ放してはいけない。不滅の剣にも礼儀は必要だ。"
|
|
7129
7273
|
},
|
|
7130
7274
|
ko: {
|
|
7131
7275
|
challengeModeHint: "사전 설정 런으로 들어가기",
|
|
7132
7276
|
objectiveChallengeFirstSurgeTitle: "코어가 뭔가를 한다",
|
|
7133
7277
|
objectiveChallengeFirstSurgeDescription: "수프 런: 규칙을 바꾸지 않고 레벨 3에 도달하세요.",
|
|
7134
7278
|
objectiveChallengeFirstSurgeRule: "런처를 사용해 레벨 3까지 생존하세요.",
|
|
7279
|
+
objectiveChallengeExcaliburTitle: "엑스칼리버",
|
|
7280
|
+
objectiveChallengeExcaliburDescription: "스매셔를 사용해 유일한 붉은 검을 살려 두고 보스를 물리치세요.",
|
|
7281
|
+
objectiveChallengeExcaliburRule: "붉은 검은 놓아도 살아남습니다. 모노뉴런은 조종할 수 없습니다.",
|
|
7135
7282
|
objectiveChallengeSoupNoFeetTitle: "수프에게는 발이 없다",
|
|
7136
7283
|
objectiveChallengeSoupNoFeetDescription: "수프가 움직이려 합니다. 런처로 레벨 4에 도달하세요.",
|
|
7137
7284
|
objectiveChallengeSoupNoFeetRule: "런처를 유지하고 레벨 4에 도달하세요.",
|
|
7138
7285
|
objectiveChallengeNotButtonTitle: "그 버튼을 누르지 마",
|
|
7139
7286
|
objectiveChallengeNotButtonDescription: "딱지가 말을 시작합니다. 리롤 없이 레벨 5에 도달하세요.",
|
|
7140
7287
|
objectiveChallengeNotButtonRule: "딱지에 들어가 레벨 5까지 생존하세요.",
|
|
7141
|
-
objectiveChallengeNoRerolls: "리롤 금지: 결정이 붙어버립니다."
|
|
7288
|
+
objectiveChallengeNoRerolls: "리롤 금지: 결정이 붙어버립니다.",
|
|
7289
|
+
objectiveChallengeFailed: "도전 실패",
|
|
7290
|
+
objectiveChallengeFailedDescription: "검이 코어에 닿았습니다. 런이 끝났습니다.",
|
|
7291
|
+
tutorialExcaliburStep1Text: "검을 뽑으세요, 나의 왕이여",
|
|
7292
|
+
tutorialExcaliburStep2Text: "적에게 끌고 가세요. 피는 다른 자가 흘리게 하세요.",
|
|
7293
|
+
tutorialExcaliburWarning: "코어를 향해 놓지 마세요. 무적의 검도 예의가 필요합니다."
|
|
7142
7294
|
},
|
|
7143
7295
|
zh: {
|
|
7144
7296
|
challengeModeHint: "进入预设挑战运行",
|
|
7145
7297
|
objectiveChallengeFirstSurgeTitle: "核心在做一件事",
|
|
7146
7298
|
objectiveChallengeFirstSurgeDescription: "汤之运行:不改变规则并达到3级。",
|
|
7147
7299
|
objectiveChallengeFirstSurgeRule: "使用发射核心并存活到3级。",
|
|
7300
|
+
objectiveChallengeExcaliburTitle: "誓约之剑",
|
|
7301
|
+
objectiveChallengeExcaliburDescription: "使用粉碎核心,让唯一的红色剑存活并击败首领。",
|
|
7302
|
+
objectiveChallengeExcaliburRule: "红剑被释放后仍会存活;单神经元敌人无法被控制。",
|
|
7148
7303
|
objectiveChallengeSoupNoFeetTitle: "汤没有脚",
|
|
7149
7304
|
objectiveChallengeSoupNoFeetDescription: "汤坚持要移动。使用发射核心达到4级。",
|
|
7150
7305
|
objectiveChallengeSoupNoFeetRule: "保留发射核心并达到4级。",
|
|
7151
7306
|
objectiveChallengeNotButtonTitle: "不要碰那个按钮",
|
|
7152
7307
|
objectiveChallengeNotButtonDescription: "血痂开始说话。不重掷并达到5级。",
|
|
7153
7308
|
objectiveChallengeNotButtonRule: "进入血痂并存活到5级。",
|
|
7154
|
-
objectiveChallengeNoRerolls: "禁止重掷:决定会粘住。"
|
|
7309
|
+
objectiveChallengeNoRerolls: "禁止重掷:决定会粘住。",
|
|
7310
|
+
objectiveChallengeFailed: "挑战失败",
|
|
7311
|
+
objectiveChallengeFailedDescription: "红剑抵达了核心。这次运行结束了。",
|
|
7312
|
+
tutorialExcaliburStep1Text: "拔剑吧,我的王",
|
|
7313
|
+
tutorialExcaliburStep2Text: "把它拖向敌人。让别人流血。",
|
|
7314
|
+
tutorialExcaliburWarning: "不要把它朝核心放开:即使是不死之剑,也可能不懂礼貌。"
|
|
7155
7315
|
}
|
|
7156
7316
|
};
|
|
7157
7317
|
for (const [r, e] of Object.entries(ia))
|
|
@@ -8477,7 +8637,7 @@ const ca = ["es", "en", "fr", "de", "it", "pt", "nl", "sv", "pl", "id", "tr", "r
|
|
|
8477
8637
|
function re(r) {
|
|
8478
8638
|
return ca.includes(r);
|
|
8479
8639
|
}
|
|
8480
|
-
const
|
|
8640
|
+
const Ne = {
|
|
8481
8641
|
es: "ESPAÑOL (ES)",
|
|
8482
8642
|
en: "ENGLISH (EN)",
|
|
8483
8643
|
fr: "FRANÇAIS (FR)",
|
|
@@ -8519,9 +8679,9 @@ class la {
|
|
|
8519
8679
|
i.className = "axon-select-wrapper";
|
|
8520
8680
|
const o = this.document.createElement("select");
|
|
8521
8681
|
o.className = "axon-select";
|
|
8522
|
-
for (const s of Object.keys(
|
|
8682
|
+
for (const s of Object.keys(Ne)) {
|
|
8523
8683
|
const c = this.document.createElement("option");
|
|
8524
|
-
c.textContent =
|
|
8684
|
+
c.textContent = Ne[s], c.value = s, c.selected = e.language === s, o.appendChild(c);
|
|
8525
8685
|
}
|
|
8526
8686
|
o.addEventListener("change", () => t.onLanguageChanged(o.value));
|
|
8527
8687
|
const n = this.document.createElement("span");
|
|
@@ -8654,7 +8814,7 @@ class ua {
|
|
|
8654
8814
|
this.tutorial.isActive = !1;
|
|
8655
8815
|
return;
|
|
8656
8816
|
}
|
|
8657
|
-
this.tutorial.isActive = !0, this.tutorial.showWarning = !1, a.length = 0, this.tutorial.corePosition.x = e / 2, this.tutorial.corePosition.y = t / 2, this.startMechanic(e, t, a);
|
|
8817
|
+
this.tutorial.isActive = !0, this.tutorial.showWarning = !1, this.tutorial.definition.primaryVariantId || (a.length = 0), this.tutorial.corePosition.x = e / 2, this.tutorial.corePosition.y = t / 2, this.startMechanic(e, t, a);
|
|
8658
8818
|
}
|
|
8659
8819
|
startMechanic(e, t, a) {
|
|
8660
8820
|
const i = this.tutorial.definition;
|
|
@@ -8679,11 +8839,13 @@ class ua {
|
|
|
8679
8839
|
}
|
|
8680
8840
|
startSmasher(e, t, a) {
|
|
8681
8841
|
const i = t / 2;
|
|
8682
|
-
this.tutorial.initialPrimaryPos = { x: e * 0.58, y: i }, this.tutorial.initialSecondaryPos = { x: e * 0.78, y: i }, this.tutorial.repellentWaveElapsed = 0
|
|
8842
|
+
this.tutorial.initialPrimaryPos = { x: e * 0.58, y: i }, this.tutorial.initialSecondaryPos = { x: e * 0.78, y: i }, this.tutorial.repellentWaveElapsed = 0;
|
|
8843
|
+
const o = this.tutorial.definition, n = o.primaryVariantId ? a.find((s) => s.active && s.variantId === o.primaryVariantId) ?? null : null;
|
|
8844
|
+
this.tutorial.primary = n ?? this.createEnemy(o.primaryEnemyId, this.tutorial.initialPrimaryPos, this.tutorial.corePosition, o.primaryVariantId), this.tutorial.primary.position = { ...this.tutorial.initialPrimaryPos }, this.tutorial.secondary = this.createEnemy(this.tutorial.definition.secondaryEnemyId, this.tutorial.initialSecondaryPos, this.tutorial.corePosition), this.tutorial.primary.velocity = { x: 0, y: 0 }, this.tutorial.secondary.velocity = { x: 0, y: 0 }, this.tutorial.primary.isChallengeInvulnerable = o.primaryChallengeInvulnerable === !0, a.includes(this.tutorial.primary) || a.push(this.tutorial.primary), a.includes(this.tutorial.secondary) || a.push(this.tutorial.secondary);
|
|
8683
8845
|
}
|
|
8684
|
-
createEnemy(e, t, a) {
|
|
8685
|
-
const
|
|
8686
|
-
return i.velocity = { x: 0, y: 0 },
|
|
8846
|
+
createEnemy(e, t, a, i) {
|
|
8847
|
+
const o = this.tutorial.factory.createEnemy(e, t, a);
|
|
8848
|
+
return i && this.tutorial.factory.configureEnemy(o, e, { spawnPos: t, corePos: a, variantId: i }), o.velocity = { x: 0, y: 0 }, o;
|
|
8687
8849
|
}
|
|
8688
8850
|
isTooCloseToCore(e) {
|
|
8689
8851
|
return Math.hypot(e.position.x - this.tutorial.corePosition.x, e.position.y - this.tutorial.corePosition.y) <= e.getHitRadius() + 70;
|
|
@@ -8703,11 +8865,12 @@ class ua {
|
|
|
8703
8865
|
const { primary: t, secondary: a, primaryCore: i, secondaryCore: o } = e, n = this.tutorial.definition;
|
|
8704
8866
|
this.tutorial.factory.configureEnemy(t, n.primaryEnemyId, {
|
|
8705
8867
|
spawnPos: this.tutorial.initialPrimaryPos,
|
|
8706
|
-
corePos: i
|
|
8868
|
+
corePos: i,
|
|
8869
|
+
variantId: n.primaryVariantId
|
|
8707
8870
|
}), this.tutorial.factory.configureEnemy(a, n.secondaryEnemyId, {
|
|
8708
8871
|
spawnPos: this.tutorial.initialSecondaryPos,
|
|
8709
8872
|
corePos: o
|
|
8710
|
-
}), t.velocity = { x: 0, y: 0 }, a.velocity = { x: 0, y: 0 };
|
|
8873
|
+
}), t.velocity = { x: 0, y: 0 }, a.velocity = { x: 0, y: 0 }, t.isChallengeInvulnerable = n.primaryChallengeInvulnerable === !0;
|
|
8711
8874
|
}
|
|
8712
8875
|
}
|
|
8713
8876
|
class ha {
|
|
@@ -9122,7 +9285,7 @@ const va = () => `
|
|
|
9122
9285
|
<circle cx="14.2" cy="12.4" r="2.2" fill="currentColor" opacity=".82"/>
|
|
9123
9286
|
<circle cx="29.8" cy="21.8" r="2" fill="currentColor" opacity=".82"/>
|
|
9124
9287
|
<circle cx="16.3" cy="29.4" r="1.8" fill="currentColor" opacity=".82"/>
|
|
9125
|
-
`,
|
|
9288
|
+
`, ba = () => `
|
|
9126
9289
|
<path d="M24 5c7.8 0 14.1 4.8 14.1 11.2 0 4.5-3.2 6.9-2.1 11.3 1.3 5.1-3.5 9.5-9.6 9.5-4.4 0-6.5-2.7-10.4-2.1-5.7.8-9.7-3.8-8.5-8.7.9-3.8-1.4-6.2-.1-10.7C9 9.5 15.5 5 24 5Z" fill="currentColor" opacity=".08"/>
|
|
9127
9290
|
<path d="M24 5c7.8 0 14.1 4.8 14.1 11.2 0 4.5-3.2 6.9-2.1 11.3 1.3 5.1-3.5 9.5-9.6 9.5-4.4 0-6.5-2.7-10.4-2.1-5.7.8-9.7-3.8-8.5-8.7.9-3.8-1.4-6.2-.1-10.7C9 9.5 15.5 5 24 5Z" stroke="currentColor" stroke-width="1.9" stroke-linejoin="round"/>
|
|
9128
9291
|
<path d="M24 12c4.8 0 8.5 2.8 8.5 6.6 0 3.6-3.3 6.2-8.1 6.2-4.9 0-8.7-2.7-8.7-6.4 0-3.8 3.4-6.4 8.3-6.4Z" stroke="currentColor" stroke-width="1.8" opacity=".9"/>
|
|
@@ -9131,7 +9294,7 @@ const va = () => `
|
|
|
9131
9294
|
<circle cx="10" cy="18" r="2" fill="currentColor" opacity=".75"/>
|
|
9132
9295
|
<circle cx="38" cy="24" r="2" fill="currentColor" opacity=".75"/>
|
|
9133
9296
|
<circle cx="14" cy="34" r="1.8" fill="currentColor" opacity=".75"/>
|
|
9134
|
-
`,
|
|
9297
|
+
`, Sa = () => `
|
|
9135
9298
|
<path d="M10 16c2.9-4.3 7-4.7 10.2-1.2 2.3 2.5 4.2 2.7 7.5.5 4.4-2.9 8.1-.3 9.4 3.9" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
|
|
9136
9299
|
<path d="M10 31c2.8-4.1 6.7-4.5 10-.9 2.7 3 5.1 2.3 7.5-.2 3-3.2 6.4-2.2 9.2.2" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" opacity=".8"/>
|
|
9137
9300
|
<circle cx="9" cy="16" r="4" fill="currentColor" opacity=".18" stroke="currentColor" stroke-width="1.6"/>
|
|
@@ -9150,8 +9313,8 @@ const va = () => `
|
|
|
9150
9313
|
"core-nucleus": va,
|
|
9151
9314
|
"unlock-form": fa,
|
|
9152
9315
|
"powerup-organ": xa,
|
|
9153
|
-
"passive-membrane":
|
|
9154
|
-
"synergy-synapse":
|
|
9316
|
+
"passive-membrane": ba,
|
|
9317
|
+
"synergy-synapse": Sa,
|
|
9155
9318
|
"area-biome": Ca,
|
|
9156
9319
|
"story-memory": Aa
|
|
9157
9320
|
}, Ra = () => `
|
|
@@ -9591,7 +9754,7 @@ class Da {
|
|
|
9591
9754
|
return e === "powerup" ? this.i18n.translate("geneticTypePowerup") : e === "passive" ? this.i18n.translate("geneticTypePassive") : e === "enemy" ? this.i18n.translate("geneticTypeEnemy") : this.i18n.translate("geneticTypeCore");
|
|
9592
9755
|
}
|
|
9593
9756
|
}
|
|
9594
|
-
class
|
|
9757
|
+
class Na {
|
|
9595
9758
|
container;
|
|
9596
9759
|
i18n;
|
|
9597
9760
|
timeoutId = null;
|
|
@@ -9626,7 +9789,7 @@ function X(r) {
|
|
|
9626
9789
|
<span class="axon-objective-organic-icon-filament"></span>
|
|
9627
9790
|
</span>`;
|
|
9628
9791
|
}
|
|
9629
|
-
class
|
|
9792
|
+
class Oa {
|
|
9630
9793
|
i18n;
|
|
9631
9794
|
objectives;
|
|
9632
9795
|
kind;
|
|
@@ -9788,7 +9951,7 @@ class Na {
|
|
|
9788
9951
|
}
|
|
9789
9952
|
}
|
|
9790
9953
|
}
|
|
9791
|
-
class
|
|
9954
|
+
class Oe {
|
|
9792
9955
|
container;
|
|
9793
9956
|
i18n;
|
|
9794
9957
|
objectives;
|
|
@@ -9801,7 +9964,7 @@ class Ne {
|
|
|
9801
9964
|
this.isOpen && e.key === "Escape" && (e.preventDefault(), this.hide(), this.onClose());
|
|
9802
9965
|
};
|
|
9803
9966
|
constructor(e) {
|
|
9804
|
-
this.i18n = e.i18n, this.objectives = e.objectives, this.kind = e.kind, this.onClose = e.onClose, this.onStartChallenge = e.onStartChallenge, this.renderer = new
|
|
9967
|
+
this.i18n = e.i18n, this.objectives = e.objectives, this.kind = e.kind, this.onClose = e.onClose, this.onStartChallenge = e.onStartChallenge, this.renderer = new Oa(e), this.container = document.createElement("section"), this.container.className = this.getOverlayClassName(), this.container.setAttribute("aria-live", "polite"), e.parent.appendChild(this.container), window.addEventListener("keydown", this.handleKeyDown), this.renderContent();
|
|
9805
9968
|
}
|
|
9806
9969
|
show() {
|
|
9807
9970
|
this.isOpen = !0, this.container.style.display = "flex", this.renderContent();
|
|
@@ -9866,7 +10029,7 @@ class La {
|
|
|
9866
10029
|
return `
|
|
9867
10030
|
<div class="axon-title-halo">
|
|
9868
10031
|
<h1 class="axon-title">${this.i18n.translate("title")}</h1>
|
|
9869
|
-
<p class="axon-version-mark">v0.
|
|
10032
|
+
<p class="axon-version-mark">v0.37.0</p>
|
|
9870
10033
|
<button id="axon-start-btn" class="axon-start-button">${this.i18n.translate("startButton")}</button>
|
|
9871
10034
|
${this.renderSecondaryActions()}
|
|
9872
10035
|
</div>
|
|
@@ -10110,6 +10273,7 @@ class L {
|
|
|
10110
10273
|
canBeManipulatedByCore = !0;
|
|
10111
10274
|
canBeDamagedByCore = !0;
|
|
10112
10275
|
canBeKilledByCoreRepelWave = !1;
|
|
10276
|
+
isChallengeInvulnerable = !1;
|
|
10113
10277
|
rotation = 0;
|
|
10114
10278
|
color = "#ffffff";
|
|
10115
10279
|
accentColor = null;
|
|
@@ -10158,10 +10322,10 @@ class L {
|
|
|
10158
10322
|
return Math.abs(t) <= this.frontCoverageArc / 2;
|
|
10159
10323
|
}
|
|
10160
10324
|
triggerDissolveDeath(e = !1, t = null) {
|
|
10161
|
-
e && (this.experienceDropPending = !0), t && (this.codexDeathSourceType = t), !this.isDying && (this.isDying = !0, this.deathType = "dissolve", this.deathTimer = 0, this.maxDeathTimer = 0.45, this.velocity = { x: 0, y: 0 });
|
|
10325
|
+
this.isChallengeInvulnerable || (e && (this.experienceDropPending = !0), t && (this.codexDeathSourceType = t), !this.isDying && (this.isDying = !0, this.deathType = "dissolve", this.deathTimer = 0, this.maxDeathTimer = 0.45, this.velocity = { x: 0, y: 0 }));
|
|
10162
10326
|
}
|
|
10163
10327
|
triggerSliceDeath(e, t = !1, a = null) {
|
|
10164
|
-
t && (this.experienceDropPending = !0), a && (this.codexDeathSourceType = a), !this.isDying && (this.isDying = !0, this.deathType = "sliced", this.deathTimer = 0, this.maxDeathTimer = 0.35, this.sliceAngle = e, this.velocity = { x: 0, y: 0 });
|
|
10328
|
+
this.isChallengeInvulnerable || (t && (this.experienceDropPending = !0), a && (this.codexDeathSourceType = a), !this.isDying && (this.isDying = !0, this.deathType = "sliced", this.deathTimer = 0, this.maxDeathTimer = 0.35, this.sliceAngle = e, this.velocity = { x: 0, y: 0 }));
|
|
10165
10329
|
}
|
|
10166
10330
|
update(e) {
|
|
10167
10331
|
this.active && (this.updateTimers(e), !(this.updateDeath(e) || this.updateLaunchDelay(e)) && (this.isGrabbed || this.isStationaryShield || (this.limitSpeed(), this.position.x += this.velocity.x * e, this.position.y += this.velocity.y * e, this.updateRotation())));
|
|
@@ -10189,7 +10353,7 @@ class L {
|
|
|
10189
10353
|
this.resetFlags(), this.resetEffects(), this.resetVisuals();
|
|
10190
10354
|
}
|
|
10191
10355
|
resetFlags() {
|
|
10192
|
-
this.active = !1, this.variantId = null, this.variantRendererId = null, this.isGrabbed = !1, this.isThrown = !1, this.wasManipulated = !1, this.isGrabbable = !0, this.canBeManipulatedByCore = !0, this.canBeDamagedByCore = !0, this.canBeKilledByCoreRepelWave = !1, this.behavior = _e, this.synergyKey = "", this.isDying = !1, this.deathType = "none", this.deathTimer = 0, this.sliceAngle = 0, this.isStationaryShield = !1, this.shieldAngle = 0, this.launchDelay = 0, this.bossLaunchPhase = "none", this.experienceDropPending = !1, this.codexDeathSourceType = null, this.psionicDeflectionCooldown = 0, this.psionicDeflectionTimer = 0;
|
|
10356
|
+
this.active = !1, this.variantId = null, this.variantRendererId = null, this.isGrabbed = !1, this.isThrown = !1, this.wasManipulated = !1, this.isGrabbable = !0, this.canBeManipulatedByCore = !0, this.canBeDamagedByCore = !0, this.canBeKilledByCoreRepelWave = !1, this.isChallengeInvulnerable = !1, this.behavior = _e, this.synergyKey = "", this.isDying = !1, this.deathType = "none", this.deathTimer = 0, this.sliceAngle = 0, this.isStationaryShield = !1, this.shieldAngle = 0, this.launchDelay = 0, this.bossLaunchPhase = "none", this.experienceDropPending = !1, this.codexDeathSourceType = null, this.psionicDeflectionCooldown = 0, this.psionicDeflectionTimer = 0;
|
|
10193
10357
|
}
|
|
10194
10358
|
resetEffects() {
|
|
10195
10359
|
this.position = { x: 0, y: 0 }, this.velocity = { x: 0, y: 0 }, this.rotation = 0, this.maxSpeed = 200, this.variantPulseInterval = 0, this.variantPulseTimer = 0, this.blocksFrontImpacts = !1, this.frontCoverageArc = 0, this.frontCoverageRadiusMultiplier = 1, this.hitRadiusPadding = 0.2;
|
|
@@ -10198,11 +10362,11 @@ class L {
|
|
|
10198
10362
|
this.accentColor = null, this.eyeProfile = "none", this.visualProfile = "default", this.variantState = {}, this.variantTrail = [], this.strategy = null;
|
|
10199
10363
|
}
|
|
10200
10364
|
}
|
|
10201
|
-
const
|
|
10365
|
+
const S = (r, e, t) => r?.[e] ?? t, Ee = (r, e) => r?.[e] ?? null, za = (r, e) => ({
|
|
10202
10366
|
...r.behavior,
|
|
10203
10367
|
...e?.behaviorOverrides ?? {}
|
|
10204
10368
|
}), Ka = (r, e) => e.synergyKey ?? e.behavior.synergyKey?.(r) ?? e.id, Fa = (r) => r.initialRotation === "random" ? Math.random() * Math.PI * 2 : 0, Ga = (r, e) => {
|
|
10205
|
-
const t =
|
|
10369
|
+
const t = S(e, "canBeManipulatedByCore", !0);
|
|
10206
10370
|
return {
|
|
10207
10371
|
variantId: Ee(e, "id"),
|
|
10208
10372
|
variantRendererId: Ee(e, "rendererId"),
|
|
@@ -10210,15 +10374,15 @@ const b = (r, e, t) => r?.[e] ?? t, Ee = (r, e) => r?.[e] ?? null, za = (r, e) =
|
|
|
10210
10374
|
isGrabbed: !1,
|
|
10211
10375
|
isThrown: !1,
|
|
10212
10376
|
canBeManipulatedByCore: t,
|
|
10213
|
-
canBeDamagedByCore:
|
|
10214
|
-
canBeKilledByCoreRepelWave:
|
|
10377
|
+
canBeDamagedByCore: S(e, "canBeDamagedByCore", !0),
|
|
10378
|
+
canBeKilledByCoreRepelWave: S(e, "canBeKilledByCoreRepelWave", !1),
|
|
10215
10379
|
isGrabbable: !!r.canBeGrabbed && t,
|
|
10216
|
-
variantPulseInterval:
|
|
10380
|
+
variantPulseInterval: S(e, "pulseInterval", 0),
|
|
10217
10381
|
variantPulseTimer: 0,
|
|
10218
|
-
blocksFrontImpacts:
|
|
10219
|
-
frontCoverageArc:
|
|
10220
|
-
frontCoverageRadiusMultiplier:
|
|
10221
|
-
visualProfile:
|
|
10382
|
+
blocksFrontImpacts: S(e, "blocksFrontImpacts", !1),
|
|
10383
|
+
frontCoverageArc: S(e, "frontCoverageArc", 0),
|
|
10384
|
+
frontCoverageRadiusMultiplier: S(e, "frontCoverageRadiusMultiplier", 1),
|
|
10385
|
+
visualProfile: S(e, "visualProfile", "default"),
|
|
10222
10386
|
variantState: {},
|
|
10223
10387
|
variantTrail: []
|
|
10224
10388
|
};
|
|
@@ -10245,7 +10409,7 @@ class Va {
|
|
|
10245
10409
|
Object.assign(e, Ga(t, a));
|
|
10246
10410
|
}
|
|
10247
10411
|
applyDefinition(e, t, a) {
|
|
10248
|
-
e.radius = t.radius, e.hitRadiusPadding = t.hitRadiusPadding ?? 0.2, e.color =
|
|
10412
|
+
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 = za(t, a), e.synergyKey = Ka(e, t), e.maxSpeed = t.maxSpeed * S(a, "maxSpeedMultiplier", 1), e.rotation = Fa(t);
|
|
10249
10413
|
}
|
|
10250
10414
|
applyMotion(e, t, a, i) {
|
|
10251
10415
|
e.position = { ...t };
|
|
@@ -10424,14 +10588,14 @@ const Ie = {
|
|
|
10424
10588
|
shockwaveMergeDistance: 120
|
|
10425
10589
|
}
|
|
10426
10590
|
};
|
|
10427
|
-
class
|
|
10591
|
+
class O {
|
|
10428
10592
|
static instance;
|
|
10429
10593
|
config;
|
|
10430
10594
|
constructor() {
|
|
10431
10595
|
this.config = JSON.parse(JSON.stringify(je));
|
|
10432
10596
|
}
|
|
10433
10597
|
static getInstance() {
|
|
10434
|
-
return
|
|
10598
|
+
return O.instance || (O.instance = new O()), O.instance;
|
|
10435
10599
|
}
|
|
10436
10600
|
getConfig() {
|
|
10437
10601
|
return this.config;
|
|
@@ -10453,7 +10617,7 @@ class N {
|
|
|
10453
10617
|
Object.assign(this.config.core, e.core), Object.assign(this.config.toxicPool, e.toxicPool), Object.assign(this.config.gravityVortex, e.gravityVortex), Object.assign(this.config.shield, e.shield), Object.assign(this.config.cluster, e.cluster), Object.assign(this.config.piercer, e.piercer), Object.assign(this.config.magnet, e.magnet), Object.assign(this.config.experience, e.experience), Object.assign(this.config.ecosoma, e.ecosoma), Object.assign(this.config.effectAggregation, e.effectAggregation);
|
|
10454
10618
|
}
|
|
10455
10619
|
}
|
|
10456
|
-
class
|
|
10620
|
+
class b {
|
|
10457
10621
|
constructor(e) {
|
|
10458
10622
|
this.kind = e;
|
|
10459
10623
|
}
|
|
@@ -10493,7 +10657,7 @@ class qa {
|
|
|
10493
10657
|
constructor(e, t) {
|
|
10494
10658
|
this.configPort = e, this.defaultPowerUps = t(e);
|
|
10495
10659
|
}
|
|
10496
|
-
registry = new
|
|
10660
|
+
registry = new b("power-up");
|
|
10497
10661
|
defaultsRegistered = !1;
|
|
10498
10662
|
defaultPowerUps;
|
|
10499
10663
|
getDefinitions() {
|
|
@@ -11176,7 +11340,7 @@ const ve = (r) => [
|
|
|
11176
11340
|
v(r, 18, "core-skin", { titleKey: "coreCommonSkinTitle", descriptionKey: "coreCommonSkinDescription", skinId: "core-expertise-1" }),
|
|
11177
11341
|
v(r, 19, "core-skin", { titleKey: "coreCommonSkinTitle", descriptionKey: "coreCommonSkinDescription", skinId: "core-expertise-2" }),
|
|
11178
11342
|
v(r, 20, "core-skin", { titleKey: "coreCommonSkinTitle", descriptionKey: "coreCommonSkinDescription", skinId: "core-expertise-3" })
|
|
11179
|
-
],
|
|
11343
|
+
], bi = () => [
|
|
11180
11344
|
...ve("core-smasher"),
|
|
11181
11345
|
v("core-smasher", 2, "smasher-extra-impact", { titleKey: "smasherExtraImpactTitle", descriptionKey: "smasherExtraImpactDescription" }),
|
|
11182
11346
|
v("core-smasher", 3, "smasher-creature-power", { titleKey: "smasherCreaturePowerTitle", descriptionKey: "smasherCreaturePowerDescription", effectValue: 1 }),
|
|
@@ -11210,7 +11374,7 @@ function ie(r) {
|
|
|
11210
11374
|
skillPointRewards: { ...xi }
|
|
11211
11375
|
};
|
|
11212
11376
|
}
|
|
11213
|
-
const
|
|
11377
|
+
const Si = [
|
|
11214
11378
|
ie({
|
|
11215
11379
|
id: "core-origin",
|
|
11216
11380
|
titleKey: "coreLauncherTitle",
|
|
@@ -11243,7 +11407,7 @@ const bi = [
|
|
|
11243
11407
|
accent: "core",
|
|
11244
11408
|
iconId: "core-nucleus",
|
|
11245
11409
|
unlockCost: 20,
|
|
11246
|
-
wisdomTrack:
|
|
11410
|
+
wisdomTrack: bi()
|
|
11247
11411
|
})
|
|
11248
11412
|
], tt = "axon_surge_core_roster", V = 2;
|
|
11249
11413
|
function Ci(r, e) {
|
|
@@ -11328,9 +11492,9 @@ function Di(r, e) {
|
|
|
11328
11492
|
if (r.has(e.id)) throw new Error(`Duplicate core definition: ${e.id}`);
|
|
11329
11493
|
if (e.unlockCost < 0 || !Number.isFinite(e.unlockCost))
|
|
11330
11494
|
throw new Error(`Invalid core unlock cost: ${e.id}`);
|
|
11331
|
-
|
|
11495
|
+
Ni(e);
|
|
11332
11496
|
}
|
|
11333
|
-
function
|
|
11497
|
+
function Ni(r) {
|
|
11334
11498
|
let e = -1;
|
|
11335
11499
|
for (const t of r.wisdomTrack) {
|
|
11336
11500
|
if (t.requiredSkillPoints < 0 || t.requiredSkillPoints <= e)
|
|
@@ -11338,7 +11502,7 @@ function Oi(r) {
|
|
|
11338
11502
|
e = t.requiredSkillPoints;
|
|
11339
11503
|
}
|
|
11340
11504
|
}
|
|
11341
|
-
function
|
|
11505
|
+
function Oi(r) {
|
|
11342
11506
|
return { ...r, defeatedBossIds: [...r.defeatedBossIds] };
|
|
11343
11507
|
}
|
|
11344
11508
|
function Li(r) {
|
|
@@ -11425,7 +11589,7 @@ class k {
|
|
|
11425
11589
|
}
|
|
11426
11590
|
finishRun(e) {
|
|
11427
11591
|
if (!this.runCoreId) return null;
|
|
11428
|
-
const t = this.runCoreId, a = this.requireDefinition(t), i = this.profiles.get(t) ?? k.createEmptyProfile(), o = this.getRunState(), n =
|
|
11592
|
+
const t = this.runCoreId, a = this.requireDefinition(t), i = this.profiles.get(t) ?? k.createEmptyProfile(), o = this.getRunState(), n = Oi(o), s = i.wisdomLevel, c = Math.max(0, Math.floor(this.runSkillPoints)), l = i.skillPoints + c, d = this.getWisdomLevel(a, l), u = a.wisdomTrack.slice(s, d), h = {
|
|
11429
11593
|
coreId: t,
|
|
11430
11594
|
runLevel: Math.max(1, Math.floor(e)),
|
|
11431
11595
|
skillPointsGained: c,
|
|
@@ -12302,7 +12466,7 @@ function fo(r, e, t, a) {
|
|
|
12302
12466
|
function xo(r, e, t) {
|
|
12303
12467
|
return r === "level-reached" ? Math.max(e, t) : e + t;
|
|
12304
12468
|
}
|
|
12305
|
-
function
|
|
12469
|
+
function bo(r, e) {
|
|
12306
12470
|
const t = [
|
|
12307
12471
|
r.enemyId === void 0 || r.enemyId === e.enemyId,
|
|
12308
12472
|
r.event !== "enemy-defeated" && r.variantId === void 0 || r.variantId === e.variantId,
|
|
@@ -12312,7 +12476,7 @@ function So(r, e) {
|
|
|
12312
12476
|
];
|
|
12313
12477
|
return r.event === e.type && t.every(Boolean);
|
|
12314
12478
|
}
|
|
12315
|
-
class
|
|
12479
|
+
class So extends vo {
|
|
12316
12480
|
constructor(e, t, a = null) {
|
|
12317
12481
|
super(e, t, a);
|
|
12318
12482
|
}
|
|
@@ -12345,7 +12509,7 @@ class bo extends vo {
|
|
|
12345
12509
|
}
|
|
12346
12510
|
updateDefinition(e, t) {
|
|
12347
12511
|
const a = this.progress.get(e.kind), i = a.get(e.id) ?? x();
|
|
12348
|
-
if (i.completed || !
|
|
12512
|
+
if (i.completed || !bo(e.condition, t)) return;
|
|
12349
12513
|
const o = Math.max(1, Math.floor(t.amount ?? 1)), n = xo(e.condition.event, i.progress, o), s = n >= e.condition.target;
|
|
12350
12514
|
a.set(e.id, {
|
|
12351
12515
|
...i,
|
|
@@ -12361,22 +12525,30 @@ const Co = {
|
|
|
12361
12525
|
missions: [],
|
|
12362
12526
|
challenges: [
|
|
12363
12527
|
{
|
|
12364
|
-
id: "challenge-
|
|
12528
|
+
id: "challenge-excalibur",
|
|
12365
12529
|
kind: "challenge",
|
|
12366
|
-
titleKey: "
|
|
12367
|
-
descriptionKey: "
|
|
12368
|
-
condition: { event: "
|
|
12369
|
-
rules: ["
|
|
12370
|
-
preset: {
|
|
12371
|
-
|
|
12372
|
-
|
|
12373
|
-
|
|
12374
|
-
|
|
12375
|
-
|
|
12376
|
-
|
|
12377
|
-
|
|
12530
|
+
titleKey: "objectiveChallengeExcaliburTitle",
|
|
12531
|
+
descriptionKey: "objectiveChallengeExcaliburDescription",
|
|
12532
|
+
condition: { event: "boss-defeated", target: 1, bossId: "boss-caldo-01", coreId: "core-smasher" },
|
|
12533
|
+
rules: ["objectiveChallengeExcaliburRule"],
|
|
12534
|
+
preset: {
|
|
12535
|
+
areaId: "area-caldo",
|
|
12536
|
+
disableRerolls: !1,
|
|
12537
|
+
tutorialId: "tutorial-challenge-excalibur",
|
|
12538
|
+
preserveSmasherCapturedEnemy: !0,
|
|
12539
|
+
spawnProfile: {
|
|
12540
|
+
variantByEnemyId: {
|
|
12541
|
+
piercer: "piercer-mononreuronal",
|
|
12542
|
+
spore: "spore-mononreuronal",
|
|
12543
|
+
cluster: "cluster-mononreuronal",
|
|
12544
|
+
parasite: "parasite-mononreuronal",
|
|
12545
|
+
heavy: "heavy-mononreuronal"
|
|
12546
|
+
},
|
|
12547
|
+
initialEnemies: [{ enemyId: "piercer", variantId: "piercer-blood-sword", invulnerable: !0 }]
|
|
12378
12548
|
}
|
|
12379
|
-
|
|
12549
|
+
},
|
|
12550
|
+
requiredCoreId: "core-smasher",
|
|
12551
|
+
rewards: []
|
|
12380
12552
|
}
|
|
12381
12553
|
],
|
|
12382
12554
|
achievements: [
|
|
@@ -12751,16 +12923,16 @@ class To {
|
|
|
12751
12923
|
}
|
|
12752
12924
|
}
|
|
12753
12925
|
class Po {
|
|
12754
|
-
enemies = new
|
|
12755
|
-
variants = new
|
|
12756
|
-
powerUps = new
|
|
12757
|
-
synergies = new
|
|
12758
|
-
areas = new
|
|
12759
|
-
bosses = new
|
|
12760
|
-
bossRewards = new
|
|
12761
|
-
cores = new
|
|
12762
|
-
spawnerPatterns = new
|
|
12763
|
-
tutorials = new
|
|
12926
|
+
enemies = new b("enemy");
|
|
12927
|
+
variants = new b("enemy variant");
|
|
12928
|
+
powerUps = new b("power-up");
|
|
12929
|
+
synergies = new b("synergy");
|
|
12930
|
+
areas = new b("area");
|
|
12931
|
+
bosses = new b("boss");
|
|
12932
|
+
bossRewards = new b("boss reward");
|
|
12933
|
+
cores = new b("core");
|
|
12934
|
+
spawnerPatterns = new b("spawner pattern");
|
|
12935
|
+
tutorials = new b("tutorial");
|
|
12764
12936
|
constructor(e = {}) {
|
|
12765
12937
|
this.registerCatalog(e);
|
|
12766
12938
|
}
|
|
@@ -12828,6 +13000,9 @@ class Po {
|
|
|
12828
13000
|
getTutorialForCore(e) {
|
|
12829
13001
|
return this.tutorials.values().find((t) => t.coreId === e);
|
|
12830
13002
|
}
|
|
13003
|
+
getTutorial(e) {
|
|
13004
|
+
return this.tutorials.get(e);
|
|
13005
|
+
}
|
|
12831
13006
|
}
|
|
12832
13007
|
class wo {
|
|
12833
13008
|
execute(e) {
|
|
@@ -13012,12 +13187,12 @@ class Mo {
|
|
|
13012
13187
|
class Do {
|
|
13013
13188
|
execute(e) {
|
|
13014
13189
|
const { targetEnemy: t } = e;
|
|
13015
|
-
t.experienceDropPending = !0, t.active = !1, e.shockwaves.push(
|
|
13016
|
-
for (let a = 0; a < 30; a++) e.particles.push(
|
|
13190
|
+
t.experienceDropPending = !0, t.active = !1, e.shockwaves.push(No(t));
|
|
13191
|
+
for (let a = 0; a < 30; a++) e.particles.push(Oo(t));
|
|
13017
13192
|
e.floatingTexts.push(Lo(t));
|
|
13018
13193
|
}
|
|
13019
13194
|
}
|
|
13020
|
-
function
|
|
13195
|
+
function No(r) {
|
|
13021
13196
|
return {
|
|
13022
13197
|
id: Math.random().toString(),
|
|
13023
13198
|
position: { ...r.position },
|
|
@@ -13029,7 +13204,7 @@ function Oo(r) {
|
|
|
13029
13204
|
maxLifetime: 0.5
|
|
13030
13205
|
};
|
|
13031
13206
|
}
|
|
13032
|
-
function
|
|
13207
|
+
function Oo(r) {
|
|
13033
13208
|
const e = Math.random() * Math.PI * 2, t = 180 + Math.random() * 320;
|
|
13034
13209
|
return {
|
|
13035
13210
|
id: Math.random().toString(),
|
|
@@ -13356,14 +13531,14 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13356
13531
|
lifetime: 0,
|
|
13357
13532
|
maxLifetime: 0.35
|
|
13358
13533
|
});
|
|
13359
|
-
},
|
|
13534
|
+
}, bn = (r, e) => {
|
|
13360
13535
|
if (r.variantPulseInterval <= 0 || (r.variantPulseTimer -= e.dt, r.variantPulseTimer > 0)) return;
|
|
13361
13536
|
r.variantPulseTimer += r.variantPulseInterval;
|
|
13362
13537
|
const t = e.config.gravityVortex.baseRadius, a = e.config.gravityVortex.basePullForce * 0.12;
|
|
13363
13538
|
for (const i of e.enemies)
|
|
13364
13539
|
vn(r, i) && fn(r, i, t, a);
|
|
13365
13540
|
xn(r, e, t);
|
|
13366
|
-
},
|
|
13541
|
+
}, Sn = (r) => {
|
|
13367
13542
|
r.enemy.triggerDissolveDeath(!0);
|
|
13368
13543
|
const e = r.config.gravityVortex;
|
|
13369
13544
|
r.vortices.push({
|
|
@@ -13376,8 +13551,8 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13376
13551
|
isRepulsive: !0
|
|
13377
13552
|
});
|
|
13378
13553
|
}, Cn = {
|
|
13379
|
-
onUpdate:
|
|
13380
|
-
onChainReaction:
|
|
13554
|
+
onUpdate: bn,
|
|
13555
|
+
onChainReaction: Sn
|
|
13381
13556
|
}, An = (r) => {
|
|
13382
13557
|
r.enemy.triggerSliceDeath(r.angle, !0);
|
|
13383
13558
|
}, In = (r, e) => e !== "toxic-pool" && e !== "gravity-vortex", Rn = {
|
|
@@ -13432,7 +13607,7 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13432
13607
|
autoDeflectFromCore: !0,
|
|
13433
13608
|
synergyKey: (r) => r.color
|
|
13434
13609
|
}
|
|
13435
|
-
},
|
|
13610
|
+
}, N = (r) => Rn[r] ?? {
|
|
13436
13611
|
rendererId: "circle",
|
|
13437
13612
|
rotatesWithVelocity: !0,
|
|
13438
13613
|
canBeChainReactionTarget: !0,
|
|
@@ -13448,7 +13623,7 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13448
13623
|
canBeGrabbed: !0,
|
|
13449
13624
|
initialRotation: "none",
|
|
13450
13625
|
impactStrategyFactory: () => new Do(),
|
|
13451
|
-
behavior:
|
|
13626
|
+
behavior: N("piercer"),
|
|
13452
13627
|
spawnWeight: 0.2,
|
|
13453
13628
|
ambientSpawn: !0
|
|
13454
13629
|
},
|
|
@@ -13462,7 +13637,7 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13462
13637
|
canBeGrabbed: !0,
|
|
13463
13638
|
initialRotation: "none",
|
|
13464
13639
|
impactStrategyFactory: () => new _o(),
|
|
13465
|
-
behavior:
|
|
13640
|
+
behavior: N("spore"),
|
|
13466
13641
|
spawnWeight: 0.2,
|
|
13467
13642
|
ambientSpawn: !0
|
|
13468
13643
|
},
|
|
@@ -13476,7 +13651,7 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13476
13651
|
canBeGrabbed: !0,
|
|
13477
13652
|
initialRotation: "none",
|
|
13478
13653
|
impactStrategyFactory: () => new wo(),
|
|
13479
|
-
behavior:
|
|
13654
|
+
behavior: N("cluster"),
|
|
13480
13655
|
spawnWeight: 0.2,
|
|
13481
13656
|
ambientSpawn: !0
|
|
13482
13657
|
},
|
|
@@ -13490,7 +13665,7 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13490
13665
|
canBeGrabbed: !0,
|
|
13491
13666
|
initialRotation: "none",
|
|
13492
13667
|
impactStrategyFactory: () => new ko(),
|
|
13493
|
-
behavior:
|
|
13668
|
+
behavior: N("parasite"),
|
|
13494
13669
|
spawnWeight: 0.2,
|
|
13495
13670
|
ambientSpawn: !0
|
|
13496
13671
|
},
|
|
@@ -13504,7 +13679,7 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13504
13679
|
canBeGrabbed: !0,
|
|
13505
13680
|
initialRotation: "random",
|
|
13506
13681
|
impactStrategyFactory: () => new Mo(),
|
|
13507
|
-
behavior:
|
|
13682
|
+
behavior: N("heavy"),
|
|
13508
13683
|
spawnWeight: 0.2,
|
|
13509
13684
|
ambientSpawn: !0,
|
|
13510
13685
|
requiredUnlockId: "heavy-shield"
|
|
@@ -13518,7 +13693,7 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13518
13693
|
eyeProfile: "none",
|
|
13519
13694
|
canBeGrabbed: !1,
|
|
13520
13695
|
initialRotation: "none",
|
|
13521
|
-
behavior:
|
|
13696
|
+
behavior: N("micro"),
|
|
13522
13697
|
spawnWeight: 0,
|
|
13523
13698
|
ambientSpawn: !1
|
|
13524
13699
|
}
|
|
@@ -13577,6 +13752,18 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13577
13752
|
step1TextKey: "tutorialSmasherStep1Text",
|
|
13578
13753
|
step2TextKey: "tutorialSmasherStep2Text",
|
|
13579
13754
|
warningTextKey: "tutorialSmasherWarning"
|
|
13755
|
+
},
|
|
13756
|
+
{
|
|
13757
|
+
id: "tutorial-challenge-excalibur",
|
|
13758
|
+
coreId: "core-smasher",
|
|
13759
|
+
mechanic: "smasher",
|
|
13760
|
+
primaryEnemyId: "piercer",
|
|
13761
|
+
primaryVariantId: "piercer-blood-sword",
|
|
13762
|
+
primaryChallengeInvulnerable: !0,
|
|
13763
|
+
secondaryEnemyId: "spore",
|
|
13764
|
+
step1TextKey: "tutorialExcaliburStep1Text",
|
|
13765
|
+
step2TextKey: "tutorialExcaliburStep2Text",
|
|
13766
|
+
warningTextKey: "tutorialExcaliburWarning"
|
|
13580
13767
|
}
|
|
13581
13768
|
], kn = ["piercer", "spore", "cluster", "parasite", "heavy"], Mn = kn.map((r) => ({
|
|
13582
13769
|
id: `${r}-mononreuronal`,
|
|
@@ -13632,7 +13819,7 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13632
13819
|
canBeDamagedByCore: !0,
|
|
13633
13820
|
canBeKilledByCoreRepelWave: !1
|
|
13634
13821
|
}
|
|
13635
|
-
],
|
|
13822
|
+
], Nn = [
|
|
13636
13823
|
{
|
|
13637
13824
|
id: "spore-camuflaespora",
|
|
13638
13825
|
baseEnemyId: "spore",
|
|
@@ -13652,7 +13839,7 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13652
13839
|
canBeDamagedByCore: !0,
|
|
13653
13840
|
canBeKilledByCoreRepelWave: !1
|
|
13654
13841
|
}
|
|
13655
|
-
],
|
|
13842
|
+
], On = [
|
|
13656
13843
|
{
|
|
13657
13844
|
id: "cluster-orbital",
|
|
13658
13845
|
baseEnemyId: "cluster",
|
|
@@ -13693,7 +13880,7 @@ const zo = (r, e, t) => e !== r && !t.includes(e) && e.active && !e.isGrabbed &&
|
|
|
13693
13880
|
}
|
|
13694
13881
|
], xe = new Po({
|
|
13695
13882
|
enemies: Tn,
|
|
13696
|
-
variants: [...Mn, ...Dn, ...
|
|
13883
|
+
variants: [...Mn, ...Dn, ...Nn, ...On, ...Pn, ...Ln],
|
|
13697
13884
|
areas: [
|
|
13698
13885
|
{
|
|
13699
13886
|
id: "area-caldo",
|
|
@@ -14452,10 +14639,17 @@ class ps {
|
|
|
14452
14639
|
timeout = null;
|
|
14453
14640
|
titleKey = null;
|
|
14454
14641
|
descriptionKey = null;
|
|
14642
|
+
eyebrowKey = "objectiveAchievementToast";
|
|
14455
14643
|
constructor(e, t) {
|
|
14456
14644
|
this.i18n = t, this.container = document.createElement("aside"), this.container.className = "axon-objective-toast", this.container.setAttribute("role", "status"), this.container.setAttribute("aria-live", "polite"), this.container.style.display = "none", e.appendChild(this.container);
|
|
14457
14645
|
}
|
|
14458
14646
|
show(e, t) {
|
|
14647
|
+
this.eyebrowKey = "objectiveAchievementToast", this.showInternal(e, t);
|
|
14648
|
+
}
|
|
14649
|
+
showChallengeFailed(e) {
|
|
14650
|
+
this.eyebrowKey = "objectiveChallengeFailed", this.showInternal(e, "objectiveChallengeFailedDescription");
|
|
14651
|
+
}
|
|
14652
|
+
showInternal(e, t) {
|
|
14459
14653
|
this.titleKey = e, this.descriptionKey = t, this.render(), this.container.style.display = "block", this.timeout !== null && window.clearTimeout(this.timeout), this.timeout = window.setTimeout(() => {
|
|
14460
14654
|
this.container.style.display = "none", this.timeout = null;
|
|
14461
14655
|
}, 4200);
|
|
@@ -14470,7 +14664,7 @@ class ps {
|
|
|
14470
14664
|
!this.titleKey || !this.descriptionKey || (this.container.innerHTML = `
|
|
14471
14665
|
${X("achievement")}
|
|
14472
14666
|
<div class="axon-objective-toast-copy">
|
|
14473
|
-
<p>${this.i18n.translate(
|
|
14667
|
+
<p>${this.i18n.translate(this.eyebrowKey)}</p>
|
|
14474
14668
|
<strong>${this.i18n.translate(this.titleKey)}</strong>
|
|
14475
14669
|
<span>${this.i18n.translate(this.descriptionKey)}</span>
|
|
14476
14670
|
</div>
|
|
@@ -14512,11 +14706,11 @@ function gs(r) {
|
|
|
14512
14706
|
});
|
|
14513
14707
|
}
|
|
14514
14708
|
function ys(r, e) {
|
|
14515
|
-
Es(r), vs(r, e), fs(r), xs(r),
|
|
14709
|
+
Es(r), vs(r, e), fs(r), xs(r), bs(r), Ss(r), Cs(r), As(r), ms(r), Is(r), _a(r), Rs(r), Ba(r);
|
|
14516
14710
|
}
|
|
14517
14711
|
function Es(r) {
|
|
14518
14712
|
const e = Ei();
|
|
14519
|
-
r.configManager = new
|
|
14713
|
+
r.configManager = new O(), r.content = xe, r.corePreview = new qe(0, 0, r.configManager.getConfig().core), r.powerUpRegistry = new qa(r.configManager, gi), r.geneticMemory = new W(yi, new T(e)), r.coreRoster = new k(Si, r.geneticMemory, e), r.codex = new Gi(Ji, e), r.missionGenerator = new ro(r.codex), r.bossCodex = new K(ao, e), r.objectives = new So(Co, e, (t) => r.applyObjectiveReward(t)), r.areaDirector = new Ao(xe), r.bossEncounter = new To(st());
|
|
14520
14714
|
}
|
|
14521
14715
|
function vs(r, e) {
|
|
14522
14716
|
r.container = e.root, r.container.classList.add("axon-game-root"), r.i18n = new Ha(e.language), r.themeManager = new cr(e.theme, r.container), r.platform = e.platform || new Ua(), r.canvas = document.createElement("canvas"), r.canvas.className = "axon-canvas", r.container.appendChild(r.canvas), r.resizeCanvas(), window.addEventListener("resize", () => r.resizeCanvas());
|
|
@@ -14541,12 +14735,12 @@ function xs(r) {
|
|
|
14541
14735
|
}
|
|
14542
14736
|
});
|
|
14543
14737
|
}
|
|
14544
|
-
function
|
|
14738
|
+
function bs(r) {
|
|
14545
14739
|
r.coreInteraction = new xt(r.inputManager, r.core), r.interactiveTutorial = new pa(r.entityFactory, new Ae(), null, Qe()), r.tutorialOverlay = new ma(r.container, r.i18n, r.interactiveTutorial), r.hud = new ga(r.container, () => {
|
|
14546
14740
|
r.isPaused = !0, r.settingsModal.show();
|
|
14547
14741
|
}), r.hud.show();
|
|
14548
14742
|
}
|
|
14549
|
-
function
|
|
14743
|
+
function Ss(r) {
|
|
14550
14744
|
r.progressBar = new ya((e) => {
|
|
14551
14745
|
r.waveDirector.wave = e, r.triggerLevelUp(e);
|
|
14552
14746
|
}), r.performanceAudit = new Ea(r.container, r.debugPerformanceEnabled, r.i18n);
|
|
@@ -14585,10 +14779,10 @@ function As(r) {
|
|
|
14585
14779
|
}
|
|
14586
14780
|
}), r.geneticMemoryOverlay = new Da(r.container, r.i18n, r.geneticMemory, () => {
|
|
14587
14781
|
r.geneticMemoryOverlay.hide(), r.showStartMenu();
|
|
14588
|
-
}), r.codexToast = new
|
|
14782
|
+
}), r.codexToast = new Na(r.container, r.i18n);
|
|
14589
14783
|
}
|
|
14590
14784
|
function Is(r) {
|
|
14591
|
-
r.challengesOverlay = new
|
|
14785
|
+
r.challengesOverlay = new Oe({
|
|
14592
14786
|
parent: r.container,
|
|
14593
14787
|
i18n: r.i18n,
|
|
14594
14788
|
objectives: r.objectives,
|
|
@@ -14599,7 +14793,7 @@ function Is(r) {
|
|
|
14599
14793
|
},
|
|
14600
14794
|
onStartChallenge: (e) => r.startChallenge(e),
|
|
14601
14795
|
getSelectedCoreId: () => r.coreRoster.getSelectedCoreId()
|
|
14602
|
-
}), r.achievementsOverlay = new
|
|
14796
|
+
}), r.achievementsOverlay = new Oe({
|
|
14603
14797
|
parent: r.container,
|
|
14604
14798
|
i18n: r.i18n,
|
|
14605
14799
|
objectives: r.objectives,
|
|
@@ -14621,15 +14815,25 @@ function Rs(r) {
|
|
|
14621
14815
|
}), r.unsubscribeCoreRoster = r.coreRoster.subscribe(() => {
|
|
14622
14816
|
r.syncSelectedCorePreview(), r.startMenu.renderContent();
|
|
14623
14817
|
}), r.unsubscribeObjectives = r.objectives.subscribe((e) => {
|
|
14624
|
-
|
|
14625
|
-
const t = r.objectives.getSnapshot("achievement", e.id);
|
|
14626
|
-
r.objectiveToast.show(t.titleKey, t.descriptionKey);
|
|
14627
|
-
}
|
|
14628
|
-
e.kind === "mission" && e.type === "claimed" && r.refreshGeneratedMission(!0);
|
|
14818
|
+
Ts(r), Ps(r, e);
|
|
14629
14819
|
});
|
|
14630
14820
|
}
|
|
14821
|
+
function Ts(r) {
|
|
14822
|
+
r.startMenu.renderContent(), r.missionsDrawer.render(), r.challengesOverlay.renderContent(), r.achievementsOverlay.renderContent();
|
|
14823
|
+
}
|
|
14824
|
+
function Ps(r, e) {
|
|
14825
|
+
if (e.type === "completed" && e.kind === "achievement") {
|
|
14826
|
+
const t = r.objectives.getSnapshot("achievement", e.id);
|
|
14827
|
+
r.objectiveToast.show(t.titleKey, t.descriptionKey);
|
|
14828
|
+
}
|
|
14829
|
+
if (e.type === "challenge-failed" && e.kind === "challenge") {
|
|
14830
|
+
const t = r.objectives.getSnapshot("challenge", e.id);
|
|
14831
|
+
r.objectiveToast.showChallengeFailed(t.titleKey);
|
|
14832
|
+
}
|
|
14833
|
+
e.kind === "mission" && e.type === "claimed" && r.refreshGeneratedMission(!0);
|
|
14834
|
+
}
|
|
14631
14835
|
const Ve = 0.25, Q = 1.8;
|
|
14632
|
-
class
|
|
14836
|
+
class ws {
|
|
14633
14837
|
container;
|
|
14634
14838
|
canvas;
|
|
14635
14839
|
i18n;
|
|
@@ -14769,22 +14973,22 @@ class Ts {
|
|
|
14769
14973
|
ys(this, e);
|
|
14770
14974
|
}
|
|
14771
14975
|
}
|
|
14772
|
-
function
|
|
14976
|
+
function ks(r, e) {
|
|
14773
14977
|
r.i18n.setLanguage(e), r.onLanguageChanged(e);
|
|
14774
14978
|
}
|
|
14775
|
-
function
|
|
14979
|
+
function Ms(r, e) {
|
|
14776
14980
|
r.themeManager.setTheme(e);
|
|
14777
14981
|
}
|
|
14778
|
-
function
|
|
14982
|
+
function Ds(r) {
|
|
14779
14983
|
return r.i18n.getLanguage();
|
|
14780
14984
|
}
|
|
14781
|
-
function
|
|
14985
|
+
function Ns(r) {
|
|
14782
14986
|
return r.themeManager.getTheme();
|
|
14783
14987
|
}
|
|
14784
|
-
function
|
|
14988
|
+
function Os(r, e) {
|
|
14785
14989
|
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();
|
|
14786
14990
|
}
|
|
14787
|
-
function
|
|
14991
|
+
function Ls(r) {
|
|
14788
14992
|
r.ambientEnemies = [];
|
|
14789
14993
|
for (let e = 0; e < 16; e++) {
|
|
14790
14994
|
const t = r.content.enemies.values().filter((c) => c.ambientSpawn && (!c.requiredUnlockId || r.geneticMemory.isUnlocked(c.requiredUnlockId))).map((c) => c.id);
|
|
@@ -14799,15 +15003,15 @@ function Os(r) {
|
|
|
14799
15003
|
r.ambientEnemies.push(s);
|
|
14800
15004
|
}
|
|
14801
15005
|
}
|
|
14802
|
-
function
|
|
15006
|
+
function _s(r) {
|
|
14803
15007
|
const e = r.coreRoster.getSelectedCore();
|
|
14804
15008
|
r.core.setMechanic(e.mechanic), r.coreInteraction.setMechanic(e.mechanic);
|
|
14805
15009
|
}
|
|
14806
|
-
function
|
|
15010
|
+
function js(r) {
|
|
14807
15011
|
const e = r.container.clientWidth || window.innerWidth, t = r.container.clientHeight || window.innerHeight, a = 1100, i = 750, o = e / Math.max(1, t);
|
|
14808
15012
|
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 });
|
|
14809
15013
|
}
|
|
14810
|
-
class
|
|
15014
|
+
class Bs {
|
|
14811
15015
|
origin;
|
|
14812
15016
|
position;
|
|
14813
15017
|
previousPosition;
|
|
@@ -14841,7 +15045,7 @@ class _s {
|
|
|
14841
15045
|
return this.origin;
|
|
14842
15046
|
}
|
|
14843
15047
|
}
|
|
14844
|
-
const
|
|
15048
|
+
const Hs = {
|
|
14845
15049
|
"toxic-radius": (r) => {
|
|
14846
15050
|
const e = r.getConfig().toxicPool;
|
|
14847
15051
|
r.updateConfig({
|
|
@@ -14875,11 +15079,11 @@ const js = {
|
|
|
14875
15079
|
r.addCoreRing(1);
|
|
14876
15080
|
}
|
|
14877
15081
|
};
|
|
14878
|
-
function
|
|
15082
|
+
function Us(r, e) {
|
|
14879
15083
|
for (const t of r.getActivePassiveEffectIds())
|
|
14880
|
-
|
|
15084
|
+
Hs[t](e);
|
|
14881
15085
|
}
|
|
14882
|
-
const
|
|
15086
|
+
const zs = {
|
|
14883
15087
|
"core-life-ring": (r) => r.addCoreRing(1),
|
|
14884
15088
|
"core-protection": (r, e) => {
|
|
14885
15089
|
const t = e.effectValue ?? 120, a = r.getConfig().core;
|
|
@@ -14920,49 +15124,49 @@ const Hs = {
|
|
|
14920
15124
|
"core-skin": () => {
|
|
14921
15125
|
}
|
|
14922
15126
|
};
|
|
14923
|
-
function
|
|
15127
|
+
function Ks(r, e) {
|
|
14924
15128
|
for (const t of r.getActiveWisdomEffects())
|
|
14925
|
-
t.effectId &&
|
|
15129
|
+
t.effectId && zs[t.effectId](e, t);
|
|
14926
15130
|
}
|
|
14927
|
-
function
|
|
14928
|
-
|
|
14929
|
-
const e =
|
|
14930
|
-
|
|
15131
|
+
function Fs(r) {
|
|
15132
|
+
Gs(r), Vs(r);
|
|
15133
|
+
const e = qs(r);
|
|
15134
|
+
Xs(r, e);
|
|
14931
15135
|
}
|
|
14932
|
-
function
|
|
15136
|
+
function Gs(r) {
|
|
14933
15137
|
r.eventBus.on("onCoreDamaged", () => {
|
|
14934
15138
|
r.settingsModal.isHapticsEnabled() && r.platform.haptics.notification("error");
|
|
14935
15139
|
});
|
|
14936
15140
|
}
|
|
14937
|
-
function
|
|
15141
|
+
function Vs(r) {
|
|
14938
15142
|
r.eventBus.on("onGameOver", () => {
|
|
14939
|
-
r.isDeathSequenceActive || (r.objectives.cancelActiveChallenge(), r.challengeRunId = null, r.pendingCoreRunSummary = r.coreRoster.finishRun(r.progressBar.getLevel()),
|
|
15143
|
+
r.isDeathSequenceActive || (r.objectives.cancelActiveChallenge(), r.challengeRunId = null, r.pendingCoreRunSummary = r.coreRoster.finishRun(r.progressBar.getLevel()), Ws(r), r.clearTransientRunEntities(), r.bossCatalyst = null, r.resetBossExposureBurst(), r.bossEncounter.reset(), r.areaDirector.reset(), r.waveDirector.setArea(r.areaDirector.getArea()), r.isLevelUpActive = !1, r.tutorialOverlay.hide(), r.juice.triggerFlash(1), r.juice.triggerScreenShake({ x: 0, y: 1 }, 32));
|
|
14940
15144
|
});
|
|
14941
15145
|
}
|
|
14942
|
-
function
|
|
15146
|
+
function Ws(r) {
|
|
14943
15147
|
r.isRunning = !1, r.isPaused = !1, r.isDeathSequenceActive = !0, r.deathSequenceElapsed = 0;
|
|
14944
15148
|
}
|
|
14945
|
-
function
|
|
15149
|
+
function qs(r) {
|
|
14946
15150
|
return {
|
|
14947
|
-
pointerDown: (e = !1) =>
|
|
14948
|
-
pointerUp: () =>
|
|
15151
|
+
pointerDown: (e = !1) => $s(r, e),
|
|
15152
|
+
pointerUp: () => Js(r)
|
|
14949
15153
|
};
|
|
14950
15154
|
}
|
|
14951
|
-
function
|
|
15155
|
+
function $s(r, e) {
|
|
14952
15156
|
if (!r.isRunning || r.isPaused || r.isLevelUpActive) return;
|
|
14953
15157
|
const t = r.coreInteraction.pointerDown(r.enemies, e);
|
|
14954
|
-
|
|
15158
|
+
Ys(r, t), Zs(r, t, e), t && r.settingsModal.isHapticsEnabled() && r.platform.haptics.impact("light");
|
|
14955
15159
|
}
|
|
14956
|
-
function
|
|
15160
|
+
function Ys(r, e) {
|
|
14957
15161
|
!e?.enemy || e.mechanic !== "launcher" && e.mechanic !== "smasher" || (r.codex.recordControlled(e.enemy.type), r.coreRoster.recordSkillEvent("controlled"), r.objectives.record({
|
|
14958
15162
|
type: "enemy-controlled",
|
|
14959
15163
|
enemyId: e.enemy.type,
|
|
14960
15164
|
coreId: r.coreRoster.getSelectedCoreId()
|
|
14961
15165
|
}));
|
|
14962
15166
|
}
|
|
14963
|
-
function
|
|
15167
|
+
function Zs(r, e, t) {
|
|
14964
15168
|
e?.mechanic !== "repellent" || !e.waveOrigin || r.repelProjectiles.push(
|
|
14965
|
-
new
|
|
15169
|
+
new Bs({
|
|
14966
15170
|
origin: r.core.position,
|
|
14967
15171
|
target: e.waveOrigin,
|
|
14968
15172
|
color: r.core.getColorHex(),
|
|
@@ -14971,12 +15175,12 @@ function $s(r, e, t) {
|
|
|
14971
15175
|
})
|
|
14972
15176
|
);
|
|
14973
15177
|
}
|
|
14974
|
-
function
|
|
15178
|
+
function Js(r) {
|
|
14975
15179
|
if (!r.isRunning || r.isPaused || r.isLevelUpActive) return;
|
|
14976
15180
|
const e = r.coreInteraction.getMechanic(), t = r.coreInteraction.pointerUp();
|
|
14977
15181
|
e === "smasher" && t && (r.pendingSmasherRelease = t), t && r.settingsModal.isHapticsEnabled() && r.platform.haptics.impact("medium");
|
|
14978
15182
|
}
|
|
14979
|
-
function
|
|
15183
|
+
function Xs(r, e) {
|
|
14980
15184
|
r.canvas.addEventListener("mousedown", (t) => {
|
|
14981
15185
|
t.button === 0 && e.pointerDown(!1);
|
|
14982
15186
|
}), r.canvas.addEventListener("mouseup", (t) => {
|
|
@@ -14985,33 +15189,40 @@ function Zs(r, e) {
|
|
|
14985
15189
|
passive: !0
|
|
14986
15190
|
}), r.canvas.addEventListener("touchend", e.pointerUp, { passive: !0 }), r.canvas.addEventListener("touchcancel", e.pointerUp, { passive: !0 });
|
|
14987
15191
|
}
|
|
14988
|
-
function
|
|
15192
|
+
function Qs(r) {
|
|
14989
15193
|
r.missionsDrawer.setAvailable(!1), r.configManager.resetToDefault();
|
|
14990
15194
|
const e = r.coreRoster.getSelectedCore(), t = r.challengeRunId ? r.objectives.getActiveChallenge() : void 0;
|
|
14991
|
-
|
|
15195
|
+
ec(r, e, t), rc(r, e.id, t);
|
|
15196
|
+
}
|
|
15197
|
+
function ec(r, e, t) {
|
|
15198
|
+
r.core.setMechanic(e.mechanic), r.coreInteraction.setMechanic(e.mechanic), Us(r.geneticMemory, r.configManager), r.coreRoster.startRun(), Ks(r.coreRoster, r.configManager), r.objectives.record({ type: "run-started", coreId: e.id }), r.score.value = 0, r.combo.value = 0, 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), tc(r, t);
|
|
14992
15199
|
}
|
|
14993
|
-
function
|
|
14994
|
-
r.core.
|
|
15200
|
+
function tc(r, e) {
|
|
15201
|
+
r.core.reset(r.canvas.width / 2, r.canvas.height / 2), r.areaDirector.reset(e?.preset?.areaId ?? "area-caldo"), 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;
|
|
14995
15202
|
}
|
|
14996
|
-
function
|
|
14997
|
-
|
|
15203
|
+
function rc(r, e, t) {
|
|
15204
|
+
const a = t?.preset?.tutorialId, i = ac(r, e, a, !!t);
|
|
15205
|
+
r.interactiveTutorial.setDefinition(i), ic(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());
|
|
14998
15206
|
}
|
|
14999
|
-
function
|
|
15000
|
-
|
|
15207
|
+
function ac(r, e, t, a) {
|
|
15208
|
+
return a ? t ? r.content.getTutorial(t) ?? null : null : r.content.getTutorialForCore(e) ?? null;
|
|
15001
15209
|
}
|
|
15002
|
-
function
|
|
15210
|
+
function ic(r, e) {
|
|
15211
|
+
return !r.interactiveTutorial.hasDefinition() || r.debugBossEnabled ? !1 : e || r.interactiveTutorial.isTutorialEnabled();
|
|
15212
|
+
}
|
|
15213
|
+
function oc(r) {
|
|
15003
15214
|
r.clearTransientRunEntities(), r.juice.reset();
|
|
15004
15215
|
}
|
|
15005
|
-
function
|
|
15216
|
+
function nc(r, e) {
|
|
15006
15217
|
for (let t = r.repelProjectiles.length - 1; t >= 0; t--) {
|
|
15007
15218
|
const a = r.repelProjectiles[t];
|
|
15008
|
-
(!a ||
|
|
15219
|
+
(!a || sc(r, a, e, t)) && r.repelProjectiles.splice(t, 1);
|
|
15009
15220
|
}
|
|
15010
15221
|
}
|
|
15011
|
-
function
|
|
15012
|
-
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() ?
|
|
15222
|
+
function sc(r, e, t, a) {
|
|
15223
|
+
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() ? cc(r) : lc(r, e, a)), !0);
|
|
15013
15224
|
}
|
|
15014
|
-
function
|
|
15225
|
+
function cc(r) {
|
|
15015
15226
|
$e.damageCore({
|
|
15016
15227
|
core: r.core,
|
|
15017
15228
|
enemies: r.enemies,
|
|
@@ -15028,7 +15239,7 @@ function ic(r) {
|
|
|
15028
15239
|
allowProtection: !1
|
|
15029
15240
|
});
|
|
15030
15241
|
}
|
|
15031
|
-
function
|
|
15242
|
+
function lc(r, e, t) {
|
|
15032
15243
|
const a = r.coreInteraction.resolveRepelWave(r.enemies, e.target, e.isTouch);
|
|
15033
15244
|
for (const i of a)
|
|
15034
15245
|
r.codex.recordControlled(i.type), r.objectives.record({
|
|
@@ -15047,12 +15258,12 @@ function oc(r, e, t) {
|
|
|
15047
15258
|
maxLifetime: 0.34
|
|
15048
15259
|
});
|
|
15049
15260
|
}
|
|
15050
|
-
function
|
|
15261
|
+
function dc(r, e) {
|
|
15051
15262
|
const t = e.position.x - e.previousPosition.x, a = e.position.y - e.previousPosition.y, i = t * t + a * a;
|
|
15052
15263
|
if (i <= 1e-4) return !1;
|
|
15053
15264
|
const o = Math.atan2(-a, -t);
|
|
15054
15265
|
return r.enemies.some(
|
|
15055
|
-
(n) =>
|
|
15266
|
+
(n) => uc({
|
|
15056
15267
|
enemy: n,
|
|
15057
15268
|
projectile: e,
|
|
15058
15269
|
movementX: t,
|
|
@@ -15062,16 +15273,16 @@ function nc(r, e) {
|
|
|
15062
15273
|
})
|
|
15063
15274
|
);
|
|
15064
15275
|
}
|
|
15065
|
-
function
|
|
15276
|
+
function uc(r) {
|
|
15066
15277
|
const { enemy: e, projectile: t, movementX: a, movementY: i, segmentLengthSquared: o, approachAngle: n } = r;
|
|
15067
15278
|
if (!e.active || e.isDying || e.isGrabbed || e.isThrown || !e.isFrontCoverageHit(n)) return !1;
|
|
15068
15279
|
const s = e.position.x - t.previousPosition.x, c = e.position.y - t.previousPosition.y, l = Math.max(0, Math.min(1, (s * a + c * i) / o)), d = t.previousPosition.x + a * l, u = t.previousPosition.y + i * l, h = e.position.x - d, m = e.position.y - u, g = e.getFrontCoverageRadius() + t.radius;
|
|
15069
15280
|
return h * h + m * m <= g * g;
|
|
15070
15281
|
}
|
|
15071
|
-
function
|
|
15282
|
+
function hc(r) {
|
|
15072
15283
|
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();
|
|
15073
15284
|
}
|
|
15074
|
-
function
|
|
15285
|
+
function pc(r, e) {
|
|
15075
15286
|
if (r.deathSequenceElapsed = Math.min(ye, r.deathSequenceElapsed + e), r.juice.update(e, r.floatingTexts, r.particles), !(r.deathSequenceElapsed < ye))
|
|
15076
15287
|
if (r.isDeathSequenceActive = !1, r.clearTransientRunState(), r.initAmbientArena(), r.pendingCoreRunSummary) {
|
|
15077
15288
|
const t = r.pendingCoreRunSummary;
|
|
@@ -15079,23 +15290,23 @@ function lc(r, e) {
|
|
|
15079
15290
|
} else
|
|
15080
15291
|
r.showStartMenu();
|
|
15081
15292
|
}
|
|
15082
|
-
function
|
|
15083
|
-
if (r.performanceAudit.beginFrame(),
|
|
15084
|
-
|
|
15085
|
-
const t =
|
|
15086
|
-
|
|
15293
|
+
function mc(r, e) {
|
|
15294
|
+
if (r.performanceAudit.beginFrame(), gc(r), Ec(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), vc(r, e), fc(r, e)) || (r.areaIntroElapsed = Math.min(Q, r.areaIntroElapsed + Math.max(0, e)), bc(r, e))) return;
|
|
15295
|
+
Sc(r, e), Cc(r, e);
|
|
15296
|
+
const t = Tc(r, e);
|
|
15297
|
+
wc(r, e), r.spawnExperienceDrops(), r.isLevelUpActive || (r.updateExperienceOrbs(e), r.updateEcosomaOrbs(e)), r.progressBar.update(e), r.hud.update(r.combo.value), r.juice.update(e, r.floatingTexts, r.particles), r.enemies = r.enemies.filter((a) => a.active), F(r, r.enemies.length, t);
|
|
15087
15298
|
}
|
|
15088
|
-
function
|
|
15089
|
-
const e = r.isPaused ? "PAUSED" :
|
|
15299
|
+
function gc(r) {
|
|
15300
|
+
const e = r.isPaused ? "PAUSED" : yc(r);
|
|
15090
15301
|
r.performanceAudit.setState(e), r.performanceAudit.setEcosomaDropChance(r.getEcosomaDropPolicy().getChance(r.progressBar.getLevel()));
|
|
15091
15302
|
}
|
|
15092
|
-
function
|
|
15303
|
+
function yc(r) {
|
|
15093
15304
|
return r.isRunning ? "GAME" : "MENU";
|
|
15094
15305
|
}
|
|
15095
|
-
function
|
|
15306
|
+
function Ec(r, e) {
|
|
15096
15307
|
return r.areaDirector.getPhase() !== "boss" || !r.bossEncounter.isIntroPaused() ? !1 : (r.bossEncounter.update(e, r.core.position), F(r, 0), !0);
|
|
15097
15308
|
}
|
|
15098
|
-
function
|
|
15309
|
+
function vc(r, e) {
|
|
15099
15310
|
r.isRunning && !r.isPaused && r.updateRepelProjectiles(e);
|
|
15100
15311
|
}
|
|
15101
15312
|
function F(r, e, t = 0) {
|
|
@@ -15108,22 +15319,22 @@ function F(r, e, t = 0) {
|
|
|
15108
15319
|
floatingTexts: r.floatingTexts.length
|
|
15109
15320
|
});
|
|
15110
15321
|
}
|
|
15111
|
-
function
|
|
15322
|
+
function fc(r, e) {
|
|
15112
15323
|
if (r.isDeathSequenceActive)
|
|
15113
15324
|
return r.updateDeathSequence(e), F(r, 0), !0;
|
|
15114
15325
|
if (r.isRunning && !r.isPaused) return !1;
|
|
15115
15326
|
for (const t of r.ambientEnemies)
|
|
15116
|
-
t.update(e),
|
|
15327
|
+
t.update(e), xc(r, t);
|
|
15117
15328
|
return r.recordEnemyObservations(r.ambientEnemies), F(r, r.ambientEnemies.length), !0;
|
|
15118
15329
|
}
|
|
15119
|
-
function
|
|
15330
|
+
function xc(r, e) {
|
|
15120
15331
|
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);
|
|
15121
15332
|
}
|
|
15122
|
-
function
|
|
15333
|
+
function bc(r, e) {
|
|
15123
15334
|
const t = r.areaDirector.getPhase();
|
|
15124
15335
|
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), F(r, 0), !0);
|
|
15125
15336
|
}
|
|
15126
|
-
function
|
|
15337
|
+
function Sc(r, e) {
|
|
15127
15338
|
const t = r.areaDirector.getPhase();
|
|
15128
15339
|
if (r.interactiveTutorial.isActive) {
|
|
15129
15340
|
r.interactiveTutorial.update({
|
|
@@ -15144,20 +15355,20 @@ function vc(r, e) {
|
|
|
15144
15355
|
const a = r.waveDirector.update({ dt: e, activeEnemies: r.enemies, width: r.canvas.width, height: r.canvas.height, corePos: r.core.position });
|
|
15145
15356
|
a && (r.enemies.push(a), r.recordEnemyObservation(a)), r.recordEnemyObservations(r.enemies);
|
|
15146
15357
|
}
|
|
15147
|
-
function
|
|
15358
|
+
function Cc(r, e) {
|
|
15148
15359
|
if (!r.isLevelUpActive) return;
|
|
15149
15360
|
r.inputManager.tryGrabOrb(r.orbitingOrbs);
|
|
15150
15361
|
const t = r.inputManager.grabbedOrb;
|
|
15151
|
-
!r.inputManager.isPointerDown && t && (t.isGrabbed = !1, r.inputManager.grabbedOrb = null),
|
|
15362
|
+
!r.inputManager.isPointerDown && t && (t.isGrabbed = !1, r.inputManager.grabbedOrb = null), Ac(r);
|
|
15152
15363
|
for (const a of r.orbitingOrbs)
|
|
15153
|
-
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 ?
|
|
15364
|
+
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 ? Ic(r, a) : a.update(e, r.core.position);
|
|
15154
15365
|
}
|
|
15155
|
-
function
|
|
15366
|
+
function Ac(r) {
|
|
15156
15367
|
if (!r.inputManager.isPointerDown || r.inputManager.grabbedOrb || r.rerollsRemaining <= 0) return;
|
|
15157
15368
|
const e = r.canvas.width / 2, t = r.canvas.height / 2 + 300;
|
|
15158
15369
|
Math.hypot(r.inputManager.pointerPosition.x - e, r.inputManager.pointerPosition.y - t) <= 80 && (r.triggerReroll(), r.inputManager.consumePointerDown());
|
|
15159
15370
|
}
|
|
15160
|
-
function
|
|
15371
|
+
function Ic(r, e) {
|
|
15161
15372
|
e.position = { ...r.inputManager.pointerPosition };
|
|
15162
15373
|
const t = r.core.position.x - e.position.x, a = r.core.position.y - e.position.y;
|
|
15163
15374
|
if (!(Math.hypot(t, a) > r.core.radius + e.radius)) {
|
|
@@ -15172,11 +15383,11 @@ function Sc(r, e) {
|
|
|
15172
15383
|
maxLifetime: 1.6,
|
|
15173
15384
|
size: 26
|
|
15174
15385
|
});
|
|
15175
|
-
for (let i = 0; i < 45; i++) r.particles.push(
|
|
15386
|
+
for (let i = 0; i < 45; i++) r.particles.push(Rc(r, e.definition.color));
|
|
15176
15387
|
r.inputManager.forceRelease(), r.orbitingOrbs = [], r.presentNextLevelUp();
|
|
15177
15388
|
}
|
|
15178
15389
|
}
|
|
15179
|
-
function
|
|
15390
|
+
function Rc(r, e) {
|
|
15180
15391
|
const t = Math.random() * Math.PI * 2, a = 200 + Math.random() * 400;
|
|
15181
15392
|
return {
|
|
15182
15393
|
id: Math.random().toString(),
|
|
@@ -15189,7 +15400,7 @@ function bc(r, e) {
|
|
|
15189
15400
|
maxLifetime: 0.7
|
|
15190
15401
|
};
|
|
15191
15402
|
}
|
|
15192
|
-
function
|
|
15403
|
+
function Tc(r, e) {
|
|
15193
15404
|
if (r.isLevelUpActive) return 0;
|
|
15194
15405
|
const t = r.debugPerformanceEnabled ? performance.now() : 0;
|
|
15195
15406
|
return r.physicsEngine.update({
|
|
@@ -15209,10 +15420,15 @@ function Cc(r, e) {
|
|
|
15209
15420
|
onKill: () => r.handleEnemyKill(),
|
|
15210
15421
|
smasherEnemy: r.coreInteraction.getMechanic() === "smasher" ? r.inputManager.grabbedEnemy : null,
|
|
15211
15422
|
smasherRelease: r.pendingSmasherRelease,
|
|
15212
|
-
onSmasherArmBreak: () => r.inputManager.forceRelease()
|
|
15423
|
+
onSmasherArmBreak: () => r.inputManager.forceRelease(),
|
|
15424
|
+
preserveSmasherCapturedEnemy: r.objectives.getActiveChallenge()?.preset?.preserveSmasherCapturedEnemy === !0,
|
|
15425
|
+
onChallengeFailure: () => Pc(r)
|
|
15213
15426
|
}), r.pendingSmasherRelease = null, r.debugPerformanceEnabled ? performance.now() - t : 0;
|
|
15214
15427
|
}
|
|
15215
|
-
function
|
|
15428
|
+
function Pc(r) {
|
|
15429
|
+
r.isChallengeRun() && (r.objectives.cancelActiveChallenge(), r.challengeRunId = null, r.isDeathSequenceActive || r.eventBus.emit("onGameOver", { score: r.score.value, wave: r.progressBar.getLevel() }));
|
|
15430
|
+
}
|
|
15431
|
+
function wc(r, e) {
|
|
15216
15432
|
if (r.areaDirector.getPhase() !== "boss") return;
|
|
15217
15433
|
const t = r.bossEncounter.update(e, r.core.position);
|
|
15218
15434
|
if (t) {
|
|
@@ -15221,7 +15437,7 @@ function Ac(r, e) {
|
|
|
15221
15437
|
}
|
|
15222
15438
|
r.updateBossMinionReentryPaths(), r.updateBossExposureBurst(e), r.processSmasherBossImpact(), r.processBossImpacts(), r.finishBossIfDefeated();
|
|
15223
15439
|
}
|
|
15224
|
-
function
|
|
15440
|
+
function kc(r) {
|
|
15225
15441
|
r.coreRoster.recordSkillEvent("kill"), r.combo.value >= 2 && r.coreRoster.recordSkillEvent("combo", r.combo.value), r.combo.value >= 2 && r.objectives.record({
|
|
15226
15442
|
type: "combo",
|
|
15227
15443
|
amount: r.combo.value,
|
|
@@ -15238,7 +15454,7 @@ function Ic(r) {
|
|
|
15238
15454
|
size: 22
|
|
15239
15455
|
}));
|
|
15240
15456
|
}
|
|
15241
|
-
function
|
|
15457
|
+
function Mc(r) {
|
|
15242
15458
|
if (r.bossEncounter.getPhase() !== "inactive") return;
|
|
15243
15459
|
const e = r.areaDirector.getArea().bossId;
|
|
15244
15460
|
if (!e) return;
|
|
@@ -15254,20 +15470,20 @@ function Rc(r) {
|
|
|
15254
15470
|
targetCandidates: r.waveDirector.getBossTentacleTargets()
|
|
15255
15471
|
}), r.bossCodex.recordEncounter(t.id), r.bossCodex.recordPhase(t.id, 1), r.juice.triggerFlash(0.85), r.juice.triggerScreenShake({ x: 0, y: 1 }, 26);
|
|
15256
15472
|
}
|
|
15257
|
-
function
|
|
15473
|
+
function Dc(r) {
|
|
15258
15474
|
r.enemies = [], r.pools = [], r.vortices = [], r.shockwaves = [], r.experienceOrbs = [], r.inputManager.forceRelease();
|
|
15259
15475
|
}
|
|
15260
|
-
function
|
|
15476
|
+
function Nc(r) {
|
|
15261
15477
|
if (r.bossEncounter.getPhase() === "inactive") return;
|
|
15262
15478
|
let e = !1;
|
|
15263
15479
|
for (const t of r.enemies) {
|
|
15264
|
-
if (!
|
|
15480
|
+
if (!Oc(t)) continue;
|
|
15265
15481
|
const a = r.bossEncounter.hit(t.position, t.type, r.core.position);
|
|
15266
15482
|
a !== "none" && (pt(r, t.position, t.color, a), t.isThrown = !1, t.triggerDissolveDeath(!1), a === "tentacle-broken" && r.bossEncounter.getPhase() === "exposed" && (e = !0));
|
|
15267
15483
|
}
|
|
15268
15484
|
e && r.releaseBossExposureBurst();
|
|
15269
15485
|
}
|
|
15270
|
-
function
|
|
15486
|
+
function Oc(r) {
|
|
15271
15487
|
return r.active && r.isThrown && !r.isDying;
|
|
15272
15488
|
}
|
|
15273
15489
|
function pt(r, e, t, a) {
|
|
@@ -15286,17 +15502,17 @@ function pt(r, e, t, a) {
|
|
|
15286
15502
|
}
|
|
15287
15503
|
a === "boss-damaged" && r.juice.triggerScreenShake({ x: 0, y: 1 }, 12), a === "defeated" && r.juice.triggerFlash(1);
|
|
15288
15504
|
}
|
|
15289
|
-
function
|
|
15290
|
-
if (!
|
|
15505
|
+
function Lc(r) {
|
|
15506
|
+
if (!_c(r)) return;
|
|
15291
15507
|
const e = r.inputManager.grabbedEnemy;
|
|
15292
15508
|
if (!e || !e.active || e.isDying) return;
|
|
15293
15509
|
const t = r.bossEncounter.hit(e.position, e.type, r.core.position);
|
|
15294
|
-
t !== "none" && (r.smasherBossImpactCooldown = 0.28, pt(r, e.position, e.color, t),
|
|
15510
|
+
t !== "none" && (r.smasherBossImpactCooldown = 0.28, pt(r, e.position, e.color, t), jc(r, e, t), Bc(r, e, t));
|
|
15295
15511
|
}
|
|
15296
|
-
function
|
|
15512
|
+
function _c(r) {
|
|
15297
15513
|
return r.coreInteraction.getMechanic() === "smasher" && r.smasherBossImpactCooldown <= 0;
|
|
15298
15514
|
}
|
|
15299
|
-
function
|
|
15515
|
+
function jc(r, e, t) {
|
|
15300
15516
|
r.juice.triggerHitstop(0.08), r.juice.triggerFlash(t === "area-impact" ? 0.25 : 0.5), r.juice.triggerScreenShake(
|
|
15301
15517
|
{
|
|
15302
15518
|
x: e.position.x - r.core.position.x,
|
|
@@ -15305,7 +15521,7 @@ function Dc(r, e, t) {
|
|
|
15305
15521
|
t === "area-impact" ? 8 : 14
|
|
15306
15522
|
);
|
|
15307
15523
|
}
|
|
15308
|
-
function
|
|
15524
|
+
function Bc(r, e, t) {
|
|
15309
15525
|
if (t === "tentacle-broken" && r.bossEncounter.getPhase() === "exposed" && r.releaseBossExposureBurst(), !r.core.consumeSmasherImpact()) return;
|
|
15310
15526
|
r.core.startSmasherRetraction(e.position, e.color);
|
|
15311
15527
|
const a = r.inputManager.releaseGrabbedEnemy();
|
|
@@ -15356,7 +15572,7 @@ class mt {
|
|
|
15356
15572
|
}, !0;
|
|
15357
15573
|
}
|
|
15358
15574
|
}
|
|
15359
|
-
class
|
|
15575
|
+
class Hc {
|
|
15360
15576
|
id;
|
|
15361
15577
|
radius = 17;
|
|
15362
15578
|
interactionRadius = 132;
|
|
@@ -15392,10 +15608,10 @@ class Nc {
|
|
|
15392
15608
|
}
|
|
15393
15609
|
}
|
|
15394
15610
|
}
|
|
15395
|
-
function
|
|
15611
|
+
function Uc(r, e) {
|
|
15396
15612
|
return e === "area-impact" ? 290 : e === "defeated" ? 360 : 210;
|
|
15397
15613
|
}
|
|
15398
|
-
function
|
|
15614
|
+
function zc(r) {
|
|
15399
15615
|
r.bossExposureBurstRemaining = 26, r.bossExposureBurstAccumulator = 0.22, r.bossExposureBurstSide = 1;
|
|
15400
15616
|
const e = r.bossEncounter.getBossPosition(r.core.position);
|
|
15401
15617
|
r.shockwaves.push({
|
|
@@ -15409,7 +15625,7 @@ function _c(r) {
|
|
|
15409
15625
|
maxLifetime: 1.2
|
|
15410
15626
|
}), r.juice.triggerFlash(0.75), r.juice.triggerScreenShake({ x: 0, y: 1 }, 42);
|
|
15411
15627
|
}
|
|
15412
|
-
function
|
|
15628
|
+
function Kc(r, e) {
|
|
15413
15629
|
if (r.bossEncounter.getPhase() !== "exposed") {
|
|
15414
15630
|
r.resetBossExposureBurst();
|
|
15415
15631
|
return;
|
|
@@ -15425,30 +15641,30 @@ function jc(r, e) {
|
|
|
15425
15641
|
i && (r.enemies.push(i), r.recordEnemyObservation(i)), r.bossExposureBurstRemaining -= 1;
|
|
15426
15642
|
}
|
|
15427
15643
|
}
|
|
15428
|
-
function
|
|
15644
|
+
function Fc(r) {
|
|
15429
15645
|
for (const e of r.enemies)
|
|
15430
|
-
|
|
15646
|
+
Gc(r, e) && qc(r, e);
|
|
15431
15647
|
}
|
|
15432
|
-
function
|
|
15433
|
-
return
|
|
15648
|
+
function Gc(r, e) {
|
|
15649
|
+
return Vc(e) && Wc(r, e);
|
|
15434
15650
|
}
|
|
15435
|
-
function
|
|
15651
|
+
function Vc(r) {
|
|
15436
15652
|
return r.active && r.bossLaunchPhase === "outbound" && !r.isGrabbed && !r.isThrown && !r.wasManipulated;
|
|
15437
15653
|
}
|
|
15438
|
-
function
|
|
15654
|
+
function Wc(r, e) {
|
|
15439
15655
|
return e.position.x < -90 || e.position.x > r.canvas.width + 90 || e.position.y < -90 || e.position.y > r.canvas.height + 90;
|
|
15440
15656
|
}
|
|
15441
|
-
function
|
|
15657
|
+
function qc(r, e) {
|
|
15442
15658
|
const t = {
|
|
15443
15659
|
x: r.core.position.x + (Math.random() - 0.5) * 140,
|
|
15444
15660
|
y: r.core.position.y + (Math.random() - 0.5) * 140
|
|
15445
15661
|
}, a = Math.atan2(t.y - e.position.y, t.x - e.position.x), i = Math.max(260, e.maxSpeed * 1.8);
|
|
15446
15662
|
e.bossLaunchPhase = "reentry", e.velocity = { x: Math.cos(a) * i, y: Math.sin(a) * i }, e.launchDelay = 0.05;
|
|
15447
15663
|
}
|
|
15448
|
-
function
|
|
15664
|
+
function $c(r) {
|
|
15449
15665
|
r.bossExposureBurstRemaining = 0, r.bossExposureBurstAccumulator = 0, r.bossExposureBurstSide = 1;
|
|
15450
15666
|
}
|
|
15451
|
-
function
|
|
15667
|
+
function Yc(r) {
|
|
15452
15668
|
if (r.bossEncounter.getPhase() !== "defeated") return;
|
|
15453
15669
|
const e = r.areaDirector.getArea().bossId;
|
|
15454
15670
|
if (!e) return;
|
|
@@ -15459,9 +15675,9 @@ function Gc(r) {
|
|
|
15459
15675
|
coreId: r.coreRoster.getSelectedCoreId()
|
|
15460
15676
|
}), r.areaDirector.beginReward(), r.bossCodex.recordVictory(e);
|
|
15461
15677
|
const a = r.getBossRewardPosition();
|
|
15462
|
-
r.bossCatalyst = new
|
|
15678
|
+
r.bossCatalyst = new Hc(a), Zc(r, a, t.ecosomaDropMin, t.ecosomaDropMax), Jc(r);
|
|
15463
15679
|
}
|
|
15464
|
-
function
|
|
15680
|
+
function Zc(r, e, t, a) {
|
|
15465
15681
|
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));
|
|
15466
15682
|
for (let s = 0; s < n; s++) {
|
|
15467
15683
|
const c = s * Math.PI * 2 / n, l = 24 + Math.random() * 28;
|
|
@@ -15473,30 +15689,30 @@ function Vc(r, e, t, a) {
|
|
|
15473
15689
|
);
|
|
15474
15690
|
}
|
|
15475
15691
|
}
|
|
15476
|
-
function
|
|
15692
|
+
function Jc(r) {
|
|
15477
15693
|
r.enemies = [], r.pools = [], r.vortices = [], r.shockwaves = [], r.repelProjectiles = [], r.bossEncounter.reset(), r.resetBossExposureBurst(), r.juice.triggerFlash(1);
|
|
15478
15694
|
}
|
|
15479
|
-
function
|
|
15695
|
+
function Xc(r) {
|
|
15480
15696
|
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;
|
|
15481
15697
|
return {
|
|
15482
15698
|
x: Math.max(s, Math.min(r.canvas.width - s, r.core.position.x + t * n)),
|
|
15483
15699
|
y: Math.max(s, Math.min(r.canvas.height - s, r.core.position.y + a * n))
|
|
15484
15700
|
};
|
|
15485
15701
|
}
|
|
15486
|
-
function
|
|
15702
|
+
function Qc(r, e) {
|
|
15487
15703
|
if (r.bossCatalyst?.active && (r.tryCollectCatalyst(), r.bossCatalyst.update(e, r.core.position, r.core.getHitboxRadius()), !r.bossCatalyst.active && r.bossCatalyst.absorbedByCore)) {
|
|
15488
15704
|
const t = r.areaDirector.getArea().bossId;
|
|
15489
15705
|
t && r.bossCodex.recordDropCollected(t), r.areaDirector.beginTransition(), r.areaTransitionElapsed = 0, r.juice.triggerFlash(0.75);
|
|
15490
15706
|
}
|
|
15491
15707
|
r.updateEcosomaOrbs(e), r.juice.update(e, r.floatingTexts, r.particles);
|
|
15492
15708
|
}
|
|
15493
|
-
function
|
|
15709
|
+
function el(r) {
|
|
15494
15710
|
const e = r.bossCatalyst;
|
|
15495
15711
|
if (!e || !e.active || e.isAbsorbing) return;
|
|
15496
15712
|
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);
|
|
15497
15713
|
(a <= r.core.getHitboxRadius() + t.corePickupRadius || i <= Math.max(t.psionicRadius + t.pickupRadius + e.radius, e.interactionRadius)) && e.beginAbsorption();
|
|
15498
15714
|
}
|
|
15499
|
-
function
|
|
15715
|
+
function tl(r, e) {
|
|
15500
15716
|
if (r.areaTransitionElapsed = Math.min(r.areaTransitionDuration, r.areaTransitionElapsed + Math.max(0, e)), r.updateEcosomaOrbs(e), !(r.areaTransitionElapsed < r.areaTransitionDuration) && r.areaDirector.completeTransition()) {
|
|
15501
15717
|
const t = r.areaDirector.getArea();
|
|
15502
15718
|
r.coreRoster.setRunArea(t.areaNumber ?? 1, t.experienceMultiplier), r.coreRoster.recordSkillEvent("area"), r.objectives.record({
|
|
@@ -15506,15 +15722,15 @@ function Zc(r, e) {
|
|
|
15506
15722
|
}), r.waveDirector.setArea(t), r.areaIntroElapsed = 0, r.bossEncounter.reset(), r.bossCatalyst = null, r.clearArenaForBoss(), r.juice.triggerFlash(0.65);
|
|
15507
15723
|
}
|
|
15508
15724
|
}
|
|
15509
|
-
const
|
|
15725
|
+
const rl = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, gt = (r, e) => {
|
|
15510
15726
|
const t = /* @__PURE__ */ new Map();
|
|
15511
15727
|
for (const a of r) {
|
|
15512
15728
|
if (!a.active || a.isAbsorbing || a.isMerging) continue;
|
|
15513
|
-
const i =
|
|
15729
|
+
const i = rl(a.position.x, a.position.y, e), o = t.get(i);
|
|
15514
15730
|
o ? o.push(a) : t.set(i, [a]);
|
|
15515
15731
|
}
|
|
15516
15732
|
return t;
|
|
15517
|
-
}, ee = (r) => !r.active || r.isAbsorbing || r.isMerging,
|
|
15733
|
+
}, ee = (r) => !r.active || r.isAbsorbing || r.isMerging, al = (r, e) => {
|
|
15518
15734
|
if (r.length < 2 || e <= 0) return;
|
|
15519
15735
|
const t = gt(r, e);
|
|
15520
15736
|
for (const a of r) {
|
|
@@ -15523,18 +15739,18 @@ const Jc = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, gt = (r, e)
|
|
|
15523
15739
|
for (let n = -1; n <= 1; n++)
|
|
15524
15740
|
for (let s = -1; s <= 1; s++) {
|
|
15525
15741
|
const c = t.get(`${i + n}:${o + s}`);
|
|
15526
|
-
c &&
|
|
15742
|
+
c && il(a, c, e);
|
|
15527
15743
|
}
|
|
15528
15744
|
}
|
|
15529
|
-
},
|
|
15745
|
+
}, il = (r, e, t) => {
|
|
15530
15746
|
for (const a of e) {
|
|
15531
15747
|
if (a === r || ee(a)) continue;
|
|
15532
15748
|
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()));
|
|
15533
15749
|
i <= t + o && r.mergeWith(a);
|
|
15534
15750
|
}
|
|
15535
|
-
},
|
|
15751
|
+
}, ol = (r, e, t) => {
|
|
15536
15752
|
const a = e.magneticAttractionDistance;
|
|
15537
|
-
if (!
|
|
15753
|
+
if (!nl(r, e)) return;
|
|
15538
15754
|
const i = gt(r, a);
|
|
15539
15755
|
for (const o of r) {
|
|
15540
15756
|
if (ee(o)) continue;
|
|
@@ -15542,7 +15758,7 @@ const Jc = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, gt = (r, e)
|
|
|
15542
15758
|
for (let c = -1; c <= 1; c++)
|
|
15543
15759
|
for (let l = -1; l <= 1; l++) {
|
|
15544
15760
|
const d = i.get(`${n + c}:${s + l}`);
|
|
15545
|
-
d &&
|
|
15761
|
+
d && sl({
|
|
15546
15762
|
orb: o,
|
|
15547
15763
|
bucket: d,
|
|
15548
15764
|
distanceLimit: a,
|
|
@@ -15551,7 +15767,7 @@ const Jc = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, gt = (r, e)
|
|
|
15551
15767
|
});
|
|
15552
15768
|
}
|
|
15553
15769
|
}
|
|
15554
|
-
},
|
|
15770
|
+
}, nl = (r, e) => r.length >= 2 && e.magneticAttractionDistance > 0 && e.magneticAttractionStrength > 0, sl = (r) => {
|
|
15555
15771
|
const { orb: e, bucket: t, distanceLimit: a, strength: i, dt: o } = r;
|
|
15556
15772
|
for (const n of t) {
|
|
15557
15773
|
if (n === e || ee(n) || n.id <= e.id) continue;
|
|
@@ -15560,12 +15776,12 @@ const Jc = (r, e, t) => `${Math.floor(r / t)}:${Math.floor(e / t)}`, gt = (r, e)
|
|
|
15560
15776
|
const d = i * (1 - l / a) ** 2 * o, u = s / l, h = c / l;
|
|
15561
15777
|
e.velocity.x += u * d, e.velocity.y += h * d, n.velocity.x -= u * d, n.velocity.y -= h * d;
|
|
15562
15778
|
}
|
|
15563
|
-
},
|
|
15779
|
+
}, cl = (r, e) => {
|
|
15564
15780
|
const t = Math.log2(r), a = Math.min(e.maxRadius, e.baseRadius + t * e.radiusGrowthPerLevel);
|
|
15565
15781
|
let i = p.experience;
|
|
15566
15782
|
return r >= e.blueThreshold && (i = p.experienceBlue), r >= e.yellowThreshold && (i = p.experienceYellow), r >= e.redThreshold && (i = p.experienceRed), { radius: a, color: i };
|
|
15567
15783
|
};
|
|
15568
|
-
class
|
|
15784
|
+
class ll {
|
|
15569
15785
|
constructor(e) {
|
|
15570
15786
|
this.config = e;
|
|
15571
15787
|
}
|
|
@@ -15596,7 +15812,7 @@ class il {
|
|
|
15596
15812
|
return e.velocity = { x: o / s * c, y: n / s * c }, !1;
|
|
15597
15813
|
}
|
|
15598
15814
|
}
|
|
15599
|
-
const
|
|
15815
|
+
const dl = {
|
|
15600
15816
|
mergeDistance: 34,
|
|
15601
15817
|
magneticAttractionDistance: 190,
|
|
15602
15818
|
magneticAttractionStrength: 900,
|
|
@@ -15608,7 +15824,7 @@ const ol = {
|
|
|
15608
15824
|
yellowThreshold: 32,
|
|
15609
15825
|
redThreshold: 256
|
|
15610
15826
|
};
|
|
15611
|
-
class
|
|
15827
|
+
class be {
|
|
15612
15828
|
id;
|
|
15613
15829
|
position;
|
|
15614
15830
|
velocity;
|
|
@@ -15623,8 +15839,8 @@ class Se {
|
|
|
15623
15839
|
absorbedByCore = !1;
|
|
15624
15840
|
config;
|
|
15625
15841
|
lifecycle;
|
|
15626
|
-
constructor(e, t = 1, a =
|
|
15627
|
-
this.id = `xp_${Date.now()}_${Math.random()}`, this.position = { ...e }, this.value = Math.max(1, t), this.config = a, this.lifecycle = new
|
|
15842
|
+
constructor(e, t = 1, a = dl) {
|
|
15843
|
+
this.id = `xp_${Date.now()}_${Math.random()}`, this.position = { ...e }, this.value = Math.max(1, t), this.config = a, this.lifecycle = new ll(a), this.radius = a.baseRadius, this.color = p.experience, this.updateAppearance();
|
|
15628
15844
|
const i = Math.random() * Math.PI * 2, o = 25 + Math.random() * 45;
|
|
15629
15845
|
this.velocity = {
|
|
15630
15846
|
x: Math.cos(i) * o,
|
|
@@ -15632,10 +15848,10 @@ class Se {
|
|
|
15632
15848
|
};
|
|
15633
15849
|
}
|
|
15634
15850
|
static mergeNearby(e, t) {
|
|
15635
|
-
|
|
15851
|
+
al(e, t);
|
|
15636
15852
|
}
|
|
15637
15853
|
static attractNearby(e, t, a) {
|
|
15638
|
-
|
|
15854
|
+
ol(e, t, a);
|
|
15639
15855
|
}
|
|
15640
15856
|
beginAbsorption() {
|
|
15641
15857
|
this.active && (this.isAbsorbing = !0);
|
|
@@ -15668,7 +15884,7 @@ class Se {
|
|
|
15668
15884
|
}
|
|
15669
15885
|
}
|
|
15670
15886
|
updateAppearance() {
|
|
15671
|
-
const e =
|
|
15887
|
+
const e = cl(this.value, this.config);
|
|
15672
15888
|
this.radius = e.radius, this.color = e.color;
|
|
15673
15889
|
}
|
|
15674
15890
|
getBaseRadius() {
|
|
@@ -15695,22 +15911,22 @@ class yt {
|
|
|
15695
15911
|
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);
|
|
15696
15912
|
}
|
|
15697
15913
|
}
|
|
15698
|
-
function
|
|
15914
|
+
function ul(r, e) {
|
|
15699
15915
|
r.objectives.record({
|
|
15700
15916
|
type: "level-reached",
|
|
15701
15917
|
amount: e,
|
|
15702
15918
|
coreId: r.coreRoster.getSelectedCoreId()
|
|
15703
15919
|
}), r.pendingLevelUps.push(e), r.isLevelUpActive || r.presentNextLevelUp();
|
|
15704
15920
|
}
|
|
15705
|
-
function
|
|
15921
|
+
function hl(r) {
|
|
15706
15922
|
const e = r.pendingLevelUps.shift();
|
|
15707
15923
|
if (e === void 0) {
|
|
15708
15924
|
r.isLevelUpActive = !1;
|
|
15709
15925
|
return;
|
|
15710
15926
|
}
|
|
15711
|
-
r.isLevelUpActive = !0, r.inputManager.forceRelease(), r.juice.triggerFlash(0.3), r.juice.triggerScreenShake({ x: 0, y: 1 }, 8),
|
|
15927
|
+
r.isLevelUpActive = !0, r.inputManager.forceRelease(), r.juice.triggerFlash(0.3), r.juice.triggerScreenShake({ x: 0, y: 1 }, 8), pl(r, e), r.orbitingOrbs = ml(r), r.rerollsRemaining = r.isChallengeRun() ? 0 : r.getRerollLimit();
|
|
15712
15928
|
}
|
|
15713
|
-
function
|
|
15929
|
+
function pl(r, e) {
|
|
15714
15930
|
r.floatingTexts.push({
|
|
15715
15931
|
id: Math.random().toString(),
|
|
15716
15932
|
text: r.i18n.translate("levelUpChoose", { level: e }),
|
|
@@ -15736,26 +15952,26 @@ function cl(r, e) {
|
|
|
15736
15952
|
});
|
|
15737
15953
|
}
|
|
15738
15954
|
}
|
|
15739
|
-
function
|
|
15955
|
+
function ml(r) {
|
|
15740
15956
|
const e = r.powerUpRegistry.getRandomOptions(3, r.geneticMemory, r.waveDirector.getAvailableEnemyIds(), r.coreRoster.getSelectedCoreId());
|
|
15741
15957
|
return e.map((t, a) => new yt("orb_" + Date.now() + "_" + a, t, a * Math.PI * 2 / e.length));
|
|
15742
15958
|
}
|
|
15743
|
-
function
|
|
15959
|
+
function gl(r) {
|
|
15744
15960
|
for (const e of r.enemies)
|
|
15745
15961
|
e.experienceDropPending && (e.experienceDropPending = !1, r.codex.recordKill(e.type, e.codexDeathSourceType), r.objectives.record({
|
|
15746
15962
|
type: "enemy-defeated",
|
|
15747
15963
|
enemyId: e.type,
|
|
15748
15964
|
...e.variantId ? { variantId: e.variantId } : {},
|
|
15749
15965
|
coreId: r.coreRoster.getSelectedCoreId()
|
|
15750
|
-
}), r.experienceOrbs.push(new
|
|
15966
|
+
}), r.experienceOrbs.push(new be(e.position, 1, r.configManager.getConfig().experience)), r.getEcosomaDropPolicy().shouldDrop(r.progressBar.getLevel()) && r.ecosomaOrbs.push(new mt(e.position)));
|
|
15751
15967
|
}
|
|
15752
|
-
function
|
|
15968
|
+
function yl(r, e) {
|
|
15753
15969
|
r.codex.recordSeen(e.type), e.variantId && r.isEnemyVisible(e) && r.codex.recordVariant(e.type, e.variantId);
|
|
15754
15970
|
}
|
|
15755
|
-
function
|
|
15971
|
+
function El(r, e) {
|
|
15756
15972
|
for (const t of e) t.active && !t.isDying && r.recordEnemyObservation(t);
|
|
15757
15973
|
}
|
|
15758
|
-
function
|
|
15974
|
+
function vl(r, e) {
|
|
15759
15975
|
const t = e.getHitRadius();
|
|
15760
15976
|
return e.position.x >= -t && e.position.x <= r.canvas.width + t && e.position.y >= -t && e.position.y <= r.canvas.height + t;
|
|
15761
15977
|
}
|
|
@@ -15771,26 +15987,26 @@ class We {
|
|
|
15771
15987
|
return t >= 0 && t < this.getChance(e);
|
|
15772
15988
|
}
|
|
15773
15989
|
}
|
|
15774
|
-
function
|
|
15990
|
+
function fl(r, e) {
|
|
15775
15991
|
const t = r.configManager.getConfig();
|
|
15776
|
-
|
|
15777
|
-
for (const a of r.experienceOrbs)
|
|
15992
|
+
be.attractNearby(r.experienceOrbs, t.experience, e), be.mergeNearby(r.experienceOrbs, t.experience.mergeDistance);
|
|
15993
|
+
for (const a of r.experienceOrbs) xl(r, a, e, t.magnet);
|
|
15778
15994
|
r.experienceOrbs = r.experienceOrbs.filter((a) => a.active);
|
|
15779
15995
|
}
|
|
15780
|
-
function
|
|
15996
|
+
function xl(r, e, t, a) {
|
|
15781
15997
|
if (e.active) {
|
|
15782
15998
|
if (e.isMerging) {
|
|
15783
15999
|
e.update(t, r.core.position, r.core.getHitboxRadius(), a.absorptionSpeed);
|
|
15784
16000
|
return;
|
|
15785
16001
|
}
|
|
15786
|
-
|
|
16002
|
+
bl(r, e, a) && e.beginAbsorption(), e.update(t, r.core.position, r.core.getHitboxRadius(), a.absorptionSpeed), !e.active && e.absorbedByCore && Sl(r, e);
|
|
15787
16003
|
}
|
|
15788
16004
|
}
|
|
15789
|
-
function
|
|
16005
|
+
function bl(r, e, t) {
|
|
15790
16006
|
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);
|
|
15791
16007
|
return a <= r.core.getHitboxRadius() + t.corePickupRadius || i <= t.psionicRadius + t.pickupRadius + e.radius;
|
|
15792
16008
|
}
|
|
15793
|
-
function
|
|
16009
|
+
function Sl(r, e) {
|
|
15794
16010
|
r.progressBar.addExperience(e.value), r.juice.triggerFlash(0.12), r.floatingTexts.push({
|
|
15795
16011
|
id: Math.random().toString(),
|
|
15796
16012
|
text: r.i18n.translate("experienceCollected", { amount: e.value }),
|
|
@@ -15803,14 +16019,14 @@ function El(r, e) {
|
|
|
15803
16019
|
size: 18
|
|
15804
16020
|
});
|
|
15805
16021
|
}
|
|
15806
|
-
function
|
|
16022
|
+
function Cl(r, e) {
|
|
15807
16023
|
const { magnet: t, ecosoma: a } = r.configManager.getConfig();
|
|
15808
|
-
for (const i of r.ecosomaOrbs)
|
|
16024
|
+
for (const i of r.ecosomaOrbs) Al({ engine: r, orb: i, dt: e, magnet: t, ecosoma: a });
|
|
15809
16025
|
r.ecosomaOrbs = r.ecosomaOrbs.filter((i) => i.active);
|
|
15810
16026
|
}
|
|
15811
|
-
function
|
|
16027
|
+
function Al(r) {
|
|
15812
16028
|
const { engine: e, orb: t, dt: a, magnet: i, ecosoma: o } = r;
|
|
15813
|
-
t.active && (
|
|
16029
|
+
t.active && (Il(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({
|
|
15814
16030
|
id: Math.random().toString(),
|
|
15815
16031
|
text: e.i18n.translate("ecosomaCollected", { amount: t.value }),
|
|
15816
16032
|
position: { ...e.core.position },
|
|
@@ -15822,11 +16038,11 @@ function fl(r) {
|
|
|
15822
16038
|
size: 17
|
|
15823
16039
|
})));
|
|
15824
16040
|
}
|
|
15825
|
-
function
|
|
16041
|
+
function Il(r, e, t) {
|
|
15826
16042
|
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);
|
|
15827
16043
|
return a <= r.core.getHitboxRadius() + t.corePickupRadius || i <= t.psionicRadius + t.pickupRadius + e.radius;
|
|
15828
16044
|
}
|
|
15829
|
-
function
|
|
16045
|
+
function Rl(r) {
|
|
15830
16046
|
const e = r.configManager.getConfig().ecosoma;
|
|
15831
16047
|
return r.debugPerformanceEnabled ? new We({
|
|
15832
16048
|
...e,
|
|
@@ -15835,7 +16051,7 @@ function Sl(r) {
|
|
|
15835
16051
|
maxDropChance: Ve
|
|
15836
16052
|
}) : new We(e);
|
|
15837
16053
|
}
|
|
15838
|
-
function
|
|
16054
|
+
function Tl(r) {
|
|
15839
16055
|
if (r.rerollsRemaining <= 0) return;
|
|
15840
16056
|
r.rerollsRemaining -= 1, r.juice.triggerFlash(0.4);
|
|
15841
16057
|
const e = r.powerUpRegistry.getRandomOptions(3, r.geneticMemory, r.waveDirector.getAvailableEnemyIds(), r.coreRoster.getSelectedCoreId());
|
|
@@ -15844,11 +16060,11 @@ function bl(r) {
|
|
|
15844
16060
|
return new yt(`orb_${Date.now()}_${a}`, t, i);
|
|
15845
16061
|
});
|
|
15846
16062
|
}
|
|
15847
|
-
function
|
|
16063
|
+
function Pl(r) {
|
|
15848
16064
|
const e = r.debugPerformanceEnabled ? performance.now() : 0;
|
|
15849
|
-
r.renderer.render(
|
|
16065
|
+
r.renderer.render(wl(r)), Ml(r), r.performanceAudit.finishRender(e);
|
|
15850
16066
|
}
|
|
15851
|
-
function
|
|
16067
|
+
function wl(r) {
|
|
15852
16068
|
const e = {
|
|
15853
16069
|
core: r.core,
|
|
15854
16070
|
enemies: r.getRenderList(),
|
|
@@ -15867,13 +16083,13 @@ function Al(r) {
|
|
|
15867
16083
|
experienceProgress: r.progressBar.getProgress(),
|
|
15868
16084
|
levelUpPulse: r.progressBar.getLevelUpPulse(),
|
|
15869
16085
|
levelUpActive: r.isLevelUpActive,
|
|
15870
|
-
areaVisual:
|
|
16086
|
+
areaVisual: kl(r),
|
|
15871
16087
|
boss: r.bossEncounter.getSnapshot(r.core.position),
|
|
15872
16088
|
bossCatalyst: r.bossCatalyst
|
|
15873
16089
|
};
|
|
15874
16090
|
return r.isRunning && r.interactiveTutorial.isActive && (e.tutorial = r.interactiveTutorial), r.isDeathSequenceActive && (e.deathSequenceProgress = r.deathSequenceElapsed / ye), e;
|
|
15875
16091
|
}
|
|
15876
|
-
function
|
|
16092
|
+
function kl(r) {
|
|
15877
16093
|
const e = r.areaDirector.getPhase();
|
|
15878
16094
|
return {
|
|
15879
16095
|
areaId: r.areaDirector.getAreaId(),
|
|
@@ -15885,7 +16101,7 @@ function Il(r) {
|
|
|
15885
16101
|
entryProgress: r.isRunning && e === "area" ? Math.min(1, r.areaIntroElapsed / Q) : 1
|
|
15886
16102
|
};
|
|
15887
16103
|
}
|
|
15888
|
-
function
|
|
16104
|
+
function Ml(r) {
|
|
15889
16105
|
r.isLevelUpActive && r.orbitingOrbs.length > 0 && r.renderer.drawings.drawOrbitingModifierOrbs({
|
|
15890
16106
|
orbs: r.orbitingOrbs,
|
|
15891
16107
|
time: r.core.pulsePhase,
|
|
@@ -15894,207 +16110,207 @@ function Rl(r) {
|
|
|
15894
16110
|
rerollsRemaining: r.rerollsRemaining
|
|
15895
16111
|
});
|
|
15896
16112
|
}
|
|
15897
|
-
function
|
|
16113
|
+
function Dl(r) {
|
|
15898
16114
|
return r.isRunning ? r.enemies : r.isDeathSequenceActive ? [] : r.ambientEnemies;
|
|
15899
16115
|
}
|
|
15900
|
-
function
|
|
16116
|
+
function Nl(r) {
|
|
15901
16117
|
return r.debugRerollsEnabled ? 99 : 1;
|
|
15902
16118
|
}
|
|
15903
|
-
function
|
|
16119
|
+
function Ol(r, e = !1) {
|
|
15904
16120
|
if (!e && r.objectives.getSnapshots("mission").length > 0) return;
|
|
15905
16121
|
const t = r.missionGenerator.generate();
|
|
15906
16122
|
t && r.objectives.installMission(t);
|
|
15907
16123
|
}
|
|
15908
|
-
function
|
|
16124
|
+
function Ll(r) {
|
|
15909
16125
|
if (!r.objectives.canRerollMission()) return;
|
|
15910
16126
|
const e = r.missionGenerator.generate();
|
|
15911
16127
|
e && r.objectives.rerollMission(e);
|
|
15912
16128
|
}
|
|
15913
|
-
function
|
|
16129
|
+
function _l(r) {
|
|
15914
16130
|
r.missionsDrawer.setAvailable(!0), r.startMenu.show();
|
|
15915
16131
|
}
|
|
15916
|
-
function
|
|
16132
|
+
function jl(r, e) {
|
|
15917
16133
|
r.objectives.startChallenge(e, r.coreRoster.getSelectedCoreId()) && (r.challengeRunId = e, r.challengesOverlay.hide(), r.startGame());
|
|
15918
16134
|
}
|
|
15919
|
-
function
|
|
16135
|
+
function Bl(r) {
|
|
15920
16136
|
return r.challengeRunId !== null;
|
|
15921
16137
|
}
|
|
15922
|
-
function
|
|
16138
|
+
function Hl(r, e) {
|
|
15923
16139
|
if (e.type === "ecosoma") {
|
|
15924
16140
|
r.geneticMemory.collectEcosoma(e.amount);
|
|
15925
16141
|
return;
|
|
15926
16142
|
}
|
|
15927
16143
|
e.type === "powerup" && r.geneticMemory.grantUnlock(e.unlockId);
|
|
15928
16144
|
}
|
|
15929
|
-
function
|
|
16145
|
+
function Ul(r) {
|
|
15930
16146
|
r.gameLoop.stop(), r.performanceAudit.destroy(), r.coreRosterOverlay.destroy(), r.geneticMemoryOverlay.destroy(), r.coreRunSummaryOverlay.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();
|
|
15931
16147
|
}
|
|
15932
|
-
class
|
|
16148
|
+
class zl extends ws {
|
|
15933
16149
|
constructor(e) {
|
|
15934
16150
|
super(e);
|
|
15935
16151
|
}
|
|
15936
16152
|
setLanguage(e) {
|
|
15937
|
-
|
|
16153
|
+
ks(this, e);
|
|
15938
16154
|
}
|
|
15939
16155
|
setTheme(e) {
|
|
15940
|
-
|
|
16156
|
+
Ms(this, e);
|
|
15941
16157
|
}
|
|
15942
16158
|
getLanguage() {
|
|
15943
|
-
return
|
|
16159
|
+
return Ds(this);
|
|
15944
16160
|
}
|
|
15945
16161
|
getTheme() {
|
|
15946
|
-
return
|
|
16162
|
+
return Ns(this);
|
|
15947
16163
|
}
|
|
15948
16164
|
onLanguageChanged(e) {
|
|
15949
|
-
|
|
16165
|
+
Os(this);
|
|
15950
16166
|
}
|
|
15951
16167
|
initAmbientArena() {
|
|
15952
|
-
|
|
16168
|
+
Ls(this);
|
|
15953
16169
|
}
|
|
15954
16170
|
syncSelectedCorePreview() {
|
|
15955
|
-
|
|
16171
|
+
_s(this);
|
|
15956
16172
|
}
|
|
15957
16173
|
resizeCanvas() {
|
|
15958
|
-
|
|
16174
|
+
js(this);
|
|
15959
16175
|
}
|
|
15960
16176
|
setupEvents() {
|
|
15961
|
-
|
|
16177
|
+
Fs(this);
|
|
15962
16178
|
}
|
|
15963
16179
|
startGame() {
|
|
15964
|
-
|
|
16180
|
+
Qs(this);
|
|
15965
16181
|
}
|
|
15966
16182
|
clearTransientRunState() {
|
|
15967
|
-
|
|
16183
|
+
oc(this);
|
|
15968
16184
|
}
|
|
15969
16185
|
updateRepelProjectiles(e) {
|
|
15970
|
-
|
|
16186
|
+
nc(this, e);
|
|
15971
16187
|
}
|
|
15972
16188
|
isRepelProjectileBlocked(e) {
|
|
15973
|
-
return
|
|
16189
|
+
return dc(this, e);
|
|
15974
16190
|
}
|
|
15975
16191
|
clearTransientRunEntities() {
|
|
15976
|
-
|
|
16192
|
+
hc(this);
|
|
15977
16193
|
}
|
|
15978
16194
|
updateDeathSequence(e) {
|
|
15979
|
-
|
|
16195
|
+
pc(this, e);
|
|
15980
16196
|
}
|
|
15981
16197
|
update(e) {
|
|
15982
|
-
|
|
16198
|
+
mc(this, e);
|
|
15983
16199
|
}
|
|
15984
16200
|
handleEnemyKill() {
|
|
15985
|
-
|
|
16201
|
+
kc(this);
|
|
15986
16202
|
}
|
|
15987
16203
|
startBossIfReady() {
|
|
15988
|
-
|
|
16204
|
+
Mc(this);
|
|
15989
16205
|
}
|
|
15990
16206
|
clearArenaForBoss() {
|
|
15991
|
-
|
|
16207
|
+
Dc(this);
|
|
15992
16208
|
}
|
|
15993
16209
|
processBossImpacts() {
|
|
15994
|
-
|
|
16210
|
+
Nc(this);
|
|
15995
16211
|
}
|
|
15996
16212
|
processSmasherBossImpact() {
|
|
15997
|
-
|
|
16213
|
+
Lc(this);
|
|
15998
16214
|
}
|
|
15999
16215
|
getBossImpactRadius(e) {
|
|
16000
|
-
return
|
|
16216
|
+
return Uc(this, e);
|
|
16001
16217
|
}
|
|
16002
16218
|
releaseBossExposureBurst() {
|
|
16003
|
-
|
|
16219
|
+
zc(this);
|
|
16004
16220
|
}
|
|
16005
16221
|
updateBossExposureBurst(e) {
|
|
16006
|
-
|
|
16222
|
+
Kc(this, e);
|
|
16007
16223
|
}
|
|
16008
16224
|
updateBossMinionReentryPaths() {
|
|
16009
|
-
|
|
16225
|
+
Fc(this);
|
|
16010
16226
|
}
|
|
16011
16227
|
resetBossExposureBurst() {
|
|
16012
|
-
|
|
16228
|
+
$c(this);
|
|
16013
16229
|
}
|
|
16014
16230
|
finishBossIfDefeated() {
|
|
16015
|
-
|
|
16231
|
+
Yc(this);
|
|
16016
16232
|
}
|
|
16017
16233
|
getBossRewardPosition() {
|
|
16018
|
-
return
|
|
16234
|
+
return Xc(this);
|
|
16019
16235
|
}
|
|
16020
16236
|
updateBossReward(e) {
|
|
16021
|
-
|
|
16237
|
+
Qc(this, e);
|
|
16022
16238
|
}
|
|
16023
16239
|
tryCollectCatalyst() {
|
|
16024
|
-
|
|
16240
|
+
el(this);
|
|
16025
16241
|
}
|
|
16026
16242
|
updateAreaTransition(e) {
|
|
16027
|
-
|
|
16243
|
+
tl(this, e);
|
|
16028
16244
|
}
|
|
16029
16245
|
triggerLevelUp(e) {
|
|
16030
|
-
|
|
16246
|
+
ul(this, e);
|
|
16031
16247
|
}
|
|
16032
16248
|
presentNextLevelUp() {
|
|
16033
|
-
|
|
16249
|
+
hl(this);
|
|
16034
16250
|
}
|
|
16035
16251
|
spawnExperienceDrops() {
|
|
16036
|
-
|
|
16252
|
+
gl(this);
|
|
16037
16253
|
}
|
|
16038
16254
|
recordEnemyObservation(e) {
|
|
16039
|
-
|
|
16255
|
+
yl(this, e);
|
|
16040
16256
|
}
|
|
16041
16257
|
recordEnemyObservations(e) {
|
|
16042
|
-
|
|
16258
|
+
El(this, e);
|
|
16043
16259
|
}
|
|
16044
16260
|
isEnemyVisible(e) {
|
|
16045
|
-
return
|
|
16261
|
+
return vl(this, e);
|
|
16046
16262
|
}
|
|
16047
16263
|
updateExperienceOrbs(e) {
|
|
16048
|
-
|
|
16264
|
+
fl(this, e);
|
|
16049
16265
|
}
|
|
16050
16266
|
updateEcosomaOrbs(e) {
|
|
16051
|
-
|
|
16267
|
+
Cl(this, e);
|
|
16052
16268
|
}
|
|
16053
16269
|
getEcosomaDropPolicy() {
|
|
16054
|
-
return
|
|
16270
|
+
return Rl(this);
|
|
16055
16271
|
}
|
|
16056
16272
|
triggerReroll() {
|
|
16057
|
-
|
|
16273
|
+
Tl(this);
|
|
16058
16274
|
}
|
|
16059
16275
|
render() {
|
|
16060
|
-
|
|
16276
|
+
Pl(this);
|
|
16061
16277
|
}
|
|
16062
16278
|
getRenderList() {
|
|
16063
|
-
return
|
|
16279
|
+
return Dl(this);
|
|
16064
16280
|
}
|
|
16065
16281
|
getRerollLimit() {
|
|
16066
|
-
return
|
|
16282
|
+
return Nl(this);
|
|
16067
16283
|
}
|
|
16068
16284
|
refreshGeneratedMission(e = !1) {
|
|
16069
|
-
|
|
16285
|
+
Ol(this, e);
|
|
16070
16286
|
}
|
|
16071
16287
|
rerollMission() {
|
|
16072
|
-
|
|
16288
|
+
Ll(this);
|
|
16073
16289
|
}
|
|
16074
16290
|
showStartMenu() {
|
|
16075
|
-
|
|
16291
|
+
_l(this);
|
|
16076
16292
|
}
|
|
16077
16293
|
startChallenge(e) {
|
|
16078
|
-
|
|
16294
|
+
jl(this, e);
|
|
16079
16295
|
}
|
|
16080
16296
|
isChallengeRun() {
|
|
16081
|
-
return
|
|
16297
|
+
return Bl(this);
|
|
16082
16298
|
}
|
|
16083
16299
|
applyObjectiveReward(e) {
|
|
16084
|
-
|
|
16300
|
+
Hl(this, e);
|
|
16085
16301
|
}
|
|
16086
16302
|
destroy() {
|
|
16087
|
-
|
|
16303
|
+
Ul(this);
|
|
16088
16304
|
}
|
|
16089
16305
|
}
|
|
16090
|
-
function
|
|
16091
|
-
return new
|
|
16306
|
+
function Kl(r) {
|
|
16307
|
+
return new zl(r);
|
|
16092
16308
|
}
|
|
16093
16309
|
export {
|
|
16094
16310
|
Ua as BrowserPlatform,
|
|
16095
|
-
|
|
16311
|
+
zl as GameEngine,
|
|
16096
16312
|
ca as LANGUAGES,
|
|
16097
16313
|
cr as ThemeManager,
|
|
16098
|
-
|
|
16314
|
+
Kl as createAxonSurge,
|
|
16099
16315
|
re as isLanguage
|
|
16100
16316
|
};
|