@v12-engine/engine 0.1.0 → 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/testing.js
CHANGED
|
@@ -1,736 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
//#region src/fixture.ts
|
|
9
|
-
var worker = {
|
|
10
|
-
id: "worker",
|
|
11
|
-
name: "Worker",
|
|
12
|
-
kind: "unit",
|
|
13
|
-
radius: .4,
|
|
14
|
-
stats: {
|
|
15
|
-
health: 100,
|
|
16
|
-
attackDamage: 5,
|
|
17
|
-
attackSpeed: 1,
|
|
18
|
-
attackRange: .5,
|
|
19
|
-
moveSpeed: 4
|
|
20
|
-
},
|
|
21
|
-
sight: 8,
|
|
22
|
-
attacks: [{
|
|
23
|
-
damagePoint: .3,
|
|
24
|
-
acquisitionRange: 0,
|
|
25
|
-
targets: ["unit", "building"]
|
|
26
|
-
}],
|
|
27
|
-
cost: { gold: 50 },
|
|
28
|
-
supply: 1,
|
|
29
|
-
buildTime: 10,
|
|
30
|
-
harvester: {
|
|
31
|
-
capacity: 10,
|
|
32
|
-
gatherTime: 1
|
|
33
|
-
},
|
|
34
|
-
builds: [
|
|
35
|
-
"hall",
|
|
36
|
-
"supply",
|
|
37
|
-
"barracks",
|
|
38
|
-
"tower",
|
|
39
|
-
"altar"
|
|
40
|
-
]
|
|
41
|
-
};
|
|
42
|
-
var soldier = {
|
|
43
|
-
id: "soldier",
|
|
44
|
-
name: "Soldier",
|
|
45
|
-
kind: "unit",
|
|
46
|
-
radius: .45,
|
|
47
|
-
stats: {
|
|
48
|
-
health: 200,
|
|
49
|
-
attackDamage: 10,
|
|
50
|
-
attackSpeed: 1,
|
|
51
|
-
attackRange: .5,
|
|
52
|
-
armor: 10,
|
|
53
|
-
moveSpeed: 4
|
|
54
|
-
},
|
|
55
|
-
sight: 10,
|
|
56
|
-
attacks: [{
|
|
57
|
-
damagePoint: .3,
|
|
58
|
-
acquisitionRange: 8
|
|
59
|
-
}],
|
|
60
|
-
cost: { gold: 100 },
|
|
61
|
-
supply: 2,
|
|
62
|
-
buildTime: 10,
|
|
63
|
-
abilities: ["guard"]
|
|
64
|
-
};
|
|
65
|
-
var archer = {
|
|
66
|
-
id: "archer",
|
|
67
|
-
name: "Archer",
|
|
68
|
-
kind: "unit",
|
|
69
|
-
radius: .45,
|
|
70
|
-
stats: {
|
|
71
|
-
health: 100,
|
|
72
|
-
attackDamage: 10,
|
|
73
|
-
attackSpeed: 1,
|
|
74
|
-
attackRange: 6,
|
|
75
|
-
moveSpeed: 4
|
|
76
|
-
},
|
|
77
|
-
sight: 10,
|
|
78
|
-
attacks: [{
|
|
79
|
-
damagePoint: .3,
|
|
80
|
-
acquisitionRange: 8,
|
|
81
|
-
projectileSpeed: 20,
|
|
82
|
-
targets: ["ground", "air"]
|
|
83
|
-
}],
|
|
84
|
-
cost: {
|
|
85
|
-
gold: 100,
|
|
86
|
-
lumber: 20
|
|
87
|
-
},
|
|
88
|
-
supply: 2,
|
|
89
|
-
buildTime: 10
|
|
90
|
-
};
|
|
91
|
-
var hero = {
|
|
92
|
-
id: "hero",
|
|
93
|
-
name: "Hero",
|
|
94
|
-
kind: "unit",
|
|
95
|
-
radius: .5,
|
|
96
|
-
stats: {
|
|
97
|
-
health: 300,
|
|
98
|
-
mana: 100,
|
|
99
|
-
manaRegen: 1,
|
|
100
|
-
attackDamage: 20,
|
|
101
|
-
attackSpeed: 1,
|
|
102
|
-
attackRange: .5,
|
|
103
|
-
armor: 10,
|
|
104
|
-
moveSpeed: 4
|
|
105
|
-
},
|
|
106
|
-
sight: 12,
|
|
107
|
-
attacks: [{
|
|
108
|
-
damagePoint: .3,
|
|
109
|
-
acquisitionRange: 8
|
|
110
|
-
}],
|
|
111
|
-
hero: {
|
|
112
|
-
growth: { stats: {
|
|
113
|
-
health: 20,
|
|
114
|
-
mana: 10,
|
|
115
|
-
attackDamage: 2
|
|
116
|
-
} },
|
|
117
|
-
learns: ["heal", "guard"]
|
|
118
|
-
},
|
|
119
|
-
inventory: 6,
|
|
120
|
-
cost: {
|
|
121
|
-
gold: 400,
|
|
122
|
-
lumber: 100
|
|
123
|
-
},
|
|
124
|
-
supply: 5,
|
|
125
|
-
buildTime: 40
|
|
126
|
-
};
|
|
127
|
-
var creep = {
|
|
128
|
-
id: "creep",
|
|
129
|
-
name: "Creep",
|
|
130
|
-
kind: "unit",
|
|
131
|
-
radius: .45,
|
|
132
|
-
stats: {
|
|
133
|
-
health: 200,
|
|
134
|
-
attackDamage: 10,
|
|
135
|
-
attackSpeed: 1,
|
|
136
|
-
attackRange: .5,
|
|
137
|
-
moveSpeed: 3
|
|
138
|
-
},
|
|
139
|
-
sight: 8,
|
|
140
|
-
attacks: [{
|
|
141
|
-
damagePoint: .3,
|
|
142
|
-
acquisitionRange: 5
|
|
143
|
-
}],
|
|
144
|
-
level: 1,
|
|
145
|
-
bounty: [10, 10],
|
|
146
|
-
xp: 20
|
|
147
|
-
};
|
|
148
|
-
var hall = {
|
|
149
|
-
id: "hall",
|
|
150
|
-
name: "Hall",
|
|
151
|
-
kind: "building",
|
|
152
|
-
radius: 2,
|
|
153
|
-
footprint: {
|
|
154
|
-
w: 4,
|
|
155
|
-
d: 4
|
|
156
|
-
},
|
|
157
|
-
stats: {
|
|
158
|
-
health: 1500,
|
|
159
|
-
armor: 10
|
|
160
|
-
},
|
|
161
|
-
sight: 12,
|
|
162
|
-
cost: {
|
|
163
|
-
gold: 400,
|
|
164
|
-
lumber: 200
|
|
165
|
-
},
|
|
166
|
-
buildTime: 40,
|
|
167
|
-
supplyProvided: 10,
|
|
168
|
-
trains: ["worker"],
|
|
169
|
-
dropOff: true,
|
|
170
|
-
upgradesTo: "keep"
|
|
171
|
-
};
|
|
172
|
-
var keep = {
|
|
173
|
-
...hall,
|
|
174
|
-
id: "keep",
|
|
175
|
-
name: "Keep",
|
|
176
|
-
stats: {
|
|
177
|
-
health: 2e3,
|
|
178
|
-
armor: 10
|
|
179
|
-
},
|
|
180
|
-
cost: {
|
|
181
|
-
gold: 300,
|
|
182
|
-
lumber: 200
|
|
183
|
-
},
|
|
184
|
-
provides: ["hall"],
|
|
185
|
-
upgradesTo: void 0
|
|
186
|
-
};
|
|
187
|
-
var supply = {
|
|
188
|
-
id: "supply",
|
|
189
|
-
name: "Supply",
|
|
190
|
-
kind: "building",
|
|
191
|
-
radius: 1,
|
|
192
|
-
footprint: {
|
|
193
|
-
w: 2,
|
|
194
|
-
d: 2
|
|
195
|
-
},
|
|
196
|
-
stats: {
|
|
197
|
-
health: 500,
|
|
198
|
-
armor: 10
|
|
199
|
-
},
|
|
200
|
-
sight: 6,
|
|
201
|
-
cost: { gold: 50 },
|
|
202
|
-
buildTime: 10,
|
|
203
|
-
supplyProvided: 10
|
|
204
|
-
};
|
|
205
|
-
var barracks = {
|
|
206
|
-
id: "barracks",
|
|
207
|
-
name: "Barracks",
|
|
208
|
-
kind: "building",
|
|
209
|
-
radius: 1.5,
|
|
210
|
-
footprint: {
|
|
211
|
-
w: 3,
|
|
212
|
-
d: 3
|
|
213
|
-
},
|
|
214
|
-
stats: {
|
|
215
|
-
health: 1e3,
|
|
216
|
-
armor: 10
|
|
217
|
-
},
|
|
218
|
-
sight: 9,
|
|
219
|
-
cost: {
|
|
220
|
-
gold: 150,
|
|
221
|
-
lumber: 50
|
|
222
|
-
},
|
|
223
|
-
buildTime: 20,
|
|
224
|
-
trains: ["soldier", "archer"],
|
|
225
|
-
researches: ["armour"]
|
|
226
|
-
};
|
|
227
|
-
var tower = {
|
|
228
|
-
id: "tower",
|
|
229
|
-
name: "Tower",
|
|
230
|
-
kind: "building",
|
|
231
|
-
radius: 1,
|
|
232
|
-
footprint: {
|
|
233
|
-
w: 2,
|
|
234
|
-
d: 2
|
|
235
|
-
},
|
|
236
|
-
stats: {
|
|
237
|
-
health: 500,
|
|
238
|
-
attackDamage: 20,
|
|
239
|
-
attackSpeed: 1,
|
|
240
|
-
attackRange: 8,
|
|
241
|
-
armor: 10
|
|
242
|
-
},
|
|
243
|
-
sight: 12,
|
|
244
|
-
attacks: [{
|
|
245
|
-
damagePoint: .3,
|
|
246
|
-
acquisitionRange: 8,
|
|
247
|
-
projectileSpeed: 20,
|
|
248
|
-
targets: ["ground", "air"]
|
|
249
|
-
}],
|
|
250
|
-
cost: {
|
|
251
|
-
gold: 100,
|
|
252
|
-
lumber: 50
|
|
253
|
-
},
|
|
254
|
-
buildTime: 20,
|
|
255
|
-
requires: ["barracks"]
|
|
256
|
-
};
|
|
257
|
-
var altar = {
|
|
258
|
-
id: "altar",
|
|
259
|
-
name: "Altar",
|
|
260
|
-
kind: "building",
|
|
261
|
-
radius: 1.5,
|
|
262
|
-
footprint: {
|
|
263
|
-
w: 3,
|
|
264
|
-
d: 3
|
|
265
|
-
},
|
|
266
|
-
stats: {
|
|
267
|
-
health: 1e3,
|
|
268
|
-
armor: 10
|
|
269
|
-
},
|
|
270
|
-
sight: 9,
|
|
271
|
-
cost: {
|
|
272
|
-
gold: 200,
|
|
273
|
-
lumber: 50
|
|
274
|
-
},
|
|
275
|
-
buildTime: 30,
|
|
276
|
-
trains: ["hero"],
|
|
277
|
-
revives: true
|
|
278
|
-
};
|
|
279
|
-
var mine = {
|
|
280
|
-
id: "mine",
|
|
281
|
-
name: "Mine",
|
|
282
|
-
kind: "resource",
|
|
283
|
-
radius: 2,
|
|
284
|
-
footprint: {
|
|
285
|
-
w: 4,
|
|
286
|
-
d: 4
|
|
287
|
-
},
|
|
288
|
-
stats: { health: 1 },
|
|
289
|
-
sight: 0,
|
|
290
|
-
invulnerable: true,
|
|
291
|
-
resource: {
|
|
292
|
-
kind: "gold",
|
|
293
|
-
amount: 1e4,
|
|
294
|
-
slots: 1,
|
|
295
|
-
entered: true
|
|
296
|
-
}
|
|
297
|
-
};
|
|
298
|
-
var tree = {
|
|
299
|
-
id: "tree",
|
|
300
|
-
name: "Tree",
|
|
301
|
-
kind: "resource",
|
|
302
|
-
radius: .5,
|
|
303
|
-
footprint: {
|
|
304
|
-
w: 1,
|
|
305
|
-
d: 1
|
|
306
|
-
},
|
|
307
|
-
stats: { health: 1 },
|
|
308
|
-
sight: 0,
|
|
309
|
-
invulnerable: true,
|
|
310
|
-
fellable: true,
|
|
311
|
-
resource: {
|
|
312
|
-
kind: "lumber",
|
|
313
|
-
amount: 50,
|
|
314
|
-
slots: 1,
|
|
315
|
-
gatherTime: 5
|
|
316
|
-
}
|
|
317
|
-
};
|
|
318
|
-
var armour = {
|
|
319
|
-
id: "armour",
|
|
320
|
-
name: "Armour",
|
|
321
|
-
description: "+10 armor for soldiers and archers",
|
|
322
|
-
cost: {
|
|
323
|
-
gold: 100,
|
|
324
|
-
lumber: 50
|
|
325
|
-
},
|
|
326
|
-
researchTime: 20,
|
|
327
|
-
maxLevel: 2,
|
|
328
|
-
effects: [{
|
|
329
|
-
units: ["soldier", "archer"],
|
|
330
|
-
stats: { armor: 10 }
|
|
331
|
-
}]
|
|
332
|
-
};
|
|
333
|
-
var guarded = {
|
|
334
|
-
id: "guarded",
|
|
335
|
-
name: "Guarded",
|
|
336
|
-
description: "+20 armor",
|
|
337
|
-
duration: 10,
|
|
338
|
-
stats: { armor: 20 }
|
|
339
|
-
};
|
|
340
|
-
var abilities = [
|
|
341
|
-
{
|
|
342
|
-
id: "heal",
|
|
343
|
-
name: "Heal",
|
|
344
|
-
description: "Heals a friendly unit for 100 or 200",
|
|
345
|
-
target: "unit",
|
|
346
|
-
targets: {
|
|
347
|
-
allies: true,
|
|
348
|
-
self: false
|
|
349
|
-
},
|
|
350
|
-
manaCost: 10,
|
|
351
|
-
cooldown: 5,
|
|
352
|
-
range: 6,
|
|
353
|
-
effects: [{
|
|
354
|
-
type: "heal",
|
|
355
|
-
amount: [100, 200]
|
|
356
|
-
}]
|
|
357
|
-
},
|
|
358
|
-
{
|
|
359
|
-
id: "guard",
|
|
360
|
-
name: "Guard",
|
|
361
|
-
description: "+20 armor for 10 seconds",
|
|
362
|
-
target: "none",
|
|
363
|
-
cooldown: 10,
|
|
364
|
-
effects: [{
|
|
365
|
-
type: "buff",
|
|
366
|
-
buff: "guarded",
|
|
367
|
-
on: "caster"
|
|
368
|
-
}]
|
|
369
|
-
},
|
|
370
|
-
{
|
|
371
|
-
id: "drink",
|
|
372
|
-
name: "Drink",
|
|
373
|
-
description: "Heals 100",
|
|
374
|
-
target: "none",
|
|
375
|
-
cooldown: 10,
|
|
376
|
-
effects: [{
|
|
377
|
-
type: "heal",
|
|
378
|
-
amount: 100,
|
|
379
|
-
on: "caster"
|
|
380
|
-
}]
|
|
381
|
-
}
|
|
382
|
-
];
|
|
383
|
-
var items = [{
|
|
384
|
-
id: "sword",
|
|
385
|
-
name: "Sword",
|
|
386
|
-
description: "+10 attack damage",
|
|
387
|
-
tier: "basic",
|
|
388
|
-
cost: { gold: 100 },
|
|
389
|
-
bonus: { stats: { attackDamage: 10 } }
|
|
390
|
-
}, {
|
|
391
|
-
id: "potion",
|
|
392
|
-
name: "Potion",
|
|
393
|
-
description: "Heals 100 when drunk",
|
|
394
|
-
tier: "consumable",
|
|
395
|
-
cost: { gold: 50 },
|
|
396
|
-
charges: 1,
|
|
397
|
-
ability: "drink"
|
|
398
|
-
}];
|
|
399
|
-
/** A hall where a player starts, and five workers on the side of the closest mine */
|
|
400
|
-
function startingBase(world, player, at) {
|
|
401
|
-
const base = world.spawn("hall", player, at);
|
|
402
|
-
let closest;
|
|
403
|
-
for (const entity of world.entities.values()) {
|
|
404
|
-
if (entity.def.resource?.kind !== "gold" || dist(entity.pos, base.pos) > 20) continue;
|
|
405
|
-
if (!closest || dist(entity.pos, base.pos) < dist(closest, base.pos)) closest = entity.pos;
|
|
406
|
-
}
|
|
407
|
-
const towards = closest ? {
|
|
408
|
-
x: Math.sign(closest.x - at.x),
|
|
409
|
-
z: Math.sign(closest.z - at.z)
|
|
410
|
-
} : {
|
|
411
|
-
x: 1,
|
|
412
|
-
z: 0
|
|
413
|
-
};
|
|
414
|
-
for (let i = 0; i < 5; i++) world.spawn("worker", player, {
|
|
415
|
-
x: at.x + towards.x * 4 + (i - 2) * towards.z,
|
|
416
|
-
z: at.z + towards.z * 4 + (i - 2) * towards.x
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
/**
|
|
420
|
-
* The fixture game (see the top of this file): every role of the kit, with round numbers. Gold and lumber, 1000 of each
|
|
421
|
-
* to start with; a hall and five workers at each start; heroes on (`withHeroes`); no fog explored at the start. A new
|
|
422
|
-
* one each time, for a test to change
|
|
423
|
-
*
|
|
424
|
-
* @beta
|
|
425
|
-
*/
|
|
426
|
-
function fixtureGame() {
|
|
427
|
-
return {
|
|
428
|
-
id: "fixture",
|
|
429
|
-
name: "Fixture",
|
|
430
|
-
version: "1.0.0",
|
|
431
|
-
units: [
|
|
432
|
-
worker,
|
|
433
|
-
soldier,
|
|
434
|
-
archer,
|
|
435
|
-
hero,
|
|
436
|
-
creep,
|
|
437
|
-
hall,
|
|
438
|
-
keep,
|
|
439
|
-
supply,
|
|
440
|
-
barracks,
|
|
441
|
-
tower,
|
|
442
|
-
altar,
|
|
443
|
-
mine,
|
|
444
|
-
tree
|
|
445
|
-
].map((def) => structuredClone(def)),
|
|
446
|
-
upgrades: [structuredClone(armour)],
|
|
447
|
-
abilities: structuredClone(abilities),
|
|
448
|
-
buffs: [structuredClone(guarded)],
|
|
449
|
-
items: structuredClone(items),
|
|
450
|
-
resources: [{
|
|
451
|
-
id: "gold",
|
|
452
|
-
name: "Gold",
|
|
453
|
-
start: 1e3
|
|
454
|
-
}, {
|
|
455
|
-
id: "lumber",
|
|
456
|
-
name: "Lumber",
|
|
457
|
-
start: 1e3
|
|
458
|
-
}],
|
|
459
|
-
currency: "gold",
|
|
460
|
-
packs: [withHeroes()],
|
|
461
|
-
start: { spawn: startingBase }
|
|
462
|
-
};
|
|
463
|
-
}
|
|
464
|
-
/**
|
|
465
|
-
* A map of the fixture game, 64 cells a side: two players, starting at opposite corners (12, 12 and 52, 52), a gold
|
|
466
|
-
* mine and a row of trees by each start, and a camp of three creeps in the middle
|
|
467
|
-
*
|
|
468
|
-
* @beta
|
|
469
|
-
*/
|
|
470
|
-
function fixtureMap() {
|
|
471
|
-
const map = createMap({
|
|
472
|
-
name: "Fixture",
|
|
473
|
-
width: 64,
|
|
474
|
-
depth: 64,
|
|
475
|
-
game: "fixture"
|
|
476
|
-
});
|
|
477
|
-
map.players[0].start = {
|
|
478
|
-
x: 12,
|
|
479
|
-
z: 12
|
|
480
|
-
};
|
|
481
|
-
map.players[1].start = {
|
|
482
|
-
x: 52,
|
|
483
|
-
z: 52
|
|
484
|
-
};
|
|
485
|
-
let id = 1;
|
|
486
|
-
const object = (type, x, z) => map.objects.push({
|
|
487
|
-
id: id++,
|
|
488
|
-
type,
|
|
489
|
-
owner: 0,
|
|
490
|
-
x,
|
|
491
|
-
z,
|
|
492
|
-
facing: 0,
|
|
493
|
-
scale: 1
|
|
494
|
-
});
|
|
495
|
-
object("mine", 12, 22);
|
|
496
|
-
object("mine", 52, 42);
|
|
497
|
-
for (let i = 0; i < 6; i++) {
|
|
498
|
-
object("tree", 22.5 + i, 4.5);
|
|
499
|
-
object("tree", 36.5 + i, 59.5);
|
|
500
|
-
}
|
|
501
|
-
map.camps.push({
|
|
502
|
-
id: id++,
|
|
503
|
-
x: 32,
|
|
504
|
-
z: 32,
|
|
505
|
-
units: [
|
|
506
|
-
"creep",
|
|
507
|
-
"creep",
|
|
508
|
-
"creep"
|
|
509
|
-
]
|
|
510
|
-
});
|
|
511
|
-
return map;
|
|
512
|
-
}
|
|
513
|
-
//#endregion
|
|
514
|
-
//#region src/aiTesting.ts
|
|
515
|
-
/**
|
|
516
|
-
* Testing a computer player (AI plan, E3): what a game's tests of its brains are written with, in
|
|
517
|
-
* `@v12-engine/engine/testing` beside `testWorld` and `run`. A brain is tested as it plays, through the world it sits in:
|
|
518
|
-
*
|
|
519
|
-
* const world = await testWorld(myGame)
|
|
520
|
-
* world.computers.seat(ENEMY, { enemyBases: [home], brain: myBrain })
|
|
521
|
-
* const watch = watchComputer(world, ENEMY) // its invariants, every think
|
|
522
|
-
* run(world, 120)
|
|
523
|
-
* expectDecision(thinkOnce(world, ENEMY), 'ai.attack')
|
|
524
|
-
* watch.assert() // no rule broken
|
|
525
|
-
*
|
|
526
|
-
* `thinkOnce` has a seated brain think now and gives its report; `expectDecision` says a goal runs, or why not in
|
|
527
|
-
* words; `watchComputer` checks the invariants of `ai/checks.ts` after every think (a unit in one squad, gold spent
|
|
528
|
-
* once, finite numbers, commands about what it sees, no churn, nothing stuck) and keeps what it decided; `fairPlay` is
|
|
529
|
-
* the one about seeing; `recordDecisions` keeps every computer's decisions for a replay's side file; `checkComputerSave`
|
|
530
|
-
* is the seventh invariant: a game saved and loaded decides the same from then on. These take the world, which a test
|
|
531
|
-
* may: the brains under test never do.
|
|
532
|
-
*/
|
|
533
|
-
/**
|
|
534
|
-
* The brain that plays a player, where one is seated (`world.computers.seat`): none where nobody is, or where what is
|
|
535
|
-
* seated is not a brain (`defineComputer`)
|
|
536
|
-
*
|
|
537
|
-
* @beta
|
|
538
|
-
*/
|
|
539
|
-
function brainOf(world, player) {
|
|
540
|
-
const computer = world.computers.get(player)?.computer;
|
|
541
|
-
return computer instanceof Brain ? computer : void 0;
|
|
542
|
-
}
|
|
543
|
-
/** The brain at a player, or an error that says what is seated there instead */
|
|
544
|
-
function seated(world, player) {
|
|
545
|
-
const brain = brainOf(world, player);
|
|
546
|
-
if (brain) return brain;
|
|
547
|
-
const system = world.computers.get(player);
|
|
548
|
-
throw new Error(system ? `The computer player at ${player} is not a brain (defineBrain): it has no report` : `No computer player is seated at ${player}`);
|
|
549
|
-
}
|
|
550
|
-
/**
|
|
551
|
-
* Has the brain at a player think now, all of it (a think its budget slices over ticks is run to its end), over a new
|
|
552
|
-
* picture of the game, and gives its report: what a test reads after setting a scene. Its commands land at the next
|
|
553
|
-
* tick, as a think's do. A think the seat would have had is not skipped: this one is beside them
|
|
554
|
-
*
|
|
555
|
-
* @beta
|
|
556
|
-
*/
|
|
557
|
-
function thinkOnce(world, player) {
|
|
558
|
-
const brain = seated(world, player);
|
|
559
|
-
do
|
|
560
|
-
brain.think();
|
|
561
|
-
while (brain.busy);
|
|
562
|
-
return brain.report();
|
|
563
|
-
}
|
|
564
|
-
/**
|
|
565
|
-
* Says that a goal runs, as of a report (`thinkOnce`, `Brain.report`): it is picked and holds what it claimed. Throws
|
|
566
|
-
* where it does not, with its row in words (`Brain.explain`): what each consideration answered and what kept it out.
|
|
567
|
-
* Gives the goal's row. With `picked: false`, says it does not run
|
|
568
|
-
*
|
|
569
|
-
* expectDecision(thinkOnce(world, ENEMY), 'ai.defend')
|
|
570
|
-
*
|
|
571
|
-
* @beta
|
|
572
|
-
*/
|
|
573
|
-
function expectDecision(report, goal, options = {}) {
|
|
574
|
-
const wanted = options.picked ?? true;
|
|
575
|
-
const row = report.goals.find((each) => each.id === goal);
|
|
576
|
-
if (!row) throw new Error(`The brain ${report.brain} has no goal "${goal}": its goals are ${report.goals.map((each) => each.id).join(", ") || "none"}`);
|
|
577
|
-
if (row.picked === wanted) return row;
|
|
578
|
-
const seconds = (tick) => tick / report.tickRate;
|
|
579
|
-
throw new Error(`Expected ${goal} ${wanted ? "to run" : "not to run"} at ${report.time.toFixed(1)} s, and it ${wanted ? "does not" : "does"}. ${explainGoal(row, seconds, report.time)}${report.goal && report.goal !== goal ? ` The best goal is ${report.goal}.` : ""}`);
|
|
580
|
-
}
|
|
581
|
-
/**
|
|
582
|
-
* Follows the brain at a player from now on: after every think, the invariants of `ai/checks.ts` (a unit in one squad
|
|
583
|
-
* and one hold, gold spent once, finite numbers, commands about what it sees, no order sent again to a unit still at
|
|
584
|
-
* it, builders, tasks, holds and wants that end), with what it decided and sent. A broken rule is kept, not thrown,
|
|
585
|
-
* unless `onViolation` throws: `assert` at the end says them all
|
|
586
|
-
*
|
|
587
|
-
* @beta
|
|
588
|
-
*/
|
|
589
|
-
function watchComputer(world, player, options = {}) {
|
|
590
|
-
const brain = seated(world, player);
|
|
591
|
-
const violations = [];
|
|
592
|
-
const decisions = [];
|
|
593
|
-
let thinks = 0;
|
|
594
|
-
let commands = 0;
|
|
595
|
-
const { stop: unchecked } = checkBrain(brain, {
|
|
596
|
-
...options,
|
|
597
|
-
onViolation: (violation) => {
|
|
598
|
-
violations.push(violation);
|
|
599
|
-
options.onViolation?.(violation);
|
|
600
|
-
}
|
|
601
|
-
});
|
|
602
|
-
const observer = options.observe ? new LocalSession(world, player, { observer: true }) : void 0;
|
|
603
|
-
const unwatched = brain.watch({
|
|
604
|
-
sent: (command) => {
|
|
605
|
-
commands++;
|
|
606
|
-
options.sent?.(command, brain);
|
|
607
|
-
},
|
|
608
|
-
decided: (decision) => void decisions.push(decision),
|
|
609
|
-
thought: () => {
|
|
610
|
-
thinks++;
|
|
611
|
-
if (observer) options.observe(observer.snapshot(), brain);
|
|
612
|
-
}
|
|
613
|
-
});
|
|
614
|
-
return {
|
|
615
|
-
brain,
|
|
616
|
-
violations,
|
|
617
|
-
decisions,
|
|
618
|
-
get thinks() {
|
|
619
|
-
return thinks;
|
|
620
|
-
},
|
|
621
|
-
get commands() {
|
|
622
|
-
return commands;
|
|
623
|
-
},
|
|
624
|
-
assert() {
|
|
625
|
-
if (!violations.length) return;
|
|
626
|
-
const lines = violations.slice(0, 20).map((each) => ` ${each.invariant} at tick ${each.tick}: ${each.message}`);
|
|
627
|
-
const more = violations.length > 20 ? `\n and ${violations.length - 20} more` : "";
|
|
628
|
-
throw new Error(`The computer player at ${player} broke ${violations.length} rule${violations.length === 1 ? "" : "s"}:\n${lines.join("\n")}${more}`);
|
|
629
|
-
},
|
|
630
|
-
stop() {
|
|
631
|
-
unchecked();
|
|
632
|
-
unwatched();
|
|
633
|
-
observer?.dispose();
|
|
634
|
-
}
|
|
635
|
-
};
|
|
636
|
-
}
|
|
637
|
-
/**
|
|
638
|
-
* Follows the brain at a player from now on for fair play: that it never sends a command about an entity its snapshot
|
|
639
|
-
* did not have (a fog leak: its seat's session would drop the command, so a game shows nothing; this says it), and
|
|
640
|
-
* counts what the game refused
|
|
641
|
-
*
|
|
642
|
-
* @beta
|
|
643
|
-
*/
|
|
644
|
-
function fairPlay(world, player) {
|
|
645
|
-
const watch = watchComputer(world, player, { invariants: ["commands"] });
|
|
646
|
-
const brain = watch.brain;
|
|
647
|
-
const refusedBefore = brain.stats.refused;
|
|
648
|
-
return {
|
|
649
|
-
get unfair() {
|
|
650
|
-
return watch.violations;
|
|
651
|
-
},
|
|
652
|
-
get refused() {
|
|
653
|
-
return brain.stats.refused - refusedBefore;
|
|
654
|
-
},
|
|
655
|
-
assert: () => watch.assert(),
|
|
656
|
-
stop: () => watch.stop()
|
|
657
|
-
};
|
|
658
|
-
}
|
|
659
|
-
/** How many recorders were made: each one's system a name of its own */
|
|
660
|
-
var recorders = 0;
|
|
661
|
-
/**
|
|
662
|
-
* Keeps the decisions of every brain seated at a world, from now on, those seated later included (looked for at each
|
|
663
|
-
* tick, by a system of its own that keeps nothing in a save)
|
|
664
|
-
*
|
|
665
|
-
* @beta
|
|
666
|
-
*/
|
|
667
|
-
function recordDecisions(world) {
|
|
668
|
-
const decisions = [];
|
|
669
|
-
const watched = /* @__PURE__ */ new Map();
|
|
670
|
-
const look = () => {
|
|
671
|
-
for (const player of world.computers.list()) {
|
|
672
|
-
const brain = brainOf(world, player);
|
|
673
|
-
if (!brain || watched.has(brain)) continue;
|
|
674
|
-
watched.set(brain, brain.watch({ decided: (decision) => void decisions.push({
|
|
675
|
-
...decision,
|
|
676
|
-
player: brain.playerId,
|
|
677
|
-
brain: brain.def.id
|
|
678
|
-
}) }));
|
|
679
|
-
}
|
|
680
|
-
};
|
|
681
|
-
look();
|
|
682
|
-
const name = `core.ai.recordDecisions.${++recorders}`;
|
|
683
|
-
world.addSystem({
|
|
684
|
-
name,
|
|
685
|
-
update: look
|
|
686
|
-
});
|
|
687
|
-
return {
|
|
688
|
-
decisions,
|
|
689
|
-
stop() {
|
|
690
|
-
world.removeSystem(name);
|
|
691
|
-
for (const unwatch of watched.values()) unwatch();
|
|
692
|
-
watched.clear();
|
|
693
|
-
}
|
|
694
|
-
};
|
|
695
|
-
}
|
|
696
|
-
/**
|
|
697
|
-
* The seventh invariant of a computer player: a game saved at tick `from` and loaded makes the same decisions from then
|
|
698
|
-
* on as the game it was saved from, under the same commands. Makes the world with `make` (its computers seated, as a
|
|
699
|
-
* game seats them), runs it to `from`, saves it as a file would keep it and loads that with `game`, then runs both to
|
|
700
|
-
* `ticks` and compares what every computer decided. What lost rng, tasks or memory in a restore shows as
|
|
701
|
-
*
|
|
702
|
-
* expect(await checkComputerSave(() => duel(), { from: 600, ticks: 2400, game: melee })).toBeNull()
|
|
703
|
-
*
|
|
704
|
-
* @beta
|
|
705
|
-
*/
|
|
706
|
-
async function checkComputerSave(make, options) {
|
|
707
|
-
const saved = await make();
|
|
708
|
-
let loaded;
|
|
709
|
-
try {
|
|
710
|
-
while (saved.tick < options.from) saved.step();
|
|
711
|
-
loaded = await loadWorld(decodeSave(encodeSave(saveWorld(saved))), { game: options.game });
|
|
712
|
-
const before = recordDecisions(saved);
|
|
713
|
-
const after = recordDecisions(loaded);
|
|
714
|
-
while (saved.tick < options.ticks) {
|
|
715
|
-
saved.step();
|
|
716
|
-
loaded.step();
|
|
717
|
-
}
|
|
718
|
-
before.stop();
|
|
719
|
-
after.stop();
|
|
720
|
-
const a = before.decisions;
|
|
721
|
-
const b = after.decisions;
|
|
722
|
-
for (let i = 0; i < Math.max(a.length, b.length); i++) if (JSON.stringify(a[i]) !== JSON.stringify(b[i])) return {
|
|
723
|
-
index: i,
|
|
724
|
-
...a[i] && { saved: a[i] },
|
|
725
|
-
...b[i] && { loaded: b[i] }
|
|
726
|
-
};
|
|
727
|
-
return null;
|
|
728
|
-
} finally {
|
|
729
|
-
saved.dispose();
|
|
730
|
-
loaded?.dispose();
|
|
731
|
-
}
|
|
732
|
-
}
|
|
733
|
-
//#endregion
|
|
1
|
+
import { Terrain } from "./terrain.js";
|
|
2
|
+
import { createWorld } from "./game.js";
|
|
3
|
+
import { rulesOf } from "./createGame.js";
|
|
4
|
+
import { checkDeterminism, firstDifference, worldFingerprint, worldHash, worldState } from "./determinism.js";
|
|
5
|
+
import { fixtureGame, fixtureMap } from "./fixture.js";
|
|
6
|
+
import { playGame, simulate, winRates } from "./simulate.js";
|
|
7
|
+
import { brainOf, checkComputerSave, expectDecision, fairPlay, recordDecisions, thinkOnce, watchComputer } from "./aiTesting.js";
|
|
734
8
|
//#region src/testing.ts
|
|
735
9
|
/**
|
|
736
10
|
* Flat ground, `size` cells a side: 48 when left out
|
|
@@ -777,15 +51,15 @@ var TEST_PLAYERS = [
|
|
|
777
51
|
}
|
|
778
52
|
];
|
|
779
53
|
/**
|
|
780
|
-
* A small world of a game for a test: flat ground, a neutral player and two enemies (`TEST_PLAYERS`), the same every
|
|
54
|
+
* A small world of a game for a test (the game, `createGame`, or its module, `Rules`): flat ground, a neutral player and two enemies (`TEST_PLAYERS`), the same every
|
|
781
55
|
* time (seed 7). Each of them is the test's to say otherwise
|
|
782
56
|
*
|
|
783
|
-
* @
|
|
57
|
+
* @public
|
|
784
58
|
*/
|
|
785
59
|
function testWorld(game, options = {}) {
|
|
786
60
|
return createWorld({
|
|
787
61
|
terrain: options.terrain ?? flatTerrain(options.size),
|
|
788
|
-
game,
|
|
62
|
+
rules: rulesOf(game),
|
|
789
63
|
seed: options.seed ?? 7,
|
|
790
64
|
players: options.players ?? TEST_PLAYERS.map((player) => ({ ...player })),
|
|
791
65
|
log: options.log
|
|
@@ -794,7 +68,7 @@ function testWorld(game, options = {}) {
|
|
|
794
68
|
/**
|
|
795
69
|
* Steps the world for up to `seconds`, stopping early once `until` holds. Returns the time that went by in it
|
|
796
70
|
*
|
|
797
|
-
* @
|
|
71
|
+
* @public
|
|
798
72
|
*/
|
|
799
73
|
function run(world, seconds, until) {
|
|
800
74
|
const ticks = Math.ceil(seconds * world.tickRate);
|
|
@@ -807,7 +81,7 @@ function run(world, seconds, until) {
|
|
|
807
81
|
/**
|
|
808
82
|
* Gives units an order, as their owner would: taken up at the next tick. `queue` adds it after what they are doing
|
|
809
83
|
*
|
|
810
|
-
* @
|
|
84
|
+
* @public
|
|
811
85
|
*/
|
|
812
86
|
var order = (world, entities, init, queue = false) => world.issue({
|
|
813
87
|
type: "order",
|
|
@@ -817,6 +91,6 @@ var order = (world, entities, init, queue = false) => world.issue({
|
|
|
817
91
|
queue
|
|
818
92
|
});
|
|
819
93
|
//#endregion
|
|
820
|
-
export { TEST_PLAYERS, brainOf, checkComputerSave, checkDeterminism,
|
|
94
|
+
export { TEST_PLAYERS, brainOf, checkComputerSave, checkDeterminism, expectDecision, fairPlay, firstDifference, fixtureGame, fixtureMap, flatTerrain, order, playGame, recordDecisions, run, simulate, testWorld, thinkOnce, watchComputer, winRates, worldFingerprint, worldHash, worldState };
|
|
821
95
|
|
|
822
96
|
//# sourceMappingURL=testing.js.map
|