This is a collection of guides explaining how to setup specific devices using Object Spawner
While these guides are for specific devices and setups, the information is transferable to any type of setup where you have Device Nodes which are connected
Devices in the game are just entity nodes, which additionally have the option to specify device connections
These can be used to e.g. Connect a door terminal to the door it controls
This guide will describe the steps necessary to add new native elevator, using Object Spawner
Object Spawner (v.0.8. or newer)
ArchiveXL (1.20 or newer)
Codeware (1.14.1 or newer)
WolvenKit (With latest version of Object Spawner import script)
You need to have a basic understanding of:
Working with WolvenKit
Using Object Spawner (Spawning things and importing into WolvenKit)
In this guide, we will build a simple elevator with 2 floors
For this we will need 3 device nodes:
An elevator object
Two elevator terminals
Additionally, we will need two markers:
One per floor
These determine the position to which the elevator drives
Make sure to spawn the elevator and floor terminals as Device
(Entity -> Device
in Object Spawner)
For the elevator, we will use base\gameplay\devices\elevators\megabuilding_elevator\megabuilding_lift_1.ent
Spawn it as Device
, and place it somewhere
For the terminals we will use base\gameplay\devices\elevators\terminals\elevator_floor_terminal_1.ent
Spawn two of them as Device
, and place one per stop
For the markers, select Meta -> Static Marker
in Object Spawner
Spawn two markers
In order to properly position them, do as follows for each marker / floor:
Move the elevator device spawned earlier to the position you want it to stop in
Right-Click the position (Under the Transform header) of the elevator device, and select Copy position and rotation
Select one marker, right click its position field, and select `Paste position and rotation`
Now you will have moved the marker into the same spot as the elevator
Repeat for each marker / floor
Make sure that once you are done setting up the markers, you move the elevator back to the position of the starting floor
Ensure that the "Primary Range" and "Secondary Range" (Found under the "World Node" header) of the marker nodes is higher than the one of the elevator device
In order to link and reference all the spawned object, each one will need its own, unique NodeRef
Expand the World Node
header and fill the NodeRef field with a unique string
In the end, we will have assigned 5 NodeRef's
For example:
$/terminal_top
, $/terminal_bottom
, $/marker_top
, $/marker_bottom
, $/elevator
Do not use the same NodeRef names as used in this guide, but choose your own unique ones instead.
Next we need to tell the elevator which floors it can use
To do this, we will go to the Device -> Device Connections
header of the elevator
Add one entry for each floor / terminal
Fill the device class name field (On the left), with the device class name of the terminal
In our case this would be ElevatorFloorTerminalControllerPS
, which can also be found under the device header of the terminals
Fill the NodeRef field with the NodeRef of the terminal that you are linking
Keep in mind that the elevator will see the floors in the order in which you add them, so the first one in the list should be the lowest floor
In order for the elevator to be fully functional, the terminals must be set to be persistent
Do this by checking the Persistent
checkbox of each terminal
In order for each terminal to know which floor marker to use, and what its name is supposed to be, we will use entity instance data
For each terminal, navigate to:
Entity Instance Data / ElevatorFloorTerminalController / persistentState / elevatorFloorSetup
In there, set floorDisplayName
to the LocKey that you want to be used as name (E.g. LocKey#49237
Set floorMarker
to the NodeRef of the floor's static marker (E.g. $/marker_bottom
)
Optionally, use the checkboxes under doorShouldOpenFrontLeftRight
to determine which doors of the elevator should open on this floor
Optionally change the elevator speed and inital starting floor by modifying:
Entity Instance Data / LiftController / persistentState / liftSetup
Let's recap what you should have now:
A elevator, spawned as Device
, with its own NodeRef, and linked to both terminals (Make sure you use the terminals NodeRefs, not the markers)
Two terminals, spawned as Device
, set to be persistent, with their own NodeRefs, and properly setup instance data (Linking them to the floor markers and with names)
Two static markers, each with their own NodeRef, positioned correctly
Once you have all this, you are ready to export
You must import the result into WolvenKit in order for the elevator to be functional
If you make changes to the elevator, make sure to use a fresh save game (One where the old elevator was not saved in) after having imported it into WolvenKit
This guide covers the process of setting up security areas using Object Spawner
Security areas serve two main purposes:
Makes the minimap say "Safe/Restricted/Hostile"
As an area in which specific player actions alert connected hostiles, as well as providing connectivity between devices and community NPCs (Such that pinging one enemy / device pings all devices and NPCs)
You need to have a basic understanding of:
Working with WolvenKit
In order to have a functional security area, you need two things:
A security system, linked to the security area
A security area, defining the area outline and type
Make sure to spawn both as Device
(Entity -> Device
in Object Spawner)
Security system:
Spawn a base\gameplay\devices\security_systems\security_system.ent
Assign a unique NodeRef
Security area:
Spawn a base\gameplay\devices\security_systems\security_area\security_area_1.ent
Assign a unique NodeRef
Ensure that it has no rotation, so set roll, pitch and yaw to 0
Next we need to link the security system to the area
To do this, we will go to the Device -> Device Connections
header of the security system, add a new entry
Fill the device class name field (On the left), with the device class name of the security area
In our case this would be SecurityAreaControllerPS
, which can also be found under the device header of the security area
Select the NodeRef of the security area on the right hand side of the entry
Next we want to create the outline of the security area
Ensure that the Dummy Area
is in the exact same position as our security area device
Next, press the Copy outline to clipboard
button, found in the Dummy Area
Now, we want our security area device to use our previously defined (And copied to clipboard) area outline
Open the Entity Instance Data
header of the security area
Locate the area
component, and expand it
Right-click the outline
header, and select Paste outline [Number of outline markers]
By default, the area will be Hostile
To change this, under the entity instance data header, locate:
controller -> persistentState -> securityAreaType
There you can select the type of area you want
You should now have:
A security system and security area, spawned as device
Both have unique NodeRefs
Security system has a device connection to the security area
Dummy outline, copy pasted the outline into the security area
This guide will describe the steps necessary to add new native fast travel points, using Object Spawner
You need to have a basic understanding of:
Working with WolvenKit
Creating tweaks using TweakXL (.yaml
files)
Any NodeRef names, and custom TweakDB record names in this guide are examples, do not use the same ones as in the guide.
This means you will need to create a custom record using TweakXL
The below snippet contains the definition for a new one:
Place it in a new .yaml
file inside Cyberpunk 2077\r6\tweaks
Modify the snippet for your custom FT point (Especially change the name of the record to something unique, e.g. FastTravelPoints.NAMEOFTHELOCATION
)
In order to have a working FT point you need two nodes:
worldEntityNode
, the terminal itself
worldStaticMarkerNode
, location where the player gets teleported to (Any other type of node technically works too)
We will use base\gameplay\devices\fast_travel\data_term_1.ent
, you can find it under Entity -> Entity Template
in Object Spawner
Optionally choose a appearance
Spawn a static marker, you can find it under Meta -> Static Marker
in Object Spawner
Place it in a fitting spot in front of the terminal
Assign a custom NodeRef to the static marker:
In the properties section, inside the World Node
header
Make sure the NodeRef is unique
E.g. $/ft/custom/marker
In order to tell the FT Point what marker to use, and what record to use, we will use entity instance data
Open the Entity Instance Data
header of the FT Terminal
Expand the entry DataTerm | Entity
Locate and expand the linkedFastTravelPoint
header
Set markerRef
to the NodeRef of the marker ($/ft/custom/marker
)
Set pointRecord
to the custom FastTravelPoints
record (FastTravelPoints.customPoint
)
You should now have the following:
A .yaml
tweak file containing the custom FastTravelPoints
record
An Object Spawner group containing:
The fast travel terminal entity node, with entity instance data linking it to the marker and the custom record
The marker node, with a custom NodeRef assigned
Make sure that the category of the sector containing the marker and terminal is set to AlwaysLoaded
during export from Object Spawner
If you make any changes to the FT point, after having already loaded the game with your custom point installed, make sure to use a fresh save (A save without the custom point saved)
(v.0.97 or newer)
(1.15.0 or newer)
(With latest version of Object Spawner import script)
Using Object Spawner (Spawning things and into WolvenKit)
In order to do this, setup a Dummy Area
, using the (Use a Dummy Area
as area type)
Now simply export your group from Object Spawner, and import into WKit using the Object Spawner
(v.0.8. or newer)
(1.14.1 or newer)
(With latest version of Object Spawner import script)
Using Object Spawner (Spawning things and into WolvenKit)
In order to define the name and the district of your fast travel point, it needs to point to a FastTravelPoints
Now simply export your group from Object Spawner, and import into WKit using the Object Spawner
floorMarker
NodeRef gets turned into hash)