after I have (print) and (input) I think I want to do some simple DailyProgrammer problems in kaslisp, and then after that I’ll start writing a kaslisp interpreter in kaslisp
kaslisp now has:
`(symbol symbol ,(evaluate this please) (symbol symbol))
(eval) function(let) and (set) (I can’t remember if I’ve already posted about these but I’m so happy to have them working)I feel like it’s almost ready for me to start writing some proper code in it? I just want to add (print) and (input) (and in order to have either of these I’ll need to introduce a string datatype and I’m not sure how hard that will be for my parser to understand lol but we’ll see!)
a point-and-click scifi horror adventure game called Stasis is free on GOG today!
https://www.gog.com/en/#giveaway
CWs: gore, violence, cruelty, and other things that you would expect from a scifi horror game. I don’t know all of the details because I haven’t played it
@liese so I haven’t played too many VNs at all but I’ve played a decent bit of Vampire Therapist! often their history features tend to confuse lol and if I miss something what I end up doing is reloading a save so that I can read it again. they definitely seem to have history features though but I just don’t know how to use them, and I’m glad that they have them!
I also played a VN that was set on a Discord server, so you could scroll up to read the conversations just like you could on Discord and that was really really nice IMO. and I think that has a lot of overlap with how Disco Elysium does it as well
genuinely I think that if a game has a lot of talking it either needs to use the Disco Elysium conversation UI or it needs to rethink how much talking it has
Dialog Boxes™ are nice for Zelda-like games where characters will generally say like 1-2 short things and those things are simple hints or little bits of flavor. but as soon as a character starts monologing they are a terrible UI choice (IMO) because:
but Disco Elysium:
it’s amazing. it solves every complaint that I have about dialog boxes, while still providing a format for characters to communicate with text on the screen
huge shoutout to Vampire Therapist for being the only Scrolling Dialog Boxes game that I’ve enjoyed because of the text in the scrolling dialog boxes. that was a hell of an experience for me
also, of all the art that I love, I don’t think a single bit of it has the property {I felt bored engaging with it at first and I had to tough it out before I enjoyed it}. they all hooked me right away. that might be sampling bias but it’s also reassuring
I get bored with art really really quickly. I basically have no patience for it at all - it has to capture my interest within the first few minutes or I just move on to something else
for example when I’m reading some fiction I often quickly skim through it at first to see if my eyes catch something interesting, and if I’m playing a game with scrolling dialog boxes I’ll often just stop playing if there are too many dialog boxes in a row lol
and often if a game expects a lot of up-front effort from me (for example, a big AAA game with lots of cutscenes and tutorials at the start) I’ll put off playing it pretty much indefinitely
and I used to think that this was a problem, like my attention span was being shortened by spending my entire life on the computer (which is kinda accurate, lol. though of course it’s more nuanced than that). like maybe I need to stop and appreciate things more or learn to have more patience. or I would have FOMO about “what if it gets really good just after I stopped?”
but thinking about it now, I think it’s just that there are so few types of art that I end up enjoying, so the expected utility of me putting effort into something that I don’t immediately enjoy is very low. in fact the statistical distribution of my enjoyment of art, given that I’m not immediately hooked by it, probably looks like a long-tailed bell curve with the center firmly on the negative side of the X axis - so the mean of that bell curve is definitely negative lol
so yeah I’ve decided that there’s nothing wrong with me playing a game, seeing that it has a lot of scrolling dialog boxes, and immediately uninstalling it lol. or me saying “I’ve been meaning to play this demanding AAA game for like 2 months. that’s never going to happen so I’m just uninstalling it” or even just, skimming a piece of fiction for 3 seconds and deciding not to read it
@drawnto ohh, huh! kaslisp does essentially do this (whenever a new namespace is created, it becomes the child of the previous namespace. then that child namespace gets garbage collected after the scope ends. so it all happens at runtime using a stack-like structure)
but I looked up the behavior of dynamic scopes on StackOverflow and it looks like they work like this:
local x = 0 -- we'll call this x0
function setX(value)
x = value
end
function setLocalX(value)
local x = value -- and this is x1
end
print(x) -- prints x0, which is 0
setX(1) -- x0 is now 1
print(x) -- prints x0, which is 0
setLocalX(2) -- x1 is now 2
print(x) -- prints x1, which is 2
and kaslisp doesn’t work that way. instead when setLocalX returns, kaslisp would clean up the namespace containing x1 and revert to x0 instead
so based on that I think that what I’m doing counts as lexical scoping instead of dynamic scoping
@drawnto woah… I just read about dynamic scopes and they are so strange and counterintuitive to me! they seem like a very bad idea to me to be honest, although maybe there are use cases for them. kaslisp uses lexical scopes (which, I didn’t know what that meant either until just now! so I’m glad you mentioned this distinction - thank you) and I actually have some unit-tests to make sure that variable scopes are working correctly (for example, that local variables shadow non-local variables and when you change them the non-local variables are left unchanged)
just implemented (let)! and I actually understand namespaces so well now omg. like I was always kinda fuzzy on what exactly a namespace is in a programming language and exactly how it works, but now having made my own namespace system and thought through all the edge cases, I think I have a really good grasp of them
or at least, I have a really good grasp of how I want them to work lol. who knows if other languages do them differently
(lambda) is confirmed working in kaslisp! I decided that I wanted most of my unit-testing code for (lambda) to be written in kaslisp itself, so I ended up also adding (not), (or), (and), (is?), and (set) which were all surprisingly easy to make!
I also decided that I’m no longer going to represent the boolean values true and false as 'true and 'false. instead they’re represented by the Python versions of True and False which simplifies my Python code a fair bit in several places
btw conventional games marketing wisdom says block game will never get a lick of press because i'm developing it out in the open and anything that's already public knowledge is not news so that means for it to go anywhere it has to have strong word of mouth
so uh, tell your friends? https://enikofox.com/blockgame
On Monday November 3 16:30 UTC, the #StopKillingGames UK petition will be debated in Parliament:
https://commonslibrary.parliament.uk/research-briefings/cdp-2025-0195/
It will be streamed live on the UK Parliament's YouTube channel: https://www.youtube.com/@ukparliament/streams
If you haven't already, inform your MPs and encourage them to attend!: https://www.parliament.uk/get-involved/contact-an-mp-or-lord/contact-your-mp/
@ifixcoinops hm I see! that definitely makes sense. and thank you!
it’s so hard to sell someone on the concept of “what you’re doing is unnecessarily hard, but if you put in a lot of effort to wrap your head around this counterintuitive thing, then you can do it way more easily instead”
I’m specifically thinking about stuff like ECS, Vim/Emacs/Neovim, containerization, immutability in general, and functional programming
because like, the argument format that I usually see is:
because first of all, if you say “the way that you normally do XYZ is hard” the first thing someone is going to think is “… I guess? but it’s just an inherently tricky problem. I could definitely solve it though, and I already have a high-level idea of how I would do that”. to them the problem is inherently tricky because - in their mental framework for solving this category of problems - it is
and when you follow up with “but actually you could do this much simpler thing instead” their response is going to be “that sounds sideways and backwards, almost to the point of being academic. if it’s so hard for me to even understand what your solution is then why would it be simpler?”
and like, how do you even bridge that gap without coming off like “trust me bro. my way is better. put in a bunch of work without understanding why and you’ll eventually agree with me”?
and also, if you’re in the position of the person being convinced, how do you distinguish between a genuinely useful problem-solving technique and a tech fad? like, is NixOS actually a useful operating system or is it an excuse to tinker with a cool functional language? is Vim actually a superior way to edit text or is it a mind-bending exercise in memorizing arcane keybinds and configuring plugins for no tangible benefit?
you can’t just try every counterintuitive new thing in the hope that it turns out to be a good idea, but you also can’t stagnate and refuse to learn new things because they all seem counterintuitive to you
@ifixcoinops has been doing a thing where he adds 468x60 ads to his website for free and I’ve been thinking about making one for #HideousDestructor ( #HDest ) to hopefully get more people interested in this very niche ZDoom mod
here’s what I have so far - what do y’all think?
this might not be the kind of thing that Dan had in mind though, since it’s not for a hobby website exactly. I would probably link it to some kind of “getting started” guide for the mod
in any case idk I’m proud of how good this looks so far and I’m just happy to have made it. graphic design is extremely not my thing but I think this is Not Terrible and maybe enticing to click
Like I know I don't have to tell y'all, here on the algorithmless fedi, that you-might-like-this algorithms will not tell you things about yourself that you didn't know, will not help you grow as a person, will in fact stunt you and restrict your ability to change, because they're designed to show you things that they think you already like, not things that nobody, even yourself, could predict you'd be interested in. An algorithm can't stumble by chance and serendipity across your next passionate obsession, only a firehose of utterly random bollocks can do that