Compare commits
2 commits
be0c8d122e
...
b7adfd4846
Author | SHA1 | Date | |
---|---|---|---|
|
b7adfd4846 | ||
|
23b75d36fd |
2
.envrc
|
@ -1,2 +0,0 @@
|
|||
use guix
|
||||
|
19
.gitignore
vendored
|
@ -1,9 +1,10 @@
|
|||
# ---> Scheme
|
||||
*.ss~
|
||||
*.ss#*
|
||||
.#*.ss
|
||||
|
||||
*.scm~
|
||||
*.scm#*
|
||||
.#*.scm
|
||||
|
||||
*.go
|
||||
/Makefile
|
||||
/Makefile.in
|
||||
/aclocal.m4
|
||||
/autom4te.cache/
|
||||
/build-aux/
|
||||
/config.log
|
||||
/config.status
|
||||
/configure
|
||||
/pre-inst-env
|
||||
|
|
29
Makefile.am
Normal file
|
@ -0,0 +1,29 @@
|
|||
GOBJECTS = $(SOURCES:%.scm=%.go)
|
||||
nobase_mod_DATA = $(SOURCES)
|
||||
nobase_go_DATA = $(GOBJECTS)
|
||||
|
||||
# Make sure source files are installed first, so that the mtime of
|
||||
# installed compiled files is greater than that of installed source
|
||||
# files. See
|
||||
# <http://lists.gnu.org/archive/html/guile-devel/2010-07/msg00125.html>
|
||||
# for details.
|
||||
guile_install_go_files = install-nobase_goDATA
|
||||
$(guile_install_go_files): install-nobase_modDATA
|
||||
|
||||
CLEANFILES = $(GOBJECTS)
|
||||
GUILE_WARNINGS = -Wunbound-variable -Warity-mismatch -Wformat
|
||||
SUFFIXES = .scm .go
|
||||
.scm.go:
|
||||
$(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILE_TOOLS) compile $(GUILE_WARNINGS) -o "$@" "$<"
|
||||
|
||||
moddir=$(prefix)/share/guile/site/$(GUILE_EFFECTIVE_VERSION)
|
||||
godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache
|
||||
|
||||
SOURCES = \
|
||||
game/main.scm
|
||||
|
||||
EXTRA_DIST = \
|
||||
$(SOURCES) \
|
||||
assets/images/chickadee.png \
|
||||
COPYING \
|
||||
README.md
|
64
README.md
|
@ -1,3 +1,63 @@
|
|||
# bloatrunner
|
||||
# Chickadee Game Template
|
||||
|
||||
Small loderunner clone for the 2024 game jam
|
||||
This repository provides a template to use as a starting point for
|
||||
making a new game using
|
||||
[Chickadee](https://dthompson.us/projects/chickadee.html)! It
|
||||
includes all the autotools boilerplate so you don't have to worry
|
||||
about that nonsense too much.
|
||||
|
||||
## 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!
|
||||
|
||||
## 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 run-game
|
||||
```
|
||||
|
||||
## 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!
|
||||
|
||||
## Bundling
|
||||
|
||||
If you are setup to produce redistributable bundles of Chickadee games
|
||||
(see
|
||||
https://dthompson.us/manuals/chickadee/Invoking-chickadee-bundle.html),
|
||||
then you can use `chickadee bundle` to produce binary release bundles.
|
||||
This is admittedly an area where things really do not "just work" as
|
||||
they should, so do reach out for help if you need it.
|
||||
|
|
BIN
assets/images/chickadee.png
Normal file
After Width: | Height: | Size: 755 B |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
3
bootstrap.sh
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
exec autoreconf -vif
|
4
bundle.scm
Normal file
|
@ -0,0 +1,4 @@
|
|||
'((asset-directories . ("assets/images"))
|
||||
(bundle-name . "chickadee-game-template-0.1.0-x86_64")
|
||||
(code . "game/main.scm")
|
||||
(launcher-name . "chickadee-game-template"))
|
18
configure.ac
Normal file
|
@ -0,0 +1,18 @@
|
|||
dnl -*- Autoconf -*-
|
||||
|
||||
AC_INIT(chickadee-game-template, 0.1.0)
|
||||
AC_CONFIG_SRCDIR(game)
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AM_INIT_AUTOMAKE([foreign -Woverride -Wno-portability])
|
||||
AM_SILENT_RULES([yes])
|
||||
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env])
|
||||
AC_CONFIG_FILES([scripts/run-game], [chmod +x scripts/run-game])
|
||||
|
||||
GUILE_PKG([3.0])
|
||||
GUILE_PROGS
|
||||
|
||||
GUILE_MODULE_REQUIRED([chickadee])
|
||||
|
||||
AC_OUTPUT
|
38
game/main.scm
Normal file
|
@ -0,0 +1,38 @@
|
|||
;;; Licensed under the Apache License, Version 2.0 (the "License");
|
||||
;;; you may not use this file except in compliance with the License.
|
||||
;;; You may obtain a copy of the License at
|
||||
;;;
|
||||
;;; http://www.apache.org/licenses/LICENSE-2.0
|
||||
;;;
|
||||
;;; Unless required by applicable law or agreed to in writing, software
|
||||
;;; distributed under the License is distributed on an "AS IS" BASIS,
|
||||
;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
;;; See the License for the specific language governing permissions and
|
||||
;;; limitations under the License.
|
||||
|
||||
(define-module (game main)
|
||||
#:use-module (chickadee)
|
||||
#:use-module (chickadee math vector)
|
||||
#:use-module (chickadee graphics sprite)
|
||||
#:use-module (chickadee graphics texture)
|
||||
#:use-module (system repl coop-server)
|
||||
#:export (launch-game))
|
||||
|
||||
(define sprite-position (vec2 256.0 176.0))
|
||||
(define sprite-texture #f)
|
||||
(define repl #f)
|
||||
|
||||
(define (load)
|
||||
(set! sprite-texture (load-image "assets/images/chickadee.png"))
|
||||
(set! repl (spawn-coop-repl-server)))
|
||||
|
||||
(define (update _dt)
|
||||
(poll-coop-repl-server repl))
|
||||
|
||||
(define (draw _alpha)
|
||||
(draw-sprite sprite-texture sprite-position))
|
||||
|
||||
(define (launch-game args)
|
||||
(run-game #:load load
|
||||
#:update update
|
||||
#:draw draw))
|
29
guix.scm
Normal file
|
@ -0,0 +1,29 @@
|
|||
(use-modules (guix packages)
|
||||
((guix licenses) #:prefix license:)
|
||||
(guix download)
|
||||
(guix git)
|
||||
(guix build-system gnu)
|
||||
(guix utils)
|
||||
(gnu packages)
|
||||
(gnu packages autotools)
|
||||
(gnu packages guile)
|
||||
(gnu packages game-development)
|
||||
(gnu packages pkg-config))
|
||||
|
||||
(package
|
||||
(name "chickadee-game-template")
|
||||
(version "0.1.0-git")
|
||||
(source (git-checkout (url (dirname (current-filename)))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
'(#:make-flags '("GUILE_AUTO_COMPILE=0")))
|
||||
(native-inputs
|
||||
(list autoconf automake pkg-config))
|
||||
(inputs
|
||||
(list guile-3.0))
|
||||
(propagated-inputs
|
||||
(list guile-chickadee))
|
||||
(synopsis "Chickadee game template")
|
||||
(description "This is an example package for a Chickadee game.")
|
||||
(home-page "https://dthompson.us/projects/chickadee.html")
|
||||
(license license:asl2.0))
|
|
@ -1,6 +0,0 @@
|
|||
;; What follows is a "manifest" equivalent to the command line you gave.
|
||||
;; You can store it in a file that you may then pass to any 'guix' command
|
||||
;; that accepts a '--manifest' (or '-m') option.
|
||||
|
||||
(specifications->manifest
|
||||
(list "guile-chickadee"))
|
10
pre-inst-env.in
Normal file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
abs_top_srcdir="`cd "@abs_top_srcdir@" > /dev/null; pwd`"
|
||||
abs_top_builddir="`cd "@abs_top_builddir@" > /dev/null; pwd`"
|
||||
|
||||
export GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
|
||||
export GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH"
|
||||
export PATH="$abs_top_builddir/scripts:$PATH"
|
||||
|
||||
exec "$@"
|
7
scripts/run-game.in
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!@GUILE@ \
|
||||
--no-auto-compile -e main -s
|
||||
!#
|
||||
|
||||
(use-modules (game main))
|
||||
(define* (main #:optional (args (command-line)))
|
||||
(launch-game args))
|