Questions About Half Life MDL

Discuss programming in the QuakeC language.
Post Reply
Ghost_Fang
Posts: 336
Joined: Thu Nov 12, 2009 4:37 am

Questions About Half Life MDL

Post by Ghost_Fang »

I have a few questions concerning half life mdl.

-Do I need CSQC for the basic features? (individual hitboxes, basic animations, attachments)

-How does the qc talk to do the engine/model. Would I have to recode most of the basics like t_damge etc.

-How do I simply call/play an animation sequence?

-In addition for simple answers can I be pointed in the direction of GOOD, PROPER, documentation that would answer those questions and more? (As in half life models in a quake engine).

Thanks in advance.
Ghost
Spike
Posts: 2914
Joined: Fri Nov 05, 2004 3:12 am
Location: UK
Contact:

Re: Questions About Half Life MDL

Post by Spike »

.frame specifies a framegroup/animation just as it does with mdl.
attachments - look up the setattachment extension, or use gettaginfo to do the positioning yourself in csqc.
bone controllers are evil things that need special cases.
individual hitboxes are also a unique feature that are not supported.
if you want advanced bone control, you'll theoretically need to use something like skeletal objects.

as far as I'm aware, only fte supports loading halflife models, and even that is retardedly basic (but hey, some people prefer basic).
it doesn't work with skeletal objects, instead you need to use all these float fields with random values just to get it to animate:
frame
frame2
lerpfrac
frame1time
frame2time
baseframe
baseframe2
baseframe1time
baseframe2time
baselerpfrac
basebone
bonecontrol1
bonecontrol2
bonecontrol3
bonecontrol4
bonecontrol5
subblendfrac
basesubblendfrac
the frame* stuff is regular csqc animation control. frame1+2 say which two framegroups to lerp between, lerpfrac says the fraction between them (0 for frame1, 1 for frame2, 0.5 for 50% of each). frame*time says the time into the framegroup. standard csqc controls.
the base* stuff allows you to control leg animations separately from torso animations. set basebone to the 'dividing' bone, and the bones with numbers lower than that will use the baseframe* fields, while the bones with numbers higher use the regular frame* fields. Theoretically I could add support for .baseframe+.basebone to ssqc, but I'm too lazy to commit to doing so. Note that these work with .iqm models too.
the bonecontrol fields allow you to tweak each halflife-model-defined bonecontroller in the model as desired. in player models, 5 is the mouth and the other four typically give control over twisting the spine (so you can look one way and run another).
subblendfrac+basesubblendfrac is some extra wtferyness of the halflife model format. typically used for pivoting the spine, so your model actually looks at the ground and keeps his feet on the ground.
None of these extra fields are available to ssqc. You need csqc to set them.
comine them all and you should have animations working as well as they do in halflife.
like I said before, its retardedly basic, so anyone that already knows how to animate stuff properly in csqc should have no issues with this stuff. I realise that knowing how to get your ssqc data over into csqc is a completely separate headscratcher, but at least the halflife model stuff is easy.
you have full control over the time into the animations, so you have no excuse for not foot-syncing.

anyway, collisions are treated as no different from regular quake models, except I seriously doubt the hitmodel extension works with them. setsize and bboxes is all you get (in part because reverse engineering this model format is annoying).
there's no support for skeletal objects. mostly an oversight, but also lots of work that I don't care to do for such a gimmick feature.

if you want a more reliable, more portable model animation method, use iqm+skeletal objects, as those should work in DP too, and hopefully other engines if any others ever support csqc.
skeletal objects are much more powerful, but lack that 'retardedly basic' limitation.
Post Reply