![]() |
![]() |
![]() |
||||||
|
||||||||
|
LES BUGS: COMPILATION EN "RELEASE FOR FOX" Chaque utilisateur commun de Visual C++ ayant essayé de faire marcher le jeu dans ce mode de compilation endura le même problème. Cette page va vous expliquer ce que sont les modes de compilation, quel problème est associé à ceux-ci, pour finalement vous donner ma solution à ce problème. 1) Modes de compilation Dans Microsoft Visual C++, vous pouvez compiler votre code source dans 2 différents & communs modes:
Dans le second cas, pas de contenu relatif au débogage n'apparaîtra car cela concernera la version publique de l'application. Donc dans notre exemple, les commandes consoles ajoutées seront présentesdans le code, mais pas dans le jeu. L'autre utilisation de ces modes de compilation est de personnaliser les projets. Par exemple, vous pouvez décider de générer des informations de débogage dans le mode "Win32 Debug" et pas dans le mode "Win32 Release". Tout est question d'organisation de projets. Notez que vous pouvez créer d'autres modes de compilationsi vous le désirez... Maintenant, dans le cas d'AvP, les gars de chez Rebellion nous ont donné 3 modes de compilation qui sont:
2) Le bug de "Win32 release For Fox" Le bug apparaît si vous essayez d'exécuter l'application dans le mode "Win32 Release For Fox", seulement sous Windows 98. L'indice significatif sur ce bug est que si vous compilez l'application dans les autres modes, aucun bug n'apparaît: ce qui signifie qu'il y a des portions de code qui ne sont pas présentes voire différentes dans les 2 modes Debug. Après une session d'étude personnelle du code et un débogage en langage assembleur, j'ai découvert que la "sale bête" (voici le terme que j'emploierai par la suite) venait de l'appel à la fonction "ToAscii" dans le fichier win_proj.cpp (dans la procédure "MakeToAsciiTable"). Ce que j'ai appris dans mes modifications de code source pour trouver le bug fût que quand j'ajoutais des instructions autour de la "sale bête", quelques fois, cela fonctionnait ! Bug étrange hein ?! 3) Ma solution Ce que j'ai finalement compris de tout cela est que l'application plante à cause des optimisations du compilateur sur le code "MakeToAsciiTable" (gardez à l'esprit que ça marche dans les modes Debug: ceux-ci ne sont pas aussi optimisés que le mode Release). Donc voici le code à ajouter (en bleu) pour corriger la chose: #pragma optimize("", off) Cela ordonnera simplement au compilateur de désactiver les optimisations sur la procédure. Veuillez s'il vous plaît noter que je suis vraiment fier de ma découverte, car j'ai travaillé dessus depuis 2001 et malgré le fait que cela dura beaucoup de temps, j'ai aidé le premier mod d'AvP - c-à-d Cancer Black fait par Eldritch & l'équipe AMP - (et peut-être de futurs mods) à être compatible avec Windows 98. Note: le truc marrant à remarquer ici est qu'aussi bien le compilateur que la fonction "ToAscii" sont fait par Microsoft ! Donc il y a une incompatibilité entre des choses qui devraient être compatibles ! Peut importe, je n'ai rien contre Microsoft: "l'erreur est humaine". |
|||||||