screwlisp proposes kittens

Making One NicCLIM Level

I guess everyone can make an s-expression file suitable for a map, but I better make one using some of the s-expression file tools I put in NicCLIM for my lispgamejam submission (a game which will be included in NicCLIM).

Here I will just make the s-expression file and pull some art from https://analognowhere.com/ .

Usual NicCLIM setup

• (setq inferior-lisp-program "ecl")
• (setq eepitch-buffer-name "*slime-repl ECL*")
• (slime)
(ql:Quickload :McCLIM)
(compile-file "~/Downloads/nicclim.lisp" :load t)
(in-package :nic)
(string '~/game)
(ensure-directories-exist *)
(uiop:chdir (string '~/game/))
(uiop:chdir (string '~/game/)) ;; Twice, for some reason.

oops I got sidetracked by discovering that John Mashey is on the Mastodon and also cares about the climate crisis.

Map plan

I would like to realize https://analognowhere.com/techno-mage/stranded/ as a game map. I am going to decompose the comic into its characters and features. I might try 50 pixels x 50 pixels for the bitmaps.

Features

Sun TREE PENTIUM-HEAD OPENBLADE SODA-CAN PUFFY PENGUIN BAG DUNE DESERT-SKY DESERT-HORIZON DESERT-RUINS DESERT-SCRUB TECHNO-MAGE-SIT

Phew! This was absolutely exhausting for me. My flow in GIMP was:

  1. select-tool the object I want
  2. Copy it to a new, transparent image
  3. Crop to content
  4. Fuzzy-select large background colors and C-x them
  5. Zoom in and erase/C-x unselectable or small leftovers
  6. Unlock and scale to 50x50 pixels
  7. Export as PNG

Please remember to correctly attribute https://merveilles.town/@prahou when using my cc/sa-but-no-llm-stuff 50x50px extractions. https://analognowhere.com/techno-mage/stranded/

But onward, onward

Making a 5x5 map noninteractively with NicCLIM

I guess the top row will be sky, the 2nd row horizon, and the 3rd, 4th and 5th desert.

(rect-file 'sky 5 1 '(sky))
(rect-file 'horiz 5 1 '(horizon))
(rect-file 'ground 5 3 '(ground))
(vertical-cat 'sky 'horiz 'sky-zon) ; oops. (fixed)
(vertical-cat 'sky-zon 'ground 'sky-ground)

oh, vertical-cat was broken [], great. Redownload nicclim.lisp (itch)

NIC> (vertical-cat 'sky-zon 'ground 'sky-ground)
T
NIC> (cat 'sky-ground)
(SKY)	(SKY)	(SKY)	(SKY)	(SKY)
(HORIZON)	(HORIZON)	(HORIZON)	(HORIZON)	(HORIZON)
(GROUND)	(GROUND)	(GROUND)	(GROUND)	(GROUND)
(GROUND)	(GROUND)	(GROUND)	(GROUND)	(GROUND)
(GROUND)	(GROUND)	(GROUND)	(GROUND)	(GROUND)

seems to be working.

Ascribe some images

(setf (get 'ground :bitmap) 'imgs/techno-mage/dune.png)
(setf (get 'sky :bitmap) 'imgs/techno-mage/desert-sky.png)
(setf (get 'horizon :bitmap) 'imgs/techno-mage/desert-horizon.png)

and look at it

(enclose-map 'sky-ground)

Add foreground symbols / images

(setf (get 'sun :bitmap) 'imgs/techno-mage/sun.png)
(setf (get 'mage :bitmap) 'imgs/techno-mage/techno-mage-sit.png)
(setf (get 'tree :bitmap) 'imgs/techno-mage/tree.png)
(setf (get 'scrub :bitmap) 'imgs/techno-mage/desert-scrub.png)
(setf
 (get 'bag :bitmap) 'imgs/techno-mage/bag.png
 (get 'puffy :bitmap) 'imgs/techno-mage/puffy.png
 (get 'soda :bitmap) 'imgs/techno-mage/soda-can.png
 (get 'ruins :bitmap) 'imgs/techno-mage/desert-ruins.png
 (get 'penguin :bitmap) 'imgs/techno-mage/penguin.png
 (get 'openblade :bitmap) 'imgs/techno-mage/openblade.png
 (get 'head :bitmap) 'imgs/techno-mage/pentium-head.png)

Interactively laying them out

The resulting SKY-GROUND file

(SKY)	(SKY)	(SKY SUN)	(SKY)	(SKY)
(HORIZON)	(HORIZON TREE)	(HORIZON PUFFY)	(HORIZON)	(HORIZON)
(GROUND)	(GROUND OPENBLADE)	(GROUND MAGE)	(GROUND PENGUIN)	(GROUND)
(GROUND)	(GROUND SODA)	(GROUND BAG)	(GROUND)	(GROUND)
(GROUND)	(GROUND)	(GROUND)	(GROUND)	(GROUND)

Conclusions

I have to say

  1. That was a lot of work. Art is no joke. Normally I tell other people being-a-successful-artist-is-harder-than-being-a-successful-office-worker. Today in some small way I lived that (by snipping pieces of prahou’s art out of his comics).
  2. If you do contribute something, whether using NicCLIM like me, or in your own s-expression-file-building-way, you have my eternal gratitude and I look forward to adding your itch.io account as an author on this game (I will submit it inside NicCLIM).
  3. Basically dehydrating and reconstituting (cutting up and taxidermying?) Prahou’s comic worked really well. I elided the part 2 which would be a radio event that pops up the other panel of the scene.

This raises the interesting question for me as to what the different items of work here were.

I guess first Prahou authored a comic. Then, I authored NicCLIM and the NicCLIM-maps-as-a-game ANSI CL programs. Then I cut out pictures from Prahou’s comic and ascribed lisp symbols them as properties

Towards literally bridging the comic as such and programmatic NicCLIM maps as such. Seems like food for thought.

48 hours left if you want to hazard one. I guess before-the-Sunday-morning-in-Europe-peertube-live would be a good deadline.

Fin.

Talk on the Mastodon thread as always. Specifically, coordinate / send me your game coauthoring of s-expressions there! Or the itch lispgamejam thread.

screwlisp proposes kittens