afnm-types 0.6.16 → 0.6.20

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 @@
1
- export type GameScreen = 'location' | 'recipe' | 'mission' | 'craftingHall' | 'manual' | 'cultivation' | 'map' | 'healer' | 'market' | 'favour' | 'herbField' | 'mine' | 'recipeLibrary' | 'requestBoard' | 'compendium' | 'library' | 'altar' | 'research' | 'pillarGrid' | 'fallenStar' | 'trainingGround';
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';
@@ -1,11 +1,12 @@
1
1
  import { Destiny } from './destiny';
2
2
  import { Item } from './item';
3
- import { PhysicalStatistic, SocialStatistic } from './stat';
3
+ import { CombatStatistic, CraftingStatistic, PhysicalStatistic, Scaling, SocialStatistic } from './stat';
4
4
  export interface Background {
5
5
  name: string;
6
6
  description: string;
7
7
  physicalStats?: Partial<Record<PhysicalStatistic, number>>;
8
8
  socialStats?: Partial<Record<SocialStatistic, number>>;
9
+ rawStats?: Partial<Record<CombatStatistic | CraftingStatistic, Scaling>>;
9
10
  reputation?: Record<string, number>;
10
11
  spiritualRoot?: number;
11
12
  spiritStones?: number;
package/dist/buff.d.ts CHANGED
@@ -117,6 +117,14 @@ export interface CompanionCombatImage extends BaseCombatImage {
117
117
  position: 'companion';
118
118
  scale?: number;
119
119
  stacksScale?: number;
120
+ executeImage?: {
121
+ image: string;
122
+ scale: number;
123
+ imageOffset?: {
124
+ x: number;
125
+ y: number;
126
+ };
127
+ };
120
128
  }
121
129
  export interface GroundCombatImage extends BaseCombatImage {
122
130
  position: 'ground';
@@ -18,9 +18,57 @@ export interface Character {
18
18
  portrait: string;
19
19
  image: string;
20
20
  imageScale?: number;
21
+ supportImage?: {
22
+ image: string;
23
+ scale: number;
24
+ };
25
+ defensiveImage?: {
26
+ image: string;
27
+ scale: number;
28
+ };
29
+ utilityImage?: {
30
+ image: string;
31
+ scale: number;
32
+ };
33
+ aggressiveImage?: {
34
+ image: string;
35
+ scale: number;
36
+ };
37
+ offensiveImage?: {
38
+ image: string;
39
+ scale: number;
40
+ };
41
+ hitImage?: {
42
+ image: string;
43
+ scale: number;
44
+ };
21
45
  imageOverride?: {
22
46
  image: string;
23
47
  portrait: string;
48
+ supportImage?: {
49
+ image: string;
50
+ scale: number;
51
+ };
52
+ defensiveImage?: {
53
+ image: string;
54
+ scale: number;
55
+ };
56
+ utilityImage?: {
57
+ image: string;
58
+ scale: number;
59
+ };
60
+ aggressiveImage?: {
61
+ image: string;
62
+ scale: number;
63
+ };
64
+ offensiveImage?: {
65
+ image: string;
66
+ scale: number;
67
+ };
68
+ hitImage?: {
69
+ image: string;
70
+ scale: number;
71
+ };
24
72
  condition: string;
25
73
  }[];
26
74
  }
@@ -85,6 +133,7 @@ export interface CharacterState {
85
133
  followCooldown: number;
86
134
  aidBreakthroughCooldown: number;
87
135
  dualCultivationCooldown: number;
136
+ customCooldowns: Record<string, number>;
88
137
  }
89
138
  interface BaseCharacterInteraction {
90
139
  condition: string;
@@ -142,7 +191,8 @@ export interface CustomCharacterInteractionBlock {
142
191
  name: string;
143
192
  tooltip: string;
144
193
  icon: OverridableComponent<SvgIconTypeMap<{}, 'svg'>>;
145
- interactions: CustomCharacterInteraction[];
194
+ interaction: CustomCharacterInteraction;
195
+ cooldown?: number;
146
196
  }
147
197
  export interface CustomCharacterInteraction extends BaseCharacterInteraction {
148
198
  disableCondition?: string;
@@ -17,12 +17,14 @@ interface GameDialogProps {
17
17
  allowKeybinding?: boolean;
18
18
  backgroundPaper?: ReactNode;
19
19
  title?: string;
20
+ removeBorder?: boolean;
20
21
  }
21
22
  export type GameDialogFC = React.FC<PropsWithChildren<GameDialogProps>>;
22
23
  export type GameButtonFC = React.ForwardRefRenderFunction<HTMLButtonElement, ButtonProps & {
23
24
  keybinding?: string;
24
25
  keyPriority?: number;
25
26
  fancyBorder?: boolean;
27
+ keyContext?: string;
26
28
  }>;
27
29
  export type GameIconButtonFC = React.ForwardRefRenderFunction<HTMLButtonElement, IconButtonProps & {
28
30
  hoverSfx?: SoundEffectName;
@@ -16,6 +16,7 @@ export declare const craftingConditionToColour: Record<CraftingCondition, string
16
16
  export declare const craftingConditionToIcon: Record<CraftingCondition, OverridableComponent<SvgIconTypeMap<{}, 'svg'>>>;
17
17
  export interface RecipeConditionEffect {
18
18
  name: string;
19
+ colour: string;
19
20
  conditionEffects: Record<CraftingCondition, {
20
21
  tooltip: string;
21
22
  effects: CraftingConditionEffect[];
@@ -42,6 +42,7 @@ export interface CraftingBuff {
42
42
  stacksScaling?: number;
43
43
  animations?: ('bump' | 'buff' | 'completion' | 'perfection' | 'stabilityup' | 'stabilitydown' | 'pool')[];
44
44
  cantUpgrade?: boolean;
45
+ bonusHiddenPotential?: Scaling;
45
46
  }
46
47
  export type CraftingBuffEffect = CompletionEffect | PerfectionEffect | StabilityEffect | PoolEffect | NegateEffect | CreateBuffEffect | AddStackEffect | ChangeToxicityEffect | MaxStabilityEffect;
47
48
  interface BaseEffect {
@@ -55,6 +55,7 @@ export interface ProgressState {
55
55
  effectTracking: Record<string, CraftingEffectTracking>;
56
56
  actionTracking: Record<string, ActionTracking>;
57
57
  pillTracking: Record<string, number>;
58
+ lastActionType?: CraftingTechniqueType;
58
59
  }
59
60
  export interface FailedCraftingResult {
60
61
  state: 'failed';
@@ -57,6 +57,7 @@ export interface CraftingTechnique {
57
57
  type: CraftingTechniqueType;
58
58
  realm: Realm;
59
59
  tooltip?: string;
60
+ showCreatesBuff?: boolean;
60
61
  currentCooldown: number;
61
62
  justClicked?: true;
62
63
  mastery?: CraftingTechniqueMastery[];
package/dist/destiny.d.ts CHANGED
@@ -1,9 +1,13 @@
1
- import { CombatStatistic, CraftingStatistic } from './stat';
1
+ import { CombatStatistic, CraftingStatistic, Scaling } from './stat';
2
2
  export interface Destiny {
3
3
  name: string;
4
4
  description: string;
5
- combatStats?: Partial<Record<CombatStatistic, number>>;
6
- craftingStats?: Partial<Record<CraftingStatistic, number>>;
5
+ combatStats?: Partial<{
6
+ [key in CombatStatistic]: Scaling;
7
+ }>;
8
+ craftingStats?: Partial<{
9
+ [key in CraftingStatistic]: Scaling;
10
+ }>;
7
11
  qiAbsorption?: number;
8
12
  charisma?: number;
9
13
  lifespan?: number;
package/dist/entity.d.ts CHANGED
@@ -6,11 +6,21 @@ import { TechniqueElement } from './element';
6
6
  import { ArtefactItem, CombatItem, CombatPillItem, ConcoctionItem, CraftingEquipmentItem, Item, ItemDesc } from './item';
7
7
  import { Realm, RealmProgress } from './realm';
8
8
  import { CombatStatsMap, CraftingStatsMap, PhysicalStatistic, SocialStatistic } from './stat';
9
- import { KnownTechnique, Technique } from './technique';
9
+ import { KnownTechnique, Technique, TechniquePriority } from './technique';
10
10
  export declare const sexes: readonly ["male", "female"];
11
11
  export type Sex = (typeof sexes)[number];
12
12
  export interface PlayerEntity {
13
13
  imageIndex: number;
14
+ customImagePath?: string;
15
+ customImages?: {
16
+ idle?: string;
17
+ hit?: string;
18
+ support?: string;
19
+ defensive?: string;
20
+ utility?: string;
21
+ offensive?: string;
22
+ aggressive?: string;
23
+ };
14
24
  realm: Realm;
15
25
  realmOverride?: Realm;
16
26
  realmProgress: RealmProgress;
@@ -43,7 +53,12 @@ export interface PlayerEntity {
43
53
  craftingTechniques: KnownCraftingTechnique[];
44
54
  currentEquipmentLoadout?: StoredEquipmentLoadout;
45
55
  storedEquipmentLoadouts?: StoredEquipmentLoadout[];
56
+ currentGardenLayout?: StoredGardenLayout;
57
+ storedGardenLayouts?: StoredGardenLayout[];
58
+ currentPillarLayout?: StoredPillarLayout;
59
+ storedPillarLayouts?: StoredPillarLayout[];
46
60
  destiny: string[];
61
+ background: string[];
47
62
  monthBuffs?: Buff[];
48
63
  injured?: boolean;
49
64
  }
@@ -52,6 +67,54 @@ export type BattleLength = 'halfround' | '1round' | 'veryshort' | 'short' | 'med
52
67
  export interface EnemyEntity {
53
68
  name: string;
54
69
  image: string;
70
+ supportImage?: {
71
+ image: string;
72
+ scale?: number;
73
+ imageOffset?: {
74
+ x: number;
75
+ y: number;
76
+ };
77
+ };
78
+ defensiveImage?: {
79
+ image: string;
80
+ scale?: number;
81
+ imageOffset?: {
82
+ x: number;
83
+ y: number;
84
+ };
85
+ };
86
+ utilityImage?: {
87
+ image: string;
88
+ scale?: number;
89
+ imageOffset?: {
90
+ x: number;
91
+ y: number;
92
+ };
93
+ };
94
+ aggressiveImage?: {
95
+ image: string;
96
+ scale?: number;
97
+ imageOffset?: {
98
+ x: number;
99
+ y: number;
100
+ };
101
+ };
102
+ offensiveImage?: {
103
+ image: string;
104
+ scale?: number;
105
+ imageOffset?: {
106
+ x: number;
107
+ y: number;
108
+ };
109
+ };
110
+ hitImage?: {
111
+ image: string;
112
+ scale?: number;
113
+ imageOffset?: {
114
+ x: number;
115
+ y: number;
116
+ };
117
+ };
55
118
  imageScale: number;
56
119
  imageOffset?: {
57
120
  x: number;
@@ -123,6 +186,10 @@ export interface CraftingEntity {
123
186
  inactiveBuffs?: CraftingBuff[];
124
187
  messages: CraftingMessage[];
125
188
  animations: ('bump' | 'buff' | 'completion' | 'perfection' | 'stabilityup' | 'stabilitydown' | 'pool' | 'failedAction')[];
189
+ supportImage?: string;
190
+ defensiveImage?: string;
191
+ utilityImage?: string;
192
+ aggressiveImage?: string;
126
193
  }
127
194
  export interface CraftingMessage {
128
195
  id: number;
@@ -142,6 +209,54 @@ export interface CombatArtefact extends ArtefactItem {
142
209
  export interface CombatEntity {
143
210
  isPlayer: boolean;
144
211
  image: string;
212
+ supportImage?: {
213
+ image: string;
214
+ scale: number;
215
+ imageOffset?: {
216
+ x: number;
217
+ y: number;
218
+ };
219
+ };
220
+ defensiveImage?: {
221
+ image: string;
222
+ scale: number;
223
+ imageOffset?: {
224
+ x: number;
225
+ y: number;
226
+ };
227
+ };
228
+ utilityImage?: {
229
+ image: string;
230
+ scale: number;
231
+ imageOffset?: {
232
+ x: number;
233
+ y: number;
234
+ };
235
+ };
236
+ aggressiveImage?: {
237
+ image: string;
238
+ scale: number;
239
+ imageOffset?: {
240
+ x: number;
241
+ y: number;
242
+ };
243
+ };
244
+ offensiveImage?: {
245
+ image: string;
246
+ scale: number;
247
+ imageOffset?: {
248
+ x: number;
249
+ y: number;
250
+ };
251
+ };
252
+ hitImage?: {
253
+ image: string;
254
+ scale: number;
255
+ imageOffset?: {
256
+ x: number;
257
+ y: number;
258
+ };
259
+ };
145
260
  realm: Realm;
146
261
  stats: CombatStatsMap;
147
262
  stance: Stance;
@@ -154,7 +269,7 @@ export interface CombatEntity {
154
269
  buffs: Buff[];
155
270
  artefacts: CombatArtefact[];
156
271
  messages: CombatMessage[];
157
- animations: ('bump' | 'attack' | 'hurt' | 'barrier' | 'cleanse' | 'heal' | 'block' | 'buff' | 'debuff' | 'exhausted' | 'spawn' | 'failedTechnique' | 'droplet')[];
272
+ animations: ('bump' | 'attack' | 'hurt' | 'barrier' | 'cleanse' | 'heal' | 'block' | 'buff' | 'debuff' | 'exhausted' | 'spawn' | 'failedTechnique' | 'droplet' | TechniquePriority)[];
158
273
  renderScale: number;
159
274
  imageOffset?: {
160
275
  x: number;
@@ -227,4 +342,33 @@ export interface StoredEquipmentLoadout {
227
342
  flame?: ItemDesc;
228
343
  };
229
344
  }
345
+ export interface StoredGardenLayout {
346
+ name: string;
347
+ id: string;
348
+ autoName?: boolean;
349
+ layout: {
350
+ x: number;
351
+ y: number;
352
+ cropItemName?: string;
353
+ cropRealm?: string;
354
+ device?: ItemDesc;
355
+ }[];
356
+ }
357
+ export interface StoredPillarLayout {
358
+ name: string;
359
+ id: string;
360
+ autoName?: boolean;
361
+ layout: {
362
+ grid: string[];
363
+ shards: {
364
+ shard: string;
365
+ pos: {
366
+ x: number;
367
+ y: number;
368
+ rotation: number;
369
+ };
370
+ variantIndex?: number;
371
+ }[];
372
+ };
373
+ }
230
374
  export {};
@@ -8,12 +8,16 @@ export interface Crop {
8
8
  item: string;
9
9
  yield: number;
10
10
  growthDays: number;
11
- cost?: {
12
- condition: string;
13
- amount: number;
14
- };
15
- change?: {
16
- condition: string;
17
- amount: number;
18
- };
11
+ cost?: string;
12
+ change: string;
13
+ }
14
+ export type DeviceEffectType = 'harvester' | 'growthBoost' | 'yieldBoost' | 'universalSoil';
15
+ export interface DeviceEffect {
16
+ type: DeviceEffectType;
17
+ harvestInterval?: number;
18
+ boostAmount?: number;
19
+ soilConditions?: string[];
20
+ }
21
+ export interface DeviceProperties {
22
+ effects: DeviceEffect[];
19
23
  }
package/dist/item.d.ts CHANGED
@@ -10,15 +10,15 @@ import { Rarity } from './rarity';
10
10
  import { Realm, RealmProgress } from './realm';
11
11
  import { RecipeDifficulty } from './RecipeDifficulty';
12
12
  import { CombatStatsMap, CraftingStatsMap, PhysicalStatistic, Scaling, SocialStatistic } from './stat';
13
- import { TechniqueEffect } from './technique';
14
- 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"];
13
+ import { Technique, TechniqueEffect } from './technique';
14
+ 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"];
15
15
  export type ItemKind = (typeof itemKinds)[number];
16
16
  export type ItemCostMap = {
17
17
  [key in ItemKind]: number;
18
18
  };
19
19
  export declare const buyItemCostMap: ItemCostMap;
20
20
  export declare const sellItemCostMap: ItemCostMap;
21
- export type Item = TechniqueItem | TechniqueCrystalItem | TechniqueShardItem | TechniqueEnhancementDust | TransportSealItem | SpiritFruitItem | RecipeItem | ElixirItem | TreasureItem | CraftingItem | ClothingItem | TalismanItem | ArtefactItem | PillItem | ConcoctionItem | CombatItem | CauldronItem | FlameItem | BreakthroughItem | RecuperationItem | MountItem | FlareItem | CraftingTechniqueItem | EnchantmentItem | MysticalKeyItem | CondensationArtItem | FormationItem | PillarShardItem | TrophyItem | BlueprintItem | TokenItem | UpgradeItem | CraftingReagentItem;
21
+ export type Item = TechniqueItem | TechniqueCrystalItem | TechniqueShardItem | TechniqueEnhancementDust | TransportSealItem | SpiritFruitItem | RecipeItem | ElixirItem | TreasureItem | CraftingItem | ClothingItem | TalismanItem | ArtefactItem | PillItem | ConcoctionItem | CombatItem | CauldronItem | FlameItem | BreakthroughItem | RecuperationItem | MountItem | FlareItem | CraftingTechniqueItem | EnchantmentItem | MysticalKeyItem | CondensationArtItem | FormationItem | PillarShardItem | TrophyItem | BlueprintItem | TokenItem | UpgradeItem | CraftingReagentItem | LifeEssenceItem | DeviceItem;
22
22
  interface ItemBase {
23
23
  kind: ItemKind;
24
24
  name: string;
@@ -32,12 +32,15 @@ interface ItemBase {
32
32
  enchantment?: Enchantment;
33
33
  upgradedFrom?: Item;
34
34
  qualityTier?: number;
35
+ hiddenPotential?: number;
36
+ minimumPotential?: number;
35
37
  }
36
38
  export interface ItemDesc {
37
39
  name: string;
38
40
  stacks?: number;
39
41
  enchantment?: EnchantmentDesc;
40
42
  qualityTier?: number;
43
+ hiddenPotential?: number;
41
44
  }
42
45
  export type TechniqueItemKind = 'technique' | 'crystal' | 'shard' | 'enhance';
43
46
  export interface BaseTechniqueItem extends ItemBase {
@@ -67,6 +70,15 @@ export interface TreasureItem extends ItemBase {
67
70
  kind: 'treasure';
68
71
  isCollectible?: boolean;
69
72
  }
73
+ export interface DeviceItem extends ItemBase {
74
+ kind: 'device';
75
+ deviceEffects: Array<{
76
+ type: 'harvester' | 'growthBoost' | 'yieldBoost' | 'universalSoil';
77
+ harvestInterval?: number;
78
+ boostAmount?: number;
79
+ soilConditions?: string[];
80
+ }>;
81
+ }
70
82
  export interface CraftingItem extends ItemBase {
71
83
  kind: 'material';
72
84
  }
@@ -346,16 +358,12 @@ export interface CondensationArtEnchantment extends Enchantment {
346
358
  speed?: number;
347
359
  restoredDroplets?: number;
348
360
  }
349
- export type FormationKind = 'herbField' | 'qiDensity';
350
- export type FormationItem = HerbFieldFormationItem | QiDensityFormationItem;
361
+ export type FormationKind = 'qiDensity';
362
+ export type FormationItem = QiDensityFormationItem;
351
363
  interface FormationItemBase extends ItemBase {
352
364
  kind: 'formation';
353
365
  subkind: FormationKind;
354
366
  }
355
- export interface HerbFieldFormationItem extends FormationItemBase {
356
- subkind: 'herbField';
357
- speed: number;
358
- }
359
367
  export interface QiDensityFormationItem extends FormationItemBase {
360
368
  subkind: 'qiDensity';
361
369
  qi: number;
@@ -416,4 +424,12 @@ export interface UncutStonePool {
416
424
  fallback: Item[];
417
425
  items: Item[];
418
426
  }
427
+ export interface LifeEssenceItem extends ItemBase {
428
+ kind: 'life_essence';
429
+ thresholds: {
430
+ level: number;
431
+ buffs: Buff[];
432
+ techniques: Technique[];
433
+ }[];
434
+ }
419
435
  export {};
package/dist/item.js CHANGED
@@ -29,6 +29,8 @@ export const itemKinds = [
29
29
  'trophy',
30
30
  'treasure',
31
31
  'token',
32
+ 'life_essence',
33
+ 'device',
32
34
  ];
33
35
  export const buyItemCostMap = {
34
36
  technique: 3000,
@@ -61,6 +63,8 @@ export const buyItemCostMap = {
61
63
  token: 500,
62
64
  upgrade: 4000,
63
65
  reagent: 500,
66
+ life_essence: 5000,
67
+ device: 2500,
64
68
  };
65
69
  export const sellItemCostMap = {
66
70
  technique: 400,
@@ -93,4 +97,6 @@ export const sellItemCostMap = {
93
97
  token: 0,
94
98
  upgrade: 1000,
95
99
  reagent: 150,
100
+ life_essence: 1000,
101
+ device: 600,
96
102
  };
@@ -20,6 +20,7 @@ export const itemTypeToHarmonyType = {
20
20
  pillar_shard: 'resonance',
21
21
  flare: 'resonance',
22
22
  material: 'resonance',
23
+ device: 'resonance',
23
24
  // Non craftable stuff
24
25
  formation: 'forge',
25
26
  recipe: 'forge',
@@ -34,4 +35,5 @@ export const itemTypeToHarmonyType = {
34
35
  treasure: 'forge',
35
36
  token: 'forge',
36
37
  upgrade: 'forge',
38
+ life_essence: 'resonance',
37
39
  };
@@ -0,0 +1,20 @@
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' | 'craftingAction1' | 'craftingAction2' | 'craftingAction3' | 'craftingAction4' | 'craftingAction5' | 'craftingAction6' | 'craftingAction7' | 'craftingAction8' | 'craftingAction9' | 'craftingAction10' | 'dialogChoice1' | 'dialogChoice2' | 'dialogChoice3' | 'dialogChoice4' | 'dialogChoice5' | 'dialogChoice6' | 'dialogChoice7' | 'dialogChoice8' | 'dialogChoice9' | 'gamepadConfirm' | 'gamepadCancel' | 'gamepadUp' | 'gamepadDown' | 'gamepadLeft' | 'gamepadRight';
3
+ export interface KeybindingDefinition {
4
+ action: KeybindingAction;
5
+ category: KeybindingCategory;
6
+ displayName: string;
7
+ description: string;
8
+ defaultKey: string;
9
+ allowRebind: boolean;
10
+ }
11
+ export type KeybindingsMap = Record<KeybindingAction, string>;
12
+ export declare const keybindingDefinitions: KeybindingDefinition[];
13
+ export declare const keybindingCategoryInfo: Record<KeybindingCategory, {
14
+ name: string;
15
+ description: string;
16
+ }>;
17
+ export declare const defaultKeybindings: KeybindingsMap;
18
+ export declare function getKeyDisplayName(key: string): string;
19
+ export declare function isKeyAllowed(key: string): boolean;
20
+ export declare function getKeybindingsByCategory(category: KeybindingCategory): KeybindingDefinition[];
@@ -0,0 +1,509 @@
1
+ // Complete keybinding definitions with metadata
2
+ export const keybindingDefinitions = [
3
+ // General
4
+ {
5
+ action: 'confirm',
6
+ category: 'general',
7
+ displayName: 'Confirm',
8
+ description: 'Confirm selection or advance dialog',
9
+ defaultKey: 'Enter',
10
+ allowRebind: true,
11
+ },
12
+ {
13
+ action: 'alternateConfirm',
14
+ category: 'general',
15
+ displayName: 'Alternate Confirm',
16
+ description: 'Alternative confirm button (Space also works as Enter)',
17
+ defaultKey: ' ',
18
+ allowRebind: true,
19
+ },
20
+ {
21
+ action: 'cancel',
22
+ category: 'general',
23
+ displayName: 'Cancel / Back',
24
+ description: 'Cancel action or close dialog',
25
+ defaultKey: 'Escape',
26
+ allowRebind: true,
27
+ },
28
+ {
29
+ action: 'pause',
30
+ category: 'general',
31
+ displayName: 'Pause/Menu',
32
+ description: 'Open pause menu or settings (not rebindable)',
33
+ defaultKey: 'Escape',
34
+ allowRebind: false,
35
+ },
36
+ // Navigation
37
+ {
38
+ action: 'moveUp',
39
+ category: 'navigation',
40
+ displayName: 'Navigate Up',
41
+ description: 'Move selection up or scroll up',
42
+ defaultKey: 'ArrowUp',
43
+ allowRebind: true,
44
+ },
45
+ {
46
+ action: 'moveDown',
47
+ category: 'navigation',
48
+ displayName: 'Navigate Down',
49
+ description: 'Move selection down or scroll down',
50
+ defaultKey: 'ArrowDown',
51
+ allowRebind: true,
52
+ },
53
+ {
54
+ action: 'moveLeft',
55
+ category: 'navigation',
56
+ displayName: 'Navigate Left',
57
+ description: 'Move selection left or previous tab',
58
+ defaultKey: 'ArrowLeft',
59
+ allowRebind: true,
60
+ },
61
+ {
62
+ action: 'moveRight',
63
+ category: 'navigation',
64
+ displayName: 'Navigate Right',
65
+ description: 'Move selection right or next tab',
66
+ defaultKey: 'ArrowRight',
67
+ allowRebind: true,
68
+ },
69
+ // UI Shortcuts
70
+ {
71
+ action: 'openInventory',
72
+ category: 'ui',
73
+ displayName: 'Open Inventory',
74
+ description: 'Open the inventory panel',
75
+ defaultKey: 'i',
76
+ allowRebind: true,
77
+ },
78
+ {
79
+ action: 'openQuests',
80
+ category: 'ui',
81
+ displayName: 'Open Quests',
82
+ description: 'Open the quests panel',
83
+ defaultKey: 'q',
84
+ allowRebind: true,
85
+ },
86
+ {
87
+ action: 'openCharacterStats',
88
+ category: 'ui',
89
+ displayName: 'Open Character Stats',
90
+ description: 'Open the character statistics panel',
91
+ defaultKey: 'c',
92
+ allowRebind: true,
93
+ },
94
+ {
95
+ action: 'openTechniques',
96
+ category: 'ui',
97
+ displayName: 'Open Techniques',
98
+ description: 'Open the techniques/stances panel',
99
+ defaultKey: 's',
100
+ allowRebind: true,
101
+ },
102
+ {
103
+ action: 'openCalendar',
104
+ category: 'ui',
105
+ displayName: 'Open Calendar',
106
+ description: 'Open the calendar panel',
107
+ defaultKey: 'm',
108
+ allowRebind: true,
109
+ },
110
+ // World
111
+ {
112
+ action: 'openWorldMap',
113
+ category: 'world',
114
+ displayName: 'Open World Map',
115
+ description: 'Open world map for travel from location screen',
116
+ defaultKey: 't',
117
+ allowRebind: true,
118
+ },
119
+ // Combat Actions
120
+ {
121
+ action: 'combatSelectStance0',
122
+ category: 'combat',
123
+ displayName: 'Select Stance 0',
124
+ description: 'Select stance at position 0 (current/repeat)',
125
+ defaultKey: '0',
126
+ allowRebind: true,
127
+ },
128
+ {
129
+ action: 'combatAutoBattle',
130
+ category: 'combat',
131
+ displayName: 'Toggle Auto Battle',
132
+ description: 'Enable or disable auto battle mode',
133
+ defaultKey: 'b',
134
+ allowRebind: true,
135
+ },
136
+ {
137
+ action: 'combatSelectStance1',
138
+ category: 'combat',
139
+ displayName: 'Select Stance 1',
140
+ description: 'Select first saved stance',
141
+ defaultKey: '1',
142
+ allowRebind: true,
143
+ },
144
+ {
145
+ action: 'combatSelectStance2',
146
+ category: 'combat',
147
+ displayName: 'Select Stance 2',
148
+ description: 'Select second saved stance',
149
+ defaultKey: '2',
150
+ allowRebind: true,
151
+ },
152
+ {
153
+ action: 'combatSelectStance3',
154
+ category: 'combat',
155
+ displayName: 'Select Stance 3',
156
+ description: 'Select third saved stance',
157
+ defaultKey: '3',
158
+ allowRebind: true,
159
+ },
160
+ {
161
+ action: 'combatSelectStance4',
162
+ category: 'combat',
163
+ displayName: 'Select Stance 4',
164
+ description: 'Select fourth saved stance',
165
+ defaultKey: '4',
166
+ allowRebind: true,
167
+ },
168
+ {
169
+ action: 'combatSelectStance5',
170
+ category: 'combat',
171
+ displayName: 'Select Stance 5',
172
+ description: 'Select fifth saved stance',
173
+ defaultKey: '5',
174
+ allowRebind: true,
175
+ },
176
+ {
177
+ action: 'combatSelectStance6',
178
+ category: 'combat',
179
+ displayName: 'Select Stance 6',
180
+ description: 'Select sixth saved stance',
181
+ defaultKey: '6',
182
+ allowRebind: true,
183
+ },
184
+ {
185
+ action: 'combatSelectStance7',
186
+ category: 'combat',
187
+ displayName: 'Select Stance 7',
188
+ description: 'Select seventh saved stance',
189
+ defaultKey: '7',
190
+ allowRebind: true,
191
+ },
192
+ {
193
+ action: 'combatSelectStance8',
194
+ category: 'combat',
195
+ displayName: 'Select Stance 8',
196
+ description: 'Select eighth saved stance',
197
+ defaultKey: '8',
198
+ allowRebind: true,
199
+ },
200
+ {
201
+ action: 'combatSelectStance9',
202
+ category: 'combat',
203
+ displayName: 'Select Stance 9',
204
+ description: 'Select ninth saved stance',
205
+ defaultKey: '9',
206
+ allowRebind: true,
207
+ },
208
+ {
209
+ action: 'combatToggleSpeed',
210
+ category: 'combat',
211
+ displayName: 'Toggle Combat Speed',
212
+ description: 'Toggle between Manual and Instant combat speed',
213
+ defaultKey: 'm',
214
+ allowRebind: true,
215
+ },
216
+ {
217
+ action: 'combatToggleLog',
218
+ category: 'combat',
219
+ displayName: 'Toggle Combat Log',
220
+ description: 'Show/hide the combat log',
221
+ defaultKey: 'l',
222
+ allowRebind: true,
223
+ },
224
+ {
225
+ action: 'combatShowStats',
226
+ category: 'combat',
227
+ displayName: 'Show Current Stats',
228
+ description: 'Show detailed combat statistics',
229
+ defaultKey: 's',
230
+ allowRebind: true,
231
+ },
232
+ // Crafting Actions (Number keys 1-9, then 0)
233
+ {
234
+ action: 'craftingAction1',
235
+ category: 'crafting',
236
+ displayName: 'Crafting Action 1',
237
+ description: 'Execute first crafting technique',
238
+ defaultKey: '1',
239
+ allowRebind: true,
240
+ },
241
+ {
242
+ action: 'craftingAction2',
243
+ category: 'crafting',
244
+ displayName: 'Crafting Action 2',
245
+ description: 'Execute second crafting technique',
246
+ defaultKey: '2',
247
+ allowRebind: true,
248
+ },
249
+ {
250
+ action: 'craftingAction3',
251
+ category: 'crafting',
252
+ displayName: 'Crafting Action 3',
253
+ description: 'Execute third crafting technique',
254
+ defaultKey: '3',
255
+ allowRebind: true,
256
+ },
257
+ {
258
+ action: 'craftingAction4',
259
+ category: 'crafting',
260
+ displayName: 'Crafting Action 4',
261
+ description: 'Execute fourth crafting technique',
262
+ defaultKey: '4',
263
+ allowRebind: true,
264
+ },
265
+ {
266
+ action: 'craftingAction5',
267
+ category: 'crafting',
268
+ displayName: 'Crafting Action 5',
269
+ description: 'Execute fifth crafting technique',
270
+ defaultKey: '5',
271
+ allowRebind: true,
272
+ },
273
+ {
274
+ action: 'craftingAction6',
275
+ category: 'crafting',
276
+ displayName: 'Crafting Action 6',
277
+ description: 'Execute sixth crafting technique',
278
+ defaultKey: '6',
279
+ allowRebind: true,
280
+ },
281
+ {
282
+ action: 'craftingAction7',
283
+ category: 'crafting',
284
+ displayName: 'Crafting Action 7',
285
+ description: 'Execute seventh crafting technique',
286
+ defaultKey: '7',
287
+ allowRebind: true,
288
+ },
289
+ {
290
+ action: 'craftingAction8',
291
+ category: 'crafting',
292
+ displayName: 'Crafting Action 8',
293
+ description: 'Execute eighth crafting technique',
294
+ defaultKey: '8',
295
+ allowRebind: true,
296
+ },
297
+ {
298
+ action: 'craftingAction9',
299
+ category: 'crafting',
300
+ displayName: 'Crafting Action 9',
301
+ description: 'Execute ninth crafting technique',
302
+ defaultKey: '9',
303
+ allowRebind: true,
304
+ },
305
+ {
306
+ action: 'craftingAction10',
307
+ category: 'crafting',
308
+ displayName: 'Crafting Action 10',
309
+ description: 'Execute tenth crafting technique',
310
+ defaultKey: '0',
311
+ allowRebind: true,
312
+ },
313
+ // Dialog Choices (Number keys 1-9)
314
+ {
315
+ action: 'dialogChoice1',
316
+ category: 'dialogs',
317
+ displayName: 'Dialog Choice 1',
318
+ description: 'Select first dialog option',
319
+ defaultKey: '1',
320
+ allowRebind: true,
321
+ },
322
+ {
323
+ action: 'dialogChoice2',
324
+ category: 'dialogs',
325
+ displayName: 'Dialog Choice 2',
326
+ description: 'Select second dialog option',
327
+ defaultKey: '2',
328
+ allowRebind: true,
329
+ },
330
+ {
331
+ action: 'dialogChoice3',
332
+ category: 'dialogs',
333
+ displayName: 'Dialog Choice 3',
334
+ description: 'Select third dialog option',
335
+ defaultKey: '3',
336
+ allowRebind: true,
337
+ },
338
+ {
339
+ action: 'dialogChoice4',
340
+ category: 'dialogs',
341
+ displayName: 'Dialog Choice 4',
342
+ description: 'Select fourth dialog option',
343
+ defaultKey: '4',
344
+ allowRebind: true,
345
+ },
346
+ {
347
+ action: 'dialogChoice5',
348
+ category: 'dialogs',
349
+ displayName: 'Dialog Choice 5',
350
+ description: 'Select fifth dialog option',
351
+ defaultKey: '5',
352
+ allowRebind: true,
353
+ },
354
+ {
355
+ action: 'dialogChoice6',
356
+ category: 'dialogs',
357
+ displayName: 'Dialog Choice 6',
358
+ description: 'Select sixth dialog option',
359
+ defaultKey: '6',
360
+ allowRebind: true,
361
+ },
362
+ {
363
+ action: 'dialogChoice7',
364
+ category: 'dialogs',
365
+ displayName: 'Dialog Choice 7',
366
+ description: 'Select seventh dialog option',
367
+ defaultKey: '7',
368
+ allowRebind: true,
369
+ },
370
+ {
371
+ action: 'dialogChoice8',
372
+ category: 'dialogs',
373
+ displayName: 'Dialog Choice 8',
374
+ description: 'Select eighth dialog option',
375
+ defaultKey: '8',
376
+ allowRebind: true,
377
+ },
378
+ {
379
+ action: 'dialogChoice9',
380
+ category: 'dialogs',
381
+ displayName: 'Dialog Choice 9',
382
+ description: 'Select ninth dialog option',
383
+ defaultKey: '9',
384
+ allowRebind: true,
385
+ },
386
+ // Gamepad (not rebindable as they map to physical buttons)
387
+ {
388
+ action: 'gamepadConfirm',
389
+ category: 'gamepad',
390
+ displayName: 'Gamepad A Button',
391
+ description: 'Gamepad confirmation button (maps to Enter)',
392
+ defaultKey: 'Enter',
393
+ allowRebind: false,
394
+ },
395
+ {
396
+ action: 'gamepadCancel',
397
+ category: 'gamepad',
398
+ displayName: 'Gamepad B Button',
399
+ description: 'Gamepad cancel button (maps to Escape)',
400
+ defaultKey: 'Escape',
401
+ allowRebind: false,
402
+ },
403
+ {
404
+ action: 'gamepadUp',
405
+ category: 'gamepad',
406
+ displayName: 'Gamepad D-Pad Up',
407
+ description: 'Gamepad up direction (maps to Arrow Up)',
408
+ defaultKey: 'ArrowUp',
409
+ allowRebind: false,
410
+ },
411
+ {
412
+ action: 'gamepadDown',
413
+ category: 'gamepad',
414
+ displayName: 'Gamepad D-Pad Down',
415
+ description: 'Gamepad down direction (maps to Arrow Down)',
416
+ defaultKey: 'ArrowDown',
417
+ allowRebind: false,
418
+ },
419
+ {
420
+ action: 'gamepadLeft',
421
+ category: 'gamepad',
422
+ displayName: 'Gamepad D-Pad Left',
423
+ description: 'Gamepad left direction (maps to Arrow Left)',
424
+ defaultKey: 'ArrowLeft',
425
+ allowRebind: false,
426
+ },
427
+ {
428
+ action: 'gamepadRight',
429
+ category: 'gamepad',
430
+ displayName: 'Gamepad D-Pad Right',
431
+ description: 'Gamepad right direction (maps to Arrow Right)',
432
+ defaultKey: 'ArrowRight',
433
+ allowRebind: false,
434
+ },
435
+ ];
436
+ // Category display names and descriptions
437
+ export const keybindingCategoryInfo = {
438
+ general: {
439
+ name: 'General',
440
+ description: 'Common actions used throughout the game',
441
+ },
442
+ navigation: {
443
+ name: 'Navigation',
444
+ description: 'Movement and menu navigation controls',
445
+ },
446
+ ui: {
447
+ name: 'UI Shortcuts',
448
+ description: 'Quick access to game panels and menus',
449
+ },
450
+ world: {
451
+ name: 'World',
452
+ description: 'World map and location actions',
453
+ },
454
+ combat: {
455
+ name: 'Combat',
456
+ description: 'Combat-specific actions including stance selection',
457
+ },
458
+ crafting: {
459
+ name: 'Crafting',
460
+ description: 'Crafting technique hotkeys (visible on crafting screen)',
461
+ },
462
+ dialogs: {
463
+ name: 'Dialogs & Events',
464
+ description: 'Dialog choice hotkeys (visible on event screens)',
465
+ },
466
+ gamepad: {
467
+ name: 'Gamepad',
468
+ description: 'Gamepad button mappings (not rebindable)',
469
+ },
470
+ };
471
+ // Default keybindings
472
+ export const defaultKeybindings = Object.fromEntries(keybindingDefinitions.map((def) => [def.action, def.defaultKey]));
473
+ // Helper to get display name for a key
474
+ export function getKeyDisplayName(key) {
475
+ const keyDisplayNames = {
476
+ Enter: 'Enter',
477
+ Escape: 'Esc',
478
+ ' ': 'Space',
479
+ ArrowUp: '↑',
480
+ ArrowDown: '↓',
481
+ ArrowLeft: '←',
482
+ ArrowRight: '→',
483
+ Tab: 'Tab',
484
+ Shift: 'Shift',
485
+ Control: 'Ctrl',
486
+ Alt: 'Alt',
487
+ Backspace: 'Backspace',
488
+ Delete: 'Delete',
489
+ Home: 'Home',
490
+ End: 'End',
491
+ PageUp: 'PgUp',
492
+ PageDown: 'PgDn',
493
+ };
494
+ return keyDisplayNames[key] || (key === null || key === void 0 ? void 0 : key.toUpperCase());
495
+ }
496
+ // Validate if a key is allowed for binding
497
+ export function isKeyAllowed(key) {
498
+ const disallowedKeys = [
499
+ 'F5', // Refresh
500
+ 'F11', // Fullscreen
501
+ 'F12', // Dev tools
502
+ 'Meta', // Windows/Cmd key
503
+ ];
504
+ return !disallowedKeys.includes(key);
505
+ }
506
+ // Get all keybindings by category
507
+ export function getKeybindingsByCategory(category) {
508
+ return keybindingDefinitions.filter((def) => def.category === category);
509
+ }
package/dist/life.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ import { Buff } from './buff';
2
+ import { StoredStance, StoredStyle } from './entity';
3
+ import { Realm } from './realm';
4
+ import { PhysicalStatistic } from './stat';
5
+ import { Technique } from './technique';
6
+ export interface LifeForm {
7
+ name: string;
8
+ description: string;
9
+ portrait: string;
10
+ image: string;
11
+ realm: Realm;
12
+ baseStats: Record<PhysicalStatistic, number>;
13
+ buffs: Buff[];
14
+ techniques: Technique[];
15
+ evolutions: {
16
+ essenceCost: {
17
+ essence: string;
18
+ amount: number;
19
+ }[];
20
+ unlockCondition: {
21
+ hint: string;
22
+ isComplete: string;
23
+ };
24
+ nextForm: LifeForm;
25
+ }[];
26
+ }
27
+ export interface LifeFormEntity {
28
+ baseForm: string;
29
+ essences: string[];
30
+ stances: StoredStance[];
31
+ currentStyle?: StoredStyle;
32
+ storedStyles?: StoredStyle[];
33
+ qiDroplets?: number;
34
+ hp: number;
35
+ evolutionTracking: Record<string, number>;
36
+ }
package/dist/life.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -85,8 +85,8 @@ export interface CraftingMission {
85
85
  condition: string;
86
86
  }
87
87
  export declare const exploresPerUnlock = 3;
88
- export type BuildingType = 'cultivation' | 'manual' | 'crafting' | 'mission' | 'craftingHall' | 'healer' | 'market' | 'favourExchange' | 'vault' | 'custom' | 'herbField' | 'mine' | 'recipe' | 'requestBoard' | 'compendium' | 'mysticalRegion' | 'trainingGround' | 'library' | 'house' | 'altar' | 'research' | 'guild' | 'modBuilding';
89
- export type LocationBuilding = CultivationBuilding | ManualBuilding | CraftingBuilding | MissionBuilding | CraftingHallBuilding | HealerBuilding | MarketBuilding | VaultBuilding | FavourExchangeBuilding | CustomBuilding | HerbFieldBuilding | MineBuilding | RecipeLibraryBuilding | RequestBoardBuilding | CompendiumBuilding | MysticalRegionBuilding | TrainingGroundBuilding | LibraryBuilding | HouseBuilding | CompressionAltarBuilding | ResearchBuilding | GuildBuilding | ModBuilding;
88
+ export type BuildingType = 'cultivation' | 'manual' | 'crafting' | 'mission' | 'craftingHall' | 'healer' | 'market' | 'favourExchange' | 'vault' | 'custom' | 'herbField' | 'mine' | 'recipe' | 'requestBoard' | 'compendium' | 'mysticalRegion' | 'trainingGround' | 'library' | 'house' | 'altar' | 'research' | 'reforge' | 'guild' | 'modBuilding';
89
+ export type LocationBuilding = CultivationBuilding | ManualBuilding | CraftingBuilding | MissionBuilding | CraftingHallBuilding | HealerBuilding | MarketBuilding | VaultBuilding | FavourExchangeBuilding | CustomBuilding | HerbFieldBuilding | MineBuilding | RecipeLibraryBuilding | RequestBoardBuilding | CompendiumBuilding | MysticalRegionBuilding | TrainingGroundBuilding | LibraryBuilding | HouseBuilding | CompressionAltarBuilding | ResearchBuilding | ReforgeBuilding | GuildBuilding | ModBuilding;
90
90
  export type LocationBuildingState = MissionBuildingState | CraftingHallBuildingState | ShopBuildingState | RequestBoardBuildingState | HouseBuildingState | CompressionAltarBuildingState;
91
91
  interface BuildingBase {
92
92
  kind: BuildingType;
@@ -111,6 +111,9 @@ export interface CompressionAltarBuildingState {
111
111
  export interface ResearchBuilding extends BuildingBase {
112
112
  kind: 'research';
113
113
  }
114
+ export interface ReforgeBuilding extends BuildingBase {
115
+ kind: 'reforge';
116
+ }
114
117
  export interface ManualBuilding extends BuildingBase {
115
118
  kind: 'manual';
116
119
  }
package/dist/location.js CHANGED
@@ -21,6 +21,7 @@ export const buildingTypeToName = {
21
21
  house: '',
22
22
  altar: 'Compression Altar',
23
23
  research: 'Vault of Infinite Reflections',
24
+ reforge: `Infusion Workshop`,
24
25
  guild: '',
25
26
  modBuilding: '',
26
27
  };
@@ -8,7 +8,6 @@ import { CharacterState } from './character';
8
8
  import { QuestProgressState } from './quest';
9
9
  import { LocationBuildingState } from './location';
10
10
  import { Auction, Speech, AuctionItem } from './auction';
11
- import { Crop } from './herbField';
12
11
  import { MineTile, UncutStone, CuttingParticipant } from './mine';
13
12
  import { TournamentRound } from './tournament';
14
13
  import { IntimateStat, IntimateTechniqueType, IntimateTrait, IntimateResource, DualCultivationMessage } from './dualCultivation';
@@ -37,6 +36,7 @@ export interface InventoryItemState {
37
36
  stacks: number;
38
37
  enchantment?: EnchantmentDesc;
39
38
  qualityTier?: number;
39
+ hiddenPotential?: number;
40
40
  }
41
41
  export interface RecipeState {
42
42
  name: string;
@@ -109,21 +109,12 @@ export interface MonthState {
109
109
  craftskill: number;
110
110
  reputations: Record<string, number>;
111
111
  completedEvents: string[];
112
- field: {
113
- planted: string[];
114
- failedToPlant: string[];
115
- harvested: {
116
- item: string;
117
- stacks: number;
118
- }[];
119
- };
120
112
  analyticsTracking: {
121
113
  craftingActionsUsed: Record<string, number>;
122
114
  masteryUsed: Record<string, number>;
123
115
  stancesUsed: string[][];
124
116
  recipeSuccess: Record<'failed' | 'normal' | 'perfect' | 'sublime', number>;
125
117
  combat: Record<'victory' | 'defeat', number>;
126
- cropsPlanted: number;
127
118
  flaresSpent: number;
128
119
  schoolUsage?: Record<string, number>;
129
120
  techniqueUsage?: Record<string, number>;
@@ -176,15 +167,32 @@ export interface AuctionState {
176
167
  }
177
168
  export interface BreakthroughSliceState extends BreakthroughState {
178
169
  }
170
+ export interface CropReference {
171
+ itemName: string;
172
+ realm: Realm;
173
+ }
179
174
  export interface LocationHerbFieldState {
180
- soilCondition: Record<string, number>;
181
- currentCrop: Crop | undefined;
182
- currentGrowthDays: number;
183
- cropQueue: Crop[];
184
175
  formation?: string;
185
- harvest: {
186
- item: string;
187
- stacks: number;
176
+ upgradeLevel?: number;
177
+ cropGrid?: {
178
+ x: number;
179
+ y: number;
180
+ crop: {
181
+ cropRef: CropReference;
182
+ growthDays: number;
183
+ infusionCount: number;
184
+ isValid: boolean;
185
+ growthBoost?: number;
186
+ yieldBoost?: number;
187
+ } | undefined;
188
+ device?: {
189
+ item: ItemDesc;
190
+ daysSinceLastHarvest: number;
191
+ storage?: Array<{
192
+ name: string;
193
+ stacks: number;
194
+ }>;
195
+ };
188
196
  }[];
189
197
  }
190
198
  export interface HerbFieldState {
@@ -287,6 +295,16 @@ export interface NewGameState {
287
295
  surname: string;
288
296
  sex: Sex;
289
297
  imageIndex: number;
298
+ customImagePath?: string;
299
+ customImages?: {
300
+ idle?: string;
301
+ hit?: string;
302
+ support?: string;
303
+ defensive?: string;
304
+ utility?: string;
305
+ offensive?: string;
306
+ aggressive?: string;
307
+ };
290
308
  birthBackground: Background | undefined;
291
309
  childBackground: Background | undefined;
292
310
  teenBackground: Background | undefined;
package/dist/stat.d.ts CHANGED
@@ -3,7 +3,7 @@ import { TechniqueElement } from './element';
3
3
  export declare const physicalStatistics: readonly ["eyes", "meridians", "dantian", "muscles", "digestion", "flesh"];
4
4
  export declare const socialStatistics: readonly ["age", "lifespan", "charisma", "battlesense", "craftskill", "artefactslots", "talismanslots", "condenseEfficiency", "pillsPerRound"];
5
5
  export declare const craftingStatistics: readonly ["maxpool", "pool", "maxtoxicity", "toxicity", "resistance", "itemEffectiveness", "control", "intensity", "critchance", "critmultiplier", "pillsPerRound", "poolCostPercentage", "stabilityCostPercentage", "successChanceBonus"];
6
- export declare const combatStatistics: readonly ["maxhp", "hp", "maxbarrier", "barrier", "maxtoxicity", "toxicity", "resistance", "pillsPerRound", "itemEffectiveness", "power", "artefactpower", "critchance", "defense", "dr", "barrierMitigation", "lifesteal", "critdam", "fistBoost", "blossomBoost", "weaponBoost", "cloudBoost", "bloodBoost", "celestialBoost", "fistAffinity", "blossomAffinity", "weaponAffinity", "cloudAffinity", "bloodAffinity", "celestialAffinity", "noneAffinity", "qiDroplets", "fistDisabled", "bloodDisabled", "blossomDisabled", "cloudDisabled", "celestialDisabled", "weaponDisabled", "fistResistance", "blossomResistance", "weaponResistance", "cloudResistance", "bloodResistance", "celestialResistance"];
6
+ export declare const combatStatistics: readonly ["maxhp", "hp", "maxbarrier", "barrier", "maxtoxicity", "toxicity", "resistance", "pillsPerRound", "itemEffectiveness", "power", "artefactpower", "critchance", "defense", "dr", "barrierMitigation", "lifesteal", "critdam", "vulnerability", "fistBoost", "blossomBoost", "weaponBoost", "cloudBoost", "bloodBoost", "celestialBoost", "fistAffinity", "blossomAffinity", "weaponAffinity", "cloudAffinity", "bloodAffinity", "celestialAffinity", "noneAffinity", "qiDroplets", "fistDisabled", "bloodDisabled", "blossomDisabled", "cloudDisabled", "celestialDisabled", "weaponDisabled", "fistResistance", "blossomResistance", "weaponResistance", "cloudResistance", "bloodResistance", "celestialResistance"];
7
7
  export type PhysicalStatistic = (typeof physicalStatistics)[number];
8
8
  export type SocialStatistic = (typeof socialStatistics)[number];
9
9
  export type CraftingStatistic = (typeof craftingStatistics)[number];
package/dist/stat.js CHANGED
@@ -51,6 +51,7 @@ export const combatStatistics = [
51
51
  'barrierMitigation',
52
52
  'lifesteal',
53
53
  'critdam',
54
+ 'vulnerability',
54
55
  'fistBoost',
55
56
  'blossomBoost',
56
57
  'weaponBoost',
@@ -106,6 +107,7 @@ export const combatStatToName = {
106
107
  barrierMitigation: 'Barrier Effectiveness',
107
108
  lifesteal: 'Life Steal',
108
109
  critdam: 'Crit Damage',
110
+ vulnerability: 'Vulnerability',
109
111
  fistBoost: 'Fist Boost',
110
112
  blossomBoost: 'Blossom Boost',
111
113
  weaponBoost: 'Weapon Boost',
@@ -147,8 +149,9 @@ export const combatStatToDescription = {
147
149
  defense: 'Your resistance to damage.',
148
150
  dr: '',
149
151
  lifesteal: '',
150
- critchance: 'Your chance to get a critical effect, increasing the power of your techniques.',
152
+ critchance: 'Your chance to get a critical effect, increasing the power of your techniques. Crit chance over 100% enables additional crits.',
151
153
  critdam: '',
154
+ vulnerability: '',
152
155
  artefactpower: "The strength of your artefact's techniques and your Formation Parts.",
153
156
  fistBoost: '',
154
157
  blossomBoost: '',
@@ -199,7 +202,7 @@ export const craftingStatToName = {
199
202
  export const craftingStatToDescription = {
200
203
  maxtoxicity: 'The quantity of pills you can take before your body becomes unable to digest any more.',
201
204
  toxicity: '',
202
- critchance: 'Your chance to get a critical effect on increasing perfection, pool, or stability.',
205
+ critchance: 'Your chance to get a critical effect on increasing perfection or completion. Crit chance over 100% enables additional crits',
203
206
  maxpool: 'The amount of <b>Qi</b> you have available during crafting to spend on crafting actions.',
204
207
  pool: '',
205
208
  control: 'The <b>perfection</b> your refinement actions impart during crafting, making it easier to perfect a recipe.',
@@ -208,7 +211,7 @@ export const craftingStatToDescription = {
208
211
  pillsPerRound: '',
209
212
  resistance: 'Your resistance to the effects of pill toxicity, increasing the number of pills you can digest.',
210
213
  poolCostPercentage: '',
211
- critmultiplier: '',
214
+ critmultiplier: 'The effectiveness of your critical actions.',
212
215
  successChanceBonus: '',
213
216
  itemEffectiveness: 'The effectiveness of your pills and reagents.',
214
217
  };
@@ -4,6 +4,8 @@ import { TechniqueElement } from './element';
4
4
  import { Rarity } from './rarity';
5
5
  import { Realm } from './realm';
6
6
  import { Scaling } from './stat';
7
+ export declare const techniquePriorities: readonly ["", "Support", "Defensive", "Utility", "Aggressive", "Offensive"];
8
+ export type TechniquePriority = (typeof techniquePriorities)[number];
7
9
  export interface KnownTechniqueMastery {
8
10
  name: string;
9
11
  tier: Rarity;
@@ -127,6 +129,7 @@ interface CleanseToxicityTechniqueEffect extends BaseTechniqueEffect {
127
129
  }
128
130
  interface ModifyBuffGroupEffect extends BaseTechniqueEffect {
129
131
  kind: 'modifyBuffGroup';
132
+ onTarget?: boolean;
130
133
  group: string;
131
134
  amount: Scaling;
132
135
  }
package/dist/technique.js CHANGED
@@ -1,3 +1,11 @@
1
+ export const techniquePriorities = [
2
+ '',
3
+ 'Support',
4
+ 'Defensive',
5
+ 'Utility',
6
+ 'Aggressive',
7
+ 'Offensive',
8
+ ];
1
9
  export const stanceRestriction = ['opener', 'finisher'];
2
10
  export const stanceRestrictionToName = {
3
11
  opener: 'Opener',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "afnm-types",
3
- "version": "0.6.16",
3
+ "version": "0.6.20",
4
4
  "description": "Type definitions for Ascend From Nine Mountains",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",