mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-11 02:23:09 +00:00
Add PF_ANALOGSTICK, tells if this player has bound analog stick to d-pad
This commit is contained in:
parent
abaa237b08
commit
b452232974
6 changed files with 52 additions and 3 deletions
|
|
@ -1235,6 +1235,7 @@ enum {
|
||||||
WP_KICKSTARTACCEL = 1<<0,
|
WP_KICKSTARTACCEL = 1<<0,
|
||||||
WP_SHRINKME = 1<<1,
|
WP_SHRINKME = 1<<1,
|
||||||
WP_AUTOROULETTE = 1<<2,
|
WP_AUTOROULETTE = 1<<2,
|
||||||
|
WP_ANALOGSTICK = 1<<3,
|
||||||
};
|
};
|
||||||
|
|
||||||
void WeaponPref_Send(UINT8 ssplayer)
|
void WeaponPref_Send(UINT8 ssplayer)
|
||||||
|
|
@ -1250,6 +1251,9 @@ void WeaponPref_Send(UINT8 ssplayer)
|
||||||
if (cv_shrinkme[ssplayer].value)
|
if (cv_shrinkme[ssplayer].value)
|
||||||
prefs |= WP_SHRINKME;
|
prefs |= WP_SHRINKME;
|
||||||
|
|
||||||
|
if (gamecontrolflags[ssplayer] & GCF_ANALOGSTICK)
|
||||||
|
prefs |= WP_ANALOGSTICK;
|
||||||
|
|
||||||
SendNetXCmdForPlayer(ssplayer, XD_WEAPONPREF, &prefs, 1);
|
SendNetXCmdForPlayer(ssplayer, XD_WEAPONPREF, &prefs, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1268,6 +1272,9 @@ void WeaponPref_Save(UINT8 **cp, INT32 playernum)
|
||||||
if (player->pflags & PF_SHRINKME)
|
if (player->pflags & PF_SHRINKME)
|
||||||
prefs |= WP_SHRINKME;
|
prefs |= WP_SHRINKME;
|
||||||
|
|
||||||
|
if (player->pflags & PF_ANALOGSTICK)
|
||||||
|
prefs |= WP_ANALOGSTICK;
|
||||||
|
|
||||||
WRITEUINT8(*cp, prefs);
|
WRITEUINT8(*cp, prefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1289,6 +1296,11 @@ size_t WeaponPref_Parse(const UINT8 *bufstart, INT32 playernum)
|
||||||
if (prefs & WP_SHRINKME)
|
if (prefs & WP_SHRINKME)
|
||||||
player->pflags |= PF_SHRINKME;
|
player->pflags |= PF_SHRINKME;
|
||||||
|
|
||||||
|
if (prefs & WP_ANALOGSTICK)
|
||||||
|
player->pflags |= PF_ANALOGSTICK;
|
||||||
|
else
|
||||||
|
player->pflags &= ~PF_ANALOGSTICK;
|
||||||
|
|
||||||
if (leveltime < 2)
|
if (leveltime < 2)
|
||||||
{
|
{
|
||||||
// BAD HACK: No other place I tried to slot this in
|
// BAD HACK: No other place I tried to slot this in
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,9 @@ typedef enum
|
||||||
|
|
||||||
PF_RINGLOCK = 1<<13, // Prevent picking up rings while SPB is locked on
|
PF_RINGLOCK = 1<<13, // Prevent picking up rings while SPB is locked on
|
||||||
|
|
||||||
//14-17 free, was previously itemflags stuff
|
PF_ANALOGSTICK = 1<<14, // This player is using an analog joystick
|
||||||
|
|
||||||
|
//15-17 free, was previously itemflags stuff
|
||||||
|
|
||||||
PF_DRIFTINPUT = 1<<18, // Drifting!
|
PF_DRIFTINPUT = 1<<18, // Drifting!
|
||||||
PF_GETSPARKS = 1<<19, // Can get sparks
|
PF_GETSPARKS = 1<<19, // Can get sparks
|
||||||
|
|
|
||||||
|
|
@ -3994,7 +3994,7 @@ const char *const PLAYERFLAG_LIST[] = {
|
||||||
|
|
||||||
"RINGLOCK", // Prevent picking up rings while SPB is locked on
|
"RINGLOCK", // Prevent picking up rings while SPB is locked on
|
||||||
|
|
||||||
"\x01", // Free
|
"ANALOGSTICK", // This player is using an analog joystick
|
||||||
"\x01", // Free
|
"\x01", // Free
|
||||||
"\x01", // Free
|
"\x01", // Free
|
||||||
"\x01", // Free
|
"\x01", // Free
|
||||||
|
|
|
||||||
|
|
@ -2189,7 +2189,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
totalring = players[player].totalring;
|
totalring = players[player].totalring;
|
||||||
xtralife = players[player].xtralife;
|
xtralife = players[player].xtralife;
|
||||||
|
|
||||||
pflags = (players[player].pflags & (PF_WANTSTOJOIN|PF_KICKSTARTACCEL|PF_SHRINKME|PF_SHRINKACTIVE|PF_AUTOROULETTE));
|
pflags = (players[player].pflags & (PF_WANTSTOJOIN|PF_KICKSTARTACCEL|PF_SHRINKME|PF_SHRINKACTIVE|PF_AUTOROULETTE|PF_ANALOGSTICK));
|
||||||
|
|
||||||
// SRB2kart
|
// SRB2kart
|
||||||
memcpy(&itemRoulette, &players[player].itemRoulette, sizeof (itemRoulette));
|
memcpy(&itemRoulette, &players[player].itemRoulette, sizeof (itemRoulette));
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ INT32 gamekeydown[MAXDEVICES][NUMINPUTS];
|
||||||
|
|
||||||
// two key codes (or virtual key) per game control
|
// two key codes (or virtual key) per game control
|
||||||
INT32 gamecontrol[MAXSPLITSCREENPLAYERS][num_gamecontrols][MAXINPUTMAPPING];
|
INT32 gamecontrol[MAXSPLITSCREENPLAYERS][num_gamecontrols][MAXINPUTMAPPING];
|
||||||
|
UINT8 gamecontrolflags[MAXSPLITSCREENPLAYERS];
|
||||||
INT32 gamecontroldefault[num_gamecontrols][MAXINPUTMAPPING]; // default control storage
|
INT32 gamecontroldefault[num_gamecontrols][MAXINPUTMAPPING]; // default control storage
|
||||||
INT32 menucontrolreserved[num_gamecontrols][MAXINPUTMAPPING];
|
INT32 menucontrolreserved[num_gamecontrols][MAXINPUTMAPPING];
|
||||||
|
|
||||||
|
|
@ -963,9 +964,37 @@ void G_DefineDefaultControls(void)
|
||||||
menucontrolreserved[gc_start][0] = KEY_ESCAPE; // Handled special
|
menucontrolreserved[gc_start][0] = KEY_ESCAPE; // Handled special
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean G_ControlUsesAxis(INT32 map[MAXINPUTMAPPING])
|
||||||
|
{
|
||||||
|
for (INT32 i = 0; i < MAXINPUTMAPPING; i++)
|
||||||
|
{
|
||||||
|
INT32 key = map[i];
|
||||||
|
if (key >= KEY_AXIS1 && key < JOYINPUTEND)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void G_ApplyControlScheme(UINT8 splitplayer, INT32 (*fromcontrols)[MAXINPUTMAPPING])
|
void G_ApplyControlScheme(UINT8 splitplayer, INT32 (*fromcontrols)[MAXINPUTMAPPING])
|
||||||
{
|
{
|
||||||
|
UINT8 flags = 0;
|
||||||
|
|
||||||
|
if (G_ControlUsesAxis(fromcontrols[gc_up]) ||
|
||||||
|
G_ControlUsesAxis(fromcontrols[gc_down]) ||
|
||||||
|
G_ControlUsesAxis(fromcontrols[gc_left]) ||
|
||||||
|
G_ControlUsesAxis(fromcontrols[gc_right]))
|
||||||
|
{
|
||||||
|
flags |= GCF_ANALOGSTICK;
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(gamecontrol[splitplayer], fromcontrols, sizeof gamecontrol[splitplayer]);
|
memcpy(gamecontrol[splitplayer], fromcontrols, sizeof gamecontrol[splitplayer]);
|
||||||
|
gamecontrolflags[splitplayer] = flags;
|
||||||
|
|
||||||
|
if (Playing())
|
||||||
|
WeaponPref_Send(splitplayer); // update PF_ANALOGSTICK
|
||||||
}
|
}
|
||||||
|
|
||||||
void G_SaveKeySetting(FILE *f, INT32 (*fromcontrolsa)[MAXINPUTMAPPING], INT32 (*fromcontrolsb)[MAXINPUTMAPPING], INT32 (*fromcontrolsc)[MAXINPUTMAPPING], INT32 (*fromcontrolsd)[MAXINPUTMAPPING])
|
void G_SaveKeySetting(FILE *f, INT32 (*fromcontrolsa)[MAXINPUTMAPPING], INT32 (*fromcontrolsb)[MAXINPUTMAPPING], INT32 (*fromcontrolsc)[MAXINPUTMAPPING], INT32 (*fromcontrolsd)[MAXINPUTMAPPING])
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,11 @@ typedef enum
|
||||||
gc_drift = gc_r,
|
gc_drift = gc_r,
|
||||||
} gamecontrols_e;
|
} gamecontrols_e;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
GCF_ANALOGSTICK = 1 << 0,
|
||||||
|
} gamecontrol_flags_e;
|
||||||
|
|
||||||
// mouse values are used once
|
// mouse values are used once
|
||||||
extern consvar_t cv_controlperkey;
|
extern consvar_t cv_controlperkey;
|
||||||
|
|
||||||
|
|
@ -113,6 +118,7 @@ extern INT32 gamekeydown[MAXDEVICES][NUMINPUTS];
|
||||||
|
|
||||||
// several key codes (or virtual key) per game control
|
// several key codes (or virtual key) per game control
|
||||||
extern INT32 gamecontrol[MAXSPLITSCREENPLAYERS][num_gamecontrols][MAXINPUTMAPPING];
|
extern INT32 gamecontrol[MAXSPLITSCREENPLAYERS][num_gamecontrols][MAXINPUTMAPPING];
|
||||||
|
extern UINT8 gamecontrolflags[MAXSPLITSCREENPLAYERS];
|
||||||
extern INT32 gamecontroldefault[num_gamecontrols][MAXINPUTMAPPING]; // default control storage
|
extern INT32 gamecontroldefault[num_gamecontrols][MAXINPUTMAPPING]; // default control storage
|
||||||
extern INT32 menucontrolreserved[num_gamecontrols][MAXINPUTMAPPING];
|
extern INT32 menucontrolreserved[num_gamecontrols][MAXINPUTMAPPING];
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue