Skip to content

Commit

Permalink
Blood: Add support for solo axis deadzones
Browse files Browse the repository at this point in the history
  • Loading branch information
tmyqlfpir committed Sep 13, 2024
1 parent c709fd0 commit 380bb30
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 6 deletions.
15 changes: 12 additions & 3 deletions source/blood/src/_functio.h
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ static const int32_t joystickanalogscaledefaults[MAXJOYAXES] =
DEFAULTJOYSTICKANALOGUESCALE,
DEFAULTJOYSTICKANALOGUESCALE,
DEFAULTJOYSTICKANALOGUESCALE/2,
DEFAULTJOYSTICKANALOGUESCALE/4
DEFAULTJOYSTICKANALOGUESCALE/4,
};


Expand All @@ -352,7 +352,16 @@ static const int32_t joystickanalogdeaddefaults[MAXJOYAXES] =
DEFAULTJOYSTICKANALOGUEDEAD*5,
DEFAULTJOYSTICKANALOGUEDEAD*4,
DEFAULTJOYSTICKANALOGUEDEAD*2,
DEFAULTJOYSTICKANALOGUEDEAD*2
DEFAULTJOYSTICKANALOGUEDEAD*2,
};


static const int32_t joystickanalogaxissolodeadzone[MAXJOYAXES] =
{
1,
0,
0,
0,
};


Expand All @@ -361,7 +370,7 @@ static const int32_t joystickanalogsaturatedefaults[MAXJOYAXES] =
DEFAULTJOYSTICKANALOGUESATURATE*3,
DEFAULTJOYSTICKANALOGUESATURATE*3,
DEFAULTJOYSTICKANALOGUESATURATE*2,
DEFAULTJOYSTICKANALOGUESATURATE*2
DEFAULTJOYSTICKANALOGUESATURATE*2,
};


Expand Down
16 changes: 16 additions & 0 deletions source/blood/src/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ int32_t JoystickAnalogueScale[MAXJOYAXES];
int32_t JoystickAnalogueDead[MAXJOYAXES];
int32_t JoystickAnalogueSaturate[MAXJOYAXES];
int32_t JoystickAnalogueInvert[MAXJOYAXES];
int32_t JoystickAnalogueAxisSoloDeadZone[MAXJOYAXES];
uint8_t KeyboardKeys[NUMGAMEFUNCTIONS][2];
int32_t scripthandle;
int32_t setupread;
Expand Down Expand Up @@ -479,6 +480,9 @@ void CONFIG_SetDefaults(void)

JoystickAnalogueInvert[i] = 0;
CONTROL_SetAnalogAxisInvert(i, JoystickAnalogueInvert[i]);

JoystickAnalogueAxisSoloDeadZone[i] = joystickanalogaxissolodeadzone[i];
JOYSTICK_SetAxisSoloDeadZone(i, JoystickAnalogueAxisSoloDeadZone[i]);
}
#else
for (int i=0; i<MAXJOYBUTTONSANDHATS; i++)
Expand Down Expand Up @@ -507,6 +511,9 @@ void CONFIG_SetDefaults(void)

JoystickAnalogueInvert[i] = 0;
CONTROL_SetAnalogAxisInvert(i, JoystickAnalogueInvert[i]);

JoystickAnalogueAxisSoloDeadZone[i] = joystickanalogaxissolodeadzone[i];
JOYSTICK_SetAxisSoloDeadZone(i, JoystickAnalogueAxisSoloDeadZone[i]);
}
#endif
}
Expand Down Expand Up @@ -668,6 +675,11 @@ void CONFIG_SetupJoystick(void)
scale = JoystickAnalogueInvert[i];
SCRIPT_GetNumber(scripthandle, "Controls", str,&scale);
JoystickAnalogueInvert[i] = scale;

Bsprintf(str,"JoystickAnalogAxisSoloDeadZone%d",i);
scale = JoystickAnalogueAxisSoloDeadZone[i];
SCRIPT_GetNumber(scripthandle, "Controls", str,&scale);
JoystickAnalogueAxisSoloDeadZone[i] = scale;
}

for (i=0; i<MAXJOYBUTTONSANDHATS; i++)
Expand All @@ -683,6 +695,7 @@ void CONFIG_SetupJoystick(void)
CONTROL_SetAnalogAxisScale(i, JoystickAnalogueScale[i], controldevice_joystick);
JOYSTICK_SetDeadZone(i, JoystickAnalogueDead[i], JoystickAnalogueSaturate[i]);
CONTROL_SetAnalogAxisInvert(i, JoystickAnalogueInvert[i]);
JOYSTICK_SetAxisSoloDeadZone(i, JoystickAnalogueAxisSoloDeadZone[i]);
}
}

Expand Down Expand Up @@ -983,6 +996,9 @@ void CONFIG_WriteSetup(uint32_t flags)

Bsprintf(buf, "JoystickAnalogInvert%d", dummy);
SCRIPT_PutNumber(scripthandle, "Controls", buf, JoystickAnalogueInvert[dummy], FALSE, FALSE);

Bsprintf(buf, "JoystickAnalogAxisSoloDeadZone%d", dummy);
SCRIPT_PutNumber(scripthandle, "Controls", buf, JoystickAnalogueAxisSoloDeadZone[dummy], FALSE, FALSE);
}
}

Expand Down
1 change: 1 addition & 0 deletions source/blood/src/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ extern int32_t JoystickAnalogueScale[MAXJOYAXES];
extern int32_t JoystickAnalogueDead[MAXJOYAXES];
extern int32_t JoystickAnalogueSaturate[MAXJOYAXES];
extern int32_t JoystickAnalogueInvert[MAXJOYAXES];
extern int32_t JoystickAnalogueAxisSoloDeadZone[MAXJOYAXES];
extern uint8_t KeyboardKeys[NUMGAMEFUNCTIONS][2];
extern int32_t scripthandle;
extern int32_t setupread;
Expand Down
26 changes: 23 additions & 3 deletions source/blood/src/menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,7 @@ void SetJoystickDigitalPos(CGameMenuItemZCycle* pItem);
void SetJoystickDigitalNeg(CGameMenuItemZCycle* pItem);
void SetJoystickDeadzone(CGameMenuItemSlider* pItem);
void SetJoystickSaturate(CGameMenuItemSlider* pItem);
void SetJoystickSoloDeadzone(CGameMenuItemZBool* pItem);

CGameMenuItemTitle itemOptionsControlTitle("CONTROL SETUP", 1, 160, 20, 2038);
CGameMenuItemChain itemOptionsControlKeyboard("KEYBOARD SETUP", 1, 0, 60, 320, 1, &menuOptionsControlKeyboard, -1, NULL, 0);
Expand Down Expand Up @@ -829,6 +830,7 @@ CGameMenuItemZCycle *pItemOptionsControlJoystickAxisDigitalPos[MAXJOYAXES];
CGameMenuItemZCycle *pItemOptionsControlJoystickAxisDigitalNeg[MAXJOYAXES];
CGameMenuItemSlider *pItemOptionsControlJoystickAxisDeadzone[MAXJOYAXES];
CGameMenuItemSlider *pItemOptionsControlJoystickAxisSaturate[MAXJOYAXES];
CGameMenuItemZBool *pItemOptionsControlJoystickAxisSoloDeadzone[MAXJOYAXES];

void SetupLoadingScreen(void)
{
Expand Down Expand Up @@ -1543,11 +1545,11 @@ void SetupOptionsMenu(void)
pItemOptionsControlJoystickAxisName[nAxis] = new CGameMenuItemTitle(MenuJoyAxisNames[nAxis], 3, 160, y, -1); // get axis name
dassert(pItemOptionsControlJoystickAxisName[nAxis] != NULL);
menuOptionsControlJoystickAxis[nAxis].Add(pItemOptionsControlJoystickAxisName[nAxis], false);
y += 12;
y += 10;
pItemOptionsControlJoystickAxisScale[nAxis] = new CGameMenuItemSlider("AXIS SCALE:", 1, 18, y, 280, &JoystickAnalogueScale[nAxis], fix16_from_int(0), fix16_from_float(2.f), fix16_from_float(0.025f), SetJoystickScale, -1, -1, kMenuSliderQ16); // get axis scale
dassert(pItemOptionsControlJoystickAxisScale[nAxis] != NULL);
menuOptionsControlJoystickAxis[nAxis].Add(pItemOptionsControlJoystickAxisScale[nAxis], true);
y += 25;
y += 22;
pItemOptionsControlJoystickAxisAnalogue[nAxis] = new CGameMenuItemZCycle("ANALOG:", 1, 18, y, 280, 0, SetJoystickAnalogue, zJoystickAnalogue, ARRAY_SSIZE(zJoystickAnalogue), 0); // get analog function
dassert(pItemOptionsControlJoystickAxisAnalogue[nAxis] != NULL);
menuOptionsControlJoystickAxis[nAxis].Add(pItemOptionsControlJoystickAxisAnalogue[nAxis], false);
Expand All @@ -1563,14 +1565,18 @@ void SetupOptionsMenu(void)
pItemOptionsControlJoystickAxisDigitalNeg[nAxis] = new CGameMenuItemZCycle("DIGITAL -:", 1, 18, y, 280, 0, SetJoystickDigitalNeg, pzGamefuncsStrings, NUMGAMEFUNCTIONS+1, 0, true); // get digital function
dassert(pItemOptionsControlJoystickAxisDigitalNeg[nAxis] != NULL);
menuOptionsControlJoystickAxis[nAxis].Add(pItemOptionsControlJoystickAxisDigitalNeg[nAxis], false);
y += 25;
y += 22;
pItemOptionsControlJoystickAxisDeadzone[nAxis] = new CGameMenuItemSlider("DEAD ZONE:", 1, 18, y, 280, &JoystickAnalogueDead[nAxis], fix16_from_int(0), fix16_from_float(0.5f), fix16_from_float(0.025f), SetJoystickDeadzone, -1, -1, kMenuSliderPercent); // get dead size
dassert(pItemOptionsControlJoystickAxisDeadzone[nAxis] != NULL);
menuOptionsControlJoystickAxis[nAxis].Add(pItemOptionsControlJoystickAxisDeadzone[nAxis], false);
y += 17;
pItemOptionsControlJoystickAxisSaturate[nAxis] = new CGameMenuItemSlider("SATURATE:", 1, 18, y, 280, &JoystickAnalogueSaturate[nAxis], fix16_from_int(0), fix16_from_float(0.5f), fix16_from_float(0.025f), SetJoystickSaturate, -1, -1, kMenuSliderPercent); // get saturate
dassert(pItemOptionsControlJoystickAxisSaturate[nAxis] != NULL);
menuOptionsControlJoystickAxis[nAxis].Add(pItemOptionsControlJoystickAxisSaturate[nAxis], false);
y += 17;
pItemOptionsControlJoystickAxisSoloDeadzone[nAxis] = new CGameMenuItemZBool("SINGLE AXIS DEAD ZONE:", 1, 18, y, 280, false, SetJoystickSoloDeadzone, NULL, NULL); // get isolated dead
dassert(pItemOptionsControlJoystickAxisSoloDeadzone[nAxis] != NULL);
menuOptionsControlJoystickAxis[nAxis].Add(pItemOptionsControlJoystickAxisSoloDeadzone[nAxis], false);
menuOptionsControlJoystickAxis[nAxis].Add(&itemBloodQAV, false);
}
}
Expand Down Expand Up @@ -2374,6 +2380,7 @@ void SetupJoystickAxesMenu(CGameMenuItemChain *pItem)
}
pItemOptionsControlJoystickAxisDeadzone[nAxis]->nValue = JoystickAnalogueDead[nAxis];
pItemOptionsControlJoystickAxisSaturate[nAxis]->nValue = JoystickAnalogueSaturate[nAxis];
pItemOptionsControlJoystickAxisSoloDeadzone[nAxis]->at20 = JoystickAnalogueAxisSoloDeadZone[nAxis];
}
}

Expand Down Expand Up @@ -2500,6 +2507,19 @@ void SetJoystickSaturate(CGameMenuItemSlider* pItem)
}
}

void SetJoystickSoloDeadzone(CGameMenuItemZBool* pItem)
{
for (int nAxis = 0; nAxis < MAXJOYAXES; nAxis++)
{
if (pItem == pItemOptionsControlJoystickAxisSoloDeadzone[nAxis])
{
JoystickAnalogueAxisSoloDeadZone[nAxis] = pItem->at20;
JOYSTICK_SetAxisSoloDeadZone(nAxis, JoystickAnalogueAxisSoloDeadZone[nAxis]);
break;
}
}
}

void PreDrawControlMouse(CGameMenuItem *pItem)
{
if (pItem == &itemOptionsControlMouseVerticalAim)
Expand Down

0 comments on commit 380bb30

Please sign in to comment.