Logo (2 kids swinging on a swing)

My Projects

In October 2016 it became apparent that the only way I'd be able to make my 3D game was if I had some capital to invest into it. The best way to do this and still have some progress towards my 3D game is to make another game. It would need to be a game with a smaller scope and something easier to create. So I started thinking about what to do and came up with something I can already picture in my head.

Overview

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.

Possible Features

  • 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.

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.

Currently the 3D game is on hold while I work on the 2D game because it is going to require more resources than I currently have. Some progress in the 2D game wil contribute to the 3D game because they are going to share some data, audio (animal sounds), and code. If things work out I'm hoping to jump right into continuing the 3D game after the 2D game is done but I am expecting that a second 2D game (or more) will be required to get enough capital to complete the 3D game.

Overview

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.

Gameplay

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.

Features

  • 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.

Requirements

  • 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 14 years of experience programming in python 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.

Python Profiling

Over the years I have learned a number of ways to do things and started using the c profiler to figure out which ways are the fastest. The results have been interesting and have shaped the way I write code. Visit my python page if you are interested.

Panda3D

I decided I would use Panda3D as my game engine after seeing that disney used it for a game. It looks like it should be fine for my needs.

Recently I spent some time looking over Panda3D's python code to understand how things work and to see where their code sits regarding my profiling knowledge of speed. Unfortunately I found a number of things that were done in ways that I have discovered are slower than they need to be.

As a developer I know there are lots of times on a project where you wish you had more time do something in a better way. Code gets written as quickly as possible to keep the costs down for the client and you rarely end up writing something that is efficient and fast. I'm assuming this is probably why Panda3D's gui (direct) is written in a generic reusable way. It made it quicker to write but I know it will run slower than what I'd like in my game. Gamers want to get 60 FPS without having to buy hardware that costs a fortune. As the developer of a game you want to be able to support older hardware so your game is available to more people. I realized that I was going to need to write my own gui that sits on top of Panda3D's C++.

As I started to figure out how I wanted to write my gui I soon realized that I wanted to change other things to suit my needs better. So I am writing my own python code to sit on top of Panda3D's C++. The amount of code that I am going to need for my 2D game is quite low and I can expand on it when it comes time to make my 3D game. For now I am concentrating on making a multiprocessing structure where Panda3d will get initialized from a secondary process. This will allow me to have a main process that manages things and I can spawn additional processes as needed like one to generate images on the fly. If the process running Panda3D crashes there are a number of things I can do from trying to restart the process to packaging up data for a bug report and providing a way to send it.

I am in the process of getting this python code written so that I can continue working on the 2D game.

Everything

This is the application I have created to manage all of my game data. Currently it can:

  • Search, edit, and create new items in the data.
  • Generate the world for a single seed. This will create a world file that the game uses to draw the world. World parameters are defined in a data file which is editable in Everything.
  • Test the world generation code I have for all 1 billion seeds. You can set how many cpu cores to use and change it at any point without missing a seed. You can also stop and resume testing at any point and it will make sure it doesn't miss a seed. It keeps track of the current sessions runtime and any previous runtimes so it can estimate how long it will take to run. Shutting down the application will stop the test generation before closing so you don't need to worry about losing any progress. This takes a while to run (weeks so far) and is mostly for testing that world generation has no unexpected errors when the game is launched.

Things to do:

  1. Provide a way to preview a UI. This will load up a Panda3d window and display the UI inside.
  2. 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.
  3. A better way to display errors to the user. This is needed at some point before the game is finished, but it isn't required right now.
  4. A way to go through all the raw data and generate the live data in a format that can be quickly and easily read to reduce loading times of the game. This will get created when I figure out the format I want for the game data.
  5. Figure out what data will be stored in the world file and how it will be formatted.
  6. Additions to test things in game.
    • Previewing a model and texture.
    • Testing sounds. Since I won't be using Panda3d to do sound and instead will be using something else I will be able to simiulate things like a bird flying across the screen while in Everything.