|
Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
|
Reproduire les comportements actifs du Monopoly d’origine dans le runtime C++23/SDL3/SDL_GPU de modern/. Source/ reste la référence en lecture seule. Le mot legacy signifie « code d’origine » : une fonctionnalité encore utilisée reste à porter. Seuls les chemins désactivés, retirés ou sans usage actif démontré peuvent être exclus.
Le portage est fonctionnel sur des contrats testés, mais sa fidélité complète au jeu retail n’est pas établie. Aucun pourcentage fonctionnel n’est actuellement justifié. Les 79 entrées sont conservées dans l’inventaire détaillé, avec les écarts connus séparés des comparaisons restant à mener.
Synthèse du code publié jusqu’à bc9d85f, à partir des qualifications consignées dans le parcours jouable procédural et le journal UI/runtime. Les captures et journaux locaux cités par ces documents ne sont pas distribués dans le dépôt ; cette mise à jour documentaire ne constitue pas une nouvelle qualification du jeu.
modern/PlayModern.cmd sélectionne Release lorsqu’il est disponible, avec repli Debug. Plateau procédural, ville récupérée, pions modernes, sauvegarde/rechargement et tours humains/IA ont un parcours documenté. Les données retail restent nécessaires ; le décor Paris ne remplace pas les règles ni les banques françaises manquantes.a58c16f. Une capture loopback Windows de 180 secondes documente une sortie logicielle ; l’audibilité physique reste à confirmer.bb0bb6a, le 2 octobre ; voir la référence ci-dessous.cf1ba45, voir sessions TCP. La qualification entre machines et du matériel reste ouverte.DataSource : les DAT sont le backend de repli, avec surcharges par DataId et manifestes de payloads hors archive. Les codecs vidéo utilisent FFmpeg/FFprobe externes ; voir vidéo.« Implémenté » décrit la présence du contrat moderne ; les comparaisons sémantiques et qualifications encore ouvertes sont détaillées ci-dessous. Le panneau Future/Immunity est terminé et n’est plus une tâche restante.
La qualification initiale des assets reconstruit MonopolyModern, exécute la cible procédurale réelle, vérifie son staging et capture ses quatre assets avec PBR/IBL actif. Son démarrage USA de 25,35 secondes était une preuve bornée. Les parties interactives, transitions F11 et sorties audio logicielles documentées ensuite sont distinguées dans le point courant ci-dessus ; le son physiquement audible reste non qualifié.
Aucun manque de code confirmé n’est actuellement listé ici après implémentation de C03. Les comparaisons A01–A07 restent ouvertes et peuvent révéler d’autres écarts.
QuickHelp n’est plus bloqué par les accents hors Windows : son décodage CP1252 vers UTF-8 est explicite et testé. Les fichiers fournis sont compatibles avec ce choix ; leur contenu ne permet pas de distinguer CP1252 de Latin-1 pour les octets qu’ils emploient.
Un écart actif connu est un comportement utilisé dans la version d’origine dont une différence ou une absence moderne a été identifiée. C03 est désormais implémenté et reste à qualifier visuellement ; D01 dépend de données Europe absentes. Les lignes UDStats et UDPenny de la matrice partagent C03 : elles ne représentent pas deux travaux distincts. Les comparaisons A et qualifications Q ci-dessous ne sont pas, à elles seules, des défauts démontrés.
Ces points remplacent les anciennes mentions vagues « partiel » ou « futur ». Ils demandent une comparaison ciblée ; ils ne constituent pas tous des fonctionnalités manquantes. Pour chaque divergence : citer l’appelant ou l’asset, reproduire le comportement, corriger et tester. Une exclusion demande une preuve source.
| ID | Zone | Vérification attendue |
|---|---|---|
| A01 | RULE / UserInterface | Branches internes, transitions et scénarios complets de règles, au-delà des fixtures existantes. |
| A02 | IA / trade | Décisions, évaluations et transitions des échanges. Trade_SendItems est déjà raccordé. |
| A03 | UI / audio / Penny | Notifications, animations, transitions et surfaces résiduelles effectivement consommées ; ne pas rouvrir les propriétaires de texte déjà portés. |
| A04 | LANG / FONTS / GRAFIX | 96 DPI d’origine raccordés ; formatage, UTF-16, métriques et clipping encore à comparer. |
| A05 | DATA | Contrats mémoire/LRU et sentinelles exigés par les appelants. Le LRU des blocs DAT et la libération des bitmaps/meshes CPU et GPU sont raccordés ; les consommateurs runtime ne dépendent plus directement du registre DAT et peuvent recevoir des payloads logiques hors archive avec fallback retail. Les scènes actives et substitutions de textures restent possédées. Le décodage des formats modernes natifs et le retrait complet des banques retail restent à poursuivre. |
| A06 | Séquenceur | Préchargement, attributs après enfants, sélection et persistance des tweekers, événements de fin et callback souris consommé sont raccordés. Labels et autres usages C++ ou DAT restent à comparer. Model est le type 4, Preloader le type 8 ; le renderer source actif n’accepte pas Model. L’absence d’appel C++ seule n’exclut pas un usage par données. |
| A07 | PC3D | Backend GLB, calibration, fallback par contexte CNK, cinq cartes PBR et alpha OPAQUE/MASK raccordés et couverts par contrôles CPU/GPU ciblés. Les adaptateurs optionnels plateau/maison/décor passent un rendu SDL_GPU séparé. L'audit des pions confirme des changements de HMD, et non des poses MIMe : les variantes doivent couvrir une racine entière. Silhouettes animées, matériaux procéduraux restants et qualification visuelle d'une partie restent ouverts. |
MIDI est désactivé par CE_ARTLIB_EnableSystemMidi=0. Les cas HMD reset/joint/UIMG0/ground/envmap sont commentés dans hmdload.cpp. Le chemin NewMesh alternatif n’est pas celui sélectionné par les appelants actifs. Ces éléments ne sont pas des tâches actives sans nouvelle preuve contraire. Les sept modules exclus et leurs justifications figurent dans la matrice.
| ID | Code présent | Validation attendue |
|---|---|---|
| C01 | Code des sessions de jeu TCP raccordé : menu/CLI, admission, ownership, actions, notifications privées, déconnexion et retour local. | Scénario intégré sur deux connexions TCP, dans un même processus, validé au code cf1ba45. Qualification Q02 encore ouverte. Voir usage et portée. |
| C02 | FullHelp portable raccordé : conversion HLP → HTML asynchrone puis ouverture navigateur. | Exporteur externe winhlp requis ; conversion réelle, sujets/images et plateformes à qualifier. Voir aide complète. |
| C03 | Génération des 28 rectos/28 versos Europe et catalogue runtime raccordés aux enchères, IBar, Trade et Stats ; variantes de langue, plateau, devise et règle maisons/hôtel. | Qualification visuelle avec les modèles DAT retail en Q03 ; génération et remplacement du catalogue couverts par tests ciblés, résultat consigné ci-dessous. |
| ID | Données | Périmètre et condition de résolution |
|---|---|---|
| D01 | Six références Europe d’historique absentes du corpus livré ; aucune valeur inventée. | Les appels sont dans les branches Europe de UDIBar.cpp, désactivées par USA_VERSION=1 dans le build source livré. Les définitions/données Europe restent nécessaires pour cette édition ; l’achat utilise déjà LANG 3178. |
| D02 | Banques Europe/français absentes de l'installation locale : dat_borde.dat, dat_ln03.dat, dat_lm03.dat, dat_lk03.dat. | La sélection explicite Europe/français est raccordée et signale ces absences ; le démarrage français réel et le plateau Paris dans une partie restent bloqués jusqu'à fourniture des payloads. Les en-têtes ne remplacent pas les banques. |
| ID | Qualification | Limite actuelle |
|---|---|---|
| Q01 | Parties jouables avec DAT/LANG/CNK retail, règles, IA, UI et langues. | Sessions USA réelles avec tours humains/IA, cartes, achats, prison, échanges et sauvegarde/rechargement documentées dans le journal UI/runtime. La couverture de toutes les animations, règles et d’une partie complète reste ouverte. Le démarrage Europe/français est bloqué par D02. |
| Q02 | Voix entre deux processus puis deux machines, capture et écoute physiques. | Les tests de transport/codec ne prouvent pas le parcours utilisateur ni le matériel. Voir réseau et voix. |
| Q03 | Textures/UV/HMD, éditions, devises et scénarios Board Editor personnalisés. | Géométrie HMD locale décodée et contrôles PBR disponibles ; la comparaison visuelle des éditions/devises et des vues personnalisées reste à qualifier. Le plateau standard ne dépend pas de ces vues externes. |
| Q04 | Films Indeo/Bink réels et synchronisation audiovisuelle, installation FFmpeg. | Runtime et tests disponibles ; médias retail absents. |
| Q05 | Linux/macOS, POSIX, Vulkan/Metal et disponibilité de FullHelp. | La validation de référence est Windows/D3D12, pas une qualification de toutes les plateformes. |
La reproduction binaire exacte de DMAKE99 est un outil de reconstruction optionnel. Le writer DAT moderne accepte des payloads fournis ; aucun outil ne peut recréer les assets absents à partir des seuls manifestes.
Sessions réseau C01, aide C02, attente des actions IA avant trade (A02), tailles de fonts normalisées à 96 DPI (A04), cache DAT LRU global (A05) et préchargement des ressources de séquence (A06) sont implémentés dans les commits ce78e39 à ccf5f28. Les autres comparaisons A01–A07 restent ouvertes : ces corrections ciblées ne prouvent pas leur clôture exhaustive.
Les onze branches assistant/* sont intégrées (dix têtes distinctes). Elles ajoutent la durée WAV, le backend de surfaces GRAFIX partagé, le blending des ombres et des contrats de tests. Leurs conclusions utiles sont reprises dans la matrice ; les anciennes réserves déjà résolues ne sont pas réintroduites. La génération des actes Europe C03 est implémentée dans le lot suivant, avec le survol Trade et le remplacement transactionnel des 56 surfaces.
Compilations et tests autorisés via GitHub Actions. Les premiers commits de ce lot avaient été publiés sans validation, avec [skip ci]. Cette restriction est levée ; la référence locale ci-dessous comprend désormais leurs modifications. Pour chaque résultat CI, vérifier le SHA testé : un succès sur un commit antérieur ne qualifie pas les changements suivants.
Les commits ee9621d, 57321a8 et cf1ba45 corrigent ensuite les parcours de tours humains et IA, l’annulation des phases, les séquences sonores, les contre-offres, la sortie du plateau depuis la prison, les commandes SDL, les noms Unicode et la conservation des propriétaires réseau lors du choix de l’ordre. Le démarrage expose aussi les ressources manquantes et accepte un répertoire explicite. Les tests intégrés passent par RULE, FIFO, projection UI et commandes IBar ; deux parties IA successives atteignent leur fin. Les présentations graphiques de ces scénarios sont simulées : cette preuve ne remplace pas une partie avec les ressources retail.
Les commits a697c17, cc251ce et 0646b5e corrigent le rendu Gouraud et ses uniformes partagés avec la 2D, la lecture des cartes après leur apparition, la répétition de la voix de victoire, les événements de fin, les attributs et effets persistants des séquences. Les caches libèrent les bitmaps et modèles arrêtés, y compris les animations partagées quand la vue 3D est masquée ; les textures personnalisées survivent à la reconstruction du modèle. Les refus de phase/joueur renvoient désormais l’erreur ciblée puis republient la décision attendue, avec l’exception des commandes internes de la banque. Douze commandes tardives sont exercées à travers RULE, FIFO et IBar ; les dettes collectives et faillites en chaîne de cartes passent aussi par ces interfaces. La compilation et les tests restent distincts de la qualification retail Q01–Q05.
Le commit 7aab3c0 rétablit la décision IBar après les échanges pendant le tour d’un joueur autre que le premier : les scénarios acceptés et refusés terminent réellement le tour par clic. Le rendu élimine les faces arrière, y compris pour les ombres. Un contrôle de l’API IDirect3DDevice3 en 32 bits confirme le réglage initial D3DCULL_CCW des périphériques HAL et RGB ; les tests GPU vérifient les deux orientations sans modifier les indices HMD de production.
Les commits 10ca017, 2b46b1d, 18bbf2a et c1c5cdc ouvrent ensuite la migration des ressources : interface DataSource indépendante du conteneur, fallback DAT par LayeredDataSource, catalogue LANG routé par la même source logique, puis chargement optionnel de payloads hors archive via --data-overrides. Les DAT restent le fallback requis tant que les formats natifs modernes ne couvrent pas tous les contrats.
Les commits e956f30, bfefa14 et bda7326 modernisent la présentation sans toucher aux règles : configuration plein écran/résolution/swapchain, mapping 3D natif 16:9 avec entrée souris correspondante, F11 et télémétrie FPS/résolution. Le canevas UI 800x600 reste isolé pour préserver les écrans retail pendant leur future modernisation.
Validation de référence : 158/158 suites CTest passées — code bb0bb6a, GitHub Actions Windows/MSVC Debug, 2 octobre 2026.
Le workflow de référence valide l’audit structurel, la configuration CMake, la compilation Windows et les 158 suites CTest en 109,62 secondes d’exécution des tests, sans suite ignorée. Le correctif documentaire répare l’encodage UTF-8 ; la compilation débloquée a ensuite révélé cinq cibles de tests à remettre en cohérence avec les dépendances et signatures actuelles. Le commit bb0bb6a corrige ces cibles sans supprimer leurs assertions. Cette validation automatisée ne clôt pas les qualifications Q01–Q05.
La référence locale précédente était 140/140 suites CTest passées au code 7aab3c0, Windows/MSVC Debug, le 27 septembre 2026. Les paragraphes suivants décrivent cette campagne et les lots ciblés qui l’ont suivie, avant la validation CI globale du 2 octobre.
Les commits DATA 10ca017..c1c5cdc, la présentation e956f30..bda7326, l’audio GSM610 et le pont Blender/GLB ont été compilés localement jusqu’à MonopolyModern.exe sous Windows/MSVC Debug. Le probe décode les six GLB exportés ; le runtime active les cinq idles statiques sûrs disponibles (voiture, chapeau, bateau, bottine, dé à coudre) et conserve le chien retail pour son idle multi-HMD. Aucune nouvelle campagne CTest globale n’avait été lancée lors de ces lots ; leur référence historique restait donc 7aab3c0.
Application compilée ; CTest global réussi en 8,25 s avec six exécutions parallèles. Deux cas internes ResourcePaths restent non exécutés (collision dépendant de la casse et permissions de liens symboliques). Aucun test CTest ni test GPU n’est converti en skip. Cette validation comprend les scénarios humains/IA et TCP, les refus d’actions, les cartes et faillites, les régressions de séquences et de caches, ainsi que les lectures de pixels GPU ; elle ne remplace pas Q01–Q05.
Les journaux locaux de cette référence sont modern/build/trade-return-culling-final-build.log et modern/build/trade-return-culling-final-tests.log. Les exécutions CI et leurs logs restent la preuve de validation distante ; la référence ci-dessus n’est pas une affirmation sur le dernier run GitHub.
porting-progress.svg, puis compile et exécute CTest sous Windows. FFmpeg/FFprobe sont provisionnés et vérifiés pour les tests vidéo.Le chargement statique GLB vérifie budgets, fichiers, références, accesseurs, indices et transformations. Les PNG/JPEG embarqués et cinq cartes PBR sont raccordés, avec rôles sRGB/linéaires, samplers, mipmaps, normales tangentes et alpha OPAQUE/MASK. Les 54 contrôles CPU GLB et 86 contrôles GPU passent. BLEND, scènes glTF animées et accesseurs sparse restent explicitement refusés. Un environnement studio HDR optionnel ajoute des réflexions spéculaires IBL : cube RGBA16F 64x64, mipmaps GGX déterministes et approximation DFG analytique. Les 30 nouveaux contrôles CPU/GPU passent, ainsi que les 86 contrôles de rendu existants ; environnement absent/invalide, le cube noir désactivé conserve les pixels précédents. Le haut-de-forme de production (CNK 0x80236, tick 0, priorité racine 224) a été capturé en 1920x1080 avec PBR et environnement actifs, et ses réflexions ont été examinées. Les 23 captures CNK demandées passent avec IBL/PBR actifs ; la galerie des 11 pions a été examinée. Un démarrage de l'application reste vivant plus de 25 secondes avec neuf chargements de pions, puis son processus dédié est arrêté. Ce smoke test et ces captures ne qualifient ni partie interactive ni animation continue. Le diffus conserve l'approximation ambiante, sans cube d'irradiance ni LUT BRDF. Les caches distinguent les propriétaires immuables modernes/retail partageant un DATA id. Le tree Git de Source/ conserve le baseline verrouillé. DXIL est exécuté sous Windows ; SPIR-V/MSL sont compilés et réfléchis, sans qualification de rendu Linux/macOS.
La provenance de priorité est conservée : activation de racine idle à 224..229, racine mouvement à 100, priorité de feuille de dessin issue du CNK, y compris la valeur 0. Le resolver utilise le contexte de racine, sans réécrire l'ordre de présentation de la feuille. Les 46 racines rigides ont été exercées par le SequenceRuntime de production : géométrie moderne à chaque frame, sans échec, horloges, choix HMD, matrices, tweekers et cycle de vie identiques au retail. Le rapport local est build/qualified-rigid-production-20261001.json. L'inventaire couvre les 1 089 CNK sur 600 ticks ; ses sorties CPU autonomes ne remplacent pas les appels et médias d'une partie réelle.
Six pions sont récupérés ; les cinq absents sont des sculptures nouvelles. Leur hauteur/pivot/orientation sont calibrés sur des HMD décodés. Neuf idles statiques se chargent dans un démarrage borné ; cette mesure ne qualifie pas le gameplay. Le pack de deux états du bateau pour la racine 0x80360 passe les 71 ticks de sa timeline de production, appariés au retail avec mêmes horloges, choix HMD, matrices, priorités et cycle de vie. C'est une preuve CPU, pas un rendu animé GPU. L'adaptateur des quatre états du chien passe 99 frames de production sans fallback ni erreur, avec mêmes horloges, matrices, choix HMD et cycle de vie que le retail. Le démarrage vivant de 25 secondes charge neuf idles statiques et ne prouve pas l'animation du chien à l'écran. L'adaptateur des six états du cheval est compilé : 99/99 frames modernes sans erreur, appariées au retail avec mêmes horloges, matrices, choix HMD et cycle de vie. Les refus de contexte, l'échec indépendant d'un pack entier et le rejet GPU sont couverts.
Le probe de production CNK puis SDL_GPU/PBR capture 23 frames demandées : les 11 idles au tick zéro, quatre poses du chien, six du cheval et deux états de mouvement du bateau. Chaque capture 1920x1080 utilise des assets ModernGltf, un pipeline PBR chargé et contient des triangles/pixels visibles. La mosaïque build/token-gpu-qualification/eleven_tokens_gpu.png a été examinée. Ces frames isolées ne prouvent pas une animation continue en partie ; le démarrage borné reste la preuve de neuf chargements statiques seulement.
Le plateau Paris aligné dispose d'une correspondance explicite de ses 40 cases avec les cellules retail ; son export omet les tangentes authored invalides et utilise une base dérivée de UV non dégénérées. Les adaptateurs plateau/maison et les trois décors optionnels sont raccordés. Le probe SDL_GPU soumet 4 objets, 246 batches, 915 731 triangles ; la mesure de cadence et sa portée sont consignées dans le contrat Blender. Un benchmark avec fence exclut chargement et readback et ne représente pas la boucle complète du jeu. Le démarrage français requis pour Paris reste bloqué par D02.
MonopolyModern compile et les suites ciblées séquences, variantes, catalogue de scène, décor et fallback GPU passent. Ce lot ciblé ne remplace pas la campagne CTest globale historique ni les qualifications Q01–Q05. Le plateau aligné garde ses positions X/Z, avec sol de jeu Y=0 et relief réduit ; la qualification de géométrie par rayons indépendants passe dans les bornes consignées au contrat. Le contact pendant une partie reste à qualifier.
Les cibles Blender sont explicites ; un build ordinaire stage les fichiers déjà générés sans lancer Blender. Un bake reproductible du vrai graphe procédural d'asphalte a validé trois cartes embarquées, mais les autres matériaux procéduraux restants restent à convertir ou à cuire ; le bundle optionnel ci-dessous couvre désormais neuf familles réelles du plateau/décor. Le self-test de bake du chapeau utilise ses vrais facteurs, sans cartes normales, émissives ou AO inventées ; exports répétés, loader et comparaison Blender sont consignés dans le contrat, sans affirmation de fidélité procédurale ou de partie.
Le catalogue étendu contient 608 racines distinctes, 63 géométries et neuf calibrations : 606 racines complètes à priorité Generic100, plus les idles chien/cheval d'origine à 224..229. Les 401 anciennes racines, 55 géométries et sept calibrations sont préservées exactement. Le rapport de préservation est build/old-variant-root-preservation.json. La preuve CPU actuelle couvre 606 racines : Le rapport build/qualified-nine-profile-production-20261001.json compare chaque tick et événement des 606 racines au retail avec fins disque/action finale zéro, sans erreur. Seuls 37 HMD distincts y sont réellement observés ; leurs captures GPU PBR/IBL en 1080p ont été examinées. Le cache immutable partagé par HMD et la publication transactionnelle par racine conservent le repli du pack entier, y compris après rejet GPU. Cela ne prouve pas une animation continue en partie ni une qualification visuelle de toutes les frames.
L'hôtel rouge de gameplay est un asset reconstruit utilisant un matériau récupéré. UDPieces démarre directement HMD/racine 4 avec transformation RySTxz et échelle 0,10, sans CNK d'hôtel ; la priorité du slot vaut 55 + square*4 (55 décimal). Un probe GPU réel examiné dessine 40 triangles en trois batches. Les tests ciblés du catalogue hôtel (bornes/éligibilité), du cycle de vie BuildingDisplay existant et des packs de pions passent ; l'application compile. Aucun test runtime dédié du cache hôtel Engine n'a été ajouté. --modern-buildings=house couvre maison/hôtel avec caches et replis indépendants, désactivés par défaut. Placement et gameplay visibles restent à qualifier. Les cibles MonopolyExportCompleteTokenVariants et MonopolyExportGameplayHotel ont été exécutées avec succès, dépendances complètes comprises (log build/expanded-hotel-export-targets-20261001.log, sortie zéro). L'outil offline qualifie deux exports frais de neuf profils et protège les 58 seuls états revus. Le pipeline CLI complet reproduit les rendus, préserve les hashes des 49 anciens états et 12 états par défaut ; moneybag/iron/horse97 sont désormais dans le catalogue. Les preuves 606 CPU/37 GPU ne qualifient ni animation continue en partie ni fidélité visuelle de chaque frame. Moneybag08/09 et thimble CD restent exclus.
Le bundle procédural optionnel couvre neuf familles réelles en cartes base/normal 512px : quatre GLB passent le loader, 113 images représentent 118 MiB RGBA et 158 222 triangles à normal map ont des UV non dégénérées. Deux runs complets reproduisent les quatre GLB et le manifeste ; un échec injecté de publication restaure les 121 fichiers précédents. La gare conserve une MAE native foreground RGB de 0,027318 et un contraste de fenêtres différent ; aucune parité exacte n'est affirmée. Le target MonopolyExportProceduralScene et le cache vide par défaut MONOPOLY_PROCEDURAL_SCENE_ASSET_ROOT sont décrits dans les ressources.
Sept tests ciblés de présentation/audio passaient avec audio dummy lors de ce lot initial. Les preuves GUI, F11 et audio logiciel ultérieures figurent dans le journal UI/runtime ; le son physiquement audible et la cadence d’une partie complète restent à qualifier.
Les premières passes GPU, le plateau USA optionnel, les ombres de meshes, le MSAA 4x et la correction de projection UI sont consignés dans VISUAL_POLISH.md. Le parcours procédural réel et son lanceur sont décrits dans PROCEDURAL_PLAY.md.
La suite des travaux jusqu’à bc9d85f, les parties réelles, le correctif WAVE, les mesures de chargement/cadence et les qualifications visuelles restantes figurent dans VISUAL_UI_POLISH.md. Ce journal remplace les limites initiales désormais résolues sans qualifier toutes les animations, une partie complète, l’audibilité physique ou les banques françaises absentes.