Global Game Jam 2023: SICKHACKS.root

This image has an empty alt attribute; its file name is SickHacksLogo_bigger.jpg

Global Game Jam happened again, and this year’s theme was “Roots”. I started pretty early on this one, basically the day after the theme announcement, which happened on the 28th of January. To be honest, the theme kinda stumped me a bit at first, partly because I was doing some prep work prior to the jam that was focused on a hoverboard mechanic.

A small test of the hoverboard stuff.

Eventually, myself and my friend struggled so much for ideas that we just looked up the definition of “Roots” to if there was anything that would give us any inspiration. And I happened to stumble across the following:

ROOT
COMPUTING: A user account with full and unrestricted access to a system.

Putting 2 and 2 together, I suggested making a hoverboard game in cyberspace.

First downhill test.

Early on the idea was to have a player constantly go forward down a track, avoiding obstacles. That was a pretty general core plan. Problem one: downhill movement. As you can see in the video above, it kinda works but it’s slow and stutters a lot. Furthermore, the original turning code from the previous prototype would go against the constant downward trajectory I was looking for. But more importantly, the track I made wasn’t straight, so the constant forward force I was applying would send the player off the track soon after.

There was one solution I knew would work well enough to keep the player on track, and that was to place waypoints along the surface of the track and aim the player along those, while maintaining a forward force in relation to their rotation.

My first implementation was pretty horrible. A lot of stuttering movement and the player curving into the waypoints excessively hard, killing the speed and handling. My first implementation relied on rotating the player’s forward using Vector3.RotateTowards(). After some changes, I switched it to Transform.LookAt(), and that worked significantly better. But there was still a problem. In the original test, from the video above, the board would match the downward slope of the map and match the slopes on the side. With the new implementation, the downward slope is matched, but now the player stays upright when on the sides. There’s also still the issue of the player turning into the waypoints themselves, but it’s pretty rare.

The curved/uneven map used in the first level ended up being a real pain for me, partly due to the restrictions I placed on myself. The waypoint system was just the first problem, the second issue was scaling. Simply put, importing the level directly from blender was too damn small so I had to scale it up, and then rotate it a bit. But when it came to placing objects on it, that was just a crapshoot. Every obstacle on the first level is placed and rotated by hand, and each one has different values for rotation due to the unevenness of the model. It’s way the placement is so messy.

Gravity was the big issue. The short of the issue is that the player cannot get down the slope on their own gravity fast enough. So I did two things, added the forward force (Previously mentioned) and a downward force. This kept the player moving at a good speed and stop them from going flying off when they hit a ramp. It isn’t perfect though, it’s still very much possible to go absolutely flying.

There was something I discovered while rewriting the code, and well here’s a video of it.

Rewrote the code and made some changes so I could perform tricks.

While I was adjusting some code, I was looking at my turning code from my original hoverboard code from the first video on this post. It works by applying torque on a specific axis, the Y axis (Or Vector3.up). As a bit of a fool around, I changed that axis, and noticed that it that it would make the board flip around as if I was doing tricks. But with the first implementation of my code, I knew it wouldn’t be possible to do. So when I rewrote it, I made sure to accommodate this feature. As you can see, it really elevates the gameplay. It’s my favourite feature.

I previously mentioned that I was working with my friend on this, well that isn’t strictly true. Most of the game is a one-man-army effort on my part. Although we started early, my friend decided that his contributions to the game would be minimal until the absolute last minute, so in the extra week or so that we had, he spent 4 or 5 days doing nothing. This was a problem, because my friend and I have an arrangement where we switch roles for each game jam we take part in. This time it was me on the programming and him on the art. Unfortunately, when you require specific assets, like a track or obstacles, and the person in charge of that isn’t making them, it slows down development.

So I made most of the assets myself. Which was interesting. I’m not a great modeller, and you can tell that the assets below are pretty simple. What I have been getting good at is the material work. So despite the low detail look, the materials look pretty good.

I know it seems like I’m moaning about my friend here, but I was very frustrated at the time and I’m still upset about it because I think I could have done more if I wasn’t forced to spend my time generating art stuff.

After learning some lessons from making the first level, I decided that the second level should be a flat plane. There’s only one waypoint, right at the end of the map, so the camera no longer breaks and stutters trying to follow each waypoint. It also fixes a small issue with the lateral movement occasionally being slower than it should.

The big benefit though is significantly easier placement of obstacles. I no longer need to adjust each object individually to fit it correctly to the level’s surface, and additionally, I can bulk edit large amounts of obstacles easily. Level generation become much easier once I switched to this model.

But, it is less interesting to look at. With further experimentation, I might be able to find a good middle ground to have interesting downhill tracks but with the ability to add obstacles to it much easier. That said, I really can’t say enough how much better the second level feels to play compared to the first.

The last level is just a cutscene due to a lack of time. It’s also the only real contribution my friend made to the game. And it was a massive pain in the arse to implement. In fact, I actually finished the last level before making the second level.

But let’s get into what it is and the implementation, it’s quite a story.

The level is a rail going up a tree root. Not interactable at all, more-or-less a cutscene. The rail is a normal mesh and on top of it is a bezier curve. Here’s the problem, Unity doesn’t recognise a bezier curve as a mesh. So I had to find a script to export the curve as a series of coordinates into a CSV file, load it into the game as a text file via the resources folder, convert those coordinates into Vector3 data, making sure to swap the Y and Z axis for each one. After that, I then can to scale the vectors based on the scaling of the objects it needed to be planted on, and then convert it into world space.

Now, all of that is easier said than done, but it took me a considerable amount of time to get working. It was worth it in the end, but I really should have figured it out days prior. I had to make it with less than 24 hours before the deadline.

I like to say that a lot of what I do is a “Learning experience”, and that gives me some motivation to challenge myself during these events. And this was a pretty big learning experience. I learned a lot of manipulating the physics system, generating assets and models for a game (Moreso than the 7DFPS jam), and generally how to build this type of game.

Since GGJ ended, I’ve had this game on my mind and I want to keep working on it weirdly enough. At the very least, I want that first level to play smoother and fix the issues with the waypoint system, or find a better solution to the problem. Perhaps I’ll experiment a bit.

Anyway, that was the game and some of my experiences with GGJ this year. All in all, probably the most productive GGJ so far. If anyone reading this thinks I should continue developing this game, let me know. I would love to get more feedback.

That’s it for this post, bit a long one. Till the next one.

-Adam

18/12/2022: 7 Day FPS Jam

I made another game for another game jam, check it out.

It’s not a great game, but it’s my third attempt at a first person game, and my first attempt at an FPS. Unfortunately the date snuck up on me quicker than I expected, and I spent late November and early December being unwell to the point that affected my productivity. So a lot of the ideas and mechanics in this are a little rushed and half-arsed. But as a proof-of-concept, it has some charm. If nothing else, I made a Liminal Space Meme Game with guns.

As I said, I was sick at end of last month and the beginning of this month. Literally the day of the last blog post was when I started to feel poorly. By the evening, I had a really bad fever and even vomited. Very unpleasant. It ended up lasting for about a week, although the coldsores lasted a little longer.

Well from one depressing thing to another, England got beaten by France in the World Cup. I really am not going to live to see the day they’ll win again. I could complain more, but it’s not really worth it.

Now for something completely unrelated; I’ve been getting a considerable amount of Blender tutorial videos from YouTube’s recommendation algorithm. Mostly ones about materials. I’ve been thinking about getting into making textures and stuff, maybe try and sell them as asset packs for Blender/Unity. That said, I probably need to find some unique ideas of things to make to compete with all the existing stuff out there. Maybe I’ll make some assets to use in Godot as well.

I might harvest the stuff I made for the recent jam game and sell off some of that. I imagine there would be a market for the guns in there. But I will need to split the profits with the friend who made the models. Although first we need to improve and fix the models a bit, give them correct sights and improve the animations and such.

Right, last thing: Rotaction is 25% off until the 2nd of January. Feel free to grab it at the reduced price if you want to support me.

I am working on the year end blog post with all the games I played and the top 10s, so look forward to that. Later.

-Adam

28/11/2022 – Analogue Pocket GET

Hello again. A thing I bought a year ago finally arrived, and it’s pretty sweet.

The Analogue Pocket is an FPGA emulation device that specifically plays GameBoy and GameBoy Advance games. FPGA is hardware emulation, not software, so it leads to greater accuracy in terms of emulation. This generally means less visual glitches but also has the downside of emulating the slowdown in games that would suffer it on real hardware.

Although you can play real cartridges on this thing, the OpenFPGA side is the most interesting part. You can just load FPGA cores made for it and then boot games off the Micro SD card. I have Neo Geo, NES, SNES, and Mega Drive cores on mine. Pretty much all the games I’ve tried have worked perfectly, and GameBoy games especially look gorgeous on the screen.

My major issue with the thing is that I don’t find it particularly comfortable to hold for long periods of time. Much like actual Nintendo handhelds. It’s not as bad as the 3DS or Switch JoyCons, which cause literal circulation problems for me, but there’s still things I would have changed.

I mean there is one more issue; the price. I think I’ve spent £400 on the thing all-and-all. It was £300 for the thing and dock, plus shipping, then the FedEx tax was £70 (Customs charges are a fucking scam), and then another £40 for a Micro SD card and UK USB-C plug. Yeah, it comes with a US plug. Be fair warned.

But I like the thing, and I’m gonna enjoy playing it. I actually did a stream soon after I got it where I played a bunch of games, check it out:

In other news, Indie LIVE Expo is happening soon. Why am I bring up here? Well Rotaction is going to appear during the first day when they discuss currently released games, so keep an eye out for it. But this is the first time one of my games has appeared at a major event, although it’s the second time it’s been promoted. The event will be streamed on the 3rd and 4th of December. Check it out, there’s loads of cool games.

Now, I’m going to talk about what I’m currently working on.

7DFPS (7 Day FPS) Jam is coming up in December, and I’ve decided that I want to take part. So I’m putting together a few things to practice and learn how to make stuff for it. I’m looking at stuff like Probuilder and Pro Grids for fast generation of levels, and learning how to do raycasted bullets with appropriate effects, as you see in the video above.

Now I know what you’re thinking, the Jam hasn’t started yet and I’m over here making stuff. Well, there’s no rule that says I can’t work on stuff a little early and most of this work isn’t going to be used in the Jam game. But it’s better I figure out these problems now, rather than during the Jam.

As for the side project I’ve been working on:

Well, progress is slow. I can shoot a bow now, but it’s a giant mess. Unity’s Rig Builder tool is such a giant mess to use that making it this far is generally surprising for me. But to explain the issue, layers upon layers upon layers. At some point I had to undo a lot of work and replace it with a canned animation, which is how I got the bow aiming and firing to work. Although I can explain some of that as well. When I started with the rigging, I was basing it on the idea of driving the player animation in relation to the bow. That was dumb, now I’m driving the bow animation in relation to the player, which is simpler to implement and has lead to better results.

Well that’s it from me for this time. Now I have to publish this before my power goes out. Which is a thing that’s happening today. Fun times. At least I have some books to read.

Till next time.

-Adam

09/10/2022 – The Blog Is 10 Years Old Today

10 years ago today, while I was at University, after 4 days of trying to link up my domain to my hosting; this website was born.

And that’s all I have to say on the matter.
I’m kidding.

I don’t really know what to say. My situation is very different these days, arguably worse. The MyGamingCommunity forum died, MoA moved to Discord, GameTrailers died, I got way into anime and started learning Japanese, I finished Uni in a horrible state, started becoming an indie dev, and then I started streaming again. Sometime after that, the COVID bullshit happened, it fucking made everyone’s lives Hell including me. Then I got a dog and my depression lessened.

She’s 2 years old now.

This would usually be the point where I would go on about what I’m currently doing and things for the future. But you already know what I’m currently doing and I have no idea what the future holds. I do know I’m gonna need to start earning some money. I’ve been thinking about stuff like Patreon and Ko-Fi lately, but I don’t know if it’s a good fit for me and the things that I do.

I’ll work it out.

Anyway, in other news, I took part in another game jam and made this thing:

Basically a Katamari-lite. Give it a go if you want.

As for the side project, well I’ll be getting back to that either next week or the week after. So keep an eye out on Twitch for it.

Anyway, 10 years. Hopefully I can get the funds to keep it running for another 10.

-Adam

27/09/2022 – 7 Years Late

Well the weather is getting colder, so I guess summer is finally over. The season that is, my dog of the same name is doing fine.

7 years after graduating university, I have finally updated the “Uni work” pages of this site. Better late than never I guess. Annoyingly, there’s still a lot of stuff missing from the pages because there’s stuff I just don’t have anymore, or can’t post. There’s also things like documents and such that aren’t programming related.

Either way, it’s something off my whiteboard.

Anyway, you might be wondering what’s going on with my side project. Well you’ll have to keep waiting because I’m working on something else now. A certain place I hang out on, on a certain anime image board started a Asset Jam, a two part game jam where the first part has users submit assets for games, and then the second part has users make games with those assets. Well I didn’t make any assets for the first part, but I am making a game.

Behold.

The beach ball of doom.

It’s a game I’m titling “I MUST CONSUME”, and it’s basically Katamari. But instead of gathering items in a massive ball, you absorb them instead. I’m using the game as an excuse to get familiar with Cinemachine and a few other things. I was thinking of migrating the camera system in my side project to Cinemachine, and used this project as a test bed for it. I’m fair happy with it here, so I think I will be doing the work needed to switch.

I’ve got until the morning of October 15th to finish it. Hopefully I can get it done by then. As usual, I’ll be streaming development on Twitch.

Nothing else is going on really. Still trying to find a game industry job, at least they’re actually replying to me now, even if only to reject me. I’ve started uploading some of my regular gameplay streams to my YouTube channel, and getting some decent view numbers. I think I’ll be doing more of that, especially for the demo & VR streams I do on occasion. Maybe some highlight compilations at some point too.

I was warned that gaining viewers solely on Twitch was a fool’s errand, and they were right. So maybe I’ll try this method. On that note, I am thinking of streaming my game dev stuff to YouTube as well, although I don’t know what the state of restreaming is these days. Maybe I’ll take a look at Restream.

That’s it from me. I’ve got a busy few weeks and maybe months ahead, I’ll try and post when I can. Later.

-Adam

09/09/2022 – ROTACTION IS OUT!

Get it on Google Play

After 5 or so months of development, Rotaction is available for purchase. I hope you guys enjoy it.

Long Live The King

The Queen died yesterday. Although it’s likely you already know that. 96 years is a pretty good run, and a lot of people would consider her to be the rock that held the UK together.

It’s a new era. I’ve not a fan of Charles, but I can’t give him too much grief considering the size of the shoes he now has to fill.

I kind of wish I wasn’t releasing Rotaction literally the day after all this. But it can’t be helped.

Side Project Progress

It’s coming along. Slowly but surely. Learning a lot about inverse kinematics, Unity’s animation system, and more. Gonna be learning the animation rigging system next to get this bow working and fiddle around with the animations more. I still haven’t got far enough with it to show off yet, but hopefully I’ll have something soon.

Hell of a week. Play Rotaction, enjoy it.

-Adam

02/09/2022 – Rotaction Is Complete! Release Date!

After 5-6 months of development, Rotaction is complete and ready for release on September 9th!

It will be available for Windows, Linux, and Android. You can buy the game from the Itch.io page or the Google Play Store page once it is available.

It’s been the most fun project to work on so far. Probably because there were few issues that I needed to deal with or just the fact that the overall complexity of the game was relatively low. That said, rarely ever does a game go from being an idea in my head to being a full product, and retains the art style and gameplay that I originally imagined.

I’m happy overall.

Yet Another Side Project

Having fun with Blender

Over the past few months, the YouTube algorithm has been continuously feeding me various tutorials for things. It started with Blender tutorials for modelling, then shaders. The image above being a tease of the thing I’m working on. After that, the Unity tutorials starting coming. However, these were all about one subject: procedural animation.

I got interested, and decided that I want to make a playable prototype of a game idea using these techniques. However, I’ve underestimated the complexity of this project. To start off with, I have to build a 3rd person character controller with various movement options, and the have it interact with various objects and the large monster I’m going to put in it. This monster will be driven mostly by procedural animation.

The player was originally going to be driven by this system, but then I discovered Unity’s Animation Rigging tools that allow me to use IK targeting in tandem with the animations I already have. I haven’t started using these tools yet, but it should be interesting.

I’m going to try and document the development of this prototype, showing all the different systems and how things work. I’ll be streaming development on Twitch and posting it to my new game development YouTube channel.

That’s all for now, I’ll leave you with this.

-Adam

13/06/2022 – I Have A New YouTube Channel

And you can visit it right here.

So why did I make a second YouTube channel? Simple reason really, there’s stuff on my gaming channel that I wish to separate from my game development material. You may have noticed that whenever I posted game dev videos here or on Itch they were always an unlisted video.

I didn’t really want to clutter my gaming channel with development stuff because I thought it might cause an audience imbalance. So I’ve now separated them.

I’ve currently uploaded a few videos I’ve previously posted about Game Jam games and older projects. Going forward I’ll likely be posting videos about new and current projects among other things. Maybe even some tutorials, depending on how I feel.

The original channel isn’t going anywhere, if anything I’ll be uploading new stuff more frequently to it as I clip and highlight stuff from games I play on my Twitch channel.

There’s more things to talk about, but I’ll save it for a future post.

-Adam