User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
cppdev:startnewgame [2012-10-31 13:27]
Carsten created
cppdev:startnewgame [2013-01-07 12:07] (current)
Line 1: Line 1:
-====== Starting your own Game or Application ​======+====== Starting your own Game ======
  
-FIXME  THIS TEXT IS WORK-IN-PROGRESS,​ I'll finish it soon!   --- //[[carsten.fuchs@cafu.de|Carsten]] 2012-10-31 12:03//+After you took [[cppdev:​gettingstarted|the first steps with the Cafu source code]], you're ready to use it to develop your own game or application.
  
-After you took [[cppdev:​gettingstarted|the first steps with the Cafu source code]], ​you're ready to use Cafu to develop your own game or application project.+This section lists the most commonly used methods for starting new projects and explains the required ​steps to give you a good start.
  
-There are many good ways to work with Cafu. 
-This section lists the most commonly used, and the required steps to give you a good start. 
  
 +===== Cloning DeathMatch =====
  
-===== Overview =====+The "​normal"​ and recommended way to start a new game is to create a copy of the example game DeathMatch under a different name. This is useful because it immediately provides you with the proper directory structure, working code, and example files.
  
-Cafu is designed to make the development of new games and applications easy. +==== Creating ​the clone ====
-It separates the core engine (the technical framework that is the common basis for each game or app) from the program code and the resources for each game.+
  
 +Creating the copy is straightforward:​
  
 +  - In ''​Games'',​ duplicate the directory ''​DeathMatch''​ and name the resulting copy as desired, e.g. ''​MyGame''​.
 +  - Delete the directory ''​build''​ in ''​Games/​MyGame/​Code''​.
  
-MODs, +The second step is necessary because previous builds of DeathMatch may have created files whose copy can confuse ​the linker when it is creating the program library for ''​MyGame''​ for the first time.
-like plug-ins ​ / ardchitectute +
-multiple at the same time +
-Games/ +
-each mod can be game or application+
  
-not stop from modifyin ​the core engine+To implement these steps, you can use any method you like, for example a file manager like Windows Explorer, or the command-line. This example shows how you can do it under Linux: 
 +<code bash> 
 +$ cp -r Games/​DeathMatch/​ Games/​MyGame/​ 
 +$ rm -rf Games/​MyGame/​Code/​build 
 +</​code>​
  
 +==== Using your new game ====
  
-===== Working with DeathMatch =====+Technically,​ the above steps are all that is required to create the basis for your new game:
  
-Working ​with the DeathMatch example ​game as-is may seem totally off-putting ​to you, but in some cases it might be a worthwhile consideration nevertheless:​+  * When you re-run SCons as documented at [[cppdev:​gettingstarted]],​ the code of your new game will automatically be picked up, compiled and linked. 
 +  * When you start CaWE, it will automatically recognize the new game and show it in the "​Configure",​ "New Map", "New GUI", ... etc. dialogs. If "Start Engine"​ is checked in the "​Compile"​ menu, it will also start the Cafu Engine ​with the new game
 +  * If you run the Cafu Engine from the command prompt, make sure to add parameter <​code>​-svGame MyGame</​code>​to the command-line (see below how to get rid of it again).
  
-If you want to quickly try something out (e.g. a new entity class), or if you work on something that is not directly or entirely a completely new game (for example, any changes to the core engine), the game DeathMatch might be a welcome testbed.+==== Tips and Tricks ====
  
 +  * If you want to run your game by default (without ''​-svGame''​),​ see the section about the variable ''​GameLibs''​ in file ''​CompilerSetup.py'':<​code python>
 +# When you're developing your own game, you might want to keep game DeathMatch
 +# for reference. Cafu should run your game by default (first in list), whereas
 +# DeathMatch would be readily available via the -svGame command-line option:
 +GameLibs = ["​MyGame",​ "​DeathMatch"​]
 +</​code>​ Note that you have to re-run SCons in order for changes to take effect.
 +  * In ''​MyGame'',​ some paths in the code and scripts still point to ''​Games/​DeathMatch/​...''​. For the beginning, that's ok -- your game will find some of its resources in game DeathMatch, and you can update these occurrences step by step at any later time (or even intentionally keep things like this).
 +  * Check out [[cppdev:​gamecodeoverview]] for details about the files and subdirectories in the new game directory.
  
-===== Copying DeathMatch ===== 
  
-The "​normal"​ and recommended way to start a new game is to create a copy of our example game DeathMatch. This is useful because it immediately provides you with the proper directory structure, working code, and example files.+===== Alternatives =====
  
-==== Copy the directory ====+Here is a list of alternative courses of action that you may want to consider in order to start a new game:
  
-Change into the ''​Games/''​ directory and to create a duplicate of the ''​DeathMatch/''​ directory there. Name the duplicated directory by the name of your game, e.g. ''​MyGame/''​. +==== Modifying ​DeathMatch ​====
-<code bash> +
-$ cp -r Games/​DeathMatch/​ Games/​MyGame/​ +
-</​code>​+
  
-==== Delete leftover build files ====+Working directly with the DeathMatch game "in situ" may seem like a totally silly /​*off-putting,​ ridiculous*/​ idea to you, but in some cases it can be a worthwhile consideration nevertheless:​
  
-If you have built game DeathMatch beforeit'​s ​good idea to prevent leftover files from interfering with your new game by deleting directory ''​build''​ in ''​Games/​MyGame/​Code''​. +If you want to quickly try something out (e.g. a new entity class)or if you work on something that is not directly or entirely ​completely ​new game (for example, any changes to the core engine), the game DeathMatch might be a welcome testbed.
-<code bash> +
-$ rm -rf Games/​MyGame/​Code/​build +
-</​code>​+
  
 +Also, if you wish to communicate and collaborate with people who are not directly involved with your game code, the DeathMatch code can be a good common ground.
  
 +==== Renaming DeathMatch ====
  
-  - When you then re-run ''​scons''​ as documented at [[cppdev:​gettingstarted]]the code of your new game will automatically be picked up, compiled and linked. +Renaming DeathMatchinstead ​of properly copying ​it, would principally workif it was not for these factors:
-  - If you run the Cafu engine from the command prompt, make sure to add parameter <​code>​-svGame MyGame</​code>​ +
-  - When you start CaWE, it will automatically recognize the new game and show it in the "​Configure"​"New Map", "New GUI", ... etc. dialogs. If "Start Engine"​ is checked in the "​Compile"​ menu, it will also start the Cafu Engine with the new game. +
-  - Also see [[cppdev:gamecodeoverview]] for details about the game directory.+
  
-You may wish to update all internal paths that still point into the "DeathMatch" ​directory ​from ''​Games/​DeathMatch/​''​ to ''​Games/​MyNewGame/​''​. ​Under Linux, you can do it automatically ​like this+  * It does not agree well with version control systems (Git or Subversion). If you follow our recommendation ​to checkout the Cafu source code from our Git or Subversion repository, so that you can keep track of our latest developments while developing your own game in parallel, then renaming ​the DeathMatch directory ​is (indeed not impossible, but) somewhat incompatible with the way how these repositories work. 
-<code bash> +  * Some file paths in code and scripts still point to ''​Games/​DeathMatch/​...''​. ​If you rename DeathMatchall these paths are broken, and your game will not work without fixing them first. If you instead copy DeathMatch, your game will find some of its resources in game DeathMatch, and you can update these occurrences step by step at any later time (or even intentionally keep things ​like this).
-$ find Games/​GameName -type f -exec sed -i '​s/​DeathMatch/​GameName/​g'​ {} \; +
-</​code>​+
  
 +Overall, we recommend //not// to rename DeathMatch. Better clone it as explained above.
  
-===== Things not to do ===== +==== Starting ​from scratch ====
- +
-Here is a list of possible courses of action that we suggest ''​not''​ to use in order to start a new game: +
- +
-==== Renaming DeathMatch ==== +
- +
-Renaming DeathMatch, instead of properly copying it, would principally work, if it was not for these factors: +
-  * It does not agree well with version control systems (Git or Subversion). If you follow our recommendation to checkout the Cafu source code from our Git or Subversion repositories,​ so that you can keep track of our latest developments while developing your own game in parallel, then renaming the DeathMatch directory is (indeed not impossible, but) somewhat incompatible with the way how these repositories work. +
-  * Many paths in code and scripts still point to ''​Games/​DeathMatch/​...''​. If you rename DeathMatch, all these paths are broken, and your game will not work without fixing them first. If you instead copy DeathMatch, your game will find some of its resources in game DeathMatch, and you can update these occurrences step by step at any later time (or even intentionally keep things like this). +
- +
-==== Start from scratch ====+
  
 Creating a new, empty directory in ''​Games/''​ in order to start from scratch, then fill it with contents as required, is certainly possible. Creating a new, empty directory in ''​Games/''​ in order to start from scratch, then fill it with contents as required, is certainly possible.
Line 86: Line 79:
   * be prepared to copy pieces of DeathMatch example code anyway.   * be prepared to copy pieces of DeathMatch example code anyway.
  
-==== Use VSWM ====+==== Using VSWM ====
  
 The VSWM MOD is old, obsolete, dysfunctional,​ and a candidate for removal. The VSWM MOD is old, obsolete, dysfunctional,​ and a candidate for removal.
-Not a basis for a new game.+Not a good basis for a new game. Don't use it.
  
cppdev/startnewgame.1351686453.txt.gz · Last modified: 2013-01-07 12:07 (external edit)