@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../src/map/schema.ts"],"sourcesContent":["/*\n * The fields of a map, once (design review E8a): each with what it is (`kind`), when its file has it, what a map has\n * of it where the file has none, and the words a file that is wrong in it is told in. What reads and writes a map file\n * (`parseMap`, `serializeMap`, the parts it knows), copies one (`cloneMap`), grows one (`resizeMap`), merges two\n * (`mergeMaps`) and writes it for a person to read (`mapText`) goes by this table, so that a field is added in one place\n */\nimport type { GameMap } from './types'\n\n/**\n * What a field of a map is:\n * - `text`, `number`, `boolean`: one value\n * - `layer`: a layer of the ground, a value per cell (or per corner, `perVertex`, four bytes each: the heights), a\n * line of text a row in the file, merged cell by cell\n * - `layers`: the game's layers of cells, by id, each as a `layer` is written; merged whole\n * - `mask`: a layer that a map may have none of (what is kept off cells by hand), written where anything is set\n * - `list`: a list of plain objects, those of `byId` with an id each (merged thing by thing, a line each in `mapText`)\n * - `names`: a list of names\n * - `object`: plain data, kept as it is\n *\n * @internal\n */\nexport type MapFieldKind = 'text' | 'number' | 'boolean' | 'layer' | 'layers' | 'mask' | 'list' | 'names' | 'object'\n\n/**\n * A field of a map, as the table has it\n *\n * @internal\n */\nexport interface MapFieldSpec {\n\tkey: keyof GameMap\n\tkind: MapFieldKind\n\t/**\n\t * When the file has it: `always`; `defined` where the map has it; `filled` where it holds anything (text not empty,\n\t * a list or an object with something in it, a mask with a cell set)\n\t */\n\twritten: 'always' | 'defined' | 'filled'\n\t/**\n\t * What a map has where the file has none, or nothing of the kind asked: none (the field left out) when left out. A\n\t * `list` or a `layer` the file must have where `required`\n\t */\n\tempty?: () => unknown\n\t/** A file without it, or with something else in its place, is no map (`Map file: ... is missing`) */\n\trequired?: boolean\n\t/** For a layer: one by corner of the ground (the heights, four bytes each), not by cell */\n\tperVertex?: boolean\n\t/** For a list: of things with an id each */\n\tbyId?: boolean\n\t/** What a file that is wrong in it is told it is, for a layer: `Map file: the ground does not match the size of the map` */\n\twhat?: string\n\t/** A field kept as plain data only, said where it is not: what the game and the editor keep with a map */\n\tplain?: boolean\n}\n\n/**\n * Every field of a map, in the order its file has them (`format` before them, what the reader does not know of the\n * file before that). `satisfies` checks that none of `GameMap` is left out\n *\n * @internal\n */\nexport const MAP_FIELDS = [\n\t{ key: 'name', kind: 'text', written: 'always', empty: () => 'Untitled' },\n\t{ key: 'description', kind: 'text', written: 'always', empty: () => '' },\n\t{ key: 'game', kind: 'text', written: 'defined' },\n\t{ key: 'width', kind: 'number', written: 'always', required: true },\n\t{ key: 'depth', kind: 'number', written: 'always', required: true },\n\t{ key: 'cliffHeight', kind: 'number', written: 'always', empty: () => 3 },\n\t{ key: 'ground', kind: 'layer', written: 'always', required: true, perVertex: true, what: 'the ground' },\n\t{ key: 'levels', kind: 'layer', written: 'always', required: true, what: 'the levels' },\n\t{ key: 'ramps', kind: 'layer', written: 'always', required: true, what: 'the ramps' },\n\t{ key: 'water', kind: 'layer', written: 'always', required: true, what: 'the water' },\n\t{ key: 'tiles', kind: 'layer', written: 'always', required: true, what: 'the paint' },\n\t{ key: 'cells', kind: 'layers', written: 'filled' },\n\t{ key: 'pathing', kind: 'mask', written: 'filled', what: 'what is kept off cells' },\n\t{ key: 'tileset', kind: 'names', written: 'always', required: true, what: 'the tileset' },\n\t{ key: 'players', kind: 'list', written: 'always', required: true, byId: true },\n\t{ key: 'objects', kind: 'list', written: 'always', required: true, byId: true },\n\t{ key: 'camps', kind: 'list', written: 'always', required: true, byId: true },\n\t{ key: 'regions', kind: 'list', written: 'filled', byId: true, empty: () => [] },\n\t{ key: 'points', kind: 'list', written: 'filled', byId: true, empty: () => [] },\n\t{ key: 'paths', kind: 'list', written: 'filled', byId: true, empty: () => [] },\n\t{ key: 'doodads', kind: 'list', written: 'filled', byId: true, empty: () => [] },\n\t{ key: 'cameras', kind: 'list', written: 'filled', byId: true, empty: () => [] },\n\t{ key: 'randomGroups', kind: 'list', written: 'filled' },\n\t{ key: 'itemTables', kind: 'list', written: 'filled' },\n\t{ key: 'forces', kind: 'list', written: 'filled' },\n\t{ key: 'races', kind: 'names', written: 'filled' },\n\t{ key: 'author', kind: 'text', written: 'filled' },\n\t{ key: 'silence', kind: 'names', written: 'filled' },\n\t{ key: 'meantFor', kind: 'text', written: 'filled' },\n\t{ key: 'explored', kind: 'boolean', written: 'defined' },\n\t{ key: 'loading', kind: 'text', written: 'filled' },\n\t{ key: 'preview', kind: 'text', written: 'filled' },\n\t{ key: 'environment', kind: 'object', written: 'filled' },\n\t{ key: 'definitions', kind: 'object', written: 'filled', plain: true },\n\t{ key: 'generated', kind: 'object', written: 'defined' },\n\t{ key: 'day', kind: 'object', written: 'filled' },\n\t{ key: 'bounds', kind: 'object', written: 'defined' },\n\t{ key: 'data', kind: 'object', written: 'filled', empty: () => ({}), plain: true },\n\t{ key: 'editor', kind: 'object', written: 'filled', plain: true }\n] as const satisfies readonly MapFieldSpec[]\n\n/** The keys of `GameMap` the table has, and those it has not: none but what the reader keeps of the file (`extra`) */\ntype Missing = Exclude<keyof GameMap, (typeof MAP_FIELDS)[number]['key'] | 'extra'>\n// a field of GameMap the table does not have is a type error here\nconst everyField: [Missing] extends [never] ? true : Missing = true\nvoid everyField\n\n/** The fields as specs, for what walks them */\nexport const MAP_FIELD_SPECS: readonly MapFieldSpec[] = MAP_FIELDS\n\n/** What a reader of this format knows in a file: `format` and every field. The rest is carried along (`GameMap.extra`) */\nexport const KNOWN: ReadonlySet<string> = new Set(['format', ...MAP_FIELDS.map((field) => field.key)])\n\n/** The fields of a kind */\nexport const fieldsOf = (...kinds: MapFieldKind[]): readonly MapFieldSpec[] => MAP_FIELD_SPECS.filter((field) => kinds.includes(field.kind))\n\n/** The lists of things with ids: merged thing by thing (`mergeMaps`), an entry to a line (`mapText`) */\nexport const BY_ID: readonly string[] = MAP_FIELD_SPECS.filter((field) => field.byId).map((field) => field.key)\n\n/** The layers of the ground every map has: merged cell by cell (`mergeMaps`), a row to a line (`mapText`) */\nexport const LAYERS: readonly ('ground' | 'levels' | 'ramps' | 'water' | 'tiles')[] = fieldsOf('layer').map(\n\t(field) => field.key as 'ground' | 'levels' | 'ramps' | 'water' | 'tiles'\n)\n"],"mappings":";;;;;;;AA2DA,IAAa,aAAa;CACzB;EAAE,KAAK;EAAQ,MAAM;EAAQ,SAAS;EAAU,aAAa;CAAW;CACxE;EAAE,KAAK;EAAe,MAAM;EAAQ,SAAS;EAAU,aAAa;CAAG;CACvE;EAAE,KAAK;EAAQ,MAAM;EAAQ,SAAS;CAAU;CAChD;EAAE,KAAK;EAAS,MAAM;EAAU,SAAS;EAAU,UAAU;CAAK;CAClE;EAAE,KAAK;EAAS,MAAM;EAAU,SAAS;EAAU,UAAU;CAAK;CAClE;EAAE,KAAK;EAAe,MAAM;EAAU,SAAS;EAAU,aAAa;CAAE;CACxE;EAAE,KAAK;EAAU,MAAM;EAAS,SAAS;EAAU,UAAU;EAAM,WAAW;EAAM,MAAM;CAAa;CACvG;EAAE,KAAK;EAAU,MAAM;EAAS,SAAS;EAAU,UAAU;EAAM,MAAM;CAAa;CACtF;EAAE,KAAK;EAAS,MAAM;EAAS,SAAS;EAAU,UAAU;EAAM,MAAM;CAAY;CACpF;EAAE,KAAK;EAAS,MAAM;EAAS,SAAS;EAAU,UAAU;EAAM,MAAM;CAAY;CACpF;EAAE,KAAK;EAAS,MAAM;EAAS,SAAS;EAAU,UAAU;EAAM,MAAM;CAAY;CACpF;EAAE,KAAK;EAAS,MAAM;EAAU,SAAS;CAAS;CAClD;EAAE,KAAK;EAAW,MAAM;EAAQ,SAAS;EAAU,MAAM;CAAyB;CAClF;EAAE,KAAK;EAAW,MAAM;EAAS,SAAS;EAAU,UAAU;EAAM,MAAM;CAAc;CACxF;EAAE,KAAK;EAAW,MAAM;EAAQ,SAAS;EAAU,UAAU;EAAM,MAAM;CAAK;CAC9E;EAAE,KAAK;EAAW,MAAM;EAAQ,SAAS;EAAU,UAAU;EAAM,MAAM;CAAK;CAC9E;EAAE,KAAK;EAAS,MAAM;EAAQ,SAAS;EAAU,UAAU;EAAM,MAAM;CAAK;CAC5E;EAAE,KAAK;EAAW,MAAM;EAAQ,SAAS;EAAU,MAAM;EAAM,aAAa,CAAC;CAAE;CAC/E;EAAE,KAAK;EAAU,MAAM;EAAQ,SAAS;EAAU,MAAM;EAAM,aAAa,CAAC;CAAE;CAC9E;EAAE,KAAK;EAAS,MAAM;EAAQ,SAAS;EAAU,MAAM;EAAM,aAAa,CAAC;CAAE;CAC7E;EAAE,KAAK;EAAW,MAAM;EAAQ,SAAS;EAAU,MAAM;EAAM,aAAa,CAAC;CAAE;CAC/E;EAAE,KAAK;EAAW,MAAM;EAAQ,SAAS;EAAU,MAAM;EAAM,aAAa,CAAC;CAAE;CAC/E;EAAE,KAAK;EAAgB,MAAM;EAAQ,SAAS;CAAS;CACvD;EAAE,KAAK;EAAc,MAAM;EAAQ,SAAS;CAAS;CACrD;EAAE,KAAK;EAAU,MAAM;EAAQ,SAAS;CAAS;CACjD;EAAE,KAAK;EAAS,MAAM;EAAS,SAAS;CAAS;CACjD;EAAE,KAAK;EAAU,MAAM;EAAQ,SAAS;CAAS;CACjD;EAAE,KAAK;EAAW,MAAM;EAAS,SAAS;CAAS;CACnD;EAAE,KAAK;EAAY,MAAM;EAAQ,SAAS;CAAS;CACnD;EAAE,KAAK;EAAY,MAAM;EAAW,SAAS;CAAU;CACvD;EAAE,KAAK;EAAW,MAAM;EAAQ,SAAS;CAAS;CAClD;EAAE,KAAK;EAAW,MAAM;EAAQ,SAAS;CAAS;CAClD;EAAE,KAAK;EAAe,MAAM;EAAU,SAAS;CAAS;CACxD;EAAE,KAAK;EAAe,MAAM;EAAU,SAAS;EAAU,OAAO;CAAK;CACrE;EAAE,KAAK;EAAa,MAAM;EAAU,SAAS;CAAU;CACvD;EAAE,KAAK;EAAO,MAAM;EAAU,SAAS;CAAS;CAChD;EAAE,KAAK;EAAU,MAAM;EAAU,SAAS;CAAU;CACpD;EAAE,KAAK;EAAQ,MAAM;EAAU,SAAS;EAAU,cAAc,CAAC;EAAI,OAAO;CAAK;CACjF;EAAE,KAAK;EAAU,MAAM;EAAU,SAAS;EAAU,OAAO;CAAK;AACjE;;AASA,IAAa,kBAA2C;;AAGxD,IAAa,wBAA6B,IAAI,IAAI,CAAC,UAAU,GAAG,WAAW,KAAK,UAAU,MAAM,GAAG,CAAC,CAAC;;AAGrG,IAAa,YAAY,GAAG,UAAmD,gBAAgB,QAAQ,UAAU,MAAM,SAAS,MAAM,IAAI,CAAC;;AAG3I,IAAa,QAA2B,gBAAgB,QAAQ,UAAU,MAAM,IAAI,CAAC,CAAC,KAAK,UAAU,MAAM,GAAG;;AAG9G,IAAa,SAAyE,SAAS,OAAO,CAAC,CAAC,KACtG,UAAU,MAAM,GAClB"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { hypot } from "../exactMath.js";
|
|
2
|
+
import { clamp } from "../math.js";
|
|
3
|
+
import "./types.js";
|
|
4
|
+
import { Path } from "../paths.js";
|
|
5
|
+
import { tileRemap } from "../tiles.js";
|
|
6
|
+
import { Terrain } from "../terrain.js";
|
|
7
|
+
import { WATER_DEPTH, profiledGround } from "./pathProfile.js";
|
|
8
|
+
//#region src/map/terrain.ts
|
|
9
|
+
/** How far below the banks the water stands */
|
|
10
|
+
var WATER_SURFACE = .18;
|
|
11
|
+
/**
|
|
12
|
+
* The terrain a map describes
|
|
13
|
+
*
|
|
14
|
+
* @beta
|
|
15
|
+
*/
|
|
16
|
+
function mapTerrain(map) {
|
|
17
|
+
const terrain = new Terrain(map.width, map.depth, new Float32Array(map.ground.length), new Uint8Array(map.levels.length), {
|
|
18
|
+
water: new Uint8Array(map.water.length),
|
|
19
|
+
tiles: new Uint8Array(map.tiles.length)
|
|
20
|
+
});
|
|
21
|
+
updateMapTerrain(map, terrain);
|
|
22
|
+
return terrain;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* What the doodads of a map keep off its cells, and what is kept off them by hand (`GameMap.pathing`), into the
|
|
26
|
+
* terrain (`Terrain.blocked`): the most any of them keeps off. With `area` (cells), there alone: what the layers changed
|
|
27
|
+
* there (a brush's step), the doodads elsewhere as they were; the whole map where a doodad itself changed
|
|
28
|
+
*
|
|
29
|
+
* @beta
|
|
30
|
+
*/
|
|
31
|
+
function blockByDoodads(map, terrain, area) {
|
|
32
|
+
const { blocked } = terrain;
|
|
33
|
+
const x0 = area ? Math.max(Math.floor(area.x), 0) : 0;
|
|
34
|
+
const z0 = area ? Math.max(Math.floor(area.z), 0) : 0;
|
|
35
|
+
const x1 = area ? Math.min(Math.ceil(area.x + area.width), map.width) : map.width;
|
|
36
|
+
const z1 = area ? Math.min(Math.ceil(area.z + area.depth), map.depth) : map.depth;
|
|
37
|
+
if (x1 <= x0 || z1 <= z0) return;
|
|
38
|
+
const byHand = map.pathing && map.pathing.length === blocked.length ? map.pathing : void 0;
|
|
39
|
+
for (let cz = z0; cz < z1; cz++) for (let c = cz * map.width + x0; c < cz * map.width + x1; c++) blocked[c] = byHand ? Math.min(byHand[c], 2) : 0;
|
|
40
|
+
for (const doodad of map.doodads ?? []) {
|
|
41
|
+
if (!doodad.radius) continue;
|
|
42
|
+
if (doodad.x + doodad.radius < x0 || doodad.x - doodad.radius > x1 || doodad.z + doodad.radius < z0 || doodad.z - doodad.radius > z1) continue;
|
|
43
|
+
const kind = doodad.bridge ? 3 : doodad.gate ? 1 : doodad.blocks === "walk" ? 2 : doodad.blocks ? 1 : 0;
|
|
44
|
+
if (!kind) continue;
|
|
45
|
+
const { radius } = doodad;
|
|
46
|
+
for (let cz = Math.max(Math.floor(doodad.z - radius), z0); cz < Math.min(Math.ceil(doodad.z + radius), z1); cz++) for (let cx = Math.max(Math.floor(doodad.x - radius), x0); cx < Math.min(Math.ceil(doodad.x + radius), x1); cx++) {
|
|
47
|
+
if (hypot(cx + .5 - doodad.x, cz + .5 - doodad.z) > radius) continue;
|
|
48
|
+
const c = cz * map.width + cx;
|
|
49
|
+
blocked[c] = kind === 3 || blocked[c] === 3 ? blocked[c] === 2 ? 2 : 3 : Math.max(blocked[c], kind);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const row = map.width + 1;
|
|
53
|
+
for (const doodad of map.doodads ?? []) {
|
|
54
|
+
if (!doodad.bridge || !doodad.radius) continue;
|
|
55
|
+
if (doodad.x + doodad.radius < x0 || doodad.x - doodad.radius > x1 || doodad.z + doodad.radius < z0 || doodad.z - doodad.radius > z1) continue;
|
|
56
|
+
for (let cz = Math.max(Math.floor(doodad.z - doodad.radius), 0); cz < Math.min(Math.ceil(doodad.z + doodad.radius), map.depth); cz++) for (let cx = Math.max(Math.floor(doodad.x - doodad.radius), 0); cx < Math.min(Math.ceil(doodad.x + doodad.radius), map.width); cx++) {
|
|
57
|
+
if (hypot(cx + .5 - doodad.x, cz + .5 - doodad.z) > doodad.radius) continue;
|
|
58
|
+
for (const v of [
|
|
59
|
+
cz * row + cx,
|
|
60
|
+
cz * row + cx + 1,
|
|
61
|
+
(cz + 1) * row + cx,
|
|
62
|
+
(cz + 1) * row + cx + 1
|
|
63
|
+
]) {
|
|
64
|
+
const deck = Math.max(terrain.waterHeights[v], terrain.heights[v]) + (doodad.y ?? 0);
|
|
65
|
+
if (terrain.heights[v] < deck) terrain.heights[v] = deck;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* How far a change to a cell reaches into the terrain: a ramp's slope is the average of the levels within
|
|
72
|
+
* `RAMP_REACH`, and a ramp cell's level is its corners'
|
|
73
|
+
*/
|
|
74
|
+
var REACH = 4;
|
|
75
|
+
/**
|
|
76
|
+
* Brings a terrain of the same size in line with the layers of a map, in place, for editing. With `area`, only what
|
|
77
|
+
* a change to those cells can have changed: the cells and the corners of cells within reach of it. Returns the cells
|
|
78
|
+
* whose terrain was worked out again, for whoever draws it to draw again: their corners are the vertices that changed
|
|
79
|
+
*
|
|
80
|
+
* @beta
|
|
81
|
+
*/
|
|
82
|
+
function updateMapTerrain(map, terrain, area) {
|
|
83
|
+
const { width, depth, cliffHeight, levels, ramps, water, ground } = map;
|
|
84
|
+
if (terrain.width !== width || terrain.depth !== depth) throw new Error("updateMapTerrain: the terrain is not the size of the map");
|
|
85
|
+
terrain.bounds = map.bounds && { ...map.bounds };
|
|
86
|
+
const vx = width + 1;
|
|
87
|
+
const x0 = area ? Math.max(Math.floor(area.x) - REACH, 0) : 0;
|
|
88
|
+
const z0 = area ? Math.max(Math.floor(area.z) - REACH, 0) : 0;
|
|
89
|
+
const x1 = area ? Math.min(Math.ceil(area.x + area.width) + REACH, width) : width;
|
|
90
|
+
const z1 = area ? Math.min(Math.ceil(area.z + area.depth) + REACH, depth) : depth;
|
|
91
|
+
const rowLength = x1 - x0 + 1;
|
|
92
|
+
const carved = profiledGround(map, x0, z0, x1, z1);
|
|
93
|
+
const cellRow = rowLength + 1;
|
|
94
|
+
const waterAt = (c, cx, cz) => carved?.water ? Math.max(water[c], carved.water[(cz - z0 + 1) * cellRow + (cx - x0 + 1)]) : water[c];
|
|
95
|
+
const vertexLevels = new Float32Array(rowLength * (z1 - z0 + 1));
|
|
96
|
+
for (let iz = z0; iz <= z1; iz++) for (let ix = x0; ix <= x1; ix++) {
|
|
97
|
+
let top = 0;
|
|
98
|
+
let onRamp = false;
|
|
99
|
+
let depthSum = 0;
|
|
100
|
+
let wetLevel = Infinity;
|
|
101
|
+
for (let cz = iz - 1; cz <= iz; cz++) for (let cx = ix - 1; cx <= ix; cx++) {
|
|
102
|
+
if (cx < 0 || cz < 0 || cx >= width || cz >= depth) continue;
|
|
103
|
+
const c = cz * width + cx;
|
|
104
|
+
top = Math.max(top, levels[c]);
|
|
105
|
+
if (ramps[c]) onRamp = true;
|
|
106
|
+
const wet = waterAt(c, cx, cz);
|
|
107
|
+
depthSum += WATER_DEPTH[wet] ?? 0;
|
|
108
|
+
if (wet) wetLevel = Math.min(wetLevel, levels[c]);
|
|
109
|
+
}
|
|
110
|
+
const v = iz * vx + ix;
|
|
111
|
+
const level = onRamp ? averageLevel(map, ix, iz) : top;
|
|
112
|
+
vertexLevels[(iz - z0) * rowLength + (ix - x0)] = level;
|
|
113
|
+
const under = carved ? carved.ground[(iz - z0) * rowLength + (ix - x0)] : ground[v];
|
|
114
|
+
const land = under + level * cliffHeight;
|
|
115
|
+
terrain.heights[v] = land - depthSum / 4;
|
|
116
|
+
terrain.waterHeights[v] = under + Math.min(wetLevel, level) * cliffHeight - WATER_SURFACE;
|
|
117
|
+
}
|
|
118
|
+
const levelAt = (ix, iz) => vertexLevels[(iz - z0) * rowLength + (ix - x0)];
|
|
119
|
+
for (let cz = z0; cz < z1; cz++) for (let cx = x0; cx < x1; cx++) {
|
|
120
|
+
const c = cz * width + cx;
|
|
121
|
+
terrain.water[c] = waterAt(c, cx, cz);
|
|
122
|
+
terrain.tiles[c] = map.tiles[c];
|
|
123
|
+
for (const id in map.cells) terrain.cellLayer(id)[c] = map.cells[id][c];
|
|
124
|
+
if (!ramps[c]) {
|
|
125
|
+
terrain.levels[c] = levels[c];
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const middle = (levelAt(cx, cz) + levelAt(cx + 1, cz) + levelAt(cx, cz + 1) + levelAt(cx + 1, cz + 1)) / 4;
|
|
129
|
+
terrain.levels[c] = Math.floor(middle + .5);
|
|
130
|
+
}
|
|
131
|
+
const touched = {
|
|
132
|
+
x: x0,
|
|
133
|
+
z: z0,
|
|
134
|
+
width: x1 - x0,
|
|
135
|
+
depth: z1 - z0
|
|
136
|
+
};
|
|
137
|
+
paintPaths(map, terrain.tiles, touched);
|
|
138
|
+
blockByDoodads(map, terrain, area && touched);
|
|
139
|
+
return touched;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Paints the ground under the paths that say so, over the paint of the map: the tiles are those of the map's tileset.
|
|
143
|
+
* Within `area` only, when it is given
|
|
144
|
+
*/
|
|
145
|
+
function paintPaths(map, tiles, area = {
|
|
146
|
+
x: 0,
|
|
147
|
+
z: 0,
|
|
148
|
+
width: map.width,
|
|
149
|
+
depth: map.depth
|
|
150
|
+
}) {
|
|
151
|
+
const width = area.x + area.width;
|
|
152
|
+
const depth = area.z + area.depth;
|
|
153
|
+
for (const def of map.paths) {
|
|
154
|
+
const bed = def.profile?.ground !== void 0;
|
|
155
|
+
const paint = bed ? def.profile.ground : def.paint;
|
|
156
|
+
const wide = bed ? def.profile.width ?? def.width : def.width;
|
|
157
|
+
const tile = paint === void 0 ? 0 : map.tileset.indexOf(paint) + 1;
|
|
158
|
+
if (!tile || !def.points.length) continue;
|
|
159
|
+
const path = new Path(def.points, wide);
|
|
160
|
+
const reach = wide / 2 + 1;
|
|
161
|
+
const xs = def.points.map((point) => point.x);
|
|
162
|
+
const zs = def.points.map((point) => point.z);
|
|
163
|
+
for (let cz = Math.max(Math.floor(Math.min(...zs) - reach), area.z); cz < Math.min(Math.ceil(Math.max(...zs) + reach), depth); cz++) for (let cx = Math.max(Math.floor(Math.min(...xs) - reach), area.x); cx < Math.min(Math.ceil(Math.max(...xs) + reach), width); cx++) if (path.containsCell(cx, cz)) tiles[cz * map.width + cx] = tile;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/** Average level of the cells within ramp reach of a vertex */
|
|
167
|
+
function averageLevel(map, ix, iz) {
|
|
168
|
+
const { width, depth, levels } = map;
|
|
169
|
+
let sum = 0;
|
|
170
|
+
let count = 0;
|
|
171
|
+
for (let cz = Math.max(iz - 3, 0); cz < Math.min(iz + 3, depth); cz++) for (let cx = Math.max(ix - 3, 0); cx < Math.min(ix + 3, width); cx++) {
|
|
172
|
+
sum += levels[cz * width + cx];
|
|
173
|
+
count++;
|
|
174
|
+
}
|
|
175
|
+
return count ? sum / count : 0;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Cell of a map a point is in
|
|
179
|
+
*
|
|
180
|
+
* @internal
|
|
181
|
+
*/
|
|
182
|
+
var mapCell = (map, x, z) => clamp(Math.floor(z), 0, map.depth - 1) * map.width + clamp(Math.floor(x), 0, map.width - 1);
|
|
183
|
+
/**
|
|
184
|
+
* Brings the paint of a map in line with a game's tiles, in place: afterwards index 1 is the game's first tile, and
|
|
185
|
+
* so on. What was painted with a tile the game does not have keeps it, under an index after the game's: the map
|
|
186
|
+
* loses nothing, and the file has it still. Returns the names of those, which no world is given
|
|
187
|
+
*
|
|
188
|
+
* @beta
|
|
189
|
+
*/
|
|
190
|
+
function adoptTileset(map, tiles) {
|
|
191
|
+
const used = new Set(map.tiles);
|
|
192
|
+
const strangers = map.tileset.filter((id, i) => !tiles.includes(id) && used.has(i + 1));
|
|
193
|
+
const tileset = [...tiles, ...strangers];
|
|
194
|
+
if (tileset.length > 255) throw new Error(`Map: ${tileset.length} tiles are more than a map can hold`);
|
|
195
|
+
if (tileset.length !== map.tileset.length || tileset.some((id, i) => id !== map.tileset[i])) {
|
|
196
|
+
const remap = tileRemap(map.tileset, tileset);
|
|
197
|
+
for (let c = 0; c < map.tiles.length; c++) map.tiles[c] = remap[map.tiles[c]] ?? 0;
|
|
198
|
+
map.tileset = tileset;
|
|
199
|
+
}
|
|
200
|
+
return strangers;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* The paint of a map as a game's tiles have it: what is painted with a tile the game does not have is no paint
|
|
204
|
+
*
|
|
205
|
+
* @internal
|
|
206
|
+
*/
|
|
207
|
+
function tilesFor(map, tiles) {
|
|
208
|
+
const remap = tileRemap(map.tileset, tiles);
|
|
209
|
+
return map.tiles.map((tile) => remap[tile] ?? 0);
|
|
210
|
+
}
|
|
211
|
+
//#endregion
|
|
212
|
+
export { adoptTileset, blockByDoodads, mapCell, mapTerrain, tilesFor, updateMapTerrain };
|
|
213
|
+
|
|
214
|
+
//# sourceMappingURL=terrain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terrain.js","names":[],"sources":["../../src/map/terrain.ts"],"sourcesContent":["/*\n * The terrain a map describes, made from its layers, and its paint brought in line with a game's tiles (design review E8a: `map.ts` in parts)\n */\nimport { hypot } from '../exactMath'\nimport { clamp } from '../math'\nimport { Path } from '../paths'\nimport { Terrain } from '../terrain'\nimport { MAX_TILES, tileRemap } from '../tiles'\nimport { BLOCKS_BUILD, BLOCKS_WALK, BRIDGE, type CellRect, type GameMap, RAMP_REACH } from './types'\nimport { profiledGround, WATER_DEPTH } from './pathProfile'\n/** How far below the banks the water stands */\nconst WATER_SURFACE = 0.18\n\n/**\n * The terrain a map describes\n *\n * @beta\n */\nexport function mapTerrain(map: GameMap): Terrain {\n\tconst terrain = new Terrain(map.width, map.depth, new Float32Array(map.ground.length), new Uint8Array(map.levels.length), {\n\t\twater: new Uint8Array(map.water.length),\n\t\ttiles: new Uint8Array(map.tiles.length)\n\t})\n\tupdateMapTerrain(map, terrain)\n\treturn terrain\n}\n\n/**\n * What the doodads of a map keep off its cells, and what is kept off them by hand (`GameMap.pathing`), into the\n * terrain (`Terrain.blocked`): the most any of them keeps off. With `area` (cells), there alone: what the layers changed\n * there (a brush's step), the doodads elsewhere as they were; the whole map where a doodad itself changed\n *\n * @beta\n */\nexport function blockByDoodads(map: Pick<GameMap, 'doodads' | 'width' | 'depth' | 'pathing'>, terrain: Terrain, area?: CellRect): void {\n\tconst { blocked } = terrain\n\tconst x0 = area ? Math.max(Math.floor(area.x), 0) : 0\n\tconst z0 = area ? Math.max(Math.floor(area.z), 0) : 0\n\tconst x1 = area ? Math.min(Math.ceil(area.x + area.width), map.width) : map.width\n\tconst z1 = area ? Math.min(Math.ceil(area.z + area.depth), map.depth) : map.depth\n\tif (x1 <= x0 || z1 <= z0) return\n\t// by hand first: a bridge laid over it after is still a bridge, but over a wall painted there nothing walks\n\tconst byHand = map.pathing && map.pathing.length === blocked.length ? map.pathing : undefined\n\tfor (let cz = z0; cz < z1; cz++)\n\t\tfor (let c = cz * map.width + x0; c < cz * map.width + x1; c++) blocked[c] = byHand ? Math.min(byHand[c], BLOCKS_WALK) : 0\n\tfor (const doodad of map.doodads ?? []) {\n\t\tif (!doodad.radius) continue\n\t\t// (one whose reach is all outside the area is as it was)\n\t\tif (doodad.x + doodad.radius < x0 || doodad.x - doodad.radius > x1 || doodad.z + doodad.radius < z0 || doodad.z - doodad.radius > z1) continue\n\t\t// a gate keeps building off; walking it keeps off while the game runs, as it is shut (`setGate`)\n\t\tconst kind = doodad.bridge ? BRIDGE : doodad.gate ? BLOCKS_BUILD : doodad.blocks === 'walk' ? BLOCKS_WALK : doodad.blocks ? BLOCKS_BUILD : 0\n\t\tif (!kind) continue\n\t\tconst { radius } = doodad\n\t\tfor (let cz = Math.max(Math.floor(doodad.z - radius), z0); cz < Math.min(Math.ceil(doodad.z + radius), z1); cz++) {\n\t\t\tfor (let cx = Math.max(Math.floor(doodad.x - radius), x0); cx < Math.min(Math.ceil(doodad.x + radius), x1); cx++) {\n\t\t\t\t// a cell whose middle is within reach\n\t\t\t\tif (hypot(cx + 0.5 - doodad.x, cz + 0.5 - doodad.z) > radius) continue\n\t\t\t\tconst c = cz * map.width + cx\n\t\t\t\t// a bridge over what blocks is a bridge: it is how one gets over\n\t\t\t\tblocked[c] = kind === BRIDGE || blocked[c] === BRIDGE ? (blocked[c] === BLOCKS_WALK ? BLOCKS_WALK : BRIDGE) : Math.max(blocked[c], kind)\n\t\t\t}\n\t\t}\n\t}\n\t// what is walked on a bridge is its deck: the ground under it as high as the water, and its height over that\n\tconst row = map.width + 1\n\tfor (const doodad of map.doodads ?? []) {\n\t\tif (!doodad.bridge || !doodad.radius) continue\n\t\tif (doodad.x + doodad.radius < x0 || doodad.x - doodad.radius > x1 || doodad.z + doodad.radius < z0 || doodad.z - doodad.radius > z1) continue\n\t\tfor (let cz = Math.max(Math.floor(doodad.z - doodad.radius), 0); cz < Math.min(Math.ceil(doodad.z + doodad.radius), map.depth); cz++) {\n\t\t\tfor (let cx = Math.max(Math.floor(doodad.x - doodad.radius), 0); cx < Math.min(Math.ceil(doodad.x + doodad.radius), map.width); cx++) {\n\t\t\t\tif (hypot(cx + 0.5 - doodad.x, cz + 0.5 - doodad.z) > doodad.radius) continue\n\t\t\t\tfor (const v of [cz * row + cx, cz * row + cx + 1, (cz + 1) * row + cx, (cz + 1) * row + cx + 1]) {\n\t\t\t\t\tconst deck = Math.max(terrain.waterHeights[v], terrain.heights[v]) + (doodad.y ?? 0)\n\t\t\t\t\tif (terrain.heights[v] < deck) terrain.heights[v] = deck\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * How far a change to a cell reaches into the terrain: a ramp's slope is the average of the levels within\n * `RAMP_REACH`, and a ramp cell's level is its corners'\n */\nconst REACH = RAMP_REACH + 1\n\n/**\n * Brings a terrain of the same size in line with the layers of a map, in place, for editing. With `area`, only what\n * a change to those cells can have changed: the cells and the corners of cells within reach of it. Returns the cells\n * whose terrain was worked out again, for whoever draws it to draw again: their corners are the vertices that changed\n *\n * @beta\n */\nexport function updateMapTerrain(map: GameMap, terrain: Terrain, area?: CellRect): CellRect {\n\tconst { width, depth, cliffHeight, levels, ramps, water, ground } = map\n\tif (terrain.width !== width || terrain.depth !== depth) throw new Error('updateMapTerrain: the terrain is not the size of the map')\n\tterrain.bounds = map.bounds && { ...map.bounds }\n\tconst vx = width + 1\n\t// the cells, and the vertices at their corners, that can have changed\n\tconst x0 = area ? Math.max(Math.floor(area.x) - REACH, 0) : 0\n\tconst z0 = area ? Math.max(Math.floor(area.z) - REACH, 0) : 0\n\tconst x1 = area ? Math.min(Math.ceil(area.x + area.width) + REACH, width) : width\n\tconst z1 = area ? Math.min(Math.ceil(area.z + area.depth) + REACH, depth) : depth\n\tconst rowLength = x1 - x0 + 1\n\t// the roads and rivers of the paths with a profile, carved from the land here (`MapPath.profile`)\n\tconst carved = profiledGround(map, x0, z0, x1, z1)\n\tconst cellRow = rowLength + 1\n\tconst waterAt = (c: number, cx: number, cz: number): number =>\n\t\tcarved?.water ? Math.max(water[c], carved.water[(cz - z0 + 1) * cellRow + (cx - x0 + 1)]) : water[c]\n\t// the level of each vertex: the highest cell around it, or on a ramp the average of all cells within reach\n\tconst vertexLevels = new Float32Array(rowLength * (z1 - z0 + 1))\n\tfor (let iz = z0; iz <= z1; iz++) {\n\t\tfor (let ix = x0; ix <= x1; ix++) {\n\t\t\tlet top = 0\n\t\t\tlet onRamp = false\n\t\t\tlet depthSum = 0\n\t\t\t// water lies at the foot of a cliff, never up its face\n\t\t\tlet wetLevel = Infinity\n\t\t\tfor (let cz = iz - 1; cz <= iz; cz++) {\n\t\t\t\tfor (let cx = ix - 1; cx <= ix; cx++) {\n\t\t\t\t\tif (cx < 0 || cz < 0 || cx >= width || cz >= depth) continue\n\t\t\t\t\tconst c = cz * width + cx\n\t\t\t\t\ttop = Math.max(top, levels[c])\n\t\t\t\t\tif (ramps[c]) onRamp = true\n\t\t\t\t\tconst wet = waterAt(c, cx, cz)\n\t\t\t\t\tdepthSum += WATER_DEPTH[wet] ?? 0\n\t\t\t\t\tif (wet) wetLevel = Math.min(wetLevel, levels[c])\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst v = iz * vx + ix\n\t\t\tconst level = onRamp ? averageLevel(map, ix, iz) : top\n\t\t\tvertexLevels[(iz - z0) * rowLength + (ix - x0)] = level\n\t\t\tconst under = carved ? carved.ground[(iz - z0) * rowLength + (ix - x0)] : ground[v]\n\t\t\tconst land = under + level * cliffHeight\n\t\t\tterrain.heights[v] = land - depthSum / 4\n\t\t\tterrain.waterHeights[v] = under + Math.min(wetLevel, level) * cliffHeight - WATER_SURFACE\n\t\t}\n\t}\n\tconst levelAt = (ix: number, iz: number) => vertexLevels[(iz - z0) * rowLength + (ix - x0)]\n\tfor (let cz = z0; cz < z1; cz++) {\n\t\tfor (let cx = x0; cx < x1; cx++) {\n\t\t\tconst c = cz * width + cx\n\t\t\tterrain.water[c] = waterAt(c, cx, cz)\n\t\t\tterrain.tiles[c] = map.tiles[c]\n\t\t\tfor (const id in map.cells) terrain.cellLayer(id)[c] = map.cells[id][c]\n\t\t\tif (!ramps[c]) {\n\t\t\t\tterrain.levels[c] = levels[c]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// a ramp belongs to the level below until halfway up\n\t\t\tconst middle = (levelAt(cx, cz) + levelAt(cx + 1, cz) + levelAt(cx, cz + 1) + levelAt(cx + 1, cz + 1)) / 4\n\t\t\tterrain.levels[c] = Math.floor(middle + 0.5)\n\t\t}\n\t}\n\tconst touched = { x: x0, z: z0, width: x1 - x0, depth: z1 - z0 }\n\tpaintPaths(map, terrain.tiles, touched)\n\t// last: what doodads block, and the decks of bridges over the heights just worked out, where they were\n\tblockByDoodads(map, terrain, area && touched)\n\treturn touched\n}\n\n/**\n * Paints the ground under the paths that say so, over the paint of the map: the tiles are those of the map's tileset.\n * Within `area` only, when it is given\n */\nfunction paintPaths(map: GameMap, tiles: Uint8Array, area: CellRect = { x: 0, z: 0, width: map.width, depth: map.depth }): void {\n\tconst width = area.x + area.width\n\tconst depth = area.z + area.depth\n\tfor (const def of map.paths) {\n\t\t// a profile's ground over the path's paint, as wide as its bed\n\t\tconst bed = def.profile?.ground !== undefined\n\t\tconst paint = bed ? def.profile!.ground : def.paint\n\t\tconst wide = bed ? (def.profile!.width ?? def.width) : def.width\n\t\tconst tile = paint === undefined ? 0 : map.tileset.indexOf(paint) + 1\n\t\tif (!tile || !def.points.length) continue\n\t\tconst path = new Path(def.points, wide)\n\t\t// only the cells within reach of its points, not the whole map\n\t\tconst reach = wide / 2 + 1\n\t\tconst xs = def.points.map((point) => point.x)\n\t\tconst zs = def.points.map((point) => point.z)\n\t\tfor (let cz = Math.max(Math.floor(Math.min(...zs) - reach), area.z); cz < Math.min(Math.ceil(Math.max(...zs) + reach), depth); cz++) {\n\t\t\tfor (let cx = Math.max(Math.floor(Math.min(...xs) - reach), area.x); cx < Math.min(Math.ceil(Math.max(...xs) + reach), width); cx++) {\n\t\t\t\tif (path.containsCell(cx, cz)) tiles[cz * map.width + cx] = tile\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Average level of the cells within ramp reach of a vertex */\nfunction averageLevel(map: GameMap, ix: number, iz: number): number {\n\tconst { width, depth, levels } = map\n\tlet sum = 0\n\tlet count = 0\n\tfor (let cz = Math.max(iz - RAMP_REACH, 0); cz < Math.min(iz + RAMP_REACH, depth); cz++) {\n\t\tfor (let cx = Math.max(ix - RAMP_REACH, 0); cx < Math.min(ix + RAMP_REACH, width); cx++) {\n\t\t\tsum += levels[cz * width + cx]\n\t\t\tcount++\n\t\t}\n\t}\n\treturn count ? sum / count : 0\n}\n\n/**\n * Cell of a map a point is in\n *\n * @internal\n */\nexport const mapCell = (map: GameMap, x: number, z: number): number =>\n\tclamp(Math.floor(z), 0, map.depth - 1) * map.width + clamp(Math.floor(x), 0, map.width - 1)\n\n// ---- tiles\n\n/**\n * Brings the paint of a map in line with a game's tiles, in place: afterwards index 1 is the game's first tile, and\n * so on. What was painted with a tile the game does not have keeps it, under an index after the game's: the map\n * loses nothing, and the file has it still. Returns the names of those, which no world is given\n *\n * @beta\n */\nexport function adoptTileset(map: GameMap, tiles: readonly string[]): string[] {\n\tconst used = new Set(map.tiles)\n\tconst strangers = map.tileset.filter((id, i) => !tiles.includes(id) && used.has(i + 1))\n\tconst tileset = [...tiles, ...strangers]\n\tif (tileset.length > MAX_TILES) throw new Error(`Map: ${tileset.length} tiles are more than a map can hold`)\n\tif (tileset.length !== map.tileset.length || tileset.some((id, i) => id !== map.tileset[i])) {\n\t\tconst remap = tileRemap(map.tileset, tileset)\n\t\tfor (let c = 0; c < map.tiles.length; c++) map.tiles[c] = remap[map.tiles[c]] ?? 0\n\t\tmap.tileset = tileset\n\t}\n\treturn strangers\n}\n\n/**\n * The paint of a map as a game's tiles have it: what is painted with a tile the game does not have is no paint\n *\n * @internal\n */\nexport function tilesFor(map: GameMap, tiles: readonly string[]): Uint8Array {\n\tconst remap = tileRemap(map.tileset, tiles)\n\treturn map.tiles.map((tile) => remap[tile] ?? 0)\n}\n"],"mappings":"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"}
|
package/dist/map/types.d.ts
CHANGED
|
@@ -11,17 +11,21 @@ import type { MapDoodadLight, MapEnvironment } from './look';
|
|
|
11
11
|
* cliff levels, ramps between levels, water and paint. The layers are what a map file stores, the terrain is
|
|
12
12
|
* derived from them whenever one changes.
|
|
13
13
|
*
|
|
14
|
-
* @
|
|
14
|
+
* @public
|
|
15
15
|
*/
|
|
16
16
|
export interface GameMap {
|
|
17
|
+
/** The map's name, as lists and the editor show it */
|
|
17
18
|
name: string;
|
|
19
|
+
/** A line about the map, for lists of maps */
|
|
18
20
|
description: string;
|
|
19
21
|
/**
|
|
20
|
-
* The game the map was made for, by the id of its module (`
|
|
22
|
+
* The game the map was made for, by the id of its module (`Rules.id`): a world is not made from it for
|
|
21
23
|
* another. For any game when left out, like the maps made before maps said
|
|
22
24
|
*/
|
|
23
25
|
game?: string;
|
|
26
|
+
/** The map's width in cells */
|
|
24
27
|
width: number;
|
|
28
|
+
/** The map's depth in cells */
|
|
25
29
|
depth: number;
|
|
26
30
|
/** How much higher a level stands than the one below */
|
|
27
31
|
cliffHeight: number;
|
|
@@ -54,7 +58,9 @@ export interface GameMap {
|
|
|
54
58
|
tileset: string[];
|
|
55
59
|
/** The players who can take part. Neutral and the creeps are always there on top of these */
|
|
56
60
|
players: MapPlayer[];
|
|
61
|
+
/** What stands on the map when the game begins: units, buildings, trees, mines */
|
|
57
62
|
objects: MapObject[];
|
|
63
|
+
/** The creep camps of the map */
|
|
58
64
|
camps: MapCamp[];
|
|
59
65
|
/** Parts of the map the rules watch by name: who walks in and out (see `MapRegion`) */
|
|
60
66
|
regions: MapRegion[];
|
|
@@ -68,6 +74,7 @@ export interface GameMap {
|
|
|
68
74
|
cameras: MapCamera[];
|
|
69
75
|
/** Groups what is placed can be drawn from when the game starts, and tables of what drops (see `MapRandomGroup`) */
|
|
70
76
|
randomGroups?: MapRandomGroup[];
|
|
77
|
+
/** The tables of what dropped things come from, by name (`MapObject.drops`) */
|
|
71
78
|
itemTables?: MapItemTable[];
|
|
72
79
|
/**
|
|
73
80
|
* The map's own definitions (campaign plan RC8), a `data.json` as the game's has it (`GameData`): laid over the
|
|
@@ -88,7 +95,7 @@ export interface GameMap {
|
|
|
88
95
|
/**
|
|
89
96
|
* Whether the whole map starts explored for everyone, the fog over it all the same: its ground, and what stands on it
|
|
90
97
|
* and belongs to no player (trees, mines, neutral buildings), seen from the first moment. Yes or no over the game's
|
|
91
|
-
* (`
|
|
98
|
+
* (`FogSettings.startExplored`); the game's when left out
|
|
92
99
|
*/
|
|
93
100
|
explored?: boolean;
|
|
94
101
|
/** What the loading screen says while it loads */
|
|
@@ -123,11 +130,19 @@ export interface GameMap {
|
|
|
123
130
|
*/
|
|
124
131
|
extra?: Record<string, unknown>;
|
|
125
132
|
}
|
|
126
|
-
/**
|
|
133
|
+
/**
|
|
134
|
+
* A seat for a player of the map: the player's id, name, team and colour with the options for what they start with
|
|
135
|
+
*
|
|
136
|
+
* @beta
|
|
137
|
+
*/
|
|
127
138
|
export interface MapPlayer {
|
|
139
|
+
/** The player's id, the number units and entities are owned by */
|
|
128
140
|
id: PlayerId;
|
|
141
|
+
/** The player's name as lobbies show it */
|
|
129
142
|
name: string;
|
|
143
|
+
/** The player's team number; players of the same number are allies */
|
|
130
144
|
team: number;
|
|
145
|
+
/** The player's colour as red, green and blue in 0..1 */
|
|
131
146
|
color: [number, number, number];
|
|
132
147
|
/** Where their base goes, for a game that gives everyone a start */
|
|
133
148
|
start?: Vec2;
|
|
@@ -141,7 +156,7 @@ export interface MapPlayer {
|
|
|
141
156
|
/** What they start with, by resource id, over what the game gives everyone */
|
|
142
157
|
resources?: Record<string, number>;
|
|
143
158
|
/**
|
|
144
|
-
* The race they play, fixed by the map (a campaign's), of the game's races (`
|
|
159
|
+
* The race they play, fixed by the map (a campaign's), of the game's races (`Rules.races`), or `random`: not
|
|
145
160
|
* chosen in a lobby. Left to the lobby, or the game's first, when left out
|
|
146
161
|
*/
|
|
147
162
|
race?: string;
|
|
@@ -156,6 +171,7 @@ export interface MapPlayer {
|
|
|
156
171
|
export interface MapForce {
|
|
157
172
|
/** The team, as its players have it (`MapPlayer.team`) */
|
|
158
173
|
team: number;
|
|
174
|
+
/** The team's name, shown in lobbies and for the game to read */
|
|
159
175
|
name: string;
|
|
160
176
|
/** Its players see what each other sees. Teams always do in this engine: kept for the game to read */
|
|
161
177
|
sharedVision?: boolean;
|
|
@@ -171,12 +187,17 @@ export interface MapForce {
|
|
|
171
187
|
export interface MapCamera {
|
|
172
188
|
/** The editor's, see `MapRegion.id` */
|
|
173
189
|
id: number;
|
|
190
|
+
/** The camera's name, which cinematics and code find it by */
|
|
174
191
|
name: string;
|
|
192
|
+
/** The camera's target on the map's x axis, in cells */
|
|
175
193
|
x: number;
|
|
194
|
+
/** The camera's target on the map's z axis, in cells */
|
|
176
195
|
z: number;
|
|
196
|
+
/** How far the camera is from what it looks at */
|
|
177
197
|
distance: number;
|
|
178
198
|
/** Radians around the vertical axis, 0 looking north, and between the view and the ground */
|
|
179
199
|
yaw: number;
|
|
200
|
+
/** The angle between the view and the ground, in radians */
|
|
180
201
|
pitch: number;
|
|
181
202
|
}
|
|
182
203
|
/**
|
|
@@ -185,11 +206,17 @@ export interface MapCamera {
|
|
|
185
206
|
* @beta
|
|
186
207
|
*/
|
|
187
208
|
export interface MapObject {
|
|
209
|
+
/** The object's id on the map, used by the editor */
|
|
188
210
|
id: number;
|
|
211
|
+
/** The id of the unit type placed */
|
|
189
212
|
type: string;
|
|
213
|
+
/** The player that owns it (`MAP_NEUTRAL` or `MAP_CREEPS` for the neutral and the creeps) */
|
|
190
214
|
owner: PlayerId;
|
|
215
|
+
/** Where it stands on the map's x axis, in cells */
|
|
191
216
|
x: number;
|
|
217
|
+
/** Where it stands on the map's z axis, in cells */
|
|
192
218
|
z: number;
|
|
219
|
+
/** The way it faces in radians, the way entities do (0 is along +z) */
|
|
193
220
|
facing: number;
|
|
194
221
|
/** How big it is drawn */
|
|
195
222
|
scale: number;
|
|
@@ -243,8 +270,11 @@ export interface MapObject {
|
|
|
243
270
|
* @beta
|
|
244
271
|
*/
|
|
245
272
|
export interface MapObjectOrder {
|
|
273
|
+
/** What the order is: `move` to a point or along a path, `patrol`, `guard` or `hold` */
|
|
246
274
|
kind: 'move' | 'patrol' | 'guard' | 'hold';
|
|
275
|
+
/** The name of a path of the map it follows, bend after bend */
|
|
247
276
|
path?: string;
|
|
277
|
+
/** The point it goes to, or guards */
|
|
248
278
|
point?: Vec2;
|
|
249
279
|
}
|
|
250
280
|
/**
|
|
@@ -258,6 +288,7 @@ export interface MapRegion {
|
|
|
258
288
|
id: number;
|
|
259
289
|
/** What the rules know it by. No two things on a map have the same, whatever they are */
|
|
260
290
|
name: string;
|
|
291
|
+
/** The shape of the region: a circle or a rectangle (`AreaShape`) */
|
|
261
292
|
shape: AreaShape;
|
|
262
293
|
/** What it is drawn in, in the editor, to tell it from the others. The editor picks one when left out */
|
|
263
294
|
color?: [number, number, number];
|
|
@@ -292,7 +323,9 @@ export interface MapPoint {
|
|
|
292
323
|
id: number;
|
|
293
324
|
/** What the rules know it by. No two things on a map have the same, whatever they are */
|
|
294
325
|
name: string;
|
|
326
|
+
/** Where it stands on the map's x axis, in cells */
|
|
295
327
|
x: number;
|
|
328
|
+
/** Where it stands on the map's z axis, in cells */
|
|
296
329
|
z: number;
|
|
297
330
|
/** Radians, the way entities face: 0 is along +z */
|
|
298
331
|
facing: number;
|
|
@@ -311,13 +344,17 @@ export interface MapDoodad {
|
|
|
311
344
|
id: number;
|
|
312
345
|
/** The model, by its path in `models/`: the map's own, the game's, or a shared one */
|
|
313
346
|
model: string;
|
|
347
|
+
/** Where it stands on the map's x axis, in cells */
|
|
314
348
|
x: number;
|
|
349
|
+
/** Where it stands on the map's z axis, in cells */
|
|
315
350
|
z: number;
|
|
316
351
|
/** How high above the ground under it */
|
|
317
352
|
y?: number;
|
|
318
353
|
/** Radians: which way it faces, the way entities do (0 is along +z), then how far it leans forward and to the side */
|
|
319
354
|
yaw: number;
|
|
355
|
+
/** How far it leans forward in radians; 0 when left out */
|
|
320
356
|
pitch?: number;
|
|
357
|
+
/** How far it leans to the side in radians; 0 when left out */
|
|
321
358
|
roll?: number;
|
|
322
359
|
/** How much bigger or smaller it is drawn than it was made, across, up and deep */
|
|
323
360
|
scale: [number, number, number];
|
|
@@ -337,6 +374,7 @@ export interface MapDoodad {
|
|
|
337
374
|
* name while the game runs (`setGate`). Shut when the game starts, unless `open`
|
|
338
375
|
*/
|
|
339
376
|
gate?: boolean;
|
|
377
|
+
/** Whether the gate starts open; shut when left out */
|
|
340
378
|
open?: boolean;
|
|
341
379
|
/** How far around its middle it blocks, in cells */
|
|
342
380
|
radius?: number;
|
|
@@ -407,7 +445,7 @@ export interface MapDoodadDetail {
|
|
|
407
445
|
}
|
|
408
446
|
/**
|
|
409
447
|
* How much detail things are drawn with by their distance on a map (`MapEnvironment.detail`), over the game's
|
|
410
|
-
* (`GameView.
|
|
448
|
+
* (`GameView.world.detail`): a forest map drawn lighter. The screen's: the rules never see it
|
|
411
449
|
*
|
|
412
450
|
* @beta
|
|
413
451
|
*/
|
|
@@ -416,12 +454,18 @@ export interface MapDetail {
|
|
|
416
454
|
scale?: number;
|
|
417
455
|
/** Past this far from the camera, in cells, no scenery, tree or mine is drawn at all, nor casts a shadow. None when left out */
|
|
418
456
|
cull?: number;
|
|
457
|
+
/**
|
|
458
|
+
* How many cells past the edges of the view what is there is drawn already, so that it is ready (its pictures, its
|
|
459
|
+
* shaders, its scenery merged) before the camera brings it in: no trees coming in as the view moves, for a little more
|
|
460
|
+
* drawn off the screen. The game's when left out
|
|
461
|
+
*/
|
|
462
|
+
preload?: number;
|
|
419
463
|
/**
|
|
420
464
|
* How many levels coarser than it is drawn at a thing casts its shadow, where its level does not say (`shadow`): 1
|
|
421
465
|
* draws a tree's shadow at its next lighter level. The game's when left out
|
|
422
466
|
*/
|
|
423
467
|
shadowBias?: number;
|
|
424
|
-
/** The levels of every model that has none said of it, over the game's (`GameView.
|
|
468
|
+
/** The levels of every model that has none said of it, over the game's (`GameView.world.detail.levels`) */
|
|
425
469
|
levels?: MapDetailLevel[];
|
|
426
470
|
/** A model's levels, by its path in `models/`, over its own and the game's */
|
|
427
471
|
models?: Record<string, MapDetailLevel[]>;
|
|
@@ -433,6 +477,7 @@ export interface MapDetail {
|
|
|
433
477
|
* @beta
|
|
434
478
|
*/
|
|
435
479
|
export interface MapRandomGroup {
|
|
480
|
+
/** The group's name, which `MapObject.random` names it by */
|
|
436
481
|
name: string;
|
|
437
482
|
/** One of these, more likely by its weight */
|
|
438
483
|
choices?: {
|
|
@@ -448,7 +493,9 @@ export interface MapRandomGroup {
|
|
|
448
493
|
* @beta
|
|
449
494
|
*/
|
|
450
495
|
export interface MapItemTable {
|
|
496
|
+
/** The table's name, which `MapObject.drops` names it by */
|
|
451
497
|
name: string;
|
|
498
|
+
/** The lines of the table, one of which is picked by weight */
|
|
452
499
|
items: MapItemTableEntry[];
|
|
453
500
|
/** How likely it is to drop anything, 0..1. Always when left out */
|
|
454
501
|
chance?: number;
|
|
@@ -460,9 +507,13 @@ export interface MapItemTable {
|
|
|
460
507
|
* @beta
|
|
461
508
|
*/
|
|
462
509
|
export interface MapItemTableEntry {
|
|
510
|
+
/** The item's id, for a line that names one */
|
|
463
511
|
item?: string;
|
|
512
|
+
/** The level of item it stands for, for a line that does not name one */
|
|
464
513
|
level?: number;
|
|
514
|
+
/** The class of item it stands for, for a line that does not name one */
|
|
465
515
|
class?: string;
|
|
516
|
+
/** How likely this line is among the table's, relative to the others' weights */
|
|
466
517
|
weight: number;
|
|
467
518
|
}
|
|
468
519
|
/**
|
|
@@ -471,7 +522,11 @@ export interface MapItemTableEntry {
|
|
|
471
522
|
* @beta
|
|
472
523
|
*/
|
|
473
524
|
export declare const BLOCKS_BUILD = 1;
|
|
474
|
-
/**
|
|
525
|
+
/**
|
|
526
|
+
* The `Terrain.blocked` value for a cell where walking and building are both kept off
|
|
527
|
+
*
|
|
528
|
+
* @beta
|
|
529
|
+
*/
|
|
475
530
|
export declare const BLOCKS_WALK = 2;
|
|
476
531
|
/**
|
|
477
532
|
* A named line of the map, through points in order, with a width: `world.map.path('road')` (see `Path`)
|
|
@@ -483,6 +538,7 @@ export interface MapPath {
|
|
|
483
538
|
id: number;
|
|
484
539
|
/** What the rules know it by. No two things on a map have the same, whatever they are */
|
|
485
540
|
name: string;
|
|
541
|
+
/** The points of the path in order, in cells */
|
|
486
542
|
points: Vec2[];
|
|
487
543
|
/** How wide it is, in cells: what it paints and keeps clear, and what `Path.contains` says is on it */
|
|
488
544
|
width: number;
|
|
@@ -518,7 +574,7 @@ export interface PathProfile {
|
|
|
518
574
|
water?: boolean;
|
|
519
575
|
}
|
|
520
576
|
/**
|
|
521
|
-
* The time of day of a map, in a game with days (`
|
|
577
|
+
* The time of day of a map, in a game with days (`Rules.day`). The rules': what is done at night is done by it
|
|
522
578
|
*
|
|
523
579
|
* @beta
|
|
524
580
|
*/
|
|
@@ -534,8 +590,11 @@ export interface MapDay {
|
|
|
534
590
|
* @beta
|
|
535
591
|
*/
|
|
536
592
|
export interface MapCamp {
|
|
593
|
+
/** The map's id for the camp, used by the editor */
|
|
537
594
|
id: number;
|
|
595
|
+
/** Where the camp stands on the map's x axis, in cells */
|
|
538
596
|
x: number;
|
|
597
|
+
/** Where the camp stands on the map's z axis, in cells */
|
|
539
598
|
z: number;
|
|
540
599
|
/** Unit types, the first one stands in the middle */
|
|
541
600
|
units: string[];
|
|
@@ -560,7 +619,7 @@ export declare const MAP_NEUTRAL: PlayerId;
|
|
|
560
619
|
export declare const MAP_CREEPS: PlayerId;
|
|
561
620
|
/**
|
|
562
621
|
* Players a map may have at most, whatever the game: each could be a team of its own, and the fog of war keeps 32
|
|
563
|
-
* teams apart (`MAX_FOG_TEAMS`). How many a game allows is its own (`
|
|
622
|
+
* teams apart (`MAX_FOG_TEAMS`). How many a game allows is its own (`Rules.maxPlayers`, 8 when it says nothing)
|
|
564
623
|
*
|
|
565
624
|
* @beta
|
|
566
625
|
*/
|
|
@@ -571,17 +630,33 @@ export declare const MAX_MAP_PLAYERS = 32;
|
|
|
571
630
|
* @beta
|
|
572
631
|
*/
|
|
573
632
|
export declare const MAX_LEVEL = 4;
|
|
574
|
-
/**
|
|
633
|
+
/**
|
|
634
|
+
* The colours players are given by their number, in 0..1; past the end they start again
|
|
635
|
+
*
|
|
636
|
+
* @beta
|
|
637
|
+
*/
|
|
575
638
|
export declare const PLAYER_COLORS: [number, number, number][];
|
|
576
|
-
/**
|
|
639
|
+
/**
|
|
640
|
+
* Makes the `MapPlayer` for a player's id, with the default name `Player <id>`, its own team and the colour from `PLAYER_COLORS`
|
|
641
|
+
*
|
|
642
|
+
* @beta
|
|
643
|
+
*/
|
|
577
644
|
export declare const playerSlot: (id: number) => MapPlayer;
|
|
578
|
-
/**
|
|
645
|
+
/**
|
|
646
|
+
* The options `createMap` makes a map with
|
|
647
|
+
*
|
|
648
|
+
* @beta
|
|
649
|
+
*/
|
|
579
650
|
export interface NewMapOptions {
|
|
651
|
+
/** The map's name: `New map` when left out */
|
|
580
652
|
name?: string;
|
|
653
|
+
/** The map's width in cells */
|
|
581
654
|
width: number;
|
|
655
|
+
/** The map's depth in cells */
|
|
582
656
|
depth: number;
|
|
583
657
|
/** Height of the land everywhere */
|
|
584
658
|
height?: number;
|
|
659
|
+
/** How many player slots the map has: 2 when left out */
|
|
585
660
|
players?: number;
|
|
586
661
|
/** The game it is for, see `GameMap.game` */
|
|
587
662
|
game?: string;
|
|
@@ -600,9 +675,13 @@ export declare function createMap(options: NewMapOptions): GameMap;
|
|
|
600
675
|
* @beta
|
|
601
676
|
*/
|
|
602
677
|
export interface CellRect {
|
|
678
|
+
/** The rectangle's first cell on the x axis */
|
|
603
679
|
x: number;
|
|
680
|
+
/** The rectangle's first cell on the z axis */
|
|
604
681
|
z: number;
|
|
682
|
+
/** How many cells across it is */
|
|
605
683
|
width: number;
|
|
684
|
+
/** How many cells down it is */
|
|
606
685
|
depth: number;
|
|
607
686
|
}
|
|
608
687
|
/**
|