Hearts of Iron IV - Patch 1.3.3 - Nouveautés #2

Bonjour tout le monde et bienvenue pour un carnet sur les nouveautés du pacth 1.3.3 alors que nous sommes en phase finale de test pour celui-ci. Ce sera un assez gros carnet, avec de plus l'aide de @SteelVolt ( IA ) et de @TomaszKowalczyk ( Chef tech. ). Détendez vous, prenez un café et profitez !

Industrie : Changement pour le manque de ressources
Pour continuer sur le thème de la semaine dernière sur l'industrie, nous avons fait un dernier changement : actuellement les lignes de productions ont un malus maximum de -80% si elles se retrouvent avec un manque de ressources. Ce qui veut dire qu'en cas de manque de ressources le moyen de combattre cette situation est d'avoir plus d'usines. Nous avons estimé que ce n'était pas réaliste et rendait les ressources moins importantes que nous le voulions pour les grandes nations. Les pénalités dues au manque de ressources sont désormais calculées pour chaque ressource manquante sur l'ensemble des lignes de productions, le malus devenant progressivement plus important jusqu'à une pénalité de -100%.


Qualité de vie !
Comme d'habitude, un patch ne consiste pas seulement à des corrections et de l'équilibrage, nous avons aussi amélioré la qualité de vie, l'ergonomie du jeu. Des petits changements se ressentent en gros en jouant. C'est parti ! :
  • Vous avez envie de commencer une construction en priorité maximum ? Pas de problème. En faisant CTRL + Clic en construisant quelque chose cela ira en haut de votre liste de constructions.
  • Quelque chose qui aurait dû être fait il y a bien longtemps. En sélectionnant une division, il y a désormais un défilement automatique vers cette division sur la liste d'ensemble pour vous la montrer.


  • Vous aviez des problèmes pour retrouver vos unités dans une guerre avec beaucoup de belligérants ? Il y a maintenant un bouton ( en bas à droite sur l'image ) avec comme raccourci "M" qui cache TOUTES les autres unités sauf les vôtres.


  • Puisqu'il est parfois difficile de prévoir des plans vers des zones où vous n'avez pas beaucoup d'informations, nous avons ajouté un bouton qui permet de supprimer le brouillard de guerre si vous avez besoin de mieux voir le terrain etc...
  • Nous avons inventé une nouvelle fonctionnalité révolutionnaire que nous avons appelé "barre de chargement"


  • Si vous avez cet ami en multijoueur qui lague toujours, ne trouvez vous pas agaçant d'avoir toujours ce message "Le joueur lague" apparaissant tout le temps ? Désormais c'est une simple alerte. L'infobulle montre qui lague et de combien. Bien entendu, cette alerte disparaîtra automatiquement quand le joueur rattrape son retard.
  • De la même manière que pour les aéronefs, toute division non assignée aura aussi son alerte. Très utile, par exemple, quand un ami vous envoie des forces expéditionnaires, et que vous n'avez aucune idées de l'endroit où elles sont. Vous n'avez qu'à cliquer sur l'alerte pour sélectionner les divisions non assignées !



Mise à jour de l'IA !
Plusieurs personnes sur le forum ont demandé d'avoir plus de détails sur les améliorations de l'IA, comme ce que nous faisions pour Ensemble vers la Victoire, et vous avez été entendu. Voici une mise à jour par @SteelVolt :

Salutations tout le monde ! Je prend une courte pause sur mon travail intensif sur l'amélioration de l'IA d'Hearts of Iron IV ( sans compter ces dernières semaines où la grippe m'a mis K.O ), je suis de nouveau là pour vous donner des informations sur ce qui se passe sur le terrain.

Comme pour la dernière fois, je vais d'abord vous raconter une histoire de mes combats de tous les jours. Celle ci arriva durant ce cycle de développement. Après avoir fait pas mal de travail dans plusieurs domaines de l'IA, nous avons remarqué en laissant tourner le jeu seul, que l'Allemagne battait souvent l'Angleterre. Passer à travers la Royal Navy n'est pas une tâche facile, mais nous avons pensé qu'une Allemagne ayant battu l'URSS ( ce qu'elle faisait à ce moment là ) pourrait avoir une industrie suffisament forte pour contrer la Royal Navy. Mais nous avons été bien trop optimiste. Ce qui se passait vraiment, c'était que l'IA navale avait un problème rendant tout changement de régions pour les flottes difficiles, et l'Angleterre avait déjà envoyé toute sa flotte à l'autre bout du monde.

Voici les notes liées à ces changement dans le changelog :
  • Amélioration de l'IA navale dans l'évaluation des régions et dans une meilleure réaction pour s'adapter à des siuations changeantes.
  • L'IA navale tentera désormais d'utiliser des flottes de frappe afin d'aider pour des combats terrestres se déroulant sur une côté, si elles ne sont pas en mission pour aider durant un combat naval.
Cette seconde note concerne l'amélioration de l'IA à utliser ses flottes de frappe ( Qui sont des flottes utilisées n'ont pas pour garder ou chasser, mais pour détruire les flottes principales ennemies ).

Bien que le prochain patch ne couvre pas toutes les améliorations de l'IA dont nous nous occupons en ce moment, il y a plusieurs raisons pour vous de vous sentir exciter à propos de l'IA dans la prochaine mise à jour, j'ai donc pensé à mettre en lumière de certains de ces améliorations dans ce carnet.

Tout d'abord, avec ces spams d'unités que tout le monde déteste :
  • L'IA est meilleure pour calculer le ravitaillement à utiliser quand elle décide combien de divisions elle créer.
  • Ajout d'une IA stratégique "equipment_stockpile", permettant d'influencer combien de réserve l'IA pensera qu'elle aura besoin.
  • Toutes les nations avec beaucoup de divisions tenteront désormais d'avoir de plus grosses réserves par sécurité.
C'était surtout des bugs mineurs, mais cela offrit beaucoup de places pour des améliorations, comme dans le code où l'IA estime combien de divisions elle pense pouvoir supporter. Cela semble mieux maintenant. Nous avons aussi fait en sorte que l'IA fasse plus attention à ses réserves d'équipement tout en faisant qu'elle ait une réserve plus importante pour les nations ayant beaucoup de divisions.
  • Amélioration de l'IA de déploiement afin qu'elle gère mieux ses lignes de déploiement et le calcul du nombre de divisions nécessaire.
Partiellement connecté au point précédent. L'IA avait la facheuse habitude de mettre en place un grand nombre de fronts et d'unités pour ensuite sous certaines circonstances simplement les supprimer et recommencer. Tout cela reçu une révision, et l'IA agit maintenant avec plus de modération à la fois lors de la planification et lors de la réaction aux changements.
  • L'IA supprimera maintenant les lignes de déploiement pour les types d'unités pour lesquels elle a atteint son nombre nécessaire.
Tout est dit. Auparavant, l'IA continuait à produire des unités qu'elle avait commencé à entrainer dessus, comportement complétement inflexible à tout changement de situations.

Continuons, je suis d'ailleurs assez surpris que personne n'y avait fait attention :
  • Correction d'un sérieux problème où l'IA ne contre jamais les résistances avec des ordres de défenses de zones, ignorant complétement les terres conquises.
Bien qu'il a été fait mention que l'IA pourrait être meilleure à contrer la résistance, il s'avéra qu'elle ne faisant absolument rien contre. Cela été dû à une erreur du code avec une seule fonction "if" qui faisait que l'IA ne considérait seulement les était qu'elle possédait et non contrôlait.

Afin de s'accorder aux changements qui ont été fait à l'industrie, nous avons aussi modifié l'IA dans ces domaines :
  • Amélioration de la logique pour quand et à qui l'IA devrait demander un prêt-bail.
  • L'IA est désormais capable d'envoyer de l'équipement obsolète en prêt-bail et non plus seulement le dernier modèle.
  • L'IA peut maintenant mettre fin aux prêts-bail si elle ne peut plus supporter ces nations ou qu'elles n'ont plus d'intérêts.
  • L'IA e devrait plus être si heureuse de mettre plus en avant le développement d'industries navales à la place d'industries militaires quand elle avait aussi beaucoup d'industrie civile.
Les premiers points sont assez clair, vous devrez voir plus de prêts-bail plus efficace. Le dernier point cependant concerne un problème affectant un certain nombre de nations ( surtout les États-Uns ) où la possession d'un grand nombre d'industries civiles faisant penser à l'IA qu'elle avait moins besoin d'industries militaires en faveur d'une développement du naval.

Enfin, l'IA est maintenant meilleure à s'occuper de fronts sécurisés. L'IA avait l'habitude d'assigner un grand nombre d'unités sur des fronts qui ne posait aucunes menaces. La plupart de ces fronts concernait des pays combattant un ennemi commun, même lorsqu'ils battaient cedit ennemi, d'autres n'étaient tout simplement... aucunement une menace. Conclusion : Plus d'unités de l'IA devraient pourvoir faire une réelle différence désormais.

Finissons avec une capture d'écran qui me rend vraiment heureux : Le Japon ne déclare plus la guerre à l'URSS tant qu'il n'a pas fini avec le front chinois.


Performances et Optimisations
Cette partie concerne tous ceux qui souhaitent avoir plus d'informations et de détails sur le code et d'élements techniques. Ce n'est qu'un averissement ! ( NdT : Sérieusement si tous ce qui est technique vous repousse, fuyez, pauvres fous ! )

Nous avons pensé que les fans pourraient être intéressés par des détails plus techniques ainsi que d'obtenir une meilleure idée du travail de codeurs. Faites nous donc savoir si vous avez trouvé cette partie intéréssante ou bien que votre cerveau a complétement fondu ! Je laisse donc la parole à notre chef tech. @TomaszKowalczyk :

Bonjour tout le monde, je vais donc vous parler du travail sur l'optimisation que j'ai fais pour ce patch. Nous allons bien entendu continuer d'améliorer l'optimisation dans les prochains patchs, cependant pour la version 1.3.3, l'amélioration de la vitesse se situe entre 14% et 18%. Cela peut sembler pas très important, mais le principal objectif était de résoudre les "chutes" de performances. Ces moments où le jeu s'arrête durant de cours moments ( généralement toutes les 24 heures, quand le jour suivant commence ). Durant les dernières années de jeu, ces "chutes" sont encore plus agaçantes. C'est cela que j'ai amélioré pas mal. J'ai comparé deux parties très tardives, une de la version 1.3.2 et l'autre de la version 1.3.3. Le premier passage d'un jour à l'autre, mis 4 secondes en 1.3.2, et moins d'environ 0.4 secondes en 1.3.3.

Habituellement, nous ne partageons pas ces détails techniques, mais cette fois-ci je vais décrire tous ce qui ralentissait le jeu :
  • J'ai retravaillé une partie du code des conférences de paix qui calculer ce que quel pays pouvait avoir. Dans une guerre d'envergure, quand un pays majeur avec un grand nombre de territoires, a perdu, utiliser "Passer", "Passer" et "Passer" tout le temps, faisait tourner le jeu de plus en plus lentement, jusqu'à ce qu'il s'arrête presque complétement. Il y en a dans toutes les conférences de paix. Seulement dans les petites guerres, ce n'était pas suffisamment notable. Le problème venait d'une boucle de code mal imbriquée. Retravailler tout ça fait qu'elles marchent comme un charme.
  • Chaque fois que le joueur clique sur une flotte et lui assigne une mission dans une/des région(s), le jeu fait faire un trajet qu'il détermine à la flotte vers la région désigné. Cependant la logique de l'IA faisait qu'elle voulait être sûre que la flotte fasse la bonne mission, et il se trouve qu'elle spammait l'ordre "vas ici", "vas ici", "vas ici", car le dire qu'une seule fois n'était pas suffisant. Toute méthode de verification de ce genre est souvent compliquée et pèse beaucoup, mais heureusement l'ajout d'une seule ligne de code, résout ce problème et arrête les spams !
  • L'amélioration du système de ravitaillement était ce qui avait le plus d'impact.

    L'un des problèmes était que beaucoup d'éléments de jeu s'appuient sur des informations sur le « ravitaillement soutenu » contre « ravitaillement nécessaire ». C'est-à-dire, combien d'unités nous pouvons adapter dans la zone avant que nous obtenions un malus. Chaque morceau du code qui demandait à la région « quelles sont les valeurs supportés et requises ? » pour ensuite recalculer cesdits nombres à partir de rien. Puis il demandait à toutes les unités dans la zone, de combion était leur consommation de ravitaillement, et combien la région pouvait supporter ( une autre formule compliquée ). Et tout cela était fait des centaines de fois par plusieurs éléments du jeu, avec la même méthode de calcul. J'ai donc remplacé ce système pour faire sorte qu'il calcule cette information qu'une seule fois, pour ensuite le stocker dans une « mémoire cache ». Tous les éléments du jeu récupèrent les données directement depuis le cache, ce qui ne coûte presque rien.

    Un autre problème du système de ravitaillement venait du grand nombre d'unités. Vers une fin de partie, avoir beaucoup de divisions est un vrai problème, puisque cela demande beaucoup d'énergie venant de l'ordinateur. Sauf que cette fois-ci cela a presque tué le système de ravitaillement. J'ai utilisé pas mal de ruses afin de l'améliorer. J'ai dû réécrire la manière de calculer la consommation de ravitaillement dans chaque zone. Au lieu de regarder dans chaque province et d'itérer chaque unité en leur demandant « quelle est votre valeur de consommation de ravitaillement ? », Je le fais dans l'autre sens. Toutes les heures, chaque unités « fait un rapport » de sa consommation de ravitaillement à son emplacement, augmentant la valeur globale dans la région. Cela ressemble à la même chose, mais d'un point de vue technique, c'est tout autre. Grâce à cela, je peux complétement enlever la boucle de code du système de ravitaillement qui pesait énormément. Pour tout vous dire, ce fut l'une des plus belles optimisations. Comment optimiser une fonction ? Supprime la.

    Il y a eu tellement d'amélioration du système de ravitaillement que cela ne fait pas vraiment sens de toutes les lister, à la place, comme une sorte de résumé, je dirai que le système de ravitaillement prenait environ 65% du temps de calcul quotidien, dans ses "chutes" journalière. Désormais ce temps prend moins de 6%.
  • Une autre amélioration des "chutes" journalières, impliquait la partie où l'IA joue avec les modèles de divisions afin d'avoir les modèles qui lui conviennent. Cette correction fut plutôt simple. J'ai décourvert que peu importe si nous essayons d'ajouter/supprimer/remplacer la division dans n'importe quel emplacement, les statistiques globales de modèle sont recalculées. Ce qui est lourd. Peut-être pas si lourd, mais ils sont devenus lourds lorsque tous les pays du monde essaient presque toutes les combinaisons possibles en même temps. Il s'avère que c'était suffisant pour rafraîchir les stats de modèle qu'une seule fois après que l'AI soit remplie tous les emplacements.
  • Il y avait aussi des tas d'optimisations dans: l'IA planifiant les invasions navales, le code IA responsable de l'étalement des unités le long des fronts, les flottes calculant les bonus des radars, les routes des convois vérifiant le chemin à parcourir si certains canaux sont bloqués et bien d'autres difficile à expliquer.
  • Dernier problème, qui est mon préféré. Dans notre moteur Clausewitz, il y a une ancienne boucle de code que personne n'avait jamais osé toucher. Il traitait tous les éléments de l'interface utilisateur de manière « plate » au lieu de manière d'une « hiérarchie arborescente ». Cela signifie que plus nous ajoutons des fenêtres et les boutons au jeu, plus cette boucle devenait de plus lourde en plus lourde. Et les fenêtres n'avaient même pas besoin d'être montrées pour ralentir le jeu. Nous connaissions tous cet élément infame de notre moteur et qui ralentissait le jeu, mais le retravailler sans casser toutes les interfaces était presque impossible. Jusqu'à maintenant. J'ai trouvé un moyen ! Auparavant, cette boucle de code avait environ 120 000 passages dans chaque trame, maintenant elle est en dessous de 700, traitant désormais uniquement les éléments d'interface nécessaires. Ce que je veux dire c'est que lorsque que vous regardez les arbres technologiques, nous ne traitons plus à travers les fenêtres de production cachées, les boutons etc...
Comme je l'ai déjà dit, nous travaillons toujours sur les performances de fin de jeu. Je n'ai passé qu'une semaine et demi sur cela pour le moment, et nous avons déjà accomplis beaucoup, vous pouvez donc vous attendre à bien plus d'améliorations de ce genre dans les patchs à venir.

N'oubliez pas à 16H le World War Wednesday, aujourd'hui Daniel et moi allons continuer notre campagne sur Kaiserreich !

Vous pouvez discuter de cet article ici

Crédit
Spoiler:
Auteur : podcat; SteelVolt; TomaszKowalczyk
Traducteur : Limse