/* =========================================================================== Wolfenstein: Enemy Territory GPL Source Code Copyright (C) 1999-2010 id Software LLC, a ZeniMax Media company. This file is part of the Wolfenstein: Enemy Territory GPL Source Code (“Wolf ET Source Code”). Wolf ET Source Code 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. Wolf ET Source Code 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 Wolf ET Source Code. If not, see . In addition, the Wolf: ET Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Wolf ET Source Code. If not, please request a copy in writing from id Software at the address below. If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA. =========================================================================== */ #include "q_shared.h" #include "bg_public.h" bg_playerclass_t bg_allies_playerclasses[NUM_PLAYER_CLASSES] = { { PC_SOLDIER, "characters/temperate/allied/soldier.char", "ui/assets/mp_gun_blue.tga", "ui/assets/mp_arrow_blue.tga", { WP_THOMPSON, WP_MOBILE_MG42, WP_FLAMETHROWER, WP_PANZERFAUST, WP_MORTAR }, }, { PC_MEDIC, "characters/temperate/allied/medic.char", "ui/assets/mp_health_blue.tga", "ui/assets/mp_arrow_blue.tga", { WP_THOMPSON, }, }, { PC_ENGINEER, "characters/temperate/allied/engineer.char", "ui/assets/mp_wrench_blue.tga", "ui/assets/mp_arrow_blue.tga", { WP_THOMPSON, WP_CARBINE, }, }, { PC_FIELDOPS, "characters/temperate/allied/fieldops.char", "ui/assets/mp_ammo_blue.tga", "ui/assets/mp_arrow_blue.tga", { WP_THOMPSON, }, }, { PC_COVERTOPS, "characters/temperate/allied/cvops.char", "ui/assets/mp_spy_blue.tga", "ui/assets/mp_arrow_blue.tga", { WP_STEN, WP_FG42, WP_GARAND, }, }, }; bg_playerclass_t bg_axis_playerclasses[NUM_PLAYER_CLASSES] = { { PC_SOLDIER, "characters/temperate/axis/soldier.char", "ui/assets/mp_gun_red.tga", "ui/assets/mp_arrow_red.tga", { WP_MP40, WP_MOBILE_MG42, WP_FLAMETHROWER, WP_PANZERFAUST, WP_MORTAR }, }, { PC_MEDIC, "characters/temperate/axis/medic.char", "ui/assets/mp_health_red.tga", "ui/assets/mp_arrow_red.tga", { WP_MP40, }, }, { PC_ENGINEER, "characters/temperate/axis/engineer.char", "ui/assets/mp_wrench_red.tga", "ui/assets/mp_arrow_red.tga", { WP_MP40, WP_KAR98, }, }, { PC_FIELDOPS, "characters/temperate/axis/fieldops.char", "ui/assets/mp_ammo_red.tga", "ui/assets/mp_arrow_red.tga", { WP_MP40, }, }, { PC_COVERTOPS, "characters/temperate/axis/cvops.char", "ui/assets/mp_spy_red.tga", "ui/assets/mp_arrow_red.tga", { WP_STEN, WP_FG42, WP_K43, }, }, }; bg_playerclass_t* BG_GetPlayerClassInfo( int team, int cls ) { bg_playerclass_t* teamList; if ( cls < PC_SOLDIER || cls >= NUM_PLAYER_CLASSES ) { cls = PC_SOLDIER; } switch ( team ) { default: case TEAM_AXIS: teamList = bg_axis_playerclasses; break; case TEAM_ALLIES: teamList = bg_allies_playerclasses; break; } return &teamList[cls]; } bg_playerclass_t* BG_PlayerClassForPlayerState( playerState_t* ps ) { return BG_GetPlayerClassInfo( ps->persistant[PERS_TEAM], ps->stats[STAT_PLAYER_CLASS] ); } qboolean BG_ClassHasWeapon( bg_playerclass_t* classInfo, weapon_t weap ) { int i; if ( !weap ) { return qfalse; } for ( i = 0; i < MAX_WEAPS_PER_CLASS; i++ ) { if ( classInfo->classWeapons[i] == weap ) { return qtrue; } } return qfalse; } qboolean BG_WeaponIsPrimaryForClassAndTeam( int classnum, team_t team, weapon_t weapon ) { bg_playerclass_t *classInfo; if ( team == TEAM_ALLIES ) { classInfo = &bg_allies_playerclasses[classnum]; if ( BG_ClassHasWeapon( classInfo, weapon ) ) { return qtrue; } } else if ( team == TEAM_AXIS ) { classInfo = &bg_axis_playerclasses[classnum]; if ( BG_ClassHasWeapon( classInfo, weapon ) ) { return qtrue; } } return qfalse; } const char* BG_ShortClassnameForNumber( int classNum ) { switch ( classNum ) { case PC_SOLDIER: return "Soldr"; case PC_MEDIC: return "Medic"; case PC_ENGINEER: return "Engr"; case PC_FIELDOPS: return "FdOps"; case PC_COVERTOPS: return "CvOps"; default: return "^1ERROR"; } } const char* BG_ClassnameForNumber( int classNum ) { switch ( classNum ) { case PC_SOLDIER: return "Soldier"; case PC_MEDIC: return "Medic"; case PC_ENGINEER: return "Engineer"; case PC_FIELDOPS: return "Field Ops"; case PC_COVERTOPS: return "Covert Ops"; default: return "^1ERROR"; } } const char* BG_ClassLetterForNumber( int classNum ) { switch ( classNum ) { case PC_SOLDIER: return "S"; case PC_MEDIC: return "M"; case PC_ENGINEER: return "E"; case PC_FIELDOPS: return "F"; case PC_COVERTOPS: return "C"; default: return "^1E"; } } int BG_ClassTextToClass( char *token ) { if ( !Q_stricmp( token, "soldier" ) ) { return PC_SOLDIER; } else if ( !Q_stricmp( token, "medic" ) ) { return PC_MEDIC; } else if ( !Q_stricmp( token, "lieutenant" ) ) { // FIXME: remove from missionpack return PC_FIELDOPS; } else if ( !Q_stricmp( token, "fieldops" ) ) { return PC_FIELDOPS; } else if ( !Q_stricmp( token, "engineer" ) ) { return PC_ENGINEER; } else if ( !Q_stricmp( token, "covertops" ) ) { return PC_COVERTOPS; } return -1; } skillType_t BG_ClassSkillForClass( int classnum ) { skillType_t classskill[NUM_PLAYER_CLASSES] = { SK_HEAVY_WEAPONS, SK_FIRST_AID, SK_EXPLOSIVES_AND_CONSTRUCTION, SK_SIGNALS, SK_MILITARY_INTELLIGENCE_AND_SCOPED_WEAPONS }; if ( classnum < 0 || classnum >= NUM_PLAYER_CLASSES ) { return SK_BATTLE_SENSE; } return classskill[ classnum ]; }