about summary refs log tree commit diff
path: root/src/Main.hs
AgeCommit message (Collapse)AuthorFilesLines
2020-02-17 Don't run initEvent when loading the gameGriffin Smith1-3/+3
Rather than having a single sentWelcome boolean, avoid running the initEvent entirely when loading an already-initialized game. Among other things, this stops us from re-generating a level and then merging it with the existing one when the game is loaded (oops).
2019-12-30 Add dungeon level generationGriffin Smith1-6/+19
Add a dungeon level generator, which: 1. generates an infinite sequence of rectangular rooms within the dimensions of the level 2. removes any duplicates from that sequence 3. Generates a graph from the delaunay triangulation of the centerpoints of those rooms 4. Generates the minimum-spanning-tree of that delaunay triangulation, with weights given by line length in points 5. Adds back a subset (default 10-15%) of edges from the delaunay triangulation to the graph 6. Uses the resulting graph to draw corridors between the rooms, using a random point on the near edge of each room to pick the points of the corridors
2019-11-29 Implement saving+loading the gameGriffin Smith1-0/+19
Implement ToJSON and FromJSON for all of the various pieces of the game state, and add a pair of functions saveGame/loadGame implementing a prism to save the game as zlib-compressed JSON. To test this, there's now Arbitrary, CoArbitrary, and Function instances for all the parts of the game state - to get around circular imports with the concrete entities this unfortunately is happening via orphan instances, plus an hs-boot file to break a circular import that was just a little too hard to remove by moving things around. Ugh.
2019-10-12 Allow specifying seed on startupGriffin Smith1-15/+49
Allow specifying the seed for the game's global RNG on startup, and print the seed when the game exits. This'll allow us to more reliably reproduce bugs - yay!
2019-09-19 Add items and inventoryGriffin Smith1-1/+1
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-13 Place the chacracter in the level at startup timeGriffin Smith1-11/+21
Randomly select a position in the largest contiguous region of the generated level in which to place the character at startup time.
2019-09-09 Convert generated levels to wallsGriffin Smith1-1/+1
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-07 Add cellular-automata cave generatorGriffin Smith1-4/+58
Add a cellular-automata-based cave level generator, plus an optparse-applicative-based CLI for invoking level generators in general.
2019-09-02 Link up messages to the overall gameGriffin Smith1-1/+1
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-08-31 Add entities, and allow walking aroundGriffin Smith1-1/+1
Add support for entities via a port of the EntityMap type, and implement command support starting at basic hjkl.
2019-08-25 An @-sign in a box, in haskellGriffin Smith1-0/+17
Initial commit of a Haskell version of Xanthous, written using Brick and built with Nix. This is so much nicer and so much easier