forked from Ports/perfect_dark
Merge branch 'port' of https://github.com/fgsfdsfgs/perfect_dark into port-debugger
This commit is contained in:
commit
8ca7f79c1e
22 files changed
+703
-353
No files matched your search
@@ -107,6 +107,9 @@ void inputControllerSetAxisScale(s32 cidx, s32 stick, s32 axis, f32 value);
|
||||
f32 inputControllerGetAxisDeadzone(s32 cidx, s32 stick, s32 axis);
|
||||
void inputControllerSetAxisDeadzone(s32 cidx, s32 stick, s32 axis, f32 value);
|
||||
|
||||
void inputControllerSetFirstIndex(s32 cidx);
|
||||
s32 inputControllerGetFirstIndex(void);
|
||||
|
||||
// vk is a value from the virtkey enum above
|
||||
s32 inputKeyPressed(u32 vk);
|
||||
|
||||
@@ -169,7 +172,7 @@ void inputUpdate(void);
|
||||
// call this before configSave()
|
||||
void inputSaveBinds(void);
|
||||
|
||||
void inputSetDefaultKeyBinds(void);
|
||||
void inputSetDefaultKeyBinds(s32 cidx, s32 n64mode);
|
||||
|
||||
void inputClearLastKey(void);
|
||||
s32 inputGetLastKey(void);
|
||||
|
||||
+114
-35
@@ -158,10 +158,10 @@ static const char *vkJoyNames[] = {
|
||||
|
||||
static char vkNames[VK_TOTAL_COUNT][64];
|
||||
|
||||
void inputSetDefaultKeyBinds(void)
|
||||
void inputSetDefaultKeyBinds(s32 cidx, s32 n64mode)
|
||||
{
|
||||
// TODO: make VK constants for all these
|
||||
static const u32 kbbinds[][3] = {
|
||||
static const u32 pckbbinds[][3] = {
|
||||
{ CK_B, SDL_SCANCODE_E, 0 },
|
||||
{ CK_X, SDL_SCANCODE_R, 0 },
|
||||
{ CK_RTRIG, VK_MOUSE_RIGHT, SDL_SCANCODE_Z },
|
||||
@@ -184,7 +184,7 @@ void inputSetDefaultKeyBinds(void)
|
||||
{ CK_2000, SDL_SCANCODE_LCTRL, 0 }
|
||||
};
|
||||
|
||||
static const u32 joybinds[][2] = {
|
||||
static const u32 pcjoybinds[][2] = {
|
||||
{ CK_A, SDL_CONTROLLER_BUTTON_A },
|
||||
{ CK_X, SDL_CONTROLLER_BUTTON_X },
|
||||
{ CK_Y, SDL_CONTROLLER_BUTTON_Y },
|
||||
@@ -201,20 +201,70 @@ void inputSetDefaultKeyBinds(void)
|
||||
{ CK_8000, SDL_CONTROLLER_BUTTON_LEFTSTICK },
|
||||
};
|
||||
|
||||
memset(binds, 0, sizeof(binds));
|
||||
static const u32 n64kbbinds[][3] = {
|
||||
{ CK_A, SDL_SCANCODE_Q, 0 },
|
||||
{ CK_B, SDL_SCANCODE_E, 0 },
|
||||
{ CK_RTRIG, VK_MOUSE_RIGHT, SDL_SCANCODE_LALT },
|
||||
{ CK_LTRIG, SDL_SCANCODE_F, 0 },
|
||||
{ CK_ZTRIG, VK_MOUSE_LEFT, SDL_SCANCODE_SPACE },
|
||||
{ CK_START, SDL_SCANCODE_RETURN, 0 },
|
||||
{ CK_C_D, SDL_SCANCODE_S, 0 },
|
||||
{ CK_C_U, SDL_SCANCODE_W, 0 },
|
||||
{ CK_C_R, SDL_SCANCODE_D, 0 },
|
||||
{ CK_C_L, SDL_SCANCODE_A, 0 },
|
||||
{ CK_DPAD_L, SDL_SCANCODE_LEFT, 0 },
|
||||
{ CK_DPAD_R, SDL_SCANCODE_RIGHT, 0 },
|
||||
{ CK_DPAD_D, SDL_SCANCODE_DOWN, 0 },
|
||||
{ CK_DPAD_U, SDL_SCANCODE_UP, 0 },
|
||||
{ CK_STICK_YNEG, SDL_SCANCODE_K, 0 },
|
||||
{ CK_STICK_YPOS, SDL_SCANCODE_I, 0 },
|
||||
{ CK_STICK_XNEG, SDL_SCANCODE_J, 0 },
|
||||
{ CK_STICK_XPOS, SDL_SCANCODE_L, 0 },
|
||||
};
|
||||
|
||||
for (u32 i = 0; i < sizeof(kbbinds) / sizeof(kbbinds[0]); ++i) {
|
||||
for (s32 j = 1; j < 3; ++j) {
|
||||
if (kbbinds[i][j]) {
|
||||
inputKeyBind(0, kbbinds[i][0], j - 1, kbbinds[i][j]);
|
||||
static const u32 n64joybinds[][2] = {
|
||||
{ CK_A, SDL_CONTROLLER_BUTTON_A },
|
||||
{ CK_B, SDL_CONTROLLER_BUTTON_B },
|
||||
{ CK_LTRIG, SDL_CONTROLLER_BUTTON_LEFTSHOULDER },
|
||||
{ CK_RTRIG, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER },
|
||||
{ CK_ZTRIG, VK_JOY1_RTRIG - VK_JOY1_BEGIN },
|
||||
{ CK_START, SDL_CONTROLLER_BUTTON_START },
|
||||
{ CK_DPAD_D, SDL_CONTROLLER_BUTTON_DPAD_DOWN },
|
||||
{ CK_DPAD_U, SDL_CONTROLLER_BUTTON_DPAD_UP },
|
||||
{ CK_DPAD_L, SDL_CONTROLLER_BUTTON_DPAD_LEFT },
|
||||
{ CK_DPAD_R, SDL_CONTROLLER_BUTTON_DPAD_RIGHT },
|
||||
};
|
||||
|
||||
memset(binds[cidx], 0, sizeof(binds[cidx]));
|
||||
|
||||
const u32 (*kbbinds)[3];
|
||||
const u32 (*joybinds)[2];
|
||||
u32 numkbbinds;
|
||||
u32 numjoybinds;
|
||||
if (n64mode) {
|
||||
kbbinds = n64kbbinds;
|
||||
joybinds = n64joybinds;
|
||||
numkbbinds = sizeof(n64kbbinds) / sizeof(n64kbbinds[0]);
|
||||
numjoybinds = sizeof(n64joybinds) / sizeof(n64joybinds[0]);
|
||||
} else {
|
||||
kbbinds = pckbbinds;
|
||||
joybinds = pcjoybinds;
|
||||
numkbbinds = sizeof(pckbbinds) / sizeof(pckbbinds[0]);
|
||||
numjoybinds = sizeof(pcjoybinds) / sizeof(pcjoybinds[0]);
|
||||
}
|
||||
|
||||
if (cidx == 0) {
|
||||
for (u32 i = 0; i < numkbbinds; ++i) {
|
||||
for (s32 j = 1; j < 3; ++j) {
|
||||
if (kbbinds[i][j]) {
|
||||
inputKeyBind(cidx, kbbinds[i][0], j - 1, kbbinds[i][j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < sizeof(joybinds) / sizeof(joybinds[0]); ++i) {
|
||||
for (s32 j = 0; j < INPUT_MAX_CONTROLLERS; ++j) {
|
||||
inputKeyBind(j, joybinds[i][0], -1, VK_JOY_BEGIN + j * INPUT_MAX_CONTROLLER_BUTTONS + joybinds[i][1]);
|
||||
}
|
||||
for (u32 i = 0; i < numjoybinds; ++i) {
|
||||
inputKeyBind(cidx, joybinds[i][0], -1, VK_JOY_BEGIN + cidx * INPUT_MAX_CONTROLLER_BUTTONS + joybinds[i][1]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -262,6 +312,44 @@ static inline s32 inputControllerGetIndex(SDL_GameController *ctrl) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
static inline void inputShutdownAllControllers(void)
|
||||
{
|
||||
for (s32 cidx = 0; cidx < INPUT_MAX_CONTROLLERS; ++cidx) {
|
||||
if (pads[cidx]) {
|
||||
SDL_GameControllerClose(pads[cidx]);
|
||||
pads[cidx] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
connectedMask = 1; // always report first controller as connected
|
||||
}
|
||||
|
||||
static inline void inputInitAllControllers(void)
|
||||
{
|
||||
SDL_GameControllerUpdate();
|
||||
|
||||
const s32 numJoys = SDL_NumJoysticks();
|
||||
|
||||
connectedMask = 1; // always report first controller as connected
|
||||
|
||||
// if firstController is set to 1, keyboard will count as a separate controller on its own,
|
||||
// so the first connected gamepad will go to player 2 instead of player 1
|
||||
for (s32 jidx = 0, cidx = firstController; jidx < numJoys && cidx < INPUT_MAX_CONTROLLERS; ++jidx) {
|
||||
if (SDL_IsGameController(jidx)) {
|
||||
pads[cidx] = SDL_GameControllerOpen(jidx);
|
||||
if (pads[cidx]) {
|
||||
inputInitController(cidx);
|
||||
++cidx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const s32 overrideMask = (1 << fakeControllers) - 1;
|
||||
if (overrideMask) {
|
||||
connectedMask = overrideMask;
|
||||
}
|
||||
}
|
||||
|
||||
static int inputEventFilter(void *data, SDL_Event *event)
|
||||
{
|
||||
switch (event->type) {
|
||||
@@ -467,30 +555,16 @@ s32 inputInit(void)
|
||||
SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER | SDL_INIT_HAPTIC);
|
||||
}
|
||||
|
||||
SDL_GameControllerUpdate();
|
||||
|
||||
const s32 numJoys = SDL_NumJoysticks();
|
||||
|
||||
connectedMask = 1; // always report first controller as connected
|
||||
|
||||
// if firstController is set to 1, keyboard will count as a separate controller on its own,
|
||||
// so the first connected gamepad will go to player 2 instead of player 1
|
||||
for (s32 jidx = 0, cidx = firstController; jidx < numJoys && cidx < INPUT_MAX_CONTROLLERS; ++jidx) {
|
||||
if (SDL_IsGameController(jidx)) {
|
||||
pads[cidx] = SDL_GameControllerOpen(jidx);
|
||||
if (pads[cidx]) {
|
||||
inputInitController(cidx);
|
||||
++cidx;
|
||||
}
|
||||
}
|
||||
}
|
||||
inputInitAllControllers();
|
||||
|
||||
// since the main event loop is elsewhere, we can receive some events we need using a watcher
|
||||
SDL_AddEventWatch(inputEventFilter, NULL);
|
||||
|
||||
inputInitKeyNames();
|
||||
|
||||
inputSetDefaultKeyBinds();
|
||||
for (s32 i = 0; i < INPUT_MAX_CONTROLLERS; ++i) {
|
||||
inputSetDefaultKeyBinds(i, 0);
|
||||
}
|
||||
|
||||
inputLockMouse(mouseDefaultLocked);
|
||||
|
||||
@@ -500,11 +574,6 @@ s32 inputInit(void)
|
||||
inputControllerSetSticksSwapped(i, padsCfg[i].swapSticks);
|
||||
}
|
||||
|
||||
const s32 overrideMask = (1 << fakeControllers) - 1;
|
||||
if (overrideMask) {
|
||||
connectedMask = overrideMask;
|
||||
}
|
||||
|
||||
inputLoadBinds();
|
||||
|
||||
return connectedMask;
|
||||
@@ -756,6 +825,16 @@ void inputControllerSetAxisDeadzone(s32 cidx, s32 stick, s32 axis, f32 value)
|
||||
padsCfg[cidx].deadzone[stick * 2 + axis] = value * 32767.f;
|
||||
}
|
||||
|
||||
void inputControllerSetFirstIndex(s32 cidx) {
|
||||
firstController = cidx;
|
||||
inputShutdownAllControllers();
|
||||
inputInitAllControllers();
|
||||
}
|
||||
|
||||
s32 inputControllerGetFirstIndex(void) {
|
||||
return firstController;
|
||||
}
|
||||
|
||||
void inputKeyBind(s32 idx, u32 ck, s32 bind, u32 vk)
|
||||
{
|
||||
if (idx < 0 || idx >= INPUT_MAX_CONTROLLERS || bind >= INPUT_MAX_BINDS || ck >= CK_TOTAL_COUNT) {
|
||||
|
||||
@@ -152,6 +152,7 @@ PD_CONSTRUCTOR static void gameConfigInit(void)
|
||||
configRegisterFloat("Game.ScreenShakeIntensity", &g_ViShakeIntensityMult, 0.f, 10.f);
|
||||
configRegisterInt("Game.TickRateDivisor", &g_TickRateDiv, 0, 10);
|
||||
configRegisterInt("Game.SkipIntro", &g_SkipIntro, 0, 1);
|
||||
configRegisterInt("Game.DisableMpDeathMusic", &g_MusicDisableMpDeath, 0, 1);
|
||||
for (s32 j = 0; j < MAX_PLAYERS; ++j) {
|
||||
const s32 i = j + 1;
|
||||
configRegisterFloat(strFmt("Game.Player%d.FovY", i), &g_PlayerExtCfg[j].fovy, 5.f, 175.f);
|
||||
@@ -162,5 +163,6 @@ PD_CONSTRUCTOR static void gameConfigInit(void)
|
||||
configRegisterFloat(strFmt("Game.Player%d.RadialMenuSpeed", i), &g_PlayerExtCfg[j].radialmenuspeed, 0.f, 10.f);
|
||||
configRegisterFloat(strFmt("Game.Player%d.CrosshairSway", i), &g_PlayerExtCfg[j].crosshairsway, 0.f, 10.f);
|
||||
configRegisterInt(strFmt("Game.Player%d.CrouchMode", i), &g_PlayerExtCfg[j].crouchmode, 0, CROUCHMODE_TOGGLE_ANALOG);
|
||||
configRegisterInt(strFmt("Game.Player%d.ExtendedControls", i), &g_PlayerExtCfg[j].extcontrols, 0, 1);
|
||||
}
|
||||
}
|
||||
+123
-19
@@ -520,6 +520,19 @@ static MenuItemHandlerResult menuhandlerSwapSticks(s32 operation, struct menuite
|
||||
return 0;
|
||||
}
|
||||
|
||||
static MenuItemHandlerResult menuhandlerFirstController(s32 operation, struct menuitem *item, union handlerdata *data)
|
||||
{
|
||||
switch (operation) {
|
||||
case MENUOP_GET:
|
||||
return (inputControllerGetFirstIndex() == g_ExtMenuPlayer);
|
||||
case MENUOP_SET:
|
||||
inputControllerSetFirstIndex(g_ExtMenuPlayer);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct menuitem g_ExtendedControllerMenuItems[] = {
|
||||
{
|
||||
MENUITEMTYPE_CHECKBOX,
|
||||
@@ -537,6 +550,14 @@ struct menuitem g_ExtendedControllerMenuItems[] = {
|
||||
0,
|
||||
menuhandlerSwapSticks,
|
||||
},
|
||||
{
|
||||
MENUITEMTYPE_CHECKBOX,
|
||||
0,
|
||||
MENUITEMFLAG_LITERAL_TEXT,
|
||||
(uintptr_t)"Assign First Controller",
|
||||
0,
|
||||
menuhandlerFirstController,
|
||||
},
|
||||
{
|
||||
MENUITEMTYPE_SELECTABLE,
|
||||
0,
|
||||
@@ -724,6 +745,56 @@ struct menudialogdef g_ExtendedVideoMenuDialog = {
|
||||
NULL,
|
||||
};
|
||||
|
||||
static MenuItemHandlerResult menuhandlerDisableMpDeathMusic(s32 operation, struct menuitem *item, union handlerdata *data)
|
||||
{
|
||||
switch (operation) {
|
||||
case MENUOP_GET:
|
||||
return g_MusicDisableMpDeath;
|
||||
case MENUOP_SET:
|
||||
g_MusicDisableMpDeath = data->checkbox.value;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct menuitem g_ExtendedAudioMenuItems[] = {
|
||||
{
|
||||
MENUITEMTYPE_CHECKBOX,
|
||||
0,
|
||||
MENUITEMFLAG_LITERAL_TEXT,
|
||||
(uintptr_t)"Disable MP Death Music",
|
||||
0,
|
||||
menuhandlerDisableMpDeathMusic,
|
||||
},
|
||||
{
|
||||
MENUITEMTYPE_SEPARATOR,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
NULL,
|
||||
},
|
||||
{
|
||||
MENUITEMTYPE_SELECTABLE,
|
||||
0,
|
||||
MENUITEMFLAG_SELECTABLE_CLOSESDIALOG,
|
||||
L_OPTIONS_213, // "Back"
|
||||
0,
|
||||
NULL,
|
||||
},
|
||||
{ MENUITEMTYPE_END },
|
||||
};
|
||||
|
||||
struct menudialogdef g_ExtendedAudioMenuDialog = {
|
||||
MENUDIALOGTYPE_DEFAULT,
|
||||
(uintptr_t)"Extended Audio Options",
|
||||
g_ExtendedAudioMenuItems,
|
||||
NULL,
|
||||
MENUDIALOGFLAG_LITERAL_TEXT,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static MenuItemHandlerResult menuhandlerCrouchMode(s32 operation, struct menuitem *item, union handlerdata *data)
|
||||
{
|
||||
static const char *opts[] = {
|
||||
@@ -886,27 +957,31 @@ struct menudialogdef g_ExtendedBindKeyMenuDialog = {
|
||||
struct menubind {
|
||||
u32 ck;
|
||||
const char *name;
|
||||
const char *n64name;
|
||||
};
|
||||
|
||||
static const struct menubind menuBinds[] = {
|
||||
{ CK_ZTRIG, "Fire [ZT]\n" },
|
||||
{ CK_LTRIG, "Fire Mode [LT]\n" },
|
||||
{ CK_RTRIG, "Aim Mode [RT]\n" },
|
||||
{ CK_A, "Use / Accept [A]\n" },
|
||||
{ CK_B, "Use / Cancel [B]\n" },
|
||||
{ CK_X, "Reload [X]\n" },
|
||||
{ CK_Y, "Next Weapon [Y]\n" },
|
||||
{ CK_DPAD_L, "Prev Weapon [DL]\n" },
|
||||
{ CK_DPAD_D, "Radial Menu [DD]\n" },
|
||||
{ CK_START, "Pause Menu [ST]\n" },
|
||||
{ CK_8000, "Cycle Crouch [+]\n" },
|
||||
{ CK_4000, "Half Crouch [+]\n" },
|
||||
{ CK_2000, "Full Crouch [+]\n" },
|
||||
{ CK_ZTRIG, "Fire [ZT]\n", "N64 Z Trigger\n" },
|
||||
{ CK_LTRIG, "Fire Mode [LT]\n", "N64 L Trigger\n"},
|
||||
{ CK_RTRIG, "Aim Mode [RT]\n", "N64 R Trigger\n" },
|
||||
{ CK_A, "Use / Accept [A]\n", "N64 A Button\n" },
|
||||
{ CK_B, "Use / Cancel [B]\n", "N64 B Button\n" },
|
||||
{ CK_X, "Reload [X]\n", "N64 Ext X\n" },
|
||||
{ CK_Y, "Next Weapon [Y]\n", "N64 Ext Y\n" },
|
||||
{ CK_DPAD_U, "D-Pad Up [DU]\n", "N64 D-Pad Up\n" },
|
||||
{ CK_DPAD_R, "D-Pad Right [DR]\n", "N64 D-Pad Right\n" },
|
||||
{ CK_DPAD_L, "Prev Weapon [DL]\n", "N64 D-Pad Left\n" },
|
||||
{ CK_DPAD_D, "Radial Menu [DD]\n", "N64 D-Pad Down\n" },
|
||||
{ CK_START, "Pause Menu [ST]\n", "N64 Start\n" },
|
||||
{ CK_8000, "Cycle Crouch [+]\n", "N64 Ext 8000\n" },
|
||||
{ CK_4000, "Half Crouch [+]\n", "N64 Ext 4000\n" },
|
||||
{ CK_2000, "Full Crouch [+]\n", "N64 Ext 2000\n" },
|
||||
};
|
||||
|
||||
static const char *menutextBind(struct menuitem *item);
|
||||
static MenuItemHandlerResult menuhandlerBind(s32 operation, struct menuitem *item, union handlerdata *data);
|
||||
static MenuItemHandlerResult menuhandlerResetBinds(s32 operation, struct menuitem *item, union handlerdata *data);
|
||||
static MenuItemHandlerResult menuhandlerResetBindsPC(s32 operation, struct menuitem *item, union handlerdata *data);
|
||||
static MenuItemHandlerResult menuhandlerResetBindsN64(s32 operation, struct menuitem *item, union handlerdata *data);
|
||||
|
||||
#define DEFINE_MENU_BIND() \
|
||||
{ \
|
||||
@@ -932,6 +1007,8 @@ struct menuitem g_ExtendedBindsMenuItems[] = {
|
||||
DEFINE_MENU_BIND(),
|
||||
DEFINE_MENU_BIND(),
|
||||
DEFINE_MENU_BIND(),
|
||||
DEFINE_MENU_BIND(),
|
||||
DEFINE_MENU_BIND(),
|
||||
{
|
||||
MENUITEMTYPE_SEPARATOR,
|
||||
0,
|
||||
@@ -944,9 +1021,17 @@ struct menuitem g_ExtendedBindsMenuItems[] = {
|
||||
MENUITEMTYPE_SELECTABLE,
|
||||
0,
|
||||
MENUITEMFLAG_LITERAL_TEXT,
|
||||
(uintptr_t)"Reset to Defaults\n",
|
||||
(uintptr_t)"Reset to PC Defaults\n",
|
||||
0,
|
||||
menuhandlerResetBinds,
|
||||
menuhandlerResetBindsPC,
|
||||
},
|
||||
{
|
||||
MENUITEMTYPE_SELECTABLE,
|
||||
0,
|
||||
MENUITEMFLAG_LITERAL_TEXT,
|
||||
(uintptr_t)"Reset to N64 Defaults\n",
|
||||
0,
|
||||
menuhandlerResetBindsN64,
|
||||
},
|
||||
{
|
||||
MENUITEMTYPE_SEPARATOR,
|
||||
@@ -989,7 +1074,9 @@ static MenuItemHandlerResult menuhandlerDoBind(s32 operation, struct menuitem *i
|
||||
|
||||
static const char *menutextBind(struct menuitem *item)
|
||||
{
|
||||
return menuBinds[item - g_ExtendedBindsMenuItems].name;
|
||||
return g_PlayerExtCfg[g_ExtMenuPlayer].extcontrols ?
|
||||
menuBinds[item - g_ExtendedBindsMenuItems].name :
|
||||
menuBinds[item - g_ExtendedBindsMenuItems].n64name;
|
||||
}
|
||||
|
||||
static MenuItemHandlerResult menuhandlerBind(s32 operation, struct menuitem *item, union handlerdata *data)
|
||||
@@ -1027,10 +1114,19 @@ static MenuItemHandlerResult menuhandlerBind(s32 operation, struct menuitem *ite
|
||||
return 0;
|
||||
}
|
||||
|
||||
static MenuItemHandlerResult menuhandlerResetBinds(s32 operation, struct menuitem *item, union handlerdata *data)
|
||||
static MenuItemHandlerResult menuhandlerResetBindsPC(s32 operation, struct menuitem *item, union handlerdata *data)
|
||||
{
|
||||
if (operation == MENUOP_SET) {
|
||||
inputSetDefaultKeyBinds();
|
||||
inputSetDefaultKeyBinds(g_ExtMenuPlayer, false);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static MenuItemHandlerResult menuhandlerResetBindsN64(s32 operation, struct menuitem *item, union handlerdata *data)
|
||||
{
|
||||
if (operation == MENUOP_SET) {
|
||||
inputSetDefaultKeyBinds(g_ExtMenuPlayer, true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -1082,6 +1178,14 @@ struct menuitem g_ExtendedMenuItems[] = {
|
||||
0,
|
||||
(void *)&g_ExtendedVideoMenuDialog,
|
||||
},
|
||||
{
|
||||
MENUITEMTYPE_SELECTABLE,
|
||||
0,
|
||||
MENUITEMFLAG_SELECTABLE_OPENSDIALOG | MENUITEMFLAG_LITERAL_TEXT,
|
||||
(uintptr_t)"Audio\n",
|
||||
0,
|
||||
(void *)&g_ExtendedAudioMenuDialog,
|
||||
},
|
||||
{
|
||||
MENUITEMTYPE_SELECTABLE,
|
||||
0,
|
||||
|
||||
+32
-15
@@ -44,6 +44,23 @@ void amTick(void)
|
||||
s8 contpadnum = optionsGetContpadNum1(g_Vars.currentplayerstats->mpindex);
|
||||
s32 numsamples = joyGetNumSamples();
|
||||
s32 j;
|
||||
u32 amask, lrtmask, umask, dmask, lmask, rmask;
|
||||
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
amask = D_JPAD;
|
||||
lrtmask = R_TRIG;
|
||||
umask = U_CBUTTONS;
|
||||
dmask = D_CBUTTONS;
|
||||
lmask = L_CBUTTONS;
|
||||
rmask = R_CBUTTONS;
|
||||
} else {
|
||||
amask = A_BUTTON;
|
||||
lrtmask = L_TRIG | R_TRIG;
|
||||
umask = U_JPAD | U_CBUTTONS;
|
||||
dmask = D_JPAD | D_CBUTTONS;
|
||||
lmask = L_JPAD | L_CBUTTONS;
|
||||
rmask = R_JPAD | R_CBUTTONS;
|
||||
}
|
||||
|
||||
for (j = 0; j < numsamples; j++) {
|
||||
s8 gotonextscreen = false;
|
||||
@@ -94,7 +111,7 @@ void amTick(void)
|
||||
#endif
|
||||
|
||||
if (g_Vars.currentplayer->activemenumode == AMMODE_EDIT) {
|
||||
buttonsstate = buttonsstate & D_JPAD;
|
||||
buttonsstate = buttonsstate & amask;
|
||||
cstickx = 0;
|
||||
csticky = 0;
|
||||
buttonspressed = 0;
|
||||
@@ -102,11 +119,11 @@ void amTick(void)
|
||||
|
||||
// JPN fixes the bug that's documented in amChangeScreen
|
||||
if (controlmode == CONTROLMODE_13 || controlmode == CONTROLMODE_14) {
|
||||
if ((buttonsstate & R_TRIG)) {
|
||||
if (buttonsstate & (L_TRIG | R_TRIG)) {
|
||||
stayopen = true;
|
||||
}
|
||||
|
||||
if (buttonsstate & D_JPAD) {
|
||||
if (buttonsstate & A_BUTTON) {
|
||||
#if VERSION >= VERSION_JPN_FINAL || !defined(PLATFORM_N64)
|
||||
if (g_Vars.currentplayer->numaibuddies > 0) {
|
||||
g_AmMenus[g_AmIndex].allbots = true;
|
||||
@@ -116,11 +133,11 @@ void amTick(void)
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
if (buttonsstate & D_JPAD) {
|
||||
if (buttonsstate & amask) {
|
||||
stayopen = true;
|
||||
}
|
||||
|
||||
if ((buttonsstate & R_TRIG)) {
|
||||
if (buttonsstate & lrtmask) {
|
||||
#if VERSION >= VERSION_JPN_FINAL || !defined(PLATFORM_N64)
|
||||
if (g_Vars.currentplayer->numaibuddies > 0) {
|
||||
g_AmMenus[g_AmIndex].allbots = true;
|
||||
@@ -148,19 +165,19 @@ void amTick(void)
|
||||
amChangeScreen(0);
|
||||
}
|
||||
|
||||
if (buttonsstate & U_CBUTTONS) {
|
||||
if (buttonsstate & umask) {
|
||||
row = 0;
|
||||
}
|
||||
|
||||
if (buttonsstate & D_CBUTTONS) {
|
||||
if (buttonsstate & dmask) {
|
||||
row = 2;
|
||||
}
|
||||
|
||||
if (buttonsstate & L_CBUTTONS) {
|
||||
if (buttonsstate & lmask) {
|
||||
column = 0;
|
||||
}
|
||||
|
||||
if (buttonsstate & R_CBUTTONS) {
|
||||
if (buttonsstate & rmask) {
|
||||
column = 2;
|
||||
}
|
||||
|
||||
@@ -175,13 +192,13 @@ void amTick(void)
|
||||
u32 buttonspressed2 = joyGetButtonsPressedOnSample(j, contpadnum2, 0xffffffff);
|
||||
|
||||
if (g_Vars.currentplayer->activemenumode == AMMODE_EDIT) {
|
||||
buttonsstate2 = buttonsstate2 & D_JPAD;
|
||||
buttonsstate2 = buttonsstate2 & A_BUTTON;
|
||||
cstickx2 = 0;
|
||||
csticky2 = 0;
|
||||
buttonspressed2 = 0;
|
||||
}
|
||||
|
||||
if (buttonsstate2 & D_JPAD) {
|
||||
if (buttonsstate2 & A_BUTTON) {
|
||||
stayopen = true;
|
||||
}
|
||||
|
||||
@@ -189,19 +206,19 @@ void amTick(void)
|
||||
toggle = true;
|
||||
}
|
||||
|
||||
if (buttonsstate2 & U_CBUTTONS) {
|
||||
if (buttonsstate2 & umask) {
|
||||
row = 0;
|
||||
}
|
||||
|
||||
if (buttonsstate2 & D_CBUTTONS) {
|
||||
if (buttonsstate2 & dmask) {
|
||||
row = 2;
|
||||
}
|
||||
|
||||
if (buttonsstate2 & L_CBUTTONS) {
|
||||
if (buttonsstate2 & lmask) {
|
||||
column = 0;
|
||||
}
|
||||
|
||||
if (buttonsstate2 & R_CBUTTONS) {
|
||||
if (buttonsstate2 & rmask) {
|
||||
column = 2;
|
||||
}
|
||||
|
||||
|
||||
+16
-6
@@ -202,14 +202,24 @@ void bbikeApplyMoveData(struct movedata *data)
|
||||
s8 contnum = optionsGetContpadNum1(g_Vars.currentplayerstats->mpindex);
|
||||
f32 value1;
|
||||
f32 tmp;
|
||||
s32 contmode = optionsGetControlMode(g_Vars.currentplayerstats->mpindex);
|
||||
|
||||
if ((optionsGetControlMode(g_Vars.currentplayerstats->mpindex) == CONTROLMODE_12
|
||||
|| optionsGetControlMode(g_Vars.currentplayerstats->mpindex) == CONTROLMODE_14
|
||||
|| optionsGetControlMode(g_Vars.currentplayerstats->mpindex) == CONTROLMODE_13
|
||||
|| optionsGetControlMode(g_Vars.currentplayerstats->mpindex) == CONTROLMODE_11)
|
||||
if ((contmode == CONTROLMODE_12
|
||||
|| contmode == CONTROLMODE_14
|
||||
|| contmode == CONTROLMODE_13
|
||||
|| contmode == CONTROLMODE_11
|
||||
|| contmode == CONTROLMODE_PC)
|
||||
&& !lvIsPaused()) {
|
||||
data->digitalstepleft = joyCountButtonsOnSpecificSamples(0, contnum, L_CBUTTONS);
|
||||
data->digitalstepright = joyCountButtonsOnSpecificSamples(0, contnum,R_CBUTTONS);
|
||||
u32 lmask, rmask;
|
||||
if (contmode == CONTROLMODE_PC) {
|
||||
lmask = L_CBUTTONS;
|
||||
rmask = R_CBUTTONS;
|
||||
} else {
|
||||
lmask = L_JPAD | L_CBUTTONS;
|
||||
rmask = R_JPAD | R_CBUTTONS;
|
||||
}
|
||||
data->digitalstepleft = joyCountButtonsOnSpecificSamples(0, contnum, lmask);
|
||||
data->digitalstepright = joyCountButtonsOnSpecificSamples(0, contnum, rmask);
|
||||
}
|
||||
|
||||
// Forward/back
|
||||
|
||||
+54
-32
@@ -720,8 +720,21 @@ void eyespyProcessInput(bool allowbuttons)
|
||||
s32 contpad2;
|
||||
u32 stack[5];
|
||||
f32 tmp;
|
||||
u32 umask, dmask, lmask, rmask;
|
||||
|
||||
if (controlmode >= CONTROLMODE_21) {
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
umask = U_CBUTTONS;
|
||||
dmask = D_CBUTTONS;
|
||||
lmask = L_CBUTTONS;
|
||||
rmask = R_CBUTTONS;
|
||||
} else {
|
||||
umask = U_JPAD | U_CBUTTONS;
|
||||
dmask = D_JPAD | D_CBUTTONS;
|
||||
lmask = L_JPAD | L_CBUTTONS;
|
||||
rmask = R_JPAD | R_CBUTTONS;
|
||||
}
|
||||
|
||||
if (controlmode >= CONTROLMODE_21 && controlmode < CONTROLMODE_PC) {
|
||||
contpad2 = (s8) optionsGetContpadNum2(g_Vars.currentplayerstats->mpindex);
|
||||
c2stickx = joyGetStickX(contpad2);
|
||||
c2sticky = joyGetStickY(contpad2);
|
||||
@@ -729,11 +742,15 @@ void eyespyProcessInput(bool allowbuttons)
|
||||
c2buttons = allowbuttons ? joyGetButtons(contpad2, 0xffffffff) : 0;
|
||||
} else {
|
||||
#ifndef PLATFORM_N64
|
||||
c2stickx = joyGetRStickX(contpad1);
|
||||
c2sticky = joyGetRStickY(contpad1);
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
c2stickx = joyGetRStickX(contpad1);
|
||||
c2sticky = joyGetRStickY(contpad1);
|
||||
} else
|
||||
#else
|
||||
c2stickx = c1stickx;
|
||||
c2sticky = c1sticky;
|
||||
{
|
||||
c2stickx = c1stickx;
|
||||
c2sticky = c1sticky;
|
||||
}
|
||||
#endif
|
||||
c2buttons = c1buttons;
|
||||
}
|
||||
@@ -743,16 +760,19 @@ void eyespyProcessInput(bool allowbuttons)
|
||||
shootpressed = c1buttons & A_BUTTON;
|
||||
exitpressed = c1buttons & R_TRIG;
|
||||
activatepressed = c1buttons & B_BUTTON;
|
||||
} else if (controlmode <= CONTROLMODE_14) {
|
||||
} else if (controlmode <= CONTROLMODE_14 || controlmode == CONTROLMODE_PC) {
|
||||
aimpressed = c1buttons & (R_TRIG);
|
||||
shootpressed = c1buttons & Z_TRIG;
|
||||
#ifdef PLATFORM_N64
|
||||
exitpressed = (c1buttons | c2buttons) & A_BUTTON;
|
||||
activatepressed = (c1buttons | c2buttons) & B_BUTTON;
|
||||
#else
|
||||
exitpressed = (c1buttons | c2buttons) & (BUTTON_WPNBACK | BUTTON_RADIAL);
|
||||
activatepressed = (c1buttons | c2buttons) & (BUTTON_CANCEL_USE | BUTTON_ACCEPT_USE);
|
||||
#ifndef PLATFORM_N64
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
exitpressed = (c1buttons | c2buttons) & (BUTTON_WPNBACK | BUTTON_RADIAL);
|
||||
activatepressed = (c1buttons | c2buttons) & (BUTTON_CANCEL_USE | BUTTON_ACCEPT_USE);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
exitpressed = (c1buttons | c2buttons) & A_BUTTON;
|
||||
activatepressed = (c1buttons | c2buttons) & B_BUTTON;
|
||||
}
|
||||
} else {
|
||||
if (controlmode >= CONTROLMODE_23) {
|
||||
aimpressed = c1buttons & Z_TRIG;
|
||||
@@ -829,23 +849,25 @@ void eyespyProcessInput(bool allowbuttons)
|
||||
forwardspeed = c1sticky;
|
||||
}
|
||||
|
||||
ascendspeed = (c1buttons & (U_CBUTTONS) ? 1 : 0) - (c1buttons & (D_CBUTTONS) ? 1 : 0);
|
||||
sidespeed = (c1buttons & (R_CBUTTONS) ? 1 : 0) - (c1buttons & (L_CBUTTONS) ? 1 : 0);
|
||||
} else if (controlmode <= CONTROLMODE_14) {
|
||||
ascendspeed = (c1buttons & (U_CBUTTONS | U_JPAD) ? 1 : 0) - (c1buttons & (D_CBUTTONS | D_JPAD) ? 1 : 0);
|
||||
sidespeed = (c1buttons & (R_CBUTTONS | R_JPAD) ? 1 : 0) - (c1buttons & (L_CBUTTONS | L_JPAD) ? 1 : 0);
|
||||
} else if (controlmode <= CONTROLMODE_14 || controlmode == CONTROLMODE_PC) {
|
||||
if (aimpressed) {
|
||||
domovecentre = false;
|
||||
pitchspeed = c1sticky;
|
||||
} else {
|
||||
ascendspeed = c1sticky * 0.25f;
|
||||
forwardspeed = (c1buttons & (U_CBUTTONS) ? 24.0f : 0) - (c1buttons & (D_CBUTTONS) ? 24.0f : 0);
|
||||
forwardspeed = (c1buttons & umask ? 24.0f : 0) - (c1buttons & dmask ? 24.0f : 0);
|
||||
#ifndef PLATFORM_N64
|
||||
forwardspeed += c2sticky;
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
forwardspeed += c2sticky;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
sidespeed = (c1buttons & (R_CBUTTONS) ? 1 : 0) - (c1buttons & (L_CBUTTONS) ? 1 : 0);
|
||||
sidespeed = (c1buttons & rmask ? 1 : 0) - (c1buttons & lmask ? 1 : 0);
|
||||
#ifndef PLATFORM_N64
|
||||
if (!sidespeed) sidespeed = c2stickx * 0.0125f;
|
||||
if (!sidespeed && controlmode == CONTROLMODE_PC) sidespeed = c2stickx * 0.0125f;
|
||||
#endif
|
||||
} else if (controlmode == CONTROLMODE_21 || controlmode == CONTROLMODE_23) {
|
||||
forwardspeed = c1sticky;
|
||||
@@ -994,23 +1016,23 @@ void eyespyProcessInput(bool allowbuttons)
|
||||
// Make eyespy look horizontally
|
||||
if (domovecentre) {
|
||||
if (g_Vars.currentplayer->eyespy->verta > 0.0f && forwardspeed != 0) {
|
||||
#ifdef PLATFORM_N64
|
||||
if (g_Vars.currentplayer->eyespy->verta < 180.0f) {
|
||||
tmp = g_Vars.currentplayer->eyespy->verta;
|
||||
if (controlmode != CONTROLMODE_PC) {
|
||||
if (g_Vars.currentplayer->eyespy->verta < 180.0f) {
|
||||
tmp = g_Vars.currentplayer->eyespy->verta;
|
||||
|
||||
for (i = 0; i < g_Vars.lvupdate60; i++) {
|
||||
tmp *= 0.04f;
|
||||
g_Vars.currentplayer->eyespy->verta -= tmp;
|
||||
}
|
||||
} else {
|
||||
tmp = 360.0f - g_Vars.currentplayer->eyespy->verta;
|
||||
for (i = 0; i < g_Vars.lvupdate60; i++) {
|
||||
tmp *= 0.04f;
|
||||
g_Vars.currentplayer->eyespy->verta -= tmp;
|
||||
}
|
||||
} else {
|
||||
tmp = 360.0f - g_Vars.currentplayer->eyespy->verta;
|
||||
|
||||
for (i = 0; i < g_Vars.lvupdate60; i++) {
|
||||
tmp *= 0.04f;
|
||||
g_Vars.currentplayer->eyespy->verta += tmp;
|
||||
for (i = 0; i < g_Vars.lvupdate60; i++) {
|
||||
tmp *= 0.04f;
|
||||
g_Vars.currentplayer->eyespy->verta += tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
g_Vars.currentplayer->eyespy->cosverta = cosf(g_Vars.currentplayer->eyespy->verta * 0.017453292384744f);
|
||||
g_Vars.currentplayer->eyespy->sinverta = sinf(g_Vars.currentplayer->eyespy->verta * 0.017453292384744f);
|
||||
|
||||
+10
-5
@@ -250,8 +250,9 @@ void bgunRumble(s32 handnum, s32 weaponnum)
|
||||
bool contpad2hasrumble;
|
||||
s32 contpadtouse1;
|
||||
s32 contpadtouse2;
|
||||
s32 controlmode = optionsGetControlMode(g_Vars.currentplayerstats->mpindex);
|
||||
|
||||
if (optionsGetControlMode(g_Vars.currentplayerstats->mpindex) >= CONTROLMODE_21) {
|
||||
if (controlmode >= CONTROLMODE_21 && controlmode < CONTROLMODE_PC) {
|
||||
contpad1hasrumble = pakGetType(g_Vars.currentplayernum) == PAKTYPE_RUMBLE;
|
||||
contpad2hasrumble = pakGetType(g_Vars.currentplayernum + PLAYERCOUNT()) == PAKTYPE_RUMBLE;
|
||||
|
||||
@@ -11798,16 +11799,20 @@ s32 bgunConsiderToggleGunFunction(s32 usedowntime, bool trigpressed, bool fromac
|
||||
|
||||
void bgun0f0a8c50(void)
|
||||
{
|
||||
#ifndef PLATFORM_N64
|
||||
switch (bgunGetWeaponNum(HAND_RIGHT)) {
|
||||
case WEAPON_RCP120:
|
||||
case WEAPON_LAPTOPGUN:
|
||||
case WEAPON_DRAGON:
|
||||
case WEAPON_REMOTEMINE:
|
||||
return;
|
||||
default:
|
||||
if (g_Vars.currentplayer->hands[HAND_RIGHT].activatesecondary == false) {
|
||||
g_Vars.currentplayer->gunctrl.invertgunfunc = false;
|
||||
if (PLAYER_EXTCFG().extcontrols) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
if (g_Vars.currentplayer->hands[HAND_RIGHT].activatesecondary == false) {
|
||||
g_Vars.currentplayer->gunctrl.invertgunfunc = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+188
-188
@@ -639,8 +639,8 @@ void bmoveResetMoveData(struct movedata *data)
|
||||
data->analogpitch = 0;
|
||||
data->analogstrafe = 0;
|
||||
data->analogwalk = 0;
|
||||
data->alt1tapcount = 0;
|
||||
#ifndef PLATFORM_N64
|
||||
data->alt1tapcount = 0;
|
||||
data->freelookdx = 0.0f;
|
||||
data->freelookdy = 0.0f;
|
||||
data->analoglean = 0.0f;
|
||||
@@ -712,9 +712,9 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
f32 increment2;
|
||||
f32 newverta;
|
||||
#ifndef PLATFORM_N64
|
||||
const f32 mlookscale = g_Vars.lvupdate240 ? (4.f / (f32)g_Vars.lvupdate240) : 4.f;
|
||||
const bool allowmlook = (g_Vars.currentplayernum == 0) && (allowc1x || allowc1y);
|
||||
bool allowmcross = false;
|
||||
const f32 mlookscale = g_Vars.lvupdate240 ? (4.f / (f32)g_Vars.lvupdate240) : 4.f;
|
||||
#endif
|
||||
|
||||
controlmode = optionsGetControlMode(g_Vars.currentplayerstats->mpindex);
|
||||
@@ -984,15 +984,16 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < numsamples; i++) {
|
||||
#ifndef PLATFORM_N64
|
||||
if (joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & BUTTON_WPNFORWARD)) {
|
||||
movedata.weaponforwardoffset++;
|
||||
g_Vars.currentplayer->invdowntime = -1;
|
||||
} else if (joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & BUTTON_WPNBACK)) {
|
||||
movedata.weaponbackoffset++;
|
||||
g_Vars.currentplayer->invdowntime = -1;
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
if (joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & BUTTON_WPNFORWARD)) {
|
||||
movedata.weaponforwardoffset++;
|
||||
g_Vars.currentplayer->invdowntime = -1;
|
||||
} else if (joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & BUTTON_WPNBACK)) {
|
||||
movedata.weaponbackoffset++;
|
||||
g_Vars.currentplayer->invdowntime = -1;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
#else
|
||||
if (joyGetButtonsOnSample(i, contpad1, c1allowedbuttons & A_BUTTON)
|
||||
|| joyGetButtonsOnSample(i, contpad2, c2allowedbuttons & A_BUTTON)) {
|
||||
if (g_Vars.currentplayer->invdowntime > -2) {
|
||||
@@ -1004,7 +1005,7 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
if (g_Vars.currentplayer->invdowntime > -1
|
||||
&& joyGetButtonsOnSample(i, shootpad, shootallowedbuttons & Z_TRIG) == 0) {
|
||||
if (g_Vars.currentplayer->invdowntime > TICKS(15)) {
|
||||
/* amOpen(); */
|
||||
amOpen();
|
||||
g_Vars.currentplayer->invdowntime = -1;
|
||||
} else {
|
||||
g_Vars.currentplayer->invdowntime++;
|
||||
@@ -1019,14 +1020,12 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
|
||||
g_Vars.currentplayer->invdowntime = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef PLATFORM_N64
|
||||
// Handle B button activation
|
||||
if (allowc1buttons) {
|
||||
if (allowc1buttons && controlmode != CONTROLMODE_PC) {
|
||||
for (i = 0; i < numsamples; i++) {
|
||||
if (joyGetButtonsOnSample(i, contpad1, c1allowedbuttons & B_BUTTON)
|
||||
|| joyGetButtonsOnSample(i, contpad2, c2allowedbuttons & B_BUTTON)) {
|
||||
@@ -1066,7 +1065,6 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Handle manual zoom in and out (sniper, farsight and horizon scanner)
|
||||
if (canmanualzoom && g_Vars.currentplayer->insightaimmode) {
|
||||
@@ -1202,26 +1200,31 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
|
||||
movedata.disablelookahead = true;
|
||||
} else {
|
||||
// 1.x control style
|
||||
if (controlmode == CONTROLMODE_13 || controlmode == CONTROLMODE_14) {
|
||||
shootbuttons = A_BUTTON;
|
||||
aimbuttons = Z_TRIG;
|
||||
invbuttons = R_TRIG;
|
||||
} else {
|
||||
// 1.x or PC control style
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
shootbuttons = Z_TRIG;
|
||||
aimbuttons = R_TRIG;
|
||||
invbuttons = A_BUTTON;
|
||||
}
|
||||
#ifndef PLATFORM_N64
|
||||
if (!g_Vars.currentplayer->insightaimmode) {
|
||||
movedata.analogstrafe = c2stickx;
|
||||
movedata.analogwalk = c2sticky;
|
||||
movedata.unk14 = (c2stickx || c2sticky);
|
||||
} else if (controlmode == CONTROLMODE_13 || controlmode == CONTROLMODE_14) {
|
||||
shootbuttons = A_BUTTON;
|
||||
aimbuttons = Z_TRIG;
|
||||
invbuttons = L_TRIG | R_TRIG;
|
||||
} else {
|
||||
movedata.analogstrafe = 0.f;
|
||||
movedata.analogwalk = 0.f;
|
||||
shootbuttons = Z_TRIG;
|
||||
aimbuttons = L_TRIG | R_TRIG;
|
||||
invbuttons = A_BUTTON;
|
||||
}
|
||||
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
if (!g_Vars.currentplayer->insightaimmode) {
|
||||
movedata.analogstrafe = c2stickx;
|
||||
movedata.analogwalk = c2sticky;
|
||||
movedata.unk14 = (c2stickx || c2sticky);
|
||||
} else {
|
||||
movedata.analogstrafe = 0.f;
|
||||
movedata.analogwalk = 0.f;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (optionsGetAimControl(g_Vars.currentplayerstats->mpindex) == AIMCONTROL_HOLD) {
|
||||
for (i = 0; i < numsamples; i++) {
|
||||
@@ -1253,49 +1256,60 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
movedata.canmanualaim = g_Vars.currentplayer->insightaimmode;
|
||||
movedata.canautoaim = !g_Vars.currentplayer->insightaimmode;
|
||||
|
||||
if (controlmode == CONTROLMODE_12 || controlmode == CONTROLMODE_14) {
|
||||
// On N64 control schemes the d-pad does the same thing as the C buttons
|
||||
u32 slmask, srmask, sumask, sdmask;
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
sumask = U_CBUTTONS;
|
||||
sdmask = D_CBUTTONS;
|
||||
slmask = L_CBUTTONS;
|
||||
srmask = R_CBUTTONS;
|
||||
} else {
|
||||
sumask = U_JPAD | U_CBUTTONS;
|
||||
sdmask = D_JPAD | D_CBUTTONS;
|
||||
slmask = L_JPAD | L_CBUTTONS;
|
||||
srmask = R_JPAD | R_CBUTTONS;
|
||||
}
|
||||
|
||||
if (controlmode == CONTROLMODE_12 || controlmode == CONTROLMODE_14 || controlmode == CONTROLMODE_PC) {
|
||||
// Handle side stepping
|
||||
if (g_Vars.currentplayer->insightaimmode == false) {
|
||||
if (allowc1buttons) {
|
||||
movedata.digitalstepleft = joyCountButtonsOnSpecificSamples(aimoffhist, contpad1, c1allowedbuttons & (L_CBUTTONS));
|
||||
movedata.digitalstepright = joyCountButtonsOnSpecificSamples(aimoffhist, contpad1, c1allowedbuttons & (R_CBUTTONS));
|
||||
movedata.digitalstepleft = joyCountButtonsOnSpecificSamples(aimoffhist, contpad1, c1allowedbuttons & slmask);
|
||||
movedata.digitalstepright = joyCountButtonsOnSpecificSamples(aimoffhist, contpad1, c1allowedbuttons & srmask);
|
||||
}
|
||||
} else {
|
||||
// This doesn't appear to be r-leaning.
|
||||
// R-leaning still works when these are commented.
|
||||
if (c1buttons & (L_CBUTTONS)) {
|
||||
if (c1buttons & slmask) {
|
||||
movedata.unk30 = 1;
|
||||
}
|
||||
|
||||
if (c1buttons & (R_CBUTTONS)) {
|
||||
if (c1buttons & srmask) {
|
||||
movedata.unk34 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
movedata.digitalstepforward = !g_Vars.currentplayer->insightaimmode && (c1buttons & (U_CBUTTONS));
|
||||
movedata.digitalstepback = !g_Vars.currentplayer->insightaimmode && (c1buttons & (D_CBUTTONS));
|
||||
#ifdef PLATFORM_N64
|
||||
movedata.canlookahead = false;
|
||||
#else
|
||||
movedata.canlookahead = !g_Vars.currentplayer->insightaimmode && (c2stickx || c2sticky);
|
||||
#endif
|
||||
movedata.digitalstepforward = !g_Vars.currentplayer->insightaimmode && (c1buttons & sumask);
|
||||
movedata.digitalstepback = !g_Vars.currentplayer->insightaimmode && (c1buttons & sdmask);
|
||||
movedata.canlookahead = (controlmode == CONTROLMODE_PC) && !g_Vars.currentplayer->insightaimmode && (c2stickx || c2sticky);
|
||||
movedata.cannaturalpitch = !g_Vars.currentplayer->insightaimmode;
|
||||
movedata.speedvertadown = 0;
|
||||
movedata.speedvertaup = 0;
|
||||
movedata.cannaturalturn = !g_Vars.currentplayer->insightaimmode;
|
||||
|
||||
#ifndef PLATFORM_N64
|
||||
if ((g_Vars.currentplayer->devicesactive & DEVICE_EYESPY) || g_Vars.currentplayer->visionmode > 1 || g_Vars.tickmode != 1) {
|
||||
movedata.analogturn = 0;
|
||||
movedata.analogpitch = 0;
|
||||
movedata.analogstrafe = 0;
|
||||
movedata.analogwalk = 0;
|
||||
movedata.analoglean = 0.f;
|
||||
}
|
||||
|
||||
if (PLAYER_EXTCFG().mouseaimmode == MOUSEAIM_LOCKED || bgunGetWeaponNum(HAND_RIGHT) == WEAPON_HORIZONSCANNER) {
|
||||
movedata.cannaturalpitch = movedata.cannaturalpitch || (movedata.freelookdy != 0.0f);
|
||||
movedata.cannaturalturn = movedata.cannaturalturn || (movedata.freelookdx != 0.0f);
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
if ((g_Vars.currentplayer->devicesactive & DEVICE_EYESPY) || g_Vars.currentplayer->visionmode > 1 || g_Vars.tickmode != 1) {
|
||||
movedata.analogturn = 0;
|
||||
movedata.analogpitch = 0;
|
||||
movedata.analogstrafe = 0;
|
||||
movedata.analogwalk = 0;
|
||||
movedata.analoglean = 0.f;
|
||||
}
|
||||
if (PLAYER_EXTCFG().mouseaimmode == MOUSEAIM_LOCKED || bgunGetWeaponNum(HAND_RIGHT) == WEAPON_HORIZONSCANNER) {
|
||||
movedata.cannaturalpitch = movedata.cannaturalpitch || (movedata.freelookdy != 0.0f);
|
||||
movedata.cannaturalturn = movedata.cannaturalturn || (movedata.freelookdx != 0.0f);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1314,17 +1328,17 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
}
|
||||
} else {
|
||||
// 1.1 or 1.3
|
||||
if (c1buttons & (L_CBUTTONS)) {
|
||||
if (c1buttons & (L_JPAD | L_CBUTTONS)) {
|
||||
movedata.unk30 = 1;
|
||||
}
|
||||
|
||||
if (c1buttons & (R_CBUTTONS)) {
|
||||
if (c1buttons & (R_JPAD | R_CBUTTONS)) {
|
||||
movedata.unk34 = 1;
|
||||
}
|
||||
|
||||
if (!g_Vars.currentplayer->insightaimmode && allowc1buttons) {
|
||||
movedata.digitalstepleft = joyCountButtonsOnSpecificSamples(aimoffhist, contpad1, c1allowedbuttons & (L_CBUTTONS));
|
||||
movedata.digitalstepright = joyCountButtonsOnSpecificSamples(aimoffhist, contpad1, c1allowedbuttons & (R_CBUTTONS));
|
||||
movedata.digitalstepleft = joyCountButtonsOnSpecificSamples(aimoffhist, contpad1, c1allowedbuttons & (L_JPAD | L_CBUTTONS));
|
||||
movedata.digitalstepright = joyCountButtonsOnSpecificSamples(aimoffhist, contpad1, c1allowedbuttons & (R_JPAD | R_CBUTTONS));
|
||||
}
|
||||
|
||||
movedata.digitalstepforward = false;
|
||||
@@ -1333,20 +1347,16 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
movedata.cannaturalpitch = false;
|
||||
|
||||
// Looking up/down
|
||||
if (!g_Vars.currentplayer->insightaimmode && (c1buttons & (U_CBUTTONS))) {
|
||||
if (!g_Vars.currentplayer->insightaimmode && (c1buttons & (U_JPAD | U_CBUTTONS))) {
|
||||
movedata.speedvertadown = 1;
|
||||
}
|
||||
|
||||
if (!g_Vars.currentplayer->insightaimmode && (c1buttons & (D_CBUTTONS))) {
|
||||
if (!g_Vars.currentplayer->insightaimmode && (c1buttons & (D_JPAD | D_CBUTTONS))) {
|
||||
movedata.speedvertaup = 1;
|
||||
}
|
||||
|
||||
movedata.cannaturalturn = !g_Vars.currentplayer->insightaimmode;
|
||||
#ifdef PLATFORM_N64
|
||||
movedata.unk14 = false;
|
||||
#else
|
||||
movedata.unk14 = !g_Vars.currentplayer->insightaimmode && (c2stickx || c2sticky);
|
||||
#endif
|
||||
movedata.unk14 = 0;
|
||||
|
||||
if (g_Vars.tickmode == TICKMODE_AUTOWALK) {
|
||||
movedata.analogstrafe = 0;
|
||||
@@ -1433,14 +1443,17 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
} else {
|
||||
for (i = 0; i < numsamples; i++) {
|
||||
#ifndef PLATFORM_N64
|
||||
if (joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & BUTTON_WPNFORWARD)) {
|
||||
movedata.weaponforwardoffset++;
|
||||
g_Vars.currentplayer->invdowntime = -1;
|
||||
} else if (joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & BUTTON_WPNBACK)) {
|
||||
movedata.weaponbackoffset++;
|
||||
g_Vars.currentplayer->invdowntime = -1;
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
if (joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & BUTTON_WPNFORWARD)) {
|
||||
movedata.weaponforwardoffset++;
|
||||
g_Vars.currentplayer->invdowntime = -1;
|
||||
} else if (joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & BUTTON_WPNBACK)) {
|
||||
movedata.weaponbackoffset++;
|
||||
g_Vars.currentplayer->invdowntime = -1;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
#else
|
||||
#endif
|
||||
if (joyGetButtonsOnSample(i, contpad1, invbuttons & c1allowedbuttons)) {
|
||||
if (g_Vars.currentplayer->invdowntime > -2) {
|
||||
if (joyGetButtonsPressedOnSample(i, contpad1, shootbuttons & c1allowedbuttons)) {
|
||||
@@ -1451,7 +1464,7 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
if (g_Vars.currentplayer->invdowntime >= 0 && joyGetButtonsOnSample(i, contpad1, shootbuttons & c1allowedbuttons) == 0) {
|
||||
// Holding A and haven't pressed Z
|
||||
if (g_Vars.currentplayer->invdowntime > TICKS(15)) {
|
||||
/* amOpen(); */
|
||||
amOpen();
|
||||
g_Vars.currentplayer->invdowntime = -1;
|
||||
} else {
|
||||
g_Vars.currentplayer->invdowntime++;
|
||||
@@ -1468,32 +1481,31 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
|
||||
g_Vars.currentplayer->invdowntime = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle B and use-like button
|
||||
const u32 usemask = (controlmode == CONTROLMODE_PC) ?
|
||||
(B_BUTTON | BUTTON_CANCEL_USE | BUTTON_ACCEPT_USE) :
|
||||
B_BUTTON;
|
||||
if (allowc1buttons) {
|
||||
for (i = 0; i < numsamples; i++) {
|
||||
if (joyGetButtonsOnSample(i, contpad1, c1allowedbuttons & (B_BUTTON | BUTTON_CANCEL_USE | BUTTON_ACCEPT_USE))) {
|
||||
if (joyGetButtonsOnSample(i, contpad1, c1allowedbuttons & usemask)) {
|
||||
if (g_Vars.currentplayer->usedowntime >= -1) {
|
||||
#ifdef PLATFORM_N64
|
||||
if (joyGetButtonsPressedOnSample(i, contpad1, shootbuttons & c1allowedbuttons)
|
||||
&& g_Vars.currentplayer->usedowntime >= 0
|
||||
&& bgunConsiderToggleGunFunction(g_Vars.currentplayer->usedowntime, true, false, 0) != USETIMER_CONTINUE) {
|
||||
g_Vars.currentplayer->usedowntime = -3;
|
||||
if (controlmode != CONTROLMODE_PC) {
|
||||
if (joyGetButtonsPressedOnSample(i, contpad1, shootbuttons & c1allowedbuttons)
|
||||
&& g_Vars.currentplayer->usedowntime >= 0
|
||||
&& bgunConsiderToggleGunFunction(g_Vars.currentplayer->usedowntime, true, false, 0) != USETIMER_CONTINUE) {
|
||||
g_Vars.currentplayer->usedowntime = -3;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (g_Vars.currentplayer->usedowntime >= 0) {
|
||||
if (g_Vars.currentplayer->usedowntime > TICKS(25)) {
|
||||
#ifdef PLATFORM_N64
|
||||
s32 result = bgunConsiderToggleGunFunction(g_Vars.currentplayer->usedowntime, false, false, 0);
|
||||
#else
|
||||
s32 result = USETIMER_CONTINUE;
|
||||
#endif
|
||||
|
||||
s32 result = (controlmode == CONTROLMODE_PC) ?
|
||||
USETIMER_CONTINUE :
|
||||
bgunConsiderToggleGunFunction(g_Vars.currentplayer->usedowntime, false, false, 0);
|
||||
if (result == USETIMER_STOP) {
|
||||
g_Vars.currentplayer->usedowntime = -1;
|
||||
} else if (result == USETIMER_REPEAT) {
|
||||
@@ -1506,11 +1518,9 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
}
|
||||
}
|
||||
} else {
|
||||
#ifdef PLATFORM_N64
|
||||
if (g_Vars.currentplayer->usedowntime >= -2) {
|
||||
if ((controlmode != CONTROLMODE_PC) && g_Vars.currentplayer->usedowntime >= -2) {
|
||||
bgunConsiderToggleGunFunction(g_Vars.currentplayer->usedowntime, false, false, 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
// Released B
|
||||
@@ -1524,9 +1534,8 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifndef PLATFORM_N64
|
||||
if (allowc1buttons) {
|
||||
if (controlmode == CONTROLMODE_PC && allowc1buttons) {
|
||||
// handle L button : alt switching
|
||||
for (i = 0; i < numsamples; i++) {
|
||||
bgunProcessInputAltButton(&movedata, contpad1, i);
|
||||
@@ -1606,76 +1615,63 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle manual zoom in and out (sniper, farsight and horizon scanner)
|
||||
if (canmanualzoom && g_Vars.currentplayer->insightaimmode) {
|
||||
increment = 1;
|
||||
zoomout = c1buttons & (D_CBUTTONS);
|
||||
zoomin = c1buttons & (U_CBUTTONS);
|
||||
|
||||
// @bug? Should this be HAND_RIGHT?
|
||||
if (bgunGetWeaponNum(HAND_LEFT) == WEAPON_FARSIGHT) {
|
||||
increment = 0.5f;
|
||||
}
|
||||
|
||||
if (zoomout) {
|
||||
movedata.zoomoutfovpersec = increment;
|
||||
}
|
||||
|
||||
if (zoomin) {
|
||||
movedata.zoominfovpersec = increment;
|
||||
}
|
||||
|
||||
if (c2sticky < 0) {
|
||||
movedata.zoomoutfovpersec = -c2sticky / 70.0f;
|
||||
|
||||
if (movedata.zoomoutfovpersec > 1) {
|
||||
movedata.zoomoutfovpersec = 1;
|
||||
}
|
||||
|
||||
movedata.zoomoutfovpersec = movedata.zoomoutfovpersec + movedata.zoomoutfovpersec;
|
||||
}
|
||||
|
||||
if (c2sticky > 0) {
|
||||
movedata.zoominfovpersec = c2sticky / 70.0f;
|
||||
|
||||
if (movedata.zoominfovpersec > 1) {
|
||||
movedata.zoominfovpersec = 1;
|
||||
}
|
||||
|
||||
movedata.zoominfovpersec = movedata.zoominfovpersec + movedata.zoominfovpersec;
|
||||
}
|
||||
}
|
||||
#else
|
||||
// Handle manual zoom in and out (sniper, farsight and horizon scanner)
|
||||
if (canmanualzoom && g_Vars.currentplayer->insightaimmode) {
|
||||
increment = 1;
|
||||
zoomout = c1buttons & (D_CBUTTONS);
|
||||
zoomin = c1buttons & (U_CBUTTONS);
|
||||
|
||||
// @bug? Should this be HAND_RIGHT?
|
||||
if (bgunGetWeaponNum(HAND_LEFT) == WEAPON_FARSIGHT) {
|
||||
increment = 0.5f;
|
||||
}
|
||||
|
||||
if (zoomout) {
|
||||
movedata.zoomoutfovpersec = increment;
|
||||
}
|
||||
|
||||
if (zoomin) {
|
||||
movedata.zoominfovpersec = increment;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Handle manual zoom in and out (sniper, farsight and horizon scanner)
|
||||
if (canmanualzoom && g_Vars.currentplayer->insightaimmode) {
|
||||
increment = 1;
|
||||
zoomout = c1buttons & sdmask;
|
||||
zoomin = c1buttons & sumask;
|
||||
|
||||
// @bug? Should this be HAND_RIGHT?
|
||||
if (bgunGetWeaponNum(HAND_LEFT) == WEAPON_FARSIGHT) {
|
||||
increment = 0.5f;
|
||||
}
|
||||
|
||||
if (zoomout) {
|
||||
movedata.zoomoutfovpersec = increment;
|
||||
}
|
||||
|
||||
if (zoomin) {
|
||||
movedata.zoominfovpersec = increment;
|
||||
}
|
||||
|
||||
#ifndef PLATFORM_N64
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
if (c2sticky < 0) {
|
||||
movedata.zoomoutfovpersec = -c2sticky / 70.0f;
|
||||
|
||||
if (movedata.zoomoutfovpersec > 1) {
|
||||
movedata.zoomoutfovpersec = 1;
|
||||
}
|
||||
|
||||
movedata.zoomoutfovpersec = movedata.zoomoutfovpersec + movedata.zoomoutfovpersec;
|
||||
}
|
||||
if (c2sticky > 0) {
|
||||
movedata.zoominfovpersec = c2sticky / 70.0f;
|
||||
|
||||
if (movedata.zoominfovpersec > 1) {
|
||||
movedata.zoominfovpersec = 1;
|
||||
}
|
||||
|
||||
movedata.zoominfovpersec = movedata.zoominfovpersec + movedata.zoominfovpersec;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Handle C-button and analog crouch and uncrouch, if enabled
|
||||
if ((PLAYER_EXTCFG().crouchmode & CROUCHMODE_ANALOG) && allowc1buttons) {
|
||||
#ifdef PLATFORM_N64
|
||||
if (allowc1buttons) {
|
||||
#else
|
||||
if (allowc1buttons && (controlmode != CONTROLMODE_PC || (PLAYER_EXTCFG().crouchmode & CROUCHMODE_ANALOG))) {
|
||||
#endif
|
||||
for (i = 0; i < numsamples; i++) {
|
||||
if (!canmanualzoom && aimonhist[i]) {
|
||||
bool goUp = joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & (U_CBUTTONS));
|
||||
#ifndef PLATFORM_N64
|
||||
goUp = goUp || ((joyGetRStickYOnSample(i, contpad1) > 30 && joyGetRStickYOnSampleIndex(i, contpad1) <= 30));
|
||||
#endif
|
||||
bool goUp = joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & sumask);
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
goUp = goUp || ((joyGetRStickYOnSample(i, contpad1) > 30 && joyGetRStickYOnSampleIndex(i, contpad1) <= 30));
|
||||
}
|
||||
if (goUp) {
|
||||
if (movedata.crouchdown) {
|
||||
movedata.crouchdown--;
|
||||
@@ -1686,10 +1682,10 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
g_Vars.currentplayer->aimtaptime = -1;
|
||||
}
|
||||
|
||||
bool goDn = joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & (D_CBUTTONS));
|
||||
#ifndef PLATFORM_N64
|
||||
goDn = goDn || ((joyGetRStickYOnSample(i, contpad1) < -30 && joyGetRStickYOnSampleIndex(i, contpad1) >= -30));
|
||||
#endif
|
||||
bool goDn = joyGetButtonsPressedOnSample(i, contpad1, c1allowedbuttons & sdmask);
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
goDn = goDn || ((joyGetRStickYOnSample(i, contpad1) < -30 && joyGetRStickYOnSampleIndex(i, contpad1) >= -30));
|
||||
}
|
||||
if (goDn) {
|
||||
if (movedata.crouchup) {
|
||||
movedata.crouchup--;
|
||||
@@ -1730,42 +1726,42 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
&& g_Vars.coopplayernum <= -1) {
|
||||
movedata.eyesshut = g_Vars.currentplayer->insightaimmode
|
||||
&& !canmanualzoom
|
||||
&& joyGetButtons(contpad1, c1allowedbuttons & (D_CBUTTONS));
|
||||
&& joyGetButtons(contpad1, c1allowedbuttons & sdmask);
|
||||
}
|
||||
|
||||
if (bgunGetWeaponNum(HAND_RIGHT) == WEAPON_FARSIGHT) {
|
||||
movedata.farsighttempautoseek = g_Vars.currentplayer->insightaimmode && (c1buttons & (L_CBUTTONS | R_CBUTTONS));
|
||||
if (g_Vars.currentplayer->insightaimmode) {
|
||||
movedata.farsighttempautoseek = g_Vars.currentplayer->insightaimmode && (c1buttons & (srmask | slmask));
|
||||
if (controlmode == CONTROLMODE_PC && g_Vars.currentplayer->insightaimmode) {
|
||||
movedata.unk14 = 1;
|
||||
#ifndef PLATFORM_N64
|
||||
movedata.analogstrafe = c2stickx;
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
movedata.rleanleft = g_Vars.currentplayer->insightaimmode && (c1buttons & (L_CBUTTONS));
|
||||
movedata.rleanright = g_Vars.currentplayer->insightaimmode && (c1buttons & (R_CBUTTONS));
|
||||
movedata.rleanleft = g_Vars.currentplayer->insightaimmode && (c1buttons & slmask);
|
||||
movedata.rleanright = g_Vars.currentplayer->insightaimmode && (c1buttons & srmask);
|
||||
#ifndef PLATFORM_N64
|
||||
if (g_Vars.currentplayer->insightaimmode) {
|
||||
if (controlmode == CONTROLMODE_PC && g_Vars.currentplayer->insightaimmode) {
|
||||
movedata.analoglean = c2stickx / 127.f;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Handle mine detonation
|
||||
#ifdef PLATFORM_N64
|
||||
if ((((c1buttons & invbuttons) && (c1buttonsthisframe & B_BUTTON))
|
||||
|| ((c1buttons & B_BUTTON) && (c1buttonsthisframe & invbuttons)))
|
||||
&& weaponnum == WEAPON_REMOTEMINE) {
|
||||
movedata.detonating = true;
|
||||
movedata.weaponbackoffset = 0;
|
||||
movedata.weaponforwardoffset = 0;
|
||||
movedata.btapcount = 0;
|
||||
g_Vars.currentplayer->invdowntime = -2;
|
||||
g_Vars.currentplayer->usedowntime = -2;
|
||||
if (controlmode != CONTROLMODE_PC) {
|
||||
if ((((c1buttons & invbuttons) && (c1buttonsthisframe & B_BUTTON))
|
||||
|| ((c1buttons & B_BUTTON) && (c1buttonsthisframe & invbuttons)))
|
||||
&& weaponnum == WEAPON_REMOTEMINE) {
|
||||
movedata.detonating = true;
|
||||
movedata.weaponbackoffset = 0;
|
||||
movedata.weaponforwardoffset = 0;
|
||||
movedata.btapcount = 0;
|
||||
g_Vars.currentplayer->invdowntime = -2;
|
||||
g_Vars.currentplayer->usedowntime = -2;
|
||||
}
|
||||
} else {
|
||||
bgunProcessQuickDetonate(&movedata, c1buttons, c1buttonsthisframe, (BUTTON_CANCEL_USE | BUTTON_ACCEPT_USE), (BUTTON_WPNBACK | BUTTON_RADIAL | BUTTON_RELOAD));
|
||||
}
|
||||
#else
|
||||
bgunProcessQuickDetonate(&movedata, c1buttons, c1buttonsthisframe, (BUTTON_CANCEL_USE | BUTTON_ACCEPT_USE), (BUTTON_WPNBACK | BUTTON_RADIAL | BUTTON_RELOAD));
|
||||
#endif
|
||||
}
|
||||
|
||||
movedata.aiming = g_Vars.currentplayer->insightaimmode;
|
||||
@@ -1784,15 +1780,13 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
} else {
|
||||
movedata.triggeron = g_Vars.currentplayer->waitforzrelease == false
|
||||
&& (c1buttons & shootbuttons)
|
||||
&& g_Vars.currentplayer->pausemode == PAUSEMODE_UNPAUSED
|
||||
#ifdef PLATFORM_N64
|
||||
&& (c1buttons & invbuttons) == 0;
|
||||
#else
|
||||
;
|
||||
#endif
|
||||
&& g_Vars.currentplayer->pausemode == PAUSEMODE_UNPAUSED;
|
||||
if (controlmode != CONTROLMODE_PC) {
|
||||
movedata.triggeron = movedata.triggeron && ((c1buttons & invbuttons) == 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (controlmode == CONTROLMODE_12 || controlmode == CONTROLMODE_14) {
|
||||
if (controlmode == CONTROLMODE_12 || controlmode == CONTROLMODE_14 || controlmode == CONTROLMODE_PC) {
|
||||
movedata.disablelookahead = true;
|
||||
}
|
||||
} // end 1.x
|
||||
@@ -1801,13 +1795,19 @@ void bmoveProcessInput(bool allowc1x, bool allowc1y, bool allowc1buttons, bool i
|
||||
|
||||
g_Vars.currentplayer->bondactivateorreload = 0;
|
||||
|
||||
if (movedata.alt1tapcount) {
|
||||
#ifndef PLATFORM_N64
|
||||
if (controlmode == CONTROLMODE_PC && movedata.alt1tapcount) {
|
||||
g_Vars.currentplayer->bondactivateorreload = g_Vars.currentplayer->bondactivateorreload | JO_ACTION_RELOAD;
|
||||
}
|
||||
#endif
|
||||
if (movedata.btapcount) {
|
||||
g_Vars.currentplayer->activatetimelast = g_Vars.currentplayer->activatetimethis;
|
||||
g_Vars.currentplayer->activatetimethis = g_Vars.lvframe60;
|
||||
g_Vars.currentplayer->bondactivateorreload = g_Vars.currentplayer->bondactivateorreload | JO_ACTION_ACTIVATE;
|
||||
if (controlmode == CONTROLMODE_PC) {
|
||||
g_Vars.currentplayer->bondactivateorreload = g_Vars.currentplayer->bondactivateorreload | JO_ACTION_ACTIVATE;
|
||||
} else {
|
||||
g_Vars.currentplayer->bondactivateorreload = movedata.btapcount;
|
||||
}
|
||||
|
||||
bmoveHandleActivate();
|
||||
}
|
||||
|
||||
+37
-24
@@ -988,6 +988,7 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
bool vsplit = false;
|
||||
#endif
|
||||
u32 umask, dmask, lmask, rmask;
|
||||
|
||||
#if VERSION >= VERSION_PAL_FINAL
|
||||
#if PAL
|
||||
@@ -1018,6 +1019,18 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (optionsGetControlMode(g_Vars.currentplayerstats->mpindex) == CONTROLMODE_PC) {
|
||||
umask = U_CBUTTONS;
|
||||
dmask = D_CBUTTONS;
|
||||
lmask = L_CBUTTONS;
|
||||
rmask = R_CBUTTONS;
|
||||
} else {
|
||||
umask = U_JPAD | U_CBUTTONS;
|
||||
dmask = D_JPAD | D_CBUTTONS;
|
||||
lmask = L_JPAD | L_CBUTTONS;
|
||||
rmask = R_JPAD | R_CBUTTONS;
|
||||
}
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
movex = chr->prop->pos.x - chr->prevpos.x;
|
||||
movey = chr->prop->pos.y - chr->prevpos.y;
|
||||
@@ -1403,32 +1416,32 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
// Up
|
||||
if (g_Vars.currentplayer->eyespy->mode == EYESPYMODE_CAMSPY) {
|
||||
brightness = 20; \
|
||||
if (buttonsdown & (U_CBUTTONS)) { \
|
||||
if (buttonsdown & umask) { \
|
||||
brightness += 20; \
|
||||
} \
|
||||
if (buttonsthisframe & (U_CBUTTONS)) { \
|
||||
if (buttonsthisframe & umask) { \
|
||||
brightness += 20; \
|
||||
} \
|
||||
gDPSetPrimColor(gdl++, 0, 0, 0, brightness, 0, 0xff); \
|
||||
} else if (g_Vars.currentplayer->eyespy->mode == EYESPYMODE_DRUGSPY) {
|
||||
brightness = 127;
|
||||
|
||||
if (buttonsdown & (U_CBUTTONS)) {
|
||||
if (buttonsdown & umask) {
|
||||
brightness += 63;
|
||||
}
|
||||
|
||||
if (buttonsthisframe & (U_CBUTTONS)) {
|
||||
if (buttonsthisframe & umask) {
|
||||
brightness += 63; \
|
||||
} \
|
||||
gDPSetPrimColor(gdl++, 0, 0, 0x10, 0x20, brightness, 0xff);
|
||||
} else {
|
||||
brightness = 20;
|
||||
|
||||
if (buttonsdown & (U_CBUTTONS)) {
|
||||
if (buttonsdown & umask) {
|
||||
brightness += 20;
|
||||
}
|
||||
|
||||
if (buttonsthisframe & (U_CBUTTONS)) {
|
||||
if (buttonsthisframe & umask) {
|
||||
brightness += 20; \
|
||||
} \
|
||||
gDPSetPrimColor(gdl++, 0, 0, brightness, brightness >> 2, 0, 0xff);
|
||||
@@ -1441,10 +1454,10 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
if (g_Vars.currentplayer->eyespy->mode == EYESPYMODE_CAMSPY) {
|
||||
brightness = 20;
|
||||
|
||||
if (buttonsdown & (D_CBUTTONS)) { \
|
||||
if (buttonsdown & dmask) { \
|
||||
brightness += 20; \
|
||||
} \
|
||||
if (buttonsthisframe & (D_CBUTTONS)) {
|
||||
if (buttonsthisframe & dmask) {
|
||||
brightness += 20;
|
||||
}
|
||||
|
||||
@@ -1452,11 +1465,11 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
} else if (g_Vars.currentplayer->eyespy->mode == EYESPYMODE_DRUGSPY) {
|
||||
brightness = 127;
|
||||
|
||||
if (buttonsdown & (D_CBUTTONS)) {
|
||||
if (buttonsdown & dmask) {
|
||||
brightness += 63;
|
||||
}
|
||||
|
||||
if (buttonsthisframe & (D_CBUTTONS)) {
|
||||
if (buttonsthisframe & dmask) {
|
||||
brightness += 63;
|
||||
}
|
||||
|
||||
@@ -1464,11 +1477,11 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
} else {
|
||||
brightness = 20;
|
||||
|
||||
if (buttonsdown & (D_CBUTTONS)) {
|
||||
if (buttonsdown & dmask) {
|
||||
brightness += 20;
|
||||
}
|
||||
|
||||
if (buttonsthisframe & (D_CBUTTONS)) {
|
||||
if (buttonsthisframe & dmask) {
|
||||
brightness += 20;
|
||||
}
|
||||
|
||||
@@ -1482,10 +1495,10 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
if (g_Vars.currentplayer->eyespy->mode == EYESPYMODE_CAMSPY) {
|
||||
brightness = 20;
|
||||
|
||||
if (buttonsdown & (L_CBUTTONS)) { \
|
||||
if (buttonsdown & lmask) { \
|
||||
brightness += 20; \
|
||||
} \
|
||||
if (buttonsthisframe & (L_CBUTTONS)) {
|
||||
if (buttonsthisframe & lmask) {
|
||||
brightness += 20;
|
||||
}
|
||||
|
||||
@@ -1493,11 +1506,11 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
} else if (g_Vars.currentplayer->eyespy->mode == EYESPYMODE_DRUGSPY) {
|
||||
brightness = 127;
|
||||
|
||||
if (buttonsdown & (L_CBUTTONS)) {
|
||||
if (buttonsdown & lmask) {
|
||||
brightness += 63;
|
||||
}
|
||||
|
||||
if (buttonsthisframe & (L_CBUTTONS)) {
|
||||
if (buttonsthisframe & lmask) {
|
||||
brightness += 63;
|
||||
}
|
||||
|
||||
@@ -1505,11 +1518,11 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
} else {
|
||||
brightness = 20;
|
||||
|
||||
if (buttonsdown & (L_CBUTTONS)) {
|
||||
if (buttonsdown & lmask) {
|
||||
brightness += 20;
|
||||
}
|
||||
|
||||
if (buttonsthisframe & (L_CBUTTONS)) {
|
||||
if (buttonsthisframe & lmask) {
|
||||
brightness += 20;
|
||||
}
|
||||
|
||||
@@ -1523,10 +1536,10 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
if (g_Vars.currentplayer->eyespy->mode == EYESPYMODE_CAMSPY) {
|
||||
brightness = 20;
|
||||
|
||||
if (buttonsdown & (R_CBUTTONS)) { \
|
||||
if (buttonsdown & rmask) { \
|
||||
brightness += 20; \
|
||||
} \
|
||||
if (buttonsthisframe & (R_CBUTTONS)) {
|
||||
if (buttonsthisframe & rmask) {
|
||||
brightness += 20;
|
||||
}
|
||||
|
||||
@@ -1534,11 +1547,11 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
} else if (g_Vars.currentplayer->eyespy->mode == EYESPYMODE_DRUGSPY) {
|
||||
brightness = 127;
|
||||
|
||||
if (buttonsdown & (R_CBUTTONS)) {
|
||||
if (buttonsdown & rmask) {
|
||||
brightness += 63;
|
||||
}
|
||||
|
||||
if (buttonsthisframe & (R_CBUTTONS)) {
|
||||
if (buttonsthisframe & rmask) {
|
||||
brightness += 63;
|
||||
}
|
||||
|
||||
@@ -1546,11 +1559,11 @@ Gfx *bviewDrawEyespyMetrics(Gfx *gdl)
|
||||
} else {
|
||||
brightness = 20;
|
||||
|
||||
if (buttonsdown & (R_CBUTTONS)) {
|
||||
if (buttonsdown & rmask) {
|
||||
brightness += 20;
|
||||
}
|
||||
|
||||
if (buttonsthisframe & (R_CBUTTONS)) {
|
||||
if (buttonsthisframe & rmask) {
|
||||
brightness += 20;
|
||||
}
|
||||
|
||||
|
||||
@@ -4478,7 +4478,8 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse
|
||||
|
||||
pakRumble((s8)g_Vars.currentplayernum, 0.25f, -1, -1);
|
||||
|
||||
if (optionsGetControlMode(g_Vars.currentplayerstats->mpindex) >= CONTROLMODE_21) {
|
||||
s32 controlmode = optionsGetControlMode(g_Vars.currentplayerstats->mpindex);
|
||||
if (controlmode >= CONTROLMODE_21 && controlmode < CONTROLMODE_PC) {
|
||||
pakRumble((s8)(PLAYERCOUNT() + g_Vars.currentplayernum), 0.25f, -1, -1);
|
||||
}
|
||||
#endif
|
||||
|
||||
+29
-5
@@ -160,14 +160,20 @@ void gamefileLoadDefaults(struct gamefile *file)
|
||||
optionsSetMusicVolume(0x7f80);
|
||||
#endif
|
||||
sndSetSoundMode(SOUNDMODE_STEREO);
|
||||
#ifdef PLATFORM_N64
|
||||
optionsSetControlMode(player1, CONTROLMODE_11);
|
||||
#else
|
||||
optionsSetControlMode(player1, CONTROLMODE_12);
|
||||
#endif
|
||||
optionsSetControlMode(player2, CONTROLMODE_11);
|
||||
pakClearAllBitflags(file->flags);
|
||||
|
||||
#ifndef PLATFORM_N64
|
||||
// override with PC controls if enabled in the config
|
||||
if (g_PlayerExtCfg[0].extcontrols) {
|
||||
optionsSetControlMode(player1, CONTROLMODE_PC);
|
||||
}
|
||||
if (g_PlayerExtCfg[1].extcontrols) {
|
||||
optionsSetControlMode(player2, CONTROLMODE_PC);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef PLATFORM_N64
|
||||
pakSetBitflag(GAMEFILEFLAG_P1_FORWARDPITCH, file->flags, false);
|
||||
#else
|
||||
@@ -333,6 +339,16 @@ s32 gamefileLoad(s32 device)
|
||||
optionsSetControlMode(p1index, savebufferReadBits(&buffer, 3));
|
||||
optionsSetControlMode(p2index, savebufferReadBits(&buffer, 3));
|
||||
|
||||
#ifndef PLATFORM_N64
|
||||
// override with PC controls if enabled in the config
|
||||
if (g_PlayerExtCfg[0].extcontrols) {
|
||||
optionsSetControlMode(p1index, CONTROLMODE_PC);
|
||||
}
|
||||
if (g_PlayerExtCfg[1].extcontrols) {
|
||||
optionsSetControlMode(p2index, CONTROLMODE_PC);
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = 0; i < ARRAYCOUNT(g_GameFile.flags); i++) {
|
||||
g_GameFile.flags[i] = savebufferReadBits(&buffer, 8);
|
||||
}
|
||||
@@ -499,8 +515,16 @@ s32 gamefileSave(s32 device, s32 fileid, u16 deviceserial)
|
||||
value = g_SoundMode;
|
||||
savebufferOr(&buffer, value, 2);
|
||||
|
||||
#ifdef PLATFORM_N64
|
||||
savebufferOr(&buffer, optionsGetControlMode(p1index), 3);
|
||||
savebufferOr(&buffer, optionsGetControlMode(p2index), 3);
|
||||
#else
|
||||
// PC control mode is enabled in the .ini to avoid changing the save structure
|
||||
s32 controlmode = optionsGetControlMode(p1index);
|
||||
savebufferOr(&buffer, ((controlmode == CONTROLMODE_PC) ? CONTROLMODE_11 : controlmode), 3);
|
||||
controlmode = optionsGetControlMode(p2index);
|
||||
savebufferOr(&buffer, ((controlmode == CONTROLMODE_PC) ? CONTROLMODE_11 : controlmode), 3);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < ARRAYCOUNT(g_GameFile.flags); i++) {
|
||||
savebufferOr(&buffer, g_GameFile.flags[i], 8);
|
||||
@@ -579,7 +603,7 @@ void gamefileUnlockEverything(void)
|
||||
// unlock all challenges
|
||||
for (i = 0; i < ARRAYCOUNT(g_MpChallenges); ++i) {
|
||||
for (j = 0; j < MAX_PLAYERS; ++j) {
|
||||
g_MpChallenges[i].completions[j] = 0x0f;
|
||||
g_MpChallenges[i].completions[j] = 0xff;
|
||||
}
|
||||
}
|
||||
challengeDetermineUnlockedFeatures();
|
||||
|
||||
+16
-5
@@ -92,21 +92,32 @@ MenuItemHandlerResult menuhandlerControlStyleImpl(s32 operation, struct menuitem
|
||||
|
||||
switch (operation) {
|
||||
case MENUOP_GETOPTIONCOUNT:
|
||||
data->list.value = 8;
|
||||
data->list.value = 9;
|
||||
break;
|
||||
case MENUOP_GETOPTGROUPCOUNT:
|
||||
data->list.value = 2;
|
||||
data->list.value = 3;
|
||||
break;
|
||||
case MENUOP_GETOPTIONTEXT:
|
||||
return (s32) langGet(g_ControlStyleOptions[data->list.value]);
|
||||
if (data->list.value > 7) {
|
||||
return (intptr_t) "Ext";
|
||||
} else {
|
||||
return (intptr_t) langGet(g_ControlStyleOptions[data->list.value]);
|
||||
}
|
||||
case MENUOP_GETOPTGROUPTEXT:
|
||||
return (s32) langGet(categories[data->list.value]);
|
||||
if (data->list.value > 1) {
|
||||
return (intptr_t) "Port";
|
||||
} else {
|
||||
return (intptr_t) langGet(categories[data->list.value]);
|
||||
}
|
||||
case MENUOP_GETGROUPSTARTINDEX:
|
||||
data->list.groupstartindex = data->list.value == 0 ? 0 : 4;
|
||||
data->list.groupstartindex = data->list.value * 4;
|
||||
break;
|
||||
case MENUOP_SET:
|
||||
optionsSetControlMode(mpindex, data->list.value);
|
||||
g_Vars.modifiedfiles |= MODFILE_GAME;
|
||||
#ifndef PLATFORM_N64
|
||||
g_PlayerExtCfg[mpindex & 3].extcontrols = (data->list.value == CONTROLMODE_PC);
|
||||
#endif
|
||||
break;
|
||||
case MENUOP_GETSELECTEDINDEX:
|
||||
data->list.value = optionsGetControlMode(mpindex);
|
||||
|
||||
+2
-2
@@ -4639,7 +4639,7 @@ void menuProcessInput(void)
|
||||
inputs.select = 1;
|
||||
}
|
||||
|
||||
#ifndef PLATFORM_N64
|
||||
#ifndef PLATFORM_N64
|
||||
// this seems sensible to achieve 1964 parity
|
||||
if (buttonsnow & BUTTON_RADIAL) {
|
||||
inputs.select = 1;
|
||||
@@ -4648,8 +4648,8 @@ void menuProcessInput(void)
|
||||
if (buttonsnow & BUTTON_WPNBACK) {
|
||||
inputs.back = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
if (buttonsnow & B_BUTTON) {
|
||||
inputs.back = 1;
|
||||
}
|
||||
|
||||
+27
-9
@@ -4097,7 +4097,7 @@ Gfx *menuitemControllerRenderText(Gfx *gdl, s32 curmode, struct menurendercontex
|
||||
#endif
|
||||
|
||||
// For the 2.x styles, only labels 4-7 are shown
|
||||
if (curmode < CONTROLMODE_21 || (i >= 4 && i <= 7)) {
|
||||
if ((curmode < CONTROLMODE_21 || curmode == CONTROLMODE_PC) || (i >= 4 && i <= 7)) {
|
||||
// Rendering a label such as "L/R BUTTONS:"
|
||||
rx = context->x + padx + 76;
|
||||
#if VERSION < VERSION_NTSC_1_0
|
||||
@@ -4117,7 +4117,7 @@ Gfx *menuitemControllerRenderText(Gfx *gdl, s32 curmode, struct menurendercontex
|
||||
// during development the second player in the 2.x styles had to
|
||||
// choose their control style separately to player 1, in which case
|
||||
// there would have been 2.5, 2.6, 2.7 and 2.8 for player 2.
|
||||
if (curmode > CONTROLMODE_24) {
|
||||
if (curmode > CONTROLMODE_24 && curmode != CONTROLMODE_PC) {
|
||||
if (textnum == menuitemControllerGetButtonAction(prevmode + 4, i)) {
|
||||
colour = labelcolour;
|
||||
}
|
||||
@@ -4128,7 +4128,7 @@ Gfx *menuitemControllerRenderText(Gfx *gdl, s32 curmode, struct menurendercontex
|
||||
}
|
||||
}
|
||||
|
||||
if (curmode >= CONTROLMODE_21 && i == 2) {
|
||||
if (curmode >= CONTROLMODE_21 && curmode < CONTROLMODE_PC && i == 2) {
|
||||
// Rendering a "CONTROLLER 1" or "CONTROLLER 2" heading
|
||||
rx = context->x + padx + 63;
|
||||
colour = labelcolour;
|
||||
@@ -4157,13 +4157,13 @@ Gfx *menuitemControllerRenderPad(Gfx *gdl, struct menurendercontext *context, s3
|
||||
gdl = menuitemControllerRenderTexture(gdl, rx + 32, ry + 32, 0x36, alpha);
|
||||
|
||||
#if VERSION >= VERSION_JPN_FINAL
|
||||
if (curmode >= CONTROLMODE_21) {
|
||||
if (curmode >= CONTROLMODE_21 && curmode < CONTROLMODE_PC) {
|
||||
gdl = menuitemControllerRenderLines(gdl, context, 13, 20, padx, pady, alpha);
|
||||
} else {
|
||||
gdl = menuitemControllerRenderLines(gdl, context, 0, 22, padx, pady, alpha);
|
||||
}
|
||||
#else
|
||||
if (curmode >= CONTROLMODE_21) {
|
||||
if (curmode >= CONTROLMODE_21 && curmode < CONTROLMODE_PC) {
|
||||
gdl = menuitemControllerRenderLines(gdl, context, 13, 19, padx, pady, alpha);
|
||||
} else {
|
||||
gdl = menuitemControllerRenderLines(gdl, context, 0, 21, padx, pady, alpha);
|
||||
@@ -4196,13 +4196,13 @@ Gfx *menuitemControllerRender(Gfx *gdl, struct menurendercontext *context)
|
||||
|
||||
// If changing control group (eg. 1.4 -> 2.1)
|
||||
if (data->controlgroup == 1) {
|
||||
if (g_Menus[g_MpPlayerNum].main.controlmode < CONTROLMODE_21) {
|
||||
if (g_Menus[g_MpPlayerNum].main.controlmode < CONTROLMODE_21 || g_Menus[g_MpPlayerNum].main.controlmode == CONTROLMODE_PC) {
|
||||
data->controlgroup = 2;
|
||||
data->contfadetimer = 0;
|
||||
data->prevmode = -1;
|
||||
}
|
||||
} else {
|
||||
if (g_Menus[g_MpPlayerNum].main.controlmode >= CONTROLMODE_21) {
|
||||
if (g_Menus[g_MpPlayerNum].main.controlmode >= CONTROLMODE_21 && g_Menus[g_MpPlayerNum].main.controlmode != CONTROLMODE_PC) {
|
||||
data->controlgroup = 1;
|
||||
data->contfadetimer = 0;
|
||||
data->prevmode = -1;
|
||||
@@ -4252,7 +4252,11 @@ Gfx *menuitemControllerRender(Gfx *gdl, struct menurendercontext *context)
|
||||
g_MenuWave2Colours[dialog->type].item_unfocused,
|
||||
g_MenuWave1Colours[dialog->type].item_unfocused);
|
||||
|
||||
if (g_Menus[g_MpPlayerNum].main.controlmode >= CONTROLMODE_21) {
|
||||
if (g_Menus[g_MpPlayerNum].main.controlmode == CONTROLMODE_PC) {
|
||||
sprintf(text, langGet(L_MPWEAPONS_213), // "Control Style %s %s"
|
||||
"Ext",
|
||||
langGet(L_MPWEAPONS_215)); // "(Two-Handed)"
|
||||
} else if (g_Menus[g_MpPlayerNum].main.controlmode >= CONTROLMODE_21) {
|
||||
sprintf(text, langGet(L_MPWEAPONS_213), // "Control Style %s %s"
|
||||
langGet(g_ControlStyleOptions[g_Menus[g_MpPlayerNum].main.controlmode]),
|
||||
langGet(L_MPWEAPONS_215)); // "(Two-Handed)"
|
||||
@@ -4271,7 +4275,21 @@ Gfx *menuitemControllerRender(Gfx *gdl, struct menurendercontext *context)
|
||||
textcolour = colourBlend(colour, colour & 0xffffff00, textalpha);
|
||||
colour = colourBlend(colour, colour & 0xffffff00, contalpha);
|
||||
|
||||
if (g_Menus[g_MpPlayerNum].main.controlmode >= CONTROLMODE_21) {
|
||||
if (g_Menus[g_MpPlayerNum].main.controlmode == CONTROLMODE_PC) {
|
||||
x = context->x;
|
||||
y = context->y + 92;
|
||||
#if VERSION == VERSION_JPN_FINAL
|
||||
y += 34;
|
||||
#endif
|
||||
gdl = text0f153628(gdl);
|
||||
gdl = textRenderProjected(gdl, &x, &y,
|
||||
"PC Port control scheme.\n"
|
||||
"Only change to another control scheme\n"
|
||||
"if you want to use original N64 controls.\n\n"
|
||||
"See Extended Key Bindings for more info.",
|
||||
g_CharsHandelGothicSm, g_FontHandelGothicSm, colour, viGetWidth(), viGetHeight(), 0, 0);
|
||||
gdl = text0f153780(gdl);
|
||||
} else if (g_Menus[g_MpPlayerNum].main.controlmode >= CONTROLMODE_21) {
|
||||
gdl = menuitemControllerRenderPad(gdl, context, 0, VERSION == VERSION_JPN_FINAL ? -4 : 12,
|
||||
g_Menus[g_MpPlayerNum].main.controlmode,
|
||||
contalpha, textcolour, colour, data->prevmode);
|
||||
|
||||
@@ -121,6 +121,7 @@ struct mpweapon g_MpWeapons[NUM_MPWEAPONS] = {
|
||||
.radialmenuspeed = 4.f, \
|
||||
.crosshairsway = 1.f, \
|
||||
.crouchmode = CROUCHMODE_TOGGLE_ANALOG, \
|
||||
.extcontrols = true, \
|
||||
}
|
||||
|
||||
struct extplayerconfig g_PlayerExtCfg[MAX_PLAYERS] = {
|
||||
@@ -405,7 +406,13 @@ void mpPlayerSetDefaults(s32 playernum, bool autonames)
|
||||
|
||||
func0f187fbc(playernum);
|
||||
|
||||
g_PlayerConfigsArray[playernum].controlmode = CONTROLMODE_12;
|
||||
g_PlayerConfigsArray[playernum].controlmode = CONTROLMODE_11;
|
||||
|
||||
#ifndef PLATFORM_N64
|
||||
if (g_PlayerExtCfg[playernum % MAX_PLAYERS].extcontrols) {
|
||||
g_PlayerConfigsArray[playernum].controlmode = CONTROLMODE_PC;
|
||||
}
|
||||
#endif
|
||||
|
||||
g_PlayerConfigsArray[playernum].options =
|
||||
#ifdef PLATFORM_N64
|
||||
@@ -3393,6 +3400,13 @@ void mpplayerfileLoadWad(s32 playernum, struct savebuffer *buffer, s32 arg2)
|
||||
g_PlayerConfigsArray[playernum].controlmode = savebufferReadBits(buffer, 2);
|
||||
g_PlayerConfigsArray[playernum].options = savebufferReadBits(buffer, 12);
|
||||
|
||||
#ifndef PLATFORM_N64
|
||||
// override with PC controls if enabled in the config
|
||||
if (g_PlayerExtCfg[playernum % MAX_PLAYERS].extcontrols) {
|
||||
g_PlayerConfigsArray[playernum].controlmode = CONTROLMODE_PC;
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = 0; i < ARRAYCOUNT(g_MpChallenges); i++) {
|
||||
for (j = 1; j < MAX_PLAYERS + 1; j++) {
|
||||
challengeSetCompletedByPlayerWithNumPlayers(playernum, i, j, savebufferReadBits(buffer, 1));
|
||||
@@ -3523,7 +3537,14 @@ void mpplayerfileSaveWad(s32 playernum, struct savebuffer *buffer)
|
||||
|
||||
savebufferOr(buffer, g_PlayerConfigsArray[playernum].survivormedals, 16);
|
||||
|
||||
#ifdef PLATFORM_N64
|
||||
savebufferOr(buffer, g_PlayerConfigsArray[playernum].controlmode, 2);
|
||||
#else
|
||||
// PC control mode is enabled in the .ini to avoid changing the save structure
|
||||
const u32 controlmode = g_PlayerConfigsArray[playernum].controlmode;
|
||||
savebufferOr(buffer, ((controlmode == CONTROLMODE_PC) ? CONTROLMODE_11 : controlmode), 2);
|
||||
#endif
|
||||
|
||||
savebufferOr(buffer, g_PlayerConfigsArray[playernum].options, 12);
|
||||
|
||||
for (i = 0; i < ARRAYCOUNT(g_MpChallenges); i++) {
|
||||
|
||||
@@ -256,15 +256,21 @@ MenuItemHandlerResult menuhandlerMpControlStyle(s32 operation, struct menuitem *
|
||||
|
||||
switch (operation) {
|
||||
case MENUOP_GETOPTIONCOUNT:
|
||||
data->dropdown.value = 4;
|
||||
data->dropdown.value = 5;
|
||||
break;
|
||||
case MENUOP_GETOPTIONTEXT:
|
||||
return (s32) langGet(labels[data->dropdown.value]);
|
||||
return (intptr_t) ((data->dropdown.value == 4) ? "Ext" : langGet(labels[data->dropdown.value]));
|
||||
case MENUOP_SET:
|
||||
optionsSetControlMode(g_MpPlayerNum, data->dropdown.value);
|
||||
optionsSetControlMode(g_MpPlayerNum, (data->dropdown.value == 4 ? CONTROLMODE_PC : data->dropdown.value));
|
||||
#ifndef PLATFORM_N64
|
||||
g_PlayerExtCfg[g_MpPlayerNum & 3].extcontrols = (data->dropdown.value == 4);
|
||||
#endif
|
||||
break;
|
||||
case MENUOP_GETSELECTEDINDEX:
|
||||
data->dropdown.value = optionsGetControlMode(g_MpPlayerNum);
|
||||
if (data->dropdown.value == CONTROLMODE_PC) {
|
||||
data->dropdown.value = 4;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,10 @@ s32 g_MusicAge60 = 0; // The current age of the MP track being played
|
||||
s32 g_MusicLife60 = TICKS(120); // The max age of any MP track (this value is changed in MP code)
|
||||
s32 g_MusicSilenceTimer60 = 0; // Counts down the 2 second silence between MP track changes
|
||||
|
||||
#ifndef PLATFORM_N64
|
||||
s32 g_MusicDisableMpDeath = false;
|
||||
#endif
|
||||
|
||||
#if VERSION < VERSION_NTSC_1_0
|
||||
const char var7f1b2030nb[] = "MUSIC : musicPlayLevel\n";
|
||||
const char var7f1b2048nb[] = "MUSIC : SWITCHING TO CORRECT AMBIENT TUNE\n";
|
||||
@@ -516,6 +520,12 @@ void _musicStartMpDeath(f32 arg0)
|
||||
|
||||
void musicStartMpDeath(void)
|
||||
{
|
||||
#ifndef PLATFORM_N64
|
||||
if (g_MusicDisableMpDeath) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if VERSION >= VERSION_NTSC_1_0
|
||||
musicSaveInterval();
|
||||
#endif
|
||||
|
||||
@@ -694,6 +694,7 @@
|
||||
#define CONTROLMODE_22 5
|
||||
#define CONTROLMODE_23 6
|
||||
#define CONTROLMODE_24 7
|
||||
#define CONTROLMODE_PC 8 // "pc port" controls; enabled in the .ini file
|
||||
|
||||
#define COUNTDOWNTIMERREASON_AI 0x01
|
||||
#define COUNTDOWNTIMERREASON_NOCONTROL 0x10
|
||||
|
||||
@@ -546,6 +546,7 @@ extern s32 g_PrevFrameFb;
|
||||
extern s32 g_BlurFb;
|
||||
extern s32 g_BlurFbCapTimer;
|
||||
extern s32 g_TickRateDiv;
|
||||
extern s32 g_MusicDisableMpDeath;
|
||||
|
||||
#define PLAYER_EXTCFG() g_PlayerExtCfg[g_Vars.currentplayerstats->mpindex & 3]
|
||||
#define PLAYER_DEFAULT_FOV (PLAYER_EXTCFG().fovy)
|
||||
|
||||
+2
-1
@@ -5072,8 +5072,8 @@ struct movedata {
|
||||
/*0xa0*/ s32 analogpitch;
|
||||
/*0xa4*/ s32 analogstrafe;
|
||||
/*0xa8*/ s32 analogwalk;
|
||||
/*0xac*/ s32 alt1tapcount;
|
||||
#ifndef PLATFORM_N64
|
||||
/*0xac*/ s32 alt1tapcount;
|
||||
/* */ f32 freelookdx; // how much the mouse moved ...
|
||||
/* */ f32 freelookdy; // ... scaled by sensitivity
|
||||
/* */ f32 analoglean; // how much we're trying to lean
|
||||
@@ -6135,6 +6135,7 @@ struct extplayerconfig {
|
||||
s32 crouchmode;
|
||||
f32 radialmenuspeed;
|
||||
f32 crosshairsway;
|
||||
s32 extcontrols;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+2
-1
@@ -1087,7 +1087,8 @@ void joyGetContpadNumsForPlayer(s8 playernum, s32 *pad1, s32 *pad2)
|
||||
|
||||
*pad1 = playernum;
|
||||
|
||||
if (g_PlayerConfigsArray[g_Vars.playerstats[playernum].mpindex].controlmode >= CONTROLMODE_21) {
|
||||
u8 controlmode = g_PlayerConfigsArray[g_Vars.playerstats[playernum].mpindex].controlmode;
|
||||
if (controlmode >= CONTROLMODE_21 && controlmode < CONTROLMODE_PC) {
|
||||
*pad2 = PLAYERCOUNT() + playernum;
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user