Published: Mar 31 2024 by mana vortex
Last documented edit: Jun 21 2026 by Zhincore
If you want to see an example of a hook, see the guide:
{% content-ref url="./" %} . {% endcontent-ref %}
If you wanna know more about available hooks see the reference page:
{% content-ref url="../../language/hook-annotations.md" %} hook-annotations.md {% endcontent-ref %}
The best place to find what the game has to offer is NativeDB, using the copy icon you can get a ready to use wrapMethod snippet:
{% embed url="https://nativedb.red4ext.com" %}
If you want to know what you're wrapping under the hood, deep-dive into the decompiled scripts! They're included with the REDmod DLC in your game (Cyberpunk 2077\tools\redmod\scripts) and also on codeberg:
{% embed url="https://codeberg.org/adamsmasher/cyberpunk" %}
The following section lists stuff you could commonly want to hook into (straight from the code of Addicted, thanks Roms1383 for the contribution!)
After the player is spawned:
@wrapMethod(PlayerPuppet)
protected cb func OnMakePlayerVisibleAfterSpawn(evt: ref<EndGracePeriodAfterSpawn>) -> Bool { }When a status effect is applied or removed
@wrapMethod(PlayerPuppet)
protected cb func OnStatusEffectApplied(evt: ref<ApplyStatusEffectEvent>) -> Bool
protected cb func OnStatusEffectRemoved(evt: ref<RemoveStatusEffect>) -> BoolWhen the player does something
@wrapMethod(PlayerPuppet)
protected cb func OnAction(action: ListenerAction, consumer: ListenerActionConsumer) -> BoolWhen the player interacts with an item
@wrapMethod(ItemActionsHelper)
public final static func ProcessItemAction(gi: GameInstance, executor: wref<GameObject>, itemData: wref<gameItemData>, actionID: TweakDBID, fromInventory: Bool) -> Bool
public final static func ProcessItemAction(gi: GameInstance, executor: wref<GameObject>, itemData: wref<gameItemData>, actionID: TweakDBID, fromInventory: Bool, quantity: Int32) -> BoolWhen the player consumes a quickslot item
@wrapMethod(ItemActionsHelper)
public final static func ConsumeItem(executor: wref<GameObject>, itemID: ItemID, fromInventory: Bool) -> VoidWhen the player consumes an item from backpack
@wrapMethod(ItemActionsHelper)
public final static func PerformItemAction(executor: wref<GameObject>, itemID: ItemID) -> VoidWhen the player equips/unequips an item
@wrapMethod(EquipmentSystemPlayerData)
private final func UnequipItem(itemID: ItemID) -> Void
private final func UnequipItem(equipAreaIndex: Int32, opt slotIndex: Int32, opt forceRemove: Bool) -> VoidWhen the player equips Cyberware at a Ripperdoc
@wrapMethod(RipperDocGameController)
private final func EquipCyberware(itemData: wref<gameItemData>) -> Bool In the character creator
@wrapMethod(ConsumeAction)
protected func ProcessStatusEffects(const actionEffects: script_ref<array<wref<ObjectActionEffect_Record>>>, gameInstance: GameInstance) -> VoidOn equipment preview
@wrapMethod(inkPuppetPreviewGameController)
protected cb func OnPreviewInitialized() -> BoolPhoto mode
@wrapMethod(PhotoModePlayerEntityComponent)
private final func SetupInventory(isCurrentPlayerObjectCustomizable: Bool) ESC menu
@wrapMethod(SingleplayerMenuGameController)
protected cb func OnInitialize() -> BoolWeapon selection wheel (?)
@wrapMethod(DpadWheelGameController)
protected cb func OnInitialize() -> BoolWhen receiving a message
@wrapMethod(GenericMessageNotification)
protected cb func OnInitialize() -> Bool???
@wrapMethod(GenericMessageNotification)
protected cb func OnHandlePressInput(evt: ref<inkPointerEvent>) -> Bool ???
@wrapMethod(PopupsManager)
protected cb func OnPlayerAttach(playerPuppet: ref<GameObject>) -> BoolWhen showing/hiding a custom popup
@addMethod(PopupsManager)
protected cb func OnShowCustomPopup(evt: ref<ShowCustomPopupEvent>) -> Bool
protected cb func OnHideCustomPopup(evt: ref<HideCustomPopupEvent>) -> Bool @wrapMethod(BackpackMainGameController)
protected cb func OnInitialize() -> Bool
protected cb func OnItemDisplayClick(evt: ref<ItemDisplayClickEvent>) -> Bool
private final func NewShowItemHints(itemData: wref<UIInventoryItem>) @wrapMethod(CraftingGarmentItemPreviewGameController)
protected cb func OnCrafrtingPreview(evt: ref<CraftingItemPreviewEvent>) -> Bool@wrapMethod(EquipmentSystemPlayerData)
public final func OnAttach()
public func LockVisualChanges()
public func UnlockVisualChanges()
public final const func IsVisualSetActive() -> Bool
public final const func IsSlotOverriden(area: gamedataEquipmentArea) -> Bool
private final const func ShouldUnderwearBeVisibleInSet() -> Bool
private final const func ShouldUnderwearTopBeVisibleInSet() -> Bool
public final func OnRestored()
public final func OnQuestDisableWardrobeSetRequest(request: ref<QuestDisableWardrobeSetRequest>)
public final func OnQuestRestoreWardrobeSetRequest(request: ref<QuestRestoreWardrobeSetRequest>)
public final func OnQuestEnableWardrobeSetRequest(request: ref<QuestEnableWardrobeSetRequest>)
public final func EquipWardrobeSet(setID: gameWardrobeClothingSetIndex)
public final func QuestHideSlot(area: gamedataEquipmentArea)
public final func QuestHideSlot(area: gamedataEquipmentArea)
public final func QuestRestoreSlot(area: gamedataEquipmentArea)
private final func ClearItemAppearanceEvent(area: gamedataEquipmentArea)
private final func ResetItemAppearanceEvent(area: gamedataEquipmentArea)
private final func ResetItemAppearance(area: gamedataEquipmentArea, opt force: Bool)@wrapMethod(gameuiInGameMenuGameController)
protected cb func OnInitialize() -> Bool
protected cb func OnPuppetReady(sceneName: CName, puppet: ref<gamePuppet>) -> Bool
protected cb func OnEquipmentChanged(value: Variant) -> Bool
protected cb func OnUninitialize() -> Bool@wrapMethod(gameuiInventoryGameController)
protected cb func OnInitialize() -> Bool
protected cb func OnUninitialize() -> Bool
private final func SetupSetButton() -> Void
protected cb func OnWardrobeBtnClick(evt: ref<inkPointerEvent>) -> Bool
protected cb func OnWardrobePopupClose(data: ref<inkGameNotificationData>)
protected cb func OnBack(userData: ref<IScriptable>) -> Bool
protected cb func OnEquipmentClick(evt: ref<ItemDisplayClickEvent>) -> Bool @wrapMethod(gameuiPhotoModeMenuController)
protected cb func OnInitialize() -> Bool
protected cb func OnAddMenuItem(label: String, attribute: Uint32, page: Uint32) -> Bool
protected cb func OnShow(reversedUI: Bool) -> Bool
protected cb func OnSetAttributeOptionEnabled(attribute: Uint32, enabled: Bool) -> Bool@wrapMethod(PhotoModeMenuListItem)
private final func StartArrowClickedEffect(widget: inkWidgetRef) @wrapMethod(inkInventoryPuppetPreviewGameController)
protected cb func OnInitialize() -> Bool @wrapMethod(InventoryItemDisplayController)
public func Bind(inventoryDataManager: ref<InventoryDataManagerV2>, equipmentArea: gamedataEquipmentArea, opt slotIndex: Int32, opt displayContext: ItemDisplayContext, opt setWardrobeOutfit: Bool, opt wardrobeOutfitIndex: Int32) {
public func Bind(inventoryScriptableSystem: ref<UIInventoryScriptableSystem>, equipmentArea: gamedataEquipmentArea, opt slotIndex: Int32, displayContext: ItemDisplayContext)
protected func RefreshUI()
protected func NewUpdateRequirements(itemData: ref<UIInventoryItem>)@wrapMethod(InventoryItemModeLogicController)
private final func UpdateOutfitWardrobe(active: Bool, activeSetOverride: Int32)
protected cb func OnItemDisplayClick(evt: ref<ItemDisplayClickEvent>) -> Bool
protected cb func OnItemDisplayHoverOver(evt: ref<ItemDisplayHoverOverEvent>) -> Bool
private final func SetInventoryItemButtonHintsHoverOver(const displayingData: script_ref<InventoryItemData>, opt display: ref<InventoryItemDisplayController>)
private final func HandleItemClick(const itemData: script_ref<InventoryItemData>, actionName: ref<inkActionName>, opt displayContext: ItemDisplayContext, opt isPlayerLocked: Bool) @wrapMethod(PhotoModePlayerEntityComponent)
private final func OnGameAttach()
private final func SetupInventory(isCurrentPlayerObjectCustomizable: Bool)
protected cb func OnItemAddedToSlot(evt: ref<ItemAddedToSlot>) -> Bool@wrapMethod(QuestTrackerGameController)
protected cb func OnInitialize() -> Bool@wrapMethod(UIInventoryItem)
public final func IsEquipped(opt force: Bool) -> Bool
public final func IsTransmogItem() -> Bool
public final static func Make(player: wref<PlayerPuppet>, transactionSystem: ref<TransactionSystem>, uiScriptableSystem: wref<UIScriptableSystem>) -> ref<UIInventoryItemsManager>
public final func IsItemEquippedInSlot(itemID: ItemID, slotID: TweakDBID) -> Bool
public final func IsItemTransmog(itemID: ItemID) -> Bool @wrapMethod(WardrobeSetPreviewGameController)
protected cb func OnInitialize() -> Bool
protected cb func OnPreviewInitialized() -> Bool
public final func RestorePuppetEquipment() Check for it with this annotation:
@if(ModuleExists("VirtualAtelier.Site"))
@if(!ModuleExists("VirtualAtelier.Site"))@wrapMethod(ComputerInkGameController)
private final func ShowMenuByName(elementName: String) -> Void
private final func HideMenuByName(elementName: String) -> Void @wrapMethod(ComputerControllerPS)
public final func GetMenuButtonWidgets() -> array<SComputerMenuButtonWidgetPackage>@wrapMethod(ComputerMenuButtonController)
public func Initialize(gameController: ref<ComputerInkGameController>, widgetData: SComputerMenuButtonWidgetPackage) -> Void@wrapMethod(BrowserController)
protected cb func OnPageSpawned(widget: ref<inkWidget>, userData: ref<IScriptable>) -> Bool When the consumable cooldown is over:
@wrapMethod(ConsumableTransitions)
protected final func ChangeConsumableAnimFeature(stateContext: ref, scriptInterface: ref, newState: Bool) -> Void {}When the player heals themselves
@wrapMethod(UseHealChargeAction)
protected func ProcessStatusEffects(const actionEffects: script_ref<array<wref<ObjectActionEffect_Record>>>, gameInstance: GameInstance) -> VoidWhen the player uses a consumable
@wrapMethod(ConsumeAction)
protected func ProcessStatusEffects(const actionEffects: script_ref<array<wref<ObjectActionEffect_Record>>>, gameInstance: GameInstance) -> VoidWhen you skip time
@wrapMethod(TimeskipGameController)
private final func Apply() -> Void