Contexte et objectifs

Call of Duty : Black Ops II a été publié à l’origine en 2012 pour Windows 32 bits x86. Le projet bo2-mac propose de transformer une copie Steam du jeu en une application native ARM64 macOS, sans inclure les fichiers du jeu ni le code source traduit. L’objectif principal est de permettre aux utilisateurs de Mac M1 d’exécuter le titre sans recourir à l’émulation Rosetta 2, en tirant parti des quatre cœurs de performance et des quatre cœurs d’efficacité du processeur.

Processus de recompilation statique

Le dépôt utilise une chaîne d’outils basée sur LLVM pour recompiler les binaires x86 32 bits en code machine ARM64. La recompilation est dite « statique » parce que toutes les dépendances externes sont liées au moment de la construction, éliminant ainsi le besoin d’une couche de compatibilité dynamique. Cette approche impose plusieurs contraintes : le code doit être analysé pour identifier les appels système Windows, les bibliothèques DirectX et les fonctions d’entrée‑sortie, puis les remplacer par leurs équivalents macOS (Metal, Cocoa, etc.). Le processus doit également gérer le changement de convention d’appel (cdecl → AAPCS) et la différence d’endianness, bien que les deux jeux d’instructions utilisent le même ordre de boutisme.

Le script de construction compile chaque module du moteur du jeu, applique des patches de compatibilité et crée un exécutable unique. Aucun fichier de données du jeu n’est fourni ; l’utilisateur doit posséder légalement le jeu sur Steam, le monter dans le bundle et laisser le processus copier les ressources au moment de l’exécution.

Performances mesurées et limites

Les tests présentés dans le dépôt ont été réalisés sur un Apple M1 doté de 16 Go de RAM. Le rendu a été enregistré pendant 80 secondes, couvrant la campagne (niveau Angola), le mode Zombies (Town) et le multijoueur (Hijacked) contre des bots. Le compteur affiché dans le coin supérieur droit indique le nombre d’images par seconde (FPS). Les mesures montrent que le jeu tourne à plus de 60 FPS en campagne, avec une légère baisse lors des scènes de combat intensif où le GPU intégré atteint ses limites. Le mode multijoueur contre bots maintient une cadence stable, mais aucune connexion réseau n’est supportée ; le projet ne propose que des parties hors‑ligne.

Les limites du projet sont clairement indiquées : aucune prise en charge du mode multijoueur en ligne, aucune traduction du texte du jeu et aucune garantie de conformité légale au‑delà de l’utilisation d’une copie Steam personnelle. De plus, la recompilation statique ne corrige pas les éventuels bugs liés à des appels système non mappés, ce qui peut entraîner des plantages dans des scénarios non testés.

Implications techniques

Ce travail démontre que la recompilation binaire statique d’un titre Windows 32 bits vers ARM64 macOS est réalisable avec des performances proches du natif, à condition de disposer d’une chaîne d’outils capable de gérer la traduction des API graphiques et système. Le projet met en évidence les défis de la portabilité de jeux anciens : la dépendance à DirectX, la gestion des ressources propriétaires et la nécessité d’un accès aux fichiers du jeu limitent la diffusion large. Néanmoins, il ouvre la voie à d’autres projets de rétro‑portage sur les architectures ARM, en particulier pour les machines Apple Silicon où la couche d’émulation peut introduire une surcharge non négligeable.