| Français |
English |
| Sommaire :
|
Summary :
|
| Le développement de TUER s’est accéléré depuis mai. Sa feuille de route a besoin d’une petite mise à jour. |
The development of TUER has accelerated since May. Its road map needs a small update. |
|
|
| Passage à JOGL 2.0
|
OK
|
| Passage à NEWT
|
OK
|
| Passage à JOAL
|
OK
|
| Passage à Fettle API
|
OK
|
| Utilisation d’OpenALSoft comme solution de repli
|
NOK
|
| Remplacement du mécanisme de mise à jour de la texture dans l’introduction
|
En cours
|
| Insultes et provocations
|
NOK
|
| Fusion des triangles droits adjacents coplanaires dont les coordonnées de textures sont canoniques
|
En cours
|
| Portal culling
|
NOK
|
| Pack200 et la compression de JAR
|
Annulé
|
| Sang
|
NOK
|
| Localisation des dommages
|
En cours
|
| Destruction de chaque membre
|
NOK
|
| Améliorations de l’éditeur
|
NOK
|
|
| Switch to JOGL 2.0
|
OK
|
| Switch to NEWT
|
OK
|
| Switch to JOAL
|
OK
|
| Switch to Fettle API
|
OK
|
| Use of OpenALSoft as a fallback option
|
NOK
|
| Replacement of the mechanism for texture updates in the introduction
|
In progress
|
| Insults and provocations
|
NOK
|
| Merge of coplanar adjacent right triangles whose texture coordinates are canonical
|
In progress
|
| Portal culling
|
NOK
|
| Pack200 and JAR compression
|
Cancelled
|
| Blood
|
NOK
|
| Localization of damages
|
In progress
|
| Destruction of each limb
|
NOK
|
| Enhancements of the editor
|
NOK
|
|
|
|
| Les fonctionnalités suivantes n’avaient pas été prévues dans la feuille de route ou bien elles avaient été définies différemment. Certaines d’entre elles dépendent de fonctionnalités en cours d’implémentation. |
The following features were not included in the road map, or they had been differently defined. Some of them depend on features whose implemention is in progress. |
Ennemis mortels
|
Mortal enemies
|
| Cette fonctionnalité évidemment essentielle est disponible dans la version alpha de TUER depuis octobre 2006 mais j’ai mis beaucoup de temps à l’implémenter dans la version pré-bêta. Elle est encore un peu boguée. |
This obviously essential feature has been available in the alpha version of TUER since October 2006 but it took me a long time to implement it in the pre-beta version. It is still a little bit buggy. |
Douleur des ennemis
|
Pain of enemies
|
| Les ennemis poussent des cris de douleur lorsqu’ils sont touchés. |
The enemies scream in pain when hit. |
Animation des armes du joueur
|
Animation of the player’s weapons
|
| L’arme descend brièvement quand le joueur la recharge à la manière de Goldeneye 007 (sur Nintendo 64). Les mouvements des armes pendant les tirs ne sont pas réalistes, il faudra que j’arrange ça. |
The weapon goes down briefly when the player reloads it in the manner of Goldeneye 007 (Nintendo 64). The movements during the firing of weapons are not realistic, I will have to fix it. |
Diaporama pendant le chargement
|
Slideshow during the loading
|
| J’affiche successivement plusieurs images pendant le chargement. Je m’en servirai avec des contenus en rapport avec la thématique politique du jeu. |
I successively display multiple images during the loading. I will use it with some contents relevant to the political theme of the game. |
|
|
Intelligence artificielle
|
Artificial intelligence
|
| Dans un premier temps, un ennemi devra ouvrir le feu sur le joueur s’il se situe dans son champ visuel et s’il est à portée de tir. Dans un second temps, il devra se mettre à couvert pour recharger et alerter ses coéquipiers s’il est en difficulté. |
As a first step, an enemy will have to open fire on the player if he is in his field of view and in his field of fire. In a second step, he will take cover to reload and alert his teammates if he is in trouble. |
Support des manettes
|
Gamepad support
|
| JogAmp comprend un fork minimal de JInput (JInput for JogAmp), une API gérant diverses manettes et joysticks. Ce fork utilise l’extraction et le chargement automatiques des bibliothèques natives à partir des JARs comme toutes les API qui composent JogAmp (JOGL, JOAL, JOCL, Java binding for the OpenMAX API). Un plugin NEWT pour JInput devra être implémenté. Ardor3D supporte déjà JInput mais pas avec JogAmp, je devrai seulement réutiliser le code existant avec ce fork cette fois-ci. |
JogAmp contains a minimal fork of JInput (JInput for JogAmp), an API supporting various gamepads and joysticks. This fork uses the automatic extraction and loading of native libraries from JARs like all other APIs composing JogAmp (JOGL, JOAL, JOCL, Java binding for the OpenMAX API). A NEWT plugin for JInput will have to be implemented. Ardor3D already supports JInput but not with JogAmp, I will only have to reuse existing code with this fork this time. |
Son spatial
|
Spatial sound
|
| J’utilise JOAL mais je dois renseigner la position de chaque source sonore et celle du joueur de sorte que la distance soit prise en compte dans la gestion des échantillons sonores. |
I use JOAL but I have to set the location of each sound source and the position of the player so that the distance is taken into account in the handling of all sound samples. |
Cinématique
|
Cutscene
|
| JogAmp supporte la lecture de vidéos avec LibAv et FFMPEG, je voudrais afficher une cinématique au tout début de la partie. |
JogAmp supports video playback with LibAv and FFMPEG, I would like to display a cutscene at the very beginning of the game. |
Harmonisation du support des animations des armes
|
Harmonization of support for weapons animations
|
| Le joueur et les ennemis utilisent différents mécanismes pour leur armes alors que j’aimerais qu’ils utilisent les mêmes armes de la même façon. Ainsi, le joueur pourrait ramasser les munitions et les armes des ennemis décédés et vice versa. |
The player and the enemies use different mechanisms for their weapons whereas I would like them to use the same weapons and in the same way. Thus, the player could pick up the ammunition and the weapons of dead enemies and vice versa. |
Passage au MD3
|
Switch to MD3
|
| J’utilise actuellement le format MD2 mais ses scripts d’importation et d’exportation pour Blender 2.63a sont très incomplets, ce format est peu précis et il se prête mal à la gestion des modèles animés composés de plusieurs membres. Je devrai porter le chargeur de modèles MD3 que j’ai utilisé avec le moteur JMonkeyEngine vers Ardor3D comme je l’avais fait pour le chargeur de modèles au format MD2. |
I currently use the MD2 format but its import and export scripts for Blender 2.63a are very incomplete, this format is imprecise and is not very appropriate for the management of animated models composed of several limbs. I will have to port the MD3 loader that I used with JMonkeyEngine to Ardor3D as I had done for the MD2 loader. |
Mode "arène"
|
"arena" mode
|
| Ce mode permettra d’allonger la durée de vie du jeu. A titre personnel, je passe pas mal de temps à jouer contre des bots après avoir fini un first person shooter. Néanmoins, il est hors de question que j’implémente un mode multijoueur en ligne car cela nécessiterait de reprendre entièrement l’architecture logicielle et je préfère me concentrer sur les modes de jeu en solo. |
This mode will allow to increase the length of the game. Personally, I spend a lot of time playing against bots after having finished a first person shooter. Nevertheless, I won’t implement an online multiplayer mode because it would require to fully redesign the software architecture and I prefer keeping concentrated on solo game modes. |
Amélioration de la détection des collisions
|
Improvement of collisions detection
|
| Tout d’abord, je devrai utiliser le partitionnement de l’espace pour n’effectuer des tests de collisions qu’entre des objets dans la même zone géographique à un moment donné. Par exemple, il est inutile de vérifier si deux soldats entrent en collision s’ils patrouillent dans deux pièces différentes. |
At first, I will use the space partitioning in order to test for collisions only between objects in the same geographical area at a given time. For example, it is unnecessary to check whether two soldiers collide if they patrol in two different rooms. |
| L’approche trivial consiste à déplacer les objets en fonction du temps écoulé puis à vérifier s’ils entrent en collision, cela s’appelle la détection de collisions à posteriori. Elle est très facile à implémenter et elle est suffisante pour des objets relativement lents, dont l’intersection des volumes englobants entre deux instants est toujours non vide. Malheureusement, les roquettes se déplacent trop vite pour que cette méthode puisse fonctionner. C’est pourquoi la version alpha de TUER utilise plutôt le multisampling (à ne pas confondre avec l’anticrénelage) qui consiste à subdiviser le déplacement d’un objet en plusieurs segments de sorte que l’intersection des volumes englobants entre deux instants soit à nouveau non vide. Plus le pas de discrétisation est petit, plus le nombre d’étapes nécessaire pour effectuer le test de collisions est grand. En conséquence, cette méthode est plus coûteuse, elle reste intéressante si ce nombre d’étapes reste relativement faible. Or, une balle de 9 millimètres parcourt environ 350 mètres par seconde lorsqu’elle est tirée d’un pistolet et plus de 400 mètres par seconde lorsqu’elle est tirée d’une mitraillette, le multisampling devient alors beaucoup trop coûteux (plus de 350 étapes nécessaires par centième de seconde). |
The trivial approach consists in moving the objects function of elapsed time and then check whether they collide, this is called a posteriori collision detection. It is very easy to implement and is sufficient for relatively slow objects whose bounding volumes intersection between two instants is always nonempty. Unfortunately, the rocket moves too fast for this method to work. That is why the alpha version of TUER rather employs the multisampling (not to mistake for anti-aliasing) consisting in dividing the movement of an object into multiple segments so that the intersection of bounding volumes between two moments is anew nonempty. The smaller the discretization step is, the bigger number of steps required to perform the test of collisions is. Consequently, this method is more expensive, it is interesting if the number of steps remains relatively low. However, a 9 mm bullet travels 350 meters per second when fired from a pistol and more than 400 meters per second when fired from a submachine gun, the multisampling becomes far too expensive (more than 350 steps by one hundredth of a second). |
J’utiliserai l’approche suivante :
- calculer les volumes englobants des trajectoires des objets entre deux instants
- calculer les intersections de ces volumes par paires d’objets
- pour chaque paire, pour chaque objet, si cette intersection est non vide, calculer l’interval de temps dans lequel la collision aurait pu se produire
- pour chaque paire, si l’intersection des intervals de temps est non vide, stocker cette paire avec la valeur du paramètre temporel la plus petite
- trier les paires stockées en fonction des valeurs du paramètre temporel
- pour chaque paire stockée, considérer que la collision la plus tôt a eu lieu et ignore les collisions potentielles ultérieures
|
I will use the following approach:
- calculate the bounding volumes of objects tarjectories between two moments
- calculate the intersections of these volumes by pairs of objects
- for each pair, for each object, if this intersection is not empty, calculate the time interval in which the collision could have occurred
- for each pair, if the intersection of time intervals is not empty, store this pair and the smallest value of the time parameter
- sort the stored pairs by the values of the time parameter
- for each stored pair, consider that the earliest collision has occurred and ignore the potential later ones
|
| On peut se ramener à un calcul des racines d’un polynôme du second degré en partant de l’équation du mouvement si c’est une translation rectiligne uniformément variée. Ainsi, je ne manquerai aucune collision et j’utiliserai les calculs les plus lourds uniquement quand il est fort probable qu’il y ait eu une collision entre deux objets. |
It can be reduced to a calculation of quadratic polynomial roots starting from the equation of motion if it is a uniformly varied rectilinear translation. Thus, I won’t miss any collision and I will use the heaviest calculations only when it is likely that there was a collision between two objects. |
Réduction de la consommation de mémoire
|
Reduction of memory consumption
|
| D’après IBM, "Les objets de type Direct ByteBuffer libèrent leurs tampons natifs automatiquement, mais ils ne peuvent le faire que dans le cadre d’un nettoyage de la mémoire du tas Java, afin de ne pas répondre automatiquement à la pression sur le tas natif. Le nettoyage de la mémoire se produit uniquement lorsque le tas de Java devient si plein qu’il ne peut pas traiter une demande d’allocation du tas ou si l’application Java le demande explicitement (non recommandé car cela peut causer des problèmes de performance). Le cas pathologique serait que le tas natif soit plein et un ou plusieurs objets de type Direct ByteBuffer soient éligibles pour le nettoyage de mémoire (et pourrait être libéré pour faire de la place sur le tas natif), mais le tas de Java est presque vide alors le nettoyage de mémoire ne se produit pas". |
According to IBM, "Direct ByteBuffer objects clean up their native buffers automatically but can only do so as part of Java heap GC, so they do not automatically respond to pressure on the native heap. GC occurs only when the Java heap becomes so full it can’t service a heap-allocation request or if the Java application explicitly requests it (not recommended because it can cause performance problems). The pathological case would be that the native heap becomes full and one or more direct ByteBuffers are eligible for GC (and could be freed to make some space on the native heap), but the Java heap is mostly empty so GC doesn’t occur." |
C’est pourquoi c’est au programmeur de déclencher le nettoyage de la mémoire du tas natif ou de l’effectuer manuellement au moment opportun. J’utiliserai la seconde méthode comme elle est plus prévisible. Lorsqu’un joueur ira d’un niveau à un autre, certains modèles seront utilisés, d’autres ne le seront pas. Je stocke leurs données (coordonnées de points et de textures, …) dans des NIO buffers directs. Ma suggestion est la suivante:
- comparer les fabriques utilisées par le niveau précédent et celles utilisées par le niveau suivant juste avant d’y entrer
- demander aux fabriques utilisées par le niveau précédent mais pas par le niveau suivant de libérer les resources natives
- demander aux fabriques utilisées par le niveau suivant mais pas par le niveau précédent de précharger les modèles
- ne pas demander aux fabriques utilisées à la fois par le niveau précédent et pas par le niveau suivant de libérer les resources natives
|
That’s why the programmer has to force the garbage collection of native heap or to do it manually when needed. I will use the second method as it is more predictable. When a player goes from a level to another one, some models will be used, some models won’t. I store their data (vertices and texture coordinates, etc) in direct NIO buffers. My suggestion is this further :
- compare the factories used by the previous level and those used by the next level just before entering it
- ask the factories used in the previous level but not in the next level to release all native resources
- ask the factories used in the next level but not in the previous level to preload their models
- don’t ask the factories used both in the previous level and in the next level to release all native resources
|
| Un NIO buffer direct peut être détruit grâce à son cleaner comme c’est expliqué ici et là mais il ne faut le faire qu’une fois que Ardor3D et JOGL 2.0 n’ont plus de référence sur lui, en retirant les maillages et les noeuds du scenographe concernés et en appelant glDeleteBuffers pour libérer le nom et le stockage de données du vertex buffer object du côté du GPU. Ainsi, il n’y a aucun risque que le pilote OpenGL provoque une violation d’accès mémoire. Je trouve qu’Ardor3D crée trop de petits NIO buffers directs juste pour récupérer des valeurs une seule fois, je devrai corriger ça aussi. N.B : Java 1.7 n’aligne plus les NIO buffers directs sur les limites des pages, cela réduit significativement les besoins en mémoire des applications créant beaucoup de petits buffers, c’est expliqué ici. |
A direct NIO buffer can be destroyed thanks to its cleaner as it is explained here and here but you must do it only once Ardor3D and JOGL 2.0 don’t have any reference on it, by removing the concerned meshes and the nodes of the scenegraph and by calling glDeleteBuffers to free the name and the data store of the vertx buffer object in the GPU side. Thus, there is no risk that the OpenGL driver causes a memory access violation. I think that Ardor3D creates too much direct NIO buffers to retrieve values just once, I will fix that too. N.B: Java 1.7 doesn’t align direct NIO buffers on pages boundaries anymore, it significantly reduces the memory requirements of applications creating a lot of small buffers, it is explained here. |
Déploiement du jeu avec un RPM
|
Deployment of the game with an RPM
|
| Mozilla a déjà envisagé de bloquer le plugin Java dans Firefox une fois par le passé, Google affiche un message d’avertissement effrayant quand un utilisateur final essaie d’installer une application Java à partir de Chrome, Microsoft Windows 8 en mode Metro ne supportera aucun plugin, Apple désactive le plugin Java s’il est rarement utilisé. Ces organisations nuisent à Java en tant qu’environnement d’exécution portable pour mettre en avant leurs propres solutions quitte à causer du tort à des projets open source dont OpenJDK (avec les failles de sécurité comme prétexte), c’est leur vision de l’Open Web, "HTML5 ou crève". C’est pourquoi je contournerai leurs obstacles en passant par des dépôts officiels de paquetages accessibles en dehors des navigateurs au moins sous GNU Linux. |
Mozilla already planned to block the Java plugin in Firefox one time in the past, Google displays a scary warning message when an end user tries to install a Java application from Chrome, Microsoft Windows 8 in Metro mode will support no plugin, Apple disables the Java plugin if it is rarely used. These organizations damage Java as a cross-platform runtime environment to push their own solutions even if it harms some open source projects including OpenJDK (with security flaws as an excuse), it is their vision of the Open Web , "HTML5 or die". That is why I will bypass their obstacles by using official package repositories available outside the web browsers at least under GNU Linux, especially Mageia. |
| Je ne souhaite pas créer un RPM conventionnel, cela nécessiterait d’empaqueter toutes les dépendances sous forme de RPMs et de les maintenir ce qui prendrait beaucoup de temps. Je créerai plutôt un RPM très léger qui reposera sur Java Web Start. Ainsi, ma procédure de build changera très peu, je pourrai réutiliser mes JARs et mes fichiers JNLP sans effort supplémentaire, mon jeu se mettra à jour automatiquement comme c’est déjà le cas. La bibliothèque Java RedLine RPM me permettra de créer un RPM pour mon jeu même avec des systèmes d’exploitation ne supportant pas les outils natifs de création de RPMs. Ma procédure de build restera portable. Comme Icedtea-web ne supporte pas les options "-import", "-silent" et "-uninstall", je ne peux pas encore créer un tel RPM. |
I don’t want to create a conventional RPM, it would require to package all dependencies as RPMs and to maintain them which would take a lot of time. I will rather create a very lightweight RPM that will rely on Java Web Start. Thereby, my build process will be a little bit modified, I will be able to reuse my JARs and my JNLP files without additional efforts, my game will be automatically updated like it’s already the case now. RedLine RPM Java Library will allow me to create a RPM for my game even with operating systems not supporting native RPM build tools. My build process will remain cross-platform. As icedtea-web does not support the options "-import", "-silent" and "-uninstall", I can’t create such a RPM yet. |
Support d’Android (sous conditions)
|
Android support (with conditions)
|
| Je porterai mon jeu sous Android si et seulement si j’arrive à utiliser OpenJDK au lieu d’Android Dalvik Virtual Machine car le premier est plus rapide que le second et je ne souhaite pas contribuer à la fragmentation de Java. Je devrai ajouter le support d’OpenSL ES à JOAL et modifier la procédure de build pour l’empaqueter sous forme d’un fichier APK. |
I will port my game to Android if and only if I succeed in using OpenJDK instead of Android Dalvik Virtual Machine because the former is faster than the latter and I don’t want to contribute to Java fragmentation. I will have to add OpenSL ES support into JOAL and modify the build process to package it as an APK file. |
Gestion correct du fenêtrage avec plusieurs écrans
|
Proper window management with multiple screens
|
| TUER gère mal l’affichage sur un seul écran physique quand plusieurs sont utilisés comme un seul écran virtuel, il devra détecter l’écran physique primaire et n’utiliser que ce dernier. Cette fonctionnalité dépend du bogue 600 de JOGL. |
TUER mismanages the display on a single physical screen when several are used as a single virtual screen, it will have to detect the primary physical screen and use only the latter. This feature depends on the JOGL bug 600. |
Modification des combinaisons de touches et de la sensibilité via une interface graphique
|
Modification of the key bindings and the sensibility with a graphical user interface
|
| Je permettrai aux joueurs de modifier la sensibilité de la souris pour plus de confort, je ne peux pas fournir une sensibilité par défaut qui satisferait tout le monde, il en est de même pour la configuration par défaut des manettes, des joysticks et des claviers, surtout ceux avec des arrangements spécifiques des caractères autres que QWERTY et AZERTY. |
I will allow players to change the mouse sensitivity for comfort, I can’t provide a default sensitivity that would satisfy everyone, it is the same for the default configuration of controllers, joysticks and keyboards, especially those with specific arrangements of characters other than QWERTY and AZERTY. |
Basculement en mode fenêtré
|
Switch to windowed mode
|
| Certains joueurs préfèrent jouer en mode fenêtré. Ils pourront passer d’un mode à l’autre en appuyant sur F11. Une option permettra de démarrer le jeu dans un mode particulier pour leur éviter d’avoir à faire cette manipulation à chaque fois. |
Some players prefer playing in windowed mode. They will be able to switch from one mode to another by pressing F11. An option will allow to start the game in a particular mode to prevent them from having to do this each time. |
Vérification du pilote OpenGL au démarrage
|
Verification of the OpenGL driver on startup
|
| Je dois empêcher le pilote générique d’émulation logicielle (émulation d’OpenGL grâce à Direct3D) d’être utilisé pour faire fonctionner mon jeu car il est extrêmement lent par rapport à de véritables pilotes OpenGL. Je le détecterai et j’afficherai un message d’avertissement afin de recommander à l’utilisateur final d’installer un bon pilote OpenGL au lieu d’utiliser la daube de Microsoft. |
I have to prevent Microsoft’s generic software emulation driver (OpenGL emulation through Direct3D) from being used to run my game because it is extremely slow compared to real OpenGL drivers. I will detect it and I will display a warning message in order to recommend to the end user to install a proper OpenGL driver instead of using Microsoft’s crap. |
Sauvegarde et rechargement de la progression et des statistiques
|
Saving and loading of the progress and the statistics
|
| Les données du jeu seront sauvegardées dans un fichier XML. Le décodage et l’encodage seront faits avec l’API Java standard, notamment XMLEncoder, XMLDecoder et les délégués de persistance. Comme le dialecte XML évoluera au fil du temps, ce fichier sera migré afin de supporter la dernière version du schéma XML à l’aide d’XSLT. Le schéma XML d’une version sera construit par introspection des classes des Java beans sauvegardés. Chaque feuille de style permettant d’effectuer une migration sera générée en comparant le schéma XML de la source et le schéma XML de la destination. Ces deux dernières étapes seront les plus difficiles à réaliser. Xalan-Java effectuera les migrations des fichiers de sauvegarde. |
The game data will be stored in an XML file. The decoding and encoding will be performed by the standard Java APIs, including XMLEncoder, XMLDecoder and persistence delegates. As the XML dialect evolves over time, this file will be migrated to support the latest version of the XML Schema using XSLT. The XML schema of a version will be built by introspection of saved Java beans classes. Style sheets allowing to migrate will be generated by comparing the XML schema of the source and the XML schema of the destination. These last two steps are the hardest to achieve. Xalan-Java will perform the migration of backup files. |
Support de Magenta
|
Magenta support
|
| Magenta est une implémentation libre d’iOS, elle me sera utile pour préparer une version de mon jeu pour iPhone et iPad. Comme je ne compte pas acheter un Mac, j’utiliserai Avian ou XMLVM. Je ne serai probablement pas autorisé à mettre mon jeu dans l’App Store donc je ne suis vraiment pas très motivé. |
Magenta is a free implementation of iOS, it will be useful to prepare a version of my game for iPhone and iPad. As I don’t plan to buy a Mac, I will use Avian or XMLVM. I will probably not be allowed to put my game into the App Store so I’m really not very motivated. |
|
|
| Certains individus sont très créatifs dans la moquerie. Désormais, leurs blagues du genre "c’est ballot ça, on ne peut tuer personne dans TUER" seront aussi désuetes et injustifiées que leurs railleries à propos du langage de programmation que j’utilise. A les croire, installer Java fait des trous dans la couche d’ozone, tue les dauphins, risque de provoquer un incendie dans votre maison, attire les humanoïdes dévorant les enfants obtenus par croisement génétique de notre président de la république avec un hamster… S’ils veulent se rendre vraiment utiles, qu’ils me paient un infographiste, je ne suis qu’un développeur après tout. Je reste relativement ouvert aux propositions constructives et personne ne m’empêchera de mener mon projet à son terme. Je travaillerai à nouveau sur l’amélioration des performances dès le mois prochain pour consolider mon framework avant d’enrichir le gameplay. Je veux prouver que Java n’est pas un handicap pour les performances et qu’elles dépendent surtout des algorithmes et de leurs implémentations plus que du langage de programmation choisi. Par souci d’écologie, je tiens également à ne pas contribuer à l’obsolescence programmée du matériel informatique, c’est pourquoi TUER restera compatible avec OpenGL 1.2. Enfin, la politique occupera progressivement une place plus importante dans mon jeu, je veux en faire une œuvre de dénonciation du système capitaliste et de tous ses valets, les racistes, les sexistes, les homophobes, les xénophobes de toute sorte, les fondamentalistes religieux, les patrons, les rentiers, les managers, la majorité des médias, les majors, les défenseurs du brevatage du vivant et du logiciel, … |
Some individuals are very creative in mockery. Now, their jokes like "blast it, you can’t kill anyone in TUER" will be as outdated and unjustified as their taunts about the programming language I have used. Believe them, installing Java makes holes in the ozone layer, kill dolphins, may cause a fire in your home, attracts humanoids eating children obtained by genetic cross of our president with a hamster… If they want to make something really useful, they should pay me a graphic designer, I’m a developer after all. I remain relatively open to constructive proposals and nobody will stop me from conducting my project to completion. I will work anew on the improvement of performance next month to strengthen my framework before enriching the gameplay. I want to prove that Java is not a handicap for the performance and they depend mostly on algorithms and their implementations than on the chosen programming language. Because we care, I will also not contribute to the planned obsolescence of computer hardware, that’s why TUER will remain compatible with OpenGL 1.2. Finally, politics will gradually occupy a more prominent place in my game, I want to make a work of denunciation of the capitalist system and all its servants, racists, sexists, homophobes, xenophobes of all kinds, religious fundamentalists, employers, shareholders, managers, the majority of media, majors, defenders of software and life patents, … |
| Vous pouvez tester la version pré-bêta version de TUER ici. |
You can test the pre-beta version of TUER here. |
 Cet article est mis à disposition selon les termes de la Licence Creative Commons Attribution – Pas d'Utilisation Commerciale – Partage à l'Identique 3.0 non transposé |
 This article is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License |
| Auteur : Julien Gouesse |
Author: Julien Gouesse |