Proxy-Games

Ludum Dare 50

BitBoy arrives with little time to spare!

bitboyempromo/emld.png

It was a really close call, but BitBoy has made it in time for the game jam!

Say hello to Bit, an adventurous young spirit tasked with preventing the end of the world! Jump (through windows), slide under pipes, and activate generators to stop a meteor from hitting the planet.

Just remember that there's no stopping the end of everything.

It was a blast working on this, and I hope others enjoy it too.

Thank you for 70 ratings on Bitboy!

BitboyGIF.gif

Hello!

This feels like a strange, arbitrary number to start at for a thank you, but it's as good as any! It is wonderful to see the positive response Bitboy has gotten from others so far in the jam, and it only felt proper to show gratitude for it. To everyone who has given the time to see where this journey goes, * *thank you! **

Due to being busy with life stuff, I haven't gotten through all of the games of people who have reviewed my game yet, but I am making progress on going through and rating all the games of people who have did so for mine.

Until then, stay curious, and if in doubt, refresh.

To anyone wanting their game rated, please post here!

Hello! I'll be up tomorrow and planning on playing some games, so please give me a list of games you'd like me to check out!

And if you haven't, I'd appreciate it if you checked out my meta infinite runner about the end of everything, Bitboy!

4daba.gif

If you need/want ratings for your game, please post here!

Hello!

I will be going around and reviewing other people's games again. If you need some reviews to get into the ranking, or you have something cool to show, please comment on this post and I'll go look at it!

If you could look at my meta infinite runner, Bitboy, at the same time, I'd greatly appreciate it!

Until next time, stay curious, and if in doubt, refresh.

BitboyGIF.gif

Another round of rating games!

Hello again!

I have gone through the last post I made and rated all the games, so I'm posting this here. If you want/need ratings for your game, or you have a really cool game you'd like to be looked at, please post them here and I'll go check them out tomorrow when I wake up!

At the same time, I'd appreciate it if you would check out my game if you haven't yet, Bitboy. It's a infinite runner that initially seems really simple, but quickly turns into something unexpected. The game is getting really close to 100 ratings, which is really exciting! I'd love to see it past that threshold and make it into triple-digits.

BitboyGIF.gif

Until next time, stay curious, and if in doubt, refresh.

Thank you for 100 ratings on Bitboy.

Bitboy_100Ratings.png

Wow. I am pleased to announce that Bitboy has reached triple digits. Needless to say, this game never would've gotten as far as it has without the people who came and played it, and discovered what the game truly was through their curiosity. It has been amazing to see the positive response people have had to the game. To everyone who helped Bitboy get this far, thank you.

If you haven't checked out Bitboy yet, I'd appreciate it if you would! I have been working my way through everybody who's rated my game in order to rate theirs.

Until next time, stay curious.

Ready to rate more games!

Hello! If you'd like to have your game rated, please post a link in the comments!

If you would check out my meta infinite runner at the same time, Bitboy, I'd appreciate it!

BitboyGIF.gif

Until next time, stay curious.

Bitboy - A Game about Subverting Expectations and Embracing Meta

Bitboy is a little infinite runner about jumping through windows, sliding under barrels, and stopping a meteor from hitting!

Or at least that's what it has pretended to be for the past two weeks. Spoilers down below. If you havent checked it out yet, please do! I've been going through the comments and reviewing the games of people who've looked at it.

4daba.gif

Bitboy is, in reality, a meta narrative game about trying to prevent the end of a world that uses browser refreshing as a mechanic to progress the game's story.

It has been great to see the response to the game, either from those who discover the game's little secret, or from those who haven't. Some people have wondered how the game managed to pull off some of the things it does, and I'll be putting out posts the next few days describing how those aspects of the game work. It'll be fun to share the process.

If you made it to the end of this post, thank you for reading. Until next time, stay curious.

Bitboy - How The Game Pulls Off The Refresh Mechanic

BitboyDrawnArt.png

Hello!

This is the first of a two or three posts meant to go through how I managed to pull off certain things in Bitboy that left some people wondering how they worked. As a result, this post does contain spoilers. If you haven't checked out Bitboy yet, I'd appreciate it if you would. I've been going and reviewing the games of those who've reviewed mine. If you want to read anyways, go ahead!

This specific post is meant to answer how the game sets up its save data and how it uses that data at startup to drop the player at the right point in the story, as the game uses browser refreshes as a mechanic to move the game story forward. While this factor was something that surprised people in the game, the way Bitboy does it is actually really simple, and a lot of the surprise is more due to the way the game sets up expectations.

How Does Bitboy Save

The secret weapon here is Unity PlayerPrefs. While this answer isn't exactly shocking, what is interesting is the fact that PlayerPrefs are available within WebGL. The way they work in WebGL is via the use of the IndexedDB API for browsers. While this seems exciting, it is very limited. For example, once a person quits Safari after playing a WebGL game with PlayerPrefs save data, that save data will immediately be wiped. While Chrome and Firefox aren't as limited as Safari, they will also wipe the data once someone turns off their computer.

As a result, PlayerPrefs for WebGL is not a great solution for long-term saves. However, for Bitboy, where the point is for it to be played within one sitting-just after multiple refreshes of the browser page-it works perfectly.

Progressing The Game

Bitboy, story wise, is set up to 'loop' through the same situation where player attempts to prevent the deletion of the game itself. As a result, all game progress is primarily done via two integers: 'GameProgress' and 'ResetCount'. 'GameProgress' tracks the players general progress within a loop, and 'ResetCount' tracks how many loops the player has gone through in order to apply unique properties per loop. It is important to note here that WebGL PlayerPrefs require the calling of PlayerPrefs.Save() in order to actually save all the variables-if this isn't called, it saves nothing.

So, how are these variables used?

At bootup, Bitboy actually loads into a simple Unity scene that only displays a black screen. This scene has only one purpose-to go through a script that checks 'GameProgress' and 'ResetCount', and load up the appropriate scene for the player's current progress. You can see the script below.

Capture.PNG

Some integers for 'GameProgress' here are only used for 1 loop of the game-for example, 'GameProgress' will only be set to 0 during the very first loop of the game, where the player has first boot up the game. As can be seen in the photo, 'GameProgress' being set to 0 has the game go to the foreboding Delete screen that first meets players. When the player "resets" the game at the end of a loop, 'GameProgress' is set to 1, bringing players to the animated logo splash and the title screen instead.

Again, most of this information is well-known to Unity developers, with PlayerPrefs being the simplest way to save data within the engine. However, the fact that it works for WebGL builds is not as known, which is what gave the game its surprise here (in addition to purposefully making the game initially seem like nothing but a average infinite runner). Next time, I'll make a post covering how two of the more impressive corruption effects worked in the game.

Until then, stay curious.

Final rating spree!

Hello! I'll be going through and rating games on last time for the jam, so if you'd like yours rated, please post it here!

If you would check out my meta infinite runner at the same time, Bitboy, I'd appreciate it!

BitboyGIF.gif

Until next time, stay curious.

Bitboy - To Corrupt A Game

BitboyDrawnArt.png

Hello!

This is the second post in a series that is meant to go over the development of Bitboy and how certain effects were pulled off. As a result, this post does contain spoilers. If you haven't checked out Bitboy yet, I'd appreciate it if you would. I've been going and reviewing the games of those who've reviewed mine. If you want to read anyways, go ahead!

This specific post will cover two moments in the game that used certain rendering tricks commonly found in other video games as graphical errors in order to make the game feel like it was being corrupted and deleted.

The Hall of Mirrors

This first moment is commonly known in other games as the "Hall of Mirrors" effect, and Bitboy makes use of it during the initial stages of corruption. Important to note is that this effect only would appear on Chrome as far as I know, as Firefox appears to render things in a way that prevents the effect.

Bitboy_CORRUPT01.gif

The best way to describe how this effect works is to first describe how video game engines typically render spaces where there is nothing. In engines such as Unity or Unreal, when rendering a frame to be displayed, they will typically start with rendering something as a background, whether it'd be a skybox, a solid color, or just black. Then they will render everything else after that, in terms of sorting. Once the frame is complete, it will be shown on the screen (Note that this is a massive simplication.). After that, the engine moves onto the next frame. However, the engine still has all the information from the previous frame-which pixels are colored what-on the new frame. This is where normally the rendering of a background of some sort would come in, as it would clear out all the information from the previous frame.

The effect above is what happens when the rendering of a background on a new frame is skipped, and there is no object rendered over the pixels to replace the information from the previous frame. It is basically the engine desperately trying to use whatever information it has retained to create some sort of cohesive frame.

Breaking A Splash Screen

The second effect I wanted to cover was the splash screen that occurs when the player refreshes the page after getting the initial 'WebGL error'. This is used as the first indication to the player that the game has remembered the current progress, and that the game is not going to return back to normal with a page refresh.

Bitboy_CORRUPT02.gif

Some may notice that the 'Hall of Mirrors' effect is used in this screen to help make the splash screen feel corrupted, but there is more going on here than just that. The logo is actively degrading. In order to for this to happen, the logo had to get turned into a mesh, so it had vertices that could be manipulated. This was simple enough, as programs such as Illustrator and Inkscape can export to a file format known as .svg, or 'Scalable Vector Graphics.' From there, Blender allows the importing of .svg files, which then get converted into a bunch of curves within the engine. Convert it to a mesh, and optimize the model properly, and then I suddenly had a 3D version of my logo to play around with.

Capture.PNG

After this, all that was needed was to move the model far away from the world origin point in Unity and animate its position. The way this works is by actively taking advantage of floating point precision errors. When game engines store vertex positions for models, they only have a finite number of bits to store the information for the position in. Since larger numbers have more information attached to them, models put out far from the world origin in game engines have the precision of their vertex positions reduced so they can be stored within the finite number of bits. As a result, if you move the objects far enough from the world origin, you get an effect such as the one in the GIF above, as the vertex positions of the vertices in the model get clamped to values with a large enough separation between them to make the imprecision of the vertex positions obvious.

For a better idea on how floating point imprecision effects models in a 3D space, this Reddit post contains a GIF of the effect on a car model shows it off a lot better than the 2D mesh I had used.

Next time, for the final post, I will doing more a postmortem on developing Bitboy and what I learned from it, as the overall response to the game resulted in some great lessons on pacing, subverting expectations, and the consequences of making such a game for a game jam.

Until then, stay curious.

Bitboy Postmortum - Decieving Players, Attempting Meta, and The Lessons Learned

Bitboy_Postmortum.png

Hello!

This will be my final post coverall the development/analysis of Bitboy. This is going to be a bit of a unconventional postmortem-rather than covering the overall development of the game, this post is more intended as an analysis of the response to Bitboy, and deciphering what ended up working, what didn't, and the lessons learned both when making the game and when watching the response to it. As a result, this post will contain spoilers! If you haven't played the game yet, I recommend you do, as a lot of what makes Bitboy work is the surprise going into it. However, feel free to keep reading if you don't care. I don't judge.

If you would like posts that go into the more technical side of things, I made two posts-one about how the game pulls off the refresh mechanic, and one that covers the the graphical glitch effects in the game and how they were pulled off.

WHAT WORKED

The Idea: The overall response to Bitboy in terms of the idea-a meta narrative experience that is designed to initially seem like an average Ludum Dare entry before unveiling itself to be deeper than expected-was generally celebrated by those who discovered the twist. While meta games have appeared in Ludum Dare before, very few actively try to subvert expectations by setting up the expectations of being a mediocre Ludum Dare game. It made for a risky idea that required good pacing and execution, and luckily Bitboy seemed to manage those things quite well. It was also one that, at least for me, had a lot of soul.

It was a game mainly designed as a love letter to the games in Ludum Dare that get lost in the wave of content due to not standing out as much as the big contenders. There are a lot of experiences each Ludum Dare that deserve love and attention that simply do not get it. This was something I saw during Ludum Dare 49-my first game jam-and it ended up inspiring me to create a game that sets itself up purposefully to seem like a mediocre, unimpressive entry in the jam, only to subvert those expectations with a meta narrative experience that was deeper than anyone gave it credit for. Bitboy's end goal was to create an experience that rewarded players that give love and attention to those entries, the one that end up lost in the craziness each Ludum Dare, the most.

Taking Advantage of The Browser: The usage of browser refreshing as a game mechanic to progress the story was an idea that was praised by people overall, due to it being a generally unique approach to meta that helped give the game its own identity. While meta games aren't common in Ludum Dare, they do happen, and at that point it becomes a question of what makes Bitboy special. The answer to that (alongside the implementation of meta into an unconventional genre for it, an infinite runner) is the usage of refreshing the page and taking full advantage of the nature of it being a browser game. I simply don't think Bitboy would be the same game, or have the same effect, if it were a downloadable experience.

Bitboy_CORRUPT01.gif

The Effects: The visual effects used to represent the games corruption were also considered very well done, due to the purposeful usage of actual graphical glitches and errors that would occur in other games. I won't go too much into this, as I have already made a post covering the effects, but the overall consensus was that these effects did an excellent job at genuinely making it feel like the game was breaking.

The Implementation of the Theme: The overall consensus was that Bitboy did a good job implementing the theme in a unorthodox way. The initial setup of the theme being applied via the inevitable disaster of a meteor hitting Earth, only for it to be subverted with the inevitable deletion of the game was considered as being well done. The additional implementation of the theme with the inevitable ending of the game (subverting the expectations that the game would just loop through the same segment of gameplay over and over again) was also considered well done by those who reached the true ending.

The Audio: While the audio is not all mine-the glass breaking sound effect was from online, and the instrumentation used for Bitboy's music was from a soundfount pack called GMGSx.SF2 (the actual composition of the music was AI-generated), the response to the sound effects overall were generally positive, with only minor notes about some audio being slightly quiet or low pitched.

WHAT DIDN'T

bitboy01.png

The Dialogue System: Easily the number one complaint about Bitboy is the dialogue system. It's an issue where I understand why it happened-it was my first ever attempt at a dialogue system, and I struggled a lot with getting the dialogue and cutscenes to work properly (Easily the biggest time waster for me this jam was that I spent four hours fixing a bug where in the intro cutscene, the game would softlock after Bit yeeted himself out a window-it was horrible). While I managed to pull together a system that functioned well, most of the text would be read out to slowly, hurting the pacing. The most egregious of these were the segments with the void-an unknown character that would appear at the end of each loop. Overall, while I can forgive myself for the issues with the system since it was my first time, the fact that I never considered implementing a fast forward button for text is still one that pains me. Hindsight is 20/20.

The Controls: What ended up being the second biggest issue with the game was the controls. Initially, during the panic of getting the game up on the Ludum Dare page, I had only listed 'C' as the button for sliding, when 'Left Control' was also usable. Due to how close the buttons are on the keyboard, this resulted in a very uncomfortable gameplay experience for several people. Once I realized the error, I quickly updated the page descriptions. Beyond that, many wish that the dialogue system had a key mapping for it, as using both mouse and keyboard was considered unnecessary.

WHAT IS COMPLICATED

bitboy04.png

The Gameplay and The Graphics: For better or worse, Bitboy succeeded in setting itself up as a seemingly unimpressive entry, and the way it had done this was through the simplistic gameplay and graphics. This was admittedly by design-the very simple gameplay, with only two obstacles to avoid, was done in order to make the game feel monotonous and repetitive, and the graphics were done in a very simplistic manner in order to ensure all screenshots of the game didn't give a strong impression. These were elements that were ultimately scarified for the sake of setting up the expectations to be subverted. Doesn't stop them from being mediocre, regardless.

Even ignoring the intention, there are/were problems here. The vents blended in too well with background buildings for some people, making platforming difficult. The jump was also floaty to some people, which make platforming even more of a struggle. This really hurt the game in terms of getting people to the twist, which would happen after 60-90 seconds of platforming (even through several runs/deaths). While people enjoyed the expressiveness of the characters, the animations were less well received due to the very simple animation of Bit running and jumping being contrasted with an oddly smooth sliding animation.

Speaking of the slide, a lot of people had issues with it, being unable to slide under objects even when they appeared to be able to go under it. It turned out that I made a critical error-the slide was framerate dependent. As a result, those with low framerates basically experienced a game that was impossible to play. This was quickly patched out.

The Pacing: Bitboy, for the most part, seemed to nail the landing with it's pacing, allowing most people to discover the twist and find out what the game truly was. Despite that, however, a sizable portion of players didn't. It might've been due to the slow dialogue, or it might've been due to the unimpressive/problematic gameplay, but regardless, this was really bad. Much of the game rode on the twist and the subverting of the expectations of it being a mediocre and unimpressive game jam entry in order to surprise people. However, as a result of the decision to design the game to come across that way, Bitboy has a massive, fundamental issue that the game never really addresses.

What does Bitboy offer to players who never found the twist?

...Not much, and that was by my own design, tragically. If players didn't find the twist, then the game would simply remain the very thing that it had set up expectations for, and it would be rated appropriately. The end result is that I've created a game where about a quarter of the comments on the game were more about the fake game that was used to hide what the game actually was. I've created a game where I really have no idea how it is going to review, because there's a real divide here on what game is even getting reviewed. On one side, there are those who reviewed a meta narrative experience that sets up expectations of mediocrity in the player only to shatter them, and on the other, there are those who reviewed an okayish infinite runner.

I do find it important to note that this isn't the fault of those people-it's an indication that I had failed in my design. This is more to note what an odd experience it has been reading the reviews on the game.

It's certainly been interesting.

Bitboy_FinalThoughts.png

MY FINAL THOUGHTS ON BITBOY

Bitboy is a game that, for better or for worse, succeeds in its first goal of setting the expectations it aims to subvert. The game makes itself come across as a decent but not noteworthy game jam entry, from the graphics and gameplay, to the Ludum Dare page and promo picture itself (Or at least the original one, anyways. It got replaced about 2 days ago.) However, issues with the pacing-whether it'd be from the slow dialogue speed, or the issues with the controls and gameplay-resulted in a experience that didn't succeed in its second goal of subverting the aforementioned expectations, at least for some players.

But for most players, it did achieved that goal, and I'm very happy about that. This game was not easy to design, due to having to create an experience that comes across as mediocre to the player, while still incentivizing the player to stay around long enough for the other foot to drop. It was a game that also needed to encourage player experimentation and curiousity, and get them to do something-the refreshing of the page-without ever bluntly saying it is a mechanic of the game. This resulted in a odd game design experience that left me in very unfamiliar territory or forced me to break traditional rules I had for game design. Despite that, the game got finished on time, and the response to it has been more positive than I ever expected it to be. I was concerned no one would ever make it past the fake WebGL screen-that they would never figure out the refresh mechanic-but people did, and the secret the game held was discovered more times than it wasn't. In the end, I can say that I'm proud of my work on Bitboy, and I can't say that about a lot of my projects.

So that's it. For one final time, thank you to everyone who gave time to my game, whether you found out the game's true nature or not. It has resulted in a fascinating experience, from watching streamers play the game and discover the twist, to watching people in the comments try to warn others not to underestimate the game. You all gave me a wonderful experience this game jam, both through your comments and through your games, and I hope my game did the same for you.

See you soon!