Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Guide made by Forsentio - Quest Team member working on WolvenKit at RED Modding Tools.
CP77_CR2W.bt (Thanks to alphaZomega for his great work)
Some basic knowledge of what are you doing (Seriously)
First and foremost you need to have the raw files of the game extracted If not, use the latest release of CP77 Tools and extract the archive. You also need to extract and unbundle the lang_eng_text archive for this tutorial.
Now that you have the raw files, head to the "quest" folder (found here: [...]\basegame_4_gamedata\base\quest) then chose a quest from one of the sub folders:
main_quests (the main story quest, internally labled as qxxx)
minor_quests (minor activites such as psycho sighting... etc, internally labeled mqxxx)
side_quests (the side gigs such as Judy's quest, River's story... etc, internally labled as sqxxx)
For this guide, we're going to use the one named MQ041, also known as "War Pigs", avaialable only for the Corpo lifepath. You should find it here: [...]\basegame_4_gamedata\base\quest\minor_quests
We want to make the main character say a different line then the one he is supposed to. For example replacing "Hey, yeah, sure. Damn, you ol' bastard, been a while since..." with "Fuuuck!" when the holocall starts.
You should have also unbundled and uncooked the lang_eng_text archive.
Okey, now that everything is clear, let's start. 1. Open the scenes folder inside MQ041, and then open the file named mq041_corpo_01_deadmans_switch.scene in 010Editor with alphaZomega's CP77_CR2W.bt template already installed.
2. Go to struct Data, open scnSceneResource, then scnscreenplayStore; inside you're going to find an array named scnscreenplayDialogLine 3. We're going to associate each entry with the line we see on screen; to do so we need the locstringIds and another file you can get from the lang_eng_text archive 4. Next, open the lang_eng_text archive and search for mq041 here: [...]\lang_en_text\base\localization\en-us\subtitles\quest 5. Once found the quest folder open the .json named mq041_corpo_01_deadmans_switch 6. Open struct Data, then JsonResource, handle:iSerializable, localizationPersistenceSubtitleEntry and finally array:localizationPersistenceSubtitleEntry 7. Here in the value column you're going to see lots of stringId; remember the locstringIds from point 3? Good! They're the same 8. We now know that stringId = 1822802647440039936 is responsible for "Hey, yeah, sure. Damn, you ol' bastard, been a while since...", and that stringId = 1874801294016040960 is the same as "Fuuuck!" 9. Let's go back to the the array mentioned in point 3; first thing we do is swap the two the locstringIds 10. Once that is done we need to swap the names we see on the left; in this case m_194BE559A84E2000 with m_1A04A1D80244D000; we can do that by simply going in the CName array and replacing their entries. 11. Once that is done be sure to save, pack and put the archive in your Mod folder
[PLACEHOLDER FOR A VIDEO]
although not needed in the mod it's best to have the cooked_journal.journal open as to make it easier to find what you're looking for it's path being base\journal\cooked_journal.journal
the main file needed is the onscreens.json depending on your preferred language it could be in base\localization under:
ar-ar
: Arabic (العربية)
cz-cz
: Czech (čeština)
de-de
: German (Deutsch)
en-us
: English (English)
es-es
: Spanish (Español)
es-mx
: Latin American Spanish (Español latinoamericano)
fr-fr
: French (Français)
hu-hu
: Hungarian (Magyar)
it-it
: Italian (Italiano)
jp-jp
: Japanese (日本語)
kr-kr
: Korean (한국어)
pl-pl
: Polish (Polski)
pt-br
: Brazilian Portuguese (Português do Brasil)
ru-ru
: Russian (Русский)
th-th
: Thai (ไทย)
tr-tr
: Turkish (Türkçe)
ua-ua
: Ukrainian (Українська)
zh-cn
: Simplified Chinese (简体中文)
zh-tw
: Traditional Chinese (繁體中文)
for now we will be using the English version, once you choose your language go into the onscreens folder and choose onscreens.json once it has been added we can begin:
now that we have both the cooked_journal.journal and onscreens.json added we can get to work for this mod we will be simply changing Panam's name to Valerie and have her tell us the mod is working to find panam go into the journal file and go into contacts after that open entries this is where ypu will spend some time searching to find the character you want:
for changing her name focus on the LocKey number this is found in the onscreens.json file as the PrimaryKey which will also require some searching
as for changing the conversation here we're gonna use the followup message after the hellman quest to make this easier check the quest id list:
this follows the same steps open the the contact you want in this case: Panam; until you find the quest you want, once you found what you're looking for you can edit the text in FemaleVariant to what you want and make sure to save all once done
if all steps have been followed and they are no conflicting files it should end up like this:
if you see an error in game showing the LocKey number means you might have another mod that changed the same message and there is a conflict and you might have to uninstall it
Short guide how to open existing in world garage doors
Published: Nov 10 by Sergey Last documented update: Nov 24 by Sergey
This page will teach you how to create an auto-opening garage door via .questphase file with either CET or Redscript.
If you want to learn about World Editing, please check the corresponding section.
NodeRefs explained.
An existing door (if you don't have one, head to World Editing -> Adding Objects to the World
Since we are in the quest section I'll show how to open it within .questphases
and using "native" nodes.
Create a basic structure for our quest
Find the door you want to open. Make sure it's not a texture (collisionNode). For example, i took a maelstrom gate.
From there we need its NodeRef
.Its global identifier. You can find it on its WorldSector.
Create pauseCondition
on distance and interactiveObjectManager
in our .questphase
Showcase
To close the door you need to create another condition and use ForceClose
and ForceLock
respectively.
Door can be Sealed
so pay attention to this too.
Some references:
This page describes how to use worldCompiledCommunityAreaNode and worldCommunityRegistryNode
Published: Nov 10 by Last documented update: Dec 4 by
If you want to learn about , please check the corresponding section.
If you want to learn about , please check the corresponding section.
explained.
1.17.0+
There are two types worldCompiledCommunityAreaNode
and worldCompiledCommunityAreaNode_Streamable
The difference between them is only that worldCompiledCommunityAreaNode
must be registered in AlwaysLoaded
type of .streamingsector
worldCompiledCommunityAreaNode_Streamable
can be registered in other types of .streamingsector
(exterior/quest/etc)
Working with worldCompiledCommunityAreaNode
and worldCommunityRegistryNode
In general, we are specifying in worldCompiledCommunityAreaNode
all our spots where we want to spawn NPCs/etc by its entryName
/phase
.
For example in the quest Riders on the Storm CDPR reactivates all needed NPCs by their reference, entry name, and phase name.
Setup your Wkit project.
Create .questphase
.streamingblock
and .streamingsector
files
Create archiveXL
file and specify your .streamingblock
and .questphase
files
Create NodeRefs for worldAiSpotNode
and worldCompiledCommunityAreaNode
Create worldAiSpotNode
and its worldNodeData
and assign created NodeRef
before
Create worldCompiledCommunityAreaNode
and its worldNodeData
Important:
- In the Node/area/entriesData
we specify an entryName/phaseName/spotId(AiSpoNodeHash)
so in the future, we can Activate/Reactivate/Deactivate
its entities by these params
- sourceObjectId
- it should match id
of registry item
Create worldCommunityRegistryNode
and its worldNodeData
Details about the registry:
Important:
communitiesData
- there are we specifying the type of NPC its template, entryName, and all possible phases
workspotsPersistentData
- there we are adding a new spot into the engine's global registry by the hash of our AiSpotNode
Trying to spawn:
I set the point in front of H10 V's apartment so we should see Panam spawning once we send a command. To do so we need to create a few nodes in our .questphase
In our .xl file, we set that.questphase
will trigger whenever we enter the apartment.
Then you can deactivate/reactive with SpawnManager
Guide made by Forsentio with the help of Loomy, PixelRick and Sombra - Team members working on various projects at RED Modding Tools.
We will guide you through the step-by-step process that will allow you to rotate and position differently the duvet above V's bed, so that it flows with how the sleep animation plays out.
.
.
Some basic knowledge about modding Cyberpunk 2077.
1. Unbundle and uncook basegame_3_nightcity.archive, basegame_4_gamedata.archive. 2. Find the entity you want to modify (in our case it's located here "basegame_3_nightcity\base\quest\minor_quests\mq000\entities") 3. Once you have the entity open its buffer in the Cyberpunk Save Editor by dragging and dropping it inside. 4. Open the entMeshComponent that has the same name as the mesh you want to modify (in our case is 3 entMeshComponent "bed_duvet_poor"). 5. Open the localTrasnform array, and inside of it Position and Orientation; you're going to see different values. IMPORTANT NOTE: ijkr are to be read as xyzw, **** where z is front/backword, x is left/rigth, y up/down. 6. Edit those values accordingly to how you want the entMeshComponent to appear in game (this is where experimenting is encouraged until you get the result you want ) IMPORTANT: For a better understanding of how your changes may affect the ingame position and rotation use this (kindly provided by Loomy) 7. Repack, Build and put into the Mod folder
Guide made by Forsentio - Quest Team member working on WolvenKit at RED Modding Tools.
We will demonstrate the step-by-step process which allows you to remove (and potentially change or replace) an animation in game.
(thanks for rfuzzo).
.
(thanks to alphaZomega).
Notepad (Recommanded since you need to copy some info)
A basic understanding of Cyberpunk 2077 modding.
1. Unbundle and uncook basegame_3_nightcity.archive, basegame_4_gamedata.archive using CP77Tools 2. Find the animation you want to remove (in our case we want to remove the idle animation that plays when the player is standing in front of a mirror)
The game works by using .scene files for certain interaction; you should take a look into those and search for the sectionNode that plays the animation you want to remove after you opened it in the 010 Editor, by using alphaZomega's template. The scene file we are using is located in "base\quest\minor_quests\mq000\scenes\mq000_01_apartment.scene"
3. Once the sectionNode is found, open Struct Data, then scnSceneResource, then scnSceneEvent array, then scnPlaySkAnimEvent, then scnEventBlendWorkspotSetup; inside of it you will find a workspotId, which you must take note of.
SIDE NOTE: Most of the game relies on Workspots used as interactable points both by the AI and the Player. In this case, the Workspot we are changing is used for the various interactions in V's appartment. The Workspot's location is "base\worksposts\quest\main_quests\prologue\q001\q001_01_wakeup\q001_01_wakeup__look_mirror.workspot"
4. Return to scnSceneResource and open scnWorkspotInstance. Search for the one that has the same number right next to workspotInstanceId; open it and take note of the dataId 5. Return to scnSceneResource and then open the scnWorkspotData and open each of theme until you find the one that has the same dataId. Open it and take note of the path right after the workspotResource 7. Open the .workspot file and then go to Struct Data, then workWorkspotResource, then workWorkspotTree, then handle:worldEntry, then workSequence, then worklEntry: there you will find a different named work[...]Anim; search for the one that has the same name as the animation you want to remove and take note of the number right before the name 8. Go into the CNAME array and zero out the name 9. Save, pack and place in the Mod folder
First steps into find quest archives.
Missions or quests are organized into separate files that contain nodes or references to other "files" called Questphases and Scenes.
Apartments provide a good learning opportunity because they consist of a questphase side, which forms the core of the entire game, and a scene file side, which includes choices, animations, buffs obtained from sleeping, timeskips resulting from sleeping, or audio in the shower.
Questphases can be thought of as graphs that may contain a few #noderefs, which are used to load prefabs for the phase. The questphases are connected together using handlerefs, which handle IDs in their socket setups.
In order to visualize the quest on wolvenkit we need to find or locate a Questphase file that represents the progression of quests:
The following graph is a visualization of the Questphase file:
Identify and locate a .questphase file on the Asset browser.
Click on "Add it to the project" or "open without adding to the project" (image A)
When you open the .questphase file you'll see first a "resource" window with all the questphase dependencies/archives and info. (Image B)
Switch to Graph editor on the tabs (image C)