@v12-engine/engine 0.1.1 → 0.4.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/dist/abilities/amounts.d.ts +28 -0
- package/dist/abilities/amounts.js +74 -0
- package/dist/abilities/amounts.js.map +1 -0
- package/dist/abilities/buffs.d.ts +106 -6
- package/dist/abilities/buffs.js +443 -0
- package/dist/abilities/buffs.js.map +1 -0
- package/dist/abilities/castTold.d.ts +2 -0
- package/dist/abilities/castTold.js +66 -0
- package/dist/abilities/castTold.js.map +1 -0
- package/dist/abilities/chance.d.ts +38 -0
- package/dist/abilities/chance.js +77 -0
- package/dist/abilities/chance.js.map +1 -0
- package/dist/abilities/charges.d.ts +18 -0
- package/dist/abilities/charges.js +101 -0
- package/dist/abilities/charges.js.map +1 -0
- package/dist/abilities/control.d.ts +28 -0
- package/dist/abilities/control.js +113 -0
- package/dist/abilities/control.js.map +1 -0
- package/dist/abilities/dispel.js +51 -0
- package/dist/abilities/dispel.js.map +1 -0
- package/dist/abilities/effectFields.d.ts +1 -1
- package/dist/abilities/effectFields.js +676 -0
- package/dist/abilities/effectFields.js.map +1 -0
- package/dist/abilities/effectIndex.d.ts +27 -0
- package/dist/abilities/effectIndex.js +64 -0
- package/dist/abilities/effectIndex.js.map +1 -0
- package/dist/abilities/effects/buff.d.ts +9 -3
- package/dist/abilities/effects/buff.js +84 -0
- package/dist/abilities/effects/buff.js.map +1 -0
- package/dist/abilities/effects/conditions.d.ts +2 -0
- package/dist/abilities/effects/conditions.js +41 -0
- package/dist/abilities/effects/conditions.js.map +1 -0
- package/dist/abilities/effects/core.js +54 -0
- package/dist/abilities/effects/core.js.map +1 -0
- package/dist/abilities/effects/damage.d.ts +1 -1
- package/dist/abilities/effects/damage.js +43 -0
- package/dist/abilities/effects/damage.js.map +1 -0
- package/dist/abilities/effects/heal.d.ts +2 -2
- package/dist/abilities/effects/heal.js +51 -0
- package/dist/abilities/effects/heal.js.map +1 -0
- package/dist/abilities/effects/missile.d.ts +13 -1
- package/dist/abilities/effects/missile.js +104 -0
- package/dist/abilities/effects/missile.js.map +1 -0
- package/dist/abilities/effects/morph.d.ts +5 -0
- package/dist/abilities/effects/morph.js +43 -0
- package/dist/abilities/effects/morph.js.map +1 -0
- package/dist/abilities/effects/moves.d.ts +16 -4
- package/dist/abilities/effects/moves.js +212 -0
- package/dist/abilities/effects/moves.js.map +1 -0
- package/dist/abilities/effects/passives.d.ts +19 -9
- package/dist/abilities/effects/passives.js +131 -0
- package/dist/abilities/effects/passives.js.map +1 -0
- package/dist/abilities/effects/proxy.d.ts +5 -0
- package/dist/abilities/effects/proxy.js +60 -0
- package/dist/abilities/effects/proxy.js.map +1 -0
- package/dist/abilities/effects/sight.d.ts +2 -2
- package/dist/abilities/effects/sight.js +39 -0
- package/dist/abilities/effects/sight.js.map +1 -0
- package/dist/abilities/effects/spawn.d.ts +5 -2
- package/dist/abilities/effects/spawn.js +40 -0
- package/dist/abilities/effects/spawn.js.map +1 -0
- package/dist/abilities/effects/timed.d.ts +2 -2
- package/dist/abilities/effects/timed.js +96 -0
- package/dist/abilities/effects/timed.js.map +1 -0
- package/dist/abilities/effects/trade.d.ts +1 -1
- package/dist/abilities/effects/trade.js +25 -0
- package/dist/abilities/effects/trade.js.map +1 -0
- package/dist/abilities/effects.d.ts +97 -23
- package/dist/abilities/effects.js +860 -0
- package/dist/abilities/effects.js.map +1 -0
- package/dist/abilities/land.d.ts +38 -4
- package/dist/abilities/land.js +189 -0
- package/dist/abilities/land.js.map +1 -0
- package/dist/abilities/recast.d.ts +45 -0
- package/dist/abilities/recast.js +118 -0
- package/dist/abilities/recast.js.map +1 -0
- package/dist/abilities/scaled.js +40 -0
- package/dist/abilities/scaled.js.map +1 -0
- package/dist/abilities/screen.d.ts +6 -0
- package/dist/abilities/screen.js +83 -0
- package/dist/abilities/screen.js.map +1 -0
- package/dist/abilities/shapes.d.ts +66 -0
- package/dist/abilities/shapes.js +122 -0
- package/dist/abilities/shapes.js.map +1 -0
- package/dist/abilities/text.d.ts +14 -2
- package/dist/abilities/text.js +204 -0
- package/dist/abilities/text.js.map +1 -0
- package/dist/abilities/triggers.d.ts +98 -0
- package/dist/abilities/triggers.js +351 -0
- package/dist/abilities/triggers.js.map +1 -0
- package/dist/abilityChanges.d.ts +131 -0
- package/dist/abilityChanges.js +345 -0
- package/dist/abilityChanges.js.map +1 -0
- package/dist/ai/area.d.ts +4 -1
- package/dist/ai/brain.d.ts +4 -1
- package/dist/ai/brain.js +844 -0
- package/dist/ai/brain.js.map +1 -0
- package/dist/ai/budget.js +74 -0
- package/dist/ai/budget.js.map +1 -0
- package/dist/ai/checks.d.ts +9 -1
- package/dist/ai/checks.js +242 -0
- package/dist/ai/checks.js.map +1 -0
- package/dist/ai/computer.d.ts +11 -4
- package/dist/ai/computer.js +251 -0
- package/dist/ai/computer.js.map +1 -0
- package/dist/ai/defence.d.ts +4 -0
- package/dist/ai/defence.js +430 -0
- package/dist/ai/defence.js.map +1 -0
- package/dist/ai/define.d.ts +3 -2
- package/dist/ai/define.js +31 -0
- package/dist/ai/define.js.map +1 -0
- package/dist/ai/economy.d.ts +10 -7
- package/dist/ai/economy.js +780 -0
- package/dist/ai/economy.js.map +1 -0
- package/dist/ai/geometry.js +38 -0
- package/dist/ai/geometry.js.map +1 -0
- package/dist/ai/goals.d.ts +1 -0
- package/dist/ai/goals.js +560 -0
- package/dist/ai/goals.js.map +1 -0
- package/dist/ai/knowledge.d.ts +72 -7
- package/dist/ai/knowledge.js +804 -0
- package/dist/ai/knowledge.js.map +1 -0
- package/dist/ai/lanes.d.ts +10 -2
- package/dist/ai/lanes.js +715 -0
- package/dist/ai/lanes.js.map +1 -0
- package/dist/ai/melee/build.js +264 -0
- package/dist/ai/melee/build.js.map +1 -0
- package/dist/ai/melee/goals.d.ts +7 -0
- package/dist/ai/melee/goals.js +720 -0
- package/dist/ai/melee/goals.js.map +1 -0
- package/dist/ai/melee/heroes.js +68 -0
- package/dist/ai/melee/heroes.js.map +1 -0
- package/dist/ai/melee/index.d.ts +1 -1
- package/dist/ai/melee/index.js +51 -0
- package/dist/ai/melee/index.js.map +1 -0
- package/dist/ai/melee/production.js +29 -0
- package/dist/ai/melee/production.js.map +1 -0
- package/dist/ai/melee/surrender.js +64 -0
- package/dist/ai/melee/surrender.js.map +1 -0
- package/dist/ai/micro.d.ts +9 -0
- package/dist/ai/micro.js +1316 -0
- package/dist/ai/micro.js.map +1 -0
- package/dist/ai/mission.d.ts +9 -2
- package/dist/ai/mission.js +538 -0
- package/dist/ai/mission.js.map +1 -0
- package/dist/ai/missionRules.d.ts +1 -1
- package/dist/ai/missionRules.js +26 -0
- package/dist/ai/missionRules.js.map +1 -0
- package/dist/ai/module.d.ts +6 -2
- package/dist/ai/module.js +37 -0
- package/dist/ai/module.js.map +1 -0
- package/dist/ai/options.d.ts +3 -3
- package/dist/ai/plans/build.d.ts +20 -1
- package/dist/ai/plans/build.js +608 -0
- package/dist/ai/plans/build.js.map +1 -0
- package/dist/ai/plans/placement.d.ts +4 -1
- package/dist/ai/plans/placement.js +295 -0
- package/dist/ai/plans/placement.js.map +1 -0
- package/dist/ai/plans/plans.d.ts +9 -0
- package/dist/ai/plans/plans.js +110 -0
- package/dist/ai/plans/plans.js.map +1 -0
- package/dist/ai/plans/production.d.ts +14 -2
- package/dist/ai/plans/production.js +434 -0
- package/dist/ai/plans/production.js.map +1 -0
- package/dist/ai/plans/purse.d.ts +6 -3
- package/dist/ai/plans/purse.js +139 -0
- package/dist/ai/plans/purse.js.map +1 -0
- package/dist/ai/plans/tech.d.ts +6 -0
- package/dist/ai/plans/tech.js +122 -0
- package/dist/ai/plans/tech.js.map +1 -0
- package/dist/ai/profiles.d.ts +4 -4
- package/dist/{profiles-B3NS9jwk.js → ai/profiles.js} +3 -98
- package/dist/ai/profiles.js.map +1 -0
- package/dist/ai/reach.js +54 -0
- package/dist/ai/reach.js.map +1 -0
- package/dist/ai/report.d.ts +8 -0
- package/dist/ai/report.js +87 -0
- package/dist/ai/report.js.map +1 -0
- package/dist/ai/roles.d.ts +4 -0
- package/dist/ai/roles.js +207 -0
- package/dist/ai/roles.js.map +1 -0
- package/dist/ai/rules.d.ts +8 -2
- package/dist/ai/rules.js +416 -0
- package/dist/ai/rules.js.map +1 -0
- package/dist/ai/scouting.d.ts +6 -0
- package/dist/ai/scouting.js +324 -0
- package/dist/ai/scouting.js.map +1 -0
- package/dist/ai/settings.js +99 -0
- package/dist/ai/settings.js.map +1 -0
- package/dist/ai/squads.d.ts +21 -2
- package/dist/ai/squads.js +916 -0
- package/dist/ai/squads.js.map +1 -0
- package/dist/ai/strength.js +320 -0
- package/dist/ai/strength.js.map +1 -0
- package/dist/ai/task.d.ts +3 -1
- package/dist/ai/task.js +17 -0
- package/dist/ai/task.js.map +1 -0
- package/dist/ai/tasks/attack.js +24 -0
- package/dist/ai/tasks/attack.js.map +1 -0
- package/dist/ai/tasks/capture.d.ts +3 -3
- package/dist/ai/tasks/capture.js +37 -0
- package/dist/ai/tasks/capture.js.map +1 -0
- package/dist/ai/tasks/creep.js +29 -0
- package/dist/ai/tasks/creep.js.map +1 -0
- package/dist/ai/tasks/defend.js +61 -0
- package/dist/ai/tasks/defend.js.map +1 -0
- package/dist/ai/tasks/drop.js +81 -0
- package/dist/ai/tasks/drop.js.map +1 -0
- package/dist/ai/tasks/escort.js +59 -0
- package/dist/ai/tasks/escort.js.map +1 -0
- package/dist/ai/tasks/gather.js +48 -0
- package/dist/ai/tasks/gather.js.map +1 -0
- package/dist/ai/tasks/harass.js +39 -0
- package/dist/ai/tasks/harass.js.map +1 -0
- package/dist/ai/tasks/hold.js +32 -0
- package/dist/ai/tasks/hold.js.map +1 -0
- package/dist/ai/tasks/index.js +34 -0
- package/dist/ai/tasks/index.js.map +1 -0
- package/dist/ai/tasks/move.js +26 -0
- package/dist/ai/tasks/move.js.map +1 -0
- package/dist/ai/tasks/patrol.js +59 -0
- package/dist/ai/tasks/patrol.js.map +1 -0
- package/dist/ai/tasks/retreat.js +28 -0
- package/dist/ai/tasks/retreat.js.map +1 -0
- package/dist/ai/tasks/scout.js +73 -0
- package/dist/ai/tasks/scout.js.map +1 -0
- package/dist/ai/tasks/shared.d.ts +1 -1
- package/dist/ai/tasks/shared.js +137 -0
- package/dist/ai/tasks/shared.js.map +1 -0
- package/dist/ai/team.d.ts +18 -1
- package/dist/ai/team.js +492 -0
- package/dist/ai/team.js.map +1 -0
- package/dist/ai/threat.d.ts +6 -0
- package/dist/ai/threat.js +206 -0
- package/dist/ai/threat.js.map +1 -0
- package/dist/ai/view.d.ts +21 -7
- package/dist/ai/view.js +677 -0
- package/dist/ai/view.js.map +1 -0
- package/dist/ai/waves.d.ts +6 -0
- package/dist/ai/waves.js +410 -0
- package/dist/ai/waves.js.map +1 -0
- package/dist/ai.js +54 -6239
- package/dist/aiTesting.d.ts +6 -3
- package/dist/aiTesting.js +229 -0
- package/dist/aiTesting.js.map +1 -0
- package/dist/areas.d.ts +4 -1
- package/dist/areas.js +295 -0
- package/dist/areas.js.map +1 -0
- package/dist/attacks.d.ts +3 -3
- package/dist/attacks.js +127 -0
- package/dist/attacks.js.map +1 -0
- package/dist/burning.d.ts +267 -0
- package/dist/burning.js +795 -0
- package/dist/burning.js.map +1 -0
- package/dist/bytes.js +21 -0
- package/dist/bytes.js.map +1 -0
- package/dist/callings.d.ts +71 -0
- package/dist/callings.js +157 -0
- package/dist/callings.js.map +1 -0
- package/dist/cameraOrders.d.ts +78 -0
- package/dist/cameraOrders.js +114 -0
- package/dist/cameraOrders.js.map +1 -0
- package/dist/camps.d.ts +70 -4
- package/dist/camps.js +501 -0
- package/dist/camps.js.map +1 -0
- package/dist/capture.d.ts +15 -3
- package/dist/capture.js +304 -0
- package/dist/capture.js.map +1 -0
- package/dist/cellLayers.d.ts +78 -13
- package/dist/cellLayers.js +275 -0
- package/dist/cellLayers.js.map +1 -0
- package/dist/cellPatches.d.ts +24 -0
- package/dist/cellPatches.js +73 -0
- package/dist/cellPatches.js.map +1 -0
- package/dist/cinematics.d.ts +10 -5
- package/dist/cinematics.js +161 -0
- package/dist/cinematics.js.map +1 -0
- package/dist/clock.d.ts +2 -2
- package/dist/clock.js +78 -0
- package/dist/clock.js.map +1 -0
- package/dist/commands.d.ts +36 -4
- package/dist/commands.js +636 -0
- package/dist/commands.js.map +1 -0
- package/dist/components.d.ts +31 -10
- package/dist/components.js +74 -0
- package/dist/components.js.map +1 -0
- package/dist/computers.d.ts +4 -4
- package/dist/computers.js +194 -0
- package/dist/computers.js.map +1 -0
- package/dist/concealment.d.ts +25 -2
- package/dist/concealment.js +409 -0
- package/dist/concealment.js.map +1 -0
- package/dist/coreComponents.js +130 -0
- package/dist/coreComponents.js.map +1 -0
- package/dist/createGame.d.ts +306 -0
- package/dist/createGame.js +405 -0
- package/dist/createGame.js.map +1 -0
- package/dist/dashing.d.ts +18 -2
- package/dist/dashing.js +41 -0
- package/dist/dashing.js.map +1 -0
- package/dist/debug.d.ts +8 -0
- package/dist/debug.js +5 -3
- package/dist/debug2.js +76 -0
- package/dist/debug2.js.map +1 -0
- package/dist/debugCommands.d.ts +6 -6
- package/dist/debugCommands.js +537 -0
- package/dist/debugCommands.js.map +1 -0
- package/dist/debugging.d.ts +1 -0
- package/dist/defaultSets.d.ts +183 -0
- package/dist/defaultSets.js +216 -0
- package/dist/defaultSets.js.map +1 -0
- package/dist/definitions.d.ts +6 -0
- package/dist/definitions.js +78 -0
- package/dist/definitions.js.map +1 -0
- package/dist/defs.d.ts +1895 -165
- package/dist/defs.js +380 -0
- package/dist/defs.js.map +1 -0
- package/dist/denying.d.ts +4 -4
- package/dist/denying.js +106 -0
- package/dist/denying.js.map +1 -0
- package/dist/destructibles.d.ts +2 -2
- package/dist/destructibles.js +36 -0
- package/dist/destructibles.js.map +1 -0
- package/dist/determinism.d.ts +4 -4
- package/dist/determinism.js +247 -0
- package/dist/determinism.js.map +1 -0
- package/dist/dialog.d.ts +17 -2
- package/dist/dialog.js +108 -0
- package/dist/dialog.js.map +1 -0
- package/dist/effectRefs.js +28 -0
- package/dist/effectRefs.js.map +1 -0
- package/dist/effects.d.ts +27 -11
- package/dist/effects.js +110 -0
- package/dist/effects.js.map +1 -0
- package/dist/endings.d.ts +1 -1
- package/dist/endings.js +78 -0
- package/dist/endings.js.map +1 -0
- package/dist/engagement.d.ts +40 -6
- package/dist/engagement.js +530 -0
- package/dist/engagement.js.map +1 -0
- package/dist/engineEvents.d.ts +72 -9
- package/dist/engineEvents.js +520 -0
- package/dist/engineEvents.js.map +1 -0
- package/dist/entity.d.ts +275 -26
- package/dist/entity.js +441 -0
- package/dist/entity.js.map +1 -0
- package/dist/entityIndex.d.ts +10 -3
- package/dist/entityIndex.js +149 -0
- package/dist/entityIndex.js.map +1 -0
- package/dist/errors.d.ts +6 -2
- package/dist/errors.js +59 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +11 -5
- package/dist/events.js +158 -0
- package/dist/events.js.map +1 -0
- package/dist/exactMath.js +273 -0
- package/dist/exactMath.js.map +1 -0
- package/dist/features.d.ts +1 -1
- package/dist/features.js +127 -0
- package/dist/features.js.map +1 -0
- package/dist/fields.d.ts +25 -5
- package/dist/fields.js +140 -0
- package/dist/fields.js.map +1 -0
- package/dist/fixture.d.ts +3 -3
- package/dist/fixture.js +512 -0
- package/dist/fixture.js.map +1 -0
- package/dist/fog.d.ts +26 -3
- package/dist/fog.js +333 -0
- package/dist/fog.js.map +1 -0
- package/dist/foliage.d.ts +476 -0
- package/dist/foliage.js +1478 -0
- package/dist/foliage.js.map +1 -0
- package/dist/foliageDebug.d.ts +57 -0
- package/dist/foliageDebug.js +172 -0
- package/dist/foliageDebug.js.map +1 -0
- package/dist/foliageRegrowth.d.ts +20 -0
- package/dist/foliageRegrowth.js +332 -0
- package/dist/foliageRegrowth.js.map +1 -0
- package/dist/formState.d.ts +67 -0
- package/dist/formState.js +65 -0
- package/dist/formState.js.map +1 -0
- package/dist/formation.d.ts +46 -8
- package/dist/formation.js +297 -0
- package/dist/formation.js.map +1 -0
- package/dist/forms.d.ts +58 -0
- package/dist/forms.js +146 -0
- package/dist/forms.js.map +1 -0
- package/dist/friendlyFire.d.ts +2 -2
- package/dist/friendlyFire.js +37 -0
- package/dist/friendlyFire.js.map +1 -0
- package/dist/game.d.ts +141 -48
- package/dist/game.js +834 -0
- package/dist/game.js.map +1 -0
- package/dist/gameData.d.ts +96 -22
- package/dist/gameData.js +1690 -0
- package/dist/gameData.js.map +1 -0
- package/dist/gameFiles.d.ts +3 -3
- package/dist/gameFiles.js +14 -0
- package/dist/gameFiles.js.map +1 -0
- package/dist/gates.js +92 -0
- package/dist/gates.js.map +1 -0
- package/dist/generate.d.ts +28 -1
- package/dist/generate.js +1062 -0
- package/dist/generate.js.map +1 -0
- package/dist/generateWorker.d.ts +7 -3
- package/dist/generateWorker.js +86 -0
- package/dist/generateWorker.js.map +1 -0
- package/dist/grid.d.ts +9 -0
- package/dist/grid.js +102 -0
- package/dist/grid.js.map +1 -0
- package/dist/ground.d.ts +17 -1
- package/dist/ground.js +375 -0
- package/dist/ground.js.map +1 -0
- package/dist/groundObjects.d.ts +70 -0
- package/dist/groundObjects.js +371 -0
- package/dist/groundObjects.js.map +1 -0
- package/dist/groundSpeed.d.ts +20 -3
- package/dist/groundSpeed.js +117 -0
- package/dist/groundSpeed.js.map +1 -0
- package/dist/hero.d.ts +126 -10
- package/dist/hero.js +432 -0
- package/dist/hero.js.map +1 -0
- package/dist/holds.d.ts +94 -0
- package/dist/holds.js +305 -0
- package/dist/holds.js.map +1 -0
- package/dist/home.d.ts +1 -1
- package/dist/home.js +30 -0
- package/dist/home.js.map +1 -0
- package/dist/hooks.d.ts +339 -57
- package/dist/hooks.js +105 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hotReload.d.ts +6 -5
- package/dist/hotReload.js +145 -0
- package/dist/hotReload.js.map +1 -0
- package/dist/ids.d.ts +3 -3
- package/dist/ids.js +30 -0
- package/dist/ids.js.map +1 -0
- package/dist/idsFile.d.ts +36 -0
- package/dist/idsFile.js +134 -0
- package/dist/idsFile.js.map +1 -0
- package/dist/index.d.ts +105 -68
- package/dist/index.js +194 -4701
- package/dist/inspect.d.ts +29 -2
- package/dist/{inspect-D9dWHmZ0.js → inspect.js} +21 -12
- package/dist/inspect.js.map +1 -0
- package/dist/inventory.d.ts +14 -1
- package/dist/inventory.js +84 -0
- package/dist/inventory.js.map +1 -0
- package/dist/items.d.ts +136 -8
- package/dist/items.js +585 -0
- package/dist/items.js.map +1 -0
- package/dist/lanes.d.ts +12 -3
- package/dist/lanes.js +496 -0
- package/dist/lanes.js.map +1 -0
- package/dist/life.d.ts +6 -2
- package/dist/life.js +287 -0
- package/dist/life.js.map +1 -0
- package/dist/log.d.ts +26 -3
- package/dist/log.js +192 -0
- package/dist/log.js.map +1 -0
- package/dist/manaBurn.d.ts +2 -2
- package/dist/manaBurn.js +75 -0
- package/dist/manaBurn.js.map +1 -0
- package/dist/map/file.d.ts +56 -3
- package/dist/map/file.js +264 -0
- package/dist/map/file.js.map +1 -0
- package/dist/map/images.js +61 -0
- package/dist/map/images.js.map +1 -0
- package/dist/map/look.d.ts +1 -1
- package/dist/map/look.js +30 -0
- package/dist/map/look.js.map +1 -0
- package/dist/map/pathProfile.js +183 -0
- package/dist/map/pathProfile.js.map +1 -0
- package/dist/map/resize.d.ts +4 -0
- package/dist/map/resize.js +136 -0
- package/dist/map/resize.js.map +1 -0
- package/dist/map/schema.js +257 -0
- package/dist/map/schema.js.map +1 -0
- package/dist/map/terrain.js +214 -0
- package/dist/map/terrain.js.map +1 -0
- package/dist/map/types.d.ts +92 -13
- package/dist/map/types.js +251 -0
- package/dist/map/types.js.map +1 -0
- package/dist/mapCheck/cells.js +94 -0
- package/dist/mapCheck/cells.js.map +1 -0
- package/dist/mapCheck/rules/foliage.d.ts +9 -0
- package/dist/mapCheck/rules/foliage.js +83 -0
- package/dist/mapCheck/rules/foliage.js.map +1 -0
- package/dist/mapCheck/rules/names.js +39 -0
- package/dist/mapCheck/rules/names.js.map +1 -0
- package/dist/mapCheck/rules/objects.d.ts +1 -1
- package/dist/mapCheck/rules/objects.js +56 -0
- package/dist/mapCheck/rules/objects.js.map +1 -0
- package/dist/mapCheck/rules/paths.js +32 -0
- package/dist/mapCheck/rules/paths.js.map +1 -0
- package/dist/mapCheck/rules/players.js +20 -0
- package/dist/mapCheck/rules/players.js.map +1 -0
- package/dist/mapCheck/rules/races.js +56 -0
- package/dist/mapCheck/rules/races.js.map +1 -0
- package/dist/mapCheck/rules/random.js +47 -0
- package/dist/mapCheck/rules/random.js.map +1 -0
- package/dist/mapCheck/rules/regions.js +30 -0
- package/dist/mapCheck/rules/regions.js.map +1 -0
- package/dist/mapCheck/rules/targets.js +31 -0
- package/dist/mapCheck/rules/targets.js.map +1 -0
- package/dist/mapCheck/rules/walking.js +45 -0
- package/dist/mapCheck/rules/walking.js.map +1 -0
- package/dist/mapCheck.d.ts +2 -2
- package/dist/mapCheck.js +63 -0
- package/dist/mapCheck.js.map +1 -0
- package/dist/mapFields.d.ts +25 -2
- package/dist/mapFields.js +134 -0
- package/dist/mapFields.js.map +1 -0
- package/dist/mapFile.js +176 -0
- package/dist/mapFile.js.map +1 -0
- package/dist/mapMeasure.d.ts +8 -0
- package/dist/mapMeasure.js +283 -0
- package/dist/mapMeasure.js.map +1 -0
- package/dist/mapMerge.d.ts +1 -0
- package/dist/mapMerge.js +172 -0
- package/dist/mapMerge.js.map +1 -0
- package/dist/mapObjectives.js +138 -0
- package/dist/mapObjectives.js.map +1 -0
- package/dist/mapObjects.js +80 -0
- package/dist/mapObjects.js.map +1 -0
- package/dist/math.d.ts +37 -7
- package/dist/math.js +155 -0
- package/dist/math.js.map +1 -0
- package/dist/messages.d.ts +71 -4
- package/dist/messages.js +29 -0
- package/dist/messages.js.map +1 -0
- package/dist/missionRules.d.ts +10 -2
- package/dist/{missionRules-C-bGxm0Q.js → missionRules.js} +30 -150
- package/dist/missionRules.js.map +1 -0
- package/dist/mods.d.ts +39 -20
- package/dist/mods.js +271 -0
- package/dist/mods.js.map +1 -0
- package/dist/moves.d.ts +87 -0
- package/dist/moves.js +539 -0
- package/dist/moves.js.map +1 -0
- package/dist/names.d.ts +7 -0
- package/dist/names.js +122 -0
- package/dist/names.js.map +1 -0
- package/dist/navigation/agentParams.js +14 -0
- package/dist/navigation/agentParams.js.map +1 -0
- package/dist/navigation/air.d.ts +7 -3
- package/dist/navigation/air.js +401 -0
- package/dist/navigation/air.js.map +1 -0
- package/dist/navigation/builds.d.ts +34 -2
- package/dist/navigation/builds.js +287 -0
- package/dist/navigation/builds.js.map +1 -0
- package/dist/navigation/groundAreas.d.ts +59 -1
- package/dist/navigation/groundAreas.js +407 -0
- package/dist/navigation/groundAreas.js.map +1 -0
- package/dist/navigation/navigation.d.ts +98 -9
- package/dist/navigation/recast.d.ts +194 -18
- package/dist/navigation/recast.js +1379 -0
- package/dist/navigation/recast.js.map +1 -0
- package/dist/navigation/sidePaths.d.ts +8 -3
- package/dist/navigation/sidePaths.js +241 -0
- package/dist/navigation/sidePaths.js.map +1 -0
- package/dist/navigation/sized.js +243 -0
- package/dist/navigation/sized.js.map +1 -0
- package/dist/nearest.js +32 -0
- package/dist/nearest.js.map +1 -0
- package/dist/noise.js +59 -0
- package/dist/noise.js.map +1 -0
- package/dist/objectives.d.ts +12 -3
- package/dist/objectives.js +144 -0
- package/dist/objectives.js.map +1 -0
- package/dist/orders/basic.d.ts +5 -5
- package/dist/orders/basic.js +417 -0
- package/dist/orders/basic.js.map +1 -0
- package/dist/orders/build.js +278 -0
- package/dist/orders/build.js.map +1 -0
- package/dist/orders/cast.d.ts +13 -3
- package/dist/orders/cast.js +558 -0
- package/dist/orders/cast.js.map +1 -0
- package/dist/orders/facts.js +16 -0
- package/dist/orders/facts.js.map +1 -0
- package/dist/orders/harvest.d.ts +21 -5
- package/dist/orders/harvest.js +540 -0
- package/dist/orders/harvest.js.map +1 -0
- package/dist/orders/idle.d.ts +3 -1
- package/dist/orders/idle.js +234 -0
- package/dist/orders/idle.js.map +1 -0
- package/dist/orders/items.js +92 -0
- package/dist/orders/items.js.map +1 -0
- package/dist/orders/queue.js +108 -0
- package/dist/orders/queue.js.map +1 -0
- package/dist/orders/waiting.d.ts +39 -0
- package/dist/orders/waiting.js +149 -0
- package/dist/orders/waiting.js.map +1 -0
- package/dist/pack.schema.js +13 -0
- package/dist/pack.schema.js.map +1 -0
- package/dist/pack.schema.json +7622 -841
- package/dist/packs/director/index.d.ts +13 -5
- package/dist/packs/director/index.js +204 -0
- package/dist/packs/director/index.js.map +1 -0
- package/dist/packs/heroes/campaign.d.ts +3 -2
- package/dist/packs/heroes/campaign.js +241 -0
- package/dist/packs/heroes/campaign.js.map +1 -0
- package/dist/packs/heroes/carry.d.ts +6 -0
- package/dist/packs/heroes/carry.js +112 -0
- package/dist/packs/heroes/carry.js.map +1 -0
- package/dist/packs/heroes/commands.js +115 -0
- package/dist/packs/heroes/commands.js.map +1 -0
- package/dist/packs/heroes/fallen.d.ts +43 -0
- package/dist/packs/heroes/fallen.js +61 -0
- package/dist/packs/heroes/fallen.js.map +1 -0
- package/dist/packs/heroes/hire.js +60 -0
- package/dist/packs/heroes/hire.js.map +1 -0
- package/dist/packs/heroes/index.d.ts +7 -6
- package/dist/packs/heroes/index.js +130 -0
- package/dist/packs/heroes/index.js.map +1 -0
- package/dist/packs/heroes/loop.d.ts +95 -0
- package/dist/packs/heroes/loop.js +250 -0
- package/dist/packs/heroes/loop.js.map +1 -0
- package/dist/packs/heroes/making.d.ts +6 -3
- package/dist/packs/heroes/making.js +55 -0
- package/dist/packs/heroes/making.js.map +1 -0
- package/dist/packs/heroes/respawn.d.ts +3 -3
- package/dist/packs/heroes/respawn.js +87 -0
- package/dist/packs/heroes/respawn.js.map +1 -0
- package/dist/packs/heroes/sets.d.ts +32 -0
- package/dist/packs/heroes/sets.js +51 -0
- package/dist/packs/heroes/sets.js.map +1 -0
- package/dist/packs/heroes/spells.d.ts +16 -0
- package/dist/packs/heroes/spells.js +269 -0
- package/dist/packs/heroes/spells.js.map +1 -0
- package/dist/packs/items/defaults.d.ts +43 -0
- package/dist/packs/items/defaults.js +1504 -0
- package/dist/packs/items/defaults.js.map +1 -0
- package/dist/packs/items/index.d.ts +27 -0
- package/dist/packs/items/index.js +214 -0
- package/dist/packs/items/index.js.map +1 -0
- package/dist/packs/moba/index.d.ts +3 -3
- package/dist/packs/moba/index.js +174 -0
- package/dist/packs/moba/index.js.map +1 -0
- package/dist/packs/pack.d.ts +15 -15
- package/dist/packs/pack.js +14 -0
- package/dist/packs/pack.js.map +1 -0
- package/dist/packs.d.ts +15 -7
- package/dist/packs.js +222 -0
- package/dist/packs.js.map +1 -0
- package/dist/paths.d.ts +2 -0
- package/dist/paths.js +109 -0
- package/dist/paths.js.map +1 -0
- package/dist/plain.js +57 -0
- package/dist/plain.js.map +1 -0
- package/dist/player.d.ts +33 -10
- package/dist/player.js +159 -0
- package/dist/player.js.map +1 -0
- package/dist/portals.d.ts +1 -1
- package/dist/portals.js +194 -0
- package/dist/portals.js.map +1 -0
- package/dist/prefabs.d.ts +25 -2
- package/dist/prefabs.js +239 -0
- package/dist/prefabs.js.map +1 -0
- package/dist/presetBuildings.js +58 -0
- package/dist/presetBuildings.js.map +1 -0
- package/dist/presetFoliage.d.ts +27 -0
- package/dist/presetFoliage.js +98 -0
- package/dist/presetFoliage.js.map +1 -0
- package/dist/presetGround.js +65 -0
- package/dist/presetGround.js.map +1 -0
- package/dist/proxies.d.ts +12 -0
- package/dist/proxies.js +79 -0
- package/dist/proxies.js.map +1 -0
- package/dist/query.d.ts +56 -0
- package/dist/query.js +88 -0
- package/dist/query.js.map +1 -0
- package/dist/races.d.ts +15 -14
- package/dist/races.js +172 -0
- package/dist/races.js.map +1 -0
- package/dist/randomGroups.js +91 -0
- package/dist/randomGroups.js.map +1 -0
- package/dist/registry.d.ts +117 -53
- package/dist/registry.js +323 -0
- package/dist/registry.js.map +1 -0
- package/dist/remains.d.ts +11 -9
- package/dist/remains.js +188 -0
- package/dist/remains.js.map +1 -0
- package/dist/replication.d.ts +12 -7
- package/dist/replication.js +100 -0
- package/dist/replication.js.map +1 -0
- package/dist/rng.d.ts +2 -0
- package/dist/rng.js +40 -0
- package/dist/rng.js.map +1 -0
- package/dist/rules.d.ts +186 -99
- package/dist/rules.js +179 -0
- package/dist/rules.js.map +1 -0
- package/dist/rulesCheck.d.ts +5 -4
- package/dist/rulesCheck.js +693 -0
- package/dist/rulesCheck.js.map +1 -0
- package/dist/runes.d.ts +2 -2
- package/dist/runes.js +80 -0
- package/dist/runes.js.map +1 -0
- package/dist/save.d.ts +37 -12
- package/dist/save.js +532 -0
- package/dist/save.js.map +1 -0
- package/dist/scenario.d.ts +2 -2
- package/dist/scenario.js +99 -0
- package/dist/scenario.js.map +1 -0
- package/dist/scheduler.d.ts +3 -0
- package/dist/scheduler.js +156 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/score.d.ts +19 -19
- package/dist/score.js +709 -0
- package/dist/score.js.map +1 -0
- package/dist/sequences.d.ts +10 -6
- package/dist/sequences.js +206 -0
- package/dist/sequences.js.map +1 -0
- package/dist/server/doorman.js +154 -0
- package/dist/server/doorman.js.map +1 -0
- package/dist/server/gameServer.d.ts +16 -1
- package/dist/server/gameServer.js +643 -0
- package/dist/server/gameServer.js.map +1 -0
- package/dist/server/index.d.ts +1 -1
- package/dist/server/lobby.js +199 -0
- package/dist/server/lobby.js.map +1 -0
- package/dist/server/log.js +18 -0
- package/dist/server/log.js.map +1 -0
- package/dist/server/match.js +267 -0
- package/dist/server/match.js.map +1 -0
- package/dist/server/mode.d.ts +18 -9
- package/dist/server/mode.js +220 -0
- package/dist/server/mode.js.map +1 -0
- package/dist/{navigation-worker.js → server/navigation-worker.js} +1 -1
- package/dist/server/navigation-worker.js.map +1 -0
- package/dist/server/navigation.js +39 -0
- package/dist/server/navigation.js.map +1 -0
- package/dist/server/ops.d.ts +4 -0
- package/dist/server/ops.js +137 -0
- package/dist/server/ops.js.map +1 -0
- package/dist/server/packs.d.ts +3 -3
- package/dist/server/packs.js +32 -0
- package/dist/server/packs.js.map +1 -0
- package/dist/server/ratings.d.ts +5 -0
- package/dist/server/ratings.js +104 -0
- package/dist/server/ratings.js.map +1 -0
- package/dist/server/relay.d.ts +12 -2
- package/dist/server/relay.js +144 -0
- package/dist/server/relay.js.map +1 -0
- package/dist/server/rooms.d.ts +9 -2
- package/dist/server/rooms.js +442 -0
- package/dist/server/rooms.js.map +1 -0
- package/dist/server/seat.js +116 -0
- package/dist/server/seat.js.map +1 -0
- package/dist/server/seatSettings.d.ts +3 -3
- package/dist/server/seatSettings.js +63 -0
- package/dist/server/seatSettings.js.map +1 -0
- package/dist/server/secret.js +13 -0
- package/dist/server/secret.js.map +1 -0
- package/dist/server/start.d.ts +13 -6
- package/dist/server/start.js +76 -0
- package/dist/server/start.js.map +1 -0
- package/dist/server/websocket.d.ts +9 -1
- package/dist/server/websocket.js +306 -0
- package/dist/server/websocket.js.map +1 -0
- package/dist/server.js +15 -2861
- package/dist/session/can.js +26 -0
- package/dist/session/can.js.map +1 -0
- package/dist/session/commandReplay.d.ts +8 -2
- package/dist/session/commandReplay.js +293 -0
- package/dist/session/commandReplay.js.map +1 -0
- package/dist/session/debug.js +151 -0
- package/dist/session/debug.js.map +1 -0
- package/dist/session/delay.js +62 -0
- package/dist/session/delay.js.map +1 -0
- package/dist/session/delta.d.ts +14 -1
- package/dist/session/delta.js +407 -0
- package/dist/session/delta.js.map +1 -0
- package/dist/session/entityState.js +415 -0
- package/dist/session/entityState.js.map +1 -0
- package/dist/session/local.d.ts +47 -5
- package/dist/session/local.js +670 -0
- package/dist/session/local.js.map +1 -0
- package/dist/session/memory.d.ts +20 -2
- package/dist/session/memory.js +131 -0
- package/dist/session/memory.js.map +1 -0
- package/dist/session/protocol.d.ts +325 -31
- package/dist/session/protocol.js +55 -0
- package/dist/session/protocol.js.map +1 -0
- package/dist/session/remote.d.ts +74 -12
- package/dist/session/remote.js +1394 -0
- package/dist/session/remote.js.map +1 -0
- package/dist/session/replay.d.ts +11 -2
- package/dist/session/replay.js +160 -0
- package/dist/session/replay.js.map +1 -0
- package/dist/session/seed.js +12 -0
- package/dist/session/seed.js.map +1 -0
- package/dist/session/share.d.ts +5 -1
- package/dist/session/share.js +94 -0
- package/dist/session/share.js.map +1 -0
- package/dist/session/socket.d.ts +1 -1
- package/dist/session/socket.js +29 -0
- package/dist/session/socket.js.map +1 -0
- package/dist/session/wire.d.ts +5 -0
- package/dist/session/wire.js +84 -0
- package/dist/session/wire.js.map +1 -0
- package/dist/session/worker.d.ts +77 -12
- package/dist/session/worker.js +499 -0
- package/dist/session/worker.js.map +1 -0
- package/dist/shared.d.ts +31 -5
- package/dist/shared.js +166 -0
- package/dist/shared.js.map +1 -0
- package/dist/sides.d.ts +9 -3
- package/dist/sides.js +149 -0
- package/dist/sides.js.map +1 -0
- package/dist/sight.js +85 -0
- package/dist/sight.js.map +1 -0
- package/dist/simulate-worker.js +1 -1
- package/dist/simulate.d.ts +12 -8
- package/dist/{simulate-oXBiw1Ff.js → simulate.js} +10 -11
- package/dist/simulate.js.map +1 -0
- package/dist/smart.js +77 -0
- package/dist/smart.js.map +1 -0
- package/dist/spatial.d.ts +32 -16
- package/dist/spatial.js +234 -0
- package/dist/spatial.js.map +1 -0
- package/dist/spawning.d.ts +1 -0
- package/dist/spawning.js +224 -0
- package/dist/spawning.js.map +1 -0
- package/dist/stances.d.ts +6 -3
- package/dist/stances.js +169 -0
- package/dist/stances.js.map +1 -0
- package/dist/start.d.ts +10 -10
- package/dist/start.js +75 -0
- package/dist/start.js.map +1 -0
- package/dist/stats.d.ts +42 -16
- package/dist/stats.js +290 -0
- package/dist/stats.js.map +1 -0
- package/dist/summoned.d.ts +52 -0
- package/dist/summoned.js +38 -0
- package/dist/summoned.js.map +1 -0
- package/dist/summons.d.ts +10 -13
- package/dist/summons.js +271 -0
- package/dist/summons.js.map +1 -0
- package/dist/systems/abilities.js +224 -0
- package/dist/systems/abilities.js.map +1 -0
- package/dist/systems/combat.d.ts +35 -1
- package/dist/systems/combat.js +677 -0
- package/dist/systems/combat.js.map +1 -0
- package/dist/systems/combatTold.d.ts +3 -1
- package/dist/systems/combatTold.js +85 -0
- package/dist/systems/combatTold.js.map +1 -0
- package/dist/systems/construction.js +80 -0
- package/dist/systems/construction.js.map +1 -0
- package/dist/systems/economy.d.ts +0 -6
- package/dist/systems/economy.js +128 -0
- package/dist/systems/economy.js.map +1 -0
- package/dist/systems/fog.d.ts +1 -1
- package/dist/systems/fog.js +120 -0
- package/dist/systems/fog.js.map +1 -0
- package/dist/systems/life.js +32 -0
- package/dist/systems/life.js.map +1 -0
- package/dist/systems/movement.d.ts +24 -12
- package/dist/systems/movement.js +1247 -0
- package/dist/systems/movement.js.map +1 -0
- package/dist/systems/orders.js +64 -0
- package/dist/systems/orders.js.map +1 -0
- package/dist/systems/production.js +322 -0
- package/dist/systems/production.js.map +1 -0
- package/dist/systems/productionQueue.js +120 -0
- package/dist/systems/productionQueue.js.map +1 -0
- package/dist/systems/victory.d.ts +1 -1
- package/dist/systems/victory.js +56 -0
- package/dist/systems/victory.js.map +1 -0
- package/dist/talk.d.ts +6 -6
- package/dist/talk.js +153 -0
- package/dist/talk.js.map +1 -0
- package/dist/targeting.d.ts +142 -0
- package/dist/targeting.js +49 -0
- package/dist/targeting.js.map +1 -0
- package/dist/tech.d.ts +20 -3
- package/dist/tech.js +239 -0
- package/dist/tech.js.map +1 -0
- package/dist/techTree.d.ts +7 -0
- package/dist/techTree.js +90 -0
- package/dist/techTree.js.map +1 -0
- package/dist/terrain.d.ts +59 -7
- package/dist/terrain.js +389 -0
- package/dist/terrain.js.map +1 -0
- package/dist/terrainSave.d.ts +6 -0
- package/dist/terrainSave.js +74 -0
- package/dist/terrainSave.js.map +1 -0
- package/dist/testing.d.ts +8 -7
- package/dist/testing.js +13 -739
- package/dist/testing.js.map +1 -1
- package/dist/tiles.d.ts +1 -1
- package/dist/tiles.js +43 -0
- package/dist/tiles.js.map +1 -0
- package/dist/timers.d.ts +29 -4
- package/dist/timers.js +242 -0
- package/dist/timers.js.map +1 -0
- package/dist/tomes.d.ts +4 -4
- package/dist/tomes.js +94 -0
- package/dist/tomes.js.map +1 -0
- package/dist/trade.js +103 -0
- package/dist/trade.js.map +1 -0
- package/dist/transport.d.ts +6 -1
- package/dist/transport.js +281 -0
- package/dist/transport.js.map +1 -0
- package/dist/tunables.d.ts +10 -3
- package/dist/tunables.js +56 -0
- package/dist/tunables.js.map +1 -0
- package/dist/unitResources.d.ts +67 -0
- package/dist/unitResources.js +266 -0
- package/dist/unitResources.js.map +1 -0
- package/dist/upkeep.d.ts +6 -1
- package/dist/upkeep.js +26 -0
- package/dist/upkeep.js.map +1 -0
- package/dist/veterancy.d.ts +8 -3
- package/dist/veterancy.js +131 -0
- package/dist/veterancy.js.map +1 -0
- package/dist/vision.d.ts +36 -0
- package/dist/vision.js +133 -0
- package/dist/vision.js.map +1 -0
- package/dist/walls.d.ts +1 -1
- package/dist/walls.js +278 -0
- package/dist/walls.js.map +1 -0
- package/dist/world.d.ts +606 -88
- package/dist/world.js +1263 -0
- package/dist/world.js.map +1 -0
- package/package.json +2 -2
- package/dist/ai.js.map +0 -1
- package/dist/attributes.d.ts +0 -66
- package/dist/brain-BvVdUhX8.js +0 -7659
- package/dist/brain-BvVdUhX8.js.map +0 -1
- package/dist/builds-C6LfgvEU.js +0 -460
- package/dist/builds-C6LfgvEU.js.map +0 -1
- package/dist/coreComponents-syuh2fPG.js +0 -5149
- package/dist/coreComponents-syuh2fPG.js.map +0 -1
- package/dist/debugCommands-CzjrSm66.js +0 -14739
- package/dist/debugCommands-CzjrSm66.js.map +0 -1
- package/dist/determinism-BCymQwiE.js +0 -518
- package/dist/determinism-BCymQwiE.js.map +0 -1
- package/dist/game-DiJEN-Ks.js +0 -5800
- package/dist/game-DiJEN-Ks.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/inspect-D9dWHmZ0.js.map +0 -1
- package/dist/local-Dkovq42k.js +0 -1379
- package/dist/local-Dkovq42k.js.map +0 -1
- package/dist/missionRules-C-bGxm0Q.js.map +0 -1
- package/dist/navigation-worker.js.map +0 -1
- package/dist/packs-g5thvmGn.js +0 -3199
- package/dist/packs-g5thvmGn.js.map +0 -1
- package/dist/profiles-B3NS9jwk.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/simulate-oXBiw1Ff.js.map +0 -1
package/dist/camps.d.ts
CHANGED
|
@@ -1,28 +1,59 @@
|
|
|
1
|
-
import { type EntityId, type PlayerId } from './entity';
|
|
1
|
+
import { type Entity, type EntityId, type PlayerId } from './entity';
|
|
2
2
|
import { type Vec2 } from './math';
|
|
3
3
|
import type { World } from './world';
|
|
4
4
|
import type { SessionView } from './replication';
|
|
5
5
|
import type { CampInfo } from './session/protocol';
|
|
6
|
+
/**
|
|
7
|
+
* Someone a camp is fighting, on its list (`Camp.aggro`)
|
|
8
|
+
*
|
|
9
|
+
* @beta
|
|
10
|
+
*/
|
|
11
|
+
export interface CampAggro {
|
|
12
|
+
/** Who it is */
|
|
13
|
+
id: EntityId;
|
|
14
|
+
/** The damage it has done the camp's creeps: the most is gone for first, then the nearest (`campTarget`) */
|
|
15
|
+
threat: number;
|
|
16
|
+
/** When it last hit one of the camp's creeps or was hit by one, in seconds of the game */
|
|
17
|
+
lastHitAt: number;
|
|
18
|
+
}
|
|
6
19
|
/**
|
|
7
20
|
* A group of creeps guarding a spot
|
|
8
21
|
*
|
|
9
22
|
* @beta
|
|
10
23
|
*/
|
|
11
24
|
export interface Camp {
|
|
25
|
+
/** The camp's number: its place in the world's camps, plus one */
|
|
12
26
|
id: number;
|
|
27
|
+
/** Where the middle of the camp is, east-west in cells */
|
|
13
28
|
x: number;
|
|
29
|
+
/** Where the middle of the camp is, north-south in cells */
|
|
14
30
|
z: number;
|
|
15
31
|
/** Levels of its creeps added up, as it was set up */
|
|
16
32
|
level: number;
|
|
17
|
-
/** How far from the camp its creeps
|
|
33
|
+
/** How far from the camp's centre its creeps fight: what goes past it is let go of (`CampSettings.leash`) */
|
|
18
34
|
leash: number;
|
|
35
|
+
/** The entity ids of its creeps */
|
|
19
36
|
members: EntityId[];
|
|
20
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Who the camp is fighting, as its creeps pick (`campTarget`): fed by every hit on one of them (the damage done, as
|
|
39
|
+
* threat) and by their own hits, rid of the dead and of what is past the leash, emptied as the camp goes home
|
|
40
|
+
*/
|
|
41
|
+
aggro: CampAggro[];
|
|
42
|
+
/** The last it went for: what wakes one of them wakes the rest */
|
|
21
43
|
alarm: EntityId;
|
|
44
|
+
/** When one of its creeps last hit or was hit, in seconds of the game: it goes home `resetAfter` after. None at peace */
|
|
45
|
+
foughtAt?: number;
|
|
46
|
+
/** Seconds a creep of it chases what it neither hits nor is hit by before it lets it go: the rules' `chaseTime` when left out */
|
|
47
|
+
chaseTime?: number;
|
|
48
|
+
/** Seconds without a blow before it goes home: the rules' `resetAfter` when left out */
|
|
49
|
+
resetAfter?: number;
|
|
50
|
+
/** Whether all of it answers a hit at once: the rules' `helpAtOnce` when left out */
|
|
51
|
+
helpAtOnce?: boolean;
|
|
22
52
|
/** The name it was given on the map, for the rules to find it by (`campNamed`) */
|
|
23
53
|
name?: string;
|
|
24
54
|
/** Who its creeps are, and of what types, for it to come back the same (see `respawn`). None in saves of before */
|
|
25
55
|
owner?: PlayerId;
|
|
56
|
+
/** The unit type ids of its creeps, kept for it to come back the same after `respawn` */
|
|
26
57
|
types?: string[];
|
|
27
58
|
/**
|
|
28
59
|
* Seconds after it was cleared that it comes back, its creeps where they stood, as a hero arena game's jungle camps
|
|
@@ -38,13 +69,26 @@ export interface Camp {
|
|
|
38
69
|
* @beta
|
|
39
70
|
*/
|
|
40
71
|
export interface CampMember {
|
|
72
|
+
/** The number of the camp the creep guards */
|
|
41
73
|
camp: number;
|
|
74
|
+
/** Where the creep returns to when the camp gives up the fight */
|
|
42
75
|
home: Vec2;
|
|
43
|
-
/** On its way back after
|
|
76
|
+
/** On its way back after the camp gave up the fight. Deaf to everything but a hit, and to that for `RETURN_GRACE` */
|
|
44
77
|
returning: boolean;
|
|
78
|
+
/** When it turned for home, in seconds of the game */
|
|
79
|
+
returningAt?: number;
|
|
45
80
|
/** Where it was attacked from by something it could not see, and is going to look */
|
|
46
81
|
searching: Vec2 | null;
|
|
82
|
+
/** When it last traded a blow with what it goes for, or took it up: a chase with none for `chaseTime` is given up */
|
|
83
|
+
blowAt?: number;
|
|
47
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Seconds a creep on its way home is deaf even to a hit: so that one led to the end of its leash does not turn on the
|
|
87
|
+
* first arrow in its back and come straight back out
|
|
88
|
+
*
|
|
89
|
+
* @beta
|
|
90
|
+
*/
|
|
91
|
+
export declare const RETURN_GRACE = 1.5;
|
|
48
92
|
/**
|
|
49
93
|
* On a creep: the camp it belongs to
|
|
50
94
|
*
|
|
@@ -85,6 +129,28 @@ export declare function spawnCamp(world: World, owner: PlayerId, point: Vec2, ty
|
|
|
85
129
|
* @beta
|
|
86
130
|
*/
|
|
87
131
|
export declare function respawnCamp(world: World, camp: Camp): void;
|
|
132
|
+
/**
|
|
133
|
+
* What a creep of the camp goes for of the camp's list (`Camp.aggro`): the most threat, then the nearest, the
|
|
134
|
+
* `targetScore` hook having the last word; nothing it leaves alone for now (`shun`: it could not get at it, or chased it
|
|
135
|
+
* too long), cannot see or attack, or that stands past the leash. None when the list has nothing for it
|
|
136
|
+
*
|
|
137
|
+
* @beta
|
|
138
|
+
*/
|
|
139
|
+
export declare function campTarget(world: World, entity: Entity, camp: Camp): Entity | undefined;
|
|
140
|
+
/**
|
|
141
|
+
* Puts someone on a camp's list as if it had done the camp `threat` damage (`Camp.aggro`): a taunt, or a game's own
|
|
142
|
+
* reason for the creeps to come. The camp comes at once, as for a hit, where it helps at once (`CampSettings.helpAtOnce`)
|
|
143
|
+
*
|
|
144
|
+
* @beta
|
|
145
|
+
*/
|
|
146
|
+
export declare function aggroCamp(world: World, camp: Camp, entity: Entity, threat?: number): void;
|
|
147
|
+
/**
|
|
148
|
+
* The camp gives up the fight now, as it does `resetAfter` after the last blow: its list emptied, every creep of it on
|
|
149
|
+
* the way home
|
|
150
|
+
*
|
|
151
|
+
* @beta
|
|
152
|
+
*/
|
|
153
|
+
export declare function resetCamp(world: World, camp: Camp): void;
|
|
88
154
|
/**
|
|
89
155
|
* The camps as a seat's player knows them (`GameSession.camps`): where they are and how strong, and which their team
|
|
90
156
|
* has seen empty. Worked out once a tick, as the minimap asks every frame: the same list and objects every time, kept
|
package/dist/camps.js
ADDED
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
import { cos, sin } from "./exactMath.js";
|
|
2
|
+
import { dist } from "./math.js";
|
|
3
|
+
import { at, declaredAt, lowerChain } from "./defs.js";
|
|
4
|
+
import { defineComponent } from "./components.js";
|
|
5
|
+
import { defineListener } from "./events.js";
|
|
6
|
+
import { campCleared, campReturned, damaged } from "./engineEvents.js";
|
|
7
|
+
import { edgeDistance, fighting, moving } from "./entity.js";
|
|
8
|
+
import { defineHook } from "./hooks.js";
|
|
9
|
+
import { engageWith, engagedLike, isBlocked, isShunned, roomFor, shun } from "./engagement.js";
|
|
10
|
+
import { halt, moveTo } from "./systems/movement.js";
|
|
11
|
+
import { acquireTarget, canAttack, canSee, disengage, engage } from "./systems/combat.js";
|
|
12
|
+
import { createOrder, giveOrder } from "./orders/queue.js";
|
|
13
|
+
import { freeToHelp } from "./orders/idle.js";
|
|
14
|
+
//#region src/camps.ts
|
|
15
|
+
/**
|
|
16
|
+
* Creep camps: groups of neutral hostile creeps that guard a spot. They go for whoever comes close or attacks one of
|
|
17
|
+
* them, all of them at once, keep a list of who hurt them (`Camp.aggro`) and fight it out to the end of their leash,
|
|
18
|
+
* give up a chase that brings no blow (`CampSettings.chaseTime`), go home a while after the last blow (`resetAfter`), heal
|
|
19
|
+
* on the way back, and sleep at night. A feature a game turns on by taking `campHooks` and `campListeners` (the heroes
|
|
20
|
+
* pack has them); the engine itself knows only the player the creeps belong to. Without it, creeps are units like any
|
|
21
|
+
* other, that stand where they are put and fight back. See docs/creeps.md
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Seconds a creep on its way home is deaf even to a hit: so that one led to the end of its leash does not turn on the
|
|
25
|
+
* first arrow in its back and come straight back out
|
|
26
|
+
*
|
|
27
|
+
* @beta
|
|
28
|
+
*/
|
|
29
|
+
var RETURN_GRACE = 1.5;
|
|
30
|
+
/** How far past the leash a creep may itself stand, fighting what is just inside it */
|
|
31
|
+
var LEASH_SLACK = 2;
|
|
32
|
+
/**
|
|
33
|
+
* On a creep: the camp it belongs to
|
|
34
|
+
*
|
|
35
|
+
* @beta
|
|
36
|
+
*/
|
|
37
|
+
var campMember = defineComponent({ id: "core.camp" });
|
|
38
|
+
/**
|
|
39
|
+
* The camps of a world, by id less one
|
|
40
|
+
*
|
|
41
|
+
* @beta
|
|
42
|
+
*/
|
|
43
|
+
var camps = defineComponent({
|
|
44
|
+
id: "core.camps",
|
|
45
|
+
default: () => []
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* Gives the camps of a world, the list `camps` holds
|
|
49
|
+
*
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
var campsOf = (world) => world.state(camps);
|
|
53
|
+
/**
|
|
54
|
+
* The camp of this name, as it was given one on the map. It is there for as long as the game, with or without its creeps
|
|
55
|
+
*
|
|
56
|
+
* @beta
|
|
57
|
+
*/
|
|
58
|
+
var campNamed = (world, name) => campsOf(world).find((camp) => camp.name === name);
|
|
59
|
+
/**
|
|
60
|
+
* Where the creeps of a camp stand: the first one in the middle, the rest in a ring around it, facing out
|
|
61
|
+
*
|
|
62
|
+
* @beta
|
|
63
|
+
*/
|
|
64
|
+
function campLayout(point, count) {
|
|
65
|
+
return Array.from({ length: count }, (_, i) => {
|
|
66
|
+
const angle = i / Math.max(count - 1, 1) * Math.PI * 2;
|
|
67
|
+
const spread = i === 0 ? 0 : 1.6;
|
|
68
|
+
return {
|
|
69
|
+
x: point.x + sin(angle) * spread,
|
|
70
|
+
z: point.z + cos(angle) * spread,
|
|
71
|
+
facing: angle
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Puts a camp of creeps on the map. The creeps stand around the point and come back to it
|
|
77
|
+
*
|
|
78
|
+
* @beta
|
|
79
|
+
*/
|
|
80
|
+
function spawnCamp(world, owner, point, types, leash = world.settings.camps.leash) {
|
|
81
|
+
const all = campsOf(world);
|
|
82
|
+
const level = types.reduce((sum, type) => sum + (world.registry.unit(type).level ?? 1), 0);
|
|
83
|
+
const camp = {
|
|
84
|
+
id: all.length + 1,
|
|
85
|
+
x: point.x,
|
|
86
|
+
z: point.z,
|
|
87
|
+
level,
|
|
88
|
+
leash,
|
|
89
|
+
members: [],
|
|
90
|
+
aggro: [],
|
|
91
|
+
alarm: 0,
|
|
92
|
+
owner,
|
|
93
|
+
types: [...types]
|
|
94
|
+
};
|
|
95
|
+
const { respawn } = world.settings.camps;
|
|
96
|
+
if (respawn !== void 0) camp.respawn = respawn;
|
|
97
|
+
all.push(camp);
|
|
98
|
+
populate(world, camp, owner, types);
|
|
99
|
+
return camp;
|
|
100
|
+
}
|
|
101
|
+
/** Puts a camp's creeps where they stand, as its members */
|
|
102
|
+
function populate(world, camp, owner, types) {
|
|
103
|
+
const layout = campLayout(camp, types.length);
|
|
104
|
+
camp.members = [];
|
|
105
|
+
types.forEach((type, i) => {
|
|
106
|
+
const { x, z, facing } = layout[i];
|
|
107
|
+
const creep = world.spawn(type, owner, {
|
|
108
|
+
x,
|
|
109
|
+
z
|
|
110
|
+
}, { facing });
|
|
111
|
+
creep.set(campMember, {
|
|
112
|
+
camp: camp.id,
|
|
113
|
+
home: {
|
|
114
|
+
x: creep.pos.x,
|
|
115
|
+
z: creep.pos.z
|
|
116
|
+
},
|
|
117
|
+
returning: false,
|
|
118
|
+
searching: null
|
|
119
|
+
});
|
|
120
|
+
camp.members.push(creep.id);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Brings a cleared camp back now, the same creeps where they stood (`campReturned`): from code, or when its time comes
|
|
125
|
+
*
|
|
126
|
+
* @beta
|
|
127
|
+
*/
|
|
128
|
+
function respawnCamp(world, camp) {
|
|
129
|
+
if (!camp.types?.length || camp.owner === void 0) return;
|
|
130
|
+
populate(world, camp, camp.owner, camp.types);
|
|
131
|
+
camp.alarm = 0;
|
|
132
|
+
camp.aggro = [];
|
|
133
|
+
camp.foughtAt = void 0;
|
|
134
|
+
camp.clearedAt = void 0;
|
|
135
|
+
world.events.emit(campReturned, { camp });
|
|
136
|
+
}
|
|
137
|
+
/** Whether every creep of a camp is gone */
|
|
138
|
+
var emptied = (world, camp) => camp.members.every((id) => !world.get(id)?.alive);
|
|
139
|
+
/**
|
|
140
|
+
* Camps that come back (`Camp.respawn`): told when one is found empty (`campCleared`), and brought back once its time is
|
|
141
|
+
* up, when nobody but its own kind stands in it. Once a second, at the rate of 30 ticks
|
|
142
|
+
*
|
|
143
|
+
* @internal
|
|
144
|
+
*/
|
|
145
|
+
var campRespawnSystem = {
|
|
146
|
+
name: "campRespawn",
|
|
147
|
+
phase: "cleanup",
|
|
148
|
+
every: 30,
|
|
149
|
+
update(world) {
|
|
150
|
+
for (const camp of campsOf(world)) {
|
|
151
|
+
if (!emptied(world, camp)) continue;
|
|
152
|
+
if (camp.clearedAt === void 0) {
|
|
153
|
+
camp.clearedAt = world.time;
|
|
154
|
+
world.events.emit(campCleared, { camp });
|
|
155
|
+
}
|
|
156
|
+
if (camp.respawn === void 0 || world.time - camp.clearedAt < camp.respawn) continue;
|
|
157
|
+
if (world.spatial.query(camp.x, camp.z, 3, found).some((entity) => entity.alive && entity.isUnit && entity.owner !== camp.owner)) continue;
|
|
158
|
+
respawnCamp(world, camp);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
/** Part of their health creeps regain per second on the way home */
|
|
163
|
+
var RETREAT_HEALING = .1;
|
|
164
|
+
var found = [];
|
|
165
|
+
/** Uses an ability that hits what is around the creep, when that is worth it */
|
|
166
|
+
function lashOut(world, entity) {
|
|
167
|
+
for (const state of entity.abilities) {
|
|
168
|
+
if (state.level < 1 || state.cooldown > 0) continue;
|
|
169
|
+
const ability = world.registry.ability(state.id);
|
|
170
|
+
if (ability.target !== "none" || at(ability.manaCost, state.level) > entity.mana) continue;
|
|
171
|
+
const radius = lowerChain(ability.effects).reduce((max, effect) => Math.max(max, effect.type === "damage" ? declaredAt(effect.radius, state.level) : 0), 0);
|
|
172
|
+
if (!radius) continue;
|
|
173
|
+
let caught = 0;
|
|
174
|
+
for (const other of world.spatial.query(entity.pos.x, entity.pos.z, radius, found)) if (other.isUnit && canAttack(world, entity, other) && edgeDistance(entity, other) <= radius) caught++;
|
|
175
|
+
if (caught < 2) continue;
|
|
176
|
+
giveOrder(world, entity, createOrder(world, {
|
|
177
|
+
type: "cast",
|
|
178
|
+
ability: ability.id
|
|
179
|
+
}));
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
/** The camp's own `chaseTime`, or the rules' */
|
|
185
|
+
var chaseTimeOf = (world, camp) => camp.chaseTime ?? world.settings.camps.chaseTime;
|
|
186
|
+
/** The camp's own `resetAfter`, or the rules' */
|
|
187
|
+
var resetAfterOf = (world, camp) => camp.resetAfter ?? world.settings.camps.resetAfter;
|
|
188
|
+
/** The camp's own `helpAtOnce`, or the rules' */
|
|
189
|
+
var helpsAtOnce = (world, camp) => camp.helpAtOnce ?? world.settings.camps.helpAtOnce;
|
|
190
|
+
/** Whether the creep may go for it: an enemy it sees, inside the camp's leash, and not one it leaves alone for now (`shun`) */
|
|
191
|
+
function mayChase(world, entity, camp, other) {
|
|
192
|
+
return !!other && other.alive && canAttack(world, entity, other) && canSee(world, entity, other) && dist(other.pos, camp) <= camp.leash && !isShunned(world, entity, other);
|
|
193
|
+
}
|
|
194
|
+
/** The camp's list rid of the dead, the gone and what stands past the leash */
|
|
195
|
+
function prune(world, camp) {
|
|
196
|
+
let kept = 0;
|
|
197
|
+
for (const entry of camp.aggro) {
|
|
198
|
+
const other = world.get(entry.id);
|
|
199
|
+
if (other?.alive && dist(other.pos, camp) <= camp.leash) camp.aggro[kept++] = entry;
|
|
200
|
+
}
|
|
201
|
+
camp.aggro.length = kept;
|
|
202
|
+
}
|
|
203
|
+
/** What the `targetScore` hook is asked with for each on a camp's list: one, used again */
|
|
204
|
+
var scoring = {
|
|
205
|
+
attacker: void 0,
|
|
206
|
+
target: void 0,
|
|
207
|
+
distance: 0,
|
|
208
|
+
engaged: 0,
|
|
209
|
+
room: 0,
|
|
210
|
+
score: 0
|
|
211
|
+
};
|
|
212
|
+
/**
|
|
213
|
+
* What a creep of the camp goes for of the camp's list (`Camp.aggro`): the most threat, then the nearest, the
|
|
214
|
+
* `targetScore` hook having the last word; nothing it leaves alone for now (`shun`: it could not get at it, or chased it
|
|
215
|
+
* too long), cannot see or attack, or that stands past the leash. None when the list has nothing for it
|
|
216
|
+
*
|
|
217
|
+
* @beta
|
|
218
|
+
*/
|
|
219
|
+
function campTarget(world, entity, camp) {
|
|
220
|
+
prune(world, camp);
|
|
221
|
+
const hooked = world.hooks.has("targetScore");
|
|
222
|
+
let best;
|
|
223
|
+
let bestScore = -Infinity;
|
|
224
|
+
for (const entry of camp.aggro) {
|
|
225
|
+
const other = world.get(entry.id);
|
|
226
|
+
if (!mayChase(world, entity, camp, other)) continue;
|
|
227
|
+
const distance = edgeDistance(entity, other);
|
|
228
|
+
let score = entry.threat * 1e3 - distance;
|
|
229
|
+
if (hooked) {
|
|
230
|
+
scoring.attacker = entity;
|
|
231
|
+
scoring.target = other;
|
|
232
|
+
scoring.distance = distance;
|
|
233
|
+
scoring.engaged = engagedLike(world, other, entity);
|
|
234
|
+
scoring.room = roomFor(world, other, entity);
|
|
235
|
+
scoring.score = score;
|
|
236
|
+
score = world.hooks.run("targetScore", scoring).score;
|
|
237
|
+
}
|
|
238
|
+
if (score > bestScore) {
|
|
239
|
+
bestScore = score;
|
|
240
|
+
best = other;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return best;
|
|
244
|
+
}
|
|
245
|
+
/** Its entry on the camp's list, put on it with no threat if it was not */
|
|
246
|
+
function entryOf(world, camp, other) {
|
|
247
|
+
let entry = camp.aggro.find((each) => each.id === other.id);
|
|
248
|
+
if (!entry) camp.aggro.push(entry = {
|
|
249
|
+
id: other.id,
|
|
250
|
+
threat: 0,
|
|
251
|
+
lastHitAt: world.time
|
|
252
|
+
});
|
|
253
|
+
return entry;
|
|
254
|
+
}
|
|
255
|
+
/** The creep goes for it now: put on the camp's list, the camp's alarm, the chase timed from now */
|
|
256
|
+
function take(world, entity, member, camp, target) {
|
|
257
|
+
engageWith(world, entity, target);
|
|
258
|
+
entity.get(fighting).autoTarget = target.id;
|
|
259
|
+
member.searching = null;
|
|
260
|
+
member.blowAt = world.time;
|
|
261
|
+
camp.alarm = target.id;
|
|
262
|
+
entryOf(world, camp, target);
|
|
263
|
+
}
|
|
264
|
+
/** Whether a creep of the camp on its way home takes a fight again: once it has been on the way `RETURN_GRACE` seconds */
|
|
265
|
+
var pastGrace = (world, member) => world.time - (member.returningAt ?? -Infinity) >= RETURN_GRACE;
|
|
266
|
+
/**
|
|
267
|
+
* Every creep of the camp free to fight goes for the best of the camp's list now, not at its next look round: those
|
|
268
|
+
* asleep woken, those fighting left to it, those on their way home only past `RETURN_GRACE`, those with an order of their
|
|
269
|
+
* player's (a hold) or standing down (`CombatState.passive`) not at all
|
|
270
|
+
*/
|
|
271
|
+
function rally(world, camp) {
|
|
272
|
+
for (const id of camp.members) {
|
|
273
|
+
const creep = world.get(id);
|
|
274
|
+
const member = creep?.get(campMember);
|
|
275
|
+
if (!creep?.alive || !member || !freeToHelp(creep)) continue;
|
|
276
|
+
if (member.returning && !pastGrace(world, member)) continue;
|
|
277
|
+
const combat = creep.get(fighting);
|
|
278
|
+
if (combat.autoTarget && world.get(combat.autoTarget)?.alive) continue;
|
|
279
|
+
const next = campTarget(world, creep, camp);
|
|
280
|
+
if (!next) continue;
|
|
281
|
+
creep.asleep = false;
|
|
282
|
+
member.returning = false;
|
|
283
|
+
take(world, creep, member, camp, next);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Puts someone on a camp's list as if it had done the camp `threat` damage (`Camp.aggro`): a taunt, or a game's own
|
|
288
|
+
* reason for the creeps to come. The camp comes at once, as for a hit, where it helps at once (`CampSettings.helpAtOnce`)
|
|
289
|
+
*
|
|
290
|
+
* @beta
|
|
291
|
+
*/
|
|
292
|
+
function aggroCamp(world, camp, entity, threat = 0) {
|
|
293
|
+
const entry = entryOf(world, camp, entity);
|
|
294
|
+
entry.threat += threat;
|
|
295
|
+
entry.lastHitAt = world.time;
|
|
296
|
+
camp.foughtAt = world.time;
|
|
297
|
+
if (!world.get(camp.alarm)) camp.alarm = entity.id;
|
|
298
|
+
if (helpsAtOnce(world, camp)) rally(world, camp);
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* The camp gives up the fight now, as it does `resetAfter` after the last blow: its list emptied, every creep of it on
|
|
302
|
+
* the way home
|
|
303
|
+
*
|
|
304
|
+
* @beta
|
|
305
|
+
*/
|
|
306
|
+
function resetCamp(world, camp) {
|
|
307
|
+
camp.aggro.length = 0;
|
|
308
|
+
camp.foughtAt = void 0;
|
|
309
|
+
camp.alarm = 0;
|
|
310
|
+
for (const id of camp.members) {
|
|
311
|
+
const creep = world.get(id);
|
|
312
|
+
const member = creep?.get(campMember);
|
|
313
|
+
if (creep?.alive && member && !member.returning) goHome(world, creep, member);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/** A creep of the camp lets go of what it fought and walks home, healing as it goes */
|
|
317
|
+
function goHome(world, entity, member) {
|
|
318
|
+
const combat = entity.get(fighting);
|
|
319
|
+
if (combat) combat.autoTarget = 0;
|
|
320
|
+
disengage(world, entity);
|
|
321
|
+
member.searching = null;
|
|
322
|
+
if (entity.get(moving) && dist(entity.pos, member.home) > 1.5) {
|
|
323
|
+
member.returning = true;
|
|
324
|
+
member.returningAt = world.time;
|
|
325
|
+
moveTo(world, entity, member.home);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* A hit on a creep of a camp, or by one: the camp's list fed (the damage done, as threat), its fight kept up, a chase of
|
|
330
|
+
* the one hit or hitting timed anew, and the camp brought at once (`helpAtOnce`). A creep on its way home turns when hit
|
|
331
|
+
* past `RETURN_GRACE`
|
|
332
|
+
*/
|
|
333
|
+
function hit(world, target, source, amount) {
|
|
334
|
+
if (!source || !world.areEnemies(source.owner, target.owner)) return;
|
|
335
|
+
const struck = target.get(campMember);
|
|
336
|
+
const camp = struck && campsOf(world)[struck.camp - 1];
|
|
337
|
+
if (struck && camp) {
|
|
338
|
+
const entry = entryOf(world, camp, source);
|
|
339
|
+
entry.threat += amount;
|
|
340
|
+
entry.lastHitAt = world.time;
|
|
341
|
+
camp.foughtAt = world.time;
|
|
342
|
+
if (!world.get(camp.alarm)) camp.alarm = source.id;
|
|
343
|
+
if (target.get(fighting)?.autoTarget === source.id) struck.blowAt = world.time;
|
|
344
|
+
if (target.alive && struck.returning && pastGrace(world, struck)) struck.returning = false;
|
|
345
|
+
if (helpsAtOnce(world, camp)) rally(world, camp);
|
|
346
|
+
}
|
|
347
|
+
const striker = source.get(campMember);
|
|
348
|
+
const own = striker && campsOf(world)[striker.camp - 1];
|
|
349
|
+
if (striker && own) {
|
|
350
|
+
entryOf(world, own, target).lastHitAt = world.time;
|
|
351
|
+
own.foughtAt = world.time;
|
|
352
|
+
if (source.get(fighting)?.autoTarget === target.id) striker.blowAt = world.time;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* What creeps do: guard their camp. They go for whoever comes close or attacks one of them, the most threat on the
|
|
357
|
+
* camp's list first; give up a chase that brings no blow for `chaseTime`, and what goes past the leash from the camp's
|
|
358
|
+
* centre; wait where they stand while the camp's fight is on, and go home `resetAfter` after its last blow, healing on
|
|
359
|
+
* the way. At night they sleep at home
|
|
360
|
+
*/
|
|
361
|
+
function guardCamp(world, entity, dt) {
|
|
362
|
+
const member = entity.get(campMember);
|
|
363
|
+
const combat = entity.get(fighting);
|
|
364
|
+
const camp = campsOf(world)[member.camp - 1];
|
|
365
|
+
const m = entity.get(moving);
|
|
366
|
+
if (entity.asleep) {
|
|
367
|
+
if (world.night && !combat.lastAttacker && !world.get(camp.alarm)) return;
|
|
368
|
+
entity.asleep = false;
|
|
369
|
+
}
|
|
370
|
+
if (member.returning) {
|
|
371
|
+
entity.health = Math.min(entity.health + entity.maxHealth * RETREAT_HEALING * dt, entity.maxHealth);
|
|
372
|
+
if (m && m.status === "moving") return;
|
|
373
|
+
if (m && dist(entity.pos, member.home) > 1.5 && m.status !== "failed") {
|
|
374
|
+
moveTo(world, entity, member.home);
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
member.returning = false;
|
|
378
|
+
member.returningAt = void 0;
|
|
379
|
+
combat.lastAttacker = 0;
|
|
380
|
+
if (camp.alarm && !world.get(camp.alarm)) camp.alarm = 0;
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
let dropped = false;
|
|
384
|
+
if (combat.autoTarget) {
|
|
385
|
+
const target = world.get(combat.autoTarget);
|
|
386
|
+
const tooFar = !target || dist(target.pos, camp) > camp.leash || dist(entity.pos, camp) > camp.leash + LEASH_SLACK;
|
|
387
|
+
if (!tooFar && lashOut(world, entity)) return;
|
|
388
|
+
let result = tooFar ? "invalid" : engage(world, entity, target, dt, !!m);
|
|
389
|
+
const stale = world.time - (member.blowAt ?? world.time) > chaseTimeOf(world, camp);
|
|
390
|
+
if (result === "chasing" && target && (stale || isBlocked(world, entity, target))) {
|
|
391
|
+
shun(world, entity, target);
|
|
392
|
+
result = "invalid";
|
|
393
|
+
}
|
|
394
|
+
if (result === "attacking" || result === "chasing") return;
|
|
395
|
+
combat.autoTarget = 0;
|
|
396
|
+
disengage(world, entity);
|
|
397
|
+
dropped = true;
|
|
398
|
+
}
|
|
399
|
+
if (!dropped && (world.tick + entity.id) % 4 !== 0) return;
|
|
400
|
+
let next = campTarget(world, entity, camp);
|
|
401
|
+
if (!next) {
|
|
402
|
+
const seen = acquireTarget(world, entity);
|
|
403
|
+
if (mayChase(world, entity, camp, seen)) next = seen;
|
|
404
|
+
}
|
|
405
|
+
const hitter = world.get(combat.lastAttacker);
|
|
406
|
+
if (!next && mayChase(world, entity, camp, hitter)) next = hitter;
|
|
407
|
+
const alarm = world.get(camp.alarm);
|
|
408
|
+
if (!next && mayChase(world, entity, camp, alarm)) next = alarm;
|
|
409
|
+
if (!next && m && hitter && canAttack(world, entity, hitter) && !isShunned(world, entity, hitter) && dist(hitter.pos, camp) <= camp.leash) {
|
|
410
|
+
member.searching = {
|
|
411
|
+
x: hitter.pos.x,
|
|
412
|
+
z: hitter.pos.z
|
|
413
|
+
};
|
|
414
|
+
moveTo(world, entity, member.searching);
|
|
415
|
+
}
|
|
416
|
+
combat.lastAttacker = 0;
|
|
417
|
+
if (next) {
|
|
418
|
+
take(world, entity, member, camp, next);
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
if (member.searching && m?.status === "moving" && dist(entity.pos, camp) <= camp.leash) return;
|
|
422
|
+
member.searching = null;
|
|
423
|
+
if (camp.foughtAt !== void 0 && world.time - camp.foughtAt < resetAfterOf(world, camp)) {
|
|
424
|
+
if (m?.status === "moving") halt(world, entity);
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
if (camp.foughtAt !== void 0 || camp.aggro.length) {
|
|
428
|
+
camp.aggro.length = 0;
|
|
429
|
+
camp.foughtAt = void 0;
|
|
430
|
+
}
|
|
431
|
+
const intruder = world.get(camp.alarm);
|
|
432
|
+
if (camp.alarm && (!intruder || dist(intruder.pos, camp) > camp.leash)) camp.alarm = 0;
|
|
433
|
+
goHome(world, entity, member);
|
|
434
|
+
if (world.night && world.settings.camps.sleep && !member.returning && !camp.alarm) entity.asleep = true;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* What turns camps on: creeps of a camp guard it instead of doing what idle units do
|
|
438
|
+
*
|
|
439
|
+
* @internal
|
|
440
|
+
*/
|
|
441
|
+
var campHooks = [defineHook({
|
|
442
|
+
hook: "idle",
|
|
443
|
+
id: "guardCamp",
|
|
444
|
+
run(world, event) {
|
|
445
|
+
if (event.handled || !event.fights || !event.entity.has(campMember)) return;
|
|
446
|
+
guardCamp(world, event.entity, event.dt);
|
|
447
|
+
event.handled = true;
|
|
448
|
+
}
|
|
449
|
+
})];
|
|
450
|
+
/**
|
|
451
|
+
* What feeds the camps' lists (`Camp.aggro`): every hit on a creep of a camp, or by one, as it is told (`damaged`). The
|
|
452
|
+
* heroes pack's, with `campHooks`
|
|
453
|
+
*
|
|
454
|
+
* @internal
|
|
455
|
+
*/
|
|
456
|
+
var campListeners = [defineListener({
|
|
457
|
+
event: damaged,
|
|
458
|
+
id: "campAggro",
|
|
459
|
+
run: (world, { target, source, amount }) => hit(world, target, source, amount)
|
|
460
|
+
})];
|
|
461
|
+
/** What a seat says of the camps, kept up to date once a tick (`campsFor`) */
|
|
462
|
+
var CAMPS = {};
|
|
463
|
+
/**
|
|
464
|
+
* The camps as a seat's player knows them (`GameSession.camps`): where they are and how strong, and which their team
|
|
465
|
+
* has seen empty. Worked out once a tick, as the minimap asks every frame: the same list and objects every time, kept
|
|
466
|
+
* up to date, so it is to read, not to keep
|
|
467
|
+
*
|
|
468
|
+
* @beta
|
|
469
|
+
*/
|
|
470
|
+
function campsFor(view) {
|
|
471
|
+
const kept = view.keep(CAMPS, () => ({
|
|
472
|
+
at: -1,
|
|
473
|
+
infos: []
|
|
474
|
+
}));
|
|
475
|
+
const { world } = view;
|
|
476
|
+
if (kept.at === world.tick) return kept.infos;
|
|
477
|
+
kept.at = world.tick;
|
|
478
|
+
const all = campsOf(world);
|
|
479
|
+
const { cleared } = view.memory;
|
|
480
|
+
const occupied = (members) => members.some((id) => !!world.get(id));
|
|
481
|
+
for (let i = 0; i < all.length; i++) {
|
|
482
|
+
const camp = all[i];
|
|
483
|
+
const known = cleared.indexOf(camp.id);
|
|
484
|
+
if (known < 0 && view.sees(camp.x, camp.z) && !occupied(camp.members)) cleared.push(camp.id);
|
|
485
|
+
else if (known >= 0 && view.sees(camp.x, camp.z) && occupied(camp.members)) cleared.splice(known, 1);
|
|
486
|
+
const info = kept.infos[i] ??= {
|
|
487
|
+
id: camp.id,
|
|
488
|
+
x: camp.x,
|
|
489
|
+
z: camp.z,
|
|
490
|
+
level: camp.level,
|
|
491
|
+
cleared: false
|
|
492
|
+
};
|
|
493
|
+
info.cleared = cleared.includes(camp.id);
|
|
494
|
+
}
|
|
495
|
+
kept.infos.length = all.length;
|
|
496
|
+
return kept.infos;
|
|
497
|
+
}
|
|
498
|
+
//#endregion
|
|
499
|
+
export { RETURN_GRACE, aggroCamp, campHooks, campLayout, campListeners, campMember, campNamed, campRespawnSystem, campTarget, camps, campsFor, campsOf, resetCamp, respawnCamp, spawnCamp };
|
|
500
|
+
|
|
501
|
+
//# sourceMappingURL=camps.js.map
|