Considering writing a QuakeC/Modding tutorial

4LT

Member
Jul 8, 2022
80
95
18
Pennsyltucky
Looking around, there doesn't seem to be a singular good resource for Quake modding, especially not for "modern" workflows. I'm interested in creating a series of articles on the subject. I have a few ideas brewing, but I'd like some feedback. Naturally, this would be an opinionated guide, so I expect some of you will disagree with my methodology, but I think it would be more useful to newcomers if I tell them what to do rather than give them options at every turn.

Some ideas:

  • OS Agnostic - As much as possible. This might be a bit difficult as a Linux-exclusive user, but the lion's share of modders are going to be coming from a Windows background. There will be cases where OS-specific instructions are required (e.g. install scripts) but I think there won't be many. I'll err on the side of WIndows users, as I expect Linux users will be able to figure out most things
  • Recommended Editor - VScode. There's a QuakeC extension too, although I AFAIK it doesn't support FTE-isms. Vim and Emacs are too steep a learning curve, Notepad sucks. Yeah there's fteqcc-gui, but I feel like it's a disservice to teach such a specialized tool.
  • Recommended Compiler - fteqcc. duh.
  • Git/GitHub - I think it's important to teach good practices for collaborative development, though perhaps this would be more of an addendum. Git and GitHub could easily be their own topics, and it would likely drive people away if I front-load this stuff right away. I'm thinking I should start people off with a GUI front-end, though I don't have any experience with any. I think VScode might be integrated with Git, come to think of it, but I've always preferred the CLI. Though, since the terminal is integrated with VScode, maybe the CLI wouldn't be so bad...
  • Style - Pretty much going to prefer opening-curly-braces-on-same-line and use of curly braces even where there's only one line. Mostly because that's what I use at work and that's my own preference. I'd prefer spaces over tabs, though I don't want to get into a holy war over the topic.
  • Starting Source - Probably some "cleaned up" source; I've worked with Shpuld's, which is good, but that's based on 1.01. I think the 1.06 source might be better since it's consistent with pre-re-release vanilla, and I doubt anyone cares about whole license issue.

Chapter 1 would essentially be setting up the tools, compiling, and running a mod; perhaps making a small edit (fix the fish enemy count bug).

Chapter 2 would be a high-level description of progs.src/compilation process and defs.qc with some explanation of globals/functions/fields. Another edit, perhaps a new field, and folding in some language features.

etc.

Perhaps the first couple of chapters would be standalone, and additional chapters would require pre-reqs of mapping or modelling skills.

Suggestions?
 
I think this is a pretty good plan.

The Git stuff—well, Git is definitely useful, but yeah, it might be better to save that for later chapters or maybe as an addendum or something (and maybe within VSCode's integration). It's up to you, of course.

As for the starting source: is there any reason to not use the recent re-release source as a base? Besides the localization and AI pathing code, does it deviate from the vanilla 1.06 source in a major way? That would solve any license concerns, anyway.
 
I would absolutely love this. I've done very light QuakeC stuff with Reliquary, but overall as someone who has zero programming literacy, it is a very intimidating thing to try and break into.

It might be too much to ask for, and verge on attempting to teach programming fundamentals from the ground up, but an ideal QuakeC guide would start from square one. This is what would help me the most!
 
Yeah, can't think of a good reason not to use the re-release source
Actually Josh Skelton's QC extension doesn't support FTE-isms (QCC features added in fteqcc), and the re-release uses some of these features. However, I'm thinking of leaning on supporting the entirety of fteqcc. There's a less feature-ful extension from one Victor Feitosa that does syntax highlighting that doesn't highlight FTE-isms as errors, so maybe that would be a decent middle ground. If I end up going this route, I'll be sure to highlight Josh's extension in a footnote or something.
I would absolutely love this. I've done very light QuakeC stuff with Reliquary, but overall as someone who has zero programming literacy, it is a very intimidating thing to try and break into.

It might be too much to ask for, and verge on attempting to teach programming fundamentals from the ground up, but an ideal QuakeC guide would start from square one. This is what would help me the most!
Hey, thanks for your interest! Could I get your feedback on materials I post? There's something about diving into programming has fundamentally changed the way I look at and think about things*, and I could use a different perspective on this stuff.

*Not to make programming sound esoteric, I'm sure the same is true of other subjects.
Any experience using Notepad++ as your editor?
Yeah, some, back when I did use Windows. It's fine for what it does, but I think VScode is more forwards-looking with its LSP (Language Server Protocol) support; it (plus the language server) resembles more of an IDE. You get the features of an IDE, but you get to keep the same front-end when moving from one language to another.


Also, I can't promise much as the next few weekends are booked. I just had this idea percolating for a while and wanted to get it out.
 
Last edited:
Actually Josh Skelton's QC extension doesn't support FTE-isms (QCC features added in fteqcc), and the re-release uses some of these features. However, I'm thinking of leaning on supporting the entirety of fteqcc.
Not to toot my own horn too hard, but I've written (or rather, modified C/C++) syntax definitions for Kate and Sublime-Text, with FTE-isms supported. I've used them myself (I've since moved fully to Neovim). Neither of these do LSPs, so there's that to keep in mind.
 
  • Like
Reactions: hemebond
There's a less feature-ful extension from one Victor Feitosa that does syntax highlighting that doesn't highlight FTE-isms as errors, so maybe that would be a decent middle ground. If I end up going this route, I'll be sure to highlight Josh's extension in a footnote or something.
I did that VSCode extension quite a while ago and while it does it's job for most QC and progs syntax it pretty much ends there. If I'm not mistaken I took into account most of FTEisms but it might miss a few here and there. If anyone has experience with VSCode extensions and would like to contribute to it and maybe integrate a language server it would be great.

I had plans to add at least a tooling integration with it but currently I have no time to dedicate to its development. I'm on full support of seeing more QC tutorials to be perfectly honest it might be the main reason the number of custom mods is so small compared to other games.
 
I'm on full support of seeing more QC tutorials to be perfectly honest it might be the main reason the number of custom mods is so small compared to other games.
It certainly is, in my opinion. Learning QC is so obscured and annoying to set up that it stifles people from going at it.
This is why I started the modeling tutorials on my Youtube channel, as I found that once I got the ball rolling myself everything just fell into place for creating models for Quake.
I know I for instance would be heavily interested in something like this, and I would certainly create my own gameplay mod with the knowledge.
 
I did that VSCode extension quite a while ago and while it does it's job for most QC and progs syntax it pretty much ends there. If I'm not mistaken I took into account most of FTEisms but it might miss a few here and there. If anyone has experience with VSCode extensions and would like to contribute to it and maybe integrate a language server it would be great.

I had plans to add at least a tooling integration with it but currently I have no time to dedicate to its development. I'm on full support of seeing more QC tutorials to be perfectly honest it might be the main reason the number of custom mods is so small compared to other games.
Oh hey, glad you're here!
So, the repository listed on the VSCode package is: https://gitlab.com/victorfeitosa/quakecls
However, that appears to non-existent? Has the repo been renamed or moved?
 
  • Like
Reactions: victorf
Right... it's a typo, the repo is live at https://gitlab.com/victors-personal-repos2/quakec
Just a fair warning though, it can definitely use a refactor. I don't even know where I left off. I'll see if I can revisit it a bit and at least improve on the documentation for it. Thanks for letting me know about that broken link!
 
I am all for QuakeC tutorials and I hope to do some videos one day on my channel now that I am more experienced with it.

There are a lot of options for a base QC to start from. None of them are ideal. I'll post links in a later post but in general there are plenty of more recent "cleaned" and "bug fixed" versions to start a mod from, but there's no clear winner that has jumped out at me after three years of teaching myself QuakeC. And many of these really don't fix "real" bugs. There are a ton of versions that fix compiling errors, formatting "no-nos" and typos and that's it. Not really a good basis for clean QC IMO.

One older candidate is the Ultimate Quake Ranger Patch which contains all the Quake Info Pool (QIP) bug fixes and more. But this was created by people who were much more interested in NetQuake multiplayer with bot support even though there are a bunch of SP fixes. Also, they added MOTD and MP goodies that just aren't appropriate for single player and I think you need to strip of few of these out for an SP mod. You'll get most of the easy bugs but not 100% of what I call the "traditional" bug fixes.

This brings me to SMP. I am still very much a neophyte coder and completely self-taught. There are gaping holes in my knowledge of QuakeC BUT I did take great pains to include as many QIP fixes as I could in that code base (and added them all to progs_dump). I also added things like dormant triggers, trigger spawned items and monsters to SMP. QOL stuff mostly. I still need to add dog and fiend insta-kill fixes from progs_dump. It would be really great if someone like Preach or bmFbr could review my SMP code and find any really big issues because I really do think it's a good starting point for any mod, even in it's current state.

Just wanted to share my experiences here. I want to be clear that although I am still a newb, I have done a lot of research into clean and bug fixed QC and there's really no one great candidate besides UQRP. I do feel SMP is one to look at since almost every fix is included but there's no MP stuff added.

 
Yeah, can't think of a good reason not to use the re-release source
Are there bug fixes though? For example, armor taking damage while drowning? That kind of stuff?
 
I would love this! I've been looking for some resources for basic weapon modding and implementation of new models, enemies etc. with my limited experience coding. This would be invaluable!
 
Last edited:
This sounds like an awesome idea! I could help with some QuakeC stuff if needed. While there are good references out there, there isn't many simple examples and step by step guides on how to get started.

Anything to make it more accessible is always a good thing. Really glad someone wants to accomplish that.
 
Hey, thanks for your interest! Could I get your feedback on materials I post? There's something about diving into programming has fundamentally changed the way I look at and think about things*, and I could use a different perspective on this stuff.

*Not to make programming sound esoteric, I'm sure the same is true of other subjects.
Feel free to run anything by me. I'll let you know if there are any gaps, as I'd get stuck instantly. :p
 
Been having some conversations about iD engines with all this Unity-IronSource merger/goofball CEO stuff happening. One thing that stood out was the feeling that GZDoom is more worthwhile to pursue because there's more documentation for it than QuakeC. One person said that they can pull up a wiki page for specific things like zscript or event handlers if they need to whereas looking up stuff for QC requires finding someone's early 2000's GeoCities page. Now I don't know anything about programming myself but I would like to help with this. At the very least I can get on my Twitter alt and put out the call that people at Slipseer are looking to build some proper modern resources for QC.
 
Why don't we put up a wiki page and fill it with the QC specs, references, implementation examples, usages.. like a general API documentation that everyone can see how a certain function is used, an example and compilation instructions etc? The ZDoom wiki for Decorate, zscript, zmapinfo etc.. you can just look up stuff immediately.
 
Why don't we put up a wiki page and fill it with the QC specs, references, implementation examples, usages.. like a general API documentation that everyone can see how a certain function is used, an example and compilation instructions etc? The ZDoom wiki for Decorate, zscript, zmapinfo etc.. you can just look up stuff immediately.
I like the idea of having some kind of more indepth QC documentation wiki. I wonder if QuakeWiki.org could be a good place to contribute and have a home for this stuff?
 
  • Like
Reactions: Esrael
I like the idea of having some kind of more indepth QC documentation wiki. I wonder if QuakeWiki.org could be a good place to contribute and have a home for this stuff?
It is a good place, I was never sure over how much it is used since a lot of the information was added nearly 10 years ago. But if that is 'the place' to go, then some of us who can, probably could add the information there.
 
  • Like
Reactions: Esrael