Game Incubator
Librairies C++ pour faire des jeux
January 13, 2008 at 10:00 · Filed under SDK
Ces derniers temps, je travaille sur le GIIM (IM pour Instant messenger).
Le GIIM existe deja dans le dernier SDK, mais il ne permettait pas plus que de se connecter a MSN Messenger.
Hors recemment MSN a encore change son protocole pour se connecter. Du coup, le GIIM servait a rien… MSN Messenger n’est pas un format ouvert, ce qui veut dire que y’a peu de document sur le sujet et que globallement ils ne veulent pas que vous touchiez a leur systeme.
Sur une note personnnelle en plus, j’ai toujours trouve que MSN Messenger c’etait de la merde (service souvent coupe, leur client plein de pubs, leur protocol proprietaire ferme…) et j’utilise avec satisfaction Gootle Talk uniquement depuis longtemps (service irreprochable, pas de pub, protocol ouvert…).
Bref, ceci expliquant cela, j’ai decide de m’atteler enfin a la rude tache de faire que le GIIM supporte Google Talk IM.
C’est enfin chose faite depuis hier. Ce n’est encore qu’au stage de prototype et il va falloir mettre au propre pas mal de code, mais le prochain SDK vous permettra de pouvoir vous connecter a GoogleTalk, et d’envoyer/recevoir des messages, mettre a jour votre status…
Ca permettra notamment de pouvoir integrer tres facilement GoogleTalk a vos jeux de facon tres simple. Comme ceci par exemple.
December 17, 2007 at 23:55 · Filed under SDK
Tiens je viens de m’apercevoir que je n’ai pas poste la nouvelle ici.
Il y a peu, j’ai programme une petite application pour le GI que j’inclurai dans mon prochain SDK et qui permet de voir l’etat de la memoire en temps reel.
Cela permet notamment de voir si la memoire fragmente (ou pas) et s’il y’a un usage intensif de la memoire qu’on ne suspectait pas vraiment a la base.
J’ai fait pour l’occasion une petite video de mon jeu, Battle For Independence afin de montrer un peu comment ca marche.
http://gi.kamron.net/Videos/GIMemMonitor.zip
L’application qui permet de voir l’etat de la memoire est une application independente (qui marche grace au GIMemory) et qu’on peut voir a la droite du jeu.
Code de couleur:
Noir, c’est memoire intouchee
Rouge, c’est memoire allouee
Blue, c’est memoire desallouee
Si vous etes attentif (pas facile vue la qualitee de la compression), vous verrez que pendant le jeu, il y’a encore pas mal d’allocation/desallocation en continue. Va falloir que je repare ca
PS: j’en ai profite pour mettre a jour le Quoi de neuf pour le prochain SDK
November 14, 2007 at 3:47 · Filed under Annonces, SDK
Voila, il est tout chaud, le nouveau SDK de Novembre 2007 est la, pret a etre telecharge.
Au programme, un bon gros paquet de nouveautes:
[+] Nouveau GISample pour montrer comment se servir du GIXML
[+] Nouvelle classe utilitaire GI::LOCK pour utiliser avec une CriticalSection dans un programme multithreades
GIFILE
[+] Ajout de IRESOURCEMANAGER comme interface commune pour recuperer les resources, que cela soit sur le disque dur ou dans un fichier Pak
[+] Ajoutte la possibilite d’enumerer les resources dans un fichier PAK avec la fonction void EnumerateResources(IPAKENUMERTION *enumerate)
[+] Ajout de la possibilite de creer un ISTREAMWRITE pour un fichier sur disque dur (pour manipuler une interface commune que le fichier soit a ecrire dans un pak ou sur le disque dur) avec static ISTREAMWRITE *__cdecl CreateFromHardDrive(IMEMORY *allocator, IREPORT *reporter, const char *filename);
[*] Changement de type void * en const void * pour unsigned int Write(const void *source, unsigned int size) dans ISTREAMWRITE
[*] Pour l’allocation de resource, utilise le nom de la resource en contexte pour debugger les leak plus facillement
GIXML
[+] Doit fournir un IRESOURCEMANAGER a la creation (voir GIFile) -> pour l’usage transparent de fichiers PAK
[!] Fix erreurs qui revenaient malgre qu’on clique sur ignorer et continuer
[*] La fonction d’enumeration dans XMLSECTION retourne desormais un bool (retournez false si vous voulez stopper l’enumerration)
GICallStack
[!] Arrete l’enumeration lorsque la fonction EnumFunctions retourne false
[*] Renomme EnumMemoryBlock en EnumFunctions
GIFramework
[+] GIScreenSizeX et GIScreenSizeY peuvent a present avoir une taille de 0 ce qui signifie au GI de prendre la taille du bureau a la place
[+] Vous pouvez recuperer les argument de ligne de commande via le GIApplication (SetCommandLine/GetCommandLine), le GIFramework utilise SetCommandLine au depart de l’application
[+] Possibilite de bootstrapping (fait une copie de l’executable dans le repertoire temp avant de l’executer ce qui permet de mettre a jour l’executable)
[+] Ajout d’un IRESOURCEMANAGER global que les autres GI cree par le GIFramework utilisent (pour ajout de fichier pak et repertoires): GIResourceManager
GINetwork
[!] Deconnect du server lorsqu’un client TCP retourne false a la fonction OnReceive
[!] Fixe un mauvais appel a OnConnected lors de reconnection (le status est: en cours de connexion)
[!] Fixe les mauvais appels continuel a OnConnected et a OnDiconnected lorsque le serveur ne pouvait pas etre contacte
[+] Ajout de OnFailToConnect pour les clients TCP lorsque la connexion echoue a la place d’appeler OnDisconnect qui est desormais reserve pour les connexions qui ont deja appele OnConnected auparavant
[+] Ajout de la possibilite de souscrire a des Multicasts
[+] Ajout d’une erreur si le client essaye de se connecter a une adresse NULL
[+] Possibilite pour les client TCP de se deconnecter directement en appelant Disconnect sur l’objet INETWORK
[*] Renomme la fonction CheckForEvents en Process et retourne un bool (returourne false lorsque la connexion est invalide et qu’elle demande un reconnectpour les connexions TCP)
GIDisplay
[!] Fixe l’AlphaTest qui etait casse depuis le passage au HLSL
[!] GIFont, fixe l’alignement a droite sur du multiligne (ex. “Line 1\nLine2″)
[!] GIFont, fixe l’effet de flou qui apparaissait parfois en fonction de la position a l’ecra
[+] GIFont, nouvelle fonction: GetNumberOfLines pour savoir combien de lignes vont etre affichees
[+] Ajout des sprites videos, a utiliser de la meme facon qu’un sprite classique. S’agit juste d’avoir une extension en .avi ou .mpg au nom de la resource/fichier
C’est encore experimental, ca ne marche pas avec les fichiers pak et en fonction des drivers de compression, ca marche pas toujours pour tout le monde
[+] GIFont, Ajout du paramettre ‘bool usesplit’ a la fonction DrawInside pour permettre a la foncion de couper proprement les lignes sur des espaces ou tiret -
[+] Un IRESOURCEMANAGER est necessaire a la creation (voir GIFile)
[*] Renome GetTextureName en GetResourceName pour les SPRITE (et retourne desormais un const char *)
[*] Load sur les Textures prend desormais un const char * au lieu d’un simple char *
[*] Change la facon dont les sprites utilisent leur resource (pour pouvoir avoir des textures videos)
[*] SetTime et GetTime sur sprite permette de retrouver ou de mettre le temps en ms pour un sprite video
[-] Retrait de GetTexture sur les sprite puisque c’est desormais soit une texture soit une video
[-] Retrait de AddPak et de AddMediaPath, utiliser l’IRESOURCEMANAGER passe a la creation a la place (ou GIResourceManager si vous utiliser le GIFramework)
GISound
[+] Reclame desormais un IRESOURCEMANAGER a la creation (voir GIFile).
[+] Ajout des Mixers pour controler le volume d’un grouppe de sons. La creation de sons requiert desormais un paramettre supplementaire pour le mixer qu’il utilise. NULL est accepter et le son utilisera le mixer global par defaut
GIMemory
[+] Allocate peut desormais prendre un pointer NULL pour le contexte
[-] Retrait de virtual void Dump(IMEMORYOUTPUT *output) puisque vous pouvez faire la meme chose avec virtual void Dump(IMEMORYNOTIFICATION *notification), donc pas d’interet de polluer l’interface
GIReport
[+] Ajout du paramttre __FUNCTION__ dans la macro afin d’avoir au moins le nom de la fonction actuelle dans la vue de la callstack en release
GITextLibrary
[!] Fixe les erreurs qui ne tenait pas compte de ignore et continue lorsque la librairie de textes n’etait pas chargee
[*] Vous devez desormais passer un IRESOURCEMANAGER a la creation (la encore vous pouvez utiliser le GIResourceManager cree par le GIFramework ou passer NULL si vous ne desirez pas utiliser de manageur de resource)
[-] Retrait de la fonction bool LoadLanguageFromStream(ISTREAMREAD *stream, char **enumchar, unsigned short maxentries, ISTREAMREAD *enumindexstream = NULL) puisque l’usage de pak est desormais transparent
GIPOINT3D
[+] Ajoutte la possibilite de pouvoir diviser un point3d par un float
GITEXTLIBRARY
[!] Retire le character de retour a la ligne ajoutte a chaque texte
November 12, 2007 at 18:15 · Filed under SDK
Bon, il est clair que j’ai prevu de faire un SDK ce mois ci, mais ca risque d’etre de prendre un peu de temps. J’ai quelquechose de stable et de pret a etre emballe dans un joli SDK, sauf qu’il faut encore faire tout ce qui va autour et qui est galere (verifier que tout marche bien, les exemples compiles, sont bons…).
Bref, je vais m’efforcer de trouver un peu de temps pour faire ca, avec toutes les modifications que j’ai faite depuis le dernier, il est grand temps.
D’ailleurs le dernier ajout en date devrait en ravire plus d’un. C’est a propos du GISound cette fois. J’ai enfin implemente les MIXERs.
Si vous ne savez pas ce que c’est, vous pouvez imaginer que ce sont des objets qui regrouppent plusieurs sons pour leur appliquer les meme modifications. Le plus interessant etant pour le volume (le seul implemente pour l’instant).
En d’autres termes, vous pouvez modifier le volume d’un mixer et le volume de tous les sons associes a ce mixers seront egalement changes. C’est tres pratique pour les jeux ou on regle le volume de la music/sons/voix…
Allez un peu de patience et le prochain SDK devrait arriver tout frais tout beau 
August 25, 2007 at 0:06 · Filed under SDK
Ha enfin. Ca faisait un moment que j’etais pas content avec la facon dont on ajouttait un pak ou un path pour que votre fichier image ou son soit trouve.
En fait, je n’avais rien trouve de mieux que d’avoir une fonction AddMediaPath et AddPak dans le GIDisplay et dans le GISound (avec un jolie copier/coller de code… beurk!)…
Comme j’ai du faire la meme chose avec le GIXML, je me suis dit que c’etait plus possible et du coup, j’ai mis la fonctionalite dans le GIFile pour qu’elle soit accessible a toutes les parties du GI qui le souhaitent.
Maintenant lorsque le GIDisplay, le GISound ou un GIXML est cree, il faudra en plus des IMEMORY et des IREPORT, passer un IRESOURCEMANAGER (ou pas, on aura le droit de pas en specifier). Ce resource manager (interface definie dans le GIFile), permettra d’ajoutter path et fichier pak pour chercher les fichiers image, son ou xml demandes.
Comme d’hab, les changements sont deja repercutes dans le GIFramework et concretement, si vous aviez quelquechose comme ca:
GIDisplay->AddPak(”Divers.pak”);
Vous pourrez utiliser le resource manager cree par defaut par le framework comme ca:
GIResourceManager->AddPak(”Divers.pak”);
Et le display, son et xml en profiteront automatiquement. Et la pour le coup j’en suis bien content!
Je sais pas si je me suis bien fait comprendre, mais bon il est tard aussi hehehe 
August 19, 2007 at 12:46 · Filed under Annonces
Bon ca fait longtemps que j’ai pas donne de nouvelles sur le GI.
Ce matin je regardais mon fichier “What’s new” et mine de rien ca bouge toujours, y’a pas mal de modifications et je commence a penser a faire un nouveau SDK.
Le truc c’est qu’en Octobre, je suis de nouveau a plein temps sur BFI (pour un mois seulement certes) et je vais sans nul doute modifier le GI encore. Du coup je pense faire une release aux allentours de mi Octobre.
Pour les curieux, c’est toujours au meme endroit pour savoir ce qui va etre dans le prochain SDK. C’est ici
April 29, 2007 at 10:56 · Filed under Annonces
Rah des fois… je me demandais aussi pourquoi personne ne laissait de commentaire a ma derniere release de mon SDK. Forcement j’avais pas mis a jour le formulaire qui va bien avec ma protection anti-spam personnelle pour poster des commentaires…
Merci Jean-Benoît pour m’en avoir fait part et desole a tous, vous devriez pourvoir poster des commentaires a present!
April 15, 2007 at 16:10 · Filed under Annonces
Voila, le nouvel SDK est enfin disponible dans la section Download.
Au menu:
[!] Resolution d’un Bug
[*] Changement
[+] Ajout
[-] Retrait
[*] Utilise les librairies du dernier DirectX 9 (Fevrier 2007) a partir de ce SDK, veuillez mettre votre DirectX a jour ainsi que votre SDK. Cela veut dire que vos utilisateurx aussi devront avoir le dernier DirectX.
[+] Nouvelle librairie: GIFile, qui vous permet de groupper plusieurs fichiers dans un seul gros fichiers (fichier Pak). Vous pouvez utiliser autant de fichier Pak que vous le desirez. Integration transparente dans le GIDisplay (pour les fichiers 3D et Textures) et GISound (pour les fichiers son en Wav ou Ogg).
[+] Nouveau example dans GISample pour montrer comment utiliser un GIFile
[+] Nouvelle unite de test pour les GIFiles
[+] Nouvele librairie: GIIM qui vous permet de vous connecter a des reseaux de messagerie instantanee (comme MSN ou GoogleTalk), pour l’instant seul MSN est supporte et il reste encore a faire l’envoie des messages, la partie la plus dure (login) est faite.
[+] Nouveau exemple pour montrer comme utiliser le GIIM
[+] Nouveau exemple pour montrer comment utiliser le GISound
[+] Ajout du source code pour le visualiseur d’objet 3D (G3O), en cours de construction
GIMemory & GIReport & GIScript
[+] La fonction Destroy() desormais teste si personnne ne les utilise avant de quitter (problem de addref et decref)
GIMemory
[!] Fix GetAllocatedSize qui renvoyait une mauvaise valeur lorsque il y avait plus d’une page allouee
[+] Ajout d’un nombre d’allocation pour aider a tracer plus facilement les memory leaks
GIScript
[!] Fix DecRef sur IMemory and IReport
GIDisplay
[!] Fix crash lorsqu’on cree une texture vide et qu’on invalide l’affichage (alt+tab ou redimentionnement de la fenetre)
[!] Fix un problem de rotation 3D mauvaise sur des sprites 3D due au fait que des donnees n’etaient pas bien initialisees
[*] Changement de tout les appels CG en appel HLSL pour les shaders. Le code de CG est toujours la mais desactive pour ne pas avoir a utiliser les Dlls de Cg. Les conversion sont simple, il suffit de regarder le fichier Default.fx pour voir que la syntaxe est plus ou moins la meme. Seule les cartes supportant un pixel shader de 2.0+ peuvent utiliser ce mode d’affichage toutefois.
[*] Pixel et Vertex shader ont fusionne dans le code (un seul fichier, un seul appel), on a donc:
LoadVertexShader & LoadPixelShader ont ete retire de la class SHADER
Load ajoutte a la class SHADER pour charger un fichier FX contenant Pixel et Vertex shaders
SetDefaultVertexShader/GetDefaultVertexShader & SetDefaultPixelShader/GetDefaultPixelShader ont ete retirs aux benefice de SetDefaultShader et GetDefaultShader dans la class DISPLAY
[*] SetMediaPath a ete renomme en AddMediaPath pusiqu’on peut en avoir plusieurs
[*] ForceReload renomme en ReloadTextures
[+] Possibilite d’ajoutter des fichiers pak files pour une utilisation transparente du GIFile dans le GIDisplay:
virtual void AddPakFile(const char *pakfilename) = 0;
(ne marche pas avec les fichiers FX pour l’instant)
[*] Octree: GetAltitude retourne a present un bool pour savoir si l’altitude a ete trouvee (car ca peut etre une position en dehors de l’octree) et prend l’altitude en paramettre (qui changera avec la valeur trouvee)
[*] CreatePixelShader & CreateVertexShader fusionnes en CreateShaders dans la class SHADER
[+] Ajout de la possibilite de pouvoir dessiner des sprite3D qui sont dirige autrepart que face a la camera
[+] Nouvelle fonction dans le GIDisplay: unsigned int GetAvailableTextureMemory() pour savoir la memoire restante pour des textures
[+] Nouvelle fonction sur GILight: POINT3D GetTarget()
[+] Ajout d’une class DUMMY dans les SCENE pour permettre de recuperer des positions 3D sur les models (genre placer d’ou s’echappe la fumee sur ce model 3D)
[+] Nouvelle fonction pour la couleur du fog (et la remet une fois que l’affichage est reinitialise) SetFogColor(COLOR3 color)
[+] Move la declaration du format des vertex du vertex shader au mesh (maintenant le MESH est responsable de son format d’affichage pour le shader)
[-] Plus de GetVertexSize et GetVertexFormat sur Shaders
GINetwork
[!] Fix un memory leak avec les lists de clients connecte lorsque le serveur etait detruit
[!] Fix un memory leak dans ICOMMUNICATION lorsque le client quitte au lieu d’etre deconnecte par le serveur
[!] Fix SendText & SendTextFormatted appel lors des appels d’un client via INETWORKCONNECTION du serveur
[!] Fix erreurs qui apparaissent a chaque fois malgre qu’on clique ignore et continue sur le GIReport
[*] Change l’interface de notification pour avoir:
OnConnecting() // le client essaye de contacter le serveur
OnConnected() // le client a trouve et est connecte au serveur
[+] TCP plus rapide contre plus de bande passant avec usage de TCP_NODELAY si desire (mettre SpeedOverBandwidth a true a la creation)
[!] Fix virtual destructor dans ICOMMUNICATE & ICOMMUNICATIONUSER
[+] Enumeration des clients avec ICOMMUNICATIONUSER sur les serveurs avec ICOMMUNICATION
GITextLibrary
[!] Fix probleme de liberation de memoire
[!] Fix AddRef & DecRef sur IMemory and IReport
[+] Utilisation de GIFile possible pour charger les infos
GIIRC
[!] Fix DecRef a la place d’un AddRef sur IMemory a la destruction
[!] Fixed un problem de connection
GISound
[!] Fix un bug sur les fichiers streams sur lesquelle Process n’etait pas appele
[!] Fix un bug sur les fichiers stream qui faisait que la musique se desynchronisait apres un moment
[!] Fix un avertissement et un memory leak a la creation d’un stream avec un fichier son qui n’existait pas
[!] Fix un bug avec les fichiers streams lorsque le son etait trop petit/court
[*] Set3DListener ne fais plus rien si rien n’a change depuis le precedent appel
[+] Ajout de AddMediaPath pour les fichiers sons
[+] Possibilite de jouer avec l’attenuation des sons 3D avec la distance: SetDefaultDistance(float min, float max)
[+] Possibilite de changer le pitch des sons
[+] Possibilite d’ajoutter des Pak pour la gestion des GIFiles transparente:
virtual void AddPakFile(const char *pakfilename) = 0;
GITList
[+] Ajout d’une fonction: void AddSorted(T* data);
[*] Les fonctions qui ajouttent dans TLIST retournent desormais le node ajoutte
[*] Change les message d’erreur en cas de leak pour afficher le type de l’objet qui leak (plus facile pour trouver quelle liste leak)
GIFramework
[+] Ajout de void GIRegisterWindowsCallback(GI::IWindowsEvent *handle); pour intercepter si l’utilisateur appuie sur la touche echape (ESC)
[*] La souris n’est plus centree automatiquement au milieu de l’ecran a chaque lancement a present
[+] Appel de facon automatique Set3DListener en utilisant la camera du GIDisplay a chaque loop
GIMouse [*] Appeler SetProcessed sur la souris fait que toutes les fonctions Is…qqchose() retourneront faux (jusqu’a la rochaine loop)
GIXML [-] Les fonctions exposant l’implementation du GIXML (std::vector) ont ete retirees au benefice des fonctions d’interface
J’ai laisse le code commente, mais il sera retire au prochain SDK pour vous laisser le temps de faire la migration.
Fiou! voila. Tout commentaires bienvenues 
April 15, 2007 at 14:24 · Filed under Annonces, SDK
Bon, voila, je suis en train de faire le SDK.
J’en suis tres tres content, mise a part 2 choses:
1. J’ai du rafistoler les animations 3D rapidement. Du coup, le design n’est pas du meilleur gout, mais ca marche comme avant. Il y a tres fort a parier que je me penche serieusement sur les animations 3D pour le prochain SDK.
2. Ce SDK ne marche que sur des cartes supportant DirectX 9 (a savoir supportant le pixel shader 2 pour les fichier effect en HLSL)
Pour ce dernier point, le prochain SDK supportera plusieurs mode facilement, mais j’avais envie de faire une release de ce SDK car il apporte beaucoup de nouvelles choses tres attendues.
Je vous fais le topo des nouveautes lorsque j’aurais fait la release…
April 6, 2007 at 14:37 · Filed under Annonces
Mince alors. Moi qui voulait profiter de ce week-end de paques pour faire une jolie release du GI, je m’appercois qu’avec le passage aux HLSL (shader DirectX), j’ai casse les animations 3D.
Comme Battle For Independence n’en utilise pas, j’avais pas remarque… Le truc c’est que c’est malheureusement pas un petit fix.
Du coup, ca m’ennuie car je suis toujours pas en position de faire une vraie release propre…
Rah, misere!
Next entries »