Commit graph

98 commits

Author SHA1 Message Date
Griffin Smith
6678ac986c Fill the outer edges of generated levels
To avoid the character being able to go OOB.

This is something we had in the Rust version but I hadn't ported over yet
2019-09-14 15:16:27 -04:00
Griffin Smith
33c831d23d Implement collision
Check if there's a wall or other entity where the character is going,
and stop the character from going there
2019-09-14 15:10:51 -04:00
Griffin Smith
c06edf3cc6 Place the chacracter in the level at startup time
Randomly select a position in the largest contiguous region of the
generated level in which to place the character at startup time.
2019-09-13 15:24:05 -04:00
Griffin Smith
9ebdc6fbb4 Convert generated levels to walls
Add support for converting generated levels to walls, and merge one into
the entity map at the beginning of the game.

There's nothing here that guarantees the character ends up *inside* the
level though (they almost always don't) so that'll have to be slotted
into the level generation process.
2019-09-09 20:54:33 -04:00
Griffin Smith
e01cf9b056 gitignore debug.log 2019-09-07 14:52:37 -04:00
Griffin Smith
f03ad6bbd6 Add cellular-automata cave generator
Add a cellular-automata-based cave level generator, plus an
optparse-applicative-based CLI for invoking level generators in general.
2019-09-07 14:52:37 -04:00
Griffin Smith
73a52e531d Put a test gormlak on the screen
Implement a concrete "Creature" entity, and place one on the screen at
the game startup for testing.

This revealed a bug with drawing when getting the maximum entity
position, but that appears to be fixed now (yay)
2019-09-02 14:45:36 -04:00
Griffin Smith
4d270712ae Add raws, loaded statically from a folder
Add raw types with support for both creatures and items, loaded
statically from a "raws" folder just like in the Rust version.
2019-09-02 13:59:28 -04:00
Griffin Smith
243104c410 Add commands for diagonal movement
That Was Easy (tm)!
2019-09-02 10:54:52 -04:00
Griffin Smith
18551cdf30 Add a previous message command
Add a "previous message" command, triggered via ctrl+p.

I attempted here to get the message area to still take up a row of space
post-hiding the message, but failed - should revisit that at some point
2019-09-02 10:52:03 -04:00
Griffin Smith
adb3b74c0c Link up messages to the overall game
Add a "say" function for saying messages within an app monad to the
user, and link everything up to display them and track their history
2019-09-02 10:52:01 -04:00
Griffin Smith
2fd3e4c9ad Implement messages
Implement messages almost the same as in the Rust version, only with
YAML instead of TOML this time, and a regular old mustache template
instead of something handrolled. Besides that, pretty much everything
here is the same.
2019-09-01 13:54:27 -04:00
Griffin Smith
4ef19aa35a Add entities, and allow walking around
Add support for entities via a port of the EntityMap type, and implement
command support starting at basic hjkl.
2019-08-31 13:18:51 -04:00
Griffin Smith
6eba471e24 Use haskellSrc2nix over explicit cabal2nix
Use the (undocumented!) helper function haskellSrc2nix over having to
explicitly run cabal2nix all the time when rebuilding
2019-08-31 13:15:17 -04:00
Griffin Smith
d3f3890dc5 An @-sign in a box, in haskell
Initial commit of a Haskell version of Xanthous, written using Brick and
built with Nix.

This is so much nicer and so much easier
2019-08-25 13:28:10 -04:00
Griffin Smith
fb0d1b3e66 Wipe Rust project
Sorry rust, but you're just not fun to write
2019-08-25 13:25:13 -04:00
Griffin Smith
e2d2f011c6 Add method for writing option menus to viewport
Add a method for writing single-choice menus to the viewport, within a
box. Unused for now.
2019-08-03 20:31:42 -04:00
Griffin Smith
48fb3f6624 Add inventory, and the ability to pick up items
Add inventory as a basic vector of items attached to the character, and
the ability to pick up a single item where the character stands
2019-08-03 20:31:42 -04:00
Griffin Smith
82cefedab9 Fix a bunch more Clippy lints, but disable in Circle
The unused error is causing more trouble than it's worth at this
point
2019-08-03 20:31:42 -04:00
Griffin Smith
929dac06d0 Clear messages every turn
Clear messgaes every turn, preserving the ability to ^P to get the
previous message
2019-08-03 12:48:38 -04:00
Griffin Smith
7138d9a0b6 Add clippy to circleCI and fix all lints 2019-08-03 12:41:40 -04:00
Griffin Smith
9db5fad2f9 Describe what you see when you walk over it
If the character walks over any number of entities, describe those
entities to the character.
2019-07-29 11:22:39 -04:00
Griffin Smith
34b20b7786 Add functions for making sentences from lists
This seems like something I keep having to write
2019-07-28 22:31:07 -04:00
Griffin Smith
ba7bec9a3e Re-draw entities when you walk over them
This also required making the noodles character not actually the emoji,
since the emoji being double-width means it still gets overwritten when
you walk to the right of it (D:)
2019-07-28 21:32:24 -04:00
Griffin Smith
10fb09eca2 Turns out, collect is the answer 2019-07-28 21:16:20 -04:00
Griffin Smith
8f3c83311f Check rustfmt and run tests in Circle 2019-07-28 21:08:57 -04:00
Griffin Smith
300e14b5fe Add CircleCI config 2019-07-28 20:44:09 -04:00
Griffin Smith
24d38cb589 Make EntityMap::append not overwrite entities
Rather than overwriting entities with the same ID when appending, make
EntityMap::append actually respect the internal invariants of the map
and preserve entities from both sides, with no regard for their id.
2019-07-28 20:38:39 -04:00
Griffin Smith
ea648cfcdd Add some more name prompts
for character! and also characters.
2019-07-28 17:48:25 -04:00
Griffin Smith
6c1eba6762 Allow converting generated levels to entities
Add a new Wall entity, and allow converting generated levels to entity
maps containing them, then finally displaying them using some of
the (now expanded) box drawing machinery.
2019-07-28 17:45:43 -04:00
Griffin Smith
f22bcad817 Add a generic text-prompt system
Add a generic text-prompt system to the Game, and use it to prompt the
character for their name on startup. There's also a Promise type in
util, which is used for the result of the prompt.
2019-07-27 22:16:23 -04:00
Griffin Smith
68e8ad8a0e Add more command-line options for generating caves
Add all the necessary params to the CLI options for generating caves
2019-07-22 20:20:18 -04:00
Griffin Smith
d001b0a017 Cellular-automata based cave level generator 2019-07-20 01:40:09 -04:00
Griffin Smith
29c80ac8ba Add the beginning of item entities
Add a new Item raw type and entity type, with preliminary, basic support
for food. There's a really frustrating toml-rs bug that prevents writing
these nicely as toml right now, so I also added support for mixing JSON
and TOML in a single config dir
2019-07-19 21:55:09 -04:00
Griffin Smith
4e9138aa6f add a test ensuring messages work 2019-07-19 12:07:27 -04:00
Griffin Smith
e2d13bd76b Add templates for messages
Implement a template syntax with a nom parser, and a formatter to render
templates to strings.
2019-07-19 11:54:31 -04:00
Griffin Smith
bc93999cf3 Always reset the cursor back to the character
much nicer!
2019-07-14 16:31:36 -04:00
Griffin Smith
575a051e6e Implement extremely basic combat
There's a gormlak, you can kill it.
That's it.
2019-07-14 16:20:22 -04:00
Griffin Smith
e7ad87c730 Add (statically-included) entity raws
Add a system for statically-included entity raws (which necessitated
making a deserializable existential Color struct) and test it out by
initializing the game (for now) with a single on-screen gormlak.
2019-07-14 14:29:55 -04:00
Griffin Smith
081146da30 Allow static_cfg to include entire directories
Via new "toml_dir" and "json_dir" directives in the macro
2019-07-14 14:29:39 -04:00
Griffin Smith
67d18b486c Factor out static_cfg from static init of messages
Factor out a macro for static references to data parsed from config
files at compile-time.
2019-07-14 12:12:43 -04:00
Griffin Smith
405dbffe37 Add commands for diagonal movement
Cribbed directly from Nethack

This was really, really easy.
2019-07-14 11:00:44 -04:00
Griffin Smith
bf03ebc549 Add placeholder for game ticks
When the character moves, the game ticks forward equal to the
character's speed
2019-07-13 09:07:39 -04:00
Griffin Smith
5af2429ecb Implement a global map of entities
Implement a global map of entities, which allows referencing by either
position or ID and updating the positions of existent entities, and put
the character in there.
2019-07-08 20:58:51 -04:00
Griffin Smith
20f1ccb460 add "Previous message" command
ctrl+p, like nethack. Cycles through messages, also like nethack.

May want to add some sort of indicator of how many messages there have
been.
2019-07-07 13:02:50 -04:00
Griffin Smith
c643ee1dfc Add messages, with global lookup map
Add support for messages, along with a global lookup map and random
choice of messages.
2019-07-07 12:41:15 -04:00
Griffin Smith
78a52142d1 Make all drawing happen to a viewport
We now have an inner and outer viewport, and entity positions are
relative to the inner one while drawing happens to the outer one.
2019-07-06 15:32:38 -04:00
Griffin Smith
de081d7b1d an @-sign in a box 2019-07-05 22:45:57 -04:00