So I've been working towards a 3D game that I've wanted to make for a while now. On the road to this goal I need to make a number of pit stops that will get me closer. I need capital to start a company and hire a team of impassioned individuals to walk with me along the road. Heading towards this I have been gathering data, my own code to sit atop the game engine, and working on systems that I plan to use in all my games. The amount of code I have written and data I have gathered is constantly growing and will continue to do so.
Looking at games being developed through steam early access it seems to me that if a company relies on sales during development the risk to the company surviving increases. I of course want my company to survive and using the sales from a game to develop the next game seems like the safer approach to staying in business. So I want to get at least one game in a playable state before I start my company, and that is where I am heading.
Working on a game alone is difficult due to the time and large number of skills required. This means that I should be able to get a game into a playable state, but it will look like my logo because I can't draw. So I will get a game or two to that point before I seek help to finish it.
The second 2D game will probably end up being the first game I complete. It will require less data, fewer images, and less code. This makes it the best game to finish first.
There are a number of systems that I want to have in all of my games. I thought I would group them together so I can describe them in one place and don't have to repeat myself for each game. Some of them are 100% code which just needs to be written and tested. Other systems require me to gather data which I currently do not have or what I have is insufficient.
Day / Night Cycle
I like games where NPCs seem alive. They wake up, eat, do tasks, and even interact with other NPCs. To me this just seems like a way to make a game feel more real.
I've woken up really early and taken pictures outside. The data from the pictures turned out to be insufficient because I live in the middle of a city. When you can barely see any stars it is difficult to figure out when you should no longer be able to see them in the blue sky. So I'm building myself something to help. What I need to do is get away from the city and take pictures from astronomical twilight till noon of the entire sky, or at least half of it. Kind of like a manually made time lapse panoramic photo of the entire sky where every time I take a photo of a section of the sky it is as close as possible to the same position as the last photo. And of course I need to do this when the sky is clear or has no more than a couple small clouds that do not block the sun while it is rising. Once I have that I can programmatically design my sunset and sunrise.
I haven't decided how I want to do my stars yet. It would be nice if they could twinkle and I doubt I could do that with an image. So I'll probably need to use star position and magnitude information and then lower the brightness a bit for the twinkle effect. Since my initial games will take place around england it means I am going to want the stars to be centered near polaris.
The skills system will control every action a character can do. From walking and jumping to estimating the distance of a target and throwing a spear at it. Skills will be associated to body parts like the left leg and the body part can suffer from conditions. Most conditions will be negative, but not all. If you are walking on grass down a little hill with the wind at your back you will gain some speed with the same stamina drain. Now walking uphill against the wind in mud will be a different story.
I've written almost all of the code needed so that characters can have skills and conditions. And I've figured out some skill and conditions for a persons legs already. I've got arms, eyes, nose (maybe), ears, and mouth left to do.
As I figure out other systems I want in all my games I will add them here. If I do the complete percentage could actually go down.
A 2D side scroller based in medieval times which will use some of the data I have already gathered. Expect it not to be an ordinary side scroller. A detailed view of what I mean will be available when I have something to show.
The first profession you can play will be the knight. There will be medieval tournaments which centred on melee fighting. Jousting (during the time frame of my game) was part of a tournament but was more considered a duel and combatants might switch to shorter range weapons as the distance shortened or as one or both had been unhorsed. Jousting events had recently started to exist outside of the tournament.
There will be quests to do and more.
- Realistic day/night cycle, seasons, and weather.
- A randomly generated England like map for you to explore.
- Eat, sleep, and recover from injuries.
- Purchase, trade, or sell items in the games economy.
- Pay taxes and provide military service to your king.
- Journey to become a knight as a squire or even earlier as a page.
- Find love and struggle to survive in the harsh world.
- Provide other professions to play.
- Craft items based on your profession.
This will be a very different style game from the other 2D game. You will start playing by selecting a century you want to start in and must unlock higher centuries. I'm thinking you will start in the 13th century as a Baron/Baroness and must unlock higher ranks to play as a Earl/Countess or King/Queen. In the 14th century you will also be able to play as a Duke/Duchess and Marquess/Marchioness. In the 15th century you will also be able to play as a Viscount/Viscountess.
The goal of the game is to gather resources, hire workers, and construct a new home and defend it. Once finished you will need to do something (I'll figure out what as I get the game made) to unlock the next rank.
- Realistic day/night cycle, seasons, and weather.
- Construct a home and defend it.
- Search for resources.
- Trade with travelling merchants or nearby locations.
Back in March 2012 I ended up having a computer die and replaced it. The replacement has an 8 core cpu and 16 GB ram and shortly after I decided that it was finally time to start working on the game I have wanted to make for a long time.
A role playing game based in medieval times (around 1200 - 1300 England) with action, adventure and strategy aspects.
I want to make a game that will be something that I will be proud to play myself. I will put the extra effort into making it great and redesign anything that doesn't work or play well until it does. I will not be satisfied until it meets my standards for excellence.
Changes Since The Original Concept
- I was planning to possibly have magic in the game. Recently I have decided to no longer have magic in the first game. A sequel, if I get the chance to make one, is where magic would exist as an integral part of the story.
- I was planning to have games inside the game (like tournaments and chess). Since chess and the like will not be integral to the story they will probably not be added to the game. Jousting tournaments and the like may exist depending on how the story unfolds.
The game will be a third person perspective 3D game where the player has to figure out what is going on in the world and how to deal with it.
You begin on one of the main continents and quickly get shipped off to the other where situations will lead towards you designing your own castle and town. You need to manage your town while exploring the world via horses, ships, and other modes of transportation. Gather information and with the help of those around you solve the problem afflicting the world.
- Support for up to 20 monitors with 2 game windows per monitor (providing your computer/video card can handle it).
- Customize keymappings as you like. Modifier keys include ALT, SHIFT, CTRL, and the Windows key. 5 mouse keys including the mouse wheel with vertical and horizontal movement.
- Windows 10 Minimum. There is no point in me making the game for anything older since it is far from done.
- More than 4GB Ram.
- At least a 4 core processor, possibly 8.
- A mouse and keyboard to interact with the game world.
- At least 4GB storage space per generated world with an unknown amount of space to store world changes, player inventory, and more.
- Video Card - No idea about a minimum.
It just makes sense that since I have 15 years of experience programming in python that I would use a game engine that supports it. Python as a programming language utilizes a lot of c code and taking advantage of this allows for the creation of fast code. Of course as in any programming language you can write code that is slow.
To figure out what is slow I have been profiling different ways of doing things for a while now. Some of the things I found are interesting and I provide a version of the profiling script used for each case. Visit my Python page if you are interested.
When I decided I would create a game I knew I wanted my game to work at 60 FPS. That started me thinking about what in a programming language slows down execution. Of course anything you do slows the execution down so if you want the best preformance you need to do the least amount of work. If you're interested in learning some of what I figured out checkout out my 60 FPS page.
I decided I would use Panda3D as my game engine. Disney used it for a game so I thought it should be fine for my needs.
I spent some time looking over Panda3D's python code to understand how things worked and to see where their code sits regarding my profiling knowledge. Unfortunately I found things that were done in ways that are slow. So I wrote my own python code to sit atop Panda3D's C++. It took a while to design my own api and I don't have all the features or any debugging tools like Panda3D has yet, but my code is definitely faster.
Panda3D's api uses functions with a variety of parameters to create what you need. Unfortunately an optional parameter means you need to test if you passed data into that parameter which ends up wasting time no matter how many parameters you use. And having lots of functions like this increases cyclomatic complexity which becomes a nightmare for testcases. I prefer having classes with a specific usage and the minimum code to do what they need to do because . If you need to do something in a different way or add to the usage of a class then you create a new class with the altered or additional code and using inheritance if you need it. Of course it is faster if you don't use any inheritance but until I run into speed issues my code will be using super. Another advantage of many classes is the name of the class can imply the functionality which is easier to read than having to look at the at the data passed into a class or function. The code I have is definitely not finished, but it does what I need and will continue to evolve as I work on my projects.
For my projects I have created a multiprocessing structure by where I have a main process which spawns additional processes where Panda3D is one of these additional processes. It means I can do complex tasks alongside the game and then relay information to the panda3d process. Keymappings are processed by the main process and then any actions to preform (like jump) are relayed to the Panda3D process. This way the Panda3D process concentrates on rendering the game and other processes deal with things like the economy or dynamic image creation.
The code needed for the 2D games is completed and has gone through some initial usage and testing. I still need to create my gui widgets which will be derived from what Panda3D has and the initial changes and additions I made to their widgets. I will end up creating what I need when I need it.
I plan to leave at least 40% completion for when I get back to working on my 3D game.
Everything is a python application I have created to manage all of my game data. Currently it can:
- The search screen displays data by Common Names and by Latin Names and displays modified objects separately.
- You can filter by Name, Type, File, Enabled, and a range of the percentage of how many fields have been filed in.
- Each type of object has a template which defines the fields an object has.
- Adding fields will add the fields to every object of that type.
- Deleting fields will remove them from every object of that type.
- Moving fields is currently incomplete because I haven't needed to do so yet.
- Allows you to create a new file within one of the existing data source folders.
- Create a new object of a specified type in the file selected.
- Each item must be given a unique latin name to go along with animals having a scientific name.
- When a modified object exists it has been saved to a new file which helped during development if the data had issues that needed dealing with.
- Saving a file, a type, or all objects is possible which will move any modified objects into their original data files.
Validate Data Structure
- A way to test and update any objects that are missing any of their templates fields.
Things to do:
- Make changes to the enabled feature so that it is not Yes and No. Instead it needs to contain a list of the games that it is enabled for. Filtering by enabled also needs to change.
- A way to generate the live data for a selected game. Since the games are different they will most likely have different data formats.
- A better way to display errors to the user. This will be needed before the dev tools are released with a game.
- A generic import that can load data from various sources. When I get all of my mineral data ready I will be creating this import so I don't have to format the mineral data manually or programmatically into something I can use.
- Provide ways to preview things like a model and texture, a sound, or other things.
- Other things will be created when they are needed.