@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/game.js
ADDED
|
@@ -0,0 +1,834 @@
|
|
|
1
|
+
import { spawnStartingBase } from "./start.js";
|
|
2
|
+
import { noStats } from "./defs.js";
|
|
3
|
+
import { inventorySlots } from "./inventory.js";
|
|
4
|
+
import { eventsPart, snapshotField } from "./replication.js";
|
|
5
|
+
import { constructionSystem, toldBuilt, toldConstructionCancelled, toldConstructionStarted, toldWork } from "./systems/construction.js";
|
|
6
|
+
import { toldMessage } from "./messages.js";
|
|
7
|
+
import { productionQueue, toldUpgradeCancelled } from "./systems/productionQueue.js";
|
|
8
|
+
import { toldLevelUp, toldRevived, toldXp } from "./hero.js";
|
|
9
|
+
import { toldStrike } from "./abilities/land.js";
|
|
10
|
+
import { toldBuffOff, toldBuffOn } from "./abilities/buffs.js";
|
|
11
|
+
import { movementSystem } from "./systems/movement.js";
|
|
12
|
+
import { combatSystem } from "./systems/combat.js";
|
|
13
|
+
import { missilesPart, toldMana, toldMissileHit } from "./abilities/effects.js";
|
|
14
|
+
import { areaSystem } from "./areas.js";
|
|
15
|
+
import { toldRustle } from "./concealment.js";
|
|
16
|
+
import "./map/types.js";
|
|
17
|
+
import { fieldValues, mapCampData, mapFields, mapPlayerData, mapRegionData } from "./mapFields.js";
|
|
18
|
+
import { mapInfo } from "./names.js";
|
|
19
|
+
import { toldGust } from "./foliage.js";
|
|
20
|
+
import { hasGroundSpeeds, navigationSpeedOn } from "./groundSpeed.js";
|
|
21
|
+
import { overSettings, resolveSettings } from "./rules.js";
|
|
22
|
+
import { timerSystem } from "./timers.js";
|
|
23
|
+
import { sequenceSystem } from "./sequences.js";
|
|
24
|
+
import { regionCinematic, toldCinematic, toldCinematicCue } from "./cinematics.js";
|
|
25
|
+
import { toldCast, toldCastCancelled, toldChannelEnded, toldChannelStarted, toldWindup } from "./abilities/castTold.js";
|
|
26
|
+
import { toldCells, toldCellsSeen } from "./cellLayers.js";
|
|
27
|
+
import { cameraPart, toldCamera } from "./cameraOrders.js";
|
|
28
|
+
import { coreFormations } from "./formation.js";
|
|
29
|
+
import { itemTier, itemsPart, toldPicked } from "./items.js";
|
|
30
|
+
import { castOrder } from "./orders/cast.js";
|
|
31
|
+
import { gathering, harvestOrder, returnOrder } from "./orders/harvest.js";
|
|
32
|
+
import { checkRaces, raceHooks, raceResources } from "./races.js";
|
|
33
|
+
import { toldMorphed } from "./tech.js";
|
|
34
|
+
import { productionSystem, toldResearched, toldTrained, toldUpgradeStarted } from "./systems/production.js";
|
|
35
|
+
import { buildOrder, constructOrder, repairOrder } from "./orders/build.js";
|
|
36
|
+
import { boardOrder, cargo, loadOrder, transportSank, transportSystem, unloadOrder } from "./transport.js";
|
|
37
|
+
import { toldChat, toldPing } from "./talk.js";
|
|
38
|
+
import { lastTeamStanding, outcomePart } from "./systems/victory.js";
|
|
39
|
+
import { orderSystem } from "./systems/orders.js";
|
|
40
|
+
import { coreCommands, toldCommand } from "./commands.js";
|
|
41
|
+
import { toldLine, toldLineEnded } from "./dialog.js";
|
|
42
|
+
import { toldFx, toldFxStopped } from "./effects.js";
|
|
43
|
+
import { corpseSystem, corpsesPart, summonEffects } from "./summons.js";
|
|
44
|
+
import { formSystem } from "./forms.js";
|
|
45
|
+
import { coreHooks, toldBounty } from "./features.js";
|
|
46
|
+
import { dispelEffects } from "./abilities/dispel.js";
|
|
47
|
+
import { coreEffects } from "./abilities/effects/core.js";
|
|
48
|
+
import { layData, toldRedefined } from "./gameData.js";
|
|
49
|
+
import { fogSystem, revealsPart } from "./systems/fog.js";
|
|
50
|
+
import { toldCrit, toldDamage, toldDeath, toldHeal } from "./life.js";
|
|
51
|
+
import "./tiles.js";
|
|
52
|
+
import { toldEnvironment } from "./map/look.js";
|
|
53
|
+
import { toldObjective } from "./objectives.js";
|
|
54
|
+
import { MissingGround, cloneTerrain, groundOf, startedOn, startingTerrain } from "./ground.js";
|
|
55
|
+
import { drawFromGroup, dropFromTable } from "./randomGroups.js";
|
|
56
|
+
import { giveMapOrders, spawnMapObject } from "./mapObjects.js";
|
|
57
|
+
import { debugCommands, debugPart, redefineCommand, toldGround } from "./debugCommands.js";
|
|
58
|
+
import { hourPart } from "./clock.js";
|
|
59
|
+
import { projectilesPart, toldAttack, toldAttackCancelled, toldImpact, toldMiss, toldShot } from "./systems/combatTold.js";
|
|
60
|
+
import { areasPart } from "./abilities/screen.js";
|
|
61
|
+
import { resolveScore, scoreLinePart, scorePart, scoreSystem } from "./score.js";
|
|
62
|
+
import { supplySystem, toldChop, toldResource } from "./systems/economy.js";
|
|
63
|
+
import { foliageDebugCommands } from "./foliageDebug.js";
|
|
64
|
+
import { gateStates, setUpGates } from "./gates.js";
|
|
65
|
+
import { tuneCommand } from "./tunables.js";
|
|
66
|
+
import { spawnCamp } from "./camps.js";
|
|
67
|
+
import { allOrFreed } from "./navigation/builds.js";
|
|
68
|
+
import { RecastNavigation } from "./navigation/recast.js";
|
|
69
|
+
import { SidePaths, sideKnowledgeSystem } from "./navigation/sidePaths.js";
|
|
70
|
+
import { SizedNavigation } from "./navigation/sized.js";
|
|
71
|
+
import { attackGroundOrder, attackMoveOrder, attackOrder, attackPathOrder, followOrder, followPathOrder, holdOrder, moveOrder, patrolOrder, patrolPathOrder } from "./orders/basic.js";
|
|
72
|
+
import { dropItemOrder, pickUpOrder } from "./orders/items.js";
|
|
73
|
+
import { Registry } from "./registry.js";
|
|
74
|
+
import { abilitySystem } from "./systems/abilities.js";
|
|
75
|
+
import { lifeSystem } from "./systems/life.js";
|
|
76
|
+
import { SaveError, restoreWorld, savedPlayers, updateSave } from "./save.js";
|
|
77
|
+
import { World } from "./world.js";
|
|
78
|
+
import { coreComponents } from "./coreComponents.js";
|
|
79
|
+
//#region src/game.ts
|
|
80
|
+
var coreOrders = [
|
|
81
|
+
moveOrder,
|
|
82
|
+
holdOrder,
|
|
83
|
+
attackOrder,
|
|
84
|
+
attackMoveOrder,
|
|
85
|
+
followPathOrder,
|
|
86
|
+
attackPathOrder,
|
|
87
|
+
patrolPathOrder,
|
|
88
|
+
attackGroundOrder,
|
|
89
|
+
patrolOrder,
|
|
90
|
+
followOrder,
|
|
91
|
+
harvestOrder,
|
|
92
|
+
returnOrder,
|
|
93
|
+
buildOrder,
|
|
94
|
+
constructOrder,
|
|
95
|
+
repairOrder,
|
|
96
|
+
castOrder,
|
|
97
|
+
pickUpOrder,
|
|
98
|
+
dropItemOrder,
|
|
99
|
+
boardOrder,
|
|
100
|
+
loadOrder,
|
|
101
|
+
unloadOrder
|
|
102
|
+
];
|
|
103
|
+
/**
|
|
104
|
+
* The systems the engine brings along, by phase: decisions first, then movement, then everything that reacts to where
|
|
105
|
+
* units ended up. Within a phase, in this order. A module can do without any of them by name (`Rules.withoutSystems`),
|
|
106
|
+
* or put its own in place of one by giving a system the same name
|
|
107
|
+
*
|
|
108
|
+
* @beta
|
|
109
|
+
*/
|
|
110
|
+
var coreSystems = [
|
|
111
|
+
timerSystem,
|
|
112
|
+
abilitySystem,
|
|
113
|
+
orderSystem,
|
|
114
|
+
movementSystem,
|
|
115
|
+
combatSystem,
|
|
116
|
+
constructionSystem,
|
|
117
|
+
productionSystem,
|
|
118
|
+
supplySystem,
|
|
119
|
+
areaSystem,
|
|
120
|
+
formSystem,
|
|
121
|
+
lifeSystem,
|
|
122
|
+
fogSystem,
|
|
123
|
+
sequenceSystem,
|
|
124
|
+
transportSystem,
|
|
125
|
+
corpseSystem
|
|
126
|
+
];
|
|
127
|
+
/**
|
|
128
|
+
* How the engine's events are told to the players, each written beside what emits it, in the order a seat hears them:
|
|
129
|
+
* two told of one event (a hit and its critical number) are told in this order
|
|
130
|
+
*/
|
|
131
|
+
var coreReplications = [
|
|
132
|
+
toldDeath,
|
|
133
|
+
toldCells,
|
|
134
|
+
toldCellsSeen,
|
|
135
|
+
toldRedefined,
|
|
136
|
+
toldEnvironment,
|
|
137
|
+
toldGround,
|
|
138
|
+
toldCommand,
|
|
139
|
+
toldAttack,
|
|
140
|
+
toldAttackCancelled,
|
|
141
|
+
toldDamage,
|
|
142
|
+
toldHeal,
|
|
143
|
+
toldBuffOn,
|
|
144
|
+
toldBuffOff,
|
|
145
|
+
toldTrained,
|
|
146
|
+
toldConstructionStarted,
|
|
147
|
+
toldBuilt,
|
|
148
|
+
toldConstructionCancelled,
|
|
149
|
+
toldUpgradeStarted,
|
|
150
|
+
toldUpgradeCancelled,
|
|
151
|
+
toldMorphed,
|
|
152
|
+
toldRevived,
|
|
153
|
+
toldPicked,
|
|
154
|
+
toldResearched,
|
|
155
|
+
toldShot,
|
|
156
|
+
toldMissileHit,
|
|
157
|
+
toldWindup,
|
|
158
|
+
toldCastCancelled,
|
|
159
|
+
toldChannelStarted,
|
|
160
|
+
toldChannelEnded,
|
|
161
|
+
toldCast,
|
|
162
|
+
toldStrike,
|
|
163
|
+
toldCrit,
|
|
164
|
+
toldMiss,
|
|
165
|
+
toldImpact,
|
|
166
|
+
toldWork,
|
|
167
|
+
toldChop,
|
|
168
|
+
toldLevelUp,
|
|
169
|
+
toldXp,
|
|
170
|
+
toldMana,
|
|
171
|
+
toldResource,
|
|
172
|
+
toldBounty,
|
|
173
|
+
toldMessage,
|
|
174
|
+
toldObjective,
|
|
175
|
+
toldLine,
|
|
176
|
+
toldLineEnded,
|
|
177
|
+
toldCinematic,
|
|
178
|
+
toldCinematicCue,
|
|
179
|
+
toldCamera,
|
|
180
|
+
toldFx,
|
|
181
|
+
toldFxStopped,
|
|
182
|
+
toldRustle,
|
|
183
|
+
toldGust,
|
|
184
|
+
toldPing,
|
|
185
|
+
toldChat
|
|
186
|
+
];
|
|
187
|
+
/** What the game tells each player about itself, with its packs' beside it (`Snapshot.report`, `Rules.report`) */
|
|
188
|
+
var reportPart = snapshotField("report", ({ world, player }) => world.registry.report?.(world, player));
|
|
189
|
+
/** The engine's parts of a player's snapshot, each captured by its feature, in their order (`SnapshotField`) */
|
|
190
|
+
var coreSnapshotParts = [
|
|
191
|
+
debugPart,
|
|
192
|
+
hourPart,
|
|
193
|
+
outcomePart,
|
|
194
|
+
projectilesPart,
|
|
195
|
+
missilesPart,
|
|
196
|
+
itemsPart,
|
|
197
|
+
revealsPart,
|
|
198
|
+
areasPart,
|
|
199
|
+
cameraPart,
|
|
200
|
+
eventsPart,
|
|
201
|
+
reportPart,
|
|
202
|
+
scorePart,
|
|
203
|
+
scoreLinePart,
|
|
204
|
+
corpsesPart
|
|
205
|
+
];
|
|
206
|
+
/**
|
|
207
|
+
* The engine's parts that give an entity something as it is made, or call it off as it leaves its owner: a worker's
|
|
208
|
+
* load, a building's queue, the slots of what carries, a hold
|
|
209
|
+
*/
|
|
210
|
+
var coreParts = [
|
|
211
|
+
gathering,
|
|
212
|
+
productionQueue,
|
|
213
|
+
inventorySlots,
|
|
214
|
+
cargo
|
|
215
|
+
];
|
|
216
|
+
/** Each game's assembly, made once */
|
|
217
|
+
var assemblies = /* @__PURE__ */ new WeakMap();
|
|
218
|
+
/**
|
|
219
|
+
* A game with its packs put together (`AssembledGame`): what the registry, the systems, the hooks, the listeners and the
|
|
220
|
+
* timers of a world of it are made of. Refuses a pack without one it says it goes with (`GamePack.requires`)
|
|
221
|
+
*
|
|
222
|
+
* @beta
|
|
223
|
+
*/
|
|
224
|
+
function assembleGame(game) {
|
|
225
|
+
const known = assemblies.get(game);
|
|
226
|
+
if (known) return known;
|
|
227
|
+
const packs = game.packs ?? [];
|
|
228
|
+
for (const pack of packs) for (const needed of pack.requires ?? []) if (!packs.some((each) => each.id === needed)) throw new Error(`The pack "${pack.id}" goes with the pack "${needed}", which "${game.id}" does not have`);
|
|
229
|
+
const from = (pick) => packs.flatMap((pack) => pick(pack) ?? []);
|
|
230
|
+
const withoutCommands = new Set(game.withoutCommands ?? []);
|
|
231
|
+
const withoutOrders = new Set(game.withoutOrders ?? []);
|
|
232
|
+
const withoutHooks = new Set(game.withoutHooks ?? []);
|
|
233
|
+
let settings = game.settings ?? {};
|
|
234
|
+
for (const pack of packs) {
|
|
235
|
+
if (!pack.settings) continue;
|
|
236
|
+
const over = pack.settings(resolveSettings(settings));
|
|
237
|
+
settings = overSettings(settings, over);
|
|
238
|
+
}
|
|
239
|
+
const reports = [game.report, ...packs.map((pack) => pack.report?.bind(pack))].filter((each) => each !== void 0);
|
|
240
|
+
const checks = [game.editor?.check, ...packs.map((pack) => pack.check?.bind(pack))].filter((each) => each !== void 0);
|
|
241
|
+
const victories = packs.filter((pack) => pack.victory !== void 0);
|
|
242
|
+
const assembly = {
|
|
243
|
+
rules: game,
|
|
244
|
+
commands: [...from((pack) => pack.commands).filter((command) => !withoutCommands.has(command.type)), ...game.commands ?? []],
|
|
245
|
+
orders: [...from((pack) => pack.orders).filter((order) => !withoutOrders.has(order.type)), ...game.orders ?? []],
|
|
246
|
+
packSystems: from((pack) => pack.systems),
|
|
247
|
+
hooks: [...from((pack) => pack.hooks).filter((hook) => !withoutHooks.has(hook.id)), ...game.hooks ?? []],
|
|
248
|
+
listeners: [...from((pack) => pack.listeners), ...game.listeners ?? []],
|
|
249
|
+
effects: [...from((pack) => pack.effects), ...game.effects ?? []],
|
|
250
|
+
timers: [...from((pack) => pack.timers), ...game.timers ?? []],
|
|
251
|
+
components: [...from((pack) => pack.components), ...game.components ?? []],
|
|
252
|
+
events: [...from((pack) => pack.events), ...game.events ?? []],
|
|
253
|
+
statFields: from((pack) => pack.statFields),
|
|
254
|
+
stats: [...from((pack) => pack.stats), ...game.stats ?? []],
|
|
255
|
+
replications: from((pack) => pack.replications),
|
|
256
|
+
snapshotFields: from((pack) => pack.snapshotFields),
|
|
257
|
+
settings,
|
|
258
|
+
report: reports.length ? (world, player) => Object.assign({}, ...reports.map((report) => report(world, player))) : null,
|
|
259
|
+
victory: game.victory !== void 0 ? game.victory : victories.at(-1)?.victory,
|
|
260
|
+
check: checks.length ? (map, registry) => checks.flatMap((check) => check(map, registry)) : void 0
|
|
261
|
+
};
|
|
262
|
+
assemblies.set(game, assembly);
|
|
263
|
+
return assembly;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Everything a game module defines, looked up by id: with the engine's own components, and those an app keeps in its
|
|
267
|
+
* worlds (`own`: `CreateWorldOptions.components`)
|
|
268
|
+
*
|
|
269
|
+
* @public
|
|
270
|
+
*/
|
|
271
|
+
function createRegistry(game, own = []) {
|
|
272
|
+
const registry = new Registry();
|
|
273
|
+
registry.defineCore(coreComponents());
|
|
274
|
+
const assembly = assembleGame(game);
|
|
275
|
+
registry.assembly = assembly;
|
|
276
|
+
const withoutOrders = new Set(game.withoutOrders ?? []);
|
|
277
|
+
for (const order of coreOrders) if (!withoutOrders.has(order.type)) registry.orders.define(order);
|
|
278
|
+
for (const order of assembly.orders) registry.orders.define(order);
|
|
279
|
+
for (const formation of coreFormations) registry.formations.define(formation);
|
|
280
|
+
for (const formation of game.formations ?? []) registry.formations.define(formation);
|
|
281
|
+
const withoutCommands = new Set(game.withoutCommands ?? []);
|
|
282
|
+
for (const command of [
|
|
283
|
+
...coreCommands.filter((command) => !withoutCommands.has(command.type)),
|
|
284
|
+
...debugCommands,
|
|
285
|
+
...foliageDebugCommands,
|
|
286
|
+
tuneCommand,
|
|
287
|
+
redefineCommand
|
|
288
|
+
]) registry.commands.define(command);
|
|
289
|
+
for (const command of assembly.commands) registry.commands.define(command);
|
|
290
|
+
for (const kind of [
|
|
291
|
+
...coreEffects,
|
|
292
|
+
...summonEffects,
|
|
293
|
+
...dispelEffects,
|
|
294
|
+
...assembly.effects
|
|
295
|
+
]) registry.effects.define(kind);
|
|
296
|
+
for (const targeting of game.targetings ?? []) registry.targetings.define(targeting);
|
|
297
|
+
for (const buff of game.buffs ?? []) registry.buffs.define(buff);
|
|
298
|
+
for (const ability of game.abilities ?? []) registry.abilities.define(ability);
|
|
299
|
+
for (const item of game.items ?? []) registry.items.define(itemTier(item) === item.tier ? item : {
|
|
300
|
+
...item,
|
|
301
|
+
tier: itemTier(item)
|
|
302
|
+
});
|
|
303
|
+
for (const tag of game.tags ?? []) registry.tags.define(tag);
|
|
304
|
+
for (const prefab of game.prefabs ?? []) registry.prefabs.define(prefab);
|
|
305
|
+
registry.upkeep = [...game.upkeep ?? []].sort((a, b) => a.above - b.above);
|
|
306
|
+
registry.game = game.id;
|
|
307
|
+
registry.module = game;
|
|
308
|
+
registry.day = game.day ?? null;
|
|
309
|
+
registry.settings = resolveSettings(assembly.settings);
|
|
310
|
+
registry.score = resolveScore(registry.settings.score, game);
|
|
311
|
+
registry.report = assembly.report;
|
|
312
|
+
registry.resources = [...game.resources ?? []];
|
|
313
|
+
registry.currency = game.currency ?? game.resources?.[0]?.id ?? null;
|
|
314
|
+
registry.tiles = checkTiles(game.tiles ?? []);
|
|
315
|
+
registry.cellLayers = game.cellLayers ?? [];
|
|
316
|
+
registry.tunables = [...game.tunables ?? []];
|
|
317
|
+
registry.defineParts([...assembly.components, ...own], assembly.events);
|
|
318
|
+
const parts = [...coreParts, ...assembly.components];
|
|
319
|
+
registry.spawning = parts.filter((part) => part.onSpawn);
|
|
320
|
+
registry.leaving = parts.filter((part) => part.onLeave);
|
|
321
|
+
registry.passing = parts.filter((part) => part.passable);
|
|
322
|
+
defineStats(registry, assembly.stats);
|
|
323
|
+
registry.statFields = [...assembly.statFields];
|
|
324
|
+
registry.replications = [...coreReplications, ...assembly.replications];
|
|
325
|
+
registry.snapshotFields = [...coreSnapshotParts, ...assembly.snapshotFields];
|
|
326
|
+
for (const race of game.races ?? []) registry.races.define(race);
|
|
327
|
+
for (const file of game.files ?? []) registry.setFile(file, file.read(file.data));
|
|
328
|
+
for (const unit of game.units) registry.units.define(unit);
|
|
329
|
+
for (const upgrade of game.upgrades ?? []) registry.upgrades.define(upgrade);
|
|
330
|
+
checkCosts(game);
|
|
331
|
+
checkRaces(game);
|
|
332
|
+
checkStats(game, new Set(registry.statKeys));
|
|
333
|
+
checkSaves(game);
|
|
334
|
+
return registry;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Throws when what a game says of its saves cannot be: a version that is no whole number from 1, or a step from a
|
|
338
|
+
* version the game is not past yet, which would never run
|
|
339
|
+
*/
|
|
340
|
+
function checkSaves(game) {
|
|
341
|
+
const { version = 1, migrate } = game.saves ?? {};
|
|
342
|
+
if (!Number.isInteger(version) || version < 1) throw new Error(`The version of the saves of "${game.id}" is a whole number from 1, not ${String(version)}`);
|
|
343
|
+
if (typeof migrate !== "object") return;
|
|
344
|
+
for (const from of Object.keys(migrate).map(Number)) if (!Number.isInteger(from) || from < 1 || from >= version) throw new Error(`"${game.id}" has a step for saves of version ${from}, and its saves are of version ${version}: the steps are from 1 to ${version - 1}, each to the version after it`);
|
|
345
|
+
}
|
|
346
|
+
/** The game's tiles, as they are: throws for one that is there twice, or for too many to keep in a byte */
|
|
347
|
+
function checkTiles(tiles) {
|
|
348
|
+
if (tiles.length > 255) throw new Error(`A game has at most 255 tiles, not ${tiles.length}`);
|
|
349
|
+
const seen = /* @__PURE__ */ new Set();
|
|
350
|
+
for (const tile of tiles) {
|
|
351
|
+
if (seen.has(tile.id)) throw new Error(`The tile "${tile.id}" is there twice`);
|
|
352
|
+
seen.add(tile.id);
|
|
353
|
+
}
|
|
354
|
+
return [...tiles];
|
|
355
|
+
}
|
|
356
|
+
/** The game's own stats next to the engine's, and what every unit starts with of them */
|
|
357
|
+
function defineStats(registry, stats) {
|
|
358
|
+
const defaults = { ...noStats() };
|
|
359
|
+
for (const stat of stats) {
|
|
360
|
+
if (stat.id in defaults) throw new Error(`The stat "${stat.id}" is there twice, or is one of the engine's`);
|
|
361
|
+
defaults[stat.id] = stat.default ?? 0;
|
|
362
|
+
}
|
|
363
|
+
registry.stats = [...stats];
|
|
364
|
+
registry.statKeys = Object.keys(defaults);
|
|
365
|
+
registry.statDefaults = Object.freeze(defaults);
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Throws when something changes or scales with a stat the game does not have: most likely a typo, which would
|
|
369
|
+
* otherwise do nothing, or turn a stat into NaN. Stats are any text to the type checker, so this is where it is caught
|
|
370
|
+
*/
|
|
371
|
+
function checkStats(game, known) {
|
|
372
|
+
const check = (what, keys, also = []) => {
|
|
373
|
+
for (const key in keys) if (!known.has(key) && !also.includes(key)) throw new Error(`${what} has the stat "${key}", which the game does not have`);
|
|
374
|
+
};
|
|
375
|
+
const change = (what, change) => {
|
|
376
|
+
check(what, change?.stats);
|
|
377
|
+
check(what, change?.percent);
|
|
378
|
+
};
|
|
379
|
+
const scaling = (what, within) => {
|
|
380
|
+
if (typeof within !== "object" || within === null) return;
|
|
381
|
+
for (const [key, value] of Object.entries(within)) if (key === "scaling" || key === "shieldScaling") check(what, value, ["level", "bonusAttackDamage"]);
|
|
382
|
+
else scaling(what, value);
|
|
383
|
+
};
|
|
384
|
+
for (const unit of game.units) {
|
|
385
|
+
check(`Unit type "${unit.id}"`, unit.stats);
|
|
386
|
+
change(`The growth of "${unit.id}"`, unit.hero?.growth);
|
|
387
|
+
for (const [i, attack] of (unit.attacks ?? []).entries()) for (const stat of Object.values(attack.stats ?? {})) if (!known.has(stat)) throw new Error(`Attack ${i + 1} of "${unit.id}" reads the stat "${stat}", which the game does not have`);
|
|
388
|
+
}
|
|
389
|
+
for (const buff of game.buffs ?? []) {
|
|
390
|
+
change(`Buff "${buff.id}"`, buff);
|
|
391
|
+
scaling(`Buff "${buff.id}"`, buff);
|
|
392
|
+
}
|
|
393
|
+
for (const item of game.items ?? []) change(`Item "${item.id}"`, item.bonus);
|
|
394
|
+
for (const upgrade of game.upgrades ?? []) for (const effect of upgrade.effects) change(`Upgrade "${upgrade.id}"`, effect);
|
|
395
|
+
for (const ability of game.abilities ?? []) scaling(`Ability "${ability.id}"`, ability);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Throws when something costs a resource the game does not have: a typo, or something that is not a resource at
|
|
399
|
+
* all, like supply. Either would otherwise make it something nobody can ever afford, without a word
|
|
400
|
+
*/
|
|
401
|
+
function checkCosts(game) {
|
|
402
|
+
const known = new Set((game.resources ?? []).map((resource) => resource.id));
|
|
403
|
+
if (game.currency !== void 0 && !known.has(game.currency)) throw new Error(`The currency "${game.currency}" is not a resource of the game`);
|
|
404
|
+
const check = (what, cost) => {
|
|
405
|
+
for (const kind in cost) if (!known.has(kind)) throw new Error(`${what} costs "${kind}", which is not a resource of the game`);
|
|
406
|
+
};
|
|
407
|
+
for (const unit of game.units) check(`Unit type "${unit.id}"`, unit.cost);
|
|
408
|
+
for (const upgrade of game.upgrades ?? []) check(`Upgrade "${upgrade.id}"`, upgrade.cost);
|
|
409
|
+
for (const item of game.items ?? []) check(`Item "${item.id}"`, item.cost);
|
|
410
|
+
}
|
|
411
|
+
/** Where the groups of ground units' radii end (the last group is over the last edge) */
|
|
412
|
+
var BUCKET_EDGES = [.5, .75];
|
|
413
|
+
/**
|
|
414
|
+
* The sizes the ground units of a game are cut for (`radii: 'auto'`): their radii in groups (up to 0.5, up to 0.75,
|
|
415
|
+
* over), each cut for its largest radius (the first for 0.5 at least), a group only where a unit type falls in it. Each
|
|
416
|
+
* with the radius of the biggest unit it takes, `upTo`. What flies or sails has navigation of its own
|
|
417
|
+
*/
|
|
418
|
+
function autoNavigationSizes(registry) {
|
|
419
|
+
const largest = new Array(BUCKET_EDGES.length + 1).fill(0);
|
|
420
|
+
for (const def of registry.units.all()) {
|
|
421
|
+
if (def.kind !== "unit" || def.flying || def.naval) continue;
|
|
422
|
+
const bucket = BUCKET_EDGES.findIndex((edge) => def.radius <= edge);
|
|
423
|
+
const i = bucket < 0 ? BUCKET_EDGES.length : bucket;
|
|
424
|
+
largest[i] = Math.max(largest[i], def.radius);
|
|
425
|
+
}
|
|
426
|
+
const sizes = [];
|
|
427
|
+
largest.forEach((radius, i) => {
|
|
428
|
+
if (radius > 0) sizes.push({
|
|
429
|
+
radius: i === 0 ? Math.max(radius, .5) : radius,
|
|
430
|
+
upTo: i < BUCKET_EDGES.length ? BUCKET_EDGES[i] : Infinity
|
|
431
|
+
});
|
|
432
|
+
});
|
|
433
|
+
return sizes;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* The ground's navigation: cut for a unit of ordinary size (0.5), for each size the game names (`radii`), or for each
|
|
437
|
+
* group of sizes its unit types are in (`autoSizes`), each unit on the one for its size. Big ones on one cut for 0.5
|
|
438
|
+
* fit through the same gaps and overlap walls a little, which is better than everyone keeping the distance from a wall
|
|
439
|
+
* that the biggest unit in the game needs
|
|
440
|
+
*/
|
|
441
|
+
async function groundNavigationOf(terrain, options = {}, autoSizes) {
|
|
442
|
+
const named = [...new Set(options.radii ?? [])].sort((a, b) => a - b);
|
|
443
|
+
const wanted = autoSizes ?? named.map((radius) => ({ radius }));
|
|
444
|
+
if (wanted.length < 2 || !terrain.buildMesh(true).indices.length) return RecastNavigation.create(terrain, {
|
|
445
|
+
agentRadius: wanted[0]?.radius ?? .5,
|
|
446
|
+
...options,
|
|
447
|
+
radii: void 0
|
|
448
|
+
});
|
|
449
|
+
const navigations = await allOrFreed(wanted.map(({ radius }) => () => RecastNavigation.create(terrain, {
|
|
450
|
+
...options,
|
|
451
|
+
agentRadius: radius,
|
|
452
|
+
radii: void 0
|
|
453
|
+
})));
|
|
454
|
+
return new SizedNavigation(wanted.map(({ radius, upTo }, i) => ({
|
|
455
|
+
radius,
|
|
456
|
+
upTo,
|
|
457
|
+
navigation: navigations[i]
|
|
458
|
+
})));
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* The navigations the sides plan their routes on (`Rules.paths: 'seen'`): one for each team that plays, cut for
|
|
462
|
+
* the game's smallest unit. None where routes know everything
|
|
463
|
+
*/
|
|
464
|
+
async function sidePathsOf(game, terrain, players, options) {
|
|
465
|
+
if (game.paths !== "seen") return void 0;
|
|
466
|
+
const teams = [...new Set(players.filter((player) => !player.neutral && !player.creeps).map((player) => player.team))].sort((a, b) => a - b);
|
|
467
|
+
const radius = Math.min(...options.radii?.length ? options.radii : [options.agentRadius ?? .5]);
|
|
468
|
+
return SidePaths.create(terrain, teams, {
|
|
469
|
+
...options,
|
|
470
|
+
agentRadius: radius
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
/** Where boats go, on a map with deep water: a navigation of the water at its surface. Nothing on one without */
|
|
474
|
+
async function waterNavigationOf(terrain, options) {
|
|
475
|
+
if (!terrain.hasDeepWater) return void 0;
|
|
476
|
+
return RecastNavigation.create(terrain, {
|
|
477
|
+
agentRadius: .5,
|
|
478
|
+
...options,
|
|
479
|
+
...options?.radii?.length && { agentRadius: Math.min(...options.radii) },
|
|
480
|
+
surface: "water"
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Makes a world from terrain, rules and players; resolves once it is ready to step
|
|
485
|
+
*
|
|
486
|
+
* @public
|
|
487
|
+
*/
|
|
488
|
+
async function createWorld(options) {
|
|
489
|
+
const { terrain, rules: game, players, seed } = options;
|
|
490
|
+
const world = await makeWorld(game, createRegistry(game, options.components), terrain, {
|
|
491
|
+
players: players.map((player) => ({
|
|
492
|
+
...player,
|
|
493
|
+
resources: startingResources(game, player)
|
|
494
|
+
})),
|
|
495
|
+
navigation: options.navigation,
|
|
496
|
+
randomRaces: options.randomRaces,
|
|
497
|
+
seed,
|
|
498
|
+
tickRate: options.tickRate,
|
|
499
|
+
log: options.log,
|
|
500
|
+
onError: options.onError,
|
|
501
|
+
checks: options.checks
|
|
502
|
+
});
|
|
503
|
+
raceResources(world, players);
|
|
504
|
+
world.sidePaths?.attach(world);
|
|
505
|
+
return world;
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* A world of a game on a terrain, its navigations built (freed again where what follows fails), its parts the game's put
|
|
509
|
+
* together with its packs (`assembleGame`): what a world made new and a world loaded from a save have in common
|
|
510
|
+
*/
|
|
511
|
+
async function makeWorld(game, registry, terrain, options) {
|
|
512
|
+
const { radii, ...given } = {
|
|
513
|
+
...game.navigation,
|
|
514
|
+
...options.navigation
|
|
515
|
+
};
|
|
516
|
+
const navigationOptions = {
|
|
517
|
+
...hasGroundSpeeds(registry) && { speedAt: (x, z) => navigationSpeedOn(registry, terrain, x, z) },
|
|
518
|
+
...given,
|
|
519
|
+
...Array.isArray(radii) && { radii }
|
|
520
|
+
};
|
|
521
|
+
const sizes = (radii === void 0 || radii === "auto") && given.agentRadius === void 0 ? autoNavigationSizes(registry) : void 0;
|
|
522
|
+
const [navigation, waterNavigation, sidePaths] = await allOrFreed([
|
|
523
|
+
() => groundNavigationOf(terrain, navigationOptions, sizes),
|
|
524
|
+
() => waterNavigationOf(terrain, navigationOptions),
|
|
525
|
+
() => sidePathsOf(game, terrain, options.players, navigationOptions)
|
|
526
|
+
]);
|
|
527
|
+
const assembly = registry.assembly;
|
|
528
|
+
return freedOnError(navigation, () => freedOnError(waterNavigation, () => new World({
|
|
529
|
+
terrain,
|
|
530
|
+
navigation,
|
|
531
|
+
waterNavigation,
|
|
532
|
+
sidePaths,
|
|
533
|
+
registry,
|
|
534
|
+
players: options.players,
|
|
535
|
+
randomRaces: options.randomRaces,
|
|
536
|
+
seed: options.seed,
|
|
537
|
+
tickRate: options.tickRate,
|
|
538
|
+
log: options.log,
|
|
539
|
+
logLevel: game.log?.level,
|
|
540
|
+
onError: game.onError ?? options.onError,
|
|
541
|
+
checks: options.checks,
|
|
542
|
+
systems: (world) => systemsOf(world, assembly),
|
|
543
|
+
hooks: hooksOf(assembly),
|
|
544
|
+
listeners: listenersOf(assembly),
|
|
545
|
+
areas: game.areas,
|
|
546
|
+
timers: timersOf(assembly),
|
|
547
|
+
sequences: game.sequences
|
|
548
|
+
})));
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* Runs what makes something of a navigation already made: the navigation is freed when it fails (WebAssembly memory,
|
|
552
|
+
* which nothing else would free), and the error goes on
|
|
553
|
+
*/
|
|
554
|
+
async function freedOnError(navigation, make) {
|
|
555
|
+
try {
|
|
556
|
+
return await make();
|
|
557
|
+
} catch (error) {
|
|
558
|
+
navigation?.dispose();
|
|
559
|
+
throw error;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
/** Runs what is done to a world just made: the world is disposed when it fails, and the error goes on */
|
|
563
|
+
async function disposedOnError(world, run) {
|
|
564
|
+
try {
|
|
565
|
+
await run();
|
|
566
|
+
return world;
|
|
567
|
+
} catch (error) {
|
|
568
|
+
world.dispose();
|
|
569
|
+
throw error;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
/**
|
|
573
|
+
* What a player starts with: what they were given, or else what the game starts everyone with (nothing, for the
|
|
574
|
+
* neutral players). Every resource of the game is in it, at 0 at least
|
|
575
|
+
*/
|
|
576
|
+
function startingResources(game, player) {
|
|
577
|
+
const purse = {};
|
|
578
|
+
for (const resource of game.resources ?? []) purse[resource.id] = player.resources ? player.resources[resource.id] ?? 0 : player.neutral ? 0 : resource.start ?? 0;
|
|
579
|
+
return {
|
|
580
|
+
...player.resources,
|
|
581
|
+
...purse
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* A world from a save (see `saveWorld`), carrying on where it was. A save made before, by an older engine or by the
|
|
586
|
+
* game before a patch, is brought up to date first (`updateSave`), or refused with a `SaveError` that says why.
|
|
587
|
+
* Navigation is built again; units come back with the speed and destination they had, but the way they find around
|
|
588
|
+
* each other is worked out anew, so the game from there on is close to, and not quite, the one that was saved
|
|
589
|
+
*
|
|
590
|
+
* @public
|
|
591
|
+
*/
|
|
592
|
+
async function loadWorld(saved, options) {
|
|
593
|
+
const kept = (saved.state?.[mapInfo.id])?.definitions;
|
|
594
|
+
const definitions = options.map ? options.map.definitions : kept;
|
|
595
|
+
const game = definitions ? layData(options.rules, definitions) : options.rules;
|
|
596
|
+
const registry = createRegistry(game, options.components);
|
|
597
|
+
const save = updateSave(saved, registry, { anyVersion: options.anyVersion });
|
|
598
|
+
let ground;
|
|
599
|
+
try {
|
|
600
|
+
ground = groundOf(save.terrain, options.maps ?? game.maps, game);
|
|
601
|
+
} catch (error) {
|
|
602
|
+
if (error instanceof MissingGround) throw new SaveError(`Save: ${error.message}`, "ground");
|
|
603
|
+
throw error;
|
|
604
|
+
}
|
|
605
|
+
const { terrain } = ground;
|
|
606
|
+
const world = await makeWorld(game, registry, terrain, {
|
|
607
|
+
players: savedPlayers(save),
|
|
608
|
+
navigation: options.navigation,
|
|
609
|
+
tickRate: save.tickRate,
|
|
610
|
+
log: options.log,
|
|
611
|
+
onError: options.onError,
|
|
612
|
+
checks: options.checks
|
|
613
|
+
});
|
|
614
|
+
return disposedOnError(world, () => {
|
|
615
|
+
world.ground = ground.base;
|
|
616
|
+
restoreWorld(world, save);
|
|
617
|
+
if (save.state && gateStates.id in save.state) setUpGates(world);
|
|
618
|
+
world.computers.restore();
|
|
619
|
+
game.afterLoad?.(world);
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
/** The systems of a world of the game: the core ones and its packs', but those it leaves out, then its own, then who wins */
|
|
623
|
+
function systemsOf(world, assembly) {
|
|
624
|
+
const { rules: game } = assembly;
|
|
625
|
+
const make = (def) => typeof def === "function" ? def(world) : def;
|
|
626
|
+
const without = new Set(game.withoutSystems ?? []);
|
|
627
|
+
const systems = [...coreSystems, ...assembly.packSystems.map(make)].filter((system) => !without.has(system.name));
|
|
628
|
+
for (const def of game.systems ?? []) {
|
|
629
|
+
const system = make(def);
|
|
630
|
+
const index = systems.findIndex((core) => core.name === system.name);
|
|
631
|
+
if (index < 0) systems.push(system);
|
|
632
|
+
else systems[index] = system.phase ? system : {
|
|
633
|
+
...system,
|
|
634
|
+
phase: systems[index].phase,
|
|
635
|
+
update: system.update?.bind(system),
|
|
636
|
+
each: system.each?.bind(system)
|
|
637
|
+
};
|
|
638
|
+
}
|
|
639
|
+
if (game.paths === "seen") systems.splice(systems.findIndex((system) => system.name === "fog") + 1, 0, sideKnowledgeSystem);
|
|
640
|
+
if (world.registry.score) systems.push(scoreSystem(world));
|
|
641
|
+
if (assembly.victory !== null) systems.push(make(assembly.victory ?? lastTeamStanding));
|
|
642
|
+
return systems;
|
|
643
|
+
}
|
|
644
|
+
function hooksOf(assembly) {
|
|
645
|
+
const without = new Set(assembly.rules.withoutHooks ?? []);
|
|
646
|
+
return [
|
|
647
|
+
...coreHooks.filter((hook) => !without.has(hook.id)),
|
|
648
|
+
...assembly.hooks,
|
|
649
|
+
...raceHooks(assembly.rules)
|
|
650
|
+
];
|
|
651
|
+
}
|
|
652
|
+
/** How the world reacts to events: the engine's, the packs', the game's */
|
|
653
|
+
function listenersOf(assembly) {
|
|
654
|
+
return [
|
|
655
|
+
dropFromTable,
|
|
656
|
+
transportSank,
|
|
657
|
+
regionCinematic,
|
|
658
|
+
...assembly.listeners
|
|
659
|
+
];
|
|
660
|
+
}
|
|
661
|
+
/** What can be set to go off later: the packs' and the game's */
|
|
662
|
+
function timersOf(assembly) {
|
|
663
|
+
return assembly.timers.length ? [...assembly.timers] : void 0;
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* A world as a map lays it out: its ground, the players it has room for, and everything placed on it.
|
|
667
|
+
* Players with a start location that the map places nothing for get what the game starts everyone with.
|
|
668
|
+
* Throws for a map made for another game (`GameMap.game`).
|
|
669
|
+
*
|
|
670
|
+
* @public
|
|
671
|
+
*/
|
|
672
|
+
async function createWorldFromMap(options) {
|
|
673
|
+
const { map } = options;
|
|
674
|
+
const game = map.definitions ? layData(options.rules, map.definitions) : options.rules;
|
|
675
|
+
if (map.game !== void 0 && map.game !== game.id) throw new Error(`"${map.name}" is a map for the game "${map.game}", not for "${game.id}"`);
|
|
676
|
+
const most = maxPlayersOf(game);
|
|
677
|
+
const seated = map.players.filter((player) => player.id !== 90 && player.id !== 0).length;
|
|
678
|
+
if (seated > most) throw new Error(`"${map.name}" has ${seated} players, and ${game.name} allows ${most} (\`Rules.maxPlayers\`)`);
|
|
679
|
+
const creeps = options.creeps ?? (map.camps.length > 0 || map.objects.some((object) => object.owner === 90));
|
|
680
|
+
const players = [
|
|
681
|
+
{
|
|
682
|
+
id: 0,
|
|
683
|
+
name: "Neutral",
|
|
684
|
+
team: 0,
|
|
685
|
+
color: [
|
|
686
|
+
.8,
|
|
687
|
+
.75,
|
|
688
|
+
.4
|
|
689
|
+
],
|
|
690
|
+
neutral: true
|
|
691
|
+
},
|
|
692
|
+
...map.players.map((player) => ({
|
|
693
|
+
id: player.id,
|
|
694
|
+
name: player.name,
|
|
695
|
+
team: options.teams?.[player.id] ?? player.team,
|
|
696
|
+
color: options.colors?.[player.id] ?? player.color,
|
|
697
|
+
...player.resources && { resources: { ...player.resources } },
|
|
698
|
+
...(options.races?.[player.id] ?? player.race) !== void 0 && { race: options.races?.[player.id] ?? player.race }
|
|
699
|
+
})),
|
|
700
|
+
...creeps ? [{
|
|
701
|
+
id: 90,
|
|
702
|
+
name: "Creeps",
|
|
703
|
+
team: 1e3,
|
|
704
|
+
color: [
|
|
705
|
+
.42,
|
|
706
|
+
.36,
|
|
707
|
+
.3
|
|
708
|
+
],
|
|
709
|
+
creeps: true
|
|
710
|
+
}] : []
|
|
711
|
+
];
|
|
712
|
+
const terrain = startingTerrain(map, game);
|
|
713
|
+
const base = startedOn(map.name, cloneTerrain(terrain));
|
|
714
|
+
const world = await createWorld({
|
|
715
|
+
terrain,
|
|
716
|
+
rules: game,
|
|
717
|
+
players,
|
|
718
|
+
...map.races?.length && { randomRaces: map.races },
|
|
719
|
+
seed: options.seed,
|
|
720
|
+
navigation: options.navigation,
|
|
721
|
+
...options.components && { components: options.components },
|
|
722
|
+
log: options.log,
|
|
723
|
+
onError: options.onError,
|
|
724
|
+
checks: options.checks
|
|
725
|
+
});
|
|
726
|
+
world.ground = base;
|
|
727
|
+
return disposedOnError(world, () => {
|
|
728
|
+
world.setState(mapInfo, {
|
|
729
|
+
name: map.name,
|
|
730
|
+
data: fieldValues(mapFields(world.registry), structuredClone(map.data), map),
|
|
731
|
+
points: structuredClone(map.points),
|
|
732
|
+
paths: structuredClone(map.paths),
|
|
733
|
+
...map.environment && { environment: structuredClone(map.environment) },
|
|
734
|
+
...map.doodads.length > 0 && { doodads: structuredClone(map.doodads) },
|
|
735
|
+
...map.regions.length > 0 && { regions: structuredClone(map.regions) },
|
|
736
|
+
...map.cameras.length > 0 && { cameras: structuredClone(map.cameras) },
|
|
737
|
+
players: map.players.map((player) => ({
|
|
738
|
+
id: player.id,
|
|
739
|
+
...player.controller && { controller: player.controller },
|
|
740
|
+
data: mapPlayerData(world.registry, player, map)
|
|
741
|
+
})),
|
|
742
|
+
...map.forces?.length && { forces: structuredClone(map.forces) },
|
|
743
|
+
...map.itemTables?.length && { itemTables: structuredClone(map.itemTables) },
|
|
744
|
+
...map.definitions && { definitions: structuredClone(map.definitions) }
|
|
745
|
+
});
|
|
746
|
+
setUpGates(world);
|
|
747
|
+
for (const force of map.forces ?? []) {
|
|
748
|
+
if (!force.sharedControl) continue;
|
|
749
|
+
const members = map.players.filter((player) => player.team === force.team);
|
|
750
|
+
for (const one of members) for (const other of members) if (one !== other) world.sides.shareControl(one.id, other.id);
|
|
751
|
+
}
|
|
752
|
+
world.fog.exploreFromStart(map.explored ?? world.settings.fog?.startExplored ?? false);
|
|
753
|
+
if (map.day?.start !== void 0) world.clock.setHour(map.day.start);
|
|
754
|
+
if (map.day?.still) world.clock.stop();
|
|
755
|
+
for (const region of map.regions) {
|
|
756
|
+
if (world.areas.has(region.name)) throw new Error(`The region "${region.name}" of "${map.name}" has the name of an area of the game`);
|
|
757
|
+
const area = {
|
|
758
|
+
id: region.name,
|
|
759
|
+
shape: { ...region.shape }
|
|
760
|
+
};
|
|
761
|
+
world.areas.add(area);
|
|
762
|
+
if (world.hooks.has("mapRegion")) world.hooks.run("mapRegion", {
|
|
763
|
+
area,
|
|
764
|
+
region,
|
|
765
|
+
data: mapRegionData(world.registry, region, map)
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
const known = new Set(players.map((player) => player.id));
|
|
769
|
+
const placed = /* @__PURE__ */ new Set();
|
|
770
|
+
const groups = new Map((map.randomGroups ?? []).map((group) => [group.name, group]));
|
|
771
|
+
const drawn = (type, random) => {
|
|
772
|
+
const group = random === void 0 ? void 0 : groups.get(random);
|
|
773
|
+
return (group && drawFromGroup(group, world.registry, world.rng)) ?? type;
|
|
774
|
+
};
|
|
775
|
+
const objects = map.objects.map((object) => object.random ? {
|
|
776
|
+
...object,
|
|
777
|
+
type: drawn(object.type, object.random)
|
|
778
|
+
} : object).filter((object) => world.registry.units.has(object.type) && known.has(object.owner));
|
|
779
|
+
const rank = (type) => ({
|
|
780
|
+
resource: 0,
|
|
781
|
+
building: 1,
|
|
782
|
+
unit: 2
|
|
783
|
+
})[world.registry.unit(type).kind] ?? 1;
|
|
784
|
+
objects.sort((a, b) => rank(a.type) - rank(b.type));
|
|
785
|
+
let held = true;
|
|
786
|
+
world.nav.holdObstacles?.(true);
|
|
787
|
+
const letGo = () => {
|
|
788
|
+
if (held) world.nav.holdObstacles?.(false);
|
|
789
|
+
held = false;
|
|
790
|
+
};
|
|
791
|
+
/** Units of the map with orders of their own, given once everything stands (a path's ends, a guard's post) */
|
|
792
|
+
const ordered = [];
|
|
793
|
+
for (const object of objects) {
|
|
794
|
+
if (held && rank(object.type) === 2) letGo();
|
|
795
|
+
const entity = spawnMapObject(world, object, map);
|
|
796
|
+
if (object.orders?.length) ordered.push([entity, object.orders]);
|
|
797
|
+
placed.add(object.owner);
|
|
798
|
+
}
|
|
799
|
+
letGo();
|
|
800
|
+
for (const [entity, orders] of ordered) giveMapOrders(world, entity, orders);
|
|
801
|
+
for (const camp of map.camps) {
|
|
802
|
+
const units = camp.units.map((type) => type.startsWith("@") ? drawn("", type.slice(1)) : type).filter((type) => world.registry.units.has(type));
|
|
803
|
+
if (!units.length) continue;
|
|
804
|
+
const made = spawnCamp(world, 90, camp, units);
|
|
805
|
+
if (camp.name) made.name = camp.name;
|
|
806
|
+
if (camp.respawn !== void 0) made.respawn = camp.respawn;
|
|
807
|
+
if (world.hooks.has("mapCamp")) world.hooks.run("mapCamp", {
|
|
808
|
+
camp: made,
|
|
809
|
+
from: camp,
|
|
810
|
+
data: mapCampData(world.registry, camp, map)
|
|
811
|
+
});
|
|
812
|
+
}
|
|
813
|
+
const raceDef = (player) => {
|
|
814
|
+
const race = world.players.get(player)?.race;
|
|
815
|
+
return race === void 0 ? void 0 : world.registry.race(race);
|
|
816
|
+
};
|
|
817
|
+
for (const player of map.players) if (player.start && !placed.has(player.id)) spawnStartingBase(world, raceDef(player.id)?.startingBase ?? game.startingBase, player.id, player.start);
|
|
818
|
+
for (const player of map.players) {
|
|
819
|
+
const race = raceDef(player.id);
|
|
820
|
+
if (race && race.inherits?.onStart !== false) race.onStart?.(world, player.id);
|
|
821
|
+
}
|
|
822
|
+
if (world.hooks.has("mapStart")) world.hooks.run("mapStart", { map });
|
|
823
|
+
});
|
|
824
|
+
}
|
|
825
|
+
/**
|
|
826
|
+
* Players a map of the game may have (`Rules.maxPlayers`): 8 when it says nothing, never more than the fog keeps apart
|
|
827
|
+
*
|
|
828
|
+
* @beta
|
|
829
|
+
*/
|
|
830
|
+
var maxPlayersOf = (game) => Math.max(1, Math.min(Math.floor(game.maxPlayers ?? 8), 32));
|
|
831
|
+
//#endregion
|
|
832
|
+
export { assembleGame, autoNavigationSizes, coreSystems, createRegistry, createWorld, createWorldFromMap, loadWorld, maxPlayersOf };
|
|
833
|
+
|
|
834
|
+
//# sourceMappingURL=game.js.map
|