diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..94b43bd
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,29 @@
+# Auto detect text files and perform LF normalization
+* filter=lfs diff=lfs merge=lfs -text
+*.esm filter= diff= merge= -text
+*.esp filter= diff= merge= -text
+*.pex filter= diff= merge= -text
+*.dlstrings filter= diff= merge= -text
+*.ilstrings filter= diff= merge= -text
+*.strings filter= diff= merge= -text
+*.gitignore filter= diff= merge= text eol=lf
+*.gitattributes filter= diff= merge= text eol=lf
+*.xml filter= diff= merge= text eol=crlf
+*.json filter= diff= merge= text eol=lf
+*.md filter= diff= merge= text eol=crlf
+*.ini filter= diff= merge= text eol=crlf
+*.txt filter= diff= merge= text eol=crlf
+*.psc filter= diff= merge= text eol=crlf
+*.cpp filter= diff= merge= text eol=crlf
+*.h filter= diff= merge= text eol=crlf
+*.filters filter= diff= merge= text eol=crlf
+*.def filter= diff= merge= text eol=crlf
+*.user filter= diff= merge= text eol=crlf
+*.vcxproj filter= diff= merge= text eol=crlf
+*.vcproj filter= diff= merge= text eol=crlf
+*.vssscc filter= diff= merge= text eol=crlf
+*.sln filter= diff= merge= text eol=crlf
+*.pas filter= diff= merge= text eol=crlf
+*.props filter= diff= merge= text eol=crlf
+*.gek filter= diff= merge= text eol=crlf
+*.flm filter= diff= merge= text eol=crlf
diff --git a/mod/Cyberware 2281.url b/mod/Cyberware 2281.url
new file mode 100644
index 0000000..5fdd500
--- /dev/null
+++ b/mod/Cyberware 2281.url
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4f11cf2975e1e74b5c26e7635ca32ff91ab53c6b2adbc83d905a4934ea0fd06
+size 68
diff --git a/mod/Cyberware OWB.esp b/mod/Cyberware OWB.esp
new file mode 100644
index 0000000..d01292c
Binary files /dev/null and b/mod/Cyberware OWB.esp differ
diff --git a/mod/Cyberware.esm b/mod/Cyberware.esm
new file mode 100644
index 0000000..5addf98
Binary files /dev/null and b/mod/Cyberware.esm differ
diff --git a/mod/Menus/prefabs/cyberware/cw_adrenaline_booster.xml b/mod/Menus/prefabs/cyberware/cw_adrenaline_booster.xml
new file mode 100644
index 0000000..8fb5b48
--- /dev/null
+++ b/mod/Menus/prefabs/cyberware/cw_adrenaline_booster.xml
@@ -0,0 +1,96 @@
+
+<_CWxScale>
+ 1
+
+
+
+
+ 1
+
+
+
+
+
+<_CWxMeterFont>
+ 7
+
+ 3
+
+
+
+
+
+<_PNxAPBonusEnabled> 0
+<_PNxAPBonusValue> 0
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 2
+ &left;
+
+
+
+ 100
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+ 10
+
+ 11
+
+
+
+
+
+
+ 2
+ &right;
+
+ +
+
+
+
+
+
+
+
+
+
+
+ 2
+ &left;
+
+ %
+
+
+
+
+
+
+
+
+
+
diff --git a/mod/Menus/prefabs/cyberware/cw_arscanner.xml b/mod/Menus/prefabs/cyberware/cw_arscanner.xml
new file mode 100644
index 0000000..a9456bb
--- /dev/null
+++ b/mod/Menus/prefabs/cyberware/cw_arscanner.xml
@@ -0,0 +1,789 @@
+
+<_CWxScannerEnabled> 0
+
+<_CWxScannerCursorLine> 0
+<_CWxScannerCursorPos> 0
+<_CWxScannerCursorIndent> 0
+<_CWxScannerCursorBlink> 0
+
+<_CWxScannerText1Index> 0
+<_CWxScannerText2Index> 0
+<_CWxScannerText3Index> 0
+<_CWxScannerText4Index> 0
+<_CWxScannerText5Index> 0
+<_CWxScannerText6Index> 0
+<_CWxScannerText7Index> 0
+<_CWxScannerText8Index> 0
+<_CWxScannerText9Index> 0
+<_CWxScannerText10Index> 0
+
+<_CWxScannerBoyEnabled> 0
+<_CWxScannerBoyHeadDamage> 0
+<_CWxScannerBoyTorsoDamage> 0
+<_CWxScannerBoyLeftLegDamage> 0
+<_CWxScannerBoyLeftArmDamage> 0
+<_CWxScannerBoyRightLegDamage> 0
+<_CWxScannerBoyRightArmDamage> 0
+
+<_CWxScannerHealth> 1.0
+<_CWxScannerDamage> 0
+
+<_CWxScannerTextHP> 0
+<_CWxScannerTextDT> 0
+
+
+
+
+
+
+
+
+
+
+ 20
+
+
+
+
+ 2
+
+
+ 2
+
+
+
+ 384
+ 512
+
+
+ &scale;
+ 0
+
+ 180
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 128
+
+
+
+
+
+
+
+
+
+
+
+
+ <_filename_0> cyberware\hud\scan\scannerbracket1.dds
+ <_filename_1> cyberware\hud\scan\scannerbracket2.dds
+
+
+
+
+ &scale;
+ -1
+
+ &nosystemcolor;
+ 120
+ 0
+ 0
+ 0
+
+
+
+
+
+
+
+ 14
+
+
+
+
+ 14
+
+
+
+
+ 28
+
+
+
+
+ 28
+
+
+ Interface\Shared\solid.dds
+
+
+
+ &scale;
+ 1
+
+
+
+
+
+ 220
+
+
+
+
+
+ 20
+
+
+
+
+ 90
+
+
+
+
+
+
+
+ 125
+
+
+
+
+ 2
+
+
+
+ 2
+
+
+
+ 180
+ 195
+
+ cyberware\hud\scan\ScannerBoy_base.dds
+
+
+
+ &scale;
+ 0
+
+
+
+
+
+ &nosystemcolor;
+
+ 230
+ 0
+ 0
+
+ 230
+
+
+
+
+
+
+
+
+ cyberware\hud\scan\ScannerBoy_head.dds
+
+
+
+ &scale;
+ 0
+
+
+
+
+
+ &nosystemcolor;
+
+ 230
+ 0
+ 0
+
+ 230
+
+
+
+
+
+
+
+
+ cyberware\hud\scan\ScannerBoy_torso.dds
+
+
+
+ &scale;
+ 0
+
+
+
+
+
+ &nosystemcolor;
+
+ 230
+ 0
+ 0
+
+ 230
+
+
+
+
+
+
+
+
+ cyberware\hud\scan\ScannerBoy_leftarm.dds
+
+
+
+ &scale;
+ 0
+
+
+
+
+
+ &nosystemcolor;
+
+ 230
+ 0
+ 0
+
+ 230
+
+
+
+
+
+
+
+
+ cyberware\hud\scan\ScannerBoy_rightarm.dds
+
+
+
+ &scale;
+ 0
+
+
+
+
+
+ &nosystemcolor;
+
+ 230
+ 0
+ 0
+
+ 230
+
+
+
+
+
+
+
+
+ cyberware\hud\scan\ScannerBoy_leftleg.dds
+
+
+
+ &scale;
+ 0
+
+
+
+
+
+ &nosystemcolor;
+
+
+ 230
+
+
+ 0
+ 0
+
+ 230
+
+
+
+
+
+
+
+
+ cyberware\hud\scan\ScannerBoy_rightleg.dds
+
+
+
+ 100
+ 0
+
+
+
+
+
+ 230
+
+
+
+ 8
+
+
+
+
+ 7
+
+ 200
+
+
+
+ 196
+ 64
+
+ cyberware\hud\scan\healthseperator.dds
+
+
+
+ 80
+ 1
+ &true;
+
+
+
+
+
+ 200
+
+
+
+ 47
+
+
+
+ 2
+
+
+
+ 94
+
+
+
+
+ 6
+
+
+ Interface\HUD\hud_tick_mark.dds
+
+
+
+ &scale;
+ 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+ 25
+
+
+ 50
+
+
+ 50
+
+
+ Interface\HUD\glow_xp_bar_pointer.dds
+
+
+
+ 3
+ 2
+
+
+
+
+
+ HP:
+
+
+ 18
+
+
+
+
+ 35
+
+
+
+
+ 3
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 3
+ 2
+
+
+
+
+
+ DT:
+
+
+
+ 1
+
+
+
+
+
+
+
+ 3
+ 2
+
+
+
+
+
+
+
+
+
+
+ 20
+
+
+
+
+
+
+ <_text_pos_x>
+
+ 30
+
+
+ <_text_pos_y>
+
+ 30
+
+
+ <_line_height> 31
+ <_indent_width> 20
+
+
+ &scale;
+ 1
+
+
+
+ 0
+
+
+ 200
+
+
+
+
+
+ 15
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4
+
+
+ 11
+ 22
+
+ Interface\Shared\solid.dds
+
+
+
+
+
+ <_line> 0
+
+ <_dat_1>S
+ <_dat_2>SC
+ <_dat_3>SCA
+ <_dat_4>SCAN
+ <_dat_5>SCANN
+ <_dat_6>SCANNI
+ <_dat_7>SCANNIN
+ <_dat_8>SCANNING
+ <_dat_9>SCANNING.
+ <_dat_10>SCANNING..
+ <_dat_11>SCANNING...
+
+ <_index>
+
+
+
+
+
+ <_line> 2
+
+ <_dat_1>T
+ <_dat_2>TH
+ <_dat_3>THR
+ <_dat_4>THRE
+ <_dat_5>THREA
+ <_dat_6>THREAT
+ <_dat_7>THREAT:
+
+ <_index>
+
+
+
+
+
+
+ <_line> 3
+ <_indent> 2
+
+ <_dat_1>h
+ <_dat_2>hi
+ <_dat_3>hig
+ <_dat_4>high
+
+ <_dat_5>m
+ <_dat_6>me
+ <_dat_7>med
+ <_dat_8>medi
+ <_dat_9>mediu
+ <_dat_10>medium
+
+ <_dat_11>l
+ <_dat_12>lo
+ <_dat_13>low
+
+ <_index>
+
+
+
+
+
+
+
+ <_line> 5
+
+ <_dat_1>A
+ <_dat_2>AW
+ <_dat_3>AWA/
+ <_dat_4>AWAR
+ <_dat_5>AWARE
+ <_dat_6>AWAREN/
+ <_dat_7>AWARENE
+ <_dat_8>AWARENES
+ <_dat_9>AWARENESS
+ <_dat_10>AWARENESS:
+
+ <_index>
+
+
+
+
+
+ <_line> 6
+ <_indent> 2
+
+ <_dat_1>h
+ <_dat_2>hi
+ <_dat_3>hig
+ <_dat_4>high
+
+ <_dat_5>m
+ <_dat_6>me
+ <_dat_7>med
+ <_dat_8>medi
+ <_dat_9>mediu
+ <_dat_10>medium
+
+ <_dat_11>l
+ <_dat_12>lo
+ <_dat_13>low
+
+ <_index>
+
+
+
+
+
+
+ <_line> 8
+
+ <_dat_1>C
+ <_dat_2>CO
+ <_dat_3>COM
+ <_dat_4>COMB
+ <_dat_5>COMBA
+ <_dat_6>COMBAT
+ <_dat_7>COMBAT R
+ <_dat_8>COMBAT RA
+ <_dat_9>COMBAT RAN
+ <_dat_10>COMBAT RANG
+ <_dat_11>COMBAT RANGE
+ <_dat_12>COMBAT RANGE:
+
+ <_index>
+
+
+
+
+
+ <_line> 9
+ <_indent> 2
+
+ <_dat_1>l
+ <_dat_2>lo
+ <_dat_3>lon
+ <_dat_4>long
+
+ <_dat_5>m
+ <_dat_6>me
+ <_dat_7>med
+ <_dat_8>medi
+ <_dat_9>mediu
+ <_dat_10>medium
+
+ <_dat_11>s
+ <_dat_12>sh
+ <_dat_13>sho
+ <_dat_14>shor
+ <_dat_15>short
+
+ <_dat_16>m
+ <_dat_17>me
+ <_dat_18>mel
+ <_dat_19>mele
+ <_dat_20>melee
+
+ <_index>
+
+
+
+
+
+ <_line> 11
+
+ <_dat_1>D
+ <_dat_2>DI
+ <_dat_3>DIS
+ <_dat_4>DISP
+ <_dat_5>DISPO
+ <_dat_6>DISPOS
+ <_dat_7>DISPOSI
+ <_dat_8>DISPOSIT
+ <_dat_9>DISPOSITI
+ <_dat_10>DISPOSITIO
+ <_dat_11>DISPOSITION
+ <_dat_12>DISPOSITION:
+
+ <_index>
+
+
+
+
+
+ <_line> 12
+ <_indent> 2
+
+ <_dat_1>a
+ <_dat_2>al
+ <_dat_3>all
+ <_dat_4>alli
+ <_dat_5>allie
+ <_dat_6>allied
+
+ <_dat_7>n
+ <_dat_8>ne
+ <_dat_9>neu
+ <_dat_10>neut
+ <_dat_11>neutr
+ <_dat_12>neutra
+ <_dat_13>neutral
+
+ <_dat_14>h
+ <_dat_15>ho
+ <_dat_16>hos
+ <_dat_17>host
+ <_dat_18>hosti
+ <_dat_19>hostil
+ <_dat_20>hostile
+
+ <_index>
+
+
+
+
+
+ <_line> 14
+
+ <_dat_1>D
+ <_dat_2>DO
+ <_dat_3>DON
+ <_dat_4>DONE
+ <_dat_5>DONE.
+
+ <_index>
+
+
+
diff --git a/mod/Menus/prefabs/cyberware/cw_bionic_eyes.xml b/mod/Menus/prefabs/cyberware/cw_bionic_eyes.xml
new file mode 100644
index 0000000..ab6f875
--- /dev/null
+++ b/mod/Menus/prefabs/cyberware/cw_bionic_eyes.xml
@@ -0,0 +1,126 @@
+
+<_PNxGrainPhase> 0
+<_PNxGrainAmount> 0
+<_PNxGrainColorRed> 1.0
+<_PNxGrainColorGreen> 1.0
+<_PNxGrainColorBlue> 1.0
+
+
+
+
+
+ 0
+
+ 0
+ 0
+
+
+
+
+
+
+
+ 255
+
+
+
+ 255
+
+
+
+ 255
+
+
+
+ 255
+
+
+
+
+ &scale;
+ -11
+ &nosystemcolor;
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ cyberware\hud\grain\grain1.dds
+
+
+
+ &scale;
+ -11
+ &nosystemcolor;
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ cyberware\hud\grain\grain2.dds
+
+
+
+
+ &scale;
+ -11
+ &nosystemcolor;
+
+
+
+
+
+
+
+
+
+
+
+ 3
+
+
+ cyberware\hud\grain\grain3.dds
+
+
+
+
+ &scale;
+ -11
+ &nosystemcolor;
+
+
+
+
+
+
+
+
+
+
+
+ 4
+
+
+ cyberware\hud\grain\grain4.dds
+
+
+
+
diff --git a/mod/Menus/prefabs/cyberware/cw_implants.xml b/mod/Menus/prefabs/cyberware/cw_implants.xml
new file mode 100644
index 0000000..42068df
--- /dev/null
+++ b/mod/Menus/prefabs/cyberware/cw_implants.xml
@@ -0,0 +1,1762 @@
+
+<_CWxImplants> 1
+<_CWxHasDUIF3>
+
+
+<_PNxImplantsPanelEnabled> 0
+<_PNxImplantsPanelAcceptEnabled> 0
+<_PNxImplantsPanelAcceptSelected>
+<_PNxImplantsPanelCaps> 0
+<_PNxImplantsPanelPrice> 0
+
+<_PNxCyberboyRegion> 0
+<_PNxCyberboyRegionReset> 0
+<_PNxCyberboyLineNum> 0
+<_PNxCyberboyShowRightSlot1> 0
+<_PNxCyberboyShowRightSlot2> 0
+<_PNxCyberboyShowLeftSlot1> 0
+<_PNxCyberboyShowLeftSlot2> 0
+<_PNxCyberboyMenuActive> 0
+
+<_PNxCyberboyRightImplant1State> 0
+<_PNxCyberboyRightImplant2State> 0
+<_PNxCyberboyLeftImplant1State> 0
+<_PNxCyberboyLeftImplant2State> 0
+
+<_PNxCyberboyRightImplant1Path>
+<_PNxCyberboyRightImplant2Path>
+<_PNxCyberboyLeftImplant1Path>
+<_PNxCyberboyLeftImplant2Path>
+
+<_PNxCyberboyHeadSelected>
+<_PNxCyberboyTorsoSelected>
+<_PNxCyberboyRightArmSelected>
+<_PNxCyberboyLeftArmSelected>
+<_PNxCyberboyRightLegSelected>
+<_PNxCyberboyLeftLegSelected>
+
+<_PNxCyberboyRightImplant1Selected>
+<_PNxCyberboyRightImplant2Selected>
+<_PNxCyberboyLeftImplant1Selected>
+<_PNxCyberboyLeftImplant2Selected>
+
+
+
+
+
+
+
+
+
+ &hudmain;
+
+ &scale;
+ 0
+
+ 180
+
+ 0
+ 0
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\background.dds
+
+
+
+
+
+
+
+ &nosystemcolor;
+
+ &scale;
+ 11
+
+
+
+ 2
+
+
+ 2
+
+
+
+
+
+ 2
+
+
+ 2
+
+
+
+ 1024
+ 576
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\cyboy_lines.dds
+
+
+
+
+
+
+
+ Interface\Shared\Background\solid_black.dds
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+ 2
+
+ &scale;
+
+ 128
+
+ &true;
+ <_scale> 0.8
+
+
+ &true;
+ 3
+ <_buffer> 10
+
+
+
+ <_x> 48
+ <_y> 96
+
+
+
+
+ <_length> 50
+
+
+
+ 0
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+ 5
+
+ 6
+ Cybernetic Implants
+
+
+
+
+
+
+
+
+
+
+ <_length>
+
+
+
+
+
+
+
+ <_x>
+
+
+
+
+ &xbox;
+
+
+ <_y>
+
+
+
+
+ <_bottom_to_top> &true;
+ <_x>
+ <_y>
+
+
+
+
+
+
+
+ <_length>
+
+
+
+
+
+
+
+
+
+
+ cyberware\hud\cy\nevada.dds
+ &scale;
+
+
+
+
+
+
+
+
+
+ 2
+
+
+ 34
+ 118
+
+
+
+
+ <_length>
+
+
+
+
+
+
+
+
+
+
+
+
+ <_bottom_to_top> &true;
+ <_x>
+ <_y>
+
+
+
+
+ <_bottom_to_top> &true;
+ <_x>
+
+ 2
+
+ <_y>
+
+
+ 40
+
+
+
+
+
+ 3
+ 4
+
+ &hudalt;
+
+ <_horbuf> 20
+ <_verbuf> 20
+
+
+
+
+ 81
+
+
+
+
+ 120
+
+
+
+
+
+
+
+
+
+
+
+ &true;
+ &true;
+ UIMenuFocus
+
+ &-sExit;
+ <_xbox_button> &xbuttonb;
+ <_PCButtonText> &-sPCMenuHintE;
+
+
+ 2
+
+
+ &right;
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ 2
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ &default_accept;
+ 1
+
+
+ Interface\InterfaceShared.tai
+
+ 75
+ 75
+
+
+
+
+
+ 10
+
+
+
+
+
+
+
+ 2
+
+
+
+ <_filename_2> general_button_b.dds
+ <_filename_15> glow_general_button_b.dds
+
+
+
+
+
+
+
+
+
+
+ 5
+
+
+
+
+
+
+
+
+ 4
+
+ <_horbuf> 20
+ <_verbuf> 20
+
+ <_line_alpha>
+ 128
+
+ 127
+
+
+
+
+
+
+
+
+
+ 81
+
+
+
+
+
+ 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ &true;
+ UIMenuFocus
+
+ &-sAccept;
+ UIMenuPrevNext
+ <_PCButtonText> &-sPCMenuHintA;
+
+
+ 2
+
+
+ &right;
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ 2
+ 10
+
+
+
+
+
+
+
+ <_line_alpha>
+
+
+
+
+
+
+
+
+
+
+
+ 5
+
+
+
+
+
+
+ <_Selected>
+
+
+ 0
+ 1
+
+
+
+
+
+
+ 2
+
+
+
+
+ 120
+
+ 12
+
+
+
+
+
+ 4
+ 2
+ &right;
+ &-sInventoryCaps;
+
+
+
+
+ 20
+
+
+
+
+
+ 4
+ &right;
+
+
+ 10
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4
+ 2
+ Price
+
+
+
+ 10
+
+
+
+
+
+ 4
+
+
+
+ 20
+
+
+
+
+
+
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ &scale;
+ 15
+
+
+
+ 288
+
+
+
+
+ 40
+
+
+ 204
+ 132
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\leftslot.dds
+
+
+
+
+
+
+
+ &true;
+ UIMenuFocus
+ UIMenuOK
+
+
+
+
+
+ 15
+
+
+
+
+
+ 2
+
+ 64
+
+
+
+
+
+
+ 2
+
+ 64
+
+
+ 128
+ 128
+
+ <_Selected>
+
+
+ 0
+ 1
+
+
+
+
+ &hudmain;
+
+
+ &nosystemcolor;
+
+
+
+
+
+
+
+ 0
+
+
+ &scale;
+ 15
+
+
+
+ 2
+
+
+
+
+
+ 128
+ 128
+
+
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ 0
+
+
+
+ &scale;
+ 15
+
+
+
+ 4
+
+
+
+ 5
+
+
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\implant_add.dds
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ &scale;
+ 15
+
+
+
+ 88
+
+
+
+
+ 54
+
+
+ 204
+ 132
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\rightslot.dds
+
+
+
+
+
+
+
+ &true;
+ UIMenuFocus
+ UIMenuOK
+
+
+
+
+
+ 15
+
+
+
+
+
+ 2
+
+ 64
+
+
+
+
+
+
+ 2
+
+ 64
+
+
+ 128
+ 128
+
+ <_Selected>
+
+
+ 0
+ 1
+
+
+
+
+ &hudmain;
+
+
+ &nosystemcolor;
+
+
+
+
+
+
+
+ 0
+
+
+ &scale;
+ 15
+
+
+
+ 2
+
+
+
+
+
+ 128
+ 128
+
+
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ 0
+
+
+
+ &scale;
+ 15
+
+
+
+ 3
+
+
+
+ 5
+
+
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\implant_add.dds
+
+
+
+
+
+
+
+
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ &scale;
+ 15
+
+
+
+ 546
+
+
+
+
+ 29
+
+
+ 204
+ 132
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\rightslot.dds
+
+
+
+
+
+
+
+ &true;
+ UIMenuFocus
+ UIMenuOK
+
+
+
+
+
+ 15
+
+
+
+
+
+ 2
+
+ 64
+
+
+
+
+
+
+ 2
+
+ 64
+
+
+ 128
+ 128
+
+ <_Selected>
+
+
+ 0
+ 1
+
+
+
+
+ &hudmain;
+
+
+ &nosystemcolor;
+
+
+
+
+
+
+
+ 0
+
+
+ &scale;
+ 15
+
+
+
+ 2
+
+
+
+
+
+ 128
+ 128
+
+
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ 0
+
+
+
+ &scale;
+ 15
+
+
+
+ 3
+
+
+
+ 5
+
+
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\implant_add.dds
+
+
+
+
+
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ &scale;
+ 15
+
+
+
+ 746
+
+
+
+
+ 45
+
+
+ 204
+ 132
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\leftslot.dds
+
+
+
+
+
+
+
+ &true;
+ UIMenuFocus
+ UIMenuOK
+
+
+
+
+
+ 15
+
+
+
+
+
+ 2
+
+ 64
+
+
+
+
+
+
+ 2
+
+ 64
+
+
+ 128
+ 128
+
+ <_Selected>
+
+
+ 0
+ 1
+
+
+
+
+ &hudmain;
+
+
+ &nosystemcolor;
+
+
+
+
+
+
+
+ 0
+
+
+ &scale;
+ 15
+
+
+
+ 2
+
+
+
+
+
+ 128
+ 128
+
+
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ 0
+
+
+
+ &scale;
+ 15
+
+
+
+ 4
+
+
+
+ 5
+
+
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\implant_add.dds
+
+
+
+
+
+
+
+
+
+
+
+ &hudmain;
+
+
+
+
+ 0
+
+
+ &scale;
+ 14
+
+
+
+ 181
+
+
+
+
+ 141
+
+
+ 676
+ 332
+
+ <_filename_1> cyberware\hud\cy\arrow_head.dds
+ <_filename_2> cyberware\hud\cy\arrow_torso.dds
+ <_filename_3> cyberware\hud\cy\arrow_leftarm.dds
+ <_filename_4> cyberware\hud\cy\arrow_rightarm.dds
+ <_filename_5> cyberware\hud\cy\arrow_leftleg.dds
+ <_filename_6> cyberware\hud\cy\arrow_rightleg.dds
+ <_filename_7> cyberware\hud\cy\arrow_head2.dds
+ <_filename_8> cyberware\hud\cy\arrow_torso2.dds
+ <_filename_9> cyberware\hud\cy\arrow_leftarm2.dds
+ <_filename_10> cyberware\hud\cy\arrow_rightarm2.dds
+ <_filename_11> cyberware\hud\cy\arrow_leftleg2.dds
+ <_filename_12> cyberware\hud\cy\arrow_rightleg2.dds
+
+
+
+
+
+
+
+
+ &nosystemcolor;
+
+
+
+
+
+ &scale;
+ 12
+
+
+
+ 423
+
+
+
+
+ 115
+
+
+ 192
+ 404
+
+ cyberware\hud\cy\cyboy_base.dds
+
+
+
+
+
+
+
+ &true;
+ UIMenuFocus
+ UIMenuOK
+
+ 13
+
+
+
+ 482
+
+
+
+ 128
+
+
+ 80
+ 100
+
+ <_Selected>
+
+
+
+
+ 1
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ 150
+
+ &scale;
+ 13
+
+
+
+
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\select_head.dds
+
+
+
+
+
+
+
+
+
+
+
+ &true;
+ UIMenuFocus
+ UIMenuOK
+
+ 13
+
+
+
+ 482
+
+
+
+ 239
+
+
+ 72
+ 102
+
+ <_Selected>
+
+
+
+
+ 2
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ 150
+
+ &scale;
+ 13
+
+
+
+
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\select_torso.dds
+
+
+
+
+
+
+
+
+
+
+
+ &true;
+ UIMenuFocus
+ UIMenuOK
+
+ 13
+
+
+
+ 437
+
+
+
+ 256
+
+
+ 36
+ 98
+
+ <_Selected>
+
+
+
+
+ 3
+
+
+
+
+
+
+ 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ 150
+
+ &scale;
+ 13
+
+
+
+
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\select_leftarm.dds
+
+
+
+
+
+
+
+
+
+
+
+ &true;
+ UIMenuFocus
+ UIMenuOK
+
+ 13
+
+
+
+ 573
+
+
+
+ 256
+
+
+ 35
+ 118
+
+ <_Selected>
+
+
+
+
+ 4
+
+
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ 150
+
+ &scale;
+ 13
+
+
+
+
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\select_rightarm.dds
+
+
+
+
+
+
+
+
+
+
+
+ &true;
+ UIMenuFocus
+ UIMenuOK
+
+ 13
+
+
+
+ 463
+
+
+
+ 367
+
+
+ 52
+ 114
+
+ <_Selected>
+
+
+
+
+ 5
+
+
+
+
+
+
+ 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ 150
+
+ &scale;
+ 13
+
+
+
+
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\select_leftleg.dds
+
+
+
+
+
+
+
+
+
+
+
+ &true;
+ UIMenuFocus
+ UIMenuOK
+
+ 13
+
+
+
+ 514
+
+
+
+ 367
+
+
+ 59
+ 116
+
+ <_Selected>
+
+
+
+
+ 6
+
+
+
+
+
+
+ 6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+ &hudmain;
+
+
+
+
+
+
+ 150
+
+ &scale;
+ 13
+
+
+
+
+
+
+
+
+ <_filename_0> Interface\Shared\solid.dds
+ <_filename_1> cyberware\hud\cy\select_rightleg.dds
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mod/Menus/prefabs/cyberware/cw_stealth.xml b/mod/Menus/prefabs/cyberware/cw_stealth.xml
new file mode 100644
index 0000000..c42703f
--- /dev/null
+++ b/mod/Menus/prefabs/cyberware/cw_stealth.xml
@@ -0,0 +1,64 @@
+
+<_CWxSFMeterEnabled> 0
+<_CWxSFMeterAmount> 0
+
+
+
+
+
+
+
+
+
+
+
+ 0.5
+
+
+
+
+ 0.1
+
+ 64
+ 64
+
+
+ &scale;
+ 0
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+ 210
+
+
+
+
+
+ <_filename_0> cyberware\hud\sf\stealthmeter0.dds
+ <_filename_1> cyberware\hud\sf\stealthmeter1.dds
+ <_filename_2> cyberware\hud\sf\stealthmeter2.dds
+ <_filename_3> cyberware\hud\sf\stealthmeter3.dds
+ <_filename_4> cyberware\hud\sf\stealthmeter4.dds
+ <_filename_5> cyberware\hud\sf\stealthmeter5.dds
+ <_filename_6> cyberware\hud\sf\stealthmeter6.dds
+ <_filename_7> cyberware\hud\sf\stealthmeter7.dds
+ <_filename_8> cyberware\hud\sf\stealthmeter8.dds
+
+
+
diff --git a/mod/Menus/prefabs/cyberware/floating_text.xml b/mod/Menus/prefabs/cyberware/floating_text.xml
new file mode 100644
index 0000000..a91bf3b
--- /dev/null
+++ b/mod/Menus/prefabs/cyberware/floating_text.xml
@@ -0,0 +1,33 @@
+ 3
+ &left;
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<_data>
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mod/Menus/prefabs/pnx/pnximplants.xml b/mod/Menus/prefabs/pnx/pnximplants.xml
new file mode 100644
index 0000000..4d36074
--- /dev/null
+++ b/mod/Menus/prefabs/pnx/pnximplants.xml
@@ -0,0 +1 @@
+<_PNxImplants> 0
diff --git a/mod/Meshes/cyberware/Effects/fxpulseexplosion01.nif b/mod/Meshes/cyberware/Effects/fxpulseexplosion01.nif
new file mode 100644
index 0000000..7efeec1
--- /dev/null
+++ b/mod/Meshes/cyberware/Effects/fxpulseexplosion01.nif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db191e39e57917f034dbb15a7292e25154aa83860d07017dcee96f0d33e0fd79
+size 26139
diff --git a/mod/Meshes/cyberware/Projectiles/mezprojectile01.nif b/mod/Meshes/cyberware/Projectiles/mezprojectile01.nif
new file mode 100644
index 0000000..e51f057
--- /dev/null
+++ b/mod/Meshes/cyberware/Projectiles/mezprojectile01.nif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:548da6fc09ba4acf12d10c10a7e4d712490a63dda179e43a98b8a3fffa89467d
+size 34551
diff --git a/mod/Meshes/cyberware/Projectiles/mezprojectile01red.nif b/mod/Meshes/cyberware/Projectiles/mezprojectile01red.nif
new file mode 100644
index 0000000..49a92dd
--- /dev/null
+++ b/mod/Meshes/cyberware/Projectiles/mezprojectile01red.nif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b6873e4dc109a7340a9f70d62b492d32fde8cac75dd6eda1eecc7e93698a10a3
+size 34634
diff --git a/mod/Meshes/cyberware/implantbox.nif b/mod/Meshes/cyberware/implantbox.nif
new file mode 100644
index 0000000..e192d67
--- /dev/null
+++ b/mod/Meshes/cyberware/implantbox.nif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c9b3105788149fe674ae309b9c0b12561c16cd51f35e1ac67a8ed8041d7a7851
+size 42733
diff --git a/mod/Meshes/cyberware/implantboxblue.nif b/mod/Meshes/cyberware/implantboxblue.nif
new file mode 100644
index 0000000..8c720ba
--- /dev/null
+++ b/mod/Meshes/cyberware/implantboxblue.nif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:266fb663a29fea8e829f5ff665a7e452f91b9ce1408f0a13d3f44000e692371e
+size 42737
diff --git a/mod/Meshes/cyberware/surgerymanual.nif b/mod/Meshes/cyberware/surgerymanual.nif
new file mode 100644
index 0000000..5b68f2d
--- /dev/null
+++ b/mod/Meshes/cyberware/surgerymanual.nif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0460a48477d91de1ce58a1b6abaaea4410a2601b801b01a7c4e06875384ee64c
+size 8666
diff --git a/mod/Sound/voice/Cyberware.esm/MaleUniqueArcade/CWxSurgeon_CWxSurgeryTopic_0000A76E_1.lip b/mod/Sound/voice/Cyberware.esm/MaleUniqueArcade/CWxSurgeon_CWxSurgeryTopic_0000A76E_1.lip
new file mode 100644
index 0000000..6a1f5ba
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/MaleUniqueArcade/CWxSurgeon_CWxSurgeryTopic_0000A76E_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7e45010f841812fc6096b90be98336f7c6b4dcd08a86455824ef7db5e433ea80
+size 1551
diff --git a/mod/Sound/voice/Cyberware.esm/MaleUniqueArcade/CWxSurgeon_CWxSurgeryTopic_0000A76E_1.ogg b/mod/Sound/voice/Cyberware.esm/MaleUniqueArcade/CWxSurgeon_CWxSurgeryTopic_0000A76E_1.ogg
new file mode 100644
index 0000000..361d2f6
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/MaleUniqueArcade/CWxSurgeon_CWxSurgeryTopic_0000A76E_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d4a45a31731a9e6986e50b57a5312f2252dd6bac00bc52780dd9d41b65c513f
+size 11728
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult06/CWxSurgeon_CWxSurgeryTopic_00003EFC_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult06/CWxSurgeon_CWxSurgeryTopic_00003EFC_1.lip
new file mode 100644
index 0000000..5508003
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult06/CWxSurgeon_CWxSurgeryTopic_00003EFC_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bcfc50c61f144fcb4716a7c50174b764334d54a621b1c413a2d70028d0ce6608
+size 557
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult06/CWxSurgeon_CWxSurgeryTopic_00003EFC_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult06/CWxSurgeon_CWxSurgeryTopic_00003EFC_1.ogg
new file mode 100644
index 0000000..0a6b94d
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult06/CWxSurgeon_CWxSurgeryTopic_00003EFC_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c83ce667f75e43ec8fb1a61cceff6e611c5c7b5cb7e9c4c354009696ef8dc86
+size 7722
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_00000AE0_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_00000AE0_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_00000AE0_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_00000AE0_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_00000AE0_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_00000AE0_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_000072D8_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_000072D8_1.lip
new file mode 100644
index 0000000..a5696d7
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_000072D8_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:98b01e5f9598fd584faa3479e090f91e78a9094e4850565111133d6fbfa40f5b
+size 3089
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_000072D8_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_000072D8_1.ogg
new file mode 100644
index 0000000..d90c8c6
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/CWxSurgeon_CWxSurgeryTopic_000072D8_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f223aa9ddead5f5c18c0092561ce10cabac2179206819c24e3fb13448c170f39
+size 18309
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15D_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15D_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15D_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15D_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15D_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15D_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15E_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15E_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15E_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15E_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15E_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15E_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15F_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15F_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15F_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15F_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15F_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A15F_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A160_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A160_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A160_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A160_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A160_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A160_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A161_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A161_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A161_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A161_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A161_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A161_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A162_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A162_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A162_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A162_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A162_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A162_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A163_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A163_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A163_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A163_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A163_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A163_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A164_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A164_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A164_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A164_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A164_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A164_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A165_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A165_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A165_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A165_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A165_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A165_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A166_1.lip b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A166_1.lip
new file mode 100644
index 0000000..9093c47
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A166_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1922bbb11418ebb386bead72b179229a4e349f2ebf1be0c989a200673ee1017
+size 1547
diff --git a/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A166_1.ogg b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A166_1.ogg
new file mode 100644
index 0000000..356d82b
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/femaleadult11/vDialogueM_vDialogueMedica_0000A166_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11c9267e2356b9683a46b3ee5e85a19b2393ba7dabbfe9008bcf94a76a86384c
+size 7486
diff --git a/mod/Sound/voice/Cyberware.esm/maleadult03/CWxSurgeon_CWxSurgeryTopic_00003EFE_1.lip b/mod/Sound/voice/Cyberware.esm/maleadult03/CWxSurgeon_CWxSurgeryTopic_00003EFE_1.lip
new file mode 100644
index 0000000..d7496e1
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/maleadult03/CWxSurgeon_CWxSurgeryTopic_00003EFE_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e5c0574868c24921aa2bb4bcecb0a260a1bd71a1e5d2d8c145b195f518cda619
+size 1452
diff --git a/mod/Sound/voice/Cyberware.esm/maleadult03/CWxSurgeon_CWxSurgeryTopic_00003EFE_1.ogg b/mod/Sound/voice/Cyberware.esm/maleadult03/CWxSurgeon_CWxSurgeryTopic_00003EFE_1.ogg
new file mode 100644
index 0000000..48f18ec
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/maleadult03/CWxSurgeon_CWxSurgeryTopic_00003EFE_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fdf6e4119cc7f0419bdf16b9a460157bcb99a9ea02a626e91091f0ff0ecf6fce
+size 9239
diff --git a/mod/Sound/voice/Cyberware.esm/maleold02/CWxSurgeon_CWxSurgeryTopic_0000A750_1.lip b/mod/Sound/voice/Cyberware.esm/maleold02/CWxSurgeon_CWxSurgeryTopic_0000A750_1.lip
new file mode 100644
index 0000000..85101da
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/maleold02/CWxSurgeon_CWxSurgeryTopic_0000A750_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d64677f233190f9763eb07da0fe433031907a9720c1a341dcd8a1812d2dd0d2
+size 1561
diff --git a/mod/Sound/voice/Cyberware.esm/maleold02/CWxSurgeon_CWxSurgeryTopic_0000A750_1.ogg b/mod/Sound/voice/Cyberware.esm/maleold02/CWxSurgeon_CWxSurgeryTopic_0000A750_1.ogg
new file mode 100644
index 0000000..a23b4e2
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/maleold02/CWxSurgeon_CWxSurgeryTopic_0000A750_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:52bcfe3bec42d2d3529ec36353af7f10c854a1f56ee6566e17865256772934d3
+size 8004
diff --git a/mod/Sound/voice/Cyberware.esm/maleuniquedocmitchell/CWxSurgeon_CWxSurgeryTopic_00003EF4_1.lip b/mod/Sound/voice/Cyberware.esm/maleuniquedocmitchell/CWxSurgeon_CWxSurgeryTopic_00003EF4_1.lip
new file mode 100644
index 0000000..45accf5
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/maleuniquedocmitchell/CWxSurgeon_CWxSurgeryTopic_00003EF4_1.lip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0cf044cea19f5e6b2f6464476c790cd92d466c586d0264605fb075e54da3843d
+size 973
diff --git a/mod/Sound/voice/Cyberware.esm/maleuniquedocmitchell/CWxSurgeon_CWxSurgeryTopic_00003EF4_1.ogg b/mod/Sound/voice/Cyberware.esm/maleuniquedocmitchell/CWxSurgeon_CWxSurgeryTopic_00003EF4_1.ogg
new file mode 100644
index 0000000..8dde961
--- /dev/null
+++ b/mod/Sound/voice/Cyberware.esm/maleuniquedocmitchell/CWxSurgeon_CWxSurgeryTopic_00003EF4_1.ogg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:67cdf2f65e380e30fc86a265faaee90d1d91272460719417c74a31375cb0e62c
+size 12025
diff --git a/mod/Textures/cyberware/hud/cy/arrow_head.dds b/mod/Textures/cyberware/hud/cy/arrow_head.dds
new file mode 100644
index 0000000..ff20924
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_head.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5da99c553bd3f3a27cdb1112ac5b26ed5a060c97a093839079128e4a32fb17fb
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_head2.dds b/mod/Textures/cyberware/hud/cy/arrow_head2.dds
new file mode 100644
index 0000000..63341f8
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_head2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3ca366dc2ec5ba4d4537691659e36aa49b0169c1aba31a1acff9bd317f6ed048
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_leftarm.dds b/mod/Textures/cyberware/hud/cy/arrow_leftarm.dds
new file mode 100644
index 0000000..795f95f
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_leftarm.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5470ecb1f241dd7dc4383b3837446155f1c253e054fc15153eb627c514a30441
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_leftarm2.dds b/mod/Textures/cyberware/hud/cy/arrow_leftarm2.dds
new file mode 100644
index 0000000..a1af689
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_leftarm2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:01e6a22fd61c13dbc234ec648a2006a397ab9309829ba43000d982a7ce88bcdf
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_leftleg.dds b/mod/Textures/cyberware/hud/cy/arrow_leftleg.dds
new file mode 100644
index 0000000..01d720a
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_leftleg.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:34444594fa78cd64db2c5506b6d8ebf53f96ce05ae866a687a3777b0f441e3ef
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_leftleg2.dds b/mod/Textures/cyberware/hud/cy/arrow_leftleg2.dds
new file mode 100644
index 0000000..e9f0792
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_leftleg2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9ebf13a11753e9c2f05a1547a66bc982d7890da8bc07b2b72af2c78eeb82bf40
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_rightarm.dds b/mod/Textures/cyberware/hud/cy/arrow_rightarm.dds
new file mode 100644
index 0000000..4d40e91
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_rightarm.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eedf567f8a964b21d94837507730cc22a6fdb471c0078043938f4d744c05e9c8
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_rightarm2.dds b/mod/Textures/cyberware/hud/cy/arrow_rightarm2.dds
new file mode 100644
index 0000000..e74912f
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_rightarm2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e41c57a5c231633f02516c94e82ec5ea2657e747fe152123bac59be4826964aa
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_rightleg.dds b/mod/Textures/cyberware/hud/cy/arrow_rightleg.dds
new file mode 100644
index 0000000..b1a53a2
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_rightleg.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:99d8561302432ebdcb0634ea47f7ef6588ba71fe0815c4401d291564aeca1535
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_rightleg2.dds b/mod/Textures/cyberware/hud/cy/arrow_rightleg2.dds
new file mode 100644
index 0000000..f664969
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_rightleg2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b7fa9dec50ccbed80bb663cde8a56d07439c11f0af1b8a0d25bae09f24a6b2d
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_torso.dds b/mod/Textures/cyberware/hud/cy/arrow_torso.dds
new file mode 100644
index 0000000..41a13a6
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_torso.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c244f6c9dc3f6a69f68a089c697ddb4ff672433d07d904604df52f8422de1c1c
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/arrow_torso2.dds b/mod/Textures/cyberware/hud/cy/arrow_torso2.dds
new file mode 100644
index 0000000..ca27223
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/arrow_torso2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:368bd1d44146a70ddb373d3df99249755b315fda9f2814b5a25ae746ea18ee6e
+size 224560
diff --git a/mod/Textures/cyberware/hud/cy/background.dds b/mod/Textures/cyberware/hud/cy/background.dds
new file mode 100644
index 0000000..58c31bb
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/background.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2b72bbbcdc2d926b6cbfe8e1766a65c0b8918251f069186d3611b46679fafc4
+size 655488
diff --git a/mod/Textures/cyberware/hud/cy/cyboy.dds b/mod/Textures/cyberware/hud/cy/cyboy.dds
new file mode 100644
index 0000000..afb1274
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/cyboy.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:002d4af05d2e64575dc5685fd91a325997fea2b8561cfefe40a0a0ca7e06f946
+size 589952
diff --git a/mod/Textures/cyberware/hud/cy/cyboy_base.dds b/mod/Textures/cyberware/hud/cy/cyboy_base.dds
new file mode 100644
index 0000000..5cc4d63
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/cyboy_base.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:807d9b650381cf8265804634c185119301aaab7ca22f39876440e5c0345f0bf9
+size 77696
diff --git a/mod/Textures/cyberware/hud/cy/cyboy_lines.dds b/mod/Textures/cyberware/hud/cy/cyboy_lines.dds
new file mode 100644
index 0000000..1a44511
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/cyboy_lines.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:10357b66f1b85e6529684234b6878b4f022f97df283b8ccad8b96274e33a7234
+size 589952
diff --git a/mod/Textures/cyberware/hud/cy/implant_add.dds b/mod/Textures/cyberware/hud/cy/implant_add.dds
new file mode 100644
index 0000000..bad85c2
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/implant_add.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c38d2807ae67cd57afff7725f8a145364d37de0377fdf6a88f4886b1b37c6c58
+size 16512
diff --git a/mod/Textures/cyberware/hud/cy/leftslot.dds b/mod/Textures/cyberware/hud/cy/leftslot.dds
new file mode 100644
index 0000000..bb9a2ec
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/leftslot.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e431124a3dfd3dcf6f841399a5091fc3b3f085e11ba4fe45d43e72e058413c19
+size 27056
diff --git a/mod/Textures/cyberware/hud/cy/nevada.dds b/mod/Textures/cyberware/hud/cy/nevada.dds
new file mode 100644
index 0000000..3fe8c18
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/nevada.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0e49cbf37975db03514433b29968ef61e37fcbc92ab758014203f61adf76ab68
+size 16176
diff --git a/mod/Textures/cyberware/hud/cy/rightslot.dds b/mod/Textures/cyberware/hud/cy/rightslot.dds
new file mode 100644
index 0000000..5ab5daa
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/rightslot.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac592e922171d35fa65216109834788f5747ff2cfee964a214f3491027d85d6d
+size 27056
diff --git a/mod/Textures/cyberware/hud/cy/select_head.dds b/mod/Textures/cyberware/hud/cy/select_head.dds
new file mode 100644
index 0000000..b8194a7
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/select_head.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:293ce7a4e2eac4329949b33b879bcbd54f463c54b1858453832a7b24bd7fe597
+size 77696
diff --git a/mod/Textures/cyberware/hud/cy/select_leftarm.dds b/mod/Textures/cyberware/hud/cy/select_leftarm.dds
new file mode 100644
index 0000000..d0578d0
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/select_leftarm.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fbc832f0b65fb61eb9b155a8af6e2388715cb81d40351debebb9aea2523f1c11
+size 77696
diff --git a/mod/Textures/cyberware/hud/cy/select_leftleg.dds b/mod/Textures/cyberware/hud/cy/select_leftleg.dds
new file mode 100644
index 0000000..ceffc6f
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/select_leftleg.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e768420cfa3c351d5b7ee50fd5b84c71517300ca28b669883044c6a2b564384
+size 77696
diff --git a/mod/Textures/cyberware/hud/cy/select_rightarm.dds b/mod/Textures/cyberware/hud/cy/select_rightarm.dds
new file mode 100644
index 0000000..b475f35
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/select_rightarm.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7b81a0c794d8178bb346dfbe6d2a57bde251fbf535265000196aad7d9f65371e
+size 77696
diff --git a/mod/Textures/cyberware/hud/cy/select_rightleg.dds b/mod/Textures/cyberware/hud/cy/select_rightleg.dds
new file mode 100644
index 0000000..c29e215
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/select_rightleg.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44663dd92d8ea7692f4b84dc5ebd537f40d3ffd82e3d8b508ea4f7462a593dfb
+size 77696
diff --git a/mod/Textures/cyberware/hud/cy/select_torso.dds b/mod/Textures/cyberware/hud/cy/select_torso.dds
new file mode 100644
index 0000000..190717b
--- /dev/null
+++ b/mod/Textures/cyberware/hud/cy/select_torso.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:36b034b333f3145d43ef0160f0d5db5aa3ec15c76c90e065ec09724a91b81f32
+size 77696
diff --git a/mod/Textures/cyberware/hud/grain/grain1.dds b/mod/Textures/cyberware/hud/grain/grain1.dds
new file mode 100644
index 0000000..bc649ce
--- /dev/null
+++ b/mod/Textures/cyberware/hud/grain/grain1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:80d2caa370b564c34c4bbdf0a9177bee2af6aad325d0c14518f41add5f6ec7ea
+size 1024128
diff --git a/mod/Textures/cyberware/hud/grain/grain2.dds b/mod/Textures/cyberware/hud/grain/grain2.dds
new file mode 100644
index 0000000..adc10e9
--- /dev/null
+++ b/mod/Textures/cyberware/hud/grain/grain2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c599214fcba8c775dc30bb683e4216b4d1cd8d889f74420fdd08bce3cb46ee9b
+size 1024128
diff --git a/mod/Textures/cyberware/hud/grain/grain3.dds b/mod/Textures/cyberware/hud/grain/grain3.dds
new file mode 100644
index 0000000..bfe5599
--- /dev/null
+++ b/mod/Textures/cyberware/hud/grain/grain3.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e170908743e9fd3ec0aff0e41917bb14e7a09727555610ce234376ffc4a407e2
+size 1024128
diff --git a/mod/Textures/cyberware/hud/grain/grain4.dds b/mod/Textures/cyberware/hud/grain/grain4.dds
new file mode 100644
index 0000000..41c1310
--- /dev/null
+++ b/mod/Textures/cyberware/hud/grain/grain4.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7bb919dcb1e35adf0c58234cfe00b21fe08fac37c1daa26342b6ad4ea6c74f01
+size 1024128
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_arm.dds b/mod/Textures/cyberware/hud/panel/implant_left_arm.dds
new file mode 100644
index 0000000..10dc593
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_arm.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20003601385927e8be93bad7924b330413b24719bdcd26160f49a5a8e7663a36
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_armor.dds b/mod/Textures/cyberware/hud/panel/implant_left_armor.dds
new file mode 100644
index 0000000..5f7143d
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_armor.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a73138a73ab21d792f98da32afda1670245d3ba57a058419841a296fcd48c84a
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_bugs.dds b/mod/Textures/cyberware/hud/panel/implant_left_bugs.dds
new file mode 100644
index 0000000..03a15a4
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_bugs.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6aded0b535869feb15061febb010ddaf3baeab78b47615a7cfd27e39ecc10845
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_crouch.dds b/mod/Textures/cyberware/hud/panel/implant_left_crouch.dds
new file mode 100644
index 0000000..9a0f222
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_crouch.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:614cd133f2288e4a4d9b766ac11483e9261aec612da751698453db1a71431e2d
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_default.dds b/mod/Textures/cyberware/hud/panel/implant_left_default.dds
new file mode 100644
index 0000000..d4b2174
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_default.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:27c71aafb100b882317baede01e997d2371c71baf19b2e8773ad986e9ad7b81f
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_emp.dds b/mod/Textures/cyberware/hud/panel/implant_left_emp.dds
new file mode 100644
index 0000000..ccd15da
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_emp.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:41e889709c0e039d15f9cb6a4501061b28962427a9e64c7288a21bca8eadcce8
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_eye.dds b/mod/Textures/cyberware/hud/panel/implant_left_eye.dds
new file mode 100644
index 0000000..68c54ed
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_eye.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6fae159e47efb42e7f765d9346f8eafed0c6b0c006a3cf2045f2adfee0e851db
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_foodhp.dds b/mod/Textures/cyberware/hud/panel/implant_left_foodhp.dds
new file mode 100644
index 0000000..8dadf2b
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_foodhp.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9c60be0ee06804d5c492864fa1df6fd82b97c139f0b7825de0c61fead879b1d
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_heart.dds b/mod/Textures/cyberware/hud/panel/implant_left_heart.dds
new file mode 100644
index 0000000..42527c9
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_heart.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:291c515001869291bbff8abbabd8e8c8256a1cfbb855c7aaa6df7d473e8214ef
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_leg.dds b/mod/Textures/cyberware/hud/panel/implant_left_leg.dds
new file mode 100644
index 0000000..dbab8e2
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_leg.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c0db7694d26dd6700d7836842c4ac718b44a6cc49b93d326ea0745ce18049921
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_lung.dds b/mod/Textures/cyberware/hud/panel/implant_left_lung.dds
new file mode 100644
index 0000000..7ccc4f3
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_lung.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1af4ceda44f7a60cb9c2b00d2f0505232f1c9c85884723555ede35f4865e4647
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_microwave.dds b/mod/Textures/cyberware/hud/panel/implant_left_microwave.dds
new file mode 100644
index 0000000..912941c
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_microwave.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1a86ed18ab500637e64d4f9b20d6b359580d5f69b5d4d8b1e71e3092cc1d6f1d
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_nail.dds b/mod/Textures/cyberware/hud/panel/implant_left_nail.dds
new file mode 100644
index 0000000..1fb2c44
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_nail.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a4974f375e15e79d7e55c0c219ad6c448f4be0bf7636e9461beeba883dc61c42
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_norads.dds b/mod/Textures/cyberware/hud/panel/implant_left_norads.dds
new file mode 100644
index 0000000..da013e7
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_norads.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc06eac78257fe2f017c8afed9c1524fde1dba474574c78298d5c63ddbd06727
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_phoenix.dds b/mod/Textures/cyberware/hud/panel/implant_left_phoenix.dds
new file mode 100644
index 0000000..01b2aea
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_phoenix.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b181957192cc56bb627e6165ffab56c2bd7573c6cc0b0de86ac3f95009c126cb
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_scanner.dds b/mod/Textures/cyberware/hud/panel/implant_left_scanner.dds
new file mode 100644
index 0000000..bfd76cd
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_scanner.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3bc568585d85fa3dd03475bf7ca0c1e10587da3302d524366904e798e1c8ea94
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_skill.dds b/mod/Textures/cyberware/hud/panel/implant_left_skill.dds
new file mode 100644
index 0000000..7bb56e2
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_skill.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e65bceb1860ae31dababf7f19d5f1e16858c9e9dcea263c3477ba59f7e4f4591
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_stat.dds b/mod/Textures/cyberware/hud/panel/implant_left_stat.dds
new file mode 100644
index 0000000..7b09f40
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_stat.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5dd50e4f8df2d703f4067382cfeae13118f11e0a560e29ce25c1c80ece42e115
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_stealth.dds b/mod/Textures/cyberware/hud/panel/implant_left_stealth.dds
new file mode 100644
index 0000000..73c2961
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_stealth.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0a7eacba8057d324d15eaf7ef09f4564c1259ac6cc557fac36eebe6087c9e242
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_synapses.dds b/mod/Textures/cyberware/hud/panel/implant_left_synapses.dds
new file mode 100644
index 0000000..d4b2174
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_synapses.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:27c71aafb100b882317baede01e997d2371c71baf19b2e8773ad986e9ad7b81f
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_turbo.dds b/mod/Textures/cyberware/hud/panel/implant_left_turbo.dds
new file mode 100644
index 0000000..f4321f6
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_turbo.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2da603e73b025bbc0e759224a230378468319c3242239c2dac67a4dde72f0e6
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_weave.dds b/mod/Textures/cyberware/hud/panel/implant_left_weave.dds
new file mode 100644
index 0000000..9a2bc66
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_weave.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2725e0e5a4682e808f98a6c5e0847a303edb2558142b5d7ff573b12a56ef2a65
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_left_weight.dds b/mod/Textures/cyberware/hud/panel/implant_left_weight.dds
new file mode 100644
index 0000000..6a6e7a2
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_left_weight.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1f18acf1a5e5c1379ed532326f515dca36742e8603322405c4e0a85c48f6550
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_arm.dds b/mod/Textures/cyberware/hud/panel/implant_right_arm.dds
new file mode 100644
index 0000000..a24bf59
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_arm.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec029c14c31b7f8e05bae24fda0406a718d16d2025beb903308c3ed75033777b
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_armor.dds b/mod/Textures/cyberware/hud/panel/implant_right_armor.dds
new file mode 100644
index 0000000..a0c0adb
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_armor.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b90b850f1fe39d727629a5d532a25258dd3b73e3aa52649a4ba09362579fce9
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_bugs.dds b/mod/Textures/cyberware/hud/panel/implant_right_bugs.dds
new file mode 100644
index 0000000..e778c1a
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_bugs.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1911daf812e1385961f432d6205d838777c51d3b75c695825db56a38779825cd
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_crouch.dds b/mod/Textures/cyberware/hud/panel/implant_right_crouch.dds
new file mode 100644
index 0000000..9ae54a4
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_crouch.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6a8dfe3859864543ffa6800d60349e8e86b815318454024589d4bb4bbe4372a5
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_default.dds b/mod/Textures/cyberware/hud/panel/implant_right_default.dds
new file mode 100644
index 0000000..57e0e0e
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_default.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:87b26e8945fa8120d12d2f8175fe7ee28d77eabc9e772ec8f58450a35d7c2a90
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_emp.dds b/mod/Textures/cyberware/hud/panel/implant_right_emp.dds
new file mode 100644
index 0000000..fc524d7
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_emp.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6609d49116f40395e57eeadcd2337f2984cc9aea2c4d466efbff768d8f9c8724
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_eye.dds b/mod/Textures/cyberware/hud/panel/implant_right_eye.dds
new file mode 100644
index 0000000..4ccbbdc
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_eye.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76f825f277ffdc35089b31c878372cf281e85501d2d13243c67bf6154cbe18fb
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_foodhp.dds b/mod/Textures/cyberware/hud/panel/implant_right_foodhp.dds
new file mode 100644
index 0000000..131b97e
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_foodhp.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53192953540f5b6b3b53d4f16d5d555490ed0f795ac191e2d23e3eed164cc282
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_heart.dds b/mod/Textures/cyberware/hud/panel/implant_right_heart.dds
new file mode 100644
index 0000000..0f1195a
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_heart.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d76cb4885dc41c11320b7cbe275eb3fcf4bc522fdec2211fed185cea50f69e66
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_leg.dds b/mod/Textures/cyberware/hud/panel/implant_right_leg.dds
new file mode 100644
index 0000000..a860239
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_leg.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cda4f7ed68fbc38798d36cf495d68df5b2c942491e7905230d221a3b5b731843
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_lung.dds b/mod/Textures/cyberware/hud/panel/implant_right_lung.dds
new file mode 100644
index 0000000..bc2fa1b
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_lung.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1809ce3a013cd4d8416583d7ea2c2bdb9e03868f363384c4d3e790da9ee170f9
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_microwave.dds b/mod/Textures/cyberware/hud/panel/implant_right_microwave.dds
new file mode 100644
index 0000000..73d9f5d
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_microwave.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6396db2b01bd93ad47fdc2bc4a3a5e4001f4047e5d7a2834713b42508bcfea53
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_nail.dds b/mod/Textures/cyberware/hud/panel/implant_right_nail.dds
new file mode 100644
index 0000000..0ab3bf3
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_nail.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:715fc0489ecb926367af045061f70fba1df801048b66358056aaac64b03e9db9
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_norads.dds b/mod/Textures/cyberware/hud/panel/implant_right_norads.dds
new file mode 100644
index 0000000..ee77889
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_norads.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:65de9959acd5c9bf9c0eb21a4798879fcf35bf8b02268317dc2c9828e3ec951c
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_phoenix.dds b/mod/Textures/cyberware/hud/panel/implant_right_phoenix.dds
new file mode 100644
index 0000000..784da0d
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_phoenix.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3003b37db67db146b5632c4f6ab755e962fb9dcf4f193d40198dd5855f9f131f
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_scanner.dds b/mod/Textures/cyberware/hud/panel/implant_right_scanner.dds
new file mode 100644
index 0000000..9a22815
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_scanner.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f933eb686946114a25d1650bc055b813055d1b7b757fbc0c45e22713eecf9c4c
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_skill.dds b/mod/Textures/cyberware/hud/panel/implant_right_skill.dds
new file mode 100644
index 0000000..5786809
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_skill.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cfbedd1a5a2c8e3fecd5b12fc6024a5deea5bf63a7b4b49160c6b8bcade3e52b
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_stat.dds b/mod/Textures/cyberware/hud/panel/implant_right_stat.dds
new file mode 100644
index 0000000..93debf1
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_stat.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c885e6ff768a310d59857da55b3ee3502a73a1ea561b56a3e09c9561d08c0dd3
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_stealth.dds b/mod/Textures/cyberware/hud/panel/implant_right_stealth.dds
new file mode 100644
index 0000000..6bc7e0b
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_stealth.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b1489175f45782a21c445c2d19fc17945279a2f1e1ecfe5919664fa791d6035
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_synapses.dds b/mod/Textures/cyberware/hud/panel/implant_right_synapses.dds
new file mode 100644
index 0000000..57e0e0e
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_synapses.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:87b26e8945fa8120d12d2f8175fe7ee28d77eabc9e772ec8f58450a35d7c2a90
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_turbo.dds b/mod/Textures/cyberware/hud/panel/implant_right_turbo.dds
new file mode 100644
index 0000000..e31c006
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_turbo.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04f79ad8e846f05957aad72d777d858e9993c23309626604e60cad18e6eba1c4
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_weave.dds b/mod/Textures/cyberware/hud/panel/implant_right_weave.dds
new file mode 100644
index 0000000..ce97ee8
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_weave.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b89a4aa3344e6ab8f241cdf049057149dd718a0439d21e7d2715e96b2c51eda2
+size 16512
diff --git a/mod/Textures/cyberware/hud/panel/implant_right_weight.dds b/mod/Textures/cyberware/hud/panel/implant_right_weight.dds
new file mode 100644
index 0000000..92d6a33
--- /dev/null
+++ b/mod/Textures/cyberware/hud/panel/implant_right_weight.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:81c1bde1657c8496b6cf2fa6cd05944c96dd8adeda5d4e1a9f4300ee2e80347e
+size 16512
diff --git a/mod/Textures/cyberware/hud/scan/ScannerBoy_base.dds b/mod/Textures/cyberware/hud/scan/ScannerBoy_base.dds
new file mode 100644
index 0000000..805f222
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/ScannerBoy_base.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9332e1dbcb42be75966c4a4194a6566033abe5f102255090ae5433bf71f4617e
+size 249728
diff --git a/mod/Textures/cyberware/hud/scan/ScannerBoy_head.dds b/mod/Textures/cyberware/hud/scan/ScannerBoy_head.dds
new file mode 100644
index 0000000..e790f73
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/ScannerBoy_head.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:87f6b8e2db3de87b24f5e52c735fa55407999bd906a728e3bf80d36364a94b85
+size 249728
diff --git a/mod/Textures/cyberware/hud/scan/ScannerBoy_leftarm.dds b/mod/Textures/cyberware/hud/scan/ScannerBoy_leftarm.dds
new file mode 100644
index 0000000..aba5cd9
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/ScannerBoy_leftarm.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:437e2011c5d6aaeb6294671fef6240fdce2d8632d7c893fa1b43793a6cc71144
+size 249728
diff --git a/mod/Textures/cyberware/hud/scan/ScannerBoy_leftleg.dds b/mod/Textures/cyberware/hud/scan/ScannerBoy_leftleg.dds
new file mode 100644
index 0000000..7eca293
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/ScannerBoy_leftleg.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4afc7041c05d4ca3d88f14490612ccee78eb5c36c302a2fb5270fe252607e06f
+size 249728
diff --git a/mod/Textures/cyberware/hud/scan/ScannerBoy_rightarm.dds b/mod/Textures/cyberware/hud/scan/ScannerBoy_rightarm.dds
new file mode 100644
index 0000000..1a4e9bb
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/ScannerBoy_rightarm.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a2654da67a21f072e3f30378ee40ef198a992d4b21a05147688501a64dc9afde
+size 249728
diff --git a/mod/Textures/cyberware/hud/scan/ScannerBoy_rightleg.dds b/mod/Textures/cyberware/hud/scan/ScannerBoy_rightleg.dds
new file mode 100644
index 0000000..3c74037
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/ScannerBoy_rightleg.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0bdb14e3f6384e1e4931ad14f7230d82909b14367813cbb2afc951586bb838d5
+size 249728
diff --git a/mod/Textures/cyberware/hud/scan/ScannerBoy_torso.dds b/mod/Textures/cyberware/hud/scan/ScannerBoy_torso.dds
new file mode 100644
index 0000000..201ea37
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/ScannerBoy_torso.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e9156b77d02ec11dc3fbda72161c8ffc1a7311e10bf86e03ce14b5ad46a28263
+size 249728
diff --git a/mod/Textures/cyberware/hud/scan/healthseperator.dds b/mod/Textures/cyberware/hud/scan/healthseperator.dds
new file mode 100644
index 0000000..08163ca
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/healthseperator.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:60d9baabfd3e0f9443d53ac0e780820866e8e3942d7242876f69507cf3dc4f35
+size 12672
diff --git a/mod/Textures/cyberware/hud/scan/scannerboy.dds b/mod/Textures/cyberware/hud/scan/scannerboy.dds
new file mode 100644
index 0000000..daf17bc
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/scannerboy.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32991cb918048b259cc990bbb5b4a62da08390dd4ee27f605b262e68bb834327
+size 110528
diff --git a/mod/Textures/cyberware/hud/scan/scannerbracket1.dds b/mod/Textures/cyberware/hud/scan/scannerbracket1.dds
new file mode 100644
index 0000000..eb21648
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/scannerbracket1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:83efa073380da3fbea3860b3f682d9523f77825cc60043b2b6e17b1796ff5980
+size 65664
diff --git a/mod/Textures/cyberware/hud/scan/scannerbracket2.dds b/mod/Textures/cyberware/hud/scan/scannerbracket2.dds
new file mode 100644
index 0000000..373c70a
--- /dev/null
+++ b/mod/Textures/cyberware/hud/scan/scannerbracket2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:483358213fc7aa7840b6874aba151ec5f4ead6d06cac87560961f68a118c583e
+size 196736
diff --git a/mod/Textures/cyberware/hud/sf/stealthmeter0.dds b/mod/Textures/cyberware/hud/sf/stealthmeter0.dds
new file mode 100644
index 0000000..964c0cc
--- /dev/null
+++ b/mod/Textures/cyberware/hud/sf/stealthmeter0.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7070a13437fcf34d01a6871251e4bab0841f601e51744caa58695349aa94c98e
+size 16512
diff --git a/mod/Textures/cyberware/hud/sf/stealthmeter1.dds b/mod/Textures/cyberware/hud/sf/stealthmeter1.dds
new file mode 100644
index 0000000..00b95ec
--- /dev/null
+++ b/mod/Textures/cyberware/hud/sf/stealthmeter1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1112b0c05be6eea6ac0a6516bffda5fb45f4fdf27fda7bf3b95d9724803af9df
+size 16512
diff --git a/mod/Textures/cyberware/hud/sf/stealthmeter2.dds b/mod/Textures/cyberware/hud/sf/stealthmeter2.dds
new file mode 100644
index 0000000..05656b6
--- /dev/null
+++ b/mod/Textures/cyberware/hud/sf/stealthmeter2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1acec952102b0908801c6d4aa9ac9019d50b6cf51579c0626c10040f774e3da8
+size 16512
diff --git a/mod/Textures/cyberware/hud/sf/stealthmeter3.dds b/mod/Textures/cyberware/hud/sf/stealthmeter3.dds
new file mode 100644
index 0000000..497ff21
--- /dev/null
+++ b/mod/Textures/cyberware/hud/sf/stealthmeter3.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cc438fef50913be1f43f6a1d950e911dff4df32d00808b975d2f596b78d4f61c
+size 16512
diff --git a/mod/Textures/cyberware/hud/sf/stealthmeter4.dds b/mod/Textures/cyberware/hud/sf/stealthmeter4.dds
new file mode 100644
index 0000000..492f4dc
--- /dev/null
+++ b/mod/Textures/cyberware/hud/sf/stealthmeter4.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9762514690f21e977db8e10fcc1aace9da77fc1c5ae2c053239ace00953ac30d
+size 16512
diff --git a/mod/Textures/cyberware/hud/sf/stealthmeter5.dds b/mod/Textures/cyberware/hud/sf/stealthmeter5.dds
new file mode 100644
index 0000000..a852cfd
--- /dev/null
+++ b/mod/Textures/cyberware/hud/sf/stealthmeter5.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d9335a58db924225a712f9404cfa9cd84ebe7ba946ef598f2068f0c409885fe
+size 16512
diff --git a/mod/Textures/cyberware/hud/sf/stealthmeter6.dds b/mod/Textures/cyberware/hud/sf/stealthmeter6.dds
new file mode 100644
index 0000000..4c731af
--- /dev/null
+++ b/mod/Textures/cyberware/hud/sf/stealthmeter6.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f24a81d6c92fe9d3b9e50bd93f0b38be4f365e2a48c4ce278ea6456e65512fcc
+size 16512
diff --git a/mod/Textures/cyberware/hud/sf/stealthmeter7.dds b/mod/Textures/cyberware/hud/sf/stealthmeter7.dds
new file mode 100644
index 0000000..fec0359
--- /dev/null
+++ b/mod/Textures/cyberware/hud/sf/stealthmeter7.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:34f8c224c842a7fa2c31308189b21edca6a85d9a32a5ee7b784197626dd7152b
+size 16512
diff --git a/mod/Textures/cyberware/hud/sf/stealthmeter8.dds b/mod/Textures/cyberware/hud/sf/stealthmeter8.dds
new file mode 100644
index 0000000..784dc1e
--- /dev/null
+++ b/mod/Textures/cyberware/hud/sf/stealthmeter8.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:10e80c00fc47e632b009ce7af6dc7a27f8791337e17efea15dcbd8e2974c55bb
+size 16512
diff --git a/mod/Textures/cyberware/icons/Pipboyimages/items/implantbook.dds b/mod/Textures/cyberware/icons/Pipboyimages/items/implantbook.dds
new file mode 100644
index 0000000..a2e91a2
--- /dev/null
+++ b/mod/Textures/cyberware/icons/Pipboyimages/items/implantbook.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fb121aea47f2813b189bfd41fde23d3e9bd7431bff1e567accdf46c930efc581
+size 65664
diff --git a/mod/Textures/cyberware/icons/Pipboyimages/items/implantbox.dds b/mod/Textures/cyberware/icons/Pipboyimages/items/implantbox.dds
new file mode 100644
index 0000000..914b093
--- /dev/null
+++ b/mod/Textures/cyberware/icons/Pipboyimages/items/implantbox.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04fa19fa3f4db2b61b5b198eeaf8cf31352e8fc76a6726fb95d78397af1ea854
+size 65664
diff --git a/mod/Textures/cyberware/icons/Pipboyimages/items/implantboxblue.dds b/mod/Textures/cyberware/icons/Pipboyimages/items/implantboxblue.dds
new file mode 100644
index 0000000..b62973f
--- /dev/null
+++ b/mod/Textures/cyberware/icons/Pipboyimages/items/implantboxblue.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:23f53241e7f29d12a095249c7a58ab874d39eb70f5ef2d42dd6824c663d9c2ef
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_PerkEMPBlast.dds b/mod/Textures/cyberware/icons/perks/PN-CW_PerkEMPBlast.dds
new file mode 100644
index 0000000..0c41d1c
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_PerkEMPBlast.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:58cd908e2fdd4928b6ead32d7cfb57e68e9388f53c948c80fb483eb5644fdd24
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantC13.dds b/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantC13.dds
new file mode 100644
index 0000000..146969e
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantC13.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3f730aff715d1c227a5c0c70cbd8a53dfdc05ffb5031ce9271fc645e4f888a68
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantGRX.dds b/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantGRX.dds
new file mode 100644
index 0000000..84ad84b
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantGRX.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5ecff1647cabd6b5ecff61a4a22ada79de5c053caed22a6bb3397856102a0704
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantM5.dds b/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantM5.dds
new file mode 100644
index 0000000..ab50abe
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantM5.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f1522bf4765d993c2c6429e20124d2efe5cf358de7324ee79ed3c542d9ff7f01
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantY2.dds b/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantY2.dds
new file mode 100644
index 0000000..d25eda6
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantY2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:08528b6fbd5fa50f8e9a38eff147e2546164674831622ba4b16babb8fce67287
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantY7.dds b/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantY7.dds
new file mode 100644
index 0000000..c18499c
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_PerkImplantY7.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20537c495b3a05d2c666391ca8334f107fa4e580942457d580daba33e2c91230
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_PerkMicroBlast.dds b/mod/Textures/cyberware/icons/perks/PN-CW_PerkMicroBlast.dds
new file mode 100644
index 0000000..6ff6f4e
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_PerkMicroBlast.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:161f4619a010d76df00eef83f13a66522260d7c9a97824c537a813dd690025ea
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_Perk_S1Brainless.dds b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_S1Brainless.dds
new file mode 100644
index 0000000..20f218c
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_S1Brainless.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86c8ae070775cad4e50ce20c2cfa5e8e9713fec8e05375932a3c404ef1d057a2
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_Perk_S2Heartless.dds b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_S2Heartless.dds
new file mode 100644
index 0000000..5928d58
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_S2Heartless.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e4298995cf80f941e5d8b10f04363f7b563dbf6bb9408e1705da1d7841489b8
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_Perk_S3Spineless.dds b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_S3Spineless.dds
new file mode 100644
index 0000000..13e0688
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_S3Spineless.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1ebce744658e97678048bab31bb61214663398974cf6fca81b07d5fd1af32a7a
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_Perk_T1BigBrained.dds b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_T1BigBrained.dds
new file mode 100644
index 0000000..22e0c8c
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_T1BigBrained.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c2c48ec625f5aa1a3f33c5111bf52607482fa7790e85a2418c91a3234415261d
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_Perk_T2CardiacArrest.dds b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_T2CardiacArrest.dds
new file mode 100644
index 0000000..5aa713a
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_T2CardiacArrest.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0f03c074b9e2997591d885909bbb656bbaeb19beb4cca15388b71913e6a337e1
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/PN-CW_Perk_T3ReinforcedSpine.dds b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_T3ReinforcedSpine.dds
new file mode 100644
index 0000000..e8715bf
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/PN-CW_Perk_T3ReinforcedSpine.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e1d0333cf1d41a424185080f0f37a5104e306dfb3e9550fac0797960ede50d0
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/implant_perk_matrix1.dds b/mod/Textures/cyberware/icons/perks/implant_perk_matrix1.dds
new file mode 100644
index 0000000..ada7db3
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/implant_perk_matrix1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d37a1556edc68fedef8d31018e319a9a1238a12b735fa423fb8dacf4d9e091bb
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/implant_perk_matrix2.dds b/mod/Textures/cyberware/icons/perks/implant_perk_matrix2.dds
new file mode 100644
index 0000000..f395c16
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/implant_perk_matrix2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1c02fa895ea2cd2d6b97f9131afcb238434bc03fd36c8c6ad4896a0a0bd3694f
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/implant_perk_sprint.dds b/mod/Textures/cyberware/icons/perks/implant_perk_sprint.dds
new file mode 100644
index 0000000..47d9920
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/implant_perk_sprint.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7aac544e276f97d17266b6754275a3715923e94df0e0fd1d57cb80aabc3f3a22
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugArm.dds b/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugArm.dds
new file mode 100644
index 0000000..1c480ac
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugArm.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:91e185e9128606ab371581b621ac6d39c10aac841443113283cf44baab793737
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugChest.dds b/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugChest.dds
new file mode 100644
index 0000000..fd82231
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugChest.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e04da2b3a8390bb32b8f52dd8ae1e65c26f1ee113911de41d93eba2c5f00b8b4
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugHead.dds b/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugHead.dds
new file mode 100644
index 0000000..d104f61
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugHead.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:35faaae5bc33366b7759ac53c9230e0965611650196ea60688a20ff40bb7a545
+size 65664
diff --git a/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugLeg.dds b/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugLeg.dds
new file mode 100644
index 0000000..f2179b0
--- /dev/null
+++ b/mod/Textures/cyberware/icons/perks/pnx_cyberware_4AugLeg.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d89b77df3c1f52d42546325306ff9c35e68d23a5cab05ff14f940964a991afa
+size 65664
diff --git a/mod/Textures/cyberware/misc/implantbox.dds b/mod/Textures/cyberware/misc/implantbox.dds
new file mode 100644
index 0000000..468cf58
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44186452dec838167a7d41fbf3f6096a684cba42a6365973e3d0fc9f4ae5355d
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox.dds b/mod/Textures/cyberware/misc/implantbox/implantbox.dds
new file mode 100644
index 0000000..2358246
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ce857c144c3651dc3f9944f38f67ba87f36f5867c88d356ac765116cf7e74e26
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_ab.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_ab.dds
new file mode 100644
index 0000000..feababa
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_ab.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d7f2b69c537158403f6fab5ebd3859cdcb095283245f6eefa187833fa4a03371
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_ars.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_ars.dds
new file mode 100644
index 0000000..0d1c097
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_ars.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0fa433c81dc783d50db47c6507f22f961a6b5f6b321000203ce8191e44c01d7a
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_be.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_be.dds
new file mode 100644
index 0000000..2747e0f
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_be.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7c1bbc4cc8e8dbac623f13a20494c8572aa196338ca32bcbbc5c771274ce1023
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_emp.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_emp.dds
new file mode 100644
index 0000000..28c9b3e
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_emp.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b48f7d7e7c067d93b02160632d7c911d2a6505afad6e76b9ebe2a1cfb37c94fa
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_es.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_es.dds
new file mode 100644
index 0000000..13b6a81
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_es.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe4cd86eac481e393c900f0ffe58a58403fd89749af1b3285d224cdf3f161c3b
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_ha.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_ha.dds
new file mode 100644
index 0000000..41c391e
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_ha.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:93c9fbe62a8ee096add6b731af8b9bfe5f9c19cf3d22645d0bed0ab6a61ef61a
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_hfp.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_hfp.dds
new file mode 100644
index 0000000..ec4c2d5
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_hfp.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4f50cc674dbcf234bef2058c276596961578c95c5e4f88ab1f7f0919c18c45db
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_hs1.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_hs1.dds
new file mode 100644
index 0000000..8065086
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_hs1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ae528278202884377e034f93a81141ea11f4a8daebfa3df166b3e7e2c405cb70
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_hs2.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_hs2.dds
new file mode 100644
index 0000000..eb07054
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_hs2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3868515c55c08085964ed46179d67d6475c97c97e5f4bf73d2c822dcf0c0259e
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_hs3.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_hs3.dds
new file mode 100644
index 0000000..7a65ccb
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_hs3.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:24e47f08abc62fae8424e8288ada00a4ccee8223c3e053f2fea47214346fcc31
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_hs4.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_hs4.dds
new file mode 100644
index 0000000..de4da8a
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_hs4.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4acb92735b6301fe0851e2fd16ff9b1ca9f8ccfed79129d22f658888dd93aade
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_ka.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_ka.dds
new file mode 100644
index 0000000..cacc77b
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_ka.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:22391f493909cf1f2f4e108f74724274e49858cca0466032ec623a17e4036b91
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_lcp.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_lcp.dds
new file mode 100644
index 0000000..a310271
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_lcp.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:48780094ee321aa97977392c79506ddb8f804573aa5cc86d4f3716706a9e0080
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_mb.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_mb.dds
new file mode 100644
index 0000000..ea276dd
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_mb.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4ec63961d2d5129f590aa002098c16ff211b57d1af14eb3822091e7a3bd476a1
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_mm1.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_mm1.dds
new file mode 100644
index 0000000..587c580
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_mm1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5d5ad524c0fa5e09ecf4db348600ec4dac03208ae1e40af39bcc4b818fd8c92b
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_mm2.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_mm2.dds
new file mode 100644
index 0000000..09aa9da
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_mm2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a2addfea385ef44caa32b36be6a5197a5de3af4e295ec8b21c47c631127d1176
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_mm3.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_mm3.dds
new file mode 100644
index 0000000..188f0ea
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_mm3.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5edbd6bacf2e587c968c9ef34843ebd5f3bde84c2bba8a35b062e38b7cd4f189
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_mm4.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_mm4.dds
new file mode 100644
index 0000000..642abf4
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_mm4.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3687a8a136aff501895227e3b6004eab85cdd482a615539b86848f98e3bee025
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_nd1.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_nd1.dds
new file mode 100644
index 0000000..fac54ea
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_nd1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fbd666a5282d97b553fde3fde24b5d74aceefef791aa7df1b0e7110cb8b20a43
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_nd2.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_nd2.dds
new file mode 100644
index 0000000..e020a10
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_nd2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0ed0f353edbe80039a47a3f5a31b6f2cb565cb689228e37938a6982e63b1059
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_nd3.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_nd3.dds
new file mode 100644
index 0000000..5d6c4d7
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_nd3.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:13b09e4f6be5454710b84f48f0f836bc640a85c7e5607f4c5885d3dbb1e73884
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_nd4.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_nd4.dds
new file mode 100644
index 0000000..b3dc1c0
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_nd4.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4881815edc23d0dae573dbc8bfddadbd3252aca3df8442b09134dab217556648
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_nr.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_nr.dds
new file mode 100644
index 0000000..f7469a9
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_nr.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32060cc144ce7cfeb01f8d3d9681cf5456dc5b1838007a0aa32a2f7bbc12bf8e
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_nw.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_nw.dds
new file mode 100644
index 0000000..2a5684b
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_nw.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:317783598db9d6f25f46a4bf91c6f01b142e654be3bf5a32ff39fea19de3b3d7
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_oe.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_oe.dds
new file mode 100644
index 0000000..7ea9e51
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_oe.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95a7cb4d85d201afc11c9882ef6e6f1c338cb36596f09b80e3f804d1cbbcdc59
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_pc.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_pc.dds
new file mode 100644
index 0000000..1dcd7a0
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_pc.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:661deca9c9a8f20aa941a887761bcfcb6f03d3e8f51b0a9a1fe03299ea93d408
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_rb.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_rb.dds
new file mode 100644
index 0000000..3a60f2b
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_rb.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11a2ad06520067284543ef3ed091d86a116822d0a433d74155f162fcc8ce619d
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_rn1.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_rn1.dds
new file mode 100644
index 0000000..72e20de
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_rn1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dcc57edfaf62409e67819b18f71cb68fee921c090f36487b5d60a1c3b8afe3dd
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_rn2.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_rn2.dds
new file mode 100644
index 0000000..fa6b779
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_rn2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:071714f7984b810698f1cca1d66fa54fed78dbccbdbc4a84db7457be4373a5a6
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_rn3.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_rn3.dds
new file mode 100644
index 0000000..e75ec9e
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_rn3.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f6138df84f5fa08f84bd72e4736dd88a82f48e3ee5b3aae5e1c97dd6e18fac2
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_rn4.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_rn4.dds
new file mode 100644
index 0000000..a56bb8d
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_rn4.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44cd95eb50a21684ac03def3956937822787a92fbdb0b62801921fe035763c40
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_sda.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_sda.dds
new file mode 100644
index 0000000..441aeb6
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_sda.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:90f3693fb20d4f30193431afa2597bfb9ff7682f8a0a0e1a029b1a03ac6c75ce
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_sl.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_sl.dds
new file mode 100644
index 0000000..cc1eea8
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_sl.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ffe14422d2c1b3ff18317730586c172544ff0c51f74475224f7feb143f8f71a0
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_snb.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_snb.dds
new file mode 100644
index 0000000..ddb9fee
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_snb.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e200f030fc00ea35c99c29a769db8bd2b65aac5728ec2820cf933fd813e60af
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_td1.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_td1.dds
new file mode 100644
index 0000000..0b6c12f
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_td1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9294dc60e677997c41fdbb9abbd12110c1aaccffc6c0ce0cf88efff5e4cec6c6
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_td2.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_td2.dds
new file mode 100644
index 0000000..339d6c5
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_td2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d8134a95c4eadd005e424969d5dbc53bf6b8d1011f5a397a61f0b9eecce9da8
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_td3.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_td3.dds
new file mode 100644
index 0000000..a1429ed
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_td3.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f02ab5ff0e70c8b6fb3adf16e57a489d574b5f89f65c884a2357b80cc5dbf2e
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_td4.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_td4.dds
new file mode 100644
index 0000000..6763ab5
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_td4.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:751cc7e87138ccc5eee4fdb9560dee5818cfe752c8c9c90773381e0bf9febc01
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_vm1.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_vm1.dds
new file mode 100644
index 0000000..301fb6b
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_vm1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c2a8d6395e9092c376a10c585bc009a7aafb4d96b758bb556f3e3948a45c97c
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_vm2.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_vm2.dds
new file mode 100644
index 0000000..8134255
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_vm2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:445f7953865bdd15bb6c3df4dd305f8bc1bd72a907c4915577a4992a199b37fe
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_vm3.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_vm3.dds
new file mode 100644
index 0000000..b6a0737
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_vm3.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c39a6f785d9ca2bfc977fcfc0ec2d42a5dce27b23a9a28a4cf0479a5efa84ff6
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_vm4.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_vm4.dds
new file mode 100644
index 0000000..dd4df76
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_vm4.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:df7e724cc0d9ea299c275fc6df40070247ca6f43754b186a19bab0319b83e8e0
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_wa1.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_wa1.dds
new file mode 100644
index 0000000..010c5a2
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_wa1.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:87cdf9c5a76bf82e2c9e1b35d74a3cc102a0ce1a4bd92a017074a1ab922d7731
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_wa2.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_wa2.dds
new file mode 100644
index 0000000..cf8170e
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_wa2.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0e4b6fa196aa0a21f6648ecb4306dd26b35b32694c01b71c009ced5270a1ed24
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_wa3.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_wa3.dds
new file mode 100644
index 0000000..94e1c82
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_wa3.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a42edb84c5780e4361efa7c6a6ad247210e9bfe6d556099aba659f6f2832a3a6
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_wa4.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_wa4.dds
new file mode 100644
index 0000000..978e431
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_wa4.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:355f54a36abd78b00c362882ded1fb5c26be399700a25d8712cc48bd4a304219
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantbox_ws.dds b/mod/Textures/cyberware/misc/implantbox/implantbox_ws.dds
new file mode 100644
index 0000000..b159d95
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantbox_ws.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3459d79682b1bc36318d2af22f06562f0a7e8d80820035e6f3c90ff2f216ad9
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantboxblue_c13.dds b/mod/Textures/cyberware/misc/implantbox/implantboxblue_c13.dds
new file mode 100644
index 0000000..f197474
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantboxblue_c13.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a93939bd41543641543a6ba6a16d0b045fbbe1c07354d326ce48bdb0bbc43cef
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantboxblue_grx.dds b/mod/Textures/cyberware/misc/implantbox/implantboxblue_grx.dds
new file mode 100644
index 0000000..26dffb9
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantboxblue_grx.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:96cbb8a0fc043d3f31b9c8da97780197aff351578516eac42276a1dff4ba7cae
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantboxblue_m5.dds b/mod/Textures/cyberware/misc/implantbox/implantboxblue_m5.dds
new file mode 100644
index 0000000..35c5f67
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantboxblue_m5.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:22b49f7912b850efb894ff178b6721672e13ccc8949ee2286da635838b08e19a
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantboxblue_y3.dds b/mod/Textures/cyberware/misc/implantbox/implantboxblue_y3.dds
new file mode 100644
index 0000000..dbbbf21
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantboxblue_y3.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f38ac2176851f8a06a0b219180422147aa2c949abfc173281482b3e077c0036
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantbox/implantboxblue_y5.dds b/mod/Textures/cyberware/misc/implantbox/implantboxblue_y5.dds
new file mode 100644
index 0000000..64661a0
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantbox/implantboxblue_y5.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:39bb4b13548da296fb56151e96c4bdc6a6d8cf1a2da628d0bcf898947cb8339b
+size 349680
diff --git a/mod/Textures/cyberware/misc/implantboxblue.dds b/mod/Textures/cyberware/misc/implantboxblue.dds
new file mode 100644
index 0000000..9cf9058
--- /dev/null
+++ b/mod/Textures/cyberware/misc/implantboxblue.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6189afe171ed37b262c1a81878f475fc9e5aac13f1d4f4917fd0d25652c9f4b3
+size 349680
diff --git a/mod/Textures/cyberware/misc/surgerymanual.dds b/mod/Textures/cyberware/misc/surgerymanual.dds
new file mode 100644
index 0000000..9b48424
--- /dev/null
+++ b/mod/Textures/cyberware/misc/surgerymanual.dds
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac434eb644c65c6829850e3cddba4669ae4ea28ef2a958c2aca5aee78d42d746
+size 43832
diff --git a/mod/UIO/public/Cyberware - AR Scanner.txt b/mod/UIO/public/Cyberware - AR Scanner.txt
new file mode 100644
index 0000000..dc6d161
--- /dev/null
+++ b/mod/UIO/public/Cyberware - AR Scanner.txt
@@ -0,0 +1,2 @@
+cyberware\cw_arscanner.xml::HUDMainMenu::HUDMainMenu
+true
\ No newline at end of file
diff --git a/mod/UIO/public/Cyberware - Adrenaline Booster.txt b/mod/UIO/public/Cyberware - Adrenaline Booster.txt
new file mode 100644
index 0000000..aef6986
--- /dev/null
+++ b/mod/UIO/public/Cyberware - Adrenaline Booster.txt
@@ -0,0 +1,2 @@
+cyberware\cw_adrenaline_booster.xml::HUDMainMenu::HUDMainMenu
+true
\ No newline at end of file
diff --git a/mod/UIO/public/Cyberware - Bionic Eyes.txt b/mod/UIO/public/Cyberware - Bionic Eyes.txt
new file mode 100644
index 0000000..1fb6005
--- /dev/null
+++ b/mod/UIO/public/Cyberware - Bionic Eyes.txt
@@ -0,0 +1,2 @@
+cyberware\cw_bionic_eyes.xml::HUDMainMenu::HUDMainMenu
+true
\ No newline at end of file
diff --git a/mod/UIO/public/Cyberware - Main.txt b/mod/UIO/public/Cyberware - Main.txt
new file mode 100644
index 0000000..6be836d
--- /dev/null
+++ b/mod/UIO/public/Cyberware - Main.txt
@@ -0,0 +1,2 @@
+cyberware\cw_implants.xml::TutorialMenu::TutorialMenu
+true
\ No newline at end of file
diff --git a/mod/UIO/public/Cyberware - Stealth Nano-Bots.txt b/mod/UIO/public/Cyberware - Stealth Nano-Bots.txt
new file mode 100644
index 0000000..b53c22f
--- /dev/null
+++ b/mod/UIO/public/Cyberware - Stealth Nano-Bots.txt
@@ -0,0 +1,2 @@
+cyberware\cw_stealth.xml::HUDMainMenu::HUDMainMenu
+true
\ No newline at end of file
diff --git a/src/CWxAdrenalineAddBonus.gek b/src/CWxAdrenalineAddBonus.gek
new file mode 100644
index 0000000..6be5b69
--- /dev/null
+++ b/src/CWxAdrenalineAddBonus.gek
@@ -0,0 +1,32 @@
+scn CWxAdrenalineAddBonus
+
+float fBonus
+
+begin function { fBonus }
+
+ set CWxAdrenalineBonus to CWxAdrenalineBonus + fBonus
+
+ if CWxAdrenalineBonus > CWxAdrenalineBonusMax
+ set CWxAdrenalineBonus to CWxAdrenalineBonusMax
+ endif
+
+ DebugPrint "Cyberware: Setting adrenaline bonus to %.2f" CWxAdrenalineBonus
+
+ setUIFloat "HUDMainMenu/_PNxAPBonusValue" CWxAdrenalineBonus
+ setUIFloat "HUDMainMenu/_PNxAPBonusEnabled" 1
+
+ printd "Cyberware: Updating AP restore rate"
+
+ set fBonus to CWxDefaultAPRestoreRate * (1 + CWxAdrenalineBonus)
+ SetNumericGameSetting fActionPointsRestoreRate fBonus
+
+ if GetQuestRunning CWxAdrenalineQuest == 0
+ printd "Cyberware: Starting adrenaline cooldown"
+ StartQuest CWxAdrenalineQuest
+ endif
+
+ set CWxAdrenalineCounter to 0
+
+ printd "Cyberware: Adrenaline counter has been reset"
+
+end
diff --git a/src/CWxAdrenalineOnKill.gek b/src/CWxAdrenalineOnKill.gek
new file mode 100644
index 0000000..6f25d5d
--- /dev/null
+++ b/src/CWxAdrenalineOnKill.gek
@@ -0,0 +1,29 @@
+scn CWxAdrenalineOnKill
+
+; Instant OnDeath handler
+; At this point, limb data is not available yet, so we process it a bit later in CWxAdrenalineOnSeveredLimb
+
+float fDamageAmount
+ref rSourceRef
+ref rActor
+
+begin function { fDamageAmount, rSourceRef }
+
+ set rActor to this
+
+ ; Do not pile up handlers on dead actors
+ SetOnHealthDamageEventHandler CWxAdrenalineOnKill 0 rActor
+
+ ; Only count player kills
+ if rSourceRef != playerRef
+ return
+ endif
+
+ ; Actors may be ragdolled due to explosion, unconsciousness, etc.
+ if rActor.GetDead == 0
+ return
+ endif
+
+ call CWxAdrenalineAddBonus 0.2
+
+end
diff --git a/src/CWxAdrenalineOnRagdoll.gek b/src/CWxAdrenalineOnRagdoll.gek
new file mode 100644
index 0000000..a4592a7
--- /dev/null
+++ b/src/CWxAdrenalineOnRagdoll.gek
@@ -0,0 +1,15 @@
+scn CWxAdrenalineOnRagdoll
+
+ref rActor
+
+begin function {}
+
+ if this == playerRef
+ return
+ endif
+
+ set rActor to this
+
+ SetOnHealthDamageEventHandler CWxAdrenalineOnKill 1 rActor
+
+end
diff --git a/src/CWxAdrenalineOnSeveredLimb.gek b/src/CWxAdrenalineOnSeveredLimb.gek
new file mode 100644
index 0000000..b3f4c70
--- /dev/null
+++ b/src/CWxAdrenalineOnSeveredLimb.gek
@@ -0,0 +1,40 @@
+scn CWxAdrenalineOnSeveredLimb
+
+ref rSourceRef
+ref rActor
+int iDeathCause
+float fBonus
+
+begin function { rActor, rSourceRef }
+
+ ; Only count player kills
+ if rSourceRef != playerRef || rActor == playerRef
+ return
+ endif
+
+ set fBonus to 0
+
+ ; Not very reliable, but sometimes works
+ set iDeathCause to rActor.GetCauseOfDeath
+
+ if iDeathCause == 0 || iDeathCause == 3 || iDeathCause == 4 || iDeathCause == 5
+ printd "Cyberware: Cause of death - Explosion, Blunt Weapon, HandToHand, ObjectImpact"
+ set fBonus to fBonus + 0.10
+ endif
+
+ ; Head
+ if rActor.isLimbGone 1 2
+ printd "Cyberware: Severed head"
+ set fBonus to fBonus + 0.20
+
+ ; Any other limbs
+ elseif rActor.isLimbGone 3 13
+ printd "Cyberware: Severed limb"
+ set fBonus to fBonus + 0.10
+ endif
+
+ if fBonus > 0
+ call CWxAdrenalineAddBonus fBonus
+ endif
+
+end
diff --git a/src/CWxAdrenalineQuestScript.gek b/src/CWxAdrenalineQuestScript.gek
new file mode 100644
index 0000000..8f48444
--- /dev/null
+++ b/src/CWxAdrenalineQuestScript.gek
@@ -0,0 +1,17 @@
+scn CWxAdrenalineQuestScript
+
+begin GameMode
+
+ if CWxAdrenalineCounter < CWxAdrenalineBonusTimeout
+
+ set CWxAdrenalineCounter to CWxAdrenalineCounter + 1
+ DebugPrint "Cyberware: Adrenaline counter set to %.0f" CWxAdrenalineCounter
+
+ else
+
+ printd "Cyberware: Adrenalin cooled down, stopping the quest"
+ SetStage CWxAdrenalineQuest 0 ; Stop quest
+
+ endif
+
+end
diff --git a/src/CWxAdrenalineUpdatePerk.gek b/src/CWxAdrenalineUpdatePerk.gek
new file mode 100644
index 0000000..69a94b9
--- /dev/null
+++ b/src/CWxAdrenalineUpdatePerk.gek
@@ -0,0 +1,21 @@
+scn CWxAdrenalineUpdatePerk
+
+int iMode
+array_var aImplants
+
+begin function { iMode }
+
+ let aImplants := ar_list CWxImplants.torsoImplant1, CWxImplants.torsoImplant2, CWxImplants.torsoImplant3, CWxImplants.torsoImplant4
+ call CWxFnSyncImplant CWxImplantAdrenalineBooster CWxImplantAPRegenPerk 1 aImplants
+ let aImplants := ar_null
+
+ if player.HasPerk CWxImplantAPRegenPerk == 0
+ if GetQuestRunning CWxAdrenalineQuest
+ ; Stop the quest
+ SetStage CWxAdrenalineQuest 0
+ endif
+ endif
+
+ call CWxAdrenalineUpdateTriggers 0
+
+end
diff --git a/src/CWxAdrenalineUpdateTriggers.gek b/src/CWxAdrenalineUpdateTriggers.gek
new file mode 100644
index 0000000..f4d412c
--- /dev/null
+++ b/src/CWxAdrenalineUpdateTriggers.gek
@@ -0,0 +1,27 @@
+scn CWxAdrenalineUpdateTriggers
+
+int iMode
+
+begin function { iMode }
+
+ printd "Cyberware: Updating Adrenaline Booster triggers"
+
+ if player.HasPerk CWxImplantAPRegenPerk
+
+ SetOnRagdollEventHandler CWxAdrenalineOnRagdoll 1
+ SetEventHandler "OnDeath" CWxAdrenalineOnSeveredLimb "second"::playerRef
+
+ ; HUD state may persist between savegame reloads, so we refresh state on every load
+
+ if CWxAdrenalineBonus > 0
+ call CWxAdrenalineAddBonus 0 ; refresh HUD
+ else
+ SetStage CWxAdrenalineQuest 0 ; stop quest
+ endif
+
+ else
+ SetOnRagdollEventHandler CWxAdrenalineOnRagdoll 0
+ RemoveEventHandler "OnDeath" CWxAdrenalineOnSeveredLimb
+ endif
+
+end
diff --git a/src/CWxBionicEyesGrainQuestScript.gek b/src/CWxBionicEyesGrainQuestScript.gek
new file mode 100644
index 0000000..feb285f
--- /dev/null
+++ b/src/CWxBionicEyesGrainQuestScript.gek
@@ -0,0 +1,51 @@
+scn CWxBionicEyesGrainQuestScript
+
+; The script runs every 0.05 seconds
+
+; Input vars
+float staticGrain
+float dynamicGrain
+float red ; 0-1
+float green ; 0-1
+float blue ; 0-1
+
+short phase
+
+float curGrain
+float nextGrain
+
+Begin GameMode
+
+ if nextGrain == 0
+ return
+ endif
+
+ if curGrain != nextGrain
+ if curGrain > nextGrain
+ ; Slow decrease
+ set curGrain to curGrain - 0.1
+ if curGrain < nextGrain
+ set curGrain to nextGrain
+ endif
+ else
+ ; Instant increase
+ set curGrain to nextGrain
+ endif
+ endif
+
+ set phase to phase + 1
+ if phase > 4
+ set phase to 1
+ endif
+
+ setUIFLoat "HUDMainMenu\_PNxGrainAmount" curGrain
+ setUIFLoat "HUDMainMenu\_PNxGrainPhase" phase
+
+End
+
+begin MenuMode
+ if GetUIFLoat "HUDMainMenu\_PNXGrainPhase" != 0
+ SetUIFLoat "HUDMainMenu\_PNXGrainPhase" 0
+ endif
+end
+
diff --git a/src/CWxBionicEyesOnHotkey.gek b/src/CWxBionicEyesOnHotkey.gek
new file mode 100644
index 0000000..e64e034
--- /dev/null
+++ b/src/CWxBionicEyesOnHotkey.gek
@@ -0,0 +1,42 @@
+scn CWxBionicEyesOnHotkey
+
+int iKeyID
+
+begin function { iKeyID }
+
+ if MenuMode
+ return
+ endif
+
+ if iKeyID != CWxVisionModeHotkey
+ SetOnKeyUpEventHandler CWxBionicEyesOnHotkey 0 iKeyID
+ return
+ endif
+
+ if CWxVisionModeLevel == 0
+
+ SetStage CWxBionicEyesQuest 1
+ set CWxVisionModeLevel to 1
+
+ elseif CWxVisionModeLevel == 1
+
+ SetStage CWxBionicEyesQuest 2
+ SetStage CWxBionicEyesQuest 3
+ set CWxVisionModeLevel to 2
+
+ elseif CWxVisionModeLevel == 2
+
+ SetStage CWxBionicEyesQuest 4
+ SetStage CWxBionicEyesQuest 5
+ set CWxVisionModeLevel to 3
+
+ else
+
+ SetStage CWxBionicEyesQuest 6
+ set CWxVisionModeLevel to 0
+
+ SetStage CWxBionicEyesGrainQuest 0
+
+ endif
+
+end
diff --git a/src/CWxBionicEyesQuestScript.gek b/src/CWxBionicEyesQuestScript.gek
new file mode 100644
index 0000000..f4ab4c9
--- /dev/null
+++ b/src/CWxBionicEyesQuestScript.gek
@@ -0,0 +1,220 @@
+scn CWxBionicEyesQuestScript
+
+; CWxVisionModeLevel:
+; 0 - Off
+; 1 - Night vision
+; 2 - Heat vision
+; 3 - EM vision
+
+ref shader1
+ref shader2
+ref shader3
+
+short heatShader1stPersonActive
+short heatShader3rdPersonActive
+
+short EMShader1stPersonActive
+short EMShader3rdPersonActive
+
+ref obj
+
+int i
+int size
+
+ref rArmor
+
+begin GameMode
+
+ if CWxVisionModeLevel == 2
+
+ printd "Updating heat vision"
+
+ if IsPC1stPerson && heatShader1stPersonActive == 0
+ set heatShader1stPersonActive to 1
+ player.pms shader3
+ elseif IsPC1stPerson == 0 && heatShader3rdPersonActive == 0
+ set heatShader3rdPersonActive to 1
+ player.pms shader1
+ endif
+
+ set obj to GetFirstRef 200 2 0
+
+ ; Phase 1 - Search for new current actors
+
+ while obj
+ if obj.getIsCreatureType 6 == 0 && obj.getDead == 0 && obj.getDisabled == 0
+ obj.listAddReference CWxVisionModeAList
+
+ if listGetFormIndex CWxVisionModeBList obj == -1
+ obj.pms shader1
+ endif
+ endif
+
+ set obj to GetNextRef
+ loop
+
+ ; Phase 2 - Search for gone actors
+
+ set i to 0
+ set size to ListGetCount CWxVisionModeBList
+
+ while i < size
+ set obj to listGetNthForm CWxVisionModeBList i
+
+ if IsFormValid obj
+ if obj.getDead
+ obj.sms shader1
+ obj.pms shader2
+ else
+ if ListGetFormIndex CWxVisionModeAList obj == -1
+ obj.sms shader1
+ obj.sms shader2
+ endif
+ endif
+ endif
+
+ set i to i + 1
+ loop
+
+ ; Clear B
+ ListClear CWxVisionModeBList
+
+ ; Move A to B
+ while obj := ListRemoveNthForm CWxVisionModeAList 0
+ ListAddForm CWxVisionModeBList obj
+ loop
+
+ elseif CWxVisionModeLevel == 3 ; EM Vision
+
+ set rArmor to playerRef.GetEquippedObject 2
+
+ if rArmor
+ if IsPowerArmor rArmor
+ if IsPC1stPerson && EMShader1stPersonActive == 0
+ set EMShader1stPersonActive to 1
+ playerRef.pms shader2
+ elseif IsPC1stPerson == 0 && EMShader3rdPersonActive == 0
+ set EMShader3rdPersonActive to 1
+ playerRef.pms shader2
+ endif
+ else
+ playerRef.sms shader2
+ endif
+ else
+ playerRef.sms shader2
+ endif
+
+ ; Phase 1 - Search for new current actors
+
+ set obj to GetFirstRef 200 2 0
+
+ while obj
+ if obj.getDisabled == 0
+ if obj.GetCreatureType == -1
+
+ set rArmor to obj.GetEquippedObject 2
+ if rArmor
+ if IsPowerArmor rArmor
+
+ obj.listAddReference CWxVisionModeAList
+ if listGetFormIndex CWxVisionModeBList obj == -1
+ if obj.getDead == 0
+ obj.pms shader1
+ else
+ obj.pms shader2
+ endif
+ endif
+
+ endif
+ endif
+
+ elseif obj.getIsCreatureType 6
+
+ obj.listAddReference CWxVisionModeAList
+ if listGetFormIndex CWxVisionModeBList obj == -1
+ if obj.getDead == 0
+ obj.pms shader1
+ else
+ obj.pms shader2
+ endif
+ endif
+
+ endif
+ endif
+
+ set obj to GetNextRef
+ loop
+
+ ; Phase 2 - Search for gone actors
+
+ set i to 0
+ set size to ListGetCount CWxVisionModeBList
+
+ while i < size
+ set obj to listGetNthForm CWxVisionModeBList i
+
+ if IsFormValid obj
+ if listGetFormIndex CWxVisionModeAList obj == -1
+ obj.sms shader1
+ obj.sms shader2
+ endif
+ endif
+
+ set i to i + 1
+ loop
+
+ ; Clear B
+ ListClear CWxVisionModeBList
+
+ ; Move A to B
+ while obj := ListRemoveNthForm CWxVisionModeAList 0
+ ListAddForm CWxVisionModeBList obj
+ loop
+
+
+ ;Energy Weapons & deactivated mines
+ set obj to GetFirstRef 40 2 0
+
+ while obj
+ if obj.GetWeaponSkill == 34 || obj.GetWeaponSkill == 35
+ obj.sms shader2
+ obj.pms shader2 2
+ endif
+ set obj to getNextRef
+ loop
+
+ ; Projectiles (activated mines, grenades etc)
+ set obj to GetFirstRef 51 2 0
+ while obj
+ obj.sms shader2
+ obj.pms shader2 2
+ set obj to GetNextRef
+ loop
+
+ ; Traps
+ set obj to GetFirstRef 21 2 0
+ while obj
+ if IsRefInList CWxTrapsList obj >= 0
+ obj.SMS shader2
+ obj.PMS shader2 2
+ endif
+
+ set obj to GetNextRef
+ loop
+
+ ; Terminals
+ set obj to GetFirstRef 23 2 0
+ while obj
+ obj.sms shader2
+ obj.pms shader2 2
+ set obj to GetNextRef
+ loop
+
+
+ else
+
+ SetStage CWxBionicEyesQuest 0 ; stop quest
+
+ endif
+
+end
diff --git a/src/CWxBionicEyesUpdatePerk.gek b/src/CWxBionicEyesUpdatePerk.gek
new file mode 100644
index 0000000..5c831e4
--- /dev/null
+++ b/src/CWxBionicEyesUpdatePerk.gek
@@ -0,0 +1,31 @@
+scn CWxBionicEyesUpdatePerk
+
+int iStage
+array_var aImplants
+
+begin function { iStage }
+
+ let aImplants := ar_list CWxImplants.headImplant1, CWxImplants.headImplant2, CWxImplants.headImplant3, CWxImplants.headImplant4
+ call CWxFnSyncImplant CWxImplantBionicEyes CWxImplantVisionModePerk 1 aImplants
+ let aImplants := ar_null
+
+ call CWxBionicEyesUpdateTriggers 0
+
+ ; Reset vision mode, if the implant has been removed
+
+ if player.HasPerk CWxImplantVisionModePerk == 0 && CWxVisionModeLevel > 0
+
+ if CWxVisionModeLevel == 1
+ SetStage CWxBionicEyesQuest 2
+ elseif CWxVisionModeLevel == 2
+ SetStage CWxBionicEyesQuest 4
+ elseif CWxVisionModeLevel == 3
+ SetStage CWxBionicEyesQuest 6
+ endif
+
+ SetStage CWxBionicEyesGrainQuest 0
+ SetStage CWxBionicEyesQuest 0 ; stop quest
+
+ endif
+
+end
diff --git a/src/CWxBionicEyesUpdateTriggers.gek b/src/CWxBionicEyesUpdateTriggers.gek
new file mode 100644
index 0000000..9d06456
--- /dev/null
+++ b/src/CWxBionicEyesUpdateTriggers.gek
@@ -0,0 +1,21 @@
+scn CWxBionicEyesUpdateTriggers
+
+int iMode
+
+begin function { iMode }
+
+ if player.HasPerk CWxImplantVisionModePerk
+
+ SetOnKeyUpEventHandler CWxBionicEyesOnHotkey 1 CWxVisionModeHotkey
+
+ ; Clear list of processed actors to reapply shaders
+ if CWxVisionModeLevel > 0
+ ListClear CWxVisionModeAList
+ ListClear CWxVisionModeBList
+ endif
+
+ else
+ SetOnKeyUpEventHandler CWxBionicEyesOnHotkey 0 CWxVisionModeHotkey
+ endif
+
+end
diff --git a/src/CWxFnCallFormList.gek b/src/CWxFnCallFormList.gek
new file mode 100644
index 0000000..936d625
--- /dev/null
+++ b/src/CWxFnCallFormList.gek
@@ -0,0 +1,24 @@
+scn CWxFnCallFormList
+
+ref rFormList
+int iArg
+int i
+int iSize
+ref rTemp
+
+begin function { rFormList, iArg }
+
+ set i to 0
+ set iSize to ListGetCount rFormList
+
+ while i < iSize
+ set rTemp to ListGetNthForm rFormList i
+ if rTemp
+ if GetObjectType rTemp == 17
+ call rTemp iArg
+ endif
+ endif
+ set i to i + 1
+ loop
+
+end
diff --git a/src/CWxFnStartSurgery.gek b/src/CWxFnStartSurgery.gek
new file mode 100644
index 0000000..4a0a476
--- /dev/null
+++ b/src/CWxFnStartSurgery.gek
@@ -0,0 +1,25 @@
+scn CWxFnStartSurgery
+
+ref rSurgeonRef
+int bRequireManual
+ref rBase
+
+begin function { rSurgeonRef, bRequireManual }
+
+ ; We call this only if dialog conditions are met, so it's implemented as a soft requirement here
+
+ if bRequireManual
+ if ( rSurgeonRef.IsInList CWxTrainedSurgeonsList == 0 ) && ( player.GetItemCount CWxSurgeryManual > 0 )
+
+ set rBase to rSurgeonRef.GetBaseForm
+ AddFormToFormList CWxTrainedSurgeonsList rBase
+ player.removeItem CWxSurgeryManual 1 1
+ ShowMessage CWxSurgeryUnlockedMsg
+ ScriptWait 20
+
+ endif
+ endif
+
+ SetStage CWxImplantsPanel 1
+
+end
diff --git a/src/CWxFnSyncImplant.gek b/src/CWxFnSyncImplant.gek
new file mode 100644
index 0000000..5eae75e
--- /dev/null
+++ b/src/CWxFnSyncImplant.gek
@@ -0,0 +1,28 @@
+scn CWxFnSyncImplant
+
+ref rImplant
+ref rPerk
+int iRank
+array_var aSlots
+
+begin function { rImplant, rPerk, iRank, aSlots }
+
+ if 0 <= ar_find rImplant aSlots
+
+ if player.GetPerkRank rPerk != iRank
+ DebugPrint "Adding perk %n, level %.0f" rPerk iRank
+ player.SetPerkRank rPerk iRank
+ endif
+
+ elseif player.HasPerk rPerk
+
+ if player.GetPerkRank rPerk == iRank
+ DebugPrint "Removing perk %n" rPerk
+ player.removePerk rPerk
+ endif
+
+ endif
+
+ let aSlots := ar_null
+
+end
diff --git a/src/CWxFnUpgrade.gek b/src/CWxFnUpgrade.gek
new file mode 100644
index 0000000..caf74e1
--- /dev/null
+++ b/src/CWxFnUpgrade.gek
@@ -0,0 +1,82 @@
+scn CWxFnUpgrade
+
+int iMode
+
+begin function { iMode }
+
+ if CWxVersion < 1
+
+ print "Cyberware: initializing"
+
+ set CWxVersion to 1
+
+ if player.hasPerk ImplantAgilityPerk
+ AddFormToFormList CWxPreInstallPerks ImplantAgilityPerk
+ player.RemovePerk ImplantAgilityPerk
+ player.dispel ImplantAgilityBoost
+ player.addItem CWxImplantReflexBooster 1
+ endif
+
+ if player.hasPerk ImplantCharismaPerk
+ AddFormToFormList CWxPreInstallPerks ImplantCharismaPerk
+ player.RemovePerk ImplantCharismaPerk
+ player.dispel ImplantCharismaBoost
+ player.addItem CWxImplantEmpathySynthesizer 1
+ endif
+
+ if player.hasPerk ImplantDTPerk
+ AddFormToFormList CWxPreInstallPerks ImplantDTPerk
+ player.RemovePerk ImplantDTPerk
+ player.dispel ImplantDTBoost
+ player.addItem CWxImplantSubDermalArmor 1
+ endif
+
+ if player.hasPerk ImplantEndurancePerk
+ AddFormToFormList CWxPreInstallPerks ImplantEndurancePerk
+ player.RemovePerk ImplantEndurancePerk
+ player.dispel ImplantEnduranceBoost
+ player.addItem CWxImplantNociceptionRegulator 1
+ endif
+
+ if player.hasPerk ImplantIntelligencePerk
+ AddFormToFormList CWxPreInstallPerks ImplantIntelligencePerk
+ player.RemovePerk ImplantIntelligencePerk
+ player.dispel ImplantIntelligenceBoost
+ player.addItem CWxImplantLogicCoProcessor 1
+ endif
+
+ if player.hasPerk ImplantLuckPerk
+ AddFormToFormList CWxPreInstallPerks ImplantLuckPerk
+ player.RemovePerk ImplantLuckPerk
+ player.dispel ImplantLuckBoost
+ player.addItem CWxImplantProbabilityCalculator 1
+ endif
+
+ if player.hasPerk ImplantPerceptionPerk
+ AddFormToFormList CWxPreInstallPerks ImplantPerceptionPerk
+ player.RemovePerk ImplantPerceptionPerk
+ player.dispel ImplantPerceptionBoost
+ player.addItem CWxImplantOpticsEnhancer 1
+ endif
+
+ if player.hasPerk ImplantRegenPerk
+ AddFormToFormList CWxPreInstallPerks ImplantRegenPerk
+ player.RemovePerk ImplantRegenPerk
+ player.dispel ImplantRegenBoost
+ player.addItem CWxImplantMonocyteBreeder 1
+ endif
+
+ if player.hasPerk ImplantStrengthPerk
+ AddFormToFormList CWxPreInstallPerks ImplantStrengthPerk
+ player.RemovePerk ImplantStrengthPerk
+ player.dispel ImplantStrengthBoost
+ player.addItem CWxImplantHypertrophyAccelerator 1
+ endif
+
+ if player.GetItemCount CWxImplantsAllList
+ SetObjectiveDisplayed CWxImplantSurgeonQuest 10 1
+ endif
+
+ endif
+
+end
diff --git a/src/CWxImplantDataScript.gek b/src/CWxImplantDataScript.gek
new file mode 100644
index 0000000..f90a805
--- /dev/null
+++ b/src/CWxImplantDataScript.gek
@@ -0,0 +1,25 @@
+scn CWxImplantDataScript
+
+; Implants storage
+
+ref headImplant1
+ref headImplant2
+ref headImplant3
+ref headImplant4
+
+ref torsoImplant1
+ref torsoImplant2
+ref torsoImplant3
+ref torsoImplant4
+
+ref rightArmImplant1
+ref rightArmImplant2
+
+ref leftArmImplant1
+ref leftArmImplant2
+
+ref rightLegImplant1
+ref rightLegImplant2
+
+ref leftLegImplant1
+ref leftLegImplant2
diff --git a/src/CWxLimbRegenOnCrippledLimb.gek b/src/CWxLimbRegenOnCrippledLimb.gek
new file mode 100644
index 0000000..af3dab2
--- /dev/null
+++ b/src/CWxLimbRegenOnCrippledLimb.gek
@@ -0,0 +1,47 @@
+scn CWxLimbRegenOnCrippledLimb
+
+; 0 Head
+; 1 Torso
+; 2 Left Hand
+; 3 Right Hand
+; 4 Left Leg
+; 5 Right Leg
+; 6 Brain
+int iLimb
+
+int bStart
+
+begin function { iLimb }
+
+ set bStart to 0
+
+ if iLimb == 2
+ if player.HasPerk CWxImplantLeftArmRegenPerk
+ printd "Cyberware: Left arm crippled"
+ set bStart to 1
+ endif
+ elseif iLimb == 3
+ if player.HasPerk CWxImplantRightArmRegenPerk
+ printd "Cyberware: Right arm crippled"
+ set bStart to 1
+ endif
+ elseif iLimb == 4
+ if player.HasPerk CWxImplantLeftLegRegenPerk
+ printd "Cyberware: Left leg crippled"
+ set bStart to 1
+ endif
+ elseif iLimb == 5
+ if player.HasPerk CWxImplantRightLegRegenPerk
+ printd "Cyberware: Right leg crippled"
+ set bStart to 1
+ endif
+ endif
+
+ if bStart
+ if GetQuestRunning CWxLimbRegenQuest == 0
+ printd "Cyberware: Starting limb regeneration quest"
+ StartQuest CWxLimbRegenQuest
+ endif
+ endif
+
+end
diff --git a/src/CWxLimbRegenQuestScript.gek b/src/CWxLimbRegenQuestScript.gek
new file mode 100644
index 0000000..7b7ca0d
--- /dev/null
+++ b/src/CWxLimbRegenQuestScript.gek
@@ -0,0 +1,59 @@
+scn CWxLimbRegenQuestScript
+
+int iStop
+int iNoPerk
+
+begin GameMode
+
+ set iStop to 0
+ set iNoPerk to 0
+
+ printd "Cyberware: Checking limbs condition"
+
+ if player.HasPerk CWxImplantLeftArmRegenPerk
+ player.restoreAV LeftAttackCondition 1
+ set iStop to iStop + (player.getAV LeftAttackCondition >= 100)
+ printd "Cyberware: Left arm condition " + $(player.getAV LeftAttackCondition)
+ else
+ set iStop to iStop + 1
+ set iNoPerk to iNoPerk + 1
+ endif
+
+ if player.HasPerk CWxImplantLeftLegRegenPerk
+ player.restoreAV LeftMobilityCondition 1
+ set iStop to iStop + (player.getAV LeftMobilityCondition >= 100)
+ printd "Cyberware: Left leg condition " + $(player.getAV LeftMobilityCondition)
+ else
+ set iStop to iStop + 1
+ set iNoPerk to iNoPerk + 1
+ endif
+
+ if player.HasPerk CWxImplantRightArmRegenPerk
+ player.restoreAV RightAttackCondition 1
+ set iStop to iStop + (player.getAV RightAttackCondition >= 100)
+ printd "Cyberware: Right arm condition " + $(player.getAV RightAttackCondition)
+ else
+ set iStop to iStop + 1
+ set iNoPerk to iNoPerk + 1
+ endif
+
+ if player.HasPerk CWxImplantRightLegRegenPerk
+ player.restoreAV RightMobilityCondition 1
+ set iStop to iStop + (player.getAV RightMobilityCondition >= 100)
+ printd "Cyberware: Right leg condition " + $(player.getAV RightMobilityCondition)
+ else
+ set iStop to iStop + 1
+ set iNoPerk to iNoPerk + 1
+ endif
+
+ if iStop == 4
+ printd "Cyberware: Limbs regenerated, stopping quest"
+ StopQuest CWxLimbRegenQuest
+ endif
+
+ if iNoPerk == 4
+ call CWxLimbRegenUpdateTriggers 0
+ endif
+
+end
+
diff --git a/src/CWxLimbRegenUpdatePerks.gek b/src/CWxLimbRegenUpdatePerks.gek
new file mode 100644
index 0000000..0052c1d
--- /dev/null
+++ b/src/CWxLimbRegenUpdatePerks.gek
@@ -0,0 +1,24 @@
+scn CWxLimbRegenUpdatePerks
+
+int iMode
+array_var aImplants
+
+begin function { iMode }
+
+ let aImplants := ar_list CWxImplants.rightArmImplant1, CWxImplants.rightArmImplant2
+ call CWxFnSyncImplant CWxImplantNanobionicWeave CWxImplantRightArmRegenPerk 1 aImplants
+
+ let aImplants := ar_list CWxImplants.leftArmImplant1, CWxImplants.leftArmImplant2
+ call CWxFnSyncImplant CWxImplantNanobionicWeave CWxImplantLeftArmRegenPerk 1 aImplants
+
+ let aImplants := ar_list CWxImplants.rightLegImplant1, CWxImplants.rightLegImplant2
+ call CWxFnSyncImplant CWxImplantNanobionicWeave CWxImplantRightLegRegenPerk 1 aImplants
+
+ let aImplants := ar_list CWxImplants.leftLegImplant1, CWxImplants.leftLegImplant2
+ call CWxFnSyncImplant CWxImplantNanobionicWeave CWxImplantLeftLegRegenPerk 1 aImplants
+
+ let aImplants := ar_null
+
+ call CWxLimbRegenUpdateTriggers 0
+
+end
diff --git a/src/CWxLimbRegenUpdateTriggers.gek b/src/CWxLimbRegenUpdateTriggers.gek
new file mode 100644
index 0000000..04f296e
--- /dev/null
+++ b/src/CWxLimbRegenUpdateTriggers.gek
@@ -0,0 +1,14 @@
+scn CWxLimbRegenUpdateTriggers
+
+int iMode
+int bEnabled
+
+begin function { iMode }
+
+ printd "Cyberware: Updating limb regen triggers"
+
+ set bEnabled to (player.hasPerk CWxImplantRightArmRegenPerk || player.hasPerk CWxImplantLeftArmRegenPerk || player.hasPerk CWxImplantRightLegRegenPerk || player.hasPerk CWxImplantLeftLegRegenPerk)
+
+ SetOnCrippledLimbEventHandler CWxLimbRegenOnCrippledLimb bEnabled playerRef
+
+end
diff --git a/src/CWxMCMQuestScript.gek b/src/CWxMCMQuestScript.gek
new file mode 100644
index 0000000..2dfea47
--- /dev/null
+++ b/src/CWxMCMQuestScript.gek
@@ -0,0 +1,201 @@
+scn CWxMCMQuestScript
+
+int iOption
+int iValue
+int iMouseoverOption
+int iFont
+ref rTemp
+
+begin GameMode
+ StopQuest CWxMCMQuest ; No zombies allowed!
+end
+
+begin MenuMode 4
+
+ StopQuest CWxMCMQuest
+
+ if GetGameRestarted == 0
+ return
+ endif
+
+ ;SetDebugMode 1
+
+ if isModLoaded "The Mod Configuration Menu.esp"
+
+ set iOption to GetModIndex "The Mod Configuration Menu.esp"
+ set rTemp to BuildRef iOption 2790
+ ListAddForm rTemp CWxMCMItem
+ set rTemp to 0
+
+ ; Start MCM quest on pause
+ SetOnMenuOpenEventHandler CWxOnPause 1 1013
+
+ endif
+
+ SetEventHandler "NewGame" CWxOnNewGame
+ SetEventHandler "PostLoadGame" CWxOnGameLoad
+
+ SetOnMenuClickEventHandler CWxOnPressInventoryItem 1 "InventoryMenu/GLOW_BRANCH/IM_MainRect/IM_InventoryList/IM_InventoryListTemplateRect"
+
+ ; Add implanted weapons to holdout lists
+ ListAddForm NVHoldoutWeapons CWxWeapEMP
+ ListAddForm NVHoldoutWeapons CWxWeapHFP
+ ListAddForm NVImprovedHoldoutWeapons CWxWeapEMP
+ ListAddForm NVImprovedHoldoutWeapons CWxWeapHFP
+
+ ; Users often make bashed patches, breaking Pinkerton's barter flags
+ if IsModLoaded "Fallout3.esm"
+ set rTemp to StringToRef "Fallout3.esm:156CA" ; Pinkerton
+ SetServiceFlag rTemp 32 1 ; chems
+ SetServiceFlag rTemp 64 1 ; stimpacks
+ SetServiceFlag rTemp 1024 1 ; misc items
+ BaseAddItem CapsChange100 1 rTemp
+ endif
+
+end
+
+begin MenuMode 1013
+
+ if GetUIFloat "StartMenu/MCM/_ActiveMenu" != GetItemValue CWxMCMItem
+ return
+ endif
+
+ set iOption to GetUIFloat "StartMenu/MCM/_ActiveOption"
+ set iValue to GetUIFloat "StartMenu/MCM/_Value"
+
+ ;--------------------------------------------------
+ ;1 - RESET
+ if GetUIFloat "StartMenu/MCM/_Reset"
+
+ SetUIFloat "StartMenu/MCM/_Reset" 0
+
+ ; header font
+ if GetUIFloat "HUDMainMenu\_DUIF3" > 0 ; DarnifiedUI
+ set iFont to 3
+ else
+ set iFont to 1
+ endif
+
+ SetUIFloat "StartMenu/MCM/*:1/_columns" 2
+
+
+ ; Bionic Eyes
+ SetUIFloat "StartMenu/MCM/*:1/*:1/_enable" 1
+ SetUIString "StartMenu/MCM/*:1/*:1/_title" "Bionic Eyes"
+ SetUIFloat "StartMenu/MCM/*:1/*:1/_altFont" iFont
+ SetUIFloat "StartMenu/MCM/*:1/*:1/_type" 7
+ SetUIFloat "StartMenu/MCM/*:1/*:1/_highlight" 0
+
+ ; Hotkey
+ SetUIFloat "StartMenu/MCM/*:1/*:3/_enable" 1
+ SetUIFloat "StartMenu/MCM/*:1/*:3/_indent" 1
+ SetUIString "StartMenu/MCM/*:1/*:3/_title" "Vision Mode Hotkey"
+ SetUIFloat "StartMenu/MCM/*:1/*:3/_RGB" 191137050
+ SetUIFloat "StartMenu/MCM/*:1/*:3/_type" 3
+ SetUIStringEx "StartMenu/MCM/*:1/*:3/value/*:1/string" "%k" CWxVisionModeHotkey
+
+ ; Grain
+ SetUIFloat "StartMenu/MCM/*:1/*:4/_enable" 1
+ SetUIFloat "StartMenu/MCM/*:1/*:4/_indent" 1
+ SetUIString "StartMenu/MCM/*:1/*:4/_title" "Dynamic Grain"
+ SetUIFloat "StartMenu/MCM/*:1/*:4/_RGB" 191137050
+ SetUIFloat "StartMenu/MCM/*:1/*:4/_type" 5
+ SetUIFloat "StartMenu/MCM/*:1/*:4/_value" CWxVisionModeEnableGrain
+
+ ; Extra Bright
+ SetUIFloat "StartMenu/MCM/*:1/*:6/_enable" 1
+ SetUIFloat "StartMenu/MCM/*:1/*:6/_indent" 1
+ SetUIString "StartMenu/MCM/*:1/*:6/_title" "Brighter Enhanced Vision"
+ SetUIFloat "StartMenu/MCM/*:1/*:6/_RGB" 191137050
+ SetUIFloat "StartMenu/MCM/*:1/*:6/_type" 5
+ SetUIFloat "StartMenu/MCM/*:1/*:6/_value" CWxVisionModeExtraBright
+
+
+ ; Stealth Nano-Bots
+ SetUIFloat "StartMenu/MCM/*:1/*:9/_enable" 1
+ SetUIString "StartMenu/MCM/*:1/*:9/_title" "Stealth Nano-Bots"
+ SetUIFloat "StartMenu/MCM/*:1/*:9/_altFont" iFont
+ SetUIFloat "StartMenu/MCM/*:1/*:9/_type" 7
+ SetUIFloat "StartMenu/MCM/*:1/*:9/_highlight" 0
+
+ ; Hotkey
+ SetUIFloat "StartMenu/MCM/*:1/*:11/_enable" 1
+ SetUIFloat "StartMenu/MCM/*:1/*:11/_indent" 1
+ SetUIString "StartMenu/MCM/*:1/*:11/_title" "Stealth Field Hotkey"
+ SetUIFloat "StartMenu/MCM/*:1/*:11/_RGB" 191137050
+ SetUIFloat "StartMenu/MCM/*:1/*:11/_type" 3
+ SetUIStringEx "StartMenu/MCM/*:1/*:11/value/*:1/string" "%k" CWxStealthFieldHotkey
+
+
+ ;--------------------------------------------------
+ ; DEFAULT
+ elseif GetUIFloat "StartMenu/MCM/_Default"
+ SetUIFloat "StartMenu/MCM/_Default" 0
+ SetUIFloat "StartMenu/MCM/_Reset" 1
+
+ set CWxVisionModeHotkey to 50
+ set CWxVisionModeEnableGrain to 1
+ set CWxStealthFieldHotkey to 45
+ set CWxVisionModeExtraBright to 0
+
+ ;--------------------------------------------------
+ ; NEW VALUE
+ elseif GetUIFloat "StartMenu/MCM/_NewValue"
+
+ SetUIFloat "StartMenu/MCM/_NewValue" 0
+ SetUIFloat "StartMenu/MCM/_Reset" 1
+
+ ; Bionic Eyes
+
+ if iOption == 3
+ set CWxVisionModeHotkey to iValue
+ call CWxBionicEyesUpdateTriggers 0
+
+ elseif iOption == 4
+ set CWxVisionModeEnableGrain to iValue
+
+ elseif iOption == 6
+ set CWxVisionModeExtraBright to iValue
+
+ ; Stealth Nano-Bots
+
+ elseif iOption == 11
+ set CWxStealthFieldHotkey to iValue
+ call CWxStealthUpdateTriggers 0
+
+ endif
+
+ endif
+
+ ;--------------------------------------------------
+ ; MOUSE-OVER
+ if iMouseoverOption != GetUIFloat "StartMenu/MCM/*:1/_optionID"
+ set iMouseoverOption to GetUIFloat "StartMenu/MCM/*:1/_optionID"
+
+ if iMouseoverOption == 0
+ SetUIFloat "StartMenu/MCM/MCM_Info/visible" 0
+ else
+
+ SetUIFloat "StartMenu/MCM/MCM_Info/visible" 1
+
+ ; Bionic Eyes
+ if iMouseoverOption == 3
+ SetUIString "StartMenu/MCM/*:9/string" "Default: M"
+ elseif iMouseoverOption == 4
+ SetUIString "StartMenu/MCM/*:9/string" "Use dynamic grain, when a vision mode is active."
+ elseif iMouseoverOption == 6
+ SetUIString "StartMenu/MCM/*:9/string" "Brighter Night Vision etc. for use with mods that add Darker Nights."
+
+ ; Stealth Nano-Bots
+ elseif iMouseoverOption == 11
+ SetUIString "StartMenu/MCM/*:9/string" "Default: X"
+
+ else
+ SetUIFloat "StartMenu/MCM/MCM_Info/visible" 0
+ endif
+
+ endif
+
+ endif
+
+end
diff --git a/src/CWxOnAddImplant.gek b/src/CWxOnAddImplant.gek
new file mode 100644
index 0000000..85bcfa4
--- /dev/null
+++ b/src/CWxOnAddImplant.gek
@@ -0,0 +1,23 @@
+scn CWxOnAddImplant
+
+ref rAddedItem
+ref rAddedTo
+
+begin function { rAddedItem, rAddedTo }
+
+ if GetHasNote CWxImplantsNote == 0
+
+ player.addNote CWxImplantsNote
+
+ SetObjectiveDisplayed CWxImplantSurgeonQuest 10 1
+ SetObjectiveDisplayed CWxImplantSurgeonQuest 20 1
+
+ if CWxSurgeryManualPickedUp
+ SetObjectiveCompleted CWxImplantSurgeonQuest 20 1
+ endif
+
+ endif
+
+ RemoveEventHandler "OnAdd" CWxOnAddImplant
+
+end
diff --git a/src/CWxOnAddSurgeryManual.gek b/src/CWxOnAddSurgeryManual.gek
new file mode 100644
index 0000000..873e186
--- /dev/null
+++ b/src/CWxOnAddSurgeryManual.gek
@@ -0,0 +1,27 @@
+scn CWxOnAddSurgeryManual
+
+ref rAddedItem
+ref rAddedTo
+
+begin function { rAddedItem, rAddedTo }
+
+ printd "Surgery manual picked up"
+
+ if CWxSurgeryManualPickedUp == 0
+
+ printd "Starting surgery manual quest"
+
+ set CWxSurgeryManualPickedUp to 1
+
+ ShowMessage CWxSurgeryManualMsg
+
+ SetObjectiveCompleted CWxImplantSurgeonQuest 20 1
+
+ endif
+
+ ; Hijacking unused variable to avoid circular dependency
+ set rAddedTo to GetCurrentScript
+
+ RemoveEventHandler "OnAdd" rAddedTo
+
+end
diff --git a/src/CWxOnBarter.gek b/src/CWxOnBarter.gek
new file mode 100644
index 0000000..ba73974
--- /dev/null
+++ b/src/CWxOnBarter.gek
@@ -0,0 +1,16 @@
+scn CWxOnBarter
+
+int iMenuID
+
+begin function { iMenuID }
+
+ if GetHasNote CWxImplantsNote
+ SetOnMenuCloseEventHandler CWxOnBarter 0 1053
+ return
+ endif
+
+ if player.GetItemCount CWxImplantsAllList > 0
+ call CWxOnAddImplant playerRef playerRef
+ endif
+
+end
diff --git a/src/CWxOnChargePulse.gek b/src/CWxOnChargePulse.gek
new file mode 100644
index 0000000..8c36e9b
--- /dev/null
+++ b/src/CWxOnChargePulse.gek
@@ -0,0 +1,22 @@
+scn CWxOnChargePulse
+
+int iAnimAction
+ref rScript
+
+begin function { iAnimAction }
+
+ if playerRef.GetEquipped CWxWeapEMP == 0 && playerRef.GetEquipped CWxWeapHFP == 0
+ printd "Autoremoved OnCharge handler"
+ set rScript to GetCurrentScript
+ SetOnAnimActionEventHandler rScript 0 playerRef 5
+ return
+ endif
+
+ printd "Triggered OnCharge event"
+
+ player.pms CWxEMPShader 1
+ player.playSound3D WPNPulseGunFire3DCharge
+ ScriptWait 12
+ player.playSound3D WPNPulseGunFire3D
+
+end
diff --git a/src/CWxOnEquipPulseGun.gek b/src/CWxOnEquipPulseGun.gek
new file mode 100644
index 0000000..8357915
--- /dev/null
+++ b/src/CWxOnEquipPulseGun.gek
@@ -0,0 +1,11 @@
+scn CWxOnEquipPulseGun
+
+ref rEquipper
+ref rEquipment
+
+begin function { rEquipper, rEquipment }
+
+ printd "Cyberware: Adding OnCharge handler"
+ SetOnAnimActionEventHandler CWxOnChargePulse 1 playerRef 5
+
+end
diff --git a/src/CWxOnGameLoad.gek b/src/CWxOnGameLoad.gek
new file mode 100644
index 0000000..8d290f3
--- /dev/null
+++ b/src/CWxOnGameLoad.gek
@@ -0,0 +1,25 @@
+scn CWxOnGameLoad
+
+int iStatus
+
+begin function { iStatus }
+
+ call CWxFnCallFormList CWxOnGameLoadList 0
+
+ if CWxSurgeryManualPickedUp
+ RemoveEventHandler "OnAdd" CWxOnAddSurgeryManual
+ else
+ printd "Cyberware: Adding surgery manual OnAdd handler"
+ SetEventHandler "OnAdd" CWxOnAddSurgeryManual "first"::CWxSurgeryManual "second"::playerRef
+ endif
+
+ if GetHasNote CWxImplantsNote
+ RemoveEventHandler "OnAdd" CWxOnAddImplant
+ SetOnMenuCloseEventHandler CWxOnBarter 0 1053
+ else
+ printd "Cyberware: Adding implant OnAdd handler"
+ SetEventHandler "OnAdd" CWxOnAddImplant "first"::CWxImplantsAllList "second"::playerRef
+ SetOnMenuCloseEventHandler CWxOnBarter 1 1053
+ endif
+
+end
diff --git a/src/CWxOnNewGame.gek b/src/CWxOnNewGame.gek
new file mode 100644
index 0000000..a75a536
--- /dev/null
+++ b/src/CWxOnNewGame.gek
@@ -0,0 +1,5 @@
+scn CWxOnNewGame
+
+begin function {}
+ call CWxOnGameLoad 1
+end
diff --git a/src/CWxOnPause.gek b/src/CWxOnPause.gek
new file mode 100644
index 0000000..0fd389a
--- /dev/null
+++ b/src/CWxOnPause.gek
@@ -0,0 +1,11 @@
+scn CWxOnPause
+
+int iMenuMode
+
+begin function { iMenuMode }
+
+ SetValueAlt CWxMCMItem 17029
+
+ StartQuest CWxMCMQuest
+
+end
diff --git a/src/CWxOnPressInventoryItem.gek b/src/CWxOnPressInventoryItem.gek
new file mode 100644
index 0000000..20e716b
--- /dev/null
+++ b/src/CWxOnPressInventoryItem.gek
@@ -0,0 +1,26 @@
+scn CWxOnPressInventoryItem
+
+int iMenuID
+int iTileID
+string_var sTileName
+ref rSelectedItem
+
+begin function { iMenuID, iTileID, sTileName }
+
+ ; String arguments are destructed correctly automatically, but let's destruct it just in case
+ sv_destruct sTileName
+
+ set rSelectedItem to GetSelectedItemRef
+
+ if rSelectedItem
+
+ set rSelectedItem to rSelectedItem.GetBaseObject
+
+ if ListGetFormIndex CWxImplantsAllList rSelectedItem > -1
+ call CWxPanelSetMessageData CWxSurgeryDummyMsg rSelectedItem
+ ShowMessage CWxSurgeryDummyMsg
+ endif
+
+ endif
+
+end
diff --git a/src/CWxOnUnequipPulseGun.gek b/src/CWxOnUnequipPulseGun.gek
new file mode 100644
index 0000000..8dea999
--- /dev/null
+++ b/src/CWxOnUnequipPulseGun.gek
@@ -0,0 +1,11 @@
+scn CWxOnUnequipPulseGun
+
+ref rEquipper
+ref rEquipment
+
+begin function { rEquipper, rEquipment }
+
+ printd "Cyberware: Removing OnCharge handler"
+ SetOnAnimActionEventHandler CWxOnChargePulse 0 playerRef 5
+
+end
diff --git a/src/CWxPanelGetImplantInfo.gek b/src/CWxPanelGetImplantInfo.gek
new file mode 100644
index 0000000..05b8f9b
--- /dev/null
+++ b/src/CWxPanelGetImplantInfo.gek
@@ -0,0 +1,24 @@
+scn CWxPanelGetImplantInfo
+
+ref rImplant
+ref rTemp
+int i
+
+begin function { rImplant }
+
+ DebugPrint "Cyberware: Getting info for %n" rImplant
+ set i to ListGetFormIndex CWxImplantsAllList rImplant
+
+ if i > -1
+ set rTemp to ListGetNthForm CWxImplantsDescList i
+ if rTemp
+ DebugPrint "Cyberware: Found info %n" rTemp
+ set rImplant to rTemp
+ else
+ DebugPrint "Cyberware: Unable to find info for %n" rImplant
+ endif
+ endif
+
+ SetFunctionValue rImplant
+
+end
diff --git a/src/CWxPanelIsNotUnique.gek b/src/CWxPanelIsNotUnique.gek
new file mode 100644
index 0000000..d910a0b
--- /dev/null
+++ b/src/CWxPanelIsNotUnique.gek
@@ -0,0 +1,148 @@
+scn CWxPanelIsNotUnique
+
+ref altSlot1
+ref altSlot2
+ref altSlot3
+
+; 0 - not unique
+; 1 - unique, single item
+; 2 - unique, list
+short uniqueType
+ref uniqueList
+
+int i
+int size
+ref element
+int selectedRegion
+ref selectedImplant
+int currentSlot
+
+begin function { selectedRegion, selectedImplant, currentSlot }
+
+ ; Determine if implant is unique
+ set uniqueType to 0
+ set i to 0
+ set size to (listGetCount CWxImplantsUniqueList)
+
+ label 56
+ if i < size
+ set element to listGetNthForm CWxImplantsUniqueList i
+
+ ; List?
+ if getType element == 85
+ if listGetFormIndex element selectedImplant != -1
+ set uniqueType to 2
+ set uniqueList to element
+ endif
+ else
+ if selectedImplant == element
+ set uniqueType to 1
+ endif
+ endif
+
+ if uniqueType == 0
+ set i to i + 1
+ goto 56
+ endif
+ endif
+
+ ; Check for unique head & torso implants
+ if uniqueType > 0
+ if selectedRegion == 1
+ if currentSlot == 1
+ set altSlot1 to CWxImplantsPanel.newHeadImplant2
+ set altSlot2 to CWxImplantsPanel.newHeadImplant3
+ set altSlot3 to CWxImplantsPanel.newHeadImplant4
+ elseif currentSlot == 2
+ set altSlot1 to CWxImplantsPanel.newHeadImplant1
+ set altSlot2 to CWxImplantsPanel.newHeadImplant3
+ set altSlot3 to CWxImplantsPanel.newHeadImplant4
+ elseif currentSlot == 3
+ set altSlot1 to CWxImplantsPanel.newHeadImplant1
+ set altSlot2 to CWxImplantsPanel.newHeadImplant2
+ set altSlot3 to CWxImplantsPanel.newHeadImplant4
+ else
+ set altSlot1 to CWxImplantsPanel.newHeadImplant1
+ set altSlot2 to CWxImplantsPanel.newHeadImplant2
+ set altSlot3 to CWxImplantsPanel.newHeadImplant3
+ endif
+
+ elseif selectedRegion == 2
+ if currentSlot == 1
+ set altSlot1 to CWxImplantsPanel.newTorsoImplant2
+ set altSlot2 to CWxImplantsPanel.newTorsoImplant3
+ set altSlot3 to CWxImplantsPanel.newTorsoImplant4
+ elseif currentSlot == 2
+ set altSlot1 to CWxImplantsPanel.newTorsoImplant1
+ set altSlot2 to CWxImplantsPanel.newTorsoImplant3
+ set altSlot3 to CWxImplantsPanel.newTorsoImplant4
+ elseif currentSlot == 3
+ set altSlot1 to CWxImplantsPanel.newTorsoImplant1
+ set altSlot2 to CWxImplantsPanel.newTorsoImplant2
+ set altSlot3 to CWxImplantsPanel.newTorsoImplant4
+ else
+ set altSlot1 to CWxImplantsPanel.newTorsoImplant1
+ set altSlot2 to CWxImplantsPanel.newTorsoImplant2
+ set altSlot3 to CWxImplantsPanel.newTorsoImplant3
+ endif
+
+ elseif selectedRegion == 3
+ if currentSlot == 1
+ set altSlot1 to CWxImplantsPanel.newRightArmImplant2
+ set altSlot2 to 0
+ set altSlot3 to 0
+ else
+ set altSlot1 to CWxImplantsPanel.newRightArmImplant1
+ set altSlot2 to 0
+ set altSlot3 to 0
+ endif
+
+ elseif selectedRegion == 4
+ if currentSlot == 2
+ set altSlot1 to CWxImplantsPanel.newLeftArmImplant2
+ set altSlot2 to 0
+ set altSlot3 to 0
+ else
+ set altSlot1 to CWxImplantsPanel.newLeftArmImplant1
+ set altSlot2 to 0
+ set altSlot3 to 0
+ endif
+
+ elseif selectedRegion == 5
+ if currentSlot == 1
+ set altSlot1 to CWxImplantsPanel.newRightLegImplant2
+ set altSlot2 to 0
+ set altSlot3 to 0
+ else
+ set altSlot1 to CWxImplantsPanel.newRightLegImplant1
+ set altSlot2 to 0
+ set altSlot3 to 0
+ endif
+
+ elseif selectedRegion == 6
+ if currentSlot == 2
+ set altSlot1 to CWxImplantsPanel.newLeftLegImplant2
+ set altSlot2 to 0
+ set altSlot3 to 0
+ else
+ set altSlot1 to CWxImplantsPanel.newLeftLegImplant1
+ set altSlot2 to 0
+ set altSlot3 to 0
+ endif
+ endif
+
+ ; Other slots already contain this implant type?
+ if uniqueType == 1
+ if altSlot1 == selectedImplant || altSlot2 == selectedImplant || altSlot3 == selectedImplant
+ SetFunctionValue 1
+ return
+ endif
+ else
+ if listGetFormIndex uniqueList altSlot1 != -1 || listGetFormIndex uniqueList altSlot2 != -1 || listGetFormIndex uniqueList altSlot3 != -1
+ SetFunctionValue 1
+ return
+ endif
+ endif
+ endif
+
+end
diff --git a/src/CWxPanelPostSurgery.gek b/src/CWxPanelPostSurgery.gek
new file mode 100644
index 0000000..1b58045
--- /dev/null
+++ b/src/CWxPanelPostSurgery.gek
@@ -0,0 +1,46 @@
+scn CWxPanelPostSurgery
+
+begin function {}
+
+ printd "Cyberware: Calling post-surgery script"
+
+ if GetPlayerControlsDisabled
+ EnablePlayerControls
+ endif
+
+ if CWxHelpScannerShown == 0
+ if player.HasPerk CWxImplantScannerPerk
+ printd "Cyberware: Showing Scanner tutorial"
+ set CWxHelpScannerShown to 1
+ ShowTutorialMenu CWxScannerHelpMsg
+ return
+ endif
+ endif
+
+ if CWxHelpBionicEyesShown == 0
+ if player.HasPerk CWxImplantVisionModePerk
+ printd "Cyberware: Showing Bionic Eyes tutorial"
+ set CWxHelpBionicEyesShown to 1
+ ShowTutorialMenu CWxBionicEyesHelpMsg
+ return
+ endif
+ endif
+
+ if CWxHelpStealthShown == 0
+ if player.HasPerk CWxImplantStealthPerk
+ printd "Cyberware: Showing Stealth tutorial"
+ set CWxHelpStealthShown to 1
+ ShowTutorialMenu CWxStealthFieldHelpMsg
+ return
+ endif
+ endif
+
+ SetGameMainLoopCallback CWxPanelPostSurgery 0
+
+ if GetQuestCompleted CWxImplantSurgeonQuest == 0
+ CompleteAllObjectives CWxImplantSurgeonQuest
+ CompleteQuest CWxImplantSurgeonQuest
+ StopQuest CWxImplantSurgeonQuest
+ endif
+
+end
diff --git a/src/CWxPanelQuestScript.gek b/src/CWxPanelQuestScript.gek
new file mode 100644
index 0000000..b851d75
--- /dev/null
+++ b/src/CWxPanelQuestScript.gek
@@ -0,0 +1,619 @@
+scn CWxPanelQuestScript
+
+; 0 - disabled
+; 1 - launched, wait for menu mode
+; 2 - arrived in menu mode
+short initPhase
+
+; NOTE: Left/right w.r.t. to the cyberboy perspective, so left=right side, right = left side
+
+; 0 - none
+; 1 - head
+; 2 - torso
+; 3 - right arm
+; 4 - left arm
+; 5 - right leg
+; 6 - left leg
+short selectedRegion
+short lastSelectedRegion
+short refreshRegion
+
+; 0 - none
+; 1 - right 1
+; 2 - left 1
+; 3 - right 2
+; 4 - left 2
+short selectedSlot ; instantly reset, thats why theres currentSlot to save the value
+short currentSlot
+
+ref rCurrentMessage
+
+; Empty ref variable for using in UDF calls
+ref rEmptyRef
+
+short changedSlots
+
+short showRightSlot1
+short showRightSlot2
+short showLeftSlot1
+short showLeftSlot2
+
+ref newHeadImplant1
+ref newHeadImplant2
+ref newHeadImplant3
+ref newHeadImplant4
+
+ref newTorsoImplant1
+ref newTorsoImplant2
+ref newTorsoImplant3
+ref newTorsoImplant4
+
+ref newRightArmImplant1
+ref newRightArmImplant2
+
+ref newLeftArmImplant1
+ref newLeftArmImplant2
+
+ref newRightLegImplant1
+ref newRightLegImplant2
+
+ref newLeftLegImplant1
+ref newLeftLegImplant2
+
+ref rightSlotImplant1
+ref rightSlotImplant2
+ref leftSlotImplant1
+ref leftSlotImplant2
+
+short iButton
+
+ref selectedImplant
+
+float price
+
+short i
+short size
+ref regionList
+ref element
+
+float fTemp
+int iPage
+int pageCount
+
+short menuSize
+short t1
+short t2
+
+string_var sTemp
+int bPerformSurgery
+ref rTemp
+
+int bMenuImplantsPage
+int bShowImplantsBox
+
+;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
+begin GameMode
+
+ if initPhase == 0
+
+ set initPhase to 1
+
+ imod CWxControlPanelISFX
+
+ ShowTutorialMenu CWxSurgeryDummyMsg
+
+ ; Hide Tutorial Menu and show custom one instead - Try #1
+ SetUIFloat "TutorialMenu\_PNxImplantsPanelEnabled" 1
+ SetUIFloat "TutorialMenu\NOGLOW_BRANCH\visible" 0
+
+ return
+
+ elseif initPhase == 1
+ return
+ endif
+
+ ; Back after close, menu was exited
+
+ printd "Cyberware: Panel exited"
+
+ rimod CWxControlPanelISFX
+
+ if bPerformSurgery
+
+ set bPerformSurgery to 0
+
+ DisablePlayerControls 1 1 1 1 1 1
+
+ ; Update perks
+ call CWxFnCallFormList CWxImplantsWorkerList 0
+
+ printd "Starting surgery sequence"
+
+ ; We use CWxImplants for persistence, so we can safely reset this quest
+ ResetQuest CWxImplantsPanel
+ printd "Cyberware: Panel quest has been reset"
+
+ StopQuest CWxImplantsPanel
+ printd "Cyberware: Panel quest stopped"
+
+ playerRef.PlaySound3D NPCHumanDoctorHealTap
+ playerRef.PlaySound3D NPCRobotMrHandyAttackSaw
+
+ imod FadeToBlack4sISFX
+
+ SetGameMainLoopCallback CWxPanelPostSurgery 1 320 1
+
+ else
+
+ printd "No accept - undo any inventory changes"
+
+ call CWxPanelSwapImplants CWxImplants.headImplant1 newHeadImplant1
+ call CWxPanelSwapImplants CWxImplants.headImplant2 newHeadImplant2
+ call CWxPanelSwapImplants CWxImplants.headImplant3 newHeadImplant3
+ call CWxPanelSwapImplants CWxImplants.headImplant4 newHeadImplant4
+ call CWxPanelSwapImplants CWxImplants.torsoImplant1 newTorsoImplant1
+ call CWxPanelSwapImplants CWxImplants.torsoImplant2 newTorsoImplant2
+ call CWxPanelSwapImplants CWxImplants.torsoImplant3 newTorsoImplant3
+ call CWxPanelSwapImplants CWxImplants.torsoImplant4 newTorsoImplant4
+ call CWxPanelSwapImplants CWxImplants.rightArmImplant1 newRightArmImplant1
+ call CWxPanelSwapImplants CWxImplants.rightArmImplant2 newRightArmImplant2
+ call CWxPanelSwapImplants CWxImplants.leftArmImplant1 newLeftArmImplant1
+ call CWxPanelSwapImplants CWxImplants.leftArmImplant2 newLeftArmImplant2
+ call CWxPanelSwapImplants CWxImplants.rightLegImplant1 newRightLegImplant1
+ call CWxPanelSwapImplants CWxImplants.rightLegImplant2 newRightLegImplant2
+ call CWxPanelSwapImplants CWxImplants.leftLegImplant1 newLeftLegImplant1
+ call CWxPanelSwapImplants CWxImplants.leftLegImplant2 newLeftLegImplant2
+
+ ResetQuest CWxImplantsPanel
+ StopQuest CWxImplantsPanel
+
+ printd "Cyberware: Panel quest has been reset"
+
+ endif
+
+End
+
+begin MenuMode 1001
+ if GetUIFloat "TutorialMenu\_PNxCyberboyMenuActive" != 1
+ SetUIFloat "TutorialMenu\_PNxCyberboyMenuActive" 1
+ endif
+end
+
+Begin MenuMode 1059
+
+ if MenuMode 1001
+ return
+ endif
+
+ if initPhase < 2
+
+ set initPhase to 2
+
+ printd "Panel init"
+
+ ; Check if the Project Nevada panel has been injected by UIO
+ if GetUIFloat "TutorialMenu\_PNxImplants" > 0
+ ResetQuest CWxImplantsPanel
+ StopQuest CWxImplantsPanel
+ rimod CWxControlPanelISFX
+ showMessage CWxErrorPNDetectedMsg
+ return
+ endif
+
+ ; Check if the implants panel is even there
+ if GetUIFloat "TutorialMenu\_CWxImplants" < 1
+ ResetQuest CWxImplantsPanel
+ StopQuest CWxImplantsPanel
+ rimod CWxControlPanelISFX
+ showMessage CWxErrorNoPanelMsg
+ return
+ endif
+
+ set refreshRegion to 1
+
+ set newHeadImplant1 to CWxImplants.headImplant1
+ set newHeadImplant2 to CWxImplants.headImplant2
+ set newHeadImplant3 to CWxImplants.headImplant3
+ set newHeadImplant4 to CWxImplants.headImplant4
+ set newTorsoImplant1 to CWxImplants.torsoImplant1
+ set newTorsoImplant2 to CWxImplants.torsoImplant2
+ set newTorsoImplant3 to CWxImplants.torsoImplant3
+ set newTorsoImplant4 to CWxImplants.torsoImplant4
+ set newRightArmImplant1 to CWxImplants.rightArmImplant1
+ set newRightArmImplant2 to CWxImplants.rightArmImplant2
+ set newLeftArmImplant1 to CWxImplants.leftArmImplant1
+ set newLeftArmImplant2 to CWxImplants.leftArmImplant2
+ set newRightLegImplant1 to CWxImplants.rightLegImplant1
+ set newRightLegImplant2 to CWxImplants.rightLegImplant2
+ set newLeftLegImplant1 to CWxImplants.leftLegImplant1
+ set newLeftLegImplant2 to CWxImplants.leftLegImplant2
+
+ ; Hide Tutorial Menu and show custom one instead - Try #2
+ setUIFloat "TutorialMenu\_PNxImplantsPanelEnabled" 1
+ setUIFloat "TutorialMenu\NOGLOW_BRANCH\visible" 0
+
+ setUIString "TutorialMenu\_PNxImplantsPanelCaps" "0"
+ setUIString "TutorialMenu\_PNxImplantsPanelPrice" "0"
+
+ call CWxPanelUpdatePrice
+
+ set selectedRegion to 0
+
+ if ListGetCount CWxImplantsAllList != ListGetCount CWxImplantsDescList
+ print "Cyberware: Number of elements in CWxImplantsAllList and CWxImplantsDescList is not equal!"
+ endif
+
+ return
+
+
+ elseif rCurrentMessage == CWxSurgeryConfirmMsg
+
+
+ set iButton to GetButtonPressed
+
+ if iButton == -1
+ return
+ endif
+
+ set rCurrentMessage to 0
+
+ if iButton == 0
+ printd "Accept pressed Yes"
+ player.removeItem Caps001 price 1
+
+ ; Commit implant changes
+ set CWxImplants.headImplant1 to newHeadImplant1
+ set CWxImplants.headImplant2 to newHeadImplant2
+ set CWxImplants.headImplant3 to newHeadImplant3
+ set CWxImplants.headImplant4 to newHeadImplant4
+ set CWxImplants.torsoImplant1 to newTorsoImplant1
+ set CWxImplants.torsoImplant2 to newTorsoImplant2
+ set CWxImplants.torsoImplant3 to newTorsoImplant3
+ set CWxImplants.torsoImplant4 to newTorsoImplant4
+ set CWxImplants.rightArmImplant1 to newRightArmImplant1
+ set CWxImplants.rightArmImplant2 to newRightArmImplant2
+ set CWxImplants.leftArmImplant1 to newLeftArmImplant1
+ set CWxImplants.leftArmImplant2 to newLeftArmImplant2
+ set CWxImplants.rightLegImplant1 to newRightLegImplant1
+ set CWxImplants.rightLegImplant2 to newRightLegImplant2
+ set CWxImplants.leftLegImplant1 to newLeftLegImplant1
+ set CWxImplants.leftLegImplant2 to newLeftLegImplant2
+
+ set bPerformSurgery to 1
+
+ set t1 to GameDaysPassed
+ if GameHour + changedSlots < 24
+ set GameHour to GameHour + changedSlots
+ set GameDaysPassed to (t1 + (GameHour / 24))
+ else
+ set t2 to ((GameHour + changedSlots) / 24)
+ set GameHour to GameHour + changedSlots
+ set GameDaysPassed to (t1 + t2 + ((GameHour % 24) / 24))
+ endif
+
+ ; Replaced unsafe con_closeAllMenus with emulated click on the close button
+ ClickMenuButton "TutorialMenu\PNxImplantsPanel\PNxImplantsPanelCloseButton" 1
+
+ return
+ endif
+
+ ; No
+ printd "Accept pressed No"
+ return
+
+
+ elseif (GetUIFloat "TutorialMenu\_PNxImplantsPanelAcceptSelected") || (isKeyPressed 30 && GetUIFloat "TutorialMenu\_PNxImplantsPanelAcceptEnabled" && menuMode 1059)
+
+
+ printd "Accept confirmation"
+ set rCurrentMessage to CWxSurgeryConfirmMsg
+ ShowMessage CWxSurgeryConfirmMsg
+ return
+
+
+ elseif refreshRegion == 1
+
+
+ printd "Refreshing regions"
+
+ set refreshRegion to 0
+
+ set showRightSlot1 to (selectedRegion == 1 || selectedRegion == 2 || selectedRegion == 3 || selectedRegion == 5)
+ set showLeftSlot1 to (selectedRegion == 1 || selectedRegion == 2 || selectedRegion == 4 || selectedRegion == 6)
+
+ set showRightSlot2 to ((selectedRegion == 1 && player.hasPerk CWxExtraHeadSlotsPerk) || (selectedRegion == 2 && player.hasPerk CWxExtraTorsoSlotsPerk))
+ set showLeftSlot2 to showRightSlot2
+
+ set showRightSlot2 to showRightSlot2 || ((selectedRegion == 3 && player.hasPerk CWxExtraArmSlotsPerk) || (selectedRegion == 5 && player.hasPerk CWxExtraLegSlotsPerk))
+ set showLeftSlot2 to showLeftSlot2 || ((selectedRegion == 4 && player.hasPerk CWxExtraArmSlotsPerk) || (selectedRegion == 6 && player.hasPerk CWxExtraLegSlotsPerk))
+
+ setUIFloat "TutorialMenu\_PNxCyberboyShowRightSlot1" showRightSlot1
+ setUIFloat "TutorialMenu\_PNxCyberboyShowLeftSlot1" showLeftSlot1
+ setUIFloat "TutorialMenu\_PNxCyberboyShowRightSlot2" showRightSlot2
+ setUIFloat "TutorialMenu\_PNxCyberboyShowLeftSlot2" showLeftSlot2
+ setUIFloat "TutorialMenu\_PNxCyberboyRegion" selectedRegion
+
+ if selectedRegion == 1 ;head
+ call CWxPanelShowRegion selectedRegion newHeadImplant1 newHeadImplant2 newHeadImplant3 newHeadImplant4 showRightSlot2
+ elseif selectedRegion == 2 ; torso
+ call CWxPanelShowRegion selectedRegion newTorsoImplant1 newTorsoImplant2 newTorsoImplant3 newTorsoImplant4 showRightSlot2
+ elseif selectedRegion == 3 ; right arm
+ call CWxPanelShowRegion selectedRegion newRightArmImplant1 rEmptyRef newRightArmImplant2 rEmptyRef showRightSlot2
+ elseif selectedRegion == 4 ; left arm
+ call CWxPanelShowRegion selectedRegion rEmptyRef newLeftArmImplant1 rEmptyRef newLeftArmImplant2 showLeftSlot2
+ elseif selectedRegion == 5 ; right leg
+ call CWxPanelShowRegion selectedRegion newRightLegImplant1 rEmptyRef newRightLegImplant2 rEmptyRef showRightSlot2
+ elseif selectedRegion == 6 ; left leg
+ call CWxPanelShowRegion selectedRegion rEmptyRef newLeftLegImplant1 rEmptyRef newLeftLegImplant2 showLeftSlot2
+ endif
+
+
+ elseif bShowImplantsBox
+
+
+ set fTemp to ListGetCount CWxImplantsAvailableList
+ set fTemp to fTemp / CWxImplantsPerPage
+
+ set pageCount to ceil fTemp
+
+ printd "Implant list, page " + $iPage + ", page count " + $pageCount
+
+ set i to iPage * CWxImplantsPerPage
+ set menuSize to 1
+
+ let sTemp := ""
+ while (menuSize <= CWxImplantsPerPage) && (rTemp := ListGetNthForm CWxImplantsAvailableList i)
+ let sTemp := $sTemp + "|" + $(GetName rTemp)
+ set i to i + 1
+ set menuSize to menuSize + 1
+ loop
+
+ if (iPage + 1) < pageCount
+ let sTemp := $sTemp + "|Next page >"
+ set menuSize to menuSize + 1
+ endif
+
+ let sTemp := $sTemp + "|<<< Back"
+
+ set bShowImplantsBox to 0
+ set bMenuImplantsPage to 1
+
+ MessageBoxEx $sTemp
+
+ sv_destruct sTemp
+
+ return
+
+
+ elseif rCurrentMessage == CWxPanelInstallMsg
+
+
+ set iButton to GetButtonPressed
+
+ if iButton == -1
+ return
+ endif
+
+ set rCurrentMessage to 0
+
+ if iButton == 0
+ ; Install
+ call CWxPanelSetSlot selectedRegion currentSlot selectedImplant
+
+ player.removeItem selectedImplant 1 1
+ set refreshRegion to 1
+
+ call CWxPanelUpdatePrice
+ endif
+
+ return
+
+
+ elseif bMenuImplantsPage
+
+
+ set iButton to GetButtonPressed
+
+ if iButton == -1
+ ;printd "Waiting for implant button"
+ return
+ endif
+
+ set bMenuImplantsPage to 0
+ printd "Pressed item in implant list"
+
+ ; Handle "<<< Back"
+ if iButton == menuSize - 1
+ if iPage > 0
+ set iPage to iPage - 1
+ set bShowImplantsBox to 1
+ endif
+ return
+ endif
+
+ ; Handle "Next page >"
+ if (iPage + 1) < pageCount
+ if iButton == menuSize - 2
+ set iPage to iPage + 1
+ set bShowImplantsBox to 1
+ return
+ endif
+ endif
+
+ set i to iPage * CWxImplantsPerPage + iButton
+ set selectedImplant to ListGetNthForm CWxImplantsAvailableList i
+
+ if eval call CWxPanelIsNotUnique selectedRegion selectedImplant currentSlot
+ ShowMessage CWxErrorUniqueImplantMsg
+ return
+ endif
+
+ call CWxPanelSetMessageData CWxPanelInstallMsg selectedImplant
+
+ set rCurrentMessage to CWxPanelInstallMsg
+
+ ShowMessage CWxPanelInstallMsg
+
+ return
+
+
+ elseif rCurrentMessage == CWxPanelRemoveMsg
+
+
+ set iButton to GetButtonPressed
+
+ if iButton == -1
+ printd "Waiting for removal confirmation"
+ return
+ endif
+
+ set rCurrentMessage to 0
+
+ printd "Pressed button " + $iButton
+
+ if iButton == 0 ; Yes
+
+ printd "Confirmed removing implant"
+
+ call CWxPanelSetSlot selectedRegion currentSlot rEmptyRef
+
+ player.addItem selectedImplant 1 1
+
+ set refreshRegion to 1
+ call CWxPanelUpdatePrice
+
+ endif
+
+ return
+
+
+ elseif selectedSlot > 0
+
+
+ set selectedSlot to 0
+ printd "Selected slot " + $currentSlot
+
+ if currentSlot == 1
+ set selectedImplant to rightSlotImplant1
+ elseif currentSlot == 2
+ set selectedImplant to leftSlotImplant1
+ elseif currentSlot == 3
+ set selectedImplant to rightSlotImplant2
+ elseif currentSlot == 4
+ set selectedImplant to leftSlotImplant2
+ else
+ return
+ endif
+
+ if selectedImplant == 0 ; Empty slot
+
+ printd "Slot is empty"
+
+ ; Select region list
+ if selectedRegion == 1
+ set rTemp to CWxImplantsHeadList
+ elseif selectedRegion == 2
+ set rTemp to CWxImplantsTorsoList
+ elseif selectedRegion == 3 || selectedRegion == 4
+ set rTemp to CWxImplantsArmsList
+ elseif selectedRegion == 5 || selectedRegion == 6
+ set rTemp to CWxImplantsLegsList
+ endif
+
+ ; Clear the list of available implants
+ ListClear CWxImplantsAvailableList
+
+ set i to 0
+
+ while element := ListGetNthForm rTemp i
+
+ if player.GetItemCount element > 0 && ListGetFormIndex CWxImplantsAvailableList element == -1
+ ListAddForm CWxImplantsAvailableList element
+ endif
+
+ set i to i + 1
+ loop
+
+ if ListGetCount CWxImplantsAvailableList <= 0
+ ShowMessage CWxErrorNoImplantsMsg
+ return
+ endif
+
+ set iPage to 0
+ set bShowImplantsBox to 1
+
+ else ; Filled slot
+
+ printd "Slot is not empty"
+
+ call CWxPanelSetMessageData CWxPanelRemoveMsg selectedImplant
+
+ set rCurrentMessage to CWxPanelRemoveMsg
+
+ ShowMessage CWxPanelRemoveMsg
+
+ endif
+
+
+ return
+
+
+ elseif rCurrentMessage != 0
+
+
+ printd "Cyberware: Current message was not empty, but not processed."
+ set rCurrentMessage to 0
+
+
+ else
+
+
+ ;printd "Idling"
+
+ SetUIFloat "TutorialMenu\_PNxCyberboyMenuActive" 0
+
+ if getUIFloat "TutorialMenu\_PNxCyberboyHeadSelected"
+ set selectedRegion to 1
+ elseif getUIFloat "TutorialMenu\_PNxCyberboyTorsoSelected"
+ set selectedRegion to 2
+ elseif getUIFloat "TutorialMenu\_PNxCyberboyRightArmSelected"
+ set selectedRegion to 3
+ elseif getUIFloat "TutorialMenu\_PNxCyberboyLeftArmSelected"
+ set selectedRegion to 4
+ elseif getUIFloat "TutorialMenu\_PNxCyberboyRightLegSelected"
+ set selectedRegion to 5
+ elseif getUIFloat "TutorialMenu\_PNxCyberboyLeftLegSelected"
+ set selectedRegion to 6
+ else
+ set selectedRegion to 0
+ endif
+
+ if lastSelectedRegion != selectedRegion
+
+ set lastSelectedRegion to selectedRegion
+ set refreshRegion to 1
+
+ printd "New region selected"
+
+ endif
+
+ if GetUIFloat "TutorialMenu\_PNxCyberboyRightImplant1Selected"
+ set selectedSlot to 1
+ elseif GetUIFloat "TutorialMenu\_PNxCyberboyLeftImplant1Selected"
+ set selectedSlot to 2
+ elseif GetUIFloat "TutorialMenu\_PNxCyberboyRightImplant2Selected"
+ set selectedSlot to 3
+ elseif GetUIFloat "TutorialMenu\_PNxCyberboyLeftImplant2Selected"
+ set selectedSlot to 4
+ else
+ set selectedSlot to 0
+ endif
+
+ if selectedSlot > 0
+ set currentSlot to selectedSlot
+ endif
+
+
+ endif
+
+end
diff --git a/src/CWxPanelSetMessageData.gek b/src/CWxPanelSetMessageData.gek
new file mode 100644
index 0000000..cfa4707
--- /dev/null
+++ b/src/CWxPanelSetMessageData.gek
@@ -0,0 +1,23 @@
+scn CWxPanelSetMessageData
+
+ref rMessage
+ref rImplant
+ref rTemp
+int i
+string_var sTemp
+
+begin function { rMessage, rImplant }
+
+ set rImplant to call CWxPanelGetImplantInfo rImplant
+
+ let sTemp := GetName rImplant
+ printd "Cyberware: Setting name to " + $sTemp
+ SetName $sTemp rMessage
+
+ let sTemp := GetFormDescription rImplant
+ printd "Cyberware: Setting description to " + $sTemp
+ SetFormDescription rMessage $sTemp
+
+ sv_destruct sTemp
+
+end
diff --git a/src/CWxPanelSetSlot.gek b/src/CWxPanelSetSlot.gek
new file mode 100644
index 0000000..bbb2cf8
--- /dev/null
+++ b/src/CWxPanelSetSlot.gek
@@ -0,0 +1,56 @@
+scn CWxPanelSetSlot
+
+int selectedRegion
+int currentSlot
+ref rValue
+
+begin function { selectedRegion, currentSlot, rValue }
+
+ if selectedRegion == 1
+ if currentSlot == 1
+ set CWxImplantsPanel.newHeadImplant1 to rValue
+ elseif currentSlot == 2
+ set CWxImplantsPanel.newHeadImplant2 to rValue
+ elseif currentSlot == 3
+ set CWxImplantsPanel.newHeadImplant3 to rValue
+ else
+ set CWxImplantsPanel.newHeadImplant4 to rValue
+ endif
+ elseif selectedRegion == 2
+ if currentSlot == 1
+ set CWxImplantsPanel.newTorsoImplant1 to rValue
+ elseif currentSlot == 2
+ set CWxImplantsPanel.newTorsoImplant2 to rValue
+ elseif currentSlot == 3
+ set CWxImplantsPanel.newTorsoImplant3 to rValue
+ else
+ set CWxImplantsPanel.newTorsoImplant4 to rValue
+ endif
+ elseif selectedRegion == 3
+ if currentSlot == 1
+ set CWxImplantsPanel.newRightArmImplant1 to rValue
+ else
+ set CWxImplantsPanel.newRightArmImplant2 to rValue
+ endif
+ elseif selectedRegion == 4
+ if currentSlot == 2
+ set CWxImplantsPanel.newLeftArmImplant1 to rValue
+ else
+ set CWxImplantsPanel.newLeftArmImplant2 to rValue
+ endif
+ elseif selectedRegion == 5
+ if currentSlot == 1
+ set CWxImplantsPanel.newRightLegImplant1 to rValue
+ else
+ set CWxImplantsPanel.newRightLegImplant2 to rValue
+ endif
+ elseif selectedRegion == 6
+ if currentSlot == 2
+ set CWxImplantsPanel.newLeftLegImplant1 to rValue
+ else
+ set CWxImplantsPanel.newLeftLegImplant2 to rValue
+ endif
+ endif
+
+end
+
diff --git a/src/CWxPanelShowRegion.gek b/src/CWxPanelShowRegion.gek
new file mode 100644
index 0000000..962def1
--- /dev/null
+++ b/src/CWxPanelShowRegion.gek
@@ -0,0 +1,31 @@
+scn CWxPanelShowRegion
+
+int iRegion
+ref rightSlotImplant1
+ref rightSlotImplant2
+ref leftSlotImplant1
+ref leftSlotImplant2
+int bExtra
+int iLineNum
+
+begin function { iRegion, rightSlotImplant1, leftSlotImplant1, rightSlotImplant2, leftSlotImplant2, bExtra }
+
+ set CWxImplantsPanel.rightSlotImplant1 to rightSlotImplant1
+ set CWxImplantsPanel.leftSlotImplant1 to leftSlotImplant1
+ set CWxImplantsPanel.rightSlotImplant2 to rightSlotImplant2
+ set CWxImplantsPanel.leftSlotImplant2 to leftSlotImplant2
+
+ call CWxPanelShowSlot rightSlotImplant1 "TutorialMenu\_PNxCyberboyRightImplant1State" "TutorialMenu\_PNxCyberboyRightImplant1Path" 0
+ call CWxPanelShowSlot rightSlotImplant2 "TutorialMenu\_PNxCyberboyRightImplant2State" "TutorialMenu\_PNxCyberboyRightImplant2Path" 1
+ call CWxPanelShowSlot leftSlotImplant1 "TutorialMenu\_PNxCyberboyLeftImplant1State" "TutorialMenu\_PNxCyberboyLeftImplant1Path" 1
+ call CWxPanelShowSlot leftSlotImplant2 "TutorialMenu\_PNxCyberboyLeftImplant2State" "TutorialMenu\_PNxCyberboyLeftImplant2Path" 0
+
+ if bExtra
+ set iLineNum to iRegion + 6
+ else
+ set iLineNum to iRegion
+ endif
+
+ setUIFloat "TutorialMenu\_PNxCyberboyLineNum" iLineNum
+
+end
diff --git a/src/CWxPanelShowSlot.gek b/src/CWxPanelShowSlot.gek
new file mode 100644
index 0000000..32fa2eb
--- /dev/null
+++ b/src/CWxPanelShowSlot.gek
@@ -0,0 +1,38 @@
+scn CWxPanelShowSlot
+
+ref rSlotImplant
+string_var sStateNode
+string_var sTextureNode
+string_var sIcon
+int bLeft ; 0 - right, 1 - left
+
+begin function { rSlotImplant, sStateNode, sTextureNode, bLeft }
+
+ if rSlotImplant
+
+ set rSlotImplant to call CWxPanelGetImplantInfo rSlotImplant
+
+ let sIcon := GetIconPath rSlotImplant
+
+ if bLeft
+ sv_replace "_right_|_left_" sIcon
+ endif
+
+ printd "Setting " + $sTextureNode + " to " + $sIcon
+ printd "Setting " + $sStateNode + " to 1"
+
+ setUIString $sTextureNode $sIcon
+ setUIFloat $sStateNode 1
+
+ else
+
+ printd "Setting " + $sStateNode + " to 0"
+ setUIFloat $sStateNode 0
+
+ endif
+
+ sv_destruct sStateNode
+ sv_destruct sTextureNode
+ sv_destruct sIcon
+
+end
diff --git a/src/CWxPanelSwapImplants.gek b/src/CWxPanelSwapImplants.gek
new file mode 100644
index 0000000..0b341d8
--- /dev/null
+++ b/src/CWxPanelSwapImplants.gek
@@ -0,0 +1,23 @@
+scn CWxPanelSwapImplants
+
+ref rInstalledImplant
+ref rRemovedImplant
+
+begin function { rInstalledImplant, rRemovedImplant }
+
+ if rInstalledImplant == 0 && rRemovedImplant != 0
+
+ player.addItem rRemovedImplant 1 1
+
+ elseif rRemovedImplant != rInstalledImplant && rRemovedImplant != 0 && rInstalledImplant != 0
+
+ player.addItem rRemovedImplant 1 1
+ player.removeItem rInstalledImplant 1 1
+
+ elseif rInstalledImplant != 0 && rRemovedImplant == 0
+
+ player.removeItem rInstalledImplant 1 1
+
+ endif
+
+end
diff --git a/src/CWxPanelUpdatePrice.gek b/src/CWxPanelUpdatePrice.gek
new file mode 100644
index 0000000..14b98a1
--- /dev/null
+++ b/src/CWxPanelUpdatePrice.gek
@@ -0,0 +1,46 @@
+scn CWxPanelUpdatePrice
+
+; Refresh caps, costs and accept button
+short changedSlots
+float price
+short caps
+
+begin function {}
+
+ set changedSlots to 0
+ set changedSlots to changedSlots + (CWxImplantsPanel.newHeadImplant1 != CWxImplants.headImplant1)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newHeadImplant2 != CWxImplants.headImplant2)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newHeadImplant3 != CWxImplants.headImplant3)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newHeadImplant4 != CWxImplants.headImplant4)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newTorsoImplant1 != CWxImplants.torsoImplant1)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newTorsoImplant2 != CWxImplants.torsoImplant2)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newTorsoImplant3 != CWxImplants.torsoImplant3)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newTorsoImplant4 != CWxImplants.torsoImplant4)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newRightArmImplant1 != CWxImplants.rightArmImplant1)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newRightArmImplant2 != CWxImplants.rightArmImplant2)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newLeftArmImplant1 != CWxImplants.leftArmImplant1)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newLeftArmImplant2 != CWxImplants.leftArmImplant2)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newRightLegImplant1 != CWxImplants.rightLegImplant1)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newRightLegImplant2 != CWxImplants.rightLegImplant2)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newLeftLegImplant1 != CWxImplants.leftLegImplant1)
+ set changedSlots to changedSlots + (CWxImplantsPanel.newLeftLegImplant2 != CWxImplants.leftLegImplant2)
+
+ printd "Changed " + $changedSlots + " slots"
+
+ set price to changedSlots * (CWxSurgeryBasePrice + (CWxSurgeryBarterMult * player.getAV Barter))
+
+ set caps to player.getItemCount Caps001
+
+ setUIFloat "TutorialMenu\_PNxImplantsPanelCaps" caps
+ setUIFloat "TutorialMenu\_PNxImplantsPanelPrice" price
+
+ if caps < price || changedSlots == 0
+ setUIFloat "TutorialMenu\_PNxImplantsPanelAcceptEnabled" 0
+ else
+ setUIFloat "TutorialMenu\_PNxImplantsPanelAcceptEnabled" 1
+ endif
+
+ set CWxImplantsPanel.price to price
+ set CWxImplantsPanel.changedSlots to changedSlots
+
+end
diff --git a/src/CWxScannerOnAim.gek b/src/CWxScannerOnAim.gek
new file mode 100644
index 0000000..1f07ea8
--- /dev/null
+++ b/src/CWxScannerOnAim.gek
@@ -0,0 +1,23 @@
+scn CWxScannerOnAim
+
+int iControlID
+
+begin function { iControlID }
+
+ if MenuMode
+ return
+ endif
+
+ if player.IsInCombat
+ return
+ endif
+
+ printd "Triggered OnAim event"
+
+ if GetQuestRunning CWxScannerQuest == 0
+ StartQuest CWxScannerQuest
+ endif
+
+ SetOnMenuOpenEventHandler CWxScannerOnMenu 1
+
+end
diff --git a/src/CWxScannerOnAimDown.gek b/src/CWxScannerOnAimDown.gek
new file mode 100644
index 0000000..f6c8125
--- /dev/null
+++ b/src/CWxScannerOnAimDown.gek
@@ -0,0 +1,17 @@
+scn CWxScannerOnAimDown
+
+int iControlID
+
+begin function { iControlID }
+
+ if MenuMode
+ return
+ endif
+
+ printd "Cyberware: Triggered OnAimDown event"
+
+ if GetQuestRunning CWxScannerQuest || GetQuestRunning CWxScannerTextQuest
+ call CWxScannerStop
+ endif
+
+end
diff --git a/src/CWxScannerOnMenu.gek b/src/CWxScannerOnMenu.gek
new file mode 100644
index 0000000..706c6fa
--- /dev/null
+++ b/src/CWxScannerOnMenu.gek
@@ -0,0 +1,9 @@
+scn CWxScannerOnMenu
+
+int iMenuID
+
+begin function { iMenuID }
+
+ call CWxScannerStop
+
+end
diff --git a/src/CWxScannerOnScan.gek b/src/CWxScannerOnScan.gek
new file mode 100644
index 0000000..818ac30
--- /dev/null
+++ b/src/CWxScannerOnScan.gek
@@ -0,0 +1,17 @@
+scn CWxScannerOnScan
+
+int iControlID
+
+begin function { iControlID }
+
+ if IsControlPressed 6 == 0 ; not aiming
+ call CWxScannerStop
+ return
+ endif
+
+ call CWxScannerStopText
+
+ set CWxScannerTextQuest.curTarget to GetCrosshairRefEx
+ SetStage CWxScannerTextQuest 1
+
+end
diff --git a/src/CWxScannerQuestScript.gek b/src/CWxScannerQuestScript.gek
new file mode 100644
index 0000000..f73fd77
--- /dev/null
+++ b/src/CWxScannerQuestScript.gek
@@ -0,0 +1,103 @@
+scn CWxScannerQuestScript
+
+ref rTarget
+ref rNewTarget
+int iControl
+
+begin GameMode
+
+ if IsControlPressed 6 == 0 ; not aiming
+ call CWxScannerStop
+ return
+ endif
+
+ set rNewTarget to GetCrosshairRefEx
+
+ if rTarget == rNewTarget
+
+ if rTarget
+
+ ; If we approach NPC, holding zoom, the interaction prompt will change to "Talk".
+ ; As normal activation is temporarily disabled, we need to change it back to "Scan".
+
+
+ if GetUIFloat "HUDMainMenu\_DUIF3" > 0 ; DarnUI
+
+ if eval GetUIString "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/string" != "Scan"
+ SetUIString "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/string" "Scan"
+ endif
+
+ if GetUIFloat "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/visible" != 1
+ SetUIFloat "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/visible" 1
+ endif
+
+ else
+
+ if eval GetUIString "HUDMainMenu/Info/justify_center_hotrect/string" != "Scan"
+ SetUIString "HUDMainMenu/Info/justify_center_hotrect/string" "Scan"
+ endif
+
+ if GetUIFloat "HUDMainMenu/Info/justify_center_hotrect/visible" != 1
+ SetUIFloat "HUDMainMenu/Info/justify_center_hotrect/visible" 1
+ endif
+
+ endif
+
+ endif
+
+ return
+ endif
+
+ set rTarget to rNewTarget
+
+ if rTarget != 0
+ if rTarget.GetObjectType == 42 || rTarget.GetObjectType == 43
+ if rTarget.GetDead
+ set rTarget to 0
+ endif
+ else
+ set rTarget to 0
+ endif
+ endif
+
+ ; When new target or none, hide report
+ ; SetStage CWxScannerTextQuest 0
+
+ if rTarget == 0
+ if GetUIFloat "HUDMainMenu\_DUIF3" > 0 ; DarnUI
+ if eval GetUIString "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/string" == "Scan"
+ SetUIFloat "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/visible" 0
+ endif
+ else
+ if eval GetUIString "HUDMainMenu/Info/justify_center_hotrect/string" == "Scan"
+ SetUIFloat "HUDMainMenu/Info/justify_center_hotrect/visible" 0
+ endif
+ endif
+
+ SetOnControlDownEventHandler CWxScannerOnScan 0 5
+ EnableControl 5
+ ;playSound OBJSwitchButtonBFail
+ return
+ endif
+
+ set iControl to GetControl 5
+
+ if GetUIFloat "HUDMainMenu\_DUIF3" > 0 ; DarnUI
+ SetUIStringEx "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/_PCButtonText" "%k)" iControl
+ SetUIString "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/string" "Scan"
+ SetUIFloat "HUDMainMenu/InfoWrap/Info/justify_center_hotrect/visible" 1
+ else
+ SetUIStringEx "HUDMainMenu/Info/justify_center_hotrect/_PCButtonText" "%k)" iControl
+ SetUIString "HUDMainMenu/Info/justify_center_hotrect/string" "Scan"
+ SetUIFloat "HUDMainMenu/Info/justify_center_hotrect/visible" 1
+ endif
+
+ SetOnControlDownEventHandler CWxScannerOnScan 1 5
+ DisableControl 5
+
+end
+
+begin MenuMode
+ call CWxScannerStop
+end
+
diff --git a/src/CWxScannerStop.gek b/src/CWxScannerStop.gek
new file mode 100644
index 0000000..31e6210
--- /dev/null
+++ b/src/CWxScannerStop.gek
@@ -0,0 +1,20 @@
+scn CWxScannerStop
+
+begin function {}
+
+ SetOnMenuOpenEventHandler CWxScannerOnMenu 0
+ SetOnControlDownEventHandler CWxScannerOnScan 0 5
+ EnableControl 5
+
+ if GetActiveMenuMode == 0
+ if eval GetUIString "HUDMainMenu/Info/justify_center_hotrect/string" == "Scan"
+ SetUIFloat "HUDMainMenu/Info/justify_center_hotrect/visible" 0
+ endif
+ endif
+
+ ResetQuest CWxScannerQuest
+ StopQuest CWxScannerQuest
+
+ call CWxScannerStopText
+
+end
diff --git a/src/CWxScannerStopText.gek b/src/CWxScannerStopText.gek
new file mode 100644
index 0000000..f299c8f
--- /dev/null
+++ b/src/CWxScannerStopText.gek
@@ -0,0 +1,26 @@
+scn CWxScannerStopText
+
+begin function {}
+
+ ResetQuest CWxScannerTextQuest
+ StopQuest CWxScannerTextQuest
+
+ setUIFloat "HUDMainMenu/_CWxScannerEnabled" 0
+
+ setUIFloat "HUDMainMenu/_CWxScannerCursorPos" 0
+ setUIFloat "HUDMainMenu/_CWxScannerCursorLine" 0
+ setUIFloat "HUDMainMenu/_CWxScannerCursorBlink" 0
+ setUIFloat "HUDMainMenu/_CWxScannerCursorIndent" 0
+ setUIFloat "HUDMainMenu/_CWxScannerText1Index" 0
+ setUIFloat "HUDMainMenu/_CWxScannerText2Index" 0
+ setUIFloat "HUDMainMenu/_CWxScannerText3Index" 0
+ setUIFloat "HUDMainMenu/_CWxScannerText4Index" 0
+ setUIFloat "HUDMainMenu/_CWxScannerText5Index" 0
+ setUIFloat "HUDMainMenu/_CWxScannerText6Index" 0
+ setUIFloat "HUDMainMenu/_CWxScannerText7Index" 0
+ setUIFloat "HUDMainMenu/_CWxScannerText8Index" 0
+ setUIFloat "HUDMainMenu/_CWxScannerText9Index" 0
+ setUIFloat "HUDMainMenu/_CWxScannerText10Index" 0
+ setUIFloat "HUDMainMenu/_CWxScannerBoyEnabled" 0
+
+end
diff --git a/src/CWxScannerTextQuestScript.gek b/src/CWxScannerTextQuestScript.gek
new file mode 100644
index 0000000..cc02640
--- /dev/null
+++ b/src/CWxScannerTextQuestScript.gek
@@ -0,0 +1,632 @@
+scn CWxScannerTextQuestScript
+
+short stop
+
+ref curTarget
+
+short enabled
+short clear
+
+float sleepTimer
+float blinkTimer
+float updateTimer
+
+short line
+short word
+short pos
+short offset
+short index
+short cursorIndent
+short cursorBlink
+
+; 0 - off
+; 1 - clear
+; 2 - searching - print
+; 20 - searching - done
+; 3 - scanning - print
+; 30 - scanning - done
+short state
+
+; 1-high 2-medium 3-low
+short threat
+
+; 1-long 2-medium 3-short 4-melee
+short range
+
+; 1-high 2-medium 3-low
+short awareness
+
+; 1-allied 2-neutral 3-hostile
+short disposition
+
+short lastThreat
+short lastRange
+short lastAwareness
+short lastDisposition
+
+short scanningInit
+short threatInit
+short rangeInit
+short awarenessInit
+short dispositionInit
+short doneInit
+
+float curHealth
+float lastHealth
+float maxHealth
+float damageThreshold
+float tmp
+
+float damage
+
+ref weapon
+
+float fSneakPerceptionSkillMaxGMST
+float fSneakPerceptionSkillMinGMST
+
+float playerScore
+float targetScore
+
+begin MenuMode
+ call CWxScannerStop
+end
+
+Begin GameMode
+
+ if IsControlPressed 6 == 0 ; not aiming
+ call CWxScannerStop
+ return
+ endif
+
+if state == 0 || sleepTimer > 0
+
+ if blinkTimer > 0
+ set blinkTimer to blinkTimer - getSecondsPassed
+ else
+ set blinkTimer to 0.3
+ set cursorBlink to 1 - cursorBlink
+ setUIFloat "HUDMainMenu/_CWxScannerCursorBlink" cursorBlink
+ endif
+else
+ set cursorBlink to 0
+endif
+
+; Data output
+if state == 0
+
+ if sleepTimer > 0
+ set sleepTimer to sleepTimer - getSecondsPassed
+ return
+ endif
+
+ if updateTimer > 0
+ set updateTimer to updateTimer - getSecondsPassed
+ else
+ set updateTimer to 1
+
+ ; Scanner boy
+ set tmp to (100 - curTarget.getAV PerceptionCondition) / 100
+ setUIFloat "HUDMainMenu/_CWxScannerBoyHeadDamage" tmp
+ set tmp to (100 - curTarget.getAV EnduranceCondition) / 100
+ setUIFloat "HUDMainMenu/_CWxScannerBoyTorsoDamage" tmp
+ set tmp to (100 - curTarget.getAV LeftAttackCondition) / 100
+ setUIFloat "HUDMainMenu/_CWxScannerBoyLeftArmDamage" tmp
+ set tmp to (100 - curTarget.getAV RightAttackCondition) / 100
+ setUIFloat "HUDMainMenu/_CWxScannerBoyRightArmDamage" tmp
+ set tmp to (100 - curTarget.getAV LeftMobilityCondition) / 100
+ setUIFloat "HUDMainMenu/_CWxScannerBoyLeftLegDamage" tmp
+ set tmp to (100 - curTarget.getAV RightMobilityCondition) / 100
+ setUIFloat "HUDMainMenu/_CWxScannerBoyRightLegDamage" tmp
+
+ ; HP
+ set curHealth to curTarget.getAV Health
+ if curHealth == 0
+ setUIString "HUDMainMenu/_CWxScannerTextHP" "0"
+ else
+ setUIFloat "HUDMainMenu/_CWxScannerTextHP" curHealth
+ endif
+
+ ; DT
+ set damageThreshold to curTarget.getAV DamageThreshold
+ if damageThreshold == 0
+ setUIString "HUDMainMenu/_CWxScannerTextDT" "0"
+ else
+ setUIFloat "HUDMainMenu/_CWxScannerTextDT" damageThreshold
+ endif
+
+ ; Health bar
+ set maxHealth to curTarget.getBaseAV Health
+ if maxHealth != 0
+ set tmp to curHealth / maxHealth
+ if tmp < 0
+ set tmp to 0
+ endif
+ setUIFloat "HUDMainMenu/_CWxScannerHealth" tmp
+ endif
+
+ ; Damage estimate
+ if lastHealth < 0
+ set lastHealth to curHealth
+ endif
+ set damage to lastHealth - curHealth
+
+ if maxHealth != 0
+ set tmp to (curHealth - damage) / maxHealth
+ if tmp < 0
+ set tmp to 0
+ endif
+ setUIFloat "HUDMainMenu/_CWxScannerDamage" tmp
+ endif
+
+ set lastHealth to curHealth
+
+ ; Threat
+ set targetScore to curTarget.getBaseAV Health + 10 * curTarget.getAV DamageThreshold + 10 * curTarget.getLevel
+ set playerScore to player.getBaseAV Health + 10 * player.getAV DamageThreshold + 10 * player.getLevel
+
+ if targetScore > playerScore + 50
+ set threat to 1
+ elseif targetScore < playerScore - 50
+ set threat to 3
+ else
+ set threat to 2
+ endif
+
+ ; Range
+ set weapon to curTarget.getEquippedObject 5
+ if weapon == 0
+ set range to 4
+ elseif getWeaponSkill weapon == 38 || getWeaponSkill weapon == 45
+ set range to 4
+ else
+ if getWeaponMinSpread weapon < 0.5
+ set range to 1
+ elseif getWeaponMinSpread weapon < 1.4
+ set range to 2
+ else
+ set range to 3
+ endif
+ endif
+
+ ; Awareness
+ set fSneakPerceptionSkillMaxGMST to getNumericGameSetting fSneakPerceptionSkillMax
+ set fSneakPerceptionSkillMinGMST to getNumericGameSetting fSneakPerceptionSkillMin
+ set tmp to 1 + (curTarget.getIsAlerted * getNumericGameSetting fSneakAlertMod)
+ set tmp to tmp + (curTarget.getSleeping * getNumericGameSetting fSneakSleepBonus)
+ set tmp to tmp + ((curTarget.getCombatTarget != player) * getNumericGameSetting fSneakCombatMod)
+ set tmp to tmp * (fSneakPerceptionSkillMinGMST + (fSneakPerceptionSkillMaxGMST - fSneakPerceptionSkillMinGMST) * curTarget.getAV Perception / 10)
+
+ if tmp > 66
+ set awareness to 1
+ elseif tmp > 33
+ set awareness to 2
+ else
+ set awareness to 3
+ endif
+
+ ; Disposition
+ if curTarget.getCombatTarget == player
+ set disposition to 3
+ elseif curTarget.getFactionRelation player == 1
+ set disposition to 3
+ elseif curTarget.getFactionRelation player == 0
+ if curTarget.getAV Aggression >= 2
+ set disposition to 3
+ else
+ set disposition to 2
+ endif
+ elseif curTarget.getAV Assistance >= 1
+ set disposition to 1
+ ; Whatever.. :)
+ else
+ set disposition to 2
+ endif
+ endif
+
+ if scanningInit == 0
+ set scanningInit to 1
+
+ set line to 0
+ set word to 0
+ set offset to 0
+ set pos to 0
+ set cursorIndent to 0
+
+ set state to 30
+ return
+ endif
+
+ if threatInit == 0
+ set threatInit to 1
+
+ set line to 2
+ set word to 0
+ set offset to 0
+ set pos to 0
+ set cursorIndent to 0
+
+ set state to 30
+ return
+ else
+ if threat != lastThreat
+ ; high
+ if threat == 1
+ set word to 0
+ set offset to 0
+ ; medium
+ elseif threat == 2
+ set word to 1
+ set offset to 4
+ ; low
+ elseif threat == 3
+ set word to 2
+ set offset to 10
+ endif
+
+ set line to 3
+ set pos to 0
+ set cursorIndent to 2
+ set lastThreat to threat
+ set state to 30
+ return
+ endif
+ endif
+
+ if awarenessInit == 0
+ set awarenessInit to 1
+
+ set line to 5
+ set word to 0
+ set offset to 0
+ set pos to 0
+ set cursorIndent to 0
+
+ set state to 30
+ return
+ else
+ if awareness != lastAwareness
+ ; high
+ if awareness == 1
+ set word to 0
+ set offset to 0
+ ; medium
+ elseif awareness == 2
+ set word to 1
+ set offset to 4
+ ; low
+ elseif awareness == 3
+ set word to 2
+ set offset to 10
+ endif
+
+ set line to 6
+ set pos to 0
+ set cursorIndent to 2
+ set lastAwareness to awareness
+ set state to 30
+ return
+
+ endif
+ endif
+
+ if rangeInit == 0
+ set rangeInit to 1
+
+ set line to 8
+ set word to 0
+ set offset to 0
+ set pos to 0
+ set cursorIndent to 0
+
+ set state to 30
+ return
+ else
+ if range != lastRange
+ ; long
+ if range == 1
+ set word to 0
+ set offset to 0
+ ; medium
+ elseif range == 2
+ set word to 1
+ set offset to 4
+ ; short
+ elseif range == 3
+ set word to 2
+ set offset to 10
+ ; melee
+ elseif range == 4
+ set word to 3
+ set offset to 15
+ endif
+
+ set line to 9
+ set pos to 0
+ set cursorIndent to 2
+ set lastRange to range
+ set state to 30
+ return
+
+ endif
+
+ endif
+
+ if dispositionInit == 0
+ set dispositionInit to 1
+
+ set line to 11
+ set word to 0
+ set offset to 0
+ set pos to 0
+ set cursorIndent to 0
+
+ set state to 30
+ return
+ else
+ if disposition != lastDisposition
+ ; allied
+ if disposition == 1
+ set word to 0
+ set offset to 0
+ ; neutral
+ elseif disposition == 2
+ set word to 1
+ set offset to 6
+ ; hostile
+ elseif disposition == 3
+ set word to 2
+ set offset to 13
+ endif
+
+ set line to 12
+ set pos to 0
+ set cursorIndent to 2
+ set lastDisposition to disposition
+ set state to 30
+ return
+
+ endif
+ endif
+
+ if doneInit == 0
+ set doneInit to 1
+
+ set line to 14
+ set word to 0
+ set offset to 0
+ set pos to 0
+ set cursorIndent to 0
+
+ set state to 30
+ return
+ endif
+
+ return
+
+elseif state == 30
+
+ set pos to pos + 1
+ setUIFloat "HUDMainMenu/_CWxScannerCursorPos" pos
+ setUIFloat "HUDMainMenu/_CWxScannerCursorLine" line
+ setUIFloat "HUDMainMenu/_CWxScannerCursorIndent" cursorIndent
+ setUIFloat "HUDMainMenu/_CWxScannerCursorBlink" cursorBlink
+
+ set index to offset + pos
+
+ ;===================================================================================== Status
+ if line == 0
+ setUIFloat "HUDMainMenu/_CWxScannerText1Index" index
+
+ ; --------------------------------------------------------------------------------------------------------------------- SCANNING...[1-11]
+ if word == 0
+ if pos >= 11
+ playSound OBJSwitchButtonBPass
+ set sleepTimer to 3
+ set state to 0
+ return
+ endif
+ endif
+ ; ---------------------------------------------------------------------------------------------------------------------
+
+ ;===================================================================================== Threat label
+ elseif line == 2
+ setUIFloat "HUDMainMenu/_CWxScannerText2Index" index
+
+ ; --------------------------------------------------------------------------------------------------------------------- Threat:[1-7]
+ if word == 0
+ if pos >= 7
+ playSound OBJSwitchButtonB
+ set state to 0
+ return
+ endif
+ endif
+ ; ---------------------------------------------------------------------------------------------------------------------
+
+ ;===================================================================================== Threat value
+ elseif line == 3
+ setUIFloat "HUDMainMenu/_CWxScannerText3Index" index
+
+ ; --------------------------------------------------------------------------------------------------------------------- high[1-4]
+ if word == 0
+ if pos >= 4
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+ ; --------------------------------------------------------------------------------------------------------------------- medium[5-10]
+ elseif word == 1
+ if pos >= 6
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+ ; --------------------------------------------------------------------------------------------------------------------- low[11-13]
+ elseif word == 2
+ if pos >= 3
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+
+ endif
+ ; ---------------------------------------------------------------------------------------------------------------------
+
+ ;===================================================================================== Awareness label
+ elseif line == 5
+ setUIFloat "HUDMainMenu/_CWxScannerText4Index" index
+
+ ; --------------------------------------------------------------------------------------------------------------------- AWARENESS:[1-10]
+ if word == 0
+ if pos >= 10
+ playSound OBJSwitchButtonB
+ set state to 0
+ return
+ endif
+ endif
+ ; ---------------------------------------------------------------------------------------------------------------------
+
+ ;===================================================================================== Awareness values
+ elseif line == 6
+ setUIFloat "HUDMainMenu/_CWxScannerText5Index" index
+
+ ; --------------------------------------------------------------------------------------------------------------------- high[1-4]
+ if word == 0
+ if pos >= 4
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+ ; --------------------------------------------------------------------------------------------------------------------- medium[5-10]
+ elseif word == 1
+ if pos >= 6
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+ ; --------------------------------------------------------------------------------------------------------------------- low[11-13]
+ elseif word == 2
+ if pos >= 3
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+
+ endif
+ ; ---------------------------------------------------------------------------------------------------------------------
+
+ ;===================================================================================== Range Label
+ elseif line == 8
+ setUIFloat "HUDMainMenu/_CWxScannerText6Index" index
+
+ ; --------------------------------------------------------------------------------------------------------------------- COMBAT RANGE:[1-12]
+ if word == 0
+ if pos >= 12
+ playSound OBJSwitchButtonB
+ set state to 0
+ return
+ endif
+ endif
+ ; ---------------------------------------------------------------------------------------------------------------------
+
+ ;===================================================================================== Range value
+ elseif line == 9
+ setUIFloat "HUDMainMenu/_CWxScannerText7Index" index
+
+ ; --------------------------------------------------------------------------------------------------------------------- long[1-4]
+ if word == 0
+ if pos >= 4
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+ ; --------------------------------------------------------------------------------------------------------------------- medium[5-10]
+ elseif word == 1
+ if pos >= 6
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+ ; --------------------------------------------------------------------------------------------------------------------- short[11-15]
+ elseif word == 2
+ if pos >= 5
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+
+ ; --------------------------------------------------------------------------------------------------------------------- melee[16-20]
+ elseif word == 3
+ if pos >= 5
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+
+ endif
+ ; ---------------------------------------------------------------------------------------------------------------------
+
+ ;===================================================================================== Disposition label
+ elseif line == 11
+ setUIFloat "HUDMainMenu/_CWxScannerText8Index" index
+
+ ; --------------------------------------------------------------------------------------------------------------------- DISPOSITION:[1-12]
+ if word == 0
+ if pos >= 12
+ playSound OBJSwitchButtonB
+ set state to 0
+ return
+ endif
+ endif
+ ; ---------------------------------------------------------------------------------------------------------------------
+
+ ;===================================================================================== Weakness value
+ elseif line == 12
+ setUIFloat "HUDMainMenu/_CWxScannerText9Index" index
+
+ ; --------------------------------------------------------------------------------------------------------------------- allied[1-6]
+ if word == 0
+ if pos >= 6
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+ ; --------------------------------------------------------------------------------------------------------------------- neutral[7-13]
+ elseif word == 1
+ if pos >= 7
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+ ; --------------------------------------------------------------------------------------------------------------------- hostile[14-20]
+ elseif word == 2
+ if pos >= 7
+ set sleepTimer to 0.3
+ set state to 0
+ return
+ endif
+ endif
+ ; ---------------------------------------------------------------------------------------------------------------------
+
+ ;=====================================================================================
+ elseif line == 14
+ setUIFloat "HUDMainMenu/_CWxScannerText10Index" index
+
+ ; --------------------------------------------------------------------------------------------------------------------- DONE.[1-5]
+ if word == 0
+ if pos >= 5
+ setUIFloat "HUDMainMenu/_CWxScannerBoyEnabled" 1
+ playSound OBJSwitchButtonA
+ set state to 0
+ return
+ endif
+ endif
+ ; ---------------------------------------------------------------------------------------------------------------------
+
+ endif
+ ;=====================================================================================
+
+ return
+
+endif
+
+End
diff --git a/src/CWxScannerUpdatePerk.gek b/src/CWxScannerUpdatePerk.gek
new file mode 100644
index 0000000..b2d96fa
--- /dev/null
+++ b/src/CWxScannerUpdatePerk.gek
@@ -0,0 +1,14 @@
+scn CWxScannerUpdatePerk
+
+int iMode
+array_var aImplants
+
+begin function { iMode }
+
+ let aImplants := ar_list CWxImplants.headImplant1, CWxImplants.headImplant2, CWxImplants.headImplant3, CWxImplants.headImplant4
+ call CWxFnSyncImplant CWxImplantScanner CWxImplantScannerPerk 1 aImplants
+ let aImplants := ar_null
+
+ call CWxScannerUpdateTriggers iMode
+
+end
diff --git a/src/CWxScannerUpdateTriggers.gek b/src/CWxScannerUpdateTriggers.gek
new file mode 100644
index 0000000..5eee63d
--- /dev/null
+++ b/src/CWxScannerUpdateTriggers.gek
@@ -0,0 +1,13 @@
+scn CWxScannerUpdateTriggers
+
+int iMode
+int bEnabled
+
+begin function { iMode }
+
+ set bEnabled to player.HasPerk CWxImplantScannerPerk
+
+ SetOnControlDownEventHandler CWxScannerOnAim bEnabled 6
+ SetOnControlUpEventHandler CWxScannerOnAimDown bEnabled 6
+
+end
diff --git a/src/CWxStealthFieldQuestScript.gek b/src/CWxStealthFieldQuestScript.gek
new file mode 100644
index 0000000..8441906
--- /dev/null
+++ b/src/CWxStealthFieldQuestScript.gek
@@ -0,0 +1,53 @@
+scn CWxStealthFieldQuestScript
+
+int iFieldStability
+float fTemp
+
+; Expected to run 1 time per second
+
+begin GameMode
+
+ if iFieldStability <= 0
+
+ printd "Cyberware: Stealth charge depleted - hide indicator, remove field, start recharging"
+
+ SetUIFloat "HUDMainMenu\_CWxSFMeterEnabled" 0
+
+ if player.IsSpellTargetAlt CWxStealthField
+ playSound OBJForceFieldImpact
+ player.dispel CWxStealthField
+ endif
+
+ set iFieldStability to iFieldStability + 1
+
+ elseif player.IsSpellTargetAlt CWxStealthField
+
+ printd "Cyberware: Stealth field is active - show and update indicator, reduce charge"
+
+ set fTemp to iFieldStability / ( CWxBaseStealthFieldStability / 8 )
+
+ SetUIFloat "HUDMainMenu\_CWxSFMeterAmount" fTemp
+ SetUIFloat "HUDMainMenu\_CWxSFMeterEnabled" 1
+
+ set iFieldStability to iFieldStability - 1
+
+ elseif iFieldStability >= CWxBaseStealthFieldStability
+
+ printd "Cyberware: Stealth recharging has finished, stopping the quest"
+
+ ; Just in case, if CWxBaseStealthFieldStability has changed
+ set iFieldStability to CWxBaseStealthFieldStability
+
+ ; Go back to stand-by mode
+ StopQuest CWxStealthFieldQuest
+
+ else
+
+ printd "Cyberware: Stealth field is off, recharging in progress"
+
+ set iFieldStability to iFieldStability + 1
+
+ endif
+
+end
+
diff --git a/src/CWxStealthOnHotkey.gek b/src/CWxStealthOnHotkey.gek
new file mode 100644
index 0000000..3aa4d54
--- /dev/null
+++ b/src/CWxStealthOnHotkey.gek
@@ -0,0 +1,27 @@
+scn CWxStealthOnHotkey
+
+int iKeyID
+ref rScript
+
+begin function { iKeyID }
+
+ if MenuMode
+ return
+ endif
+
+ if iKeyID != CWxStealthFieldHotkey
+ printd "Cyberware: Autoremoved stealth hotkey"
+ set rScript to GetCurrentScript
+ SetOnKeyUpEventHandler rScript 0 iKeyID
+ return
+ endif
+
+ if player.IsSpellTargetAlt CWxStealthField
+ printd "Cyberware: Swithing stealth off"
+ SetStage CWxStealthFieldQuest 0
+ else
+ printd "Cyberware: Swithing stealth on"
+ SetStage CWxStealthFieldQuest 1
+ endif
+
+end
diff --git a/src/CWxStealthOnUseSB.gek b/src/CWxStealthOnUseSB.gek
new file mode 100644
index 0000000..a178e11
--- /dev/null
+++ b/src/CWxStealthOnUseSB.gek
@@ -0,0 +1,13 @@
+scn CWxStealthOnUseSB
+
+ref rStealthBoy
+
+begin function { rStealthBoy }
+
+ if this != playerRef
+ return
+ endif
+
+ SetStage CWxStealthFieldQuest 0
+
+end
diff --git a/src/CWxStealthUpdatePerk.gek b/src/CWxStealthUpdatePerk.gek
new file mode 100644
index 0000000..884419e
--- /dev/null
+++ b/src/CWxStealthUpdatePerk.gek
@@ -0,0 +1,20 @@
+scn CWxStealthUpdatePerk
+
+int iMode
+array_var aImplants
+
+begin function { iMode }
+
+ let aImplants := ar_list CWxImplants.torsoImplant1, CWxImplants.torsoImplant2, CWxImplants.torsoImplant3, CWxImplants.torsoImplant4
+ call CWxFnSyncImplant CWxImplantStealthNanobots CWxImplantStealthPerk 1 aImplants
+ let aImplants := ar_null
+
+ call CWxStealthUpdateTriggers 0
+
+ if player.IsSpellTargetAlt CWxStealthField
+ if player.HasPerk CWxImplantStealthPerk == 0
+ SetStage CWxStealthFieldQuest 0
+ endif
+ endif
+
+end
diff --git a/src/CWxStealthUpdateTriggers.gek b/src/CWxStealthUpdateTriggers.gek
new file mode 100644
index 0000000..4196781
--- /dev/null
+++ b/src/CWxStealthUpdateTriggers.gek
@@ -0,0 +1,23 @@
+scn CWxStealthUpdateTriggers
+
+int iStatus
+int bEnabled
+
+begin function { iStatus }
+
+ set bEnabled to player.HasPerk CWxImplantStealthPerk
+
+ SetOnKeyUpEventHandler CWxStealthOnHotkey bEnabled CWxStealthFieldHotkey
+ SetOnUseAidItemEventHandler CWxStealthOnUseSB bEnabled StealthBoy
+
+ if GetUIFloat "HUDMainMenu\_CWxSFMeterEnabled"
+ if player.IsSpellTargetAlt CWxStealthField == 0
+ SetStage CWxStealthFieldQuest 0
+ endif
+ elseif player.IsSpellTargetAlt CWxStealthField
+ if GetQuestRunning CWxStealthFieldQuest == 0
+ StartQuest CWxStealthFieldQuest
+ endif
+ endif
+
+end
diff --git a/src/CWxUpdatePerks.gek b/src/CWxUpdatePerks.gek
new file mode 100644
index 0000000..9c9cb3f
--- /dev/null
+++ b/src/CWxUpdatePerks.gek
@@ -0,0 +1,195 @@
+scn CWxUpdatePerks
+
+int iStage
+array_var aImplants
+
+begin function { iStage }
+
+ ; Refresh implant perks
+ printd "Updating perks"
+
+ ;-----------------------------------------------------------------------------------------------------------------------------------------------------
+ ; Head
+
+
+ let aImplants := ar_list CWxImplants.headImplant1, CWxImplants.headImplant2, CWxImplants.headImplant3, CWxImplants.headImplant4
+
+ call CWxFnSyncImplant CWxImplantEmpathySynthesizer ImplantCharismaPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantLogicCoProcessor ImplantIntelligencePerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantOpticsEnhancer ImplantPerceptionPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantProbabilityCalculator ImplantLuckPerk 1 aImplants
+
+ call CWxFnSyncImplant CWxImplantVoiceModulatorL1 CWxImplantBarter1Perk 1 aImplants
+ call CWxFnSyncImplant CWxImplantVoiceModulatorL2 CWxImplantBarter1Perk 2 aImplants
+ call CWxFnSyncImplant CWxImplantVoiceModulatorL3 CWxImplantBarter1Perk 3 aImplants
+ call CWxFnSyncImplant CWxImplantVoiceModulatorL4 CWxImplantBarter1Perk 4 aImplants
+
+
+ ;-----------------------------------------------------------------------------------------------------------------------------------------------------
+ ; Torso
+
+
+ let aImplants := ar_list CWxImplants.torsoImplant1, CWxImplants.torsoImplant2, CWxImplants.torsoImplant3, CWxImplants.torsoImplant4
+
+ call CWxFnSyncImplant CWxImplantSyntheticLungs CWxImplantSyntheticLungsPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantMonocyteBreeder ImplantRegenPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantHypertrophyAccelerator ImplantStrengthPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantNociceptionRegulator ImplantEndurancePerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantReflexBooster ImplantAgilityPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantSubDermalArmor ImplantDTPerk 1 aImplants
+
+
+ ;-----------------------------------------------------------------------------------------------------------------------------------------------------
+ ; Arms
+
+
+ if (CWxImplants.rightArmImplant1 == CWxImplantKineticAccelerator || CWxImplants.rightArmImplant2 == CWxImplantKineticAccelerator) && (CWxImplants.leftArmImplant1 == CWxImplantKineticAccelerator || CWxImplants.leftArmImplant2 == CWxImplantKineticAccelerator)
+ if player.GetPerkRank CWxImplantBTShoot1Perk != 2
+ player.SetPerkRank CWxImplantBTShoot1Perk 2
+ endif
+ elseif CWxImplants.rightArmImplant1 == CWxImplantKineticAccelerator || CWxImplants.rightArmImplant2 == CWxImplantKineticAccelerator || CWxImplants.leftArmImplant1 == CWxImplantKineticAccelerator || CWxImplants.leftArmImplant2 == CWxImplantKineticAccelerator
+ if player.GetPerkRank CWxImplantBTShoot1Perk != 1
+ player.SetPerkRank CWxImplantBTShoot1Perk 1
+ endif
+ else
+ player.removePerk CWxImplantBTShoot1Perk
+ endif
+
+ if (CWxImplants.rightArmImplant1 == CWxImplantEMP || CWxImplants.rightArmImplant2 == CWxImplantEMP) && (CWxImplants.leftArmImplant1 == CWxImplantEMP || CWxImplants.leftArmImplant2 == CWxImplantEMP)
+ if player.GetPerkRank CWxImplantPulseEMPerk != 2
+ player.SetPerkRank CWxImplantPulseEMPerk 2
+ endif
+ if player.GetItemCount CWxWeapEMP != 1
+ player.RemoveItem CWxWeapEMP 99 1
+ player.AddItem CWxWeapEMP 1 1
+ endif
+ elseif CWxImplants.rightArmImplant1 == CWxImplantEMP || CWxImplants.rightArmImplant2 == CWxImplantEMP || CWxImplants.leftArmImplant1 == CWxImplantEMP || CWxImplants.leftArmImplant2 == CWxImplantEMP
+ if player.GetPerkRank CWxImplantPulseEMPerk != 1
+ player.SetPerkRank CWxImplantPulseEMPerk 1
+ endif
+ if player.GetItemCount CWxWeapEMP != 1
+ player.RemoveItem CWxWeapEMP 99 1
+ player.AddItem CWxWeapEMP 1 1
+ endif
+ else
+ player.removePerk CWxImplantPulseEMPerk
+ player.RemoveItem CWxWeapEMP 99 1
+ endif
+
+ if (CWxImplants.rightArmImplant1 == CWxImplantHFP || CWxImplants.rightArmImplant2 == CWxImplantHFP) && (CWxImplants.leftArmImplant1 == CWxImplantHFP || CWxImplants.leftArmImplant2 == CWxImplantHFP)
+ if player.GetPerkRank CWxImplantPulseHFPerk != 2
+ player.SetPerkRank CWxImplantPulseHFPerk 2
+ endif
+ if player.GetItemCount CWxWeapHFP != 1
+ player.RemoveItem CWxWeapHFP 99 1
+ player.AddItem CWxWeapHFP 1 1
+ endif
+ elseif CWxImplants.rightArmImplant1 == CWxImplantHFP || CWxImplants.rightArmImplant2 == CWxImplantHFP || CWxImplants.leftArmImplant1 == CWxImplantHFP || CWxImplants.leftArmImplant2 == CWxImplantHFP
+ if player.GetPerkRank CWxImplantPulseHFPerk != 1
+ player.SetPerkRank CWxImplantPulseHFPerk 1
+ endif
+ if player.GetItemCount CWxWeapHFP != 1
+ player.RemoveItem CWxWeapHFP 99 1
+ player.AddItem CWxWeapHFP 1 1
+ endif
+ else
+ player.removePerk CWxImplantPulseHFPerk
+ player.RemoveItem CWxWeapHFP 99 1
+ endif
+
+
+ let aImplants := ar_list CWxImplants.rightArmImplant1, CWxImplants.rightArmImplant2
+
+ call CWxFnSyncImplant CWxImplantHandStabilizerL1 CWxImplantLockpick1RPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantHandStabilizerL2 CWxImplantLockpick1RPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantHandStabilizerL3 CWxImplantLockpick1RPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantHandStabilizerL4 CWxImplantLockpick1RPerk 4 aImplants
+
+ call CWxFnSyncImplant CWxImplantMotorMemorizerL1 CWxImplantGuns1RPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantMotorMemorizerL2 CWxImplantGuns1RPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantMotorMemorizerL3 CWxImplantGuns1RPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantMotorMemorizerL4 CWxImplantGuns1RPerk 4 aImplants
+
+ call CWxFnSyncImplant CWxImplantNeuralDatatoolL1 CWxImplantScience1RPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantNeuralDatatoolL2 CWxImplantScience1RPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantNeuralDatatoolL3 CWxImplantScience1RPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantNeuralDatatoolL4 CWxImplantScience1RPerk 4 aImplants
+
+ call CWxFnSyncImplant CWxImplantRazorNailsL1 CWxImplantUnarmed1RPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantRazorNailsL2 CWxImplantUnarmed1RPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantRazorNailsL3 CWxImplantUnarmed1RPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantRazorNailsL4 CWxImplantUnarmed1RPerk 4 aImplants
+
+
+ let aImplants := ar_list CWxImplants.leftArmImplant1, CWxImplants.leftArmImplant2
+
+ call CWxFnSyncImplant CWxImplantHandStabilizerL1 CWxImplantLockpick1LPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantHandStabilizerL2 CWxImplantLockpick1LPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantHandStabilizerL3 CWxImplantLockpick1LPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantHandStabilizerL4 CWxImplantLockpick1LPerk 4 aImplants
+
+ call CWxFnSyncImplant CWxImplantMotorMemorizerL1 CWxImplantGuns1LPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantMotorMemorizerL2 CWxImplantGuns1LPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantMotorMemorizerL3 CWxImplantGuns1LPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantMotorMemorizerL4 CWxImplantGuns1LPerk 4 aImplants
+
+ call CWxFnSyncImplant CWxImplantNeuralDatatoolL1 CWxImplantScience1LPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantNeuralDatatoolL2 CWxImplantScience1LPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantNeuralDatatoolL3 CWxImplantScience1LPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantNeuralDatatoolL4 CWxImplantScience1LPerk 4 aImplants
+
+ call CWxFnSyncImplant CWxImplantRazorNailsL1 CWxImplantUnarmed1LPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantRazorNailsL2 CWxImplantUnarmed1LPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantRazorNailsL3 CWxImplantUnarmed1LPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantRazorNailsL4 CWxImplantUnarmed1LPerk 4 aImplants
+
+
+ ;-----------------------------------------------------------------------------------------------------------------------------------------------------
+ ; Legs
+
+
+ if (CWxImplants.rightLegImplant1 == CWxImplantKineticAccelerator || CWxImplants.rightLegImplant2 == CWxImplantKineticAccelerator) && (CWxImplants.leftLegImplant1 == CWxImplantKineticAccelerator || CWxImplants.leftLegImplant2 == CWxImplantKineticAccelerator)
+ if player.GetPerkRank CWxImplantMovementPerk != 2
+ player.SetPerkRank CWxImplantMovementPerk 2
+ endif
+ elseif CWxImplants.rightLegImplant1 == CWxImplantKineticAccelerator || CWxImplants.rightLegImplant2 == CWxImplantKineticAccelerator || CWxImplants.leftLegImplant1 == CWxImplantKineticAccelerator || CWxImplants.leftLegImplant2 == CWxImplantKineticAccelerator
+ if player.GetPerkRank CWxImplantMovementPerk != 1
+ player.SetPerkRank CWxImplantMovementPerk 1
+ endif
+ else
+ player.removePerk CWxImplantMovementPerk
+ endif
+
+
+ let aImplants := ar_list CWxImplants.rightLegImplant1, CWxImplants.rightLegImplant2
+
+ call CWxFnSyncImplant CWxImplantTreadDamperL1 CWxImplantSneak1RPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantTreadDamperL2 CWxImplantSneak1RPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantTreadDamperL3 CWxImplantSneak1RPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantTreadDamperL4 CWxImplantSneak1RPerk 4 aImplants
+
+ call CWxFnSyncImplant CWxImplantWeightAbsorberL1 CWxImplantCarryWeight1RPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantWeightAbsorberL2 CWxImplantCarryWeight1RPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantWeightAbsorberL3 CWxImplantCarryWeight1RPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantWeightAbsorberL4 CWxImplantCarryWeight1RPerk 4 aImplants
+
+
+ let aImplants := ar_list CWxImplants.leftLegImplant1, CWxImplants.leftLegImplant2
+
+ call CWxFnSyncImplant CWxImplantTreadDamperL1 CWxImplantSneak1LPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantTreadDamperL2 CWxImplantSneak1LPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantTreadDamperL3 CWxImplantSneak1LPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantTreadDamperL4 CWxImplantSneak1LPerk 4 aImplants
+
+ call CWxFnSyncImplant CWxImplantWeightAbsorberL1 CWxImplantCarryWeight1LPerk 1 aImplants
+ call CWxFnSyncImplant CWxImplantWeightAbsorberL2 CWxImplantCarryWeight1LPerk 2 aImplants
+ call CWxFnSyncImplant CWxImplantWeightAbsorberL3 CWxImplantCarryWeight1LPerk 3 aImplants
+ call CWxFnSyncImplant CWxImplantWeightAbsorberL4 CWxImplantCarryWeight1LPerk 4 aImplants
+
+
+ let aImplants := ar_null
+
+
+ call CWxUpdateTriggers 0
+
+end
\ No newline at end of file
diff --git a/src/CWxUpdateTriggers.gek b/src/CWxUpdateTriggers.gek
new file mode 100644
index 0000000..bce88c4
--- /dev/null
+++ b/src/CWxUpdateTriggers.gek
@@ -0,0 +1,17 @@
+scn CWxUpdateTriggers
+
+int iMode
+
+begin function { iMode }
+
+ if playerRef.HasPerk CWxImplantPulseEMPerk || playerRef.HasPerk CWxImplantPulseHFPerk
+ SetEventHandler "OnActorEquip" CWxOnEquipPulseGun "first"::playerRef "second"::CWxWeapEMP
+ SetEventHandler "OnActorEquip" CWxOnEquipPulseGun "first"::playerRef "second"::CWxWeapHFP
+ SetEventHandler "OnActorUnequip" CWxOnUnequipPulseGun "first"::playerRef "second"::CWxWeapEMP
+ SetEventHandler "OnActorUnequip" CWxOnUnequipPulseGun "first"::playerRef "second"::CWxWeapHFP
+ else
+ RemoveEventHandler "OnActorEquip" CWxOnEquipPulseGun
+ RemoveEventHandler "OnActorUnequip" CWxOnUnequipPulseGun
+ endif
+
+end