@aura3d/engine 1.5.0 → 1.5.1

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.
Files changed (51) hide show
  1. package/README.md +77 -46
  2. package/dist/engine/agent-api/ApplicationKits.d.ts +307 -0
  3. package/dist/engine/agent-api/ApplicationKits.d.ts.map +1 -0
  4. package/dist/engine/agent-api/ApplicationKits.js +650 -0
  5. package/dist/engine/agent-api/ApplicationKits.js.map +1 -0
  6. package/dist/engine/agent-api/CombatFrameData.d.ts +210 -0
  7. package/dist/engine/agent-api/CombatFrameData.d.ts.map +1 -0
  8. package/dist/engine/agent-api/CombatFrameData.js +324 -0
  9. package/dist/engine/agent-api/CombatFrameData.js.map +1 -0
  10. package/dist/engine/agent-api/FocusSelection.d.ts +186 -0
  11. package/dist/engine/agent-api/FocusSelection.d.ts.map +1 -0
  12. package/dist/engine/agent-api/FocusSelection.js +436 -0
  13. package/dist/engine/agent-api/FocusSelection.js.map +1 -0
  14. package/dist/engine/agent-api/GameGenreKits.d.ts +32 -1
  15. package/dist/engine/agent-api/GameGenreKits.d.ts.map +1 -1
  16. package/dist/engine/agent-api/GameGenreKits.js +51 -7
  17. package/dist/engine/agent-api/GameGenreKits.js.map +1 -1
  18. package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts +10 -0
  19. package/dist/engine/agent-api/GameSceneGeometryBindings.d.ts.map +1 -1
  20. package/dist/engine/agent-api/GameSceneGeometryBindings.js +7 -0
  21. package/dist/engine/agent-api/GameSceneGeometryBindings.js.map +1 -1
  22. package/dist/engine/agent-api/PlatformerMotion.d.ts +177 -0
  23. package/dist/engine/agent-api/PlatformerMotion.d.ts.map +1 -0
  24. package/dist/engine/agent-api/PlatformerMotion.js +207 -0
  25. package/dist/engine/agent-api/PlatformerMotion.js.map +1 -0
  26. package/dist/engine/agent-api/SceneQueries.d.ts +124 -0
  27. package/dist/engine/agent-api/SceneQueries.d.ts.map +1 -0
  28. package/dist/engine/agent-api/SceneQueries.js +221 -0
  29. package/dist/engine/agent-api/SceneQueries.js.map +1 -0
  30. package/dist/engine/agent-api/SpatialAnchoring.d.ts +232 -0
  31. package/dist/engine/agent-api/SpatialAnchoring.d.ts.map +1 -0
  32. package/dist/engine/agent-api/SpatialAnchoring.js +348 -0
  33. package/dist/engine/agent-api/SpatialAnchoring.js.map +1 -0
  34. package/dist/engine/agent-api/VehicleChassis.d.ts +192 -0
  35. package/dist/engine/agent-api/VehicleChassis.d.ts.map +1 -0
  36. package/dist/engine/agent-api/VehicleChassis.js +322 -0
  37. package/dist/engine/agent-api/VehicleChassis.js.map +1 -0
  38. package/dist/engine/agent-api/VehicleDriverAi.d.ts +123 -0
  39. package/dist/engine/agent-api/VehicleDriverAi.d.ts.map +1 -0
  40. package/dist/engine/agent-api/VehicleDriverAi.js +217 -0
  41. package/dist/engine/agent-api/VehicleDriverAi.js.map +1 -0
  42. package/dist/engine/agent-api/WorldLabelRenderer.d.ts +146 -0
  43. package/dist/engine/agent-api/WorldLabelRenderer.d.ts.map +1 -0
  44. package/dist/engine/agent-api/WorldLabelRenderer.js +331 -0
  45. package/dist/engine/agent-api/WorldLabelRenderer.js.map +1 -0
  46. package/dist/engine/agent-api/index.d.ts +30 -0
  47. package/dist/engine/agent-api/index.d.ts.map +1 -1
  48. package/dist/engine/agent-api/index.js +87 -1
  49. package/dist/engine/agent-api/index.js.map +1 -1
  50. package/dist/engine/agent-api/product-viewer-runtime.d.ts.map +1 -1
  51. package/package.json +8 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationKits.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/ApplicationKits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Reusable frame-based combat model: frame data, spacing and a credible AI.
3
+ *
4
+ * ## The defects this addresses
5
+ *
6
+ * Aura Clash's attacks were reported as unrealistic, with weak spacing, limited
7
+ * momentum, and animations that do not correspond convincingly to hits. Converting
8
+ * the shipped move table to frames at 60fps shows why:
9
+ *
10
+ * | move | startup | active | recovery |
11
+ * | ------- | ------- | ------ | -------- |
12
+ * | light | 4 | **12** | **4** |
13
+ * | heavy | 6 | **17** | **5** |
14
+ * | special | 5 | **32** | **4** |
15
+ *
16
+ * Real fighting-game frame data is the opposite shape: a short active window (2-5
17
+ * frames) and a long recovery (10-30 frames). Aura Clash's active windows are 3-8x
18
+ * too long and its recoveries 3-6x too short, which has three consequences:
19
+ *
20
+ * 1. **Hits do not correspond to the animation.** A 32-frame active window on the
21
+ * special means the hitbox is live for over half a second, so damage lands at
22
+ * moments that look nothing like contact -- the reported "attack dealing damage
23
+ * before contact".
24
+ * 2. **No spacing game.** With a 12-frame active window and a 4-frame recovery, an
25
+ * attack is nearly always safe. Whiffing costs almost nothing, so there is no
26
+ * reason to respect range and no punish window to aim for. That is precisely
27
+ * "weak spacing".
28
+ * 3. **No trades or momentum.** Blockstun and hitstun cannot create meaningful
29
+ * advantage when every move recovers in four frames.
30
+ *
31
+ * The engine defect is that nothing validated frame data as frame data. A move table
32
+ * could declare any startup/active/recovery split and no check compared it against the
33
+ * shape that makes a combat system readable.
34
+ *
35
+ * This module adds that check ({@link validateCombatFrameData}), a solver that derives
36
+ * balanced frame data from an intended move role ({@link solveCombatFrameData}), and a
37
+ * reactive AI ({@link createCombatAi}) that behaves like an opponent: it respects
38
+ * range, reacts with a delay, blocks what it sees, and punishes what it can.
39
+ *
40
+ * Pure and dependency-free.
41
+ */
42
+ export type CombatMoveRole = "jab" | "light" | "medium" | "heavy" | "launcher" | "special";
43
+ export interface CombatFrameData {
44
+ readonly id: string;
45
+ /** Frames before the hitbox becomes active. */
46
+ readonly startup: number;
47
+ /** Frames the hitbox is live. */
48
+ readonly active: number;
49
+ /** Frames after the active window during which the attacker cannot act. */
50
+ readonly recovery: number;
51
+ /** Frames the defender is stunned on hit. */
52
+ readonly hitstun: number;
53
+ /** Frames the defender is stunned on block. */
54
+ readonly blockstun: number;
55
+ /** Horizontal reach of the hitbox, in world units. */
56
+ readonly range: number;
57
+ readonly damage: number;
58
+ /** Knockback impulse applied on hit. */
59
+ readonly knockback: number;
60
+ /** Frames both fighters freeze on contact, which sells the impact. */
61
+ readonly hitstop: number;
62
+ }
63
+ export interface CombatFrameAdvantage {
64
+ readonly id: string;
65
+ /**
66
+ * Frame advantage on hit: positive means the attacker acts first afterwards.
67
+ *
68
+ * `hitstun - recovery`. A move that is heavily plus on hit can start a combo; one
69
+ * that is minus on hit cannot.
70
+ */
71
+ readonly onHit: number;
72
+ /**
73
+ * Frame advantage on block. Negative means the defender can act first and punish.
74
+ *
75
+ * This is the number that creates a spacing game. When every move is plus on block
76
+ * there is no risk in attacking.
77
+ */
78
+ readonly onBlock: number;
79
+ /** Frames the attacker is helpless after a whiff: the punish window. */
80
+ readonly whiffPunishWindow: number;
81
+ /** Total frames the move occupies. */
82
+ readonly totalFrames: number;
83
+ }
84
+ /** Frame advantage for a move. */
85
+ export declare function combatFrameAdvantage(move: CombatFrameData): CombatFrameAdvantage;
86
+ export interface CombatFrameCheck {
87
+ readonly id: string;
88
+ readonly moveId: string;
89
+ readonly description: string;
90
+ readonly passes: boolean;
91
+ readonly detail: string;
92
+ }
93
+ export interface CombatFrameReport {
94
+ readonly schema: "aura3d-combat-frame-data/1.0";
95
+ readonly moves: readonly (CombatFrameData & {
96
+ readonly advantage: CombatFrameAdvantage;
97
+ })[];
98
+ readonly checks: readonly CombatFrameCheck[];
99
+ readonly passes: boolean;
100
+ }
101
+ export interface CombatFrameLimits {
102
+ /** Longest readable active window. Real games use 2-5 frames. */
103
+ readonly maxActiveFrames?: number | undefined;
104
+ /** Shortest active window that can still connect reliably. */
105
+ readonly minActiveFrames?: number | undefined;
106
+ /**
107
+ * Minimum recovery as a multiple of the active window.
108
+ *
109
+ * This is the ratio that creates risk. Below roughly 2x an attack is nearly free.
110
+ */
111
+ readonly minRecoveryToActiveRatio?: number | undefined;
112
+ /** Maximum frame advantage on block. Above 0 every move is safe. */
113
+ readonly maxOnBlock?: number | undefined;
114
+ /** Minimum punish window after a whiff, in frames. */
115
+ readonly minWhiffPunishWindow?: number | undefined;
116
+ /** Minimum hitstop, so contact reads as impact. */
117
+ readonly minHitstop?: number | undefined;
118
+ }
119
+ /**
120
+ * Validate a move table as frame data.
121
+ *
122
+ * This is the check that did not exist. It fails a table whose active windows are so
123
+ * long that damage cannot correspond to the animation, and one whose recoveries are so
124
+ * short that whiffing carries no risk.
125
+ */
126
+ export declare function validateCombatFrameData(moves: readonly CombatFrameData[], limits?: CombatFrameLimits): CombatFrameReport;
127
+ export interface CombatMoveRequest {
128
+ readonly id: string;
129
+ readonly role: CombatMoveRole;
130
+ /** Reach in world units. Longer moves are made slower to start. */
131
+ readonly range: number;
132
+ /** Damage, used to scale risk. */
133
+ readonly damage: number;
134
+ }
135
+ /**
136
+ * Derive balanced frame data from a move's intended role.
137
+ *
138
+ * Reach adds startup, because a longer poke should be slower to commit to. Damage adds
139
+ * recovery, so a big hit is a bigger risk. Neither is a free parameter.
140
+ */
141
+ export declare function solveCombatFrameData(request: CombatMoveRequest, options?: {
142
+ readonly referenceRange?: number | undefined;
143
+ readonly referenceDamage?: number | undefined;
144
+ }): CombatFrameData;
145
+ export type CombatAiAggression = "defensive" | "balanced" | "aggressive";
146
+ export interface CombatAiConfig {
147
+ readonly moves: readonly CombatFrameData[];
148
+ /**
149
+ * Reaction delay in frames.
150
+ *
151
+ * A zero-delay AI is not a credible opponent: it blocks the instant a button is
152
+ * pressed, which reads as cheating rather than as skill. Human reaction is roughly
153
+ * 12-18 frames at 60fps.
154
+ */
155
+ readonly reactionFrames?: number | undefined;
156
+ /** Preferred distance to hold, in world units. Defaults to just outside its best poke. */
157
+ readonly preferredRange?: number | undefined;
158
+ readonly aggression?: CombatAiAggression | undefined;
159
+ /** Frames to wait after acting before acting again. */
160
+ readonly cooldownFrames?: number | undefined;
161
+ /** Deterministic seed. */
162
+ readonly seed?: number | undefined;
163
+ }
164
+ export interface CombatAiObservation {
165
+ /** Horizontal distance to the opponent. */
166
+ readonly distance: number;
167
+ /** Opponent's current move id, or undefined when neutral. */
168
+ readonly opponentMoveId?: string | undefined;
169
+ /** Frames the opponent's current move has been running. */
170
+ readonly opponentMoveFrame?: number | undefined;
171
+ /** True when the AI is currently in hitstun or blockstun and cannot act. */
172
+ readonly stunned?: boolean | undefined;
173
+ /** Frames remaining in the AI's own current move, 0 when free. */
174
+ readonly ownRecoveryFrames?: number | undefined;
175
+ readonly ownHealthFraction?: number | undefined;
176
+ readonly opponentHealthFraction?: number | undefined;
177
+ }
178
+ export interface CombatAiDecision {
179
+ /** Move to start this frame, or undefined to hold. */
180
+ readonly moveId: string | undefined;
181
+ /** Whether to block. */
182
+ readonly block: boolean;
183
+ /** Movement intent: -1 retreat, 0 hold, 1 advance. */
184
+ readonly approach: -1 | 0 | 1;
185
+ /** Why this decision was made, for evidence and debugging. */
186
+ readonly reason: string;
187
+ }
188
+ export interface CombatAi {
189
+ readonly kind: "aura-combat-ai";
190
+ decide(observation: CombatAiObservation): CombatAiDecision;
191
+ reset(): void;
192
+ telemetry(): {
193
+ readonly reactionFrames: number;
194
+ readonly preferredRange: number;
195
+ readonly aggression: CombatAiAggression;
196
+ readonly decisionCount: number;
197
+ readonly punishAttempts: number;
198
+ readonly blockAttempts: number;
199
+ readonly lastDecision: CombatAiDecision;
200
+ };
201
+ }
202
+ /**
203
+ * Create a reactive combat AI.
204
+ *
205
+ * Behaves like an opponent rather than a timer: it holds a preferred range, reacts to a
206
+ * telegraphed attack after a delay, blocks what it has had time to see, and punishes a
207
+ * move whose recovery leaves a window. Deterministic for a given seed.
208
+ */
209
+ export declare function createCombatAi(config: CombatAiConfig): CombatAi;
210
+ //# sourceMappingURL=CombatFrameData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CombatFrameData.d.ts","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/CombatFrameData.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,324 @@
1
+ /**
2
+ * Reusable frame-based combat model: frame data, spacing and a credible AI.
3
+ *
4
+ * ## The defects this addresses
5
+ *
6
+ * Aura Clash's attacks were reported as unrealistic, with weak spacing, limited
7
+ * momentum, and animations that do not correspond convincingly to hits. Converting
8
+ * the shipped move table to frames at 60fps shows why:
9
+ *
10
+ * | move | startup | active | recovery |
11
+ * | ------- | ------- | ------ | -------- |
12
+ * | light | 4 | **12** | **4** |
13
+ * | heavy | 6 | **17** | **5** |
14
+ * | special | 5 | **32** | **4** |
15
+ *
16
+ * Real fighting-game frame data is the opposite shape: a short active window (2-5
17
+ * frames) and a long recovery (10-30 frames). Aura Clash's active windows are 3-8x
18
+ * too long and its recoveries 3-6x too short, which has three consequences:
19
+ *
20
+ * 1. **Hits do not correspond to the animation.** A 32-frame active window on the
21
+ * special means the hitbox is live for over half a second, so damage lands at
22
+ * moments that look nothing like contact -- the reported "attack dealing damage
23
+ * before contact".
24
+ * 2. **No spacing game.** With a 12-frame active window and a 4-frame recovery, an
25
+ * attack is nearly always safe. Whiffing costs almost nothing, so there is no
26
+ * reason to respect range and no punish window to aim for. That is precisely
27
+ * "weak spacing".
28
+ * 3. **No trades or momentum.** Blockstun and hitstun cannot create meaningful
29
+ * advantage when every move recovers in four frames.
30
+ *
31
+ * The engine defect is that nothing validated frame data as frame data. A move table
32
+ * could declare any startup/active/recovery split and no check compared it against the
33
+ * shape that makes a combat system readable.
34
+ *
35
+ * This module adds that check ({@link validateCombatFrameData}), a solver that derives
36
+ * balanced frame data from an intended move role ({@link solveCombatFrameData}), and a
37
+ * reactive AI ({@link createCombatAi}) that behaves like an opponent: it respects
38
+ * range, reacts with a delay, blocks what it sees, and punishes what it can.
39
+ *
40
+ * Pure and dependency-free.
41
+ */
42
+ /** Frame advantage for a move. */
43
+ export function combatFrameAdvantage(move) {
44
+ return {
45
+ id: move.id,
46
+ onHit: move.hitstun - move.recovery,
47
+ onBlock: move.blockstun - move.recovery,
48
+ whiffPunishWindow: move.recovery,
49
+ totalFrames: move.startup + move.active + move.recovery
50
+ };
51
+ }
52
+ /**
53
+ * Validate a move table as frame data.
54
+ *
55
+ * This is the check that did not exist. It fails a table whose active windows are so
56
+ * long that damage cannot correspond to the animation, and one whose recoveries are so
57
+ * short that whiffing carries no risk.
58
+ */
59
+ export function validateCombatFrameData(moves, limits = {}) {
60
+ const maxActive = limits.maxActiveFrames ?? 6;
61
+ const minActive = limits.minActiveFrames ?? 2;
62
+ const minRecoveryRatio = limits.minRecoveryToActiveRatio ?? 2;
63
+ const maxOnBlock = limits.maxOnBlock ?? 2;
64
+ const minWhiffWindow = limits.minWhiffPunishWindow ?? 8;
65
+ const minHitstop = limits.minHitstop ?? 2;
66
+ const checks = [];
67
+ const annotated = moves.map((move) => ({ ...move, advantage: combatFrameAdvantage(move) }));
68
+ for (const move of annotated) {
69
+ checks.push({
70
+ id: "active-window-readable",
71
+ moveId: move.id,
72
+ description: `active window must be ${minActive}-${maxActive} frames so damage corresponds to the animation`,
73
+ passes: move.active >= minActive && move.active <= maxActive,
74
+ detail: `${move.active} active frames`
75
+ });
76
+ checks.push({
77
+ id: "recovery-creates-risk",
78
+ moveId: move.id,
79
+ description: `recovery must be at least ${minRecoveryRatio}x the active window so whiffing is punishable`,
80
+ passes: move.active <= 0 || move.recovery >= move.active * minRecoveryRatio,
81
+ detail: `recovery ${move.recovery} vs active ${move.active} (ratio ${round(move.active > 0 ? move.recovery / move.active : Number.POSITIVE_INFINITY)})`
82
+ });
83
+ checks.push({
84
+ id: "not-safe-on-block",
85
+ moveId: move.id,
86
+ description: `frame advantage on block must not exceed +${maxOnBlock}, or the move carries no risk`,
87
+ passes: move.advantage.onBlock <= maxOnBlock,
88
+ detail: `${move.advantage.onBlock >= 0 ? "+" : ""}${move.advantage.onBlock} on block`
89
+ });
90
+ checks.push({
91
+ id: "whiff-punishable",
92
+ moveId: move.id,
93
+ description: `a whiff must leave at least ${minWhiffWindow} frames of punish window`,
94
+ passes: move.advantage.whiffPunishWindow >= minWhiffWindow,
95
+ detail: `${move.advantage.whiffPunishWindow} frame punish window`
96
+ });
97
+ checks.push({
98
+ id: "hitstop-sells-impact",
99
+ moveId: move.id,
100
+ description: `hitstop must be at least ${minHitstop} frames so contact reads as impact`,
101
+ passes: move.hitstop >= minHitstop,
102
+ detail: `${move.hitstop} frames of hitstop`
103
+ });
104
+ checks.push({
105
+ id: "startup-before-active",
106
+ moveId: move.id,
107
+ description: "a move must have startup frames, so an attack telegraphs before it can hit",
108
+ passes: move.startup >= 1,
109
+ detail: `${move.startup} startup frames`
110
+ });
111
+ }
112
+ // Table-level: stronger moves must be slower, or there is no reason to use a jab.
113
+ const byDamage = [...annotated].sort((a, b) => a.damage - b.damage);
114
+ for (let index = 0; index < byDamage.length - 1; index += 1) {
115
+ const weaker = byDamage[index];
116
+ const stronger = byDamage[index + 1];
117
+ if (weaker.damage === stronger.damage)
118
+ continue;
119
+ checks.push({
120
+ id: "damage-costs-speed",
121
+ moveId: `${weaker.id}->${stronger.id}`,
122
+ description: "a stronger move must be slower to start or riskier on block",
123
+ passes: stronger.startup >= weaker.startup || stronger.advantage.onBlock <= weaker.advantage.onBlock,
124
+ detail: `${weaker.id} ${weaker.damage}dmg/${weaker.startup}f vs ${stronger.id} ${stronger.damage}dmg/${stronger.startup}f`
125
+ });
126
+ }
127
+ return {
128
+ schema: "aura3d-combat-frame-data/1.0",
129
+ moves: annotated,
130
+ checks,
131
+ passes: checks.every((check) => check.passes)
132
+ };
133
+ }
134
+ const ROLE_PROFILES = {
135
+ /*
136
+ * Frame data shaped like a real fighting game.
137
+ *
138
+ * A jab is fast and nearly neutral on block, so it is the safe poke. Heavier moves
139
+ * start slower, recover longer and are clearly minus on block, so using them is a
140
+ * decision rather than a default. Every active window is short, which is what makes a
141
+ * hit correspond to the moment of contact.
142
+ */
143
+ jab: { startup: 3, active: 2, recovery: 7, hitstun: 12, blockstun: 8, hitstop: 3, knockback: 0.18 },
144
+ light: { startup: 5, active: 3, recovery: 10, hitstun: 15, blockstun: 10, hitstop: 4, knockback: 0.28 },
145
+ medium: { startup: 8, active: 3, recovery: 15, hitstun: 19, blockstun: 12, hitstop: 5, knockback: 0.42 },
146
+ heavy: { startup: 12, active: 4, recovery: 22, hitstun: 26, blockstun: 15, hitstop: 7, knockback: 0.7 },
147
+ launcher: { startup: 11, active: 3, recovery: 26, hitstun: 34, blockstun: 14, hitstop: 6, knockback: 0.55 },
148
+ special: { startup: 14, active: 5, recovery: 28, hitstun: 30, blockstun: 18, hitstop: 9, knockback: 1.05 }
149
+ };
150
+ /**
151
+ * Derive balanced frame data from a move's intended role.
152
+ *
153
+ * Reach adds startup, because a longer poke should be slower to commit to. Damage adds
154
+ * recovery, so a big hit is a bigger risk. Neither is a free parameter.
155
+ */
156
+ export function solveCombatFrameData(request, options = {}) {
157
+ const profile = ROLE_PROFILES[request.role];
158
+ const referenceRange = Math.max(0.1, options.referenceRange ?? 1.4);
159
+ const referenceDamage = Math.max(1, options.referenceDamage ?? 10);
160
+ // Reach beyond the reference costs startup; damage beyond it costs recovery.
161
+ const rangePenalty = Math.max(0, request.range / referenceRange - 1);
162
+ const damagePenalty = Math.max(0, request.damage / referenceDamage - 1);
163
+ return {
164
+ id: request.id,
165
+ startup: Math.round(profile.startup * (1 + rangePenalty * 0.4)),
166
+ active: profile.active,
167
+ recovery: Math.round(profile.recovery * (1 + damagePenalty * 0.3)),
168
+ hitstun: profile.hitstun,
169
+ blockstun: profile.blockstun,
170
+ range: round(request.range),
171
+ damage: request.damage,
172
+ knockback: round(profile.knockback * (1 + damagePenalty * 0.2)),
173
+ hitstop: profile.hitstop
174
+ };
175
+ }
176
+ const AGGRESSION_PROFILES = {
177
+ defensive: { attackChance: 0.35, blockChance: 0.9, spacingTolerance: 0.3 },
178
+ balanced: { attackChance: 0.6, blockChance: 0.72, spacingTolerance: 0.2 },
179
+ aggressive: { attackChance: 0.85, blockChance: 0.5, spacingTolerance: 0.12 }
180
+ };
181
+ /**
182
+ * Create a reactive combat AI.
183
+ *
184
+ * Behaves like an opponent rather than a timer: it holds a preferred range, reacts to a
185
+ * telegraphed attack after a delay, blocks what it has had time to see, and punishes a
186
+ * move whose recovery leaves a window. Deterministic for a given seed.
187
+ */
188
+ export function createCombatAi(config) {
189
+ const moves = new Map(config.moves.map((move) => [move.id, move]));
190
+ const aggression = config.aggression ?? "balanced";
191
+ const profile = AGGRESSION_PROFILES[aggression];
192
+ const reactionFrames = Math.max(0, config.reactionFrames ?? 14);
193
+ const cooldownFrames = Math.max(0, config.cooldownFrames ?? 18);
194
+ // The fastest move is the punish tool; the longest-reaching is the poke.
195
+ const fastest = [...moves.values()].sort((a, b) => a.startup - b.startup)[0];
196
+ const longest = [...moves.values()].sort((a, b) => b.range - a.range)[0];
197
+ /*
198
+ * Preferred range sits just *inside* the AI's longest poke.
199
+ *
200
+ * Setting it outside its own reach looked like good spacing discipline and was in fact
201
+ * a deadlock: the AI held a distance from which nothing could connect, so it never
202
+ * attacked and only ever adjusted position. Real fighting-game spacing is to hold the
203
+ * edge of your own longest threat -- close enough to poke, far enough that the
204
+ * opponent must commit to reach you.
205
+ */
206
+ const preferredRange = config.preferredRange ?? (longest ? longest.range * 0.92 : 1.5);
207
+ let seenOpponentMove;
208
+ let framesSinceSeen = 0;
209
+ let cooldown = 0;
210
+ let decisionCount = 0;
211
+ let punishAttempts = 0;
212
+ let blockAttempts = 0;
213
+ let random = (config.seed ?? 1) >>> 0 || 1;
214
+ const nextRandom = () => {
215
+ random ^= random << 13;
216
+ random ^= random >>> 17;
217
+ random ^= random << 5;
218
+ return (random >>> 0) / 0xffffffff;
219
+ };
220
+ let lastDecision = { moveId: undefined, block: false, approach: 0, reason: "initial" };
221
+ return {
222
+ kind: "aura-combat-ai",
223
+ decide(observation) {
224
+ decisionCount += 1;
225
+ cooldown = Math.max(0, cooldown - 1);
226
+ // Track how long the opponent's current move has been visible, so reaction is
227
+ // delayed rather than instant.
228
+ if (observation.opponentMoveId !== seenOpponentMove) {
229
+ seenOpponentMove = observation.opponentMoveId;
230
+ framesSinceSeen = 0;
231
+ }
232
+ else {
233
+ framesSinceSeen += 1;
234
+ }
235
+ const reacted = seenOpponentMove !== undefined && framesSinceSeen >= reactionFrames;
236
+ const decide = (decision) => {
237
+ lastDecision = decision;
238
+ return decision;
239
+ };
240
+ // Stunned or mid-move: nothing to decide.
241
+ if (observation.stunned === true || (observation.ownRecoveryFrames ?? 0) > 0) {
242
+ return decide({ moveId: undefined, block: false, approach: 0, reason: "recovering" });
243
+ }
244
+ const opponentMove = observation.opponentMoveId ? moves.get(observation.opponentMoveId) : undefined;
245
+ /*
246
+ * Punish. When the opponent's move is in its recovery and the AI's fastest move
247
+ * can start and connect inside that window, take it. This is the behaviour that
248
+ * makes spacing matter, and it is only possible because recovery frames exist.
249
+ */
250
+ if (reacted && opponentMove && fastest && cooldown <= 0) {
251
+ const opponentFrame = observation.opponentMoveFrame ?? 0;
252
+ const recoveryStart = opponentMove.startup + opponentMove.active;
253
+ const framesLeftInRecovery = recoveryStart + opponentMove.recovery - opponentFrame;
254
+ const inRecovery = opponentFrame >= recoveryStart && framesLeftInRecovery > 0;
255
+ if (inRecovery && framesLeftInRecovery > fastest.startup && observation.distance <= fastest.range) {
256
+ punishAttempts += 1;
257
+ cooldown = cooldownFrames;
258
+ return decide({ moveId: fastest.id, block: false, approach: 0, reason: "punish-recovery" });
259
+ }
260
+ }
261
+ /*
262
+ * Block. Only after the reaction delay, and only while the attack could still
263
+ * reach: blocking a move that has already recovered is not defence, it is a tell
264
+ * that the AI is reading state it should not have.
265
+ */
266
+ if (reacted && opponentMove) {
267
+ const opponentFrame = observation.opponentMoveFrame ?? 0;
268
+ const threatening = opponentFrame < opponentMove.startup + opponentMove.active;
269
+ if (threatening && observation.distance <= opponentMove.range * 1.15 && nextRandom() < profile.blockChance) {
270
+ blockAttempts += 1;
271
+ return decide({ moveId: undefined, block: true, approach: 0, reason: "block-incoming" });
272
+ }
273
+ }
274
+ // Spacing. Hold the preferred range; step in to attack, step out when crowded.
275
+ const rangeError = observation.distance - preferredRange;
276
+ if (Math.abs(rangeError) > profile.spacingTolerance) {
277
+ const approach = rangeError > 0 ? 1 : -1;
278
+ // Attack on the way in when a move actually reaches.
279
+ const reachable = [...moves.values()].filter((move) => observation.distance <= move.range);
280
+ if (approach === 1 && reachable.length > 0 && cooldown <= 0 && nextRandom() < profile.attackChance) {
281
+ const chosen = reachable[Math.floor(nextRandom() * reachable.length)] ?? reachable[0];
282
+ cooldown = cooldownFrames;
283
+ return decide({ moveId: chosen.id, block: false, approach: 0, reason: "attack-in-range" });
284
+ }
285
+ return decide({ moveId: undefined, block: false, approach, reason: approach > 0 ? "close-distance" : "create-space" });
286
+ }
287
+ // At preferred range with nothing to react to: poke when the odds are taken.
288
+ if (cooldown <= 0 && nextRandom() < profile.attackChance) {
289
+ const reachable = [...moves.values()].filter((move) => observation.distance <= move.range);
290
+ if (reachable.length > 0) {
291
+ const chosen = reachable[Math.floor(nextRandom() * reachable.length)] ?? reachable[0];
292
+ cooldown = cooldownFrames;
293
+ return decide({ moveId: chosen.id, block: false, approach: 0, reason: "poke-at-range" });
294
+ }
295
+ }
296
+ return decide({ moveId: undefined, block: false, approach: 0, reason: "hold-range" });
297
+ },
298
+ reset() {
299
+ seenOpponentMove = undefined;
300
+ framesSinceSeen = 0;
301
+ cooldown = 0;
302
+ decisionCount = 0;
303
+ punishAttempts = 0;
304
+ blockAttempts = 0;
305
+ random = (config.seed ?? 1) >>> 0 || 1;
306
+ lastDecision = { moveId: undefined, block: false, approach: 0, reason: "reset" };
307
+ },
308
+ telemetry() {
309
+ return {
310
+ reactionFrames,
311
+ preferredRange: round(preferredRange),
312
+ aggression,
313
+ decisionCount,
314
+ punishAttempts,
315
+ blockAttempts,
316
+ lastDecision
317
+ };
318
+ }
319
+ };
320
+ }
321
+ function round(value) {
322
+ return Math.round(value * 1e4) / 1e4;
323
+ }
324
+ //# sourceMappingURL=CombatFrameData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CombatFrameData.js","sourceRoot":"","sources":["../../../../../packages/engine/src/agent-api/CombatFrameData.ts"],"names":[],"mappings":"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"}