diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 6c8f9a1..c27db8b 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -41,6 +41,25 @@ "kind": "build", "isDefault": true } + }, + { + "label": "Create verslag.pdf", + "type": "shell", + "command": "pandoc", + "args": [ + "-s", + "-o", "verslag.pdf", + "-f", "markdown+smart+header_attributes+yaml_metadata_block+auto_identifiers", + "--pdf-engine", "lualatex", + "--template", "eisvogel", + "header.yaml", + "README.md" + ], + "problemMatcher": [], + "group": { + "kind": "none", + "isDefault": false + } } ], "inputs": [ diff --git a/README.md b/README.md index 49869ed..d173f3f 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,4 @@ -# RPG-Engine - -Schrijf een game-engine voor een rollenspel - -https://pixel-poem.itch.io/dungeon-assetpuck -https://kyrise.itch.io/kyrises-free-16x16-rpg-icon-pack - -# RPG Engine requirements - + + +# RPG-Engine + +RPG-Engine is a game engine for playing and creating your own RPG games. + +If you are interested in the development side of things, [development notes can be found here](#Development-notes). + +This README serves as both documentation and project report, so excuse the details that might not be important for the average user. ## Playing the game +These are the keybinds *in* the game. All other keybinds in the menus should be straightforward. + +| Action | Primary | Secondary | +| ---------- | ------------- | ----------- | +| Move up | `Arrow Up` | `w` | +| Move left | `Arrow Left` | `a` | +| Move down | `Arrow Down` | `s` | +| Move right | `Arrow Right` | `d` | + +### Example playthrough + TODO -- Input commands etc -- An example playthrough +- An example playthrough, with pictures and explanations + +\pagebreak ## Writing your own stages @@ -85,7 +84,8 @@ A stage description file consists of several elements. | `Value` | is either a `Block` or a `BlockList` or a traditional value, such as `String` or `Int` | | `BlockList` | is a number of `Block`'s, surrounded by `[ ... ]`, separated by commas, can be empty | -We'll look at the following example to explain these concepts. +
+We'll look at the following example to explain these concepts. ```javascript player: { @@ -126,7 +126,7 @@ levels: [ id: "key", x: 3, y: 1, - name: "Doorkey", + name: "Door key", description: "Unlocks a secret door", useTimes: 1, value: 0, @@ -153,6 +153,7 @@ levels: [ } ] ``` +
This stage description file consists of a single `Block`. A stage description file always does. This top level `Block` contains two `Value`s `player` and `levels`, not separated by commas. @@ -247,4 +248,47 @@ If we look at the example, all the objects are length = 1 Condition ('inventoryContains(key)') Entry = empty ConditionList + Action ('leave()') -``` \ No newline at end of file +``` + +\pagebreak + +## Development notes + +### Assets & dependencies + +The following assets were used (and modified if specified): + +- Kyrise's Free 16x16 RPG Icon Pack[[1]](#1) + + Every needed asset was taken and put into its own `.png`, instead of in the overview. + +- 2D Pixel Dungeon Asset Pack by Pixel_Poem[[2]](#2) + + Every needed asset was taken and put into its own `.png`, instead of in the overview. + +RPG-Engine makes use of the following libraries: + +- [gloss](https://hackage.haskell.org/package/gloss) for game rendering +- [gloss-juicy](https://hackage.haskell.org/package/gloss-juicy) for rendering images +- [hspec](https://hackage.haskell.org/package/hspec) for testing +- [hspec-discover](https://hackage.haskell.org/package/hspec-discover) for allowing to split test files in multiple files +- [parsec](https://hackage.haskell.org/package/parsec) for parsing configuration files + +### Future development ideas + +The following ideas could (or should) be implemented in the future of this project. + +- [ ] Entity system: With en ES, you can implement moving entities and repeated input. It also resembles the typical + game loop more closely which can make it easier to implement other ideas in the future. + +- [ ] Game music: Ambient game music and sound effects can improve the gaming experience I think. + +\pagebreak + +## References + +[1] [Kyrise's Free 16x16 RPG Icon Pack](https://kyrise.itch.io/kyrises-free-16x16-rpg-icon-pack) © 2018 + by [Kyrise](https://kyrise.itch.io/) is licensed under [CC BY 4.0](http://creativecommons.org/licenses/by/4.0/?ref=chooser-v1) + +[2] [2D Pixel Dungeon Asset Pack](https://pixel-poem.itch.io/dungeon-assetpuck) by [Pixel_Poem](https://pixel-poem.itch.io/) + is not licensed \ No newline at end of file diff --git a/header.yaml b/header.yaml new file mode 100644 index 0000000..21a20a4 --- /dev/null +++ b/header.yaml @@ -0,0 +1,15 @@ +--- +title: "RPG Engine" +author: "Tibo De Peuter" +date: "23 december 2022" +subtitle: "Write a game engine for an RPG game" +# geometry: "left=2.54cm,right=2.54cm,top=1.91cm,bottom=1.91cm" +geometry: "left=2.54cm,right=2.54cm,top=2.54cm,bottom=2.54cm" +titlepage: true +titlepage-rule-height: 4 +toc: true +listings-disable-line-numbers: true +listings-no-page-break: false +subparagraph: true +lang: en-GB +--- diff --git a/verslag.pdf b/verslag.pdf index e69de29..f2dba5d 100644 Binary files a/verslag.pdf and b/verslag.pdf differ