aboutsummaryrefslogtreecommitdiff
path: root/src/parsec_server/con_int_sv.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2026-08-24 11:16:07 +0200
committerFelix Morgner <felix.morgner@gmail.com>2026-08-24 11:16:07 +0200
commitc068f22329d5cc722622a2183bbb22eef2093df7 (patch)
tree12d56c1aede67988a55e241364606bfbb4dba933 /src/parsec_server/con_int_sv.cpp
downloadopenparsec-c068f22329d5cc722622a2183bbb22eef2093df7.tar.xz
openparsec-c068f22329d5cc722622a2183bbb22eef2093df7.zip
initial importHEADmain
Diffstat (limited to 'src/parsec_server/con_int_sv.cpp')
-rwxr-xr-xsrc/parsec_server/con_int_sv.cpp402
1 files changed, 402 insertions, 0 deletions
diff --git a/src/parsec_server/con_int_sv.cpp b/src/parsec_server/con_int_sv.cpp
new file mode 100755
index 0000000..96e2fe2
--- /dev/null
+++ b/src/parsec_server/con_int_sv.cpp
@@ -0,0 +1,402 @@
+/*
+ * PARSEC - SERVER Integer Variable Commands
+ *
+ * $Author: uberlinuxguy $ - $Date: 2004/09/15 12:25:44 $
+ *
+ * Orginally written by:
+ * Copyright (c) Clemens Beer <cbx@parsec.org> 2001-2002
+ * Copyright (c) Markus Hadwiger <msh@parsec.org> 1996-2000
+ *
+ * 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 2 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+// C library
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+// compilation flags/debug support
+#include "config.h"
+#include "debug.h"
+
+// general definitions
+#include "general.h"
+#include "objstruc.h"
+
+// global externals
+#include "globals.h"
+
+// subsystem & headers
+#include "net_defs.h"
+//#include "sys_defs.h"
+//#include "vid_defs.h"
+
+// mathematics header
+#include "utl_math.h"
+
+// local module header
+#include "con_int_sv.h"
+
+// proprietary module headers
+#include "con_aux_sv.h"
+#include "con_main_sv.h"
+//#include "e_record.h"
+//#include "g_demo.h"
+//#include "g_stars.h"
+#include "g_extra.h"
+#include "net_game_sv.h"
+#include "net_util.h"
+#include "e_relist.h"
+#include "g_main_sv.h"
+#include "e_simulator.h"
+
+
+// integer input/output configuration -----------------------------------------
+//
+PUBLIC const char* int_print_base = "%d";
+PUBLIC int int_calc_base = 10;
+
+
+// external variables which need to be accessed but are not in GLOBALS.H ------
+//
+extern int ConsoleEnterLength;
+extern int ConsoleTextX;
+extern int ConsoleTextY;
+extern int EchoExternalCommands;
+extern int HistoryForBatchEntry;
+
+
+// intermediate storage for MyShip integer properties -------------------------
+//
+struct myship_int_s {
+
+ int Weapons;
+ int Specials;
+ int CurDamage;
+ int CurEnergy;
+ int CurSpeed;
+ int NumMissls;
+ int NumHomMissls;
+ int NumPartMissls;
+ int NumMines;
+ int MaxDamage;
+ int MaxEnergy;
+ int MaxSpeed;
+ int MaxNumMissls;
+ int MaxNumHomMissls;
+ int MaxNumPartMissls;
+ int MaxNumMines;
+};
+
+static myship_int_s myship_int;
+
+/*
+
+//FIXME:
+
+#define DEF_MYSHIP_INT( f ) \
+int GetMSInt##f() \
+{ \
+ return (int)MyShip->f; \
+} \
+void SetMSInt##f() \
+{ \
+ MyShip->f = myship_int.f; \
+ Record_MyShipState##f(); \
+}
+
+*/
+
+#define DEF_MYSHIP_INT( f ) \
+int GetMSInt##f() \
+{ \
+ return 0; \
+} \
+void SetMSInt##f() \
+{ \
+}
+
+DEF_MYSHIP_INT( Weapons )
+DEF_MYSHIP_INT( Specials )
+DEF_MYSHIP_INT( CurDamage )
+DEF_MYSHIP_INT( CurEnergy )
+DEF_MYSHIP_INT( CurSpeed )
+DEF_MYSHIP_INT( NumMissls )
+DEF_MYSHIP_INT( NumHomMissls )
+DEF_MYSHIP_INT( NumPartMissls )
+DEF_MYSHIP_INT( NumMines )
+DEF_MYSHIP_INT( MaxDamage )
+DEF_MYSHIP_INT( MaxEnergy )
+DEF_MYSHIP_INT( MaxSpeed )
+DEF_MYSHIP_INT( MaxNumMissls )
+DEF_MYSHIP_INT( MaxNumHomMissls )
+DEF_MYSHIP_INT( MaxNumPartMissls )
+DEF_MYSHIP_INT( MaxNumMines )
+
+
+//FIXME: get rid of these proxy stuff
+
+// proxy structure for G_Main data members modifiable through ---------------
+//
+struct game_proxy_int_s {
+
+ int EnergyExtraBoost;
+ int RepairExtraBoost;
+ int DumbPackNumMissls;
+ int HomPackNumMissls;
+ int SwarmPackNumMissls;
+ int ProxPackNumMines;
+ int m_NebulaID;
+};
+
+// proxy structure for G_Extra data members modifiable through the console ---
+//
+struct game_extra_proxy_int_s {
+
+ int MaxExtraArea;
+ int MinExtraDist;
+ int ExtraProbability;
+ int ProbHelixCannon;
+ int ProbLightningDevice;
+ int ProbPhotonCannon;
+ int ProbProximityMine;
+ int ProbRepairExtra;
+ int ProbAfterburner;
+ int ProbHoloDecoy;
+ int ProbInvisibility;
+ int ProbInvulnerability;
+ int ProbEnergyField;
+ int ProbLaserUpgrade;
+ int ProbLaserUpgrade1;
+ int ProbLaserUpgrade2;
+ int ProbMissilePack;
+ int ProbDumbMissPack;
+ int ProbHomMissPack;
+ int ProbSwarmMissPack;
+ int ProbEmpUpgrade1;
+ int ProbEmpUpgrade2;
+};
+
+
+static game_proxy_int_s Game_proxy;
+static game_extra_proxy_int_s GameExtraManager_proxy;
+
+#define DEF_PROXY_INT( name, f ) \
+int Get##name##Int##f() \
+{ \
+ return (int)The##name->f; \
+} \
+void Set##name##Int##f() \
+{ \
+ The##name->f = name##_proxy.f; \
+}
+
+DEF_PROXY_INT( GameExtraManager, MaxExtraArea )
+DEF_PROXY_INT( GameExtraManager, MinExtraDist )
+DEF_PROXY_INT( Game, EnergyExtraBoost )
+DEF_PROXY_INT( Game, RepairExtraBoost )
+DEF_PROXY_INT( Game, DumbPackNumMissls )
+DEF_PROXY_INT( Game, HomPackNumMissls )
+DEF_PROXY_INT( Game, SwarmPackNumMissls )
+DEF_PROXY_INT( Game, ProxPackNumMines )
+DEF_PROXY_INT( Game, m_NebulaID)
+DEF_PROXY_INT( GameExtraManager, ExtraProbability )
+DEF_PROXY_INT( GameExtraManager, ProbHelixCannon )
+DEF_PROXY_INT( GameExtraManager, ProbLightningDevice )
+DEF_PROXY_INT( GameExtraManager, ProbPhotonCannon )
+DEF_PROXY_INT( GameExtraManager, ProbProximityMine )
+DEF_PROXY_INT( GameExtraManager, ProbRepairExtra )
+DEF_PROXY_INT( GameExtraManager, ProbAfterburner )
+DEF_PROXY_INT( GameExtraManager, ProbHoloDecoy )
+DEF_PROXY_INT( GameExtraManager, ProbInvisibility )
+DEF_PROXY_INT( GameExtraManager, ProbInvulnerability )
+DEF_PROXY_INT( GameExtraManager, ProbEnergyField )
+DEF_PROXY_INT( GameExtraManager, ProbLaserUpgrade )
+DEF_PROXY_INT( GameExtraManager, ProbLaserUpgrade1 )
+DEF_PROXY_INT( GameExtraManager, ProbLaserUpgrade2 )
+DEF_PROXY_INT( GameExtraManager, ProbMissilePack )
+DEF_PROXY_INT( GameExtraManager, ProbDumbMissPack )
+DEF_PROXY_INT( GameExtraManager, ProbHomMissPack )
+DEF_PROXY_INT( GameExtraManager, ProbSwarmMissPack )
+DEF_PROXY_INT( GameExtraManager, ProbEmpUpgrade1 )
+DEF_PROXY_INT( GameExtraManager, ProbEmpUpgrade2 )
+
+/*
+// perform remote event syncing for certain int vars --------------------------
+//
+#define DEF_RMEV_STATESYNC( f, k ) \
+void RESync##f() \
+{ \
+ if ( !NET_RmEvAllowed( RE_STATESYNC ) ) \
+ return; \
+ NET_RmEvStateSync( (k), (TheGame->f) ); \
+}
+
+DEF_RMEV_STATESYNC( ExtraProbability, RMEVSTATE_PROBEXTRA );
+DEF_RMEV_STATESYNC( ProbHelixCannon, RMEVSTATE_PROBHELIX );
+DEF_RMEV_STATESYNC( ProbLightningDevice, RMEVSTATE_PROBLIGHTNING );
+DEF_RMEV_STATESYNC( ProbPhotonCannon, RMEVSTATE_PROBPHOTON );
+DEF_RMEV_STATESYNC( ProbProximityMine, RMEVSTATE_PROBMINE );
+DEF_RMEV_STATESYNC( ProbRepairExtra, RMEVSTATE_PROBREPAIR );
+DEF_RMEV_STATESYNC( ProbAfterburner, RMEVSTATE_PROBAFTERBURNER );
+DEF_RMEV_STATESYNC( ProbHoloDecoy, RMEVSTATE_PROBHOLODECOY );
+DEF_RMEV_STATESYNC( ProbInvisibility, RMEVSTATE_PROBINVISIBILITY );
+DEF_RMEV_STATESYNC( ProbInvulnerability, RMEVSTATE_PROBINVULNERABILITY );
+DEF_RMEV_STATESYNC( ProbEnergyField, RMEVSTATE_PROBENERGYFIELD );
+DEF_RMEV_STATESYNC( ProbLaserUpgrade, RMEVSTATE_PROBLASERUPGRADE );
+DEF_RMEV_STATESYNC( ProbLaserUpgrade1, RMEVSTATE_PROBLASERUPGRADE1 );
+DEF_RMEV_STATESYNC( ProbLaserUpgrade2, RMEVSTATE_PROBLASERUPGRADE2 );
+DEF_RMEV_STATESYNC( ProbMissilePack, RMEVSTATE_PROBMISSPACK );
+DEF_RMEV_STATESYNC( ProbDumbMissPack, RMEVSTATE_PROBDUMBPACK );
+DEF_RMEV_STATESYNC( ProbHomMissPack, RMEVSTATE_PROBGUIDEPACK );
+DEF_RMEV_STATESYNC( ProbSwarmMissPack, RMEVSTATE_PROBSWARMPACK );
+DEF_RMEV_STATESYNC( ProbEmpUpgrade1, RMEVSTATE_PROBEMPUPGRADE1 );
+DEF_RMEV_STATESYNC( ProbEmpUpgrade2, RMEVSTATE_PROBEMPUPGRADE2 );
+*/
+
+// integer variable manipulation commands -------------------------------------
+//
+PRIVATE
+int_command_s int_commands_default[] = {
+
+//CAVEAT:
+// absolute and relative positions of the following
+// 4 commands MUST NOT be altered. the CONINFOINDX_xx
+// constants in CON_INT.H must be defined consistently.
+
+ //{ 0x01, "con.winx", 1, 489, &ConsoleTextX, CheckConExtents, NULL },
+ //{ 0x01, "con.winy", 1, 295, &ConsoleTextY, CheckConExtents, NULL },
+ //{ 0x01, "con.width", 11, 500, &ConsoleEnterLength, CheckConExtents, NULL },
+ //{ 0x01, "con.height", 5, 300, &ConsoleHeight, CheckConExtents, NULL },
+
+ { 0x01, "con.echoextcoms", 0, 1, &EchoExternalCommands, NULL, NULL },
+ { 0x01, "con.scripthistory", 0, 1, &HistoryForBatchEntry, NULL, NULL },
+
+ { 0x01, "net.packetrecording", 0, 1, &RecordRemotePackets, NULL, NULL },
+
+#ifdef ENABLE_CHEAT_COMMANDS
+/*
+ { 0x00, ".weapons", 0, 0xfff, &myship_int.Weapons, SetMSIntWeapons, GetMSIntWeapons },
+ { 0x00, ".specials", 0, 0xfffff,&myship_int.Specials, SetMSIntSpecials, GetMSIntSpecials },
+ { 0x00, ".damage", 0, 10000, &myship_int.CurDamage, SetMSIntCurDamage, GetMSIntCurDamage },
+ { 0x00, ".energy", 0, 10000, &myship_int.CurEnergy, SetMSIntCurEnergy, GetMSIntCurEnergy },
+ { 0x00, ".speed", 0, 500000, &myship_int.CurSpeed, SetMSIntCurSpeed, GetMSIntCurSpeed },
+ { 0x00, ".dumb", 0, 10000, &myship_int.NumMissls, SetMSIntNumMissls, GetMSIntNumMissls },
+ { 0x00, ".guide", 0, 10000, &myship_int.NumHomMissls, SetMSIntNumHomMissls, GetMSIntNumHomMissls },
+ { 0x00, ".swarm", 0, 10000, &myship_int.NumPartMissls, SetMSIntNumPartMissls, GetMSIntNumPartMissls },
+ { 0x00, ".mines", 0, 10000, &myship_int.NumMines, SetMSIntNumMines, GetMSIntNumMines },
+ { 0x00, ".damage.max", 0, 10000, &myship_int.MaxDamage, SetMSIntMaxDamage, GetMSIntMaxDamage },
+ { 0x00, ".energy.max", 0, 10000, &myship_int.MaxEnergy, SetMSIntMaxEnergy, GetMSIntMaxEnergy },
+ { 0x00, ".speed.max", 0, 500000, &myship_int.MaxSpeed, SetMSIntMaxSpeed, GetMSIntMaxSpeed },
+ { 0x00, ".dumb.max", 0, 10000, &myship_int.MaxNumMissls, SetMSIntMaxNumMissls, GetMSIntMaxNumMissls },
+ { 0x00, ".guide.max", 0, 10000, &myship_int.MaxNumHomMissls, SetMSIntMaxNumHomMissls, GetMSIntMaxNumHomMissls },
+ { 0x00, ".swarm.max", 0, 10000, &myship_int.MaxNumPartMissls, SetMSIntMaxNumPartMissls, GetMSIntMaxNumPartMissls },
+ { 0x00, ".mines.max", 0, 10000, &myship_int.MaxNumMines, SetMSIntMaxNumMines, GetMSIntMaxNumMines },
+*/
+#endif // ENABLE_CHEAT_COMMANDS
+
+{ 0x00, "extras.max", 0, 100, &SV_GAME_EXTRAS_MAXNUM, NULL, NULL },
+{ 0x00, "extras.area", 100,10000, &GameExtraManager_proxy.MaxExtraArea, SetGameExtraManagerIntMaxExtraArea, GetGameExtraManagerIntMaxExtraArea },
+{ 0x00, "extras.dist", 50, 1000, &GameExtraManager_proxy.MinExtraDist, SetGameExtraManagerIntMinExtraDist, GetGameExtraManagerIntMinExtraDist },
+
+{ 0x00, "nebula.id", 2, 5, &Game_proxy.m_NebulaID, SetGameIntm_NebulaID, GetGameIntm_NebulaID },
+{ 0x00, "energy.boost", 0, 1000, &Game_proxy.EnergyExtraBoost, SetGameIntEnergyExtraBoost, GetGameIntEnergyExtraBoost },
+{ 0x00, "repair.boost", 0, 1000, &Game_proxy.RepairExtraBoost, SetGameIntRepairExtraBoost, GetGameIntRepairExtraBoost },
+
+{ 0x00, "pack.dumb.size", 0, 100, &Game_proxy.DumbPackNumMissls, SetGameIntDumbPackNumMissls, GetGameIntDumbPackNumMissls },
+{ 0x00, "pack.guide.size", 0, 100, &Game_proxy.HomPackNumMissls, SetGameIntHomPackNumMissls, GetGameIntHomPackNumMissls },
+{ 0x00, "pack.swarm.size", 0, 100, &Game_proxy.SwarmPackNumMissls, SetGameIntSwarmPackNumMissls, GetGameIntSwarmPackNumMissls},
+{ 0x00, "pack.mine.size", 0, 100, &Game_proxy.ProxPackNumMines, SetGameIntProxPackNumMines, GetGameIntProxPackNumMines },
+
+{ 0x00, "prob.extra", 0, 100, &GameExtraManager_proxy.ExtraProbability, SetGameExtraManagerIntExtraProbability, GetGameExtraManagerIntExtraProbability },
+
+{ 0x00, "prob.helix", 0, 100, &GameExtraManager_proxy.ProbHelixCannon, SetGameExtraManagerIntProbHelixCannon, GetGameExtraManagerIntProbHelixCannon },
+{ 0x00, "prob.lightning", 0, 100, &GameExtraManager_proxy.ProbLightningDevice, SetGameExtraManagerIntProbLightningDevice, GetGameExtraManagerIntProbLightningDevice},
+{ 0x00, "prob.photon", 0, 100, &GameExtraManager_proxy.ProbPhotonCannon, SetGameExtraManagerIntProbPhotonCannon, GetGameExtraManagerIntProbPhotonCannon },
+{ 0x00, "prob.mine", 0, 100, &GameExtraManager_proxy.ProbProximityMine, SetGameExtraManagerIntProbProximityMine, GetGameExtraManagerIntProbProximityMine },
+{ 0x00, "prob.repair", 0, 100, &GameExtraManager_proxy.ProbRepairExtra, SetGameExtraManagerIntProbRepairExtra, GetGameExtraManagerIntProbRepairExtra },
+{ 0x00, "prob.aburner", 0, 100, &GameExtraManager_proxy.ProbAfterburner, SetGameExtraManagerIntProbAfterburner, GetGameExtraManagerIntProbAfterburner },
+{ 0x00, "prob.decoy", 0, 100, &GameExtraManager_proxy.ProbHoloDecoy, SetGameExtraManagerIntProbHoloDecoy, GetGameExtraManagerIntProbHoloDecoy },
+{ 0x00, "prob.invisible", 0, 100, &GameExtraManager_proxy.ProbInvisibility, SetGameExtraManagerIntProbInvisibility, GetGameExtraManagerIntProbInvisibility },
+{ 0x00, "prob.invulnerable", 0, 100, &GameExtraManager_proxy.ProbInvulnerability, SetGameExtraManagerIntProbInvulnerability, GetGameExtraManagerIntProbInvulnerability},
+{ 0x00, "prob.energyfield", 0, 100, &GameExtraManager_proxy.ProbEnergyField, SetGameExtraManagerIntProbEnergyField, GetGameExtraManagerIntProbEnergyField },
+
+{ 0x00, "prob.lupgrade", 0, 100, &GameExtraManager_proxy.ProbLaserUpgrade, SetGameExtraManagerIntProbLaserUpgrade, GetGameExtraManagerIntProbLaserUpgrade },
+{ 0x00, "prob.lupgrade1", 0, 100, &GameExtraManager_proxy.ProbLaserUpgrade1, SetGameExtraManagerIntProbLaserUpgrade1, GetGameExtraManagerIntProbLaserUpgrade1 },
+{ 0x00, "prob.lupgrade2", 0, 100, &GameExtraManager_proxy.ProbLaserUpgrade2, SetGameExtraManagerIntProbLaserUpgrade2, GetGameExtraManagerIntProbLaserUpgrade2 },
+
+{ 0x00, "prob.misspack", 0, 100, &GameExtraManager_proxy.ProbMissilePack, SetGameExtraManagerIntProbMissilePack, GetGameExtraManagerIntProbMissilePack },
+{ 0x00, "prob.dumb", 0, 100, &GameExtraManager_proxy.ProbDumbMissPack, SetGameExtraManagerIntProbDumbMissPack, GetGameExtraManagerIntProbDumbMissPack },
+{ 0x00, "prob.guide", 0, 100, &GameExtraManager_proxy.ProbHomMissPack, SetGameExtraManagerIntProbHomMissPack, GetGameExtraManagerIntProbHomMissPack },
+{ 0x00, "prob.swarm", 0, 100, &GameExtraManager_proxy.ProbSwarmMissPack, SetGameExtraManagerIntProbSwarmMissPack, GetGameExtraManagerIntProbSwarmMissPack },
+
+{ 0x00, "prob.empupgrade1", 0, 100, &GameExtraManager_proxy.ProbEmpUpgrade1, SetGameExtraManagerIntProbEmpUpgrade1, GetGameExtraManagerIntProbEmpUpgrade1 },
+{ 0x00, "prob.empupgrade2", 0, 100, &GameExtraManager_proxy.ProbEmpUpgrade2, SetGameExtraManagerIntProbEmpUpgrade2, GetGameExtraManagerIntProbEmpUpgrade2 },
+};
+
+#define NUM_INT_COMMANDS CALC_NUM_ARRAY_ENTRIES( int_commands_default )
+
+
+// pointer to current integer variable commands list --------------------------
+//
+PUBLIC int_command_s *int_commands = int_commands_default;
+
+
+// current number of integer variable commands --------------------------------
+//
+PUBLIC int num_int_commands = NUM_INT_COMMANDS;
+PRIVATE int max_int_commands = NUM_INT_COMMANDS;
+
+
+// register a new (user-defined) integer variable command ---------------------
+//
+void CON_RegisterIntCommand( int_command_s *regcom )
+{
+ //NOTE:
+ //CAVEAT:
+ // the supplied command string is not copied
+ // by this function. thus, the caller MUST ENSURE
+ // that this string is available indefinitely.
+ // (e.g., allocated statically.)
+
+ ASSERT( regcom != NULL );
+ ASSERT( regcom->command != NULL );
+ ASSERT( regcom->intref != NULL );
+ ASSERT( regcom->bmin <= regcom->bmax );
+ ASSERT( num_int_commands <= max_int_commands );
+
+ // expand table memory if already used up
+ if ( num_int_commands == max_int_commands ) {
+
+ // expand exponentially
+ max_int_commands *= 2;
+
+ // alloc new table
+ int_command_s *newlist = (int_command_s *) ALLOCMEM( sizeof( int_command_s ) * max_int_commands );
+ ASSERT( newlist != NULL );
+
+ // move old table
+ memcpy( newlist, int_commands, sizeof( int_command_s ) * num_int_commands );
+ if ( int_commands != int_commands_default )
+ FREEMEM( int_commands );
+ int_commands = newlist;
+ }
+
+ // append new command
+ ASSERT( num_int_commands < max_int_commands );
+ int_commands[ num_int_commands++ ] = *regcom;
+}
+