Vive la liberté d’expressionotron

Voilà déjà quelques temps que mon twitter bot expressionotron a dépassé le nombre hallucinogénatoirement élevé de 30 followers. On en est même à 36.

Comme promis dans cet article, j’ai libéré le code source de cette incommensurable œuvre.

C’est sur mon compte github : tout bien documenté, avec la config de mise en production, la doc de conception, etc. J’aime la doc.

bande dessinée de Gaston Lagaffe documentation

Au départ, j’avais prévu de ne libérer que le code source, sans les listes de morceaux de phrases utilisés pour créer les expressions. Sauf que je me suis vautré et j’ai tout balancé d’un coup dans github. J’aurais pu supprimer les listes après coup, mais ça aurait toujours été possible de les retrouver en fouillant les logs. J’aurais également pu effacer tout le repository et repartir de zéro, mais j’avais la flemme.

De plus, je n’avais pas envie de maintenir une version publique sans les morceaux de phrases et une version privée avec. Donc, ça suffit les bêtises, on libère tout, c’est beaucoup plus simple. Ça n’en est que mieux pour vous. (À condition d’admettre le postulat initial que ça vous intéresse).

Pour la suite

L’expressionotron continue sa quête de célébrité. La prochaine étape sera d’accorder les adjectifs avec les noms. En effet, actuellement, tous les adjectifs sont au masculin, alors qu’il y a quelques noms féminins. Ce qui peut provoquer quelques incohérences grammaticales, tel que :

Ça corrode de la prostate néo-myxomateux au point godwin !! CXI !!1!

Pour diminuer le risque de faute, j’ai intégré assez peu de noms féminins. Il serait maintenant louable de corriger ce problème et d’implémenter l’accord nom-adjectif, afin de pouvoir se permettre d’ajouter des noms de tous genres.

Pour 40 followers, je me lance dans cette tâche.

Suis-je un vilain ?

D’aucuns et d’aucunes diront que mon expressionotron est sexiste, puisque je l’ai créé par défaut au masculin, et que ce n’est que bien plus tard que je songe à féminiser ses composants. Ouais c’est possible.

Je vais me permettre de poser la question : le masculin et le féminin, est-ce que c’est pareil que l’homme et la femme ?

Il existe des langages (l’anglais par exemple), dans lesquels le masculin et le féminin a moins d’importance : chaque nom d’objet est neutre (« it ») et les adjectifs sont invariables. Quelles sont les différentes manières, à travers le monde et les âges, de prendre en charge le féminin et le masculin dans une langue ? A-t-on absolument besoin d’y intégrer cette notion ? Comment est-ce pris en compte dans le langage des signes ? Est-ce qu’on se touche les seins ou les testicules à chaque fois qu’on veut accorder un adjectif ?

Je sais pas. Il faudrait peut-être chercher les réponses auprès des langages épicènes, dont nous parlerons peut-être dans un autre article.

De toutes façons, ce blog lui-même est sexiste, vu le type de photo incorporé à chaque article.

tumblr_o6utq94hzd1uaiz32o1_1280

Mais c’est comme ça. C’est vraiment ces images là que j’ai envie de vous montrer, que vous soyez une femme, un homme, ou entre les deux, ou totalement autre. J’espère que ça vous plaît.

Not-powerpoint de présentation de git

À ConcreteWorld.🌏, la chouette entreprise où je travaille, on a coutume d’organiser des afterworks d’humagogie. Le concept est simple :

  • des collègues de travail, dans un cadre de pas-Travail,
  • quelqu’un réalisant une présentation sur un sujet quelconque,
  • de la bière.

Le premier sujet était « Le concept de la réalité à travers les âges », présenté par Collègue Kouing-Amann. Comme c’est du pas-Travail, l’ambiance est détendue, il a donc pu se permettre des images funs, des memes internet, des gifs animés avec des chats, etc. On a tous trouvés ça super.

Galvanisé à la vue de cette performance, je me suis proposé pour réaliser le prochain afterwork, avec une présentation de l’outil de gestion de version ‘git’.

Après le code spaghetti, les branches git spaghetties.

Mon idée de départ, c’est que git pourrait être utile à tout le monde, et pas seulement aux développeurs. A partir du moment où vous manipulez des fichiers, vous pourriez être intéressé par git.

J’ai donc ai préparé un one-man-show assez bien ficelé, avec :

  • Des slides créés sur le site slides.com, comportant des images giga-délire.
  • Une démo en live, avec très peu de ligne de commandes mais des outils graphiques (SourceTree, TortoiseGit, …) afin de ne pas effrayer les non-informaticiens.
  • L’outil ZoomIt (https:// technet.microsoft.com/en-us/sysinternals/zoomit.aspx) pour afficher en grand ce que je fais sur l’écran semi-géant.
  • Un intermède petit-guignolesque avec deux marionnettes-chaussettes, chacune d’elle représentant une branche git. Elles contiennent des modifications différentes sur une même zone d’un même fichier, et donc elles sont en conflit. Ha ha ha.
  • La possibilité de faire des « hola », que même si ça échoue ça serait drôle quand même. (Je ferais ma hola tout seul, moment de solitude lol comme quand un humoriste fait une blague super pas drôle mais c’est assumé que c’est pas drôle et c’est ça qui est drôle).

Nous avions donc là une alliance de pédagogie, de live et de fun en mesure de subjuguer mon auditoire et de lui faire écrouler les faux plafonds de la salle lors du tonnerre final d’applaudissements.

sttngclap_original Les gens de Star Trek qui applaudissent

Malgré tout, j’avais un petit peu peur : « Et si on me trouve ridicule ? Si les gens se moquent de moi et de mes marionnettes ? Ou de mes commentaires de commits ? Ou de mes repositories nommés avec des prénoms pour faire un mini-story-telling distinguant qui a committé quoi ? Ne risque-je pas de fondre en larme devant tout le monde ? De devenir fou ? De fabriquer un lance-flammes en une fraction de seconde et de brûler tous ces gens ? ».

Rien de tout cela n’est arrivé et personne ne m’a trouvé ridicule. Par contre, personne ne m’a trouvé intéressant.

Voici les diverses choses qui se sont passées. Je vous mets ça à nouveau sous forme de liste, car j’aime bien les listes.

  • Colléguette Louloute dit tout fort et à plusieurs reprises que je suis en train de perdre les gens et que je devrais écourter.
  • Des bavardages. Bon, ça arrive. Mais là des gens s’étaient carrément levés et avaient formé un salon de discussion parallèle dans la mini-cuisine à côté. Mini-cuisine n’ayant pas spécialement de cloison d’isolation phonique avec la salle où je performais piètrement.
  • Collègue Pez sort du groupe parallèle et s’adresse tout fort à une personne restée dans ce qui restait de mon auditoire : « Eh, garde bien les yeux ouverts et oublie pas de passer ma facture ! » (je ne sais pas de quoi il parlait). La personne en question était l’une des rares à se forcer à continuer d’écouter ce que je racontais. J’ai revu dans cette situation l’archétype du mauvais élève pourrissant la gueule du bon élève juste comme ça gratuitement.
  • Collègue Inuit passe derrière moi pour regarder mon écran. Je lui demande « t’as besoin de quelque chose ? Parce que sinon l’écran que j’ai là c’est exactement le même que celui que tu vois projeté en grand ». Il me répond : « non, je voulais juste savoir quand ce serait fini ».
  • En plein milieu d’une phrase, je dois sortir mon téléphone pour l’éteindre car il faisait « bip-bip sms ». D’habitude, quand on fait ça, il y a une réaction : des rires étouffés, des discussions, un flottement. Là c’était déjà tellement le bordel qu’il n’y a eu aucune différence.
  • Au moment d’écrire le commentaire de commit « Ajout d’une image de chat », je fais un lapsus claviétal et j’écris « chate ». Je me suis dit que les gens allaient se mettre à rigoler et se déconcentrer, alors j’ai immédiatement désamorcé le danger en disant « ha ha, quel lapsus rigolo ! ». Et là, pareil : aucune réaction, aucune différence notable dans le bordel ambiant.

C’était donc un fiasco total. Pendant les marionnettes, l’attention des gens est revenue et ils ont ri, et quelques secondes après, c’était re-perdu.

Je me suis demandé si j’allais pas m’énerver, engueuler les gens, ou tout simplement partir et les laisser en plan, là. J’aurais aussi pu essayer de les rappeler à l’ordre gentiment. Mais je n’en ai eu ni l’envie, ni le courage. C’est pas une salle de classe et je ne suis pas un prof. Comme déjà dit dans un autre article, j’ai toujours eu du mal avec les profs (la justification de leur utilité, leur autorité, le fait que ce soit des humains, …), je ne me voyais donc pas agir comme l’un d’eux.

May I have your attention, please ?

May I have your attention, please ?

Je ne saurais pas expliquer en détail pourquoi ça s’est terminé comme ça. L’analyse la plus poussée que je puisse faire étant : « j’ai globalement chié comme si j’avais eu le transit intestinal d’un avion de chasse gluté avec du coco à base de pruneaux ». Je me croyais plus fort que ça, plus à même de captiver un auditoire. Eh bien en fait non.

Ils vont donc continuer à s’échanger leurs fichiers à l’arrache, par mail ou sur des répertoires partagés ; à faire du renommage en « _v1 », « _v2 » et du CPOLD (https:// github.com/malko/cpold) ; à se demander qui a chabraqué leurs petites valeurs de leurs petites cellules Excel. Bon courage à vous, les clodos !

Ensuite, Stagiaire АБВГДЕЁЖ (un mec bien mais vraiment bizarre), a fait une seconde présentation sur les différentes manières de mesurer la distance entre deux mondes parallèles. C’était le moment de la bouffe, très peu de gens écoutaient, mais il a eu bien plus de sang-froid que moi, il a continué de blablater sans se prendre la tête ni pulsions de pétages de plomb. Ça s’est très bien passé pour lui et les quelques personnes qui écoutaient d’une oreille mangeatoirement distraite.

Je vais arrêter de parler d’informatique aux gens. Je fais manifestement chier tout le monde, c’est pas la première fois que ça arrive. Je réserve mes partages à ce blog. L’avantage c’est qu’ici, ceux qui ne sont pas intéressés par ce que je bave ne se mettent pas à me pourrir, ils se contentent d’arrêter de lire et de passer à autre chose.

Je vous fais cadeau de ma présentation de git : http://slides.com/darkrecher/deck-1#/.

Faites-en ce que vous voulez, mais attention, il semblerait qu’elle soit dotée du super-pouvoir d’endormir et/ou de rendre fous ceux qui la regardent.

Gros bisous !

A quelle distance sommes_nous de ce monde parallèle ?

À quelle distance sommes-nous de ce monde parallèle ?

Demake de Atomix fait avec PuzzleScript

Fans de mini-jeux de réflexion, bonjour.

atomix_water

Vous avez peut-être déjà découvert PuzzleScript (dans ce blog ou ailleurs). Voici ma première œuvre réalisée avec ce langage. Plus précisément, c’est la deuxième, mais la toute première était un cadeau pour une amie, et reste donc du domaine privé.

Concernant l’idée originale, je ne me suis pas foulé et j’ai repris le principe d’Atomix, un jeu où vous devez déplacer des atomes afin de reconstituer une molécule. La particularité, c’est que lorsqu’un atome est en mouvement, il continue jusqu’à être stoppé par un mur ou un autre atome. (Je suis sûr qu’en mécanique quantique, tout se passe exactement comme ça).

atomix-2

Concernant les niveaux du jeu, je ne me suis pas foulé non plus, et j’ai pompé ceux d’un certain draknek (http:// blog.draknek.org/post/93360531842/if-i-wanted-to-clone-atomix-this-is-where-id).

Ils sont intéressants et épurés de toute casse-couillerie inutile. Merci à lui.

Hyponitrous acid (mais vous le saviez sûrement déjà).

Hyponitrous acid (mais vous le saviez sûrement déjà).

Là où j’ai été obligé de me fouler, c’est pour implémenter le fonctionnement d’Atomix dans PuzzleScript. Le langage est assez souple et bien fichu, mais ne permet pas vraiment de décrire des comportements « globaux » prenant en considération une zone étendue de l’aire de jeu. J’ai donc eu recours à quelques bidouilles hasardeuses pour le processus vérifiant l’égalité entre la molécule-modèle et la disposition des atomes.

D’autres part, il n’y a pas de notion de variables. Pour tester « est-ce que l’atome dans le modèle est égal à l’atome dans l’aire de jeu ? », je n’ai pas trouvé de meilleure solution que de tout décrire verbeusement : « est-ce que l’atome du modèle est un hydrogène et celui de l’aire de jeu un hydrogène ? ou bien est-ce que l’atome du modèle est un carbone et celui de l’aire de jeu un carbone ? etc. ».

Il y a une petite documentation au début du script indiquant les contraintes à respecter pour créer les niveaux, ainsi que quelques commentaires ici et là. Ça mériterait d’être documenté plus en détail, ou pas.

puzlescript_code

Le sus-mentionné draknek a employé kp-atomix (https:// github.com/figlief/kp-atomix) pour publier les niveaux qu’il a créés, ce qui est une aubaine, car ils y sont décrits via un fichier json au format assez facile à comprendre.

Et quitte à me fouler pour coder, je me suis fendu d’un petit programme (en python, évidemment) convertissant les niveaux json de kp-atomix en niveaux de PuzzleScript. Ça aurait certainement pris moins de temps de les convertir à la main, mais ça aurait été tellement moins rigolo.

Ce programme a été honorablement documenté, car il est possible que certains de ses morceaux me resservent par la suite. Tout cela est évidemment dans un repository github, comme le veulent les conventions asociales à la mode en ce moment.

J’aime beaucoup PuzzleScript. Ça regroupe un grand nombre d’idées de mes rêves : des jeux de réflexion à foison, un moyen inhabituel de raconter des histoires, la création d’un langage dédié relativement souple et générique. Je vais voir si je peux faire quelque chose avec tout ça.

Comme vous le savez, les atomes sont liés ensemble par des liaisons de covalence. Voici donc une image de liaison, presque tout aussi idiosyncratique (même si je sais pas ce que ça veut dire).

double_dildo

Test de Kingdom Rush Frontiers

Chers lecteurs, voici un test de Kingdom Rush Frontiers, un jeu de Tower Defense bien sympa (http:// www. kongregate.com/games/Ironhidegames/kingdom-rush-frontiers).

Il s’agit du deuxième épisode, le premier ayant déjà été terminé et décortiqué par votre serviteur (qui ne vous servite à rien). Comme d’habitude, je me suis orienté vers la version Flash non payante, sur Kongregate.

kingdom-rush-frontiers

o057yw6thdd

Mon avis général

On reste dans la lignée du premier, et ce pour notre plus grand plaisir.

Le bien

Des idées de monstres originales :

  • Vers de Sable : impossible à toucher, sauf lorsqu’ils sont bloqués par des soldats,
  • Saurian Téléporteurs,
  • Shamans Protecteurs : aura de protection pour les unités alentours,
  • Poukai Riders : ennemis volants attaquant les soldats, qui se transforment ensuite en ennemis volants très rapide,
  • Saurians Brood Guard : de plus en plus rapide au fur et à mesure qu’ils perdent de la vie.

Des idées de tours et d’upgrades originales aussi :

  • Necro-Tower : transforme les cadavres environnants en mignons petits squelettes,
  • Battle Mecha : comme une tour, mais déplaçable dans un périmètre restreint,
  • Génies/Efreets : détruisent instantanément un ennemi, du très bon contre les gros monstres peu nombreux.

Des éléments interactifs utiles/rigolos, des références à des films, des aliens comme dans le film Alien, la race saurienne, des capacités de héros inventives, des boss bien vilains, etc.

Le pas bien

Le jeu n’est pas clair sur des points de fonctionnement particuliers :

La tour Falconeer augmente la portée des tours adjacentes. Super. Mais qu’est-ce que ça a comme effet sur les Battle Mecha ? Est-ce que ça augmente la portée de déplacement (auquel cas, c’est peu utile), ou la portée de tir ?

La tour Axe Thrower a un totem de silence, empêchant les ennemis d’utiliser leurs sorts. Concernant les auras de protections, c’est assez clair. Mais y’a-t-il d’autres capacités bloquées ? Qu’en est-il de la téléportation et l’invisibilité des Saurians, la génération des Saurian Brood Guards, la génération des Momies, etc ?

Ah, la partie de mon cerveau qui s’occupe de limiter les fois où je passe pour un bouffon me prévient que c’est expliqué en détail ici (http:// kingdomrushtd.wikia.com/wiki/Tribal_Axethrowers).

J’aurais également aimé avoir la possiblité de buter Beresad, le dragon noir pionçant dans un niveau de Saurians, soit par une astuce interactive, soit en fin de partie sous forme de mini-boss. Mais il est peut-être exploité avec plus d’intérêt dans un autre épisode ou un add-on.

beresad

Comparaison des tours

Les Archmage : ça arrache !

La capacité Tornade de cette tour est surpuissante : multi-cibles, cause des dégâts, fait reculer les ennemis tout en les retirant momentanément du jeu, ne coûte pas si cher que ça. Cette capacité suffit à elle seule à régler le problème du gros packs d’ennemis lents et résistants des waves finales (Gorillon, Saurian Brute, …). Ils avancent trop lentement pour espérer sortir de la zone d’action de la tornade !

Dans le premier Kingdom Rush, je mettais systématiquement en fin de parcours un Arcane Wizard (tour mage violette) dotée de la capacité de téléportation. Dans le même ordre d’idée, pour ce deuxième opus, j’y place une Archmage tornadée au maximum.

La capacité Critical Mass permet de bien nettoyer les swarms (ennemis faibles mais nombreux). On se retrouve donc avec une tour puissante et polyvalente, efficace pour tout un panel d’ennemis. Faudrait presque la nerfer en fait.

Les Necros : ça envoie du gros

Les tours de mages sont décidément à l’honneur dans cet épisode. Placez une Necro Tower proche d’une tour à swarm (Dwaarp ou autre), elle disposera alors à sa proximité d’une quantité conséquente de cadavres, qu’elle transformera en une primesautière armée de squelettes. Ces nouveaux amis riches en calcium mettront tout leur enthousiasme en œuvre pour ralentir les ennemis à peu de frais. Ajoutez à cela la capacité de Poison, et vous avez une chouette tour ayant à la fois les fonctions de ralentissement et de dégâts.

pocket-power-glow-bones5

Battle Mecha : mais … caca

J’aime pas trop. Au départ, la bombarde est lente mais puissante, il est donc conseillé de la placer à portée de plusieurs segments de chemins séparés, afin de multiplier les moments où elle a au moins un ennemi à portée. Mais lorsqu’on l’upgrade ensuite en Battle Mecha, elle se place directement sur le parcours, ce qui fait qu’elle ne se cantonne plus qu’à un seul segment. Ça impliquerait une réorganisation complète des fonctions touriennes, ce qui n’est bien évidemment pas possible.

Je la préconise donc sur des spots mono-segments. Si vous êtes large sur le pognon, faites en une dans un coin paumé et mettez-lui les missiles. Ça touche n’importe quel ennemi, et c’est si poétique lorsqu’ils sont tirés, on croirait un lâcher de ballons.

Dwaaarp : dwaaaaaarp !

Bien sympa, surtout avec l’aire d’effet qui enflamme les ennemis. Mais je n’aime pas trop le drill. Trop cher pour ce que c’est et il faut avoir le coup de bol pour que ça tombe sur un ennemi puissant.

Crossbow Fort : pas si bow gosse que ça

J’ai jamais été très fan des tours d’archers, que j’ai du mal à considérer comme autre chose que de la taffiotade. Celle-ci se rattrape un peu avec la capacité Falconeer. J’essayais d’en mettre une à chaque niveau juste pour la satisfaction psychologique d’en avoir une. Bien entendu, c’est à mettre au milieu de tours attaquant à distance. Les casernes de soldats, on s’en fiche complètement.

Tribal Axethrowers : pas trop de la balle

Bien, sans plus. Le Totem of Spirits est une bonne idée, mais à vrai dire, je n’ai pas eu l’impression d’avoir été gêné par les auras de protection des Savage Spellcasters. Même quand il y a à la fois l’aura magique et l’aura physique.

Knigths Templar : t’empale !

De très bons bloqueurs, ce qui est la fonction principale des casernes. De plus, elle a les upgrades qui vont bien pour que ces vaillants petits soldats plein d’abnégation ne meurent pas trop vite.

Juste pour l’esthétique, j’aurais aimé une tour qui ne ressemble pas aux paladins du premier Kingdom Rush. Il y aurait sûrement eu moyen de créer une unité avec les mêmes stats et les mêmes upgrades, mais un aspet graphique totalement différent : demi-troll, homme-arbre, fantôme gazeux, golem de choucroute, … Il y a tellement d’idée possible.

Assassin’s guild : ah, ça seins !

L’upgrade de Pickpocket est fort cossue, à mettre en début de parcours sur des maps un peu longue. Les Assassins se feront continuellement trucider, mais ça vous fera un centre à farming de pognon.

D’autre part, ces mignons personnages m’ont sauvé la vie au dernier niveau. Leur production très rapide a permis de bloquer une de ces cochonneries de petit creep boueux qui s’était dangereusement approché de l’arrivée. Le temps de mourage de l’assassin par le creep était à peu près égal à son délai de respawn.

dedic5p

Comparaison des héros

Vu que j’ai testé la version gratoche, je n’avais accès qu’au 3 premiers héros. Ce sera donc rapide.

Alric

Bof. Pas vraiment testé. Je suis très vite passé aux héros suivants.

Mirage

Bof aussi. Sa capacité de déplacement rapide est fort louable, mais je parviens difficilement à gérer ce genre de subtilité. En général, je pose mon héros à l’endroit qui me semble le plus approprié, puis je n’y touche plus. J’ai déjà bien à faire ailleurs, entre les tours, les reinforcements, les météorites, …

Si vous avez suffisamment de cerveau pour micro-manager votre héros, prenez Mirage. Moi, personnellement, pas.

Cronan

Mon préféré. la compétence Stampede (les rhinocéros qui chargent) est dévastatrice contre des swarms. Je le place en fin de parcours, là où les rhinos auront le plus d’effet, et donc, je ne le bouge plus.

De plus, sa régénération fait qu’on n’a pas trop à se soucier s’il va crever. Une raison de plus pour ne pas le micro-manager, par exemple dans un moment difficile où il faudrait le mettre hors de portée.

marvel-comics-the-rhino

Charge de rhinocéros

Mes conseils

*)

Globalement, j’ai l’impression qu’il faut commencer par monter un petit peu toutes les tours, puis en maxer quelques unes. Je dis ça en tant qu’expert auto-proclamé en jeux de Tower Defense, mais il est fort possible que d’autres gens pensent autrement.

Comme dit plus haut, une tour d’Archmage en fin de parcours, ça aide bien. Si plusieurs fins de parcours : une tour pour chacun.

*)

Les météorites, c’est comme les reinforcements : à balancer dès que possible, à l’endroit où ça fait le plus mal. Ne cherchez pas à les conserver en prévision d’un éventuel moment critique. Le but des météorites, c’est justement de les utiliser de la manière la plus optimale possible afin d’éviter la future apparition de moments critiques.

Ce n’est pas ce que je faisais dans le premier Kingdom Rush, où je les gardais parfois pour plus tard. Eh bien c’est une bêêêtise. Chaque microseconde de jeu durant laquelle les reinforcements ou les météorites ne se rechargent pas est une microseconde non optimisée.

*)

Voici maintenant une astuce un peu cheapos. Si vous êtes coincé en veteran (le mode de difficulté le plus haut), mettez-vous en casual et réussissez quelques niveaux pour obtenir des étoiles ; ceci afin de débloquer quelques upgrades globaux. Il n’y a pas de décompte séparé entre les étoiles gagnées en veteran et celles gagnées en casual.

Pour chaque niveau, le mode de difficulté avec lequel il a été remporté est indiqué. Si vous souhaitez éprouver un sentiment d’accomplissement intégral du jeu, vous aurez donc besoin de refaire en veteran des niveaux déjà réussi (replay value, tout ça, …). Cependant, attention au story mode, dans lequel chaque niveau rapporte entre 1 et 3 étoiles. Si vous en terminez un en casual avec 3 étoiles, puis que vous le terminez en veteran avec une seule, vous n’aurez pas le détail, et il sera indiqué que vous l’avez terminé en veteran avec 3 étoiles.

Je conseille de noter quelque part les niveaux dans ce cas. Vous pourrez ensuite y revenir et remporter réellement les 3 étoiles en veteran, pour la garantie d’un sentiment d’accomplissement ultime et pour la génération dans votre cerveau de la satisfaction psychologique qui en décombe. (N’oubliez pas de compléter les achievements et de leveler tous vos héros au max).

superstarxxx

Des étoiles ! It’s full of stars !

*)

Durant les dernières waves du dernier niveau, vous récupérez une somme de brouzoufs assez conséquente. Mettez-la de côté. Le dernier boss vous réserve une surprise de merde.

*)

L’achievement Highlander est un peu lourdingue à obtenir : un soldat Templar doit réussir 5 résurrections d’affilée. C’est juste de la chance. Heureusement, il y a un niveau pratique pour ça : Ma’qwa Urqu (http:// kingdomrushtd.wikia.com/wiki/Ma%27qwa_Urqu).

Placer des Templars à l’arrivée du haut, avec l’upgrade de résurrection au max (mais aucune autre upgrade). Posez quelques autres tours ici et là pour la survie. Des Savages Sarbacaniers arriveront régulièrement, ils empoisonneront vos Templars qui verront leurs points de vie diminuer en continu. Vous obtiendrez ainsi des occasions de résurrections multiples. Ça reste de la chance et ça prend du temps, mais la fréquence de tirage aléatoire est augmentée.

*)

Il faut bichonner ses soldats. Un soldat pourri avec peu de point de vie risque de provoquer l’un des désagréments suivant :

  • se faire bouffer par un Savage Warrior, qui récupérera ainsi un peu de vie,
  • se faire alieniser par un Alien Spider, ce qui créera un Guerrier Alien,
  • se faire mordre par un Saurian Myrmidon, qui, là encore, récupérera de la vie.

Dans les trois cas, votre soldat pourri aura créé plus de problème que s’il n’y avait pas eu de soldat du tout.

Conclusion

J’aime bien nommer un chapitre « Conclusion », parce que les profs du collège nous disaient de ne pas le faire.

Il est fort probable que je finisse par m’acheter le troisième épisode : Kingdom Rush Origins et que j’en fasse un test ici. Je peux juste pas vous dire quand. Comme toujours, c’est pas un problème d’argent, mais de temps. J’ai encore tellement d’autres jeux à finir, gratuits ou déjà achetés.

Les gens de chez IronHide ont actuellement décidé de s’orienter vers un autre genre, pour nous créer un RTS : Iron Marines. (http:// ironhidegames. com/post.php?id=112).

Je surveille ça de loin. Cependant, j’ai déjà un jeu de retard chez eux et les infos concernant Iron Marines sont distillées via un compte-goutte atteint de canicule. En attendant sa sortie, je suggère donc de vivre comme des princes et des princesses et de cueillir le moment présent. Yalatza-tza timbala timbadzoing.

iron_marine

image de Martine modifiée avec sa tronche en métallisée

Iron Martine (à la montagne, à la plage, …)

Blarg sur Github

C’est le jeu que j’avais fait il y a quelques années. Il est maintenant disponible ici : https://github.com/darkrecher/Blarg.

Même que j’avais lancé une campagne de crowdfunding sur Ulule et j’avais gagné la mirobolesque somme de 50 euros. J’avais ensuite gagné un peu plus grâce à des dons généreux et totalement inattendus provenant d’une personne étrange, mais c’est une autre histoire.

Le jeu en lui-même n’a pas changé, c’est le même code source. Par contre j’ai tout bien documenté et rassemblé les données qui s’étaient éparpillées : articles, annonces, procédure pour générer les exécutables à partir du code, etc.

Il y a une doc de conception, car j’essaye d’en rédiger une pour chacun de mes « gros » projets. Pour celui-ci, elle est séparée en deux :

  • la doc à propos du jeu en lui-même,
  • la doc à propos du système d’interface (boutons, menus, etc).

Eh oui, j’avais presque réussi à créer une librairie d’interface graphique, réutilisable pour d’autres jeux. Mériterait-elle d’être reprise, modernisée et améliorée ? Je ne sais pas et de toutes façons j’ai tellement d’autres idées que celle-ci va probablement rester à l’abandon.

On peut même configurer les touches.

On peut même configurer les touches.

Et ensuite ?

Je suis en train de mettre dans github tous mes vieux trucs qui périclitent sur mes disques (disques durs et disques compacts, c’est vous dire la portée temporelle de cette fouille archéologique).

D’autre part, j’ai l’honneur de vous annoncer que mon twitter expressionotron a dépassé les 30 followers. Comme promis, je vais donc libérer son code source (la libération des listes de mots viendra plus tard, si j’ai encore plus de followers). J’en profiterais pour démochifier ledit code.

Bref, ça va bouger sur mon github dans les semaines qui viennent.

mappear_brouillon_5

Allez hop, pour fêter ça, image de femme ronde déguisée en magicienne (plus précisément en Elvira-Mistress-of-the-dark).

C'est une sorcière, donc une magicienne, donc ça colle avec le sujet de l'article.

C’est une sorcière, donc une magicienne, donc ça colle avec le sujet de l’article.

 

 

 

Sublime Text : détection des indentations tab/space

Alors voilà, vous vous êtes mis à Sublime Text 2 (http:// www. sublimetext.com/2), parce que c’est un éditeur de texte topissimissime.

Vous prévoyez de vous en servir pour un ensemble de projets et de fichiers de code existants, ayant des conventions différentes concernant les indentations en tabulations/espace. Pour diverses raisons, (justifiées ou non), vous n’avez pas envie de tout homogénéiser à grands coups de replace, alors vous avez gardé cette configuration :

"translate_tabs_to_spaces": false,

 

Le problème

Vous vous attelez à un projet indenté avec des espaces, vous y créez un nouveau fichier de code (mettons que ce soit du python). Dès la première définition de fonction, vous tapez manuellement les 4 espaces d’indentation, afin de bien indiquer à Sublime Text que c’est ça que vous voulez. Lorsque vous passez à la ligne suivante, c’est bien des espaces qui sont automatiquement ajoutés.

Ensuite, c’est la merde.

Pour reculer d’une indentation, vous êtes obligé d’appuyer 4 fois sur backspace. Et chaque fois que vous écrivez un if, un while ou autre, le niveau d’indentation automatiquement ajouté est écrit avec une tabulation.

Vous vous retrouvez donc avec de la cagassade comme ça :

screenshot_space_tab_02,

ce qui ne manque pas de faire hurler l’interpréteur python.

Vous êtes constamment obligé de remettre manuellement des espaces. Vous ne comprenez pas pourquoi cet abruti de Sublime Text ne comprend pas la convention de ce fichier en particulier, alors que celui-ci contient déjà trouzemille lignes de code indentées bien comme il faut.

 

L’interrogation existentielle

La configuration de Sublime Text est définie dans différents fichiers, qui se recouvrent les uns à la suite des autres (config globale, config d’un package, d’un projet, …). Ce n’est pas toujours évident de déduire les valeurs utilisées au final. Heureusement, il est possible de les vérifier.

Vous ouvrez la console, via l’option du Menu principal « View -> Show Console », puis vous tapez fébrilement les commandes suivantes :

view.settings().get("translate_tabs_to_spaces")
False
view.settings().get("tab_size")
4
view.settings().get("detect_indentation")
True
view.settings().get("auto_indent")
True
view.settings().get("smart_indent")
True

sublime_text_console

Tout semble normal.

Alors, vous décidez que Sublime Text n’est pas si génial que ce qu’on en dit, et vous reprenez ce bon vieux Notepad (pas Notepad++, Notepad tout court). C’est de la chiottasse, mais au moins, c’est de la chiottasse maîtrisée.

Notepad à l'apogée de son utilisation

Notepad à l’apogée de son utilisation

 

La solution

Sublime Text est capable de simplifier les ajouts et retraits d’indentation, qu’ils soient en tab ou en espace. Mais pour y parvenir, il doit préalablement déduire la convention du fichier à partir de son contenu actuel. Cette déduction n’est déclenchée qu’à l’ouverture. Comme il s’agit d’un fichier que vous aviez créé, rien n’a été déduit puisqu’il était vide au départ.

Il suffit de fermer puis réouvrir le fichier, et tout va mieux. (Pas la peine de redémarrer Sublime Text, juste l’onglet du fichier concerné). Il existe par ailleurs une commande pour relancer la déduction, mais je ne sais plus où elle est, et osef.

Il faut un nombre suffisant de lignes indentées (une dizaine) pour que cette déduction soit garantie. Naturellement, il faut qu’elles soient toutes homogènes, et si c’est des espaces, il en faut le même nombre à chaque fois.

 

La sodomie drosophilienne

(Ça veut dire « enculage de mouche »)

La déduction d’indentation est également déclenchée lorsqu’on copie-colle une quantité conséquente de texte dans un fichier vide. On va jouer un peu avec ça.

Créer un nouveau fichier (File -> New File, ou raccourci Ctrl+N). Copier-collez le texte suivant dedans :

def truc():
    1
    2
    3
    4
    5
    6
    7
    8
    9
    0

(Il y a 10 lignes indentées, chacune avec 4 espaces).

Placez votre curseur juste après le « 0 » de la dernière ligne.

Appuyez sur « Entrée ». Une ligne indentée s’ajoute. Elle comporte 4 espaces.

Appuyez sur Backspace.

Les 4 espaces sont retirés en une seule fois et le curseur revient au début de la ligne. Sublime Text a compris que l’indentation de ce fichier est sous forme de 4 espaces. Il n’est même pas nécessaire de préciser que la syntaxe est du python. (D’ailleurs c’en est pas vraiment, car écrire des lignes ne comportant qu’un chiffre n’a que peu de sens).

copypast_ok

Recréez ensuite un nouveau fichier. Ne repartez pas du fichier précédent, car Sublime Text lui a déjà attribué une convention.

Copier-collez le même texte mais sans la dernière ligne.

Placez votre curseur juste après le « 9 ».

Appuyez sur « Entrée ». Une ligne indentée s’ajoute. Elle comporte 4 espaces.

Appuyez sur Backspace.

Seul un espace est retiré. Sublime Text n’a pas compris que l’indentation de ce fichier est sous forme d’espaces. Il garde le comportement par défaut, qui est une indentation indéterminée.

copypast_fail

Pour info, j’utilise Sublime Text version 2.0.2, Build 2221.

Toute cette drosophilophilie pour dire qu’avec la dernière génération d’éditeurs de texte (Sublime, Atom, …), on n’a plus vraiment besoin de se soucier du choix tabulations/espaces. J’ai récemment créé un nouveau projet python + django, j’ai passé 3 jours dessus avant de m’apercevoir que certains fichiers étaient indentés avec des espaces et d’autres avec des tabulations !

Ça ne dérange ni python, ni Sublime Text, ni la personne qui code d’avoir des fichiers mixés. Cependant, il est toujours nécessaire d’appliquer la même convention au sein d’un même fichier, et il vaut mieux comprendre avec précision le comportement et l’intelligence de ces nouveaux éditeurs de texte.

Malgré ces petites gênes qui subsistent, il semble donc que la rivalité millénaire entre les tabulistes et les espaciens s’estompe progressivement, ce qui est à mon avis une bonne chose.

Strips-Indentation-600-final

 

Le réconfort

Maintenant que vous connaissez cette subtilité, à vos claviers, mesdames les codeuses et messieurs les codeurs !

moretomeasure_by_fatty_lover-d5stsk4

Puzzlescript et des audits de jeux

Plotrochk à vous, chers gens et gensses.

Ce mois-ci, petit article court. Mon cerveau doit se remettre des 3 énormes articles que j’ai récemment perpétré, concernant mon changeage de crémerie.

Puzzlescript

En partant du blog de randomnine (http: //wootfu.com/) et en passant par divers endroits que j’ai oublié, je suis tombé là-dessus (http: //www.puzzlescript.net/)

C’est absolument génial. C’est un langage de script relativement simple et bien foutu, permettant de créer des jeux à énigmes en 2D carroyée.

Je suis fortement fan de ce genre de jeux : Atomix, Adventures of Lolo, Tiny Skweeks, Pushover, Drod, … Haaaaaa ! Drod ! Tiens ça me rappelle cet article dans lequel je décrivais les principes régissant ces jeux : https://recher.wordpress.com/2009/03/12/regles-a-respecter-pour-les-jeux-a-enigmes/

Je vous laisse fouiner sur internet, il y a plein d’œuvres sympas réalisées avec PuzzleScript, ainsi que des tentatives de recréer des jeux existants, appelées « demakes ». C’est comme un remake, mais au lieu de refaire un jeu, on le défait dans le sens où on décortique son fonctionnement pour ensuite le reformuler en un script de PuzzleScript.

Il existe des demakes de Démineur, de Match-3, de Drod (assez éloigné de la version initiale), de Portal, etc. Je vous laisse les trouver par vous-même.

Le langage de script comporte quelques manques : pas de « variables » ni de gestion des diagonales par exemple. Mais il est plutôt souple et permet déjà plein de choses. Le site officiel est doté d’une documentation assez complète : tutoriels, référence du langage, exemples, etc. Ceux qui veulent le découvrir commenceront par un inévitable Soko-ban.

C’est tout en HTML5. Du coup : Windows, Mac, Linux, Smartphones, MonCulSurLaCommode, ça marche (à peu près) pareil partout.

Le seul souci, c’est que c’est très moche. Tous les éléments du jeu et toutes les cases sont des images de 5 * 5 pixels maximum. Rustique.

J’ai déjà fait un jeu pour une amie (un cadeau personnel que je ne mettrais donc pas ici). Si je suis motivé, j’essaye de demaker Atomix, et peut-être même 4 Elements.

Et maintenant parlons d’autre chose.

Audit de jeux vidéo amateur

Alors voilà. Vous avez créé un petit jeu dans votre coin, et vous avez envie de savoir s’il est cool/intéressant/bankable. Pour cela, vous pouvez faire appel à mes services : j’analyse votre jeu et vous rédige un rapport d’audit décrivant les axes d’améliorations, les points problématiques, la bankabilité, etc.

Nan j’déconne. J’emploie le mot « audit » juste pour faire classe. En vrai je le testerai pendant deux heures grand maximum et je vous dirai à l’arrache ce que j’en pense. Mais ce simple petit service peut déjà vous intéresser.

J’ai peu de légitimité en tant qu’auditeur de jeux. J’en ai créé à peine un et demi et des poussières. J’ai pas de console, pas de smartphone, pas de tablette, pas de compte Steam, pas de jeux AAA et je dois m’y reprendre à 3 fois avant de parvenir à sortir une boule de feu dans Street Fighter (le 2, les suivants je les ais jamais testés).

À défaut de boule de feu...

À défaut de boule de feu…

Mais en tant qu’auditeur amateur, j’ai toute la légitimité pour analyser vos jeux vidéo amateur. Les amateurs ne devraient pas éprouver de honte à se faire aider par d’autres amateurs.

C’est bien évidemment gratuit. La seule condition à respecter est que le résultat de mon analyse soit publié d’une manière ou d’une autre sur internet, avec un lien vers ce blog. Un commentaire ou un message de forum peut tout à fait convenir.

Voici quelques exemples d’audit déjà réalisés (auprès de personnes qui ne me l’ont pas spécialement demandé, mais on va pas s’arrêter sur ces détails) :

J’ai également rédigé quelques tests de jeux (Kingdom Rush, Lugaru, …), que vous arriverez à retrouver, si vous êtes courageux et désœuvré, dans ce blog ou dans les magazines 42. Mais ces tests ne contenaient pas de recommandations personnelles, puisque je ne m’attends pas à ce que les auteurs de ces jeux non-amateurs perdent leur temps à lire mes blablas.

Pour demander un audit, il vous suffit de claquer un commentaire à cet article.

official_audit_seal