This article was recovered from an archive and needs to be reviewed
- The formatting may be incorrect as it was automatically converted to WikiCode from HTML, it needs to be revised and reformatted
- Some information may be out of date as it was written before Half-Life was available on Steam
- After the article is re-formatted and updated for Steam HL, remove this notice
- Please do not remove the archive notice from the bottom of the article.
- Some archive articles are no longer useful, or they duplicate information from other tutorials and entity guides. In this case, delete the page after merging any relevant information into other pages. Contact an admin to delete a page.
The purpose of this tutorial is to show you how to create a whole new game type in 12 lines (the reason why this tutorial is fairly long is because it takes you through the logical route of creating the code). The game type? Vampire. The basic rules of Vampire are that when you kill someone, you receive their frags, thus creating a King of the Hill style of gameplay, but still encourages deathmatch/team deathmatch rather than chasing after one person.
You can use either SDK, with the singleplayer dlls or the multiplayer dlls, and all the changes we will be making are server side. I will be showing you how to add it to a deathmatch game, but it can easily be adapted for teamplay. You can also add and remove as much code as you like to tailor for your specific gameplay.
Open up the
multiplayer_gamerules.cpp
; this is the only file we will be editing. Find line 631 (Ctrl+G) where it should say:
// if a player dies in a deathmatch game and the killer is a client, award the killer some pointspKiller->frags += IPointsForKill( peKiller, pVictim );
Now change the line
pKiller->frags += IPointsForKill( peKiller, pVictim ); to the following code:
pKiller->frags += pVictim->pev->frags;pVictim->pev->frags = 0;
This will add the number of frags
pVictim
has to
pKiller 's frag count. It then sets
pVictim 's frag count to
0
. Now if you kill someone, you will receive their frags. However, the game can never actually start, as no-one has any frags to steal. There are two ways to sort this out, either start by giving everyone some frags, meaning that the game can still get stuck, or give
pKiller the normal amount of frags if they kill someone with no frags:
if (pVictim->pev->frags == 0){ pKiller->frags += IPointsForKill( peKiller, pVictim ); pVictim->pev->frags = 0;}else{ pKiller->frags += pVictim->pev->frags; pVictim->pev->frags = 0;}
However, if
pVictim has killed himself, and has a negative amount of frags, then
pKiller 's frags would go down. To stop this we do our final change in code:
if (pVictim->pev->frags > 0){ pKiller->frags += pVictim->pev->frags; pVictim->pev->frags = 0;}else{ pKiller->frags += IPointsForKill( peKiller, pVictim ); pVictim->pev->frags = 0;}
If
pVictim 's frags are above 0, then it will add their frags, if not then it adds the normal amount of frags.
I hope this helps you understand a little about frags (although there isn't much to learn in this code) and that creating new gametypes isn't always that hard.
This article was originally published on the
Valve Editing Resource Collective (VERC).
TWHL only archives articles from defunct websites. For more information on TWHL's archiving efforts, please visit the
TWHL Archiving Project page.