Source SDK

Source SDK

129 ratings
Setting up a single player Source Engine 2013 mod.
By Wazanator
A guide that shows you how to setup a single player mod on the Source Engine SDK 2013 branch.
 
Rate  
Favorite
Favorited
Unfavorite
Video Version of this Tutorial
Don't feel like reading or need a visual aid? Here's a video

Things you will need to download
EDIT: It would seem Steam does not like my links to Microsofts site for some reason... So if you see LINK REMOVED let me know in the comments. But all links should be in the description of the video

To start off you're going to need to download a few things:

  • The source code for 2013 off of GitHub. Link to Page[github.com] Direct Link to the Zip file[github.com]

  • Notepad++[notepad-plus-plus.org] is great for looking at text files (.cfgs, .txt, etc)

    NOTE: Default notepad has some issues when looking at files like gameinfo.txt the formatting is kind of off. It's still usable but I highly recommended notepad++ so you dont have to deal with it.

  • Microsoft Speech SDK 5.1[www.microsoft.com], just choose SpeechSDK51.exe.

  • Multibyte MFC library[www.microsoft.com] (install this AFTER visual studio 2013)

  • Source SDK base 2013 Singleplayer (Be sure you opt into the beta branch!)

  • Visual Studio 2013[www.visualstudio.com] NOTE: If you are a currently enrolled student you can get this product for free from Microsoft

    OR

    Visual Studio 2013 Community[www.visualstudio.com] if you don't want to buy the full version and are not a student. NOTE: You will have issues most likely with compiling the everything.sln later on, you can ignore that and just compile games.sln instead as it gives you the proper .dlls you need.

VISUAL STUDIO 2015 DOES NOT WORK DO NOT USE IT UNTIL VALVE UPDATES

Once you have installed both Source SDK base 2013 singleplayer and visual studio 2013 run both to make sure they launch before continuing.
Setting up the work folder
Choose a location you want for your mod source files to be. This will serve as the location that you will keep all your files both WIP and final. This includes but isn't limited to maps, models, sounds, textures, scripts, code, etc.

Once you've picked out a spot create a new folder and name it your mods name.

Move the source-sdk-2013-master.zip into this folder, right click it and choose to extract it here.

Open up the Source-sdk-2013 folder and delete the MP branch since we do not need it.

NOTE: There can't be any spaces at all in the file path, I suggest putting it at the top of one of your drives

Example: C:/modname/sp/
Setting up Microsoft Speech SDK (SAPI)
Run the SpeechSDK51.exe file you downloaded. It should unzip contents to a selected folder. One of the contents it unzips is Microsoft SDK 5.1.msi. Running this with the default settings should create a directory in C:\Program Files (x86) called Microsoft Speech SDK 5.1. Copy the Microsoft Speech SDK 5.1 directory into the src/utils directory of your mod and rename it sapi51.

Navigate to sp\src\utils\sapi51\Include and open sphelper.h in visual studio.

The following are changes you need to make to the code (hint if your line numbers are off by default read this[msdn.microsoft.com]):

Line 769
const size_t ulLenVendorPreferred = wcslen(pszVendorPreferred); // no size_t

Line 1418
static long CoMemCopyWFEX(const WAVEFORMATEX * pSrc, WAVEFORMATEX ** ppCoMemWFEX) // missing long

Line 2368
const WCHAR * PropertyStringValue() const
{
// Search for the first NULL and return pointer to the char past it.
SPDBG_ASSERT(eEventId == SPEI_PROPERTY_STRING_CHANGE);
const WCHAR * psz = (const WCHAR *)lParam; // moved this from for init
for (; *psz; psz++) {}
return psz + 1;
}

Line 2560
SPPHONEID* pphoneId = (SPPHONEID*)((WCHAR *)dsPhoneId); // improper casting

Line 2634
pphoneId += wcslen((const wchar_t *)pphoneId) + 1; // improper casting

Setting up the codebase
Navigate to source-sdk-2013\sp\src

Run both createallprojects.bat and creategameprojects.bat

Open games.sln in visual studio 2013. It shouldn't ask if you want to update files but if it does say yes. Right click on the games solution and go to properties.


Choose Configuration Properties then click Configuration Manager...


For the Active Solution configuration choose Release


Click Close, then OK.

Right click on the games solution again but this time choose "Rebuild Solution". Wait for it to compile. If you did everything correctly you should get no errors. If you get an error debug it like you normally would, if you have never really coded before this means google the error and try and figure out why it broke on your own. Yes this might mean spending thirty minutes to an hour to figure out what broke. If you can't figure it out and you have put a good amount of time into trying to do it on your own post on the forums as well as other places like stack overflow.

Click File -> Open -> Project/Solution and find the everything.sln you created earlier.

Do the same thing as above.

NOTE: If you do not plan on modifying things like vbsp, vrad, vvis, shaders and the like you do not need to bother with everything.sln
Setting up the mod folder
Go to Steam\steamapps\common\Source SDK Base 2013 Singleplayer

Copy the hl2 folder.

Paste it into Steam\steamapps\sourcemods (should be about 2.6 GB)

Rename it to your mods name (if your mods name contains spaces use underscores instead and use no capitals or special characters).

Open the folder up.

Delete the following:

  • ALL vpk files

  • Both of the vpk.sound.cache files

Make sure the following folders exist:

  • bin

  • cfg

  • maps

  • materials

  • media

  • models

  • particles

  • resource

  • scripts

  • sound



The gameinfo.txt file [IMPORTANT]
The https://developer.valvesoftware.com/wiki/Gameinfo.txt is a very important file for your mod. It's what tells the engine what to call your mod in steam, the title to use on the main menu, what kind of mod it is, and most importantly what files to mount.

First thing you need to do upon opening it up is select everything and delete it. Then copy paste this in:

"GameInfo"
{
game "Our Example Mod"
title "Our Example Mod"
type singleplayer_only

FileSystem
{
SteamAppId 243730 // Source SDK Base 2013 Singleplayer
SearchPaths
{
// No /custom/ folders because they can interfere with mod content and shouldn't be in mod gameinfo.
game+mod+mod_write+default_write_path |gameinfo_path|. // Mod
gamebin |gameinfo_path|bin // Mod's Binaries

// Base Half-Life 2 Content: ep2, episodic, hl2
game_lv |all_source_engine_paths|hl2/hl2_lv.vpk
game |all_source_engine_paths|hl2/hl2_english.vpk
game |all_source_engine_paths|hl2/hl2_pak.vpk
game |all_source_engine_paths|hl2/hl2_textures.vpk
game |all_source_engine_paths|hl2/hl2_sound_vo_english.vpk
game |all_source_engine_paths|hl2/hl2_sound_misc.vpk
game |all_source_engine_paths|hl2/hl2_misc.vpk
platform |all_source_engine_paths|platform/platform_misc.vpk

// TODO; find out what is it and why it's here
game |all_source_engine_paths|hl2
platform |all_source_engine_paths|platform
}
}

}
PasteBin link[pastebin.com]
Of course change/add things to this file as you want.

Now then if you want to mount additional content from a game like Counter-Strike: Source this is the file you do it in. Follow Valves example, in the case of CSS it would look like:

game "|all_source_engine_paths|../Counter-Strike Source/cstrike/cstrike_pak.vpk"
The bin folder
The bin folder is where your client and server .dll files will go from your compiled code

Navigate to ModSourceFolder\source-sdk-2013\sp\src\game\client\Release_mod_hl2 and copy the client.dll and paste it into the bin folder located in your steamapps\sourcmodes\modname

Same thing for server.dll
The cfg folder
The cfg folder is where you will keep all your config files for the game.

Common .cfg files found in this folder include:

  • 360controller.cfg (Button mapping for gamepads)

  • undo360Controller.cfg (undoes the gamepad settings)

  • config_default.cfg (Default button mapping for keyboard and mouse players)

  • config.cfg (Game creates this one on it's own, it stores the users current keybindings and loads them up automatically)

  • chapter#.cfg (Typically runs the map command followed by the name of the map that starts the chapter off but can be used to run other commands as well) example:
    map d1_trainstation_05

  • modsettings.cfg (Loaded by the engine on startup. If this file is not present in the mod's cfg folder, will not fallback based on search path)

  • skill.cfg (Default stats for your weapons, npcs, etc, the game assumes these are the values to be used when played on normal difficulty and adjusts them depending on what difficulty the player picks)

  • skill_manifest.cfg (executes the skill.cfg, must have for skill.cfg to work)

  • thirdperson.cfg/thirdperson_joy360.cfg/thirdperson_keypad.cfg/thirdperson_mayamode.cfg (thirdperson settings)

Here's a download of all the ones from HL2
The maps folder
Shockingly this is where you put your maps for your mod
The materials folder
This is where you put your materials. Please try and keep some consistency and order when putting materials in here.

For example I suggest having a "models" folder for where materials that models use go. Brick is where brick textures go, etc.
The models folder
Models go here, again like the materials folder try and keep them organized.

Popular organization methods:

  • General folders such as junk, boxes, pipes, skybox, etc

  • Folders for models that are used only in one level

  • Folders for non props such as npc models
The particles folder
This is where you will place your particle files
The resource folder
The resource folder is the folder that is used to contain close caption text, icons, fonts, cursors, UI and just general .res files.
The scripts folder
The folder that is used to hold the script files for things like soundscapes, weapon scripts, chapter titles, propdata, sentences, sound scripts for npcs, soundmixers, hudlayout, game sounds, ui animations, vehicles, effects and a lot more.

Take an hour and go through these so you know what it is you can change via the scripts.
The sound folder
Surprise this is where your sound files go.
You're done!
Now just restart steam and your mod name should popup in the library ready to be launched!

NOTE: If you are having trouble launching your mod be sure you are in the SDK 2013 singleplayer beta. You can join the beta by right clicking SDK 2013 singleplayer in Steam and going to properties then beta.

If you want to compare here's a finished version that would go in your sourcemods folder
< >
177 Comments
I cant find ModSourceFolder\source-sdk-2013\sp\src\game\client\Release_mod_hl2 Release_mod_hl2 is missing.
(8:41) i clicked on the .bat files and the .sln files did not show up
AAAAAAAAAAAAA Jun 12 @ 12:46am 
Thanks so much, bro. Respect.
Stan Ash Apr 7 @ 10:12am 
cfg/motd.txt' not found; not loaded
'cfg/motd_text.txt' not found; not loaded
Attemped to precache unknown particle system "WheelDust"!
Attemped to precache unknown particle system "WheelSplash"!
DataTable warning: No matching RecvTable for SendTable 'DT_FleshEffectTarget'.
DataTable warning: No matching RecvTable for SendTable 'DT_HalfLife2SurvivalProxy'.
DataTable warning: No matching RecvTable for SendTable 'DT_NPC_Puppet'.
DataTable warning: No matching RecvTable for SendTable 'DT_CPropJeepEpisodic'.
DataTable warning: No matching RecvTable for SendTable 'DT_PropScalable'.
Client missing DT class CFleshEffectTarget
Client missing DT class CHalfLife2SurvivalProxy
Client missing DT class CNPC_Puppet
Client missing DT class CPropJeepEpisodic
Client missing DT class CPropScalable
Host_EndGame: CL_ParseClassInfo_EndClasses: CreateDecoders failed.

Unless I am just being stupid, can someone please help me.
Stan Ash Apr 7 @ 10:12am 
This tutorial worked fine, but how would I edit the code? For example, to test out editing i decided to change the rocket speed of the RPG to 400, like in one of valves guides. I tried to rebuild the episodic Server in "Everything" but the server.dll file that is meant to be used for this tutorial is not changed. The file that is changed is the server in *modfolder*/sp/game/mod_episodic/bin. This file doesnt work with my mod when I try to load a map, I get this message:
EvilGoat Mar 5 @ 1:05am 
@Wazanator I can't spot a single difference, I'll download your version and see if it works
Wazanator  [author] Feb 28 @ 2:12pm 
Shouldn't be an issue, Source SDK Base 2013 is free for everyone. As long as the mod is located in the sourcemods folder it should show up. In the "You're done" section I have a link to download an example, compare yours to that and see if there's anything wrong.
EvilGoat Feb 28 @ 12:27pm 
@Wazanator yeas, I have, I've tried running it as an administrator etc. Coud it be a problem that I have HL2 in family sharing mode?
Wazanator  [author] Feb 28 @ 11:20am 
@EvilGoat did you restart Steam?
EvilGoat Feb 28 @ 9:22am 
Great tutorial, although I can't see my mod in the steam library. I modified the "game" and "title" in the gameinfo.txt you provided but I can't get it to show up.