diff --git a/Source/Menu/Defs.h b/Source/Menu/Defs.h index 2c4fd1ea..21cf3fc0 100755 --- a/Source/Menu/Defs.h +++ b/Source/Menu/Defs.h @@ -171,7 +171,7 @@ enum { BTN_FINDGAME, BTN_STARTGAME, BTN_GAMEINFO, - BTN_UPDATE, + BTN_UPDATELIST, BTN_ADDSERVER, BTN_DISCONNECT, BTN_CONSOLE, diff --git a/Source/Menu/Init.c b/Source/Menu/Init.c index fee653f9..a5688ac3 100755 --- a/Source/Menu/Init.c +++ b/Source/Menu/Init.c @@ -24,6 +24,8 @@ OTHER DEALINGS IN THE SOFTWARE. */ +string(float a, float b) getgamedirinfo = #0; + /* ================= m_init @@ -78,6 +80,13 @@ void m_init( void ) { search_end( shSprays ); drawfont = loadfont( "font", "", "12", -1 ); + + string gamedirname; + string gamedescription; + for (int gameidx = 0; (gamedirname = getgamedirinfo(gameidx, 0)); gameidx++) { + gamedescription = getgamedirinfo(gameidx, 1); + print(sprintf("Gamedir %s, description %s\n", gamedirname, gamedescription)); + } } /* diff --git a/Source/Menu/Input.c b/Source/Menu/Input.c index 2c996f25..10bf2d88 100755 --- a/Source/Menu/Input.c +++ b/Source/Menu/Input.c @@ -148,7 +148,9 @@ float Menu_InputEvent( float fEventType, float fKey, float fCharacter, float fDe } else { return FALSE; } - + + m_draw(vVideoSize); + return TRUE; } diff --git a/Source/Menu/MenuMultiplayer.c b/Source/Menu/MenuMultiplayer.c index fc8100eb..56edf1fe 100755 --- a/Source/Menu/MenuMultiplayer.c +++ b/Source/Menu/MenuMultiplayer.c @@ -106,36 +106,40 @@ Menu_Multiplayer First mulitplayer screen with the server browser ================= */ -void Menu_Multiplayer( void ) { +void Menu_Multiplayer(void) { static string strCustomIP; static int iSelectedServer = -1; static int iScrollServer; static int iServersTotal; static int iAddServer = FALSE; - static void Multiplayer_ButtonJoin( void ) { + static void Multiplayer_ButtonJoin(void) { if ( iSelectedServer >= 0 ) { localcmd( sprintf( "connect %s\n", gethostcachestring( fldAddress, iSelectedServer ) ) ); m_hide(); } } - static void Multiplayer_ButtonCreate( void ) { + static void Multiplayer_ButtonCreate(void) { iMenu = MENU_MULTIPLAYER_CREATE; } - static void Multiplayer_ButtonRefresh( void ) { + static void Multiplayer_ButtonRefresh(void) { refreshhostcache(); resorthostcache(); } - static void Multiplayer_ButtonDone( void ) { + static void Multiplayer_ButtonUpdate(void) { + refreshhostcache(TRUE); + resorthostcache(); + } + static void Multiplayer_ButtonDone(void) { iMenu = MENU_MAIN; } - static void Multiplayer_ButtonIRC( void ) { + static void Multiplayer_ButtonIRC(void) { iMenu = MENU_MULTIPLAYER_IRC; } - static void Multiplayer_ButtonAdd( void ) { + static void Multiplayer_ButtonAdd(void) { iAddServer = 1 - iAddServer; } - static void Multiplayer_ButtonJoinIP( void ) { + static void Multiplayer_ButtonJoinIP(void) { if ( strCustomIP ) { localcmd( sprintf( "connect %s\n", strCustomIP ) ); m_hide(); @@ -162,18 +166,19 @@ void Menu_Multiplayer( void ) { iServersTotal = gethostcachevalue( SLIST_HOSTCACHEVIEWCOUNT ); - Menu_SetClipArea( '32 148', '164 192' ); + Menu_SetClipArea( '32 148', '164 256' ); Object_Button( '32 148', BTN_JOINGAME, Multiplayer_ButtonJoin, fButtonAlpha[0] ); Object_Button( '32 180', BTN_CREATE, Multiplayer_ButtonCreate, fButtonAlpha[1] ); Object_Button( '32 212', BTN_GAMEINFO, __NULL__, fButtonAlpha[2] ); Object_Button( '32 244', BTN_REFRESHLIST, Multiplayer_ButtonRefresh, fButtonAlpha[3] ); - Object_Button( '32 276', BTN_ADDSERVER, Multiplayer_ButtonAdd, fButtonAlpha[4] ); + Object_Button( '32 276', BTN_UPDATELIST, Multiplayer_ButtonUpdate, fButtonAlpha[4] ); + Object_Button( '32 308', BTN_ADDSERVER, Multiplayer_ButtonAdd, fButtonAlpha[5] ); - if ( checkcommand( "irc" ) ) { - Object_Button( '32 276', BTN_IRCCHAT, Multiplayer_ButtonIRC, fButtonAlpha[4] ); - } + //if ( checkcommand( "irc" ) ) { + Object_Button( '32 340', BTN_IRCCHAT, Multiplayer_ButtonIRC, fButtonAlpha[6] ); + //} - Object_Button( '32 308', BTN_DONE, Multiplayer_ButtonDone, fButtonAlpha[5] ); + Object_Button( '32 372', BTN_DONE, Multiplayer_ButtonDone, fButtonAlpha[7] ); Menu_ResetClipArea(); Object_Frame( '196 140', '404 308' ); @@ -214,7 +219,7 @@ Menu_Multiplayer_Create Server creation menu screen ================= */ -void Menu_Multiplayer_Create( void ) { +void Menu_Multiplayer_Create(void) { static int iSelectedMap; static int iScrollMap; static int iFirst = 1; @@ -255,11 +260,11 @@ void Menu_Multiplayer_Create( void ) { drawstring( vPosition + '8 0', sMapList[ iIndex ], '12 12', autocvar_menu_fgcolor, fAlpha, 0 ); } } - static void Create_ButtonAdvanced( void ) { + static void Create_ButtonAdvanced(void) { // Advanced options iMenu = MENU_MULTIPLAYER_OPTIONS; } - static void Create_ButtonOK( void ) { + static void Create_ButtonOK(void) { // Apply the configurations if ( strHostname != __NULL__ ) { localcmd( sprintf( "hostname %s\n", strHostname ) ); @@ -270,7 +275,7 @@ void Menu_Multiplayer_Create( void ) { // Start server localcmd( sprintf( "map %s\n", sMapList[ iSelectedMap ] ) ); } - static void Create_ButtonCancel( void ) { + static void Create_ButtonCancel(void) { iMenu = MENU_MULTIPLAYER; } @@ -304,13 +309,43 @@ void Menu_Multiplayer_Create( void ) { Menu_ResetClipArea(); } -void Menu_Multiplayer_IRC( void ) { +int iIRCShowRooms; +var string irc_currentroom; + +static string stockrooms[] = { + "FreeCS Chat", "#freecs", + "Maps & Mods", "#maps", + "Off-Topic", "#general", + "Support", "#support" +}; + +void Menu_Multiplayer_IRC_Rooms(void) +{ + static int iRoomsInitialized = FALSE; + static string roomlist; + + static void IRC_ButtonDone(void) { + iIRCShowRooms = FALSE; + } + + if (!iRoomsInitialized) { + //roomlist + } + + Object_Button( '32 308', BTN_DONE, IRC_ButtonDone, fButtonAlpha[0] ); +} + +void Menu_Multiplayer_IRC(void) { static int iIRCInit = FALSE; static string currenttab; string showtab; - static string s; //static to access it in nested functions. + static string s; + static string strGameDir_Lobby; + static string strGameDir_Support; + static string strGameDir_Maps; + static string strGameDir_Mods; - static void IRC_ButtonDone( void ) { + static void IRC_ButtonDone(void) { iMenu = MENU_MULTIPLAYER; } static void IRC_ButtonSelect(void) { @@ -322,11 +357,22 @@ void Menu_Multiplayer_IRC( void ) { con_input(currenttab, IE_FOCUS, 1/*mouse focus*/, 1/*key focus*/, 0); } } - + if ( iIRCInit == FALSE ) { - print( "[IRC] Connecting to #freecs...\n" ); - localcmd("/irc /connect irc.freenode.org #freecs\n"); + localcmd("plug_load irc\n"); + localcmd(sprintf("irc_nick %s\n", cvar_string("name"))); + strGameDir_Lobby = sprintf("#%s_lobby", cvar_string("game")); + strGameDir_Support = sprintf("#%s_support", cvar_string("game")); + strGameDir_Maps = sprintf("#%s_maps", cvar_string("game")); + strGameDir_Mods = sprintf("#%s_mods", cvar_string("game")); + localcmd("irc /connect www.vera-visions.com\n"); iIRCInit = TRUE; + iIRCShowRooms = TRUE; + } + + if (iIRCShowRooms) { + Menu_Multiplayer_IRC_Rooms(); + return; } int iTabIdx; @@ -355,7 +401,8 @@ void Menu_Multiplayer_IRC( void ) { if not (showtab) //the channel we're trying to target for (s = ""; s; s = con_getset(s, "next")) { //try to find our target channel - if (substring(s, 0, 3) == "IRC" && substring(s, -8, -1) == ":#freecs") + print(sprintf("TAB: %s\n", s)); + if (substring(s, 0, 3) == "IRC" && substring(s, -7, -1) == "#freecs") { showtab = s; break; @@ -394,7 +441,7 @@ void Menu_Multiplayer_IRC( void ) { //note that if you wish to handle IME strings then you should be doing that anyway. if (fInputKeyCode != K_MOUSE1 && (fInputKeyCode || fInputKeyASCII)) { -//print(sprintf("Sending input: %f %f %c\n", fInputKeyCode, fInputKeyASCII, fInputKeyASCII)); + //print(sprintf("Sending input: %f %f %c\n", fInputKeyCode, fInputKeyASCII, fInputKeyASCII)); con_input(currenttab, IE_KEYDOWN, fInputKeyCode, fInputKeyASCII, 0); con_input(currenttab, IE_KEYUP, fInputKeyCode, fInputKeyASCII, 0); fInputKeyCode = 0; diff --git a/Source/Menu/Objects.c b/Source/Menu/Objects.c index 8adae171..6c5f1342 100755 --- a/Source/Menu/Objects.c +++ b/Source/Menu/Objects.c @@ -76,7 +76,7 @@ string sButtonLabels[ MENU_BUTTONS ] = { _("BTN_FINDGAME"), _("BTN_STARTGAME"), _("BTN_GAMEINFO"), - _("BTN_UPDATE"), + _("BTN_UPDATELIST"), _("BTN_ADDSERVER"), _("BTN_DISCONNECT"), _("BTN_CONSOLE"), diff --git a/Source/Server/AmbientSound.c b/Source/Server/AmbientSound.c index 8102fef3..88d24827 100755 --- a/Source/Server/AmbientSound.c +++ b/Source/Server/AmbientSound.c @@ -46,9 +46,6 @@ Not Toggled (32) - Older FGDs show this as Not Looped. Must be left unchecked for looping sound files. Note that actual looping depends purely on cue points defined in the .wav file (see notes). */ -.float pitch; -.float loop; -.float lforate; void ambient_generic( void ) { static float ambient_generic_send( entity ePEnt, float fChanged ) { WriteByte( MSG_ENTITY, ENT_AMBIENTSOUND ); diff --git a/Source/Server/ArmouryEntity.c b/Source/Server/ArmouryEntity.c index 1844a112..aaf12d1c 100755 --- a/Source/Server/ArmouryEntity.c +++ b/Source/Server/ArmouryEntity.c @@ -68,9 +68,6 @@ string sArmouryModels[ 19 ] = { "models/w_smokegrenade.mdl" }; -.float item; -.float count; - /* ================= SPAWN: armoury_entity diff --git a/Source/Server/Defs.h b/Source/Server/Defs.h index c0dea326..07a581bf 100755 --- a/Source/Server/Defs.h +++ b/Source/Server/Defs.h @@ -75,20 +75,6 @@ enum { GRENADE_READY }; -// Player specific fields -.float fInBuyZone; -.float fInHostageZone; -.float fInBombZone; -.float fMoney; -.float fStepTime; -.int iInGame; -.float fCharModel; -//.int iHasBomb; -.float fDeaths; -.int iEquipment; -.float armor; -.float fProgressBar; - // Match specific fields int iRounds; int iWon_T; @@ -99,13 +85,7 @@ int iAlivePlayers_CT; float fGameState; float fGameTime; -// Weapon specific fields -.int iCurrentMag; -.int iCurrentCaliber; -.float fSlotMelee, fSlotPrimary, fSlotSecondary, fSlotGrenade; -.float fAttackFinished; -.float fRadioFinished; -.float fAccuracy; +entity eActivator; // Game specific fields int iHostagesMax; @@ -120,26 +100,6 @@ int iBombRadius; // For info_map_parameters int iHostagesRescued; int iBombPlanted; -// Generic entity fields -.int iUsable; -.int iBleeds; -.void( int iHitBody ) vPain; -.void( int iHitBody ) vDeath; -.float fRespawns; -.entity eUser; -.float material; - -// All about +use -entity eActivator; -.void() vUse; -.int iUsable; - -// GoldSrc-Rendermode Fields -.vector rendercolor; -.float rendermode; -.float renderamt; -.float alpha; - void Rules_RoundOver( int iTeamWon, int iMoneyReward, float fSilent ); float Rules_BuyingPossible( void ); void Timer_Begin( float fTime, float fMode); diff --git a/Source/Server/EntHostage.c b/Source/Server/EntHostage.c index 9ac0be87..af322296 100755 --- a/Source/Server/EntHostage.c +++ b/Source/Server/EntHostage.c @@ -24,10 +24,6 @@ OTHER DEALINGS IN THE SOFTWARE. */ -.entity eTargetPoint; -.entity eLastCreated; -.int iHasBeenUsed; - enum { HOSTAGE_IDLE, HOSTAGE_WALK, diff --git a/Source/Server/Entities.c b/Source/Server/Entities.c index ae5a192b..682fed14 100755 --- a/Source/Server/Entities.c +++ b/Source/Server/Entities.c @@ -105,13 +105,6 @@ Entities_InitRespawnable Called ==================== */ -.string sOldModel; -.float fOldSolid; -.float fOldHealth; -.vector vOldOrigin; -.vector vOldAngle; -.void() vRespawn; -.void() vOldUse; void Entities_InitRespawnable( void() vRespawnFunc ) { self.sOldModel = self.model; self.fOldSolid = self.solid; diff --git a/Source/Server/EnvObjects.c b/Source/Server/EnvObjects.c index 2ebe60a1..b6a68407 100755 --- a/Source/Server/EnvObjects.c +++ b/Source/Server/EnvObjects.c @@ -67,7 +67,6 @@ Sprite (model) - A sprite must be specified here (sprites/spritename.spr). Frames per second (framerate) - Framerate the sprite will run at if animated. ================= */ -.float framerate; void env_sprite( void ) { static float env_sprite_send( entity ePEnt, float fChanged ) { WriteByte( MSG_ENTITY, ENT_SPRITE ); // Identifier @@ -170,7 +169,6 @@ It's possible to create a similar effect with a combination of other entities, but it wouldn't be much fun, so this quick and easy one is here instead! ================= */ -.int iMagnitude; enumflags { ENVEXPLO_NODAMAGE, @@ -222,7 +220,7 @@ We may never know. */ #define SPARK_TOGGLE 32 #define SPARK_ON 64 -.float MaxDelay; + void env_spark( void ) { static void env_spark_fire( void ) { Effect_CreateSpark( self.origin, self.angles ); diff --git a/Source/Server/FuncDoor.c b/Source/Server/FuncDoor.c index cfe17522..1ca6697f 100755 --- a/Source/Server/FuncDoor.c +++ b/Source/Server/FuncDoor.c @@ -48,15 +48,6 @@ enum { STATE_DOWN }; -.float speed; -.float lip; -.float state; -.vector pos1, pos2; - -// Not all that customizable... -.float movesnd; -.float stopsnd; - /* ==================== FuncDoor_PrecacheSounds diff --git a/Source/Server/FuncDoorRotating.c b/Source/Server/FuncDoorRotating.c index 0dc40c65..8b4573fd 100755 --- a/Source/Server/FuncDoorRotating.c +++ b/Source/Server/FuncDoorRotating.c @@ -45,8 +45,6 @@ void FuncDoorRotate_RotateAway( void ); void FuncDoorRotate_RotateBack( void ); void FuncDoorRotate_Touch( void ); -.float distance; - /* ================= FuncDoorRotate_Arrived diff --git a/Source/Server/InfoDecal.c b/Source/Server/InfoDecal.c index 16904063..08c8fa2e 100644 --- a/Source/Server/InfoDecal.c +++ b/Source/Server/InfoDecal.c @@ -24,9 +24,6 @@ OTHER DEALINGS IN THE SOFTWARE. */ -/* decal name */ -.string texture; - /* We need to save trace infos temporarily in order to figure out what to * project the decal against. Half-Life's infodecal entity only stores origin, * but not angles. So we have to figure them out ourselves. */ diff --git a/Source/Server/Light.c b/Source/Server/Light.c index e94cdb6c..560a1249 100755 --- a/Source/Server/Light.c +++ b/Source/Server/Light.c @@ -32,7 +32,6 @@ Only thing this ent does, is allow the change of lightstyles. You can use custom patterns, too. ================= */ -.string pattern; void light( void ) { static void light_toggle( void ) { if ( self.health == TRUE ) { diff --git a/Source/Server/Rules.c b/Source/Server/Rules.c index 47c39fd1..1656123b 100755 --- a/Source/Server/Rules.c +++ b/Source/Server/Rules.c @@ -31,6 +31,33 @@ enum { BUY_NEITHER }; +/* Edit this for a custom gun-game order */ +int gg_order[] = { + WEAPON_KNIFE, + WEAPON_GLOCK18, + WEAPON_USP45, + WEAPON_P228, + WEAPON_FIVESEVEN, + WEAPON_ELITES, + WEAPON_DEAGLE, + WEAPON_M3, + WEAPON_XM1014, + WEAPON_TMP, + WEAPON_MAC10, + WEAPON_MP5, + WEAPON_UMP45, + WEAPON_P90, + WEAPON_AK47, + WEAPON_SCOUT, + WEAPON_M4A1, + WEAPON_SG552, + WEAPON_AUG, + WEAPON_G3SG1, + WEAPON_SG550, + WEAPON_AWP, + WEAPON_PARA +}; + /* ================= Rules_BuyingPossible @@ -250,27 +277,27 @@ Happens rarely */ void Rules_SwitchTeams( void ) { int iCTW, iTW; - - for ( entity eFind = world; ( eFind = find( eFind, classname, "player" ) ); ) { - if ( eFind.team == TEAM_CT ) { + + for (entity eFind = world; (eFind = find(eFind, classname, "player"));) { + if (eFind.team == TEAM_CT) { eFind.team = TEAM_T; eFind.fCharModel -= 4; - } else if ( eFind.team == TEAM_T ) { + } else if (eFind.team == TEAM_T) { eFind.team = TEAM_CT; eFind.fCharModel += 4; } - forceinfokey( eFind, "*team", ftos( eFind.team ) ); + forceinfokey(eFind, "*team", ftos(eFind.team)); } - + iCTW = iWon_CT; iTW = iWon_T; - + iWon_T = iCTW; iWon_CT = iTW; - + iCTW = iAlivePlayers_CT; iTW = iAlivePlayers_T; - + iAlivePlayers_CT = iTW; iAlivePlayers_T = iCTW; } @@ -316,12 +343,11 @@ void Rules_DeathCheck(void) ================= SPAWN: info_map_parameters -Let's map authors decide who can buy stuff and who CAN'T. -Also allows people to set the bomb placing radius incase you want to use info_bomb_target. +Let map authors decide who can buy stuff and who CAN'T. +Also allows people to set the bomb placing radius incase +you want to use info_bomb_target. ================= */ -.float buying; -.float bombradius; void info_map_parameters( void ) { if ( self.bombradius ) { iBombRadius = self.bombradius; diff --git a/Source/Server/Spawn.c b/Source/Server/Spawn.c index 76f267b3..6a1199b2 100755 --- a/Source/Server/Spawn.c +++ b/Source/Server/Spawn.c @@ -347,6 +347,21 @@ void info_player_deathmatch( void ) { } } +/* Counter-Strike: Source compat */ +void info_player_counterterrorist(void) +{ + setorigin(self, self.origin + [0,0,32]); + self.classname = "info_player_start"; + info_player_start(); +} + +void info_player_terrorist(void) +{ + setorigin(self, self.origin + [0,0,32]); + self.classname = "info_player_deathmatch"; + info_player_deathmatch(); +} + /* ================= info_target diff --git a/Source/Server/progs.src b/Source/Server/progs.src index 28dc4b11..22fa5b56 100755 --- a/Source/Server/progs.src +++ b/Source/Server/progs.src @@ -7,6 +7,7 @@ ../Globals.h ../Math.h Defs.h +DefsFields.h Money.c ../Shared/Animations.c diff --git a/Source/Shared/Effects.c b/Source/Shared/Effects.c index deadf3d0..34b2248e 100755 --- a/Source/Shared/Effects.c +++ b/Source/Shared/Effects.c @@ -95,7 +95,13 @@ void Effect_Spraypaint( string sLogo, float fR, float fG, float fB ) { #else float Effect_Spraypaint( void ) { makevectors( self.angles ); - adddecal( self.classname, self.origin, v_up / 32, v_forward / 32, self.color, 1.0f ); + float surf = getsurfacenearpoint(world, self.origin); + vector s_dir = getsurfacepointattribute(world, surf, 0, SPA_S_AXIS); + vector t_dir = getsurfacepointattribute(world, surf, 0, SPA_T_AXIS); + + //vector fixedty = dotproduct( + + adddecal( self.classname, self.origin, v_up / 32, t_dir / 32, self.color, 1.0f ); addentity( self ); return PREDRAW_NEXT; #endif @@ -421,7 +427,12 @@ void Effect_BreakModel( vector vMins, vector vMaxs, vector vVel, float fStyle ) #ifdef CSQC float Effect_Decal( void ) { makevectors( self.angles ); - adddecal( self.classname, self.origin, v_up / self.size[0], v_forward / self.size[1], self.color, 1.0f ); + + float surf = getsurfacenearpoint(world, self.origin); + vector s_dir = getsurfacepointattribute(world, surf, 0, SPA_S_AXIS); + vector t_dir = getsurfacepointattribute(world, surf, 0, SPA_T_AXIS); + + adddecal( self.classname, self.origin, v_up / self.size[0], t_dir / self.size[1], self.color, 1.0f ); addentity( self ); return PREDRAW_NEXT; } diff --git a/freecs/csprogs.dat b/freecs/csprogs.dat index 6cabe2fc..3b5af5ca 100644 Binary files a/freecs/csprogs.dat and b/freecs/csprogs.dat differ diff --git a/freecs/menu.dat b/freecs/menu.dat index 6fee065b..bedbc57a 100755 Binary files a/freecs/menu.dat and b/freecs/menu.dat differ diff --git a/freecs/progs.dat b/freecs/progs.dat index 83087fe9..ab62e716 100644 Binary files a/freecs/progs.dat and b/freecs/progs.dat differ