Skip to content

Conversation

@Sonderhen
Copy link

During Laura’s letter scene, the unused audio file “SCENE_45”, is played.
The audio is triggered in specific time intervals that match each corresponding portion of the letter as it appears on screen.

For each different text on the screen, it will play a different audio excerpt.

Tested in all languages

Silent.Hill.2.Unused.Laura.Letter.mp4

@Polymega
Copy link
Collaborator

Polymega commented Dec 8, 2025

Oh wow! Talk about a cool and unexpected PR!

Thanks for taking the initiative and doing this, Sonderhen. This was a regularly requested feature for the project over the years, so it's really cool to see it come alive now. For the longest time, I didn't think it'd be feasible due to the dialogue all being in a single audio track. Well done making this work. 👍

I picked the brains of some of the other teammates and we wanted to ask if it's possible to change how this is handled? As a whole, with the game, cutscenes (especially those with audio dialogue) can only be skipped by pressing start. Can this feature mirror this type of behavior to where the audio autoplays and the text changes in sync with the dialog, no user input needed? And, if the user press start/skip at any point during the note, it'll exit the note and end all cutscenes (return to gameplay)?

This request is unusual in nature as it'd be modifying/customizing the game's note reading mechanics, so please let me know if the request is asking too much.

@Sonderhen
Copy link
Author

I'm very happy that you liked it.

I’m working on this suggestion and I’ve already managed to get almost everything done. The only thing I haven’t been able to implement yet is triggering the cutscene skip command when the SKIP (Start) key is pressed. At the moment, pressing SKIP only stops the automatic playback and the voices, leaving the player to manually advance the text as in the original game.

If in two days I’m not able to get it 100% the way you want, I can update the PR and you can evaluate whether it could be approved even without skipping the cutscene when pressing Start.
Also, feel free to make any changes to my PR as needed.

@Polymega
Copy link
Collaborator

Polymega commented Dec 10, 2025

Thanks for being open to modifying the feature!

The only thing I haven’t been able to implement yet is triggering the cutscene skip command when the SKIP (Start) key is pressed.

I don't know if this approach is feasible, but at the end of text strings in the .mes file there are byte(s) that signify their end and to return to gameplay.

(I'm not sure what these bytes look like in the .mes files.)

Here is what this overall string looks like through the SH2MSGConvert tool:

<CENTER-PARAGRAPH><COLOR-BLUE>My dearest Laura, 
	I'm leaving this letter with Rachel
	to give to you after I'm gone.

<CENTER-PARAGRAPH><COLOR-BLUE>I'm far away now. 
	In a quiet, beautiful place.

<CENTER-PARAGRAPH><COLOR-BLUE>Please forgive me for not saying
	goodbye before I left.

<CENTER-PARAGRAPH><COLOR-BLUE>Be well, Laura.

<CENTER-PARAGRAPH><COLOR-BLUE>Don't be too hard on the sisters.

<CENTER-PARAGRAPH><COLOR-BLUE>And Laura, about James...
	I know you hate him because you
	think he isn't nice to me, but please
	give him a chance.

<CENTER-PARAGRAPH><COLOR-BLUE>It's true he may be a little surly
	sometimes, and he doesn't laugh
	much. But underneath he's really
	a sweet person.

<CENTER-PARAGRAPH><COLOR-BLUE>Laura...
	I love you like my very own
	daughter.

<CENTER-PARAGRAPH><COLOR-BLUE>If things had worked out
	differently, I was hoping to
	adopt you.

<CENTER-PARAGRAPH><COLOR-BLUE>Happy 8th birthday, Laura.

<CENTER-PARAGRAPH><COLOR-BLUE>Your friend forever,
	Mary<SEPARATORB>

Perhaps if the user presses SKIP it advances to the next text string but the next text string is instead the injected byte(s) to fool the game into ending the text event? (Basically injecting our own <SEPARATOR> if the user presses SKIP.)

@Sonderhen
Copy link
Author

Thank you for your help.
I think I managed to do it. I’m fixing a few bugs and will update the PR soon.

- Automatically plays the audio when starting to read the letter.

- Automatically triggers the action button to proceed to the next parts of the letter.

- If the player presses SKIP, the entire letter cutscene will be skipped.

- Prevents the player from pressing the action and cancel buttons while reading the letter.
@Sonderhen
Copy link
Author

Sorry for the delay.

I've managed to implement the requested changes: now, when the player starts reading the letter, the audio plays automatically. Manual text skipping is disabled, but the player can still skip the entire scene at any time by pressing 'SKIP'.

While it's 100% functional, I feel my implementation might not be the most 'elegant' solution. To auto-advance the letter text, I’m currently simulating/injecting the action button input, as I couldn't find a more direct method.

I’m open to further suggestions or modifications if you think it's necessary. If any future requests turn out to be outside my current technical reach, I still appreciate the opportunity to contribute.

2025-12-21.13-59-18.1.mp4

@Polymega
Copy link
Collaborator

Polymega commented Dec 21, 2025

Love this. Thank you! I was actually testing it prior and it's working really well, overall. I found a couple other issues, if you don't mind:

  • In addition to the customizable/user-assigned SKIP key, the Esc key also acts as an additional skip key. The Esc key is hardcoded in this game and cannot be changed. We'd also need the Esc key to skip reading the letter, along with the user-assigned SKIP key.
  • If a user presses the QUICK LOAD key (F9, by default), Mary will continue reading the letter upon loading the new file when she shouldn't be. There will also need to be a check to disable the audio stream if the user QUICK LOADs while it's being read.
  • This request isn't that important to look into, but: At the beginning of the letter portion of the cutscene, it might be nice to have the letter show and hold for a single second before it proceeds to dim and the text/voice starts to play.

While it's 100% functional, I feel my implementation might not be the most 'elegant' solution. To auto-advance the letter text, I’m currently simulating/injecting the action button input, as I couldn't find a more direct method.

All things considered, the approach you took of injecting user inputs to advanced the text has been handled well. I Alt + Tabbed out of the game while it was happening and the game simply waited for focus again to proceed to the next text/voice string. I agree that it'd be nice to have it 'work' even when the game is out of focus, but you did a good compromise.

I'll tag @mercury501 and @Murugo to see if they have any ideas on how the letter can be fully read even when the game is out of focus.

 - Added support for the ESC key to skip the letter cutscene.

 - Fixed a bug where audio would continue playing after leaving the letter screen (e.g., Quick Load).

 - Added a 1-second delay before the first automated action input.
@Sonderhen
Copy link
Author

Oh, I had completely forgotten about the QUICK LOAD option — thanks for pointing that out.

I’ve pushed a new commit addressing the three fixes.

The requirement for the game window to be focused is an intentional limitation of the current automated action button input approach. The automated action input cannot be triggered unless the game window has focus. I think addressing this would require a different strategy.

If this behavior is considered essential, it would require a different approach, which I haven’t been able to implement yet...

2025-12-21.16-03-02.1.mp4

@Polymega
Copy link
Collaborator

Nice! Thanks again!

I believe that covers all fringe cases with the feature. Well done!

If this behavior is considered essential, it would require a different approach, which I haven’t been able to implement yet...

I personally don't think it's essential to have it work that way. I think your approach is quite nice. I did want to tag some of the other folks on the off chance they know of an "easy" solution to make it continue playing while not in focus. However, I don't think it's necessary.

@Polymega
Copy link
Collaborator

Oh, also, I will be revising the "PC Credits" FMV at some point. I will be sure to include your name in the "special thanks" section (along with on the website). Really appreciate your great work here, Sonderhen. Thank you again

@mercury501
Copy link
Contributor

No immediate ideas on the playing on focus loss, it'd probably need to be reimolementrd as they said, I wouldn't touch Che actual focus loss code since it could bring a miriad of other issues

@Sonderhen
Copy link
Author

Thank you very much. I really appreciate the feedback :)
I’m happy to contribute to the project and available if any further adjustments are needed.

@Polymega
Copy link
Collaborator

@elishacloud this is good to be merged upon your review/convenience. Thanks and Merry Christmas!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants