A hack'n'slay game written in haskell (http://sebastiandev.net/blog/)


* Introduction

  This program will become a videogame one day.  See
  =hackandslay.cabal= for the dependencies.

  In its current state this package contains both: the engine to run
  the game and the data files that describe the game itself.

* Running the Game
    cabal run hslay -- --map-file=resources/PlasmaPool.tmx
  to start the game with a placeholder/demo map.  You can make your
  own map file with the [[http://www.mapeditor.org/][tiled]] tiling editor.

* Tests
  We try to test as much as possible.  Although there are not tests
  for every function you should write tests for every feature you
  implement.  If you stumble upon functions that are not tested by the
  our test suites you are welcome to write tests for it.

  We use two different testing frameworks in this project: doctest and
  hspec.  You should write doctests if thoses tests help the
  user/programmer to better understand a certain function.  Other
  tests go into the hspec test suite.

* Directory structure
  The modules are organized by a specific structure.  Every directory
  in the top level represents a specific aspect of the program.
  Modules in a directory =D= should not depend on modules listed below
  the directory =D= in the following listing.  This means that for
  example modules in the =Data= directory should never depend on
  modules from the =Physics= directory.

** Data
   The modules in this directory are concerned with data structures
   and utilities like geometry, random, ...

** Physics
   The modules in the Physics directory are concerned with
   representation of physical units and concepts.

** Object
   Modules in the Object directory are about the behavior and internal
   logic of entities in the game, like Player, Enemy, Projectiles ...

** GameLogic
   Modules in the GameLogic directory are concerned with the
   composition of entities, like "ai".

* Nix Integration

  The author of this program uses nix to manage the haskell package
  dependencies.  For this reason there is a nix expression
  (=shell.nix=) stored in the repository that creates a shell with all
  dependencies built.  The environment created is only tested with the
  15.09 release of NixOS/Nixpkgs.  Any dependency that is not
  satisfied by this version of nixpkgs is derived from a custom nix
  expression stored in the =nix= subdirectory of this project.

* License

  This program is licensed under the GNU General Public License,
  version 3.  The complete LICENSE can be found in the LICENSE file.