Lyall / MGSHDFix

A fix that adds custom resolutions, ultrawide support and much more to the Metal Gear Solid Master Collection.
MIT License
374 stars 8 forks source link

[Feature Request] Add option to make logos skippable, instead of skipping them entirely #63

Open mntorankusu opened 7 months ago

mntorankusu commented 7 months ago

Normally, if you've already launched the game and seen the title screen, the Konami, Kojima and Bluepoint logos become skippable the next time they appear. So, there should be a flag somewhere that determines whether or not the logos are allowed to be skipped. This option could even be enabled by default, because it would only affect users who are actively attempting to skip them, improving the user experience without stripping out the credits to the developers.

Lyall commented 7 months ago

Are you sure the intro logos are skippable after first boot? I just checked in MGS3 by loading a game then hitting "return to title screen" and they aren't skippable for me.

mntorankusu commented 7 months ago

Are you sure the intro logos are skippable after first boot? I just checked in MGS3 by loading a game then hitting "return to title screen" and they aren't skippable for me.

Sorry, I didn't explain it well. If you wait at the title screen for a while, the logos will appear again, and in that context they are skippable.

Lyall commented 7 months ago

Are you sure the intro logos are skippable after first boot? I just checked in MGS3 by loading a game then hitting "return to title screen" and they aren't skippable for me.

Sorry, I didn't explain it well. If you wait at the title screen for a while, the logos will appear again, and in that context they are skippable.

Ahh, I'll have a look again then.

emoose commented 7 months ago

E: seem to have something working for this, scenerio_stage_title.gcx seems to be the script which calls into the actor-killer, that script does a check inside proc43 for varbuf[2e7] == 1 before it'll call it, if I hook into GCL_ExecProc and make it set that var before proc43 runs then intro can be skipped with key fine.

For that it'd need to scan for 3 addrs to work, two to get GCL_ExecProc / varbuf addrs, and another for GM_GetStage so we can make sure we're on title stage before changing anything (I'm not too sure how important this is, some places say varbuf is global for the whole game, but it kinda looks like it might change when different scripts are loaded, there's a separate linkvarbuf buffer that scripts can use which sounds more like a global-variable thing imo...)


Old:

Tried taking a look at this but no luck yet sadly, seems the logos do become skippable in MGS3 after you've seen them once but haven't found a way to allow that from launch yet.

Kinda looks like it might be handled via GCL scripts, most I could figure out is some kind of actor-killer gets registered at 0x1406816B0 in 1.0.0, that func then calls GV_actorRegist which registers a func that just checks button press inside GV_PadDataDirect & calls into GV_actorDestroy to destroy itself + the actor for the splash screens, finally the splash screen actor being destroyed will call into its "die" function to fade itself out etc.

Unfortunately not really sure where the actor-killer is being created from, the func that registers it only seems to be called after menu screen has ran once at least - that init func also seems to take in some parameter via GCL_GetNextInt so guess it's expecting to be ran via a script, no luck finding out what script it might be though.

(I could be totally wrong about all this though, on the bright side it did help me find out that MGS3 shared a lot of funcs with MGS4, luckily there's some debug ELFs for that going around, gotten up to ~1200 funcs named so far 🐱)