automatisation-de-jeu

Lancez, observez et pilotez un vrai jeu pour qu'un agent teste ses propres mods.

Qu'est-ce que automatisation-de-jeu ?

Cette compétence permet à un agent d'IA de contrôler des jeux vidéo réels, principalement sous Windows (y compris depuis WSL), avec un support partiel pour Linux et macOS. Elle couvre tout le flux : lancement via Steam ou un exécutable, capture d'écran GPU, clics, saisie clavier, maintien de touches, souris relative, nettoyage des crash-reporters, lecture des logs et une passerelle JSON intégrée au mod pour observation et action sans pixels. L'agent peut ainsi vérifier ses modifications en jeu, naviguer dans des menus automatiquement, exécuter des scènes de test reproductibles, et interagir avec le jeu via une API structurée, le tout en minimisant les risques de conflit avec l'utilisateur humain.

Compatible avec~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/rehan-remade/universal-modder/tree/main/skills/game-automation

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Automatisation de jeu : les mains et les yeux de l'agent

Le vrai jeu est l'oracle. La boucle est : lancer → naviguer → mettre en place la scène → agir → capture d'écran et lire les logs → décider. Construisez-la une fois par jeu, puis chaque modification que vous apportez peut être vérifiée en une minute.

Windows (natif ou depuis WSL) : um win

um win setup                                   # une fois : outils PowerShell + un ffmpeg avec gfxcapture, choisit NVENC/AMF/QSV/x264
um win ps                                      # processus fenêtrés : pid, nom, titre
um win launch --steam 105600                   # ou : um win launch "C:\Games\Foo\Foo.exe" -- -windowed
um win shot --exe Terraria.exe shot.png --scale 0.33   # image complète + une copie à 1/3 peu coûteuse à analyser
um win drive --proc Terraria "focus" "click 640 360" "key 0x1B" "type hello" "hold 0x44 1500"
um win drive --proc Terraria "hold 0x20 150" "sleep 200" "hold 0x20 150"   # sleep <ms> pause entre les étapes
um win drive --proc Terraria idle              # secondes depuis la dernière interaction souris/clavier (ne bloque pas)
um win kill <pid>                              # PID exact uniquement
um win reg get "HKCU\Software\..."             # registre (reg set sauvegarde d'abord la clé)

Depuis Python (pour des scripts plus longs), from um.win import Drive, shot, Recorder, puis d = Drive("AoE2DE_s"), d.focus(), d.click(x, y), d.key("0x0D").

Commandes WinDrive (um/ps1/WinDrive.ps1 ; protocole stdin, une réponse par ligne). Les coordonnées sont dans la zone client de la fenêtre du jeu.

  • Souris : move x y, click x y [right], mdown/mup, drag x0 y0 x1 y1, rel dx dy (caméras FPS / entrée brute), wheel 120.
  • Clavier : key <vk> [tap|down|up], hold <vk> <ms>, type <text>, scanmode on (jeux DirectInput / entrée brute qui ignorent les événements de touches virtuelles).
  • Fenêtre : focus, rect, size <w> <h> (définit la taille client), title, fg, idle, untop.
  • Temporisation : sleep <ms> attend entre les étapes d'un seul appel. Chaque appel um win drive démarre PowerShell (1-2 s), donc mettez les combos temporisés dans un seul appel.
  • Codes de touches virtuelles : Échap 0x1B, Entrée 0x0D, Espace 0x20, W/A/S/D 0x57/0x41/0x53/0x44, F1 0x70, Maj 0x10, Ctrl 0x11, flèches 0x25-0x28.

Règles de conduite

  • Ne mettez jamais un jeu en ligne de focus pendant que l'humain tape. C'est arrivé avec GTA V : l'agent a mis GTA au premier plan pour cliquer sur Story Mode, les frappes de l'humain ont atterri sur la page d'accueil de GTA, et GTA a averti d'un "accès aux serveurs GTA Online avec une version modifiée". ScriptHookV l'a bloqué ; ne comptez pas là-dessus. Vérifiez idle, demandez à l'humain de cliquer et lancez avec l'anti-triche désactivé pour qu'Online ne puisse pas démarrer. Voir knowledge/techniques/driving-real-games-safely.md.
  • L'entrée ne va qu'au jeu. WinDrive refuse d'envoyer tant qu'une autre application est au premier plan. La seule exception est quand rien n'est au premier plan et que le curseur est sur le jeu, ce que les jeux en mode fenêtré provoquent en perdant le premier plan lors des clics.
  • L'utilisateur peut être à son PC. Si idle est inférieur à une minute, demandez avant de conduire et gardez les sessions courtes. Les exécutions sans surveillance sont acceptables une fois que l'utilisateur l'a dit.
  • Les captures d'écran coûtent des tokens. Utilisez les copies --scale 0.33. Multipliez les coordonnées par ×3 pour les clics et conservez un tableau des points de clic des menus dans MODLOG.md, mesurés une fois.
  • Pourquoi gfxcapture : les jeux rendus par GPU deviennent noirs avec la capture GDI. gfxcapture (Windows.Graphics.Capture) capture les vraies images d'une fenêtre, même si elle est couverte. Il ne peut pas capturer les fenêtres réduites.
  • Écrans HDR : avec Windows Auto HDR activé pour un jeu SDR, les captures sont délavées (2-3× plus lumineuses, décalées vers le cyan), donc les couleurs ne peuvent pas être évaluées. um win shot/record avertissent quand c'est le cas ; désactivez-le pour le jeu pendant la capture (Paramètres > Système > Affichage > Graphiques > le jeu > Auto HDR), et réactivez-le après si l'utilisateur le souhaite.

Rendre la fenêtre prévisible

  • Mode fenêtré avec une taille client fixe. Chaque jeu cache ce paramètre quelque part :
    • un ini ([/Script/Engine.GameUserSettings] dans UE GameUserSettings.ini, les valeurs de Registre Screenmanager Fullscreen mode / Resolution de Unity sous HKCU\Software\<company>\<product>) ;
    • un indicateur de lancement (-windowed -w 1920 -h 1080, Unity -screen-fullscreen 0 -screen-width 1920 -screen-height 1080, Source -sw -w 1920 -h 1080) ;
    • ou le propre registre du jeu (AoE2 : Mode Display 0 + Windowed Width/Height).
    • um win drive --proc X "size 1920 1080" redimensionne aussi la plupart des jeux fenêtrés.
  • Sauter les intros : indicateurs de lancement (-skipintro, -nosplash, Unity -popupwindow), ou supprimez/renommez les vidéos d'intro dans une copie du jeu.
  • Aller directement au contenu : indicateurs de chargeur (tModLoader -skipselect Player:World), une sauvegarde faite pour les tests, le chargement automatique d'un scénario, une commande console de développement.
  • Limitation en arrière-plan : de nombreux jeux limitent ou mettent en pause lorsqu'ils ne sont pas au premier plan. Trouvez le paramètre (Terraria : Main.instance.InactiveSleepTime = TimeSpan.Zero ; Unity : Application.runInBackground = true ; UE : t.IdleWhenNotForeground 0).

Mieux qu'un clic : une scène scriptée ou une passerelle

  • Commandes de discussion ou de console dans votre mod qui donnent des objets, invoquent des ennemis et téléportent. Elles réduisent les tests à une seule ligne (/arsenal, /mothership).
  • Scènes de test : une timeline côté mod (invoquer des vagues à l'image N, tirer à N+30), un scénario avec des déclencheurs (AoE2 via AoE2ScenarioParser), un monde de test dédié avec une sauvegarde vierge.
  • Passerelle agent : un socket JSON-lines dans le mod sur 127.0.0.1 (voir examples/terraria-tmodloader/reference/AgentBridge.cs).
    • Commandes comme observe (options de menu ou état du monde sous forme de texte), click <id>, controls, step.
    • Traitez chaque requête sur le thread principal du jeu après une mise à jour, afin que les réponses soient cohérentes.
    • Lisez les menus de manière générique depuis l'arborescence UI, pour que l'agent voie ce qu'un joueur verrait. Laissez de côté les boutons destructeurs (supprimer).
    • Un agent peut alors jouer sans utiliser de pixels du tout.
  • Backend hors processus : gardez la partie dans le jeu légère et mettez le cerveau à l'extérieur (HTTP/dépôt de fichiers). Ce modèle s'adapte aux PNJ IA et aux mashups inter-jeux.

Crashes et nettoyage

  • Les rapporteurs de crash (BugSplat BsSndRpt64.exe, CrashReportClient.exe, UnityCrashHandler64.exe) peuvent persister et faire dire à Steam "déjà en cours d'exécution". Utilisez um win ps pour les repérer, um win kill <pid> pour les supprimer.
  • Ne jamais utiliser pkill -f ou taskkill /IM avec des wildcards. Le motif peut correspondre à votre propre shell ou à d'autres applications.
  • Après un crash, lisez d'abord le journal du chargeur ou du jeu (la compétence mod-any-game les liste), puis le Visionneuse d'événements Windows (journal Application) pour les crashes natifs.

Linux et macOS

  • Linux (X11) : xdotool search --name "Game" windowactivate --sync key Escape, xdotool mousemove --window $W 640 360 click 1. Captures d'écran : import -window $(xdotool search --name Game) shot.png, ou ffmpeg x11grab.
  • Linux (Wayland) : ydotool + grim. Les jeux Proton sont des jeux Windows sous Wine : les options de lancement (WINEDLLOVERRIDES, PROTON_LOG=1) vont dans Steam.
  • macOS : screencapture -l <windowid> shot.png (identifiant de fenêtre via GetWindowID ou AppleScript), osascript / cliclick pour l'entrée. L'entrée et l'enregistrement d'écran nécessitent les autorisations d'accessibilité et d'enregistrement d'écran pour le terminal.

Individual skills in this repo

This repo contains 11 individual skills — each has its own dedicated page.

asset-pipeline

Turn generated or hand-made art into exactly what a game engine loads. Covers sprite cutout, trim and nearest-neighbour fitting to frame sizes, pixelation to a palette, sprite sheets and strips, player/team-colour masks, seamless textures, and rendering a 3D model into sprite frames from the game

fal-assets

Generate game assets with fal (fal.ai) through the fal MCP server, the `um fal` CLI (REST) or `fal api`. Covers sprites and icons with transparent backgrounds, consistent variants and animation frames, pixel art, seamless textures, PBR material maps, image-to-3D models, remeshing, auto-rigging, sound effects, music, voice lines, and trailer or cutscene video. Use whenever a mod needs new art, audio or 3D models, or the user mentions fal, generating sprites, textures, models, SFX or music for a game.

game-recon

Figure out how a specific installed game can be modded, before writing any mod code. Covers where it

game-research-websearch

Research a game, engine or modding technique on the open web with archive-aware, rate-limit-safe searches — Wayback Machine/archive.today for dead forums (XeNTaX, Zenhax, old threads), GitHub code/repo search, Nexus/Steam Workshop/Thunderstore APIs, Reddit JSON, YouTube transcripts, plus archive snapshots as evidence. Use when starting work on a game (

mashup-mods

Build cross-game mashups and total conversions, the

mod-any-game

Mod a PC game the user owns, taking an idea to working in the real game and recorded. It covers new items, weapons, enemies, bosses, units, civilizations, mechanics, art, sound, VR and cross-game mashups. Use when the user wants to mod, extend, hack on, reverse engineer or mash up a game (

port-a-mod

Port an existing mod to a newer game version or another mod loader while keeping its behaviour, values and quirks. Typical cases are an old Forge 1.7.10 or 1.12 Minecraft mod moving to modern Fabric or NeoForge, a Skyrim LE plugin moving to SE/AE, or a tModLoader 1.3 mod moving to 1.4. It covers pinning one source version, a private decompiled reference, an adaptation matrix, extracting the mod

publish-mod

Package and release a finished game mod. Covers the pre-release lint (no game files, decompiled code or leaked keys), README and install steps, credits and AI disclosure, versioning, where to upload (Nexus Mods, Steam Workshop, Thunderstore, mod.io, GitHub releases), and the post with a video. Use when the user wants to ship, share, upload, release or post a mod.

reverse-engineering

Read how a game actually works so a mod can hook it. Decompile .NET/Mono (ILSpy), IL2CPP (Cpp2IL, Il2CppDumper), Java (Vineflower) and native code (Ghidra, IDA, via MCP servers); dump data and asset formats; reverse-engineer a binary file format and prove it with a round trip; read live memory (Cheat Engine, Frida, x64dbg); find render passes (RenderDoc). Use when a mod needs game internals, e.g.

share-field-notes

Search and contribute to the shared AI-modding knowledge base, where field notes record how specific games were modded, decompiled or reverse-engineered (exact versions, route, engine facts, verification, gotchas). Use before starting work on a game (

showcase-video

Record and cut a short showcase video of a game mod, or a compilation of clips, ready to post on X/YouTube. Records the game window with only the game

Skills associés