diff --git a/mod/Cyberware.esm b/mod/Cyberware.esm
index 5addf98..6d575b7 100644
Binary files a/mod/Cyberware.esm and b/mod/Cyberware.esm differ
diff --git a/mod/Menus/prefabs/cyberware/cw_implants.xml b/mod/Menus/prefabs/cyberware/cw_implants.xml
index 42068df..d8a6d03 100644
--- a/mod/Menus/prefabs/cyberware/cw_implants.xml
+++ b/mod/Menus/prefabs/cyberware/cw_implants.xml
@@ -23,6 +23,11 @@
<_PNxCyberboyLeftImplant1State> 0
<_PNxCyberboyLeftImplant2State> 0
+<_PNxCyberboyRightImplant1Active> 0
+<_PNxCyberboyRightImplant2Active> 0
+<_PNxCyberboyLeftImplant1Active> 0
+<_PNxCyberboyLeftImplant2Active> 0
+
<_PNxCyberboyRightImplant1Path>
<_PNxCyberboyRightImplant2Path>
<_PNxCyberboyLeftImplant1Path>
@@ -443,6 +448,7 @@
&-sAccept;
UIMenuPrevNext
<_PCButtonText> &-sPCMenuHintA;
+ <_xbox_button> &xbuttony;
2
@@ -476,7 +482,48 @@
<_line_alpha>
-
+
+
+
+
+
+
+ 0
+
+
+
+
+ &default_accept;
+ 1
+
+
+ Interface\InterfaceShared.tai
+
+
+
+ 75
+ 75
+
+
+
+
+
+ 10
+
+
+
+
+
+
+
+ 2
+
+
+
+ <_filename_4> general_button_y.dds
+ <_filename_17> glow_general_button_y.dds
+
+
@@ -654,6 +701,10 @@
&hudmain;
+
+
+
+
&nosystemcolor;
@@ -691,6 +742,10 @@
+
+
+
+
0
@@ -806,6 +861,10 @@
&nosystemcolor;
+
+
+
+
@@ -839,6 +898,10 @@
+
+
+
+
0
@@ -949,6 +1012,10 @@
&hudmain;
+
+
+
+
&nosystemcolor;
@@ -986,6 +1053,10 @@
+
+
+
+
0
@@ -1093,6 +1164,10 @@
&hudmain;
+
+
+
+
&nosystemcolor;
@@ -1130,6 +1205,10 @@
+
+
+
+
0
diff --git a/src/CWxPanelOnButtonDown.gek b/src/CWxPanelOnButtonDown.gek
new file mode 100644
index 0000000..afdf9a1
--- /dev/null
+++ b/src/CWxPanelOnButtonDown.gek
@@ -0,0 +1,132 @@
+scn CWxPanelOnButtonDown
+
+int keyCode
+
+int selectedRegion
+int bHasPerks
+int iCurrentSlot
+int n
+
+array_var slots
+array_var toggles
+
+begin function { keyCode }
+
+ if MenuMode == 0 || MenuMode 4
+ RemoveEventHandler "OnButtonDown:4111" (GetCurrentScript)
+ return
+ endif
+
+ if GetActiveMenuMode != 1059 || MenuMode 1001
+ return
+ endif
+
+ selectedRegion := CWxImplantsPanel.selectedRegion
+
+ if keyCode == 1 ; UP
+
+ if selectedRegion == 0
+ call CWxPanelSelectFirstSlot 6 "TutorialMenu\_PNxCyberboyLeftLegSelected"
+ elseif selectedRegion == 6
+ call CWxPanelSelectFirstSlot 5 "TutorialMenu\_PNxCyberboyRightLegSelected"
+ elseif selectedRegion == 5
+ call CWxPanelSelectFirstSlot 4 "TutorialMenu\_PNxCyberboyLeftArmSelected"
+ elseif selectedRegion == 4
+ call CWxPanelSelectFirstSlot 2 "TutorialMenu\_PNxCyberboyTorsoSelected"
+ elseif selectedRegion == 2
+ call CWxPanelSelectFirstSlot 3 "TutorialMenu\_PNxCyberboyRightArmSelected"
+ elseif selectedRegion == 3
+ call CWxPanelSelectFirstSlot 1 "TutorialMenu\_PNxCyberboyHeadSelected"
+ elseif selectedRegion == 1
+ SetUIFloat "TutorialMenu\_PNxCyberboyHeadSelected" 0
+ endif
+
+ elseif keyCode == 2 ; DOWN
+
+ if selectedRegion == 0
+ call CWxPanelSelectFirstSlot 1 "TutorialMenu\_PNxCyberboyHeadSelected"
+ elseif selectedRegion == 1
+ call CWxPanelSelectFirstSlot 3 "TutorialMenu\_PNxCyberboyRightArmSelected"
+ elseif selectedRegion == 3
+ call CWxPanelSelectFirstSlot 2 "TutorialMenu\_PNxCyberboyTorsoSelected"
+ elseif selectedRegion == 2
+ call CWxPanelSelectFirstSlot 4 "TutorialMenu\_PNxCyberboyLeftArmSelected"
+ elseif selectedRegion == 4
+ call CWxPanelSelectFirstSlot 5 "TutorialMenu\_PNxCyberboyRightLegSelected"
+ elseif selectedRegion == 5
+ call CWxPanelSelectFirstSlot 6 "TutorialMenu\_PNxCyberboyLeftLegSelected"
+ elseif selectedRegion == 6
+ SetUIFloat "TutorialMenu\_PNxCyberboyLeftLegSelected" 0
+ endif
+
+ elseif eval keyCode == 8 || keyCode == 4 ; RIGHT/LEFT
+
+ if selectedRegion <= 0
+ return
+ endif
+
+ slots := ar_list "PNxCyberboyRightSlot2", "PNxCyberboyRightSlot1", "PNxCyberboyLeftSlot1", "PNxCyberboyLeftSlot2"
+ toggles := ar_list "TutorialMenu\_PNxCyberboyRightImplant2Active", "TutorialMenu\_PNxCyberboyRightImplant1Active", "TutorialMenu\_PNxCyberboyLeftImplant1Active", "TutorialMenu\_PNxCyberboyLeftImplant2Active"
+
+ let iCurrentSlot := -1
+
+ let n := 0
+ while n < 4
+ if GetUIFloat (toggles[n])
+ let iCurrentSlot := n
+ let n := 4
+ endif
+ n += 1
+ loop
+
+ if iCurrentSlot == -1
+ return
+ endif
+
+ SetUIFloat (toggles[iCurrentSlot]) 0
+
+ let n := 0
+ while n < 4
+ if IsButtonPressed 8 ; RIGHT
+ let iCurrentSlot += 1
+
+ if iCurrentSlot == 4
+ let iCurrentSlot := 0
+ endif
+ else ; LEFT
+ let iCurrentSlot -= 1
+
+ if iCurrentSlot == -1
+ let iCurrentSlot := 3
+ endif
+ endif
+
+ if GetUIFloat ("TutorialMenu\PNxImplantsPanel\" + slots[iCurrentSlot] + "\visible")
+ SetUIFloat (toggles[iCurrentSlot]) 1
+ let n := 4
+ endif
+
+ n += 1
+ loop
+
+ elseif keyCode == 4096 ; BUTTON_A
+
+ if GetUIFloat "TutorialMenu\_PNxCyberboyRightImplant1Active"
+ set CWxImplantsPanel.selectedSlot to 1
+ elseif GetUIFloat "TutorialMenu\_PNxCyberboyLeftImplant1Active"
+ set CWxImplantsPanel.selectedSlot to 2
+ elseif GetUIFloat "TutorialMenu\_PNxCyberboyRightImplant2Active"
+ set CWxImplantsPanel.selectedSlot to 3
+ elseif GetUIFloat "TutorialMenu\_PNxCyberboyLeftImplant2Active"
+ set CWxImplantsPanel.selectedSlot to 4
+ else
+ set CWxImplantsPanel.selectedSlot to 0
+ endif
+
+ if CWxImplantsPanel.selectedSlot > 0
+ set CWxImplantsPanel.currentSlot to CWxImplantsPanel.selectedSlot
+ endif
+
+ endif
+
+end
diff --git a/src/CWxPanelQuestScript.gek b/src/CWxPanelQuestScript.gek
index b851d75..d8d23ee 100644
--- a/src/CWxPanelQuestScript.gek
+++ b/src/CWxPanelQuestScript.gek
@@ -118,6 +118,8 @@ begin GameMode
rimod CWxControlPanelISFX
+ RemoveEventHandler "OnButtonDown:4111" CWxPanelOnButtonDown
+
if bPerformSurgery
set bPerformSurgery to 0
@@ -238,7 +240,14 @@ Begin MenuMode 1059
call CWxPanelUpdatePrice
set selectedRegion to 0
-
+
+ SetEventHandler "OnButtonDown:4111" CWxPanelOnButtonDown
+
+ if CWxPanelGamepadHintShown == 0 && GetController
+ MessageBoxEx "Use D-pad to navigate:%rUP/DOWN - select a body part%rLEFT/RIGHT - select an implant slot%rA - show an implant menu"
+ set CWxPanelGamepadHintShown to 1
+ endif
+
if ListGetCount CWxImplantsAllList != ListGetCount CWxImplantsDescList
print "Cyberware: Number of elements in CWxImplantsAllList and CWxImplantsDescList is not equal!"
endif
@@ -302,7 +311,7 @@ Begin MenuMode 1059
return
- elseif (GetUIFloat "TutorialMenu\_PNxImplantsPanelAcceptSelected") || (isKeyPressed 30 && GetUIFloat "TutorialMenu\_PNxImplantsPanelAcceptEnabled" && menuMode 1059)
+ elseif (GetUIFloat "TutorialMenu\_PNxImplantsPanelAcceptSelected") || (GetUIFloat "TutorialMenu\_PNxImplantsPanelAcceptEnabled" && MenuMode 1059 && (isKeyPressed 30 || IsButtonPressed 32768))
printd "Accept confirmation"
@@ -562,9 +571,9 @@ Begin MenuMode 1059
printd "Cyberware: Current message was not empty, but not processed."
- set rCurrentMessage to 0
+ let rCurrentMessage := 0
+
-
else
diff --git a/src/CWxPanelSelectFirstSlot.gek b/src/CWxPanelSelectFirstSlot.gek
new file mode 100644
index 0000000..5817392
--- /dev/null
+++ b/src/CWxPanelSelectFirstSlot.gek
@@ -0,0 +1,33 @@
+scn CWxPanelSelectFirstSlot
+
+begin function { int selectedRegion, string_var sNode }
+
+ SetUIFloat "TutorialMenu\_PNxCyberboyHeadSelected" 0
+ SetUIFloat "TutorialMenu\_PNxCyberboyLeftArmSelected" 0
+ SetUIFloat "TutorialMenu\_PNxCyberboyRightArmSelected" 0
+ SetUIFloat "TutorialMenu\_PNxCyberboyTorsoSelected" 0
+ SetUIFloat "TutorialMenu\_PNxCyberboyLeftLegSelected" 0
+ SetUIFloat "TutorialMenu\_PNxCyberboyRightLegSelected" 0
+
+ SetUIFloat (sNode) 1
+
+ if eval sNode == "TutorialMenu\_PNxCyberboyLeftArmSelected" || sNode == "TutorialMenu\_PNxCyberboyLeftLegSelected"
+ SetUIFloat "TutorialMenu\_PNxCyberboyLeftImplant1Active" 1
+ SetUIFloat "TutorialMenu\_PNxCyberboyLeftImplant2Active" 0
+ SetUIFloat "TutorialMenu\_PNxCyberboyRightImplant1Active" 0
+ SetUIFloat "TutorialMenu\_PNxCyberboyRightImplant2Active" 0
+ return
+ endif
+
+ SetUIFloat "TutorialMenu\_PNxCyberboyLeftImplant1Active" 0
+ SetUIFloat "TutorialMenu\_PNxCyberboyLeftImplant2Active" 0
+
+ if eval (selectedRegion == 1 && playerRef.hasPerk CWxExtraHeadSlotsPerk) || (selectedRegion == 2 && playerRef.hasPerk CWxExtraTorsoSlotsPerk) || (selectedRegion == 3 && playerRef.hasPerk CWxExtraArmSlotsPerk) || (selectedRegion == 4 && playerRef.hasPerk CWxExtraArmSlotsPerk) || (selectedRegion == 5 && playerRef.hasPerk CWxExtraLegSlotsPerk) || (selectedRegion == 6 && playerRef.hasPerk CWxExtraLegSlotsPerk)
+ SetUIFloat "TutorialMenu\_PNxCyberboyRightImplant2Active" 1
+ SetUIFloat "TutorialMenu\_PNxCyberboyRightImplant1Active" 0
+ else
+ SetUIFloat "TutorialMenu\_PNxCyberboyRightImplant1Active" 1
+ SetUIFloat "TutorialMenu\_PNxCyberboyRightImplant2Active" 0
+ endif
+
+end