afnm-types 0.6.29 → 0.6.31

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,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { Tutorial } from './tutorial';
2
3
  import { TriggeredEvent, GameEvent } from './event';
3
4
  import { ItemDesc } from './item';
@@ -19,7 +20,7 @@ export interface AlternativeStart {
19
20
  /**
20
21
  * Description shown in the selection UI explaining this start option
21
22
  */
22
- description: string;
23
+ description: Translatable;
23
24
  /**
24
25
  * The root event that plays when starting the game.
25
26
  * This replaces the default newGameEvent.
package/dist/auction.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { Item, ItemDesc } from './item';
2
3
  export interface Auction {
3
4
  characters: AuctionCharacterData[];
@@ -46,7 +47,7 @@ export interface AuctionCharacterData {
46
47
  speech?: Speech;
47
48
  }
48
49
  export interface Speech {
49
- text: string;
50
+ text: Translatable;
50
51
  id: number;
51
52
  persistent: boolean;
52
53
  }
@@ -59,7 +60,7 @@ export interface AuctionAbility {
59
60
  name: string;
60
61
  amount: number;
61
62
  };
62
- tooltip: string;
63
+ tooltip: Translatable;
63
64
  effects: AuctionAbilityEffect[];
64
65
  }
65
66
  export type AuctionAbilityEffect = DesireAbilityEffect | BuildResourceAbilityEffect | EliminateAbilityEffect;
@@ -82,7 +83,7 @@ export interface AuctionResource {
82
83
  name: string;
83
84
  icon: string;
84
85
  colour: string;
85
- tooltip: string;
86
+ tooltip: Translatable;
86
87
  bidMult?: number;
87
88
  degeneration?: 'bid' | 'item';
88
89
  }
@@ -1,9 +1,10 @@
1
+ import { Translatable } from './translatable';
1
2
  import { Destiny } from './destiny';
2
3
  import { Item } from './item';
3
4
  import { CombatStatistic, CraftingStatistic, PhysicalStatistic, Scaling, SocialStatistic } from './stat';
4
5
  export interface Background {
5
6
  name: string;
6
- description: string;
7
+ description: Translatable;
7
8
  physicalStats?: Partial<Record<PhysicalStatistic, number>>;
8
9
  socialStats?: Partial<Record<SocialStatistic, number>>;
9
10
  rawStats?: Partial<Record<CombatStatistic | CraftingStatistic, Scaling>>;
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { ReactNode } from 'react';
2
3
  import { CombatEntity, CraftingEntity, PlayerEntity, StoredStance, StoredStyle } from './entity';
3
4
  import { ItemDesc } from './item';
@@ -12,6 +13,34 @@ export interface Position {
12
13
  export interface PositionAndRotation extends Position {
13
14
  rotation: number;
14
15
  }
16
+ /** Tracks which of the 6 core essences have been placed in the gate */
17
+ export interface EssenceGate {
18
+ breath: boolean;
19
+ pulse: boolean;
20
+ echo: boolean;
21
+ growth: boolean;
22
+ marrow: boolean;
23
+ scar: boolean;
24
+ }
25
+ /** A lifeform stored in the player's soul realm */
26
+ export interface StoredLifeform {
27
+ id: string;
28
+ baseForm: string;
29
+ currentForm: string;
30
+ slottedEssences: string[];
31
+ stances: StoredStance[];
32
+ currentStyle?: StoredStyle;
33
+ storedStyles?: StoredStyle[];
34
+ evolutionPath: string[];
35
+ }
36
+ /** State for the Life Flourishing breakthrough system */
37
+ export interface LifeFlourishingState {
38
+ essenceGate: EssenceGate;
39
+ storedLifeforms: StoredLifeform[];
40
+ manifestedLifeformId?: string;
41
+ fightsInstead?: boolean;
42
+ creatingNewLifeform?: boolean;
43
+ }
15
44
  export interface BreakthroughState {
16
45
  mundane?: {
17
46
  pill?: string;
@@ -45,16 +74,7 @@ export interface BreakthroughState {
45
74
  }[];
46
75
  tilePool?: number;
47
76
  };
48
- lifeFlourishing?: {
49
- slottedEssences: string[];
50
- selectedLifeform?: string;
51
- fightsInstead?: boolean;
52
- lifeformEntity?: {
53
- stances: StoredStance[];
54
- currentStyle?: StoredStyle;
55
- storedStyles?: StoredStyle[];
56
- };
57
- };
77
+ lifeFlourishing?: LifeFlourishingState;
58
78
  previous: Partial<{
59
79
  [key in Realm]: BreakthroughBase;
60
80
  }>;
@@ -66,7 +86,7 @@ export interface BreakthroughState {
66
86
  }
67
87
  export interface BreakthroughBase {
68
88
  name: string;
69
- description: string;
89
+ description: Translatable;
70
90
  physicalStats: Partial<{
71
91
  [key in PhysicalStatistic]: number;
72
92
  }>;
package/dist/buff.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { TechniqueElement } from './element';
2
3
  import { CombatStatistic, Scaling } from './stat';
3
4
  import { DamageType } from './DamageType';
@@ -42,12 +43,12 @@ export interface Buff {
42
43
  colour?: string;
43
44
  canStack: boolean;
44
45
  effectHint?: string;
45
- tooltip?: string;
46
- additionalTooltip?: string;
46
+ tooltip?: Translatable;
47
+ additionalTooltip?: Translatable;
47
48
  flag?: string;
48
49
  condition?: TechniqueCondition;
49
50
  removeOnConditionFailed?: boolean;
50
- statsTooltip?: string;
51
+ statsTooltip?: Translatable;
51
52
  stats: Partial<{
52
53
  [key in CombatStatistic]: Scaling;
53
54
  }> | undefined;
@@ -92,6 +93,27 @@ export interface Buff {
92
93
  damageModifier: DamageModifier;
93
94
  effects?: BuffEffect[];
94
95
  }[];
96
+ /** Amplifies outgoing damage/barrier/heal effects. Runs before the effect is applied. */
97
+ techniqueAmplifierEffects?: {
98
+ trigger?: TechniqueCondition;
99
+ amplifier: {
100
+ kind: 'multiply';
101
+ value: number;
102
+ };
103
+ effects?: BuffEffect[];
104
+ appliesTo: ('damage' | 'barrier' | 'heal')[];
105
+ }[];
106
+ /** Amplifies buff creation. Modifies stack count when matching buffs are created on self. */
107
+ buffAmplifierEffects?: {
108
+ trigger?: TechniqueCondition;
109
+ /** Matches buffs by name, buffType, or flag */
110
+ target: string;
111
+ modifier: {
112
+ kind: 'add' | 'multiply';
113
+ value: number;
114
+ };
115
+ effects?: BuffEffect[];
116
+ }[];
95
117
  priority?: number;
96
118
  afterTechnique?: boolean;
97
119
  combatImage?: BuffCombatImage;
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { SvgIconTypeMap } from '@mui/material';
2
3
  import { OverridableComponent } from '@mui/material/OverridableComponent';
3
4
  import { Buff } from './buff';
@@ -189,7 +190,7 @@ export interface AidBreakthroughCharacterInteraction extends BaseCharacterIntera
189
190
  export interface CustomCharacterInteractionBlock {
190
191
  condition: string;
191
192
  name: string;
192
- tooltip: string;
193
+ tooltip: Translatable;
193
194
  icon: OverridableComponent<SvgIconTypeMap<{}, 'svg'>>;
194
195
  interaction: CustomCharacterInteraction;
195
196
  cooldown?: number;
@@ -254,17 +255,17 @@ export interface CharacterRelationshipDefinition {
254
255
  requiredApproval: number;
255
256
  relationshipCategory: CharacterRelationship;
256
257
  name: string;
257
- tooltip: string;
258
+ tooltip: Translatable;
258
259
  followCharacter?: FollowCharacterDefinition;
259
260
  dualCultivation?: DualCultivationDefinition;
260
261
  progressionEvent: {
261
262
  name: string;
262
- tooltip: string;
263
+ tooltip: Translatable;
263
264
  event: EventStep[];
264
265
  locationOverride?: string;
265
266
  requirement?: {
266
267
  condition: string;
267
- tooltip: string;
268
+ tooltip: Translatable;
268
269
  };
269
270
  };
270
271
  }
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { ReactNode } from 'react';
2
3
  import { SvgIconTypeMap } from '@mui/material';
3
4
  import { OverridableComponent } from '@mui/material/OverridableComponent';
@@ -18,14 +19,14 @@ export interface RecipeConditionEffect {
18
19
  name: string;
19
20
  colour: string;
20
21
  conditionEffects: Record<CraftingCondition, {
21
- tooltip: string;
22
+ tooltip: Translatable;
22
23
  effects: CraftingConditionEffect[];
23
24
  }>;
24
25
  }
25
26
  export type RecipeHarmonyType = 'forge' | 'alchemical' | 'inscription' | 'resonance';
26
27
  export interface HarmonyTypeConfig {
27
28
  name: string;
28
- description: string;
29
+ description: Translatable;
29
30
  processEffect: (harmonyData: HarmonyData, technique: CraftingTechnique, progressState: ProgressState, entity: CraftingEntity, state: CraftingState) => void;
30
31
  initEffect: (harmonyData: HarmonyData, entity: CraftingEntity) => void;
31
32
  renderComponent: (harmonyData: HarmonyData) => ReactNode;
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { CraftingBuff, CraftingTechniqueCondition } from './craftingBuff';
2
3
  import { Rarity } from './rarity';
3
4
  import { Realm } from './realm';
@@ -116,7 +117,7 @@ export interface CraftingRecipeStats {
116
117
  export type CraftingTechniqueMastery = ControlMastery | IntensityMastery | CritChanceTechniqueMastery | CritMultiplierTechniqueMastery | EffectTechniqueMastery | UpgradeCraftingTechniqueMastery | PoolCostMastery | StabilityCostMastery | SuccessChanceMastery;
117
118
  interface BaseCraftingTechniqueMastery {
118
119
  condition?: CraftingTechniqueCondition;
119
- tooltip?: string;
120
+ tooltip?: Translatable;
120
121
  rarity?: Rarity;
121
122
  }
122
123
  interface ControlMastery extends BaseCraftingTechniqueMastery {
@@ -153,7 +154,7 @@ export interface SuccessChanceMastery extends BaseCraftingTechniqueMastery {
153
154
  }
154
155
  export interface UpgradeCraftingTechniqueMastery extends BaseCraftingTechniqueMastery {
155
156
  kind: 'upgrade';
156
- tooltip: string;
157
+ tooltip: Translatable;
157
158
  upgradeKey: string;
158
159
  change: number;
159
160
  shouldMultiply?: boolean;
package/dist/destiny.d.ts CHANGED
@@ -1,7 +1,8 @@
1
+ import { Translatable } from './translatable';
1
2
  import { CombatStatistic, CraftingStatistic, Scaling } from './stat';
2
3
  export interface Destiny {
3
4
  name: string;
4
- description: string;
5
+ description: Translatable;
5
6
  combatStats?: Partial<{
6
7
  [key in CombatStatistic]: Scaling;
7
8
  }>;
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  declare const intimateStats: readonly ["satisfaction", "energy", "painThreshold"];
2
3
  export type IntimateStat = (typeof intimateStats)[number];
3
4
  declare const intimateResources: readonly ["pain", "harmony", "excitement", "rhythm"];
@@ -6,7 +7,7 @@ declare const intimateTechniqueTypes: string[];
6
7
  export type IntimateTechniqueType = (typeof intimateTechniqueTypes)[number];
7
8
  export type IntimateTrait = {
8
9
  name: string;
9
- description: string;
10
+ description: Translatable;
10
11
  stats: Partial<Record<IntimateStat, number>>;
11
12
  typeMultiplier: Partial<Record<IntimateTechniqueType, number>>;
12
13
  };
@@ -34,7 +35,7 @@ interface ResourceEffect {
34
35
  }
35
36
  export interface DualCultivationMessage {
36
37
  id: number;
37
- text: string;
38
+ text: Translatable;
38
39
  bindPoint: 'energy' | 'satisfaction' | 'resource' | 'player' | 'partner';
39
40
  color: string;
40
41
  position?: {
package/dist/entity.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { SoundEffectName } from './audio';
2
3
  import { Buff } from './buff';
3
4
  import { CraftingBuff } from './craftingBuff';
@@ -13,6 +14,7 @@ export interface CombatEffectTracking {
13
14
  damage: number;
14
15
  healing: number;
15
16
  barrier: number;
17
+ damageTaken: number;
16
18
  }
17
19
  export declare const entityTypes: readonly ["Player", "Lifeform", "Enemy"];
18
20
  export type EntityType = (typeof entityTypes)[number];
@@ -20,6 +22,7 @@ export declare const sexes: readonly ["male", "female"];
20
22
  export type Sex = (typeof sexes)[number];
21
23
  export interface PlayerEntity {
22
24
  imageIndex: number;
25
+ originalImageIndex?: number;
23
26
  customImagePath?: string;
24
27
  customImages?: {
25
28
  idle?: string;
@@ -70,6 +73,7 @@ export interface PlayerEntity {
70
73
  background: string[];
71
74
  monthBuffs?: Buff[];
72
75
  injured?: boolean;
76
+ party?: PartyMemberConfig[];
73
77
  }
74
78
  export type EnemyDifficulty = 'veryeasy' | 'easy' | 'mediumEasy' | 'medium' | 'medium+' | 'mediumhard' | 'hard' | 'hard+' | 'veryhard' | 'veryhard+' | 'veryhard++' | 'veryhard+++' | 'veryhard++++';
75
79
  export type BattleLength = 'halfround' | '1round' | 'veryshort' | 'short' | 'medium' | 'long' | 'verylong' | 'verylong+' | 'verylong++' | 'verylong+++' | 'verylong++++';
@@ -168,10 +172,13 @@ export interface EnemyEntity {
168
172
  };
169
173
  preconfiguredCombatEntity?: CombatEntity;
170
174
  phases?: EnemyEntity[];
175
+ party?: PartyMemberConfig[];
176
+ preservePartyMembers?: boolean;
171
177
  }
178
+ export type PartyMemberConfig = EnemyEntity;
172
179
  export interface CombatMessage {
173
180
  id: number;
174
- text: string;
181
+ text: Translatable;
175
182
  bindPoint: 'hp' | 'buff' | 'technique';
176
183
  color: string;
177
184
  position?: {
@@ -204,7 +211,7 @@ export interface CraftingEntity {
204
211
  }
205
212
  export interface CraftingMessage {
206
213
  id: number;
207
- text: string;
214
+ text: Translatable;
208
215
  bindPoint: 'pool' | 'stability' | 'perfection' | 'completion' | 'buff' | 'technique';
209
216
  color: string;
210
217
  position?: {
@@ -219,6 +226,7 @@ export interface CombatArtefact extends ArtefactItem {
219
226
  }
220
227
  export interface CombatEntity {
221
228
  entityType: EntityType;
229
+ name?: string;
222
230
  image: string;
223
231
  supportImage?: {
224
232
  image: string;
@@ -269,9 +277,13 @@ export interface CombatEntity {
269
277
  };
270
278
  };
271
279
  realm: Realm;
280
+ realmProgress: RealmProgress;
272
281
  stats: CombatStatsMap;
273
282
  stance: Stance;
283
+ stances?: Stance[];
274
284
  stanceRotationIndex: number;
285
+ stanceRotation: StanceRule[];
286
+ rotationOverrides?: StanceRule[];
275
287
  usedOverrides: boolean[];
276
288
  usedPills: boolean[];
277
289
  defenseFactor: number;
@@ -288,6 +300,9 @@ export interface CombatEntity {
288
300
  };
289
301
  disableBreathing?: boolean;
290
302
  effectTracking: Record<string, CombatEffectTracking>;
303
+ party?: CombatEntity[];
304
+ isPartyMember?: boolean;
305
+ partyMemberIndex?: number;
291
306
  }
292
307
  export type StanceRule = SingleStance | RandomStance;
293
308
  export interface SingleStance {
package/dist/event.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { GameScreen } from './GameScreen';
2
3
  import { MusicName, SoundEffectName } from './audio';
3
4
  import { Buff } from './buff';
@@ -34,14 +35,14 @@ export type EventStep = TextStep | SpeechStep | CombatStep | CraftingStep | Choi
34
35
  export interface TextStep {
35
36
  kind: 'text';
36
37
  condition?: string;
37
- text: string;
38
+ text: Translatable;
38
39
  sfx?: SoundEffectName;
39
40
  }
40
41
  export interface SpeechStep {
41
42
  kind: 'speech';
42
43
  condition?: string;
43
44
  character: string;
44
- text: string;
45
+ text: Translatable;
45
46
  }
46
47
  export interface CombatStep {
47
48
  kind: 'combat';
@@ -75,7 +76,7 @@ export interface ChoiceStep {
75
76
  choices: ChoiceStepChoice[];
76
77
  }
77
78
  export interface ChoiceStepChoice {
78
- text: string;
79
+ text: Translatable;
79
80
  showCondition?: string;
80
81
  condition?: EventChoiceCondition;
81
82
  hideIfDisabled?: boolean;
@@ -483,7 +484,7 @@ export interface StoneCuttingStep {
483
484
  export interface GiveItemStep {
484
485
  kind: 'giveItem';
485
486
  condition?: string;
486
- description: string;
487
+ description: Translatable;
487
488
  itemNames: string[];
488
489
  branches: {
489
490
  item: string;
package/dist/guild.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { SvgIconTypeMap } from '@mui/material';
2
3
  import { OverridableComponent } from '@mui/material/OverridableComponent';
3
4
  import { EventStep } from './event';
@@ -9,7 +10,7 @@ export interface GuildMission {
9
10
  }
10
11
  export interface Guild {
11
12
  name: string;
12
- description: string;
13
+ description: Translatable;
13
14
  icon: string;
14
15
  image: string;
15
16
  backgroundLocation: string;
package/dist/house.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { SvgIconTypeMap } from '@mui/material';
2
3
  import { OverridableComponent } from '@mui/material/OverridableComponent';
3
4
  import { ScreenEffectType } from './ScreenEffectType';
@@ -8,7 +9,7 @@ import { Rarity } from './rarity';
8
9
  import { Realm } from './realm';
9
10
  export interface House {
10
11
  name: string;
11
- description: string;
12
+ description: Translatable;
12
13
  background: string;
13
14
  screenEffect: ScreenEffectType;
14
15
  transportSeal: TransportSealItem;
@@ -27,7 +28,7 @@ export interface RoomDef {
27
28
  export type Room = BuffRoom | CultivationRoom | CraftingRoom | CompendiumRoom | HealerRoom | TeleportRoom;
28
29
  interface RoomBase {
29
30
  name: string;
30
- description: string;
31
+ description: Translatable;
31
32
  realm: Realm | 'any';
32
33
  rarity: Rarity;
33
34
  icon: OverridableComponent<SvgIconTypeMap<{}, 'svg'>>;
package/dist/item.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { Buff } from './buff';
2
3
  import { CraftingBuff } from './craftingBuff';
3
4
  import { CraftingTechniqueEffect } from './craftingTechnique';
@@ -22,7 +23,7 @@ export type Item = TechniqueItem | TechniqueCrystalItem | TechniqueShardItem | T
22
23
  interface ItemBase {
23
24
  kind: ItemKind;
24
25
  name: string;
25
- description: string;
26
+ description: Translatable;
26
27
  icon: string;
27
28
  stacks: number;
28
29
  rarity: Rarity;
@@ -410,7 +411,7 @@ export interface PillarShardVariant {
410
411
  }
411
412
  export interface PillarShardItem extends ItemBase {
412
413
  kind: 'pillar_shard';
413
- tooltip: string;
414
+ tooltip: Translatable;
414
415
  maxInstances?: number;
415
416
  variants?: PillarShardVariant[];
416
417
  stability?: number;
@@ -28,7 +28,7 @@ export const keybindingDefinitions = [
28
28
  {
29
29
  action: 'pause',
30
30
  category: 'general',
31
- displayName: 'Pause/Menu',
31
+ displayName: 'Pause / Menu',
32
32
  description: 'Open pause menu or settings (not rebindable)',
33
33
  defaultKey: 'Escape',
34
34
  allowRebind: false,
package/dist/life.d.ts CHANGED
@@ -1,14 +1,11 @@
1
1
  import { Buff } from './buff';
2
2
  import { StoredStance, StoredStyle } from './entity';
3
3
  import { Realm } from './realm';
4
- import { PhysicalStatistic } from './stat';
5
4
  import { Technique } from './technique';
6
5
  export interface LifeForm {
7
6
  name: string;
8
- description: string;
9
7
  image: string;
10
8
  realm: Realm;
11
- baseStats: Record<PhysicalStatistic, number>;
12
9
  buffs: Buff[];
13
10
  techniques: Technique[];
14
11
  }
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { ScreenEffectType } from './ScreenEffectType';
2
3
  import { EventStep } from './event';
3
4
  import { Rarity } from './rarity';
@@ -11,7 +12,7 @@ import { AmbienceName, MusicName } from './audio';
11
12
  export interface GameLocation {
12
13
  name: string;
13
14
  displayName?: string;
14
- description: string;
15
+ description: Translatable;
15
16
  image: string;
16
17
  icon: string;
17
18
  screenEffect: ScreenEffectType;
package/dist/mine.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { EventStep } from './event';
2
3
  import { ItemDesc } from './item';
3
4
  import { Rarity } from './rarity';
@@ -40,7 +41,7 @@ export type MineChamber = OreChamber | EventChamber | RandomDropChamber | Releas
40
41
  interface BaseChamber {
41
42
  icon: string;
42
43
  name: string;
43
- description: string;
44
+ description: Translatable;
44
45
  rarity: Rarity;
45
46
  condition: string;
46
47
  isUnique?: boolean;
package/dist/quest.d.ts CHANGED
@@ -1,8 +1,9 @@
1
+ import { Translatable } from './translatable';
1
2
  import { EventStep, GameEvent } from './event';
2
3
  import { ItemDesc } from './item';
3
4
  export interface Quest {
4
5
  name: string;
5
- description: string;
6
+ description: Translatable;
6
7
  category: 'main' | 'side' | 'missionHall' | 'craftingHall' | 'requestBoard' | 'guild';
7
8
  guild?: string;
8
9
  steps: QuestStep[];
@@ -45,7 +46,7 @@ interface GuildApprovalQuestReward {
45
46
  }
46
47
  export type QuestStep = EventQuestStep | ConditionQuestStep | CollectQuestStep | MissionHallQuestStep | FlagValueQuestStep | SpeakToCharacterQuestStep | KillQuestStep | WaitQuestStep | RaidQuestStep;
47
48
  interface QuestStepBase {
48
- hint: string;
49
+ hint: Translatable;
49
50
  }
50
51
  interface EventQuestStep extends QuestStepBase {
51
52
  kind: 'event';
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  export interface SimpleGameEvent {
2
3
  location: string;
3
4
  steps: SimpleEventStep[];
@@ -5,19 +6,19 @@ export interface SimpleGameEvent {
5
6
  export type SimpleEventStep = TextStep | SpeechStep | ChoiceStep;
6
7
  interface TextStep {
7
8
  kind: 'text';
8
- text: string;
9
+ text: Translatable;
9
10
  }
10
11
  interface SpeechStep {
11
12
  kind: 'speech';
12
13
  character: string;
13
- text: string;
14
+ text: Translatable;
14
15
  }
15
16
  interface ChoiceStep {
16
17
  kind: `choice`;
17
18
  choices: ChoiceStepChoice[];
18
19
  }
19
20
  export interface ChoiceStepChoice {
20
- text: string;
21
+ text: Translatable;
21
22
  children: SimpleEventStep[];
22
23
  }
23
24
  export {};
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", "critmultiplier", "vulnerability", "weakness", "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", "damageBoost", "healingBoost", "barrierBoost", "overheal"];
6
+ export declare const combatStatistics: readonly ["maxhp", "hp", "maxbarrier", "barrier", "maxtoxicity", "toxicity", "resistance", "pillsPerRound", "itemEffectiveness", "power", "artefactpower", "critchance", "defense", "protection", "dr", "barrierMitigation", "lifesteal", "critmultiplier", "vulnerability", "weakness", "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", "damageBoost", "healingBoost", "barrierBoost", "overheal", "barrierBleed"];
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
@@ -47,6 +47,7 @@ export const combatStatistics = [
47
47
  'artefactpower',
48
48
  'critchance',
49
49
  'defense',
50
+ 'protection',
50
51
  'dr',
51
52
  'barrierMitigation',
52
53
  'lifesteal',
@@ -83,6 +84,7 @@ export const combatStatistics = [
83
84
  'healingBoost',
84
85
  'barrierBoost',
85
86
  'overheal',
87
+ 'barrierBleed',
86
88
  ];
87
89
  export const baseStatNumber = 10;
88
90
  export const expectedHpPerFlesh = 1000;
@@ -108,6 +110,7 @@ export const combatStatToName = {
108
110
  artefactpower: 'Artefact Power',
109
111
  critchance: 'Crit Chance',
110
112
  defense: 'Defense',
113
+ protection: 'Protection',
111
114
  dr: 'Damage Resistance',
112
115
  barrierMitigation: 'Barrier Effectiveness',
113
116
  lifesteal: 'Life Steal',
@@ -146,6 +149,7 @@ export const combatStatToName = {
146
149
  healingBoost: 'Healing Boost',
147
150
  barrierBoost: 'Barrier Boost',
148
151
  overheal: 'Overheal',
152
+ barrierBleed: 'Barrier Bleed',
149
153
  };
150
154
  export const combatStatToDescription = {
151
155
  maxhp: 'The amount of damage you can take before you are unable to continue.',
@@ -156,7 +160,8 @@ export const combatStatToDescription = {
156
160
  resistance: 'Your resistance to the effects of pill toxicity, increasing the number of pills you can digest.',
157
161
  toxicity: '',
158
162
  power: 'The strength of your techniques. This affects damage dealt, healing, barrier gained, and the strength of your buffs and debuffs.',
159
- defense: 'Your resistance to damage.',
163
+ defense: 'Your base resistance to damage.',
164
+ protection: '',
160
165
  dr: '',
161
166
  lifesteal: '',
162
167
  critchance: 'Your chance to get a critical effect on damage, healing, and barrier. Crit chance over 100% converts to bonus crit damage at a 1:3 ratio.',
@@ -197,6 +202,7 @@ export const combatStatToDescription = {
197
202
  healingBoost: '',
198
203
  barrierBoost: '',
199
204
  overheal: '',
205
+ barrierBleed: '',
200
206
  };
201
207
  // Uncommon stats that need auxiliary tooltips when they appear on buffs
202
208
  // These descriptions only show as aux tooltips in buff tooltips, not in the stats dialog
@@ -205,6 +211,10 @@ export const uncommonStatTooltips = {
205
211
  healingBoost: '<n>Healing Boost</n> increases all healing received by a percentage.',
206
212
  barrierBoost: '<n>Barrier Boost</n> increases all barrier gained by a percentage.',
207
213
  overheal: '<n>Overheal</n> converts a percentage of healing beyond your maximum health into barrier.',
214
+ protection: '<n>Protection</n> reduces damage taken to your health. Does not affect damage taken to your barrier.',
215
+ weakness: '<n>Weakness</n> reduces your power.',
216
+ vulnerability: '<n>Vulnerability</n> increases damage taken to your <n>health</n>. Does not affect damage taken to your barrier.',
217
+ barrierBleed: '<n>Barrier Bleed</n> causes a percentage of your damage to bypass the enemy barrier and strike their health directly.',
208
218
  };
209
219
  export const craftingStatToName = {
210
220
  maxpool: 'Max Qi Pool',
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  import { Buff, TechniqueCondition } from './buff';
2
3
  import { DamageType } from './DamageType';
3
4
  import { TechniqueElement } from './element';
@@ -143,7 +144,7 @@ interface TriggerEffect extends BaseTechniqueEffect {
143
144
  export type TechniqueMastery = PowerTechniqueMastery | EffectTechniqueMastery | CritChanceTechniqueMastery | CritMultiplierTechniqueMastery | UpgradeTechniqueMastery;
144
145
  interface BaseTechniqueMastery {
145
146
  condition?: TechniqueCondition;
146
- tooltip?: string;
147
+ tooltip?: Translatable;
147
148
  rarity?: Rarity;
148
149
  }
149
150
  interface PowerTechniqueMastery extends BaseTechniqueMastery {
@@ -164,7 +165,7 @@ interface EffectTechniqueMastery extends BaseTechniqueMastery {
164
165
  }
165
166
  export interface UpgradeTechniqueMastery extends BaseTechniqueMastery {
166
167
  kind: 'upgrade';
167
- tooltip: string;
168
+ tooltip: Translatable;
168
169
  upgradeKey: string;
169
170
  change: number;
170
171
  shouldMultiply?: boolean;
@@ -1,8 +1,9 @@
1
+ import { Translatable } from './translatable';
1
2
  import { EnemyEntity, Realm, RealmProgress } from '.';
2
3
  export interface PuppetType {
3
4
  id: string;
4
5
  name: string;
5
- description: string;
6
+ description: Translatable;
6
7
  image: string;
7
8
  baseMultiplier: number;
8
9
  multiplierGrowth: number;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * A deferred translation object. Instead of calling t() immediately,
3
+ * store the key and variables to be resolved at render time.
4
+ * This ensures language changes take effect without reload.
5
+ */
6
+ export interface TranslatableString {
7
+ readonly _translatable: true;
8
+ readonly key: string;
9
+ readonly variables?: Record<string, string | number>;
10
+ }
11
+ /**
12
+ * A deferred plural translation object. Stores both singular and plural keys
13
+ * to be resolved at render time based on a count value.
14
+ */
15
+ export interface TranslatablePlural {
16
+ readonly _translatable: true;
17
+ readonly _plural: true;
18
+ readonly countVar: string;
19
+ readonly one: string;
20
+ readonly other: string;
21
+ readonly variables?: Record<string, string | number>;
22
+ }
23
+ /**
24
+ * A value that can be either a plain string or a deferred translation object.
25
+ * Plain strings are translated as-is. TranslatableString objects are resolved
26
+ * at render time with their stored variables.
27
+ */
28
+ export type Translatable = string | TranslatableString | TranslatablePlural;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,4 @@
1
+ import { Translatable } from './translatable';
1
2
  export interface Tutorial {
2
3
  name: string;
3
4
  steps: TutorialStep[];
@@ -12,11 +13,11 @@ export interface ClickTutorialStep {
12
13
  export interface DescribeTutorialStep {
13
14
  kind: 'describe';
14
15
  elementId: string;
15
- description: string;
16
+ description: Translatable;
16
17
  }
17
18
  export interface GeneralTutorialStep {
18
19
  kind: 'general';
19
- description: string;
20
+ description: Translatable;
20
21
  elementId?: undefined;
21
22
  }
22
23
  export interface SuspendContStep {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "afnm-types",
3
- "version": "0.6.29",
3
+ "version": "0.6.31",
4
4
  "description": "Type definitions for Ascend From Nine Mountains",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",