/* ** Command & Conquer Renegade(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** 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, see . */ /*********************************************************************************************** *** Confidential - Westwood Studios *** *********************************************************************************************** * * * Project Name : Commando * * * * $Archive:: /Commando/Code/Commando/consolefunction.cpp $* * * * $Author:: Steve_t $* * * * $Modtime:: 10/13/02 10:13p $* * * * $Revision:: 339 $* * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #include "consolefunction.h" #include "console.h" #include "textdisplay.h" #include "combatgmode.h" #include "combat.h" #include "datasafe.h" #include "pscene.h" #include "playermanager.h" #include "ccamera.h" #include "debug.h" #include "level.h" #include "weaponmanager.h" #include "cnetwork.h" #include "ww3d.h" #include "miscutil.h" #include "smartgameobj.h" #include "weapons.h" #include "WWAudio.H" #include "wwprofile.h" //#include "gamesettings.h" #include "waypoint.h" #include "action.h" #include "gameobjmanager.h" #include "surfaceeffects.h" #include "gamedata.h" #include "damage.h" #include "radar.h" #include "assets.h" #include "animobj.h" #include "matpass.h" #include #include #include #include "objlibrary.h" #include "useroptions.h" #include "devoptions.h" #include "god.h" #include "playertype.h" #include "systemsettings.h" #include "spawn.h" #include "input.h" #include "pathfind.h" #include "waypath.h" #include "definitionclassids.h" #include "netinterface.h" #include "bandwidth.h" #include "statistics.h" #include "physaabtreecull.h" #include "gametype.h" #include "part_emt.h" #include "translatedb.h" #include "string_ids.h" #include "dx8renderer.h" #include "backgroundmgr.h" #include "dynamicphys.h" #include "humanphys.h" #include "vehiclephys.h" #include "objectives.h" #include "umbrasupport.h" #include "vehicle.h" #include "damageablestaticphys.h" #include "persistfactory.h" #include "wwphysids.h" #include "hud.h" #include "conversationmgr.h" #include "basecontroller.h" #include "building.h" #include "vendor.h" #include "texture.h" #include "rddesc.h" #include "combatchunkid.h" #include "dialogtests.h" #include "resource.h" #include "dx8wrapper.h" #include "sortingrenderer.h" #include "weathermgr.h" #include "mapmgr.h" #include "path.h" #include "sctextobj.h" #include "consolecommandevent.h" #include "hudinfo.h" #include "physresourcemgr.h" #include "cstextobj.h" #include "suicideevent.h" #include "godmodeevent.h" #include "serverfps.h" #include "warpevent.h" //#include "helptext.h" #include "ffactory.h" #include "dazzle.h" #include "renegadedialogmgr.h" #include "moneyevent.h" #include "scoreevent.h" #include "dlgmpingamechat.h" #include "playerterminal.h" #include "encyclopediamgr.h" #include "clientbboevent.h" #include "wheelvehicle.h" #include "trackedvehicle.h" #include "woldiags.h" #include "packetmgr.h" #include "requestkillevent.h" #include "csconsolecommandevent.h" #include "apppacketstats.h" #include "bandwidthgraph.h" #include "scexplosionevent.h" #include "bwbalance.h" #include "sbbomanager.h" #include "_globals.h" #include "registry.h" #include "vipmodeevent.h" #include "dx8rendererdebugger.h" #include "changeteamevent.h" #include "gamesideservercontrol.h" #include "autostart.h" #include "except.h" #include "slavemaster.h" #include "donateevent.h" #include "consolemode.h" #include "dlgcncpurchasemainmenu.h" #include "realcrc.h" #include "gamespyadmin.h" #include "gamespybanlist.h" #include "specialbuilds.h" #include "lightsolve.h" #include "lightsolvecontext.h" void ConsoleFunctionClass::Print( const char *format, ... ) { va_list arg_list; va_start (arg_list, format); StringClass string; string.Format_Args( format, arg_list ); if (Get_Text_Display()) { WWASSERT( Get_Text_Display() ); Get_Text_Display()->Print_System( string ); } ConsoleBox.Print(string.Peek_Buffer()); va_end (arg_list); } //---------------------------------------------------------------------------- // // DEVELOPMENT CONSOLE FUNCTIONS ONLY // Only present in Debug and Profile builds. // //---------------------------------------------------------------------------- #ifdef WWDEBUG /* ** Console Functions */ class BuildingStateConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "building_state"; } virtual const char * Get_Alias( void ) { return "bs"; } virtual const char * Get_Help( void ) { return "BUILDING_STATE - force all buildings to the given state"; } virtual void Activate( const char * input ) { int health_percentage,power; int cnt=sscanf(input, "%d %d", &health_percentage, &power); if (cnt == 2) { GameObjManager::Debug_Set_All_Building_States((float)health_percentage,(power==1)); Print("Building States set to Health = %d%%, Power = %d\n",health_percentage,power); } else { GameObjManager::Debug_Set_All_Building_States(100,1); GameObjManager::Debug_Set_All_Building_States(0,1); Print("Blew up all buildings!\n"); } } }; class DSAPOResetConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "dsapo_reset"; } virtual const char * Get_Help( void ) { return "DSAPO_RESET - force all DSAPO's back to their initial state."; } virtual void Activate( const char * input ) { if (COMBAT_SCENE) { RefPhysListIterator it = COMBAT_SCENE->Get_Static_Anim_Object_Iterator(); for (it.First();!it.Is_Done();it.Next()) { if (it.Peek_Obj()->Get_Factory().Chunk_ID() == PHYSICS_CHUNKID_DAMAGEABLESTATICPHYS) { DamageableStaticPhysClass * dobj = (DamageableStaticPhysClass *)it.Peek_Obj(); dobj->Reset_Health(); } } } int health_percentage,power; int cnt=sscanf(input, "%d %d", &health_percentage, &power); if (cnt == 2) { GameObjManager::Debug_Set_All_Building_States((float)health_percentage,(power==1)); Print("Building States set to Health = %d%%, Power = %d\n",health_percentage,power); } else { GameObjManager::Debug_Set_All_Building_States(100,1); GameObjManager::Debug_Set_All_Building_States(0,1); Print("Blew up all buildings!\n"); } } }; class HUDConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "hud"; } virtual const char * Get_Help( void ) { return "HUD - toggles the HUD."; } virtual void Activate( const char * input ) { HUDClass::Enable( !HUDClass::Is_Enabled() ); Print( "HUD toggled\n" ); } }; class PatsDebugConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "pat"; } virtual const char * Get_Help( void ) { return "PAT - Pat's generic debug console function."; } virtual void Activate( const char * input ) { RenegadeDialogMgrClass::Goto_Location (RenegadeDialogMgrClass::LOC_INTERNET_MAIN); return ; } }; class TextureMemoryCounterConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "texture_memory_counter"; } virtual const char * Get_Help( void ) { return "TEXTURE_MEMORY_COUNTER - 0=off 1=on 2=details"; } virtual void Activate( const char * input ) { Debug_Statistics::RecordTextureMode b; if (sscanf(input, "%d", &b) == 1) { Debug_Statistics::Record_Texture_Mode(b); } } }; class MeshDebuggerEnableConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "mesh_debugger_enable"; } virtual const char * Get_Help( void ) { return "MESH_DEBUGGER_ENABLE - 0=off 1=on"; } virtual void Activate( const char * input ) { unsigned onoff; if (sscanf(input, "%d", &onoff) == 1) { DX8RendererDebugger::Enable(!!onoff); } } }; class MeshDebuggerEnableMeshConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "mesh_debugger_enable_mesh"; } virtual const char * Get_Help( void ) { return "MESH_DEBUGGER_ENABLE_MESH - id0 ... id9"; } virtual void Activate( const char * input ) { // Parameter '*' means ALL meshes char string[200]; sscanf(input, "%s", string); if (!stricmp("*",string)) { DX8RendererDebugger::Enable_All(); } else { unsigned id[10]; unsigned count=sscanf(input, "%d %d %d %d %d %d %d %d %d %d", &id[0], &id[1], &id[2], &id[3], &id[4], &id[5], &id[6], &id[7], &id[8], &id[9]); for (unsigned i=0;i <0/1> - sets texture flashing"; } virtual void Activate( const char * input ) { #ifdef WW3D_DX8 int id,state; int cnt=sscanf(input, "%d %d", &id, &state); TextureFileClass* tfc=NULL; if (cnt>=1) tfc=TextureFileClass::Get_Texture(id); if (tfc) { if (cnt==1) { state=!tfc->Get_Texture_Flash(); tfc->Set_Texture_Flash(!!state); } else if (cnt==2) { tfc->Set_Texture_Flash(!!state); } StringClass tmp; if (state) { tmp.Format("Texture %s (id=%d) set FLASHING\n",tfc->Get_File_Name(),tfc->ID()); } else { tmp.Format("Texture %s (id=%d) set not flashing\n",tfc->Get_File_Name(),tfc->ID()); } Print(tmp); } #endif //WW3D_DX8 } }; class FogRangeConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "fog_range"; } virtual const char * Get_Help( void ) { return "FOG_RANGE [ramptime [0+]] - Sets fog range.";} virtual void Activate( const char * input ) { const char *feedbackstring = "Fog range changed\n"; int argcount; float arg0, arg1, arg2; bool success = false; argcount = sscanf (input, "%f %f %f", &arg0, &arg1, &arg2); switch (argcount) { case 2: success = WeatherMgrClass::Set_Fog_Range (arg0, arg1); break; case 3: success = WeatherMgrClass::Set_Fog_Range (arg0, arg1, arg2); break; default: // Do nothing. break; } if (success) Print (feedbackstring); } }; class FogToggleConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) { return "fog_toggle"; } virtual const char * Get_Help (void) { return "FOG_TOGGLE - toggles fog on/off."; } virtual void Activate (const char *input) { const char *_statusstring [2] = {"Fog disabled\n", "Fog enabled\n"}; WeatherMgrClass::Set_Fog_Enable (!WeatherMgrClass::Get_Fog_Enable()); Print (_statusstring [WeatherMgrClass::Get_Fog_Enable()]); } }; class LightModeConsoleFunctionClass : public ConsoleFunctionClass { virtual const char * Get_Name (void) { return "light_mode"; } virtual const char * Get_Help (void) { return "LIGHT_MODE <0,1,2> - 0=none, 1=surrender, 2=cheap."; } virtual void Activate (const char *input) { int mode; if (sscanf(input, "%d", &mode) == 1) { COMBAT_SCENE->Set_Lighting_Mode(mode); } switch(COMBAT_SCENE->Get_Lighting_Mode()) { case PhysicsSceneClass::LIGHTING_MODE_SURRENDER: Print ("Lighting Mode: SURRENDER"); break; case PhysicsSceneClass::LIGHTING_MODE_CHEAP: Print ("Lighting Mode: CHEAP"); break; default: Print ("Lighting Mode: NONE"); break; } } }; class LightDebugToggleConsoleFunctionClass : public ConsoleFunctionClass { virtual const char * Get_Name (void) { return "light_debug"; } virtual const char * Get_Help (void) { return "LIGHT_DEBUG - toggles lighting debugging on/off."; } virtual void Activate (const char *input) { COMBAT_SCENE->Enable_Lighting_Debug_Display(!COMBAT_SCENE->Is_Lighting_Debug_Display_Enabled()); if (COMBAT_SCENE->Is_Lighting_Debug_Display_Enabled()) { Print ("Lighting debug display ENABLED"); } else { Print ("Lighting debug display DISABLED"); } } }; class LightLODConsoleFunctionClass : public ConsoleFunctionClass { virtual const char * Get_Name (void) { return "light_lod"; } virtual const char * Get_Help (void) { return "LIGHT_LOD - sets the LOD cutoff for lighting."; } virtual void Activate (const char *input) { float inten; if (sscanf(input, "%f", &inten) == 1) { COMBAT_SCENE->Set_Lighting_LOD_Cutoff(inten); } Print("Lighting LOD: %d\r\n",COMBAT_SCENE->Get_Lighting_LOD_Cutoff()); } }; class LightCalcConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "light_calc"; } virtual const char * Get_Help( void ) { return "LIGHT_CALC - computes a static vertex lighting solve"; } virtual void Activate( const char * input ) { if (COMBAT_SCENE) { LightSolveContextClass context; LightSolveClass::Generate_Static_Light_Solve(context); } } }; class CameraConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "camera"; } virtual const char * Get_Help( void ) { return "CAMERA - switches to camera profile ."; } virtual void Activate( const char * input ) { if ( COMBAT_CAMERA ) { COMBAT_CAMERA->Use_Profile( input ); Print( "Profile Changed\n" ); } } }; class VisConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "vis_toggle"; } virtual const char * Get_Help( void ) { return "VIS_TOGGLE - toggles vis culling."; } virtual void Activate( const char * input ) { COMBAT_SCENE->Enable_Vis(!COMBAT_SCENE->Is_Vis_Enabled()); if (COMBAT_SCENE->Is_Vis_Enabled()) { Print("vis enabled\n"); } else { Print("vis disabled\n"); } } }; class VisInvertConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "vis_invert"; } virtual const char * Get_Help( void ) { return "VIS_INVERT - toggles vis invert setting."; } virtual void Activate( const char * input ) { COMBAT_SCENE->Invert_Vis(!COMBAT_SCENE->Is_Vis_Inverted()); if (COMBAT_SCENE->Is_Vis_Inverted()) { Print("vis_invert enabled\n"); } else { Print("vis_invert disabled\n"); } } }; class VisGridDisplayConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "vis_grid_display"; } virtual const char * Get_Help( void ) { return "VIS_GRID_DISPLAY <0,1,2,3> - 0=off, 1=boxes, 2=centers, 3=occupied."; } virtual void Activate( const char * input ) { int mode = 0; if (sscanf(input, "%d", &mode) == 1) { COMBAT_SCENE->Set_Vis_Grid_Display_Mode(mode); if (mode == 0) { Print("vis_grid_display off\n"); } else if (mode == 1) { Print("vis_grid_display boxes\n"); } else if (mode == 2) { Print("vis_grid_display centers\n"); } else if (mode == 3) { Print("vis_grid_display occupied\n"); } } } }; class VisGridDebugConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "vis_grid_debug"; } virtual const char * Get_Help( void ) { return "VIS_GRID_DEBUG - p=parent,s=sibling,f=front,b=back,r=reset"; } virtual void Activate( const char * input ) { char mode = 0; if (sscanf(input, "%c", &mode) == 1) { mode = toupper(mode); if (mode == 'P') { if (COMBAT_SCENE->Vis_Grid_Debug_Enter_Parent()) { Print("Entered parent node\n"); } else { Print("No parent node\n"); } } else if (mode == 'S') { if (COMBAT_SCENE->Vis_Grid_Debug_Enter_Sibling()) { Print("Entered sibling\n"); } else { Print("No sibling\n"); } } else if (mode == 'F') { if (COMBAT_SCENE->Vis_Grid_Debug_Enter_Front_Child()) { Print("Entered front child\n"); } else { Print("No front child\n"); } } else if (mode == 'B') { if (COMBAT_SCENE->Vis_Grid_Debug_Enter_Back_Child()) { Print("Entered back child\n"); } else { Print("No back child\n"); } } else if (mode == 'R') { COMBAT_SCENE->Vis_Grid_Debug_Reset_Node(); Print("Reset to root\n"); } } } }; class VisHierarchicalConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "vis_hierarchical"; } virtual const char * Get_Help( void ) { return "VIS_HIERARCHICAL - toggles hierarchical vis culling."; } virtual void Activate( const char * input ) { PhysAABTreeCullClass::Enable_Hierarchical_Vis_Culling(!PhysAABTreeCullClass::Is_Hierarchical_Vis_Culling_Enabled()); if (PhysAABTreeCullClass::Is_Hierarchical_Vis_Culling_Enabled()) { Print("hierarchical vis culling enabled\n"); } else { Print("hierarchical vis culling disabled\n"); } } }; class VisLockConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "vis_lock_sample_point"; } virtual const char * Get_Help( void ) { return "VIS_LOCK_SAMPLE_POINT - locks/unlocks the current pvs."; } virtual void Activate( const char * input ) { COMBAT_SCENE->Lock_Vis_Sample_Point(!COMBAT_SCENE->Is_Vis_Sample_Point_Locked()); if (COMBAT_SCENE->Is_Vis_Sample_Point_Locked()) { Print("Vis sample point locked.\n"); } else { Print("Vis sample point unlocked.\n"); } } }; class VisSectorDisplayConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "vis_sector_display"; } virtual const char * Get_Help( void ) { return "VIS_SECTOR_DISPLAY - toggles diplay of the current vis sector."; } virtual void Activate( const char * input ) { COMBAT_SCENE->Enable_Vis_Sector_Display(!COMBAT_SCENE->Is_Vis_Sector_Display_Enabled()); if (COMBAT_SCENE->Is_Vis_Sector_Display_Enabled()) { Print("vis_sector_display enabled\n"); } else { Print("vis_sector_display disabled\n"); } } }; class VisSectorHistoryConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "vis_sector_history"; } virtual const char * Get_Help( void ) { return "VIS_SECTOR_HISTORY - toggles diplay of the previous 3 vis sectors."; } virtual void Activate( const char * input ) { COMBAT_SCENE->Enable_Vis_Sector_History_Display(!COMBAT_SCENE->Is_Vis_Sector_History_Display_Enabled()); if (COMBAT_SCENE->Is_Vis_Sector_History_Display_Enabled()) { Print("vis_sector_history enabled\n"); } else { Print("vis_sector_history disabled\n"); } } }; class SuicideConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "suicide"; } virtual const char * Get_Help( void ) { return "SUICIDE - kill your commando."; } virtual void Activate( const char * input ) { if (cNetwork::I_Am_Client()) { Print("Committing suicide.\n"); cSuicideEvent * p_suicide = new cSuicideEvent; p_suicide->Init(); } else { Print("Only clients can commit suicide.\n"); } } }; class ShadowAttenuationConsoleFunctionClass : public ConsoleFunctionClass { virtual const char * Get_Name( void ) { return "shadow_attenuation"; } virtual const char * Get_Help( void ) { return "SHADOW_ATTENUATION - set the attenuation ranges for shadows."; } virtual void Activate( const char * input ) { PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance(); float znear,zfar; if (sscanf(input, "%f %f",&znear,&zfar) == 2) { scene->Set_Shadow_Attenuation(znear,zfar); scene->Get_Shadow_Attenuation(&znear,&zfar); Print("shadow attenuation set to %f %f\n",znear,zfar); } } }; class ShadowBlobTextureConsoleFunctionClass : public ConsoleFunctionClass { virtual const char * Get_Name( void ) { return "shadow_blob_texture"; } virtual const char * Get_Help( void ) { return "SHADOW_BLOB_TEXTURE - sets the texture to use for blob shadows."; } virtual void Activate( const char * input ) { if (strlen(input) > 0) { if (PhysResourceMgrClass::Set_Shadow_Blob_Texture(input)) { Print("shadow blob texture set to: %s\n",input); } } } }; class ShadowElevationConsoleFunctionClass : public ConsoleFunctionClass { virtual const char * Get_Name( void ) { return "shadow_elevation"; } virtual const char * Get_Help( void ) { return "SHADOW_ELEVATION - sets the angle of the shadow projection."; } virtual void Activate( const char * input ) { /* ** NOTE: THIS IS JUST TEST CODE TO SEE HOW VARIOUS SHADOW ALGORITHMS ** WORK WITH VARIOUS SUN-LIGHT ANGLES. THE SUN IS NOT TO BE MOVED IN-GAME!!! */ PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance(); float elevation,rotation; scene->Get_Sun_Light_Orientation(&rotation,&elevation); if (sscanf(input, "%f",&elevation) == 1) { scene->Set_Sun_Light_Orientation(rotation,DEG_TO_RADF(elevation)); } } }; class ShadowIntensityConsoleFunctionClass : public ConsoleFunctionClass { virtual const char * Get_Name( void ) { return "shadow_intensity"; } virtual const char * Get_Help( void ) { return "SHADOW_INTENSITY - sets the darkness of dynamic shadows (0 - 1)."; } virtual void Activate( const char * input ) { PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance(); scene->Set_Shadow_Normal_Intensity(atof(input)); Print("shadow intensity set to: %f\n",scene->Get_Shadow_Normal_Intensity()); } }; class ShadowPerPolyCullingConsoleFunctionClass : public ConsoleFunctionClass { virtual const char * Get_Name( void ) { return "shadow_per_poly_culling"; } virtual const char * Get_Help( void ) { return "SHADOW_PER_POLY_CULLING - toggles per poly shadow culling."; } virtual void Activate( const char * input ) { MaterialPassClass::Enable_Per_Polygon_Culling(!MaterialPassClass::Is_Per_Polygon_Culling_Enabled()); if (MaterialPassClass::Is_Per_Polygon_Culling_Enabled()) { Print("per-polygon shadow culling enabled!\n"); } else { Print("per-polygon shadow culling disabled\n"); } } }; class ShadowResolutionConsoleFunctionClass : public ConsoleFunctionClass { virtual const char * Get_Name( void ) { return "shadow_resolution"; } virtual const char * Get_Help( void ) { return "SHADOW_RESOLUTION - sets the resolution of dynamic shadows (use a power of 2!)"; } virtual void Activate( const char * input ) { PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance(); scene->Set_Shadow_Resolution(atof(input)); Print("shadow resolution set to: %f\n",scene->Get_Shadow_Resolution()); } }; class ShadowCountConsoleFunctionClass : public ConsoleFunctionClass { virtual const char * Get_Name( void ) { return "shadow_count"; } virtual const char * Get_Help( void ) { return "SHADOW_COUNT - sets the maximum simultaneous shadows"; } virtual void Activate( const char * input ) { PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance(); scene->Set_Max_Simultaneous_Shadows(atof(input)); Print("simultaneous shadow count set to: %f\n",scene->Get_Max_Simultaneous_Shadows()); } }; class PhysicsDebugConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "physics_debug"; } virtual const char * Get_Help( void ) { return "PHYSICS_DEBUG - toggles physics debugging display."; } virtual void Activate( const char * input ) { COMBAT_SCENE->Enable_Debug_Display(!COMBAT_SCENE->Is_Debug_Display_Enabled()); if (COMBAT_SCENE->Is_Debug_Display_Enabled()) { Print("physics debug display enabled!\n"); } else { Print("physics debug display disabled :-(\n"); } } }; class Phys3NetConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "phys3_net"; } virtual const char * Get_Help( void ) { return "PHYS3_NET - sets the phys3 networking constants."; } virtual void Activate( const char * input ) { float corr_time,allow_error,pop_error; int params = sscanf(input, "%f %f %f",&allow_error,&pop_error,&corr_time); if (params == 3) { Phys3Class::Set_Allowable_Error(allow_error); Phys3Class::Set_Pop_Error(pop_error); Phys3Class::Set_Correction_Time(corr_time); } Print("Phys3 Network Params: allowable_error = %f\r\n",Phys3Class::Get_Allowable_Error()); Print("Phys3 Network Params: pop_error = %f\r\n",Phys3Class::Get_Pop_Error()); Print("Phys3 Network Params: correction_time = %f\r\n",Phys3Class::Get_Correction_Time()); } }; class RBodyNetConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "rbody_net"; } virtual const char * Get_Help( void ) { return "rbody_net - sets the rigid body correction time."; } virtual void Activate( const char * input ) { float corr_time; int params = sscanf(input, "%f",&corr_time ); if (params == 3) { RigidBodyClass::Set_Correction_Time(corr_time); } Print("Rigid Body Network Params: correction_time = %f\r\n",RigidBodyClass::Get_Correction_Time()); } }; class ProjectorDebugConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "projector_debug"; } virtual const char * Get_Help( void ) { return "PROJECTOR_DEBUG - toggles projector debugging display."; } virtual void Activate( const char * input ) { COMBAT_SCENE->Enable_Projector_Debug_Display(!COMBAT_SCENE->Is_Projector_Debug_Display_Enabled()); if (COMBAT_SCENE->Is_Projector_Debug_Display_Enabled()) { Print("projector debug display enabled!\n"); } else { Print("projector debug display disabled :-(\n"); } } }; class DirtyCullDebugConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "dirty_cull_debug"; } virtual const char * Get_Help( void ) { return "DIRTY_CULL_DEBUG - toggles debugging of the dirty-cull-list."; } virtual void Activate( const char * input ) { COMBAT_SCENE->Enable_Dirty_Cull_Debug_Display(!COMBAT_SCENE->Is_Dirty_Cull_Debug_Display_Enabled()); if (COMBAT_SCENE->Is_Dirty_Cull_Debug_Display_Enabled()) { Print("dirty cull debug display enabled!\n"); } else { Print("dirty cull debug display disabled.\n"); } } }; class NextRenderConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "next_render"; } virtual const char * Get_Help( void ) { return "NEXT_RENDER - switches to the next render device."; } virtual void Activate( const char * input ) { WW3D::Set_Next_Render_Device(); } }; class OneShotKillsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "one_shot_kills"; } virtual const char * Get_Alias( void ) { return "osk"; } virtual const char * Get_Help( void ) { return "ONE_SHOT_KILLS - kill or destroy with one shot. Server only."; } virtual void Activate( const char * input ) { if (cNetwork::I_Am_Server()) { bool osk = false; #ifdef WWDEBUG osk = DefenseObjectClass::Toggle_One_Shot_Kills(); #endif // WWDEBUG Print( "One Shot Kills: %s\n", osk ? "ON" : "OFF"); } else { Print(Get_Help()); } } }; class OpenConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "open"; } virtual const char * Get_Help( void ) { return "OPEN [regedit|logfile|ini ininame] - open specified object."; } virtual void Activate( const char * input ) { if (!stricmp(input, "regedit")) { cNetwork::Shell_Command("regedit"); } else if (!stricmp(input, "logfile")) { cNetwork::Shell_Command(DebugManager::Logfile_Name()); } else if (strstr(input, "ini")) { char filename[200]; sscanf(input, "ini %s", filename); char open_command[200]; sprintf(open_command, "data\\%s.ini", filename); cNetwork::Shell_Command(open_command); } else { Print(Get_Help()); } } }; class InvalidateMeshCacheConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "invalidate_mesh_cache"; } virtual const char * Get_Help( void ) { return "INVALIDATE_MESH_CACHE - invalidates all cached mesh data."; } virtual void Activate( const char * input ) { WW3D::_Invalidate_Mesh_Cache(); Print( "Mesh cache invalidated." ); } }; class InvalidateTexturesConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "invalidate_textures"; } virtual const char * Get_Help( void ) { return "INVALIDATE_TEXTURES - invalidates all textures."; } virtual void Activate( const char * input ) { WW3D::_Invalidate_Textures(); Print( "Textures invalidated." ); } }; class TexturingEnableConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "texturing_enable"; } virtual const char * Get_Help( void ) { return "TEXTURING_ENABLE toggle texturing."; } virtual void Activate( const char * input ) { WW3D::Enable_Texturing(!WW3D::Is_Texturing_Enabled()); Print( "Textures switched." ); } }; class ExposePrelitConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "expose_prelit"; } virtual const char * Get_Help( void ) { return "EXPOSE_PRELIT - expose precalculated lighting on meshes."; } virtual void Activate( const char * input ) { static char *_comment [2] = { "Unexposed prelit meshes\n", "Exposed prelit meshes\n" }; WW3D::Expose_Prelit (!WW3D::Expose_Prelit()); Print (_comment [WW3D::Expose_Prelit() ? 1 : 0]); } }; class PlayerPositionConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "player_position"; } //virtual const char * Get_Alias( void ) { return "pp"; } virtual const char * Get_Help( void ) { return "PLAYER_POSITION - toggles the players world position display."; } virtual void Activate( const char * input ) { Get_Console()->Toggle_Player_Position(); } }; class ToggleAssetPreloadingConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "toggle_preloading"; } virtual const char * Get_Help( void ) { return "TOGGLE_PRELOADING - toggles asset preloading."; } virtual void Activate( const char * input ) { bool is_preloading = cDevOptions::PreloadAssets.Toggle(); Print(is_preloading ? "Assets WILL preload.\n" : "Assets will NOT preload.\n" ); } }; class ToggleRenderingConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "toggle_rendering"; } virtual const char * Get_Help( void ) { return "TOGGLE_RENDERING - toggles rendering of various types."; } virtual void Activate( const char * input ) { /* ** Note: I'm only comparing the first two characters so the user doesn't have to type the whole thing */ if (_strnicmp(input,"st",2) == 0) { StaticPhysClass::Disable_All_Rendering(!StaticPhysClass::Is_All_Rendering_Disabled()); Print(StaticPhysClass::Is_All_Rendering_Disabled() ? "Static object rendering DISABLED" : "Static object rendering ENABLED"); } else if (_strnicmp(input,"dy",2) == 0) { DynamicPhysClass::Disable_All_Rendering(!DynamicPhysClass::Is_All_Rendering_Disabled()); Print(DynamicPhysClass::Is_All_Rendering_Disabled() ? "Dynamic object rendering DISABLED" : "Dynamic object rendering ENABLED"); } else if (_strnicmp(input,"hu",2) == 0) { HumanPhysClass::Disable_All_Rendering(!HumanPhysClass::Is_All_Rendering_Disabled()); Print(HumanPhysClass::Is_All_Rendering_Disabled() ? "Human object rendering DISABLED" : "Human object rendering ENABLED"); } else if (_strnicmp(input,"ve",2) == 0) { VehiclePhysClass::Disable_All_Rendering(!VehiclePhysClass::Is_All_Rendering_Disabled()); Print(VehiclePhysClass::Is_All_Rendering_Disabled() ? "Vehicle object rendering DISABLED" : "Vehicle object rendering ENABLED"); } } }; class ToggleSimulationConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "toggle_simulation"; } virtual const char * Get_Help( void ) { return "TOGGLE_SIMULATION - toggles rendering of various types."; } virtual void Activate( const char * input ) { /* ** Note: I'm only comparing the first two characters so the user doesn't have to type the whole thing */ if (_strnicmp(input,"st",2) == 0) { StaticPhysClass::Disable_All_Simulation(!StaticPhysClass::Is_All_Simulation_Disabled()); Print(StaticPhysClass::Is_All_Simulation_Disabled() ? "Static object Simulation DISABLED" : "Static object Simulation ENABLED"); } else if (_strnicmp(input,"dy",2) == 0) { DynamicPhysClass::Disable_All_Simulation(!DynamicPhysClass::Is_All_Simulation_Disabled()); Print(DynamicPhysClass::Is_All_Simulation_Disabled() ? "Dynamic object Simulation DISABLED" : "Dynamic object Simulation ENABLED"); } else if (_strnicmp(input,"hu",2) == 0) { HumanPhysClass::Disable_All_Simulation(!HumanPhysClass::Is_All_Simulation_Disabled()); Print(HumanPhysClass::Is_All_Simulation_Disabled() ? "Human object Simulation DISABLED" : "Human object Simulation ENABLED"); } else if (_strnicmp(input,"ve",2) == 0) { VehiclePhysClass::Disable_All_Simulation(!VehiclePhysClass::Is_All_Simulation_Disabled()); Print(VehiclePhysClass::Is_All_Simulation_Disabled() ? "Vehicle object Simulation DISABLED" : "Vehicle object Simulation ENABLED"); } } }; class TomConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "tom"; } virtual const char * Get_Help( void ) { return "TOM - Annoyance-reduction registry tweaks customized by Tom."; } virtual void Activate( const char * input ) { // // Enable a good level of diagnostics - all devices and types except // screen and netprolific // ConsoleFunctionManager::Parse_Input("debug_device on"); ConsoleFunctionManager::Parse_Input("debug_device screen"); ConsoleFunctionManager::Parse_Input("debug_type on"); ConsoleFunctionManager::Parse_Input("debug_type netprolific"); // // Set max scroll lines // if (Get_Text_Display()) { WWASSERT(Get_Text_Display() != NULL); Get_Text_Display()->Set_Max_Scroll_Lines(10); } // // Debug flags // //cDevOptions::ShowDiagnostics.Set(true); cDevOptions::PreloadAssets.Set(false); cDevOptions::ShowFps.Set(true); cDevOptions::ShowGodStatus.Set(true); cDevOptions::CompareExeVersionOnNetwork.Set(false); cDevOptions::CrtDbgEnabled.Set(false); cDevOptions::LogDataSafe.Set(false); cDevOptions::FilterLevelFiles.Set(false); cDevOptions::ShowThumbnailPreInitDialog.Set(false); // // Release flags // cUserOptions::ShowNamesOnSoldier.Set(true); cUserOptions::CameraLockedToTurret.Set(true); cUserOptions::SkipQuitConfirmDialog.Set(true); cUserOptions::SkipIngameQuitConfirmDialog.Set(true); cUserOptions::PermitDiagLogging.Set(false); // // Set 800 x 600, windowed mode // { RegistryClass registry(APPLICATION_SUB_KEY_NAME_RENDER); WWASSERT(registry.Is_Valid()); registry.Set_Int(VALUE_NAME_RENDER_DEVICE_WIDTH, 800); registry.Set_Int(VALUE_NAME_RENDER_DEVICE_HEIGHT, 600); registry.Set_Int(VALUE_NAME_RENDER_DEVICE_WINDOWED, TRUE); } /* // // Stop Jani from spying on us (avoid delay on exit) // { RegistryClass registry(APPLICATION_SUB_KEY_NAME_DEBUG); WWASSERT(registry.Is_Valid()); registry.Set_Int("SystemInfoLogDisable", TRUE); registry.Set_Int("DisableLogCopying", TRUE); } */ // // Default to third person // { RegistryClass registry(APPLICATION_SUB_KEY_NAME_OPTIONS); WWASSERT(registry.Is_Valid()); registry.Set_Int("DefaultToFirstPerson", FALSE); } // // Skip intro movies // { RegistryClass registry(APPLICATION_SUB_KEY_NAME_OPTIONS); WWASSERT(registry.Is_Valid()); registry.Set_Int("SkipAllIntroMovies", TRUE); } // // Do not require CD for movies // { RegistryClass registry(APPLICATION_SUB_KEY_NAME_DEBUG); WWASSERT(registry.Is_Valid()); registry.Set_Int("DisableCDCheck", TRUE); } // // Set gamma etc so that they don't screw up debugging // { RegistryClass registry(APPLICATION_SUB_KEY_NAME_SYSTEM_SETTINGS); WWASSERT(registry.Is_Valid()); registry.Set_Int("Gamma", 1); registry.Set_Int("Brightness", 0); registry.Set_Int("Contrast", 1); } } }; class RenderBoxesConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "render_boxes"; } virtual const char * Get_Help( void ) { return "RENDER_BOXES - enables rendering of boxes. 0=none 1=all 2=physical 4=projectile."; } virtual void Activate( const char * input ) { int mask = atoi(input); WW3D::Set_Collision_Box_Display_Mask(mask); } }; class AmbientLightConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "ambient_light"; } virtual const char * Get_Help( void ) { return "AMBIENT_LIGHT - sets the ambeint light color to ."; } virtual void Activate( const char * input ) { if ( COMBAT_SCENE ) { float r, g, b; if (sscanf(input, "%f %f %f", &r, &g, &b) == 3) { COMBAT_SCENE->Set_Ambient_Light(Vector3(r, g, b)); Print( "Ambient Light changed\n" ); } } else { Print( "Error : no COMBAT_SCENE\n" ); } } }; class VblankSyncConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "vblank_sync"; } virtual const char * Get_Help( void ) { return "VBLANK_SYNC - toggles vblank syncing"; } virtual void Activate( const char * input ) { if (WW3D::Get_Ext_Swap_Interval() == 0) { WW3D::Set_Ext_Swap_Interval(1); Print("Vblank syncing ENABLED!\n"); } else { WW3D::Set_Ext_Swap_Interval(0); Print("Vblank syncing DISABLED!\n"); } } }; class FrameTexturesConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "frame_textures"; } virtual const char * Get_Help( void ) { return "FRAME_TEXTURES - measures the amoutn of textures needed for the next frame."; } virtual void Activate( const char * input ) { DebugManager::Measure_Frame_Textures(); } }; class DebugObjectivesConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "objectives_debug"; } virtual const char * Get_Help( void ) { return "OBJECTIVES_DEBUG - toggles Mission Objectives debug mode."; } virtual void Activate( const char * input ) { bool enable_mode = !ObjectiveManager::Is_Objective_Debug_Mode_Enabled(); ObjectiveManager::Enable_Objective_Debug_Mode( enable_mode ); if (enable_mode) { Print( "Activating Mission Objectives Debug Mode.\n" ); } else { Print( "Deactivating Mission Objectives Debug Mode.\n" ); } } }; class FreeWeaponsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "free_weapons"; } virtual const char * Get_Help( void ) { return "FREE_WEAPONS - toggle free_weapons flag (server only)."; } virtual void Activate( const char * input ) { if (!cNetwork::I_Am_Server()) { Print("Only the server can toggle free-weapons.\n"); } else { WWASSERT(PTheGameData != NULL); bool on = The_Game()->IsFreeWeapons.Toggle(); Print("Free weapons is %s.\n", on ? "ON" : "OFF"); if (on) { // // Give everyone free weapons right away // SLNode * objnode; for (objnode = GameObjManager::Get_Smart_Game_Obj_List()->Head(); objnode; objnode = objnode->Next()) { SmartGameObj * p_smart_obj = objnode->Data(); WWASSERT(p_smart_obj != NULL); if (p_smart_obj->As_SoldierGameObj() != NULL && p_smart_obj->Get_Player_Type() != PLAYERTYPE_NEUTRAL) { p_smart_obj->As_SoldierGameObj()->Give_All_Weapons(); } } } } } }; class ToggleEmotIconsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "toggle_emoticons"; } virtual const char * Get_Help( void ) { return "TOGGLE_EMOTICONS - Toggle the display of emot icons during conversations."; } virtual void Activate( const char * /*input*/ ) { bool display = !ConversationMgrClass::Are_Emot_Icons_Displayed (); ConversationMgrClass::Display_Emot_Icons (display); if (display) { Print( "EmotIcons are now enabled.\n" ); } else { Print( "EmotIcons are now disabled.\n" ); } } }; class SoldierGhostDebugDisplayConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "toggle_ghost_debug_display"; } virtual const char * Get_Help( void ) { return "toggle_ghost_debug_display - Displays a box around soldiers that are in 'ghost' collision mode."; } virtual void Activate( const char * input ) { bool enable = !SoldierGameObj::Is_Ghost_Collision_Debug_Display_Enabled (); SoldierGameObj::Enable_Ghost_Collision_Debug_Display (enable); if (enable) { Print( "Ghost collision debug display enabled.\n" ); } else { Print( "Ghost collision debug display disabled.\n" ); } return ; } }; class HUDHelpTextTestConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "hud_help_text"; } //virtual const char * Get_Help( void ) { return "CnC [vehicle | powerup |char[minigunner|rocket_soldier|grenadier|engineer|flame_thrower|mutant] [enlisted|officer|special_forces|boss] ] - Purchases a team vehicle, a player powerup or upgrades the player."; } virtual const char * Get_Help( void ) { return "hud_help_text - Sets the current HUD help text."; } virtual void Activate( const char * input ) { WideStringClass wide_string; wide_string.Convert_From (input); HUDInfo::Set_HUD_Help_Text (wide_string); return ; } }; class CnCModeConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "cnc"; } //virtual const char * Get_Help( void ) { return "CnC [vehicle | powerup |char[minigunner|rocket_soldier|grenadier|engineer|flame_thrower|mutant] [enlisted|officer|special_forces|boss] ] - Purchases a team vehicle, a player powerup or upgrades the player."; } virtual const char * Get_Help( void ) { return "CnC - Displays CnC player console (for gods only)."; } virtual void Activate( const char * input ) { if (cNetwork::I_Am_God()) { PlayerTerminalClass::Get_Instance ()->Display_Default_Terminal_For_Player (COMBAT_STAR); } else { Print(Get_Help()); } } }; class DebugEncyRevealConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "reveal_encyclopedia"; } virtual const char * Get_Help( void ) { return "reveal_encyclopedia - Shows all entries in the encyclopedia."; } virtual void Activate( const char * input ) { EncyclopediaMgrClass::Reveal_All_Objects (); return ; } }; class DebugShowMoveVectorConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "move_vectors"; } virtual const char * Get_Help( void ) { return "move_vectors - Toggles the debug move vectors."; } virtual void Activate( const char * input ) { bool displayed = PathClass::Are_Move_Vectors_Displayed (); displayed = !displayed; PathClass::Display_Move_Vectors (displayed); if ( displayed ) { Print( "Move vectors ON.\n" ); } else { Print( "Move vectors OFF.\n" ); } return ; } }; class MapRevealConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "map_reveal"; } virtual const char * Get_Help( void ) { return "map_reveal - Removes the cloud from the map."; } virtual void Activate( const char * input ) { MapMgrClass::Clear_All_Cloud_Cells (); Print( "Map is now visible.\n" ); return ; } }; class ChangeCharacterClassConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "change_character_class"; } virtual const char * Get_Help( void ) { return "CHANGE_CHARACTER_CLASS - changes your character to the specified class."; } virtual void Activate( const char * input ) { bool success = false; DefinitionClass *definition = DefinitionMgrClass::Find_Typed_Definition( input, CLASSID_GAME_OBJECT_DEF_SOLDIER ); if (definition != NULL) { SoldierGameObjDef *soldier_def = reinterpret_cast (definition); COMBAT_STAR->Re_Init( *soldier_def ); COMBAT_STAR->Post_Re_Init(); success = true; } if (success) { Print( "Successfully changed character class.\n" ); } else { Print( "Unable to change character class.\n" ); } } }; class RenderModeConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "render_mode"; } virtual const char * Get_Alias( void ) { return "rm"; } virtual const char * Get_Help( void ) { return "RENDER_MODE [0 fill | 1 lines | 2 points] - set the current render mode."; } virtual void Activate( const char * input ) { if (COMBAT_SCENE != NULL) { if ((stricmp(input,"points") == 0) || (stricmp(input,"2") == 0)) { COMBAT_SCENE->Set_Polygon_Mode(SceneClass::POINT); Print("Polygon mode set to POINT\n"); } else if ((stricmp(input,"lines") == 0) || (stricmp(input,"1") == 0)) { COMBAT_SCENE->Set_Polygon_Mode(SceneClass::LINE); Print("Polygon mode set to LINE\n"); } else if ((stricmp(input,"fill") == 0) || (stricmp(input,"0") == 0)) { COMBAT_SCENE->Set_Polygon_Mode(SceneClass::FILL); Print("Polygon mode set to FILL\n"); } } } }; class RenderModeExtraPassConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "render_mode_extra_pass"; } virtual const char * Get_Alias( void ) { return "rm"; } virtual const char * Get_Help( void ) { return "RENDER_MODE_EXTRA_PASS [0 disable | 1 lines | 2 zbuffered]"; } virtual void Activate( const char * input ) { if (COMBAT_SCENE != NULL) { if ((stricmp(input,"disable") == 0) || (stricmp(input,"0") == 0)) { COMBAT_SCENE->Set_Extra_Pass_Polygon_Mode(SceneClass::EXTRA_PASS_DISABLE); Print("Extra pass polygon mode set to DISABLE\n"); } else if ((stricmp(input,"lines") == 0) || (stricmp(input,"1") == 0)) { COMBAT_SCENE->Set_Extra_Pass_Polygon_Mode(SceneClass::EXTRA_PASS_LINE); Print("Extra pass polygon mode set to LINE\n"); } else if ((stricmp(input,"zbuffered") == 0) || (stricmp(input,"2") == 0)) { COMBAT_SCENE->Set_Extra_Pass_Polygon_Mode(SceneClass::EXTRA_PASS_CLEAR_LINE); Print("Extra pass polygon mode set to ZBUFFERED\n"); } } } }; class TextureFilterModeConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "texture_filter_mode"; } virtual const char * Get_Help( void ) { return "TEXTURE_FILTER_MODE [none|fast|best] - set texture filter and mipmap modes."; } virtual void Activate( const char * input ) { if (stricmp(input,"none") == 0) { TextureClass::_Set_Default_Min_Filter(TextureClass::FILTER_TYPE_FAST); TextureClass::_Set_Default_Mag_Filter(TextureClass::FILTER_TYPE_FAST); TextureClass::_Set_Default_Mip_Filter(TextureClass::FILTER_TYPE_NONE); Print("Texture filter mode changed to: none\n"); } else if (stricmp(input,"fast") == 0) { TextureClass::_Set_Default_Min_Filter(TextureClass::FILTER_TYPE_FAST); TextureClass::_Set_Default_Mag_Filter(TextureClass::FILTER_TYPE_FAST); TextureClass::_Set_Default_Mip_Filter(TextureClass::FILTER_TYPE_FAST); Print("Texture filter mode changed to: fast\n"); } if (stricmp(input,"best") == 0) { TextureClass::_Set_Default_Min_Filter(TextureClass::FILTER_TYPE_BEST); TextureClass::_Set_Default_Mag_Filter(TextureClass::FILTER_TYPE_BEST); TextureClass::_Set_Default_Mip_Filter(TextureClass::FILTER_TYPE_BEST); Print("Texture filter mode changed to: best\n"); } else { Print("Valid filter modes are: none|fast|best\n"); } } }; class EnableTriangleRenderConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "enable_triangle_render"; } virtual const char * Get_Help( void ) { return "ENABLE_TRIANGLE_RENDER [none|opaque|sorting|all] - enable/disable triangle rendering."; } virtual void Activate( const char * input ) { if (stricmp(input,"none") == 0) { DX8Wrapper::_Enable_Triangle_Draw(false); SortingRendererClass::_Enable_Triangle_Draw(false); Print("All polygon rendering disabled\n"); } else if (stricmp(input,"opaque") == 0) { DX8Wrapper::_Enable_Triangle_Draw(true); SortingRendererClass::_Enable_Triangle_Draw(false); Print("Only opaque polygons enabled\n"); } else if (stricmp(input,"sorting") == 0) { DX8Wrapper::_Enable_Triangle_Draw(false); SortingRendererClass::_Enable_Triangle_Draw(true); Print("Only sorting polygons enabled\n"); } else { DX8Wrapper::_Enable_Triangle_Draw(true); SortingRendererClass::_Enable_Triangle_Draw(true); Print("All polygons enabled\n"); } } }; class RunFastConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "run_fast"; } virtual const char * Get_Help( void ) { return "RUN_FAST - set options for fast framerate."; } virtual void Activate( const char * input ) { DebugManager::Option_Enable(DebugManager::DEBUG_DISABLE_LIGHTS, true); WWASSERT(DebugManager::Option_Is_Enabled(DebugManager::DEBUG_DISABLE_LIGHTS)); Print("Lights disabled.\n"); ConsoleFunctionManager::Parse_Input("Dynamic_LOD_Budget 100"); ConsoleFunctionManager::Parse_Input("Static_LOD_Budget 100"); ConsoleFunctionManager::Parse_Input("Shadow_Mode 0"); ConsoleFunctionManager::Parse_Input("Prelit_Mode 0"); //ConsoleFunctionManager::Parse_Input("Mesh_Draw_Mode 0"); if (COMBAT_SCENE != NULL) { COMBAT_SCENE->Enable_Dynamic_Projectors(false); Print("Dynamic Projectors disabled.\n"); COMBAT_SCENE->Enable_Static_Projectors(false); Print("Static Projectors disabled.\n"); } WW3D::Set_Texture_Reduction(1); Print("Texture Resolution set to 1.\n"); ConsoleGameModeClass::Save_Registry_Keys(); if (Get_Text_Display()) { WWASSERT(Get_Text_Display() != NULL); Get_Text_Display()->Set_Max_Scroll_Lines(3); Print("Set_Max_Scroll_Lines(3)\n"); } } }; class RenderBackfacesConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "render_backfaces"; } virtual const char * Get_Help( void ) { return "RENDER_BACKFACES - toggles debug rendering of backfaced polys."; } virtual void Activate( const char * input ) { /* ** This turns on WW3D backface rendering and also causes the Physics-Scene to ** stop rendering non-occluders so that we can get a better idea of what VIS ** is seeing when it renders the occluders and checks for backfaces */ PhysicsSceneClass * scene = PhysicsSceneClass::Get_Instance(); if (scene) { scene->Enable_Backface_Occluder_Debug(!scene->Is_Backface_Occluder_Debug_Enabled()); if (scene->Is_Backface_Occluder_Debug_Enabled()) { Print("Backface Debug Display ENABLED\n"); } else { Print("Backface Debug Display DISABLED\n"); } } } }; class AmmoConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "ammo"; } virtual const char * Get_Help( void ) { return "AMMO - sets the players weapon's ammo count."; } virtual void Activate( const char * input ) { if ( COMBAT_STAR != NULL ) { WeaponClass * weapon = COMBAT_STAR->Get_Weapon(); if ( weapon ) { int amount = atoi( input ); weapon->Set_Total_Rounds( amount ); Print( "Ammo set to %d rounds\n", amount ); } } } }; extern bool ScriptTrace; class ScriptTraceConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "script_trace"; } virtual const char * Get_Help( void ) { return "SCRIPT_TRACE - toggles debug trace of all scipt events and commands."; } virtual void Activate( const char * input ) { ScriptTrace = !ScriptTrace; Print( "ScriptTrace is %s\n", ScriptTrace ? "ON" : "OFF" ); } }; class DebugTypeConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "debug_type"; } const char * Get_Alias( void ) { return "dt"; } virtual const char * Get_Help( void ) { return "DEBUG_TYPE [type|on|off] - toggles the debug display of type (info, warning, error, script)"; } virtual void Activate( const char * input ) { char str[128]; sprintf(str,"ERROR (%s)\n", input ); if (stricmp(input,"info") == 0) { DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_INFORMATION ); sprintf(str, "Information Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_INFORMATION ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"warning") == 0) { DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_WARNING ); sprintf(str, "Warning Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_WARNING ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"error") == 0) { DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_ERROR ); sprintf(str, "Error Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_ERROR ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"script") == 0) { DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_SCRIPT ); sprintf(str, "Script Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_SCRIPT ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"netadmin") == 0) { DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_ADMIN ); sprintf(str, "Network Admin Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_ADMIN ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"netbasic") == 0) { DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_BASIC ); sprintf(str, "Network Basic Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_BASIC ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"netprolific") == 0) { DebugManager::Toggle_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_PROLIFIC ); sprintf(str, "Network Prolific Debug %s\n", DebugManager::Is_Type_Enabled( DebugManager::DEBUG_TYPE_NETWORK_PROLIFIC ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"net") == 0) { DebugManager::Disable_Type( DebugManager::DEBUG_TYPE_NETWORK_ADMIN ); DebugManager::Disable_Type( DebugManager::DEBUG_TYPE_NETWORK_BASIC ); DebugManager::Disable_Type( DebugManager::DEBUG_TYPE_NETWORK_PROLIFIC ); sprintf(str, "All network debug types DISABLED\n"); } else if (stricmp(input,"on") == 0) { DebugManager::Enable_Type( (DebugManager::DebugType)-1 ); sprintf(str, "All Debug Types Enabled\n" ); } else if (stricmp(input,"off") == 0) { DebugManager::Disable_Type( (DebugManager::DebugType)-1 ); sprintf(str, "All Debug Types Disabled\n" ); } Print(str); Debug_Say((str)); } }; /* class RadarZoomConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "radar_zoom"; } virtual const char * Get_Help( void ) { return "RADAR_ZOOM - Set radar zoom factor."; } virtual void Activate( const char * input ) { float zoom_factor = atof(input); if (zoom_factor > WWMATH_EPSILON) { // RadarManager::Set_Zoom_Factor(zoom_factor); Print( "Radar zoomed\n" ); } else { Print( "Error - zoom_factor must be small and positive.\n" ); } } }; class RadarMaxConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "radar_max"; } virtual const char * Get_Help( void ) { return "RADAR_MAX - zoom out the radar to world extents."; } virtual void Activate( const char * input ) { float world_size = The_Game()->Get_Maximum_World_Distance(); if (world_size > WWMATH_EPSILON) { // RadarManager::Set_Zoom_Factor(1 / world_size); Print( "Radar zoomed\n" ); } else { Print( "Error - world size not set.\n" ); } } }; */ class DefectConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "defect"; } virtual const char * Get_Help( void ) { return "DEFECT - switch to the opposite team (gods only)."; } virtual void Activate( const char * input ) { cPlayer * p_player = cNetwork::Get_My_Player_Object(); if (p_player != NULL && p_player->Invulnerable.Is_True()) { cChangeTeamEvent * p_event = new cChangeTeamEvent; p_event->Init(); } else { Print(Get_Help()); } } }; class RadarToggleConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "radar_toggle"; } virtual const char * Get_Help( void ) { return "RADAR_TOGGLE - toggles the Radar."; } virtual void Activate( const char * input ) { RadarManager::Set_Hidden( !RadarManager::Is_Hidden() ); Print( "Radar toggled\n" ); } }; class ShellCommandConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "shell"; } virtual const char * Get_Help( void ) { return "SHELL - SHell command (server only)."; } virtual void Activate( const char * input ) { if (IS_SOLOPLAY || !cNetwork::I_Am_Server()) { Print("SH is for server only.\n"); } else { cNetwork::Shell_Command(input); } } }; /* class RshCommandConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "rsh"; } virtual const char * Get_Help( void ) { return "RSH - Remote SHell command (server only)."; } virtual void Activate( const char * input ) { if (IS_SOLOPLAY || !cNetwork::I_Am_Server()) { Print("rsh is for server only.\n"); } else { Print("Sending command to clients...\n"); cNetwork::Send_Server_Rsh_Command(input); } } }; */ class LrshCommandConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "lrsh"; } virtual const char * Get_Help( void ) { return "LRSH - Local and Remote SHell command (server only)."; } virtual void Activate( const char * input ) { /* ConsoleFunctionManager::Parse_Input(input); char rsh_command[500]; WWASSERT(strlen(input) < sizeof(rsh_command) - 10); sprintf(rsh_command, "rsh %s", input); ConsoleFunctionManager::Parse_Input(rsh_command); */ if (IS_SOLOPLAY || !cNetwork::I_Am_Server() || ::strlen(input) == 0) { Print(Get_Help()); } else { cConsoleCommandEvent * p_event = new cConsoleCommandEvent; p_event->Init(input); } } }; class SrshCommandConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "srsh"; } virtual const char * Get_Help( void ) { return "SRSH - C->S Remote SHell command (client only)."; } virtual void Activate( const char * input ) { if (cNetwork::I_Am_Only_Client() && ::strlen(input) > 0) { cCsConsoleCommandEvent * p_event = new cCsConsoleCommandEvent; p_event->Init(input); } else { Print(Get_Help()); } } }; class MainMenuConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "main_menu"; } virtual const char * Get_Alias( void ) { return "mm"; } virtual const char * Get_Help( void ) { return "MAIN_MENU - go back to the main menu."; } virtual void Activate( const char * input ) { cDevOptions::GoToMainMenu.Set(true); cDevOptions::QuickFullExit.Set(true); } }; class MaxFacingPenaltyConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "max_facing_penalty"; } virtual const char * Get_Alias( void ){ return "mfp"; } virtual const char * Get_Help( void ) { return "MAX_FACING_PENALTY - set the max facing penalty. Server only. Float. Use zero to disable."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); if (cNetwork::I_Am_Server()) { float f = ::atof(input); cUserOptions::MaxFacingPenalty.Set(f); Print( "MaxFacingPenalty set to %5.2f.", f); } else { Print(Get_Help()); } } }; class IrrelevancePenaltyConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "irrelevance_penalty"; } //virtual const char * Get_Alias( void ){ return ""; } virtual const char * Get_Help( void ) { return "IRRELEVANCE_PENALTY - set the irrelevance penalty. Server only. Float. Use zero to disable."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); if (cNetwork::I_Am_Server()) { float f = ::atof(input); cUserOptions::IrrelevancePenalty.Set(f); Print( "IrrelevancePenalty set to %5.2f.", f); } else { Print(Get_Help()); } } }; class MissionConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name(void) {return "mission";} virtual const char * Get_Help(void) {return "MISSION end mission with given status.";} virtual void Activate(const char * input) { if (!stricmp(input, "success")) { CombatManager::Mission_Complete(true); } else if (!stricmp(input, "failure")) { CombatManager::Mission_Complete(false); } else { Print(Get_Help()); } } }; class MoneyConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name(void) {return "money";} virtual const char * Get_Help(void) {return "MONEY - money cheat, for gods only.";} virtual void Activate(const char * input) { int amount = ::atoi(input); if (cNetwork::I_Am_God()) { cMoneyEvent * p_money = new cMoneyEvent; p_money->Init(amount); } else { Print(Get_Help()); } } }; class ScoreConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name(void) {return "score";} virtual const char * Get_Help(void) {return "SCORE - score cheat, for gods only.";} virtual void Activate(const char * input) { int amount = ::atoi(input); if (cNetwork::I_Am_God()) { cScoreEvent * p_score = new cScoreEvent; p_score->Init(amount); } else { Print(Get_Help()); } } }; class MultiHudConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "multihud"; } virtual const char * Get_Help( void ) { return "MULTIHUD - toggle the multiplayer HUD."; } virtual void Activate( const char * input ) { CombatGameModeClass::Toggle_Multi_Hud(); Print("MultiHud toggled\n"); } }; class SetPacketLossConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_packet_loss"; } virtual const char * Get_Alias( void ) { return "spl"; } virtual const char * Get_Help( void ) { return "SET_PACKET_LOSS - simulate packetloss at given percentage"; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); double percentage; percentage = atof(input); if (percentage > -WWMATH_EPSILON && percentage < 100 + WWMATH_EPSILON) { cNetwork::Set_Simulated_Packet_Loss_Pc((int)percentage); ConsoleFunctionManager::Parse_Input("clear ns"); // reset stats } else { Print(Get_Help()); } } }; class SetBandwidthBudgetOutToggleConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "toggle_sbbo"; } virtual const char * Get_Help( void ) { return "TOGGLE_SBBO - toggle cSbboManager (server only)."; } virtual void Activate( const char * input ) { if (cNetwork::I_Am_Server()) { bool is_enabled = cSbboManager::Toggle_Is_Enabled(); Print("cSbboManager %s enabled.\n", is_enabled ? "IS" : "is NOT"); } else { Print(Get_Help()); } } }; class SetSendFrequencyConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "send_frequency"; } virtual const char * Get_Help( void ) { return "send_freqency - set delay between packet sends."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); int delay = atoi(input); PacketManager.Set_Flush_Frequency((unsigned long) delay); if (delay) { Print("Packets will be sent no more than %d times per second.\n", 1000 / delay); } else { Print("Packets will be sent immediately.\n"); } } }; class TogglePacketDeltasConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "packet_delta"; } virtual const char * Get_Help( void ) { return "packet_delta - toggle packet delta enable flag."; } virtual void Activate( const char * ) { bool delta = PacketManager.Toggle_Allow_Deltas(); if (delta) { Print("Packets can be sent as deltas.\n"); } else { Print("Packets are not allowed to be sent as deltas.\n"); } } }; class TogglePacketComboConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "packet_combo"; } virtual const char * Get_Help( void ) { return "packet_combo - toggle packet packing."; } virtual void Activate( const char * ) { bool combos = PacketManager.Toggle_Allow_Combos(); if (combos) { Print("Packets of different sizes can be combined into one packet.\n"); } else { Print("Packets of different sizes cannot be combined into one packet.\n"); } } }; class TogglePacketOptConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "packet_opt"; } virtual const char * Get_Help( void ) { return "packet_opt - enable low level packet optimizations."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); int on = atoi(input); if (on) { PacketManager.Set_Flush_Frequency(1000 / 15); bool ok = PacketManager.Toggle_Allow_Deltas(); if (!ok) { PacketManager.Toggle_Allow_Deltas(); } ok = PacketManager.Toggle_Allow_Combos(); if (!ok) { PacketManager.Toggle_Allow_Combos(); } Print("Low level packet optioizations enabled.\n"); } else { PacketManager.Set_Flush_Frequency(0); bool ok = PacketManager.Toggle_Allow_Deltas(); if (ok) { PacketManager.Toggle_Allow_Deltas(); } ok = PacketManager.Toggle_Allow_Combos(); if (ok) { PacketManager.Toggle_Allow_Combos(); } Print("Low level packet optioizations disabled.\n"); } } }; class SetLatencyConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "latency"; } virtual const char * Get_Help( void ) { return "latency - set simulated latency on packets."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); int low,high,current; int fields = sscanf(input, "%d,%d", &low, &high); if (fields == 1) { high = low; fields = 2; } if (fields == 2) { cConnection::Set_Latency(low, high); Print("Latency set\n"); } cConnection::Get_Latency(low, high, current); Print("Latency set to %d,%d (current latency is %d ms)\n", low, high, current); } }; class ToggleBandwidthBalancerConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "bw_balance"; } virtual const char * Get_Help( void ) { return "bw_balance - toggle bandwidth balancer code enable."; } virtual void Activate( const char * ) { if (BandwidthBalancer.IsEnabled == false) { BandwidthBalancer.IsEnabled = true; Print("Using bandwidth balancer.\n"); } else { BandwidthBalancer.IsEnabled = false; Print("Not using bandwidth balancer.\n"); } } }; class ToggleNewClientUpdateMethodConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "new_update"; } virtual const char * Get_Help( void ) { return "new_update - toggle new client update method."; } virtual void Activate( const char * ) { if (cNetwork::SensibleUpdates == false) { cNetwork::SensibleUpdates = true; Print("Using new per object per client update scheme.\n"); } else { cNetwork::SensibleUpdates = false; Print("Using old funky distance based update scheme.\n"); } } }; class SetDesiredSleepConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_desired_sleep"; } virtual const char * Get_Alias( void ) { return "sds"; } virtual const char * Get_Help( void ) { return "SET_DESIRED_SLEEP - sleep this many ms per frame."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); int desired_sleep = atoi(input); if (desired_sleep >= 0) { cNetwork::Set_Desired_Frame_Sleep_Ms(desired_sleep); Print( "Frame sleep set to %d ms.", desired_sleep ); } else { Print(Get_Help()); } } }; class SetPacketDuplicationConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_packet_duplication"; } //virtual const char * Get_Alias( void ) { return "spd"; } virtual const char * Get_Help( void ) { return "SET_PACKET_DUPLICATION - simulate packet duplication at given percentage"; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); double percentage = atof(input); if (percentage > -WWMATH_EPSILON && percentage < 100 + WWMATH_EPSILON) { cNetwork::Set_Simulated_Packet_Duplication_Pc((int)percentage); ConsoleFunctionManager::Parse_Input("clear ns"); // reset stats } else { Print(Get_Help()); } } }; class SetPacketLatencyRangeConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_packet_latency_range"; } virtual const char * Get_Alias( void ) { return "latency"; } virtual const char * Get_Help( void ) { return "SET_PACKET_LATENCY_RANGE - sets a range for simulated latency (in ms)"; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); int min_latency_ms; int max_latency_ms; int num_args = sscanf(input, "%d %d", &min_latency_ms, &max_latency_ms); if (num_args == 2 && min_latency_ms >= 0 && max_latency_ms >= 0 && min_latency_ms <= max_latency_ms) { cNetwork::Set_Simulated_Latency_Range_Ms(min_latency_ms, max_latency_ms); } else { Print(Get_Help()); } } }; class SetSpamCountConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_spam_count"; } virtual const char * Get_Alias( void ) { return "ssc"; } virtual const char * Get_Help( void ) { return "SET_SPAM_COUNT - S->C state packet is sent this many extra times."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); int spam_count = atoi(input); if (spam_count >= 0) { cNetwork::Set_Spam_Count(spam_count); //Print( "Spam Count set to %d ms.", desired_sleep ); } else { Print(Get_Help()); } } }; class ClearConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "clear"; } virtual const char * Get_Help( void ) { return "CLEAR - clear specified object."; } virtual void Activate( const char * input ) { if (cMiscUtil::Is_String_Same(input, "isc")) { NetworkObjectMgrClass::Reset_Import_State_Counts(); } else if (cMiscUtil::Is_String_Same(input, "netstats") || cMiscUtil::Is_String_Same(input, "ns")) { if (cNetwork::PClientConnection != NULL) { cNetwork::PClientConnection->Init_Stats(); Print("Network stats for client connection reset.\n"); } if (cNetwork::PServerConnection != NULL) { cNetwork::PServerConnection->Init_Stats(); Print("Network stats for server connection reset.\n"); } } else if (cMiscUtil::Is_String_Same(input, "packet_simulation") || cMiscUtil::Is_String_Same(input, "ps")) { ConsoleFunctionManager::Parse_Input("spl 0"); ConsoleFunctionManager::Parse_Input("spd 0"); ConsoleFunctionManager::Parse_Input("latency 0 0"); } else if (cMiscUtil::Is_String_Same(input, "0")) { ConsoleFunctionManager::Parse_Input("clear ht"); ConsoleFunctionManager::Parse_Input("clear isc"); ConsoleFunctionManager::Parse_Input("clear ns"); ConsoleFunctionManager::Parse_Input("clear ps"); } else if (cMiscUtil::Is_String_Same(input, "")) { Print("Valid clear objects:\n"); Print(" help_text - clears any help text\n"); Print(" isc - reset the import state count of all smart game objects\n"); Print(" netstats - reinitialize net stats\n"); Print(" packet_simulation - turns off packet simulation (loss, duplication, latency)\n"); } else { Print("Error: no such clear object.\n"); } } }; class ClientHintFactorConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "client_hint_factor"; } virtual const char * Get_Alias( void ){ return "chf"; } virtual const char * Get_Help( void ) { return "CLIENT_HINT_FACTOR - set the client hint factor (worst:average). Client only. Float. Use zero to disable."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); if (cNetwork::I_Am_Only_Client()) { float chf = ::atof(input); cUserOptions::ClientHintFactor.Set(chf); Print( "ClientHintFactor set to %5.2f.", chf); } else { Print(Get_Help()); } } }; class CreateBotConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "create_bot"; } virtual const char * Get_Alias( void ) { return "cb"; } virtual const char * Get_Help( void ) { return "CREATE_BOT - create specified number of bots (max 20, server only)."; } virtual void Activate( const char * input ) { if (cNetwork::I_Am_Server()) { int num_bots = 1; if (strcmp(input, "")) { num_bots = atoi(input); } if (num_bots < 0) { num_bots = 0; } if (num_bots > 20) { num_bots = 20; } for (int i = 0; i < num_bots; i++) { WWASSERT(PTheGameData != NULL); if (cPlayerManager::Count() < The_Game()->Get_Max_Players()) { cGod::Create_Ai_Player(); } } } else { Print(Get_Help()); } } }; class CreateGruntConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "create_grunt"; } virtual const char * Get_Alias( void ) { return "cg"; } virtual const char * Get_Help( void ) { return "CREATE_GRUNT - create specified number of grunts (server only, max 20)."; } virtual void Activate( const char * input ) { if ( cNetwork::I_Am_Server()) { int num_grunts = 1; if (strcmp(input, "")) { num_grunts = atoi(input); } if (num_grunts < 0) { num_grunts = 0; } if (num_grunts > 20) { num_grunts = 20; } if (COMBAT_STAR != NULL) { Vector3 star_pos; COMBAT_STAR->Get_Position(&star_pos); Vector3 star_target_pos = COMBAT_STAR->Get_Targeting_Pos(); //star_pos.Z = 0; //star_target_pos.Z = 0; star_target_pos.Z = star_pos.Z; Vector3 look_vector = star_target_pos - star_pos; look_vector.Normalize(); Vector3 pos = star_pos + 20 * look_vector; pos.Z += 0.5; for (int i = 0; i < num_grunts; i++) { cGod::Create_Grunt(pos); } } } else { Print(Get_Help()); } } }; class CreateObjectConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "create_object"; } virtual const char * Get_Alias( void ) { return "co"; } virtual const char * Get_Help( void ) { return "CREATE_OBJECT - create the named object (server only). Use with caution."; } virtual void Activate( const char * input ) { if (COMBAT_STAR && cNetwork::I_Am_Server()) { PhysicalGameObj * obj = ObjectLibraryManager::Create_Object(input); //if (obj != NULL && obj->As_SmartGameObj() != NULL) { if (obj != NULL) { Vector3 position; COMBAT_STAR->Get_Position(&position); position.X += 4; //position.Z += 4; Matrix3D tm(1); tm.Set_Translation(position); obj->Set_Transform(tm); obj->Start_Observers(); } else { Print("Failed to create %s.", input); } } else { Print(Get_Help()); } } }; class ListConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "list"; } //virtual const char * Get_Alias( void ) { return "l"; } virtual const char * Get_Help( void ) { return "LIST - show list of specified object."; } virtual void Activate( const char * input ) { if (cMiscUtil::Is_String_Same(input, "active_game_modes") || cMiscUtil::Is_String_Same(input, "agm")) { GameModeManager::List_Active_Game_Modes(); } else if (cMiscUtil::Is_String_Same(input, "definitions") || cMiscUtil::Is_String_Same(input, "d")) { DefinitionMgrClass::List_Available_Definitions(CLASSID_GAME_OBJECTS); } else if (cMiscUtil::Is_String_Same(input, "")) { Print("Valid list objects:\n"); Print(" active_game_modes - list all active game modes\n"); Print(" definitions - list all definition names\n"); } else { Print("Error: no such list object.\n"); } } }; class BreakExecutionConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "break"; } virtual const char * Get_Help( void ) { return "BREAK - break execution. Do not use this just for fun."; } virtual void Activate( const char * input ) { Print("Breaking execution on demand.\n"); _asm int 0x03; } }; class CrashExecutionConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "crash"; } virtual const char * Get_Help( void ) { return "CRASH - crash execution. Do not use this just for fun."; } virtual void Activate( const char * input ) { Print("Bang....\n"); char *zero = NULL; *zero = 0; } }; class GiveWeaponsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "give_weapons"; } virtual const char * Get_Help( void ) { return "GIVE_WEAPONS - give the commando all the weapons (single-player only)"; } virtual void Activate( const char * input ) { if (cNetwork::I_Am_Server()) { if (IS_SOLOPLAY && COMBAT_STAR ) { COMBAT_STAR->Give_All_Weapons(); } else { Print("Use FREE_WEAPONS instead in a multiplayer game.\n"); } } else { Print(Get_Help()); } } }; class GodConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "god"; } virtual const char * Get_Help( void ) { return "GOD - if you are a true believer, you may toggle your godlike status.\n"; } virtual void Activate( const char * input ) { StringClass password; password.Format("%s", input); if (cNetwork::I_Am_Client() && (!password.Is_Empty() || cDevOptions::IBelieveInGod.Is_True())) { cGodModeEvent * p_event = new cGodModeEvent; p_event->Init(password); } else { Print(Get_Help()); } } }; class IBelieveInGodConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "ibelieveingod"; } virtual const char * Get_Help( void ) { return "IBELIEVEINGOD - toggle philosophical standpoint on this issue.\n"; } virtual void Activate( const char * input ) { bool believe = cDevOptions::IBelieveInGod.Toggle(); if (believe) { Print("You believe in god !\n"); } else { Print("You do NOT believe in god !\n"); if (cNetwork::I_Am_Server()) { // // Reduce any gods to mere mortals // for ( SLNode * player_node = cPlayerManager::Get_Player_Object_List()->Head(); player_node; player_node = player_node->Next()) { cPlayer * p_player = player_node->Data(); WWASSERT(p_player != NULL); if (p_player->Invulnerable.Is_True()) { p_player->Invulnerable.Set(false); p_player->Mark_As_Modified(); } } } } } }; class HideStarConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "hide_star"; } virtual const char * Get_Help( void ) { return "HIDE_STAR - toggles display of the commando."; } virtual void Activate( const char * input ) { if ( COMBAT_STAR ) { RenderObjClass *ro = COMBAT_STAR->Peek_Model(); ro->Set_Hidden( !ro->Is_Hidden() ); } } }; class FlyStarConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "fly_star"; } virtual const char * Get_Help( void ) { return "FLY_STAR - toggles fly mode for the commando."; } virtual void Activate( const char * input ) { if ( COMBAT_STAR != NULL && (IS_SOLOPLAY || cNetwork::I_Am_God() )) { COMBAT_STAR->Toggle_Fly_Mode(); } } }; class WatchConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "watch"; } //virtual const char * Get_Alias( void ) { return "w"; } virtual const char * Get_Help( void ) { return "WATCH - show debug output of specified type."; } static void Get_Verbose_Help(char * buffer, int bufsize) { WWASSERT(buffer != NULL); WWASSERT(bufsize >= 1000); buffer[0] = 0; strcat(buffer, "\n"); strcat(buffer, "Valid watch objects:\n"); strcat(buffer, " bandwidth (bw)\n"); strcat(buffer, " bandwidth_budget_out (bbo)\n"); //strcat(buffer, " bounty \n"); strcat(buffer, " building_data (bd)\n"); strcat(buffer, " client_fps (client_fps)\n"); strcat(buffer, " client_rhost_data (crd)\n"); strcat(buffer, " diagnostics (diag)\n"); strcat(buffer, " door_data (dd)\n"); strcat(buffer, " DSAPO_data (DSAPO_data)\n"); strcat(buffer, " elevator_data (ed)\n"); strcat(buffer, " fps (fps)\n"); strcat(buffer, " god (god)\n"); strcat(buffer, " import_states_count (isc)\n"); strcat(buffer, " ids (ids)\n"); strcat(buffer, " ip_addresses (ip)\n"); strcat(buffer, " last_contact (lc)\n"); strcat(buffer, " latency (lat)\n"); strcat(buffer, " list_size (ls)\n"); strcat(buffer, " list_packet_size (lps)\n"); strcat(buffer, " list_time (lt)\n"); //strcat(buffer, " menu_stack (ms)\n"); strcat(buffer, " money (money)\n"); strcat(buffer, " names (names)\n"); strcat(buffer, " object_tally (ot)\n"); strcat(buffer, " packets (p)\n"); strcat(buffer, " ping (ping)\n"); strcat(buffer, " powerup_data (pd)\n"); strcat(buffer, " priorities (pri)\n"); strcat(buffer, " server_rhost_data (srd)\n"); strcat(buffer, " soldier_data (sd)\n"); strcat(buffer, " spawner_data (spawn)\n"); strcat(buffer, " vehicle_data (vd)\n"); strcat(buffer, " wol (wol)\n"); strcat(buffer, " wol_location (wl)\n"); strcat(buffer, " PacketsSentServer (pss)\n"); strcat(buffer, " PacketsSentClient (psc)\n"); strcat(buffer, " PacketsRecdServer (prs)\n"); strcat(buffer, " PacketsRecdClient (prc)\n"); strcat(buffer, " AvgSizePacketsSentServer (aspss)\n"); strcat(buffer, " AvgSizePacketsSentClient (aspsc)\n"); strcat(buffer, " AvgSizePacketsRecdServer (asprs)\n"); strcat(buffer, " AvgSizePacketsRecdClient (asprc)\n"); strcat(buffer, " BytesSentServer (bss)\n"); strcat(buffer, " BytesSentClient (bsc)\n"); strcat(buffer, " BytesRecdServer (brs)\n"); strcat(buffer, " BytesRecdClient (brc)\n"); strcat(buffer, " WwnetPacketsSentServer (wpss)\n"); strcat(buffer, " WwnetPacketsSentClient (wpsc)\n"); strcat(buffer, " WwnetPacketsRecdServer (wprs)\n"); strcat(buffer, " WwnetPacketsRecdClient (wprc)\n"); strcat(buffer, " WwnetAvgSizePacketsSentServer (waspss)\n"); strcat(buffer, " WwnetAvgSizePacketsSentClient (waspsc)\n"); strcat(buffer, " WwnetAvgSizePacketsRecdServer (wasprs)\n"); strcat(buffer, " WwnetAvgSizePacketsRecdClient (wasprc)\n"); strcat(buffer, " WwnetBytesSentServer (wbss)\n"); strcat(buffer, " WwnetBytesSentClient (wbsc)\n"); strcat(buffer, " WwnetBytesRecdServer (wbrs)\n"); strcat(buffer, " WwnetBytesRecdClient (wbrc)\n"); } virtual void Activate( const char * input ) { if (cMiscUtil::Is_String_Same(input, "bandwidth") || cMiscUtil::Is_String_Same(input, "bw")) { cDevOptions::ShowBandwidth.Toggle(); //} else if (cMiscUtil::Is_String_Same(input, "bandwidth_budget_out") || // cMiscUtil::Is_String_Same(input, "bbo")) { // cDevOptions::ShowBandwidthBudgetOut.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "client_fps")) { cDevOptions::ShowClientFps.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "client_rhost_data") || cMiscUtil::Is_String_Same(input, "crd")) { cDevOptions::ShowClientRhostData.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "diagnostics") || cMiscUtil::Is_String_Same(input, "diag")) { cDevOptions::ShowDiagnostics.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "gs_auth")) { cDevOptions::ShowGameSpyAuthState.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "ids")) { cDevOptions::ShowId.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "money")) { cDevOptions::ShowMoney.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "ping")) { cDevOptions::ShowPing.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "ip_addresses") || cMiscUtil::Is_String_Same(input, "ip")) { cDevOptions::ShowIpAddresses.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "fps")) { cDevOptions::ShowFps.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "god")) { cDevOptions::ShowGodStatus.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "import_states_count") || cMiscUtil::Is_String_Same(input, "isc")) { bool is_shown = cDevOptions::ShowImportStates.Toggle(); if (is_shown) { Print("You may use RESET_ISC to reset the counts.\n"); } } else if (cMiscUtil::Is_String_Same(input, "import_states_count_soldiers_vehicles") || cMiscUtil::Is_String_Same(input, "iscsv")) { bool is_shown = cDevOptions::ShowImportStatesSV.Toggle(); if (is_shown) { Print("You may use RESET_ISC to reset the counts.\n"); } } else if (cMiscUtil::Is_String_Same(input, "latency") || cMiscUtil::Is_String_Same(input, "lat")) { ConsoleFunctionManager::Parse_Input("clear ns"); // reset stats cDevOptions::ShowLatency.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "last_contact") || cMiscUtil::Is_String_Same(input, "lc")) { //ConsoleFunctionManager::Parse_Input("clear ns"); // reset stats cDevOptions::ShowLastContact.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "list_size") || cMiscUtil::Is_String_Same(input, "ls")) { cDevOptions::ShowListSizes.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "list_packet_size") || cMiscUtil::Is_String_Same(input, "lps")) { cDevOptions::ShowListPacketSizes.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "list_time") || cMiscUtil::Is_String_Same(input, "lt")) { cDevOptions::ShowListTimes.Toggle(); /* } else if (cMiscUtil::Is_String_Same(input, "menu_stack") || cMiscUtil::Is_String_Same(input, "ms")) { cDevOptions::ShowMenuStack.Toggle(); */ } else if (cMiscUtil::Is_String_Same(input, "names")) { if (IS_MISSION) { Print("Name showing is for multiplayer only.\n"); } else { bool on = cUserOptions::ShowNamesOnSoldier.Toggle(); if (on) { Print("Name showing is now ON\n"); } else { Print("Name showing is now OFF\n"); } } } else if (cMiscUtil::Is_String_Same(input, "object_tally") || cMiscUtil::Is_String_Same(input, "ot")) { cDevOptions::ShowObjectTally.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "inactive")) { cDevOptions::ShowInactivePlayers.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "PacketsSentServer") || cMiscUtil::Is_String_Same(input, "pss")) { cDevOptions::PacketsSentServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "PacketsSentClient") || cMiscUtil::Is_String_Same(input, "psc")) { cDevOptions::PacketsSentClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "PacketsRecdServer") || cMiscUtil::Is_String_Same(input, "prs")) { cDevOptions::PacketsRecdServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "PacketsRecdClient") || cMiscUtil::Is_String_Same(input, "prc")) { cDevOptions::PacketsRecdClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "AvgSizePacketsSentServer") || cMiscUtil::Is_String_Same(input, "aspss")) { cDevOptions::AvgSizePacketsSentServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "AvgSizePacketsSentClient") || cMiscUtil::Is_String_Same(input, "aspsc")) { cDevOptions::AvgSizePacketsSentClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "AvgSizePacketsRecdServer") || cMiscUtil::Is_String_Same(input, "asprs")) { cDevOptions::AvgSizePacketsRecdServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "AvgSizePacketsRecdClient") || cMiscUtil::Is_String_Same(input, "asprc")) { cDevOptions::AvgSizePacketsRecdClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "BytesSentServer") || cMiscUtil::Is_String_Same(input, "bss")) { cDevOptions::BytesSentServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "BytesSentClient") || cMiscUtil::Is_String_Same(input, "bsc")) { cDevOptions::BytesSentClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "BytesRecdServer") || cMiscUtil::Is_String_Same(input, "brs")) { cDevOptions::BytesRecdServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "BytesRecdClient") || cMiscUtil::Is_String_Same(input, "brc")) { cDevOptions::BytesRecdClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetPacketsSentServer") || cMiscUtil::Is_String_Same(input, "wpss")) { cDevOptions::WwnetPacketsSentServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetPacketsSentClient") || cMiscUtil::Is_String_Same(input, "wpsc")) { cDevOptions::WwnetPacketsSentClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetPacketsRecdServer") || cMiscUtil::Is_String_Same(input, "wprs")) { cDevOptions::WwnetPacketsRecdServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetPacketsRecdClient") || cMiscUtil::Is_String_Same(input, "wprc")) { cDevOptions::WwnetPacketsRecdClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetAvgSizePacketsSentServer") || cMiscUtil::Is_String_Same(input, "waspss")) { cDevOptions::WwnetAvgSizePacketsSentServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetAvgSizePacketsSentClient") || cMiscUtil::Is_String_Same(input, "waspsc")) { cDevOptions::WwnetAvgSizePacketsSentClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetAvgSizePacketsRecdServer") || cMiscUtil::Is_String_Same(input, "wasprs")) { cDevOptions::WwnetAvgSizePacketsRecdServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetAvgSizePacketsRecdClient") || cMiscUtil::Is_String_Same(input, "wasprc")) { cDevOptions::WwnetAvgSizePacketsRecdClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetBytesSentServer") || cMiscUtil::Is_String_Same(input, "wbss")) { cDevOptions::WwnetBytesSentServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetBytesSentClient") || cMiscUtil::Is_String_Same(input, "wbsc")) { cDevOptions::WwnetBytesSentClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetBytesRecdServer") || cMiscUtil::Is_String_Same(input, "wbrs")) { cDevOptions::WwnetBytesRecdServer.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "WwnetBytesRecdClient") || cMiscUtil::Is_String_Same(input, "wbrc")) { cDevOptions::WwnetBytesRecdClient.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "priorities") || cMiscUtil::Is_String_Same(input, "pri")) { cDevOptions::ShowPriorities.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "server_rhost_data") || cMiscUtil::Is_String_Same(input, "srd")) { cDevOptions::ShowServerRhostData.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "soldier_data") || cMiscUtil::Is_String_Same(input, "sd")) { cDevOptions::ShowSoldierData.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "spawner_data") || cMiscUtil::Is_String_Same(input, "spawn")) { cDevOptions::ShowSpawnerData.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "vehicle_data") || cMiscUtil::Is_String_Same(input, "vd")) { cDevOptions::ShowVehicleData.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "door_data") || cMiscUtil::Is_String_Same(input, "dd")) { cDevOptions::ShowDoorData.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "elevator_data") || cMiscUtil::Is_String_Same(input, "ed")) { cDevOptions::ShowElevatorData.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "DSAPO_data") || cMiscUtil::Is_String_Same(input, "DSAPO_data")) { cDevOptions::ShowDSAPOData.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "building_data") || cMiscUtil::Is_String_Same(input, "bd")) { cDevOptions::ShowBuildingData.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "powerup_data") || cMiscUtil::Is_String_Same(input, "pd")) { cDevOptions::ShowPowerupData.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "wol_location") || cMiscUtil::Is_String_Same(input, "wl")) { cDevOptions::ShowWolLocation.Toggle(); } else if (cMiscUtil::Is_String_Same(input, "0")) { // // Turn off any watch objects // cDevOptions::ShowBandwidth.Set(false); //cDevOptions::ShowBandwidthBudgetOut.Set(false); cDevOptions::ShowDiagnostics.Set(false); cDevOptions::ShowFps.Set(false); cDevOptions::ShowGodStatus.Set(false); //cDevOptions::ShowPacketGraphs.Set(false); cDevOptions::ShowPriorities.Set(false); cDevOptions::ShowLatency.Set(false); cDevOptions::ShowLastContact.Set(false); cDevOptions::ShowListSizes.Set(false); cDevOptions::ShowListTimes.Set(false); cDevOptions::ShowListPacketSizes.Set(false); cDevOptions::ShowMenuStack.Set(false); cDevOptions::ShowObjectTally.Set(false); cDevOptions::ShowInactivePlayers.Set(false); cDevOptions::ShowSoldierData.Set(false); cDevOptions::ShowSpawnerData.Set(false); cDevOptions::ShowVehicleData.Set(false); cDevOptions::ShowDoorData.Set(false); cDevOptions::ShowElevatorData.Set(false); cDevOptions::ShowDSAPOData.Set(false); cDevOptions::ShowBuildingData.Set(false); cDevOptions::ShowPowerupData.Set(false); cDevOptions::ShowImportStates.Set(false); cDevOptions::ShowImportStatesSV.Set(false); cDevOptions::ShowServerRhostData.Set(false); cDevOptions::ShowClientRhostData.Set(false); cDevOptions::ShowClientFps.Set(false); cDevOptions::ShowWolLocation.Set(false); cDevOptions::ShowPing.Set(false); cDevOptions::ShowMoney.Set(false); cDevOptions::ShowGameSpyAuthState.Set(false); } else if (cMiscUtil::Is_String_Same(input, "")) { cDevOptions::ShowWolLocation.Toggle(); if (Get_Text_Display()) { if (cDevOptions::ShowWolLocation.Is_True()) { char buffer[10000]; Get_Verbose_Help(buffer, sizeof(buffer)); Get_Text_Display()->Set_Verbose_Help_Text(buffer); } else { Get_Text_Display()->Set_Verbose_Help_Text(""); } } } else { Print("Error: no such watch object.\n"); } } }; class SurfaceEffectsDebugConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "surface_effects_debug"; } virtual const char * Get_Help( void ) { return "SURFACE_EFFECTS_DEBUG - toggles display of surface effects debug info."; } virtual void Activate( const char * input ) { SurfaceEffectsManager::Toggle_Debug(); Print( "Surface Effects Debug Toggled\n" ); } }; class SurfaceTypeOverrideConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "surface_type_override"; } virtual const char * Get_Help( void ) { return "SURFACE_TYPE_OVERRIDE - all surfaces forced to be given type (-1 disables)."; } virtual void Activate( const char * input ) { int type = atoi( input ); SurfaceEffectsManager::Set_Override_Surface_Type(type);; Print( "Override Surface Type Set: %d\n",type ); } }; class SurfacePhysicsOverrideConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "surface_physics_override"; } virtual const char * Get_Help( void ) { return "SURFACE_PHYSICS_OVERRIDE - force friction and drag for all surfaces (0.0 disables)."; } virtual void Activate( const char * input ) { float friction,drag; if (sscanf(input, "%f %f", &friction, &drag) == 2) { PhysicsConstants::Set_Override_Surface_Friction(friction); PhysicsConstants::Set_Override_Surface_Drag(drag); Print( "Friction set to: %f Drag set to: %f\n",friction,drag ); } else if (sscanf(input, "%f", &friction) == 1) { PhysicsConstants::Set_Override_Surface_Friction(friction); Print( "Friction set to: %f \n",friction); } } }; class SwapTeamsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "swap_teams"; } virtual const char * Get_Help( void ) { return "SWAP_TEAMS - switch everyone to the opposite team (server only)."; } virtual void Activate( const char * input ) { if (cNetwork::I_Am_Server()) { //if (The_Game() != NULL && The_Game()->Is_Team_Game()) { if (The_Game() != NULL) { for ( SLNode * player_node = cPlayerManager::Get_Player_Object_List()->Head(); player_node; player_node = player_node->Next()) { cPlayer * p_player = player_node->Data(); WWASSERT(p_player != NULL); int team = p_player->Get_Player_Type(); WWASSERT(team == PLAYERTYPE_NOD || team == PLAYERTYPE_GDI); int new_team = PLAYERTYPE_NOD; if (team == PLAYERTYPE_NOD) { new_team = PLAYERTYPE_GDI; } else { new_team = PLAYERTYPE_NOD; } p_player->Set_Player_Type(new_team); SoldierGameObj * p_soldier = GameObjManager::Find_Soldier_Of_Client_ID(p_player->Get_Id()); if (p_soldier != NULL) { p_soldier->Set_Delete_Pending(); } } } } else { Print(Get_Help()); } } }; /* ** */ class SetStarHealthConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_star_health"; } virtual const char * Get_Alias( void ){ return "ssh"; } virtual const char * Get_Help( void ) { return "SET_STAR_HEALTH - sets the strength of the star."; } virtual void Activate( const char * input ) { if ( COMBAT_STAR ) { float health = atof( input ); DefenseObjectClass * defense = COMBAT_STAR->Get_Defense_Object(); WWASSERT(defense != NULL); if (health > defense->Get_Health_Max()) { defense->Set_Health_Max( health ); } defense->Set_Health( health ); Print( "Star Health set to %1.1f\n", defense->Get_Health() ); } } }; class SetStarSkinConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_star_skin"; } virtual const char * Get_Help( void ) { return "SET_STAR_SKIN - sets the type of the star's skin."; } virtual void Activate( const char * input ) { if ( COMBAT_STAR ) { DefenseObjectClass * defense = COMBAT_STAR->Get_Defense_Object(); defense->Set_Skin( ArmorWarheadManager::Get_Armor_Type( input ) ); Print( "Star Skin set to %s\n", ArmorWarheadManager::Get_Armor_Name( defense->Get_Skin() ) ); } } }; class SetStarShieldStrengthConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_star_shield_strength"; } virtual const char * Get_Help( void ) { return "SET_STAR_SHIELD_STRENGTH - sets the strength of the star's shield."; } virtual void Activate( const char * input ) { if ( COMBAT_STAR ) { DefenseObjectClass * defense = COMBAT_STAR->Get_Defense_Object(); defense->Set_Shield_Strength( atof( input ) ); Print( "Star Shield Strength set to %1.1f\n", defense->Get_Shield_Strength() ); } } }; class SetStarShieldTypeConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_star_shield_type"; } virtual const char * Get_Help( void ) { return "SET_STAR_SHIELD_TYPE - sets the type of the star's shield."; } virtual void Activate( const char * input ) { if ( COMBAT_STAR ) { DefenseObjectClass * defense = COMBAT_STAR->Get_Defense_Object(); defense->Set_Shield_Type( ArmorWarheadManager::Get_Armor_Type( input ) ); Print( "Star Sheild_Type set to %s\n", ArmorWarheadManager::Get_Armor_Name( defense->Get_Shield_Type() ) ); } } }; class BuByeConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "bubye"; } virtual const char * Get_Help( void ) { return "BUBYE - kills everything but the star if they are at least mindist away."; } virtual void Activate( const char * input ) { Vector3 star_pos(0,0,0); if ( COMBAT_STAR ) { COMBAT_STAR->Get_Position( &star_pos ); } float min_dist = atof( input ); int count = 0; SLNode *objnode; for ( objnode = GameObjManager::Get_Smart_Game_Obj_List()->Head(); objnode; objnode = objnode->Next() ) { if ( objnode->Data() != (SmartGameObj*)COMBAT_STAR ) { Vector3 obj_pos; objnode->Data()->Get_Position( &obj_pos ); obj_pos -= star_pos; if ( obj_pos.Length() > min_dist ) { objnode->Data()->Set_Delete_Pending(); count++; } } } Print( "%d others say \"Bye Now!\"\n", count ); } }; class KillConsoleFunctionClass : public ConsoleFunctionClass { public: virtual LPCSTR Get_Name(void) {return "kill";} virtual LPCSTR Get_Help(void) {return "KILL - kills % of types (vehicles,soldiers,powerups,c4s,armeds,smarts,all). Server only";} virtual void Activate(LPCSTR input) { /* if (!cNetwork::I_Am_Server()) { Print(Get_Help()); return; } */ if (strcmp(input, "")) { // // C & S can both use id=xxxxxx format // char * p_id = ::strstr(input, "id="); if (p_id != NULL) { int id = -1; ::sscanf(p_id, "id=%d", &id); if (cNetwork::I_Am_Client()) { cRequestKillEvent * p_event = new cRequestKillEvent; p_event->Init(id); } else { NetworkObjectClass * p_object = NetworkObjectMgrClass::Find_Object(id); if (p_object != NULL) { p_object->Set_Delete_Pending(); } } return; } else if (!cNetwork::I_Am_Server()) { Print(Get_Help()); return; } // // Remaining functionality only for server. // char * p_pc = strstr(input, "percent="); int percent = 100; if (p_pc != NULL) { sscanf(p_pc, "percent=%d", &percent); if (percent < 0) { percent = 0; } else if (percent > 100) { percent = 100; } } int count = 0; PhysicalGameObj * p_object = NULL; for (SLNode * objnode = GameObjManager::Get_Game_Obj_List()->Head(); objnode != NULL; objnode = objnode->Next()) { p_object = objnode->Data()->As_PhysicalGameObj(); if (p_object == NULL) { continue; } if (p_object->As_SmartGameObj() != NULL && p_object == COMBAT_STAR) { continue; } if ((strstr(input, "vehicles") && p_object->As_VehicleGameObj() != NULL) || (strstr(input, "soldiers") && p_object->As_SoldierGameObj() != NULL) || // (strstr(input, "commandos") && p_object->As_CommandoGameObj() != NULL) || (strstr(input, "powerups") && p_object->As_PowerUpGameObj() != NULL) || (strstr(input, "c4s") && p_object->As_C4GameObj() != NULL) || (strstr(input, "armeds") && p_object->As_ArmedGameObj() != NULL) || (strstr(input, "smarts") && p_object->As_SmartGameObj() != NULL) || (strstr(input, "all")) || (strstr(input, "-9"))) { if (rand() % 101 <= percent) { objnode->Data()->Set_Delete_Pending(); count++; } } } Print("Killed a total of %d objects. Hope you're happy now.\n", count); } else { Print(Get_Help()); Print("\n Object types: vehicles, soldiers, commandos, powerups, c4s, armeds, smarts, all\n"); } } }; class SkeletonSliderDemoConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "skeleton_slider_demo"; } virtual const char * Get_Help( void ) { return "SKELETON_SLIDER_DEMO - toggles the Skeleton Slider Demo."; } virtual void Activate( const char * input ) { CombatManager::Toggle_Skeleton_Slider_Demo(); Print( "Skeleton Slider Demo Toggles\n" ); } }; class SkeletonStandersConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "skeleton_standers"; } virtual const char * Get_Help( void ) { return "SKELETON_STANDERS - creates 4 skeleton demos."; } virtual void Activate( const char * input ) { char * skel_names[ 4 ] = { "human_bt", "human_st", "human_bw", "human_sw", }; for ( int i = 0; i < 4; i++ ) { PhysicalGameObjDef * def = (PhysicalGameObjDef *)DefinitionMgrClass::Find_Typed_Definition( "Commando", CLASSID_GAME_OBJECT_DEF_SOLDIER ); WWASSERT( def ); PhysicalGameObj * obj = (PhysicalGameObj *)def->Create(); WWASSERT( obj ); Matrix3D tm; tm.Set_Translation( Vector3( 0, i*1.2f, 0 ) ); obj->Set_Transform( tm ); HTreeClass *tree = WW3DAssetManager::Get_Instance()->Get_HTree( skel_names[i] ); if ( tree ) { Animatable3DObjClass * robj = (Animatable3DObjClass *)obj->Peek_Model(); robj->Set_HTree( tree ); } } Print( "Skeleton Standers Created\n" ); } }; class GroupControllerTestConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "group_controller_test"; } virtual const char * Get_Help( void ) { return "GROUP_CONTROLLER_TEST - tests group controller code."; } virtual void Activate( const char * input ) { #if 0 GroupControllerClass * group = new TestGroupControllerClass(); for ( int i = 0; i < 3; i++) { SoldierGameObjDef * def = (SoldierGameObjDef *)DefinitionMgrClass::Find_Definition( "Nod Minigunner" ); WWASSERT( def ); SoldierGameObj * obj = (SoldierGameObj *)def->Create(); WWASSERT( obj ); obj->Set_Control_Owner( SmartGameObj::SERVER_CONTROL_OWNER ); obj->Set_Player_Type( PLAYERTYPE_NOD ); Vector3 pos( 3*i, 3*i, 1 ); obj->Set_Position( pos ); obj->Add_Observer( group ); // group->Add_Unit( obj ); } GroupControllerManager::Add_Controller( group ); Print( "Group Controller Test Started\n" ); #else Print( "Group Controller Test BROKEN\n" ); #endif } }; class StarVisibilityConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "star_visibility"; } virtual const char * Get_Help( void ) { return "STAR_VISIBILITY - toggles the logical visibility of the star."; } virtual void Activate( const char * input ) { if ( COMBAT_STAR ) { COMBAT_STAR->Set_Is_Visible( !COMBAT_STAR->Is_Visible() ); Print( "Star is %svisible.\n", COMBAT_STAR->Is_Visible() ? "" : "in" ); } } }; /* class StealthConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "stealth"; } virtual const char * Get_Help( void ) { return "STEALTH - toggle stealth ability on star (client only)."; } virtual void Activate( const char * input ) { //if (COMBAT_STAR != NULL) { // COMBAT_STAR->Toggle_Stealth(); // Print("Star %s stealth ability\n", COMBAT_STAR->Is_Stealth_Enabled() ? "has" : "does NOT have"); //} if (cNetwork::I_Am_Client()) { cPlayer * p_player = cNetwork::Get_My_Player_Object(); if (p_player == NULL) { Print("Error: you don't have a player object."); } else { bool i_can_stealth = p_player->StealthEnabled.Toggle(); Print("You %s stealth ability\n", i_can_stealth ? "have" : "do NOT have"); if (cNetwork::I_Am_Only_Client()) { cStealthEvent * p_event = new cStealthEvent; p_event->Init(p_player->StealthEnabled.Get()); } else { p_player->Mark_As_Modified(); } } } else { Print("Error: you are not a client."); } } }; */ class ProfileConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "profile"; } virtual const char * Get_Help( void ) { return "PROFILE - send a profile command (on,off,up,<#>)."; } virtual void Activate( const char * input ) { Get_Console()->Profile_Command( input ); } }; class QuickStatsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "quick_stats"; } virtual const char * Get_Alias( void ){ return "qs"; } virtual const char * Get_Help( void ) { return "QUICK_STATS - stats profile + profile on."; } virtual void Activate( const char * input ) { ConsoleFunctionManager::Parse_Input("stats profile"); Get_Console()->Profile_Command( "on" ); Get_Console()->Profile_Command( "1" ); Get_Console()->Profile_Command( "reset" ); if (ConsoleBox.Is_Exclusive()) { ConsoleBox.Set_Profile_Mode(true); } } }; class ProfileCollectBeginConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "profile_collect_begin"; } virtual const char * Get_Help( void ) { return "PROFILE_COLLECT_BEGIN"; } virtual void Activate( const char * input ) { WWProfileManager::Begin_Collecting(); } }; class ProfileCollectEndConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "profile_collect_end"; } virtual const char * Get_Help( void ) { return "PROFILE_COLLECT_END"; } virtual void Activate( const char * input ) { WWProfileManager::End_Collecting("profile_log.txt"); } }; class SetTheStarConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_the_star"; } virtual const char * Get_Help( void ) { return "SET_THE_STAR - set the star to a different object."; } virtual void Activate( const char * input ) { SmartGameObj * star = GameObjManager::Find_SmartGameObj( atoi( input ) ); if ( star != NULL && star->As_SoldierGameObj() != NULL ) { CombatManager::Set_The_Star( star->As_SoldierGameObj() ); } } }; class TeleportStarConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "teleport_star"; } virtual const char * Get_Help( void ) { return "TELEPORT_STAR < x, y, z > - teleport the star."; } virtual void Activate( const char * input ) { float x,y,z; ::sscanf( input, "%f, %f, %f", &x, &y, &z ); if ( COMBAT_STAR ) { COMBAT_STAR->Set_Position( Vector3( x,y,z ) ); Print( "Teleported Star to %f %f %f\n", x,y,z ); } } }; class ScaleTimeConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "scale_time"; } virtual const char * Get_Help( void ) { return "SCALE_TIME < factor > - scale time (SP only)."; } virtual void Activate( const char * input ) { if (IS_SOLOPLAY) { float scale = atof( input ); if ( scale <= 0 ) { scale = 1; } TimeManager::Set_Time_Scale( scale ); Print( "TimeScaling %f\n", scale ); } else { Print(Get_Help()); } } }; class ParticleToggleConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "particle_toggle"; } virtual const char * Get_Help( void ) { return "PARTICLE_TOGGLE - toggles particle emission on and off."; } virtual void Activate( const char * input ) { ParticleEmitterClass::Disable_All_Emitters(!ParticleEmitterClass::Are_Emitters_Disabled()); if (ParticleEmitterClass::Are_Emitters_Disabled()) { Print("Emitters disabled\n"); } else { Print("Emitters enabled\n"); } } }; class TargetSteeringToggleConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "target_steering_toggle"; } virtual const char * Get_Help( void ) { return "TARGET_STEERING_TOGGLE - toggles vehicle targetsteering."; } virtual void Activate( const char * input ) { Print( "Target Steering %s\n", VehicleGameObj::Toggle_Target_Steering() ? "ON" : "OFF" ); } }; class DazzleReloadConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "dazzle_reload"; } virtual const char * Get_Help( void ) { return "DAZZLE_RELOAD - reloads the dazzle ini file (DANGEROUS!)."; } virtual void Activate( const char * input ) { FileClass * dazzle_ini_file = _TheFileFactory->Get_File("DAZZLE.INI"); if (dazzle_ini_file) { INIClass dazzle_ini(*dazzle_ini_file); DazzleRenderObjClass::Init_From_INI(&dazzle_ini); _TheFileFactory->Return_File(dazzle_ini_file); } } }; /* ** ** Class to print out data safe stats ** ** ST - 7/18/2001 2:06PM */ class DataSafeStatsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "safe_stats"; } virtual const char * Get_Help( void ) { return "SAFE_STATS - Show data safe statistics"; } virtual void Activate( const char * input ) { static char dump_buffer[1024]; GenericDataSafeClass::Dump_Safe_Stats(dump_buffer, 1024); Print(dump_buffer); } }; #endif // WWDEBUG, development only commands class ScreenUVBiasConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "screen_uv_bias"; } //virtual const char * Get_Alias( void ) { return "sub"; } virtual const char * Get_Help( void ) { return "SCREEN_UV_BIAS - toggles the half pixel bias in screen text."; } virtual void Activate( const char * input ) { WW3D::Set_Screen_UV_Bias( !WW3D::Is_Screen_UV_Biased() ); Print( "Screen UV Bias Switched\n" ); } }; class SetBandwidthBudgetOutConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "set_bw_budget_out"; } virtual const char * Get_Alias( void ) { return "sbbo"; } virtual const char * Get_Help( void ) { return "SET_BW_BUDGET_OUT - set total bps budget out."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); ULONG bbo = (ULONG) ::atol(input); if (bbo > 0) { if (cNetwork::I_Am_Server()) { cNetwork::PServerConnection->Set_Bandwidth_Budget_Out(bbo); } if (cNetwork::I_Am_Client()) { cNetwork::PClientConnection->Set_Bandwidth_Budget_Out(bbo); // // Notify the server // cClientBboEvent * p_event = new cClientBboEvent; p_event->Init(bbo); } int bw_scale = (bbo * 2) / 10; bw_scale = (bw_scale / 1000) * 1000; cBandwidthGraph::Set_Scale(bw_scale); if (cNetwork::PClientConnection != NULL) { cNetwork::PClientConnection->Init_Stats(); Print("Network stats for client connection reset.\n"); } if (cNetwork::PServerConnection != NULL) { cNetwork::PServerConnection->Init_Stats(); Print("Network stats for server connection reset.\n"); } //ConsoleFunctionManager::Parse_Input("clear ns"); // reset stats } } }; class GameOverConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "gameover"; } virtual const char * Get_Help( void ) { return "GAMEOVER - end current game (server only)."; } virtual void Activate( const char * input ) { bool print_help = false; if (IS_MISSION) { // // Fail the mission // #ifdef WWDEBUG ConsoleFunctionManager::Parse_Input("mission failure"); #else //WWDEBUG print_help = true; #endif //WWDEBUG } else if (!cNetwork::I_Am_Server()) { print_help = true; } else { if (cNetwork::I_Am_Only_Server()) { Print("Terminating game on demand...\n"); cGameData::Set_Manual_Restart(true); } else { #ifdef WWDEBUG cGameData::Set_Manual_Restart(true); #else //WWDEBUG print_help = true; #endif //WWDEBUG } } if (print_help) { Print("GAMEOVER is for dedicated server only\n"); } } }; class ToggleSortingConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "toggle_sorting"; } virtual const char * Get_Help( void ) { return "TOGGLE_SORTING - toggles WW3D sorting."; } virtual void Activate( const char * input ) { WW3D::Enable_Sorting(!WW3D::Is_Sorting_Enabled()); Print( WW3D::Is_Sorting_Enabled() ? "Sorting Enabled\n" : "Sorting Disabled\n" ); } }; class ExtrasConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "extras"; } virtual const char * Get_Help( void ) { return "EXTRAS "; } virtual void Activate( const char * input ) { #if 0 //int crc = CRC_String("quantifigon");//not any more, pw changed... //WWDEBUG_SAY(("*E* %d\n", CRC_String(input))); //bool onoff = (CRC_String(input) == 0xa8452331); CNCPurchaseMainMenuClass::Enable_Secrets(false); // Just to scramble code CNCPurchaseMainMenuClass::Enable_Secrets(false); // Just to scramble code bool onoff = (CRC_String(input) == 65729409); CNCPurchaseMainMenuClass::Enable_Secrets(onoff); // Just to scramble code if (The_Game()->IsLaddered.Is_True()) { onoff = false; CNCPurchaseMainMenuClass::Enable_Secrets(onoff); // Just to scramble code Print("Not allowed in laddered games\r\n"); } CNCPurchaseMainMenuClass::Enable_Secrets(onoff); if (CNCPurchaseMainMenuClass::Are_Secrets_Enabled()) { Print("extras ENABLED!\r\n"); } CNCPurchaseMainMenuClass::Enable_Secrets(onoff); // Just to scramble code #else // (gth) secrets don't need a password any more... if (The_Game()->IsLaddered.Is_True()) { CNCPurchaseMainMenuClass::Enable_Secrets(false); Print("Not allowed in laddered games\r\n"); } else { CNCPurchaseMainMenuClass::Enable_Secrets(true); if (CNCPurchaseMainMenuClass::Are_Secrets_Enabled()) { Print("extras ENABLED!\r\n"); } } #endif } }; class DebugDeviceConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "debug_device"; } const char * Get_Alias( void ) { return "dd"; } virtual const char * Get_Help( void ) { return "DEBUG_DEVICE [device|on|off] - toggles the debug device (screen, mono, dbwin32, log, windows)"; } virtual void Activate( const char * input ) { char str[128]; sprintf(str,"ERROR (%s)\n", input ); if (stricmp(input,"screen") == 0) { DebugManager::Toggle_Device_Enabled( DebugManager::DEBUG_DEVICE_SCREEN ); sprintf(str, "Screen Debug %s\n", DebugManager::Is_Device_Enabled( DebugManager::DEBUG_DEVICE_SCREEN ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"mono") == 0) { DebugManager::Toggle_Device_Enabled( DebugManager::DEBUG_DEVICE_MONO ); sprintf(str, "Mono Debug %s\n", DebugManager::Is_Device_Enabled( DebugManager::DEBUG_DEVICE_MONO ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"dbwin32") == 0) { DebugManager::Toggle_Device_Enabled( DebugManager::DEBUG_DEVICE_DBWIN32 ); sprintf(str, "DBWin32 Debug %s\n", DebugManager::Is_Device_Enabled( DebugManager::DEBUG_DEVICE_DBWIN32 ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"log") == 0) { DebugManager::Toggle_Device_Enabled( DebugManager::DEBUG_DEVICE_LOG ); sprintf(str, "Log File Debug %s\n", DebugManager::Is_Device_Enabled( DebugManager::DEBUG_DEVICE_LOG ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"windows") == 0) { DebugManager::Toggle_Device_Enabled( DebugManager::DEBUG_DEVICE_WINDOWS ); sprintf(str, "Windows Debug %s\n", DebugManager::Is_Device_Enabled( DebugManager::DEBUG_DEVICE_WINDOWS ) ? "Enabled" : "Disabled" ); } else if (stricmp(input,"on") == 0) { DebugManager::Enable_Device( (DebugManager::DebugDevice)-1 ); sprintf(str, "All Debug Devices Enabled\n" ); } else if (stricmp(input,"off") == 0) { DebugManager::Disable_Device( (DebugManager::DebugDevice)-1 ); sprintf(str, "All Debug Devices Disabled\n" ); } Print(str); Debug_Say((str)); } }; class AdminMessageConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "admin_message"; } const char * Get_Alias( void ) { return "amsg"; } virtual const char * Get_Help( void ) { return "ADMIN_MESSAGE - sends an admin message to all clients. Host only."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); if (cNetwork::I_Am_Server() && ::strlen(input) > 0) { WideStringClass widestring; widestring.Convert_From(input); cScTextObj * p_message = new cScTextObj; p_message->Init(widestring, TEXT_MESSAGE_PUBLIC, true, HOST_TEXT_SENDER, -1); } else { Print(Get_Help()); } } }; class MessageConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "message"; } const char * Get_Alias( void ) { return "msg"; } virtual const char * Get_Help( void ) { return "MESSAGE - sends a chat message to all clients. Host only."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); if (cNetwork::I_Am_Server() && ::strlen(input) > 0) { WideStringClass widestring(input, true); cScTextObj *event_obj = new cScTextObj; event_obj->Init(widestring, TEXT_MESSAGE_PUBLIC, false, HOST_TEXT_SENDER, -1); } else { Print(Get_Help()); } } }; #ifndef FREEDEDICATEDSERVER class FPSConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "fps"; } const char * Get_Alias( void ) { return "fps"; } virtual const char * Get_Help( void ) { return "FPS - toggle FPS display."; } virtual void Activate( const char * ) { // if (!cNetwork::I_Am_Server()) { cDevOptions::ShowFps.Toggle(); // } } }; #endif //FREEDEDICATEDSERVER #if 1 class ClientPhysicsOptimizationConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "client_physics_optimization"; } const char * Get_Alias( void ) { return "cpo"; } virtual const char * Get_Help( void ) { return "CLIENT_PHYSICS_OPTIMIZATION [0|1] - Update only visible physic objects on client."; } virtual void Activate( const char * input) { if (!cNetwork::I_Am_Server()) { int state = 0; int argcount=::sscanf(input, "%d", &state); if (argcount==1) { state=!!state; } else { state=!COMBAT_SCENE->Get_Update_Only_Visible_Objects(); } COMBAT_SCENE->Set_Update_Only_Visible_Objects(state==1); Print( "Client physics optimization %s\n", state ? "ENABLED" : "DISABLED"); } } }; #endif class StatsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "stats"; } virtual const char * Get_Help( void ) { return "STATS - changes stats display."; } virtual void Activate( const char * input ) { StatisticsDisplayManager::Set_Display( input ); } }; class ResolutionConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "resolution"; } virtual const char * Get_Help( void ) { return "RESOLUTION [+|-]"; } virtual void Activate( const char * input ) { int w,h,bits; bool windowed; WW3D::Get_Device_Resolution(w,h,bits,windowed); const RenderDeviceDescClass& desc=WW3D::Get_Render_Device_Desc(); const DynamicVectorClass & resos=desc.Enumerate_Resolutions(); for (int i=0;i=resos.Count()) i=0; else if (i<0) i=resos.Count()-1; WW3DErrorType error=WW3D::Set_Device_Resolution( resos[i].Width, resos[i].Height, resos[i].BitDepth, -1, true ); if (error==WW3D_ERROR_OK) { RectClass rect; rect.Left = 0; rect.Top = 0; rect.Right = resos[i].Width; rect.Bottom = resos[i].Height; Render2DClass::Set_Screen_Resolution(rect); Print( "Resolution changed to %d * %d, %d bits\n", resos[i].Width,resos[i].Height,resos[i].BitDepth); } else { Print( "Failed to set resolution to %d * %d, %d bits\n", resos[i].Width,resos[i].Height,resos[i].BitDepth); error=WW3D::Set_Device_Resolution( w, h, bits, -1, true ); } } else { Print("Resolution is %d * %d, %d bits\n",w,h,bits); } } }; class ToggleSurfaceEffectsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "toggle_surface_effects"; } virtual const char * Get_Help( void ) { return "TOGGLE_SURFACE_EFFECTS - toggles surface effects."; } virtual void Activate( const char * input ) { SurfaceEffectsManager::Enable_Effects(!SurfaceEffectsManager::Are_Effects_Enabled()); Print( SurfaceEffectsManager::Are_Effects_Enabled() ? "Surface Effects Enabled\n" : "Surface Effects Disabled\n" ); } }; //---------------------------------------------------------------------------- // // SHIPPING CONSOLE FUNCTIONS ONLY // THESE MUST BE DEBUGGED! THEY ARE PRESENT IN RELEASE BUILDS!!! // //---------------------------------------------------------------------------- class DisplayFindpathConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "display_findpath"; } virtual const char * Get_Help( void ) { return "DISPLAY_FINDPATH - Toggles the display of findpath lines."; } virtual void Activate( const char * input ) { Toggle_Display_Findpaths(); } }; class DonateConsoleFunctionClass : public ConsoleFunctionClass { StringClass HelpText; public: virtual const char * Get_Name(void) {return "donate";} virtual const char * Get_Help(void) { HelpText.Format("DONATE - donate money (minimum %d credits) to teammate.", cDonateEvent::Get_Minimum_Acceptable_Donation()); return HelpText.Peek_Buffer();; } virtual void Activate(const char * input) { int amount = 0; char recipient[1000]; ::sscanf(input, "%d %s", &amount, recipient); cPlayer * p_me = cNetwork::Get_My_Player_Object(); cPlayer * p_recipient = cPlayerManager::Find_Player(recipient); if (p_me != NULL && p_recipient != NULL && amount >= cDonateEvent::Get_Minimum_Acceptable_Donation() && (p_me->Get_Player_Type() == p_recipient->Get_Player_Type()) && p_me->Get_Money() >= amount) { cDonateEvent * p_event = new cDonateEvent; p_event->Init(amount, p_recipient->Get_Id()); } else { Print(Get_Help()); } } }; class DoStuffConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "do_stuff"; } virtual const char * Get_Help( void ) { return "DO_STUFF - Execute some task..."; } virtual void Activate( const char * input ) { // // This command is for executing some test... put whatever code // you want here... // /* int recipient_id = atoi(input); WideStringClass msg; msg.Format(L"Hola amigo!"); if (cNetwork::I_Am_Client()) { cCsTextObj * p_message = new cCsTextObj; p_message->Init(msg, TEXT_MESSAGE_PRIVATE, cNetwork::Get_My_Id(), recipient_id); } else { cScTextObj * p_message = new cScTextObj; p_message->Init(msg, TEXT_MESSAGE_PRIVATE, HOST_TEXT_SENDER, recipient_id); } */ //::exit(1); //::Sleep(::atoi(input)); /* #if 0 if (cNetwork::I_Am_Server()) { float x, y, z; ::sscanf(input, "%f, %f, %f", &x, &y, &z); Vector3 position; position.Set(Vector3(x, y, z)); cScExplosionEvent * p_event = new cScExplosionEvent; p_event->Init(1, position); } #endif */ cPlayer * p_player = cPlayerManager::Find_Player(input); if (p_player != NULL) { int id = p_player->Get_Id(); cNetwork::Server_Kill_Connection(id); cNetwork::Cleanup_After_Client(id); } } }; // // REQUIRED for shipping dedicated server. // class QuitConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "quit"; } virtual const char * Get_Help( void ) { if (!SlaveMaster.Am_I_Slave()) { return ("QUIT - End game and quit to desktop (dedicated server only).\n"); } else { return ("QUIT - End game and restart slave server.\nTo exit without restarting use 'QUIT_SLAVE' on master server\n"); } } virtual void Activate( const char * input ) { if (!IS_MISSION) { if (AutoRestart.Is_Active()) { AutoRestart.Set_Restart_Flag(false); Set_Exit_On_Exception(true); cGameData::Set_Manual_Exit(true); } else { if (cNetwork::I_Am_Server()) { if (The_Game() && The_Game()->IsDedicated.Is_True()) { if (!SlaveMaster.Am_I_Slave()) { Print("Terminating slaves on demand...\n"); SlaveMaster.Shutdown_Slaves(); } Print("Terminating game on demand...\n"); AutoRestart.Set_Restart_Flag(false); Set_Exit_On_Exception(true); cGameData::Set_Manual_Exit(true); } else { Print("QUIT is for dedicated server only.\n"); } } else { /* ** I_Am_Server may not report true if we just started up and we aren't a server yet. */ if (ConsoleBox.Is_Exclusive()) { AutoRestart.Set_Restart_Flag(false); Set_Exit_On_Exception(true); cGameData::Set_Manual_Exit(true); } else { Print("QUIT is for dedicated server only.\n"); } } } } } }; // // REQUIRED for shipping dedicated server. // class QuitSlaveConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "quit_slave"; } virtual const char * Get_Help( void ) { return "QUIT_SLAVE slavename - Shutdown a slave server (dedicated master server only)."; } virtual void Activate( const char * input ) { if (!IS_MISSION) { if (cNetwork::I_Am_Server()) { if (The_Game() && The_Game()->IsDedicated.Is_True()) { if (!SlaveMaster.Am_I_Slave()) { Print("Terminating slave %s on demand...\n", input); if (SlaveMaster.Shutdown_Slave((char*)input)) { Print("Slave %s terminated\n", input); } else { Print("Slave %s not found\n", input); } return; } } } } Print("QUIT_SLAVE is for dedicated master server only.\n"); } }; class NetUpdateRateConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "net_update_rate"; } virtual const char * Get_Alias( void ){ return "nur"; } virtual const char * Get_Help( void ) { return "NET_UPDATE_RATE - set the max. net update think rate (times per second)."; } virtual void Activate( const char * input ) { WWASSERT(input != NULL); int rate = ::atoi(input); #ifdef WWDEBUG if (rate > 0) { #else //WWDEBUG if (rate >= 5 && rate <= 30) { #endif //WWDEBUG cUserOptions::NetUpdateRate.Set(rate); Print( "NetUpdateRate set to %d.", rate); } else { Print(Get_Help()); } } }; class GameInfoConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "game_info"; } virtual const char * Get_Help( void ) { return "GAME_INFO - Print info about a game in progress to console box"; } virtual void Activate(const char *) { bool active = false; if (cNetwork::I_Am_Server()) { if (The_Game() && The_Game()->IsDedicated.Is_True()) { char upstring[256] = "?"; char timestr[256] = "?"; FILETIME creation; FILETIME exit; FILETIME kernel; FILETIME user; int ok = GetProcessTimes(GetCurrentProcess(), &creation, &exit, &kernel, &user); if (ok) { FILETIME local; if (FileTimeToLocalFileTime(&creation, &local)) { SYSTEMTIME time; if (FileTimeToSystemTime(&local, &time)) { GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, &time, NULL, upstring, 256); GetTimeFormat(LOCALE_SYSTEM_DEFAULT, TIME_FORCE24HOURFORMAT, &time, NULL, timestr, 256); strcat(upstring, " - "); strcat(upstring, timestr); } } } GameModeClass* game = GameModeManager::Find("Combat"); if (game && game->Is_Active()) { game = GameModeManager::Find("WOL"); if (game && game->Is_Active()) { ConsoleBox.Print("Westwood Online mode active since %s\n", upstring); active = true; } else { game = GameModeManager::Find("LAN"); if (game && game->Is_Active()) { if (cGameSpyAdmin::Get_Is_Server_Gamespy_Listed()) { ConsoleBox.Print("GameSpy mode active since %s\n", upstring); } else { ConsoleBox.Print("LAN mode active since %s\n", upstring); } active = true; } } } if (active && The_Game()) { unsigned long time = The_Game()->Get_Time_Remaining_Seconds(); unsigned long seconds = time % 60; unsigned long minutes = (time / 60) % 60; unsigned long hours = (time / (60*60)); if (The_Game()->Is_Gameplay_Permitted()) { ConsoleBox.Print("Gameplay in progress\n"); } else { ConsoleBox.Print("Gameplay Pending\n"); } char buf[256]; sprintf(buf, " Map : %s\n", The_Game()->Get_Map_Name().Peek_Buffer()); ConsoleBox.Print(buf); sprintf(buf, " Time : %d.%02d.%02d\n", hours, minutes, seconds); ConsoleBox.Print(buf); sprintf(buf, " Fps : %d\n", cNetwork::Get_Fps()); ConsoleBox.Print(buf); sprintf(buf, " GDI : %d/%d players %d points\n", cPlayerManager::Tally_Team_Size(PLAYERTYPE_GDI), The_Game()->Get_Max_Players(), (int)cTeamManager::Find_Team(PLAYERTYPE_GDI)->Get_Score()); ConsoleBox.Print(buf); sprintf(buf, " NOD : %d/%d players %d points\n", cPlayerManager::Tally_Team_Size(PLAYERTYPE_NOD), The_Game()->Get_Max_Players(), (int)cTeamManager::Find_Team(PLAYERTYPE_NOD)->Get_Score()); ConsoleBox.Print(buf); ConsoleBox.Print("\n"); } } } } }; class PlayerInfoConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "player_info"; } virtual const char * Get_Help( void ) { return "PLAYER_INFO - Print info about players in the game to the console box"; } virtual void Activate(const char *) { if (cNetwork::I_Am_Server() && The_Game() && The_Game()->IsDedicated.Is_True() && cNetwork::PServerConnection != NULL) { unsigned long time = TIMEGETTIME(); unsigned long bw = 0; if (cNetwork::PServerConnection->Get_Num_RHosts() == 0) { ConsoleBox.Print("No players\n"); } else { ConsoleBox.Print("\rId Name Score Side\tPing\tAddress Kbits/s Time\n\n"); for (int i=cNetwork::PServerConnection->Get_Min_RHost() ; i <= cNetwork::PServerConnection->Get_Max_RHost() ; i++) { cRemoteHost *client = cNetwork::PServerConnection->Get_Remote_Host(i); if (client) { cPlayer * playerptr = cPlayerManager::Find_Player(i); if (playerptr) { WideStringClass name(playerptr->Get_Name(), true); StringClass short_name; name.Convert_To(short_name); int len = name.Get_Length(); char temp_name[256]; strcpy(temp_name, short_name.Peek_Buffer()); strncat(temp_name, " ", 14-len); unsigned long dur = (time - client->Get_Creation_Time()) / 1000; unsigned long seconds = dur % 60; unsigned long minutes = (dur / 60) % 60; unsigned long hours = (dur / (60*60)); bw += PacketManager.Get_Compressed_Bandwidth_Out(&client->Get_Address()); char addr_string[128]; sockaddr_in *addr = &client->Get_Address(); sprintf(addr_string, "%d.%d.%d.%d;%d", (int)(addr->sin_addr.S_un.S_un_b.s_b1), (int)(addr->sin_addr.S_un.S_un_b.s_b2), (int)(addr->sin_addr.S_un.S_un_b.s_b3), (int)(addr->sin_addr.S_un.S_un_b.s_b4), unsigned int(ntohs(addr->sin_port))); int addr_string_len = strlen(addr_string); char local_addr_string[128]; strcpy(local_addr_string, addr_string); if (addr_string_len < 21) { strncat(local_addr_string, " ", 21-addr_string_len); } Vector3 color = playerptr->Get_Color(); char buffer[256]; sprintf(buffer, "%3d %s%- 6d %s\t%d\t%s%- 7d %03d.%02d.%02d\n", i, temp_name, (int)playerptr->Get_Score(), (playerptr->Get_Player_Type() == PLAYERTYPE_NOD) ? "NOD" : "GDI", (int)client->Get_Average_Internal_Pingtime_Ms(), local_addr_string, (int)(PacketManager.Get_Compressed_Bandwidth_Out(&client->Get_Address()) / 1024), hours, minutes, seconds); WideStringClass ws(buffer, true); ConsoleBox.Add_Message(&ws, &color, true); } } } ConsoleBox.Print("Total current bandwidth usage for players is %d kilobits per second\n", bw / 1024); } } else { Print("player_info is for dedicated server only\n"); } } }; class KickConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "kick"; } virtual const char * Get_Help( void ) { return "KICK [|] - Kick a user from the game."; } bool KickWOLUser(const WideStringClass & user_name) { GameModeClass* game = GameModeManager::Find("WOL"); if (game && game->Is_Active()) { if (user_name.Get_Length() > 0) { WolGameModeClass* wolgame = reinterpret_cast(game); if (wolgame->Kick_Player(user_name)) { StringClass smallstring(true); user_name.Convert_To(smallstring); ConsoleBox.Print("%s was kicked\n", smallstring.Peek_Buffer()); return true; } } } return false; } bool KickWOLUser(int id) { cPlayer *player = cPlayerManager::Find_Player(id); if (player) { return KickWOLUser(player->Get_Name()); } return false; } bool KickGameSpyUser(int id) { if (cGameSpyAdmin::Is_Gamespy_Game()) { return GameSpyBanList.Kick_Player(id); } return false; } bool KickGameSpyUser(const WideStringClass & user_name) { if (cGameSpyAdmin::Is_Gamespy_Game()) { cPlayer *player = NULL; for (SLNode *player_node = cPlayerManager::Get_Player_Object_List ()->Head () ; player_node != NULL; player_node = player_node->Next ()) { player = player_node->Data (); WWASSERT (player != NULL); if (player->Get_Is_Active().Is_False() || !player->Is_Human()) { continue; } if (stricmp(StringClass(user_name), StringClass(player->Get_Name())) == 0) { KickGameSpyUser(player->Get_Id()); return true; } } } return false; } virtual void Activate( const char * input ) { if (cNetwork::I_Am_Server()) { if (!input || !(*input)) return; bool kicked = false; WideStringClass user_name(input, true); kicked = KickWOLUser(user_name); if (!kicked) kicked = KickGameSpyUser(user_name); if (!kicked) { // try to kick by Id number // make sure this is a decimal number since atoi returns 0 on error // and we don't want to kick player 0 unless they really mean to const char *t = input; if (!(*t)) t = NULL; while (t && *t) { if (!isdigit(*t)) t = NULL; else t++; } if (t) { kicked = KickWOLUser(atoi(input)); if (!kicked) kicked = KickGameSpyUser(atoi(input)); } } if (!kicked) { ConsoleBox.Print("%s not found\n", input); } } } }; class BanConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "ban"; } virtual const char * Get_Help( void ) { return "BAN [|] - Permanently ban a user from this server(GameSpy & WOL mode only)."; } virtual void Activate( const char * input ) { GameModeClass* wolgame = GameModeManager::Find("WOL"); bool is_wol = false; if (wolgame && wolgame->Is_Active()) { is_wol = true; } //if (cGameSpyAdmin::Is_Gamespy_Game() && cNetwork::I_Am_Server()) { if ((cGameSpyAdmin::Is_Gamespy_Game() || is_wol) && cNetwork::I_Am_Server()) { if (!input || !(*input)) return; cPlayer *player = NULL; for (SLNode *player_node = cPlayerManager::Get_Player_Object_List ()->Head () ; player_node != NULL; player_node = player_node->Next ()) { player = player_node->Data (); WWASSERT (player != NULL); if (player->Get_Is_Active().Is_False() || !player->Is_Human()) { continue; } if (stricmp(StringClass(input), StringClass(player->Get_Name())) == 0) { if (is_wol) { ((WolGameModeClass*)wolgame)->Ban_Player(player->Get_Name(), player->Get_Ip_Address()); } else { if (player->Get_GameSpy_Hash_Id().Is_Empty()) { GameSpyBanList.Ban_User(input); } else { GameSpyBanList.Ban_User(input, player->Get_GameSpy_Hash_Id()); } } break; } } if (player_node == NULL) { // make sure this is a decimal number since atoi returns 0 on error // and we don't want to kick player 0 unless they really mean to const char *t = input; if (!(*t)) t = NULL; while (t && *t) { if (!isdigit(*t)) t = NULL; else t++; } if (t) { player = cPlayerManager::Find_Player(atoi(input)); if (player) { if (is_wol) { ((WolGameModeClass*)wolgame)->Ban_Player(player->Get_Name(), player->Get_Ip_Address()); } else { if (player->Get_GameSpy_Hash_Id().Is_Empty() && !player->Get_Name().Is_Empty()) { GameSpyBanList.Ban_User(StringClass(player->Get_Name())); } else if (!player->Get_GameSpy_Hash_Id().Is_Empty()) { GameSpyBanList.Ban_User(StringClass(player->Get_Name()), player->Get_GameSpy_Hash_Id()); } } } } else { ConsoleBox.Print("%s not found\n", input); } } } } }; class AllowConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "allow"; } virtual const char * Get_Help( void ) { return "ALLOW [|] - Remove user channel ban from this server (WOL mode only)."; } virtual void Activate( const char * input ) { GameModeClass* game = GameModeManager::Find("WOL"); if (!input || !(*input)) return; if (game && game->Is_Active()) { WideStringClass wname(input, true); if (wname.Get_Length() > 0 && wname.Get_Length() <15) { RefPtr wol_session = WWOnline::Session::GetInstance(false); if (wol_session.IsValid()) { wol_session->BanUser(wname, false); } } } } }; class PageConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "page"; } virtual const char * Get_Help( void ) { return "PAGE Nickname Message - Page a Westwood Online user."; } virtual void Activate( const char * input ) { static unsigned long last_page = 0; GameModeClass* wolgame = GameModeManager::Find("WOL"); bool is_wol = false; if (wolgame && wolgame->Is_Active()) { is_wol = true; } if (is_wol) { RefPtr wol_session = WWOnline::Session::GetInstance(false); if (wol_session.IsValid()) { unsigned long time = TIMEGETTIME(); if (time < last_page || time - last_page > 1000) { last_page = time; char temp[1024]; strncpy(temp, input, 1023); char *name = temp; char *message = strchr(temp, ' '); if (message) { *message++ = 0; if (strlen(name) && strlen(message)) { WideStringClass wname(name, true); WideStringClass wmessage(message, true); wol_session->PageUser(wname, wmessage); } } } } } } }; // // REQUIRED for shipping dedicated server. // class RestartConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "restart"; } virtual const char * Get_Help( void ) { return "RESTART - Quit to desktop and restart process (dedicated server only)."; } virtual void Activate( const char * input ) { if (!IS_MISSION) { if (AutoRestart.Is_Active()) { AutoRestart.Set_Restart_Flag(true); Set_Exit_On_Exception(true); cGameData::Set_Manual_Exit(true); } else { if (cNetwork::I_Am_Server()) { if (The_Game() && The_Game()->IsDedicated.Is_True()) { if (SlaveMaster.Am_I_Slave() == false) { Print("Terminating slaves on demand...\n"); SlaveMaster.Shutdown_Slaves(); } Print("Restarting game on demand...\n"); AutoRestart.Set_Restart_Flag(true); Set_Exit_On_Exception(true); cGameData::Set_Manual_Exit(true); } else { Print("RESTART is for dedicated server only.\n"); } } else { Print("RESTART is for dedicated server only.\n"); } } } } }; class LogMeshStatsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "log_mesh_stats"; } virtual const char * Get_Help( void ) { return "LOG_MESH_STATS - log stats to debug window or file."; } virtual void Activate( const char * input ) { TheDX8MeshRenderer.Request_Log_Statistics(); } }; class LogTexturesConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "log_textures"; } virtual const char * Get_Help( void ) { return "LOG_TEXTURES - log texture statistics to debug window or file."; } virtual void Activate( const char * input ) { WW3DAssetManager::Get_Instance()->Log_All_Textures(); } }; class DeviceInfoConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "device_info"; } virtual const char * Get_Help( void ) { return "DEVICE_INFO - get device driver info."; } virtual void Activate( const char * input ) { const RenderDeviceDescClass & rddesc = WW3D::Get_Render_Device_Desc(); Print( "Render Device: %s\n", rddesc.Get_Device_Name() ); Print( "Graphics Hardware: %s\n",rddesc.Get_Hardware_Name() ); } }; // // TEMP DEBUG CODE // class NewTCADOConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "newtcado"; } virtual const char * Get_Help( void ) { return "newtcado - Toggle new TCADO code"; } virtual void Activate( const char * input ) { bool is_new_tcado = cDevOptions::UseNewTCADO.Toggle(); Print(is_new_tcado ? "Using new TCADO.\n" : "Using old TCADO.\n" ); } }; class TimeOfDayConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("time_of_day");} virtual const char * Get_Help (void) {return ("TIME_OF_DAY - sets the time of day for the background.");} virtual void Activate (const char *input) { if (COMBAT_SCENE != NULL) { unsigned hours, minutes; if (sscanf (input, "%d %d", &hours, &minutes) == 2) { if (BackgroundMgrClass::Set_Time_Of_Day (hours, minutes)) { const float theta = (((hours * 60.0f) + minutes) / 1440.0f) * 2.0f * WWMATH_PI; BackgroundMgrClass::Set_Light_Source_Type (BackgroundMgrClass::LIGHT_SOURCE_TYPE_SUN); COMBAT_SCENE->Set_Sun_Light_Orientation (0.0f, theta + (WWMATH_PI * 1.5f)); Print ("Time of day changed\n"); } } } } }; class CloudsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("clouds");} virtual const char * Get_Help (void) {return ("CLOUDS [ramptime [0+]]");} virtual void Activate (const char *input) { const char *feedbackstring = "Clouds changed\n"; int argcount; float cloudcover, gloominess, ramptime; bool success = false; argcount = sscanf (input, "%f %f %f", &cloudcover, &gloominess, &ramptime); switch (argcount) { case 2: success = BackgroundMgrClass::Set_Clouds (cloudcover, gloominess); break; case 3: success = BackgroundMgrClass::Set_Clouds (cloudcover, gloominess, ramptime); break; default: // Do nothing. break; } if (success) Print (feedbackstring); } }; class CopyLogsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("copy_logs");} virtual const char * Get_Help (void) {return ("COPY_LOGS - enable/disable error logging to network.");} virtual void Activate (const char *input) { if (!::stricmp(input, "on")) { RegistryClass registry(APPLICATION_SUB_KEY_NAME_DEBUG); WWASSERT(registry.Is_Valid()); registry.Set_Int("SystemInfoLogDisable", FALSE); registry.Set_Int("DisableLogCopying", FALSE); Print("Log copying is ON."); } else if (!::stricmp(input, "off")) { RegistryClass registry(APPLICATION_SUB_KEY_NAME_DEBUG); WWASSERT(registry.Is_Valid()); registry.Set_Int("SystemInfoLogDisable", TRUE); registry.Set_Int("DisableLogCopying", TRUE); Print("Log copying is OFF."); } else { Print(Get_Help()); } } }; class SkyTintConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("sky_tint");} virtual const char * Get_Help (void) {return ("SKY_TINT [ramptime [0+]]");} virtual void Activate (const char *input) { const char *feedbackstring = "Sky tint changed\n"; int argcount; float skytintfactor, ramptime; bool success = false; argcount = sscanf (input, "%f %f %f", &skytintfactor, &ramptime); switch (argcount) { case 1: success = BackgroundMgrClass::Set_Sky_Tint (skytintfactor); break; case 2: success = BackgroundMgrClass::Set_Sky_Tint (skytintfactor, ramptime); break; default: // Do nothing. break; } if (success) Print (feedbackstring); } }; class InfoDebugToggle : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "info_debug_toggle"; } virtual const char * Get_Help( void ) { return "INFO_DEBUG_TOGGLE - Toggles display of debug info on object info."; } virtual void Activate( const char * input ) { extern bool InfoDebug; InfoDebug = !InfoDebug; Print( "Toggled Info Debug\n" ); } }; class MeshRenderSnapshotFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "mesh_render_snapshot"; } virtual const char * Get_Help( void ) { return "MESH_RENDER_SNAPSHOT - Logs one frame of mesh render system."; } virtual void Activate( const char * input ) { WW3D::Activate_Snapshot(true); } }; class UmbraToggleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name(void) { return "umbra_toggle"; } virtual const char * Get_Help(void) { return "UMBRA_TOGGLE - toggles umbra culling (if compiled into this build)."; } virtual void Activate(const char * input) { #if (UMBRASUPPORT) UmbraSupport::Enable_Umbra(!UmbraSupport::Is_Umbra_Enabled()); Print("Umbra %s\n",(UmbraSupport::Is_Umbra_Enabled() ? "enabled." : "disabled.")); #else Print("Umbra support not compiled into this build.\n"); #endif } }; class UnusedSpawnerFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "unused_spawners"; } virtual const char * Get_Help( void ) { return "UNUSED_SPAWNERS - Displays the ID of spawns which have spawned nothing."; } virtual void Activate( const char * input ) { SpawnManager::Display_Unused_Spawners(); } }; class VipConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "vip"; } virtual const char * Get_Help( void ) { return "VIP - Toggle VIP mode. Client only.\n"; } virtual void Activate( const char * input ) { StringClass password; password.Format("%s", input); if (cNetwork::I_Am_Client()) {// && !password.Is_Empty()) { cVipModeEvent * p_event = new cVipModeEvent; p_event->Init(password); } else { Print(Get_Help()); } } }; class AllowKillingHibernatingSpawnFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "allow_killing_hibernating_spawn"; } virtual const char * Get_Help( void ) { return "ALLOW_KILLING_HIBERNATING_SPAWN - Toggles the global ability for spawners to kill hibernating spawn."; } virtual void Activate( const char * input ) { if ( SpawnManager::Toggle_Allow_Killing_Hibernating_Spawn() ) { Print("Killing Hibernating Spawn Allowed\n"); } else { Print("Killing Hibernating Spawn Disallowed\n"); } } }; class DisplayHibernatingFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "display_hibernating"; } virtual const char * Get_Help( void ) { return "DISPLAY_HIBERNATING - Toggles displaying of objects begining and ending hibernation."; } virtual void Activate( const char * input ) { extern bool _DisplayHibernating; _DisplayHibernating = !_DisplayHibernating; Print("Display Hibernating now %s\n", _DisplayHibernating ? "ON" : "OFF" ); } }; class HideHUDPointsFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "hide_hud_points"; } virtual const char * Get_Help( void ) { return "HIDE_HUD_POINTS - Toggles displaying of points on the HUD."; } virtual void Activate( const char * input ) { Print("HUD points toggled\n" ); HUDClass::Toggle_Hide_Points(); } }; class SnapShotModeToggleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "snap_shot_mode_toggle"; } virtual const char * Get_Alias( void ){ return "ssm"; } virtual const char * Get_Help( void ) { return "SNAP_SHOT_MODE_TOGGLE - Toggles Snap Shot Mode."; } virtual void Activate( const char * input ) { if ( COMBAT_CAMERA ) { COMBAT_CAMERA->Set_Snap_Shot_Mode( !COMBAT_CAMERA->Is_Snap_Shot_Mode() ); Print( "Snap Shot Mode %s\n", COMBAT_CAMERA->Is_Snap_Shot_Mode() ? "ON" : "OFF" ); } } }; class LightningConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("lightning");} virtual const char * Get_Help (void) {return ("LIGHTNING [ ] [ramptime [0+]] - Sets lightning.");} virtual void Activate (const char *input) { const char *feedbackstring = "Lightning changed\n"; int argcount; float arg0, arg1, arg2, arg3, arg4, arg5; bool success = false; argcount = sscanf (input, "%f %f %f %f %f %f", &arg0, &arg1, &arg2, &arg3, &arg4, &arg5); switch (argcount) { case 1: success = BackgroundMgrClass::Set_Lightning_Intensity (arg0); break; case 5: success = BackgroundMgrClass::Set_Lightning (arg0, arg1, arg2, arg3, arg4); break; case 6: success = BackgroundMgrClass::Set_Lightning (arg0, arg1, arg2, arg3, arg4, arg5); break; default: // Do nothing. break; } if (success) Print (feedbackstring); } }; class WarBlitzConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("warblitz");} virtual const char * Get_Help (void) {return ("WARBLITZ [ ] [ramptime [0+]] - Sets war blitz.");} virtual void Activate (const char *input) { const char *feedbackstring = "War blitz changed\n"; int argcount; float arg0, arg1, arg2, arg3, arg4, arg5; bool success = false; argcount = sscanf (input, "%f %f %f %f %f %f", &arg0, &arg1, &arg2, &arg3, &arg4, &arg5); switch (argcount) { case 1: success = BackgroundMgrClass::Set_War_Blitz (arg0); break; case 5: success = BackgroundMgrClass::Set_War_Blitz (arg0, arg1, arg2, arg3, arg4); break; case 6: success = BackgroundMgrClass::Set_War_Blitz (arg0, arg1, arg2, arg3, arg4, arg5); break; default: // Do nothing. break; } if (success) Print (feedbackstring); } }; class WarpConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("warp");} virtual const char * Get_Help (void) {return ("WARP - warp to first other player or named player (client only).");} virtual void Activate (const char *input) { if (cNetwork::I_Am_Client()) { WideStringClass player_name; player_name.Convert_From(input); cWarpEvent * p_warp = new cWarpEvent; p_warp->Init(player_name); } else { Print(Get_Help()); } } }; class WhoIsConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("whois");} virtual const char * Get_Help (void) {return ("WHOIS - who the heck is this annoying bugger? (server only)\n");} virtual void Activate (const char *input) { cPlayer * p_player = cPlayerManager::Find_Player(input); if (!cNetwork::I_Am_Server() || p_player == NULL) { Print(Get_Help()); } else { ULONG ip = p_player->Get_Ip_Address(); HOSTENT * p_host = ::gethostbyaddr((char *) &ip, sizeof(ip), AF_INET); char resolved_ip[100] = ""; if (p_host != NULL) { ::sprintf(resolved_ip, "(%s)", p_host->h_name); } Print("%s is at ip %s %s\n", input, cNetUtil::Address_To_String(ip), resolved_ip); } } }; class WindConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("wind");} virtual const char * Get_Help (void) {return ("WIND [ramptime [0+]] - Sets wind.");} virtual void Activate (const char *input) { const char *feedbackstring = "Wind changed\n"; int argcount; float heading, speed, variability, ramptime; bool success = false; argcount = sscanf (input, "%f %f %f %f", &heading, &speed, &variability, &ramptime); switch (argcount) { case 3: success = WeatherMgrClass::Set_Wind (heading, speed, variability); break; case 4: success = WeatherMgrClass::Set_Wind (heading, speed, variability, ramptime); break; default: // Do nothing. break; } if (success) Print (feedbackstring); } }; class RainConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("rain");} virtual const char * Get_Help (void) {return ("RAIN [ramptime [0+]] - Sets rain.");} virtual void Activate (const char *input) { const char *feedbackstring = "Rain changed\n"; int argcount; float arg0, arg1; bool success = false; argcount = sscanf (input, "%f %f", &arg0, &arg1); switch (argcount) { case 1: success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_RAIN, arg0); break; case 2: success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_RAIN, arg0, arg1); break; default: // Do nothing. break; } if (success) Print (feedbackstring); } }; class SnowConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("snow");} virtual const char * Get_Help (void) {return ("SNOW [ramptime [0+]] - Sets snow.");} virtual void Activate (const char *input) { const char *feedbackstring = "Snow changed\n"; int argcount; float arg0, arg1; bool success = false; argcount = sscanf (input, "%f %f", &arg0, &arg1); switch (argcount) { case 1: success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_SNOW, arg0); break; case 2: success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_SNOW, arg0, arg1); break; default: // Do nothing. break; } if (success) Print (feedbackstring); } }; class AppPacketTypesResetConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name( void ) { return "app_packet_types_reset"; } virtual const char * Get_Alias( void ){ return "aptr"; } virtual const char * Get_Help( void ) { return "APP_PACKET_TYPES_RESET - reset app packet stats."; } virtual void Activate( const char * input ) { cAppPacketStats::Reset(); } }; class AshConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("ash");} virtual const char * Get_Help (void) {return ("ASH [ramptime [0+]] - Sets ash.");} virtual void Activate (const char *input) { const char *feedbackstring = "Ash changed\n"; int argcount; float arg0, arg1; bool success = false; argcount = sscanf (input, "%f %f", &arg0, &arg1); switch (argcount) { case 1: success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_ASH, arg0); break; case 2: success = WeatherMgrClass::Set_Precipitation (WeatherMgrClass::PRECIPITATION_ASH, arg0, arg1); break; default: // Do nothing. break; } if (success) Print (feedbackstring); } }; /* ** */ class CinematicFreezeConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("cinematic_freeze");} virtual const char * Get_Help (void) {return ("CINEMATIC_FREEZE - Toggles Cinematic Freeze.");} virtual void Activate (const char *input) { GameObjManager::Toggle_Cinematic_Freeze(); Print( "Cinematic Freeze %s\n", GameObjManager::Is_Cinematic_Freeze_Active() ? "ON" : "OFF" ); } }; class EditVehicleConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("edit_vehicle");} virtual const char * Get_Help (void) {return ("EDIT_VEHICLE - Edit the parameters of the currently driven vehicle.");} virtual void Activate (const char *input) { // Only do this in single player or 1-player multiplay games if (IS_SOLOPLAY || ((PTheGameData != NULL) && (PTheGameData->Get_Max_Players() == 1)) ) { VehicleGameObj * vehicle = COMBAT_STAR->Get_Vehicle(); if ((vehicle != NULL) && (vehicle->Peek_Vehicle_Phys() != NULL)) { VehiclePhysClass * pobj = vehicle->Peek_Vehicle_Phys(); TrackedVehicleClass * tv = pobj->As_TrackedVehicleClass(); WheeledVehicleClass * wv = pobj->As_WheeledVehicleClass(); if (tv != NULL) { float wheel_radius = 0.0f; for (int i=0; iGet_Wheel_Count(); i++) { WheelClass * wheel = (WheelClass*)tv->Peek_Wheel(i); if (wheel->Get_Flag(SuspensionElementClass::ENGINE)) { wheel_radius = wheel->Get_Radius(); } } TrackedVehicleDefClass * def = (TrackedVehicleDefClass *)tv->Get_TrackedVehicleDef(); EditTrackedVehicleDialogClass * popup = new EditTrackedVehicleDialogClass(def,wheel_radius); popup->Start_Dialog(); popup->Release_Ref(); } else if (wv != NULL) { float wheel_radius = 0.0f; for (int i=0; iGet_Wheel_Count(); i++) { WheelClass * wheel = (WheelClass*)wv->Peek_Wheel(i); if (wheel->Get_Flag(SuspensionElementClass::ENGINE)) { wheel_radius = wheel->Get_Radius(); } } WheeledVehicleDefClass * def = (WheeledVehicleDefClass *)wv->Get_WheeledVehicleDef(); EditWheeledVehicleDialogClass * popup = new EditWheeledVehicleDialogClass(def,wheel_radius); popup->Start_Dialog(); popup->Release_Ref(); } } } } }; /* ** */ class ToggleUseLetencyInterpretConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("toggle_latency_interpret");} virtual const char * Get_Help (void) {return ("TOGGLE_LATENCY_INTERPRET - Toggles Latency Interpret logic.");} virtual void Activate (const char *input) { extern bool _UseLatencyInterpret; _UseLatencyInterpret = !_UseLatencyInterpret; Print( "UseLetencyInterpret %s\n", _UseLatencyInterpret ? "ON" : "OFF" ); } }; /* ** */ class ToggleHitReticleConsoleFunctionClass : public ConsoleFunctionClass { public: virtual const char * Get_Name (void) {return ("toggle_hit_reticle");} virtual const char * Get_Help (void) {return ("TOGGLE_HIT_RETICLE - Toggles the center reticle dot.");} virtual void Activate (const char *input) { CombatManager::Toggle_Hit_Reticle_Enabled(); Print( "Hit Reticle Toggled\n" ); } }; //------------------------------------------------------------------------------------ /* ** Console Function Manager */ DynamicVectorClass ConsoleFunctionManager::FunctionList; void ConsoleFunctionManager::Init( void ) { #ifdef WWDEBUG // // DEVELOPMENT CONSOLE FUNCTIONS ONLY // ONLY PRESENT IN DEBUG AND PROFILE BUILDS // FunctionList.Add( new AllowKillingHibernatingSpawnFunctionClass() ); FunctionList.Add( new AmbientLightConsoleFunctionClass() ); FunctionList.Add( new AmmoConsoleFunctionClass() ); FunctionList.Add( new AppPacketTypesResetConsoleFunctionClass() ); FunctionList.Add( new AshConsoleFunctionClass() ); FunctionList.Add( new BreakExecutionConsoleFunctionClass() ); FunctionList.Add( new CrashExecutionConsoleFunctionClass() ); FunctionList.Add( new BuByeConsoleFunctionClass() ); FunctionList.Add( new BuildingStateConsoleFunctionClass() ); FunctionList.Add( new CameraConsoleFunctionClass() ); FunctionList.Add( new CinematicFreezeConsoleFunctionClass() ); FunctionList.Add( new ClearConsoleFunctionClass() ); FunctionList.Add( new ClientHintFactorConsoleFunctionClass() ); FunctionList.Add( new CloudsConsoleFunctionClass() ); FunctionList.Add( new CopyLogsConsoleFunctionClass() ); FunctionList.Add( new SkyTintConsoleFunctionClass() ); FunctionList.Add( new CreateBotConsoleFunctionClass() ); FunctionList.Add( new CreateGruntConsoleFunctionClass() ); FunctionList.Add( new CreateObjectConsoleFunctionClass() ); FunctionList.Add( new DazzleReloadConsoleFunctionClass() ); FunctionList.Add( new DebugTypeConsoleFunctionClass() ); FunctionList.Add( new DefectConsoleFunctionClass() ); FunctionList.Add( new DisplayFindpathConsoleFunctionClass() ); FunctionList.Add( new DisplayHibernatingFunctionClass() ); FunctionList.Add( new DirtyCullDebugConsoleFunctionClass() ); FunctionList.Add( new DonateConsoleFunctionClass() ); FunctionList.Add( new DoStuffConsoleFunctionClass() ); FunctionList.Add( new DSAPOResetConsoleFunctionClass() ); FunctionList.Add( new EnableTriangleRenderConsoleFunctionClass() ); FunctionList.Add( new ExposePrelitConsoleFunctionClass() ); FunctionList.Add( new FlashTextureConsoleFunctionClass() ); FunctionList.Add( new FlyStarConsoleFunctionClass() ); FunctionList.Add( new FogRangeConsoleFunctionClass() ); FunctionList.Add( new FogToggleConsoleFunctionClass() ); FunctionList.Add( new FrameTexturesConsoleFunctionClass() ); FunctionList.Add( new FreeWeaponsConsoleFunctionClass() ); FunctionList.Add( new GiveWeaponsConsoleFunctionClass() ); FunctionList.Add( new GodConsoleFunctionClass() ); FunctionList.Add( new IBelieveInGodConsoleFunctionClass() ); FunctionList.Add( new IrrelevancePenaltyConsoleFunctionClass() ); FunctionList.Add( new GroupControllerTestConsoleFunctionClass() ); FunctionList.Add( new HideStarConsoleFunctionClass() ); FunctionList.Add( new HideHUDPointsFunctionClass() ); FunctionList.Add( new InvalidateMeshCacheConsoleFunctionClass() ); FunctionList.Add( new InvalidateTexturesConsoleFunctionClass() ); FunctionList.Add( new InfoDebugToggle() ); FunctionList.Add( new HUDConsoleFunctionClass() ); FunctionList.Add( new KillConsoleFunctionClass() ); FunctionList.Add( new ListConsoleFunctionClass() ); FunctionList.Add( new LightModeConsoleFunctionClass() ); FunctionList.Add( new LightDebugToggleConsoleFunctionClass() ); FunctionList.Add( new LightCalcConsoleFunctionClass() ); FunctionList.Add( new LightLODConsoleFunctionClass() ); FunctionList.Add( new LightningConsoleFunctionClass() ); FunctionList.Add( new LrshCommandConsoleFunctionClass() ); FunctionList.Add( new LogMeshStatsConsoleFunctionClass() ); FunctionList.Add( new LogTexturesConsoleFunctionClass() ); FunctionList.Add( new MainMenuConsoleFunctionClass() ); FunctionList.Add( new MaxFacingPenaltyConsoleFunctionClass() ); FunctionList.Add( new MeshDebuggerDisableMeshConsoleFunctionClass() ); FunctionList.Add( new MeshDebuggerEnableConsoleFunctionClass() ); FunctionList.Add( new MeshDebuggerEnableMeshConsoleFunctionClass() ); FunctionList.Add( new MeshRenderSnapshotFunctionClass() ); FunctionList.Add( new MissionConsoleFunctionClass() ); FunctionList.Add( new MoneyConsoleFunctionClass() ); FunctionList.Add( new MultiHudConsoleFunctionClass() ); FunctionList.Add( new NextRenderConsoleFunctionClass() ); FunctionList.Add( new OneShotKillsConsoleFunctionClass() ); FunctionList.Add( new OpenConsoleFunctionClass() ); FunctionList.Add( new Phys3NetConsoleFunctionClass() ); FunctionList.Add( new PhysicsDebugConsoleFunctionClass() ); FunctionList.Add( new PlayerPositionConsoleFunctionClass() ); FunctionList.Add( new ProfileCollectBeginConsoleFunctionClass() ); FunctionList.Add( new ProfileCollectEndConsoleFunctionClass() ); FunctionList.Add( new ProjectorDebugConsoleFunctionClass() ); //FunctionList.Add( new RadarMaxConsoleFunctionClass() ); FunctionList.Add( new RadarToggleConsoleFunctionClass() ); //FunctionList.Add( new RadarZoomConsoleFunctionClass() ); FunctionList.Add( new RBodyNetConsoleFunctionClass() ); FunctionList.Add( new RenderBackfacesConsoleFunctionClass() ); FunctionList.Add( new RenderBoxesConsoleFunctionClass() ); FunctionList.Add( new RenderModeConsoleFunctionClass() ); FunctionList.Add( new RenderModeExtraPassConsoleFunctionClass() ); FunctionList.Add( new ResolutionConsoleFunctionClass() ); FunctionList.Add( new RunFastConsoleFunctionClass() ); FunctionList.Add( new ParticleToggleConsoleFunctionClass() ); FunctionList.Add( new ProfileConsoleFunctionClass() ); FunctionList.Add( new QuickStatsConsoleFunctionClass() ); FunctionList.Add( new RainConsoleFunctionClass() ); //FunctionList.Add( new RshCommandConsoleFunctionClass() ); FunctionList.Add( new ScaleTimeConsoleFunctionClass() ); FunctionList.Add( new ScoreConsoleFunctionClass() ); FunctionList.Add( new SnowConsoleFunctionClass() ); FunctionList.Add( new SrshCommandConsoleFunctionClass() ); FunctionList.Add( new DebugObjectivesConsoleFunctionClass() ); FunctionList.Add( new CnCModeConsoleFunctionClass() ); FunctionList.Add( new HUDHelpTextTestConsoleFunctionClass() ); FunctionList.Add( new DebugEncyRevealConsoleFunctionClass() ); FunctionList.Add( new DebugShowMoveVectorConsoleFunctionClass() ); FunctionList.Add( new ChangeCharacterClassConsoleFunctionClass() ); FunctionList.Add( new MapRevealConsoleFunctionClass() ); FunctionList.Add( new ScriptTraceConsoleFunctionClass() ); FunctionList.Add( new SetBandwidthBudgetOutToggleConsoleFunctionClass() ); FunctionList.Add( new SetDesiredSleepConsoleFunctionClass() ); FunctionList.Add( new SetPacketDuplicationConsoleFunctionClass() ); FunctionList.Add( new SetPacketLatencyRangeConsoleFunctionClass() ); FunctionList.Add( new SetPacketLossConsoleFunctionClass() ); FunctionList.Add( new SetSpamCountConsoleFunctionClass() ); FunctionList.Add( new SetStarHealthConsoleFunctionClass() ); FunctionList.Add( new SetStarSkinConsoleFunctionClass() ); FunctionList.Add( new SetStarShieldStrengthConsoleFunctionClass() ); FunctionList.Add( new SetStarShieldTypeConsoleFunctionClass() ); FunctionList.Add( new SetTheStarConsoleFunctionClass() ); FunctionList.Add( new ShadowAttenuationConsoleFunctionClass() ); FunctionList.Add( new ShadowBlobTextureConsoleFunctionClass() ); FunctionList.Add( new ShadowCountConsoleFunctionClass() ); FunctionList.Add( new ShadowElevationConsoleFunctionClass() ); FunctionList.Add( new ShadowIntensityConsoleFunctionClass() ); FunctionList.Add( new ShadowPerPolyCullingConsoleFunctionClass() ); FunctionList.Add( new ShadowResolutionConsoleFunctionClass() ); FunctionList.Add( new ShellCommandConsoleFunctionClass() ); FunctionList.Add( new SkeletonSliderDemoConsoleFunctionClass() ); FunctionList.Add( new SkeletonStandersConsoleFunctionClass() ); FunctionList.Add( new SnapShotModeToggleFunctionClass() ); FunctionList.Add( new SoldierGhostDebugDisplayConsoleFunctionClass() ); FunctionList.Add( new StarVisibilityConsoleFunctionClass() ); FunctionList.Add( new StatsConsoleFunctionClass() ); //FunctionList.Add( new StealthConsoleFunctionClass() ); FunctionList.Add( new SuicideConsoleFunctionClass() ); FunctionList.Add( new SurfaceEffectsDebugConsoleFunctionClass() ); FunctionList.Add( new SurfaceTypeOverrideConsoleFunctionClass() ); FunctionList.Add( new SurfacePhysicsOverrideConsoleFunctionClass() ); FunctionList.Add( new SwapTeamsConsoleFunctionClass() ); FunctionList.Add( new TargetSteeringToggleConsoleFunctionClass() ); FunctionList.Add( new TeleportStarConsoleFunctionClass() ); FunctionList.Add( new TextureFilterModeConsoleFunctionClass() ); FunctionList.Add( new TextureMemoryCounterConsoleFunctionClass() ); FunctionList.Add( new TexturingEnableConsoleFunctionClass() ); FunctionList.Add( new TimeOfDayConsoleFunctionClass() ); FunctionList.Add( new ToggleAssetPreloadingConsoleFunctionClass() ); FunctionList.Add( new ToggleEmotIconsConsoleFunctionClass() ); FunctionList.Add( new ToggleHitReticleConsoleFunctionClass() ); FunctionList.Add( new ToggleUseLetencyInterpretConsoleFunctionClass() ); FunctionList.Add( new ToggleSimulationConsoleFunctionClass() ); FunctionList.Add( new ToggleRenderingConsoleFunctionClass() ); FunctionList.Add( new TomConsoleFunctionClass() ); FunctionList.Add( new UmbraToggleFunctionClass() ); FunctionList.Add( new UnusedSpawnerFunctionClass() ); FunctionList.Add( new VipConsoleFunctionClass() ); FunctionList.Add( new VisConsoleFunctionClass() ); FunctionList.Add( new VisInvertConsoleFunctionClass() ); FunctionList.Add( new VisGridDisplayConsoleFunctionClass() ); FunctionList.Add( new VisGridDebugConsoleFunctionClass() ); FunctionList.Add( new VisHierarchicalConsoleFunctionClass() ); FunctionList.Add( new VisLockConsoleFunctionClass() ); FunctionList.Add( new VisSectorDisplayConsoleFunctionClass() ); FunctionList.Add( new VisSectorHistoryConsoleFunctionClass() ); FunctionList.Add( new VblankSyncConsoleFunctionClass() ); FunctionList.Add( new WatchConsoleFunctionClass() ); FunctionList.Add( new WarBlitzConsoleFunctionClass() ); FunctionList.Add( new WarpConsoleFunctionClass() ); FunctionList.Add( new WhoIsConsoleFunctionClass() ); FunctionList.Add( new WindConsoleFunctionClass() ); FunctionList.Add( new WOLConsoleFunctionClass() ); FunctionList.Add( new DataSafeStatsConsoleFunctionClass() ); FunctionList.Add( new PatsDebugConsoleFunctionClass() ); FunctionList.Add( new SetSendFrequencyConsoleFunctionClass() ); FunctionList.Add( new TogglePacketDeltasConsoleFunctionClass() ); FunctionList.Add( new TogglePacketComboConsoleFunctionClass() ); FunctionList.Add( new TogglePacketOptConsoleFunctionClass() ); FunctionList.Add( new SetLatencyConsoleFunctionClass() ); FunctionList.Add( new ToggleNewClientUpdateMethodConsoleFunctionClass() ); FunctionList.Add( new ToggleBandwidthBalancerConsoleFunctionClass() ); FunctionList.Add( new NewTCADOConsoleFunctionClass() ); FunctionList.Add( new DebugDeviceConsoleFunctionClass() ); FunctionList.Add( new StatsConsoleFunctionClass() ); FunctionList.Add( new ToggleSurfaceEffectsConsoleFunctionClass() ); FunctionList.Add( new DeviceInfoConsoleFunctionClass() ); #endif // WWDEBUG (development commands) // // SHIPPING CONSOLE FUNCTIONS ONLY // FunctionList.Add( new GameOverConsoleFunctionClass() ); FunctionList.Add( new AdminMessageConsoleFunctionClass() ); FunctionList.Add( new GameInfoConsoleFunctionClass() ); FunctionList.Add( new KickConsoleFunctionClass() ); FunctionList.Add( new AllowConsoleFunctionClass() ); FunctionList.Add( new BanConsoleFunctionClass() ); FunctionList.Add( new MessageConsoleFunctionClass() ); FunctionList.Add( new PlayerInfoConsoleFunctionClass() ); FunctionList.Add( new QuitConsoleFunctionClass() ); FunctionList.Add( new QuitSlaveConsoleFunctionClass() ); FunctionList.Add( new RestartConsoleFunctionClass() ); FunctionList.Add( new ScreenUVBiasConsoleFunctionClass() ); FunctionList.Add( new SetBandwidthBudgetOutConsoleFunctionClass() ); FunctionList.Add( new ToggleSortingConsoleFunctionClass() ); FunctionList.Add( new ExtrasConsoleFunctionClass() ); /// CHEATS? MAY NEED TO BE DEV ONLY!!!! FunctionList.Add( new EditVehicleConsoleFunctionClass() ); FunctionList.Add( new NetUpdateRateConsoleFunctionClass() ); FunctionList.Add( new ClientPhysicsOptimizationConsoleFunctionClass() ); #ifndef FREEDEDICATEDSERVER FunctionList.Add( new FPSConsoleFunctionClass() ); // Steve W wanted this. #endif //FREEDEDICATEDSERVER #ifdef FREEDEDICATEDSERVER FunctionList.Add( new PageConsoleFunctionClass() ); #endif //FREEDEDICATEDSERVER SystemSettings::Add_Console_Functions( FunctionList ); Sort_Function_List(); // // Dump list to a file // Verbose_Help_File(); } void ConsoleFunctionManager::Shutdown( void ) { while ( FunctionList.Count() ) { delete FunctionList[ FunctionList.Count()-1 ]; FunctionList.Delete( FunctionList.Count()-1 ); } } //------------------------------------------------------------------------------------ void ConsoleFunctionManager::Sort_Function_List( void ) { // ARGH!! Bubblesort!!! bool done = false; int count = FunctionList.Count(); while ( !done ) { done = true; count--; for ( int index = 0; index < count; index++) { if ( stricmp( FunctionList[index]->Get_Name(), FunctionList[index+1]->Get_Name() ) > 0 ) { ConsoleFunctionClass * temp = FunctionList[index]; FunctionList[index] = FunctionList[index+1]; FunctionList[index+1] = temp; done = false; } } } } //------------------------------------------------------------------------------------ void ConsoleFunctionManager::Help( const char * function_name ) { char string[120]; // Eat leading spaces while ( function_name && *function_name == ' ' ) { function_name++; } if ( ( function_name == NULL ) || ( function_name[0] == 0 ) ) { // Show name of each function... Print( "------ Available commands -------\n" ); *string = 0; for ( int index = 0; index < FunctionList.Count(); index++) { ConsoleFunctionClass * function = FunctionList[index]; if ( *string ) { strcat( string, ", " ); } strcat( string, function->Get_Name() ); if ( ( strlen( string ) > (sizeof( string ) / 2) ) || (index == FunctionList.Count()-1) ) { strcat( string, "\n" ); Print( string ); *string = 0; } } } else { // Show help for a certian function for ( int index = 0; index < FunctionList.Count(); index++) { ConsoleFunctionClass * function = FunctionList[index]; if ( !stricmp( function->Get_Name(), function_name ) ) { Print( function->Get_Help() ); return; } } Print( "Help not found for \"%s\"\n", function_name ); } } //------------------------------------------------------------------------------------ int ConsoleFunctionManager::Get_Function_Count(void) { return FunctionList.Count(); } //------------------------------------------------------------------------------------ void ConsoleFunctionManager::Verbose_Help_File(void) { // // Log function list to a file // FILE * file = fopen("commands.txt", "w"); if ( file ) { char buffer[500]; sprintf(buffer, "RENEGADE COMMANDS as at %s\n\n", cMiscUtil::Get_Text_Time()); fwrite(buffer, 1, strlen(buffer), file); for ( int index = 0; index < FunctionList.Count(); index++) { ConsoleFunctionClass * function = FunctionList[index]; WWASSERT(function != NULL); sprintf(buffer, "%s", function->Get_Help()); if (function->Get_Alias() != NULL) { char alias_string[100]; sprintf(alias_string, " (%s)", function->Get_Alias()); strcat(buffer, alias_string); } strcat(buffer, "\n"); fwrite(buffer, 1, strlen(buffer), file); } #ifdef WWDEBUG char watch_help_buffer[5000]; WatchConsoleFunctionClass::Get_Verbose_Help(watch_help_buffer, sizeof(watch_help_buffer)); fwrite(watch_help_buffer, 1, strlen(watch_help_buffer), file); #endif fclose(file); } } //------------------------------------------------------------------------------------ void ConsoleFunctionManager::Next_Verbose_Help_Screen(void) { // // Show name of each function on a separate line... // char buffer[5000]; buffer[0] = 0; static int page_number = -1; page_number++; if ( page_number >= 0 ) { int command_number = 0; for ( int index = 0; index < FunctionList.Count(); index++) { command_number++; int per_page = 57; if (floor(command_number / per_page) == page_number) { ConsoleFunctionClass * function = FunctionList[index]; WWASSERT(function != NULL); strcat( buffer, function->Get_Help() ); strcat( buffer, "\n" ); if ( index == FunctionList.Count() - 1 ) { // if this is the last line, page_number = -2; // turn it off for next time #ifdef WWDEBUG // // Also, show help for watch objects // strcat( buffer, "\n" ); char watch_help_buffer[10000]; WatchConsoleFunctionClass::Get_Verbose_Help(watch_help_buffer, sizeof(watch_help_buffer)); strcat( buffer, watch_help_buffer ); #endif // WWDEBUG } } } } if (Get_Text_Display()) { Get_Text_Display()->Set_Verbose_Help_Text( buffer ); } } //------------------------------------------------------------------------------------ void ConsoleFunctionManager::Parse_Input( const char * string ) { if (!strnicmp(string, "help", 4)) { Help( string + 4 ); } else { for ( int index = 0; index < FunctionList.Count(); index++) { ConsoleFunctionClass * function = FunctionList[index]; if ( !strnicmp( string, function->Get_Name(), strlen( function->Get_Name() ) ) ) { const char *s = string + strlen (function->Get_Name()); // The next input character must be either a string terminator or space character // in order for the input string to match the function list string. if ((*s == '\0') || (*s == ' ')) { // Remove any trailing white space. while (*s == ' ') s++; function->Activate (s); return; } } // // Check short-form alias too // There has to be a space (or nothing) following the alias for // it to match // if (function->Get_Alias() != NULL && strlen(function->Get_Alias()) > 0) { char alias[100]; WWASSERT(strlen(function->Get_Alias()) < sizeof(alias)); strcpy(alias, function->Get_Alias()); int alias_len = strlen(alias); int string_len = strlen(string); if (!strnicmp(string, alias, alias_len) && (string_len == alias_len || string[alias_len] == ' ')) { string += alias_len; while ( string && *string == ' ' ) string++; function->Activate( string ); return; } } } if (ConsoleBox.Is_Exclusive()) { Print( "\"%s\" is not a command. To send a message, use \"msg\" and \"amsg\"\n", string ); } else { Print( "\"%s\" is not a command. To send a message, Use F2 and F3\n", string ); } Print( "For a list of available commands, use the \"help\" command !\n" ); } } bool ConsoleFunctionManager::Get_Command_Suggestion ( const char * input, // what user has typed, const char * cur_suggestion, // last suggestion we gave (move to next if not null) char * set_suggestion, // copy suggestion into this string char * set_help, // copy help into this string int len // don't copy more than this many characters. ) { ConsoleFunctionClass * function = NULL; int node_index = 0; /* ** If user is passing in a 'cur_suggestion', then we need to first find that ** function in the list and search past it. If we don't find a suggestion, we ** will drop through and search from the head of the list. */ if (cur_suggestion != NULL) { node_index = Find_Function_Node(cur_suggestion); /* ** Try to find a suggestion after this node. */ if (node_index != -1) { function = Find_Command_Suggestion(input,node_index+1); } } /* ** Find a suggestion starting at the head of the list */ if (function == NULL) { function = Find_Command_Suggestion(input,0); } /* ** If we found a suggestion, copy its command into 'set_suggestion' and its help ** into 'set_help' */ if (function != NULL) { if (set_suggestion != NULL) { strncpy(set_suggestion,function->Get_Name(),len); } if (set_help != NULL) { strncpy(set_help,function->Get_Help(),len); } return true; } return false; } int ConsoleFunctionManager::Find_Function_Node(const char * name) { for ( int index = 0; index < FunctionList.Count(); index++) { ConsoleFunctionClass * function = FunctionList[index]; if (stricmp(name,function->Get_Name()) == 0) { return index; } } return -1; } ConsoleFunctionClass * ConsoleFunctionManager::Find_Command_Suggestion ( const char * input, // incomplete function name int start_index // node to start searching from ) { for ( int index = start_index; index < FunctionList.Count(); index++) { ConsoleFunctionClass * function = FunctionList[index]; if (_strnicmp(input,function->Get_Name(),strlen(input)) == 0) { return function; } } return NULL; } void ConsoleFunctionManager::Print( const char *format, ... ) { va_list arg_list; va_start (arg_list, format); StringClass string; string.Format_Args( format, arg_list ); if (Get_Text_Display()) { WWASSERT( Get_Text_Display() ); Get_Text_Display()->Print_System( string ); } ConsoleBox.Print(string.Peek_Buffer()); va_end (arg_list); }