Scarlet Hollow

Scarlet Hollow

Not enough ratings
Misc. QoL Modifications
By the
A separate guide for the other modifications I've done to my game, since someone might find them useful.
2
   
Award
Favorite
Favorited
Unfavorite
Dev console + Enable rollback
1. Create a text file, give it any name, and make sure it ends with the extension " .rpy"

Eg. potato.rpy

2. Put the following code inside the file:

init 999 python: config.developer = True config.console = True config.rollback_enabled = True config.rollback_length = 1024 config.hard_rollback_limit = 1024 config.longpress_vibrate = 0 config.quicksave_slots = 12 config.pause_after_rollback = False

The first two (config.developer = True, config.console = True) are to enable the console.

The rest of the lines enable rollback. By pressing PageUp or positioning the mouse over the dialogue box (not the choices select box) and rolling the mousewheel upwards, you will be able to roll back to previous dialogue and even previous choices.

There are many things you can do with the dev console:

Cheatsheet

Press Shift + O to open the console

Traits

$ street_smart = True

Can be used with any other trait (animals, mystical, powerful_build, keen_eye, book_smart, hot) to make it true. Alternatively, you could make it False as well.

Relationships

print tabitha_relationship
This will print what your current relationship stats (all of them) with a certain character, in this case Tabitha.

$ tabitha_relationship["reliable"] += 1
Will add point(s) to one relationship stat with the selected character. In this case it adds 1 point of reliable to tabitha's relationship.
Format would be $ name_relationship["stat"] += (NUMBER)

stats: agreeable adversarial open closed bold passive reliable unreliable insightful dull

name_relationship: avery_relationship kaneeka_relationship oscar_relationship reese_relationship stella_relationship sybil_relationship tabitha_relationship

TO EDIT FILES: Extract Archive.rpa
I've already explained how to do this in my other guide but in case you don't want to open it I'll just paste the same thing here.

RPAextract

In short: Get RPA Extract, use it to extract archive.rpa, then edit whatever files you need, then you must move archive.rpa elsewhere so the game forgets it exists. You can use this same method with any other RPA extractor tool. (Such as RPA explorer)

1) Get rpaextract https://iwanplays.itch.io/rpaex

2) Put rpaExtract.exe in the "game" folder. Utilize it to extract archive.rpa, by dragging the file "Archive.rpa" on top of rpaExtract.exe, then releasing it. Let rpaExtract work. Wait for it to finish before moving on to the next step, please.

3) CUT archive.rpa and put it somewhere else that is NOT the game folder, but keep it as a backup in case something goes wrong. Apparently leaving archive.rpa in the game folder does not affect the removed intro. Nice?

4) You'll have some new files inside the "game" folder now. Proceed to edit whatever files are relevant in the next parts of the guide.

5) Make sure to keep your copy of archive.rpa AND your modified rpy scripts around so that when steam asks you to update the game, you can put archive.rpa back inside the game folder, so that Steam doesn't re-download the whole file all over again. You can make a copy of the new archive.rpa after Steam is done updating your game files, so that you have the latest version saved. Proceed to extract the new archive.rpa* just like in the first step, which will put unmodified files back into the game folder. Just paste your modified versions to replace the unmodded ones. Don't forget to remove archive.rpa from the game folder before playing!

(*Or just use RPA explorer to export only the scripts and avoid all the hassle.)
Remove Intro
If there is an easier way to do this, lmk.

1) Find script.rpy in ScarletHollow > game > scripts > _day_1

2) Open it to edit it. Find the line
play music "audio/music/Scarlet Hollow.ogg"
And then proceed to delete everything from under that line until this line:
return

3) Save it and play as normal. There should be no intro anymore.
Gender+Traits Screen (1/4)
Your Gender and Traits selection screen will end up looking like this


1) Open screens.rpy with a text editor.

Make sure to make a copy as a backup in case something goes wrong. Either way if you messed up you can always delete screens.rpy and verify the integrity of the game files with Steam, which will give you back the original file.

2) Locate this first line (You can utilize the text editor's search function, usually ctrl + f or ctrl + b)

## a gender/set of pronouns before progressing to the story.

and this second line

screen traits_hardcore():

3) Erase everything between the first line and the second line (but don't erase the lines themselves) Then paste between them (right under the first line) ONE of the following codes. The first one is to join your gender+trait selection screen, and the second is the same, except you can select any quantity of traits too.
Gender+Traits Screen (2 Traits ver.) (2/4)
screen gender(): default male_is_selected = False default female_is_selected = False default enby_is_selected = False default gender_unselected = False imagebutton: auto "gui/gender/gender_%s.png" xpos 95 ypos 145 action NullAction() imagebutton: alt "He him" auto "gui/gender/male_%s.png" xpos 400 ypos 450 sensitive selected_gender == False or male_is_selected action [ ToggleScreenVariable("male_is_selected"), If( male_is_selected, [SetVariable ("gender", "undecided"), SetVariable ("selected_gender", False)], [SetVariable ("gender", "male"), SetVariable ("selected_gender", True)] ) ] selected male_is_selected imagebutton: alt "They them" auto "gui/gender/enby_%s.png" xpos 250 ypos 450 sensitive selected_gender == False or enby_is_selected action [ ToggleScreenVariable("enby_is_selected"), If( enby_is_selected, [SetVariable ("gender", "undecided"), SetVariable ("selected_gender", False)], [SetVariable ("gender", "enby"), SetVariable ("selected_gender", True)] ) ] selected enby_is_selected imagebutton: alt "She her" auto "gui/gender/female_%s.png" xpos 100 ypos 450 sensitive selected_gender == False or female_is_selected action [ ToggleScreenVariable("female_is_selected"), If( female_is_selected, [SetVariable ("gender", "undecided"), SetVariable ("selected_gender", False)], [SetVariable ("gender", "female"), SetVariable ("selected_gender", True)] ) ] selected female_is_selected default pb_is_selected = False default m_is_selected = False default ss_is_selected = False default bs_is_selected = False default ke_is_selected = False default h_is_selected = False default a_is_selected = False imagebutton: #alt "Select two traits and hit confirm. Traits will give you additional dialogue options and story routes. You can navigate these buttons using the arrow keys and enter to select. Confirm won't be hoverable until you've selected two traits." auto "gui/traits/traits_%s.png" xpos 900 ypos 36 action NullAction() imagebutton: auto "gui/traits/powerful_%s.png" alt "Powerful Build." #alt "Powerful Build. Tough, Intimidating, the Pinnacle of Fitness" xpos 900 ypos 230 sensitive selected_traits < 2 or pb_is_selected action [ ToggleScreenVariable("pb_is_selected"), If( pb_is_selected, [SetVariable ("powerful_build", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("powerful_build", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected pb_is_selected imagebutton: auto "gui/traits/mystic_%s.png" alt "Mystical." #alt "Mystical. Strange and unusual. Can see the threads of reality in a way others cannot." xpos 1200 ypos 230 sensitive selected_traits < 2 or m_is_selected action [ ToggleScreenVariable("m_is_selected"), If( m_is_selected, [SetVariable ("mystical", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("mystical", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected m_is_selected imagebutton: alt "Talk to Animals." #alt "Talk to Animals. You can talk to animals. Animals can talk to you. A blessing and a curse." auto "gui/traits/animals_%s.png" xpos 1500 ypos 360 sensitive selected_traits < 2 or a_is_selected action [ ToggleScreenVariable("a_is_selected"), If( a_is_selected, [SetVariable ("animals", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("animals", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected a_is_selected imagebutton: alt "Street Smart." #alt "Street Smart. Good at lying and hard to lie to. Fast talker. No door can hold you." auto "gui/traits/street_%s.png" xpos 1500 ypos 70 sensitive selected_traits < 2 or ss_is_selected action [ ToggleScreenVariable("ss_is_selected"), If( ss_is_selected, [SetVariable ("street_smart", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("street_smart", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected ss_is_selected imagebutton: alt "Keen Eye." #alt "Keen Eye. Observant with a knack for picking up details. Empathetic." auto "gui/traits/keen_%s.png" xpos 900 ypos 586 sensitive selected_traits < 2 or ke_is_selected action [ ToggleScreenVariable("ke_is_selected"), If( ke_is_selected, [SetVariable ("keen_eye", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("keen_eye", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected ke_is_selected imagebutton: alt "Book Smart." #alt "Book Smart. Well read and rational. Possess a wealth of esoteric knowledge and know when to use it." auto "gui/traits/book_%s.png" xpos 1200 ypos 586 sensitive selected_traits < 2 or bs_is_selected action [ ToggleScreenVariable("bs_is_selected"), If( bs_is_selected, [SetVariable ("book_smart", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("book_smart", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected bs_is_selected imagebutton: alt "Hot." #alt "Hot. Extremely good looking. A natural flirt. People are nice to you, probably because you're a good person." auto "gui/traits/hot_%s.png" xpos 1500 ypos 660 sensitive selected_traits < 2 or h_is_selected action [ ToggleScreenVariable("h_is_selected"), If( h_is_selected, [SetVariable ("hot", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("hot", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected h_is_selected imagebutton: alt "Confirm" auto "gui/confirm_%s.png" xpos 831 ypos 927 sensitive selected_gender == True and selected_traits == 2 action Jump("bus")
Gender+Traits Screen (Any amount of traits ver.) (3/4)
screen gender(): default male_is_selected = False default female_is_selected = False default enby_is_selected = False default gender_unselected = False imagebutton: auto "gui/gender/gender_%s.png" xpos 95 ypos 145 action NullAction() imagebutton: alt "He him" auto "gui/gender/male_%s.png" xpos 400 ypos 450 sensitive selected_gender == False or male_is_selected action [ ToggleScreenVariable("male_is_selected"), If( male_is_selected, [SetVariable ("gender", "undecided"), SetVariable ("selected_gender", False)], [SetVariable ("gender", "male"), SetVariable ("selected_gender", True)] ) ] selected male_is_selected imagebutton: alt "They them" auto "gui/gender/enby_%s.png" xpos 250 ypos 450 sensitive selected_gender == False or enby_is_selected action [ ToggleScreenVariable("enby_is_selected"), If( enby_is_selected, [SetVariable ("gender", "undecided"), SetVariable ("selected_gender", False)], [SetVariable ("gender", "enby"), SetVariable ("selected_gender", True)] ) ] selected enby_is_selected imagebutton: alt "She her" auto "gui/gender/female_%s.png" xpos 100 ypos 450 sensitive selected_gender == False or female_is_selected action [ ToggleScreenVariable("female_is_selected"), If( female_is_selected, [SetVariable ("gender", "undecided"), SetVariable ("selected_gender", False)], [SetVariable ("gender", "female"), SetVariable ("selected_gender", True)] ) ] selected female_is_selected default pb_is_selected = False default m_is_selected = False default ss_is_selected = False default bs_is_selected = False default ke_is_selected = False default h_is_selected = False default a_is_selected = False imagebutton: #alt "Select two traits and hit confirm. Traits will give you additional dialogue options and story routes. You can navigate these buttons using the arrow keys and enter to select. Confirm won't be hoverable until you've selected two traits." auto "gui/traits/traits_%s.png" xpos 900 ypos 36 action NullAction() imagebutton: auto "gui/traits/powerful_%s.png" alt "Powerful Build." #alt "Powerful Build. Tough, Intimidating, the Pinnacle of Fitness" xpos 900 ypos 230 action [ ToggleScreenVariable("pb_is_selected"), If( pb_is_selected, [SetVariable ("powerful_build", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("powerful_build", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected pb_is_selected imagebutton: auto "gui/traits/mystic_%s.png" alt "Mystical." #alt "Mystical. Strange and unusual. Can see the threads of reality in a way others cannot." xpos 1200 ypos 230 action [ ToggleScreenVariable("m_is_selected"), If( m_is_selected, [SetVariable ("mystical", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("mystical", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected m_is_selected imagebutton: alt "Talk to Animals." #alt "Talk to Animals. You can talk to animals. Animals can talk to you. A blessing and a curse." auto "gui/traits/animals_%s.png" xpos 1500 ypos 360 action [ ToggleScreenVariable("a_is_selected"), If( a_is_selected, [SetVariable ("animals", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("animals", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected a_is_selected imagebutton: alt "Street Smart." #alt "Street Smart. Good at lying and hard to lie to. Fast talker. No door can hold you." auto "gui/traits/street_%s.png" xpos 1500 ypos 70 action [ ToggleScreenVariable("ss_is_selected"), If( ss_is_selected, [SetVariable ("street_smart", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("street_smart", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected ss_is_selected imagebutton: alt "Keen Eye." #alt "Keen Eye. Observant with a knack for picking up details. Empathetic." auto "gui/traits/keen_%s.png" xpos 900 ypos 586 action [ ToggleScreenVariable("ke_is_selected"), If( ke_is_selected, [SetVariable ("keen_eye", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("keen_eye", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected ke_is_selected imagebutton: alt "Book Smart." #alt "Book Smart. Well read and rational. Possess a wealth of esoteric knowledge and know when to use it." auto "gui/traits/book_%s.png" xpos 1200 ypos 586 action [ ToggleScreenVariable("bs_is_selected"), If( bs_is_selected, [SetVariable ("book_smart", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("book_smart", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected bs_is_selected imagebutton: alt "Hot." #alt "Hot. Extremely good looking. A natural flirt. People are nice to you, probably because you're a good person." auto "gui/traits/hot_%s.png" xpos 1500 ypos 660 action [ ToggleScreenVariable("h_is_selected"), If( h_is_selected, [SetVariable ("hot", False), SetVariable ("selected_traits", selected_traits - 1)], [SetVariable ("hot", True), SetVariable ("selected_traits", selected_traits + 1)] ) ] selected h_is_selected imagebutton: alt "Confirm" auto "gui/confirm_%s.png" xpos 831 ypos 927 sensitive selected_gender == True action Jump("bus")
Gender+Traits Screen (4/4)
4) After pasting that, save the file. Keep a copy of your modified file somewhere, since when the game updates, you might have to paste it there again to overwrite the new unmodified one.

5) Start a new NORMAL, not hardcore, game. After inputting your city name you should be able to see this screen where both pronouns and traits can be selected. Congrats!
4 Comments
the  [author] 12 Mar @ 8:01am 
@Azrax you know, I have been toying with that idea for a while. I think it's probably not easy to do, but if I find a way, I'll add it to the guide for sure
Azrax 12 Mar @ 3:52am 
This is a very useful mod, thanks for the guide! I've been using the print function to see where I stand with Tabitha, but is there a way to display the relationship values next to each dialogue choice?
the  [author] 9 Mar @ 7:25pm 
What did the error screen say?
Goombawarrior 9 Mar @ 5:32pm 
I think this is because of the mod, but sometimes in dialogue, the game has a screen where it tells me an issue with the text. I can go past it, but it's still disorienting.