2016-03-12 01:20:51 +01:00
|
|
|
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of version 2 of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation
|
|
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
2016-03-11 14:57:17 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Class responsible for describing game session
|
|
|
|
*/
|
|
|
|
class CSessionProperties {
|
|
|
|
public:
|
|
|
|
enum GameMode {
|
|
|
|
GM_FLYOVER = -1,
|
|
|
|
GM_COOPERATIVE = 0,
|
|
|
|
GM_SCOREMATCH,
|
|
|
|
GM_FRAGMATCH,
|
|
|
|
};
|
|
|
|
enum GameDifficulty {
|
|
|
|
GD_TOURIST = -1,
|
|
|
|
GD_EASY = 0,
|
|
|
|
GD_NORMAL,
|
|
|
|
GD_HARD,
|
|
|
|
GD_EXTREME,
|
|
|
|
};
|
|
|
|
|
|
|
|
INDEX sp_ctMaxPlayers; // maximum number of players in game
|
|
|
|
BOOL sp_bWaitAllPlayers; // wait for all players to connect
|
|
|
|
BOOL sp_bQuickTest; // set when game is tested from wed
|
|
|
|
BOOL sp_bCooperative; // players are not intended to kill each other
|
|
|
|
BOOL sp_bSinglePlayer; // single player mode has some special rules
|
|
|
|
BOOL sp_bUseFrags; // set if frags matter instead of score
|
|
|
|
|
|
|
|
enum GameMode sp_gmGameMode; // general game rules
|
|
|
|
|
|
|
|
enum GameDifficulty sp_gdGameDifficulty;
|
|
|
|
ULONG sp_ulSpawnFlags;
|
|
|
|
BOOL sp_bMental; // set if mental mode engaged
|
|
|
|
|
|
|
|
INDEX sp_iScoreLimit; // stop game after a player/team reaches given score
|
|
|
|
INDEX sp_iFragLimit; // stop game after a player/team reaches given score
|
|
|
|
INDEX sp_iTimeLimit; // stop game after given number of minutes elapses
|
|
|
|
|
|
|
|
BOOL sp_bTeamPlay; // players are divided in teams
|
|
|
|
BOOL sp_bFriendlyFire; // can harm player of same team
|
|
|
|
BOOL sp_bWeaponsStay; // weapon items do not dissapear when picked-up
|
|
|
|
BOOL sp_bAmmoStays; // ammo items do not dissapear when picked-up
|
|
|
|
BOOL sp_bHealthArmorStays; // health/armor items do exist
|
|
|
|
BOOL sp_bPlayEntireGame; // don't finish after one level in coop
|
|
|
|
BOOL sp_bAllowHealth; // health items do exist
|
|
|
|
BOOL sp_bAllowArmor; // armor items do exist
|
|
|
|
BOOL sp_bInfiniteAmmo; // ammo is not consumed when firing
|
|
|
|
BOOL sp_bRespawnInPlace; // players respawn on the place where they were killed, not on markers (coop only)
|
|
|
|
|
|
|
|
FLOAT sp_fEnemyMovementSpeed; // enemy speed multiplier
|
|
|
|
FLOAT sp_fEnemyAttackSpeed; // enemy speed multiplier
|
|
|
|
FLOAT sp_fDamageStrength; // multiplier when damaged
|
|
|
|
FLOAT sp_fAmmoQuantity; // multiplier when picking up ammo
|
|
|
|
FLOAT sp_fManaTransferFactor; // multiplier for the killed player mana that is to be added to killer's mana
|
|
|
|
INDEX sp_iInitialMana; // life price (mana that each player'll have upon respawning)
|
|
|
|
FLOAT sp_fExtraEnemyStrength; // fixed adder for extra enemy power
|
|
|
|
FLOAT sp_fExtraEnemyStrengthPerPlayer; // adder for extra enemy power per each player playing
|
|
|
|
|
|
|
|
INDEX sp_ctCredits; // number of credits for this game
|
|
|
|
INDEX sp_ctCreditsLeft; // number of credits left on this level
|
|
|
|
FLOAT sp_tmSpawnInvulnerability; // how many seconds players are invunerable after respawning
|
|
|
|
|
|
|
|
INDEX sp_iBlood; // blood/gibs type (0=none, 1=green, 2=red, 3=hippie)
|
|
|
|
BOOL sp_bGibs; // enable/disable gibbing
|
|
|
|
|
|
|
|
BOOL sp_bEndOfGame; // marked when dm game is finished (any of the limits reached)
|
|
|
|
|
|
|
|
ULONG sp_ulLevelsMask; // mask of visited levels so far
|
|
|
|
|
|
|
|
BOOL sp_bUseExtraEnemies; // spawn extra multiplayer enemies
|
|
|
|
};
|
|
|
|
|
|
|
|
// NOTE: never instantiate CSessionProperties, as its size is not fixed to the size defined in engine
|
|
|
|
// use CUniversalSessionProperties for instantiating an object
|
|
|
|
class CUniversalSessionProperties {
|
|
|
|
public:
|
|
|
|
union {
|
|
|
|
CSessionProperties usp_sp;
|
|
|
|
UBYTE usp_aubDummy[NET_MAXSESSIONPROPERTIES];
|
|
|
|
};
|
|
|
|
|
|
|
|
// must have exact the size as allocated block in engine
|
|
|
|
CUniversalSessionProperties() {
|
|
|
|
ASSERT(sizeof(CSessionProperties)<=NET_MAXSESSIONPROPERTIES);
|
|
|
|
ASSERT(sizeof(CUniversalSessionProperties)==NET_MAXSESSIONPROPERTIES);
|
2016-03-29 03:03:54 +02:00
|
|
|
memset(usp_aubDummy, '\0', sizeof (usp_aubDummy));
|
2016-03-11 14:57:17 +01:00
|
|
|
}
|
|
|
|
operator CSessionProperties&(void) { return usp_sp; }
|
|
|
|
};
|
|
|
|
|