A New Developer's Log: Week 1
Welcome, all, to the game development blog for my new game, LOGICBOMB.
Before any discussions about development, I'd just like to get the formalities out the way. I'm not an experienced game developer, so any horrific designs or incorrect programming you may see here are simply a product of my lack of knowledge with the unreal engine, or just with the concepts themselves, so apologies if I seem to misunderstand some topics in these logs. The purpose of these is to show the process a brand new Unreal developer takes towards designing a game, and how you can improve during development. With that being said, let's begin.
I have never used Unreal Engine before. Going into developing this game one week ago, I had no idea of how the engine worked, how to use blueprints, or what the C++ API for this engine looked like whatsoever. But, over the course of the last week, I have been slowly learning and building a picture of how to build a basic blueprint setup, and how to integrate C++ into those blueprints (hopefully) effectively.
To begin with, I created a basic First Person Example Project, and removed the mesh for the character, so I had a body-less bouncing ghost. Removing the gun and jumping mechanics, I then had the perfect character for my game without touching a thing in code or blueprints, which I found astonishing. In building other C++ game engines, that's really not something you take for granted. So perfect, that's half the battle out the way!
I knew I wanted to make some sort of linux-type terminal system, but didn't know how to go about doing so. After doing a little digging, I discovered Widget Blueprints. These are (to my understanding) a 2D plane that acts as a GUI that can either be placed in a viewport, or as a component within an actor. Using this, I figured that it would be easy to create a simple text terminal within the blueprint editor, and then use materials to make it more visually appealing, rather than just some spaghetti text on the screen.
There was just one small issue: I couldn't consistently keep input on the widget.
I managed to find a blueprint node which allowed you to lock keyboard input into the terminal, "Lock Input to UI Only". It looks like this:
However, if a player decides to tab out of the program, or clicks off the window, the input will be lost to the widget, and the player would be softlocked, unable to input anything. This was eventually solved by using the "On Focus Lost" node, which lets you lock focus back to the program, like so:
Pretty self explanatory. And with this, I managed to create this first initial version of the widget, within the first 5 hours. Success!
This rapid style of game development is completely new to me, however I realised the need to travel slowly. Prior planning is important to set up a system worth using in the future, and a sloppily thrown together system will only result in further headaches, that much should be common knowledge. So, I drew up a basic plan to create a robust terminal system to handle commands.
- Split the command up into a "Left Side" and "Right Side", eg. the actual command and the arguments.
- Split the arguments into an array of separate strings, with a separator of a space.
- Switch the left side to find if the command entered exists, and if it does, call the relevant function in a function blueprint or in the terminal itself, passing in the arguments.
- If the command is handled correctly or incorrectly, messages can be printed to console by using a function.
So, that's exactly what I did, creating the following system:
If I created it again, I would change a few things, but for now, that system is in place. Moving on from that, I decided to focus more on the graphical side of the terminal, and decided to create a material to emulate the classic scanlines effect and scratching to overlay on the widget. It's a really basic overlay material, which you can see the finished product of below.
It essentially uses a static lines texture whose UV is changed over time by a Panner, which is then added with a roughness texture multiplied down in power to give the effect of small scratches on the screen. I think it works pretty well, all things considered, and this is the final result:
Finally, I overlaid this onto the terminal widget, and applied the widget onto a basic royalty free terminal model, giving this as the final result of 9 hours work:
In the final three days of the week, I managed to add support for displaying other external widgets on the terminal, so I could then make the different parts of the terminal modular. Using this, I managed to add some more visually appealing GUI elements to the system, including some basic test error dialogues and a mock network adaptor panel to enter values.
That's all for this week's devlog, and I hope anyone reading has enjoyed seeing a new developer attempting their first game on the engine. Please comment below if there's any way I could improve, or how I could change any scripting within the game, as feedback is always welcome.
- C272
LOGICBOMB
An unforgiving, brutally 80s terminal game about defusing bombs under pressure.
Status | In development |
Author | silverbyte |
Genre | Puzzle |
Tags | Hacking, oldschool, Time Attack |
Languages | English |
Leave a comment
Log in with itch.io to leave a comment.