<!--
SPDX-FileCopyrightText: 2023 Jummit

SPDX-License-Identifier: CC-BY-SA-4.0
-->

# Pre-Jam Preparations

## The Idea

![Cover](https://img.amiami.com/images/product/main/114/TOY-IPN-3338.jpg)

For the [Autumn Lisp Game Jam 2023](https://itch.io/jam/autumn-lisp-game-jam-2023), having recently made a real-life version, I decided to implement [Rai-Net Access Battlers](https://breezewiki.esmailelbob.xyz/steins-gate/wiki/RaiNet_AccessBattlers) from Steins;Gate. (Check it out if you haven't, it's amazing.) I used [this fangame](https://www.rainetdigital.com) for research.

## The tools

I'm pretty comfortable using [TIC-80](https://tic80.com), and since it has [Fennel](https://fennel-lang.org) support, it's perfect for a Lisp game jam.

I'm going to write the code in [Helix](https://helix-editor.com), currently my go-to editor.

For my VCS, I'll use good ol' Git.

## REUSE

Most of my new projects adhere to the REUSE specification. Check out https://reuse.software for more info.

## ECS

I started prototyping a simple ECS setup, and this is what I came up with:

```fennel
(local systems [])
(var entities [])

(fn _G.TIC []
  (cls 14)
  (each [_ system (ipairs systems)]
    (set entities (or (system entities) entities))))
```

Entities are just tables, where keys are the "components".

Systems take the world, iterate over entities and optionally return a new world.

Example system and entity:

```fennel
(fn text [entities]
  (each [_ entity (ipairs entities)]
    (case entity
      {: text : x : y}
      (print text x y))))

(local systems [text])
(var entities [{:text "HELLO WORLD!" :x 84 :y 84}])
```

## Wrapping Up

That's it for the preparations. Hopefully I can finish something playable in time!

El. Psy. Kongroo.