Working lean support

This commit is contained in:
momo5502 2016-08-17 20:27:33 +02:00
parent c0e3a49234
commit 9ed469f1ef
3 changed files with 54 additions and 1 deletions

View File

@ -25,6 +25,37 @@ namespace Components
Game::IN_KeyDown(&Lean::in_leanright); Game::IN_KeyDown(&Lean::in_leanright);
} }
void Lean::SetLeanFlags(Game::usercmd_s* cmds)
{
if (Lean::in_leanleft.active || Lean::in_leanleft.wasPressed)
{
cmds->buttons |= BUTTON_FLAG_LEANLEFT;
}
if (Lean::in_leanright.active || Lean::in_leanright.wasPressed)
{
cmds->buttons |= BUTTON_FLAG_LEANRIGHT;
}
Lean::in_leanleft.wasPressed = 0;
Lean::in_leanright.wasPressed = 0;
}
void __declspec(naked) Lean::CL_CmdButtonsStub()
{
__asm
{
// CL_CmdButtons
mov ecx, 5A6510h
call ecx
push esi
call Lean::SetLeanFlags
pop esi
retn
}
}
Lean::Lean() Lean::Lean()
{ {
Game::Cmd_AddCommand("+leanleft", Lean::IN_LeanLeft_Down, Command::Allocate(), 1); Game::Cmd_AddCommand("+leanleft", Lean::IN_LeanLeft_Down, Command::Allocate(), 1);
@ -33,6 +64,6 @@ namespace Components
Game::Cmd_AddCommand("+leanright", Lean::IN_LeanRight_Down, Command::Allocate(), 1); Game::Cmd_AddCommand("+leanright", Lean::IN_LeanRight_Down, Command::Allocate(), 1);
Game::Cmd_AddCommand("-leanright", Lean::IN_LeanRight_Up, Command::Allocate(), 1); Game::Cmd_AddCommand("-leanright", Lean::IN_LeanRight_Up, Command::Allocate(), 1);
// TODO: Transmit correct button flags in CL_CmdButtons and more? Utils::Hook(0x5A6D84, Lean::CL_CmdButtonsStub, HOOK_CALL).Install()->Quick();
} }
} }

View File

@ -1,3 +1,6 @@
#define BUTTON_FLAG_LEANLEFT 0x40
#define BUTTON_FLAG_LEANRIGHT 0x80
namespace Components namespace Components
{ {
class Lean : public Component class Lean : public Component
@ -18,5 +21,8 @@ namespace Components
static void IN_LeanRight_Up(); static void IN_LeanRight_Up();
static void IN_LeanRight_Down(); static void IN_LeanRight_Down();
static void CL_CmdButtonsStub();
static void SetLeanFlags(Game::usercmd_s* cmds);
}; };
} }

View File

@ -2437,6 +2437,22 @@ namespace Game
}; };
#pragma pack(pop) #pragma pack(pop)
// Probably incomplete or wrong!
#pragma pack(push, 4)
struct usercmd_s
{
int serverTime;
int buttons;
char weapon;
char offHandIndex;
int angles[3];
char forwardmove;
char rightmove;
float meleeChargeYaw;
char meleeChargeDist;
};
#pragma pack(pop)
typedef char mapname_t[40]; typedef char mapname_t[40];
#ifdef __cplusplus #ifdef __cplusplus