My experience in the development and production of video games is purely theoretical; so before I dive in and make a bunch of mistakes that mess up my source control, I wanted to ask some people with practical knowledge if a general outline for game development that would promote efficiency and source control exists - and details of such an outline. Perhaps a work pipeline is another name for this, but I didn’t want to mix up terms as I’m fairly new to all of this.
~Details about the game that define what I will need to work out - skip this paragraph if desired~
Currently the general plan is to work from the third person shooter blueprint (I know how to program in C and a little C# visual, but not C++ so I’m stuck with the blueprint/logic node system at the moment) and replace the character actor with an up-gradable tank. There will be plenty of upgrades that modify the movement and attack capacities of said tank, most of which will be reflected in the tanks appearance. Additionally, there will be enemy tanks with AI and a mission type system that will propel the story forward to encourage the player to defeat these enemies and upgrade their tank with the rewards. I would like the missions to occur in randomly generated zones that are built by using something akin to procedural generation via stitching together chunks of land to give some variable terrain, enemy bases, etc. All the upgrades and missions, along with ideas on how gameplay should ideally progress have been documented. All that leaves is the art, modifications to the blueprint, setting up enemy AI, setting up the random generation if within my abilities, and linking the art to the upgrade system after implementing some GUI.
Assuming I have all the necessary textures/meshes ready, by my estimate that leaves:
- modifying the blueprint to get the tank to operate with the desired controls
- modifying the blueprint to animate the components of the tank “actors”
- making functional GUI’s to link the upgrade systems to actually effecting the tank “actor”
- creating a blueprint that adds new components as they are purchased via the GUI to the tank
- Game conditions for victory, loss, exp gain, etc.
- Level editing for the main base and creating links from entering certain buildings to triggering the appropriate upgrade GUI
- creating a blueprint/blueprints for enemy AI
- create blueprint for missions
- creating a seed-based generation for enemy terrain.
If someone has the time and will to review all the information and tell me what I should specifically focus on first, that would be great, but really all I need is a sort of general guideline on where to start. Right now I’m just reading the documentation extensively and reviewing the forums as much as possible. I tried to use the search engine, but due to lack of knowing the specific terminology I was not very successful. A link to a similar post would more than suffice. This is my first post, so I apologize in advance for any mistakes in the section in which I’m posting. I look forward to any and all input and am happy to be a part of this community.
Your outline looks ok. The main thing you have to worry about is analysis paralysis, wherein you don’t make any progress because you’re stuck trying to figure out the best way to do something. You can guess how to structure your code and project or what functionality you will or will not need, but you can’t accurately know what you will need until you need it. Build only what you need now, and clean it up later.
In my experience, the best way to do this kind of development is do whatever it takes to get it working. So set a small and easily achievable goal, and work towards getting it in the game and working. Don’t worry about perfecting models or textures, or coming up with the best way to structure your blueprints…just get it working. Once you do that, THEN you go back and restructure and optimize your code. It’s like carving marble, you start off with the basic shape of what you are building and from there you continually refine until you get the end product that you want. You also want to implement as much of the core gameplay as early as possible. Not necessarily perfect the gameplay…but get it to the point where you can jump in and play the game so you are able to continually test/see your changes. So from your overview, I would do something like: get the tank working with controls, get basic AI working, get win conditions working, then get basic tank components working. From that base you have built, you will refine everything. Improve tank physics, maybe start working on the art once you know what kind of setup and animations you need, add a few more AI features that you want, add some more tank components that you want…eventually you will end up with the final product. Don’t worry about messing up your source control either, it was designed for continuously changing development.
One of my favorite subreddits, /r/TheMakingOfGames, has a hour and a half long video series about the whole development process behind Civilization IV. They explain all the changes that they made between each alpha/beta version of the game, and also outline where their focus was during the different development phases. It’s very interesting, even to just have playing on the side while you are working on your project.
You’re right, i tend to get bogged down in the most tedious details while tons of simple work is still possible to do. It’s great that UE4 takes care of source control for me since that was my greatest nemesis in other level design programs. Having to restart entire Maya projects because of poor source control still gives me nightmares. I’m going to check out those links, especially since i love the Civ series. Thank you for all the advice - sometimes a nudge in the right direction is all i need to get moving.
That only leaves me wit two questions: is this process of deciding what order in which to assmble the game referred to as the “pipeline”? Also, once im done with this first game, is there a general order in which a game is most efficiently assembled in UE4 onced ive learned the ropes? im going to wing this project to learn the engine, but i would also like to know how to maximize development and production speed for future projects.
Any other input would be greatly appreciated concerning this topic (including my initial post). Thank you for helping me rcapote; it’s really good to know im part of a supportive forum that not only helps a newbie to engines like me, but can also anticipate other resources i might need without me even requesting them. The documentation can be confusing due to my lack of c++, so videos will definitely help a lot.