172 lines
5.2 KiB
Org Mode
172 lines
5.2 KiB
Org Mode
* Bloatrunner
|
|
|
|
A Lode Runner clone where you have to manage your waistline bloat.
|
|
|
|
![Screenshot of Bloatrunner](assets/images/glamshot.png)
|
|
|
|
As a *Bloatrunner* you have to collect keys to open the gate at the top
|
|
of the level. However running costs energy, and as in any endurance
|
|
event energy management and correct fueling is of utmost
|
|
importance. By running your glycogen reserves in your muscles will
|
|
deplete and need to be replenished either from food or from fat
|
|
reserves.
|
|
|
|
Your running kit has some small pockets to store a few gels or packets
|
|
of gummi bears for fast energy replenishment. You will find
|
|
replacements from time to time. In addition there will be other food
|
|
items distributed over the levels.
|
|
|
|
However as in real life it seems that most food items are unhealthy
|
|
and for some reason irresistable so they are consumed
|
|
immediately. Similarly for some reason it seems that food turns
|
|
immediately into fat and takes forever to burn off. And too much fat
|
|
makes you slow and even worse might make passing the finish gate a
|
|
squeeze or plainly impossible.
|
|
|
|
And then there are the _others_, which for some reason can run without
|
|
getting tired, eat without getting fat, voice their judgmental
|
|
opinions and generally make a nuisance of themselves. Close contact
|
|
with these makes you lose the will to live and turns you into a couch
|
|
potato, ceasing to be a _Bloatrunner_.
|
|
|
|
A freak accident involving some radioactive meteorite allows you to
|
|
create craters at will, well, more like potholes. But big enough to
|
|
let the _others_ fall in so you can pass over their head.
|
|
|
|
So now, go out, collect the keys and maintain a healthy diet!
|
|
|
|
|
|
* Game Plan [7/16]
|
|
|
|
- [X] start project organization
|
|
- [X] select some assets to start with
|
|
- [X] animate hero
|
|
- [X] figure out tile maps
|
|
- [X] create hero entity
|
|
- [X] implement hero movement
|
|
- [X] create other entity
|
|
- [ ] bundle game for distribution
|
|
- [ ] upload to itch.io
|
|
- [ ] automate upload to itch.io
|
|
- [ ] create other's AI
|
|
- [ ] add keys and portal
|
|
- [ ] add foods and bloat indicator
|
|
- [ ] scale hero waist related to bloat level
|
|
- [ ] create more levels
|
|
- [ ] some level celebration/animation
|
|
|
|
* Installation and Development
|
|
|
|
** Using Guix
|
|
|
|
We *highly recommend* using [Guix](https://guix.gnu.org/) to manage your
|
|
development environment. Once Guix is installed, getting all of the
|
|
dependencies you need to develop is *easy*. Just run `guix shell` from
|
|
the root directory of this repository and you'll be good to go!
|
|
|
|
In a hosted guix you can ensure you are in your profile by setting the
|
|
environment in a `.envrc` file
|
|
|
|
```
|
|
export GUIX_PROFILE="/home/pti/.config/guix/current"
|
|
source "$GUIX_PROFILE/etc/profile"
|
|
export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale"
|
|
use guix -l guix.scm
|
|
|
|
```
|
|
|
|
** Building from source
|
|
|
|
```
|
|
Assuming Guile and Chickadee are installed on your system, a fresh
|
|
project can be built like so:
|
|
|
|
./boostrap.sh
|
|
./configure
|
|
make -j$(nproc)
|
|
```
|
|
|
|
After the build system is initialized, only `make` needs to be run to
|
|
recompile the Scheme modules.
|
|
|
|
Note: On hosted guix the configure script might find the host guile
|
|
version instead of the guix provided one. This can lead to
|
|
incompatible bytecode errors. To force to use a consistent guile use
|
|
|
|
```
|
|
./configure GUILE=$(which guile)
|
|
```
|
|
|
|
to ensure the right version is configured.
|
|
|
|
** Running the game
|
|
|
|
To run the game from the source checkout, use the `pre-inst-env`
|
|
wrapper script:
|
|
|
|
```
|
|
./pre-inst-env bloatrunner
|
|
```
|
|
|
|
** REPL-driven development
|
|
|
|
After the game is launched, a Guile REPL server will be running on
|
|
port 37146. We recommend using the
|
|
[Geiser](https://geiser.nongnu.org/) Emacs extension for connecting to
|
|
it using `M-x connect-to-guile`. Once Geiser connects to the REPL,
|
|
the game can be modified while it runs!
|
|
|
|
When the environment is set as indicated above and the emacs direnv
|
|
module is enabled, we can run `geiser-guile` as usual and everything
|
|
should work as expected.
|
|
|
|
To restart the game on crash I use *watchexec* to observe the folder and
|
|
restart on crash when the code is updated. That avoids scrolling
|
|
errors so I can read the error and immediately see if it is fixed on
|
|
saving.
|
|
|
|
```
|
|
$ watchexec -e .scm ./pre-inst-env bloatrunner
|
|
```
|
|
|
|
|
|
** TODO Bundling
|
|
|
|
Use `guix pack`.
|
|
|
|
For this we need a proper package definition in a module with the
|
|
build instructions and sources and outputs.
|
|
|
|
I followed the instructions at [[https://guix.gnu.org/en/blog/2023/from-development-environments-to-continuous-integrationthe-ultimate-guide-to-software-development-with-guix/][Ultimate Guide to Software Development
|
|
with Guix]] .
|
|
|
|
To add the assets we need to define them
|
|
|
|
#+BEGIN_SRC
|
|
asset_files = \
|
|
assets/images/simples_pimples.png \
|
|
assets/images/lr_penguin2.png \
|
|
assets/images/glamshot.png \
|
|
assets/levels/level1.tmx \
|
|
assets/levels/tiles.tsx \
|
|
assets/levels/level-1.map
|
|
|
|
nobase_dist_pkgdata_DATA = $(asset_files)
|
|
|
|
...
|
|
EXTRA_DIST = \
|
|
$(SOURCES) \
|
|
$(subdir_files)
|
|
README.org
|
|
|
|
#+END_SRC
|
|
|
|
|
|
see [[https://www.gnu.org/software/automake/manual/html_node/Data.html#Data][Architecture independent datafiles section of the automake manual.]]
|
|
|
|
|
|
#+BEGIN_SRC shell
|
|
guix pack -L .guix/modules bloatrunner
|
|
#+END_SRC
|
|
|
|
Generates a 750Mb installed folder structure with everything in it, theoretically
|