Resource gathering + programming game
Go to file
Karl Ostmo 936b30d22a
extensible terrain (#1775)
Closes #1641

The `data/terrain.yaml` file is now the authoritative source of terrains, though `BlankT` is still a hard-coded special case.

I have not changed the underlying integer representation of terrain in the world function, which means that the `terrainIndexByName` Map in the `TerrainMap` record is needed for translating between `Int` and `TerrainType`.

# Demo

    scripts/play.sh -i data/scenarios/Testing/1775-custom-terrain.yaml

![Screenshot from 2024-02-22 16-51-53](https://github.com/swarm-game/swarm/assets/261693/1d263c8b-4e9c-40bf-bdc8-bf5ba8e33c4d)

# Changes

* There used to be a function called `integrateScenarioEntities` that combined the `EntityMap` stored in the `Scenario` record with the global entity map.  However, the global entity map is accessible at parse time of the `Scenario`, so we do the combining there and only ever store the combined map in the `Scenario` record.
* JSON Schema for terrain
* Removed the distinction between "World" attributes and "Terrain" attributes
* Unit tests for scenario-defined terrain and related validations
    * Validate existence of referenced terrain at scenario parse time
    * Validate attributes referenced by terrains at parse time
2024-02-29 06:22:21 +00:00
.github autoformat cabal file (#1769) 2024-02-19 20:07:15 +00:00
.vscode extensible terrain (#1775) 2024-02-29 06:22:21 +00:00
app extensible terrain (#1775) 2024-02-29 06:22:21 +00:00
data extensible terrain (#1775) 2024-02-29 06:22:21 +00:00
docs split scenario construction into separate sublibrary (#1719) 2024-01-24 21:11:14 +00:00
editors volume command (#1747) 2024-01-28 01:02:08 +00:00
example Key input handler (#1214) 2023-04-25 16:39:59 +00:00
images 0.4 release blog post (#1444) 2023-08-22 12:35:05 -05:00
scripts extensible terrain (#1775) 2024-02-29 06:22:21 +00:00
src extensible terrain (#1775) 2024-02-29 06:22:21 +00:00
test extensible terrain (#1775) 2024-02-29 06:22:21 +00:00
web Render command matrix (#1658) 2024-01-26 01:02:14 +00:00
.gitignore tweak benchmarks (#1754) 2024-01-29 18:38:57 +00:00
.hlint.yaml more partial function bans (#1564) 2023-10-02 03:13:20 +00:00
.mergify.yml Update to depend on lsp-2.4.0.0 (#1762) 2024-02-12 11:05:39 -06:00
.restyled.yaml Fourmolu fixup (#1326) 2023-07-12 18:00:23 +00:00
.stan.toml exclude some stan observations 2021-09-15 06:39:21 -05:00
cabal.haskell-ci Update to depend on lsp-2.4.0.0 (#1762) 2024-02-12 11:05:39 -06:00
CHANGELOG.md 0.5 release (#1606) 2023-11-01 10:18:16 +00:00
CODE_OF_CONDUCT.md Adopt the Contributor Covenant Code of Conduct 2021-09-19 13:38:33 -05:00
COMMUNITY.md some updates to README and COMMUNITY 2022-10-05 17:52:52 -05:00
CONTRIBUTING.md update CONTRIBUTING guide, and remove info from README (#1512) 2023-09-23 21:46:04 +00:00
cspell.json autopopulate spellchecker (#1749) 2024-01-28 01:54:13 +00:00
DESIGN.md More minor edits (#693) 2022-09-18 12:04:33 +00:00
feedback.yaml Records (#1148) 2023-03-25 11:58:34 +00:00
fourmolu.yaml World description DSL (#1376) 2023-08-17 11:08:42 +00:00
hie.yaml.stack Add cabal to HLS configuration (#131) 2021-10-03 21:14:04 +00:00
LICENSE Update editors (#581) 2022-07-25 00:16:23 +02:00
NOTICE Use a new opaque type for robots instead of strings (#303) 2022-03-02 03:00:44 +00:00
pull_request_template.md Add a pull request template (#1434) 2023-08-20 19:43:27 +00:00
README.md update CONTRIBUTING guide, and remove info from README (#1512) 2023-09-23 21:46:04 +00:00
scenarios Documentation for scenario file format (#612) 2022-07-30 08:02:11 -04:00
stack.yaml Dependency updates (#1765) 2024-02-12 20:04:28 +00:00
swarm.cabal extensible terrain (#1775) 2024-02-29 06:22:21 +00:00

Swarm

Build Status GitHub release (latest by date) Swarm release on Hackage Contributor Covenant ircchat GitHub Contributors

Swarm is a 2D programming and resource gathering game. Program your robots to explore the world and collect resources, which in turn allows you to build upgraded robots that can run more interesting and complex programs. More info can be found on the Swarm website.

World 0 after scanning a tree and making a log.

Contributing

See CONTRIBUTING.md for information about various ways you can contribute to Swarm development!

Building

If you just want to play the game, head over to the Swarm website for installation instructions. If you want to build Swarm from source (e.g. in order to contribute, or to test out the latest bleeding-edge unreleased features), read on.

  1. Clone the Swarm repository, e.g.

    git clone https://github.com/swarm-game/swarm.git
    
  2. If you don't already have the stack tool:

    1. Get the ghcup tool, a handy one-stop utility for managing all the different pieces of a Haskell toolchain.

    2. Use ghcup to install stack:

      ghcup install stack
      
  3. Now use stack to build and run Swarm:

    cd /path/to/the/swarm/repo
    stack run
    
  4. Go get a snack while stack downloads a Haskell compiler and all of Swarm's dependencies.

  5. You might also want to check out the scripts directory, which contains an assortment of useful scripts for developers.