kota's memex

magic

The thing that really makes minecraft standout in my opinion is its redstone and related technical mechanics. Games like minetest and the dozens of other clones forgo these features for simplicity and to avoid "advanced features". Accordingly these games feel like parrots imitating words they do not understand.

APL idea

One idea I've had is a magic system which is based upon apl programming languages. The APL lineage follows a different set of standards and design philosophies than other programming languages. Most languages treat single numbers (scalars) as primitives and arrays as collections of primitives. APLs are different, instead of having arrays as “collections of scalars”, the array is the primitive. If I write 1 I get an array with one element. If I write 1 3 5 I get an array with three. All operations are designed with arrays in mind. Here’s how I double every element in an array:

   2 * 4 5 6
8 10 12

A magic system based on apl programming seems like a great fit for a 3D block grid game. Each language feature and built-in would be a resource the player must find and aquire (similar to redstone, but hopefully more diverse and interesting). The programs would be carried out by small Zelda like fairies which read the runes of your script. Programs could be built for the joy of it and perhaps to collect the resources to make larger more ambitious projects.

Component ideas

I really like the idea of players being able to literally write out their spells in books and using ocr to match their writing with various keywords in the game. However, I think the spells should somehow require not only the book, but also components to cast it. Some components are re-usable whereas others are used up during the casting.

Spell Books

I've been feeling very inspired looking at old alchemy drawings from the 15th century. Specifically the drawing of little pictures in the margins and red ink to highlight important words. Maybe when a player draws a symbol it should show as red? I also would like to encourage the player to use their spellbooks to simply take notes about the world, where they found things, how a spell works, what sorts of components are needed, etc. One quality of life feature I could add to facilitate this is a concept of "links" in the spellbook. You can underline some text and it becomes a link which takes you to a new page or if that page exists takes you to an existing page. I think each page should be able to be scrolled down basically infinitely. It's a game about magic afterall!

Components

Components which have powerful permanent effects should be single use. For example we can imagine a very simple spell which "imbues" a "broom" with a rare flower from a mystical sky dimension. Forcing the player to travel to that dimension and collect these flowers in order to imbue various things with levetate. The flower can be very difficult to obtain at first, but can be farmed under certain specific conditions.

On the other hand we can have a rare fire dragon scale component obtained deep in the underworld which can be re-used to heat up various things or set stuff on fire.

Most components should be placed onto the ground and their location referenced in the spell. Many components could be large and unwieldly and many spells are situation or need modified somewhat based on the specific location and available resources. However, for small simple spells such as the levitate example above perhaps a "components pouch" could exist that can hold a limited amount of small items.

Spell casting

In this component + book system a player should be able to somehow "cast" a specific spell. I imagine a magical energy will flutter around attempting to follow the spells instructions. If it has an error, such as a component not being where it should the spell will fizzle out.

Inventory and storage

This area of the game still requires a great deal of thought and planning, but in general I would like the player to only be able to hold a small human sized amount of things and to use magic and spells to transport and manipulate large and heavy objects around.

development

I think I'd write this in hare, for a long time I wasn't sure what language would make sense. It needed to be fast (so manual memory management), but I also wanted nice safety and other modern language affordances that made c seem rather unappealing for the project. I ruled out complex inelegant languages like c++ or its new rival rust. I tried languages like zig which undoubtedly have good ideas, but still had a few particular aspects that were off-putting to me.

For the graphics, which is more important than the language arguably, I'll be using raylib. I've known from the start that I'll need to use something pretty plain for the ideas I have, but still powerful enough to be achievable by a single person.