News | Forum | People | FAQ | Links | Search | Register | Log in
Mapping Help
This is the place to ask about mapping problems, techniques, and bug fixing, and pretty much anything else you want to do in the level editor.

For questions about coding, check out the Coding Help thread: https://www.celephais.net/board/view_thread.php?id=60097
First | Previous | Next | Last
Bal 
I have no if you're technically right and if Tyrann included computations for rolling the light, but let me copy and paste from the TyrLite readme because I want to wave my dick and show everyone that I'm always right.

"mangle" "# # 0". The first # is the yaw angle, 0 to 360 degrees around the Z-axis. The second # is the pitch angle, 90 to -90 degrees up to down. The 0 is just a required placeholder.

BTW I wonder if it's possible to roll a light if you're on an acid trip? 
R.P.G. 
Thanks, that's what I was after.

And I now know that zero degrees yaw is at 3 o'clock, and zero degrees pitch is level. 
Barrel Model 
I have this barrel in .blend from a friend, i want someone to convert this to .mdl, thanks. 
Exporters Are Built Into Blender 
take the blend file, save it to either a 3ds, lwo or dxf format, from there import that file into Qme.

Both blender and Qme can be found linked here:

http://www.quaketerminus.com/tools.htm 
Oh, And 
if you need custom game code, a progs.dat file that handles model inclusion so you can test the barrel in game this is as small an example as you are likely to find.

http://www.gamers.org/pub/idgames2/quakec/level_enhancements/ambient.zip 
Make That Last Link 
 
Well i didnt make it my friend did, and thats all he said he'll do. 
Hmm, Blender Interface 
can be tricky for someone not familar with it, so you can send me the file and I'll convert it.

My address is in here: http://www.celephais.net/board/people.php 
Better Conversion 
You'd be better off using one of the blender md2/md3 exporter plugins, and then use quark to convert md2(or md3) to mdl. That way you preserve the UV mapping. Alternatively exporting to 3ds and then importing that into gmax gives another suitable conversion path.

Some day I'll get around to writing a mdl exporter for blender... 
It Should Work 
for a single frame md2 conversion, but the MD2 exporter is highly unrecommended by most Blender/Quake users. Multiframe animation exports produce some jawdropping distortions in the vertices. 
Addedum 
I would likely consider this simply a problem in the integer/floating point translation of md2 and if you carefully built the models on the grid you should get good results, but this isn't the case here. It is possible to take the very same model that you converted to md2 that results in a distorted model and process it frame by frame into 3ds files and rebuild it frame by frame in Quark and save it to md2 in Quark and the results will be undistorted. So most likely, the problem lies in the md2 importer. 
Should Read 
save it to md2 in Quark

save it to md3 in Npherno and then import it into Quark ;) 
Animations 
If the 3ds files are accurate, you can just export each animation frame as one of those, and use the MD2 for just a single base pose. Convert the MD2 to MDL format, then import the rest of the frames into QMe as 3ds flies. As long as you've got a model with the same topology as your blender model in mdl format, you can import extra frames in 3ds format to QMe without a problem. The only caveat is that the triangle order mustn't be changed, or you'll get a mess. 
Preach 
I was trying your model tutorial, and used a newboss tyoe. To my surprise this was the first time I saw the creature in Quake.

But there must be an error in the qc file.

http://members.home.nl/gimli/newboss.qc

*** newboss.qc:18:Unknown value "newboss_stand2"

I'm desparatly dequoted to qc! 
Madfox And Newboss 
The error means that you're calling the function newboss_stand2 before it's been declared. Because the function newboss_stand2 is further down the QC file than newboss_stand1, the compiler doesn't know that newboss_stand2 is a function. So it gets confused and stops compiling.

The way to fix this is normally to make what is called a prototype. This means putting the following line above the function newboss_stand1

void() newboss_stand2;

This looks a bit like the start of the definition of the newboss_stand2 function, but it doesn't have the function code itself. It warns the compiler we are planning to have a function called newboss_stand2 without defining it yet.

Having said all that, if you try this fix, you'll find that another error strikes, it will tell you that there is already a function called newboss_stand1. This is because you've included two versions in the qc file. Both of these functions do the same thing, but one of them is newboss_stand1 in the shorthand format:

void() newboss_stand1 = [ $stand1, newboss_stand2 ] {ai_stand();};

So delete the first one and leave the quoted one only. Then compile away and it should work.

You may now notice that all the stuff I wrote in the second paragraph seems to be contradicted, as the functions newboss_stand2, newboss_stand3 etc are all calling the following function without prototyping it. This is in fact the last benefit of the shorthand way of writing frame functions, it automatically prototypes the function self.think is set to. This is obviously useful as it allows you to write all the frames in the order they should play without having to prototype everything by hand. I omitted to mention this in the tutorial as I felt explaining prototypes would be too much digression. 
Thanks! 
for your answer. I tried with my poor understanding in qc to do as you said.
And indeed the newboss_stand2 gave me a new error.
Also deleting the first one brought me back to another error.

So I compared it with knight.qc and then I had this newboss.qc
http://members.home.nl/gimli/newboss.qc

The only thing it changed it has no errors, but shows newboss at it's first frame. In some way it won't loop to the next frame. 
Hurray! 
This one seems to work, although it is quiet a miracle to me, why I first have to shoot to make it animate.
http://members.home.nl/gimli/newboss.qc
For the rest it works fine!

YippY 
YippY 
That rocks 
Imagine 
a bulking reddwarf in a remote attack move that only starts shooting if I start...

sportive , but I can't kill it without making it flipping in it's start position. 
Freezeframe 
The reason why your monster freezes until you shoot it takes us on a long tour of the quake AI library. The source of the problem is that the monster spots you right away and so wakes up. However, since it has no attack or run animation yet, it stalls. If you turn on notarget before the monster sees you, you'll find that it animates just fine until disturbed.

So why does it behave differently once you shoot it? Well, it's all about how you change animations. One way of changing a monster's animation is to directly call a frame function like:
newboss_attack1();
or
self.th_missile();
This changes the current frame, and sets a new .think, so the previous animation is interrupted.

If self.th_missile is SUB_Null, then .think is unchanged, so the monster will continue with whatever animation it was doing before, like idleing.


The other way to change an animation is to just change the monster's .think field, like
self.think = self.th_run;
This means the current animation frame is held until the monster thinks again, but then it switches to the new animation. The problem is that if self.th_run is SUB_Null, it's already overwritten the next animation, so the monster freezes.

So as you may have guessed, waking up a monster changes its animation in the second way, the function to blame is HuntTarget in ai.qc. The reason monsters keep going is that their frame functions are always supposed to keep setting another think time and function. If you ever break the chain the monster gets stuck. .th_pain is called whenever damage is taken, which gives a way to kickstart the monster again. By this time the monster is already aware of the player, and so HuntTarget is not called again.

Of course, once the monster is finished it will have a th_run function, and so the problem will fix itself. 
Stand Up Frag 
To my surprise the newboss started animating fine, when I turned it around to give myself the chance for notarget.
And stopped when it spotted me.I suppose this should be the moment to make it
shoot a missile, and as there is no code it freezes.

After all my efforts I end up backwards, I had a freezing monster I could shoot alive, now I've got one that freezes in my sight.
I have made a somewhat different qc than in your tutorial, as I couldn't get the error log away.

But now I get a monster what dies as a stand up.I can't find a cause for this. It looks as the animation makes it attack, hurt and finally die with a strange eight frames to make it stand1 again.

I apreciate your patience to explain so clearfully the qc-code. Two days before I couldn't even believe such a thing could spawn into Quake.
I posted the newboss.qc again, maybe you can find the error? 
Hmmm 
Can you post or e-mail me the newboss.mdl file, so I can take a better look? I've tried compiling with a substitute model, but to try and find what's wrong with the animations I'd need to see the actual thing.

Also, don't worry that the qc file has changed from the one in the tutorial. That was actually my hope for the set of tutorials, that there'd be enough information that people could fill in the rest of their monster by comparing with the original quake monster files. The file as presented in the tutorial is certainly incomplete, and only really useful for previewing the animation. 
Alright 
after working on for houres, I came up to this point, an animating newboss, without defend, freezing in its last stand frame.

http://members.home.nl/gimli/bos.dz 
Frame Macros 
The first problem I see is that the order of the frame macros in the qc file doesn't match up with the order in the model. You need to have the frames in the same order in both. This is because quake doesn't read the names of the frames at all, it only reads the numbers. The frame names are purely to make the code readable, and the compiler just assumes that, eg. the 16th frame you list in the qc file is also the 16th frame in the model.

So rewrite the frame macro definition to:
$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8
$frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8
$frame die1 die2 die3 die4 die5 die6 die7 die8 die9 die10 die11 die12
$frame hurt1 hurt2 hurt3 hurt4

and the death/pain animation should be fixed.

If you want to stop it freezing and instead react when it sees you, try setting
self.th_run = newboss_attack1;
in the spawn function. Also, if you don't want that stand animation to loop like it does, change the last stand frame function to

void() newboss_stand8 = [ $stand8, newboss_stand8 ] {ai_stand();};

Notice that this is newboss_stand8, and the nextthink is also newboss_stand8 - it calls itself. That way it freezes, but not in the same way, it's still thinking every frame, just not changing. I don't think this change would work well for an actual monster as it is, but it's something to experiment with. 
Yeah! 
I'm really knocked out by the fact for overseeing such a small logical factor.
For houres I stared the qc file, and the only thing I could find was another newboss.mdl in my progsfile with a base texture skin0 frame.

But this is great! Like with the rat it puzzled me so long what could make these monsters go. Again, thanks for your explanation.
Think I'll make me some extra frames for the stand animation.

I used a MOVETYPE_NONE to see if the monster should stand, but it seems to shamble away. 
First | Previous | Next | Last
You must be logged in to post in this thread.
Website copyright © 2002-2024 John Fitzgibbons. All posts are copyright their respective authors.