Making the Internet in Godot

Please complete the required fields.




Here’s a little project I’ve been working on in Godot. It’s from an idea that have had knocking around in my head for ages but was spurred into throwing together a proof of concept for it by Minijam 168 (which I did not finish in time for)

A screenshot of a game resembling a web browser, showing someone open "ComiComic Page" from their bookmarks dropdown

The idea was to create a fake “Web Browser” to have you explore abandoned websites on. Working with godot’s Control/UI nodes to sort of throw together something resembling a web browser was quite fun.

However, while some things were essentially gimmies with Godot’s UI tools, such as the tabbed browsing, scroll boxes and dropdown menus, others, like making a dropdown display your page history was a little more involved.

This was a dummy webpage for a fake webcomic. None of the buttons are hooked up but it was a good way to get a feel of putting together a webpage in the editor. If you scroll down then the comments section goes on for quite a while but they’re all dummy comments.

How this would/will work as a game will be that there’ll be several smaller games hidden inside the game, themed either as browser games or emulated versions of older games, and that by finding them you could discover more about the community of the website you’re exploring.

This game was all i was able to get done for the proof of concept. it’s a… wave survival? game? it’s also a bit of an experiment in trying to match early internet amateur faq formatting. Here is where I discovered some issues with how godot 4 does “subviewports”. Essentially the viewport lets you set the internal resolution, then the resolution it displays itself at in the “subviewport” ui element it renders in, and then completely ignores the internal resolution. Apparently this didn’t used to be a problem, is now, and the developers’ opinion is that it doesn’t need to be fixed.

Well, regardless of what they think, I think it is kind of important that a pixel art game actually act as if it’s being rendered at the resolution it’s pretending to be rendered at, so basically I had to go through every object in the subgame, have them cache their FP position at the end of each physics step and snap to the nearest integer value, and then retrieve their FP position at the start of the next physics step. It’s a grunt work fix but it works without sacrificing anything.

You can download the demo here if you want to play around with it. It’s not much at the moment, but I’m planning on throwing it out and remaking a lot of it from scratch to avoid the tech debt I’ve inflicted upon myself expanding on it.

-Matt