Age | Commit message (Collapse) | Author | Files | Lines |
|
Every step the character takes, describe the entities at that position
excluding the character.
|
|
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.
|
|
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
|
|
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.
|
|
When generating cave levels, remove all but the largest contiguous
region from the resulting level.
|
|
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!
|
|
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.
|
|
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
|
|
Check if there's a wall or other entity where the character is going,
and stop the character from going there
|
|
Randomly select a position in the largest contiguous region of the
generated level in which to place the character at startup time.
|
|
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.
|
|
Add a cellular-automata-based cave level generator, plus an
optparse-applicative-based CLI for invoking level generators in general.
|
|
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)
|
|
Add raw types with support for both creatures and items, loaded
statically from a "raws" folder just like in the Rust version.
|
|
That Was Easy (tm)!
|
|
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
|
|
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
|
|
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.
|
|
Add support for entities via a port of the EntityMap type, and implement
command support starting at basic hjkl.
|
|
Initial commit of a Haskell version of Xanthous, written using Brick and
built with Nix.
This is so much nicer and so much easier
|
|
Sorry rust, but you're just not fun to write
|
|
Add a method for writing single-choice menus to the viewport, within a
box. Unused for now.
|
|
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
|
|
The unused error is causing more trouble than it's worth at this
point
|
|
Clear messgaes every turn, preserving the ability to ^P to get the
previous message
|
|
|
|
If the character walks over any number of entities, describe those
entities to the character.
|
|
This seems like something I keep having to write
|
|
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:)
|
|
|
|
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.
|
|
for character! and also characters.
|
|
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.
|
|
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.
|
|
Add all the necessary params to the CLI options for generating caves
|
|
|
|
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
|
|
|
|
Implement a template syntax with a nom parser, and a formatter to render
templates to strings.
|
|
much nicer!
|
|
There's a gormlak, you can kill it.
That's it.
|
|
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.
|
|
Via new "toml_dir" and "json_dir" directives in the macro
|
|
Factor out a macro for static references to data parsed from config
files at compile-time.
|
|
Cribbed directly from Nethack
This was really, really easy.
|
|
When the character moves, the game ticks forward equal to the
character's speed
|
|
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.
|
|
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.
|
|
Add support for messages, along with a global lookup map and random
choice of messages.
|
|
We now have an inner and outer viewport, and entity positions are
relative to the inner one while drawing happens to the outer one.
|