Making games under the name Frozen Fractal. Currently working on Around The World (working title), a roguelite game about navigation, exploration and discovery in the Age of Sail. The header picture shows a preview. 100% GenAI and LLM free. Making games + not a dick = insta-follow. I almost exclusively toot in English but may reply in Dutch and broken German as well.
Public Key
npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 Profile Code
nprofile1qqs9lyatw9zuyzcgv8m7622hun0mf4ezpv2lz4phtgpy88u6lt8gpmqpz4mhxue69uhhyetvv9ujuerfw36x7tnsw43qcv84jx
Show more details
Published at
2026-10-19T11:31:33Z Event JSON
{
"id": "d0bb2568665652994bdfebc0958550fef2d2ef11b845065f87971f33421ff1ba" ,
"pubkey": "5f93ab7145c20b0861f7ed2957e4dfb4d7220b15f154375a02439f9aface80ec" ,
"created_at": 1792409493 ,
"kind": 0 ,
"tags": [
[
"proxy",
"https://mastodon.gamedev.place/users/thomastc",
"activitypub"
],
[
"client",
"Mostr",
"31990:6be38f8c63df7dbf84db7ec4a6e6fbbd8d19dca3b980efad18585c46f04b26f9:mostr",
"wss://relay.ditto.pub"
]
],
"content": "{\"name\":\"thomastc | frozenfractal\",\"about\":\"Making games under the name Frozen Fractal.\\n\\nCurrently working on Around The World (working title), a roguelite game about navigation, exploration and discovery in the Age of Sail. The header picture shows a preview.\\n\\n100% GenAI and LLM free.\\n\\nMaking games + not a dick = insta-follow.\\n\\nI almost exclusively toot in English but may reply in Dutch and broken German as well.\",\"picture\":\"https://cdn.masto.host/mastodongamedevplace/accounts/avatars/109/744/359/319/814/392/original/78faeb087571d81d.png\",\"banner\":\"https://cdn.masto.host/mastodongamedevplace/accounts/headers/109/744/359/319/814/392/original/ea2a30212f135ced.png\",\"nip05\":\"[email protected] \",\"fields\":[[\"Website\",\"https://frozenfractal.com\"],[\"Portfolio\",\"https://frozenfractal.com/games\"],[\"Devblog\",\"https://frozenfractal.com/blog\"],[\"Pronouns\",\"he/him, they/them\"]]}" ,
"sig": "a9308915359cae810320c71ac6b9de85bfed1fa54a9711f4466ccdbd7865e62afadaa519e6f447677adddaa5f2e93ad0fa486379e23204d99d79a1b5f8f0dfab"
}
Last Notes npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…nuu0 Yeah, switch needs to be physically well designed and software should indicate its state clearly. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…nuu0 I would give good money to have some (good) physical switches on my Android though. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…4e67 @nprofile…3q9y Makes sense: blueish inscattering along the view ray is the same in both cases, but on the lit side, it's dominated by the added bright white light reflected by (read: scattered out of) the cloud. Not sure @nprofile…3q9y is shooting for that much realism though 🙃 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…3q9y Oooh that's very cool, sounds great! How does it work? Does it actually use a horn sample or is it filtering the noise from the mic in clever ways to sound like a horn? npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…d0yj It's called "z fighting" and is not specific to Godot. Altering draw order will not help, unless you also disable depth testing on one or more instances, but then it will overwrite everything else too. One obvious solution is not to have coplanar geometry like this in the first place. Another would be to give each object a small but distinct bias when writing to the depth buffer. I don't think StandardMaterial3D supports this, but it's easily added if you convert it to a shader. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…5y0h Look up the Area3D node in the docs... npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…5y0h Okay, depending on your character and camera controller, you may need additional code to orient them correctly since +y is no longer up. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…5y0h Area3D lets you set the gravity that applies inside of it. Zero code needed! npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…valu Yes, that's plenty fast. It's the compute_threshold(x) after that which is slow. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal A question for #graphics programmers! I have a water surface with a pixelated look. Foam is added using a threshold into a noise texture. The threshold varies across the surface. The texture uses NN sampling, but the threshold (when passed in a varying from VS to FS) is interpolated linearly, causing pixels to be partially covered with foam. Not the look I want. To fix this, I recompute the threshold in the FS based on a rounded position. It works, but it's too slow. Any alternative ideas? npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…zxj6 Fwiw, Jupyter while written in Python is more or less language-agnostic. There are different "kernels" (execution engineers) to support various languages. Sage seems to be a Python-based DSL though, so there is no escaping the snake. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal How many people would be interested in a free, #OpenSource #audio editor like #Audacity, but fast and user friendly and with support for nondestructive effects and changing effect parameters while the audio is playing? I don't see a technical reason why this doesn't exist, just that nobody has made it yet. #OSS #FOSS npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…3q9y Yeah, the five-page article I saw the other day about "How to scroll to the end in `less`" lacked such an image to warn me. I had to rely on the heading "Why scroll to the end in `less`" to warn me. (Context: the End key used to do this, and it was changed briefly, and I thought I was going mad. The change has been reverted.) npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal Getting somewhere with my waves rendering. It's fully driven by wind speed based on actual physical models, and runs mostly in the vertex shader so it's speedy too. #GodotEngine #Godot #GameDev #IndieDev #IndieGame #ProceduralGeneration https://cdn.masto.host/mastodongamedevplace/media_attachments/files/116/024/535/323/400/576/original/e33d6006b6d183a0.mp4 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…2uyx Hmm, looks like they have changed a few things in Inkscape since I last looked at it. You _can_ now at least add classes and edit them manually in the Selectors and CSS panel. It's a bit clunky and changes outside this panel are still going straight into the `style` attribute, but it might save you some hacking in an external editor. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…2uyx I've also solved it once by just tweaking the XML manually afterwards. Only works if the graphics are simple and won't need to be modified again. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…2uyx If quick and dirty is okay: maybe some judicious use of `!important` in your CSS? npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…d0yj https://caniplaythat.com/ may be useful. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…9vka That was nothing compared to the introduction of 2D. Before that, we had to play on a line! npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…f4xf It's even more evil than it looks, because it redefines `std` if I'm not mistaken 🫠 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…eay2 Awesome, very timely for my project! npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…00ws @nprofile…k5zk Only if the walking back out and in takes zero time... npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…4m8e Was it easy after that, at least? My recent experience installing a Brother printer in Linux has been super smooth, and that was even on "RTFM & DIY" Arch Linux. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal Shout-out to the awesome @nprofile…ucex maintainers, in particular @nprofile…jzdg and AThousandShips. I sent a pull request to fix a minor two-year-old issue, and less than an hour later it's already labelled and scheduled for inclusion in the next release. 👏 👏 👏 #GodotEngine #Godot npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…yk2u I don't see why not, since it's based on local information only. The normals would be pointing into the void, but that's what you'd want, I suppose. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…yk2u Idk what your requirements are, but people seem to like Dual Contouring. It's simpler to implement than Marching Cubes. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…rtt8 You mistakenly wrote "old" in the alt text but the map is clearly labelled as "new", so why are you complaining about missing dates? 🤪 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…4m8e Nah, animations are a jerk. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…kalp Small nuance: sometimes automatic updates are necessary for security (e.g. in the case of browsers). Apart from that, I fully agree. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…e330 Large flat water bodies are kind of a best case scenario for it, too. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal Screen-space reflections are pretty neat! #GameDev #IndieDev #IndieGame #GodotEngine #Godot https://cdn.masto.host/mastodongamedevplace/media_attachments/files/115/486/328/028/383/109/original/3b546483ec37ec9b.png npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal I messed up my chunk coordinates and accidentally stacked all chunks together. Who wants a piece of world cake? #GameDev #IndieDev #IndieGame #GodotEngine #Godot #ProceduralGeneration #ProcGen https://cdn.masto.host/mastodongamedevplace/media_attachments/files/115/450/878/997/519/049/original/3a83b289f08ce0fe.png npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal I tried implementing fake planet curvature by translating and skewing chunks downwards so that their nearest 3 corners are on a sphere. (The 4th corner is omitted to avoid an overconstrained system.) It took me all afternoon to figure out the math, but the result is looking way better than it has any right to. Let's hope #Godot doesn't hate me too much for using slightly non-orthogonal transformations. #GameDev #IndieDev #IndieGame #GodotEngine #ProceduralGeneration #ProcGen https://cdn.masto.host/mastodongamedevplace/media_attachments/files/115/412/755/852/572/581/original/856ad99525d36e0d.mp4 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…fnpd @nprofile…7rg7 Indeed, still works fine for me with the latest of everything (because Arch). And do not believe the FUD about Wayland replacing Xorg. X still exists and works just as well as it used to: not perfectly, but at least as well as Wayland. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…sht7 Did you mean "ship it"? npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal Whelp, that looks uncomfortable. #GameDev #IndieGame #GodotEngine #Godot https://cdn.masto.host/mastodongamedevplace/media_attachments/files/115/333/427/890/630/755/original/1ee3a928c8509a0c.mp4 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…z4fl That thing about * and _ bugs me so much as well! npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…0kgd Oof. Take care. There's this thing called "outdoors" that I've heard good things about... not that I would know. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…0kgd Looks like Nakama can do that. I have never used it so this is not a recommendation or endorsement. https://github.com/heroiclabs/nakama npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal What do you think of my little low-poly arboretum? I've got two trees per "plant functional type" so far, which is up to 8 per biome, so this should hopefully give me enough diversity once I put them into the game. The hard part isn't even the modelling; it's figuring out which species occur where. #GameDev #IndieDev #IndieGame #Blender3D #Blender https://cdn.masto.host/mastodongamedevplace/media_attachments/files/115/300/561/639/594/467/original/161f2200d949f0a7.jpg npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal When your impostors get so good, you wonder why you'd want any actual geometry at all. https://hexaquo.at/pages/grass-rendering-series-part-4-level-of-detail-tricks-for-infinite-plains-of-grass-in-godot/ An excellent blog all around by the way. #GodotEngine #Godot #GameDev #GraphicsProgramming npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…k0gr By the way, ++variable is a no-op expression equivalent to +(+variable), i.e. unary + operator (which does nothing but can be nice to align values visually, e.g. for +x and -x axis). Would have been better if this footgun was not part of the language imo. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal Working on a custom sky shader again. This time I'm renouncing all physical principles, and just going with what looks good. The shader contains no branching, no loops. It's just a bunch of math based on fairly intuitive parameters. There is just one texture lookup for the overall brightness depending on sun azimuth, which could probably also be replaced by some maths. #GodotEngine #Godot #GameDev https://cdn.masto.host/mastodongamedevplace/media_attachments/files/114/987/372/195/879/194/original/716c3a7a8267a862.png npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…0kgd IANAP, but I always thought that the word "observer" was badly chosen. Really it's about interactions. I think of it as lazy evaluation: a particle (or system) does not "decide" its state until that state is needed to decide the result of some interaction with something outside the system. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…0kgd The particle gets to postpone its decision a while longer in that case. And so does the tape. Particles and tapes all over the world will thank you. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…0kgd AIUI, you cannot record it without interacting with it. You will at least need to register some photons that have bounced off it. That counts as "observing". (I think actually the entire particle + observation apparatus is then also in a superposition state until you watch the tape, at which point you become part of the system, etc. etc.. See also: Schrödinger's cat.) I am not a physicist and will probably learn something when one comes by and corrects me 😁 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal I used to implement linear interpolation lerp(a, b, f) as: (1 - f) * a + f * b Today I discovered that a better formulation is: a + f * (b - a) Mathematically they are equivalent. But if a == b, the latter always returns an exact result, whereas the former can have roundoff errors so the result is neither a nor b. The second one might also run faster because it does one fewer multiplication. #GameDev npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…7vxc Have you tried Bazel? I worked with its internal predecessor, Blaze, at Google, and it was quite elegant. This is not a recommendation because I have no idea whether the elegance survived contact with the outside world. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…0kgd Also clouds ain't what they used to be! npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…k0gr Ah, but soon they'll announce client side AI to add the detail back in again! npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…7vxc Depends on the usage pattern I guess... if the u128s are uniformly random, the identity function should work fine. But if there's a pattern like "the lower 16 bits are always zero" then it might not work so well. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…7vxc Useful! For those who can't or don't want to install a separate tool for this: after using the crate, you can also dig up its source from ~/.cargo/registry/src/index.crates.io-*. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…k0gr Re: > This is great, but also means some things might evolve quickly or get deprecated as the engine improves. The policy is not to remove stuff until the next major versions. So even if something is deprecated, it should continue to work with little to no changes on your part, until Godot 5 happens – for which there are no plans yet as far as I'm aware. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…slxn To be fair, a passport or other photo ID is not a proof of residence, only of citizenship. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…kksy @nprofile…8x0h 1. Do you need to? 2. If yes, you could keep these files outside of version control somehow. Git can't help you there. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…kksy @nprofile…8x0h LFS files are still versioned, so each version takes up space on the server. It's your local copy that should remain small by using LFS. Does that make sense? npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…slxn Thank you for the writeup! As a sole proprietor in the Netherlands, it makes me happy that my game is nowhere near releasing 😁🙂😐🙁😭 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…slxn @nprofile…xrgt Or they just scanned the binary for the string "patreon.com"... npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…uhu3 Ha, dat hoopte ik al 😁 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…uhu3 Welke ISP? Mijne wordt ook vrij duur inmiddels... npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…cfuw @nprofile…wxla Ohhh nice app, thanks for mentioning it! npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal When I started writing a tiling simplex noise function in #RustLang two weeks ago, it ran in about 100 milliseconds for a block of 2048×2048 pixels. Now it runs in 1.3 milliseconds. That's 13 GB/s throughput; maybe memory is even the bottleneck now. Lessons learned: - AVX2 is awesome - simdeez makes it relatively easy to use - simdnoise is damn clever - iterators are slow - collecting into a Vec first is faster - iterating over coordinates manually is the fastest - rayon is awesome npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal Hmm, generating good hashes for use in simplex noise is surprisingly expensive. Has anyone ever tried using the CRC32 instructions that come with SSE4.2 for this? They only take 1 clock cycle, much faster than anything I've come up with. #ProcGen #assembly npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal Who said simplex noise can't be made tiling? Align one axis of the simplex grid (just a triangle grid in 2D) with the x axis, stretch it slightly on the y axis (8 * ½ * sqrt(3) = 6.93, almost 7), and mod the grid indices appropriately so that corresponding points in different tiles end up with the same hash value. Another good size is 13x13, which needs only 0.1% stretch (15 * ½ * sqrt(3) = 12.99). But in practice, the stretch is almost unnoticeable anyway. #ProcGen #GameDev https://cdn.masto.host/mastodongamedevplace/media_attachments/files/114/179/387/333/477/188/original/92a34c7b275e8440.png npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…k0gr GDScript was inspired by Python, which does not really have access modifiers either, so I guess the conclusion was that they weren't needed. The Python convention is to prefix the name with one underscore for protected, two underscores for private. I'm following this for GDScript as well, and it works fine for me, but I can see how it would break down in bigger teams. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…slxn Thanks for the pointers, they were very helpful! It wasn't all that hard after knowing where to start: https://github.com/godotengine/godot/pull/102534 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…slxn Hey me too! Maybe I'll look into making a PR tomorrow, if time permits. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…z4fl In case you're looking for a self-hosted Disqus alternative: https://remark42.com/ (I went with Isso but I regret it because the trouble of hosting Python services is bigger than with Go.) npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…slxn There needs to be a warning about that! You could write a proposal maybe? npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…k0gr The reason is probably that if you have many layers, you get vertical scrolling in that area. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…k0gr Re show(): I think node.visible = flag does exactly that. (Godot 3 had somewhat hidden functions get_x and set_x for every property x, but I think they are gone in 4.) npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @nprofile…6suf I think @nprofile…d23x has been doing something along these lines¹ recently. ¹ Pun intended npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1x6a…d5cx Yeah, I hope they just retcon it to have meant Input/Output all along, like everyone was already pretending. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal Why my apps will soon be gone from #googleplay https://frozenfractal.com/blog/2024/9/6/why-my-apps-will-soon-be-gone-from-google-play/ #indiedev npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal I really really want to work on my game but I have family duty today and contract work stuff next week and a bunch of somewhat urgent gardening and and and arrrgh! npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal By the way, @npub1ede…nsaa, what's the official Godot Engine hashtag? Everybody including me just keeps using both #godotengine and #godot, and it seems like a waste of good characters. Maybe you could proclaim one or the other to be the One True Hashtag? npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1g53…v0hh I remember that game! I don't think I ever got very far, but now I can try again 😀 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1aw2…8vv5 Ah, so the DDG outage was not just me. I took the opportunity to try Kagi instead. It worked nicely and without cruft. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal The most unrealistic part of #startrek is that all engineers always know exactly how long a task will take, and they are always exactly right. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1aw2…8vv5 No spam in my Isso instance so far, somewhat surprisingly. Probably just luck because I don't think it actively filters anything. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1aw2…8vv5 Btw if you ever want to host the comments yourself, try Remark42. I went with Isso but am not entirely happy with it, mainly because Python tends to break upgrades as well. (You'd need a VM again of course.) npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1aw2…8vv5 Re Jekyll vs. Hugo: this matches my experience. After some years it became almost impossible to upgrade anything in Jekyll, so eventually I migrated the whole shebang to Hugo. Love the speed, maturity and backwards compatibility. The docs could be better, but could also be a lot worse. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1aw2…8vv5 @npub1xcs…rpjj Oh, that is excellent! And very recognizable too. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1sdk…0kgj You just have to suffer the data mining processes of social media companies. Fedi might not be as immune to this as we'd all like. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1mc3…nkdg In the future, use 29 February. I bet you'll get approximately 4x less birthday spam. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1aw2…8vv5 Just be glad that this isn't one of those dozens-of-gigabytes monstrosities that pass for "games" these days. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub1z2q…02kr Nostalgia indeed. I can still hear the voiceover in my head. EXTRA BENZINE! EXTRA GELD! But yeah, from a gameplay perspective, A2 Racer was pretty awful :D npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub14yq…rfl3 Does it get better if you manually compute deltas between global_position of the InputEventMouseMotion? Those are in root viewport coordinates but I'm not sure if that's before or after viewport scaling. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub10r2…w6yx It missed the case where the moapps is inside the pme range, I think 🤔 npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub10r2…w6yx From my reading, this Ben person was still essential to the process. And though he's not an experienced programmer, he is clearly technical-minded. Whatevs. I don't think programmers will be redundant overnight, but I do believe that the field of programming is going to change dramatically. npub1t7f6ku29cg9ssc0ha5540exlkntjyzc4792rwkszgw0e47kwsrkqv9dtp0 thomastc | frozenfractal @npub10r2…w6yx Did you read the article through to the end? The title/intro are a bit clickbaity, but it gets more nuanced towards the end.