Permanent items are rare:
Probably something that many players will hate but many items will be temporary boosts. This is to avoid situations where players have all items and keep the game interesting for a longer time.
Consumables, like potions make sure people will continue to look for certain items.
Food may decay like it does in Don’t Starve.
Pickaxes may break down eventually, like in minecraft. We should however allow people to repair them, like in starbound.
Stats should make a difference:
I have died in terraria a couple of times because I didn’t notice my health was low. We should give as many clues (visual, sound and gameplay) on the stats of a player. This will give more the effect of a downward spiral, which is more interesting than a flat health-bar.
Gameplay differences can even make the game more interesting.
Maybe monsters appear when you have a low sanity, your walking speed can decrease when you have low health.
Crafting:
In minecraft, you must be able to find recipes in the crafting window. Requiring experiments is usually not a good thing, unless users can reasonably be expected to figure it out by themselves. The furnace was good as it didn’t require to check a lot of combinations and was okay.
Terraria has multiple crafting tables. It will spice up the game and add some decoration in the world.
Multiple worlds:
In Terraria and to a lesser extend in Minecraft it is too easy for one player to mine all ores away. If other players join, they can’t find ores. It works in giving every player the ability to get enough ores. We will probably use “planes” for this.
No terrain destroying monsters:
Creepers are irritating as hell. Maybe some worlds have some monsters that can damage the terrain in some ways but this must be the exception, not the norm. Thinking of these worlds, they may be regenerated each time you enter them.
Create depth, not length:
This is a difficult thing. We rather want a complex game than a game that requires players to go through a dozen tiers that all feel the same. This means that we should give the players meaningful options and the only way to do that is to add advantages and disadvantages to each item.
Coding lessons:
Maps are finite:
Basically the generator is much more easy to build if maps are considered to be finite. Yes it is possible to work with chunks and make infinite maps but we really don’t want to go there.
Infinite items using composition:
We will assume that there are an infinite amount of items in the game. Therefore only the items that are in the game will be loaded. This is needed because some items will store properties like their durability and their material.
No scripting:
We believe that scripting may be useful for engines or moddable closed-source games but not for small-team open source games. In addition, we believe most scripting solutions hurt the type safety that is in C++. We encourage modders to instead contribute to the main code base.
Interfaces everywhere:
In many places we will use interfaces instead of classes. Many classes will be defined in cpp files. Factory methods will return (smart) pointers to these interfaces. We believe this will help making the design more extendable.
2D only:
We have tried 3D in steamdigger but it had two drawbacks. First of all, it is more difficult for artists and secondly the user interface became more difficult. It was not worth it.
Visual studio compatible:
We want to be able to compile the program using visual studio as it will help in running various tools, like performance analysers. This may help to get a good speed. On the other hand it should also compile under code::blocks (with GCC 4.8) and linux.
GUIs are boring:
GUI code is not very interesting. Thats why we will be using a library.
Make a distribution tool:
We would like to release early and release often. Distribution tools help for this.