- [Screwlisp proposes a kitten](https://screwlisp.small-web.org) # Game grid KRF actions from lisp code. Alright, let us do something with these types. Software-individuals have a lot of opinions, so do not take this devlog as implying always and only. I will also mostly belay lengthy philosophical apologies. But let us first make a ` s>` slowly and deliberately. Then, software-individuals do not want themselves to be a graphical application, so I am imagining them producing basically an input to [McCLIM](https://codeberg.org/McCLIM/McCLIM) like I just [told our friend ACDW they could try](https://itch.io/jam/spring-lisp-game-jam-2025/topic/4856768/lightweight-2d-cl-game-engine). ## Slowly building a rectangular grid I am still eepitching like I [started here](https://screwlisp.small-web.org/lispgames/plant-insect-bird-game-sketch/). Lets see what we can do by hand in the manually-interacting part of my [Pawn-75 software-individuals](https://codeberg.org/tfw/pawn-75). ### Setting session variables (of sequences) ``` ssv .line1 ``` Sandewall said that everyone starts by asking to be able to do this and it is just not that useful, but he included it for them anyway. Those are regular `nil`s. Let's start with a 10x10 grid and see what is happening. ### Concatenating sequences I guess his will work. ``` ssv .line10 (concat .line1 .line1) ssv .lines2 <.line10 .line10 .line10 .line10 .line10> ssv .lines10 (concat .lines2 .lines2) ``` ``` ses.064) .lines10 => < > ``` Well, I can't say this was the most beautiful way to do things, but we certainly have a sequence of ten sequences of ten nils, made using software-individuals' primitives. ### Aside: str.concat and union The analogous str.concat exists: ``` ses.074) ssv .z (str.concat "a" "b") ses.075) .z => "ab" ses.076) (str.concat .z .z) => "abab" ses.077) (str.concat (str.concat .z .z) (string z)) => "ababz" ses.078) (str.concat (str.concat .z .z) (string .z)) => "ababab" ``` and union for sets. ``` ses.065) (union {a b c} {c d e}) => {a b c d e} ``` Some accessor idioms. ``` ses.083) (t1 <1 2 3>) => <2 3> ses.084) (e1 <1 2 3>) => 1 ses.085) (e2 <1 2 3>) => 2 ``` But this is not well suited right now. Let us just # leodef some lisp ``` put make-grid type lispdef addmember (get board contents) make-grid writefil board ``` Since the def is multiple lines, you invoke whatever editor. At the end we can now find this: ```../../../demus/Game/board.leo --------------------------------------------------------- -- make-grid [: type lispdef] [: latest-rearchived nil] ``` We can just add our leodef there. I can't say I am stupendously happy with how I have figured out to do low level work, but I /do/ think the intent is that the nice logical notation was for interactive work, and that you do end up doing Norvigian low level pure lisp new functionalities. ``` --------------------------------------------------------- -- make-grid [: type lispdef] [: latest-rearchived nil] (leodef tile-grid tile-grid (x y z) (setf (get x 'tiles) (let ((empty-row `(seq& ,(loop :repeat z :collect nil :into nils :finally (return nils))))) `(seq& ,(loop :repeat y :collect (copy-tree empty-row)))))) ``` ## Try the new def. ``` loadk board tile-grid grid1 2 3 ``` -. ``` ses.118) tile-grid grid1 2 3 < > ``` Well, we can make an empty grid. We should definitely be checking grid1 was or could be something that had tiles though. For now if I can just interoperate between my logic and lisp freely, I am content to begin with. Actually, this seems like a moment to stop as well. We got to adding infterface commands and internal defuns with lisp to our KRF game. # Dramatic conclusion tomorrow! See everyone - [on the mastodon](https://mastodon.sdf.org) - At [Kent Pitman](https://nhplace.com)'s interview on the [show on Wednesday 000UTC](https://communitymedia.video/c/screwtape_channel/videos) (watch the mastodon) - [In the lispgames jam](https://itch.io/jam/spring-lisp-game-jam-2025/topic/4858711/what-genre-is-simulation-eat-things-or-you-die)