RANT: What's wrong with CSQC

Discuss CSQC related programming.
frag.machine
Posts: 2126
Joined: Sat Nov 25, 2006 1:49 pm

RANT: What's wrong with CSQC

Post by frag.machine »

I didn't want to derail the original thread, so here's my rant/comment about gounc's answer to ceriux:
gnounc wrote:https://gitorious.org/clean_csqc/cleanc ... 879d7ca263:
thats pretty much what you'll want to start with.

as for suggestions, i suggest idling in irc. I saw you jumped in, but you jumped back out too.
You've gotta rack up that uptime son!
Sorry, but sometimes idling in irc is not an option for people willing to learn about CSQC for a weekend hobby project. Or people who never heard about IRC before but just bought Quake for 5 bucks at steam and started to play around with it.

Besides (AFAIK - please correct me if I'm wrong!) IRC is a non-persistent, non-indexable medium, so any interesting information people may exchange eventually will be lost unless transported to a forum thread or wiki or whatever.

I know that many experienced people in our community finds easier to just drop a couple lines in a IRC channel (they're always on IRC since... well in some cases I believe forever), but this may actually be a important factor why after so many years CSQC stills an obscure niche in the (already tiny) Quake modding community.

Linux had the same problem in the begining: "oh you want to <anything> with Linux ? Yeah... you need to hang in the right IRC channels with the right guys so they can tell you how to do <anything>". And everyone who lived those times know how well this did to Linux adoption. Only when this "underground" mentality becomes past and all required knowlegde become easy to search for the beginners (read: a quick Google search should bring answers to 75% to 80% of the basic doubts), then MAYBE CSQC leaves the status of "high potential, incompatible and exotic feature a couple Quake engines (kinda) support" to something we may consider "standard out-of-the-box feature for any decent Quake/Quake2/Hexen engine", because: a) modders and mappers will know how to use CSQC in their projects; and b) players will want to play those mods and maps that require CSQC in their favorite engine; and c) engine coders will be forced to move their asses and agree around AT LEAST a bare-bone implementation.

I know this probably won't have any major effects beyond pissing off a couple people, so let me put a couple of lines to try to amend it:

@Spike (and I suppose @LordHavoc too): please, don't be mad at me. I really respect the ammount of work you and other guys beyond the FTE & DP projects have been pouring on over those years. And exactly because the maturity they reached I find unaceptable that after so many years people still needs to hang in an IRC channel to discover how to do XYZ in CSQC;

@gnounc: please dont be mad at me, too. Thanks to your solitary work compiling a bare bones csqc example I was able to create my first CSQC HUD, and I am very greateful for your help. BTW, I first found your updated example when I googled "csqc example" or something like that.

tl;dr; no more "underground": make all CSQC knowledge easily searchable by Google/Bing/DuckDuckGo. Your community says thanks.
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC :) (LordHavoc)
ceriux
Posts: 2230
Joined: Sat Sep 06, 2008 3:30 pm
Location: Indiana, USA

Re: RANT: What's wrong with CSQC

Post by ceriux »

to be fair i did start my questions off over in IRC and they suggested i also post a thread. The people who were on IRC did help as well as they could, but im sure that what im asking might make good for a thread on I3d. Both IRC and the forums have their ups and downs. On IRC you can get a little more direct help (people can hold your hand better) and on the forums everything is documented as long as the forums stay up.

however i do agree there should be some kind of agreement on how things should be coded via csqc.

I WANT MORE CSQC TUTORIALS!
Spike
Posts: 2914
Joined: Fri Nov 05, 2004 3:12 am
Location: UK
Contact:

Re: RANT: What's wrong with CSQC

Post by Spike »

IRC generally gets a quicker response. for the weekend hobby projects, this means you actually get a response instead of basically having to wait a week before you know what you need to do.
irc is thus quite a useful tool.

half the stuff on irc is bug reports/queries, that once fixed are completely uninteresting (either engine or qc bugs). and establishing who (or rather, what) to blame for the bug to track it down.
the other half is shameless self-promotion, like me pimping my portal mod to people, and trying to get feedback as they're actually finding all the bugs in it... yeah, okay, those bugs are not intentional. bah.
the self-promotion thing is actually a good thing, at least for motivation and game design.

personally I prefer 1-on-1 instant messages. its easier to get into someone's mindset - and to get them into yours - when you don't have someone else unbalancing the conversation. the timing between messages can also be a useful indicator of how much the other person actually cares about what you're talking about, and that's something you don't really get with forums or emails etc where they need to be explicitly checked.

plus, I don't like feeling like I need to write an essay to each small question, with the expectation that the person asking the question doesn't really care and probably won't understand it anyway. there's simply less/no satisfaction from it. if there's no reward from it, why do it?
I personally feel like I suck at explaining things, enough so that I often don't bother trying. getting a response mid-reply at least keeps the explaination on track instead of it devolving into inane drivel and technobabble that means absolutely nothing to the intended recipient. because that happens a whole heck of a lot.

at the end of the day, csqc is just an API. I've tried documenting it here: http://triptohell.info/moodles/fteqcc/csqcsysdefs.qc which is a listing of all the various things available to csqc, along with a description of its use for all the things I could be arsed documenting. While there are some noticable omisions in the documentation, anyone who is technically competent should be able to make sense of it when its paired with a decent example.
the problem of course is that half the people asking for help are not technically competent, and the examples are certainly not decent, even when they actually exist.
examples are very rarely exclusively on irc, and the ones that are were just spurged out without even testing, and nearly always tailored for the specific goal the asker is interested in.

If you wish to provide decent documentation, even if its just the questions part of a FAQ, feel free. feel free to provide decent examples too, but be warned that they'll often be used by someone who has no idea what they're doing, so they'd better be decent... hurrah for irc keeping the specific/bad examples away from the masses...
leileilol
Posts: 2783
Joined: Fri Oct 15, 2004 3:23 am

Re: RANT: What's wrong with CSQC

Post by leileilol »

I intervened my IRC habits years ago. The closest thing I do to it was bug Spike on MSN until MSN closed. So being out of this #qc clique it does seem CSQC is still rather obscure and often suggested as the ultimate Army Knife with no lead-in response to nearly everything.
i should not be here
Spike
Posts: 2914
Joined: Fri Nov 05, 2004 3:12 am
Location: UK
Contact:

Re: RANT: What's wrong with CSQC

Post by Spike »

if you didn't insist on using microsoft's official client, you'd still be able to get on msn. pidgin works fine for me, at least in the UK.
there's always googletalk... at least for now.
frag.machine
Posts: 2126
Joined: Sat Nov 25, 2006 1:49 pm

Re: RANT: What's wrong with CSQC

Post by frag.machine »

Well, as I said, it is a rant. I feel much better now it's out :)

@Spike: CSQC, at least to me, is your brainchild, and is a remarkable work, to the point that LordHavoc saw enough value to bring it to DP, too. And while I understand all your reasons (and won't even try to argue), you should really think about how this may be preventing CSQC to become something more than a niche into an already diminute community. I wish I had enough knowledge about it to share and help to spread knowledge, but I can barely make a single HUD (and this, working over gnounc's example and only in DP). And if even experienced* people cannot grasp beyond the basic examples alone, what are the chances for a beginner ?

* (I'm not saying I am good, but I am experienced)

So, I really, really suggest you guys behind the CSQC to *at least* gather and discuss about this (hey, if you want to do that on IRC or pidgin, fine, but I think this forum or any other forum like QuakeOne or Func_ or anywhere are good enough). I cringe to see the list of features on csplat.qc that I cannot even imagine how to try to test because nope, no further info anywhere. And I am sure I am not the only one thinking this way.

I see people questioning the use of regular quakec nowadays and yet, regular quakec tutorials and examples with source code and eventually an embedded reskinned model is what most of the new modders will find info about when searching for quake modding on Google. We alll started copying from silly weapons modifications on old tuts, after all! (I have a backup static copy of AI Cafe, BTW)

I do want CSQC to be a sucessful standard born to overcome as many original Quake limitations as possible.

I want to make mods using extensively CSQC (without tearing my hair apart after hours of fruitless search and failed experiments) and help people make their own mods and play their mods and make the Quake community shine again.

Better map and models formats are nice, high resolution textures and shaders are an important selling point for any decent engine, but the bread and butter of our modding community *is* quakec. And is not enought anymore. We need more than quakec, and CSQC, with all compatibilities problems (a point that deserves to be seriously discussed, evaluated and soluted ASAP) between the only two supporting engines (another important issue) is what we need. Well documented CSQC, that is, with small, modular examples (most game libraries nowadays are released with lots of demos and examples using a few artwork assets, this is feasible), good documentation. And when someone get a complex problem and ask the devs for help, please, make sure this info can be found by the rest of us in any form. The eaiser, the better.
...

"But the modders don't make examples! I am just an engine coder, I am not good at mapping or stuff like that", I can hear.

Well, what about this: let's peek that feature list from csplat.qc and break it into groups (you guys decide how to break it in a more logical way), and I propose we start right now a permanent contest called the "CSQC Demo Challenge" (duh).

The idea: every two weeks/a month (you guys decide if is too much/too little time) we vote for one or more CSQC feature (let's keep few, so it's eaasier to implement and easier to study) and the modder/mapper/modeller community will work together to put a minimalist, working example of that feature.

Let's say we voted for skeletal models and ragdolls this week. One of our talented modellers will cook a very simple public domain model (let's keep it into CC/GPL territory guys, credits obviously will be given) to be used as the target artwork fo the challenge, and we the modders will have to figure out (with the help of the engine coders) how to make things work and, eventually, how to make things that weren't expected with the new knowledge.

At the end of the time frame, we must have at least one working example, worst case scenario. At best ?

a) these forums will have plenty of discussions about the challenge theme;
b) there will be different approaches teaching how to use the same feature;
c) everyone who takes part of the challenge learns about CSQC (so next time someone asks about ragdolls, someone besides Spike will try to help);
d) new knowledge brings new possibilities and new game ideas and eventually, new mods;
e) the CSQC API will maturate and stabilize once more people starts to use it (more people using, more bug reports, etc);
f) suddenly people will start to ask for CSQC in their favorite engine (FitzQuake anyone ?);
g) because f) engine coders will feel the urge to adhere and turn it into a comon feature among Quake engines;
h) and because f) even some really, really oldskool talented mappers may even feel the itch to just test a slightly customized CSQC HUD because at this point someone ported CSQC to FitzQuake so, why not ?;
i) (...)
j) COMMUNITY PROFIT!


So, what do you guys say ? Can we do this ? All of us working together ?
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC :) (LordHavoc)
leileilol
Posts: 2783
Joined: Fri Oct 15, 2004 3:23 am

Re: RANT: What's wrong with CSQC

Post by leileilol »

frag.machine wrote:Let's say we voted for skeletal models and ragdolls this week. One of our talented modellers will cook a very simple public domain model (let's keep it into CC/GPL territory guys, credits obviously will be given) to be used as the target artwork fo the challenge, and we the coders will have to figure out (with the help of the engine coders) how to make things work and, eventually, how to make things that weren't expected with the new knowledge.
Could Sorceress be of help for this? Plus to the ragdoll, a 'physics' system can be done for several things....



...like the skirt, hair and ears. (what were you thinking?)
i should not be here
frag.machine
Posts: 2126
Joined: Sat Nov 25, 2006 1:49 pm

Re: RANT: What's wrong with CSQC

Post by frag.machine »

@leileilol: absolutely yes! I believe that it would work fine for most if not all examples. Very kind of you offering your model.

So, anyone else interested in take part of the challenge ? Come on people, it will be fun, I promise :)
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC :) (LordHavoc)
gnounc
Posts: 428
Joined: Mon Apr 06, 2009 6:26 am

Re: RANT: What's wrong with CSQC

Post by gnounc »

Absolutely the discussions should be brought to I3D for prosperity. But as Spike said, irc has faster turnaround with less frustration. You'll get better results. Once you get the answers you seek, its up to you to bring that back to the forums for the next batch of people, paying it forward.

a few of us actually are trying to get csqc decently documented and tutorials put up. But we have to understand it ourselves, and build the mods, then clean them up for public consumption before we can post them here.
Remember, we didnt even HAVE a csqc section here until very recently.

My computer is, and has been dead for a good while now, so thats hindering my output, I really want to get csqc out of the recesses.

I understand your frustration. If you find yourself learning anything about csqc that you dont think is well known DO POST.

In the next month or two I should have a working computer, and then csqc is somewhere high on my priority list of projects.

Your weekly challenge is a good idea. Especially in lieu of a qexpo this year. I wont be able to participate until i get a pc. But I'd like to see it happen.


Also yeah leilei, very generous. I hope that tutorial gets done.
mankrip
Posts: 924
Joined: Fri Jul 04, 2008 3:02 am

Re: RANT: What's wrong with CSQC

Post by mankrip »

I don't like to bug specific people. I prefer to find information without asking anyone for it.

Others may also be like this.
Ph'nglui mglw'nafh mankrip Hell's end wgah'nagl fhtagn.
==-=-=-=-=-=-=-=-=-=-==
Dev blog / Twitter / YouTube
r00k
Posts: 1111
Joined: Sat Nov 13, 2004 10:39 pm

Re: RANT: What's wrong with CSQC

Post by r00k »

personally if all forum members idled for a response the world would end sooner from lack of resources.
keeping everyones computers running just to hear a ding to run to the keyboard and answer a question has always made me wonder how efficient IRC really is. But, this isnt the '90s and no-one idles irc unless you are a.> lesbian b.> nerd with too much money c.> a male and doing the same as the lesbians and looking for teen girls to talk to... :(
d.> looking for someone to explain csqc.
Baker
Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Re: RANT: What's wrong with CSQC

Post by Baker »

A good rant and interesting responses, but: Inside3d is incredibly hard to register at. It may take 5 months before someone gets activated.

At least there is a starter body of work on CSQC enough to have subforum and some reference docs!
The night is young. How else can I annoy the world before sunsrise? 8) Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before ..
LordHavoc
Posts: 322
Joined: Fri Nov 05, 2004 3:12 am
Location: western Oregon, USA
Contact:

Re: RANT: What's wrong with CSQC

Post by LordHavoc »

LordHavoc rant time:
Way back in 1999 there was this magical thing called the Quake Source Mailing List, where great ideas were discussed by several people, most of whom didn't go on to make any engines, the idea of CSQC was floated on there and I was more or less the key architect on that discussion.

When Spoike went to implement this vaguely defined thing called CSQC, he consulted with me, so it is ultimately co-designed by both of us, and he paved the way with his implementation.

Unfortunately the EXT_CSQC spec document is so vague, incomplete and generally broken as to be impossible to properly implement, so when [515] implemented it in darkplaces it was not actually a match for what was in FTEQW.

In essence the only true spec for EXT_CSQC is the FTEQW source code, this is a terrible situation on the whole, and darkplaces' implementation still does not quite match because I haven't finished comparing every code path and attempting to correct the (now entrenched) brokenness in the darkplaces implementation, which isn't really [515]'s fault.

On the whole I deeply regret not implementing CSQC first (it was my idea after all), as I think my documentation would've turned out a lot better (as proven by the relative clarity of dpextensions.qc), and would have been more conscious of the design differences between NQ and QW engines (where EXT_CSQC was designed around QW engines and throws NQ under the bus).

I could give another rant on the disaster that was the progression from QSML (lofty goals and nice ideas) to QSG (which was a dysfunctional organization at the best of times), and then QuakeForge insisting that it was their way or get out of the community... oh what a lovely history we have.

By the time that CSQC actually got implemented, it was already kind of the "third age" of quake engines, and few engine programmers were even attempting to collaborate anymore.

To be clear on one point, DarkPlaces exists to be the ultimate stable platform for Quake modders who want to go beyond the origins of Quake and make standalone games as well as mods, it is not an experimental engine on the whole, so quite often you see experimental features appear in other engines first, and have a bit of time to mature, then darkplaces implements similar functionality (written from scratch) with stability and standardization as the goal.
Spike
Posts: 2914
Joined: Fri Nov 05, 2004 3:12 am
Location: UK
Contact:

Re: RANT: What's wrong with CSQC

Post by Spike »

LordHavoc wrote:LordHavoc rant time:
Way back in 1999 there was this magical thing called the Quake Source Mailing List, where great ideas were discussed by several people, most of whom didn't go on to make any engines, the idea of CSQC was floated on there and I was more or less the key architect on that discussion.
which I wasn't really aware of.
In essence the only true spec for EXT_CSQC is the FTEQW source code, this is a terrible situation on the whole, and darkplaces' implementation still does not quite match because I haven't finished comparing every code path and attempting to correct the (now entrenched) brokenness in the darkplaces implementation, which isn't really [515]'s fault.
but what was [515]'s fault is that when he had no idea what the thing was meant to do, he didn't try contacting me.
as far as I'm aware, he also never even tried running csqctest either - the only csqc mod at the time that was written explicitly to test the various parts of the engine (admittedly this made it clumsy as a base mod, but would have been ideal for [515]). out of curiosity, did you ever try running it?
the spec was never really intended to be complete and concise, if only because the spec was in flux and really was not anywhere near finalised. I was hoping for feedback and itterative improvement. what I got was an alternative engine implementation that was usable for nothing but huds.
The only bit of feedback I remember I got was about stats from you, that strings+floats should be sent as they are instead of casting to a float. I made that change. DP still requires people to claim that their datatypes are integers in order to send floats.
On the whole I deeply regret not implementing CSQC first (it was my idea after all), as I think my documentation would've turned out a lot better (as proven by the relative clarity of dpextensions.qc), and would have been more conscious of the design differences between NQ and QW engines (where EXT_CSQC was designed around QW engines and throws NQ under the bus).
I'd written stuff to run qc on behalf of the client before I even had any internet access other than emails (in a hacky way that later formed the basis of FTE_MULTIPROGS), way back in my NQ engine. That qc vm was the first thing that got added to what later became FTE, when I started a QW engine. Claiming that it was exclusively your idea is unhelpful, ultimately it was based on q3 with its separate network/render entities but with all pointers removed.
ext_csqc was written by someone working on a QW engine who also had significant understanding of NQ. Every single feature considered the possibility of implementing it in an NQ engine, although yes, it did expect a few changes like increasing the engine's internal temp-entity limit. Any QuakeWorldisms that would need to be supported were intended to be either fairly trivial to implement (like the input log+sequence acks), or trivial to stub (like userinfos, or alpha+sizes in software rendering engines). If it had been QW-centric, it would have used completely separate player+non-player entities!
Also, 'co-designed by both of us'. Yup, NQ under the bus... You're contradicting yourself.
edit: the 2d drawing functions were based upon menuqc, which was Black's work iirc. Not allowing code reuse between menuqc (which has no real access to the state of the game) and csqc would have been suicide. This included using the same DP-only keycode constants as menuqc, which means handicaps like being unable to tell which alt key was pressed. For completeness, these 2d functions are basically wrappers around glquake's Draw_Pic function, with a few extra arguments that throw software renderers 'under a bus'. If the full spec had ever been finalised, it would have contained a clause to allow software renders to ignore rescaling or tinting/blending.
the lack of scaling in software rendering combined with the abuse of vid_conwidth is another miss-step dating back to csqc's menuqc/dp concessions that is harmful to adoption.
To be clear on one point, DarkPlaces exists to be the ultimate stable platform for Quake modders who want to go beyond the origins of Quake and make standalone games as well as mods, it is not an experimental engine on the whole, so quite often you see experimental features appear in other engines first, and have a bit of time to mature, then darkplaces implements similar functionality (written from scratch) with stability and standardization as the goal.
from my perspective, DP is the fixed-function pipeline of Quake. If you want to achieve something, you need to use some specific shader keyword or cvar for it (chase_active, anyone?). Yes, it has extensions, but if you want to avoid the id1 directory (including homedir issues), 'you' still need to edit the engine to do it.
the 'standardization' part only applies when its a DP standard.
the 'stability' part is a hinderance, in that DP is so stable that its API is never updated to actually be useful, and limits what you can achieve with it. the fact that you're no longer working on it very much other than bugfixes does at least help not create new crashes.
goldenboy
Posts: 924
Joined: Fri Sep 05, 2008 11:04 pm
Location: Kiel
Contact:

Re: RANT: What's wrong with CSQC

Post by goldenboy »

Rants can be good because they might clean the air, and it's good to get stuff off your chest.

As for tutorials and resources, there is the "Getting Started with CSQC" thread in this forum which has a few good ones. Spike's "csqc for idiots" is a very good resource despite the funny name.

The thing is, some CSQC mechanics are a bit hard to explain to people who just bought Quake 5 minutes ago on Steam. These people should go and start easier mods first, like making the grenade launcher shoot voreballs.

The information is out there, but if one cannot be arsed to go and look for it, then one has no right to bitch. IRC *is* the best resource to get up to speed with CSQC, so if you refuse to use IRC out of some ideological stance, then it's really your loss. It doesn't cost anything to come on IRC. You are bitching about a free service. Learning directly from a mentor is the oldest form of learning, and it is still absolutely valid.

I learned 80% of what I know directly from Spike. 10% I learned from gnounc who was slightly ahead of me with his CSQC projects. Nowadays I would say I can make pretty solid use of CSQC without needing to bug anyone anymore.



I like to teach, but I don't really feel like I want to participate in some sort of regular speedmodding event. I'm busy enough with my own code. What I can and might do is write tutorials. Ironically, though, rants are going to be the least effective way to convince me to do one. I'll think about it though.


As for the difference between DP and FTE, it's partly that DP expects your CSQC progs to contain certain things, even if they're never used, while FTE is more liberal. DP also doesn't support multicast() which in my opinion really should be added, but it seems theological arguments stand in the way of that. Scout's Journey uses multicast() all the time so it's not a minor feature. It is part of how CSQC and SSQC exchange messages (data) so it's kinda crucial to establish some sort of compatibility there. I'm not rewriting all my code because, well, my code works. And SJ is probably one of the larger CSQC mods out there right now.

Anyway, I guess I'll write a tutorial about how SJ uses CSQC, and why it does certain things, then. Expect it sometime in the next few months.

Edit: The RMQ implementation was done by Spike, and supports basic HUD stuff at least. RMQe is based on Quakespasm, so it should be possible to add the CSQC stuff to Fitzquake-like engines from there, if anyone could be arsed.
Post Reply