Bugs d'UnrealEd sur les Windows récents
UnrealEd 3.0 est sujet à deux bugs désagréables quand il fonctionne sur les systèmes Windows plus récents que XP : d'abord, l'éditeur se fige lorsque l'on sélectionne un actor ou une surface en cliquant dessus, et cela pendant plusieurs secondes voire une minute complète. De plus, lorsqu'on le ferme, l'éditeur enregistre souvent des valeurs erronées dans un de ses fichiers de configuration. Lorsqu'il est lancé la fois suivante, les propriétés de surface sont inutilisables car les boutons et paramètres sont entassés sur la gauche de la fenêtre et ne fonctionnent pas.
Bug de sélection
Ce problème semble causé par l'évolution de DirectX. Depuis Windows Vista, certaines configurations subissent un délai énorme lorsque l'on clique sur les actors ou les surfaces pour les sélectionner, aussi bien dans les viewports 2D que 3D. Sous Windows 10, le problème est universel. Il ne se produit pas lorsque l'on utilise AltGr + clic gauche pour sélectionner des actors en bloc en traçant autour d'eux un cadre de sélection. Ce bug se produit aussi avec UnrealEd 2.1 et 2.2 pour Unreal et UT99 lorsque l'on utilise les patches non officiels d'OldUnreal, mais ces versions de l'éditeur peuvent utiliser le rendu logiciel ou OpenGL ce qui permet de l'éviter.
Heureusement, après des années à subir cet inconvénient, quelqu'un a développé un patch. Vous pouvez le télécharger sur son GitHub. Il s'agit d'une archive .7z qui nécessite 7zip pour être ouvert. Il suffit d'extraire D3DDrv.dll dans le dossier \System\ d'UT2004. Vous pouvez écraser le fichier original ou le renommer selon votre préférence.
Fenêtre Surface Properties
Voici à quoi devrait ressembler la fenêtre Surface Properties:
À partir de Windows 7, il est possible qu'elle soit inutilisable et se présente ainsi, compactée sur la gauche.
La cause est l'écriture, à la fermeture d'UnrealEd, de valeurs fantaisistes quant à la position de cette fenêtre dans son fichier de configuration. Ces valeurs sont stockées à peu près au milieu du fichier user.ini dans le dossier \System\ d'UT2004.
Il n'y a pas moyen d'empêcher UnrealEd d'écrire n'importe quoi. Cependant, si un paramètre essentiel manque dans le fichier user.ini, le moteur de l'éditeur l'insère avec une valeur par défaut. Nous pouvons utiliser ce comportement pour nous assurer qu'à chaque fois qu'UnrealEd est lancé, la ligne "WPropertyPage" soit supprimée du fichier user.ini et par conséquent réinitialisée. Afin d'y parvenir, il faut lancer UnrealEd non pas en utilisant son propre raccourci mais par un autre raccourci lié non à UnrealEd.exe mais à un script batch dont le rôle sera de supprimer la ligne incriminée dans user.ini puis seulement de lancer l'éditeur.
Un script batch est un fichier texte avec l'extension .bat qui contient une liste de commande. Le nôtre sera très simple:
@echo off
cd /d "D:\UT2004\System"
powershell -Command "(gc user.ini) -replace 'WPropertyPage.*', '' | Out-File user.ini"
start "" "D:\UT2004\System\UnrealEd.exe"
exit
Vous remarquerez que la seconde ligne contient le chemin du dossier \System\ d'UT2004. Assurez-vous de l'adapter à l'endroit où vous avez installé le jeu. Dans mon cas, UT2004 est installé à la racine de D:\. Par défaut, UT2004 s'installe à la racine de C:\. Si vous avez obtenu UT2004 sur Steam, le chemin par défaut ressemble à "C:\Program Files (x86)\Steam\steamapps\common\Unreal Tournament 2004\System\". Procédez de même pour l'avant-dernière ligne, où D:\UT2004\System\UnrealEd.exe est le chemin vers UnrealEd.exe dans votre dossier \System\.
Si vous êtes comme moi, vous voudrez peut-être ajouter le paramètre -nogamma après le chemin vers Unrealed. La ligne sera donc : start "" "D:\UT2004\System\UnrealEd.exe" -nogamma.
Voici une description ligne à ligne du script et de son fonctionnement :
@echo off s'assure simplement que le script n'écrive pas tout ce qu'il fait dans l'invite de commande qui s'ouvrira brièvement au lancement.
cd /d "D:\UT2004\System" pointe le script vers le dossier où se trouve le fichier que l'on veut modifier.
powershell -Command "(gc user.ini) -replace 'WPropertyPage.*', '' | Out-File user.ini" est une commande du powershell de Windows. C'est assez lisible et compréhensible : "gc user.ini" signifie "get content from user.ini", c'est-à-dire récupérer le contenu du fichier. On utilise ensuite la commande -replace avec deux paramètres séparés par une virgule. 'WPropertyPage.*' est la ligne que l'on veut remplacer. L'expression commence par la chaîne de caractères "WPropertyPage", suivie d'un point, qui signifie "n'importe quel autre caractère", et d'une astérisque, qui signifie "répété". Le second paramètre contient seulement deux apostrophes, ce qui indique une chaîne de caractères vide. La commande supprime donc la ligne en remplaçant l'expression "WPropertyPage suivi de n'importe quelle suite de caractères" par une ligne vide.
Après la barre verticale, Out-File user.ini sauvegarde le fichier modifié.
start "" "D:\UT2004\System\UnrealEd.exe" lance l'éditeur, qui lit alors le fichier user.ini, remarque que le paramètre WPropertyPage est manquant et le réécrit avec une valeur par défaut.
La dernière ligne, exit, ferme l'invite de commande pendant qu'UnrealEd se charge.
Ouvrez n'importe quel traitement de texte (le bloc-not suffit largement) et collez-y ce script. Changez les deux chemins vers le dossier \System\ et UnrealEd pour que cela corresponde à leur emplacement sur votre machine. Enregistrez le fichier et changez son extension .txt en .bat (F2 pour renommer un fichier). Vous avez maintenant un script fonctionnel pour lancer UnrealEd en évitant le bug de la fenêtre Surface Properties.
Le script peut-être utilisé tel quel pour lancer UnrealEd. Pour que cela soit plus propre, stockez-le dans le dossier \System\ et créez un raccourci pointant sur lui. Le raccourci peut alors être configuré pour utiliser l'icône d'UnrealEd.
UnrealEd écrira toujours n'importe quoi à sa fermeture, mais cela n'aura aucune importance car la ligne sera réinitialisée à chaque lancement.