But thus do I counsel you, my friends: distrust all in whom the impulse to punish is powerful!
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:
—The world—
- Added a simple heat simulation
- Walls slow heat spread
- Different materials ignite at different temperatures, and objects heat up the air around them as they burn
- Only you can cause forest fires!
—Magic—
- Cast spells with lisp-like syntax (the spells are executed by a full lisp VM!)
- Each glyph does different things depending on the context
- Glyph added: ‘a’
- a represents ‘adding’, ‘augmenting’, and ‘heat’.
- Implemented relative tile targeting
- Implemented augmentation metamagic
- Implemented spell input history (up/down arrowkeys)
- The player has mana that regenerates over time; more powerful spells use more of it. If you don’t have enough, then the resulting spell is just weakened right now.
- If you want to heat a tile, the cost increases linearly with how much you want to heat it by and quadratically with the distance of the tile you want to heat up.
—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)
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!
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.)
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…)