@rpgjs/action-battle 5.0.0-beta.5 → 5.0.0-beta.6

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 (63) hide show
  1. package/README.md +115 -0
  2. package/dist/ai.server.d.ts +17 -2
  3. package/dist/client/index.js +13 -8
  4. package/dist/client/index10.js +54 -136
  5. package/dist/client/index11.js +52 -23
  6. package/dist/client/index12.js +101 -1217
  7. package/dist/client/index13.js +139 -42
  8. package/dist/client/index14.js +23 -8
  9. package/dist/client/index15.js +68 -444
  10. package/dist/client/index16.js +1281 -0
  11. package/dist/client/index17.js +13 -0
  12. package/dist/client/index18.js +60 -0
  13. package/dist/client/index19.js +10 -0
  14. package/dist/client/index2.js +25 -87
  15. package/dist/client/index20.js +504 -0
  16. package/dist/client/index3.js +45 -83
  17. package/dist/client/index4.js +98 -297
  18. package/dist/client/index5.js +81 -33
  19. package/dist/client/index6.js +284 -78
  20. package/dist/client/index7.js +33 -74
  21. package/dist/client/index8.js +95 -55
  22. package/dist/client/index9.js +75 -96
  23. package/dist/core/attack-profile.d.ts +9 -0
  24. package/dist/core/attack-runtime.d.ts +20 -0
  25. package/dist/core/enemy-attack-profiles.d.ts +6 -0
  26. package/dist/core/equipment.d.ts +2 -0
  27. package/dist/core/hit-reaction.d.ts +5 -0
  28. package/dist/index.d.ts +6 -1
  29. package/dist/server/index.js +12 -7
  30. package/dist/server/index10.js +1278 -8
  31. package/dist/server/index11.js +37 -0
  32. package/dist/server/index12.js +60 -0
  33. package/dist/server/index13.js +13 -0
  34. package/dist/server/index14.js +503 -0
  35. package/dist/server/index15.js +10 -0
  36. package/dist/server/index3.js +25 -87
  37. package/dist/server/index4.js +45 -141
  38. package/dist/server/index5.js +104 -21
  39. package/dist/server/index6.js +137 -1215
  40. package/dist/server/index7.js +22 -34
  41. package/dist/server/index8.js +70 -44
  42. package/dist/server/index9.js +44 -437
  43. package/dist/server.d.ts +7 -1
  44. package/package.json +5 -5
  45. package/src/ai.server.ts +172 -43
  46. package/src/client.ts +21 -12
  47. package/src/config.ts +17 -2
  48. package/src/core/attack-profile.spec.ts +118 -0
  49. package/src/core/attack-profile.ts +100 -0
  50. package/src/core/attack-runtime.spec.ts +103 -0
  51. package/src/core/attack-runtime.ts +83 -0
  52. package/src/core/contracts.ts +3 -0
  53. package/src/core/enemy-attack-profiles.spec.ts +35 -0
  54. package/src/core/enemy-attack-profiles.ts +103 -0
  55. package/src/core/equipment.spec.ts +37 -0
  56. package/src/core/equipment.ts +17 -0
  57. package/src/core/hit-reaction.spec.ts +43 -0
  58. package/src/core/hit-reaction.ts +70 -0
  59. package/src/core/hit.spec.ts +54 -1
  60. package/src/core/hit.ts +26 -0
  61. package/src/index.ts +36 -0
  62. package/src/server.ts +180 -33
  63. package/src/types.ts +62 -6
@@ -1,99 +1,78 @@
1
- import { normalizeActionBattleOptions } from "./index2.js";
2
- import { setActionBattleOptions, startAttackPreview, stopAttackPreview } from "./index3.js";
3
- import component from "./index4.js";
4
- import component$1 from "./index6.js";
5
- import component$2 from "./index7.js";
6
- import { resolveActionBattleAnimation } from "./index8.js";
7
- import { PrebuiltComponentAnimations, RpgClientEngine, RpgGui, inject } from "@rpgjs/client";
8
- import { defineModule } from "@rpgjs/common";
9
- //#region src/client.ts
10
- var DEFAULT_ATTACK_LOCK_DURATION_MS = 350;
11
- var beginLocalPlayerAttackLock = (engine, durationMs) => {
12
- if (durationMs <= 0) return true;
13
- const player = engine.scene?.getCurrentPlayer?.();
14
- if (!player) return true;
15
- const runtimePlayer = player;
16
- const now = Date.now();
17
- if (typeof runtimePlayer.__actionBattleAttackLockedUntil === "number" && runtimePlayer.__actionBattleAttackLockedUntil > now) return false;
18
- const lockId = (runtimePlayer.__actionBattleAttackLockId ?? 0) + 1;
19
- runtimePlayer.__actionBattleAttackLockId = lockId;
20
- runtimePlayer.__actionBattleAttackLockedUntil = now + durationMs;
21
- const previousCanMove = typeof player.canMove === "function" ? player.canMove() : true;
22
- const previousDirectionFixed = player.directionFixed;
23
- const previousAnimationFixed = player.animationFixed;
24
- if (typeof engine.interruptCurrentPlayerMovement === "function") engine.interruptCurrentPlayerMovement(player);
25
- else engine.scene?.stopMovement?.(player);
26
- player.canMove.set(false);
27
- player.directionFixed = true;
28
- player.animationFixed = true;
29
- setTimeout(() => {
30
- if (runtimePlayer.__actionBattleAttackLockId !== lockId) return;
31
- runtimePlayer.__actionBattleAttackLockedUntil = 0;
32
- player.canMove.set(previousCanMove);
33
- player.directionFixed = previousDirectionFixed;
34
- player.animationFixed = previousAnimationFixed;
35
- }, durationMs);
36
- return true;
37
- };
38
- var resolveLocalPlayerDirection = (player) => {
39
- if (typeof player.getDirection === "function") return player.getDirection();
40
- if (typeof player.direction === "function") return player.direction();
41
- return player.direction ?? "down";
42
- };
43
- var playLocalPlayerAttackAnimation = (player, options) => {
44
- if (!player || typeof player.setAnimation !== "function") return;
45
- const animation = resolveActionBattleAnimation("attack", player, options.animations);
46
- if (!animation) return;
47
- if (animation.graphic !== void 0) {
48
- player.setAnimation(animation.animationName, animation.graphic, animation.repeat);
49
- return;
50
- }
51
- player.setAnimation(animation.animationName, animation.repeat);
52
- };
53
- var showLocalAttackPreview = (player, options) => {
54
- if (!player || options.attack?.showPreview === false) return;
55
- const durationMs = Math.max(1, options.attack?.previewDurationMs ?? 180);
56
- const previewId = startAttackPreview({
57
- direction: resolveLocalPlayerDirection(player),
58
- durationMs,
59
- color: options.attack?.previewColor,
60
- accentColor: options.attack?.previewAccentColor
1
+ import { actionBattleAttackPreviewState } from "./index5.js";
2
+ import { RpgClientEngine, inject } from "@rpgjs/client";
3
+ import { Container, Graphics, computed, cond, h, signal, tick, useDefineProps, useProps } from "canvasengine";
4
+ //#region src/components/attack-preview.ce
5
+ function component($$props) {
6
+ useProps($$props);
7
+ const { object } = useDefineProps($$props)();
8
+ const engine = inject(RpgClientEngine);
9
+ const now = signal(Date.now());
10
+ tick(() => {
11
+ if (actionBattleAttackPreviewState().active) now.set(Date.now());
61
12
  });
62
- setTimeout(() => stopAttackPreview(previewId), durationMs);
63
- };
64
- var createActionBattleClient = (options = {}) => {
65
- const normalized = normalizeActionBattleOptions(options);
66
- setActionBattleOptions(normalized);
67
- const actionBarEnabled = normalized.ui?.actionBar?.enabled;
68
- const componentsInFront = [...normalized.ui?.targeting?.enabled ? [component$1] : [], component$2];
69
- const hitComponent = PrebuiltComponentAnimations?.Hit;
70
- return defineModule({
71
- componentAnimations: hitComponent ? [{
72
- id: "hit",
73
- component: hitComponent
74
- }] : [],
75
- gui: actionBarEnabled ? [{
76
- id: "action-battle-action-bar",
77
- component,
78
- dependencies: () => {
79
- return [inject(RpgClientEngine).scene.currentPlayer];
80
- }
81
- }] : [],
82
- sprite: { componentsInFront },
83
- sceneMap: { onAfterLoading() {
84
- if (actionBarEnabled && normalized.ui?.actionBar?.autoOpen) inject(RpgGui).display("action-battle-action-bar");
85
- } },
86
- engine: { onInput(engine, { input }) {
87
- if (input !== "action") return;
88
- const player = engine.scene?.getCurrentPlayer?.();
89
- if (!player) return;
90
- const lockDurationMs = Math.max(0, normalized.attack?.lockDurationMs ?? DEFAULT_ATTACK_LOCK_DURATION_MS);
91
- beginLocalPlayerAttackLock(engine, normalized.attack?.lockMovement === false ? 0 : lockDurationMs);
92
- playLocalPlayerAttackAnimation(player, normalized);
93
- showLocalAttackPreview(player, normalized);
94
- } }
13
+ const isCurrentPlayer = computed(() => {
14
+ if (!object?.id) return false;
15
+ return (typeof object.id === "function" ? object.id() : object.id) === engine.playerId;
95
16
  });
96
- };
97
- var client_default = createActionBattleClient();
17
+ const preview = computed(() => actionBattleAttackPreviewState());
18
+ const progress = computed(() => {
19
+ const state = preview();
20
+ if (!state.active) return 1;
21
+ const elapsed = now() - state.startedAt;
22
+ return Math.max(0, Math.min(1, elapsed / state.durationMs));
23
+ });
24
+ const shouldRender = computed(() => {
25
+ const state = preview();
26
+ return isCurrentPlayer() && state.active && progress() < 1;
27
+ });
28
+ const getHitbox = () => object.hitbox?.() || {
29
+ w: 32,
30
+ h: 32
31
+ };
32
+ const drawRect = (g, x, y, width, height, color, alpha) => {
33
+ g.rect(x, y, width, height);
34
+ g.fill({
35
+ color,
36
+ alpha
37
+ });
38
+ };
39
+ const drawSlash = (g) => {
40
+ g.clear();
41
+ if (!shouldRender()) return;
42
+ const state = preview();
43
+ const p = progress();
44
+ const alpha = Math.sin(Math.PI * p);
45
+ if (alpha <= 0) return;
46
+ const hitbox = getHitbox();
47
+ const width = hitbox.w || 32;
48
+ const height = hitbox.h || 32;
49
+ const reach = 16 + 18 * p;
50
+ const thickness = 4 + 3 * (1 - p);
51
+ const color = state.color;
52
+ const accent = state.accentColor;
53
+ if (state.direction === "left") {
54
+ drawRect(g, -reach - 6, height * .24, reach, thickness, accent, alpha * .55);
55
+ drawRect(g, -reach - 10, height * .46, reach + 4, thickness + 2, color, alpha);
56
+ drawRect(g, -reach - 6, height * .7, reach, thickness, accent, alpha * .4);
57
+ return;
58
+ }
59
+ if (state.direction === "right") {
60
+ drawRect(g, width + 6, height * .24, reach, thickness, accent, alpha * .55);
61
+ drawRect(g, width + 6, height * .46, reach + 4, thickness + 2, color, alpha);
62
+ drawRect(g, width + 6, height * .7, reach, thickness, accent, alpha * .4);
63
+ return;
64
+ }
65
+ if (state.direction === "up") {
66
+ drawRect(g, width * .24, -reach - 6, thickness, reach, accent, alpha * .55);
67
+ drawRect(g, width * .46, -reach - 10, thickness + 2, reach + 4, color, alpha);
68
+ drawRect(g, width * .7, -reach - 6, thickness, reach, accent, alpha * .4);
69
+ return;
70
+ }
71
+ drawRect(g, width * .24, height + 6, thickness, reach, accent, alpha * .55);
72
+ drawRect(g, width * .46, height + 6, thickness + 2, reach + 4, color, alpha);
73
+ drawRect(g, width * .7, height + 6, thickness, reach, accent, alpha * .4);
74
+ };
75
+ return h(Container, null, cond(shouldRender, () => h(Graphics, { draw: drawSlash })));
76
+ }
98
77
  //#endregion
99
- export { createActionBattleClient, client_default as default };
78
+ export { component as default };
@@ -0,0 +1,9 @@
1
+ import { ActionBattleAttackHitboxMap, ActionBattleAttackProfile, NormalizedActionBattleAttackProfile } from '../types';
2
+ export declare const DEFAULT_ACTION_BATTLE_ATTACK_PROFILE: NormalizedActionBattleAttackProfile;
3
+ export interface ActionBattleAttackProfileFallbacks {
4
+ id?: string;
5
+ lockMovement?: boolean;
6
+ lockDurationMs?: number;
7
+ hitboxes?: ActionBattleAttackHitboxMap;
8
+ }
9
+ export declare function normalizeActionBattleAttackProfile(profile?: ActionBattleAttackProfile | undefined, fallbacks?: ActionBattleAttackProfileFallbacks): NormalizedActionBattleAttackProfile;
@@ -0,0 +1,20 @@
1
+ import { ActionBattleAttackHitPolicy, ActionBattleOptions, NormalizedActionBattleAttackProfile } from '../types';
2
+ export declare const ACTION_BATTLE_HITBOX_FRAME_MS = 16;
3
+ export declare function getNormalizedActionBattleAttackProfile(options?: ActionBattleOptions): NormalizedActionBattleAttackProfile;
4
+ export declare function resolveActionBattleHitboxSpeed(profile: NormalizedActionBattleAttackProfile, hitboxCount: number): number;
5
+ export declare function scheduleActionBattleStartup(profile: NormalizedActionBattleAttackProfile, callback: () => void, scheduler?: (callback: () => void, delayMs: number) => unknown): unknown;
6
+ export declare function createActionBattleAttackId(attackerId: string | number | undefined, profileId: string): string;
7
+ export declare class ActionBattleHitTracker {
8
+ private readonly hitPolicy;
9
+ private hitTargets;
10
+ constructor(hitPolicy: ActionBattleAttackHitPolicy);
11
+ canHit(target: {
12
+ id?: string | number;
13
+ } | undefined): boolean;
14
+ recordHit(target: {
15
+ id?: string | number;
16
+ } | undefined): void;
17
+ tryHit(target: {
18
+ id?: string | number;
19
+ } | undefined): boolean;
20
+ }
@@ -0,0 +1,6 @@
1
+ import { ActionBattleAttackProfile, NormalizedActionBattleAttackProfile } from '../types';
2
+ export type ActionBattleEnemyAttackProfileKey = "melee" | "combo" | "charged" | "zone" | "dashAttack";
3
+ export declare const DEFAULT_ACTION_BATTLE_ENEMY_ATTACK_PROFILES: Record<ActionBattleEnemyAttackProfileKey, ActionBattleAttackProfile>;
4
+ export type ActionBattleEnemyAttackProfileMap = Partial<Record<ActionBattleEnemyAttackProfileKey, ActionBattleAttackProfile>>;
5
+ export type NormalizedActionBattleEnemyAttackProfileMap = Record<ActionBattleEnemyAttackProfileKey, NormalizedActionBattleAttackProfile>;
6
+ export declare function normalizeActionBattleEnemyAttackProfiles(overrides?: ActionBattleEnemyAttackProfileMap): NormalizedActionBattleEnemyAttackProfileMap;
@@ -0,0 +1,2 @@
1
+ import { ActionBattleAttackProfile } from '../types';
2
+ export declare function resolveActionBattleWeaponAttackProfile(entity: any): ActionBattleAttackProfile | null;
@@ -0,0 +1,5 @@
1
+ import { ActionBattleHitReactionProfile, NormalizedActionBattleHitReactionProfile } from '../types';
2
+ export declare const DEFAULT_ACTION_BATTLE_HIT_REACTION: NormalizedActionBattleHitReactionProfile;
3
+ export declare function normalizeActionBattleHitReaction(reaction: ActionBattleHitReactionProfile | undefined, defaults?: NormalizedActionBattleHitReactionProfile): NormalizedActionBattleHitReactionProfile;
4
+ export declare function isActionBattleEntityInvincible(entity: any, now?: number): boolean;
5
+ export declare function setActionBattleInvincibility(entity: any, durationMs: number, now?: number): void;
package/dist/index.d.ts CHANGED
@@ -1,8 +1,13 @@
1
1
  import { ActionBattleOptions } from './types';
2
2
  export { BattleAi, AiState, EnemyType, AttackPattern, AiDebug, DEFAULT_KNOCKBACK } from './ai.server';
3
3
  export type { HitResult, ApplyHitHooks, BattleAiOptions } from './ai.server';
4
- export type { ActionBattleAnimationContext, ActionBattleAnimationEntity, ActionBattleAnimationKey, ActionBattleAnimationOptions, ActionBattleAnimationResolver, ActionBattleAnimationResult, ActionBattleOptions, ActionBattleActionBarData, ActionBattleActionBarItem, ActionBattleActionBarSkill, ActionBattleSkillTargeting, ActionBattleSkillTargetingResolver, ActionBattleAttackOptions, ActionBattleUiOptions, ActionBattleUiActionBarOptions, ActionBattleUiTargetingOptions, ActionBattleCombatOptions, ActionBattleSystemOptions, ActionBattleAiSystemOptions, } from './types';
4
+ export type { ActionBattleAnimationContext, ActionBattleAnimationEntity, ActionBattleAnimationKey, ActionBattleAnimationOptions, ActionBattleAnimationResolver, ActionBattleAnimationResult, ActionBattleOptions, ActionBattleActionBarData, ActionBattleActionBarItem, ActionBattleActionBarSkill, ActionBattleSkillTargeting, ActionBattleSkillTargetingResolver, ActionBattleAttackOptions, ActionBattleUiOptions, ActionBattleUiActionBarOptions, ActionBattleUiTargetingOptions, ActionBattleAttackDirection, ActionBattleAttackHitboxConfig, ActionBattleAttackHitboxMap, ActionBattleAttackHitPolicy, ActionBattleAttackProfile, ActionBattleDebugOptions, ActionBattleHitReactionProfile, NormalizedActionBattleHitReactionProfile, NormalizedActionBattleAttackProfile, ActionBattleCombatOptions, ActionBattleSystemOptions, ActionBattleAiSystemOptions, } from './types';
5
5
  export type { ActionBattleAiBehavior, ActionBattleAiContext, ActionBattleAiDecision, ActionBattleAttackContext, ActionBattleCombatSystem, ActionBattleDamageContext, ActionBattleDamageResult, ActionBattleDirection, ActionBattleEntity, ActionBattleHitContext, ActionBattleHitHooks, ActionBattleHitResult, ActionBattleHitbox, ActionBattleKnockbackContext, ActionBattleKnockbackResult, ActionBattleSystems, } from './core/contracts';
6
+ export { DEFAULT_ACTION_BATTLE_ATTACK_PROFILE, normalizeActionBattleAttackProfile, type ActionBattleAttackProfileFallbacks, } from './core/attack-profile';
7
+ export { ACTION_BATTLE_HITBOX_FRAME_MS, ActionBattleHitTracker, createActionBattleAttackId, getNormalizedActionBattleAttackProfile, resolveActionBattleHitboxSpeed, scheduleActionBattleStartup, } from './core/attack-runtime';
8
+ export { DEFAULT_ACTION_BATTLE_HIT_REACTION, isActionBattleEntityInvincible, normalizeActionBattleHitReaction, setActionBattleInvincibility, } from './core/hit-reaction';
9
+ export { DEFAULT_ACTION_BATTLE_ENEMY_ATTACK_PROFILES, normalizeActionBattleEnemyAttackProfiles, type ActionBattleEnemyAttackProfileKey, type ActionBattleEnemyAttackProfileMap, type NormalizedActionBattleEnemyAttackProfileMap, } from './core/enemy-attack-profiles';
10
+ export { resolveActionBattleWeaponAttackProfile } from './core/equipment';
6
11
  export { DEFAULT_ZELDA_PLAYER_HITBOXES, createDefaultPlayerHitboxResolver, defaultCombatSystem, defaultEnemyBehaviors, defaultKnockbackResolver, defaultRpgjsDamageResolver, } from './core/defaults';
7
12
  export { createActionBattleSystems, getActionBattleSystems, } from './core/context';
8
13
  export { applyActionBattleHit } from './core/hit';
@@ -1,9 +1,14 @@
1
- import { DEFAULT_ZELDA_PLAYER_HITBOXES, createDefaultPlayerHitboxResolver, defaultCombatSystem, defaultEnemyBehaviors, defaultKnockbackResolver, defaultRpgjsDamageResolver } from "./index4.js";
2
- import { createActionBattleSystems, getActionBattleSystems } from "./index5.js";
3
- import { AiDebug, AiState, AttackPattern, BattleAi, DEFAULT_KNOCKBACK, EnemyType } from "./index6.js";
4
- import { applyActionBattleHit } from "./index8.js";
5
- import server_default, { ACTION_BATTLE_ACTION_BAR_GUI_ID, DEFAULT_PLAYER_ATTACK_HITBOXES, applyPlayerHitToEvent, createActionBattleServer, getPlayerWeaponKnockbackForce, openActionBattleActionBar, updateActionBattleActionBar } from "./index9.js";
6
- import { createActionEnemy } from "./index10.js";
1
+ import { DEFAULT_ACTION_BATTLE_HIT_REACTION, isActionBattleEntityInvincible, normalizeActionBattleHitReaction, setActionBattleInvincibility } from "./index3.js";
2
+ import { DEFAULT_ACTION_BATTLE_ATTACK_PROFILE, normalizeActionBattleAttackProfile } from "./index4.js";
3
+ import { DEFAULT_ZELDA_PLAYER_HITBOXES, createDefaultPlayerHitboxResolver, defaultCombatSystem, defaultEnemyBehaviors, defaultKnockbackResolver, defaultRpgjsDamageResolver } from "./index6.js";
4
+ import { createActionBattleSystems, getActionBattleSystems } from "./index7.js";
5
+ import { DEFAULT_ACTION_BATTLE_ENEMY_ATTACK_PROFILES, normalizeActionBattleEnemyAttackProfiles } from "./index8.js";
6
+ import { ACTION_BATTLE_HITBOX_FRAME_MS, ActionBattleHitTracker, createActionBattleAttackId, getNormalizedActionBattleAttackProfile, resolveActionBattleHitboxSpeed, scheduleActionBattleStartup } from "./index9.js";
7
+ import { AiDebug, AiState, AttackPattern, BattleAi, DEFAULT_KNOCKBACK, EnemyType } from "./index10.js";
8
+ import { applyActionBattleHit } from "./index12.js";
9
+ import { resolveActionBattleWeaponAttackProfile } from "./index13.js";
10
+ import server_default, { ACTION_BATTLE_ACTION_BAR_GUI_ID, DEFAULT_PLAYER_ATTACK_HITBOXES, applyPlayerHitToEvent, createActionBattleServer, getPlayerWeaponKnockbackForce, openActionBattleActionBar, updateActionBattleActionBar } from "./index14.js";
11
+ import { createActionEnemy } from "./index15.js";
7
12
  import { createModule } from "@rpgjs/common";
8
13
  //#region src/index.ts
9
14
  var client = null;
@@ -19,4 +24,4 @@ var src_default = {
19
24
  client
20
25
  };
21
26
  //#endregion
22
- export { ACTION_BATTLE_ACTION_BAR_GUI_ID, AiDebug, AiState, AttackPattern, BattleAi, DEFAULT_KNOCKBACK, DEFAULT_PLAYER_ATTACK_HITBOXES, DEFAULT_ZELDA_PLAYER_HITBOXES, EnemyType, applyActionBattleHit, applyPlayerHitToEvent, createActionBattleServer, createActionBattleSystems, createActionEnemy, createDefaultPlayerHitboxResolver, src_default as default, defaultCombatSystem, defaultEnemyBehaviors, defaultKnockbackResolver, defaultRpgjsDamageResolver, getActionBattleSystems, getPlayerWeaponKnockbackForce, openActionBattleActionBar, provideActionBattle, updateActionBattleActionBar };
27
+ export { ACTION_BATTLE_ACTION_BAR_GUI_ID, ACTION_BATTLE_HITBOX_FRAME_MS, ActionBattleHitTracker, AiDebug, AiState, AttackPattern, BattleAi, DEFAULT_ACTION_BATTLE_ATTACK_PROFILE, DEFAULT_ACTION_BATTLE_ENEMY_ATTACK_PROFILES, DEFAULT_ACTION_BATTLE_HIT_REACTION, DEFAULT_KNOCKBACK, DEFAULT_PLAYER_ATTACK_HITBOXES, DEFAULT_ZELDA_PLAYER_HITBOXES, EnemyType, applyActionBattleHit, applyPlayerHitToEvent, createActionBattleAttackId, createActionBattleServer, createActionBattleSystems, createActionEnemy, createDefaultPlayerHitboxResolver, src_default as default, defaultCombatSystem, defaultEnemyBehaviors, defaultKnockbackResolver, defaultRpgjsDamageResolver, getActionBattleSystems, getNormalizedActionBattleAttackProfile, getPlayerWeaponKnockbackForce, isActionBattleEntityInvincible, normalizeActionBattleAttackProfile, normalizeActionBattleEnemyAttackProfiles, normalizeActionBattleHitReaction, openActionBattleActionBar, provideActionBattle, resolveActionBattleHitboxSpeed, resolveActionBattleWeaponAttackProfile, scheduleActionBattleStartup, setActionBattleInvincibility, updateActionBattleActionBar };