WeAreSync

Links of Power pour WP7


Cette fois ci, c'est la bonne ! Après avoir amorcé le projet en 2004, et après avoir exploré diverses possibilités, je remet Links of Power sur la table ! Le projet sera dédié à Windows Phone 7 et je suis vraiment très excité à l'idée de le mener à terme.

Retour sur les précédentes versions :

La version C++ direct X était une belle réussite d'un point de vue graphique. Le moteur 3D était capable de charger dynamiquement de très grandes cartes, d'afficher des objets et était doté d'un bon nombre d'effets réalisés avec les shaders.

Point faible du projet, le gameplay était absolument inexistant :) La réalisation de tout les objets 3D me demandait beaucoup trop de temps alors j'ai tenté une autre approche, avec SilverLight (la version alpha à l'époque), puis avec WPF.

Les résultats ne m'ont jamais satisfait et j'ai préféré revenir à la version 3D pour laquelle j'avais tout de même plus d'affinité.. bien que le gameplay soit toujours inexistant :)

Quand finalement je me suis rendu compte qu'il manquait une trame, un univers à raconter, je me suis mis à écrire. J'ai réuni des amis, et nous avons longuement imaginé des mondes et des scénarios.

Aujourd'hui, l'univers de Links of Power est très très riche. Je me suis toujours efforcé de ne pas trop en dévoiler avant d'avoir une version 3D alpha du jeu disponible. Mais cette version ne viendra pas. Pas maintenant en tout cas, car aujourd'hui, et pour les mois à venir, WP7 sera la plateforme idéale pour développer un autre aspect de Links of Power.

Cette version de Links of Power sera résolument un jeu de conquête spatiale doté d'un coté gestion économique, politique et social exacerbé (Rien que ça :) L'un des points forts du jeu qui va satisfaire de nombreux joueurs, c'est qu'il ne sera pas nécessaire d'être un Hardcore Gamer pour progresser. Les Causuals Gamers vont avoir des opportunités à toutes les étapes du jeu pour vraiment s'amuser.

Bref, vous l'avez compris, ce mois d'août s'annonce très prometteur et je vais faire mon possible pour vous tenir au courant du développement aussi souvent que possible sur #lop via twitter.



AddThis Social Bookmark Button
 

L'émulateur pour Windows Phone 7 débridé


Maintenant qu'on peut faire un peu joujou avec l'émulateur de WP7, je doit avouer que ça donne envie.

Microsoft vient d'annoncer qu'ils allaient distribuer des Windows Phone 7 à tous ses employés. De leur coté, les MVP font du bruit sur twitter pour en avoir un eux aussi. Moi aussi je veux bien tester le produit et même en faire la promotion :)



AddThis Social Bookmark Button
 

Zappiti : plus d'infos sur la version 1.1.0


Logo de Zappiti
Logo par Christophe Cherrel

Edit : La version 1.1.1 de Zappiti corrige un bogue rencontré par certains utilisateurs de Vista et Seven x64.

Encore quelques heures de patience avant la sortie de la version 1.1.0 de Zappiti qui apporte des améliorations très attendues.

Pour faire suite à un post précèdent où je vous livrait quelques informations sur l'architecture de Zappiti, voici quelques informations toutes fraiches pour ceux qui veulent en savoir plus :

  • Zappiti est réalisé en C# avec le Framework .NET 3.5
  • L'interface graphique de Zappiti à été réalisé en WPF
  • Zappiti repose sur un design pattern appelé MVVM
  • Expression Blend 3 à été utilisé pour réaliser l'interface
  • Installateur utilisé est Visual Studio Installer 4.5
  • Zappiti est développé sous Visual Studio 2010 Ultimate
  • Vous pouvez suivre les étapes du développement sur Zappiti Issue Tracking System
  • La base de données choisie à faillit être SQL Server Compact 3.5, mais c'est SQlite qui à été retenu
  • La version actuelle à demandée plus de 10 semaines de travail
  • Zappiti, c'est 238 fichiers sources et 27687 lignes de code
  • Hyperventilate à été écouté 118 fois pendant la première phase de développement...


AddThis Social Bookmark Button
 

Créer un installateur qui choisit automatiquement les bons fichiers pour les plateformes x64 et x86


Le problème : Une application (en l'occurrence, il s'agit de Zappiti, le média manager pour platine multimédia Dune HDi) utilise une DLL s'appelant MediaInfo.dll et qui est fournie en version x86 et x64. Zappiti est compilé en mode AnyCPU et peux donc fonctionner avec l'une ou l'autre du moment que la DLL retenue corresponde à la plateforme du système d'exploitation courant.

L'objectif : Créer un installateur avec Visual Studio Installer qui détecte si l'application s'installe sur une architecture 32bit ou 64bit et qui installe la DLL correspondante.

Commençons par ajouter les DLL : Première étape, ajouter les deux versions de la DLL à notre installateur. Il n'est pas nécessaire de spécifier de Condition. Ma première approche fût justement de le faire en spécifiant TargetPlatform=x86 ou TargetPlatform=x64. Malheureusement, la valeur de cette propriété est définie dans les paramètres de l'installateur. De ce fait, il aurait fallut créer deux installateurs, un pour chaque plateforme, alors que c'est justement ce que je cherche à éviter. Non, pour choisir le bon fichier dynamiquement en fonction du système d'exploitation, il faut faire autrement.

La solution consiste à créer des Custom Actions pour choisir le bon fichier : Pour cela, commencez par ajouter un fichier de type de Installer Class dans votre projet comme indiqué ici. Il n'est pas nécessaire de créer un nouveau projet DLL, vous pouvez l'ajouter directement à votre exécutable. Visual Studio crée automatiquement une classe qui hérite de Installer. Ensuite, il suffit de surcharger la fonction OnBeforeInstall() de cette classe pour executer le code désiré au bon moment.

Etrangement, lors de l'installation OnBeforeInstall s'exécute après la copie des fichier. Ce n'est pas très grave ici, au contraire. Nous allons laisser l'installateur copier les deux DLL, puis en supprimer une et renommer l'autre. Maintenant, il faut dire à l'installer d'appeler cette fonction en créant un nouveau Custom Action comme indiqué ci dessous, et en choisissant pour cible le "Primary output" de notre projet qui contient la classe que nous venons de créer.

Détecter la plateforme de l'OS : En premier lieu, j'ai testé la valeur retournée par IntPtr.Size. En effet, sur une plateforme x86, la valeur retournée serait 4 et sur une plateforme x64 on obtiendrait un 8. Hélas, cette méthode retourne toujours 4 car souvenez vous, le TargetPlatform de notre installateur est définit à x86 pour pouvoir se lancer de n'importe quel PC.

Pour détecter la plateforme, nous allons utiliser la méthode GetNativeSystemInfo() en l'important de kernel32.dll.

 
        private enum Platform
        {
            X86,
            X64,
            Unknown
        }
 
        internal const ushort PROCESSOR_ARCHITECTURE_INTEL = 0;
        internal const ushort PROCESSOR_ARCHITECTURE_IA64 = 6;
        internal const ushort PROCESSOR_ARCHITECTURE_AMD64 = 9;
        internal const ushort PROCESSOR_ARCHITECTURE_UNKNOWN = 0xFFFF;
 
        [StructLayout(LayoutKind.Sequential)]
        internal struct SYSTEM_INFO
        {
            public ushort wProcessorArchitecture;
            public ushort wReserved;
            public uint dwPageSize;
            public IntPtr lpMinimumApplicationAddress;
            public IntPtr lpMaximumApplicationAddress;
            public UIntPtr dwActiveProcessorMask;
            public uint dwNumberOfProcessors;
            public uint dwProcessorType;
            public uint dwAllocationGranularity;
            public ushort wProcessorLevel;
            public ushort wProcessorRevision;
        };
 
        [DllImport("kernel32.dll")]
        internal static extern void GetNativeSystemInfo(ref SYSTEM_INFO lpSystemInfo);
 
        private static Platform GetPlatform()
        {
            SYSTEM_INFO sysInfo = new SYSTEM_INFO();
            GetNativeSystemInfo(ref sysInfo);
 
            switch (sysInfo.wProcessorArchitecture)
            {
                case PROCESSOR_ARCHITECTURE_AMD64:
                    return Platform.X64;
 
                case PROCESSOR_ARCHITECTURE_INTEL:
                    return Platform.X86;
 
                default:
                    return Platform.Unknown;
            }
        }
 

Et voila, il reste juste à renommer la DLL correspondante à la plateforme choisie :

 
        protected override void OnBeforeInstall(IDictionary savedState)
        {
            base.OnBeforeInstall(savedState);
 
            string location = Path.GetDirectoryName(
                    System.Reflection.Assembly.GetAssembly(GetType()).Location);
 
            if (File.Exists(Path.Combine(location, "MediaInfo.dll")))
                File.Delete(Path.Combine(location, "MediaInfo.dll"));
 
 
            Platform p = GetPlatform();
            if (p == Platform.X86)
            {
                File.Move(Path.Combine(location, "MediaInfo-x86.dll"),
                          Path.Combine(location, "MediaInfo.dll"));
                File.Delete(Path.Combine(location, "MediaInfo-x64.dll"));
            }
            else if (p == Platform.X64)
            {
                File.Move(Path.Combine(location, "MediaInfo-x64.dll"),
                          Path.Combine(location, "MediaInfo.dll"));
                File.Delete(Path.Combine(location, "MediaInfo-x86.dll"));
            }
        }
 

Lorsqu'on désinstalle, il faut penser à supprimer "MediaInfo.dll" qui n'est pas connue de l'installer. On peut procéder comme précédemment en créant un nouveau Custom Action qui fera le ménage :

 
        protected override void OnBeforeUninstall(IDictionary savedState)
        {
            base.OnBeforeUninstall(savedState);
 
 
            string location = Path.GetDirectoryName(
                          System.Reflection.Assembly.GetAssembly(GetType()).Location);
 
            File.Delete(Path.Combine(location, "MediaInfo.dll"));           
        }
 

C'est presque finit : L'installateur répond parfaitement au besoin de sélectionner automatiquement la DLL correspondante à la plateforme du système d'exploitation courant. Néanmoins, on se retrouve avec deux fichiers : un .MSI et un .EXE. Le premier est notre installateur et le second est un bootstrapper qui sert à vérifier et à installer les dépendances nécessaires pour que notre installateur puisse lui même se lancer tout les cas. C'est donc une bonne chose de les avoir, mais cela fait tout de même un fichier de trop à mon goût.

Il existe des solutions payantes pour fusionner les deux fichiers en un seul exécutable. Moi j'ai trouvé plus simple (et moins cher) : utiliser WinRar et générer un package avec l'option SFX : on peut lui indiquer d'extraire les fichiers dans un dossier temporaire, de lancer setup.exe et même personnaliser l'icone de notre exécutable. Maintenant, on a plus qu'un seul exécutable qui installe tout ce qu'il faut automatiquement. Il ne reste plus qu'a le distribuer !



AddThis Social Bookmark Button
 

Silverlight 4 Launch Event


Silverlight 4, c'est pour très bientôt. Le 13 avril, Scott Guthrie présentera les dernières avancées qu'ils ont réalisés sur cette technologie à la DevConnections conference. Au programme, des dizaines de nouvelles fonctions très attendues dont notamment :

Silverlight 4 Launch event and LIVE QA with ScottGu and others



AddThis Social Bookmark Button
 

Zappiti : la beta est lancée !


Ca y es, Zappiti est disponible en téléchargement depuis ce week-end sur le forum de HDLand.

Voici quelques petites infos que vous ne trouverez nulle part ailleurs :

  • Zappiti est réalisé en C# avec le Framework .NET 3.5
  • L'interface graphique de Zappiti à été réalisé en WPF
  • Zappiti repose sur un design pattern appelé MVVM
  • Expression Blend 3 à été utilisé pour réaliser l'interface
  • La version actuelle à demandée plus de 3 semaines de travail
  • Zappiti, c'est 95 fichiers sources et 9861 lignes de code
  • Hyperventilate à été écouté 118 fois pendant le développement...

... et juste pour le plaisir des oreilles, je vous propose de découvrir le morceau en cliquant ci-dessous ;-)



AddThis Social Bookmark Button
 

Zappiti : Quelques screenshoots avant la version beta


Comme je vous l'annonçais récemment, Zappiti, le logiciel de gestion de média pour Dune HDi va bientôt être rendu public. Le développement avance bien et la version que j'ai actuellement est déjà très prometteuse.

Je sais que vous êtes nombreux à attendre la sortie de la beta. Cela ne devrait plus tarder maintenant, c'est juste une question de jours. En attendant, je nous livre ces quelques captures d'écran.

Attention :gardez bien à l'esprit que ce que vous voyez n'est pas la version définitive. Pour plus d'informations sur les fonctionnalités de Zappiti, vous pouvez vous rendre sur le blog de HD Land.



AddThis Social Bookmark Button
 

Zappiti : Un média manager pour les platines HDi Dune


Zappiti

Aujourd'hui, j'ai grand plaisir à vous annoncer la sortie prochaine de Zappiti, un freeware qui génère permet de générer les jaquettes de vos films et de vos séries que je développe pour le compte de HD Land.

Bien sur, il existe déjà d'autres logiciels quit font cela, mais Zappiti à été pensé pour vous simplifier la vie au maximum :

  • Il scan automatiquement vos fichiers
  • Il scrape automatiquement les informations, les posters et les fanarts
  • Vous pouvez tout modifier manuellement
  • Il peut gérer les films et les séries
  • Il est multilingue (actuellement Anglais et Français)
  • Il génère un menu pour votre Dune qui est réalisé par Christophe Cherel
  • Il fait un classement alphabétique, par genre et affiche même vos fichiers récents
  • Il gère les structure Blu-ray et DVD
  • Il peut importer votre collection existante et ses fichiers .nfo

Plus d'informations sur le forum de HD Land.



AddThis Social Bookmark Button
 

Les sables-mondes


Les sables-mondes Photography by r-z

Etrangement, les peuples des sables-mondes ne se sont jamais vraiment rendu compte que leur Air touchait à sa fin. Les premiers êtres ont souvent des difficultés à réaliser qu'ils ne sont que de passage, que leur brève existence annonce les prémices de nôtre Harmonie. Généralement, il survient toujours quelques évènements remarquables qui amènent leurs meneurs à réaliser et à accepter leur fin. Mais pas ici. A aucun moment les habitants des sables-mondes ne se sont douté de leur inéluctable extinction.

Trop occupés a gérer leurs conflits fratricides ou à tenter en vain de trouver une raison a leur existence, il passèrent leurs derniers jours à tenter de reconstruire une civilisation qui fût jadis l'une des plus splendide avant la nôtre. Certains Arpenteurs en visites dans ces mondes lors de leur Traversée décrivent avec tristesse la monotonie des paysages sablonneux et le bourdonnement sourd des vielles machines endormies. Assez souvent, ils revinrent de ces mondes empreints d'une étrange nostalgie et avec l'espoir un peu fou que peut-être... oui peut-être... le passé révolu de ces mondes pourrait encore renaître un jour.

- Périmir, 37eme Entretien


Précédent : L'Akasha


AddThis Social Bookmark Button
 
Suivez moi :
Facebook: damien.hoffschir del.icio.us: Filimindji FriendFeed: Filimindji LastFM: Filimindji Linked In: hoffschir Picasa: Filimindji Twitter: Filimindji YouTube: Filimindji
A voir aussi :