10 KiB
TSC1-DIAG-01 : la commande de scène par touche « hash » existe-t-elle encore ?
Fiche TSC1-DIAG-01 — Niveau N1 — Session « Lower · TSC1 » — Classe VAL : L (lecture seule). Date : 2026-10-15. Copie UE : BUILD-GO accordé ; éditeur à lancer sur ordre direct de l'utilisateur. Aucune écriture MCP, aucune sauvegarde.
1. Question
Un joueur demande : « in the old game by Vinfamy you could press hash button and bring up a command where you could input a command from any of the modules to play that scene you want, can you do that here ». L'utilisateur demande de vérifier si c'est toujours vrai.
2. Constats statiques (établi, sans éditeur)
- Action
TestScenes: deux liaisons dansConfig/DefaultInput.ini:Key=Tilde(l. 121) etKey=Insert(l. 122). Pas de touche « # » ni « hash » nommée. - Console moteur :
ConsoleKeys=Tilde(l. 168-169) etConsoleKeys=²(l. 170). Tilde ouvre donc aussi la console d'Unreal sur la copie. - Menu des raccourcis :
Source/LifePlay/LPKeyboardSubsystem.cppl. 100 :TestScenesest listé sous le libellé « Test Scenes » ; l. 193-195 : rangé dans la catégorie « Scene ». C'est donc une action de raccourci remappable, pas une commande saisie. - Commandes C++ enregistrées (
LPDebugSubsystem.cpp, l. 605-634 :memreport-like,CollisionDump,Bookmark,HitchSummary,PersonsDump) : aucune ne lance une scène de module par son nom. - Addon
LPSandbox: aucune occurrence deTestSceneni deSceneTestdansPlugins. - Références binaires :
TestScenesdansContent/BPs/PC.uasset; « TestScene » dansGI.uasset,UI/Action.uasset,UI/MainMenu.uasset,UI/TopRight.uasset(repérage de Big Boss). Le contenu des Blueprints n'est pas lu ici : il l'est par MCP.
3. Résultats de la lecture MCP (2026-10-15, éditeur ouvert, lecture seule, aucune PIE)
Appels : ProgrammaticToolset.execute_tool_script (garde v6) autour de AssetTools.load_asset, BlueprintTools.find_nodes et BlueprintTools.get_node_infos (paquets ≤ 20). Chaque nœud est cité par son refPath. Statut : établi (lu à la source) sauf mention « estimé » ou « incertain ».
3.1 Événement d'entrée TestScenes dans PC (établi)
find_nodestitre « TestScenes » dans/Game/BPs/PC.PC:EventGraph→K2Node_InputAction_9;get_node_infos: typeEntrée|ActionEvents|InputActionTestScenes.- Le fil d'exécution part de la broche Released (touche relâchée), pas de Pressed (non connectée) :
InputAction_9→IfThenElse_60(condition :VariableGet_168=GI.BuilderOn) ; la branche then (BuilderOn vrai) n'est pas connectée ; la branche else →IfThenElse_36(condition :CallFunction_118=Widget|IsVisiblesur le widgetTopRight,VariableGet_36) → then →CallFunction_119Widget|SetVisibility(Visible)puisCallFunction_120Widget|SetKeyboardFocus, tous deux surVariableGet_37= variableTestSceneTextdu widgetTopRight, de type Text Box. - Donc : la touche affiche une zone de saisie de texte (
TestSceneText, dans/Game/UI/TopRight) et lui donne le focus clavier. Ce n'est pas la console moteur. Elle n'agit que si le HUDTopRightest visible et que le mode Builder est inactif (BuilderOnfaux). - Le second appui ne la referme pas par ce chemin : la fermeture est dans la validation du texte (§ 3.2).
PClit aussiTestSceneTextenVariableGet_122etVariableGet_229, pour des testsIsVisible(CallFunction_39,CallFunction_191), usage non détaillé (incertain).
3.2 Lecture de la commande saisie (établi)
/Game/UI/TopRight.TopRight:EventGraph.K2Node_ComponentBoundEvent_245:OnTextCommitted(TestSceneText). Il passe parSwitchEnum_4(ETextCommit) : seule la sortie OnEnter est câblée (Entrée valide ; Tab/perte de focus ne lancent rien). Ordre :CallFunction_1179SetVisibility(Collapsed)sur la zone (VariableGet_517), puisIfThenElse_12.- Le texte passe en chaîne (
CallFunction_1177, ToString).IfThenElse_12: conditionCallFunction_47= la chaîne contient un espace.- Sans espace (else) →
CallFunction_1178=GI.TestScene(SceneID = texte)(VariableGet_516=GetGI). - Avec espace (then) →
CallFunction_48coupe au premier espace ; la partie gauche va dansSwitchString_0qui n'a que deux cas :wait(→VariableSet_129, partie droite convertie en nombre parCallFunction_284) etwaituntil(→IfThenElse_64, partie droite coupée par « / » viaCallFunction_1257). Ce sont des sous-commandes de test, leur effet précis n'est pas lu (incertain).
- Sans espace (else) →
GI.TestScene:/Game/BPs/GI.GI:TestScene(K2Node_FunctionEntry_0) est un simple relais versExecuteUbergraphGI; le corps est l'événement personnalisé/Game/BPs/GI.GI:EventGraph.K2Node_CustomEvent_162« TestScene » (entréesSceneID,Contains). Il videPersonsAlreadyGotetRelativesAlreadyGot, mélange le tableauScenes(VariableGet_14125=GetScenes, tableau de structures Scene), puis boucle (MacroInstance_4184, ForEachLoopWithBreak) :BreakStruct_229(BreakScene) extrait leFilePath;CallFunction_1159/CallFunction_1158en retirent le dossier (split « / » depuis la fin) et l'extension (split « .lpscene » depuis la fin) ;CallFunction_8877compare sans casse le nom obtenu àSceneID(siContainsest actif, ce sontCallFunction_1160/CallFunction_191: sous-chaîne / préfixe). En cas d'égalité,CallFunction_75313etCallFunction_563(CheckConditionsWhosur les conditions PNJ de la scène) précèdentCallFunction_12136=PlayScene(FilePath).- Format attendu : le nom du fichier de la scène, sans dossier ni extension
.lpscene, sur n'importe quel module chargé dansScenes(nom unique : la première correspondance du tableau mélangé est jouée, donc un nom présent dans deux modules est ambigu — estimé). Une scène dont les conditions PNJ ne conviennent pas n'est pas lancée (estimé, d'aprèsCheckConditionsWho). - Exemples réels :
/Game/UI/MainMenu.MainMenu:EventGraph.K2Node_CallFunction_58appelleTestScene(SceneID = "tf_start")etK2Node_CallFunction_37appelleTestScene(SceneID = "tut_start"). Fichiers correspondants dansContent\Modules\vin_Base:TF\tf_start.lpsceneetScenes\tutorials\tut_start.lpscene(1271 fichiers.lpscenedansContent\Modules). Saisirtf_startoutut_startest donc le format du jeu lui-même. /Game/UI/TopRight:find_nodes« TestScene » →ComponentBoundEvent_245,CallFunction_1178,VariableGet_517.
3.3 Conditions (établi pour ce qui est lu ; l'absence est limitée aux graphes EventGraph cherchés)
- Seule condition lue dans
PC:GI.BuilderOnfaux, plusTopRightvisible (§ 3.1). find_nodesavec les titres « Shipping », « Debug », « Packaged », « Editor » dans lesEventGraphde/Game/BPs/PC,/Game/UI/TopRight,/Game/UI/MainMenuet/Game/BPs/GI: aucun nœud. Aucune garde de build Shipping ou de mode debug n'est visible dans ces graphes : la commande est donc disponible en build empaquetée (estimé : les fonctions annexes dePCetGI, horsEventGraph, ne sont pas cherchées ; incertain). L'essai de l'utilisateur sur la build empaquetée tranche.- Où
BuilderOnest positionné : non établi (aucun nœud « BuilderOn » dans l'EventGraphdeGI). MainMenune conditionne pas la saisie : il appelle seulementTestScenepour deux boutons (tf_start,tut_start).
3.4 Conflit Tilde (établi en statique, § 2)
TestScenes est liée à Tilde (DefaultInput.ini l. 121) et la console moteur à Tilde (l. 168-169) et ² (l. 170). Les deux réagissent à la même touche. Ce que fait l'éditeur de jeu quand les deux coïncident (console prioritaire ou non) n'est pas lu par MCP : incertain, à voir en jeu.
3.5 Touche réelle selon le clavier (estimé : correspondance de disposition, non lue dans le jeu)
- Insert :
Key=Insert, identique sur tous les claviers (établi, l. 122). Tildeest la touche virtuelle OEM_3 de Windows. Sur disposition US, c'est «~ » ; sur AZERTY français, la même touche virtuelle est celle de « ù » ; sur britannique, celle de « ' @ ». La touche « ² » (AZERTY) n'est pasTilde`, elle ne lance que la console. La touche « # » britannique n'est liée à rien dans l'action (aucune liaison « # »).- Conclusion de ce point : seule Insert est sûre ; Tilde dépend de la disposition. À confirmer par essai.
4. Réponse (oui / non / partiel)
Partiel. Oui pour la fonction : une touche (Insert, ou Tilde selon le clavier) ouvre une zone de saisie dont la validation par Entrée lance la scène de n'importe quel module chargé, par son nom de fichier sans extension (ex. tf_start, tut_start). Non pour la touche « hash » : aucune liaison « # », et Tilde se partage avec la console moteur. Preuves : /Game/BPs/PC.PC:EventGraph.K2Node_InputAction_9 → IfThenElse_60 / IfThenElse_36 → CallFunction_119 et CallFunction_120 sur TestSceneText ; /Game/UI/TopRight.TopRight:EventGraph.K2Node_ComponentBoundEvent_245 → CallFunction_1178 ; /Game/BPs/GI.GI:EventGraph.K2Node_CustomEvent_162 → CallFunction_12136 (PlayScene) ; exemples MainMenu CallFunction_58 (tf_start) et CallFunction_37 (tut_start). Non établi : comportement exact en build empaquetée (aucune garde Shipping vue), arbitrage Tilde / console, effet de wait et waituntil.
5. Projet de réponse au joueur (en anglais, 5 lines, sans promesse)
Thanks for the question. A scene command box still exists: press Insert (it is the default key; the "Scene" section of the controls menu lets you change it). Type the scene's file name without folder or ".lpscene" (for example tf_start or tut_start) and press Enter. It looks through the scenes of the loaded modules, and a scene whose character conditions are not met will not start. There is no "#" binding, and Tilde shares its key with the engine console, so its behaviour depends on your keyboard layout. We have read this from the game data only and have not run it in a build yet.
6. Fin
Vérification finale : essai de l'utilisateur, décrit pas à pas (build empaquetée : Insert, saisir tf_start, Entrée).
Fichiers à commiter
Docs/Migration/etat/REL/TSC1/TSC1-DIAG-01.md(M).