Seven day Roguelike 2022 Days 3-5: Metamagic, vectors, burning down the world

2022-03-06


They look something like this
They look something like this
See how the stone wall crossing the field acts as a somewhat-effective barrier to the spread of heat

I’ve not been as conscientious about writing updates on the game as I could have been, but at least I’ve made some progress!
There’s a lot to talk about. Here’s a changelog:

Your quest begins!
Signs!

—The world—

—Magic—

—Game/Misc—
- Added a basic goal- reach the centre of the island and light a tree on fire to become immortal
- Added signs/inscriptions that the player can read (e.g. tutorial)
- Added a mostly-hardcoded map (randomized tree/shrub placement with hardcoded buildings/walls)

Some words on magic

They look something like this
Casting some spells

I should probably explains the magic some more- so (SPOILERS):
(a a X) means ‘add heat to X’, where X could resolve to be a tile, a garment, an enemy. Right now the only valid value for X is a tile- the rest aren’t implemented.
As an example of how I want things to fit together, the symbol for ‘light’ (e.g. ‘i’) will be useful both for conjuring light with
(a i X) , “add light to X”. As light is linked to divination, in the same way that ‘a’ means ‘add/augment’ as a verb and ‘heat’ as a noun, ‘i’ will be ‘divine’ as a verb and ‘light’ as a noun.
So (i …..) will be the general form for divination spells. These should be useful in their own right- for example, (i @) might return a list of all humanoids in an area, which could be passed to a different spell to target it:
(a a (i @))
That spell could be augmented:
(a ‘(a a (car (i @))) 5)
The outer spell augments the strength of the inner ’add heat to the first humanoid returned by (i @)’, turning ‘add heat’ into ‘add an excessive amount of heat’.

the symbols 1 to 8 represent cardinal directions, starting with 1 pointing east, 3 pointing north, and so on. 0 means no displacement. So (a a 125) adds heat to a tile (1,1) from yourself.
Currently ingame, the following spell works:
(a ‘(a a 554) 4)
Which strongly heats up the tile three paces west and one pace north of you. Actually, even the following works:
((lambda (val) (a’(a a val) 4)) 111)
My lisp machine is strongly inspired by sectorlisp, and it’s really cool to see lambdas and so on work right! Now I just have to add in ‘define’ so you don’t have to type out spells all the time!

Big
Cranking up the heat

Magical philosophy

I want this magic system to interact directly with the underlying rules of its simulated world. In a game like Final Fantasy, you might choose ‘cast firebolt’ from a list, and see a ‘bolt of fire’ being spawned, hitting an enemy, and doing some damage. This has always seemed disappointingly shallow to me. “I can see the strings! The fire isn’t real- the ice bolt is just a reskin with a different damage type!”
I would like to avoid invoking this feeling in players. The ‘elements’, for lack of a better term, should be defined by what makes them fundamentally different.
Think about how heat really works: it disperses; hot materials in oxygen burn; burning releases heat, potentially causing a runaway feedback loop. Cold, being nothing but the relative lack of heat, behaves differently.

A wizard in this sort of physical world would need to understand heat-and-fluid dynamics to be maximally effective. This is the kind of experience I’d like to give the player: of being that ignorant human who’s stumbled across God’s swiss army knife, and who in struggling to understand how to use it must understand the world.
(If you knew the world well enough, you wouldn’t need magic. It’s a crutch.)

The future of magic

If I make this into a full game, it’ll have 13 elements (heat, light, life, entropy, and so on) and 26 symbols, where half of them are opposites to the other- ‘e’ would be the opposite of a, so that (e a 0) would absorb some heat from the environment.
‘e’ represents heat as a noun just as much as ‘a’, so (a e 0) and (a a 0) do the same thing.
26 symbols, each of which can act on all the others, would be a great undertaking… but luckily, I don’t have to add 25 different interactions for each symbol; ‘a’ boosts the power of a spells and adds the noun-values of symbols to places or things; that’s general across all spells. If I end up adding a spell for which increasing its power doesn’t make much sense, then that’s an interesting quirk of magic, I suppose!

I want to add the sorts of unbalanced cost curves as I mentioned above to incentivise clever spellcrafting.
Heating a tile right next to you by 100 degrees costs 10 mana; heating a tile 4 tiles away by 100 degrees costs 160 mana, which is much less efficient. When I add the ‘f’ glyph, representing force, into the game, you’ll be able to use it to e.g. throw monsters, accelerate rocks to hit things, or ‘fan’ the air.
If you want to burn something 4 tiles away, it might be more efficient to heat the tile next to you and blow the hot air that way.

7DRL has been hard, but interesting and fun so far- hoping to get something playable by saturday!
(Though I’ve no idea how I’ll port the game to windows in that time…)


Tags: 7drl lettersong

Add a comment

Name (optional):

Comment:


My Captcha: What's e raised to i times pi?