Co-Operative Base (Mod)

From Valve Developer Community
Revision as of 10:25, 21 September 2013 by Whoozzem (talk | contribs) (Installation.)

Jump to: navigation, search

Description

Note: -The dynamic and static mounting code may no longer work in this the Source SDK 2007 version due to the change of gcf to vpk (steampipe) updates.-

Seco7 Co-Operative Base is a patch file containing useful code fixes for the Source Engine 2007 Half-Life 2 Multiplayer code base. Please see the Features list for more details.

Note: -Please be aware that no support is given with this modification. Occasionally I check the steam forums and reply to threads I see as I can, but in most cases you are on your own - this is why this wiki page has been so heavily detailed-


If you release a modification which uses seco7 or code from it, please remember to add those listed in the Credits section of this page to your own credits.


There are some minimum requirements, which are as follows:

  • Half-Life 2 or Half-Life 2: Episode 1.
  • Source SDK Base 2007 (free download).
  • Half-Life 2: Deathmatch, which can be found at one of the three following locations:

http://store.steampowered.com/app/320/ (Everyone else).


Aditional games you may like to use as well.

  • Half-Life 2: Episode 2
  • Portal

Untested (but should work):

  • Half-Life 2: Lost Coast
  • Counter-Strike Source
  • Content from Valve supported Modifications which must have their own unique AppID and use gcf (not vpk) files.


It is possible to base a modification solely on Half-Life 2: Episode 2, along with the Base and HL2DM, however you won't have as much content at your disposal as you would have if you had used Half-Life 2/Episode 1.


Before launching the compiled version of seco7 you should launch all the games you intend on using with it, this prevents a startup crash which happens for some people the first time they launch the modification.


In addition to this, to actually modify the code itself, you will need the Source SDK installed, and Visual Studio 2008 or 2010 (including express editions). Seco7 comes with Visual Studio 2010 project and solution files.


To keep this wiki page easily viewed, many items are now implemented into scroll boxes, so that the more important aspects of the page can be kept whole.

Installation.

If you have already started on a modification for HL2MP, it is easier to follow the below instructions, and then merge your code into the newly made seco7 source code than the other way round (which would only work using the diff method as the patch.exe will refuse to patch modified code). The easy way is to compare your code against a newly exported hl2mp source code, and use a program such as winmerge to see your changes, unless like me you ifdef everything which while considered bad coding form by some coders sure makes it easy to find your code again amongst all the official code.


Firstly make sure that you have the both the Source SDK and the minimum required games installed.

Now launch the Source SDK, and making sure the Engine Version drop-down menu is set to Source 2007, create a new Half-Life 2 Multiplayer modification.

Once that is done, it's time to get the Seco7 release, which requires 7zip to extract.

Download Seco7 from ModDB's download section:

ModDB

or from the alternative mirror:

[dl.dropbox.com/u/20458145/2011_07_31_Seco7.1.7z Another mirror]

Open up the archive, you will find that it should contain the following:

  • A folder called seco-7
  • A file called Seco7Patch.exe
  • A file called Seco7.diff
  • A file called Game_HL2MP-2010.sln
  • A file called client_hl2mp-2005.vcxproj
  • A file called client_hl2mp-2005.vcxproj.user
  • A file called server_hl2mp-2005.vcxproj
  • A file called server_hl2mp-2005.vcxproj.user
  • A folder called seco7_prefabs
  • A ReadMe.txt file

As long as the Source Engine 2007 remains unmodified in sdk updates, the easiest method of converting your code is by using the Seco7Patch.exe.

If ever the code changes, this patch will fail to run - as such if you find that this is the case, you will be required to follow the .diff patching section at the very end of this wiki page.


To install Seco7 using the patch, extract the patch.exe file from the .7z file to somewhere handy (such as your Desktop).

Now, go into your modifications source code folder, Src>materialsystem>stdshaders and move the file 'stdshader_dx9-2005.vcproj' onto the desktop - if you fail to do this the patcher will not work.


Once that is done you can proceed with the following instructions.

Run the patch tool, at the point of folder selection make sure to select the 'Src' folder of your exported modifications source code.

Once it's done - you've patched your source code, and can now move the 'stdshader_dx9-2005.vcproj' file back to its original location.


Setting up the compiled game folder.

Now that you have your source code patched one way or an other, navigate to your Steam folder, and then into steamapps>sourcemods.

Delete your modification folder from this directory.

Now copy accross the 'seco-7' folder from out of the downloaded seco7 archive, and once copied rename it to that of the modification folder which you just deleted.

At this point, you could if you wished to, launch or restart Steam, and then launch seco-7 from the games list.


Setting up the Project files.

Also extract client_hl2mp-2005.vcxproj and client_hl2mp-2005.vcxproj.user to the Src>Game>Client folder.

And finally extract server_hl2mp-2005.vcxproj and server_hl2mp-2005.vcxproj.user to the Src>Game>Server folder.

Now, in your favourite text editor, open the four client and server .vcxproj/.user files, and find and replace all references to:

c:\program files (x86)\steam\steamapps\SourceMods\seco-7\bin\

with the location of your own modifications bin folder, and also change the other paths and YOUR-USER-NAME to reflect your steam username and the correct paths to the location of your files/folders.

Setting up the Source Code.

Finally, so that the game will launch correctly after compiling, we need to tell the mounting and map code the name of the modification.

While this can be done by now launching the .sln file in Visual Studio 2010, I personally prefer to do it in a text editor, but the choice is up to you.

Which ever method of editing you choose, open up Src>Game>Client> cdll_client_int.cpp and use Find/Replace to change all occurences of:

SourceMods/seco-7

into

SourceMods/the_name_of_your_modification

Save and close the file, and now open up Src>Game>Server> gameinterface.cpp and once again use Find/Replace to change all occurences of:

SourceMods/seco-7

into

SourceMods/the_name_of_your_modification


Lastly, if you do not like using the 'seco7_' prefix for your modifications maps, you will need to change this in the gameinterface.cpp file.

Once again, using Find/Replace, change all occurences of:

ToCStr(), "seco7_

into

ToCStr(), "MapPrefix_


Note however that this will cause the seco7_ maps to run in fail-safe mounting mode, along with any other maps which do not have a recognised map prefix, fail-safe mounting was added to prevent unknown maps from crashing the game.


Now that you have made these changes, you can compile the source code in Visual Studio, while there are errors claiming that the compiler doesn't copy accross the .dll files, I have found it actually does. Though if on launching your game you get a 'Client' error, it means the .dlls are not in the bin folder.

Also, if you get any crashes related to missing 'Error.mdl' then the mounting lines in gameinterface.cpp and cdll_client_int.cpp will need to be checked through, as this means the mounting code was unable to find your modifications content.


Adding and Removing Game Features

Seco7 was designed so that you can easily disable and enable its features, so that you can customise it in whatever which way you want it.

As such all features are stored with a file in the Src>Game>Shared>Seco folder, called seco7_shareddefs.h

On opening this file you will find every feature clearly defined, and information concerning what each feature does.

To enable a feature, remove the // from the beginning of the word define, to disable a feature add the // in front of its define.

Besides the important role of this file, it also has an information section containing valuable search words, which to get a better grasp of the seco7 code, and how features work - I do reccomend you searching for (eg. //4WH - Information:) in all .cpp and .h files to gain a full understanding of work arounds, bug fixes and - how things work in general.

The file has one last important role, and that is that by defining all changes, this makes searching for all references to a specific feature in the entire codebase very easy. An example would be if you wished to find in which files all the NightVision code was, all you would need to do would be to search all .cpp and .h files for 'Seco7_ENABLE_NIGHTVISION_FOR_HEAVY_CLASS'.

If you'd like to try out nightvision in game, it is binded to the 'N' key. And as you may have gathered from the line above, it is solely enabled for the heavy class.

This has one other benefit, should you wish to start afresh on the hl2mp code, and decide not to use Seco7, you can still search the code and remove the bits that you'd still like to use fairly easily for implementing into your new non-seco7 modification.

Setting up the Hammer Map Editor

Seco7 has a few custom entities that mappers can use, should they wish to.

So that you can use these in your own Hammer editor, you'll need to edit and add a few files (as will any other mappers on your modifications team).

Locate the ..\Steam\steamapps\UserName\sourcesdk\bin\source2007\bin GameConfig.txt file

And add the following to it, edit as appropriate with your modifications name and steam user name.

"Configs"
{
	"Games"
	{
		"Seco7"
		{
			"GameDir"		"..\steam\steamapps\SourceMods\seco-7"
			"hammer"
			{
				"TextureFormat"		"5"
				"MapFormat"		"4"
				"DefaultTextureScale"		"0.250000"
				"DefaultLightmapScale"		"16"
				"DefaultSolidEntity"		"func_detail"
				"GameExeDir"		"..\steam\steamapps\UserName\half-life 2"
				"MapDir"		"..\steam\steamapps\SourceMods\sourcesdk_content\seco-7\mapsrc"
				"CordonTexture"		"tools\toolsskybox"
				"MaterialExcludeCount"		"0"
				"GameExe"		"..\steam\steamapps\Your_UserName\half-life 2\hl2.exe"
				"BSP"		"..\steam\steamapps\UserName\sourcesdk\bin\source2007\bin\vbsp.exe"
				"Vis"		"..\steam\steamapps\UserName\sourcesdk\bin\source2007\bin\vvis.exe"
				"Light"		"..\steam\steamapps\UserName\sourcesdk\bin\source2007\bin\vrad.exe"
				"BSPDir"		"..\steam\steamapps\SourceMods\seco-7\maps"
				"GameData0"		"..\steam\steamapps\UserName\sourcesdk\bin\source2007\bin\seco7.fgd"
			}
		}
	}
	"SDKVersion"		"3"
}

Next, you'll want to create a blank/empty file called modname.fgd (eg. seco7.fgd) using a text editor, and place it in the ..\steam\steamapps\UserName\sourcesdk\bin\source2007\bin\ folder, and add in the following to it

//-------------------------------------------------------------------------
//
// Game data for Seco7.
//
//-------------------------------------------------------------------------

@include "base.fgd"
@include "halflife2.fgd"
@include "hl2mp.fgd"
@include "portal.fgd"

@PointClass base(PlayerClass, Angles) studio("models/editor/playerstart.mdl") = info_player_assaulter :
	"This entity indicates the position and facing direction at which the player will spawn during a player classes map. Any number of "+
	"info_player_assaulter entities may be placed in a map."
[
]

@PointClass base(PlayerClass, Angles) studio("models/editor/playerstart.mdl") = info_player_supporter :
	"This entity indicates the position and facing direction at which the player will spawn during a player classes map. Any number of "+
	"info_player_supporter entities may be placed in a map."
[
]


@PointClass base(PlayerClass, Angles) studio("models/editor/playerstart.mdl") = info_player_medic :
	"This entity indicates the position and facing direction at which the player will spawn during a player classes map. Any number of "+
	"info_player_medic entities may be placed in a map."
[
]

@PointClass base(PlayerClass, Angles) studio("models/editor/playerstart.mdl") = info_player_heavy :
	"This entity indicates the position and facing direction at which the player will spawn during a player classes map. Any number of "+
	"info_player_heavy entities may be placed in a map."
[
]

@PointClass base(Targetname, Angles) studio( "models/combine_turrets/floor_turret.mdl" ) = npc_turret_floor : "Combine Floor Turret"
[
		spawnflags(Flags) = 
	[
		32 : "Autostart" : 0
		64 : "Start Inactive" : 0
		128 : "Fast Retire" : 0
		256 : "Out of Ammo" : 0
		512 : "Citizen modified (Friendly)" : 0
		1024 : "Portal Turret" : 0
	]

	SkinNumber(integer) : "Skin Number" : 0 : "Which skin to use for this turret. Set to 0 to select randomly."

	// Inputs
	input Toggle(void) : "Toggle - If open, close. If closed, open."
	input Enable(void) : "Enable the turret."
	input Disable(void) : "Disable the turret."
	input DepleteAmmo(void) : "Depletes all the ammo from a turret, causing it to dry-fire."
	input RestoreAmmo(void) : "Restores ammo to a turret, allowing it to fire live rounds again."
	input SelfDestruct(void) : "Causes the turret to warn and then explode."

	// Outputs
	output OnDeploy(void) : "Turret is becoming active and dangerous."
	output OnRetire(void) : "Turret is becoming inactive and harmless."
	output OnTipped(void) : "Turret has been tipped over and is inactive."
	output OnPhysGunPickup(void) : "Picked up with physgun"
	output OnPhysGunDrop(void) : "Released by physgun"
]

//-------------------------------------------------------------------------
//
// Vehicles.
//
//-------------------------------------------------------------------------
@BaseClass base(Targetname, Origin, Global, prop_static_base) = BaseVehicle
[
	vehiclescript(string) : "Vehicle Script File" : "scripts/vehicles/jeep_test.txt"
	actionScale(float) : "Scale of action input / framerate" : "1"

	// Inputs
	input Action(float) : "Set the speed of the action animation"

	input TurnOn(void) : "Turn on: Start engine & enable throttle"
	input TurnOff(void) : "Turn off: Stop engine, disable throttle, engage brakes."

	input Lock(void) : "Prevent the player from entering or exiting the vehicle."
	input Unlock(void) : "Re-allow the player to enter or exit the vehicle."
]


@BaseClass base(BaseVehicle) = BaseDriveableVehicle
[
	VehicleLocked(choices) : "Start locked" : 0 =
	[
		0 : "No"
		1 : "Yes"
	]	

	// Outputs
	output PlayerOn(void) : "Player entered the vehicle"
	output PlayerOff(void) : "Player exited the vehicle"
	
	output PressedAttack(void) : "Player Pressed attack key"
	output PressedAttack2(void) : "Player Pressed attack2 key"

	output AttackAxis(string) : "State of attack button [0,1]"
	output Attack2Axis(string) : "State of attack2 button [0,1]"
	
	// Inputs
	input HandBrakeOn(void) : "Turns the handbrake on"
	input HandBrakeOff(void): "Releases the handbrake"
]

@PointClass base(BaseVehicle) studioprop() = prop_vehicle :
	"Studiomodel vehicle that can be driven via inputs."
[
	// Inputs
	input Steer(float) : "Steer the vehicle +/-1"
	input Throttle(float) : "Throttle +/-1"

	spawnflags(flags) =
	[
		1 : "Always Think (Run physics every frame)" : 0
	]
]


@PointClass base(BaseDriveableVehicle) studioprop() = prop_vehicle_driveable :
	"Generic driveable studiomodel vehicle."
[
]
@PointClass base(BaseDriveableVehicle) studioprop() = prop_vehicle_jeep : "Driveable studiomodel jeep."
[
]
@PointClass base(BaseDriveableVehicle) studioprop() = prop_vehicle_hl2buggy : "Jeep for episode 2 mods."
[
model(studio) : "World model" : "models/buggy.mdl"
vehiclescript(string) : "Vehicle Script File" : "scripts/vehicles/jeep_test.txt"
]
@PointClass base(BaseDriveableVehicle) studioprop() = prop_vehicle_jalopy : "Jeep for episode 2 mods."
[
model(studio) : "World model" : "models/vehicle.mdl"
vehiclescript(string) : "Vehicle Script File" : "scripts/vehicles/jalopy.txt"
]

@PointClass base(BaseDriveableVehicle, Parentname) studioprop() = prop_vehicle_passengerseat :
	"Our method of multiplayer passenger vehicles."
[
model(studio) : "World model" : "models/ss_passenger_cube.mdl"

	vehiclescript(string) : "Vehicle Script File" : "scripts/vehicles/prisoner_pod.txt"
	
	input Open(void) : "Plays the pod's open animation and unlocks the pod for entry or exit."
	input Close(void) : "Plays the pod's close animation and locks the pod for entry or exit."
	input EnterVehicle(void) : "Forces the activator (or player) into the pod."
	input EnterVehicleImmediate(void) : "Forces the activator (or player) into the pod without enter/exit animations."
	input ExitVehicle(void) : "Boots the prisoner out of the pod."
	
	output OnOpen(void) : "Fired when the pod is open enough to enter."
	output OnClose(void) : "Fired when the pod too closed to enter."
]

//----------------------------------//
//							   	    //
// 		Switch Model Targets	    //
//  Sets all players to set model   //
//									//
//----------------------------------//
@PointClass base(Targetname, Angles, EnableDisable) iconsprite("sprites/icons/switchmodel.vmt") = info_switchmodel : "Seco7 Co-Operative Set Model"
[
]

//-------------------------------------------------------------------------
//
// Solid Classes
//
//-------------------------------------------------------------------------

@SolidClass = func_ladder : 
	"Ladder. Players will be able to freely along this brush, as if it was a ladder. If you are using a model prop " +
	"for the visual representation of the ladder in the map, apply the toolsinvisibleladder material to the " +
	"func_ladder brush."
[
]

Now launch the Source SDK, and choose:


Engine Version: Source Engine 2007 Current Game: Seco-7 (or the name of your modification)

Now launch Hammer. Then go to:

Tools>Options> and where it says "Game Data Files" click the Add button.

Now navigate to this folder, and select seco7.fgd, you may also wish to change the "Default PointEntity Class" to something more useful than ai_speechfilter, once you're finished - click OK in Hammer, and the job is done.

If you are going to be using the stock vehicles and the seco7 passenger seat, you will find the prefabs folder a useful addition to your hammer editor. So copy the folder to your: ..\steamapps\UserName\sourcesdk\bin\Source2007\bin\prefabs folder.

If you plan on making any portal themes maps, I suggest setting the Source SDK to Source Engine 2009/Portal and working backwards and forwards between it and your modifications own Source Engine 2007 setting.

Important Map Settings.

If you are using the player class system, then there are a few changes you will have to make to the map so that it doesn't crash on trying to spawn the player.

Make a hollow room/cube large enough to fit several players in outside of the main map area, and texture it in a purely black colour. Add in some standard player starts into it, and then put the real (per-class) player starts where you want them inside the playable space of the map.

This will now mean your game won't crash on your player trying to spawn, usually you can get away with just one standard player start and a room large enough for one person as people will spawn inside one another till they pick their class and spawn at their correct class location, but for safety it may be best to make it a large cube with several player starts as stated above.


Also, there is a custom actor you can allow mappers to use called setmodel, this if placed in a game will allow players to set the model for all players, you can see how this works by opening the defector example map. In this maps case it spawns all players as metrocops.


Important Settings Files.

These are all used in the compiled folder of your modification.


GameInfo.txt

GameInfo.txt is also where you define such things as your developers team name, website and the icon to display in Steam, as well as the game's title.

The most important section are the 'Search Paths'.

Search paths are the modifications way of mounting the GCFs which come with each Half-Life 2 game. In the current compiled version the search paths in our gameinfo.txt looks like this:

Notice how we do not have Portal in the search paths. This is because Portal should never be defined here (Unless you use Static Mounting, in which case it should be put BELOW hl2).

InstalledSourceGames.txt

Additional code in cdll_client_init.cpp and gameinterface.cpp has added the ability to mount additional GCF files. This is always enabled whether you are using Static or Dynamic content mounting.

The InstalledSourceGames.txt file (previously AddMount.txt in older mod versions) helps the game find models, textures and maps that it wouldn't otherwise do through the gameinfo.txt's searchpaths. The gameinfo.txt searchpaths allow mounting sounds and particles which the AddMount.txt fails to do.

Only games listed within the text file will be displayed, and as such in most cases you will either wish to delete the code from the .cpp files, or blank out the contents of the file.

Notice the order partially mimics the GameInfo.txt search paths, except that we put Half-life 2: Deathmatch at the top and we ALWAYS - if being used - put Portal as the LAST thing (bottom of) the file.

resource/seco7_english.txt

This is the modification's language definition file. Here you can find settings such as the titles for Chapters, the messages displayed on a vital ally being killed (for example) and other things such as server connection messages etc. It's found in the resource folder. You should name this file to that of your own modifications title, (modification_english.txt).

cfg/skill.cfg

The skill.cfg file is important as it allows you to define such things as NPC health, NPC damage (to others such as the player), number of rockets a Strider may withstand and even how much charge a Vortigaunt can give to the players suit. It is worth reading through the file and editing it to suit your needs as it does define a lot of features of modifications. It can be found in the cfg folder.

scripts/ChapterBackgrounds.txt

This file defines which of your modifications maps are background maps to display on the main menu. If you choose to use background maps with your modification, be sure to enable the seco7_BG_MOTD_FIX definition in the seco7_shareddefs.h so as not to display the motd on the main menu.

cfg/valve.rc

This file defines whether background maps are displayed on the main menu. It's found in the cfg folder.

resource/ClientScheme.res

This is the HUD colour file. Seperate versions can be used per player class as needed (the code is implemented). Currently all classes are set to use the same file.

maps/map_briefings

This is a folder inside the maps folder. Each map that requires a briefing has a text file for that specific map. This loads in a similar fashion to the MOTD panel. It allows a quick map storyline for people loading the map. See our example maps in-game to see this concept in action.


Dedicated Server Guide

Quite often when you test something it will work fine for you on your own server, but not for any other clients.

The solution is to setup a dedicated server, which makes you a client instead of a server player and use that for testing your edits by yourself until they work as expected.

Here is a guide to show you how to setup a Seco7 dedicated server, note of course that this works if you are actually wishing to create a properly hosted modification server for players to play on. 

Download the following:

http://www.steampowered.com/download/hldsupdatetool.exe

Install it to C:\srcds

now use a command prompt and do:

c:
cd c:\srcds
hldsupdatetool

Once its finished updating itself (cusror blinks) ctrl+c out of it, and then type:

hldsupdaterool -command update -game orangebox -dir c:\srcds

Once this is done (can be quite a while depending on your connection) you need to copy the hl2 folder from C:\srcds into C:\srcds\orangebox (overwriting the one already there).

Now depending, you will need to extract files from the gcf so the dedicated server can find them due to its inability (sadly) to mount GCF files.

//====================================================================//

MINIMUM REQUIREMENTS.
-------------------------------------
-half life 2 content.gcf- //NOTE: ONLY REQUIRED IF YOU WANT TO BE ABLE TO LOAD OFFICIAL VALVE MAPS ! ! !

Extract the "maps" folder into your dedicated servers orangebox hl2 folder.

-source 2007 binaries.gcf-

Extract the "hl2" folder into your dedicated servers orangebox folder.

-source 2007 shared materials.gcf-

Extract the "hl2" folder into your dedicated servers orangebox folder.

-source 2007 shared models.gcf-

Extract the "hl2" folder into your dedicated servers orangebox folder.

-source 2007 shared sounds.gcf-

Extract the "hl2" folder into your dedicated servers orangebox folder.

-half life 2 deathmatch.gcf-

Extract the "hl2mp" folder into your dedicated servers orangebox folder.

EPISODE 1 REQUIREMENTS.
---------------------------------------

-episode 1 shared.gcf-

Extract the "episodic" folder into your dedicated servers orangebox folder.

-half life 2 episode 1.gcf- //NOTE: ONLY REQUIRED IF YOU WANT TO BE ABLE TO LOAD OFFICIAL VALVE MAPS ! ! !

Extract the "maps" folder (found in episodic) into your dedicated servers orangebox episodic folder.

EPISODE 2 REQUIREMENTS.
---------------------------------------

-episodic 2007 shared.gcf-

Extract the "episodic" folder into your dedicated servers orangebox folder.

-episode two content.gcf-

Extract the "ep2" folder into your dedicated servers orangebox folder.

-episode two maps.gcf- //NOTE: ONLY REQUIRED IF YOU WANT TO BE ABLE TO LOAD OFFICIAL VALVE MAPS ! ! !

Extract the "ep2" folder into your dedicated servers orangebox folder.

-episode two materials.gcf-

Extract the "ep2" folder into your dedicated servers orangebox folder.

PORTAL REQUIREMENTS.
---------------------------------------

-portal content.gcf-

Extract the "portal" folder to your dedicated servers orangebox folder.

-portal english.gcf-

Extract the "portal" folder to your dedicated servers orangebox folder.

//NOTE: IF YOU DONT WANT TO BE ABLE TO LOAD OFFICIAL VALVE MAPS, DELETE THE PORTAL>MAPS FOLDER ! ! !

//====================================================================//

Once that is done, copy Seco7/Your modification to:

c:\srcds\orangebox

Now you're ready to try hosting a server, create the batchfile (seco7_server.bat) to launch your server:


C:\srcds\orangebox\srcds.exe -console -game Seco7 Co-Operative -port 27015 +map d2_coast_01


If you wish to edit your server.cfg file, it is in the cfg folder.

If you want such things as map voting for your clients, I suggest you take a look at:

http://www.sourcemm.net/

-and-

http://forums.counter-strike.com/mani-admin-plugin/8632-installing-manimod-srcds.html

Features

Developers can easily enable and disable individual features to suit their needs.

This is a cut down list, for full information as to the features please see the seco7_shareddefs.h file).

** Portal Gun, enable testing in the seco7 shared defs file to enable its useage. give weapon_portalgun and companioncube.
** Super Gravity Gun (some graphic effects missing - most of the code done by .Kave).
** Restart level on critical ally/object/time limit failing.
** View Cameras now take control of all players on a server (Gordon's KO Wakeup scene, etc).
** Save/Restore transitions now work even if you disable playerclasses from the code.
** Each player class player now has their own unique filter name, meaning only a certain playerclass
 can trigger an event (for example). Thanks Alters for the fix!
** Called it a day on development. It's all in the hands of the community now.


* AI Patch Modifications:
** Enable/Disable an enhanced version of Winston's AI Multiplayer patch.
** Valve Game Mounting:
** Dynamically mount various official Valve games to get the most for your mod.
** or use Static Mounts when you're sure you don't need Dynamic mounting.		  


* Episode 2 Support:
** Including support for Alyx Darkness Mode 


* Player Abilities:
** Non-HEV wearers can still be allowed to sprint, have the geiger counter, etc. This is on a
 per-item basis, so players could have the geiger, but no sprint if you wanted.
** Players can pick up objects with their hands.  
** NightVision (currently only enabled for the Heavy class, use the 'N' key to enable it).


* Player Class System With:
** Four (or more, or less) Player Classes.
** Per Player Class Object Pickup Strengths.
** Customise Class Health/Maximum Health Values.
** Customise Class Armour/Maximum Armour Values.
** Customise Class Walk/Sprint/Normal movement speeds.
** Customise Class Jump Heights.
** Each Class Can Have Its Own HUD Layout/Colour scheme.
** Define how many players can be in each Player Class. 


* Teamplay Support:
** Fixes for enemy NPCs and teamplay games.


* Weapon Enhancements:
** Development teams can now enable Iron Sight.
** A known HL2DM shotgun fast-switch bug - fixed thanks to Community input!.


* NPC Abilities:
** Striders can be set to always impale players who get too close.
** Barnacles can now be set to swallow players.


* Vehicles:
** The multiplayer camera judder is no more!
** Thirdperson model in-vehicle animations can now be used.
** Old-Style passenger seats can now be used to provide extra seats in vehicles.
** Jeeps and Jalopys' can now have their headlights switched on.


* Cool Stuff:
** Firstperson ragdoll views on player deaths.
** Camera bob on player movement (incl. strafe).
** Use Counter-Strike: Sources' ladders code instead of the Half-Life 2 ladders.


* Game Settings:
** Friendly Fire (Replaces players can collide from v1.5).
** Dynamic Respawn Code. Don't spawn back at the start of the map anymore, respawn back 
where you left off in your killing spree.
** Multiplayer Level Transitions. On ALL players entering the transition area the server 
is forced to changelevel to the next map (percentage can be changed).
** Save/Restore. A basic working transition system which saves/restores your loadouts.
** Valve approved cheating. Now even if sv_cheats 1 is enabled, players can't cheat unless 
you define it as acceptable in the code.
** Map briefings. Provide storylines on a per-map basis.
** Map specific model overrides. Changes all players to a specified player model on a 
particular map (set by the mapper). Check out our defector map for an in-game example!

Credits

4-Wheeled Husky Games.

* And thanks to the following non-development team members:
** Winston
** Tony Sergi
** Biohazard_90
** Sub-Zero
** DutchMega
** The Last 7 Hours Spanish Mod
** Skidz
** Alters
** .Kave
** KuRouZu
** Jorg
** z33ky
** JordanN
** TheRJMan
** SilverPower
** Vektorx4
** HalfWit2
** Sneaky[ToB]
** Anyone else forgotten

Known Bugs

*Armour not working on non-playerclass save/restore transitions.

*Weapon strip/dissolve zones (as used to make the Super Gravity Gun in HL2/EP1) don't work.

The above is Caused by the game not recognizing the hl2mp gravity gun and just deleting it,
then the test zone (d3_citadel_03) sticks waiting on the script to finish.

*Super Gravity Gun - Some particle effects are missing, but the gun itself works as in singleplayer.

*Leaving tilted vehicles causes players to appear tilted as well. This affects only their player
 model, their actual views are normal.

*Blood splashes being emitted when shooting other players despite no damage actually being dealt
 (only applicable when "seco7_FRIENDLY_FIRE_ENABLED" is disabled).

*Chat bubbles angle towards the player's view, so they can appear embedded in walls etc.
*AI bend their legs when going up in lifts (elevators), but are fine going down.

Bug Fixes.

  • Post bug fixes here, whether for those bugs known above, or new bugs you may have found and know the fix for.


Patching with the .diff file.

 
To actually patch the code into the HL2MP source code, you'll need Tortoise SVN. You can download it here:

http://tortoisesvn.tigris.org/


Once installed, Create a folder called:


repository


on your desktop.


Right click this, and go to TortoiseSVN > Create Repository Here.


Now right click on the "Src" folder of the source code.


Choose SVN checkout, set the "URL of repository" to:


file:///C:/Users/YOUR-USER-NAME/Desktop/repository


*if you're an XP user, replace "Users" with "Documents and Settings".


And remove the word repository, from the end of the "Checkout Directory".

So that (for example) it reads:


C:\Users\YOUR-USER-NAME\Desktop\sourcesdk\Src


Then click OK. It will tell you the target folder is not empty! just click Yes.


It will then display a prompt saying "Completed At revision 0".


Click OK.


Now right click your Src folder, and choose "SVN Commit"


After the list is populated, check "select/deselect all" so that all items are checked.


Now click OK.


Eventually it'll progress through the list. If it fails to work, or does some and not all
- then you have an anti-spyware, firewall or antivirus blocking the commit, 
which you'll have to temporarily disable.


Once the commit is done, OK it, then right click the game folder, and choose:


TortoiseSVN>Apply Patch


Choose the patch file and then tell it to patch all by right clicking in the little left hand menu files list.


And that'll be you patched.


If you wish, you may now remove SVNs references from the files, to do this turn on
 Show Hidden Files, Folders and Drives in your Windows Explorer Folder options.


Within each folder and sub-folder under the source codes game folder, you will now
 find a directory called .svn, delete it. Remember it includes sub-folders, so it
 isn't just the .svn folders in client/server you'll need to remove, also the
 likes of client>episodic>.svn.


You can also delete your desktops "repository" folder after doing this,
 as unless you want subversion control you're finished with the folder.


If however you do want subversion control in use, I reccomend you
 check out the following wiki article:

 http://developer.valvesoftware.com/wiki/Setting_up_Tortoise_SVN_to_apply_a_Patch


Now go to your source code directory, and in the Src folder delete Game_HL2MP-2005.sln

Now go into the Src>Game>Client folder and delete client_hl2mp-2005.vcproj.

Now go into the Src>Game>Server folder and delete server_hl2mp-2005.vcproj.

From the downloaded seco7 archive, extract Game_HL2MP-2010.sln to the Src folder.