마우스 빼고 키보드만으로 액션게임을 해보자 1편 :https://gall.dcinside.com/mgallery/board/view/?id=fromsoftware&no=2830316&s_type=search_subject_memo&s_keyword=%ED%82%A4%EB%B3%B4%EB%93%9C&page=1



1편이 길어져서 2편에서 쓰는

키보드만으로 게임할 시의 가장 큰 문제점인


마우스 혹은 패드와 다르게, 시야입력의 강약을 조절할 수 없다.

<- 마우스는 손힘으로 미세조정이 가능, 패드는 스틱의 미세컨트롤이 가능. 제일 큰 단점.

특히 원거리의 작은 적을 미세조준해야한다거나, 몬헌 활 같이 지랄방구 조준샷해야할 때, 아주 큰 단점임.


을 해결하는 방법을 제시함.




오토핫키 AutoHotkey라는 스크립트언어 프로그램을 사용해서 메크로를 짤 거다.

https://www.autohotkey.com/


viewimage.php?id=2bafdf2bf6dd3eb279bec4b0&no=24b0d769e1d32ca73feb80fa11d028315f52e6e1fc8bbd14245a9b9fd3a9519790506eae5a4b485c6d8f9d8b846a2fa99da2be30acb2c4ad83aedc59df3a708f48c678935e6c91b2


다운로드 커런트 버전 누르고 받고 설치를 해주면 된다.

설치하면서 그냥 윈도우가 64비트면 x64, 윈도우가 32비트면 x86 눌러주고 다음다음다음 쭉 쭉 눌러주면된다.


뭘 실행하는 프로그램을 설치한게 아니라,


내가 짠 스크립트가 메크로로 실제로 작동할 수 있게끔

스크립트 언어를 설치한거라고 보면됨.




viewimage.php?id=2bafdf2bf6dd3eb279bec4b0&no=24b0d769e1d32ca73feb80fa11d028315f52e6e1fc8bbd14245a9b9fd3a9519790506eae5a4b485c6d8f9d8b846a2fc4a83e817f333ab001f59d32d8554c7704eddffb9eac38bc


키보드만을 이용해서 게임할 경우 미세조준이 안되는 문제를 해결하기 위한 방안은 다음과 같음.


키패드4568로 시야이동을 하면서,

오른손 엄지로 키패드(+)를 눌러 조준을 하면서,

왼손 약지로 캡스락을 눌러서 시야이동속도를 절반, 절반의 절반, 절반의 절반의 절반 등으로 컨트롤 해주는 거임



설명하자면

키패드(+) 만 눌렀을 경우에는 평소 시야속도의 1/4

여기서 캡스락을 계속 누르고 있으면 거기서 또 절반

여기서 캡스락을 땠다가 다시 누르고 있으면 또 절반

여기서 캡스락을 땠다가 다시 누르고 있으면 또 절반

평소 시야 속도의 1/32까지 미세조정 가능하게 만들어봤음
캡스락을 땐 후 빠르게 꾹 누르고 있어야, 다음 절반속도로 갈 수 있고,
캡스락을 땐 후 시간이 0.15초 경과하면 초기화됨. 그러니까 때고 바로 눌러줘야함



1e8ee315abc236a14e81d2b628f1766ac71b8a


내가 지금 부터 복붙하는 내용을 메모장에 붙여놓고 파일이름을 확장자까지 똑같이 스크린샷처럼 저장하면됨.

폴더 구조도 저거에 맞게 넣어두면됨


Initiator.ahk

#include IfWinActive.ahk
#include Optimizer.ahk

global Scripts_Array := Array()

Clipboard := 0

Scripts_Array.insert("Mouse Simulation\Basic\RButton.ahk")

Scripts_Array.insert("Mouse Simulation\Direction\Down.ahk")
Scripts_Array.insert("Mouse Simulation\Direction\Left.ahk")
Scripts_Array.insert("Mouse Simulation\Direction\Right.ahk")
Scripts_Array.insert("Mouse Simulation\Direction\Up.ahk")

Scripts_Array.insert("Mouse Simulation\Movement.ahk")
Scripts_Array.insert("Mouse Simulation\Sensitivity.ahk")

Scripts_Array.insert("Mouse Simulation\Numpad4.ahk")
Scripts_Array.insert("Mouse Simulation\Numpad5.ahk")
Scripts_Array.insert("Mouse Simulation\Numpad6.ahk")
Scripts_Array.insert("Mouse Simulation\Numpad8.ahk")

For idx, val in Scripts_Array{
    ahk_file := "Scripts\" . val

    Run, %ahk_file%
}


Optimizer.ahk

#NoEnv
#NoTrayIcon
#KeyHistory, 0
#SingleInstance Force
#MaxHotkeysPerInterval 999
ListLines, Off
SetBatchLines -1


IfWinActive.ahk

#IfWinActive ahk_exe eldenring.exe


Executor.bat

@echo off
start /d "%~dp0" Initiator.ahk
exit /b


Movement.ahk

#include IfWinActive.ahk
#include Optimizer.ahk

global ADS_Sensitivity := False
global initSpeed := speed := 46     ; 기호에 맞게 알맞게 조정. 64 32 16 8 과 같은 2의 승수 추천
global delay := 1
global invertAxis := False

Loop
{
    xDir := yDir := 0

    (down := GetKeyState("NumpadAdd", "P") && GetKeyState("Numpad8", "P")) ? --yDir
    (left := GetKeyState("NumpadAdd", "P") && GetKeyState("Numpad4", "P")) ? --xDir
    (right := GetKeyState("NumpadAdd", "P") && GetKeyState("Numpad6", "P")) ? ++xDir
    (up := GetKeyState("NumpadAdd", "P") && GetKeyState("Numpad5", "P")) ? ++yDir

    invertAxis ? yDir := -yDir

    if(GetKeyState("NumpadAdd", "P") && Clipboard = "ADS_Sensitivity_OneSixteenth"){
        if(ADS_Sensitivity = True){
            speed := initSpeed / 16
        }
        else{
            speed := initSpeed / 32
        }
    }
    else if(GetKeyState("NumpadAdd", "P") && Clipboard = "ADS_Sensitivity_Quarter"){
        if(ADS_Sensitivity = True){
            speed := initSpeed / 8
        }
        else{
            speed := initSpeed / 16
        }
    }
    else if(GetKeyState("NumpadAdd", "P") && Clipboard = "ADS_Sensitivity_Half"){
        if(ADS_Sensitivity = True){
            speed := initSpeed / 4
        }
        else{
            speed := initSpeed / 8
        }
    }
    else if(GetKeyState("NumpadAdd", "P")){
        if(ADS_Sensitivity = True){
            speed := initSpeed / 2
        }
        else{
            speed := initSpeed / 4
        }
    }
    else{
        speed := initSpeed
    }

    if(xDir && yDir){
        x := Round(xDir * speed * 0.707)
        if(GetKeyState("NumpadAdd", "P")){
            y := Round(yDir * speed * 0.707)
        }
        else{
            y := Round(yDir * speed * 0.707 * (9 / 16))
        }
    }
    else{
        x := (xDir * speed)
        if(GetKeyState("NumpadAdd", "P")){
            y := (yDir * speed)
        }
        else{
            y := (yDir * speed * (9 / 16))
        }
    }

    mouseMove(x, y, delay)
}
return

mouseMove(x, y, delay){
    DllCall("mouse_event", "UInt", 0x0001, "UInt", x, "UInt", y, "UInt", 0, "UInt64P", 0)
    DllCall("Sleep", "UInt", delay)
}

;Numpad4::return
;Numpad5::return
;Numpad6::return
;Numpad8::return

*Numpad2::return
*Numpad3::return
*NumpadDot::return
*NumpadSub::return


Sensitivity.ahk

#include IfWinActive.ahk
#include Optimizer.ahk

~NumpadAdd & CapsLock::
Clipboard := "ADS_Sensitivity_Half"
KeyWait, CapsLock
KeyWait, CapsLock, d t0.15
If(ErrorLevel){
    ;
}
else{
    Clipboard := "ADS_Sensitivity_Quarter"
    KeyWait, CapsLock
    KeyWait, CapsLock, d t0.15
    If(ErrorLevel){
        ;
    }
    else{
        Clipboard := "ADS_Sensitivity_OneSixteenth"
        KeyWait, CapsLock
    }
}
Clipboard := ""
return