diff --git a/.guix/modules/bloatrunner.scm b/.guix/modules/bloatrunner.scm index 173f360..bb23b4c 100644 --- a/.guix/modules/bloatrunner.scm +++ b/.guix/modules/bloatrunner.scm @@ -32,15 +32,14 @@ #:select? vcs-file?)) (build-system gnu-build-system) (arguments - '(#:make-flags '("GUILE_AUTO_COMPILE=0") + '(#:modules ((guix build gnu-build-system) + (guix build utils) + (ice-9 popen) + (ice-9 rdelim)) + #:make-flags '("GUILE_AUTO_COMPILE=0") #:phases (modify-phases %standard-phases - ;; (replace 'bootstrap - ;; (lambda _ - ;; ;; The 'bootstrap' script lacks a shebang, leading to "Exec - ;; ;; format error" with glibc 2.35. - ;; (invoke "autoreconf" "-vfi"))) (add-after 'install-bin 'wrap-program (lambda* (#:key inputs outputs #:allow-other-keys) ;; (use-modules (guix build guile-build-system)) @@ -49,7 +48,10 @@ (chickadee (assoc-ref inputs "guile-chickadee")) (deps (list out chickadee)) (guile (assoc-ref inputs "guile")) - (effective (target-guile-effective-version)) + (effective (read-line + (open-pipe* OPEN_READ + (string-append guile "/bin/guile") + "-c" "(display (effective-version))"))) (mods (string-drop-right ;drop trailing colon (string-join deps (string-append "/share/guile/site/" @@ -57,25 +59,27 @@ 'suffix) 1)) (objs (string-drop-right - (string-join deps - (string-append "/lib/guile/" effective - "/site-ccache:") - 'suffix) - 1))) - (wrap-program (string-append out "/bin/bloatrunner") - `("GUILE_LOAD_PATH" ":" prefix (,mods)) - `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs))))))) - )) - (native-inputs - (list autoconf automake pkg-config)) - (inputs - (list guile-3.0)) - (propagated-inputs - (list guile-chickadee)) - (synopsis "Loderunner inspired game") - (description "Small game written for the 2024 lisp game jam.") - (home-page "https://www.snamellit.com/projects/bloatrunner.html") - (license license:gpl3))) + + (string-append "/lib/guile/" effective + "/site-ccache:") + 'suffix) + 1))) + (wrap-program (string-append out "/bin/bloatrunner") + `("GUILE_LOAD_PATH" ":" prefix (,mods)) + `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs)) + `("ASSET_DIR" ":" prefix (,(string-append out "/share/bloatrunner"))) + ))))) + )) + (native-inputs + (list autoconf automake pkg-config)) + (inputs + (list guile-3.0)) + (propagated-inputs + (list guile-chickadee)) + (synopsis "Loderunner inspired game") + (description "Small game written for the 2024 lisp game jam.") + (home-page "https://www.snamellit.com/projects/bloatrunner.html") + (license license:gpl3))) bloatrunner diff --git a/README.org b/README.org index be67c67..b343bea 100644 --- a/README.org +++ b/README.org @@ -45,7 +45,10 @@ So now, go out, collect the keys and maintain a healthy diet! - [X] create hero entity - [X] implement hero movement - [X] create other entity - - [ ] bundle game for distribution + - [-] bundle game for distribution + - [X] add assets to the package + - [X] wrap the script to find the libraries + - [ ] ensure the assets can be found by the render packages - [ ] upload to itch.io - [ ] automate upload to itch.io - [ ] create other's AI @@ -170,3 +173,56 @@ guix pack -L .guix/modules bloatrunner #+END_SRC Generates a 750Mb installed folder structure with everything in it, theoretically + +To add the startup script : + +#+BEGIN_SRC + +#+END_SRC + +This startup script needs to be wrapped during installation to find +the libraries. This requires calling the `wrap-program` utility with +the environment variables set according to the installed environment. + +#+BEGIN_SRC scheme + (arguments + '(#:modules ((guix build gnu-build-system) + (guix build utils) + (ice-9 popen) + (ice-9 rdelim)) + #:make-flags '("GUILE_AUTO_COMPILE=0") + + #:phases + (modify-phases %standard-phases + (add-after 'install-bin 'wrap-program + (lambda* (#:key inputs outputs #:allow-other-keys) + ;; (use-modules (guix build guile-build-system)) + ;; Wrap the 'gitile' command to refer to the right modules. + (let* ((out (assoc-ref outputs "out")) + (chickadee (assoc-ref inputs "guile-chickadee")) + (deps (list out chickadee)) + (guile (assoc-ref inputs "guile")) + (effective (read-line + (open-pipe* OPEN_READ + (string-append guile "/bin/guile") + "-c" "(display (effective-version))"))) + (mods (string-drop-right ;drop trailing colon + (string-join deps + (string-append "/share/guile/site/" + effective ":") + 'suffix) + 1)) + (objs (string-drop-right + (string-join deps + (string-append "/lib/guile/" effective + "/site-ccache:") + 'suffix) + 1))) + (wrap-program (string-append out "/bin/bloatrunner") + `("GUILE_LOAD_PATH" ":" prefix (,mods)) + `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,objs))))))) + )) + +#+END_SRC + +most of this is dynamically construct the content of the paths. diff --git a/game/render/hero.scm b/game/render/hero.scm index 33a2f4c..5ae28d4 100644 --- a/game/render/hero.scm +++ b/game/render/hero.scm @@ -1,5 +1,6 @@ (define-module (game render hero) #:use-module (game model hero) + #:use-module (game util assets) #:use-module (chickadee) #:use-module (chickadee math vector) #:use-module (chickadee graphics sprite) @@ -13,7 +14,7 @@ (define hero-atlas #f) (define (render-hero-load) - (set! hero-texture (load-image "assets/images/lr_penguin2.png")) + (set! hero-texture (load-image (asset-file-name "assets/images/lr_penguin2.png"))) (set! hero-atlas (split-texture hero-texture 32 32))) ;; start index of the walk animation diff --git a/game/render/level.scm b/game/render/level.scm index 5783714..92508bf 100644 --- a/game/render/level.scm +++ b/game/render/level.scm @@ -1,5 +1,6 @@ (define-module (game render level) #:use-module (game model level) + #:use-module (game util assets) #:use-module (srfi srfi-64) #:use-module (chickadee graphics color) #:use-module (chickadee graphics sprite) @@ -19,7 +20,7 @@ ;; load the tile texture and split it into a tile atlas (define (render-level-load) - (set! tile-texture (load-image "assets/images/simples_pimples.png" + (set! tile-texture (load-image (asset-file-name "assets/images/simples_pimples.png") #:transparent-color black)) (set! tile-atlas (split-texture tile-texture 16 16)) (set! sprite-batch (make-sprite-batch tile-texture #:capacity 1200)) diff --git a/game/render/other.scm b/game/render/other.scm index 6551fec..5a893e9 100644 --- a/game/render/other.scm +++ b/game/render/other.scm @@ -1,5 +1,6 @@ (define-module (game render other) #:use-module (game model other) + #:use-module (game util assets) #:use-module (chickadee) #:use-module (chickadee math vector) #:use-module (chickadee graphics sprite) @@ -12,7 +13,7 @@ (define other-atlas #f) (define (render-other-load) - (set! other-atlas (split-texture (load-image "assets/images/simples_pimples.png") 16 16))) + (set! other-atlas (split-texture (load-image (asset-file-name "assets/images/simples_pimples.png")) 16 16))) ;; start index of the walk animation (define other-walking-offset 3926) diff --git a/game/util/assets.scm b/game/util/assets.scm new file mode 100644 index 0000000..29a2c4e --- /dev/null +++ b/game/util/assets.scm @@ -0,0 +1,11 @@ +(define-module (game util assets) + #:export (asset-file-name) + ) + + +(define prefix (or (getenv "ASSET_DIR") "." )) + + +(define (asset-file-name name) + (string-append prefix "/" name) + )