Michael VanOverbeek

An aspiring game developer.


Hosted on GitHub Pages — Theme by mattgraham

My posts

Revealing my name. Again.

2019-02-20 00:00:00 +0000

Hey guys! Most of you know me as Alkaline Thunder. However, of course, this is not my real name. Alkaline Thunder, along with Watercolor Games, are both names I came up with for myself and my gamedev group back in 2017 due to issues back then that I will summarize soon.

I’ve decided that, since Watercolor was recently renamed to its final name of Bit Phoenix Software, I figured it’s time for me to get rid of my temporary name of Alkaline Thunder as well.

So what happened?

Back in June of 2015, I completely took over the ShiftOS project and started ShiftOS-Next. I went by “MichaelTheShifter” back then as my primary online identity. It became fully associated with ShiftOS and I was oblivious to the problem with that.

Problems didn’t start to arise until mid-2017 toward the end of the official ShiftOS project as we all know and…tolerate…it today. The reputation of the game was so horrifyingly bad that we had a troll hacker-group going after us, taking advantage of my extremely poor security habbits back then.

I was inexperienced with even the absolute basics of cyber security and only then realized the vital importance of not using the same password twice…when it was too late.

I soon had my old GitHub account taken over by the hacker group, along with my Discord account, my domain registrar account, and even a private email address that I haven’t used for anything in a decade. Some of those accounts have still not been recovered to this day.

Moreover, the hacking started to leak into my personal, real life. It was no longer just attacking ShiftOS, it was starting to affect my privacy. And it wasn’t just that hacker group.

Someone we had banned from the ShiftOS Discord server around that time was able to find my parents’ social media accounts and contact them - claiming I was a cyber terrorist. Coincidentally, that was the week ShiftOS seemingly disappeared off the face of the planet with no warning. The attack was successful. Something had to change, immediately.

What I did to recover

Recovery took a long time, and involved some sleepless nights frantically rewriting and refactoring code, but I was able to get out of the situation - at least partially - by:

  • Coming up with a pseudonym (Alkaline Thunder) that all my code and work would be attributed to.
  • Taking all my active social media accounts and other accounts into protected mode, preventing anyone but close friends from contacting me while I fix things up.
  • Killing off ShiftOS entirely, including uploaded videos and livestreams.
  • Starting Watercolor Games and The Peacenet a week later.

It got the hacker group off my back, and while the person who broke the last straw on the camel’s back still knew who I was, we eventually made up.

So why keep the temporary name for so long?

By the time recovery was finished, Alkaline Thunder became… a part of me. Every time I sat down to record a video, I would instinctively say “Hey there everyone, I’m Alkaline Thunder.” Every time I wrote a piece of code, it’d have some form of open-source license at the top saying Copyright (c) <year> Alkaline Thunder. It became second nature to call myself that.

I also still had the fear in my mind that if I were to use my real name again, the same thing would happen. Knowing the Internet, that’s probably rightfully so. And I still have that fear, even now.

But fear can be overcome.

Mhm. Fear can be overcome with courage. And boy, do I have a lot. I’ll be honest, I’m the most stubborn person on the planet when it comes to not giving up on what I care about. Maybe that’s why I used to go around the Internet with an Ash Ketchum profile picture a while back…

Whether that’s a good quality or not is up to you. But it’s what makes me feel comfortable saying that my name is not Alkaline Thunder. My name is Michael.

My name is Michael, and I am the one who wrote ShiftOS-Next. I am the one who wrote OrcWrite, and I am the one who wrote Virus.MSIL.Trance - the virus that crashed in OSFirstTimer’s “Mum Tries to Destroy Windows 8.1” video.

I’m also the one who wrote ShiftOS 0.1.0 and the one who wrote ShiftOS 1.0. I wrote Peace Engine and The Peacenet. I wrote a Cosmos-based operating system called SharpOS and another one called Memphis.

I made my first Linux “distro” called AshOS in SUSE Studio, which was literally KDE 4 with an Ash Ketchum wallpaper and the default non-root user is ash. I am that Michael.

I’ve written a lot of objectively bad code. I’ve screwed up basic cyber security resulting in me getting hacked numerous times and coming really close to being SWATted by someone I banned. I own those mistakes as I advance through my programming and game development hobby and turn this hobby into a career.

It’s my belief that, though not everyone accidentally gets themselves SWATted, everyone makes at least some of the mistakes I’ve made in the past. Everyone stores a password in plain-text or even as a hardcoded string in their code at one point.

Everyone forgets to log out of Discord on a VPS they were using over VNC at some point - and if not Discord, it’s some other personal account they care about.

Everyone chooses to take on a project that is far bigger than they know they can chew at one point, and everyone jumps into that project at one point thinking they’ll be able to restore its stability and reputation, not make it worse.

It is those mistakes - the ones that almost ruined everything I’ve ever made before August 2017 when I became Alkaline Thunder - that offer some of the greatest lessons in security, privacy, and generally good practices you could ever learn.

You won’t learn how important it is to keep yourself safe on the Internet until you have had your identity robbed from you as a result of a large series of small mistakes.

And it is because of those mistakes that I am a better programmer. And because of that, I feel safe taking off the massk.

But I have other reasons too.

I am a dual-credit student, for C++ game development. I want to go into that program full-time after highschool. I would like to be able to say “I am Michael, and I am a professional game developer.” I want that sentence to be true and carry some weight.

But there is no way to prove that I have went through that college program and become a pro, if you do not know my name. You won’t be able to get a recommendation on a student named “Alkaline Thunder” from my professor.

And I’d rather make it easier for people who want to see what I’m all about.

So… time to come up with a new username?

No. My username will stay “alkalinethunder.” That is part of who I am and will never change. But any time there’s a “full name” field? I’m not putting “Alkaline Thunder” in there anymore.

Creating text user interfaces in UE4 without ANSI

2018-12-18 00:00:00 +0000

A lot of you may not realize, I write these blogs in a command-line text editor. No, linux nerds, I don’t use vim. I use nano because I find it easier and I have it on my school laptop. Anyway, The Peacenet is a very Linux-y hacking game and one of the things Linux has is text user interfaces - things like nano, irssi, and literally anything built with ncurses.

They’re like GUIs, except they’re all text. They’re not really command-line interfaces because they have the various elements a GUI has

  • menus, buttons, text boxes, dialogs, labels, etc., but they’re made through the use of text.

Background

So one thing that got me thinking was that I’m about to start developing another game, formally known as “Histacom: Reloaded.” One of our ideas is to have a DOS section of the game, and even though it isn’t fully planned what we’ll do with it, it’s still something to think about.

I knew from the get-go we’d be using Unreal for it. That allows me to:

  • keep using code I’ve already written for Peacenet since they’re sister projects and share various core elements
  • leverage the power of UMG
  • I wrote a fucking terminal emulator for it. That is LITERALLY what DOS is.

But my terminal emulator can’t do these fancy ncurses UIs. It’s perfect for running something like bash inside of a UE4 Blueprint, and for little command-line Unix programs (like anything in the gnu-coreutils), but that’s basically it.

It can do text I/O just fine, it supports fonts and has a 16-color palette, but no ANSI support. So placing arbitrary elements on the virtual screen is hard at best.

So what do I do?

Widget switchers.

Widget Switchers. They save the day again. If you use Windows Forms, you know what a widget switcher is. It’s the TabControl. The only difference between it and the Widget Switcher in Unreal is it doesn’t have tabs built in - you are responsible as a user interface designer to provide them, which, though very tedious, makes Widget Switchers usable for way more than tabbed user interfaces.. and in fact… VERY useful for creating a terminal environment that supports things like ncurses.

How does it work?

UMG is Unreal’s visual UI designer system. It’s like the WinForms designer for UE4. It’s built on top of Slate, Unreal’s actual user interface system. Slate has various Panel widgets, Widget Switchers being one of them, that can contain multiple child widgets. Each panel has its own way of laying its children out.

Widget Switchers lay their children out as if each child is another page. So only one can be displayed at once, and it takes up the entire space of the Widget Switcher. This is actually what The Peacenet’s Display Panel used.

Using it with a terminal

What I can do is, in a terminal window (whether it be in The Peacenet or Histacom), I don’t just place a terminal emulator widget. I wrap it in a widget switcher and it stays as the first child.

Then, when the player runs a program that has a text-based user interface (and NOT a command-line interface), I leverage the widget switcher. I spawn in a Slate slot for the new command UI, and place the command’s UI in it. This then is added to the widget switcher of my terminal, and the widget switcher is told “this new widget is now the active widget, please display it.”

The command then assumes all responsibility for looking text-based, which is okay because we’re gamedevs and we have control over that. But, done right, this creates the illusion of the terminal doing fancy ANSI stuff when it really isn’t doing anything like that.

So UE4 saves the day again.

And guess what? There’s virtually no overhead required for this. Just need to make sure that the user interface is able to signal to us that it’s ready to close. Then we remove it from the switcher and switch back to the Terminal, and the player is NONE THE WISER about the tricks we just did behind the scenes. Amazing.

Recreating i3wm in Unreal Engine 4

2018-12-04 00:00:00 +0000

Unreal Engine 4 is a pretty powerful game engine. Though, it’s not really used often for what I use it for. You’ll almost never see a pure UI-based hacking game in it. So, I have to experiment a lot with it on my own and recreate a lot of things from pure scratch with it. Most of the time I can’t use anything on the Marketplace or any existing code to help me. I have to be creative.

One of those times is recreating i3wm, a popular tiling window manager for Linux, inside UMG.

So, what is i3wm?

i3wm is exactly what I said it was. It’s a tiling window manager for Linux. Rather than what you’re probably used to with something like macOS, Windows, GNOME, KDE, etc (who all use either compositors or stacking WMs) where they allow you to drag windows freely around the screen and size them however you want, tiling WMs arrange windows in…well…tiles.

They’re very appealing to developers and hackers. They stay out of your way, they don’t take up many resources, and they’re very command-line oriented. It’s entirely possible to control a tiling window manager without using a mouse once.

Putting a tiling WM in Peacenet

When playing Hacknet and hackmud, I realized their UIs are very static. You don’t get a lot of control over how they’re layed out, which may be a good thing for some players but I like giving players the option to set things up in a way that works well for them. I also want to make the game look like a faux Linux distro while still keeping the Hollywood hacker aesthetic (monospace font, neon glowy text, bright colors on a dark background, fancy animations, etc.)

Initially I thought a stacking WM would do, but I found myself unable to really implement UIs related to gameplay. Some things I could do just fine, but others (such as objective timeouts in missions, tutorial prompts, etc) would either get in the way of your workspace or get covered by your program windows. Not good.

I thought maybe implementing something similar to Hacknet’s UI would work, but then we started to look like a Hacknet clone. Good for Hacknet, not good for us.

I thought maybe I could completely implement i3wm in-game, but then I started to run into similar issues that I did with the stacking WM while planning. Where do I place the mission prompt? What about objective countdowns? Tutorials? System status?

My solution

I decided on basically having my current Hacknet-style UI and i3wm have a baby. I’d start by removing the System Status panel and moving it to the top panel with your player name, world time, settings button, etc.

Then I’d remove the App Launcher in that top panel, replacing it with 4 workspace switcher buttons. Normally, i3wm has 10 workspaces you can switch between but I figured 4 would be enough for my game.

With the workspace switcher in place and fully working, I then added some keybinds to the game.

  • Ctrl+Enter: Open Terminal.
  • Ctrl+Q: Close active window.
  • Ctrl+1-4: Switch current workspace
  • Ctrl+Shift+1-4: Move program to workspace

Before I knew it, I had one of i3wm’s core features implemented in my game. It felt so fluent, streamlined, yet powerful.

Creating the Tiler

i3wm has various different modes that it uses to tile windows. I decided on implementing the Split mode. Basically, you press a keybind/button and it switches between horizontal/vertical split. When you open a new window, it takes your active one, splits its space in half based on the current split direction, and puts the new program in that new space.

When you close a window, the other windows move into place to fill the empty space.

A problem came up…

I thought I could use a simple UMG Grid Panel for this. I quickly found that wasn’t going to work. I experimented with both the regular Grid Panel and the Uniform Grid Panel. They had their advantages but also some serious cons that basically stopped me from using them.

Grid panel issues

  • No really effective way to make all children fill available space.
  • It’s extremely hard to “split” a child like in i3wm.
  • I can’t effectively add any padding between children.

Uniform Grid Panel

  • A lot easier to make everything fill all whitespace, but children can’t span multiple rows/columns.

My proposed solution

I decided instead that I’d use a bit of a hack. Unreal Engine has these things called Boxes. It has both vertical and horizontal ones.

When you place a child inside a Box, that Box lays it out horizontally/vertically depending on the Box’s direction. It’s used a lot in Peacenet to create lists, but I realized it’d work pretty well for a window tiler as well. Why?

Child fill values

A Box Child un UE4 has a “fill” value associated with it. It’s a percentage value indicating how much of the Box’s whitespace the child is allowed to consume. Set it to 0% and the child will only take as much as it needs. Set it to 100% and it’ll take everything it can get.

So if a Box has one child set to 100% fill, that child will take up all the space that the Box takes up. It’ll fill it. If the box has 2 childs with 100% fill, they’ll each take up half the space, so on, so forth. Hooray!

Nested Boxes

I use this a lot in-game for creating advanced-display buttons for things like hackable services, contacts, etc. Boxes can be nested. UE4 will HAPPILY let me place a Vertical Box in a Horizontal Box in a Vertical Box in a Vertical Box in a Horizontal Box and…you get the point.

I’ve got the pieces of an i3wm tiler.

Once again, I’ve found a way to MacGyver my way toward creating an i3wm tiler using only what UE4’s user interface toolkit offers me. Now it’s time to actually implement it.

Deciding how to split.

Let’s do some pseudocode. We’ll treat ActiveWindow as the player’s active window widget, and SplitMode as their split mode (vertical or horizontal.) NewWindow is the window we’re about to open.

// Get the parent so we know how the window wass split before.
Box Parent = ActiveWindow.GetParent() as Box;

if(SplitMode == vertical)
{
    if(Parent is VerticalBox)
    {
        // All we need to do is add the NewWindow to the Parent.
        Parent.AddChild(NewWindow);
    }
    else
    {
        // We're going to remove the active window from the parent.
        Parent.RemoveChild(ActiveWindow);

        // This Box will hold BOTH these windows, and it'll exist in the 
parent Box.
        VerticalBox NewBox = new VerticalBox();
        Parent.AddChild(NewBox);
        NewBox.AddChild(ActiveWindow);
        NewBox.AddChild(NewWindow);
    }
}
else
{
    if(Parent is HorizontalBox)
    {
        // Add the window to the parent.
        Parent.AddChild(NewWindow);
    }
    else
    {
        // Same as above with the vertical split but horizontal.
        Parent.RemoveChild(ActiveWindow);

        // Create the new box.
        HorizontalBox NewBox = new HorizontalBox();
        NewBox.AddChild(ActiveWindow);
        NewBox.AddChild(NewWindow);
        Parent.AddChild(NewBox);
    }
}

And that gets our splitting done when we open a new window!

What if we don’t have an active window though? Easy! We just look at the root Box of the tiler, and we split based on that.

if(SplitMode == "vertical")
{
    if(RootBox is VerticalBox)
    {
        RootBox.AddChild(NewWindow);
    }
    else
    {
        RootBox.RemoveFromParent();

        VerticalBox NewRoox = new VerticalBox();
        NewBox.AddChild(RootBox);
        NewBox.AddChild(NewWindow);
        Tiler.AddChild(NewBox);
    }
}
else
{
    if(RootBox is HorizontalBox)
    {
        RootBox.AddChild(NewWindow);
    }
    else
    {
        RootBox.RemoveFromParent();

        HorizontalBox NewBox = new HorizontalBox();
        NewBox.AddChild(RootBox);
        NewBox.AddChild(NewWindow);

        Tiler.AddChild(NewBox);
    }
}

So, basically, we check the root box if it matches our split mode. If it does, we just add the window to it. If it doesn’t, we remove the root box from our tiler, create a new box, add the old root to it, then add the new window, then the new box becomes the root box! Hooray!

But what about empty boxes?

Well, when a window opens or closes (or moves), we run this function on the root box’s children.

bool RemoveEmptyBoxes(Box MyBox)
{
    if(MyBox.ChildrenCount() == 0)
        return true;

    foreach(Box ChildBox in MyBox.Children)
    {
        if(RemoveEmptyBox(ChildBox))
        {
            MyBox.RemoveChild(ChildBox);
        }
    }

    return MyBox.ChildrenCount() == 0;
}

So, this is a recursive function. What that means is it will sometimes call itself recursively in order to get its job done. But what does it do? Let’s dissect it.

  • It takes in a Box as a parameter “MyBox.”
  • It returns a boolean, which can either be “true” or “false.”
  • If the ChildrenCount of MyBox is 0, the function returns “true.”
  • We go through each child Box in MyBox, and we call ourselves passing it as an argument. If the function returns true, we remove this child from MyBox.
  • At the end, we return whether or not MyBox is now empty.

So, if we call this function on the Root Box, the Root Box will never be removed from the Tiler, but any empty boxes it has will be. Hooray! We just need to run this any time our window layout changes - a.k.a, a window opens, closes, gets moved to a different workspace, etc.

What we can do from here

We already have a pretty advanced window tiler at this point. It doesn’t take too many resources, but it’s very powerful. What else can we add?

  • Workspace switching: We can add the ability to move windows between workspaces with a keypress.
  • Window moving: Press a key, select another window, and the selected window gets split and the Active Window gets placed in the new area.
  • Swapping: Same as above, but no splitting. The windows just get swapped.

Further optimizations

Another optimization we could do, since all windows would have a fill value of 100%, if a box (that isn’t the root) has only one child window, that box is removed from its parent, its window gets placed in its parent, and so on, until there are no child boxes that have only one window.

Conclusion

So, now we have a tiling window manager. And I’ve got a lot of coding to do tonight.

Getting through school with RP

2018-11-19 00:00:00 +0000

As some of you may know, namely those who have been following The Peacenet and Bit Phoenix Software since the beginning (even before the rename), I am legally blind. I have a degenerative eye disability called Retinitis-Pigmentosa….and good God, I am so glad there’s an official acronym for it - RP. That’s what I’ll refer to it as for the rest of this article. I just wanted to make sure people know what I’m talking about when I say it, and that I suffer from it.

Today I realized a few things that I felt like talking about. Mainly things that do and will help me get through school without wanting to pull my eyes out of their sockets. So I figured I’d write about those things and hopefully give other people some advice on how to advocate for themselves and how to get through it.

First, something philosophical.

Just a few hours ago I was having a conversation about my eyes with one of my teachers. To explain a feeling I was having, I asked her a very philosophical question. Actually, I borrowed it from a Vsauce video.

The question asked in the video is “Is your red the same as my red?” The video’s thumbnail featured a red strawberry next to a blue one. The video explains that one simply cannot interact with someone and ever realize that what they see as red is not the same as what you see. There is no way you can explain the color “Red” to that person and cause them to see it differently.

You could say “Well, red is a warm color.” Well, as far as they’re concerned, they see “warm colors” the same way you see cold colors. So how do you explain what a warm color is? It’s not hot to the touch, it doesn’t burn you, it won’t cook your dinner. You could say “Fires are warm, they can be red,” but then how do you know that the person doesn’t see “red fires” as “blue fires” while thinking they’re red because that’s how they were taught from birth?

Okay, I’m rambling, but it’ll make a lot of sense very soon. Because my first piece of advice is this:

Teachers, other students, etc., will never understand how you see.

You’ll find that there are many things you can still do, even if a little slower than others, that you can do without anyone ever knowing you are blind. For example, I’m writing this article on a computer with nano, a command-line text editor. Yes, my colors are very high-contrast, but it’s a command-line. People expect that. So if someone were to peek at my screen and see me writing this, without knowing what I’m writing about… they will never understand just how differently I see the world compared to them.

So, when someone does know you are blind and they ask you about it, try your best to help them picture what it’s like if they ask you what it’s like. But do realize they’ll never be able to fully imagine and understand it, that’s just the nature of reality.

This also means that you will have to be very careful when explaining to a teacher what you need to be able to work as efficiently as possible. Because, my next tip is:

Learn to self-advocate.

If you know what you need, ask for it. Do not assume others know. IF you need large print, make damn sure you get large print. If you need to take a break from a math test because your eyes feel like they’re fire-y stones, take the break. These sorts of things aren’t about what you WANT to have, they’re what you need to have. It’s not like you just want to take a break because you want to think, you need to take a break because your eyes are in physical pain from being strained. Your health, therefore, is far more important than that math test.

And if you’ve self-advocated, and your teacher(s) still give you hassle, they are in the wrong. This is even more true if you have an individual education plan, (which if at all possible you really should have), because that is official documentation about your condition and what needs to be done to accomodate you. If your teacher(s) aren’t even following that, they’re seriously in the wrong.

This will even help if you’re in a similar situation to me where I’m acing college assignments in a dual credit course but getting 60% marks in my Grade 11 Math. It’s not that I don’t understand the work, it’s that my eyes are making it hard for me to read it. You should never be penalized for your condition getting in the way. Especially if you’re excelling in other areas that cover similar (or more advanced) material. Logic and common sense will overpower the grade your teacher gave you.

Learn computers, and learn to code.

If you’re in the early stages of RP or your eyes are still capable enough to not need a lot of support, computers and code are your best friend. Get yourself familiar with their inner-workings. Learn Linux. Learn Windows. Learn how to work in a text-based environment. Learn how to navigate without a mouse. Learn all the keyboard shortcuts/hotkeys for common things you do.

Learn a programming language. Learn how to quickly write command-line and graphical programs. Learn various image processing algorithms. Learn as much as you can while you still can, and get comfortable with it all. It’ll be really handy.

Because, when you get to the stage I’m at where severe eyestrain is a huge issue, you’ll be able to be EXTREMELY efficient doing your work if you can do it all on a computer and have all the important hotkeys memorized. If you can memorize your operating system’s accessibility tools and their hotkeys like I have, even better. If you can set your own and be comfortable with them, even better.

Not only that, but if you can think in code and write it, then that’s a pretty freakin’ easy way to prove your understanding of a concept, for example, in math. If you can write a program that parses and factors out polynomials for you, then you’ve proved multiple things.

  1. You can work a computer.
  2. You understand how to factor a polynomial expression (computers are only as powerful as their users).
  3. You can apply that knowledge into something else.
  4. You can effectively communicate that knowledge, even if not in a spoken language. You effectively taught a computer how to do it, and if you can do that, you can teach a human.
  5. Granted there’s no bugs, you have a VERY effective answer-checking tool. Not only that, but you’ll have something cool to brag about.

At the end of the day, your teachers are NOT grading you on your ability to read (except for English.) They are grading you on your ability to:

  1. know and understand the material
  2. be able to apply it to the real world
  3. be able to think about how to achieve a task using the concept
  4. be able to communicate what you know/understand, and what you’re thinking, as you answer a question.

If you can write code to help you get through the work more efficiently, awesome. If you can write a program to do the work for you, you’ve effectively covered at least 3 out of those 4 things.

After learning to think in code, learn braille ASAP.

If you have a degenerative eye disease like RP, one of two things are going to happen. Your condition will either stay the way it is, or it’ll get worse. It won’t magically get better. Such is life, but we can still prepare for it to get worse. Since you can think in code, you can very easily learn braille.

In braille, much like Unicode, ASCII, or The Peacenet’s terminal, you have codes for the various letters for the alphabet. Unlike the aforementioned digital encodings, though, braille is physical. You don’t read it, you feel it. And there’s a limited number of combinations of dots they are able to use to construct letters, numbers, etc.

So what they’ve done, is they’ve created certain “control characters.” In braille, you have all your usual alphabet codes, then you have control characters that say things like:

  • this next set of characters is a number
  • this next letter is capitalized
  • this next word is capitalized
  • this next sentence is capitalized
  • etc.

If you can think in code then you’ll be able to intuitively be able to memorize both the regular alphabet codes and the control characters and you’ll learn to fluently read braille very quickly. If you think about it, they structure it the same way as something like ANSI - some characters and sequences are really just instructions for the computer - but they have a lot less “bits” to work with. Just think of braille as a really weird form of binary where one byte is 6 bits (8 bits if computer-braille, that’s something else) and one bit is a dot in a specific dot, if you feel that dot, that bit is on. Then it becomes easy to memorize all the different combinations of “bits.”

Okay, but I’m still a little upset about my condition.

That’s inevitable, we all have those days where we just hate the way we were born and wish we either weren’t born at all or weren’t born with the condition. Congrats, you’re a human being.

But that’s okay. Instead of feeling sorry for yourself or feeling hatred to your condition, and letting it make your day shitty, do these things if you can:

  1. Realize your strengths and remember nothing can take those away from you.
  2. Talk to someone you trust and tell them exactly how you feel.
  3. Do something that occupies your mind and helps you forget about your condition.
  4. If you feel this way while you’re in the middle of an assignment, put that assignment away and take a breather. It’s not worth the extra stress. If it comes to it, ask your teacher if you can use the washroom even if you don’t need to. Get yourself out of that stressful environment, even if just for a few minutes. Your grades and your mental state will thank you later.
  5. Put those feelings into an article like this one. Or even just keep a personal diary.

The important thing to do is to have trust in someone so you have the ability to tell them how you feel, instead of internally breaking down and feeling like you have no options. If you can find trust in a principal, teacher, guidance counselor, learning resource coach, or even your best friend, you have a chance of having more options than you think.

Find a hobby and obsess over it.

If you can find something you absolutely love doing, and you can obsess over it, and it’s something healthy, then you’ve always got something to help get your mind off everything.

In my case, that would be programming. And that’s good, because if you can become really passionate about something that is seen as a legitimate career, you are set for life no matter what anyone says.

Use that hobby to get you into a dual-credit course.

If you have a college nearby, and they have dual-credit openings, try to get into one that aligns with your hobby and passion. This will give you a feel for what college is like, it will let you learn even more about that hobby, and you’ll get both a highschool and college credit out of it. Doing really well in that course means that, as long as you finish highschool with passing grades, that college is going to look at your dual credits as proof of skill rather than your highschool marks.

Universities aren’t as friendly, they’re really anal about your marks and your skills. But a college will use common sense and logic. If you’re getting poor marks in grade 11 math but you’re getting consistent 100%’s in a dual credit college programming course, and the college knows about your condition, they’re going to look at it this way:

“How the hell are you acing this programming course but with a shitty math mark? Oh, your highschool wasn’t accomodating you as well as they could’ve. Fuck ‘em, you’re in.”

So basically, doing dual credits makes highschool easier to get through and makes college easier to get into.

If you get through one dual credit, take another.

Whether it be the next part of the course you just took, or a completely different course, take as many dual credits as you can. You’ll need a general elective, so you can get that out of your way in the dual credit program. Not only that, but the more you can get done in the DC program, the less you have to do in the real college program, and thus the more time you have to give your eyes a rest during college. That’s a win-win-win for you.

If you can at all avoid it, avoid phys-ed.

If you enjoy it, then, fine, enjoy it. But if you’re getting sick of getting balls hurled at your face, get out of there. I’m not sure about other schoolboards, but in mine, you are able to be exempt from at most three mandatory courses. If you can, make sure phys-ed is one of them. You can either take another course in its place, or you can do what I did and take a learning resource period and have extra time to rest your eyes or finish up assignments.

Study periods are your best friend.

You casn study at any time, but if your eyes are bugging you, don’t. Use that time to rest them. Put music in, put your head down, etc. Just let the time fly by.

Have a headset and smartphone at the ready.

If you have a headset with you, then you can use a screen reader without interrupting the class. If you’ve got a phone, quietly sit it on your desk and have it record the lesson. Then you have full audio recordings of everything you need to know for the course, and you can have assignments read to you.

Also, if your eyes physically shake like mine do, it’s always fun to listen to drum-and-bass music while you work and notice that your eyes are shaking in perfect sync with the music.

Finally, don’t let your highschool grades matter.

As long as you can prove an understanding of the material, you don’t need to be a straight-A student in the grand scheme of things. That only truly matters if you go into university. Furthermore, sometimes, your grades will suffer if your teacher just plain doesn’t understand you can’t read half of the work. That’s their issue, not yours. A proof of knowledge is all you truly need.

In conclusion…

That’s a long one, but, at least all my thoughts are out. To be honest I’m not entirely sure if that’ll help many people or not, they’re just things that personally help me.

Renaming Watercolor Games

2018-11-09 00:00:00 +0000

As the title suggests, I’m renaming Watercolor Games. In case you’re wondering what I’m babbling on about, Watercolor Games is the name of my little game development group, I guess. Okay, well, maybe I’m a little more enthusiastic about it than that. We’re the developers of The Peacenet, and we used to be the devs of a game called ShiftOS (more on that later). First, some backstory.

When was Watercolor formed?

We were formed in August of 2017. Before then, I had been working on a game called ShiftOS, porting it to MonoGame. The game had, for the most part, poor reception. However, there were some people that stuck by despite the countless times we were trolled, hacked, spammed, or otherwise messed with. But, eventually, it had to give. The first week of August 2017, ShiftOS was officially killed off and the team behind it seemingly died as well.

…For a week. In that week, I was repurposing the code we had written for the MonoGAme port into a project codenamed Project: Plex, soon to be called The Plexnet, and later on, The Peacenet. In its early form, it used the Plex Engine, a rebranded ShiftOS engine. This became the Peace Engine. While we had codenames for the things we were working on and eventually came up with permanent names for them, there was one slight issue pertaining to names…and it was the one we, as a team, went by. Watercolor Games.

The problem

The problem is really this: What do you think of when I say “Watercolor Games” to you? If I hadn’t told you anything about it, you didn’t have a search engine to go research it, you just had your imagination, what’s the first thing that comes to mind when I say “Watercolor Games” to you?

Well, I can’t tell you what you imagine but I can tell you what I was thinking of when I chose the name. I was thinking of, and, in fact, listening to, this song by Australian drum-and-bass band “Pendulum” titled “Watercolour.” Needless to say…. That name really has nothing to do with who we are, it’s just a shallow reference to a song. And over time I started to prefer to identify with The Peacenet more than Watercolor itself, and today, I decided it was time to change our name.

The idea behind it

When thinking of a new name, I thought about the following factors:

  1. Is it memorable?
  2. Does it roll off the tongue?
  3. Does it symbolize our history and what we’re all about?

When addressing idea 3, I thought back to our history and looked toward Greek mythology. In Greek mythology, the Phoenix rises from the ashes of its predecessor, being revived. This reminded me of how we, Watercolor Games, rose from the ashes of the fallen ShiftOS development team, and were subsequently revived as a team. So, I found a keyword that symbolizes our history. Phoenix.

I wasn’t done there. First of all, I didn’t want us just to be named “Phoenix,” for two reasons.

  1. My favorite TV show, MacGyver (the 2016 reboot) took that with the Phoenix Foundation, which, by the way, was the inspiration behind the naming of The Peacenet’s in-game “The Peace Foundation.”
  2. Too many existing software companies named “Phoenix (insert company word here).”

So, I needed to come up with something that symbolized that we program games as well. Immediately, three words came to mind. “Code,” “Bit,” and “Byte.” I started combining them with the word “Phoenix” in my head, saying them both out loud and in my head to see how well they sounded. “Code Phoenix,” “Bit Phoenix,” and “Byte Phoenix.” I decided that “Bit Phoenix” rolled off my tongue the easiest. So, it won. I had our new name.

Finally, the rename.

Watercolor Games was formed in August of 2017. It rose from the ashes of the ShiftOS development team. It gave new life to both itself as a team, and its projects, The Peacenet and Peace Engine. Its identity died peacefully in November of 2018, just over a year later. Rising from the ashes of its old identity, forms Bit Phoenix Software. And just like Watercolor, we will continue to fulfill our mission to make amazing free, open-source games, proving that even something as simple as sheer determination can accomplish anything. And we, together, look forward to doing it for many years to come.

Peacenet 'Ubiquity' Menu: A Proposal

2018-10-23 00:00:00 +0000

Hey guys, so I came up with a pretty neat idea for my game, The Peacenet. I’ve always wanted the game to fully immerse the player in Peacegate OS from the moment they launch the game to the moment they shut it down.

While watching a video on Ubuntu, I came up with an idea: make the main menu feel more like an Ubuntu installer - hence it being called the “ubiquity” menu.

Read the PDF where I go into more detail here: Full proposal

Adventures in Dual Credit

2018-09-18 00:00:00 +0000

It’s not really often I write a full-on blog post about literally anything to do with school. I haven’t even written a blog in a couple years, all the way back in the ShiftOS days. But things are a lot different nowadays than they were back then. So I think it’s a good idea to do this.

So, what exactly do you mean by “Dual Credit?”

Actually it’s a pretty cool concept. Basically, rather than taking a regular highschool course such as math, art, music, etc., a Dual Credit course allows you to get a feel for what it’s like in college by taking a single semester at the college along with your highschool courses. You only take one course in that college semester, and it counts as both a highschool credit and a college credit - hence it being called a Dual Credit.

In my case I took a course in game development, which, as you may know, is something I’m extremely interested in. So let me tell you about it.

People

There’s a big difference between classmates you meet in highschool and the ones you meet in college. In highschool, people are mostly taking the same courses whether they’re interested in it or not. There may be different levels and different focuses of each subject, but… everyone’s taking 4 english credits, 3 math credits, 2 sciences, a Civics & Careers, a Geography, a French, and a History course. At least that’s how it is in my schoolboard. So, basically, you’re going to see the same people a lot. And they may not be extremely interested in the subject.

You’ll hear people complaining that they don’t want to be here. You’ll hear them say they’re going to fail. People will disengage from lessons. People will get distracted and distract others. And you know what? I’m guilty of it. Because I feel the same way about highschool as a lot of those people because I’ve experienced college already. I don’t want to be in highschool.

In college, the people you meet actually are invested in the courses you take with them. They’re paying to be there, or are in a dual credit. They chose to be there. Therefore, people will focus on lessons a lot more and help people who are struggling way more often. People are more willing to share textbooks with those who can’t afford them, people will strike genuine conversations with you about what you’re interested in.

I’m not saying that this doesn’t happen in highschool, but, you do hear a lot more negativity in a highschool class than you do a college one. And for me at least, everyone in my college course have EXTREMELY similar interests to me and thus I feel more social.

Computer hardware

Ever tried to use a school computer to get work done and waited 20 minutes for it to log in because it’s a Dell Optiplex that’s probably older than you are? Guess what? That crap ends in a dual credit/college course… Especially for a gamedev course.

So here’s the specs of the computer that I’m writing this article on, the same one behind Peacenet as well.

  • CPU: AMD A10-7700K with Radeon R7 Graphics @ 3.4GHz
  • GPU: NVidia GeForce GTX 1050ti
  • RAM: 8GB DDR3
  • SSD: 240 GB
  • HDD: 1 TB
  • CPU cooler: Cooler Master Hyper D92

Now let’s let that sink in for a bit. This computer isn’t that bad of a desktop. Could use some more RAM, and a better CPU, but it’s still running really fast. But it comes nowhere close to what I use at college! That thing’s got double the RAM (and DDR4 too, so, faster), and a really beafy Intel Xeon processor that completely destroys my A10.

That CPU alone contains at least 100 highschool computers if I’m being absolutely honest. Needless to say I nerd out all the time when I get to that computer.

IT

Okay, so, the college IT guys are badass for lack of a better word. Like, absolutely amazing. I’m partially blind, and over time I’ve developed a way to COMPLETELY get around it while using a computer.

Every program I use, if it has a dark theme, that theme gets used. If not, Windows has a decent screen magnifier with inverted colors, and Compiz has this feature built in with the Negative and Enhanced Zoom Desktop plugins for those on Linux. Don’t ask me about macOS.

The issue is, the way school/work computers are usually set up is they are wired to a centralized domain. This means that when you log in, your settings and profile are pulled in from a remote server rather than the computer you’re using. So, when you log out, those settings don’t save. So my accessibility settings would be wiped.

……Until I tell the IT guy nearby about those things and he makes it so that my account specifically has its settings stored locally on the computer I use instead of on the domain so that when I log out and only when I do, my settings are saved on that specific computer. So I basically have my own reserved computer in the lab we work in that always remembers any of my settings so that I’m ready to go whenever I log in just like everyone else.

Conclusion

This is really just a part 1 of this little adventure of mine, and really a test of my new site. If you guys want to hear more about it, I’ll most likely post another article on this topic after a few more weeks of me experiencing it. :)

Page: 1 of 1

Previous Next