99#include "game/player.h"
1010#include "game/hudmsg.h"
1111#include "game/inv.h"
12+ #include "game/lv.h"
1213#include "game/mplayer/ingame.h"
1314#include "game/playermgr.h"
1415#include "game/stagetable.h"
@@ -702,7 +703,9 @@ void eyespyProcessInput(bool allowbuttons)
702703 s8 c1sticky = joyGetStickY (contpad1 );
703704 s8 c2sticky ;
704705 u32 c1buttons = allowbuttons ? joyGetButtons (contpad1 , 0xffffffff ) : 0 ;
706+ u32 c1buttonsthisframe = allowbuttons ? joyGetButtonsPressedThisFrame (contpad1 , 0xffffffff ): 0 ;
705707 u32 c2buttons ;
708+ u32 c2buttonsthisframe ;
706709 bool domovecentre = true;
707710 s32 controlmode = optionsGetControlMode (g_Vars .currentplayerstats -> mpindex );
708711
@@ -722,6 +725,7 @@ void eyespyProcessInput(bool allowbuttons)
722725 f32 tmp ;
723726 u32 umask , dmask , lmask , rmask ;
724727
728+ bool pausepressed ;
725729 if (controlmode == CONTROLMODE_PC ) {
726730 umask = U_CBUTTONS ;
727731 dmask = D_CBUTTONS ;
@@ -740,6 +744,7 @@ void eyespyProcessInput(bool allowbuttons)
740744 c2sticky = joyGetStickY (contpad2 );
741745
742746 c2buttons = allowbuttons ? joyGetButtons (contpad2 , 0xffffffff ) : 0 ;
747+ c2buttonsthisframe = allowbuttons ? joyGetButtonsPressedThisFrame (contpad2 , 0xffffffff ) : 0 ;
743748 } else {
744749#ifndef PLATFORM_N64
745750 if (controlmode == CONTROLMODE_PC ) {
@@ -753,25 +758,27 @@ void eyespyProcessInput(bool allowbuttons)
753758 }
754759#endif
755760 c2buttons = c1buttons ;
761+ c2buttonsthisframe = c1buttonsthisframe ;
756762 }
757763
764+ pausepressed = c1buttonsthisframe & START_BUTTON ;
758765 if (controlmode == CONTROLMODE_13 || controlmode == CONTROLMODE_14 ) {
759766 aimpressed = c1buttons & Z_TRIG ;
760767 shootpressed = c1buttons & A_BUTTON ;
761- exitpressed = c1buttons & R_TRIG ;
762- activatepressed = c1buttons & B_BUTTON ;
768+ exitpressed = c1buttonsthisframe & R_TRIG ;
769+ activatepressed = c1buttonsthisframe & B_BUTTON ;
763770 } else if (controlmode <= CONTROLMODE_14 || controlmode == CONTROLMODE_PC ) {
764771 aimpressed = c1buttons & (R_TRIG );
765772 shootpressed = c1buttons & Z_TRIG ;
766773#ifndef PLATFORM_N64
767774 if (controlmode == CONTROLMODE_PC ) {
768- exitpressed = c1buttons & (BUTTON_WPNBACK | BUTTON_RADIAL );
769- activatepressed = c1buttons & (BUTTON_CANCEL_USE | BUTTON_ACCEPT_USE );
775+ exitpressed = c1buttonsthisframe & (BUTTON_WPNBACK | BUTTON_RADIAL );
776+ activatepressed = c1buttonsthisframe & (BUTTON_CANCEL_USE | BUTTON_ACCEPT_USE );
770777 } else
771778#endif
772779 {
773- exitpressed = (c1buttons | c2buttons ) & A_BUTTON ;
774- activatepressed = (c1buttons | c2buttons ) & B_BUTTON ;
780+ exitpressed = (c1buttonsthisframe | c2buttonsthisframe ) & A_BUTTON ;
781+ activatepressed = (c1buttonsthisframe | c2buttonsthisframe ) & B_BUTTON ;
775782 }
776783 } else {
777784 if (controlmode >= CONTROLMODE_23 ) {
@@ -782,8 +789,8 @@ void eyespyProcessInput(bool allowbuttons)
782789 shootpressed = c1buttons & Z_TRIG ;
783790 }
784791
785- exitpressed = (c1buttons | c2buttons ) & A_BUTTON ;
786- activatepressed = (c1buttons | c2buttons ) & B_BUTTON ;
792+ exitpressed = (c1buttonsthisframe | c2buttonsthisframe ) & A_BUTTON ;
793+ activatepressed = (c1buttonsthisframe | c2buttonsthisframe ) & B_BUTTON ;
787794 }
788795
789796 // Apply safe zone for c1stickx
@@ -932,7 +939,7 @@ void eyespyProcessInput(bool allowbuttons)
932939 && g_Vars .currentplayer -> pausemode == PAUSEMODE_UNPAUSED
933940 && (c1buttons & START_BUTTON )) {
934941 if (!g_Vars .mplayerisrunning ) {
935- playerPause (MENUROOT_MAINMENU );
942+ playerStartPause (MENUROOT_MAINMENU );
936943 } else {
937944 mpPushPauseDialog ();
938945 }
@@ -1187,33 +1194,49 @@ void eyespyProcessInput(bool allowbuttons)
11871194 return ;
11881195 }
11891196
1190- // Handle trigger
1191- if (g_Vars .currentplayer -> eyespy -> camerashuttertime <= 0 && shootpressed && g_Vars .currentplayer -> eyespy -> active ) {
1192- if (g_Vars .currentplayer -> eyespy -> camerabuttonheld == false) {
1193- g_Vars .currentplayer -> eyespy -> camerabuttonheld = true;
1194- g_Vars .currentplayer -> eyespy -> camerashuttertime = TICKS (24 );
1197+ // handle pause menu
1198+ if (!g_Vars .currentplayer -> pausemode ) {
1199+ if (g_Vars .currentplayer -> eyespy -> active && !g_Vars .currentplayer -> isdead ) {
1200+ if (!( g_Vars .currentplayer -> pausemode & (PAUSEMODE_PAUSED | PAUSEMODE_PAUSING ) ) && (pausepressed )) {
1201+ if (g_Vars .mplayerisrunning == false) {
1202+ if (g_Vars .lvframenum > 15 ) {
1203+ playerStartPause (MENUROOT_MAINMENU );
1204+ }
1205+ } else {
1206+ mpPushPauseDialog ();
1207+ }
1208+ }
1209+
1210+ }
1211+ // Handle trigger
1212+ if (g_Vars .currentplayer -> eyespy -> camerashuttertime <= 0 && shootpressed && g_Vars .currentplayer -> eyespy -> active ) {
1213+ if (g_Vars .currentplayer -> eyespy -> camerabuttonheld == false) {
1214+ g_Vars .currentplayer -> eyespy -> camerabuttonheld = true;
1215+ g_Vars .currentplayer -> eyespy -> camerashuttertime = TICKS (24 );
1216+ }
1217+ } else {
1218+ g_Vars .currentplayer -> eyespy -> camerabuttonheld = false;
11951219 }
1196- } else {
1197- g_Vars .currentplayer -> eyespy -> camerabuttonheld = false;
1198- }
11991220
1200- // Handle exit
1201- if (exitpressed && g_Vars .currentplayer -> eyespy -> active ) {
1202- g_Vars .currentplayer -> eyespy -> active = false;
1203- g_Vars .currentplayer -> devicesactive &= ~DEVICE_EYESPY ;
1204- }
1221+ // Handle exit
1222+ if (exitpressed && g_Vars .currentplayer -> eyespy -> active ) {
1223+ g_Vars .currentplayer -> eyespy -> active = false;
1224+ g_Vars .currentplayer -> devicesactive &= ~DEVICE_EYESPY ;
1225+ }
12051226
1206- // Handle B button activation
1207- if (activatepressed && g_Vars .currentplayer -> eyespy -> active ) {
1208- if (g_Vars .currentplayer -> eyespy -> buttonheld == false) {
1209- g_Vars .currentplayer -> eyespy -> buttonheld = true;
1210- g_Vars .currentplayer -> eyespy -> opendoor = true;
1227+ // Handle B button activation
1228+ // but only if not in a pause-like state
1229+ if (activatepressed && g_Vars .currentplayer -> eyespy -> active ) {
1230+ if (g_Vars .currentplayer -> eyespy -> buttonheld == false) {
1231+ g_Vars .currentplayer -> eyespy -> buttonheld = true;
1232+ g_Vars .currentplayer -> eyespy -> opendoor = true;
1233+ } else {
1234+ g_Vars .currentplayer -> eyespy -> opendoor = false;
1235+ }
12111236 } else {
12121237 g_Vars .currentplayer -> eyespy -> opendoor = false;
1238+ g_Vars .currentplayer -> eyespy -> buttonheld = false;
12131239 }
1214- } else {
1215- g_Vars .currentplayer -> eyespy -> opendoor = false;
1216- g_Vars .currentplayer -> eyespy -> buttonheld = false;
12171240 }
12181241
12191242 g_Vars .currentplayer -> eyespy -> hit = g_EyespyHit ;
0 commit comments