Update: With the release of 1.06 I'm very happy with the amount of content this mod adds. Future updates will mostly be focused on improving the mod through typo/grammar fixes and minor changes to existing entries, rather than adding more.
Sure thing, just a fair warning though, I'm going to be updating it fairly often adding new text and changing existing text, so it might be difficult to keep a translation edit up to date. That being said, by all means, you're more than welcome to translate the mod.
That's a good idea. Probably just need a week or two until I've added enough extra content and ironed out the typos before it'll be ready for translation edits.
@kmaeleon, I'm happy with the mod now. I doubt I'll be changing much besides the occasional patch to fix grammar or logic issues (like if some entries just don't read as well as they otherwise could, general polishing stuff)
When the scanner says something like "Collected _____ as a child." or "Watched an entire season of _____" it'll pull from a large list of tv shows or items to choose from.
Yep! text.reds contains all the strings. If you want to edit existing strings all you need to do it alter the lines in the quotes to what you want. Additionally, if you'd like to add new strings you need to edit text.reds as well as LifePathEvents.reds
For example, if you wanted to add a new adulthood event, something like "Ate turkey for dinner." you would need to add 2 new "ADULTHOOD" entries to LifePathEvents.reds, let's make this event number 501 since my mod stops at 500 extra events:
We'll add an extra line at 2379 in LifePathEvents.reds: public static func ADULT_EXPANSION_501() -> ref<LifePathEvent> { return LPE(Text.ADULT_EXPANSION_501_F(), Text.ADULT_EXPANSION_501_M()); } This is telling the game that adult expansion 501 should reference the strings for adult expansion 501 female and adult expansion 501 male
Then we'll add another extra line at 4866 in LifePathEvents.reds: PushWeightedLifeEvent(events, CrowdScannerEvents.ADULT_EXPANSION_501(), NEU_OUTCOME_WGT); This is telling the game that adult expansion 501 is a neutral event (not negative or positive). You can also weigh the event to appear for different types of NPCs, like corpos or junkies for example. Check other weightedlifeevent entries for examples on how to do that.
Finally we'll add a 2 extra lines in text.reds that contains the string. We'll put it right after adult expansion 500 at lines 7974 and 7975 in this example: public static func ADULT_EXPANSION_501_F() -> String { return "Ate turkey for dinner. "; } public static func ADULT_EXPANSION_501_M() -> String { return ""; } This is telling the game that the text for adult expansion 501 is "Ate turkey for dinner.". If there's only a string for the female line then it will use it for both male and female NPCs; ie: non-gendered lines. If you add a string to both lines you can specify gendered language, ie "She/he ate turkey for dinner." like so: public static func ADULT_EXPANSION_501_F() -> String { return "She ate turkey for dinner. "; } public static func ADULT_EXPANSION_501_M() -> String { return "He ate turkey for dinner. "; }
I hope this helps. If you have any more questions let me know.
How does the assigning of the backgrounds and early events work? I guess it is based purely on the model of the NPC and the little info they have like male or female, corpo or a homeless etc, right? Another idea, most likely outside of the scope of what you can do without rewriting the mod if it is even possible at all. But would be possible to assign or exclude some contradictory information based on animation the NPC is currently doing? Like they are sitting at bar lighting one cigarette after another -> most likely heavy smoker, or guy is writhing on the floor in convulsions with a BD headband on his head -> he's probably addicted to braindance and won't be enjoying spending weekends exploring the districts of NC.
Not sure if this is a bug or I was just "lucky", but all of the early life events are happening at age 11 and I've seen like fifteen of them. Also from time to time I see duplicate lines. Again, not sure if this is simply a random quirk in the script or related to the specific line. Sorry for bothering you, but the author of the original mod rarely responds.
Hi, I've started czech translation, since I already translated the original in the past, I don't think I need to wait for typo fixes. This is most likely outside of the scope of your mod, but I guess you wouldn't be able to exclude the street cops from the mod and add some random, but more fitting info in the same format like those two guys in El Capitán Phantom Liberty Autofixer missions? Like their Name, badge number, rank, years of service, and number of their disciplinary offences, maybe even the type of offence. Right now they get the same info like normal citizens, so you can meet officers who are at the same time working as katana blacksmiths for Arasaka.
That's great. Now I'm starting to be a bit afraid to continue since you added crazy number of new variants. There is one new "problem" for translated text which arose from the random generation and that is some of the strings need female and male variants like the originals when those strings are unfinished sentences and not simply names of corporations or districts.
The strings are still separated into male and female variants. All the new random variables are things like locations, building types, building descriptors, fortunes, stuff like that. Nothing gender related.
Does Czech use gender in statements like "Started working at a casino"? If you could give me a few translated examples and explain them I could make some changes to make future translations easier.
Edit: I looked up how Czech works, for a translation, could you just edit the %startedwork% strings to be lowercase and then add the male variant string to the job entry? for example; if "Got a job" was adjusted to "práci jako" then you could adjust the female string for (in this example 'janitor') to ""Získala %startedwork% čistička."" and add a male string as "Získal %startedwork% čistič."
Apologies if that's wrong, I don't personally speak or understand much of Czech. The top strings are always female and the bottom strings are male. If you see an empty string underneath a female string it means there's no gendered language being used and can be filled in, allowing for gendered language when needed.
For example, if I wanted to add gendered language to public static func LIFEPATH_EXPANSION_3_F() -> String { return "Grew up in a cult compound until escaping at a young age. "; } public static func LIFEPATH_EXPANSION_3_M() -> String { return ""; } I would adjust it like this public static func LIFEPATH_EXPANSION_3_F() -> String { return "She grew up in a cult compound until escaping at a young age. "; } public static func LIFEPATH_EXPANSION_3_M() -> String { return "He grew up in a cult compound until escaping at a young age."; } Now that string will accommodate for male and female NPCs
Going back to the janitor example: public static func JOB_EXPANSION_23_F() -> String { return "%startedwork% as a janitor. "; } public static func JOB_EXPANSION_23_M() -> String { return ""; } would become public static func JOB_EXPANSION_23_F() -> String { return "Získala %startedwork% čistička. "; } public static func JOB_EXPANSION_23_M() -> String { return "Získal %startedwork% čistič. "; }
What you wrote is correct. It usually means just adding "a" at the end for female version. The sentence you wrote originally would be "Začal pracovat v kasinu." for male, while female version would be "Začala pracovat v kasinu". That is all. Most likely there are exceptions. Verbs are easy, the nouns would be most likely more complicated and couldn't be automated I would say. And I know how the f and m strings work you didn't need to waste your time explaining it.
Edit: "Just add two duplicates of //Started work lines and translators which need them will use them, while the others can ignore it.
If the text is too small locate and open "..Cyberpunk 2077\r6\scripts\backgroundScanner\UI\NetWatchDBReport.reds" with a text editor
Edit the variables: backgroundHeader.SetFontSize(17) background.SetFontSize(25) earlyLifeHeader.SetFontSize(17) earlyLife.SetFontSize(25) significantEventsHeader.SetFontSize(17) significantEvents.SetFontSize(25) The numbers indicate the size of the font, just increase them to suit your needs. I'll be increasing the font size in the next update.
46 comments
With the release of 1.06 I'm very happy with the amount of content this mod adds. Future updates will mostly be focused on improving the mod through typo/grammar fixes and minor changes to existing entries, rather than adding more.
I'd love to translate it for a french version to, I'll wait until you are done then :)
Keep up the good work.
How do you feel about the amount of content in the mod now ?
Do you plan to update it again ?
Thanks!!
Basically just extra flavor and less repetition.
I did notice that the text.reds file is editable in Notepad. Would altering this file change what appears ingame?
For example, if you wanted to add a new adulthood event, something like "Ate turkey for dinner." you would need to add 2 new "ADULTHOOD" entries to LifePathEvents.reds, let's make this event number 501 since my mod stops at 500 extra events:
We'll add an extra line at 2379 in LifePathEvents.reds:
public static func ADULT_EXPANSION_501() -> ref<LifePathEvent> { return LPE(Text.ADULT_EXPANSION_501_F(), Text.ADULT_EXPANSION_501_M()); }
This is telling the game that adult expansion 501 should reference the strings for adult expansion 501 female and adult expansion 501 maleThen we'll add another extra line at 4866 in LifePathEvents.reds:
PushWeightedLifeEvent(events, CrowdScannerEvents.ADULT_EXPANSION_501(), NEU_OUTCOME_WGT);
This is telling the game that adult expansion 501 is a neutral event (not negative or positive). You can also weigh the event to appear for different types of NPCs, like corpos or junkies for example. Check other weightedlifeevent entries for examples on how to do that.Finally we'll add a 2 extra lines in text.reds that contains the string. We'll put it right after adult expansion 500 at lines 7974 and 7975 in this example:
public static func ADULT_EXPANSION_501_F() -> String { return "Ate turkey for dinner. "; }
This is telling the game that the text for adult expansion 501 is "Ate turkey for dinner.". If there's only a string for the female line then it will use it for both male and female NPCs; ie: non-gendered lines. If you add a string to both lines you can specify gendered language, ie "She/he ate turkey for dinner." like so:public static func ADULT_EXPANSION_501_M() -> String { return ""; }
public static func ADULT_EXPANSION_501_F() -> String { return "She ate turkey for dinner. "; }
public static func ADULT_EXPANSION_501_M() -> String { return "He ate turkey for dinner. "; }
I hope this helps. If you have any more questions let me know.
I'll experiment a little bit and if I have any issues I'll let you know. Thank you again!
Not sure if this is a bug or I was just "lucky", but all of the early life events are happening at age 11 and I've seen like fifteen of them. Also from time to time I see duplicate lines. Again, not sure if this is simply a random quirk in the script or related to the specific line. Sorry for bothering you, but the author of the original mod rarely responds.
Also idk if assigning unique traits based on animation is possible, at least not for my skills.
Edit: I looked up how Czech works, for a translation, could you just edit the %startedwork% strings to be lowercase and then add the male variant string to the job entry? for example; if "Got a job" was adjusted to "práci jako" then you could adjust the female string for (in this example 'janitor') to ""Získala %startedwork% čistička."" and add a male string as "Získal %startedwork% čistič."
Apologies if that's wrong, I don't personally speak or understand much of Czech. The top strings are always female and the bottom strings are male. If you see an empty string underneath a female string it means there's no gendered language being used and can be filled in, allowing for gendered language when needed.
For example, if I wanted to add gendered language to
public static func LIFEPATH_EXPANSION_3_F() -> String { return "Grew up in a cult compound until escaping at a young age. "; }
I would adjust it like thispublic static func LIFEPATH_EXPANSION_3_M() -> String { return ""; }
public static func LIFEPATH_EXPANSION_3_F() -> String { return "She grew up in a cult compound until escaping at a young age. "; }
Now that string will accommodate for male and female NPCspublic static func LIFEPATH_EXPANSION_3_M() -> String { return "He grew up in a cult compound until escaping at a young age."; }
Going back to the janitor example:
public static func JOB_EXPANSION_23_F() -> String { return "%startedwork% as a janitor. "; }
would becomepublic static func JOB_EXPANSION_23_M() -> String { return ""; }
public static func JOB_EXPANSION_23_F() -> String { return "Získala %startedwork% čistička. "; }
public static func JOB_EXPANSION_23_M() -> String { return "Získal %startedwork% čistič. "; }
Edit: "Just add two duplicates of //Started work lines and translators which need them will use them, while the others can ignore it.
is it possible to have bigger subtitles?
Edit the variables:
backgroundHeader.SetFontSize(17)
background.SetFontSize(25)
earlyLifeHeader.SetFontSize(17)
earlyLife.SetFontSize(25)
significantEventsHeader.SetFontSize(17)
significantEvents.SetFontSize(25)
The numbers indicate the size of the font, just increase them to suit your needs. I'll be increasing the font size in the next update.
Thank you!