Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Journal path reference

A gameJournalPath addresses one typed entry inside the merged journal tree. It does not address the .journal CR2W file, a handle inside that file, or a localization string. Use this page when filling a quest node’s path value; use Journal trees and typed paths for the full authoring model.

RecordValue
Practical baselineCyberpunk 2077 2.31a, WolvenKit 8.19.0, ArchiveXL 1.27.0, RED4ext 1.30.0, redscript 0.5.31
Lab 1–5 path resourcesStructurally validated
In-game state transitionsVerify with the relevant lab’s save and reload cases

Journal activation, visited state, tracking, success, and failure can persist in a save. Use an untouched save made before the candidate journal was first installed when changing a tree, path, or entry identity.

The four fields

gameJournalPath fieldRED value kindWhat to enter
realPathStringSlash-separated entry id values, excluding the anonymous gameJournalRootFolderEntry
classNameCNameExact RED class of the intended target in tutorial-owned trees
fileEntryIndexIntegerZero-based realPath component containing the nearest gameJournalFileEntry
editorPathStringEmpty string in Labs 1–5

For Lab 1’s objective:

realPath: quests/minor_quest/cqa001/cqa001_01/cqa001_01_obj_wait
className: gameJournalQuestObjective
fileEntryIndex: 2
editorPath: ""

Do not put a depot path in realPath. These three addresses are distinct:

mod\cqa\cqa001\journal\cqa001.journal       cooked depot resource
quests/minor_quest/cqa001/...                 merged journal entry
cqa_cqa001_objective_wait                     localization key

Calculate fileEntryIndex

Split realPath at /, count from zero, and locate the component whose entry is the nearest containing subtype of gameJournalFileEntry.

0  quests
1  minor_quest
2  cqa001             gameJournalQuest; containing file entry
3  cqa001_01
4  cqa001_01_obj_wait

The value is therefore 2 for the quest, phase, objectives, and nested quest mappin in every quests/minor_quest/cqa00N/... tutorial tree. It is not the leaf depth and is not a constant for every journal family.

Path familyTypical containing file entryExample index
quests/minor_quest/<quest>/...gameJournalQuest at component 22
contacts/<contact>/...gameJournalContact at component 11
points_of_interest/minor_quests/...gameJournalPointOfInterestGroup at component 11
onscreens/emails/quests/minor_quest/<quest>/files/...gameJournalFileGroup at component 55
onscreens/emails/quests/minor_quest/<quest>/messages/...gameJournalOnscreenGroup at component 55

Calculate the value from the actual contributed tree. A different folder layout can move the containing file entry.

Common target classes

TargetclassName
QuestgameJournalQuest
Quest phasegameJournalQuestPhase
Quest objectivegameJournalQuestObjective
Objective descriptiongameJournalQuestDescription
Quest mappingameJournalQuestMapPin
ContactgameJournalContact
Phone messagegameJournalPhoneMessage
Phone choice groupgameJournalPhoneChoiceGroup
Phone choicegameJournalPhoneChoiceEntry

Use the exact target type for mod-owned entries. Observed in vanilla: some older quest nodes carry surprising or less-specific className values. When researching one, resolve realPath against the extracted journal tree before deciding whether the value is intentional. Do not copy a legacy mismatch into a new resource.

Lab 1–5 path sheet

Every path below uses fileEntryIndex: 2 and editorPath: "". The class is gameJournalQuest, gameJournalQuestPhase, gameJournalQuestObjective, or gameJournalQuestMapPin according to the last component shown.

LabEntryrealPath
First SignalQuestquests/minor_quest/cqa001
First SignalPhasequests/minor_quest/cqa001/cqa001_01
First SignalWait objectivequests/minor_quest/cqa001/cqa001_01/cqa001_01_obj_wait
Signal RaceQuestquests/minor_quest/cqa002
Signal RacePhasequests/minor_quest/cqa002/cqa002_01
Signal RaceWait objectivequests/minor_quest/cqa002/cqa002_01/cqa002_01_obj_wait
Signal RaceStable objectivequests/minor_quest/cqa002/cqa002_01/cqa002_01_obj_stable
Boundary CheckQuestquests/minor_quest/cqa003
Boundary CheckPhasequests/minor_quest/cqa003/cqa003_01
Boundary CheckReach objectivequests/minor_quest/cqa003/cqa003_01/cqa003_01_obj_reach
Boundary CheckQuest mappinquests/minor_quest/cqa003/cqa003_01/cqa003_01_obj_reach/cqa003_01_qmp_checkpoint
Boundary CheckLeave objectivequests/minor_quest/cqa003/cqa003_01/cqa003_01_obj_leave
Handoff PointQuestquests/minor_quest/cqa004
Handoff PointPhasequests/minor_quest/cqa004/cqa004_01
Handoff PointReach objectivequests/minor_quest/cqa004/cqa004_01/cqa004_01_obj_reach
Handoff PointQuest mappinquests/minor_quest/cqa004/cqa004_01/cqa004_01_obj_reach/cqa004_01_qmp_handoff
Handoff PointLeave objectivequests/minor_quest/cqa004/cqa004_01/cqa004_01_obj_leave
Handoff PointConfirmation objectivequests/minor_quest/cqa004/cqa004_01/cqa004_01_obj_confirm
First ContactQuestquests/minor_quest/cqa005
First ContactPhasequests/minor_quest/cqa005/cqa005_01
First ContactMeet objectivequests/minor_quest/cqa005/cqa005_01/cqa005_01_obj_meet
First ContactQuest mappinquests/minor_quest/cqa005/cqa005_01/cqa005_01_obj_meet/cqa005_01_qmp_contact
First ContactLeave objectivequests/minor_quest/cqa005/cqa005_01/cqa005_01_obj_leave

These values are Structurally validated against the supplied mod-owned journal CR2Ws and questphases. A matching string and successful CR2W round trip do not prove that a saved journal transition will replay in game.

Registration and resolution check

The journal contribution must be registered independently of every path that targets it:

journal:
- mod\cqa\cqa001\journal\cqa001.journal

Check the chain in this order:

  1. The cooked .journal exists beneath source\archive at the intended depot path.
  2. The loose .archive.xl registers that exact depot path.
  3. The journal’s entry id chain produces realPath exactly, including case and separators.
  4. className matches the mod-owned target type.
  5. fileEntryIndex identifies the nearest containing file entry.
  6. The localization key on the target resolves through the separate onscreen lookup.
  7. The starting save has known journal state.

If the entry changes state but displays blank text, the path resolved. Continue with the localization reference. If a new state change behaves like an older build, retest from a pre-install save before editing the path again.

Focused vanilla checks

Observed in vanilla: extract base\journal\cooked_journal.journal from your own installation and inspect only the needed branch. Useful comparisons are contacts/dex/q003_flathead_price for contact paths and the SQ021 file path under onscreens/emails/quests/side_quest/sq021_sick_dreams/... for a component-5 file entry. Pair the latter with base\quest\side_quests\sq021\phases\sq021_randys_room.questphase.

Do not publish the extracted journal, its complete serialization, or the vanilla questphase. Record the depot path, focused entry types, component indices, and the exact question the comparison answered.