Things are in full swing again, the break did a lot of good to help reset myself and get working on Phaseshift again. It was nice to get away, recharge my batteries and learn some more about game development from a different perspective. I've had to re-jig my time scale/roadmap slightly owing to certain assets being unavailable. This is not a problem of course, as I can get on with other features I wanted to add. One such feature was a bike that helped me learn so much about 3D modelling and Blender. I called it Valkyrie because I was doing some research into Scandinavian culture (and thought it was a cool word!)
Valkyrie was the first 'game ready' asset I made that I was really proud of. It also actually resembled a sketch that I had drawn out. It was a key milestone in my game development learning as I started to piece together skills; drawing, modelling and making game ready assets. This model had around 1/14 of the vertices and polys of my previous model, and looked much more natural and 'real'. This design wasn't something I wanted to bin off, I knew that as I got better at modelling the newer bikes would look better. I liked the design, and it was the bike I used mainly throughout the physics and gameplay development phase. You could say I had grown attached to it! So I decided to do a Valkyrie Model II!
Vertice and Tri values do not include the wheel geometry.
It seems fitting then to progress a bit more using Valkyrie, and dive into texturing the models properly. As my model geometry had improved, I guessed it would be a good time to start implementing some livery ideas that I had. I messed around with UV maps, of which I had gotten more confident with until I could get something that was useable. I even created a tutorial, and sent it to a few friends to have a go! Some of their efforts can be found here.
Because of the success of these livery attempts, I am going to create more manufacturers decals and logos, as well as UV map the existing bikes. These UV maps should highlight any issues with the existing bike geometry. I can also create a livery base, and hopefully implement things like racing numbers and have colour overlays etc. These liveries should help transform the look of the game.
As the liveries my friends made were awesome, I'm letting them continue to play around, and have access to all livery based resources. It would be awesome to feature some artwork on the liveries of the bikes made my mates! It will also help create an individual feel for a lot of the different AI teams, as well as generate new liveries for all bikes.
After the liveries version, the character creation tool will hopefully come next, as well as some final touches to balancing. Difficulty as well as a rubber banding function will be used to keep racing tight and challenging. After these fairly core gameplay features are finished, I will start adding more fun features. One of these is destructible scenery and objects. I will implement more damage systems to deal with overheating, freezing, electrical damage, hacking and others.
So it's been a while since I last posted an update, but things are still moving! Since the last update which was 4th of May, I've taken a bit of a rest from Phaseshift as I didn't want to burn myself out, especially with all the craziness that is going on at present. Phaseshift is still very much in my sights, and is still on schedule.
Speaking of schedule, I've always tried to push the game to released in Dec 2020, or late 2020. But I keep asking myself why!? I have made a list of features I intend to be present in the final game and considering the start of the project, a lot of boxes have been ticked. I almost feel that I am almost on the home straight, the core functionality has been built, and it can be played like any other racer. This is definitely the stage of content creation, more tracks and bikes for example. But also adding features that set it apart from other racers, as was the intention. The game was meant to a celebration of all of the games that I loved growing up, and I don't want to mess with this goal for the sake of a late 2020 release. Although I'm on schedule, I'm not sure I want to force it out!
To that end - to avoid burning myself out, I have started another game project that I have been designing for a while now. I'm not going to share too much information, but it is an RTS, and I am learning a lot of new things. The way the project is, it is completely different in scope to Phaseshift, Phaseshift is mainly about performance, and getting a solid 60 FPS whilst looking and feeling fast. Everything has to be intense, action-packed and fun. This RTS is more about animation, game mechanics, progression and strategy. I believe that learning these new things, and taking my mind off for a bit will help improve the overall feel of Phaseshift.
Back to Phaseshift, a lot is planned. I have been working with an illustrator to develop a character creation tool, something I am very excited about. This will give the player a chance to create their own avatar, but more importantly AI will have a face to the name. I also have planned (funds permitting) to get voice actors/actresses to get involved saying a few lines. I want to get across that Phaseshift is sort of like a proper racing formula, with consequences in championships for the pilots involved, much like F1 is. I want a personal aspect, I want players to desire certain AI characters for their personalities or dricing abilities. I credit this to Unreal Tournament 2003/2004 where you always wanted Lauren and/or Brock on your team! I'm hoping this will add to the world of Phaseshift, and its intense cyberpunk inspired racing world!
Today I have been reflecting on this game development journey I've been on. It's been maybe
over 2 years now that I downloaded Unity and started learning the craft. Since
then, a lot of my research and Google search criteria has been: "How to make a cool
explosion" or "Why isn't my texture showing" or commonly while starting
out "Object instance not set why". All of the search criteria have been
about making something do something, but as I feel I am becoming less
dependant on Google for answers, I am thinking of my game in new ways.
Today I had a bit of self-reflection. I played a build of my game, and did that excited yelp you do when something cool happens in a game. I deployed a Proximity Mine in a strategic place, right next to my teammate, followed the opponent into the trap, shot down his shields, they went to avoid the first mine and fell right into mine - the mines finished the job, catapulting its rotating fireball striken chassis into the wall with a show of sparks. Now this yelp is almost exclusive to my top 10 favourite games. These are the games that move me most, and cause this excited "puppy like" yelp to come out. And it led me to think: "What do games make you feel?" and "What should a game make you feel?"
So I had a think. I knew what I was doing was properly corny, but doesn't the act of playing a computer game boil down to one thing? Fun? If we don't have that connection with a game why would we play it. We all play games for different reasons, and we seek to get different rewards out of them, and this is partly why I love games so much. They are so diverse. I love racing games - I love the thrill and intensity and the noise, but I also love the carefully thought out strategic nature of an RTS. I have sunk hours into getting the best unit combinations in Age of Empires, and base building with Supreme Commander. Even in games that are similar in genre, I emotionally get out something different. In Sins of a Solar Empire I love to pretend I'm this cool-nice-guy-empire-leader and be allies with everybody. Soon as they destroy my envoy I hunt them down. I love the inter-player-relationships that occur across a several hour eating game. It's almost human-like. Another RTS, Warlords Battlecry 3 I like to be that super evil, all-powerful hero that eats your souls to summon tough flying demons from the depths of hell. On the surface they are similar games, you manage economies, you train ships/creatures and fight each other. But the games are also so different in the way they make you feel. I almost feel as though I role play in all the games that I play. Become something that you're not, it's the ultimate escapism. What do I want people to feel when they play my game? I don't want it to be another 'kart racer' clone. I want this to be something that people feel. I want people to have control of the decisions of the life of 'you in this game'. In racing games its easy to bolt on this career mode that is essentially just a few custom pre-set races strung together to form a championship. I want something more. I've poured a lot of my passion into this game, I think about different design directions daily. This journey in of itself has been a form of escapism. I'm effectively crafting a world, or a game that I want to play. I enjoy playing this game but I want others to as well. I need to make sure that I allow this connection between player and game, and create a fun, involving experience. Creating a a cool explosion is one thing, but making a lasting impression on someone is another. If I can create a connection as some of my favourite games have made on people, I will be one happy, fulfilled hobbiest game developer!
This also led me to think about how I feel about new games coming out, and setting expectations. I've been attempting to look into indie games, and games of a similar scope and price point to mine. I've also been looking at how big their development teams are and what goals I should set myself out realistically. I did some research on some of the big names in Game Design. I'm trying to be careful not to set the bar too high, and not to burn myself out!
So the rest of this month I have been dedicated to designing a new brand or theme for the game. I always wanted to make the game 'cyberpunk' themed but wasn't totally sure how to go about it considering I am far from an artist! So after days researching, coming up with colour schemes and looks (also multiple boards on pinterest!) I have come up with a design that I love. I have found a few new fonts that I can use, and a colour scheme that I have been playing with. I have also been learning about colour and how to best use it, as well as visual and look conventions for the game. I am quite happy with the result! My main colours are a pink and cyan, and the new name is Phaseshift. Don't ask me why, but I loved learning about active noise cancellation and phase shifting at university, and I think it sounds cool. I now have a visual standard that I am proud of, and hopefully will stick to til the end of the project. Maybe soon I will update the website with the new colours! Here's a teaser:
Next my attention will be turned to the levelling and progression aspect of the game. As I want the Career of the game to be a journey, a strategic path of research and development and customisation, I want the player to feel that they own a team and that their choices effect their outcome. Although very different genres, I love the way games like Deus Ex, Mass Effect and Elder Scrolls handle their progression. Deus Ex: Human Revolution gives you access to different tools that better assist certain play styles. You can specialise or become adept at multiple routes. I want a similar way for the game. I also love the synergies that Mass Effect 2 had with their abilities, and I want a similar depth with Phaseshift. I don't want a 'one weapon rules' style of game, I want a game where you be strategic with your loadout choices, and that they synergise in creative interesting ways. I have loads of ideas for how this could work, and am excited about implementing them in the future!
As a lot of the 'core' elements are in place, I am considering letting the game out somehow to allow for people to test. I am eager to get peoples feedback on game mechanics and how the bikes are to drive. I want a good, strong, fun driving mechanic. Although the game is more likely going to be weapons centred, I don't want that to detract from the fun driving aspect.
So today I have reached a bit of a milestone, I have written all of the code for all of the base systems. These systems include functions that build up a scene using a few pieces of data, things like AI and Race settings. I have written what I call AI personalities and look forward to expanding on their 'intelligence' with additional path finding and smart features by ability. I have written a new modular system for abilities, that easy to expand and is usable for both players and AI with minimal changes. A lot of the work now is improving upon this base, and creating a visually striking, sensory overload of a game, both visual and sonic. I have a plethora of ideas moving forward, a potential name, and a brand new theme and look for the game.
My time the past couple weeks have been mainly spent creating a framework for which new content can be added, and it to work seamlessly with the game. Expanding ability options, new bikes, settings modes etc is all now very easy, and I am proud of the result. I have enjoyed this part of the creation process immensely, and am aware a lot of the programming side of things has been done. The Race Event system is fully expanded too, with over 20 different customisable options for races available - and just for a 'Quick Race'. This doesn't include other Race Modes types, which will be added later. With all these different options for race types the game can be enjoyed in various ways, and I look forward to creating a deeper strategic element also.
So ZXRacing was always a placeholder title name, and a lot of the styling I have given it is a little bland, and owes heavily to my day job as a web developer. In that job I prefer clean, practical design and that has showed currently to ZXRacing in its menus. I've decided I need to go a little bolder with the artwork, and create something way beyond my comfort zone, and really try to stimulate that right brain. I am aware that now a lot of the work done to the game will be around creating assets, and adding them into the game. I am to create a new theme for the game, along with a new visual style. I have been leaning towards a certain 'style' for a while and I have only really dipped my toe in as far as aesthetics go. I need do more research, learn to draw and properly commit myself to making a visually tasteful, stunning, piece of art.
I have been working with the Robotics department in University of Leeds, and this week have an event where they will be showcasing their robotic arm, along with my game as part of a new rehibilitation tool to help people recovering from strokes. I am a little nervous! This is the first time the game will have been used by someone else on another machine. It also presents an opportunity to get user feedback from my game, something I have been desperate for. This is something I have been very excited to be a part of, and I can only hope my game helps further their goals to aid people in need.
The past couple weeks have been very productive. I have used a lot of the holiday season to work on ZX (and to be with family also!) and have gotten a lot done as a result. I have moved down south again, which went well and have started my new job today. Consider me completely moved!
A lot of time has been spent creating a new track! In truth I got side tracked- I was meant to be creating some menus for Quick Race and Custom Races, when I just couldn't help but do some research into canyons and water falls. Hence spawned a new track: Canyon Falls! This has helped highlight some flaws in my prefabs and object based stuff, as things should be seamless between scenes. It has also helped show some oversights in UI design in terms of using World View and different resolutions. Because of this I have made some optimisations when viewing on different screens as well as adding more functional UI elements. I'm sure I'll go back to the world space hologram when I get a better idea! The new track though is going very well, and have ideas for three separate tracks from the one 'world'. This will help pad out the game with additional tracks, with different difficulties and lengths.
So because of lack of any testing, a few issues went under the radar for a while. One surfaced when working with some clever students from University of Leeds, the bike would appear to shake at speed. After some research I managed to solve the problem, it was Rigidbody Interpolation. This is where the graphics being rendered is in a different place to where the physics engine renders it or believe it is. Because of this difference in rendering frames Unity gets in a bit of a panic, and objects appear to stutter. After changing some settings it smoothed out the motion, and solved the problem.
So back along I had all kinds of issues regarding doppler effects, and it appears that I have solved them. When an AI bike drove past, a fragmented, shuttery mess of a sound would play, causing immense frustration. I thought that by switching the FMODs audio engine, this would solve the problems, but it did not. It turns out after many hours debugging that I simply had the listener on the wrong object. I use Cinemachine for the camera rendering as the post processing effects, and general camera handling is so much better than vanilla Unity cameras. I had an Audio Listener on the Main Camera, but the Main Camera transform was being moved by the Cinemachine brain. This caused the stuttering. WHen I added the audio listener to the Cinemachine camera it solved all problems. The doppler effect even worked with Unity's audio engine.
I've found FMOD to be quite fun, and very easy to use. It's quite nice having a totally separate piece of middleware handling all the audio. The freedom you have is also great. I've managed to create a couple engine sounds that have a 'turbo' effect depending on throttle and engine RPM to give a dynamic sounding engine. I also have plans to use ground effect audio, so that depending on your speed, and the type of ground you're on, a different FX will play. I would like to include a smart way of including air sounds as well.
Going forward I have some what of a roadmap. I may some day post it online! But I have a lot of exciting things I want to add next, and have been focussing on optimisations at the moment. The new track has highlighted the need to focus on this to make it easier for future tracks. I have completely refactored the way a player is put onto a track, instead of rendering LITERALLY EVERY possible wheel bike combination, then hiding the options that weren't chosen; I have created a script (or a bunch of scripts) that build the bike from scratch, and adds all customisation details, in the correct suspensions slots with correct colliders, with no duplication or wastage of memory.
After this version release (v0.0.20 - Audio) I will then refactor the weapons system, and focusing on learning more about particle systems. I would like to create some really intricate but CPU friendly effects for new weapons.
Over the past weeks a lot has changed, I have moved to a new location, new house and got a new job! Despite all these 'distractions' I have found time to work on ZX, and have some interesting news:
I have been in contact with some clever people from the University of Leeds who work with robots. The current project they are working on helps people who have limited movement from a range of conditions, with a focus on people who have suffered strokes. The robotic arm helps to assist movement and exercise people who have limited movement in their arms, so they can recover quicker and regain strength in their upper limbs. In order to encourage this kind of movement, they have been getting help from game developers volunteering to make games for this particular controller. I thought this would be a good idea to not only interface ZX with this controller but it would be nice to know that my efforts will be going towards a fantastic cause. The project on my side is very much in an exploratory phase, seeing what kinds of controls benefit people with limited movement, and how to properly interface with a virtual controller that I have been sent. The latest version v0.0.17 was going to help stablise and clean the project files I have been working with to better integrate this technology.
Thus I have come up with a new 'Game Mode Type' to deal with this controller. As movements can be some what limited, and have to be assisted, full races with 11 AI, and 4 types of weapons including boosts and drifting can be a little overwhelming, especially as the controller is capable of an X and Y axis movement, and one button. This game mode type 'Challenges' will be a series of 'Pilot Proficency Tests' or 'Tutorials' or however they will be dubbed that offer bitesize skill tests that require little controller input. These challenges could include tests that require a player to follow in a pilots slipstream for points, overtake a set amount of pilots, dodge obstacles, shoot down particular targets etc. The idea is also to take this to the 'main game' so that a traditional controller can be used, to add further depth to the game and it's background as a 'motorsport'.
I intend to spend a part of my time that I would spend on ZXRacing to these challenges, but of course I will be developing the main game as usual. The robotics stuff may also mean that I branch out and make a purpose built game - I have a space game in mind next. These games are intended to be basic and easy to learn, with an addictive element to them. I'm hoping the platform of ZXRacing will be good enough as a base! I obviously have no intention of slowing down any of the development on ZX. Hopefully when I am properly settled here and have started my new job, things will calm down and I can get back to developing more regularly.
It's been a busy couple months, hence why there have been so few updates posted, but a lot of work has been done to the game! Part of this radio silence has been because of the new website. I thought it may be a waste to write blog posts for a website version I was going to scrap, so instead have been keeping them back. So welcome to the new website!
The game now has an event based system, and a race has a series of states. This design has made things so much easier, and I believe a lot less CPU intensive as well as some functions just won't execute depending on the race state. This has made planning AI behaviours easier as well. Since the last update I have created new AI scripts, and they work great. For now they are more or less basic, they follow a path within a certain radius of tolerance, and have sensors that detect obstacles. The AI will react depending on the type of obstacle. If it is a player or AI bike, they will overtake, if an obstacle they will try to evade. The intention is to implement a slip stream system later on as they will seek slipstream, then at the last moment overtake with the overspeed they have. This has made the game miles more fun!
I've recently had the opportunity to present my game to my collegues in a formal presentation. I believe it went down well, with a few members plucking up the courage to have a go! It was live demoed by myself, and another member, and nothing bad happened! No bugs, went completely without a hitch! This is really encouraging as I have tried to develop in the most stable way possible, avoiding bugs, and fixing things as soon as I see them. Though this may have slowed down my development time, I have created a more stable game as a result.
So I have a few things lined up. As the new website is completed, and my personal life is beginning to get a little more stable, I can plan things a little further ahead, so a new roadmap will be priority. First of I want to integrate FMOD into the game, and work with the doppler effects to create a realistic pitch shift effect. I would also love to create a couple of audio tracks. Second I have a new map all worked in my head, I just need to get it to paper. And thirdly I want to completely rebuild the weapons system, with an emphasis on particle effects. I have been putting in place a stats system that will log every shot every pilot makes so I can log damage, and create an end game stats logs system. Currently the race end event displays player final position, and best lap time.
Things are progressing well despite lack of screenshots, reason being, I'm working on AI! Of course there isn't much to 'see' with AI as it's all code, and screenshots of code isn't as exciting as explosion or new 3D models! AI is going well, I'm building on what was built for the second prototype, but using my new design patterns and keeping the single responsibility principle. I've also found as I am now more comfortable with dealing with Unity objects I can do a better job at imitating real bike behaviour judging from the AI's inputs. AI bikes now lean into corners, use the same 'speed' model as the players (for better matched racing) and silly things like wheels rotation and lean. They also use the same effects for collisions, and can self right much the same way a real rider would if they caught a 'lowside' skid. Next I want to implement some of the more 'intellgient' sensor based stuff that existed in the second prototype, like active obstacle dodging, and new stuff like following the player ahead to use their slipstream.
Because now I have some moving AI and have just attached the standard engine audio to them, I can now simulate the doppler effect, and it sounds great... when it works. I'm having issues with getting a clean sound, I get a lot of choppy artefacts when the audio is first loaded in. I will leave it for now so that I can monitor any trends, but may move to FMOD if I cannot come up with a solution. As FMOD is a purpose built audio for games solution I expect their doppler will be a lot more accurate. I also used FMOD extensively at university for one of my projects so I should be familar with its use. Sound and Audio is something I want to absolutely nail with this project, I strongly believe good or bad audio can make or break a game.
As previously mentioned I am spending a lot of time on ventures that isn't directly related to the game (I am making a new website for ZXRacing!) This is primarily due to changes in my life, new ventures, freelance work, etc. Though ZXRacing is still being worked on, and I am working on it around 10~ hours a week at least, I do have web based projects that I need to cater for. And also non-computer stuff! (There's more to computers?!)
My new work method of taking small bites seems to be working well. I have found that because I am doing smaller chunks of work, I am spending more time getting the one 'thing' completely right, and adding features that are related. Although my task may be to for example make an authentic brake light, I will now program scenarios where the brake light may blink for example. I am finding my work is more complete. This is also because now that I am revisiting a lot of game mechanics that I have already prototyped, I want my new code to be bulletproof. I definitely prefer this way of working! Of course weekends are still fair game to spend an unholy amount of time on it!
In making sure things are done correctly, I have stepped up my learning, especially in the area of post-processing, lighting and visual effects. I have a subscription to Unity Learn which has been helpful. There are also loads of useful seminars and workshops on YouTube of their various conferences which has been invaluable. As such, the lighting effects of my renders have greatly improved. It also helps that I am understanding the need for UV maps, and making sure my models are as clean as possible. Blender 2.8 has been a definite improvement. (And I thought it couldn't be better!) In my day job I am now trying to watch a few video tutorials on my lunch break rather than play Mario Kart!
Currently I'm at a stage in my professional career where I may have to make some tough decisions, so a lot of my time has been on planning for various scenarios. That said, I am doing my best not to let up the steam for this project. I have endeavoured to do a bit of code every day to this project to not only keep up appearance on GitHub, but also make sure that I am still sharp. Currently on a 21 day streak! I have found this helpful to keep momentum, and actually quite fun to challenge myself to at least do a bit of code a day. It has meant I have re-written messy classes, or created some really useful visual effects using code I may not have done otherwise. This 'juggling' does mean I am doing more web development stuff than game stuff at the moment, but I'm still learning new skills all the time. A lot of my code infrastructure has improved so much from constantly having my head in the game (pun intended).
One thing I have learned the past couple weeks is to manage your workload appropriately, especially if there are loads of other things going on and your health isn't tip top. This version was way too big, and more so unfocussed. Though majority of the work was aimed at making good UI, I also had planned one new bike and to model an entire garage from scratch. Of course this is way too much for a chunk of work, and found myself getting lost a few times as my attention was spread between lots of different areas of game development: modelling, UI, scripts, audio, and physics. While this is good as it keeps all areas sharp, it can be overwhelming when trying to simultaneously design user friendly UI, but also optimise bike behaviour, and modelling new bikes. From now on I will have the versions be a little smaller in size, and focus on one aspect of game development. This way, I can optimise that one type of skill I need to hone to complete a task. More versions also means more backups, and I can see the way the game is taking shape over time.
So for this next sprint I am going to put together all I have learned about coding and refactor the bike physics script into many specialised scripts. As the bikes are highly customisable it has become challenging to remember where everything is! If I break down the main script into many scripts (The Single Responsibility Principle) I can create much more flexible code. This is necessary as if I am adding even more weapons and bikes in the future it will make maintenance a lot easier. I believe I have only been able to think about this now as now I have the content to be able to do it. I have many bikes and weapons now to flesh out a complete solution.
I have also been upgrading my software and getting to grips with the new features of each software. I am currently in the process of upgrading Unity, but one software has really impressed me; Blender. Blender has always been my favourite freeware program as it has always been a powerful, easy to use package. I used 2.8 to model the newest bike, Lynx. It was such an easier process, the UI looks fab, and it didn' ttake much time to get used to where things now lived. Sure it took me a while to find that Removed Doubles had changed terminology but the way it rendered was cleaner looking, and easier to model. I hope the latest Unity update can do the same!
After a couple of weeks or so out of action, the new PC is fixed! Turns out it was a graphics card issue, and after a really quick turn around got a new one shipped out to me, slotted it in and it all seems to work. Been a good learning experience as it has been a while since I had to deal with hardware issues, and was good to diagnose problems with a brand new PC. Am now in the process of getting my workspace all up to date ready to do some more development on the game.
I took the time off development to brush up on my modelling skills. I have modelled a brand new bike, with far more detail and material types than previous renders. This bike is to spearhead some refactoring I want to do on the physics side of the code. I want to section out and organise audio, physics, effects etc into their own scripts so they're easy to manage and add new effects as and when. I am also designing a new way to manage bikes between scenes to deal with the wealth of customisable options that will be available to the player as the game goes deeper into development. This will negate any need to backtrack on older scenes to make sure newer models are included, this will update older scenes automatically with newer content.
As my laptop was still functioning I could also spend time working on engine audio for the various bikes. I am a massive fan of cars, bikes and everything racing (how could you guess?) and noise for me is a massive part of the appeal. In a nod back to my uni days, I did some research on the audio of different engine types and what makes up their signature sound. One engine that stands out for me is the magical V10 engines of Formula 1. Being an audio geek in the day, I was able to watch a tutorial and get my electric guitar to sound like a V10 engine, by tuning the six strings to the pitch of the most prominent harmonics of a V10 engine. I was able to do the same using subtractive synthesis. Though not as accurate as the guitar sounded, I could get a near enough V10 sound, which I then distorted and added effects to create a thick, aggressive sound. This will likely be the benchmark for future bike sounds, as I can simply add different wavetables to the synth to create different timbres, or adjust the harmonics to emulate V8 or V12 engines. Audio will be a key element for creating a truly alive and aggressive bike feel.
I have also tried to be more active on social media, get involved in other peoples games or creations on Instagram. This has been a really positive experience, it's really exciting to see people do something similar to you, and help each other out. I got some great constructive feedback on the new UI I have added to the menus, of which I will be changing. I added dropdown elements to the weapon selection area, however as someone rightfully pointed out, this may feel clunky on a console setup. I will instead use sub tabs to better organise the data.
So I've had two weeks off on holiday and it's been hard not to think about or do anything on the project. So much so I have bought a couple of notepads to doodle on and design some other features such as slipstream mechanics and additional game modes. I'm starting to think I should have brought my laptop with me!
Back from holiday I'm excited to continue with the project...just the new PC doesn't work. Very frustrating. So unfortunately this may set me back a bit as customer service seems very slow to respond, I should have checked the Google Reviews before buying! I'm sure I'll be back on making things soon and can resume game making!
So since my last blog I noticed how rendering objects and especially lighting in scenes was taking way too long, and as I am serious about this project... I thought I'd upgrade my computer! Now no more excuses when generating 3D content! Obviously I'm very excited by this as it means I can render content a lot quicker and hopefully improve my workflow. Having an actual graphics card should show a major improvement! It will also mean I'll be able to create more video captures of the game!
So this version I've taken the time to get more familiar with 3D modelling and UI. I have been populating a garage with items, from tyres, toolboxes, to mugs and fire extinguishers and have found it to be a therapeutic task! The objects have been great fun and I've been learning how to create smoother meshes in Unity from a very basic low poly mesh from Blender. One thing I do still have difficulty with is creating good 2D textures. While I do find GIMP frustrating I think I am learning, and my 2D art is definitely something I need to improve on.
The majority of this build has been for the UI. I have been reading and watching loads of tutorials on how to make good, functional UI that not only looks great, and displays loads of information, but is user friendly and easy to use. It also helps that a lot of my day job is to make user-friendly UI! I wanted a clean, but futuristic look with sharp imagery to easily collect 'data' from images. I wanted the colours to be obvious, red for health etc, and the colours to match the symbol or thing they represent. I.e primary weapons will always be displayed with a certain colour. When an icon is shown in a certain colour it will mean to the player that that is a primary colour. I want to display more information with imagery and colours than words. As I love stats, I want lots of stats to be shown to the user so they feel they are building the vehicle the way they want, matching a certain play style or characteristic.
So with this new PC, after I finish off upgrade UI for the main menu, I want to create a brand new bike, with a finer level of detail, and learn about normal mapping textures in Blender. I also want to add some basic animations to the parts to make them move or appear to animate while the engine is engaged. Not only will this test my new skills in 2D textures, I will be able to apply it to increase performance in game, while creating higher quality, finer detailed game assets. It's been interesting seeing my progress as this project has continued, I may create a 'Hall of Fame', an easter egg scene of all previous builds of bikes that I have created. It's fair to say some of them are interesting!
So the past couple of days whilst trying to render or bake scenes, it has taken a long long time, and as my laptop is very average at best with just a basic graphics card, performance optimisations have always been on my radar. I have done a lot of research into various techniques into making sure I can get the best out of my hardware (and in future other peoples!). These techniques include things like Object Pooling, Texture Compression, Occulsion Culling and Audio Compression and Streaming. In fact I found these subjects really interesting and played around with Object Pooling while writing a script to handle muzzle flash effects.
The performance gains were obvious. As opposed to having one muzzle flash particle system GameObject you keep creating and destroying rapidly, you have a cache of about six, that always exist and you just show them and hide them. Due to the nature of my game you could fire 10 shots per second, each needing their own muzzle flash, and in a minute that is a lot of creating and destroying of sometimes intensive particle systems. Now I have six in an entire race, and I just recycle them. This revelation caused me to think I need refactor a lot of the weapon systems currently in place, which will increase performance and frame rate.
I have also been learning about textures and UV mapping. I had basic knowledge before, but really tried to get in the nitty gritty of 2D texture making. The new circuit currently has every texture-able model textured, not just relying on a pretty looking material in a sunset to look nice. Admittably my first attempts were not great, but I think with every new texture I create it gets a little bit better. I have to bodge it a bit by taking a screenshot of blenders UV map then go into GIMP to create some texture art. I am still not enjoying GIMP as a program! With this new knowledge of texturing, I am going to create a new bike with this new 'sprint' focusing on texture mapping, to create a complex looking 3D model.
So now at the end of the month a lot of things have been done to efficiency and look of the game. As with most projects you realise there are loads of better ways to do things as you do them, which can be frustrating as you've probably already coded it, and it's a big job. Thankfully in programming it's never a scrap it and start again thing. So I was having issues with the text in Unity, it was shaky and not very crisp. Then I find TextMesh Pro and find myself replacing every Text field in my game - there are a lot! Thankfully the game looks a lot sharper and TextMesh Pro does offer a lot more features.
Now getting to the point where the foundations as described in the previous blog are more or less 'there'. As systems are getting more complex I've had to re-build or re-organise a lot of the code to deal with increasing complexity. My bike object is getting bigger as more weapons are added, of course they not only comprise of meshes, but audio, code, and they all interact in certain ways. It is becoming increasingly important that I refactor as I go to make sure I keep using the most efficient way of doing things. This will likely require me to go back and completely re-write the physics of the player controlled bikes to be more forgiving. Currently the audio, effects, some visuals and all of the physics and handling is handled in one script which isn't my preferred method of working. I have a sprint planned to deal with this, and I would like to also create a new mesh for a bike at the same time. This will allow me to create a new blueprint for bikes moving forward, give them better laid out pre-fabs and even allow for things like animations and movement.
Needless to say I'm still excited at this prospect! Four months in and still very enthusiastic. This project started off as a bit of a showcase, just to try and prove to myself I could do it, but it now has turned into a labour of love!
End of next month I can see myself with the beginnings of a new circuit, one that will find itself in game, along with many other improvements and optimisations visually.
Have been making great progress on the game, doing about two hours every day, making sure at least something is finished no matter how big or small every day. I've been very busy recently with family and friends so two hours has been all I can manage, but seems to be enough for now. Even if I can't concentrate to do any coding, I've been writing this website, and adding to my game design document or business plan.
So I have changed my aggression towards getting a brand and a business up, I talked to a friend of mine who is in expert in getting a software company up and running and he said it may be more hassle then its worth at the start as you would have to do a lot of admin work to declare no income. Though I have done no research thus far, he did mention there was a threshold before you have to declare your income. Though I will still be thinking about where this venture will lead me, the studio and business plan will not be very important for the time being.
Coding wise the game has been going great, I'm learning new things as I'm going along and trying to make my code as accessible and future proof as possible. Last weekend I tackled probably my biggest piece of technical debt thus far, which was the position system. It was built to be static, all objects already pre-existed and only a total of ten could exist at one time. It took an entire weekend, but I managed to refactor the entire system, making it completely dynamic and scalable should I decide to have more AI pilots in the future.
This 'sprint' is now almost halfway through, the coding stories have been more or less completed, now to turn my attention to the more visual effects to give the game a bit more polish, and to add more objects to the environment. I did play about with one parameter called 'Static' which seemed to be an option to effectively declare the object static, so when lighting is processed, the engine doesn't have to worry about that object potentially being able to move. This increased performance dramatically, though certain objects that I have created in blender could not be declared static due to a normalisation issue. I can look at this when I create the other objects.
All in all, really pleased with how the project is going, still mega enthusiastic and everything so far hasn't proven too difficult. The foundations of the game mechanics are almost completely built, from which then I can focus on padding out the game with content, bikes, weapons, environments, stats and AI. (Pretty excited about the AI!)
So while things are chugging along I thought I'd reached the need for a website, and well here it is. This will likely be a place to spout all of my ideas for now.
So ZXRacing has spawned from the idea of the amazing combat racers you could find on PS1, GameCube and PC in the 90/00s. The simple driving mechanics, the on the edge of your seat nature combat really compelled me, and inspired me to eventually create my own.
After having now about two years experience in programming, (albeit web based) and a lot more in actually playing games, I've felt comfident enough to try and move into Game Development. I first played around with Unity around C# about a year ago, where I made what I call a 'proof of concept' bike driving game. It was primative but had all the basic features you would expect from such a game. It was then I realised that I wanted to make this thing properly. At the time I had another project on so I couldn't really commit.
So I started this project properly on 2nd of Feb 2019. It's now the 19th of May and am on version 0.0.6. Things are going really well, I have the basic game mechanics completed: race position, timer, best lap, speed, basic AI, laps. I also have some weapons and damage sorted out, and in time I just need to add those in, and give them a unique personality. I have a bit of design theme going on, especially with UI at this stage, but no logos or fonts or imagery. The idea is very much set in a cyberpunk universe, and with my love of space there will likely be some settings in space too.
At this date there are 2 bikes, 4 weapons and 1 circuit. One thing that I may struggle with is actual content, while I feel comfortable making sounds and programming, actual 3D modelling content may be a struggle due to the sheer quantity of things I would need to create. I am average at best at 3D modelling but I get the feeling after this project I might get good! I need to be careful with polygons and the complexity of the environments as I want to make sure CPU demand is as low as possible, especially if I want to eventually develop the game for Nintendo Switch. The idea at this stage is to develop for Steam, and with luck Xbox One and/or PS4.
So the basic game mechanics are more or less complete, now is the fun part in refining, making game content and making an authentic world. This next build I will aim to create more race objects, and fill out the one circuit with items and environment. These items I make will have to be non-track specific so I can use them in other circuits I create. I want to make a few more assets that are 'Hilkas Airfield' specific as well. The idea of this build is to make the game a little but more pretty whilst also being performant.