2019-08-27 06:08:18 +00:00
//-------------------------------------------------------------------------
/*
Copyright ( C ) 2010 EDuke32 developers and contributors
This file is part of EDuke32 .
EDuke32 is free software ; you can redistribute it and / or
modify it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
See the GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*/
//-------------------------------------------------------------------------
2019-11-22 23:11:37 +00:00
# include "ns.h"
2019-08-27 06:08:18 +00:00
# include "compat.h"
# include "build.h"
2019-08-31 09:08:38 +00:00
# include "common.h"
2019-08-27 06:08:18 +00:00
# include "exhumed.h"
2020-07-11 23:22:43 +00:00
# include "player.h"
2019-11-26 15:37:47 +00:00
# include "view.h"
2020-01-28 10:20:30 +00:00
# include "mapinfo.h"
2020-08-22 18:34:58 +00:00
# include "aistuff.h"
2020-08-22 19:13:11 +00:00
# include "ps_input.h"
# include "cheathandler.h"
2020-08-29 15:49:15 +00:00
# include "gamestate.h"
2019-08-27 06:08:18 +00:00
2019-11-22 23:11:37 +00:00
BEGIN_PS_NS
2020-08-22 19:13:11 +00:00
static int osdcmd_god ( CCmdFuncPtr )
2020-01-06 21:03:16 +00:00
{
if ( ! nNetPlayerCount & & ! bInDemo )
{
2020-08-22 19:13:11 +00:00
lLocalCodes | = kButtonCheatGodMode ;
2020-01-06 21:03:16 +00:00
}
else
2020-04-11 21:45:45 +00:00
Printf ( " god: Not in a single-player game. \n " ) ;
2020-01-06 21:03:16 +00:00
2020-07-14 12:00:27 +00:00
return CCMD_OK ;
2020-01-06 21:03:16 +00:00
}
2020-08-22 19:13:11 +00:00
bool SlipCheat ( cheatseq_t * c ) ;
2020-01-06 21:03:16 +00:00
2020-08-22 19:13:11 +00:00
static int osdcmd_noclip ( CCmdFuncPtr )
{
2020-01-06 21:03:16 +00:00
if ( ! nNetPlayerCount & & ! bInDemo )
{
2020-08-22 19:13:11 +00:00
SlipCheat ( nullptr ) ;
2020-01-06 21:03:16 +00:00
}
else
{
2020-04-11 21:45:45 +00:00
Printf ( " noclip: Not in a single-player game. \n " ) ;
2020-01-06 21:03:16 +00:00
}
2020-07-14 12:00:27 +00:00
return CCMD_OK ;
2020-01-06 21:03:16 +00:00
}
2020-04-11 22:04:02 +00:00
static int osdcmd_map ( CCmdFuncPtr parm )
2020-01-28 10:20:30 +00:00
{
if ( parm - > numparms ! = 1 )
{
2020-07-14 12:00:27 +00:00
return CCMD_SHOWHELP ;
2020-01-28 10:20:30 +00:00
}
2020-01-30 19:25:52 +00:00
FString mapname = parm - > parms [ 0 ] ;
2020-07-26 21:59:29 +00:00
FString mapfilename = mapname ;
DefaultExtension ( mapfilename , " .map " ) ;
2020-01-30 19:25:52 +00:00
2020-08-21 05:11:02 +00:00
if ( ! fileSystem . FileExists ( mapfilename ) )
2020-01-28 10:20:30 +00:00
{
2020-07-26 21:59:29 +00:00
Printf ( TEXTCOLOR_RED " map: file \" %s \" not found. \n " , mapfilename . GetChars ( ) ) ;
2020-07-14 12:00:27 +00:00
return CCMD_OK ;
2020-01-28 10:20:30 +00:00
}
// Check if the map is already defined.
2020-08-30 19:45:21 +00:00
auto map = FindMapByName ( mapname ) ;
if ( map )
2020-01-28 10:20:30 +00:00
{
2020-08-30 19:45:21 +00:00
GameAction = map - > levelNumber ;
2020-01-28 10:20:30 +00:00
}
2020-07-14 12:00:27 +00:00
return CCMD_OK ;
2020-01-28 10:20:30 +00:00
}
2020-04-11 22:04:02 +00:00
static int osdcmd_changelevel ( CCmdFuncPtr parm )
2020-01-06 21:03:16 +00:00
{
char * p ;
2020-07-14 12:00:27 +00:00
if ( parm - > numparms ! = 1 ) return CCMD_SHOWHELP ;
2020-01-06 21:03:16 +00:00
int nLevel = strtol ( parm - > parms [ 0 ] , & p , 10 ) ;
2020-07-14 12:00:27 +00:00
if ( p [ 0 ] ) return CCMD_SHOWHELP ;
2020-01-06 21:03:16 +00:00
2020-07-14 12:00:27 +00:00
if ( nLevel < 0 ) return CCMD_SHOWHELP ;
2020-01-06 21:03:16 +00:00
int nMaxLevels ;
if ( ! ISDEMOVER ) {
nMaxLevels = 32 ;
}
else {
nMaxLevels = 4 ;
}
if ( nLevel > nMaxLevels )
{
2020-04-11 21:45:45 +00:00
Printf ( " changelevel: invalid level number \n " ) ;
2020-07-14 12:00:27 +00:00
return CCMD_SHOWHELP ;
2020-01-06 21:03:16 +00:00
}
2020-08-23 10:26:52 +00:00
GameAction = nLevel ;
2020-01-06 21:03:16 +00:00
2020-07-14 12:00:27 +00:00
return CCMD_OK ;
2020-01-06 21:03:16 +00:00
}
2020-07-11 23:22:43 +00:00
static int osdcmd_warptocoords ( CCmdFuncPtr parm )
{
2020-08-04 12:33:17 +00:00
if ( parm - > numparms < 3 | | parm - > numparms > 5 )
2020-08-04 08:04:44 +00:00
return CCMD_SHOWHELP ;
2020-07-11 23:22:43 +00:00
Player * nPlayer = & PlayerList [ nLocalPlayer ] ;
spritetype * pSprite = & sprite [ nPlayer - > nSprite ] ;
nPlayer - > opos . x = pSprite - > x = atoi ( parm - > parms [ 0 ] ) ;
nPlayer - > opos . y = pSprite - > y = atoi ( parm - > parms [ 1 ] ) ;
nPlayer - > opos . z = pSprite - > z = atoi ( parm - > parms [ 2 ] ) ;
2020-08-04 13:13:22 +00:00
if ( parm - > numparms > = 4 )
2020-08-04 12:33:17 +00:00
{
2020-09-01 13:00:35 +00:00
nPlayer - > q16angle = IntToFixed ( atoi ( parm - > parms [ 3 ] ) ) ;
2020-08-04 12:33:17 +00:00
}
if ( parm - > numparms = = 5 )
{
2020-09-01 13:00:35 +00:00
nPlayer - > q16horiz = IntToFixed ( atoi ( parm - > parms [ 4 ] ) ) ;
2020-08-04 12:33:17 +00:00
}
2020-07-11 23:22:43 +00:00
2020-08-04 08:04:44 +00:00
return CCMD_OK ;
2020-07-11 23:22:43 +00:00
}
2019-08-27 06:08:18 +00:00
2020-08-22 18:34:58 +00:00
static int osdcmd_exitmap ( CCmdFuncPtr parm )
2019-08-27 06:08:18 +00:00
{
2020-08-22 18:34:58 +00:00
EndLevel = true ;
return CCMD_OK ;
}
2019-08-27 06:08:18 +00:00
2020-08-22 18:34:58 +00:00
static int osdcmd_doors ( CCmdFuncPtr parm )
{
for ( int i = 0 ; i < kMaxChannels ; i + + )
{
// CHECKME - does this toggle?
if ( sRunChannels [ i ] . c = = 0 ) {
runlist_ChangeChannel ( i , 1 ) ;
}
else {
runlist_ChangeChannel ( i , 0 ) ;
}
}
return CCMD_OK ;
}
2019-08-27 06:08:18 +00:00
2020-08-22 18:34:58 +00:00
extern int initx ;
extern int inity ;
extern int initz ;
extern short inita ;
extern short initsect ;
2019-08-27 06:08:18 +00:00
2020-08-22 18:34:58 +00:00
static int osdcmd_spawn ( CCmdFuncPtr parm )
{
if ( parm - > numparms ! = 1 ) return CCMD_SHOWHELP ;
auto c = parm - > parms [ 0 ] ;
if ( ! stricmp ( c , " anubis " ) ) BuildAnubis ( - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita , false ) ;
else if ( ! stricmp ( c , " spider " ) ) BuildSpider ( - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita ) ;
else if ( ! stricmp ( c , " mummy " ) ) BuildMummy ( - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita ) ;
else if ( ! stricmp ( c , " fish " ) ) BuildFish ( - 1 , initx , inity , initz + eyelevel [ nLocalPlayer ] , initsect , inita ) ;
else if ( ! stricmp ( c , " lion " ) ) BuildLion ( - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita ) ;
else if ( ! stricmp ( c , " lava " ) ) BuildLava ( - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita , nNetPlayerCount ) ;
else if ( ! stricmp ( c , " rex " ) ) BuildRex ( - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita , nNetPlayerCount ) ;
else if ( ! stricmp ( c , " set " ) ) BuildSet ( - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita , nNetPlayerCount ) ;
else if ( ! stricmp ( c , " queen " ) ) BuildQueen ( - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita , nNetPlayerCount ) ;
else if ( ! stricmp ( c , " roach " ) ) BuildRoach ( 0 , - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita ) ;
else if ( ! stricmp ( c , " roach2 " ) ) BuildRoach ( 1 , - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita ) ;
else if ( ! stricmp ( c , " wasp " ) ) BuildWasp ( - 1 , initx , inity , sector [ initsect ] . floorz - 25600 , initsect , inita ) ;
else if ( ! stricmp ( c , " scorp " ) ) BuildScorp ( - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita , nNetPlayerCount ) ;
else if ( ! stricmp ( c , " rat " ) ) BuildRat ( - 1 , initx , inity , sector [ initsect ] . floorz , initsect , inita ) ;
else Printf ( " Unknown creature type %s \n " , c ) ;
return CCMD_OK ;
}
2019-08-27 06:08:18 +00:00
2020-08-29 15:49:15 +00:00
static int osdcmd_third_person_view ( CCmdFuncPtr parm )
{
if ( gamestate ! = GS_LEVEL | | System_WantGuiCapture ( ) ) return CCMD_OK ;
if ( ! nFreeze )
{
if ( bCamera ) {
bCamera = false ;
}
else {
bCamera = true ;
}
2019-08-27 06:08:18 +00:00
2020-08-29 15:49:15 +00:00
if ( bCamera )
GrabPalette ( ) ;
}
return CCMD_OK ;
}
static int osdcmd_noop ( CCmdFuncPtr parm )
{
// this is for silencing key bindings only.
return CCMD_OK ;
}
2019-08-27 06:08:18 +00:00
2020-08-22 18:34:58 +00:00
int32_t registerosdcommands ( void )
{
//if (VOLUMEONE)
2020-08-30 19:07:00 +00:00
C_RegisterFunction ( " levelwarp " , " levelwarp <level>: warps to the given level " , osdcmd_changelevel ) ;
2020-08-22 18:34:58 +00:00
C_RegisterFunction ( " map " , " map <mapname>: loads the given map " , osdcmd_map ) ;
C_RegisterFunction ( " exitmap " , " exits current map " , osdcmd_exitmap ) ;
C_RegisterFunction ( " doors " , " opens/closes doors " , osdcmd_doors ) ;
C_RegisterFunction ( " god " , " god: toggles god mode " , osdcmd_god ) ;
C_RegisterFunction ( " noclip " , " noclip: toggles clipping mode " , osdcmd_noclip ) ;
C_RegisterFunction ( " spawn " , " spawn <creaturetype>: spawns a creature " , osdcmd_spawn ) ;
2020-08-04 12:33:17 +00:00
C_RegisterFunction ( " warptocoords " , " warptocoords [x] [y] [z] [ang] (optional) [horiz] (optional): warps the player to the specified coordinates " , osdcmd_warptocoords ) ;
2020-08-29 15:49:15 +00:00
C_RegisterFunction ( " third_person_view " , " Switch to third person view " , osdcmd_third_person_view ) ;
C_RegisterFunction ( " coop_view " , " Switch player to view from in coop " , osdcmd_noop ) ;
C_RegisterFunction ( " show_weapon " , " Show opponents' weapons " , osdcmd_noop ) ;
2020-07-11 23:22:43 +00:00
2019-08-27 06:08:18 +00:00
return 0 ;
}
2019-08-31 09:08:38 +00:00
2019-11-22 23:11:37 +00:00
END_PS_NS