I am pretty new to this myself but it's very important to not change certain things in defs.qc.
If you change anything above line 220 (give or take) you are asking for trouble. The rule of thumb is don't change anything above
void end_sys_fields; // flag for structure dumping
Not sure if this is your issue but good info nevertheless.
new to QuakeC, and yet your progs.src is lacking monsters?
Sounds like you're trying to compile a QuakeWorld mod instead of a (Net)Quake one.
The two are similar but mutually incompatible (primarily but not exclusively due to changes above end_sys_fields).
If you truely want to run a QuakeWorld mod then use a QuakeWorld engine (eg: FTE, ezQuake, or MVDSV). (Net)Quake engines like VkQuake, QuakeSpasm, or even DarkPlaces cannot run QuakeWorld gamecode.
Its probably the quakeworld thing since I have not touched defs.qc. I'll try that, thanks.
That Was The Problem
Thanks for the help. It works now.
I appreciate that new map hack idea a lot Preach <3 even if it isn't exactly/fully what I needed (since I had ideas for patrolling monsters) I still will definitely look into it. I'm putting off my Metal Gear Solid map for now until my 2nd Kaizo Quake episode now since, as you can imagine after making this hack, getting what I want is virtually impossible in vanilla Quake sadly. :[
I'm needing a way to control a mdl with an entity. So when I target it it will start frame group 2 and it's series of animation. I tried using an info_notnull, and I must have gotten close but the server shutdown with non bsp model error.
Hi Aberrant. I think there's little chance of that being possible with a map hack. I'm unaware of any hack in vanilla quake that allows inclusion of a custom model the way that misc_model entities allow in some mods.
Quoth's equivalent does come with the ability to toggle between two framegroups, but you need to set the model up so that those two framegroups are frame 0 and frame 1. See full details at
If my guess is correct, Aberrant isn't looking to load totally custom models, but to use existing ingame models and animate them when activated; e.g. using an info_notnull to display a monster's model, and then make the 'fake monster' display one of its animations (run, shoot, die, etc) when the notnull is triggered by something else.
Does QuakeSpasm, QSS, FTEQW or Darkplaces support custom (QC-defined) interpolation timing for MDL frame animations?
Makaqu supports this through self.frame_interval, but I'm not aware of any hardware-accelerated engine that does.
Fitzquake variants have it in the protocol but it’s not directly controllable from qc — it uses the nextthink field to decide how to set it and caps it at 1 second
By the way, what are the known engine-independent methods for fixing the problem of the player sliding over the heads of the monsters when he jumps on them?
I've tried setting a .touch function on the player, to detect when the player touches a monster, but it's not working.
Good question ... I fixed it in-engine in early builds of fitzquake but then removed the fix later once i realized it's a bad idea to make bug fixes that change gameplay. In my readme I said "this bug can be fixed in quakec also" but I have no memory of how. Maybe setting the .solid of monsters to a different value? SOLID_BSP?
Needs to be a monster touch function
Also works if you set it on exploboxes
void() monster_touch =
if (other.classname != "player")
if (other.health <= 0)
if ((!other.flags & FL_ONGROUND) && (other.absmin_z >= self.absmax_z - 2))
other.flags = other.flags + FL_ONGROUND;
That worked, thanks c0burn.
also this stuff should be in Coding Help thread.
I had forgotten about Coding Help; can that thread go to the Permanent Threads section?
So What About Animating A Model?
Has Aberrant's question (#612 & #614) been eventually answered?
I would be eager to achieve such a thing to put some RPG sequences in my own project (which is actually for Hexen II) the way Heretic II does.
1. the view switches to a third person view thanks to a camera_remote (a handy thing we have in H2 which does basically the same as the intermission view, but triggerable mid-map)
2. the view represents the player facing a monster and they interact by talking (with centerprints) or doing something (like one killing the other or running away) by triggering the corresponding animations on the models.
3. the view returns to the player and the adventure goes on.
Has everyone ever tried to do that? Succeeded? How?
Thank you in advance for your insights! :-)
Portal of Praevus has an intro scene that it possibly a demo file. Maybe you can look into it and see how it's done? But playing intermission demos would require saving-loading or a way to save state so you can reset back to.
this really sounds like it requires QuakeC, not map hacks
@kalango Indeed the PoP intro scene involves a demo file. How such files actually work is a mystery to me... Obviously they are not just video files standing alone on their own since an actual map exists corresponding to that intro scene, full of extremely complex settings involving more than 50 trigger_relay and almost 20 of those camera_remote things travelling along path_corners... So which part is "demo" stuff, which part is scene scripting through entities inside the map... ? I confess I am puzzled.
@metlslime You may be right. If so, since I don't want to pollute this topic I'll start a new dedicated topic. :)
Unthinking Custom Monsters
monster_zombie with nextthink -1 allowing to set the use function and do some funkiness
"classname" "monster_zombie" // zombo
"nextthink" "-1" // disabled on spawn
"frame" "174" // lie frozen on ground frame
"use" "zombie_cruc1" // pop into crucified state
"touch" "zombie_run1" // hunt enemy on touch/damage
"flags" "544" // needed flags
"yaw_speed" "20" // turn as normal
"targetname" "bob" //
"takedamage" "2" // damageable
'use' can even be from another monster, for ex. dog_leap1..
Some useful use keys would be puttin him to the ground with zombie_paine11 or on the cross with zombie_cruc1. Maybe use SUB_CalcMoveDone + finaldest for some awkward teleporting?
Thought this was worth sharing, since I don't think I've seen it used. Maybe has potential for more useful set ups.
Thanks For All The Replies And It's Been Awhile.
I ended up finding everything I needed at preaches site. And I was trying to trigger existing monster animation sequences. It did work quite like I needed, but I learned a lot by doing it. I did notice that if I killed the zombie and then retriggered him, his head would start draging around chasing you. But that is in a megatf mod I am working on whatever you're on might react differntly. If you are wanting to animate mdls the bast way is to just setup a mdl with an animation sequcnce that just loops, can then call it with whatever ent you use to spawn mdls and it'll keep looping. Like the candles in arcane dimensions. Using info_notnull can call the mdl too, but I never found a way to kill them and bring them back. Currently i'd love a way to make a info_notnull solid wihout getting the non bsp_model error. I took a tank Xage made and added things to it and it never crashes being solid. Normally, fireing rockets at it will crash everything, but this one doesn't. https://drive.google.com/file/d/1mK9VV4EkkVpJdFdI7PT6tx2khXQ4HovS/view?usp=sharing
Post That Tank Map Ent In It's Own Area.
"angles" "0 0 0"
"origin" "44 -3 289"
The tank sit perfectly at 0 0 0 on the map.
I'm sure this has been posted before, this was just my way of getting it to work. Getting it to fire is something else entirely. When I trigger a notnull that uses a monsters attack frame that contains ai_face and it fires it will crash with non bsp_model error. Not from my fire like the rest.
Self-Aware Map Hack (Anti-Savescumming)
BIG discovery here! :D Previously this was thought impossible without rewriting the Quake engine at its core.
So while working my kaizo Quake episode (Quake Guy Must Die) on stream I came across a bug in the Quake engine that is actually a really powerful feature in my eyes. Since in my later maps I wanted to prevent saving and loading from working (or you'd die upon load) and I felt that was a nice thematic touch to a finale.
Anyways, the way you do it is this:
Make a SUB_Null brush entity and these keys:
angles: whatever you want tbh
What I noticed in testing is that the direction it attempts to push you is INCORRECT and NOT updated if you don't save or load prior to encountering it. It only corrects its push angle if you load AFTER its creation (aka the use function of InitTrigger being called).
This now means that you can have a map that is self-aware if you have saved and loaded, and you don't even need to rewrite engine code, which previously, was the only known way of stopping savescumming.
Enjoy everyone! You can use this in so many ways, including have the map punish/confuse the player with every monster being replaced by shamblers, changing the map layout entirely, or just flat out killing them like I plan on using it for. :)