A hack'n'slay game written in haskell (http://sebastiandev.net/blog/)
root
- Data
- GameLogic
- Graphics
- Object
- Physics
- Reactive
- Test
- Tiling
- hackslay-htiled-helper
- hslay
- nix
- resources
- tests
- util
- Block.hs
- Game.hs
- GameControl.hs
- GameLogic.hs
- GameRendering.hs
- Graphics.hs
- LESSONSLEARNED.md
- LICENSE
- Makefile
- Movement.hs
- Object.hs
- Physics.hs
- README.org
- Setup.hs
- Tiling.hs
- default.nix
- hackandslay.cabal
- hints.hlint
- shell.nix
* 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
Execute
#+begin_src
cabal run hslay -- --map-file=resources/PlasmaPool.tmx
#+end_src
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.