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