Outcore: Desktop Adventure - Doctor Shinobi
  • Added Brazilian Portuguese translations
  • Fixed a rare case where the game gets stuck when it tries to open Paint
  • Modified dialogue/subtitles/text systems to support RTL languages in the future. Let me know if it broke anything.
Dec 7, 2023
Outcore: Desktop Adventure - Doctor Shinobi
Hey NERDS. Do you like reading blog posts about programming and technical stuff?
Don't lie to me, we both know you do. This is why today I'm gonna talk about some bug fixes I've made recently, including the juicy part where you get a sneak peek of Outcore's source code. Let's get down to business

The "let me try something" bug

Very early in the game, the player is tasked with drawing a key to open a safe by using MS Paint. Unfortunately, sometimes that's not possible due to the game not having permission to access Paint. Sometimes it also fails because some of you deranged lunatics decided to uninstall Paint from your copy of Windows. This causes Outcore to soft lock, preventing any further progress.

The reason I made a game revolve around using Paint was that I thought every Windows PC would have it. The fact it can't be used sometimes made it quite difficult to solve.
I could make Lumi ask the player to use another image editing software, but then there would be no way for the game to react to the player opening that program. Also, what if the player doesn't even have any image editing software to begin with? Not only that, but I would also need to contact all the volunteer translators to translate the new lines.

Since this solution was not feasible, I had to go back to the drawing board. I considered creating a fake substitute for Paint, but that would be waaaaaaaay too much work for such a rare edge case.

I eventually realized that I could include another image editing software with Outcore, and use that instead. So I decided to include a portable version of https://www.getpaint.net/ with Outcore's installation.

Paint.net is free to use, and more importantly, free to distribute, can run without having to install it first and can open an image via command line parameters. The combination of these factors made it a great choice for a failsafe solution in cases where MS Paint can't be loaded.

Oh right, I promised you some code. Here are the instructions that launch the correct Paint program


Yeah! You like that nerdy stuff, don't ya? If the image appears to be cropped then here's a full version of the code:

Softlock during the 1st phase of the final boss
We're entering spoiler territory here.
During the first phase of the final boss, the player is tasked with helping Lumi gather energy while fighting a fake anti-virus and icons on their desktop. I knew there was a bug on rare occasions where the fight would get stuck as soon as the 1st icon mini game was supposed to run.

For a while I didn't know what was causing it, that is until Aya Shameimaru and Cirno from the Touhou series joined the game's discord and reported this issue. Turns out this happens when you have too many icons on your desktop.

Initially, I couldn't reproduce it since I didn't have many icons on my desktop. I decided it was time to change that for the purpose of fixing this bug.


There, much better. This allowed me to start debugging. My investigation led me to WindowsUtility, a side program I wrote that helps Outcore function (you can read more about it in the racism bug post).

I'm going to refer to WindowsUtility as WU in this post as well. (Programming talk in 3...2..1..) So WU establishes a communication line with Outcore which it uses to transfer data about your desktop between the two. Behind the scenes that communication line is really just a chunk of memory in your RAM that both programs read and write to. The size of that chunk was the maximum value of ushort, which is 65,535 bytes (or 65.5 megabytes).

When WU sends info about your icons to Outcore, it gathers their info (name, position) in an array, serializes it to JSON and then uses that communication line. While it's comfortable to use JSON for serialization, it's also not too efficient when it comes to the size of the packets you generate.

Did you figure out already what's the issue? When you have a lot of icons, that serialized message ends up being more than 65 MB in size. This meant Outcore couldn't receive the data about the icons, which broke the fight.

I could limit how many icons WU would collect when gathering data, but it could cause other issues later down the line. The next logical solution was to ditch JSON and use something more efficient, like ProtoBuffers.
The problem with that is that it was quite a big change. It would require a lot of work to implement and test, and I just don't have the time to do it.

So what was the solution? I increased the size of the communication line from 65 to 130 MB. Why should I work hard when I can make YOU, my dear players, pay the price instead?
So yeah, Outcore now requires a bit more RAM to run but at least this issue is solved. The game is so light that it really shouldn't affect any of the players.

Oh WOW, it's been quite a while since I posted a picture. I trust all of you prefer picture books more than plain text encyclopedias. So for the sake of pacing, here's a random screenshot from WU


Anyway, I uploaded this fix about a week ago and immediately regretted it. Turns out my change broke the communication between Outcore, the idle game, and other sub-programs such as the 1-week progress bar puzzle and Lumi Defender... Whoops.
Since then I've fixed all of them, so the live version should be ok.

UPDATE: Steam user Wekker1 has brought to my attention that 65,535 bytes are 65 kilobytes, not megabytes. If I had any functioning brain cells left I would have realized that doubling the memory allocated is so negligible that it was definitely the right choice.

The idle game's stage editor is now available for everyone
Also for the sake of pacing, this is not a bug and not too technical.
About a week ago some players decompiled the idle game and found out it has a stage editor. That's a tool I made so I could create the idle game stages, but locked it because I didn't want players to accidentally access it.

I changed my mind and decided that it's not harmful to let players use it to make their own stages


This is now available on the live version as well. It wasn't engineered to be used by players so it might be a bit clunky. Let me know if you find any major issues with it.

Lumi file doesn't exist in the Documents folder
This one is straightforward. Outcore doesn't always get the permissions it needs to create a file, which leaves that riddle broken.

For a while, I thought it was unsolvable, but realized it could be solved if I accept unelegant solutions.
When the player opens the Documents folder after Lumi asks them to, the game now scans the folder and checks if the file exists. If it doesn't, Lumi will react as if the file was dropped into her.

As I said, not elegant, but it does fix this edge case.

That's it for now. I might make more posts like this in the future for other bugs that could be interesting to write about.
Outcore: Desktop Adventure - Doctor Shinobi
Today's update is dedicated to the new Lumi plush campaign. Before we get to the patch notes, let's reveal Lumi's new plush!



Still not convinced? Perhaps Kafot will change your mind.



This Makeship petition lasts only one week. If you want a Lumi plush, sign the petition by November 5th!

UPDATE: if nothing happens when you click the "Pledge $2 Today" button then try ordering from incognito mode
You can check out the petition at https://www.makeship.com/products/lumi-outcore-plushie

Patch notes

  • Added a new Lumi plush-related line for K-Lev at the end of the game
  • Fixed an issue where Lumi disappears when she touches a door that opens (maybe she went into the void?)
  • Fixed some more typos in Polish
  • Fixed an issue that let players skip the cutscene that gives them the star power-up
  • Added Braille language support.
  • After listening to player feedback: Made it less likely for black holes to appear in real life next to players, sucking them in along with their entire neighborhood.
  • Removed Braille language support
  • Fixed lag spikes in the secret multiplayer mode
Sep 26, 2023
Outcore: Desktop Adventure - Doctor Shinobi
Fixed a bunch of typos in the Polish localization. That's it
Outcore: Desktop Adventure - Doctor Shinobi
  • Attempted to fix an issue causing the save file to get corrupted.
  • The game will create a new save file whenever it attempts to load a corrupted one instead of simply getting stuck on a black screen.
  • Reduced the amount of projectiles in the firewall phase of the last boss.
  • The firewall phase has a background effect which can be quite costly to run on old computers. Long ago I implemented a mechanism that measures your FPS and forces the background to look worse until your FPS stabilizes at 45 or above. Some people were still getting low FPS on the lowest background quality, so it's been adjusted to nerf itself even further before stopping.

There were actually more minor changes. I forgot what they were since I released them in small patches that had no release notes written for them.
Outcore: Desktop Adventure - Doctor Shinobi
I'm happy to announce my newest game! Persona 3 The World Is Drowning



"The world is drowning, and everyone you know is gone. If you wish to survive, you'll have to climb to the moon. On your way up you’ll encounter many traps and monsters, but remember, you must never stop. The sea of blood is coming, and it will rob you of your final breath"

The World Is Drowning is a horror roguelike game that focuses on hydrophobia instead of traditional scares

Questions you might ask, and answers I may answer
How many people will work on "The World Is Drowning"?
For now, it's just me. Once the game's prototype is further developed, I hope to raise funds and hire more people to help me make this game.

Will the game feature multiplayer?
Only if the game gets enough funding. It is currently being developed as a singleplayer game.

When can I play the game?
I plan to hold beta testing rounds in the future. If you wish to know about it once I announce the dates then make sure to wishlist and follow "The World Is Drowning" on Steam, as I'll be announcing it there. I will also announce the dates in The World Is Drowning/Outcore's discord server

How can I help the game's development
As mentioned above, wishlist and follow the game on Steam, and tell about it to your friends. That's the most direct way there is to help the game until it's available for testing.

What engine are you using to develop "The World Is Drowning"
Unity, although I'm seriously considering starting from scratch with Unreal Engine. I feel like UE5 tools could fit this game more than Unity, and hopefully result in a better-looking game.

Will you still be working on Outcore?
Yes, but I will mostly be fixing bugs, supporting players, and adding new languages. While there's some cut content I wanted to add, and I DO have plans for the game in the future, I can't afford to work on it right now as I have to focus on releasing something that earns me money. Turns out you can't sustain your existence if you release a game for free.

Does it mean The World Is Drowning will cost money?
YES! It will cost ALL of the money!
Outcore: Desktop Adventure - Doctor Shinobi
I'm happy to announce Outcore's biggest, most important update ever since "The big 2023 update" earlier this year.

Please welcome...
The "Cute animals with clown noses" update!



Finally, after ten thousand years, I've managed to focus ALL player feedback into one singular feature which everyone can enjoy. It took hundreds of the best engineers around the world to develop this, but we managed to overcome the technical difficulties involved in developing such a complex system.

You can finally, look at cute animals with big red clown noses instead of playing Outcore

Look, buddy, I'll be frank with you. The game has like 17k post-release wishlis++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+

+654

Sorry, my cat just landed his abnormally gigantic ass on the keyboard. Here's proof


Anyway, as I was saying, The game has like 17k post-release wishlists. That's 17,000 people who showed interest in the game but haven't played it even though it's free. This is my dream game, and I'm gonna make them play it, you hear me???
The only way to convert them was to pull out the big guns, the forbidden weapon, the illegal Danish: Cute animals.

I could have just let you look at regular cute animals, but then I would have missed the opportunity to subconsciously remind you to buy the clown nose DLCs, which you don't have to but you should definitely remember that they exist and that I hunger for french fries and schnitzel in pita which I can buy using YOUR money.

"Finally, Doctor Shinobi, YOU'VE DONE IT! I no longer have to play your stupid game. I will now proceed to tell ALL MY FRIENDS about Outcore's new awesome update. Next, please add a feature that lets me order hard-boiled eggs directly to my home".

Yeah!!!! Go tell your friends about the update! And have fun, I worked very hard on this update just for you!

Ohhhhhhh.... by the way
I made a new attempt to fix the annoying black screen bug. Hopefully, the bug-fixing editions (and maybe the base one) should fix it for everyone. If you're still getting black screens, let me know on the game's Steam forums or Discord server.

OHHHH, by the way 2.0
I'm working on a new game which I hope to announce sometime between this micro-second and the end of August. Unfortunately, it won't contain cute animals with big red clown noses
Jun 26, 2023
Outcore: Desktop Adventure - Doctor Shinobi
  • - Remember the blog post about the "racism" bug? Well, it's fixed again. No more manually adding support for weird characters for the rest of eternity.

    This time it's almost certainly fixed for good. That said, there's also a very decent chance I may have made that bug worse. Only time and your angry comments will tell.

  • - Fixed the game's rendering on 5:4 aspect ratio screens, which should allow cavemen to play Outcore.
  • - Fixed the memory window not recognizing Lumi being dropped into it for some players
Jun 20, 2023
Outcore: Desktop Adventure - Doctor Shinobi
Patch notes:
  • Attempted to fix a bug that makes the game break for people who have French names (I'm dead serious. More details below)
  • Upgraded the engine version. This will hopefully help fix rare crash bugs
  • Made it easier for hackers to write an autosplitter for Outcore.

French names bug
For some players, when Lumi asks the player to open a folder such as "Documents" or "Downloads", she fails to recognize the folders being opened. She simply stands there doing nothing, leaving players confused.


After receiving several "Player.log" files from players who encountered this bug I noticed something common: They all appear to have French Windows usernames.

"Doctor Shinobi, you little clown, did you just make a racist bug?"
Woah woah woah hold on, I can explain everything.
I suddenly remembered it's not just French! This also used to happen with... Turkish people!

"Great, now you're racist against the Turkish people too"
Or am I...??? I'm going to prove my innocence by presenting the technical details behind this bug.

Why this bug happens
Aright nerds, let's dive in.

I previously publicly mentioned that when you play Outcore you actually run 2 apps at the same time:
  • Outcore, the game.
  • A special invisible program I wrote called "WindowsUtility", which in short we'll call WU.
I wrote WU to assist Outcore with interacting with your Windows OS. For example, you know how at the beginning of the game Lumi's glitch blob points you to her first file? It knows its position on the screen thanks to WU.

Outcore and WU communicate with each other like a server and a client, except they are both on your computer. The bug occurs inside WU, way before the information is communicated to Outcore.

When Lumi asks you to open a folder, she instructs WU to check the address of any folder that you open.
Let's say Lumi asks the player to open the Downloads folder. Outcore will send a love letter to WU saying "Hey WU, my brother which I dearly love. please let me know when a folder with the address 'C:\Users\DoctorShinobi\Downloads' is opened and focused"

WU will then check the address of every folder that is opened. If it's equal to C:\Users\DoctorShinobi\Downloads then WU will respond to Outcore with this letter:
"Greetings, Outcore, my twin sibling which I definitely do not hate for being more popular than me, the folder you requested has been opened by the master of this computer".

Outcore will then notify Lumi about this exciting news. She will change animation and probably say something like "wow look at this, it's my file, yeaaahh let's gooo".

BUT
French names, amright? In French you have these accented letters such as "é, è, ê, ô, û, à, É, È, Ê, Ô, Û, À, ï, Ï, ë, Ë", and more!

Let's imagine this hypothetical universe in which I am French. Lumi would ask WU to monitor this folder:
C:\Users\DôctôrShinôbï\Downloads
When the folder is opened and WU checks its address, it's actually going to read something that looks like this:
C%3A%5CUsers%5CD%F4ct%F4rShin%F4b%EF%5CDownloads

Weird, right? I'll tell you why it looks like this.
If you ever looked at a website's address, you'd often see symbols like this. I don't know what's up with URLs but they don't really support all types of characters. To work around that, browsers/websites encode the URL addresses, which is called "escaping".
When you escape a URL, you're replacing all special characters with regular ones that represent them.

For example, "/" is replaced with "%5C". "ô" is replaced with "%F4", and so on...
Then after the escaped URL is transferred somewhere, the receiving end can unescape it to get the original text.
The folder URL that WU reads is escaped. to Unescape it, I use a C# function called "Uri.UnescapeDataString". It works well most of the time, but it fails to unescape accented letters for some reason.

The somewhat bizarre solution is to manually unescape the URLs myself. This is something I've done in the past with accented Turkish letters, but had to extend with more letters for the French ones:


Can't say I'm super happy with this since I keep discovering new letters that need to be added. But at least it should be good enough for most cases.

If you still encounter this issue then let me know in the Steam forums on the game's Discord server

EDIT:
Turns out some people still encountered the issue. This was expected since manually adding special characters to that function is a poor solution.

Some folk in the comments mentioned a function called "HttpUtility.UrlDecode", which lets me choose the encoding to use when unescaping the URL. After some fiddling, I eventually discovered the URL is encoded using UTF7.
What even is UTF7? Never have I seen anyone use that encoding. URI.UnescapeDataString probably uses UTF8 or something else, which explains why it didn't work.



THIS time it should definitely be fixed for good... probably
Jun 3, 2023
Outcore: Desktop Adventure - Doctor Shinobi
- Attempted to fix a case where the player's settings fail to load
- Attempted to fix an error preventing the memory window from opening
- Fixed an error preventing some windows from being closed (such as the memory loader)
- Added a bunch of safety checks which should help me identify the source of some errors.
...