afnm-types 0.6.52 → 0.6.54-2

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.
@@ -1 +1,2 @@
1
1
  export type GameScreen = 'location' | 'recipe' | 'mission' | 'craftingHall' | 'manual' | 'cultivation' | 'map' | 'healer' | 'market' | 'favour' | 'herbField' | 'mine' | 'recipeLibrary' | 'requestBoard' | 'compendium' | 'library' | 'altar' | 'research' | 'reforge' | 'pillarGrid' | 'fallenStar' | 'trainingGround' | 'tenThousandFlames' | 'lifeScreen' | 'soulShardDelve' | 'enchantmentShop' | 'challengeBoard';
2
+ export type ScreenType = GameScreen | 'newgame' | 'combat' | 'crafting' | 'dualCultivation' | 'event' | 'auction' | 'mysticalRegion' | 'tournament' | 'house' | 'guild' | 'stoneCutting' | 'fallenStar' | 'soulShardDelve';
@@ -10,9 +10,10 @@
10
10
  export type AvatarEffectId = 'glitch';
11
11
  export interface AvatarEffectShader {
12
12
  /**
13
- * Fragment shader source. Must accept the same base uniforms as the default
14
- * fragment shader (u_texA, u_texB, u_mix, u_aspectA, u_aspectB,
15
- * u_canvasAspect) plus u_time (float, seconds since the effect started).
13
+ * Fragment shader source (GLSL ES 3.00, must begin with `#version 300 es`).
14
+ * Must accept the same uniforms as the base shader: u_texA, u_texB, u_mix,
15
+ * u_aspectA, u_aspectB, u_canvasAspect, u_time (seconds since effect started).
16
+ * Use `in vec2 v_uv` and `out vec4 fragColor` instead of the ES 1.00 forms.
16
17
  */
17
18
  fragSrc: string;
18
19
  }
@@ -11,82 +11,83 @@
11
11
  // Replicates the hand-authored glitch art style: strong persistent chromatic
12
12
  // aberration (cyan/magenta fringing always visible), periodic brightness
13
13
  // washout, and horizontal scanline tears during burst events.
14
- const GLITCH_FRAG_SRC = `
15
- precision mediump float;
16
- varying vec2 v_uv;
17
- uniform sampler2D u_texA;
18
- uniform sampler2D u_texB;
19
- uniform float u_mix;
20
- uniform float u_aspectA;
21
- uniform float u_aspectB;
22
- uniform float u_canvasAspect;
23
- uniform float u_time;
24
-
25
- float hash(float n) {
26
- return fract(sin(n) * 43758.5453);
27
- }
28
-
29
- vec4 sampleContain(sampler2D tex, vec2 uv, float texAspect) {
30
- float rel = texAspect / u_canvasAspect;
31
- vec2 scale;
32
- if (rel > 1.0) {
33
- scale = vec2(1.0, 1.0 / rel);
34
- } else {
35
- scale = vec2(rel, 1.0);
36
- }
37
- vec2 offset = (1.0 - scale) * 0.5;
38
- vec2 mapped = (uv - offset) / scale;
39
- if (mapped.x < 0.0 || mapped.x > 1.0 || mapped.y < 0.0 || mapped.y > 1.0) {
40
- return vec4(0.0);
41
- }
42
- return texture2D(tex, mapped);
43
- }
44
-
45
- void main() {
46
- vec2 uv = v_uv;
47
-
48
- // Glitch burst timing — ~0.8 event slots per second, 35% chance each.
49
- float eventT = floor(u_time * 0.8);
50
- float isGlitching = step(0.65, hash(eventT * 1.618));
51
- // Sharp onset, slow decay — the burst lingers before fading.
52
- float slotFrac = fract(u_time * 0.8);
53
- float decay = (1.0 - smoothstep(0.1, 0.9, slotFrac)) * isGlitching;
54
-
55
- // Band-based horizontal displacement (scanline tearing) during bursts.
56
- float band = floor(uv.y * 24.0);
57
- float bandActive = step(0.55, hash(band + eventT * 23.7));
58
- float bandShift = (hash(band * 5.2 + eventT * 7.1) * 2.0 - 1.0) * 0.025;
59
- float shift = bandShift * bandActive * decay;
60
-
61
- // Occasional large block tears.
62
- float bigTear = step(0.92, hash(band * 3.7 + eventT * 11.3));
63
- shift += (hash(band * 9.1 + eventT * 4.7) * 2.0 - 1.0) * 0.08 * bigTear * decay;
64
-
65
- vec2 shiftedUv = vec2(uv.x + shift, uv.y);
66
-
67
- // Chromatic aberration: strong baseline always present, amplified by bursts.
68
- float aberr = 0.012 + 0.018 * decay;
69
-
70
- float rA = sampleContain(u_texA, vec2(shiftedUv.x + aberr, shiftedUv.y), u_aspectA).r;
71
- float gA = sampleContain(u_texA, shiftedUv, u_aspectA).g;
72
- float bA = sampleContain(u_texA, vec2(shiftedUv.x - aberr, shiftedUv.y), u_aspectA).b;
73
- float aA = sampleContain(u_texA, shiftedUv, u_aspectA).a;
74
- vec4 colA = vec4(rA, gA, bA, aA);
75
-
76
- float rB = sampleContain(u_texB, vec2(shiftedUv.x + aberr, shiftedUv.y), u_aspectB).r;
77
- float gB = sampleContain(u_texB, shiftedUv, u_aspectB).g;
78
- float bB = sampleContain(u_texB, vec2(shiftedUv.x - aberr, shiftedUv.y), u_aspectB).b;
79
- float aB = sampleContain(u_texB, shiftedUv, u_aspectB).a;
80
- vec4 colB = vec4(rB, gB, bB, aB);
81
-
82
- vec4 col = mix(colA, colB, u_mix);
83
-
84
- // Brightness washout during bursts — push toward overexposed white,
85
- // scaled by alpha so transparent edges don't bloom.
86
- float blowout = decay * 0.45;
87
- col.rgb = mix(col.rgb, vec3(1.0), blowout * col.a);
88
-
89
- gl_FragColor = col;
14
+ const GLITCH_FRAG_SRC = `#version 300 es
15
+ precision mediump float;
16
+ in vec2 v_uv;
17
+ uniform sampler2D u_texA;
18
+ uniform sampler2D u_texB;
19
+ uniform float u_mix;
20
+ uniform float u_aspectA;
21
+ uniform float u_aspectB;
22
+ uniform float u_canvasAspect;
23
+ uniform float u_time;
24
+ out vec4 fragColor;
25
+
26
+ float hash(float n) {
27
+ return fract(sin(n) * 43758.5453);
28
+ }
29
+
30
+ vec4 sampleContain(sampler2D tex, vec2 uv, float texAspect) {
31
+ float rel = texAspect / u_canvasAspect;
32
+ vec2 scale;
33
+ if (rel > 1.0) {
34
+ scale = vec2(1.0, 1.0 / rel);
35
+ } else {
36
+ scale = vec2(rel, 1.0);
37
+ }
38
+ vec2 offset = (1.0 - scale) * 0.5;
39
+ vec2 mapped = (uv - offset) / scale;
40
+ if (mapped.x < 0.0 || mapped.x > 1.0 || mapped.y < 0.0 || mapped.y > 1.0) {
41
+ return vec4(0.0);
42
+ }
43
+ return texture(tex, mapped);
44
+ }
45
+
46
+ void main() {
47
+ vec2 uv = v_uv;
48
+
49
+ // Glitch burst timing ~0.8 event slots per second, 35% chance each.
50
+ float eventT = floor(u_time * 0.8);
51
+ float isGlitching = step(0.65, hash(eventT * 1.618));
52
+ // Sharp onset, slow decay — the burst lingers before fading.
53
+ float slotFrac = fract(u_time * 0.8);
54
+ float decay = (1.0 - smoothstep(0.1, 0.9, slotFrac)) * isGlitching;
55
+
56
+ // Band-based horizontal displacement (scanline tearing) during bursts.
57
+ float band = floor(uv.y * 24.0);
58
+ float bandActive = step(0.55, hash(band + eventT * 23.7));
59
+ float bandShift = (hash(band * 5.2 + eventT * 7.1) * 2.0 - 1.0) * 0.025;
60
+ float shift = bandShift * bandActive * decay;
61
+
62
+ // Occasional large block tears.
63
+ float bigTear = step(0.92, hash(band * 3.7 + eventT * 11.3));
64
+ shift += (hash(band * 9.1 + eventT * 4.7) * 2.0 - 1.0) * 0.08 * bigTear * decay;
65
+
66
+ vec2 shiftedUv = vec2(uv.x + shift, uv.y);
67
+
68
+ // Chromatic aberration: strong baseline always present, amplified by bursts.
69
+ float aberr = 0.012 + 0.018 * decay;
70
+
71
+ float rA = sampleContain(u_texA, vec2(shiftedUv.x + aberr, shiftedUv.y), u_aspectA).r;
72
+ float gA = sampleContain(u_texA, shiftedUv, u_aspectA).g;
73
+ float bA = sampleContain(u_texA, vec2(shiftedUv.x - aberr, shiftedUv.y), u_aspectA).b;
74
+ float aA = sampleContain(u_texA, shiftedUv, u_aspectA).a;
75
+ vec4 colA = vec4(rA, gA, bA, aA);
76
+
77
+ float rB = sampleContain(u_texB, vec2(shiftedUv.x + aberr, shiftedUv.y), u_aspectB).r;
78
+ float gB = sampleContain(u_texB, shiftedUv, u_aspectB).g;
79
+ float bB = sampleContain(u_texB, vec2(shiftedUv.x - aberr, shiftedUv.y), u_aspectB).b;
80
+ float aB = sampleContain(u_texB, shiftedUv, u_aspectB).a;
81
+ vec4 colB = vec4(rB, gB, bB, aB);
82
+
83
+ vec4 col = mix(colA, colB, u_mix);
84
+
85
+ // Brightness washout during bursts push toward overexposed white,
86
+ // scaled by alpha so transparent edges don't bloom.
87
+ float blowout = decay * 0.45;
88
+ col.rgb = mix(col.rgb, vec3(1.0), blowout * col.a);
89
+
90
+ fragColor = col;
90
91
  }`;
91
92
  // ─── Registry ─────────────────────────────────────────────────────────────────
92
93
  /**
package/dist/buff.d.ts CHANGED
@@ -4,6 +4,7 @@ import type { CombatStatistic, Scaling } from './stat';
4
4
  import type { DamageType } from './DamageType';
5
5
  import type { CombatEntity } from './entity';
6
6
  import { AvatarEffectId } from './avatarEffects';
7
+ import type { EffectTargeting } from './technique';
7
8
  export type TechniqueCondition = ChanceTechniqueCondition | BuffTechniqueCondition | HpTechniqueCondition | ConditionTechniqueCondition | InventoryItemTechniqueCondition;
8
9
  interface BaseTechniqueCondition {
9
10
  /**
@@ -110,6 +111,7 @@ export interface Buff {
110
111
  trigger?: TechniqueCondition;
111
112
  damageModifier: DamageModifier;
112
113
  effects?: BuffEffect[];
114
+ afterBarrier?: boolean;
113
115
  }[];
114
116
  /** Amplifies outgoing damage/barrier/heal effects. Runs before the effect is applied. */
115
117
  techniqueAmplifierEffects?: {
@@ -339,11 +341,13 @@ interface HealEffect extends BaseBuff {
339
341
  kind: 'heal';
340
342
  amount: Scaling;
341
343
  hits?: Scaling;
344
+ targeting?: EffectTargeting;
342
345
  }
343
346
  interface BarrierEffect extends BaseBuff {
344
347
  kind: 'barrier';
345
348
  amount: Scaling;
346
349
  hits?: Scaling;
350
+ targeting?: EffectTargeting;
347
351
  }
348
352
  interface CreateBuffSelfEffect extends BaseBuff {
349
353
  kind: 'buffSelf';
@@ -351,6 +355,7 @@ interface CreateBuffSelfEffect extends BaseBuff {
351
355
  buff: Buff;
352
356
  silent?: boolean;
353
357
  hideBuff?: boolean;
358
+ targeting?: EffectTargeting;
354
359
  }
355
360
  interface ConsumeBuffSelfEffect extends BaseBuff {
356
361
  kind: 'consumeSelf';
@@ -424,6 +429,7 @@ interface RepairEffect extends BaseBuff {
424
429
  group: string;
425
430
  /** Which matching buff(s) to repair: 'all', 'lowestHealth', or 'highestHealth' */
426
431
  rule: RepairRule;
432
+ targeting?: EffectTargeting;
427
433
  }
428
434
  interface ConsumeInventoryItemEffect extends BaseBuff {
429
435
  kind: 'consumeInventoryItem';
@@ -326,7 +326,7 @@ async function main() {
326
326
  console.log(`Template-ready strings : ${templateStrings.length}`);
327
327
  // Generate hierarchical template
328
328
  console.log('\nGenerating translation template...');
329
- const template = (0, reporters_js_1.generateHierarchicalTemplate)(templateStrings);
329
+ const template = (0, reporters_js_1.generateHierarchicalTemplate)(templateStrings, undefined, undefined, false);
330
330
  const sortedTemplate = deepSortObject(template);
331
331
  const stringCount = countHierarchicalStrings(sortedTemplate);
332
332
  console.log(` ${stringCount} unique translatable entries found.`);
@@ -243,7 +243,7 @@ function findMinimalUniquePaths(paths) {
243
243
  * - If different texts have same simple field -> use minimal unique path prefix
244
244
  * - If text is unique for its simple field -> just use simple field
245
245
  */
246
- function generateHierarchicalTemplate(allStrings, techniqueTooltipsData, textsRequiringContext) {
246
+ function generateHierarchicalTemplate(allStrings, techniqueTooltipsData, textsRequiringContext, includeRootPatterns = true) {
247
247
  const template = {};
248
248
  const intermediate = new Map();
249
249
  // Helper to add entry to intermediate structure
@@ -637,37 +637,39 @@ function generateHierarchicalTemplate(allStrings, techniqueTooltipsData, textsRe
637
637
  }
638
638
  }
639
639
  }
640
- // Add hardcoded patterns to a special category
641
- if (!template['_patterns']) {
642
- template['_patterns'] = {};
643
- }
644
- if (!template['_patterns']['hardcoded']) {
645
- template['_patterns']['hardcoded'] = {};
646
- }
647
- // Add stack-related strings
648
- template['_patterns']['hardcoded']['[word] stack'] = '';
649
- template['_patterns']['hardcoded']['[word] stacks'] = '';
650
- // Add dynamic template patterns
651
- for (const tmpl of config_js_1.HARDCODED_TEMPLATE_PATTERNS) {
652
- template['_patterns']['hardcoded'][`[template] ${tmpl}`] = '';
653
- }
654
- // Add condition words
655
- if (!template['_patterns']['conditions']) {
656
- template['_patterns']['conditions'] = {};
657
- }
658
- for (const word of config_js_1.CONDITION_WORDS) {
659
- template['_patterns']['conditions'][`[word] ${word}`] = '';
660
- }
661
- // Add condition template strings from describeTechniqueCondition.ts and describeCraftingTechniqueCondition.ts
662
- for (const tmpl of config_js_1.CONDITION_TEMPLATES) {
663
- template['_patterns']['conditions'][`[condition] ${tmpl}`] = '';
664
- }
665
- // Add requirement strings
666
- if (!template['_patterns']['requirements']) {
667
- template['_patterns']['requirements'] = {};
668
- }
669
- for (const reqStr of config_js_1.REQUIREMENT_STRINGS) {
670
- template['_patterns']['requirements'][`[requirement] ${reqStr}`] = '';
640
+ // Add hardcoded patterns to a special category (only when extracting for the game, not for mods)
641
+ if (includeRootPatterns) {
642
+ if (!template['_patterns']) {
643
+ template['_patterns'] = {};
644
+ }
645
+ if (!template['_patterns']['hardcoded']) {
646
+ template['_patterns']['hardcoded'] = {};
647
+ }
648
+ // Add stack-related strings
649
+ template['_patterns']['hardcoded']['[word] stack'] = '';
650
+ template['_patterns']['hardcoded']['[word] stacks'] = '';
651
+ // Add dynamic template patterns
652
+ for (const tmpl of config_js_1.HARDCODED_TEMPLATE_PATTERNS) {
653
+ template['_patterns']['hardcoded'][`[template] ${tmpl}`] = '';
654
+ }
655
+ // Add condition words
656
+ if (!template['_patterns']['conditions']) {
657
+ template['_patterns']['conditions'] = {};
658
+ }
659
+ for (const word of config_js_1.CONDITION_WORDS) {
660
+ template['_patterns']['conditions'][`[word] ${word}`] = '';
661
+ }
662
+ // Add condition template strings from describeTechniqueCondition.ts and describeCraftingTechniqueCondition.ts
663
+ for (const tmpl of config_js_1.CONDITION_TEMPLATES) {
664
+ template['_patterns']['conditions'][`[condition] ${tmpl}`] = '';
665
+ }
666
+ // Add requirement strings
667
+ if (!template['_patterns']['requirements']) {
668
+ template['_patterns']['requirements'] = {};
669
+ }
670
+ for (const reqStr of config_js_1.REQUIREMENT_STRINGS) {
671
+ template['_patterns']['requirements'][`[requirement] ${reqStr}`] = '';
672
+ }
671
673
  }
672
674
  return template;
673
675
  }
@@ -1,5 +1,5 @@
1
1
  import type { Breakpoint, ButtonProps, IconButtonProps } from '@mui/material';
2
- import type { ReactNode, PropsWithChildren } from 'react';
2
+ import type { ReactNode, PropsWithChildren, ReactElement } from 'react';
3
3
  import type { SoundEffectName } from './audio';
4
4
  import type { ScreenEffectType } from './ScreenEffectType';
5
5
  import type React from 'react';
@@ -55,4 +55,22 @@ export interface BackgroundImageProps {
55
55
  }
56
56
  export type BackgroundImageFC = React.FC<BackgroundImageProps>;
57
57
  export type MemoBackgroundImageFC = React.NamedExoticComponent<BackgroundImageProps>;
58
+ export interface GameTooltipProps {
59
+ provider: () => ReactNode;
60
+ children: ReactElement;
61
+ flipped?: boolean;
62
+ disabled?: boolean;
63
+ minimal?: boolean;
64
+ }
65
+ export interface GameTooltipBoxProps {
66
+ isSecondary?: boolean;
67
+ isAux?: boolean;
68
+ removeWidthLimit?: boolean;
69
+ }
70
+ export interface TooltipLineProps {
71
+ children?: React.ReactNode;
72
+ }
73
+ export type GameTooltipFC = React.FC<GameTooltipProps>;
74
+ export type GameTooltipBoxFC = React.FC<PropsWithChildren<GameTooltipBoxProps>>;
75
+ export type TooltipLineFC = React.ComponentType<TooltipLineProps>;
58
76
  export {};
@@ -27,7 +27,7 @@ export interface HarmonyData {
27
27
  inscribedPatterns?: InscribedPatternsData;
28
28
  resonance?: ResonanceData;
29
29
  recommendedTechniqueTypes: CraftingTechniqueType[];
30
- additionalData?: any;
30
+ additionalData?: unknown;
31
31
  }
32
32
  export interface CraftingEffectTracking {
33
33
  icon: string;
@@ -1,10 +1,10 @@
1
1
  import type { Translatable } from './translatable';
2
- declare const intimateStats: readonly ["satisfaction", "energy", "painThreshold"];
3
- export type IntimateStat = (typeof intimateStats)[number];
4
- declare const intimateResources: readonly ["pain", "harmony", "excitement", "rhythm"];
5
- export type IntimateResource = (typeof intimateResources)[number];
6
- declare const intimateTechniqueTypes: readonly ["rough", "tender", "passionate"];
7
- export type IntimateTechniqueType = (typeof intimateTechniqueTypes)[number];
2
+ declare const _intimateStats: readonly ["satisfaction", "energy", "painThreshold"];
3
+ export type IntimateStat = (typeof _intimateStats)[number];
4
+ declare const _intimateResources: readonly ["pain", "harmony", "excitement", "rhythm"];
5
+ export type IntimateResource = (typeof _intimateResources)[number];
6
+ declare const _intimateTechniqueTypes: readonly ["rough", "tender", "passionate"];
7
+ export type IntimateTechniqueType = (typeof _intimateTechniqueTypes)[number];
8
8
  export declare const intimateTechniqueTypeToName: Record<IntimateTechniqueType, string>;
9
9
  export declare const intimateResourceToName: Record<IntimateResource, string>;
10
10
  export declare const dualCultivationCompletionStateToName: Record<string, string>;
@@ -1,6 +1,6 @@
1
- const intimateStats = ['satisfaction', 'energy', 'painThreshold'];
2
- const intimateResources = ['pain', 'harmony', 'excitement', 'rhythm'];
3
- const intimateTechniqueTypes = ['rough', 'tender', 'passionate'];
1
+ const _intimateStats = ['satisfaction', 'energy', 'painThreshold'];
2
+ const _intimateResources = ['pain', 'harmony', 'excitement', 'rhythm'];
3
+ const _intimateTechniqueTypes = ['rough', 'tender', 'passionate'];
4
4
  export const intimateTechniqueTypeToName = {
5
5
  rough: 'Rough',
6
6
  tender: 'Tender',
package/dist/entity.js CHANGED
@@ -1,4 +1,11 @@
1
- export const entityTypes = ['Player', 'Lifeform', 'Enemy', 'PlayerParty', 'EnemyParty', 'System'];
1
+ export const entityTypes = [
2
+ 'Player',
3
+ 'Lifeform',
4
+ 'Enemy',
5
+ 'PlayerParty',
6
+ 'EnemyParty',
7
+ 'System',
8
+ ];
2
9
  export const sexes = ['male', 'female'];
3
10
  export const sexToName = {
4
11
  male: 'Male',
package/dist/event.d.ts CHANGED
@@ -86,7 +86,7 @@ export interface ChoiceStepChoice {
86
86
  hideIfDisabled?: boolean;
87
87
  children: EventStep[];
88
88
  }
89
- export type EventChoiceCondition = RealmCondition | PhysicalStatisticCondition | SocialStatisticCondition | ItemCondition | BuffCondition | MoneyCondition | FavourCondition | MultiCondition | AffinityCondition | QiCondition | ReputationCondition | HealthCondition | InjuredCondition;
89
+ export type EventChoiceCondition = RealmCondition | PhysicalStatisticCondition | SocialStatisticCondition | ItemCondition | BuffCondition | MoneyCondition | FavourCondition | MultiCondition | AffinityCondition | QiCondition | ReputationCondition | HealthCondition | InjuredCondition | SexualityCondition;
90
90
  export interface RealmCondition {
91
91
  kind: 'realm';
92
92
  realm: Realm;
@@ -106,6 +106,10 @@ interface InjuredCondition {
106
106
  kind: 'injured';
107
107
  injured: boolean;
108
108
  }
109
+ interface SexualityCondition {
110
+ kind: 'sexuality';
111
+ targetSex: 'male' | 'female';
112
+ }
109
113
  interface SocialStatisticCondition {
110
114
  kind: 'socialStatistic';
111
115
  stat: SocialStatistic;
@@ -15,4 +15,4 @@
15
15
  * };
16
16
  * }
17
17
  */
18
- export declare const GAME_VERSION = "0.6.52";
18
+ export declare const GAME_VERSION = "0.6.54";
@@ -15,4 +15,4 @@
15
15
  * };
16
16
  * }
17
17
  */
18
- export const GAME_VERSION = "0.6.52";
18
+ export const GAME_VERSION = "0.6.54";
package/dist/item.d.ts CHANGED
@@ -7,12 +7,12 @@ import type { TechniqueElement } from './element';
7
7
  import type { EnemyEntity, StoredRule } from './entity';
8
8
  import type { Room } from './house';
9
9
  import type { RegionContentType } from './mysticalRegion';
10
- import type { AbsorberConfig } from './soulShardDelve';
11
10
  import type { Rarity } from './rarity';
12
11
  import type { Realm, RealmProgress } from './realm';
13
12
  import type { RecipeDifficulty } from './RecipeDifficulty';
14
13
  import type { CombatStatistic, CombatStatsMap, CraftingStatistic, CraftingStatsMap, PhysicalStatistic, Scaling, SocialStatistic } from './stat';
15
14
  import type { Technique, TechniqueEffect } from './technique';
15
+ import { DelveRoom } from './soulShardDelve';
16
16
  export declare const itemKinds: readonly ["clothing", "talisman", "artefact", "mount", "cauldron", "flame", "upgrade", "fruit", "elixir", "recipe", "technique", "action", "transport_seal", "enchantment", "pill", "reagent", "concoction", "consumable", "recuperation", "formation", "breakthrough", "pillar_shard", "material", "flare", "mystical_key", "condensation_art", "blueprint", "trophy", "treasure", "token", "life_essence", "device", "manual", "pillar_pattern", "local_map"];
17
17
  export type ItemKind = (typeof itemKinds)[number];
18
18
  export declare const itemKindToName: {
@@ -456,14 +456,7 @@ export interface PillarShardItem extends ItemBase {
456
456
  kind: 'pillar_shard';
457
457
  tooltip: Translatable;
458
458
  maxInstances?: number;
459
- /**
460
- * Shard subtype. 'soul' shards are used in soul shard delves — they have routing
461
- * and a room type but no combat/crafting effects. Omit for normal pillar shards.
462
- */
463
- shardSubtype?: 'soul';
464
- /** Absorber config for soul shard delves. Hardcoded on soul shards; generated
465
- * from the shard name hash for pillar shards when absent. */
466
- absorberConfig?: AbsorberConfig;
459
+ delveRoomConfig?: DelveRoom;
467
460
  variants?: PillarShardVariant[];
468
461
  stability?: number;
469
462
  portal?: {
@@ -1,5 +1,5 @@
1
1
  export type KeybindingCategory = 'general' | 'navigation' | 'ui' | 'world' | 'combat' | 'crafting' | 'dialogs' | 'gamepad';
2
- export type KeybindingAction = 'confirm' | 'cancel' | 'pause' | 'alternateConfirm' | 'moveUp' | 'moveDown' | 'moveLeft' | 'moveRight' | 'openInventory' | 'openQuests' | 'openCharacterStats' | 'openTechniques' | 'openCalendar' | 'openWorldMap' | 'combatSelectStance0' | 'combatSelectStance1' | 'combatSelectStance2' | 'combatSelectStance3' | 'combatSelectStance4' | 'combatSelectStance5' | 'combatSelectStance6' | 'combatSelectStance7' | 'combatSelectStance8' | 'combatSelectStance9' | 'combatToggleSpeed' | 'combatToggleLog' | 'combatShowStats' | 'combatAutoBattle' | 'combatUseItem' | 'craftingAction1' | 'craftingAction2' | 'craftingAction3' | 'craftingAction4' | 'craftingAction5' | 'craftingAction6' | 'craftingAction7' | 'craftingAction8' | 'craftingAction9' | 'craftingAction10' | 'craftingAction11' | 'craftingAction12' | 'craftingAction13' | 'craftingAction14' | 'craftingAction15' | 'craftingAction16' | 'craftingAction17' | 'craftingAction18' | 'craftingAction19' | 'craftingAction20' | 'craftingAction21' | 'craftingAction22' | 'craftingAction23' | 'craftingAction24' | 'craftingAction25' | 'craftingAction26' | 'craftingAction27' | 'craftingAction28' | 'craftingAction29' | 'craftingAction30' | 'craftingAction31' | 'craftingAction32' | 'craftingAction33' | 'craftingAction34' | 'craftingAction35' | 'craftingAction36' | 'craftingAction37' | 'craftingAction38' | 'craftingAction39' | 'craftingAction40' | 'craftingAction41' | 'craftingAction42' | 'craftingAction43' | 'craftingAction44' | 'craftingAction45' | 'craftingAction46' | 'craftingAction47' | 'craftingAction48' | 'craftingAction49' | 'craftingAction50' | 'dialogChoice1' | 'dialogChoice2' | 'dialogChoice3' | 'dialogChoice4' | 'dialogChoice5' | 'dialogChoice6' | 'dialogChoice7' | 'dialogChoice8' | 'dialogChoice9' | 'gamepadConfirm' | 'gamepadCancel' | 'gamepadUp' | 'gamepadDown' | 'gamepadLeft' | 'gamepadRight';
2
+ export type KeybindingAction = 'confirm' | 'cancel' | 'pause' | 'alternateConfirm' | 'moveUp' | 'moveDown' | 'moveLeft' | 'moveRight' | 'openInventory' | 'openQuests' | 'openCharacterStats' | 'openTechniques' | 'openCalendar' | 'openWorldMap' | 'combatSelectStance0' | 'combatSelectStance1' | 'combatSelectStance2' | 'combatSelectStance3' | 'combatSelectStance4' | 'combatSelectStance5' | 'combatSelectStance6' | 'combatSelectStance7' | 'combatSelectStance8' | 'combatSelectStance9' | 'combatToggleSpeed' | 'combatToggleLog' | 'combatShowStats' | 'combatAutoBattle' | 'combatUseItem' | 'combatCancel' | 'craftingAction1' | 'craftingAction2' | 'craftingAction3' | 'craftingAction4' | 'craftingAction5' | 'craftingAction6' | 'craftingAction7' | 'craftingAction8' | 'craftingAction9' | 'craftingAction10' | 'craftingAction11' | 'craftingAction12' | 'craftingAction13' | 'craftingAction14' | 'craftingAction15' | 'craftingAction16' | 'craftingAction17' | 'craftingAction18' | 'craftingAction19' | 'craftingAction20' | 'craftingAction21' | 'craftingAction22' | 'craftingAction23' | 'craftingAction24' | 'craftingAction25' | 'craftingAction26' | 'craftingAction27' | 'craftingAction28' | 'craftingAction29' | 'craftingAction30' | 'craftingAction31' | 'craftingAction32' | 'craftingAction33' | 'craftingAction34' | 'craftingAction35' | 'craftingAction36' | 'craftingAction37' | 'craftingAction38' | 'craftingAction39' | 'craftingAction40' | 'craftingAction41' | 'craftingAction42' | 'craftingAction43' | 'craftingAction44' | 'craftingAction45' | 'craftingAction46' | 'craftingAction47' | 'craftingAction48' | 'craftingAction49' | 'craftingAction50' | 'dialogChoice1' | 'dialogChoice2' | 'dialogChoice3' | 'dialogChoice4' | 'dialogChoice5' | 'dialogChoice6' | 'dialogChoice7' | 'dialogChoice8' | 'dialogChoice9' | 'gamepadConfirm' | 'gamepadCancel' | 'gamepadUp' | 'gamepadDown' | 'gamepadLeft' | 'gamepadRight';
3
3
  export interface KeybindingDefinition {
4
4
  action: KeybindingAction;
5
5
  category: KeybindingCategory;
@@ -8,7 +8,7 @@ export interface KeybindingDefinition {
8
8
  defaultKey: string;
9
9
  allowRebind: boolean;
10
10
  }
11
- export type KeybindingsMap = Record<KeybindingAction, string>;
11
+ export type KeybindingsMap = Record<KeybindingAction | string, string>;
12
12
  export declare const keybindingDefinitions: KeybindingDefinition[];
13
13
  export declare const keybindingCategoryInfo: Record<KeybindingCategory, {
14
14
  name: string;
@@ -237,6 +237,14 @@ export const keybindingDefinitions = [
237
237
  defaultKey: 's',
238
238
  allowRebind: true,
239
239
  },
240
+ {
241
+ action: 'combatCancel',
242
+ category: 'combat',
243
+ displayName: 'Cancel Auto Battle / Open Settings',
244
+ description: 'Cancel auto battle or open settings menu',
245
+ defaultKey: 'Escape',
246
+ allowRebind: true,
247
+ },
240
248
  // Crafting Actions (Number keys 1-9, then 0)
241
249
  {
242
250
  action: 'craftingAction1',