Always First Equip


Mod Introduction

Repeats firstEquip animation each time you equip your weapon or press a hotkey. Allows to trigger additional weapon inspection animations: IdleBreak and SafeAction. Highly configurable.
Link to the mod

Installation Guide

Info

Repeats firstEquip animation each time you draw your weapon because it's just cool :) Made by request.
Tracks different game events to skip the animation when it should not be played (after interactions, climbing, enemy takedowns etc.)
Animation can be interrupted at any time with aiming.
Allows to trigger additional weapon inspection animations (see details below).
Adds new configurable custom hotkey to trigger first equip, idle break and safe action animations
Adds new configurable custom hotkey to switch between ready and lowered weapon positions

Short animations demo here: https://imgur.com/a/wR3xBHc

Supported animations


firstEquip
Usually, you can see this animation when V equips any weapon for a first time.

How to trigger
Press the related hotkey when your weapon sheathed to equip it with firstEquip animation. Also you will see it while equipping your weapon with a certain probability defined by FirstEquipConfig (50% by default). And finally, you can enable animation cooldown option which replaces probability based check with "play once per defined period of time" logic. Uses the main mod hotkey (F2 by default).

IdleBreak
Usually, you can see this animation with a certain probability when V stands still with weapon unsheathed, it looks like short weapon inspection.

How to trigger
Press the related hotkey when your weapon unsheathed to run IdleBreak animation, also you will see it when V stands still with weapon unsheathed with a certain probability defined by IdleBreakConfig. Animation check runs each period, default values mean that IdleBreak check runs each 5 seconds to play the animation with 10% probability. Uses the main mod hotkey (F2 by default).

SafeAction
Usually you can see this animation when you try to fire a weapon in any safe area where weapon usage is blocked, it looks like weapon chamber inspect for some revolvers, pistols and riffles or another short inspection for other weapons.

How to trigger
Hold the relaeted hotkey when your weapon unsheathed to run SafeAction animation. V will hold equipped weapon in "inspected" state while you holding the hotkey. Uses the main mod hotkey (F2 by default).

Lower your weapon
Usually you can see this animation in safe areas or when you are targeting some quest or important NPCs

How to trigger
Press the related hotkey when your weapon unsheathed to toggle between lowered and ready weapon positions. Uses the additional mod hotkey (F3 by default).


How to install

Download all required dependencies and unpack it into the game folder
Download and unpack Always First Equip archive into the game folder
(Optional) Configure the mod with the mod settings menu

Required redscript version: 0.3.0+

How to uninstall

Delete Cyberpunk 2077\r6\scripts\alwaysFirstEquip.reds file
Delete Cyberpunk 2077\r6\input\AlwaysFirstEquip.xml file
Delete Cyberpunk 2077\archive\pc\mod\AlwaysFirstEquip.archive and Cyberpunk 2077\archive\pc\mod\AlwaysFirstEquip.archive.xl files

Translation
If you want to translate the mod settings menu to your own language, then download Translation sources archive, open first-equip.json with any text editor (I would recommend Notepad++) and translate only lines with "femaleVariant" key (sample screenshot, text which you should change marked with yellow). After that check the code for your language here at the table below and send translated file back to me.

Currently supported languages:

English
Russian
French (credits to Unseen Unit)
German (credits to vorgash)
Simplified Chinese (credits to Alk4idin)
Traditional Chinese (credits to hansdofer)
Japanese (credits to aile1111)
Spanish (credits to XHisparemiX)
Polish (credits to george173)
Brazilian Portuguese (credits to ProtonWave)
Czech (credits to TheWolfeus)
Thai (credits to L A T I N)
Turkish (credits to JDMlLegioNl)

Credits

jekky for the redscript compiler
RayNOS for the mod idea
psiberx for base hotkey listeners idea, archivexl and all the stuff
CP77 modding discord


My mods

Always First Equip
Custom Map Markers
Enhanced Craft
Faster Iguana Hatch
Game Time Tweaks
Hide Read Shards
Holster By Hotkey
HUD Painter
HUDitor
Immersive Timeskip
Improved Minimap Zoom
Limited Fast Travel
Limited HUD
Mark To Sell
Metro Pocket Guide
Mizutani Shion Targa MZT
Muted Markers
Named Saves
No Camera Auto Centering
No Intro Videos
No Scanner Time Dilation
Quickhack Hotkeys
Real Vendor Names
Reduced Loot
Revised Backpack
Sleeves
Smarter Scrapper
Stand Still Please
Stash Filters
Stash and Backpack Search
Toggle Quest Tags
Vehicle Summon Tweaks
Virtual Atelier
Virtual Car Dealer
Wannabe Edgerunner
Yet Another UI Recolor


For redscript mod developers

// Replacements
@replaceMethod(LocomotionEventsTransition)
public func OnEnter(stateContext: ref<StateContext>, scriptInterface: ref<StateGameScriptInterface>) -> Void

@replaceMethod(CarriedObjectEvents)
protected func OnEnter(stateContext: ref<StateContext>, scriptInterface: ref<StateGameScriptInterface>) -> Void

@replaceMethod(InteractiveDevice)
protected cb func OnInteractionUsed(evt: ref<InteractionChoiceEvent>) -> Bool

@replaceMethod(gamestateMachineComponent)
protected cb func OnStartTakedownEvent(startTakedownEvent: ref<StartTakedownEvent>) -> Bool

@replaceMethod(FirstEquipSystem)
public final const func HasPlayedFirstEquip(weaponID: TweakDBID) -> Bool

@replaceMethod(EquipmentBaseTransition)
protected final const func HandleWeaponEquip(scriptInterface: ref<StateGameScriptInterface>, stateContext: ref<StateContext>, stateMachineInstanceData: StateMachineInstanceData, item: ItemID) -> Void

@replaceMethod(ReadyEvents)
protected final func OnTick(timeDelta: Float, stateContext: ref<StateContext>, scriptInterface: ref<StateGameScriptInterface>) -> Void

// Added methods
@addMethod(ReadyEvents)
protected func OnDetach(const stateContext: ref<StateContext>, const scriptInterface: ref<StateGameScriptInterface>) -> Void
No comment