diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 1c974fa7a..a02242625 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1099,6 +1099,7 @@ void D_RegisterClientCommands(void) COM_AddCommand("weather", Command_Weather_f); COM_AddCommand("grayscale", Command_Grayscale_f); COM_AddCommand("goto", Command_Goto_f); + COM_AddCommand("angle", Command_Angle_f); CV_RegisterVar(&cv_renderhitbox); CV_RegisterVar(&cv_devmode_screen); @@ -2051,6 +2052,10 @@ void D_Cheat(INT32 playernum, INT32 cheat, ...) case CHEAT_SCORE: COPY(WRITEUINT32, UINT32); break; + + case CHEAT_ANGLE: + COPY(WRITEANGLE, angle_t); + break; } #undef COPY @@ -5790,6 +5795,16 @@ static void Got_Cheat(UINT8 **cp, INT32 playernum) break; } + case CHEAT_ANGLE: { + angle_t angle = READANGLE(*cp); + float anglef = FIXED_TO_FLOAT(AngleFixed(angle)); + + P_SetPlayerAngle(player, angle); + + CV_CheaterWarning(targetPlayer, va("angle = %d%s", (int)anglef, M_Ftrim(anglef))); + break; + } + case NUMBER_OF_CHEATS: break; } diff --git a/src/m_cheat.c b/src/m_cheat.c index dff5d27c2..d4e774f43 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -603,6 +603,17 @@ void Command_Goto_f(void) wayp->mobj->x, wayp->mobj->y, wayp->mobj->z); } +void Command_Angle_f(void) +{ + const float anglef = atof(COM_Argv(1)); + const angle_t angle = FixedAngle(FLOAT_TO_FIXED(anglef)); + + REQUIRE_CHEATS; + REQUIRE_INLEVEL; + + D_Cheat(consoleplayer, CHEAT_ANGLE, angle); +} + // // OBJECTPLACE (and related variables) // diff --git a/src/m_cheat.h b/src/m_cheat.h index a7a1c020c..d3c808d3e 100644 --- a/src/m_cheat.h +++ b/src/m_cheat.h @@ -37,6 +37,7 @@ typedef enum { CHEAT_DEVMODE, CHEAT_GIVEITEM, CHEAT_SCORE, + CHEAT_ANGLE, NUMBER_OF_CHEATS } cheat_t; @@ -84,6 +85,7 @@ void Command_Skynum_f(void); void Command_Weather_f(void); void Command_Grayscale_f(void); void Command_Goto_f(void); +void Command_Angle_f(void); #ifdef _DEBUG void Command_CauseCfail_f(void); #endif