stqn avatar stqn committed 6cd1637

Load rwkc.conf.default if rwkc.conf is not found.

Comments (0)

Files changed (8)

+Choses à faire et idées.
+
 Indispensable:
-- Map du niveau 1
-- Gfx background original
-
-Bugs:
-- bounding box du boss pour l'affichage (disparait sur la gauche de l'écran)
+- Map du niveau 1 ? (ou on laisse les joueur s'en occuper)
 
 WIP:
 - Finalisation/intégration des GameParts afin d'implémenter proprement les
   menus, jeu et éditeur, écran de gain.
+
 - Implémentation de Controlers pour le gameplay, l'éditeur et le héros afin
   de pouvoir facilement changer les contrôles.
+
 - Éditeur ingame : permet de pauser le jeu et de modifier la map.
   Le même GamePart est utilisé pour le gameplay et l'éditeur.
   Afin de modifier les positions de départ des ennemis, powerups, portes, il
   est souhaitable de pouvoir afficher l'état original de la map.
 
+  Changement de plan : l'éditeur n'est pas ingame, mais il devrait y avoir
+  des facilités pour aller tester directement l'endroit qui nous intéresse
+  avec les powerups qu'on veut.
+
 Menus:
 	Menu principal
 	- Play
 	Menu Pause
 
 
-Bonus:
-- Écran/message de gain
+À faire un jour peut-être :
+- Écran de gain
 - Pause du jeu quand on désélectionne la fenêtre
 - Explosions/Particules (projectiles et ennemis)
-- High scores
-- Écran et Menu principal
-- Sélecteur de Map.
-- Fichier de correspondance caractère<->image ? pour permettre de changer les gfx.
-  (doit aussi contenir priorité d’affichage, transparence oui/non)
-- Options et fichier de réglages (volume son/musique, fps, touches, langue)
+- High scores (onlines ? pour empêcher la triche il faut enregistrer la partie et la vérifier...)
 - Credits
-- Inclusion des libs Linux ?
-- Réduction du temps du chrono quand on tue des ennemis (?)
-- Background qui scrolle
+- Inclusion des libs Linux ? ... non
+- Réduction du temps du chrono quand on tue des ennemis ?
+- Background qui scrolle en paralaxe
 - Musique
-- GameObject qui change la musique ?
-- Voir si on peut enlever une des deux zlib.dll
-- Tremblement de la View quand on se fait toucher ?
+- GameObject qui change la musique ? Si on a plusieurs musiques...
+- Voir si on peut enlever une des deux zlib.dll (Windows sucks and must die ?)
+- Tremblement de la View quand on se fait toucher
 - Mode plein écran
 - Vraie synchro vbl (note: essayer avec vblank_mode=1 ?)
 
   colonne/ligne/rectangle, sélection d'une tuile, sélection d'une action,
   chargement, sauvegarde
 - test du jeu en positionnant le héros sous le pointeur avec tous les powerups.
+- ne grabber la souris que quand RMB est pressé
+
+Notes pour le partage de maps sur Internet :
+- Champ "auteur" rempli par le joueur.
+- Champ "based on"/"inspired by" automatiquement ajouté, en fonction de la map que le joueur a modifiée pour créer la sienne.
+- Les maps sont mises dans le domaine public (ou CC0 ou CC-by-sa(-nc) ?) dès qu'elles sont uploadées sur notre serveur.
+- Possibilité de trier les maps par note, date, taille, auteur, nom, ordre aléatoire, nombre de parties (locales).
+- Une fois une map uploadée, son auteur ne peut plus y toucher. S'il la réuploade avec le même titre et le même nom, on ajoute "v2".
+- Tests de sécurité sur le serveur : validité de la map, taille raisonnable (autant que le permet l'éditeur...), fréquence d'upload depuis une IP donnée ?
+- Bouton "Get all new maps" dans le jeu ? Éventuellement avec quelques critères de plus : note, taille, etc.
+- Possibilité de choisir des maps à télécharger sur le serveur web ? (problème d'ergonomie : il faut les sauver dans le bon répertoire... ou alors ouvrir l'archive(?) avec le jeu...)
+- S'il y a des notes, il faut rajouter la possibilité de noter les maps et d'uploader ça.
+SDL drawing speed
+-----------------
+
+Time taken to draw the background:
+- Without optim                : 9996346 ns (10 ms)
+- With SDL_DisplayFormatAlpha(): 1259087 ns (1.3 ms)
+- With SDL_DisplayFormat()     :  422413 ns (0.42 ms)
+
+That is a 23x speed gain!
+
+Conclusion:
+
+1) Profile your code even when it's fast enough on your hardware.
+   10 ms to draw a simple 640*480 background on a recent PC is not normal.
+   Think of all the kittens dying because of the pollution and fix the problem.
+
+2) Always call SDL_DisplayFormat() after loading an image!
+
+Only use SDL_DisplayFormatAlpha() for images with a true alpha channel;
+SDL_DisplayFormat() works fine for images with a colorkey (transparency mask).
+
+Consider using a colorkey instead of an alpha channel in your images (3x speed gain).

rwkc.conf.default

+
+INPUT {
+   UP {
+      METHOD = key
+      KEYCODE = 273
+   }
+
+   DOWN {
+      METHOD = key
+      KEYCODE = 274
+   }
+
+   LEFT {
+      METHOD = key
+      KEYCODE = 276
+   }
+
+   RIGHT {
+      METHOD = key
+      KEYCODE = 275
+   }
+
+   ESCAPE {
+      METHOD = key
+      KEYCODE = 27
+   }
+
+   CROUCH {
+      METHOD = key
+      KEYCODE = 99
+   }
+ ; c
+
+   FIRE {
+      METHOD = key
+      KEYCODE = 120
+   }
+ ; x
+
+   ENTER {
+      METHOD = key
+      KEYCODE = 13
+   }
+ ; return
+
+   PAUSE {
+      METHOD = key
+      KEYCODE = 19
+   }
+ ; p
+
+   VOLUME_UP {
+      METHOD = key
+      KEYCODE = 280
+   }
+ ; page up
+
+   VOLUME_DOWN {
+      METHOD = key
+      KEYCODE = 281
+   }
+ ; page down
+
+   EDITOR {
+      METHOD = key
+      KEYCODE = 290
+   }
+ ; F12
+
+}
+ ;    /* The keyboard syms have been cleverly chosen to map to ASCII */
+ ;    SDLK_BACKSPACE      = 8,
+ ;    SDLK_TAB        = 9,
+ ;    SDLK_CLEAR      = 12,
+ ;    SDLK_RETURN     = 13,
+ ;    SDLK_PAUSE      = 19,
+ ;    SDLK_ESCAPE     = 27,
+ ;    SDLK_SPACE      = 32,
+ ;    SDLK_EXCLAIM        = 33,
+ ;    SDLK_QUOTEDBL       = 34,
+ ;    SDLK_HASH       = 35,
+ ;    SDLK_DOLLAR     = 36,
+ ;    SDLK_AMPERSAND      = 38,
+ ;    SDLK_QUOTE      = 39,
+ ;    SDLK_LEFTPAREN      = 40,
+ ;    SDLK_RIGHTPAREN     = 41,
+ ;    SDLK_ASTERISK       = 42,
+ ;    SDLK_PLUS       = 43,
+ ;    SDLK_COMMA      = 44,
+ ;    SDLK_MINUS      = 45,
+ ;    SDLK_PERIOD     = 46,
+ ;    SDLK_SLASH      = 47,
+ ;    SDLK_0          = 48,
+ ;    SDLK_1          = 49,
+ ;    SDLK_2          = 50,
+ ;    SDLK_3          = 51,
+ ;    SDLK_4          = 52,
+ ;    SDLK_5          = 53,
+ ;    SDLK_6          = 54,
+ ;    SDLK_7          = 55,
+ ;    SDLK_8          = 56,
+ ;    SDLK_9          = 57,
+ ;    SDLK_COLON      = 58,
+ ;    SDLK_SEMICOLON      = 59,
+ ;    SDLK_LESS       = 60,
+ ;    SDLK_EQUALS     = 61,
+ ;    SDLK_GREATER        = 62,
+ ;    SDLK_QUESTION       = 63,
+ ;    SDLK_AT         = 64,
+ ;    /*
+ ;       Skip uppercase letters
+ ;     */
+ ;    SDLK_LEFTBRACKET    = 91,
+ ;    SDLK_BACKSLASH      = 92,
+ ;    SDLK_RIGHTBRACKET   = 93,
+ ;    SDLK_CARET      = 94,
+ ;    SDLK_UNDERSCORE     = 95,
+ ;    SDLK_BACKQUOTE      = 96,
+ ;    SDLK_a          = 97,
+ ;    SDLK_b          = 98,
+ ;    SDLK_c          = 99,
+ ;    SDLK_d          = 100,
+ ;    SDLK_e          = 101,
+ ;    SDLK_f          = 102,
+ ;    SDLK_g          = 103,
+ ;    SDLK_h          = 104,
+ ;    SDLK_i          = 105,
+ ;    SDLK_j          = 106,
+ ;    SDLK_k          = 107,
+ ;    SDLK_l          = 108,
+ ;    SDLK_m          = 109,
+ ;    SDLK_n          = 110,
+ ;    SDLK_o          = 111,
+ ;    SDLK_p          = 112,
+ ;    SDLK_q          = 113,
+ ;    SDLK_r          = 114,
+ ;    SDLK_s          = 115,
+ ;    SDLK_t          = 116,
+ ;    SDLK_u          = 117,
+ ;    SDLK_v          = 118,
+ ;    SDLK_w          = 119,
+ ;    SDLK_x          = 120,
+ ;    SDLK_y          = 121,
+ ;    SDLK_z          = 122,
+ ;    SDLK_DELETE     = 127,
+ ;    /* End of ASCII mapped keysyms */
+ ;
+ ;    /* Numeric keypad */
+ ;    SDLK_KP0        = 256,
+ ;    SDLK_KP1        = 257,
+ ;    SDLK_KP2        = 258,
+ ;    SDLK_KP3        = 259,
+ ;    SDLK_KP4        = 260,
+ ;    SDLK_KP5        = 261,
+ ;    SDLK_KP6        = 262,
+ ;    SDLK_KP7        = 263,
+ ;    SDLK_KP8        = 264,
+ ;    SDLK_KP9        = 265,
+ ;    SDLK_KP_PERIOD      = 266,
+ ;    SDLK_KP_DIVIDE      = 267,
+ ;    SDLK_KP_MULTIPLY    = 268,
+ ;    SDLK_KP_MINUS       = 269,
+ ;    SDLK_KP_PLUS        = 270,
+ ;    SDLK_KP_ENTER       = 271,
+ ;    SDLK_KP_EQUALS      = 272,
+ ;
+ ;    /* Arrows + Home/End pad */
+ ;    SDLK_UP         = 273,
+ ;    SDLK_DOWN       = 274,
+ ;    SDLK_RIGHT      = 275,
+ ;    SDLK_LEFT       = 276,
+ ;    SDLK_INSERT     = 277,
+ ;    SDLK_HOME       = 278,
+ ;    SDLK_END        = 279,
+ ;    SDLK_PAGEUP     = 280,
+ ;    SDLK_PAGEDOWN       = 281,
+ ;
+ ;    /* Function keys */
+ ;    SDLK_F1         = 282,
+ ;    SDLK_F2         = 283,
+ ;    SDLK_F3         = 284,
+ ;    SDLK_F4         = 285,
+ ;    SDLK_F5         = 286,
+ ;    SDLK_F6         = 287,
+ ;    SDLK_F7         = 288,
+ ;    SDLK_F8         = 289,
+ ;    SDLK_F9         = 290,
+ ;    SDLK_F10        = 291,
+ ;    SDLK_F11        = 292,
+ ;    SDLK_F12        = 293,
+ ;    SDLK_F13        = 294,
+ ;    SDLK_F14        = 295,
+ ;    SDLK_F15        = 296,
+ ;
+ ;    /* Key state modifier keys */
+ ;    SDLK_NUMLOCK        = 300,
+ ;    SDLK_CAPSLOCK       = 301,
+ ;    SDLK_SCROLLOCK      = 302,
+ ;    SDLK_RSHIFT     = 303,
+ ;    SDLK_LSHIFT     = 304,
+ ;    SDLK_RCTRL      = 305,
+ ;    SDLK_LCTRL      = 306,
+ ;    SDLK_RALT       = 307,
+ ;    SDLK_LALT       = 308,
+ ;    SDLK_RMETA      = 309,
+ ;    SDLK_LMETA      = 310,
+ ;    SDLK_LSUPER     = 311,      /* Left "Windows" key */
+ ;    SDLK_RSUPER     = 312,      /* Right "Windows" key */
+ ;    SDLK_MODE       = 313,      /* "Alt Gr" key */
+ ;    SDLK_COMPOSE        = 314,      /* Multi-key compose key */
+ ;
+ ;    /* Miscellaneous function keys */
+ ;    SDLK_HELP       = 315,
+ ;    SDLK_PRINT      = 316,
+ ;    SDLK_SYSREQ     = 317,
+ ;    SDLK_BREAK      = 318,
+ ;    SDLK_MENU       = 319,
+ ;    SDLK_POWER      = 320,      /* Power Macintosh power key */
+ ;    SDLK_EURO       = 321,      /* Some european keyboards */
+ ;    SDLK_UNDO       = 322,      /* Atari keyboard has Undo */
+ ;
 
 
 	/**
-	 * Returns true if the anim has finished playing. Non-looping anims always
+	 * Returns true if the anim has finished playing. Looping anims always
 	 * return false.
 	 */
 	bool finished() {
 		mRoot = new ConfigNode( ConfigNode.TYPE.ROOT, filename );
 	}
 
-	bool load() {
-		mFile=cast(char[])read( mFilename );
-		mFile ~= "\0\0";
+	bool load() {
+		try {
+			mFile = cast(char[]) read( mFilename );
+			mFile ~= "\0\0";
+		}
+		catch {
+			return false;
+		}
 
 		token tok;
 
 	void delegate() fPreviousMode;
 
 	this( bool fromGame=false ) {
-
 		// if coming from game ( test mode ), reload the map
 		// else load an empty map.
 		mFromGame = fromGame;

src/inputconfiguration.d

 	bool load( char[] configfilename ) {
 
 		debug(inputconfiguration) writef( __FILE__, " : IC: loading config..." );
+
 		auto cf = new ConfigFile( configfilename  );
-		if( !cf.load() ) return( false );
+		if( !cf.load() ) {
+			// Config file missing, trying default config file
+			cf = new ConfigFile( configfilename ~ ".default" );
+			if( !cf.load() ) {
+				return( false );
+			}
+		}
+
 		debug(inputconfiguration) writefln( "done." );
 
 		/*

src/inputmanager.d

 
     }
 
-    void loadConfig() {
-        auto ic = new InputConfiguration();
-        if ( ! ic.load( mConfigFilename ))
-            throw new Error("Error while loading \"" ~ mConfigFilename ~ "\"");
-    }
+	void loadConfig() {
+		auto ic = new InputConfiguration();
+		if ( ! ic.load( mConfigFilename )) {
+			throw new Error("Error while loading \"" ~ mConfigFilename ~ "\". Default file is wrong/missing too.");
+		}
+	}
 
 
     void update() {
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.