swarm/DESIGN.md

56 lines
1.8 KiB
Markdown
Raw Normal View History

Here are a few general guiding principles behind the development and
design of the game.
Fun
---
The game should be fun! (But it's OK if it's only fun to a certain
kind of nerd.)
Programming
-----------
The game is, first and foremost, a *programming* game, and it should
promote the exploration and use of various sorts of programming
abstractions. In other words, it should reward finesse in writing
sophsticated robot programs, as opposed to e.g. throwing a ton of
robots at things by brute force (though it's OK if some brute force is
required as well).
Composability
-------------
Don't provide complex built-in features; instead, provide simple,
fundamental, composable pieces out of which users can build the
complex features themselves.
Open World
----------
There should be multiple viable paths to upgrading and building more
abstractions, and multiple avenues for exploration. In other words,
we *don't* want a linear chain of achievements, where you *must*
enable language feature X in order to obtain resource Y, which you
need in order to enable language feature Z, which you need in order
2022-09-18 15:04:33 +03:00
to... and so on. Some of this will probably happen organically; it
would probably be impossible to enforce a strictly linear chain of
2022-09-18 15:04:33 +03:00
achievements even if we wanted to. But it's worth reflecting on
explicitly.
Discoverability
---------------
2022-09-18 15:04:33 +03:00
Ideally, everything in the game, including both entities and
programming language features, should be discoverable just by
playing.
Balance
-------
The activities of adding more programming language features, adding
new kinds of entities and recipes, and adding new things to the
generated worlds are all inextricably linked, and should be done
deliberately. It will probably require a lot of experimentation and
tweaking to balance things so that gameplay is interesting and
challenging but not overly difficult or tedious.