Some of the python code will need to be rewritten once my python code which sits on top of Panda3D's C code is done. Some of the code can simply be copied into this new structure. Some additions to the python code which sits on top of Panda3D's C code will also be required since the structure is initially being written for the 2D game.
- Use the windows api to turn off sticky keys and other accessibility related keys that could interfere with playing the game. We will turn back on accessibility features when the game is shut down.
- Add in a way to save the configuration of the windows in case multiple family members are playing the game and want things different. I envision a screen where you can easily say you want to run the game fullscreen on monitor one for those that just want to get the game going quickly.
- Add in validation for keymappings. Currently we do not detect keymapping conflicts.
Gathering detailed data.
For all plants:
- Where and how long they live.
- When does the plant produce flowers. When do the flowers open.
- When does the plant produce fruit and what kind.
- Is the plant corrosive, poisonous, toxic, or an irritant.
- How hard and heavy the wood is.
- What colour the wood is.
Gathering detailed data.
- Where and how long they live.
- How large they are at various ages.
- What they eat.
- Their senses (which can change based on age) like sight, infrared, hearing, smell, echolocation, electrical fields, and magnetic fields.
- Their abilities (which can change based on age) like flying, bioluminescence, swimming, camouflage, having venom, having poison, and being toxic.
- Figuring out which minerals I want. There are too many minerals for me to have them all. Also having them all is unnecessary as we are in medieval times.
Gathering detailed data.
- Where they originate in the world.
- How heavy they are.
- What colour they are.
- Continuing to figure out the story.
- Redesigned the launch window to support multiple monitors and windows.
- Created the way to set keymappings and save/load/delete keymapping configurations. The code has also been set up to trigger actions based on keymappings like toggling windows.
The world is going to be large and I mean "LARGE". Currently I have estimated it as follows though it could change.
(land) 450,611,680,910 m2
(area) 1,543,190,688,050 m2
(land) 148,742,852,846,892 m2
(area) 509,393,331,667,440 m2
How can I make it so large? My world will be randomly generated.
A 4 GB file (estimated size) will be created containing information which will be used to randomly generate areas. While you are walking through the world we will be generating areas before you get to them so there will be no load time.
World seeds will range from 0 to 1,000,000,000 with a game default of ? (to be determined) unless the player changes it.
I will be trying to make the world appear spherical. There will be an estimated 916 m line of sight from 1.5 meters and 4,096 m line of sight from 30 meters (eg. from the mast of a ship).
The world seed will be used in the following ways:
- To calculate landform size, elevation, and placement on the map.
- To calculate the amount of precipitation and evaporation for areas on the map. How big an area is yet to be determined and mainly depends on how the randomized terrain code works out.
Based on the latitude, elevation, precipitation, and evaporation we will figure out biomes from this list:
- Montane Tundra
- Desert Scrub
- Montane Moorlands
- Montane Grassland
- Montane Woodlands
- Deciduous Forest
- Coniferous Forest
- Montane Forest
- Dry Forest
- Rain Forest
- Saltwater Bog
- Brackish Bog
- Freshwater Bog
- Saltwater Fen
- Brackish Fen
- Freshwater Fen
- Saltwater Marsh
- Brackish Marsh
- Freshwater Marsh
- Saltwater Swamp
- Brackish Swamp
- Freshwater Swamp
- Mud Flats
Everyone playing seed 13 will start with identical landforms and biomes.
- How many animals initially exist and where they live will be based on the world seed.
- Animal locations will change based on abundance of food, weather, and time of year (migration).
- Animals (carnivores/omnivores) will eat other animals.
- Animals (herbivores/omnivores) will eat plants.
- Animals can stave and go extinct.
- Animals will age.
Everyone playing seed 13 will start with identical numbers and placement of animals. Weather, animal actions, and characters actions will cause this to differ per game as time goes on.
Plants will be added to the world based on biomes and the world seed.
Currently I have only collected seed plants (spermatophytina).
- Weather (lack of rain) and temperature (too hot or too cold) can cause plants to die.
- Plants will grow over time.
- Farmers fields and orchard fields can be used to grow plants for food.
Everyone playing seed 13 will start with identical numbers and placement of plants. Weather, animal actions, and character actions will cause this to differ per game as time goes on.
Main story characters will be added to the world based on the world seed.
Additional characters will be added to the world in a way where things are different for each player.
- Characters will eat and chop down plants to build things.
- Characters will eat animals.
- Characters can starve and die. Main story characters will not starve or die.
I was planning to have every mineral but I had no idea there were so many. Instead I'm just going to have all the main types of stone, metal, and gems.
- Characters will dig up minerals to be used in the construction of buildings, weapons, and other items.
These are what every character will use to convert one of more items into one or more other items.
- There will be a way in game to search recipies by name or ingredient.
- There will be a way to specify a keymapping or associate a widget to a recipe. Some will be specified for you like "Set up camp and create a campfire for the night". If you find yourself constantly chopping branches into kindling or boiling water you can make it easy to do these things.
- Have some recipes for Bakers, Brewers, Farmers, and Mill Workers.
This will be the list of all items that will exist in the game. All items will be crafted through recipes using a specific building (like a farmers field) though some like "collecting water" will be done near landforms like a lake or river.
Most buildings in the game will be constructed by NPC's. Specific buildings will be required for specific professions.
- Wind Mill
Things to do:
- Creation: Continue work on creating a randomized world.
- Animals: Figure out what biomes the live in.
- Animals: Figure out what they eat.
- Animals: Figure out other information.
- Plants: Find any other types of plants I think would be worth having.
- Plants: Figure out which biomes they live in.
- Plants: Get a max size and weight for all species.
- Plants: Need models and textures for all plants at various ages.
- Minerals: Figure out which minerals I want in the game.
- Characters: Get a complete list of main story and additional characters.
- Recipes: Gather recipies for every kind of job.
- Items: Figure out a complete list of all items in the game.
- Building: Figure out a complete list of buildings which will be partially based on recipes.
Main Story Line
This will be the story the player needs to play through to get to the end of the game.
- The initial game play has been written. This scene describes about 2 minutes of play in which the player controls the character but is guided towards a goal.
- The opening scene has been written. The player will sit back and watch as this plays with some opening credits. This scene consists of an unknown amount of time.
- The next scene is partially written. The player will have partial control over their character as this plays out. This scene will last about 5 minutes so far.
- Some back story has been partially written. The player will sit back and watch as this plays in the middle of the scene above. This scene will be no longer than a few minutes.
- The last 30 seconds of the game has been written. The player will sit back and watch this play out while some music fades in. This scene is what happens just before the credits play.
- The credits will then play for an unknown amount of time with music.
Additional Story Ideas
Most games have a story that revolves around the main character and anything that happens is triggered by an action he or she does or when they walk to a specific location. NPC's are just there to help the main character move through the story. They may repeat a daily schedule or just stand around waiting for the main character to talk to them. Personally I think this makes NPC's very boring and makes the game seem static. You know exactly where each NPC is, or at least their general vicinity and every time you play the game things are the same.
Back in 1992 - 1993 while I was in college I started writing what at the time was going to be an epic poem. I would print out new pages for a group of people and they would usually say they liked it but not much more. When I reached page 54 the lack of constructive criticism caused me to read what I had written. It became obvious very quickly that all I was doing was telling the reader what was happening and not letting them get involved in the story at all. I ended up keeping the first 2 pages and throwing the rest away because the overall story was good but what I had on paper needed work.
And this leads to an idea I had which should make the game more interesting and increase replayability. Lets say we have a story that revolves around the king which has 3 events (A - C) with event B requiring the king to travel to a village. We have 2 players as shown below with varying times between events. If the players travel to the kings castle on day 20 only Mrs. White will find the king there. If the players travel to the village on day 20 then Mr. Black will run into the king.
Mrs. White's game.
- Event A - occurs 5 days after the game starts.
- Event B - occurs 6 days after event A.
- Event C - occurs 15 days after event B.
Mr. Black's game.
- Event A - occurs 10 days after the game starts.
- Event B - occurs 8 days after event A.
- Event C - occurs 12 days after event B.
This is of course just a small example to demonstrate the idea. The more NPC stories I have the greater the variation between players games and the more alive the world should seem.
Random Game Events
The game will also have lots of random events that can occur which are more oriented to being in a certain place when they occur. The idea behind these is to have a pool of them and choose random ones as needed. Each event should be categorized so we can choose a number of each type so the player has a variety. This will provide more variety to players and increase replayability.
So far events can be one of the following types:
- Town Events
- Tavern Events
- Convoy Events
Things to do:
- Main Story Line: Finish the story.
- Main Story Line: Figure out all the characters that will be required for the story.
- Additional Story Ideas: Convert the kings story I have into events.
- Additional Story Ideas: Figure out other stories for NPC's.
- Game Events: Continue adding to this list.
This is where you will set up the game windows you want, keymappings, and specify preferences before the game loads.
You can specify up to 2 game windows (of various types) per monitor. They can be fullscreen or windowed.
Heads Up Display
This is where we display information to the user in game, but outside of the 3D world itself. It will display information about your character and general information about the world (like the date/time).
When the game first starts you will be presented with a screen where you must choose the size and style of UI you want to use. Community designed UI's will be promoted so those that put in the effort to design their own (using Everything and a paint program) can have it seen, used, rated, and commented on by others.
When the game wants to display widgets on the screen it dynamically draws them from a single image sprite. Each time the game is loaded we will create cached images for UI elements as we need them. The code is fast enough that we can do this on the fly.
The text widget has cut, copy, paste, select all, undo, redo, and selection functionality by keyboard only.
Things to do:
- Launch Window: Create a button to change all window keymappings at once.
- Launch Window: Create a screen that can be opened to quickly select a window size. You will be able to select windows of quarter and half sizes and their location.
- Launch Window: Add all the preferences (when I figure out what they are) somehow so they can be altered before you start the game.
- Launch Window: Provide a way to backup and restore configuration and save game data. This will create a zip file and save it wherever you choose.
- Launch Window: We need to turn off accessibility features like sticky keys that could interfere with game play. We will turn back on accessibility features when the game is shut down (even if it crashes) if they were enabled.
HUD: Finish designing the widgets.
- TextEntry - Add the background image to the widget.
- Slider - Create the widget.
HUD: Create specific UI panels.
- Inventory - This will require designing how inventory is handled inside a container.
- Trading - This will require designing how trading with a merchant is handled.
- HUD: Create widgets for the menus in the game. It will be similar yet slightly different from the existing button widget.
- HUD: Create the layout for the UI selection which you will be presented on first game load.
- HUD: Finish the html template I have created to help aid in the creation of a custom UI. Medium and Large sizes still need Checkbox, Label, Select, Slider, and Text Entry.
Things to do:
Get audio for animals:
Sounds that animals make while moving and communicating. Most animals will require sounds for moving over certain types of terrain. Some animals like horses will require sounds for walking, trotting, and galloping over all types of terrain.
- A bird flapping its wings.
- A lion roaring.
Get environmental audio:
Sounds that occur in nature.
- Leaves rustling in the wind.
- Waves crashing against the shore.
Get audio for characters:
We need sounds that happen when a character moves around or communicates. We will need sounds for walking, jogging, and running over all types of terrain. We will also need sounds that are in response to some action like jumping, falling, or getting hit.
- Clapping hands.
- Cheering at a festival or in a tavern.
- Falling into a pile of autumn leaves.
- Walking on a frozen lake as it gives a little from your weight.
- A baby crying.
- Grunts and screams that occur while you are being attacked.
Get characters speech:
All characters in the game will speak.
- Some characters will narrate things at certain points of the game.
- Main characters will have specific things to say. They may still have different things based on situations but all their text follows a script.
- Additional characters will be designed in a way so that they can have their profession chosen at the start of the game. This means they will need to be able to speak text for every profession and situation.
Most in game music will be preformed by npcs (minstrels with actual instruments) but some times we will want to use background music.
The music and in game instruments will be medieval which should make for an interesting experience.
Get audio for when someone is working on a recipe or using an item:
We need sounds that occur when someone is doing their job or using items in the game.
- Constructing a wooden chair
- Chopping down a tree
- Pounding a sword on an anvil
- Eating an apple
- Drawing a sword
- Sitting down on a chair
- Opening a door
- Anything else that I've missed listing.
This is the application I have created to manage all of the games 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 work 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:
- Provide a way to preview a UI. This will load up a Panda3d window and display the UI inside.
- 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.
- 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.
- 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.
- Figure out what data will be stored in the world file and how it will be formatted.
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.