06/09/2024 – DD58 Cybersurfer Demo

As promised, here’s a new demo. It’s quite different from the last. The player now goes along the track automatically instead of being player controlled, and handling has been rebuilt for the 4th time.

And the obvious, a completely new visual style.

No more VRM models, no more green placeholder textures, no weird misaligned textures; the real art style is starting to take shape. There’s still a lot to do, but it’s getting there.

But from a technical perspective, what’s changed?

To begin with, look at these images. Can you see the problem?

The verts are not connected properly. This is a problem with the way I’m handling curved corners. When I manipulate the vertices to raise the sides, these unconnected parts would often cause holes. They were never connected properly. This was a side effect of how I was creating vertices in the first place, where I was getting left and right points and adding everything in between, but in a terrible fashion that involved a ton of lists.

As an additional point, I still needed to subdivide along the length of the track in specific sections.

So I rebuilt the track generation system. This time I decided to cut down the number of arrays managing the vertices on a line-by-line basis based on the length of a section of the spline. This also made it easier to connect it up, as I only had to look at the previous line of the array.

Connecting them up had to be done differently this time as well, so as to avoid those previously mentioned gaps in the mesh.

These images are the new triangle order for connecting these verts properly for subdivisions.

As you can see, it works a lot better. And the point behind this is that if I moved any of these verts up or down, they would still be connected without any gaps.

Added additional resolution along the length in different sections of the track proved to be much easier than anticipated, and the results are fantastic, as you can see. The horizontal resolution is a slight issue, as I can only go up in multiples of 2. In other words, 1, 2, 4, 8, 16, & 32. I cap it at 32, as anything higher would be unnecessarily detailed.

After all of that, I finally got back to making corners.

I quickly decided that trying to append additional mesh on to the sides was not going to work due to the colliders on the sides of the track. But with the new way of generating the mesh, it would not be as much of a headache to manage.

But then I had another idea: what if I used animation curves as data for the curvature for the track, as well as the easing between the flat and raised sections? It took quite a lot of hitting my head against the wall to get it to work, but the final result is extremely functional.

There’s more to talk about in regards to player handling, camera stuff, and so on. But I just want to write a few things on this specific aspect. I’ll be making a more detailed video on it soon, although it might take me a while to finish.

Check out the demo and let me know what you you think.

But with the demo out of the way, what’s next? Easy. More of this. And 7DFPS again.

It’s getting close to that time of year where I have to start planning out what I want to do for that. Except for the part where I’ve had the idea stuck in my head since about February. In short, it’s an expansion on the idea of moving a player through an environment with additional situations on top. Basically, creating a bunch of different scenarios that might be good for VR just to see how well they work.

There’s a lot of prep that needs to be done, a lot of it involving re-doing my previous 7DFPS game’s code to make the gun better to use. And to add a lot more guns. Although I’ll be keeping them one-handed, because two-handed guns in VR are fiddly as fuck unless you have some kind of lightgun that you can put the controllers in, I’d be concerned about the tracking at that point.

That will be available in December, but I’ll probably do a video about it soon after I’m done with the Cybersurfer video.

That’s it for this time. God knows when I’ll make another post, but I’ll see you then.

-Adam

10/06/2024 – New Stream Graphics & CyberSurfer Update

There’s been quite a long gap since the last one of these. I’ve just been so busy with everything that I haven’t had a chance to sit down and write one of these. Even while I write this, I have tabs open for scripts for at least two videos. Although one of them might appear in this post if I can finish it before this goes up.

With that said, here’s what I’ve been up to.

New Stream Graphics

I decided my stream graphics needed updating, but instead of just opening up Blender and going at it, I decided to spend some time designing my ideas before making them, which I think has led to a much better result than last time.

Let’s start with the game dev scene.

I’ve gone for a rustic-looking apartment looking over a cityscape. This scene has undergone a couple of reworks and changes since I originally made it. I’m showing its current state here.

Let’s start with the foreground first. There’s a desk with a decent wood material on it, a couple of props, a keyboard and mouse, and a mousepad. The keyboard and mouse models are not mine; I found those on the Internet. However, the textures are mine. It’s a plastic-like material with some grime added on top for believability. The mousepad is the camo pattern I like using, but with some additional texture on top.

There’s a picture of my dog on my desk, of course. And then there’s the two monitors. I made these myself, and they are, in fact, properly 16:9. They also use a plastic material, minus the grime. The screen is an LCD shader mixed with a Holdout shader. The Holdout shader allows the screen to be transparent when rendered, so I can put dynamic objects behind it like animated UI and such. I’ll get to that later.

There’s a brick texture behind the desk. I couldn’t make it as realistic as I would have liked, as it made my performance tank while navigating the scene, which was a real pain. Off to the left is glass, which slightly reflects the inside of the room but mostly just serves as a window to the outside.

Before I get to the outside, here’s the rest of the room you don’t see:

As you can see, there’s a couch and a couple of shelves, along with a carpet and ceiling. I had some ideas about reusing this room with different angles, but it’ll probably require more details if I want to do that.

Now, the outside of the room.

This is a procedural city made with geometry nodes. I followed a tutorial for this as I don’t really know what I’m doing with geo nodes yet. Either way, it’s better than what I was doing before with my shoddily made buildings. The scaling on the buildings is fairly inaccurate, and the glass warps the look of them a bit, but I’m willing to live with it.

Game Dev Cam Screen Example

Here’s the camera scene when all the UI is applied behind the rendered image. I’m pretty bad at making fake UI, but I think this looks OK for now. I might look into actually making a Windows Form application with custom graphics and using that instead. But considering the amount of changes this one scene has had since I made it, I think I’ll just live with it for now.

Overall, I like it, but I think there’s room for improvement. But at the same time, those improvements require me to further develop my own skill set. Plus, the lighting is a bit weird-looking, as the outside lighting doesn’t light up the room enough.

Moving on to the gaming scene now.

I designed this to look like a run-down arcade you might find in a failing shopping centre or motorway service station. Starting with the foreground again, there’s a table with a wood material on it and a brick material under it. The TV is actually the same as in my last layout, but with a Holdout shader on the screen mixed with a glossy shader over it to give it a proper look. There’s a plastic sign next to it with text that changes between scenes.

Behind all that is the rest of the arcade. The red camo material is used for the carpet, with some additional bits to make it look like carpet. And then there’s the cabinets themselves.

I just had to include a Rotaction cabinet, of course. SICKHACKS.root also makes a comeback, as Cybersurfer still doesn’t have an actual name. The other game is Tempo Catastrophe, a parody of the Time Crisis games, which seem to infest every single British arcade. And to top it off, a bog standard claw machine.

The latter of the two aren’t as highly detailed as they’re background objects, but they look decent enough in the final render.

Finally, on the back wall, there’s a text object with an emissive shader that I use as a sign, and an exit door that opens on the ending scene, which is a major light source as all the other lights are turned off.

I feel better about this scene than the game dev one. It’s come together quite well, although it did require a lot more effort with all the additional props needed. If I were going to change one thing, I would probably make it look more rundown, with some added rubbish thrown about. I’m also not too happy with the scaling of the room; it’s pretty bloody massive. Like a Megabowl arcade space, if any of you remember those.

I’m not sure how long these will last, but I think they’re pretty neat. The last layout was used for 2 years; let’s see if this lasts longer.

What’s Going On With CyberSurfer?

Last time I made a video and blog post about Cybersurfer, I mentioned that I was looking into a way to build tracks with the spline tool, and I got something working based on a video I found. Well, after a few months of tweaking and adding to it, hoping it would make it more powerful, I’ve realised that I am being an idiot about it.

The video covers this in more detail, and I would suggest you watch that, but I’ll go over some of the basic points.

Based on the video I found, I was able to make a track that follows the spline with the correct UVs and so on. I looked great. Then I started testing it by adding additional verticality and twisting it around. Like making loops and corkscrews.

This is where shortcomings in both my player code and the track generation became evident. Basically, whenever I would hit a bend on a loop, the player would jitter because of the lack of geometry. And when I hit corkscrews, I had the same issue, along with an additional bug where the player wouldn’t stick to the track in those sections.

Adding additional resolution was possible, but it added it to the whole track. Considering how long it’s intended to be, that might end up being too demanding. So I figured that the best solution would be to increase poly counts, but only in the specific parts where I needed it.

Alongside that, I still want things like tunnels and half-pipes in the level, sometimes going around corners. Again, I need extra geometry for that.

My solution was to subdivide the mesh, although along the width, not the length. I go over it in the video in more detail, but the long and short of it is that although I got the subdivision to work, it was an absolute mess. Furthermore, the idea of making tunnels with it is virtually impossible.

As the code got more complicated, trying to accommodate the idea of adding more vertices to it, it became more difficult to manipulate them.

In the end, I looked at all the code and decided that I needed to rethink it. Here’s a summary of what I’m going to try:

  • Change how I mark out which part of the track needs additional verts by using knot data instead.
  • Be able to add additional resolution along the length per section.
  • Append half-pipe sections onto the edges of the corners instead of manipulating the mesh.
  • Tunnels and other half-pipe sections might become separate pieces that are attached to the track.

Again, there’s more detail in the video, but this more or less covers everything.

The Godot Video

I finally got around to making a video about my experiences with Godot and the things I like and don’t like about it. I’m not an expert on game engines, so it comes from a place of just spewing out my opinions and thoughts in a very general way.

I’m less critical of Godot, although there are still plenty of things I don’t like. But I did find quite a few things I liked, including specific nodes and example-based documentation.

The video has done a lot better than I was expecting it to, and the feedback I’ve been getting has been fantastic. There are a lot of new things to look at and many things to improve on.

Am I going to use Godot again? Yes.

I have an idea for a project, but I haven’t really had the time to start designing it. But with all these videos out of the way, I should get some time soon. I’m not going to say anything about it until I start making a prototype.

Other Things

I have a new weapon asset. I’m calling it the “Czech 75”, which is a very legally distinct name for a pistol based on a real gun that a character from the anime Gunsmith Cats uses. This is in fact the same pistol from the 7DFPS game, although it has been modified a bit with better topology and several other improvements. And most importantly, it is now textured.

So, here’s a VR-ready pistol that you can put into your games. Enjoy.

In related news, the shotgun asset pack is now permanently discounted. I probably need to improve these ones as well at some point, but I can’t really be arsed. I have far too many things on the go right now.

But I am curious if there’s a demand for more weapons. I should also note that both of these were modelled and rigged by my friend and modified, animated, and textured by me. And half of the money from either of these goes to him. If I make more, I’ll likely have to do it on my own, which means I’ll have to learn more about the creation process. To be fair, as part of my Monday streams, I’m learning various aspects of Blender and trying to create things I haven’t before, which is helping me learn how to do stuff like this on my own instead of having to rely on others.

7DFPS is happening later in the year, so perhaps I’ll use that as an excuse for making more of this stuff.

Again, sorry for the large gap between this post and the last one. I have been very busy. And a new gaming roundup post is in the works, so look forward to that in the near future.

-Adam

31/01/2024 – Global Game Jam 2024

Global Game Jam has come and gone again, and I made another game for it. This year’s theme was “Make Me Laugh”. I spent a good chunk of January learning Godot for this year’s GGJ, and as part of that, I made a quick prototype of a 2-player robot arena game. I made it because my friend and I were discussing the lack of Robot Wars-related games and thought about making one for GGJ.

As it happens, the theme fit quite well with the idea, so we decided to fill it full of ridiculous items instead of robots and hope that it would be funny. We thought it was silly, but when we presented it to the sleep-deprived audience, it didn’t get much of a reaction.

But anyway, here’s an outline of the game. 2-player robot arena. You can choose a character body, which will have a set amount of weapon placement points each. You then pick a weapon, and then you spawn into the arena. The arena is a 20m x 20m area. There’s a pit that can be activated via a button on the wall and a dropzone where random items drop.

Here are the body models. I’m personally quite fond of the man holding axles model, as it is way more horrifying than I expected it to be when I came up with the idea. And I quite like the box, too. But I should probably note that I modelled both of those while my teammate did the cheese and the toilet. But I did the textures for all of them.

With a bit more experience with Godot, development this time around went a lot more smoothly. However, that’s also because I was in charge of the programming for the most part. Not to say that I’m a better programmer than my friend, but more to say that I spent a lot more of my time doing the work.

Either way, I used the C# version of Godot 4.2.1 and found the programming side of things to be OK. But there’s still a lot of issues I have with Godot, predominately the general hierarchy of things. Accessing nodes is the biggest pain in the arse, and prefabs don’t really work in the same way they do in Unity. You can’t drag and drop something from the files into the inspector; you have to load it as a packed scene and then convert it to the correct node. But not every node is accessible through code. If you wanted to instantiate a vehicle body via code, for instance, you couldn’t. Hell, you can’t even access it.

I also had issues getting information on the root node of an object, and for one of the scripts, I ended up using GetParent() five times on one bit of code just to get the name of the player object. However, soon after the event, I remembered that Node Groups existed, and I probably should have used that instead.

But the more pressing issue with Godot is just how buggy some of the node types are. For the game, we heavily relied on the VehicleBody3D node to drive the player models. But for the first few days, the wheels on the player models simply went through the floor, and I couldn’t figure out why. And after researching, it turns out that the node by default doesn’t really work how you’d expect and suffers from many bugs. That said, I did eventually find a post that suggested altering the stiffness of the suspension plus some other values until you got the behaviour you wanted. After about 30 minutes of tweaking the values, I eventually solved the issue.

I have no real complaints about the art side of things; Blender is pretty robust these days, although I did learn that the GPU compute option wasn’t configured correctly, and after fixing that, rendering stuff took literal seconds instead of minutes. What bothers me is that this option was always there, but I hadn’t set it up properly. Considering I upgraded my PC primarily to improve productivity, I wonder if I had checked the right boxes, I could have saved a bit of money.

That’s really it as far as GGJ goes.

As for the new stream layout stuff, I finished greyboxing the gaming part of it, and now I just need to set up the textures. I also need to get started on the game dev scenes and the transition animations for both.

Hopefully, I can get all this sorted out by March. I don’t really want to be working on this instead of playing through Dragon’s Dogma 2. On the gaming side of things, I’m making my way through Infinite Wealth and having a blast. I also gave Graven ago and had mixed feelings about it. Persona 3 Royal and Granblue Fantasy Relink are coming soon, with the former being on Game Pass. Relink is a bit too expensive for me at the moment, so I might wait for a sale.

Anyway, till next time.

-Adam

09/01/2024 – 7DFPS And Future Plans

7DFPS happened again, and I submitted a new game. And this one is better than that god-awful zombie game from last year, I promise.

Making a VR game was easier in some ways than I was expecting, and weirder in some ways. I definitely didn’t like being tied to Unity’s pre-built systems as tightly as I was. That said, although the game isn’t as fully developed as I’d like, it’s definitely an improvement.

I’m not gonna write too much about the game because I made a video about it, along with some other info about stuff I’m working on that I’ve previously written about. Here’s the video:

Plans For 2024

My plans are a bit of a mess for 2024 so far due to some things taking a bit longer to do than I expected. However, for January, my focus is on Global Game Jam, which starts on the 22nd.

Alongside that, I’m working on improving my stream layout with new art and transitions. It’s going to be quite the challenge. But things are looking good so far with some of my early brainstorming.

Beyond that, I’m gonna focus full-time on Cybersurfer. I’m really close to a breakthrough with it, and I can’t wait to get back to it after GGJ. And in regards to game dev, my stream schedule for it is going to change. It’s still going to be on Tuesday, Wednesday, and Thursday, but now I will stream in the evenings as well. It won’t be consistent because of how my evenings can be, but it will give me more time to work on stuff.

The gaming streams are going to change a bit. Alongside my regular playthroughs of games, I’m gonna try doing one-off variety streams with many games. I’m then going to take those streams, cut them up on a per-game basis, and put the videos on YouTube as scheduled releases. Probably just one a week to give me some time to make content. I’m not sure how frequent these streams will be, but I’ve got plenty of weird ass games I want to check out.

A bit of a short one, especially after the bloody long post that the end of year one was. Keep tuned into my Twitch and YouTube channels (Both of them), and I’ll see you guys next time.

-Adam

07/12/2023 – Everything Is Broken

Last week was bloody terrible for me, and the entire month has been a bit shit. But I’m here to give you an update… After nearly two months of silence.

Upgrading & Breaking My PC

The big thing that’s happened since the last blog post is that I finally upgraded my PC. My old system was running a Ryzen 7 2700 and a GTX 1070. They’ve served me well the past few years, but as I’ve gotten more into 3D production, I’ve needed a lot more horsepower. Plus, I’ve been struggling to run a lot of games lately. And very recently, that GPU started becoming the minimum spec for a lot of new games. Anyway, the new CPU is a Ryzen 7 5800X3D and the GPU is a RTX 3060.

I went with the 5800X3D as I’ve heard nothing but good things about it, and it’s likely the best chip for the AM4 board. It’s also the last chip for the AM4 board. So if I do need to upgrade again in the future, it’s gonna be a full upgrade. I’ve definitely seen a performance improvement with it, and OBS is throwing up less of a shitfit when I stream games now.

Getting the chip in was more of a headache than I thought. First of all, it didn’t come with a new heatsink, so I had to use my old one, meaning I had to clean up all the thermal paste and re-apply it, using some old paste my dad dug up that was almost finished up. And then I remounted the fan, but without removing the motherboard from the case. I ended up with a solution where I took a few bits of non-static packaging and a tissue packet and used them to keep the rear bracket from falling out. It worked out in the end, but it took more work than I was originally expecting.

As for the RTX 3060, well with this, I can now do raytracing to a reasonable level. This will make material creation in Blender MUCH FASTER. Working on materials previously was a massive pain in the arse. Plus, it’s nice to know that I should be able to throw any mainstream game at this thing without issues, at least for the next few years.

I played around a bit with the raytracing stuff, mostly just messing with Minecraft and Quake II RTX. I might give Portal RTX a go at some point.

Getting the GPU in literally took 5 minutes and was probably the least painful part of this experience.

But anyway, the performance boost is really nice, and better productivity is always a good thing… Or it would be if EVERYTHING DIDN’T BREAK.

Shortly after getting my rig up and running again, my 4TB media drive which contains a lot of my video footage just straight up fucking broke. Inaccessible. There was about 3TB worth of stuff on there. I’m going to try and get it sent off to a repair place, but it’s likely going to cost me a fucking lot of money.

In the process of replacing parts, my PC was moved around a bit, among other things. This was likely to be the root cause of the problem.

Following this however, I decided to take advantage of the Black Friday deals and get myself two new SATA SSDs. One to replace the media drive, and the other to clone my documents folder.

It took a few days, but when I got them, I started by putting in the new media drive. I left it in for a few days before doing anything with it, and then decided to download a whole bunch of shit. And then it eventually stopped accepting downloading, and some of the files it did download were corrupted. Following that, I couldn’t access the drive at all.

But when I booted the machine the morning after, I could access the drive again, and all the files that had been downloaded properly were fine. The corrupted ones were still busted, but I just deleted those and re-downloaded them. So I’ve decided to just take it slow when downloading stuff to that drive.

I also cloned my documents drive onto another SSD, which for some reason didn’t work when I first tried the process, but did work the second time around. I waited a few days as this was during the issues with the new media drive, but this morning (5th December when I write this) I finally swapped it over.

It didn’t replace my original drive immediately; I had to go into disk management and change the drive letter from Q to F. Once I did that, it worked, but then the SSD I have for games was no longer showing up, so I restarted again, and Windows gave me a blank screen. One more restart later, and everything finally booted up properly.

However, that isn’t the end of this story. I still have a 2TB NVME SSD to install, which I will probably do later this week.

But this whole endeavour has ended up costing me A LOT of money. I don’t like begging for cash, but if you’re reading this and appreciate the game dev work I do or generally enjoy my streams, and have a few bob to spare, consider donating to me on Ko-Fi.

CyberSurfer Progress

A lot has actually changed in the past couple of months in regards to the project. Last time, I mentioned all the rail grinding stuff. Well, that’s actually been changed significantly. Using the Spline Utility part of the spline package, I’ve rebuilt the whole system so that it can finally follow curved rails, or bezier curve rails. There’s a video tutorial a little later in this post, but the results are much improved over what I previously had.

But the big thing that happened was the first public demo of the prototype. Here’s a video of me talking about it, alongside some other things.

The demo didn’t go over all too well with players. Most of the complaints were about the speed. Players didn’t like having to slow down for obstacles; the placement of them seemed poor; collisions were a bit messy; and so on. I didn’t get too many complaints about the game feel. The only complaint I got about the grinding was about how jumping between the rails kills your momentum, which is something I thought I fixed, but in further testing later on, when I increased the speed of the grinding, it became clear that it wasn’t fixed.

The game as it is now is quite different compared to the original GGJ game. Especially the aspect where the player can move however they want, compared to the original, where they were limited to only left and right. But that change brings about a very different form of level design, which I did not account for. However, instead of adapting to that change, I’ve decided to go back to the original idea of pushing the player down the track like in the original game.

However, this time, I will not be spewing waypoint triggers along the track in order to rotate the player. This time I’m going to use splines to create the track and rotate the player’s aiming based on it, similar to how I handle rail grinding.

After a bit of work, I can finally generate tracks from splines. In addition to this, I can generate colliders on the sides to keep the player within bounds. So now I can have non-flat tracks with the correct colliders. I haven’t fully tested the track generation, but it should be fine for most scenarios.

Well, when I say it’s not flat, I mean the track as a whole. But I am thinking about having the actual surface be curved, especially around corners, and maybe even having half- or full-pipe sections. But that’s going to require even more complicated programming, and I barely understand what I’m doing as is.

Finally, the rail grinding tutorial.

Pretty basic stuff. The differences with my old code were mostly the spline utilities stuff. I am calculating the direction of the player slightly differently. Instead of using the dot product, I’m calculating the angle between the player’s forward and the spline tangent (Read as: Forward) of the point of the spline the player is in contact with. It seems like it works better. There’s a GitHub repo linked in the description of the video if you’re interested in seeing the code.

With the track generation stuff in a good place, the next thing I’m likely going to be focusing on is level design. And following that, a lot more animation work. I’m not sure when I’ll be working on an overhauled trick system, but that’ll definitely be part of the upgrade.

VR Development

In preparation for 7DFPS, I decided to learn how to develop VR-specific stuff in Unity. Following their starter tutorials, I built myself a room and placed a few objects in it. Including a mirror.

The tutorial covers things like locomotion, grabbing objects, objects having correct physics, and socketing. The last one is the act of placing objects in specific places, like putting a hat on a hook or on top of my head, like in that image there.

It’s given me a good jumping-off point for learning how all of this works, although I must admit, it is a little jank in places.

7DFPS

Following that jumping-off point, I decided to get started on building the 7DFPS game. To give a general overview of the game I’m going for. Imagine Pistol Whip but with your own music, and the gun handling of Half-Life: Alyx. I mentioned it in one of the videos I linked previously.

But for my idea, I’m setting up a spline, splitting it up into a random number of sections, and turning each section in one of three directions. I should also note that each section is the same length. That’s just to make my life a bit easier. After that, I have the player use spline animate using the song’s duration as the total time it takes to traverse the spline.

To top it off, I spawn a few cubes to act as buildings along the sides of the path. In theory, these were meant to act as cover points, but as I’ve been working on it I’ve gotten a bit lazy, and now they’re just decorative. The enemy generation is soon to follow, but I haven’t quite gotten it to work yet.

What I just recently started working on is putting the gun in the game. It’s actually been easier than I thought to get the model and animations set up. It’s not fully done yet, but it’s getting there. Following that will be enemy spawning, enemy AI, and then finally loading in user tracks.

There’s still a lot to do, and as of writing this, I’ve still got about a week left until the originally set deadline. But it’s my understanding that it will be extended out to the end of the month, like last year. Hopefully that gives me enough time to really make this something worth people’s time. And hopefully enough to give it a decent amount of paint so it doesn’t look like a mess of placeholders like it currently does.

Well, there’s your update. I’m working on the year-end GOTY list stuff like I usually do; hopefully it’ll be more on-time this year compared to last time. But I still have more than half of it left to write, and I’ve still got games to play. So maybe don’t expect it in as much of a timely fashion as I hoped.

Till next time.

-Adam

09/10/2023 – Cybersurfer Update

Happy 11th birthday to the blog. It’s not that important of a milestone compared to last year, but worth noting nonetheless.

But let’s get to the real news:

I did mention this partial rewrite in the last blog post as the last post took so long to write (I was busy with stuff, not that the post was long) that some of the work was done. But now I can get into more detail.

The hoverboard is now a model on top of a collider, an upright capsule collider to be exact. Propulsion works in more or less the same way, but is currently fully controlled by the player. Furthermore, in my last iteration of the hoverboard, when turning, I had a part of the script that would animate the board’s model to tilt it when moving, giving it a more believable look. I’m just adding a smooth damp value to the model’s rotation based on the input. Here’s a code snippet:

Vector3 newRot = hoverboardModel.transform.localRotation.eulerAngles;
if (grounded)
{
    newRot.z = Mathf.SmoothDampAngle(newRot.z, input.x * rollTurnRotAngle, ref rollRotVelocity, turnRotSeekSpeed);
    //newRot.x = Mathf.SmoothDampAngle(newRot.x, slopeAngle, ref pitchRotVelocity, 0.05f);
    newRot.y = Mathf.SmoothDampAngle(newRot.y, 180f + (input.x * yawTurnRotAngle), ref yawRotVelocity, turnRotSeekSpeed);

hoverboardModel.transform.SetLocalPositionAndRotation(hoverboardModel.transform.localPosition, Quaternion.Euler(Vector3.Lerp(hoverboardModel.transform.eulerAngles, newRot, playerTurnTorque * Time.deltaTime)));
}

(I’ve highlighted the code because it’s hard to see with the dark theme)
I’ve continued with that feature and made further additions to it, which gives it a lot more of a snowboard turning look. That said, I’m not finished with it.

I played more games for research during the process of rewriting the code, and one of the games I played was Extreme G Racing. An interesting thing to note about the behaviour of that game is that the player has a very large turning circle. So large in fact, that it is very difficult to get the player to face the wrong direction as you’re more likely to collide into the sides than get the vehicle to turn around on the track. I might change the behaviour to match that at some point.

In regards to the physics, I do mention this in the video at the top: the player’s gravity is relative to them and not the global value. This is set to the normal of the surface they’re on. In theory, it helps keep the player connected to the surface they’re on a lot better and gives me more flexibility in terms of track design. Previously, I couldn’t create loops as the physics driven system I had previously would break and push the player away from the ground. And now I can make corkscrew and loop sections of track without issue.

Loop section.
Corkscrew section.

I’m really looking forward to making some new tracks with these mechanics; it’s certainly more interesting to look at than a flat track.

The big new thing is rails, and I didn’t really cover this in detail in the video, so I’ll be going into more depth about building it now.

My first attempt at this new version of rails involved making rails in Blender and then importing them into Unity, including even more CSV files with vertex points, and lining them up. As you can imagine this got very tedious extremely quickly and I began looking for alternatives.

Nothing to do with the text, I just thought this bug was funny.

I then updated Unity and began using its built-in spline tools to create the rails. As I said in the video, this worked great. But then I tried to use it with spline animate to have the player move on the things, and that’s where it fell apart. The camera was a jittery mess and the whole thing wasn’t smooth at all. So I deliberately made the splines linear instead of curves, then made a script that got all the waypoints on the line and used Vector3.MoveTowards to get the player to move along the rail path.

And it worked… Until I tried getting back on the rail to go in the opposite direction. This is when the trouble began. I had to figure out what direction the player was coming in from and their position on the rail. Plus some edge cases on top of that. This led to a lot of if statements, which I am not too happy with.

But as you can see, it did work. What came next was figuring out loop-de-loop rail sections. Which required further code changes and even more pain.

As you can see, the biggest issue was keeping the player upright properly while going through the loop. Unfortunately, I don’t really have a good solution for that problem with the system I’ve built. Someone did suggest to me pointing them up towards a point in the centre of the loop, but considering I’m going to arbitrarily build and place these rails, it seems like a lot of work, plus even more additional work if I edit anything thereafter.

I’ve been looking at the way other people and other games have built their rail grinding stuff, and more recent things seem to be using something similar to the spline animate system that the spline tools have built-in. So I may need to give it another chance and perhaps that’ll solve the issue.

One thing I am mostly happy with is the rail switching mechanic.

This took a lot longer to figure out, but the solution is quite simple in theory. When I’m on the rail and lean left or right, I shoot out a sphere cast (Spherical raycast) within a certain range to the left or right of the player. If it hits a rail, I then draw an arc from the player’s position to the hit position (Note that I said hit position, not spline track position). If the player then presses the jump button, I do a slerp using a sin wave to give it a curved arc. Here’s the code for that slerp:

private IEnumerator MoveToNextRail(RailSplineScript nextRailScript, Vector3 hitPoint)
{
    float timer = 0;
    float step = jumpTime / linePoints; //Line points refers to the number of points on the arc being drawn. More points = smoother arc.
    int i = 0;
    float progress = 0;
    Vector3 startPos = transform.position;
    while (progress < 1) //Should be using time progress, not number increments
    {
         progress = timer / jumpTime;
         transform.position = Vector3.Slerp(startPos, hitPoint, progress) + (transform.up * (jumpHeight * Mathf.Sin(progress * Mathf.PI)));
         timer += Time.deltaTime;
         yield return null;
    }
    transform.position = hitPoint;
    currentRailScript = nextRailScript;
    CalculateAndSetRailPos(); //Sets up some stuff for the spline points system mentioned earlier
    onRail = true;
}

It works pretty well; it’s not the smoothest looking thing in the world, but it does work. Although I suspect some of the issues with the smoothness have to do with the camera, which I will probably fix soon anyway. Another issue is just the positioning of the player themselves when they switch rails. They’re off-centre. It is a problem that eventually corrects itself as they keep going on the thing, but it is annoying.

But yeah, that’s the new stuff out of the way. As for improvements and what’s next, well here’s a list:

  • Fix the camera on rails
  • Change the rail system again and see if I can get spline animate working
  • Create tracks using the spline tool, minimising Blender usage for level creation
  • Create some levels using all the existing tools and mechanics (Demo!)
  • New character animations
  • Better foot placement on the board
  • Overhaul the trick system

I’m probably giving myself a lot more work to do than I’d like, but hopefully it works out. I really want this idea to work out. I’ve put so much time into it, and it’s really fun to just move around.

What Else Is Going On?

Well I did the WWII COD Marathon and it went alright. I gained some new followers out of it and some of them have hopped back into chat and such since. Wasn’t a massive gain, but whatever. The COD games I’ve never played before will be mentioned in the year end “ADMAN’s Den” post along with my usual top 10s, but I will say that I enjoyed WWII more than I thought I would, but it’s definitely got some issues.

I do want to do a highlight video for it, but honestly, after looking through the highlights for the first COD game, it’s very difficult to find clips that are worth putting in a video. I could make a death counter video, but I don’t think it would be that entertaining. So maybe what I’ll do is grab clips from all the games and shove them into one video instead of doing a video per game. More time spent in prep, but less time editing.

As I mentioned in the video at the top, Unity did something stupid, and now I’m finally in a position where I’m thinking of changing engines. But I want to do a video about the experience of learning new tools. However, since making the video, I’ve come to realise just how busy I am with all the videos I need to make and all the work that Cybersurfer still requires, and I think I might need to delay the original timeframe I wanted to work on it.

On that note, Rotaction needs to be updated soon, or it’s going to be pulled from the Google Play Store. Or at the very least, unavailable to download on modern phones. It will continue to be available on Itch.io, so don’t worry there. The deadline is November 1st, so I need to deal with that soon.

Another thing is back-porting the new hoverboard code into SandSurfer, and changing it to be an actual sand surfing board without all the hoverboard stuff. It’ll take some work, but hopefully it’ll be better than it currently is. But I have no idea when I’ll get a chance to work on it.

But that’s your update. Sorry for the radio silence, but that’s just how it is sometimes. I’ll probably post again once the demo is available for Demo Day. If I can get it working by then. Till next time.

-Adam

01/08/2023 – Cybersurfer?

It’s very early, but I need the feedback. This is Cybersurfer, a follow-up to my GGJ game SICKHACKS.root.

I’m not gonna retread the same things that are in the video, you can watch it yourself, but I do want to talk about what I want the game to be going forward as well as some of the games I’m gonna be looking at or re-looking at.

But as I said, I’m not terribly happy with where the project is at the minute. It plays OK, but it definitely feels like it’s lacking something. Plus the physics driven hoverboard is now more of a hinderance as I look towards different level design aspects. Specifically verticality. The game Distance as well as Wipeout are my two points of reference in terms of what kind of level design I want.


And here’s where I have to admit that I took too long writing this blog post that everything in that video and previously written is now outdated.

Following the that video, I did another stream where I played a handful of games and made notes about various aspects of them, and how they handled the same problems I was having. It was a very informative stream and helped me realise that I was trying to over design everything.

And now, as I’m writing this, the whole physics driven hoverboard system has been scrapped. And the spline based system that I attempted to follow it with has also been scrapped.

The new system is fairly simple, a player model on top of a collider acting as a cushion of air. I’ve ditched the waypoint system, and instead I’m just letting the player control their forward speed and turning themselves, and it’s working out pretty well now. On top of that, I have a bit of rotation to the player model when they turn and a sine wave to make the model bob up and down like they’re on a hoverboard.

It’s a night and day difference and a definite improvement.

Next up is getting the player to stick to the track regardless of the verticality of said track. I’m using Distance’s magnetism as a reference here. My plan is just use a downward force while grounded, and magnetise the player to surface once they get close enough. I suspect it’s going to be more difficult than I’m envisioning though.

Learning To Rig

I recently had a Twitch stream where I taught myself how to rig a robotic arm model.

It’s a very basic model with some problems due to some of the ways I was trying to rig it, but once I figured out the issues it was too late to re-do the model. However, the animation side of things turned out alright.

The next stage of this is getting more familiar with IK stuff as well as other bone constraint systems.

YouTube Content & Future Plans?

Demo Day 51 happened, and although I did not submit a demo, I did stream other people’s demos and provided as much feedback as I could. Here’s the playlist. I do want to get more content on to my channel as it would likely help my Twitch performance, but it’s difficult to find the time to make stuff that would be palettable.

YouTube’s algorithms prefer shorter videos, so uploading whole VODs would probably be a bad idea, but I could cut down my playthroughs into highlights. But requires time I just don’t really have, either to watch 30 to 60+ hour playthroughs to find stuff worth putting it, or to find time to edit it down. But I think I’m gonna be forced into doing it because I am at the absolute mercy of the algorithm gods.

As for future plans, well it’s coming up to the 78th anniversary of the end of WWII, and I want to commemorate it by playing through all of the WWII Call Of Duty games. Those being COD 1-3, World At War, Finest Hour, Big Red One, and WWII. I’ll probably using that stream as the experiment for creating highlights for YouTube, alongside uploading the VODs of it, possibly. Either way, the playthroughs will be available in my Twitch collections page as per usual.

That’s it for the time being. There’s probably more I’m forgetting to mention, but I took so long in writing this blog post it’s better just to move on. I’ll see you next time.

-Adam

04/05/2023 – Demo Day 50

I haven’t made a post in a while, but I’m back, and with a new demo for Sand Surfer. There’s been a few changes to it, mostly focusing on the player character and smoothing out all of the movement and playability of it.

The bow now has proper animations, and a better aiming system. The movement feels a lot better. Jumping has been fixed. The player can now slide by crouching while running, and so on.

Considering that I don’t get anywhere near enough time I would like to actually work on this thing, I’d say the progress is somewhat decent. But now it’s going back on the back burner so I can work on “CyberSurfer”, a derivative of SICKHACKS.root, my game from Global Game Jam earlier this year.

CyberSurfer will be my next main game project, and I’m gonna try and really get this one out into the mainstream more. Not sure how, but I’ll probably have to start shilling much harder.

In other news, my shotgun asset pack was rejected from the Unity asset store and I’ve yet to receive any reply to my request for more information. However, I have decided to sell it anyway on other storefronts.

It’s on Itch.io (Link above) as well as my Ko-Fi Store. I will try to expand on the Unity asset when I can and re-submit it when I’ve done that, but there’s only so much I can do.

But while I’m here, I’ll explain why it was rejected; it was “Too Simple”. No elaboration on that point whatsoever. Didn’t tell me what I needed to add or what was unsatisfactory. Companies do this shit a lot these days and it’s been driving me mad. Vagueness. Deliberately refusing to provide detail or specifics and then using that as justification to reject, ban, or otherwise punish customers and developers.

I don’t like it, and you’re seeing it a lot. Throw in power-tripping jackasses without even a modicum of personal responsibility to not abuse it or use rational thought to understand what people are actually saying, and the whole thing gets worse. Ever had to deal with shitty forum moderators? While they got a significant promotion and are now ruining the Internet at large.

Anyway, my ranting aside, you can now use those shotguns in your game if you want to.

Next up, I put out a new Blender/Unity tutorial.

I’m cooking up another one on Skyboxes and after that, I’ll be making a tutorial on materials from Blender into Unity in both URP and HDRP.

Outside of game dev and other projects, I went to Belfast for the first time in 3 years. It’s changed a bit, a lot of the shops are different. I had Yakitori for the first time, there was Japanese fast food place that did it, although I’d struggle to call it fast food as it took quite a while to come out, I almost finished my meal by the time my friend got his. But if I went back, I’d probably get some of the larger items like the Katsu curry bowl.

While I was in Belfast, I had a list of things I wanted to get. The first item was a new backpack, my old one has had a hole in it for some time (Which I did patch up pretty well) but I decided that I should replace it. Got a nice one from a surplus store. Next on my list was a Swiss Army Knife. I was intending to get one when I turned 18, but I never got around to it, but I have one now. It’s quite stiff getting some of the tools out. The knife is sharp, very sharp, as the cuts on my hands currently might suggest.

The last thing on my list was straight razor, which I forgot about. So instead I went to CeX and got some more Xbox games for my collection. Dead Or Alive 3 and Call Of Duty: Finest Hour are the two big ones, plus the game for the 4th Harry Potter book. I’m trying to get a full collection of those games, but it’s gonna take a while, and likely get expensive. I also bought some anime, Haibane Renmei and 5cm Per Second.

And for the actual reason I went to Belfast: I saw the Mario film. It’s OK. It’s a kids movie and it’s fairly inoffensive. My only issue with it is Peach being overly “Kick-ass”, to the point where I wonder what her character arc is even supposed to be. Bowser’s maddening love of her gets a bit weird too, but that might just be Jack Black’s portrayal. Not that I have anything against the man.

That’s it for now. Reminder that I stream on Twitch most days of the week during daytime hours, so check that out. Till next time.

-Adam

28/03/2023 – Tweaking Things

Let’s start with a minor update on Sand Surfer.

I’ve spent the last couple of week tweaking and changing how the hoverboard works inside the debugging level I made for SICKHACKS.root for testing stuff. The biggest change comes from the camera, I’ve replaced the fixed camera with a free look camera so you can rotate around the player, with additional adjustments to fix the camera bounicess.

The board handling isn’t that much different. The board now rotates a bit as you turn, and the physics have been adjusted slightly. I did do some other experimenting with different ways of producing the hoverboard effect. One involved putting the board on top of a couple of sphere colliders and another involved using wheel colliders. The latter was terrible, and the former worked in a sense, but still felt bad, especially when turning. So I’m sticking with the physics driven system.

Next thing to work on is gonna be the archery and general player movement. This project is gonna be a long one.

Next up, an update on those guns.

Lever action reload animation.

The guns are done. The animations are made, the materials are made, and they’ve been exported as Unity assets and general .FBX models. Unfortunately I have to wait for Unity to approve the asset pack before I can promote it as available. But the pages for Itch and Ko-Fi are itching to be made public. So as soon as they’re ready, I’ll post here about it.

I’m pretty bloody happy with how these turned out and I hope folks make some interesting stuff with them.

And lastly, an update on SICKHACKS.root.

There is a new update, v007. It is not a James Bond reference, it really is the 7th build of this game I’ve made. This is the last update, and it’s pretty substantial.

The board handling has been redone and now feels a lot more hoverboard like. Level 1’s colliders have been changed so you can’t get out of the level easily now. The camera system has been tweaked. And finally the player collider has been slightly reduced in size so that there’s less random fails.

I AM NEVER TOUCHING THIS PROJECT AGAIN

But that is not the end of the story. I am working on a new project under the name “Cyber Surfer Prototype” that takes all the ideas I’ve been working on with that game, and making it into something more worthwhile. It’s gonna be awhile before I get to work on it as Sand Surfer is my current priority until Demo Day 50 is over.

That’s everything for the time being. Again, I’ll make a post once those gun assets are available. I’m also planning a trip to Belfast soon, which will be the first time I’ve been there since 2020. 3 Goddamn years.

Till next time.

-Adam

07/03/2023 – Content Content Content

Here I am again. I guess I’ll fill you all in on the things I’m working on.

Remember 7DFPS? The game jam I made a game for back in December? I’d forgive you for forgetting, the game I made was utterly terrible. However, there was one aspect of it I thought I could do something more with and that was the guns.

The models themselves were made and rigged by a friend of mine, but I did the materials and animated them. But I figured it would be a waste to have these guns made and not use them for other things, but I’m not really in a rush to make another FPS, so I figured I should release the assets… For a price.

I’ve redone all the materials, a lot more detail and wearing added. The model UVs are now way less of a mess, meaning much better texture maps to use for Unity’s materials. The next stage of these at the minute is re-doing the animations. A lot of the data was lost, so I need to either try and re-import them from the old files or remake them from scratch.

UPDATE: Three of the guns have finished animations now.

Not fully sure where I’m gonna be selling these, Blender Market, Itch, Unity Asset Store, and my Ko-Fi page are all viable options. Possibly all of them at once. They should be available near the end of this month, keep an eye out.

“How’s the side project?” is something you’re probably thinking of asking.

A small taste

Well, I’ve been making a bit of progress. I’m juggling my time between it and tweaking SICKHACKS.root so it’s not quite as far along as I would have liked. But you can run around, shoot a bow, and ride a hoverboard. Which is like half of what I want from the gameplay side of things.

Actually, GGJ helped me figure out a lot of the problems with the game, like how to properly separate the collision and animation stuff from the aiming target, which was a source of a lot of my woes with this project for the past couple months. The bow stuff needs so much more work, it’s a surprisingly complex animation when you consider that the arrow has to go from the hand to its place on the bow, and then disabling that when the arrow is shot, which is actually just an instanced object being shot out.

The hoverboard isn’t great. It’s quite floaty in the air and the collisions aren’t very precise. I’ve dropped through the level more than once. I have a few ideas of how to fix it, but I’m concerned that Unity’s physics system will break it some more.

There’s a demo if you want to play it, but it’s very, very basic. You can check it out below.

Now I’ve mentioned it a couple of times now, but I have made some small tweaks and changes to SICKHACKS.root.

The most serious of issues were FPS dependant movement where you would move slower at lower FPS or if there was an FPS drop and the camera jitter as the player would move down the track on the first level. Some fairly simple fixes. The original movement code didn’t use delta time so it heavily affected by the FPS. As for the latter, well I replaced the transform.LookAt code with some Slerp code instead and that seemed to help a lot. However, it is still affects the downward trajectory of the player, but I’m working on stuff that should address this issue.

On that note, I’m experimenting with different methods of turning the player towards the track waypoints. I’ve managed to create a system of turning the player via torque and allowing the physics to do its job. It does somewhat work in my prototyping level, but I haven’t fully sent it full the ringer yet with different terrain types, but that’s probably the next phase. But once I get the game to that point, I’m gonna make a decision about whether or not I’m gonna continue with this game.

Check out the updated version here:

As a last point on this, I finally finished the technical(-ish) video on the game, so give that a watch if you want.

It’s not the best video in the world, but it covers some of the stuff I wanted to talk about. It’s harder to make a video in that format than I thought. I eventually settled for reading a script with what I wanted to say and then mushing together the clips that are related to it. I think next time I’ll write the script first along with notes on footage I need and then edit it that way.

I’m not done making videos by the way. I have at least two or three more videos I could make from things I learnt from making SICKHACKS.root, especially on the Blender side. I’ve got about a dozen or so ideas for Blender related videos as well as Unity stuff.

Blender tutorials are going to be rough for me because I’m not super experienced with it, but I’ve gotten alarmingly decent with the shader material tools and there’s a few things I couldn’t find info on that I ended up having to learn how to make, like the sunset skybox in SICKHACKS.root, which is a cube map. Not only did I have to learn how to make the visual effect, I had to figure out how to get it on a cube map. So that’s probably the next video, among many others.

Now Sand Surfer is a side project, and it will stay a side project, and I need a new main project. I have been thinking of taking SICKHACKS.root (I’m getting really sick of writing this title out fully everytime) and turning it into a full game (With a new name, obviously). But that is likely going to be a very heavy project for me, from design, to building, and developing. It’s gonna be a lot of work, especially as a one-man-band. I really want to make more of it though, it’s just fun to play.

Another project I’ve been thinking of doing (Or even going back to) is Rotaction. Specifically making a sequel to it or updating it. I really want to re-do the enemy spawning code because the game is a bit bland after a while, there were also enemy types I never got to implement properly and I want to have another shot at them. Plus, I figured out a way to do multiplayer, but that almost certainly requires a sequel, not an update. But I do need to fix the phone version because the controls are pretty buggered and controller support doesn’t function correctly.

I’ve got a lot to think about, but for the time being, I’m just gonna get done what I can.

Right, I’m not sure how long it will be before the next post, and I’m not gonna attempt to guess, but I’ll see you next time.

-Adam