-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Be Ko
committed
Jul 31, 2023
1 parent
10e97e1
commit ce3700d
Showing
9 changed files
with
591 additions
and
187 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
# D4 "WeakAura" | ||
|
||
## Prerequisited | ||
- Get Autohotkey V1 -> https://www.autohotkey.com/ -> Download v1.1 | ||
## How to start | ||
- Double click on D4WeakAura.ahk | ||
- Loads settings from settings-{ScreenWidth}x{ScreenHeight}.ini | ||
- This starts the overlay | ||
- Configured with basic Overlay | ||
- Healthbar | ||
- Resourcebar | ||
- Trigger-Pixel (resposible for showing/hiding the UI) | ||
- UI is hidden when Map is visible | ||
- Press F4 to toggle UI | ||
- Press F5 to show help and debug view | ||
- in debug mode you can see the rectangles that are captured and where they are displayed, indicated by a line of the same color | ||
|
||
![](./images/Setup_Debug_Help.gif) | ||
|
||
---------------------------------------- | ||
|
||
## How to configure | ||
### Rectangle Clone Mode | ||
![](./images/Setup_new_Overlay.gif) | ||
|
||
- Used for Cooldowns or healthbar/resourcebar | ||
- Press F1 to starting point for new rectangle | ||
- Rectangle is drawn from starting point to current mouse position | ||
- Press F1 again to stop drawing the rectangle | ||
- Configuration window pops up | ||
- set a unique identifier (e.g. "skill1") | ||
- set transparency for the overlay | ||
- set rotation for the overlay | ||
- Press Okay | ||
- The new overlay is immediatly added | ||
|
||
### Edit Rectangle Clone | ||
![](./images/F3_Edit_Mode.gif) | ||
|
||
- Mouse over overlay | ||
- Press F3 | ||
- Overlay moves to mouseposition | ||
- scrollwheel changes transparency | ||
- ctrl+scrollwheel changes scale | ||
- Press F3 again to save | ||
|
||
### Delete Rectangle Clone | ||
|
||
- Mouse over overlay | ||
- Press ctrl+F3 | ||
|
||
### Pixel Clone Mode | ||
- Useful for cooldowns in peripheral vision | ||
- Press F2 to select a pixel on the screen | ||
- The position and color of this pixel is saved | ||
- Configuration window pops up | ||
- set a unique identifier (e.g. "skill1") | ||
- "Where to display" | ||
- the Pixel Clone Mode takes the color value of the selected pixel | ||
- displays it at the borders of the screen (Top/Left/Right/Full) | ||
- set transparency for the overlay (doesn't work for now) | ||
|
||
### Vibrate Mode | ||
- Useful for cooldowns | ||
- Setup the same as Pixel Clone Mode | ||
- Select Vibrate for "Where to display" | ||
- Configure the vibration strength in the Modifier input | ||
- Start the "Rumber.ahk" script to enable the rumble | ||
- This sends the rumble to the first connected XInput Gamepad |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
#SingleInstance | ||
#Include XInput.ahk | ||
|
||
XInput_Init() | ||
global vibrationEnabled := True | ||
|
||
OnMessage(0x004A, "Receive_WM_COPYDATA") ; 0x004A is WM_COPYDATA | ||
return | ||
|
||
Receive_WM_COPYDATA(wParam, lParam) | ||
{ | ||
StringAddress := NumGet(lParam + 2*A_PtrSize) ; Retrieves the CopyDataStruct's lpData member. | ||
CopyOfData := StrGet(StringAddress) ; Copy the string out of the structure. | ||
; Show it with ToolTip vs. MsgBox so we can return in a timely fashion: | ||
params := StrSplit(CopyOfData, "|") | ||
Rumble(params[1], params[2], params[3]) | ||
return true ; Returning 1 (true) is the traditional way to acknowledge this message. | ||
} | ||
|
||
Rumble(rumbleStrength, rumbleLength, rumbleRepeats) { | ||
if(vibrationEnabled) { | ||
|
||
Loop, % rumbleRepeats | ||
{ | ||
argh := XInput_SetState(0, 0*257, rumbleStrength*257) | ||
Sleep, rumbleLength | ||
argh := XInput_SetState(0, 0*257, 0*257) | ||
} | ||
} | ||
argh := XInput_SetState(0, 0*257, 0*257) | ||
return | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,223 @@ | ||
/* XInput by Lexikos | ||
* Requires AutoHotkey 1.1+. | ||
*/ | ||
|
||
/* | ||
Function: XInput_Init | ||
Initializes XInput.ahk with the given XInput DLL. | ||
Parameters: | ||
dll - The path or name of the XInput DLL to load. | ||
*/ | ||
XInput_Init(dll:="") | ||
{ | ||
global | ||
if _XInput_hm | ||
return | ||
|
||
;======== CONSTANTS DEFINED IN XINPUT.H ======== | ||
|
||
; NOTE: These are based on my outdated copy of the DirectX SDK. | ||
; Newer versions of XInput may require additional constants. | ||
|
||
; Device types available in XINPUT_CAPABILITIES | ||
XINPUT_DEVTYPE_GAMEPAD := 0x01 | ||
|
||
; Device subtypes available in XINPUT_CAPABILITIES | ||
XINPUT_DEVSUBTYPE_GAMEPAD := 0x01 | ||
|
||
; Flags for XINPUT_CAPABILITIES | ||
XINPUT_CAPS_VOICE_SUPPORTED := 0x0004 | ||
|
||
; Constants for gamepad buttons | ||
XINPUT_GAMEPAD_DPAD_UP := 0x0001 | ||
XINPUT_GAMEPAD_DPAD_DOWN := 0x0002 | ||
XINPUT_GAMEPAD_DPAD_LEFT := 0x0004 | ||
XINPUT_GAMEPAD_DPAD_RIGHT := 0x0008 | ||
XINPUT_GAMEPAD_START := 0x0010 | ||
XINPUT_GAMEPAD_BACK := 0x0020 | ||
XINPUT_GAMEPAD_LEFT_THUMB := 0x0040 | ||
XINPUT_GAMEPAD_RIGHT_THUMB := 0x0080 | ||
XINPUT_GAMEPAD_LEFT_SHOULDER := 0x0100 | ||
XINPUT_GAMEPAD_RIGHT_SHOULDER := 0x0200 | ||
XINPUT_GAMEPAD_GUIDE := 0x0400 | ||
XINPUT_GAMEPAD_A := 0x1000 | ||
XINPUT_GAMEPAD_B := 0x2000 | ||
XINPUT_GAMEPAD_X := 0x4000 | ||
XINPUT_GAMEPAD_Y := 0x8000 | ||
|
||
; Gamepad thresholds | ||
XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE := 7849 | ||
XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE := 8689 | ||
XINPUT_GAMEPAD_TRIGGER_THRESHOLD := 30 | ||
|
||
; Flags to pass to XInputGetCapabilities | ||
XINPUT_FLAG_GAMEPAD := 0x00000001 | ||
|
||
;=============== END CONSTANTS ================= | ||
|
||
if (dll = "") | ||
Loop %A_WinDir%\System32\XInput1_*.dll | ||
dll := A_LoopFileName | ||
if (dll = "") | ||
dll := "XInput1_3.dll" | ||
|
||
_XInput_hm := DllCall("LoadLibrary" ,"str",dll ,"ptr") | ||
|
||
if !_XInput_hm | ||
throw Exception("Failed to initialize XInput: " dll " not found.") | ||
|
||
(_XInput_GetState := DllCall("GetProcAddress" ,"ptr",_XInput_hm ,"ptr",100 ,"ptr")) | ||
|| (_XInput_GetState := DllCall("GetProcAddress" ,"ptr",_XInput_hm ,"astr","XInputGetState" ,"ptr")) | ||
_XInput_SetState := DllCall("GetProcAddress" ,"ptr",_XInput_hm ,"astr","XInputSetState" ,"ptr") | ||
_XInput_GetCapabilities := DllCall("GetProcAddress" ,"ptr",_XInput_hm ,"astr","XInputGetCapabilities" ,"ptr") | ||
|
||
if !(_XInput_GetState && _XInput_SetState && _XInput_GetCapabilities) | ||
{ | ||
XInput_Term() | ||
throw Exception("Failed to initialize XInput: function not found.") | ||
} | ||
} | ||
|
||
/* | ||
Function: XInput_GetState | ||
Retrieves the current state of the specified controller. | ||
Parameters: | ||
UserIndex - [in] Index of the user's controller. Can be a value from 0 to 3. | ||
Returns: | ||
The current state of the controller as an associative array. | ||
ErrorLevel: | ||
If the function succeeds, ErrorLevel is ERROR_SUCCESS (zero). | ||
If the controller is not connected, ErrorLevel is ERROR_DEVICE_NOT_CONNECTED (1167). | ||
If the function fails, ErrorLevel is an error code defined in Winerror.h. | ||
http://msdn.microsoft.com/en-us/library/ms681381.aspx | ||
Remarks: | ||
XInput.dll returns controller state as a binary structure: | ||
http://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.reference.xinput_state | ||
http://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.reference.xinput_gamepad | ||
*/ | ||
XInput_GetState(UserIndex) | ||
{ | ||
global _XInput_GetState | ||
|
||
VarSetCapacity(xiState,16) | ||
|
||
if ErrorLevel := DllCall(_XInput_GetState ,"uint",UserIndex ,"uint",&xiState) | ||
return 0 | ||
|
||
return { | ||
(Join, | ||
dwPacketNumber: NumGet(xiState, 0, "UInt") | ||
wButtons: NumGet(xiState, 4, "UShort") | ||
bLeftTrigger: NumGet(xiState, 6, "UChar") | ||
bRightTrigger: NumGet(xiState, 7, "UChar") | ||
sThumbLX: NumGet(xiState, 8, "Short") | ||
sThumbLY: NumGet(xiState, 10, "Short") | ||
sThumbRX: NumGet(xiState, 12, "Short") | ||
sThumbRY: NumGet(xiState, 14, "Short") | ||
)} | ||
} | ||
|
||
/* | ||
Function: XInput_SetState | ||
Sends data to a connected controller. This function is used to activate the vibration | ||
function of a controller. | ||
Parameters: | ||
UserIndex - [in] Index of the user's controller. Can be a value from 0 to 3. | ||
LeftMotorSpeed - [in] Speed of the left motor, between 0 and 65535. | ||
RightMotorSpeed - [in] Speed of the right motor, between 0 and 65535. | ||
Returns: | ||
If the function succeeds, the return value is 0 (ERROR_SUCCESS). | ||
If the controller is not connected, the return value is 1167 (ERROR_DEVICE_NOT_CONNECTED). | ||
If the function fails, the return value is an error code defined in Winerror.h. | ||
http://msdn.microsoft.com/en-us/library/ms681381.aspx | ||
Remarks: | ||
The left motor is the low-frequency rumble motor. The right motor is the | ||
high-frequency rumble motor. The two motors are not the same, and they create | ||
different vibration effects. | ||
*/ | ||
XInput_SetState(UserIndex, LeftMotorSpeed, RightMotorSpeed) | ||
{ | ||
global _XInput_SetState | ||
return DllCall(_XInput_SetState ,"uint",UserIndex ,"uint*",LeftMotorSpeed|RightMotorSpeed<<16) | ||
} | ||
|
||
/* | ||
Function: XInput_GetCapabilities | ||
Retrieves the capabilities and features of a connected controller. | ||
Parameters: | ||
UserIndex - [in] Index of the user's controller. Can be a value in the range 0–3. | ||
Flags - [in] Input flags that identify the controller type. | ||
0 - All controllers. | ||
1 - XINPUT_FLAG_GAMEPAD: Xbox 360 Controllers only. | ||
Returns: | ||
The controller capabilities, as an associative array. | ||
ErrorLevel: | ||
If the function succeeds, ErrorLevel is 0 (ERROR_SUCCESS). | ||
If the controller is not connected, ErrorLevel is 1167 (ERROR_DEVICE_NOT_CONNECTED). | ||
If the function fails, ErrorLevel is an error code defined in Winerror.h. | ||
http://msdn.microsoft.com/en-us/library/ms681381.aspx | ||
Remarks: | ||
XInput.dll returns capabilities via a binary structure: | ||
http://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.reference.xinput_capabilities | ||
*/ | ||
XInput_GetCapabilities(UserIndex, Flags) | ||
{ | ||
global _XInput_GetCapabilities | ||
|
||
VarSetCapacity(xiCaps,20) | ||
|
||
if ErrorLevel := DllCall(_XInput_GetCapabilities ,"uint",UserIndex ,"uint",Flags ,"ptr",&xiCaps) | ||
return 0 | ||
|
||
return, | ||
(Join | ||
{ | ||
Type: NumGet(xiCaps, 0, "UChar"), | ||
SubType: NumGet(xiCaps, 1, "UChar"), | ||
Flags: NumGet(xiCaps, 2, "UShort"), | ||
Gamepad: | ||
{ | ||
wButtons: NumGet(xiCaps, 4, "UShort"), | ||
bLeftTrigger: NumGet(xiCaps, 6, "UChar"), | ||
bRightTrigger: NumGet(xiCaps, 7, "UChar"), | ||
sThumbLX: NumGet(xiCaps, 8, "Short"), | ||
sThumbLY: NumGet(xiCaps, 10, "Short"), | ||
sThumbRX: NumGet(xiCaps, 12, "Short"), | ||
sThumbRY: NumGet(xiCaps, 14, "Short") | ||
}, | ||
Vibration: | ||
{ | ||
wLeftMotorSpeed: NumGet(xiCaps, 16, "UShort"), | ||
wRightMotorSpeed: NumGet(xiCaps, 18, "UShort") | ||
} | ||
} | ||
) | ||
} | ||
|
||
/* | ||
Function: XInput_Term | ||
Unloads the previously loaded XInput DLL. | ||
*/ | ||
XInput_Term() { | ||
global | ||
if _XInput_hm | ||
DllCall("FreeLibrary","uint",_XInput_hm), _XInput_hm :=_XInput_GetState :=_XInput_SetState :=_XInput_GetCapabilities :=0 | ||
} | ||
|
||
; TODO: XInputEnable, 'GetBatteryInformation and 'GetKeystroke. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.