There's a difference between web technologies and "the web" as an amorphous philosophical construct. Web technologies, as you stated, are obviously doing just fine. I'd argue the latter isn't. To be more specific, the latter as it was envisioned (in a way that I, and I speculate, GP also still subscribe to) 20+ years ago.
> long gone are the days of games with actual modding support
I'll disagree here. Kerbal Space Program, Rimworld, Minecraft all have gigantic modding communities, just to name a few. There's many, many games like that. In the case of Rimworld, it's official support and in the case of Minecraft it might as well be at this point.
> where you had a dll src with the game
Agree :)
But I don't see how that pertains to moddability in practice. In many cases, the existence of standardized modding APIs instead of everybody just poking around in the game's source is actually an upside, as it makes interoperability much easier.
I also agree with the malware side, at least for the time being. At some point, we'll probably have to deal with this and I don't mind starting the technical side now, but I don't subscribe to the idea that mods are riddled with malware.
> Kerbal Space Program, Rimworld, Minecraft all have gigantic modding communities, just to name a few.
I see what you mean, but there's a reason why I said modding support. From these, only Rimworld really counts - KSP's modding is unofficial and without support from the developers, Minecraft modding is also unofficial (you still don't have code or an API, you have to decompile! you do have datapacks but those can't do shit compared to proper modding)
Point is, all of these have unofficial modding communities because they are written in managed languages which are easy to reverse. But they don't give you a modding API to target, they don't give you documentation and they don't give you a clean/stable API. Look at how much Minecraft mods break with every minor update, it's nowhere near "official support".
> In many cases, the existence of standardized modding APIs instead of everybody just poking around in the game's source is actually an upside, as it makes interoperability much easier.
You're right but that's mostly just a consequence of the time which has passed. We no longer load just one mod. But the old model does work perfectly here - even if the modding is just "here's the DLL, replace it", the community can easily build a modloader on it which does support multiple plugins.
> At some point, we'll probably have to deal with this and I don't mind starting the technical side now, but I don't subscribe to the idea that mods are riddled with malware.
Semi-agree, it is a risk and one which can definitely be a huge issue, but I'd say this is much more of a social issue than a technical one. All these "lock things down to ensure security" initiatives throw the baby out with the bathwater, they don't really allow for anything substantial or creative to be made. And that's a huge loss, a way bigger one than malware spreading for a few days before getting inevitably found out and removed.
this convo is funny considering I'm working on a blocky game similar to Minecraft and one of the big design principles I have on my mind is drastically lowering the bar of entry for creating stuff. Even if you can theoretically modify many things, most users won't go and whip out a development environment on a whim, they'll just give up.... there's a few things which can make it drastically easier for users to become tinkerers, one of them is a compiler included with the game. If something is in the files, people can play around with it without friction, even better if some samples are included. IMO the benefits way outweigh the costs.
> Minecraft modding is also unofficial (you still don't have code or an API, you have to decompile! you do have datapacks but those can't do shit compared to proper modding)
Not quite, I'm working on a Minecraft mod via Fabric at this time and you actually do just write code. You may want to decompile to look at the original code, but that takes one command, because people have already set up scripts to do all that. They also automatically apply source code mappings which give a lot of the decompiled code proper variable & function names.
Obviously, it's not official support and you're doing weird aspect oriented programming with what they call mixins, and its sorta hacky. But there's an API, it's just not made by Mojang. Which, honestly, may be a good thing lol
> Even if you can theoretically modify many things, most users won't go and whip out a development environment on a whim, they'll just give up
Yeah, absolutely. I was more talking about the state of modding and availability of mods in general, from a mod user perspective so to speak.
But I agree 100%. I'm fine with the ceremony, but the more people can get into modding easily, the better.
To that point, I remember buying Crysis, poking around in the game file for fun and finding that they shipped the whole Cryengine level editor with the game and, what's really crazy, you were able to open the actual level files of the actual game with it.
That was mind-blowing to me. You could look at all the -horribly unmaintainable- visual scripts that defined enemy behavior - and change them. You could change the terrain. You could add the damn tornado they put in the game, which wasn't just a scripted sequence but actually hurled stuff around physically. And then you could...just play it, with your changes, right there.
Out of that grew a small, but fun modding scene with people building custom campaigns or just pretty-looking levels to walk around in (Strange Island, my beloved), considering the graphics of Crysis at the time. Also, my love of programming and tinkering with software pretty much started with this discovery :)
It's not quite the same as what you're describing, as they obviously didn't include the source for the engine itself, but I think it's still comparable to an extent.
So yeah, I'm with you on that. Do you have anything to share regarding your project? Sounds pretty interesting to me.
> You may want to decompile to look at the original code, but that takes one command, because people have already set up scripts to do all that.
Yup, but it's very much not the same... you don't have the original documentation, you don't have the actual local variable names and stuff.
And the build process is a mess, especially when you want to do cross-modloader mods. (or face users screaming at you for different modloader compatibility)
And you have two different sets of mappings too, alongside the 4 modloaders.
> Yeah, absolutely. I was more talking about the state of modding and availability of mods in general, from a mod user perspective so to speak.
Oh, from the users' perspective, it's quite a bit better. Except when your favourite mod doesn't work with the other mods. Or it's on a different modloader. But in something like KSP, it's fairly seamless, that's just a Minecraft problem.
> Also, my love of programming and tinkering with software pretty much started with this discovery :)
Yeah, this 100%. pretty much any game with easily accessible mod tools grows a modding scene around itself, just see CS or Portal custom maps, Paradox games, etc... and it's a good thing, many people get their love from that :)
> Do you have anything to share regarding your project? Sounds pretty interesting to me.
I'm pretty much making a retrofuturistic Minecraft-like. I loved the original beta versions which Notch made, but since he stopped developing it, all the soul has been gone from it, it just feels empty. Instead of adding random shit because it's cool, now it's replaced with traditional, polished but boring game design ;) I believe that it's possible to do better, add stuff like more emergent worldgen, even new dimensions, a bit deeper progression and random cool mechanics like playing sports or maybe even minigames.
In terms of modding, I favour a visible source model (it's on my github, my name's the same there), you can check it out if you want. Beware, it's not really playable yet, that's coming soon. The game's written in C#/.NET so it's kind of similar to Java in that regard.
Basically, I plan to make it so you'll have a fairly basic integrated modloader (load mods, maybe a few events) then the community can provide additional patches or hooks if needed. There will also be coremodding support (transforming the game dll before loading to add fields or completely rewrite classes) and I plan to ship Roslyn with the game so you can make plaintext .cs mods which are compiled on startup.
If people make something cool, I'm also open to adding it into the vanilla game (if they sign over the rights, etc.). I think that a huge part of Minecraft's success has been the strong community involvement - in 2010 that looked like posting and answering on Twitter because that was the new thing, today maybe it's Discord. Obviously, most games (including modern Minecraft!) do it only one way, there are the developers, and there are the players, the players play whatever the developers put out, and if the players complain too much, the developers might consider it. I think that it's possible to do better, although it definitely takes a degree of humility to pull it off.... especially if you're attached to something you've made. But I think it's possible, can't know if you don't try ;)
There's cinny, which is a pretty polished Matrix client that is very, uh, inspired by Discord in its look, that might soon add voice rooms: https://github.com/cinnyapp/cinny/pull/2335
I played around with this implementation and it's looking pretty good. Not there yet, obviously, but we're in the ballpark I'd say.
Obviously, there's lots more to Discord than just voice rooms and a similar-enough UI. But we're slowly getting there.
Not a question, just wanted to say I'm a big fan of your blog and have been binge-reading it in recent times. I really enjoy the way you explain concepts like transistor types, digital logic and chip design in a way that even somebody like me, who's still pretty new to this low-level look at hardware, can understand. I also appreciate that you sometimes use the same intro or explanations in multiple blog articles, so readers can just pick up whatever they're most interested in and don't have to go through everything that came before.
Ah, I do have a question: Any chance of an article about the Gameboy CPU someday in the future? :)
I'm writing an emulator for it at the moment and find it to be quite an interesting chip from this perspective - such a weird crossover between a 8008 and Z80 (if I remember correctly).
Thanks for the nice comments. The Gameboy CPU sounds like an interesting chip. I'll put the it on my list of processors to look at when I'm done with my current projects. In other words, don't hold your breath :-)
If you don't mind, I have a specific question regarding this setup. I've been looking into getting into pentesting, mostly for fun. I decided on messing around with HackTheBox as a starting point. Seeing as you need to connect to their VPN, it seems like a good idea to me to separate this activity from my personal network.
Which networking setup do you use for your pentesting VM? Ideally, I'd want a setup where the VM can access the internet (and therefore the HTB VPN), but not anything inside my local network. But I don't quite know how I could achieve that, at least in a way where I'd trust it to be reliable. Maybe the whole idea's a bit too paranoid to be practical in general, I don't know, so I'd love an expert opinion on this :)
Usually, I'd be using QEMU, but I'd be fine with using VirtualBox for this case if it includes something that makes this easier.
You can probably do this for VirtualBox (and any Linux program) by using tun2socks to create a network interface that routes through a proxy (SOCKS5 if you want UDP support), and then moving that network interface to a new namespace. You can run VirtualBox or any other programs in that new namespace, they don't have to be aware of the proxy at all (since they just see a regular gateway).
Fancy. Think I'm gonna go with a traditional bridge for my usecase, but this looks pretty cool. Maybe I have some other uses for it for other applications.
You could take a look at Whonix and Qubes - even if you don't use them you can roll your own setup with a similar approach: Have a dedicated "netvm"/"proxyvm" which only acts as a network bridge. "Minimal Whonix" consists of one workstation VM and one gateway VM (forcing everything over tor). Qubes integrates this approach into the UI of the hypervisor.
Then you can be more confident that (barring something escaping the VM), you have control of what a particular VM may or may not access. Also allows you to have a couple of different netvms (maybe one does give some access to your internal network, one connects only over tor, one via some VPN...) that you can switch between without needing to change anything on the actual VM of concern.
I always assumed that the VPN connection is shared by many HTB users, so it seemed like a good idea to be a bit paranoid about the trustworthyness of a VM that is reachable by lots of users that may want to mess around. Maybe I was wrong about that assumption :D
Anyway, apart from this possibly impractical usecase, it just seems like an interesting problem.
I'll just go with a standard bridge + ip/nftables setup then. Thanks for the input.
Definitely recommend Turing Complete. I've been playing it off and on over the last few weeks, just finished the first working CPU. It includes small hints and solutions for most levels, so if you get stuck, you'll always have a way forward. The interesting thing is, for a lot of levels, you can just google the component you're trying to build and use actual logic diagrams as guidance.
The game makes the whole topic a bit easier to grok with its visuals and the ability to step through your circuits when they're running. So, great fun. But beware, if you've been bitten by Factorio addiction, you might be in danger of missing a lot of sleep :)
Also, as some other comments mentioned, I highly recommend the Zachtronics games. Exapunks is amazing. But they're quite different, they're more like puzzle games about programming.
I don't know what parts of western Europe you're talking about, but in Germany, cyclists absolutely make left turns all the time. Also, drivers are taught about this in driving school, so they will (or should at least) expect cyclists to be there.
For the record, I personally prefer crossing twice as well. But I'll disagree with "western Europe".
Alternatively, just let people mod their games as they please.
I see your point and you're not wrong, but people have different priorities and playing video games is a hugely subjective experience anyway. Yes, adding a sentence or two about how the game may not look and feel as intended could be a nice idea. But it's not _wrong_ to change it, if that's what you prefer.
I've played Morrowind vanilla and with loads of mods (including graphical improvements) and I honestly liked the modded one better. Just personal preference.
My point was not about mods at all. Using a mod is a conscious decision, both when adding pink ponies, and when fixing a bug that causes you to fix saves or edit scripts manually. My point was about the trap people fall into because software and tools auto-select highest or native resolution, or because they are used to doing that manually in every game's settings screen, or because “bigger equals better”. Here they don't even understand the conscious decision to choose a suitable setting has to be made.
Rough pixels, rough edges, rough effects, everything is more or less balanced. On the contrary, when you streeeeeeeeetch the same 64×64 texture onto a single polygon covering half of your giant screen, then blend it with pixel-perfect light gradient, it won't ever look good. But a lot of people today call the monstrosity they see on screen in high res a “vanilla look”, and even reason about its visual quality.
Morrowind was made in later era, and was less resolution-dependent, as there was a range of accelerators of varying performance to run on. Still, its user interface makes it clear that playing in resolutions higher than commonly available at the time was not really considered. Many other games simply crash or develop bugs at high resolutions because they weren't even tested with those (or it was simply impossible with contemporary consumer hardware). When people release “fixes” for that, they don't question themselves whether everything that is possible to do should really be done.
Game makers had some top hardware configuration in mind as a performance and quality reference. In simple terms, the beefiest machine in the studio set the gold standard for the look of the game. I would advise against setting game resolution higher than that for '90s and significant part of 2000s games to see the game the way it was meant to be seen (visuals produced in modern shader graphics era are much less dependent on rendering resolution if they aren't constructed in a hacky way).
> My experience with the Germans not wanting to speak German with you while you stumble over everything, is simply that they want to exercise their own English, and its just not as fun for them to wait for your marble-mouthed nonsense to parse. ;)
As a German, my reason for switching to English quickly was always along the lines of "oh no, they're struggling to communicate with me! I feel bad. Let's make it easier for everyone and switch to English".
This applies especially when talking to English native speakers, but, weirdly enough, also for others - I feel better when I also have to suffer by talking in a non-native language. Doesn't really make sense, I know :)
I've talked to other Germans about this a few times and many of them agreed that this was their way of thinking in these situations.
I get that this behavior can come across as condescending and I absolutely understand the frustration about it when trying to exercise one's German skills. So nowadays, when this happens (which is quite rare anyway), I try to just stick to German.
I'm a bit puzzled why people would learn German out of all languages anyway, apart from living here obviously, so I'm always happy when someone does.
Also, I obviously can't speak for the whole German population and sadly there's definitely some xenophobia to be found wherever you look.
Yes, its pretty clear after a decade and a half of living in a German-speaking land, as a native English speaker, that the intention of a German-native-speaker switching to English is really to be more accommodating of the struggles of the other person - but for some reason, categorically it just doesn't come off that way. Its very frustrating at times too, because the switch mid-statement shuts down my attempt at communicating in German, and thus .. I don't ever really get better.
What I suggest to all my German-speaking/English-preferring friends and colleagues, is to CORRECT the German, in a friendly way, and speak friendlier German while I'm "getting the marbles out" ..
As for learning German - its a beautiful language and there is much literature that can be enjoyed in German, which loses its feels in English translations. I have a "German/English Shakespeare" volume, which has Shakespeare in German on one side of the page, and English on the other, and this has proven to me time and again that German can be just as beautiful, befuddling, frustrating and enlightening as English. I'm really glad I raised my kids to be German/English speaking too - having an intrinsic knowledge of both languages has helped them be better speakers of them both, too.
> What I suggest to all my German-speaking/English-preferring friends and colleagues, is to CORRECT the German, in a friendly way, and speak friendlier German while I'm "getting the marbles out" ..
I've heard something different to this and I have to say that it helps in my language learning. You shouldn't correct someone who gets the language wrong, but accept anything that you understand as correct enough. If there is some possible confusion in the meaning, however, you should ask for clarification (e.g. "do you mean you're going to the movies now, or that you went to the movies yesterday?") The language learner will follow up with a different phrasing and/or with questions about grammar that will teach them more than a quickly forgotten correction.