Hosting and domain costs until October 2024 have been generously sponsored by dumptruck_ds. Thank you!

Difference between revisions of "Getting Started Modding"

From Quake Wiki

Line 7: Line 7:
  
 
'''QuakeC sources'''
 
'''QuakeC sources'''
Now choose a quakec code base to work from. A good recommendation is shpuld's cleaned up vanilla qc based on Quake's v1.01 QuakeC with fixes from 1.06. It is properly licensed under the GPL. Choose your poison:<be>
+
Now choose a quakec code base to work from. A good recommendation is shpuld's cleaned up vanilla qc based on Quake's v1.01 QuakeC with fixes from 1.06, but also fixes the monster fish bugs. It is properly licensed under the GPL. The same goes for Jason's qc, but you can read up on everything on their respective GitHub. Choose your poison:<br>
  
Shpuld's cleaned vanilla qc src: [https://github.com/shpuld/id1-quakec-cleaned/archive/refs/heads/master.zip shpuldqc]<br>
+
[https://github.com/shpuld/id1-quakec-cleaned Shpuld's] cleaned vanilla 1.01 qc src: [https://github.com/shpuld/id1-quakec-cleaned/archive/refs/heads/master.zip shpuldqc]<br>
Jason2Brownlees fixed up 1.01 src: [https://github.com/Jason2Brownlee/CleanFixedQuakeC/archive/refs/heads/main.zip CleanFixedQuakeC]<br>
+
[https://github.com/Jason2Brownlee/CleanFixedQuakeC Jason2Brownlees] fixed up 1.01 src: [https://github.com/Jason2Brownlee/CleanFixedQuakeC/archive/refs/heads/main.zip CleanFixedQuakeC]<br>
 
LH's Quake 1.06 qc source: [http://icculus.org/twilight/darkplaces/files/id1qc.zip id1qc]<br>
 
LH's Quake 1.06 qc source: [http://icculus.org/twilight/darkplaces/files/id1qc.zip id1qc]<br>
 
LH's Quake 1.06 qc Multiplayer only: [http://icculus.org/twilight/darkplaces/files/mponlyqc.zip mponlyqc]<br>
 
LH's Quake 1.06 qc Multiplayer only: [http://icculus.org/twilight/darkplaces/files/mponlyqc.zip mponlyqc]<br>

Revision as of 20:18, 18 April 2022

This is intended as a basic, nonspecific engine guide to getting the resources needed to start making a quake mod, some suggestions on first mods to make to learn the language and nature of Quake modding, and links to discords, forums, websites, older IRC channels, and other resources relevant to Quake modding.

Making your mod directory:
The first step is to make a directory inside your quake directory, for instance, mymod (you can rename it later), all files inside this directory will be loaded at a higher priority than the ones in the id1 directory, but files you did not replace will come from the id1 directory. In this wiki it's common for people to refer to your mod directory as mymod, do not take this literally, it simply means whatever you named your mod directory, and most filenames mentioned in Quake modding discussion are inside a mod directory.

Then make a /quake/mymod/src directory to hold the QuakeC code you will be working on, you can name this directory whatever you want.

QuakeC sources Now choose a quakec code base to work from. A good recommendation is shpuld's cleaned up vanilla qc based on Quake's v1.01 QuakeC with fixes from 1.06, but also fixes the monster fish bugs. It is properly licensed under the GPL. The same goes for Jason's qc, but you can read up on everything on their respective GitHub. Choose your poison:

Shpuld's cleaned vanilla 1.01 qc src: shpuldqc
Jason2Brownlees fixed up 1.01 src: CleanFixedQuakeC
LH's Quake 1.06 qc source: id1qc
LH's Quake 1.06 qc Multiplayer only: mponlyqc
Hipnotic mission pack 1 src: hipqc
Rogue mission pack 2 src: doeqc

QuakeC Compilers
FTEQCC compiler can be found here in commandline and Windows-GUI flavors: http://sourceforge.net/project/showfiles.php?group_id=116842

An important note on pak archives in the various Quake engines:
Quake behavior: paks override files (meaning if the pak contains a default.cfg, the user can not make their own default.cfg as it will be ignored), sequentially numbered packs named pak0.pak, then pak1.pak, and so on (if there is a gap it stops looking for higher numbered paks, so pak2.pak will not be loaded if pak1.pak or pak0.pak is missing), a limit of 7 open pak archives (this counts both id1 and your mod, so be careful not to have too many pak archives). DarkPlaces behavior: files override pk3 archives which override pak archives, anything with a .pak or .pk3 extension is loaded (.pk3 is a renamed zip archive and is smaller because it is compressed), no limit on number of paks. Most other engines use the Quake behavior.

A note about stealing content from other games: First of all, please don't, it's better to see some originality in the art in Quake mods. Secondly, you can be sued for Copyright Infringement if you do this, as the owner of the copyright controls the distribution terms (formally known as the License Agreement), and these other games usually don't have License Agreements that allow use in other games. If you must borrow content, it is best to borrow it from legitimate sources such as Nexuiz http://www.nexuiz.com or OpenQuartz http://openquartz.sourceforge.net/ which use the GPL license which allows redistribution and modification under the terms of the GPL. You may also ask other mod teams if you can get a license agreement for use of some of their files that are not under GPL, chances are good that they will say yes (remember however that yes is not enough, you need to include a license agreement regarding their copyrighted works).

Recommended forums: www.insideqc.com/

Discords: Quake Mapping https://discord.gg/CebEH2drs5

OLD IRC channels:not super active
irc://irc.anynet.org/qc (modding)
irc://irc.anynet.org/darkplaces (modding, darkplaces engine)
irc://irc.quakenet.org/terrafusion (level design)

For a quick crash course in QuakeC modding, try modifying a weapon to fire something different, or at least change the damage values, the relevant code can be found in weapons.qc, for instance ?T_MissileTouch is the function called when a rocket hits something, spike_touch and superspike_touch are the functions called with nails or super nails hit things, ?launch_spike is the function that creates a nail... ?W_Attack contains refire times and calls the weapon fire functions, explore and have fun.

Basic tips about weapon code:
.touch is the function called when a projectile hits something (in this function self and other refer to the projectile and the hit entity, respectively), ?T_Damage and ?T_RadiusDamage are functions to call to do damage to other entities, sound plays a sound effect, the WriteByte and related function calls create network messages describing an explosion or other effect message that the client understands (however in DarkPlaces engine there are also functions to do these annoying WriteByte messages for you, such as ?te_explosion, ?te_gunshot, etc).

Good luck, and have fun :)