This article details the four deathmatch player models that were released with Half-Life. It will give you an idea of polygon limits, how skins are set up, the skeleton, animations and multiplayer bitmap. It has specific information about 3D Studio Max and requires some experience with it to understand this information.
Player models are comparatively easy to make. You make the model, create a template for skin, paint the skin, apply Physique and fit it to the biped, export it, then compile it to an .mdl. Then you make your multiplayer bitmap. You don't need to make animations unless you'd like to modify the existing ones. Weapons are in separate files, and the game attaches them to the player's hand, in reference to the biped.
Here's some information before detailing each player model:
Models:
There are high and low resolution models for each deathmatch player, except for the human grunt, with additional textures for each. They are segmented models, with the arms and hands as separate pieces because of the twisting. There is a thumb, but only one 'finger' for the other four. Models are attached to the biped using Physique, a 3D Studio Max Modifier. Envelopes are not created and there is no blending between links. Be sure to assign vertices as rigid (green), not deformable (red). Bulge Angles and Tendons aren't used either.
Smoothing Groups:
Smoothing Groups can be used to help smooth edges or accent areas. The included images have assigned colors to each Smoothing Group to distinguish them and show where they are assigned to each model.
Skins:
The skins are 256 color .bmp files, with reserved team colors. There is no game palette so they can have their own 8-bit palette. They can be any size as long as they're powers of 2, such as 32, 64, 128, 256, and keep the total file size below 150k. Team colors will only work for a file called dm_base.bmp so be sure to name it that. Skins are set up as Multi/Sub-Object textures in 3D Studio Max. Parts of the skin are applied to specific faces of the model with the Edit Mesh Modifier. The UVW Mapping Modifier then adjusts the skin to line up correctly. For more details, see this Skin Texture tutorial, which also has information about Smoothing Groups.
Skeletons:
All the models use the same skeleton, and if you create a new model, yours will need to fit this skeleton. It is highly recommended to use Valve's biped since the skeleton shouldn't be altered much at all. It could produce unexpected errors and incorrect animations. There are extra bones for Gordon's pony tail, mouth, nose and eyes, but these are not used in deathmatch so you don't need to link any vertices to them. There are bones for a thumb, but only one set of bones for one 'finger' to cover the other four. There is only one toe for each foot. It's not recommended to resize the biped because it may negatively alter the animations. Plus it won't change the bounding box sizes so if the model is larger than the skeleton, it may clip into the walls.
Animations:
For each weapon there are reference animations set up at the extreme poses for standing and crouching, and aiming and shooting. In this example using the shotgun code, for the 'ref_aim_shotgun' sequence, aimup and aimdown poses are used with the 'blend' command. Since the spine has been set as a controller, the engine will interpolate between these reference poses and calculate the animation that happens in between. This also happens with the stand, walk and run animations. They are blended together with the shooting animations so the model can run and shoot at the same time.
| | | // shotgun $sequence ref_aim_shotgun "ref_aimdown_shotgun" "ref_aimup_shotgun" blend XR -45 45 fps 12 LOOP<br> $sequence ref_shoot_shotgun "ref_shootdown_shotgun" "ref_shootup_shotgun" blend XR -45 45 fps 15 { event 5021 0 "51" }
$sequence crouch_aim_shotgun "crouch_aimdown_shotgun" "crouch_aimup_shotgun" blend XR -45 45 fps 12 LOOP origin 0 0 18<br> $sequence crouch_shoot_shotgun "crouch_shootdown_shotgun" "crouch_shootup_shotgun" blend XR -45 45 fps 15 { event 5021 0 "51" } origin 0 0 18 |
Multiplayer Bitmap:
The Multiplayer Bitmap is a 256 color screenshot of the model which will be viewed from the game's Multiplayer Menu. Color sliders will choose the team colors, so the palette needs to have reserved areas for these. Note that they are reversed compared to DM_Base.bmp. Rows 11 and 12 of DM_Base.bmp will go in rows 13 and 14 of the multiplayer bitmap.
Gordon.bmp | Gordon Palette | | |
Here is each model's details:
Gordon
Model:
| | Low Res
362 polygons, 183 vertices | Low Res
colored Smoothing Groups | | | High Res
639 polygons, 343 vertices | High Res
colored Smoothing Groups |
Skins:
Gordon's DM_Base.bmp is the same as the one for Gina and the Helmeted Player. The helmet is in this skin, except for the chrome part.
DM_Face.bmp | DM_Face Palette | | |
DM_Base.bmp |
DM_Base Palette | | |
Gina
Model:
| | Low Res 373 polygons, 190 vertices | Low Res
colored Smoothing Groups | | | High Res 654 polygons, 344 vertices | High Res
colored Smoothing Groups |
Skins:
Gina uses a chrome texture for her hair-needles only in the high-res model.
DM_Face.bmp | DM_Face Palette | | |
DM_Base.bmp |
DM_Base Palette | | |
PLAYER_Chrome1.bmp | | | |
Helmeted Player
Model:
| | Low Res 325 polygons, 166 vertices | Low Res
colored Smoothing Groups | | | High Res 564 polygons, 293 vertices | High Res
colored Smoothing Groups |
Skins:
The Helmeted Player model uses a chrome texture for the visor of the helmet.
DM_Base.bmp | DM_Base Palette | | |
PLAYER_Chrome1.bmp | | | |
Human Grunt
Model:
| | Low Res 368 polygons, 199 vertices | Low Res
colored Smoothing Groups |
Skins:
The Human Grunt's textures are not in proportion to each other and wrap around the model instead of being applied flat. This makes it a more challenging skin.
DM_Base.bmp | DM_Base Palette | | |
Scientist
Model:
| | Low Res 380 polygons, 203 vertices | Low Res
colored Smoothing Groups | | | High Res 710 polygons, 369 vertices | High Res
colored Smoothing Groups |
Skins:
The Scientist is pretty straight forward. The extra textures at the bottom-right, of the DM_Base.bmp are for the sides of the torso and legs only for the low-res model. He coincidentally uses the same palette as Gordon and Gina, but that doesn't mean it needs to.
DM_Face.bmp | DM_Face Palette | | |
DM_Base.bmp |
DM_Base Palette | | |
Skeleton:
There are extra bones for Gordon's pony tail, mouth, nose and eyes, but these are not used in deathmatch so you don't need to link any vertices to them. There are bones for a thumb, but only one set of bones for one 'finger' to cover the other four. There is only one toe for each foot, although it's in 3 segments.
 |
 |
.qc file:
Attachment points are where effects are spawned from. These follow this format:
$attachment <#>
$attachment 0 "Bip01 R Hand" 20 2 5 X 1 $attachment 1 "Bip01 R Hand" 15 1.5 3.75 X 1 $attachment 2 "Bip01 R Hand" 30 3 7.5 X 1
Controllers are bones that are controlled by AI code and follow this format: $controller #
$controller 0 "Bip01 Spine" XR -30 30 $controller 1 "Bip01 Spine1" XR -30 30 $controller 2 "Bip01 Spine2" XR -30 30 $controller 3 "Bip01 Spine3" XR -30 30
Here's the bounding boxes around the bones of the skeleton in this format:
$hbox
$hbox 3 "Bip01 Pelvis" -4.69 -4.44 -6.75 4.00 5.56 6.75 $hbox 6 "Bip01 L Leg" 2.66 -3.69 -3.09 18.16 4.88 3.31 $hbox 6 "Bip01 L Leg1" 0.38 -3.97 -2.84 17.60 4.00 2.94 $hbox 6 "Bip01 L Foot" -0.59 -2.34 -2.63 3.79 8.00 2.19 $hbox 7 "Bip01 R Leg" 2.47 -3.69 -3.16 18.13 4.88 3.38 $hbox 7 "Bip01 R Leg1" 0.31 -3.97 -2.84 17.60 3.94 2.97 $hbox 7 "Bip01 R Foot" -0.56 -2.34 -2.19 3.81 8.00 2.66 $hbox 3 "Bip01 Spine1" -3.25 -5.50 -5.50 4.83 5.50 5.50 $hbox 2 "Bip01 Spine2" -0.06 -5.53 -7.59 8.00 7.00 7.59 $hbox 2 "Bip01 Spine3" -2.25 -6.81 -6.31 6.50 5.09 6.31 $hbox 2 "Bip01 Neck" -3.11 -1.50 -3.00 2.05 3.50 3.00 $hbox 1 "Bip01 Head" 0.09 -3.66 -3.00 8.41 5.09 3.00 $hbox 4 "Bip01 L Arm" 0.94 -2.88 -4.13 5.44 4.28 3.50 $hbox 4 "Bip01 L Arm1" -2.16 -2.34 -2.56 11.56 3.41 2.38 $hbox 4 "Bip01 L Arm2" 0.59 -1.81 -2.19 10.75 2.84 2.41 $hbox 4 "Bip01 L Hand" 0.00 -1.00 -2.00 3.00 1.50 3.50 $hbox 5 "Bip01 R Arm" 1.38 -2.84 -3.56 5.69 4.31 4.31 $hbox 5 "Bip01 R Arm1" -1.88 -2.47 -2.16 11.81 3.28 2.81 $hbox 5 "Bip01 R Arm2" 0.44 -1.97 -2.34 10.59 2.72 2.22 $hbox 5 "Bip01 R Hand" 0.00 -1.00 -2.00 3.00 1.50 3.50
Animations:
All are 31 frames (0-30) except where noted. The first and last frames are the same so it loops, except for the death animations.
new_idle2 new_idle - 41 frames new_idle3 new_run - 22 frames new_walk - 24 frames shoot_2handed - 7 frames crouch_moveforward crouch_idle player_jump - 33 frames player_longjump - 37 frames player_swim - 27 frames player_treadwater - 32 frames ref_run - 22 frames ref_walk - 24 frames ref_aimdown_twohanded ref_aimup_twohanded ref_shootdown_twohanded - 7 frames ref_shootup_twohanded - 13 frames ref_aimdown_onehanded ref_aimup_onehanded ref_shootdown_onehanded - 8 frames ref_shootup_onehanded - 8 frames |
// death animations
die_simple - 19 frames die_backward - 24 frames player_die2 - 36 frames player_die1 - 18 frames die_headshot - 27 frames player_die3 - 21 frames die_gutshot - 37 frames
// dead poses
dead_pose_back - 2 frames dead_pose_sitting - 2 frames dead_pose_stomach - 2 frames dead_pose_table |
// weapon animations // crowbar, grenade
ref_aimdown_crowbar ref_aimup_crowbar ref_swingdown_crowbar - 13 frames ref_swingup_crowbar - 13 frames crouch_aimdown_crowbar crouch_aimup_crowbar crouch_swingdown_crowbar - 11 frames crouch_swingup_crowbar - 11 frames // tipmines, satchel
ref_aimdown_trip ref_aimup_trip ref_placedown_trip - 13 frames ref_placeup_trip - 13 frames crouch_aimdown_trip crouch_aimup_trip crouch_placedown_trip - 13 frames crouch_placeup_trip - 15 frames
// 9mm
ref_aimdown_onehanded ref_aimup_onehanded ref_shootdown_onehanded - 8 frames ref_shootup_onehanded - 8 frames crouch_aimdown_onehanded crouch_aimup_onehanded crouch_shootdown_onehanded - 8 frames crouch_shootup_onehanded - 8 frames // python
ref_aimdown_onehanded ref_aimup_onehanded ref_shootdown_python - 8 frames ref_shootup_python - 8 frames crouch_aimdown_onehanded crouch_aimup_onehanded crouch_shootdown_python - 8 frames crouch_shootup_python - 8 frames // shotgun
ref_aimdown_shotgun ref_aimup_shotgun ref_shootdown_shotgun - 7 frames ref_shootup_shotgun - 7 frames crouch_aimdown_shotgun crouch_aimup_shotgun crouch_shootdown_shotgun - 8 frames crouch_shootup_shotgun - 8 frames // gauss
ref_aimdown_guass ref_aimup_guass ref_shootdown_guass - 8 frames ref_shootup_guass - 8 frames crouch_aimdown_guass crouch_aimup_guass crouch_shootdown_guass - 8 frames crouch_shootup_guass - 8 frames | // mp5
ref_aimdown_mp5 ref_aimup_mp5 ref_shootdown_mp5 - 4 frames ref_shootup_mp5 - 3 frames crouch_aimdown_mp5 crouch_aimup_mp5 crouch_shootdown_mp5 - 3 frames crouch_shootup_mp5 - 3 frames // rpg
ref_aimdown_rpg ref_aimup_rpg ref_shootdown_rpg - 16 frames ref_shootup_rpg - 16 frames crouch_aimdown_rpg crouch_aimup_rpg crouch_shootdown_rpg - 16 frames crouch_shootup_rpg - 16 frames // egon
ref_aimdown_egon ref_aimup_egon crouch_aimdown_egon crouch_aimup_egon // squeak
ref_aimdown_squeak ref_aimup_squeak ref_shootdown_squeak - 13 frames ref_shootup_squeak - 13 frames crouch_aimdown_squeak - 30 frames crouch_aimup_squeak - 30 frames crouch_shootdown_squeak - 13 frames crouch_shootup_squeak - 13 frames // hive ref_aimdown_hive ref_aimup_hive ref_shootdown_hive - 4 frames ref_shootup_hive - 5 frames crouch_aimdown_hive crouch_aimup_hive crouch_shootdown_hive - 5 frames crouch_shootup_hive - 5 frames
// crossbow ref_aimdown_bow ref_aimup_bow crouch_aimdown_bow crouch_aimup_bow |
Thanks to UrbaNomad for helping prepare the pictures and information for this page. |