@alife-sdk/core 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +283 -0
- package/dist/ai/DangerManager.d.ts +71 -0
- package/dist/ai/DangerManager.d.ts.map +1 -0
- package/dist/ai/DangerManager.js +176 -0
- package/dist/ai/DangerManager.js.map +1 -0
- package/dist/ai/GOAPAction.d.ts +45 -0
- package/dist/ai/GOAPAction.d.ts.map +1 -0
- package/dist/ai/GOAPAction.js +32 -0
- package/dist/ai/GOAPAction.js.map +1 -0
- package/dist/ai/GOAPPlanner.d.ts +80 -0
- package/dist/ai/GOAPPlanner.d.ts.map +1 -0
- package/dist/ai/GOAPPlanner.js +259 -0
- package/dist/ai/GOAPPlanner.js.map +1 -0
- package/dist/ai/IStateHandler.d.ts +8 -0
- package/dist/ai/IStateHandler.d.ts.map +1 -0
- package/dist/ai/IStateHandler.js +8 -0
- package/dist/ai/IStateHandler.js.map +1 -0
- package/dist/ai/MemorySystem.d.ts +94 -0
- package/dist/ai/MemorySystem.d.ts.map +1 -0
- package/dist/ai/MemorySystem.js +207 -0
- package/dist/ai/MemorySystem.js.map +1 -0
- package/dist/ai/StateMachine.d.ts +49 -0
- package/dist/ai/StateMachine.d.ts.map +1 -0
- package/dist/ai/StateMachine.js +83 -0
- package/dist/ai/StateMachine.js.map +1 -0
- package/dist/ai/WorldState.d.ts +48 -0
- package/dist/ai/WorldState.d.ts.map +1 -0
- package/dist/ai/WorldState.js +93 -0
- package/dist/ai/WorldState.js.map +1 -0
- package/dist/ai/index.d.ts +10 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +8 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/combat/DamageInstance.d.ts +26 -0
- package/dist/combat/DamageInstance.d.ts.map +1 -0
- package/dist/combat/DamageInstance.js +25 -0
- package/dist/combat/DamageInstance.js.map +1 -0
- package/dist/combat/MoraleStateMachine.d.ts +53 -0
- package/dist/combat/MoraleStateMachine.d.ts.map +1 -0
- package/dist/combat/MoraleStateMachine.js +84 -0
- package/dist/combat/MoraleStateMachine.js.map +1 -0
- package/dist/combat/index.d.ts +5 -0
- package/dist/combat/index.d.ts.map +1 -0
- package/dist/combat/index.js +3 -0
- package/dist/combat/index.js.map +1 -0
- package/dist/config/ALifeConfig.d.ts +131 -0
- package/dist/config/ALifeConfig.d.ts.map +1 -0
- package/dist/config/ALifeConfig.js +82 -0
- package/dist/config/ALifeConfig.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/ALifeKernel.d.ts +163 -0
- package/dist/core/ALifeKernel.d.ts.map +1 -0
- package/dist/core/ALifeKernel.js +542 -0
- package/dist/core/ALifeKernel.js.map +1 -0
- package/dist/core/Clock.d.ts +123 -0
- package/dist/core/Clock.d.ts.map +1 -0
- package/dist/core/Clock.js +228 -0
- package/dist/core/Clock.js.map +1 -0
- package/dist/core/DevToolsInspector.d.ts +53 -0
- package/dist/core/DevToolsInspector.d.ts.map +1 -0
- package/dist/core/DevToolsInspector.js +8 -0
- package/dist/core/DevToolsInspector.js.map +1 -0
- package/dist/core/Diagnostics.d.ts +64 -0
- package/dist/core/Diagnostics.d.ts.map +1 -0
- package/dist/core/Diagnostics.js +107 -0
- package/dist/core/Diagnostics.js.map +1 -0
- package/dist/core/ISerializable.d.ts +12 -0
- package/dist/core/ISerializable.d.ts.map +1 -0
- package/dist/core/ISerializable.js +2 -0
- package/dist/core/ISerializable.js.map +1 -0
- package/dist/core/PortRegistry.d.ts +57 -0
- package/dist/core/PortRegistry.d.ts.map +1 -0
- package/dist/core/PortRegistry.js +72 -0
- package/dist/core/PortRegistry.js.map +1 -0
- package/dist/core/PortTokens.d.ts +39 -0
- package/dist/core/PortTokens.d.ts.map +1 -0
- package/dist/core/PortTokens.js +39 -0
- package/dist/core/PortTokens.js.map +1 -0
- package/dist/core/SpatialGrid.d.ts +114 -0
- package/dist/core/SpatialGrid.d.ts.map +1 -0
- package/dist/core/SpatialGrid.js +258 -0
- package/dist/core/SpatialGrid.js.map +1 -0
- package/dist/core/Vec2.d.ts +34 -0
- package/dist/core/Vec2.d.ts.map +1 -0
- package/dist/core/Vec2.js +52 -0
- package/dist/core/Vec2.js.map +1 -0
- package/dist/core/math/CatmullRom.d.ts +20 -0
- package/dist/core/math/CatmullRom.d.ts.map +1 -0
- package/dist/core/math/CatmullRom.js +37 -0
- package/dist/core/math/CatmullRom.js.map +1 -0
- package/dist/core/math/index.d.ts +6 -0
- package/dist/core/math/index.d.ts.map +1 -0
- package/dist/core/math/index.js +5 -0
- package/dist/core/math/index.js.map +1 -0
- package/dist/core/math/intersects.d.ts +32 -0
- package/dist/core/math/intersects.d.ts.map +1 -0
- package/dist/core/math/intersects.js +92 -0
- package/dist/core/math/intersects.js.map +1 -0
- package/dist/core/math/utils.d.ts +5 -0
- package/dist/core/math/utils.d.ts.map +1 -0
- package/dist/core/math/utils.js +13 -0
- package/dist/core/math/utils.js.map +1 -0
- package/dist/entity/IComponent.d.ts +17 -0
- package/dist/entity/IComponent.d.ts.map +1 -0
- package/dist/entity/IComponent.js +2 -0
- package/dist/entity/IComponent.js.map +1 -0
- package/dist/entity/IEntity.d.ts +33 -0
- package/dist/entity/IEntity.d.ts.map +1 -0
- package/dist/entity/IEntity.js +2 -0
- package/dist/entity/IEntity.js.map +1 -0
- package/dist/entity/index.d.ts +3 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/index.js +2 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/events/ALifeEvents.d.ts +241 -0
- package/dist/events/ALifeEvents.d.ts.map +1 -0
- package/dist/events/ALifeEvents.js +53 -0
- package/dist/events/ALifeEvents.js.map +1 -0
- package/dist/events/EventBus.d.ts +52 -0
- package/dist/events/EventBus.d.ts.map +1 -0
- package/dist/events/EventBus.js +129 -0
- package/dist/events/EventBus.js.map +1 -0
- package/dist/events/index.d.ts +4 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +4 -0
- package/dist/events/index.js.map +1 -0
- package/dist/faction/Faction.d.ts +53 -0
- package/dist/faction/Faction.d.ts.map +1 -0
- package/dist/faction/Faction.js +101 -0
- package/dist/faction/Faction.js.map +1 -0
- package/dist/faction/FactionBuilder.d.ts +32 -0
- package/dist/faction/FactionBuilder.d.ts.map +1 -0
- package/dist/faction/FactionBuilder.js +80 -0
- package/dist/faction/FactionBuilder.js.map +1 -0
- package/dist/faction/ImmunityProfile.d.ts +24 -0
- package/dist/faction/ImmunityProfile.d.ts.map +1 -0
- package/dist/faction/ImmunityProfile.js +43 -0
- package/dist/faction/ImmunityProfile.js.map +1 -0
- package/dist/faction/index.d.ts +6 -0
- package/dist/faction/index.d.ts.map +1 -0
- package/dist/faction/index.js +5 -0
- package/dist/faction/index.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/ILogEntry.d.ts +16 -0
- package/dist/logger/ILogEntry.d.ts.map +1 -0
- package/dist/logger/ILogEntry.js +2 -0
- package/dist/logger/ILogEntry.js.map +1 -0
- package/dist/logger/LogChannel.d.ts +27 -0
- package/dist/logger/LogChannel.d.ts.map +1 -0
- package/dist/logger/LogChannel.js +26 -0
- package/dist/logger/LogChannel.js.map +1 -0
- package/dist/logger/LogLevel.d.ts +10 -0
- package/dist/logger/LogLevel.d.ts.map +1 -0
- package/dist/logger/LogLevel.js +9 -0
- package/dist/logger/LogLevel.js.map +1 -0
- package/dist/logger/Logger.d.ts +56 -0
- package/dist/logger/Logger.d.ts.map +1 -0
- package/dist/logger/Logger.js +106 -0
- package/dist/logger/Logger.js.map +1 -0
- package/dist/logger/index.d.ts +8 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +5 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/movement/MonsterHome.d.ts +49 -0
- package/dist/movement/MonsterHome.d.ts.map +1 -0
- package/dist/movement/MonsterHome.js +75 -0
- package/dist/movement/MonsterHome.js.map +1 -0
- package/dist/movement/PatrolRoute.d.ts +99 -0
- package/dist/movement/PatrolRoute.d.ts.map +1 -0
- package/dist/movement/PatrolRoute.js +141 -0
- package/dist/movement/PatrolRoute.js.map +1 -0
- package/dist/movement/index.d.ts +5 -0
- package/dist/movement/index.d.ts.map +1 -0
- package/dist/movement/index.js +4 -0
- package/dist/movement/index.js.map +1 -0
- package/dist/navigation/LevelGraph.d.ts +78 -0
- package/dist/navigation/LevelGraph.d.ts.map +1 -0
- package/dist/navigation/LevelGraph.js +268 -0
- package/dist/navigation/LevelGraph.js.map +1 -0
- package/dist/navigation/NPCGraphMover.d.ts +87 -0
- package/dist/navigation/NPCGraphMover.d.ts.map +1 -0
- package/dist/navigation/NPCGraphMover.js +193 -0
- package/dist/navigation/NPCGraphMover.js.map +1 -0
- package/dist/navigation/index.d.ts +5 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +4 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/plugins/AnomaliesPlugin.d.ts +26 -0
- package/dist/plugins/AnomaliesPlugin.d.ts.map +1 -0
- package/dist/plugins/AnomaliesPlugin.js +30 -0
- package/dist/plugins/AnomaliesPlugin.js.map +1 -0
- package/dist/plugins/CombatSchemaPlugin.d.ts +35 -0
- package/dist/plugins/CombatSchemaPlugin.d.ts.map +1 -0
- package/dist/plugins/CombatSchemaPlugin.js +44 -0
- package/dist/plugins/CombatSchemaPlugin.js.map +1 -0
- package/dist/plugins/FactionsPlugin.d.ts +26 -0
- package/dist/plugins/FactionsPlugin.d.ts.map +1 -0
- package/dist/plugins/FactionsPlugin.js +30 -0
- package/dist/plugins/FactionsPlugin.js.map +1 -0
- package/dist/plugins/IALifePlugin.d.ts +91 -0
- package/dist/plugins/IALifePlugin.d.ts.map +1 -0
- package/dist/plugins/IALifePlugin.js +2 -0
- package/dist/plugins/IALifePlugin.js.map +1 -0
- package/dist/plugins/MonstersPlugin.d.ts +26 -0
- package/dist/plugins/MonstersPlugin.d.ts.map +1 -0
- package/dist/plugins/MonstersPlugin.js +30 -0
- package/dist/plugins/MonstersPlugin.js.map +1 -0
- package/dist/plugins/NPCTypesPlugin.d.ts +26 -0
- package/dist/plugins/NPCTypesPlugin.d.ts.map +1 -0
- package/dist/plugins/NPCTypesPlugin.js +30 -0
- package/dist/plugins/NPCTypesPlugin.js.map +1 -0
- package/dist/plugins/PluginToken.d.ts +26 -0
- package/dist/plugins/PluginToken.d.ts.map +1 -0
- package/dist/plugins/PluginToken.js +22 -0
- package/dist/plugins/PluginToken.js.map +1 -0
- package/dist/plugins/SocialPlugin.d.ts +14 -0
- package/dist/plugins/SocialPlugin.d.ts.map +1 -0
- package/dist/plugins/SocialPlugin.js +16 -0
- package/dist/plugins/SocialPlugin.js.map +1 -0
- package/dist/plugins/SpawnPlugin.d.ts +15 -0
- package/dist/plugins/SpawnPlugin.d.ts.map +1 -0
- package/dist/plugins/SpawnPlugin.js +26 -0
- package/dist/plugins/SpawnPlugin.js.map +1 -0
- package/dist/plugins/SquadPlugin.d.ts +14 -0
- package/dist/plugins/SquadPlugin.d.ts.map +1 -0
- package/dist/plugins/SquadPlugin.js +16 -0
- package/dist/plugins/SquadPlugin.js.map +1 -0
- package/dist/plugins/SurgePlugin.d.ts +20 -0
- package/dist/plugins/SurgePlugin.d.ts.map +1 -0
- package/dist/plugins/SurgePlugin.js +22 -0
- package/dist/plugins/SurgePlugin.js.map +1 -0
- package/dist/plugins/TradePlugin.d.ts +16 -0
- package/dist/plugins/TradePlugin.d.ts.map +1 -0
- package/dist/plugins/TradePlugin.js +18 -0
- package/dist/plugins/TradePlugin.js.map +1 -0
- package/dist/plugins/index.d.ts +11 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +10 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/pluginNames.d.ts +37 -0
- package/dist/plugins/pluginNames.d.ts.map +1 -0
- package/dist/plugins/pluginNames.js +28 -0
- package/dist/plugins/pluginNames.js.map +1 -0
- package/dist/plugins/presets.d.ts +31 -0
- package/dist/plugins/presets.d.ts.map +1 -0
- package/dist/plugins/presets.js +50 -0
- package/dist/plugins/presets.js.map +1 -0
- package/dist/ports/IDataLoader.d.ts +38 -0
- package/dist/ports/IDataLoader.d.ts.map +1 -0
- package/dist/ports/IDataLoader.js +12 -0
- package/dist/ports/IDataLoader.js.map +1 -0
- package/dist/ports/IEntityAdapter.d.ts +73 -0
- package/dist/ports/IEntityAdapter.d.ts.map +1 -0
- package/dist/ports/IEntityAdapter.js +36 -0
- package/dist/ports/IEntityAdapter.js.map +1 -0
- package/dist/ports/IEntityFactory.d.ts +66 -0
- package/dist/ports/IEntityFactory.d.ts.map +1 -0
- package/dist/ports/IEntityFactory.js +21 -0
- package/dist/ports/IEntityFactory.js.map +1 -0
- package/dist/ports/ILogger.d.ts +29 -0
- package/dist/ports/ILogger.d.ts.map +1 -0
- package/dist/ports/ILogger.js +2 -0
- package/dist/ports/ILogger.js.map +1 -0
- package/dist/ports/IPlayerPositionProvider.d.ts +20 -0
- package/dist/ports/IPlayerPositionProvider.d.ts.map +1 -0
- package/dist/ports/IPlayerPositionProvider.js +11 -0
- package/dist/ports/IPlayerPositionProvider.js.map +1 -0
- package/dist/ports/IRandom.d.ts +25 -0
- package/dist/ports/IRandom.d.ts.map +1 -0
- package/dist/ports/IRandom.js +39 -0
- package/dist/ports/IRandom.js.map +1 -0
- package/dist/ports/IRuntimeClock.d.ts +18 -0
- package/dist/ports/IRuntimeClock.d.ts.map +1 -0
- package/dist/ports/IRuntimeClock.js +2 -0
- package/dist/ports/IRuntimeClock.js.map +1 -0
- package/dist/ports/index.d.ts +12 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +5 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/registry/AIStateRegistry.d.ts +42 -0
- package/dist/registry/AIStateRegistry.d.ts.map +1 -0
- package/dist/registry/AIStateRegistry.js +27 -0
- package/dist/registry/AIStateRegistry.js.map +1 -0
- package/dist/registry/AnomalyTypeRegistry.d.ts +21 -0
- package/dist/registry/AnomalyTypeRegistry.d.ts.map +1 -0
- package/dist/registry/AnomalyTypeRegistry.js +20 -0
- package/dist/registry/AnomalyTypeRegistry.js.map +1 -0
- package/dist/registry/BehaviorSchemeRegistry.d.ts +21 -0
- package/dist/registry/BehaviorSchemeRegistry.d.ts.map +1 -0
- package/dist/registry/BehaviorSchemeRegistry.js +24 -0
- package/dist/registry/BehaviorSchemeRegistry.js.map +1 -0
- package/dist/registry/DamageTypeRegistry.d.ts +17 -0
- package/dist/registry/DamageTypeRegistry.d.ts.map +1 -0
- package/dist/registry/DamageTypeRegistry.js +24 -0
- package/dist/registry/DamageTypeRegistry.js.map +1 -0
- package/dist/registry/FactionRegistry.d.ts +41 -0
- package/dist/registry/FactionRegistry.d.ts.map +1 -0
- package/dist/registry/FactionRegistry.js +29 -0
- package/dist/registry/FactionRegistry.js.map +1 -0
- package/dist/registry/MonsterRegistry.d.ts +44 -0
- package/dist/registry/MonsterRegistry.d.ts.map +1 -0
- package/dist/registry/MonsterRegistry.js +43 -0
- package/dist/registry/MonsterRegistry.js.map +1 -0
- package/dist/registry/NPCTypeRegistry.d.ts +34 -0
- package/dist/registry/NPCTypeRegistry.d.ts.map +1 -0
- package/dist/registry/NPCTypeRegistry.js +20 -0
- package/dist/registry/NPCTypeRegistry.js.map +1 -0
- package/dist/registry/Registry.d.ts +44 -0
- package/dist/registry/Registry.d.ts.map +1 -0
- package/dist/registry/Registry.js +80 -0
- package/dist/registry/Registry.js.map +1 -0
- package/dist/registry/TaskTypeRegistry.d.ts +17 -0
- package/dist/registry/TaskTypeRegistry.d.ts.map +1 -0
- package/dist/registry/TaskTypeRegistry.js +16 -0
- package/dist/registry/TaskTypeRegistry.js.map +1 -0
- package/dist/registry/index.d.ts +19 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +11 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +3 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/validators.d.ts +32 -0
- package/dist/schema/validators.d.ts.map +1 -0
- package/dist/schema/validators.js +249 -0
- package/dist/schema/validators.js.map +1 -0
- package/dist/spawn/SpawnRegistry.d.ts +48 -0
- package/dist/spawn/SpawnRegistry.d.ts.map +1 -0
- package/dist/spawn/SpawnRegistry.js +141 -0
- package/dist/spawn/SpawnRegistry.js.map +1 -0
- package/dist/spawn/index.d.ts +3 -0
- package/dist/spawn/index.d.ts.map +1 -0
- package/dist/spawn/index.js +3 -0
- package/dist/spawn/index.js.map +1 -0
- package/dist/terrain/SmartTerrain.d.ts +119 -0
- package/dist/terrain/SmartTerrain.d.ts.map +1 -0
- package/dist/terrain/SmartTerrain.js +124 -0
- package/dist/terrain/SmartTerrain.js.map +1 -0
- package/dist/terrain/TerrainBuilder.d.ts +44 -0
- package/dist/terrain/TerrainBuilder.d.ts.map +1 -0
- package/dist/terrain/TerrainBuilder.js +112 -0
- package/dist/terrain/TerrainBuilder.js.map +1 -0
- package/dist/terrain/Zone.d.ts +25 -0
- package/dist/terrain/Zone.d.ts.map +1 -0
- package/dist/terrain/Zone.js +29 -0
- package/dist/terrain/Zone.js.map +1 -0
- package/dist/terrain/index.d.ts +6 -0
- package/dist/terrain/index.d.ts.map +1 -0
- package/dist/terrain/index.js +5 -0
- package/dist/terrain/index.js.map +1 -0
- package/dist/time/TimeManager.d.ts +21 -0
- package/dist/time/TimeManager.d.ts.map +1 -0
- package/dist/time/TimeManager.js +41 -0
- package/dist/time/TimeManager.js.map +1 -0
- package/dist/time/index.d.ts +3 -0
- package/dist/time/index.d.ts.map +1 -0
- package/dist/time/index.js +2 -0
- package/dist/time/index.js.map +1 -0
- package/package.json +119 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoraleStateMachine.d.ts","sourceRoot":"","sources":["../../src/combat/MoraleStateMachine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEzE,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,6DAA6D;IAC7D,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAYD,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAE3B,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAK3C,uCAAuC;IACvC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,kEAAkE;IAClE,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS3B;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiB9B,kCAAkC;IAClC,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 3-state morale system: STABLE / SHAKEN / PANICKED.
|
|
3
|
+
*
|
|
4
|
+
* Morale is a value in [-1, 1] that determines the NPC's psychological state:
|
|
5
|
+
* - STABLE: morale > shakenThreshold (-0.3 by default), recovery +0.005/s toward 0
|
|
6
|
+
* - SHAKEN: morale between shaken and panicked thresholds, recovery +0.01/s toward 0
|
|
7
|
+
* - PANICKED: morale <= panicThreshold (-0.7 by default), no recovery
|
|
8
|
+
*
|
|
9
|
+
* External systems call {@link adjust} to apply morale hits/boosts
|
|
10
|
+
* and {@link update} each frame to apply recovery.
|
|
11
|
+
*/
|
|
12
|
+
import { clamp, moveTowardZero } from '../core/math/utils';
|
|
13
|
+
export const MoraleState = {
|
|
14
|
+
STABLE: 'stable',
|
|
15
|
+
SHAKEN: 'shaken',
|
|
16
|
+
PANICKED: 'panicked',
|
|
17
|
+
};
|
|
18
|
+
const DEFAULT_CONFIG = {
|
|
19
|
+
shakenThreshold: -0.3,
|
|
20
|
+
panicThreshold: -0.7,
|
|
21
|
+
stableRecoveryRate: 0.005,
|
|
22
|
+
shakenRecoveryRate: 0.01,
|
|
23
|
+
};
|
|
24
|
+
const MORALE_MIN = -1;
|
|
25
|
+
const MORALE_MAX = 1;
|
|
26
|
+
export class MoraleTracker {
|
|
27
|
+
constructor(config) {
|
|
28
|
+
this.currentMorale = 0;
|
|
29
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
30
|
+
this._cachedState = deriveState(this.currentMorale, this.config);
|
|
31
|
+
}
|
|
32
|
+
/** Current morale value in [-1, 1]. */
|
|
33
|
+
get morale() {
|
|
34
|
+
return this.currentMorale;
|
|
35
|
+
}
|
|
36
|
+
/** Derived morale state based on current value and thresholds. */
|
|
37
|
+
get state() {
|
|
38
|
+
return this._cachedState;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Apply a morale adjustment (positive = boost, negative = hit).
|
|
42
|
+
* Result is clamped to [-1, 1].
|
|
43
|
+
*/
|
|
44
|
+
adjust(delta) {
|
|
45
|
+
this.currentMorale = clamp(this.currentMorale + delta, MORALE_MIN, MORALE_MAX);
|
|
46
|
+
this._cachedState = deriveState(this.currentMorale, this.config);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Tick recovery. Should be called each frame with the elapsed seconds.
|
|
50
|
+
*
|
|
51
|
+
* - STABLE: recovers toward 0 at stableRecoveryRate per second.
|
|
52
|
+
* - SHAKEN: recovers toward 0 at shakenRecoveryRate per second.
|
|
53
|
+
* - PANICKED: no recovery.
|
|
54
|
+
*/
|
|
55
|
+
update(deltaSec) {
|
|
56
|
+
if (deltaSec <= 0)
|
|
57
|
+
return;
|
|
58
|
+
const currentState = this._cachedState;
|
|
59
|
+
if (currentState === MoraleState.PANICKED)
|
|
60
|
+
return;
|
|
61
|
+
const rate = currentState === MoraleState.SHAKEN
|
|
62
|
+
? this.config.shakenRecoveryRate
|
|
63
|
+
: this.config.stableRecoveryRate;
|
|
64
|
+
const recovery = rate * deltaSec;
|
|
65
|
+
this.currentMorale = moveTowardZero(this.currentMorale, recovery);
|
|
66
|
+
this._cachedState = deriveState(this.currentMorale, this.config);
|
|
67
|
+
}
|
|
68
|
+
/** Reset morale to 0 (STABLE). */
|
|
69
|
+
reset() {
|
|
70
|
+
this.currentMorale = 0;
|
|
71
|
+
this._cachedState = deriveState(this.currentMorale, this.config);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Helpers
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
function deriveState(morale, config) {
|
|
78
|
+
if (morale <= config.panicThreshold)
|
|
79
|
+
return MoraleState.PANICKED;
|
|
80
|
+
if (morale <= config.shakenThreshold)
|
|
81
|
+
return MoraleState.SHAKEN;
|
|
82
|
+
return MoraleState.STABLE;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=MoraleStateMachine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoraleStateMachine.js","sourceRoot":"","sources":["../../src/combat/MoraleStateMachine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAeX,MAAM,cAAc,GAAkB;IACpC,eAAe,EAAE,CAAC,GAAG;IACrB,cAAc,EAAE,CAAC,GAAG;IACpB,kBAAkB,EAAE,KAAK;IACzB,kBAAkB,EAAE,IAAI;CACzB,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC;AACtB,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB,MAAM,OAAO,aAAa;IAKxB,YAAY,MAA+B;QAJnC,kBAAa,GAAG,CAAC,CAAC;QAKxB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,uCAAuC;IACvC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,kEAAkE;IAClE,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC,aAAa,GAAG,KAAK,CACxB,IAAI,CAAC,aAAa,GAAG,KAAK,EAC1B,UAAU,EACV,UAAU,CACX,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,QAAgB;QACrB,IAAI,QAAQ,IAAI,CAAC;YAAE,OAAO;QAE1B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAEvC,IAAI,YAAY,KAAK,WAAW,CAAC,QAAQ;YAAE,OAAO;QAElD,MAAM,IAAI,GACR,YAAY,KAAK,WAAW,CAAC,MAAM;YACjC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB;YAChC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAErC,MAAM,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,kCAAkC;IAClC,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;CACF;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,WAAW,CAAC,MAAc,EAAE,MAAqB;IACxD,IAAI,MAAM,IAAI,MAAM,CAAC,cAAc;QAAE,OAAO,WAAW,CAAC,QAAQ,CAAC;IACjE,IAAI,MAAM,IAAI,MAAM,CAAC,eAAe;QAAE,OAAO,WAAW,CAAC,MAAM,CAAC;IAChE,OAAO,WAAW,CAAC,MAAM,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { IDamageInstance, IDamageInstanceParams } from './DamageInstance';
|
|
2
|
+
export { createDamageInstance } from './DamageInstance';
|
|
3
|
+
export { MoraleTracker } from './MoraleStateMachine';
|
|
4
|
+
export type { MoraleState, IMoraleConfig } from './MoraleStateMachine';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/combat/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/combat/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export interface ITickConfig {
|
|
2
|
+
/** Milliseconds between A-Life simulation ticks. */
|
|
3
|
+
readonly intervalMs: number;
|
|
4
|
+
/** Maximum offline NPC brains updated per tick (round-robin). */
|
|
5
|
+
readonly maxBrainUpdatesPerTick: number;
|
|
6
|
+
/** Maximum hostile faction-pair combat resolutions per tick. */
|
|
7
|
+
readonly maxCombatResolutionsPerTick: number;
|
|
8
|
+
/** Wall-clock budget (ms) for a full tick; warns if exceeded. */
|
|
9
|
+
readonly budgetWarningMs: number;
|
|
10
|
+
/** Run redundancy cleanup every N ticks. */
|
|
11
|
+
readonly redundancyCleanupInterval: number;
|
|
12
|
+
/** Game-time delay (ms) after death before an offline NPC is purged. */
|
|
13
|
+
readonly redundancyCleanupDelayMs: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ISimulationConfig {
|
|
16
|
+
/** NPC goes online when closer than this distance (px). */
|
|
17
|
+
readonly onlineRadius: number;
|
|
18
|
+
/** NPC goes offline when farther than this distance (px). */
|
|
19
|
+
readonly offlineRadius: number;
|
|
20
|
+
/** Cell size (px) for the spatial hash grid. */
|
|
21
|
+
readonly spatialGridCellSize: number;
|
|
22
|
+
}
|
|
23
|
+
export interface ITimeConfig {
|
|
24
|
+
/** Game-time acceleration factor. 1 real second = timeFactor game seconds. */
|
|
25
|
+
readonly timeFactor: number;
|
|
26
|
+
/** In-game hour at which the simulation starts (0-23). */
|
|
27
|
+
readonly startHour: number;
|
|
28
|
+
/** First hour considered daytime. */
|
|
29
|
+
readonly dayStartHour: number;
|
|
30
|
+
/** Last hour considered daytime (exclusive). */
|
|
31
|
+
readonly dayEndHour: number;
|
|
32
|
+
}
|
|
33
|
+
export interface ICombatConfig {
|
|
34
|
+
/** Minimum time (ms) between consecutive melee attacks. */
|
|
35
|
+
readonly meleeCooldownMs: number;
|
|
36
|
+
/** Minimum time (ms) before switching between NPC targets. */
|
|
37
|
+
readonly enemyInertiaMs: number;
|
|
38
|
+
}
|
|
39
|
+
/** Morale range is [-1, 1]. All deltas and thresholds use this range. */
|
|
40
|
+
export interface IMoraleConfig {
|
|
41
|
+
/** Morale delta [-1, 0] when an NPC takes a hit. E.g. -0.15. */
|
|
42
|
+
readonly hitPenalty: number;
|
|
43
|
+
/** Morale delta [-1, 0] when a squad ally dies. E.g. -0.25. */
|
|
44
|
+
readonly allyDiedPenalty: number;
|
|
45
|
+
/** Morale delta [-1, 0] when the squad leader dies (replaces allyDiedPenalty). */
|
|
46
|
+
readonly leaderDiedPenalty: number;
|
|
47
|
+
/** Morale delta [0, 1] when this NPC kills an enemy. E.g. 0.2. */
|
|
48
|
+
readonly enemyKilledBonus: number;
|
|
49
|
+
/** Morale delta [-1, 0] during an active surge event. */
|
|
50
|
+
readonly surgePenalty: number;
|
|
51
|
+
/** Passive morale recovery (per second) in SHAKEN state. E.g. 0.01/s. */
|
|
52
|
+
readonly shakenRecoveryRate: number;
|
|
53
|
+
/** Passive morale recovery (per second) in STABLE state (toward 0). E.g. 0.005/s. */
|
|
54
|
+
readonly stableRecoveryRate: number;
|
|
55
|
+
/** Morale threshold [-1, 1] below which the NPC enters SHAKEN. E.g. -0.3. */
|
|
56
|
+
readonly shakenThreshold: number;
|
|
57
|
+
/** Morale threshold [-1, 1] at or below which the NPC enters PANICKED. E.g. -0.7. */
|
|
58
|
+
readonly panicThreshold: number;
|
|
59
|
+
}
|
|
60
|
+
export interface ISpawnConfig {
|
|
61
|
+
/** Default cooldown (ms) after spawning before the same point can spawn again. */
|
|
62
|
+
readonly defaultCooldownMs: number;
|
|
63
|
+
}
|
|
64
|
+
export interface IMemoryConfig {
|
|
65
|
+
/** Confidence decay rate (per ms) for the VISUAL channel. E.g. 0.001 = full decay in ~1s. */
|
|
66
|
+
readonly visualDecayRate: number;
|
|
67
|
+
/** Confidence decay rate (per ms) for the SOUND channel. */
|
|
68
|
+
readonly soundDecayRate: number;
|
|
69
|
+
/** Confidence decay rate (per ms) for the HIT channel. */
|
|
70
|
+
readonly hitDecayRate: number;
|
|
71
|
+
/** Confidence decay rate (per ms) for the DANGER channel. */
|
|
72
|
+
readonly dangerDecayRate: number;
|
|
73
|
+
/** Maximum memory entries kept per channel per NPC. */
|
|
74
|
+
readonly maxEntriesPerChannel: number;
|
|
75
|
+
/** Confidence [0, 1] below which a memory record is pruned. E.g. 0.1. */
|
|
76
|
+
readonly confidenceThreshold: number;
|
|
77
|
+
}
|
|
78
|
+
export interface ISurgeConfig {
|
|
79
|
+
/** Duration (ms) of the warning phase before the surge hits. */
|
|
80
|
+
readonly warningDurationMs: number;
|
|
81
|
+
/** Duration (ms) of the active surge (damage ticking). */
|
|
82
|
+
readonly activeDurationMs: number;
|
|
83
|
+
/** Duration (ms) of the aftermath cooldown after the surge ends. */
|
|
84
|
+
readonly aftermathDurationMs: number;
|
|
85
|
+
/** PSI damage dealt per second to outdoor NPCs during the active phase. */
|
|
86
|
+
readonly psiDamagePerSecond: number;
|
|
87
|
+
}
|
|
88
|
+
export interface IMonsterConfig {
|
|
89
|
+
/** Wind-up duration (ms) before a boar charge releases. */
|
|
90
|
+
readonly chargeWindupMs: number;
|
|
91
|
+
/** Damage multiplier applied when a charge connects. */
|
|
92
|
+
readonly chargeDamageMult: number;
|
|
93
|
+
/** Distance (px) within which a bloodsucker exits stealth. */
|
|
94
|
+
readonly stalkApproachDist: number;
|
|
95
|
+
/** Sprite alpha [0, 1] while fully invisible during STALK state. E.g. 0.08. */
|
|
96
|
+
readonly stalkAlphaInvisible: number;
|
|
97
|
+
/** Wind-up duration (ms) before a snork leap launches. */
|
|
98
|
+
readonly leapWindupMs: number;
|
|
99
|
+
/** Duration (ms) the snork is airborne during a leap. */
|
|
100
|
+
readonly leapAirtimeMs: number;
|
|
101
|
+
/** Channel duration (ms) of the controller PSI attack. */
|
|
102
|
+
readonly psiChannelMs: number;
|
|
103
|
+
}
|
|
104
|
+
export interface ITradeConfig {
|
|
105
|
+
/** Pixel radius within which the player can interact with a trader. */
|
|
106
|
+
readonly interactionRadius: number;
|
|
107
|
+
/** Price modifier for allied factions (< 1 = discount). */
|
|
108
|
+
readonly allyDiscount: number;
|
|
109
|
+
/** How often (ms) trader inventories restock. */
|
|
110
|
+
readonly restockIntervalMs: number;
|
|
111
|
+
}
|
|
112
|
+
export interface IALifeConfig {
|
|
113
|
+
readonly tick: ITickConfig;
|
|
114
|
+
readonly simulation: ISimulationConfig;
|
|
115
|
+
readonly time: ITimeConfig;
|
|
116
|
+
readonly combat: ICombatConfig;
|
|
117
|
+
readonly morale: IMoraleConfig;
|
|
118
|
+
readonly spawn: ISpawnConfig;
|
|
119
|
+
readonly memory: IMemoryConfig;
|
|
120
|
+
readonly surge: ISurgeConfig;
|
|
121
|
+
readonly monster: IMonsterConfig;
|
|
122
|
+
readonly trade: ITradeConfig;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Creates a complete IALifeConfig populated with production-grade defaults.
|
|
126
|
+
*
|
|
127
|
+
* Values are sourced from the original game's Constants module and represent
|
|
128
|
+
* the tuned baseline for the Chornobyl: The Lost Zone simulation.
|
|
129
|
+
*/
|
|
130
|
+
export declare function createDefaultConfig(): IALifeConfig;
|
|
131
|
+
//# sourceMappingURL=ALifeConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ALifeConfig.d.ts","sourceRoot":"","sources":["../../src/config/ALifeConfig.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,gEAAgE;IAChE,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C,iEAAiE;IACjE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,4CAA4C;IAC5C,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,gDAAgD;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,kFAAkF;IAClF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,qFAAqF;IACrF,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,qFAAqF;IACrF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,6FAA6F;IAC7F,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,4DAA4D;IAC5D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,uDAAuD;IACvD,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,yEAAyE;IACzE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,0DAA0D;IAC1D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,oEAAoE;IACpE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,wDAAwD;IACxD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,iDAAiD;IACjD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAMD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,CA6ElD"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// IALifeConfig — all tunable A-Life constants grouped by domain.
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Default factory
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
/**
|
|
8
|
+
* Creates a complete IALifeConfig populated with production-grade defaults.
|
|
9
|
+
*
|
|
10
|
+
* Values are sourced from the original game's Constants module and represent
|
|
11
|
+
* the tuned baseline for the Chornobyl: The Lost Zone simulation.
|
|
12
|
+
*/
|
|
13
|
+
export function createDefaultConfig() {
|
|
14
|
+
return {
|
|
15
|
+
tick: {
|
|
16
|
+
intervalMs: 5000,
|
|
17
|
+
maxBrainUpdatesPerTick: 20,
|
|
18
|
+
maxCombatResolutionsPerTick: 10,
|
|
19
|
+
budgetWarningMs: 50,
|
|
20
|
+
redundancyCleanupInterval: 3,
|
|
21
|
+
redundancyCleanupDelayMs: 30000,
|
|
22
|
+
},
|
|
23
|
+
simulation: {
|
|
24
|
+
onlineRadius: 600,
|
|
25
|
+
offlineRadius: 800,
|
|
26
|
+
spatialGridCellSize: 200,
|
|
27
|
+
},
|
|
28
|
+
time: {
|
|
29
|
+
timeFactor: 10,
|
|
30
|
+
startHour: 8,
|
|
31
|
+
dayStartHour: 6,
|
|
32
|
+
dayEndHour: 21,
|
|
33
|
+
},
|
|
34
|
+
combat: {
|
|
35
|
+
meleeCooldownMs: 1000,
|
|
36
|
+
enemyInertiaMs: 3000,
|
|
37
|
+
},
|
|
38
|
+
morale: {
|
|
39
|
+
hitPenalty: -0.15,
|
|
40
|
+
allyDiedPenalty: -0.25,
|
|
41
|
+
leaderDiedPenalty: -0.4,
|
|
42
|
+
enemyKilledBonus: 0.2,
|
|
43
|
+
surgePenalty: -0.3,
|
|
44
|
+
shakenRecoveryRate: 0.01,
|
|
45
|
+
stableRecoveryRate: 0.005,
|
|
46
|
+
shakenThreshold: -0.3,
|
|
47
|
+
panicThreshold: -0.7,
|
|
48
|
+
},
|
|
49
|
+
spawn: {
|
|
50
|
+
defaultCooldownMs: 30000,
|
|
51
|
+
},
|
|
52
|
+
memory: {
|
|
53
|
+
visualDecayRate: 0.001,
|
|
54
|
+
soundDecayRate: 0.003,
|
|
55
|
+
hitDecayRate: 0.0005,
|
|
56
|
+
dangerDecayRate: 0.002,
|
|
57
|
+
maxEntriesPerChannel: 20,
|
|
58
|
+
confidenceThreshold: 0.1,
|
|
59
|
+
},
|
|
60
|
+
surge: {
|
|
61
|
+
warningDurationMs: 30000,
|
|
62
|
+
activeDurationMs: 60000,
|
|
63
|
+
aftermathDurationMs: 15000,
|
|
64
|
+
psiDamagePerSecond: 5,
|
|
65
|
+
},
|
|
66
|
+
monster: {
|
|
67
|
+
chargeWindupMs: 600,
|
|
68
|
+
chargeDamageMult: 2,
|
|
69
|
+
stalkApproachDist: 80,
|
|
70
|
+
stalkAlphaInvisible: 0.08,
|
|
71
|
+
leapWindupMs: 400,
|
|
72
|
+
leapAirtimeMs: 350,
|
|
73
|
+
psiChannelMs: 2000,
|
|
74
|
+
},
|
|
75
|
+
trade: {
|
|
76
|
+
interactionRadius: 150,
|
|
77
|
+
allyDiscount: 0.8,
|
|
78
|
+
restockIntervalMs: 300000,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=ALifeConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ALifeConfig.js","sourceRoot":"","sources":["../../src/config/ALifeConfig.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,iEAAiE;AACjE,8EAA8E;AA4I9E,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,IAAI,EAAE;YACJ,UAAU,EAAE,IAAK;YACjB,sBAAsB,EAAE,EAAE;YAC1B,2BAA2B,EAAE,EAAE;YAC/B,eAAe,EAAE,EAAE;YACnB,yBAAyB,EAAE,CAAC;YAC5B,wBAAwB,EAAE,KAAM;SACjC;QAED,UAAU,EAAE;YACV,YAAY,EAAE,GAAG;YACjB,aAAa,EAAE,GAAG;YAClB,mBAAmB,EAAE,GAAG;SACzB;QAED,IAAI,EAAE;YACJ,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,EAAE;SACf;QAED,MAAM,EAAE;YACN,eAAe,EAAE,IAAK;YACtB,cAAc,EAAE,IAAK;SACtB;QAED,MAAM,EAAE;YACN,UAAU,EAAE,CAAC,IAAI;YACjB,eAAe,EAAE,CAAC,IAAI;YACtB,iBAAiB,EAAE,CAAC,GAAG;YACvB,gBAAgB,EAAE,GAAG;YACrB,YAAY,EAAE,CAAC,GAAG;YAClB,kBAAkB,EAAE,IAAI;YACxB,kBAAkB,EAAE,KAAK;YACzB,eAAe,EAAE,CAAC,GAAG;YACrB,cAAc,EAAE,CAAC,GAAG;SACrB;QAED,KAAK,EAAE;YACL,iBAAiB,EAAE,KAAM;SAC1B;QAED,MAAM,EAAE;YACN,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,MAAM;YACpB,eAAe,EAAE,KAAK;YACtB,oBAAoB,EAAE,EAAE;YACxB,mBAAmB,EAAE,GAAG;SACzB;QAED,KAAK,EAAE;YACL,iBAAiB,EAAE,KAAM;YACzB,gBAAgB,EAAE,KAAM;YACxB,mBAAmB,EAAE,KAAM;YAC3B,kBAAkB,EAAE,CAAC;SACtB;QAED,OAAO,EAAE;YACP,cAAc,EAAE,GAAG;YACnB,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,EAAE;YACrB,mBAAmB,EAAE,IAAI;YACzB,YAAY,EAAE,GAAG;YACjB,aAAa,EAAE,GAAG;YAClB,YAAY,EAAE,IAAK;SACpB;QAED,KAAK,EAAE;YACL,iBAAiB,EAAE,GAAG;YACtB,YAAY,EAAE,GAAG;YACjB,iBAAiB,EAAE,MAAO;SAC3B;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { EventBus } from '../events/EventBus';
|
|
2
|
+
import type { ALifeEventPayloads } from '../events/ALifeEvents';
|
|
3
|
+
import { Clock } from './Clock';
|
|
4
|
+
import type { IClockConfig, IClockState } from './Clock';
|
|
5
|
+
import { SpatialGrid } from './SpatialGrid';
|
|
6
|
+
import type { ILoggerConfig } from '../logger/Logger';
|
|
7
|
+
import { type IALifeConfig } from '../config/ALifeConfig';
|
|
8
|
+
import type { IEntityAdapter } from '../ports/IEntityAdapter';
|
|
9
|
+
import type { IPlayerPositionProvider } from '../ports/IPlayerPositionProvider';
|
|
10
|
+
import type { IEntityFactory } from '../ports/IEntityFactory';
|
|
11
|
+
import type { ILogger } from '../ports/ILogger';
|
|
12
|
+
import type { IALifePlugin } from '../plugins/IALifePlugin';
|
|
13
|
+
import type { PluginToken } from '../plugins/PluginToken';
|
|
14
|
+
import type { Vec2 } from './Vec2';
|
|
15
|
+
import { PortRegistry, type PortToken } from './PortRegistry';
|
|
16
|
+
import { DiagnosticsCollector } from './Diagnostics';
|
|
17
|
+
import type { IDevToolsSnapshot, IDevToolsConfig } from './DevToolsInspector';
|
|
18
|
+
/** Optional overrides for kernel sub-systems. */
|
|
19
|
+
export interface IALifeKernelConfig {
|
|
20
|
+
readonly config?: Partial<IALifeConfig>;
|
|
21
|
+
readonly logger?: ILoggerConfig;
|
|
22
|
+
readonly clock?: Omit<IClockConfig, 'onHourChanged' | 'onDayNightChanged'>;
|
|
23
|
+
}
|
|
24
|
+
/** @deprecated Use IALifeKernelConfig */
|
|
25
|
+
export type IALifeKernelOptions = IALifeKernelConfig;
|
|
26
|
+
/** Current serialisation format version. */
|
|
27
|
+
export declare const KERNEL_STATE_VERSION = 1;
|
|
28
|
+
/**
|
|
29
|
+
* Migration function that transforms kernel state from one version to the next.
|
|
30
|
+
*
|
|
31
|
+
* @param state - The kernel state object to migrate.
|
|
32
|
+
* @returns The migrated state for the next version.
|
|
33
|
+
*/
|
|
34
|
+
export type StateMigration = (state: IALifeKernelState) => IALifeKernelState;
|
|
35
|
+
/** Wrapper for per-plugin state with version tag. */
|
|
36
|
+
export interface IPluginStateCapsule {
|
|
37
|
+
readonly version?: number;
|
|
38
|
+
readonly state: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
export interface IALifeKernelState {
|
|
41
|
+
readonly version: number;
|
|
42
|
+
readonly clock: IClockState;
|
|
43
|
+
readonly tick: number;
|
|
44
|
+
readonly plugins?: Readonly<Record<string, IPluginStateCapsule>>;
|
|
45
|
+
}
|
|
46
|
+
export declare class ALifeKernel {
|
|
47
|
+
readonly events: EventBus<ALifeEventPayloads>;
|
|
48
|
+
readonly portRegistry: PortRegistry;
|
|
49
|
+
private readonly plugins;
|
|
50
|
+
private pluginOrder;
|
|
51
|
+
private readonly migrations;
|
|
52
|
+
private _clock;
|
|
53
|
+
private _logger;
|
|
54
|
+
private _spatialGrid;
|
|
55
|
+
private readonly config;
|
|
56
|
+
private readonly loggerConfig;
|
|
57
|
+
private readonly clockConfig;
|
|
58
|
+
private initialized;
|
|
59
|
+
private _running;
|
|
60
|
+
private _paused;
|
|
61
|
+
private _tick;
|
|
62
|
+
/**
|
|
63
|
+
* Create a new A-Life kernel.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* const kernel = new ALifeKernel();
|
|
68
|
+
* kernel.provide(Ports.EntityAdapter, myAdapter);
|
|
69
|
+
* kernel.use(new SimulationPlugin());
|
|
70
|
+
* kernel.init();
|
|
71
|
+
* kernel.start();
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
constructor(options?: IALifeKernelConfig);
|
|
75
|
+
/** Register a port adapter by token. Must be called before `init()`. */
|
|
76
|
+
provide<T>(token: PortToken<T>, impl: T): this;
|
|
77
|
+
/**
|
|
78
|
+
* Install a plugin. Must be called before `init()`.
|
|
79
|
+
*
|
|
80
|
+
* Plugins extend the kernel with domain-specific registries and logic.
|
|
81
|
+
* Each plugin is identified by its `name` property — duplicates throw.
|
|
82
|
+
*/
|
|
83
|
+
use(plugin: IALifePlugin): this;
|
|
84
|
+
/** Retrieve an installed plugin by typed token or name string. */
|
|
85
|
+
getPlugin<T extends IALifePlugin>(token: PluginToken<T>): T;
|
|
86
|
+
getPlugin<T extends IALifePlugin>(name: string): T;
|
|
87
|
+
/** Check whether a plugin is installed. */
|
|
88
|
+
hasPlugin(name: string): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Register a state migration from one version to the next.
|
|
91
|
+
*
|
|
92
|
+
* When `restoreState()` receives a save with `state.version < KERNEL_STATE_VERSION`,
|
|
93
|
+
* the kernel applies registered migrations in sequence to bring the state up to date.
|
|
94
|
+
*
|
|
95
|
+
* @param fromVersion - The version this migration upgrades FROM (migrates to fromVersion + 1).
|
|
96
|
+
* @param migration - A function that transforms the state.
|
|
97
|
+
*/
|
|
98
|
+
registerMigration(fromVersion: number, migration: StateMigration): this;
|
|
99
|
+
/**
|
|
100
|
+
* Validate configuration, create subsystems, and initialize plugins
|
|
101
|
+
* in dependency order.
|
|
102
|
+
*
|
|
103
|
+
* Returns a {@link DiagnosticsCollector} with all warnings/infos.
|
|
104
|
+
* Throws {@link ALifeValidationError} if any required port is missing
|
|
105
|
+
* or a plugin hard-dependency is unresolved.
|
|
106
|
+
*/
|
|
107
|
+
init(): DiagnosticsCollector;
|
|
108
|
+
/**
|
|
109
|
+
* Start the simulation — enables frame-based `update()`.
|
|
110
|
+
* Must be called after `init()`.
|
|
111
|
+
*/
|
|
112
|
+
start(): void;
|
|
113
|
+
/**
|
|
114
|
+
* Advance the simulation by `deltaMs` real milliseconds.
|
|
115
|
+
* Requires `init()` + `start()`. No-op when paused.
|
|
116
|
+
*/
|
|
117
|
+
update(deltaMs: number): void;
|
|
118
|
+
/**
|
|
119
|
+
* Advance the simulation by a fixed number of ticks at the configured
|
|
120
|
+
* interval. Does not require `start()` — ideal for deterministic tests.
|
|
121
|
+
*
|
|
122
|
+
* @param count - Number of ticks to execute (default: 1).
|
|
123
|
+
*/
|
|
124
|
+
step(count?: number): void;
|
|
125
|
+
/** Pause the simulation — `update()` becomes a no-op, clock freezes. */
|
|
126
|
+
pause(): void;
|
|
127
|
+
/** Resume after a `pause()`. */
|
|
128
|
+
resume(): void;
|
|
129
|
+
/** Release all resources and subscriptions. */
|
|
130
|
+
destroy(): void;
|
|
131
|
+
get clock(): Clock;
|
|
132
|
+
get logger(): ILogger;
|
|
133
|
+
get spatialGrid(): SpatialGrid<{
|
|
134
|
+
id: string;
|
|
135
|
+
position: Vec2;
|
|
136
|
+
}>;
|
|
137
|
+
get entityAdapter(): IEntityAdapter;
|
|
138
|
+
get playerPosition(): IPlayerPositionProvider;
|
|
139
|
+
get entityFactory(): IEntityFactory;
|
|
140
|
+
get currentConfig(): IALifeConfig;
|
|
141
|
+
get tick(): number;
|
|
142
|
+
get isInitialized(): boolean;
|
|
143
|
+
get isRunning(): boolean;
|
|
144
|
+
get isPaused(): boolean;
|
|
145
|
+
serialize(): IALifeKernelState;
|
|
146
|
+
restoreState(state: IALifeKernelState): void;
|
|
147
|
+
/**
|
|
148
|
+
* Create a runtime snapshot of the kernel state for developer tooling.
|
|
149
|
+
*
|
|
150
|
+
* @param config - Optional configuration to control what data is included.
|
|
151
|
+
* @returns A plain, JSON-serialisable snapshot.
|
|
152
|
+
*/
|
|
153
|
+
inspect(config?: IDevToolsConfig): IDevToolsSnapshot;
|
|
154
|
+
private validatePorts;
|
|
155
|
+
private validatePluginDeps;
|
|
156
|
+
private validateConfig;
|
|
157
|
+
private topologicalSort;
|
|
158
|
+
private collectPluginState;
|
|
159
|
+
private createSubsystems;
|
|
160
|
+
private ensureInitialized;
|
|
161
|
+
private ensureRunning;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=ALifeKernel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ALifeKernel.d.ts","sourceRoot":"","sources":["../../src/core/ALifeKernel.ts"],"names":[],"mappings":"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"}
|