Commit graph

111 commits

Author SHA1 Message Date
Griffin Smith
05da490185 Gormlaks attack back
When gormlaks see the character, they step towards them and attack
dealing 1 damage when adjacent. Characters have hitpoints now, displayed
at the bottom of the game screen, and when the game is over they die.
2019-09-29 10:54:52 -04:00
Griffin Smith
ec39dc0a5b Tweak gormlak movement slightly
- Don't let gormlaks run into things like walls or each other
- Add a small element of randomness to gormlaks' motion
- Increase gormlaks' vision by a large amount
2019-09-28 15:03:36 -04:00
Griffin Smith
abea2dcfac Add debug command to reveal the game
Add a (debug) command to reveal all tiles on the game regardless of the
character's vision, which'll make it easier to debug creature's behavior
while they're not visible.
2019-09-28 15:03:36 -04:00
Griffin Smith
1a0f618a82 Implement the start of creature AI
Add a Brain class, which determines for an entity the set of moves it
makes every step of the game, and begin to implement that for gormlaks.
The idea here is that every step of the game, a gormlak will move
towards the furthest-away wall it can see.
2019-09-28 15:03:36 -04:00
Griffin Smith
915264acae
Add Github Actions config 2019-09-25 14:27:44 -04:00
Griffin Smith
d632a30d05 Implement combat
Put a bunch of gormlaks randomly on the level, and implement combat via
damaging those gormlaks by one point.
2019-09-21 12:43:54 -04:00
Griffin Smith
dd16166665 Describe what you see when you walk over items
Every step the character takes, describe the entities at that position
excluding the character.
2019-09-20 19:38:46 -04:00
Griffin Smith
4db3a68efe Add doors and an open command
Add a Door entity and an Open command, which necessitated supporting the
direction prompt. Currently nothing actually puts doors on the map,
which puts a slight damper on actually testing this out.
2019-09-20 19:38:46 -04:00
Griffin Smith
7770ed0548 Add the beginnings of a prompt system
Add the beginnings of a generic prompt system, with exclusive support
atm for string prompts, and test it out by asking the character for
their name at startup
2019-09-20 12:03:30 -04:00
Griffin Smith
62a2e05ef2 Add items and inventory
Add a new "Item" entity, which pulls from the previously-existent
ItemType raw, and add a "PickUp" command which takes the (currently
*only*) item off the ground and puts it into the inventory.
2019-09-19 13:56:14 -04:00
Griffin Smith
15895c69fe Remove all but the largest region in caves
When generating cave levels, remove all but the largest contiguous
region from the resulting level.
2019-09-15 17:30:57 -04:00
Griffin Smith
2604341c2f Scroll the viewport around the character
Scroll the viewport so that the character is never less than 5 away from
the edge of the screen.

This was super easy, thanks Brick!
2019-09-15 17:30:57 -04:00
Griffin Smith
58fce2ec19 Progressively reveal the map to the player
As the character walks around the map, progressively reveal the entities
on the map to them, using an algorithm based on well known
circle-rasterizing and line-rasterizing algorithms to calculate lines of
sight that are potentially obscured by walls.
2019-09-15 17:30:57 -04:00
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