I found the velocity addresses. They are 32 bit float big endian (unsupported by MHS to my knowledge) You need to use CheatEngine. The value moves around on me during different instances of the program.
In Cheat Engine
Right click value type
Define New Custom Type Auto-Assembler
Paste the code below.
Click the magnifying glass on the computer icon to attach it to Dolphin.
You might want to check mark 'writable', box 'executable' and box 'CopyOnWrite'. You also want to change the option Edit: Settings: Scan Settings: Put a Check in MEM_MAPPED. These may or may not be extraneous steps.
Walking north is negative. Walking left is negative. Walking at full speed stays between about 12 and 18 speed depending on hills. To do scan type 'value between' you'll want either (-18 to -12) or (12 to 18). If you also search between -0.1 and 0.1 when standing still, you should be able to find it. I still have trouble finding it sometimes and it's usually findable once I reboot Dolphin and reattach Cheat Engine a couple times. The values for X and Y are located 8 apart.
(Credit to mgr.inz.Player on CheatEngine forums.)
alloc(TypeName,256)
alloc(ByteSize,4)
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)
alloc(UsesFloat,4)
TypeName:
db 'Float Big Endian',0
ByteSize:
dd 4
UsesFloat:
db 01
ConvertRoutine:
[32-bit]
push ebp
mov ebp,esp
mov eax,[ebp+8] //place the address that contains the bytes into eax
mov eax,[eax] //place the bytes into eax
bswap eax
pop ebp
ret 4
[/32-bit]
[64-bit]
//rcx=address of input
mov eax,[rcx] //eax now contains the bytes 'input' pointed to
bswap eax
ret
[/64-bit]
ConvertBackRoutine:
[32-bit]
push ebp
mov ebp,esp
//[ebp+8]=input
//[ebp+c]=address of output
push eax
push ebx
mov eax,[ebp+8] //load the value into eax
mov ebx,[ebp+c] //load the address into ebx
bswap eax
mov [ebx],eax //write the value into the address
pop ebx
pop eax
pop ebp
ret 8
[/32-bit]
[64-bit]
//ecx=input
//rdx=address of output
bswap ecx
mov [rdx],ecx //place the integer the 4 bytes pointed to by rdx
ret
[/64-bit]