Trojan-/Ghost Defense


I was part of creating two separate video game projects in my school days, and neither of them is in a playable state any longer. Before these projects, I hadn't finished a single game in my life, Though, I had done countless prototypes in tools such as Click&Create, Adventure Game Studio, and by using C++ and SDL—but, never had I finished anything.

Let's make a game


It all started in the early 2010s with a crude drawing by Tomi. The location was the University of Applied Sciences in Jyväskylä, Finland. We were both bored in a math class when Tomi drew a square blob with chicken feet, he named it Troijalainen or Trojan in English. For some reason, this amusing character stuck in our minds for a year or two and eventually found its way into our desktops when Tomi and I attended a game programming course. We had an assignment to create a game as a team.



We wrote a 17-page design document. Before setting to making Trojan Defense, we juggled with ideas including a 3D game about moles making tunnels into the ground, it was technically intriguing, but reminded us too much of a classic game called Molez. I fleshed out the looks of our Trojan character, and together with Tomi, we crafted a backstory for it. Trojans were the enemies of our unnamed protagonist—an internet troll who was sent to a digital world. His sentence was to suffer for constantly trolling on the internet. His task was to clean the internet from malicious Trojans, with the intention of corrupting the internet. In detail, the player would need to prevent Trojans from collecting floppy disks and taking them into backdoors. The player would use his guns and firewalls to stop Trojans. 

With this story and game development course to complete, Tomi and I formed a group called Pandatom. We started making a 3D game with the Unity engine with little to no experience. I did all the graphics in 3DS Max and Tomi did most of the development. I also spent an unnecessary amount of wasted time implementing manually the A* pathfinding algorithm with C++, I don't even know why. It kinda worked but was filled with an exceptional amount of spaghetti code including variables named as shitplace. That whole branch was scrapped.



With that out of the way, we ended up using Unity's own plugin for pathfinding. In the end, we had a working prototype of an FPS game with functioning movement- and shooting mechanics, working pathfinding, insertable firewalls, 3D graphics, a weird-ass skybox, and a bunch of collectibles. But, what we also had was a pile of bugs—some being game-breaking. The school course ended and the project was scrapped. Trojan Defense was forgotten for a year.

Let's do it again


In 2016, I had the idea of creating the game again from scratch, this time in 2D to limit the set of problems and complexities. Juho jumped into this project and the group Basic Horse was born. Our engine of choice this time was a small one-man project called Pixel.js—only because I had misheard a co-worker at my workplace praising a library called Pixi.js. After months and months of trying to grasp this thing, I realized that the engine I was using wasn't Pixi.js, and it wasn't even finished.



We still ended up finishing the game, even after realizing that our core concept which was altered many times from Trojan Defense wasn't even that fun to begin with. Juho implemented visually interesting effects such as limited visibility with raycasting, and I did my best with the assets, music, and sound. We even had help from a guy called Mikko, he implemented a candlelight effect to make the scene seem a little bit more interesting to look at. 

But in the end—the end result didn't have much in common with its original ancestor, since Trojans were changed into ghosts, pathfinding was absent and there wasn't any meaningful story. The game simply wasn't fun to play. But it was a learning experience, it helped me to understand the necessity of planning things beforehand, the amount of work it takes to create a finished game, and that you cannot just mangle yourself out of a bad design, with a broken engine.