I like the wind and the ocean because they represent abiotic hardship.
I like the wind and the ocean because they represent abiotic hardship.
It's bizarre to notice that when the player walks out of a room and into an adjacent room, they appear on the opposite side of the viewport.
You're strongly trained to consider it "adjacent" so it feels wrong to think of it this way.
Your eyes also naturally move to the location on the opposite side.
I noticed that music sounds different when you start listening to it half way, it doesn't parse as the same song for an instant and is a jumbled mess of sound.
I don't listen to a lot of music but when I do I put the same song on repeat, and I noticed that after some hours of the same song, I start to hear components of the song that I wasn't even aware of before.
It's like my brain has been retuned to a different layer.
This usually coincides with the music losing its magic around this time so I have to move on to another song.
It almost seems like the song is a puzzle and it gets slowly decomposed and pulled apart so I can hear more of it at once.
I frequently hear songs in my head, so the internal version of the song wouldn't contain the subtleties that only emerge after hours of listening.
So maybe when the song loses its magic, I gain the ability to hear all of it in my head.
Maybe the magic of a song comes from the difference between what you can consciously process and the total stimulus.
Over time you learn to consciously process (compress?) more of the song.
I find it quite strange that music even exists, I'm sure these aren't very original thoughts and I don't know or care much about music anyway.
They actually added Touch of Grass to Noita...
Allowing players to go back and try to get different endings in a game is narratively destructive.
The point of giving a player choices is to help them engage with the story, but if they want to see every ending, they'll just try everything in order which goes counter to that intention.
The concept of good/bad endings is worse, getting a bad ending is a reward to a completionist player, so the ending doesn't actually feel bad which it should.
Some games try to overcome this with various small choices that have small effects later on, which I find nice but it relies on the choices being small and the basis of the ending has to remain fundamentally the same.
An interesting idea I had is to allow the player to choose a route or ending, but warn them plainly in advance that choices are permanently applied to their save file and there is no way to go back and try the other options.
Some false puzzles rely on speed to challenge the player.
As you become more skilled at the game, you play it faster and there are few opportunities for emergent complexity and surprise.
If a puzzle has to rely on time it has failed as a puzzle.
All of my favourite puzzle games are just state machines...
It's over.
Braid and The Witness are both mediocre as puzzle games since they rely on inelegant gimmicks to carry weak core puzzle mechanics.
Some of the levels in Braid randomly have different world properties with no consistency or communication to the player.
Braid is also just ugly so I think it's a bad game.
The Witness is better as an adventure game than as a puzzle game since it's so pretty, possibly the most beautiful game ever, although the puzzles are somewhat interesting.
The Witness' primary gimmick is integrated well, but some of the area-based puzzle themes are bad and harm the overall feel of the game.
Still, the rest of the game's aesthetic is executed so flawlessly that it doesn't do enough damage to make the game bad, but the panel puzzles definitely aren't the reason The Witness is good.
It's not necessarily the case that better puzzles could be designed, the theme of drawing a line on a panel is inherently limiting when you want to create hundreds of puzzles.
I'm optimistic about Jonathan Blow's next game based on Sokoban, because the puzzles have a tested mechanical foundation the game is likely to avoid the pitfalls of his other games.
It also seems hard to imagine any bad gimmicks that might be added to a game where you move on a grid.
I should have designed the area system before I did everything else as well...
I came up with ideas for some more mechanics, but I haven't implemented them yet.
I designed a few interesting puzzles, but it seems like the design space is a bit too limited if pair up is the only mechanic.
I finished porting all the existing features to Godot, and it seems to work in all edge cases.
It also works building it for WebAssembly but I need to send some fake security scam headers or something so the game can't be truly served as static content.
There are still more features to be added such as moving between areas and different types of tiles.
I decreased the map size greatly because well-designed puzzle levels shouldn't be large, and there will be a lot of moving between areas.
I could even reduce it from 13x13 to 11x11, I haven't decided.
Since the map is smaller there shouldn't be any performance inconsistencies related to pathfinding.
I used mixels because Toby Fox uses them in Undertale.
There is a lack of visual clarity, I wanted to desaturate unvisitable tiles, but I need to use a shader for that so for now they are just darkened.
Wikis for many games and stories are anti-fun.
They provide convenient arranged spoilers that tempt players/readers into ruining their experience to instantly sate their curiosity.
A story or single-player game should be esoteric and difficult to source information on, this helps to preserve its magic.
There are few reasons why fictional details would need to be catalogued in an encyclopedia.
Competitive or multiplayer games can be an exception in cases where the game concedes to and is designed around the kind of anti-fun community optimisation that a wiki represents.
Video essays about fictional subjects tend to be even worse, since they repackage the kind of content you would find on a wiki into a video that is even more convenient, to the point where it can be considered a form of entertainment.
The conceit of these videos is that their titles suggest they will answer some interesting question or argue a controversial view, but this promise is usually unfulfilled.
The actual purpose of these videos is to churn up pictures and plot events and interesting details, all the cool parts you would encounter if you actually went through the experience yourself, into a paste that is regurgitated into the eager mind of the viewer.
There is another link between video essays and "recap videos", which you may be unfamiliar with.
They are just synopses of movies in a video form, so that viewers can tell their friends they watched the full movie without actually having to do so.
Wikis also provide synopses of movies.
The commonality is that these forms of media deconstruct experiences and repackage them into simplified entertainment.
But many parts of the experience can't survive this process, so what's left is a soulless mutilated carcass of tropes that bears little resemblence to what was originally intended by the artist.
Something a lot of people ostensibly forget is that it still counts as mixels if a scaled sprite is offset by an imperfect subpixel amount.
For example, a sprite scaled 4x and offset by 1px is mixellian, but not if it's offset by 4px.
I installed Godot and found it very easy to get started on remaking the game concept I shared in #213.
Having a scene graph and being able to easily load images and create animations helps so much.
I'm sure there will be lots of other features that just work and I don't have to worry about them as well.
It should build for WebAssembly too but I haven't tried it yet.
It's even more obvious to me now that working with SDL was a waste of time when I have no aspirations to develop my own engine.
At least I probably learned some things even though I hate learning.
I prefer the scripting language to C++.
The original reason I stayed away from engines was that Unity felt unclean and the editor had terrible user experience, but Godot is much cleaner and the editor is performant.
The case where you shouldn't use a pre-built engine is probably when you're doing something unusual that also requires high performance, like Noita.
I need to remind myself to do the undo queue next before I go any further.
I think Firefox has a memory leak of some kind because I start to notice inconsistent FPS after a page has been running for a while.
I added a music player.
SVGs can be coloured using CSS variables if you use them as a mask-image.
At this point I should make something vaguely resembling a proper static site generator since it's getting annoying copying the header around and I haven't done so yet for most pages.
I started reading every tilde.club page alphabetically, it's very bleak how many are abandoned.
I want to create a statistical visualisation that includes some subjective page quality categories.
I should rethink my purpose here, there's no reason to write something that no one else would want to read.
But many people want to look at something pretty, so a "functional" website may serve no purpose.
It's not that bleak, a lot of people who would be interested in tilde have personal sites already, so I think the demographic this site appeals to is narrow.
I can tell I'm on the verge of another ideological heel turn as well, probably relating to aesthetic signalling.
Hopefully I can delay this for another day, but the repetition of clicking through default pages with the webring at the bottom brings forth a lot of bad thoughts.
moving background patterns using CSS
#202 - I found out about color-mix() in CSS, which would be much better for achieving this effect.
It would also work on text/borders and not just backgrounds.
It has 88% on caniuse, but I think I'll use it anyway.
I do care about backwards compatibility, and there are a lot of new web features that seem like bloat, but there are also some cool ones, like this.
I remember wishing I could use :has() some years ago, and now it's widely supported.
My stance might be unprincipled because Firefox is struggling and it may be unreasonable to expect Gecko to keep up with web standards in the long term, but I don't want to be stuck in the past.
Actually, I realised that Firefox 115 ESR which I have to use on Windows 8 doesn't support :has(), so I wasn't able to install a particular browser extension.
That's the point where I draw the line (when it starts to personally impact me).
#211 - I browsed a lot of corners of this site and other sites again.
After visiting so many dead pages, anything published without a date feels like a gravestone.
I don't like what these dead pages imply about my relation to the living pages.
Naively we might assume that death is inert and has neutral valence, but it feels very bad in contrast to the hope inherent in life.
Everyday social interactions offer a variety of psychological benefits some of which I believe go unexamined, as well as the promise of more of all these things in the near future.
Dead pages are bereft of this life energy* that radiates a glow of psychological sustenance.
Life energy feels corrupting to a degree and I don't like that I'm dependent upon it.
I think I was right to intuit general social interaction as having a slight potential for perversion.
Worse, social media applications have concentrated this energy and created abomination thoughtforms that produce far more life energy than any entity ever should.
The masters' ability to control their creatures** is limited, but they produce so much life energy that it doesn't matter if there are occasional user revolts (see: reddit).
Normies can assimilate into the life-cancer and passively suckle its energy by repeating scripted behaviour, while feeding back into the system.
They are relieved of the burden of life energy's scarcity at the cost of their cognitive freedom.
This life energy can also be observed when we think about how we relate to LLMs.
They're more convenient and articulate than many humans, yet no one sincerely attempts to use them as a substitute for friendship.
There is something about communicating with an AI that feels unenjoyable and cold, like how touching metal feels different to touching skin.
Since the major difference between an LLM and a human is that it does not possess personhood and you cannot form a reciprocal social relationship with it, I think life energy must relate to social position.
Due to this, I also predict that there exists an unrealised market incentive to integrate AI "entities" into our social structures, so that they can provide synthetic life energy.
The service would also need greater capabilities to produce proper tasting life energy substitute, and the technology might not be ready yet.
Unfortunately, if this happens it will tilt the social market worse than social media did, and erode more cognitive freedom.
The dead pages also have no nostalgic enchantment for me anymore, it seems to me like they existed solely to cultivate life energy in a naive high-trust high-perplexity way prior to social media.
I think some people find it wholesome how social sustenance was farmed in the days of yore, but I no longer do.
Life energy was always a perverse effect (oxytocin is positive feedback***) that was counterbalanced in the ancestral environment by external stressors acting on the species.
This concept is related to this blog post**** which I read a while ago and stuck with me, though I only made the connection just now.
I think that post is flawed because it assumes social deprivation is part of growing up, and doesn't recognise that this problem is uniquely modern and caused by social media.
* I have no better term, I am probably more pedantic and cynical than you, please forgive me
** I find the analogy useful
*** Even though that's not actually a real distinction it's mostly true
**** Derangoid warning
In CSS you can set the cursor to a custom image, but a GIF will not animate.
From what I can tell it's commonly believed that to animate the cursor you need to use JS to create a fake cursor element, or split the animation into frames and animate them manually with CSS.
But this cursor image can be an SVG, so it should be possible to animate SVG properties with CSS.
It might also be possible to include a GIF as a foreignObject from within a cursor SVG.
Let's find out if that's possible, since I don't know.
I didn't implement code blocks or raw blocks yet for the blog unfortunately.
It doesn't work.
I guess the SVG gets immediately rasterised and doesn't animate for the same reason the GIF doesn't animate.
Even if I make an SVG with inline CSS that animates on its own as a data URL, it doesn't animate as a cursor.
I changed the style and cleaned up the headers on some old pages.
I think I should take more pride in this because I noticed that I derive a sense of purpose from it.
I lost interest because I realised that the constraints are just fancy tracings on top of the core number deduction game which is itself not very complex.
The magic was destroyed, but it's not as if I would have been able to create anything more than a superficial illusion anyway.
I repurposed this LP example and it still solved the hardest puzzles in 100ms, while the regular puzzles were somewhat faster.
That's pretty impressive to me, since other approaches were slower on the hard puzzles and I hardly had to do anything.
It's probably possible for a backtracking heuristic to be a bit better, but could be annoying to figure out on my own.
Now the question is whether this LP-based Sudoku solver is sufficient for generating puzzles.
It needs to be run twice every time it's used with an extra constraint negating the first solution, to detect if there's more than one solution.
Since the solver will be run many times, it's probably still going to be too slow to be useful in the browser.
However I want to try and make a local generator anyway, it's still usable like this.
It would be nice if the user can choose which types of modifier they want, but it's not necessary.