Oops! It appears that you have disabled your Javascript. In order for you to see this page as it is meant to appear, we ask that you please re-enable your Javascript!

AI WAR 2

Sortie d’AI War 2 v0.812! « Chasse Ninjas et Desyncs »

Sortie d’AI War 2 v0.812! « Chasse Ninjas et Desyncs »

Salutation voyageurs, c’est une infos qui nous viens du Développeur AI War 2  » ARcen GAMES » .

Pour rappel AI War 2 est un space opéra ou l’humanité combat une intelligence artificielle qui domine la galaxie. Comme vous pouvez l’imaginer vous êtes le seul espoir de l’humanité.


Notes de publication.

La façon dont l’IA se faufile a quelques corrections de bugs et fonctionne mieux maintenant, et la flotte de Hunter devrait être beaucoup plus forte à cause du fait que l’IA sait mieux quand se retirer. Les IA qui choisissent de vous faufiler et de vous harceler devraient désormais être plus efficaces. Et le nanocauste devrait faire beaucoup mieux que d’envoyer ses unités. Merci à Badger pour tous ces changements.

Puffin a également apporté des modifications à des éléments qui améliorent légèrement les transports, bien que je doive en faire plus directement à ce sujet. Et il a également rendu les Fusion Bombers vraiment plus efficaces dans leur ciblage et plus puissants en général. Ils sont maintenant beaucoup mieux sans que vous ayez à les micro.

De mon côté, j’ai mis fin à fixed-maths , qui corrige plusieurs bogues immédiats, tels que des navires tournant autour d’autres navires alors qu’ils étaient supposés faire du cerf-volant de manière linéaire, ou des navires bloqués sur des champs de force. C’était quelques bugs que je ne pouvais tout simplement pas trouver une solution élégante, peu importe combien de temps je les regardais depuis environ six mois. Je n’avais pas non plus été capable de trouver une façon élégante de résoudre certains désynchrones évidentes du mode multijoueur qui, je le savais, allaient surgir de façon persistante. cela fait partie des raisons pour lesquelles je n’ai pas encore implémenté le mode multijoueur.

Hier, j’ai enfin eu un aperçu, qui est en partie détaillé dans le lien ci-dessus, d’un moyen de réparer automatiquement les désynchronisations dans ce jeu et de résoudre ainsi tous ces problèmes à la fois. Une partie de la raison pour laquelle cela corrige quelque chose en mode mono-joueur est qu’elle nous permet d’arrêter d’utiliser des mathématiques fixed-int et d’utiliser plutôt des mathématiques en virgule flottante. Ces bits sont maintenant en place. La réparation automatique des désynchronisations en mode multijoueur est quelque chose que je dois encore coder, mais cela devrait prendre moins d’une semaine de travail au moment voulu, et c’est certainement moins que les mois de poursuite des désynchronisations qui auraient dû arriver. .

C’est un gros problème, car il permettra le mode multijoueur le plus tôt possible – non, je n’ai pas encore de calendrier – et cela nous permet également de simplement effacer certains des bugs les plus impénétrables dus à problèmes de threading, problèmes de précision fixed-int, etc. Travailler plus intelligemment que durement, mais cela n’est possible que grâce à une longue liste d’autres choix d’architecture et de souplesse que ce jeu offre grâce aux deux dernières années de travail. Donc, si nous avions pensé à cela il y a un an ou deux, dans un sens abstrait, cela n’aurait toujours pas semblé réalisable, car les contraintes architecturales de la plupart des jeux rendent tout simplement cela impossible. Mais à cause de la nature multiple et combinée du jeu actuel, j’ai soudainement réalisé que c’était possible.

Pour ceux qui ont manqué l’actualité récente, je suis de retour au travail – yay! Si vous vous demandiez ce qui se passait, j’ai récemment mis en place une explication vidéo de ce qui s’est passé . Je n’entre pas dans les détails, pour des raisons de confidentialité, mais il y en a assez pour faire passer les éléments importants. Quoi qu’il en soit, je suis de retour maintenant et très heureux de cela. En fait, plutôt heureux en général ces jours-ci, ce qui est bien.

Un merci continu à Badger, Puffin et Quinn pour avoir tenu le fort pendant mon absence.

Problème avec la dernière version?

Si vous cliquez avec le bouton droit de la souris sur le jeu dans Steam et choisissez Propriétés, accédez à l’onglet Bêtas de la fenêtre qui s’ouvre. Vous verrez diverses options. Vous pouvez toujours choisir most_recent_stable à partir de cette version pour obtenir ce qui est essentiellement une version. Ou deux versions en arrière si la dernière version avait un problème connu, etc. C’est essentiellement un moyen de vous tenir à l’écart des dernières mises à jour, si vous le souhaitez.

Les rappels habituels

Rappel rapide de notre nouvelle page pour développeurs Steam  . Si vous nous suivez là-bas, vous serez averti de toute sortie de jeu que nous faisons.

Aussi: Souhaitez-vous laisser une critique de Steam pour certains / certains de nos jeux? Cela ne doit pas nécessairement être beaucoup plus détaillé qu’un coup de pouce, mais si vous aimez un jeu que nous avons créé et que vous voulez que plus de gens le trouvent, c’est comme ça que vous le réalisez. Les critiques font une différence matérielle et, comme la plupart des indépendants, nous pourrions vraiment utiliser le support.

Prendre plaisir!

Chris


Corrections de bugs

  • Corrige une exception de référence nulle quand l’IA essayait de se faufiler au-delà de vos défenses
    • Merci à Quicunque et à AnnoyingOrange d’avoir signalé le rapport, avec un merci supplémentaire à Quicunque de me donner une sauvegarde pour reproduire le problème.
  • Corrige un bug où la menace sur la planète X attendant d’attaquer la planète Y se battrait à mort si le joueur attaquait X, au lieu de se retirer convenablement pour se battre un autre jour. Je soupçonne que ce sera un buff étonnamment important pour l’IA; cela aura également pour effet secondaire d’accroître la puissance de la flotte de chasseurs, dans la mesure où il leur sera plus facile de survivre assez longtemps pour rejoindre la flotte de chasseurs.
    • Merci à Puffin pour le rapport de bogue et la sauvegarde du jeu.
  • Un remaniement important de la façon dont les flottes de Nanocaust sont expédiées. Cela devrait empêcher le nanocaust d’avoir de nombreuses unités en attente et prévenir les notifications de flotte obsolète.
  • Ajoutez également des informations de débogage utiles dans les info-bulles, qui ne sont visibles que lorsque le traçage Nanocaust est activé.
    • Merci à ulu pour le rapport de bug et à Puffin pour la sauvegarde qui m’a aidé à reproduire le problème.
  • Permettez au Nanocaust de simplement détruire les portes de Warp / les contrôleurs. Il était souvent incapable de détruire les tourelles tesla, ce qui confondait la logique « est le nanocauste autorisé à construire un centre Nanobot ».
    • Merci à Ovalcircle pour le rapport de bug
  • Correction d’un bug où les navires vérifiaient seulement leur premier système d’armes pour voir si l’unité était un combattant mobile ou non
    • Merci à wm46 pour le rapport de bug et à Puffin pour une observation clé

Équilibre Tweaks

  • Temps de rechargement de l’arme principale du Golem maudit> 1s> 2s.
    • Était une erreur d’être 1s.
  • Fusion Bomber inflige 170> 120 points de dégâts et augmente de 50% les dégâts de tout ce qui reste avec plus de 50% de boucliers personnels.
    • Corrige une erreur; Cela leur permet de donner la priorité à des unités avec suffisamment de boucliers pour que cela vaille la peine d’être contournées automatiquement au lieu de nécessiter une microgestion. Les unités sans bouclier sont ignorées au profit de celles qui le sont, si elles sont disponibles.

Si longtemps, Math fixe-Int!

  • L’utilisation de calculs à entiers fixes au lieu de calculs à virgule flottante dans les calculs impliquant des angles, des distances, sin / cos / atan2 et des racines carrées a été arrêtée.
    • Cela améliore considérablement la précision / exactitude et, dans plusieurs cas, nous permet également d’utiliser SIMD pour de meilleures performances. De plus, cela fonctionne également sur votre matériel en tant qu’opération native de type FPU au lieu de devoir effectuer des opérations telles que les calculs de sqrt de manière itérative ou sous forme de table sur le processeur lui-même.
    • Tout cela accélère les performances de ces activités et réduit également le temps de chargement initial de l’application, entre 2 et 4 secondes, en fonction du nombre de cœurs que vous avez.
    • Quel est le DOWNSIDE? Eh bien … les résultats de ces opérations ne peuvent plus être considérés comme déterministes. Elles seront probablement assez proches la plupart du temps, mais il existe de petites erreurs en virgule flottante qui varient en fonction du modèle de votre processeur et de la marque. Les résultats sont généralement si insignifiants que vous ne les remarquez jamais, mais il se produit que plusieurs millions d’opérations ont un effet itératif et doivent toutes être cohérentes entre les machines multijoueurs … vous finissez par désynchroniser. Avec 3-4 joueurs, vous pouvez vous attendre à une désynchronisation dans les 10 minutes à une heure, probablement. Cela a donc toujours été une affaire pour nous, remontant à 2009 avec le premier match. D’où l’utilisation de maths fixed-int en tant que substitut plus pauvre, mais absolument cohérent, entre machines.
  • Alors, pourquoi sommes-nous prêts à utiliser cela dans ce jeu, maintenant que des désynchronisations multijoueurs vont se produire à cause de cela? Eh bien … cela correspond à notre approche envisagée pour le mode multijoueur lorsque nous y reviendrons au cours des prochains mois.
    • L’approche de base pour AI War, AI War 2 et Tidalis au niveau d’une couche réseau est la suivante: https://www.gamasutra.com/view/feature/131503/1500_archers_on_a_288_network_.php
    • Ou quelque chose d’inspiré par ça, quand même. Cette approche est intrinsèquement limitée par les désynchronisations qui se produisent si certaines pratiques du code ne sont pas respectées, cependant, les joueurs d’AI War 1 le savent bien. La seule chose que nous pouvions faire dans ce jeu était de détecter la désynchronisation, puis d’arrêter de jouer pour pouvoir recharger et pouvoir passer des heures ou des jours à la recherche du bogue.
    • Le problème est que ce type de recherche de désynchronisation demande énormément de travail et peut causer des bugs extrêmement frustrants jusqu’à ce que nous parvenions à résoudre le problème. Et il peut être presque impossible pour nous de reproduire.
    • AI War 2 pose d’autres problèmes, à savoir le fait que nous prenons désormais en charge les mods et que tous les modeurs n’auront pas la discipline nécessaire pour maintenir la synchronisation. Un mauvais appel au mauvais (équivalent de) rand (), ou l’utilisation d’un float au lieu d’un FInt au mauvais endroit, et nous aurions un désynchronisme à rechercher qui ne fait pas partie du jeu principal. Notre prévision était que cela ne représenterait que des mois et des mois de productivité perdue pour nous.
    • Oh, et il semble également y avoir une sorte de fantôme fileté dans la machine dans la mise en œuvre de Mono utilisée par Unity 3D. C’est rare, mais nous rencontrons parfois des bogues qu’il ne devrait pas être techniquement possible de corriger du tout sur la base des règles de fonctionnement du multithreading. Cela signifie aussi qu’il y a un bogue dans les threads de Mono, ce qui est mauvais car nous ne pouvons pas le réparer, ou un problème dans la façon dont le code C # du nôtre est traduit en mono bytecode, ce qui est également mauvais parce que nous ne pouvons pas écrire. un nouveau compilateur pour cela.
      • Dans les versions à joueur unique du jeu, nous avons déjà résolu ce problème. Cependant, étant donné que l’apparition de ce type de bogue serait probablement incohérente et rare d’un joueur à un autre en multijoueur, il s’agirait essentiellement d’un désynchronisme inévitable que nous pourrions poursuivre pendant des jours ou des semaines sans jamais le retrouver car ils n’étaient même pas présents. notre code. Vous alliez être maaaaaad et nous serions absolument incapables de faire quoi que ce soit malgré le temps perdu à essayer de le retrouver. Donc, évidemment, cela n’allait pas être une situation convenable.
  • Pour le réseautage, nous devons donc supposer que des désynchronisations vont se produire. Nous ne pouvons pas contrôler suffisamment l’environnement pour nous assurer qu’ils ne le feront pas. Il serait bien d’en minimiser la fréquence, mais nous devons en principe intégrer une réparation automatique du désynchronisation qui ne bloque pas votre jeu et que vous ne remarquerez probablement pas.
    • Cela prendra un peu de temps à mettre en œuvre, mais c’est une tâche beaucoup plus petite que la chasse réelle des désync manuellement. Et cela conduira en fait à des résultats acceptables, plutôt qu’à un problème qui n’est finalement pas résolu.
    • Il existe toute une catégorie de jeux qui tournent essentiellement autour du fait d’être constamment désynchronisés: les jeux d’action. Des tireurs, des MMO, rien de ce genre. Si le décalage est mauvais avec ceux-ci, vous verrez beaucoup plus de problèmes (balles « qui vont dans les coins », les joueurs sont gelés et ensuite « se téléportent », etc.) que vous ne rencontrerez dans AI War 2.
    • Nous avons déjà eu l’expérience de coder ce type de jeu multijoueur auparavant, car les jeux A Valley Without Wind fonctionnent sur ce type de système. Le code d’AI War 2 n’y reviendra pas, mais il utilisera les idées de réparation de synchronisation et d’application de ces leçons ici d’une manière qui n’a pas été appliquée à d’autres jeux en réseau « lockstep » à notre connaissance.
    • Avec ce type de système, vous pouvez voir un navire légèrement déplacé qui sera ensuite remis en place si vous êtes le client multijoueur. Cela ne serait pas affecté par le lag, contrairement à un jeu de tir, mais plutôt basé sur des inexactitudes en virgule flottante, des erreurs de code dans notre code ou nos mods, les bogues « fantômes » multithreading, etc.
    • Grâce au fait que notre mode multijoueur sera relativement propre et cohérent, car il utilise toujours le code de verrouillage de base, nous pouvons nous permettre de parcourir lentement toutes les données du jeu et de comparer les sommes de contrôle, puis de procéder aux corrections nécessaires pour effectuer la sauvegarde. clients synchrones avec l’hôte. Tant qu’ils se corrigent en une ou deux secondes, ce n’est pas grave, et honnêtement, vous ne verrez peut-être même pas cela se produire d’une manière visible pour vous, même si nous mettons 10 secondes à réparer ce genre de petites erreurs. La raison en est qu’en raison de la nature du pas, la plupart des erreurs sont probablement très petites, comme si elles étaient déplacées d’un pixel ou deux et si elles étaient décalées.
    • Normalement, en mode multijoueur, vous avez besoin de processus de prédiction et de lissage étendus pour donner l’impression que les choses se passent bien à mesure que les synchronisations sont corrigées. Nous n’avons pas besoin de prédiction dans ce jeu, car le mode multijoueur sous-jacent est toujours du style lockstep, et nous avons déjà le lissage en place car nous exécutons la simulation à 10 fps verrouillées dans son propre système de coordonnées Les visuels réels du jeu vous affichent à une vitesse beaucoup plus élevée pour paraître lisses et fluides. Donc, le bit de lissage est déjà fait, de manière inhérente, et nous aurons simplement besoin des algorithmes de contrôle de somme et de correction des données en place.
  • Pour un seul joueur, rien de tout cela ne fait aucune différence. Sauf que la nouvelle approche est plus rapide et meilleure, et corrige quelques bugs. Plus à ce sujet dans une seconde. Mais pour le mode multijoueur, cela simplifie grandement notre espace de problèmes et nous épargnera des mois de travail pour que le mode multijoueur soit réellement jouable. Heureusement, on peut consacrer plus de temps à des tâches plus utiles, et il n’est pas nécessaire que les modeurs se conforment aux normes les plus avancées du secteur en termes de sécurité du codage à des fins multijoueurs. Aussi un peu important.
  • Un bogue que ces modifications corrigent immédiatement est que les navires ne sont plus bloqués sur des champs de force où ils ne peuvent plus les quitter. Ils peuvent ne pas glisser correctement autour d’eux – si vous en avez un exemple, n’hésitez pas à télécharger une sauvegarde sur laquelle nous pouvons la répliquer dans la nouvelle version – mais ils ne resteront pas absolument bloqués en place. C’était un autre de ces problèmes de précision, et un problème insoluble avant maintenant.
  • Un autre bug que ces changements corrigent immédiatement est cette chose étrange où les vaisseaux kite tournaient autour de leurs cibles jusqu’à ce qu’ils arrivent directement à la droite de la cible, puis s’empilent là. Le comportement attendu – et à présent – est que les navires de kite se déplaceraient à portée puis s’arrêteraient et qu’ils le feraient s’ils avaient besoin de sauvegarder. La rotation des cibles dans le sens des aiguilles d’une montre était due à un problème de précision dans nos calculs de la racine carrée basés sur des tableaux.
    • Cela dit, les cercles étaient plutôt clairs, alors peut-être que nous y reviendrons d’une autre manière à un moment donné. Mais malgré tout, malgré son apparence cool, il était plutôt agaçant de laisser vos navires encercler une cible et voler à portée des AUTRES ennemis tout en ostensiblement kiter leurs cibles principales. Maintenant, tout le matériel de kite fonctionne comme dans la première guerre d’Afrique.
  • Et il peut y avoir d’autres bugs liés aux angles ou aux distances qui sont maintenant corrigés. Si vous voyez quelque chose qui semble résolu qui pourrait être de cette catégorie et qui est actuellement ouvert sur mantes, n’hésitez pas à mettre à jour le ticket pour nous informer que tout est résolu.

Source : https://arcengames.com/