Giter Club home page Giter Club logo

halflife-unified-sdk-assets's Introduction

Half-Life Unified SDK Assets

This repository contains source files for Half-Life Unified SDK assets. This covers the following asset types:

  • Configuration files (.cfg, .json, .scr.install, .txt)
  • Event files (.sc)
  • FGDs (.fgd)
  • Graphics resources (.tga)
  • Icons (.ico, .tga)
  • Installer files (.json)
  • Maps (.rmf, .map, .rad, .jmf, .ent, .res)
  • Models (.qc, .qci, .smd, .bmp, .max)
  • Plugin and map scripts (.as)
  • Resource files (.txt)
  • Scripts (.bat, .sh, .ps1, .csx, and related files)
  • Sound files (.wav, .aup3)
  • Sprites (.qc, .qci, .bmp, .txt)
  • Text files (.txt)
  • WADs (.bmp)

Directory structure:

  • campaignsrc
  • cfgsrc
  • eventsrc
  • fgdsrc
  • gfxsrc
  • guides
  • iconsrc
  • installersrc
  • mapsrc
  • modelsrc
  • pluginsrc
  • resourcesrc
  • scripts
  • scriptsrc
  • soundsrc
  • spritesrc
  • textsrc
  • tools
  • wadsrc

Directories are named <asset type in singular form>src.

Assets consisting of multiple files should be stored in a subdirectory under the directory for their asset type. For example a map called cs_office should have all of its files stored under mapsrc/cs_office.

Scripts used in the assets repository itself are located in the scripts directory.

Guides covering how to compile assets are located in the guides directory.

License

The contents of this repository are licensed under the MIT license, with the exception of assets that were originally made by Valve which are covered by the Half-Life SDK license.

The following directories fall under the Half-Life SDK license:

  • fgdsrc
  • gfxsrc
  • modelsrc
  • resourcesrc
  • soundsrc
  • spritesrc
  • textsrc
  • tools

halflife-unified-sdk-assets's People

Contributors

malortie avatar samvanheer avatar

Stargazers

Joël Troch avatar Nin10doGMod avatar FailCake avatar Mts avatar Lucas avatar Terry Nguyen avatar

Watchers

 avatar  avatar Nin10doGMod avatar

halflife-unified-sdk-assets's Issues

Create M249 viewmodels

Low definition:

  • HEV hand
  • Guard hand

High definition:

  • HEV hand
  • Guard hand
  • Soldier hand

Create Crossbow viewmodels.

LD HL1 <-> LD Op4

  • same crossbow meshes
  • different hitboxes
  • same bodygroups
  • same textures
  • same sequences and fps

LD HL1 <-> LD Blue Shift

  • same crossbow meshes
  • different hitboxes
  • same bodygroups
  • same textures
  • same sequences and fps

HD HL1 <-> HD Op4

  • same crossbow meshes
  • different hitboxes
  • same bodygroups
  • same textures
  • same sequences and fps

HD HL1 <-> HD Blue Shift

  • same crossbow meshes
  • different hitboxes
  • same bodygroups
  • same textures
  • same sequences and fps

Low definition:

  • HEV hand
  • Guard hand
  • Soldier hand

High definition:

  • HEV hand
  • Guard hand
  • Soldier hand

Additional information

1 - The HD Op4 v_crossbow_reference.bmp is 256x256 while HD HL1/Blue Shift are 296x255. The left area of the HD HL1/Blue Shift textures are only repeated after the right area. The HD Op4 texture has been used since it's power of 2.

2 - The LD Op4 model has the right arm while the other LD variants don't. It has been removed.

3 - All HD variants have the right arm. They have been removed.

4 - All HD variants sequence idle2 are motionless. It might have been intended to be this way but I replaced the sequence with idle1 sequence and moved the string in unloaded position. FPS was made 3x faster so it has the same duration as in the original LD animation.

5 - All HD variants fidget2 sequences appear to be identical to sequence fire3. Because idle1 has the same number of frames and fps as the original LD, it is currently used as a base for fidget2 until a proper sequence is made. See #20 .

6 - All HD variants draw2 and holster2 sequences have the string in loaded position while it should be unloaded. They also have clip bolts which should not be here. This has been fixed.

7 - The clip bolts are visible in HD fire3 sequence. They should not be here since this is the fire on empty sequence. This has been fixed.

8 - The original LD HEV hand back has no faces. This is noticeable in sequence fidget2 - frame 34. The LD Python hand reference has been used as a base.

9 - The new models have been tested in game. No issue has been found.

Add Otis sequences to Barney LD/HD models + other improvements.

Add the following Otis sequences:

  • fence (otis_fence)
  • wave (otis_wave)
  • dead_sitting
  • cowering
  • range_fire (otis_range_fire)
  • otis_dumped
  • otis_dumped_idle

Additional information

1 - For otis_range_fire, the following changes are made:

  • Use barney/ba_attack2.wav instead of weapons/de_shot1.wav
  • 5001 replaced by 1003 (likely used to fire event)
  • Renamed otis_miss to barn_miss so they can fire different triggers

2 - HD Barney shoot_gun sequence fingers pose have been applied to otis_range_fire so the hand fingers are rotated.

3 - LD Barney had duplicate gun holster polygons in Gun-Hlstr mesh. It was removed.

4 - BARNEY-X_Template_Biped(Gun)1 has a different hand mesh than the ones used when holstered. It appeared on top of the default hand mesh.

I decided to keep the default mesh and adjusted the gun position. Having the same hand meshes across all 3 submodels will be easier to maintain.

5 - Gun-Hlstr mesh normals were flipped. They were unflipped.

6 - sit1 sequence has a vertex glitch on the upper right arm at frame 65. This happened because the vertex is parented to Bip01 Spine2 instead of Bip01 R Arm. This has been fixed.

7 - Original HL1 HD Barney has glitchy mouth vertices. I changed the model to use the The Op4 HD version, which doesn't have that issue. The Op4 HD textures are slightly brighter though.

8 - Hitboxes were tweaked. Several hitboxes were added for HD Barney fingers.

Create valid sequences for unused HD zombie sequences.

Convert the following zombie sequences to HD to replace the dummy sequences.

Note: Those sequences are unused in HL1, Op4, Blue Shift.

  • busting_through_wall
  • c2a3_snack_getup
  • deadidle
  • deadwall
  • eat_to_stand
  • falling
  • zombie_eating
  • zombie_pull_scientist

Create shared Male BlackOps models.

LD Op4 <-> HD Op4

  • same meshes, except MP5/M4
  • same bodygroups
  • same bone controllers
  • same attachments
  • same hitboxes
  • same sequences and fps
  • same textures except for MP5/M4

  • Create strafeleft_cine for scripted sequences
  • Create straferight_cine for scripted sequences

Add the following HL1 grunt sequences :

  • leftlegsmflinch
  • rightlegsmflinch
  • rightarmflinch
  • leftarmflinch
  • 180L
  • 180R
  • dragholeidle
  • draghole
  • bustwall
  • hoprail
  • converse1
  • converse2
  • startleleft
  • startleright
  • divecover
  • defuse
  • corner1
  • corner2
  • stone_toss
  • cliffdie
  • diveaside_idle
  • diveaside
  • kneeldive_idle
  • kneeldive
  • WM_button
  • WM_moatjump
  • bustwindow
  • dragleft
  • dragright
  • trackwave
  • trackdive
  • flyback
  • impaled
  • jumptracks
  • pipetoss
  • plunger

Add the following Blue Shift grunt sequences :

  • soldier_dump
  • soldier_dump_idle
  • soldier_shoot_ahead
  • soldier_kick

Additional information

1 - LD/HD meshes are identical except for the MP5/M4.

2 - The original model head meshes are identical. The head was merged with the body and head textures were placed as skin families. This will allow mappers to choose different skins, even with the night vision goggles.

3 - The original model does not include arms and legs flinch sequences:

  • leftlegsmflinch
  • rightlegsmflinch
  • rightarmflinch
  • leftarmflinch

The code supports playing flinch schedules so they were added.

4 - Grunt and massn have compatible skeleton but the massn's shoulders are closer to spine due to different volume. I tried to rig massn mesh on top of the grunt skeleton but the wider distance of the grunt shoulders cause the massn shoulders to stick out of the torso. Separate animations are maintained for the massn.

5 - The model strafeleft and straferight sequences are missing motion extraction LX/LY options. The grunt has those options. They were added so they can be used by AI if needed.

6 - strafeleft_cine and straferight_cine sequences have been added to be played in of5a1.bsp without motion extraction.

7 - The massn's MP5 is darker and has a different mesh compared to default grunt MP5. For consistency, the default grunt MP5 mesh has been used.

8 - The original model gun attachment is positioned at the tip of the grenade launcher rather than the main barrel. The grunt's gun attachment was used as a reference.

9 - The LD/HD MP5 bone are not at the same position. The shared HD grunt M4 has been rigged on top of LD skeleton.

10 - Custom grunt sequences were added to allow mappers to use them with massn.

11 - Hitboxes were reworked. The shared grunt hitboxes were used as a base.

12 - Some mesh UVs were reworked. Sharp edges were reworked too.

Map changes

See #27 in maps:

  • All maps (Adjust Male BlackOps heads)
  • of5a1.bsp (Male BlackOps Strafe left/right sequences)

Create Blue Shift player model

  • Create player model

Important:

Due to the way regular Barney model was originally made, several areas had to be reworked to get better mesh deformation in animations. This was done while preserving the model appearance.

Notes:

  • HL1 and Blue Shift player.mdl data is identical, so they have the same hitboxes.
  • Blue Shift barney.mdl was used for player model.
  • Hands from HL1 multiplayer barney.mdl were used so they can be animated like the default HEV player.mdl.
  • All bone controllers are functional.

Create shared Civilian scientist model.

  • Create shared civilian model with:
    • default LD scientist body mesh
    • Blue Shift LD scientist body mesh
    • HD blue shirt body mesh
  • Add all shared scientist sequences
  • Add shared scientist bone controllers
  • Add clipboard and headcrab stick bodygroups
  • Use same hitboxes as shared scientist LD/HD

Additional information

LD civilian uses the same mesh as the default scientist model. The same scientist.mdl model is used for HL1 and Blue Shift LD variants.

Original HD civilian model have slightly different bone lengths. To avoid having to maintain separate SMD animations, the model has been rigged onto the HD scientist skeleton. Animations were converted so they use the correct bone length.

Game model meshes examples.

Example 1: HD houndeye - HL1 / Gearbox+Blue Shift

HL1:

houndeye_hd_hl1_lod1

Op4+Blue Shift

houndeye_hd_op4_bshift_lod0

HL1 (leg):

houndeye_hd_hl1_lod1_leg

Op4+Blue Shift (leg):

houndeye_hd_op4_bshift_lod0_leg

Example 2: LD scientist - HL1 / Blue Shift

HL1:

scientist_mesh_ld_hl1

Blue Shift

scientist_mesh_ld_bshift

Remove seams in guard viewmodels hand textures.

In Blue Shift viewmodels, the hand meshes have several UVs misaligned with the hand texture, which causes seams.

This is visible notably in HD versions, which have a lower resolution hand texture.

Create shared Houndeye model.

LD HL1 <-> LD Op4 <-> LD Blue Shift

  • same mesh
  • same skin families
  • same hitboxes
  • same sequences for those available
  • same sequences fps
  • same bone hierarchy
  • same textures

HD HL1 <-> HD Op4 <-> HD Blue Shift

  • same skin families
  • same sequences for those available
  • same sequences fps
  • same textures
  • HL1 has less polygons than Op4 and Blue Shift
  • HL1 has extra bone Bone01
  • slightly different hitboxes

Add the following Opposing Force sequences from houndeye_dead.mdl :

  • dead

Add the following Blue Shift sequences :

  • eat_barney
  • eat_barney_loop

Additional information

1 - Op4 and Blue Shift HD use the same mesh named 'lod0' which has more polygons than 'lod1' used for HL1 HD. The 'lod0' mesh has been used for the new model.

2 - The HL1 HD has a custom bone Bone01. It has been rigged on top of the new mesh so animators can use it if needed.

3 - The mouth is glitchy in sequence sleep. This happens because the mouth vertices don't follow Bip01 Head, so when the head is rotated too much inward, the mouth vertices end up sticking out. This glitch also happens in other sequences but is less visible when the model is running.

I tried to change the mouth vertices weight to follow the head, but it ended up clipping inward the chest, causing rigid mesh deformation.

It would technically be possible to make it work with multiple weights per vertex (blending), but HL1 only supports single weight.

4 - Original LD and HD use hitgroup 0 (HITGROUP_GENERIC). Correct hitgroups have been added for the new models.

5 - Several hitboxes have been tweaked.

6 - The Op4 LD houndeye_dead.mdl left arm is clipping through the ground. This model is used by monster_houndeye_dead, which only appears in of4a1 (first Voltigore encounter). It works correctly for the most part because of the terrain slope, but wouldn't work on an horizontal straight floor. I manually edited the sequence so the arm wouldn't clip through the ground.

7 - The Op4 HD houndeye_dead.mdl 'dead' sequence does not have the same pose as the LD one. I replaced it with the LD one. I slightly rotated the arms because it would clip inside the chest due to different model volume.

Create shared skeleton model.

skeleton.mdl has no HD variant.

LD HL1 <-> LD Op4

  • same mesh
  • same textures, but HL1's are brighter
  • slightly different hitboxes
  • same sequences and fps for those available

LD HL1 <-> LD Blue Shift

  • Identical

Add the following Opposing Force sequences:

  • dead_against_wall
  • dead_stomach

Additional information

1 - Op4 skeleton has named bones while HL1 doesn't. The Op4 skeleton and sequences were used as a base.

2 - HL1 skeleton textures are brighter than Op4. The HL1 textures were used.

3 - Hitboxes have been reworked.

4 - Original model all use hitgroup 0 (HITGROUP_GENERIC). Correct hitgroups have been added for the new models.

5 - Various issues with the original model were fixed, notably flipped normals, uncapped surfaces, asymmetrical clavicle mesh, asymmetrical bone positions for forearms and fingers.

6 - Some bone weights were reworked.

7 - Sequences have been patched to ensure consistent bone length. Some sequences were also reworked in Blender to fix hands clipping through floor.

Create shared zombies models.

Zombie LD:

  • Identical across all games .
  • Blue Shift features 4 additional sequences.

Zombie Barney LD:

  • No custom sequence.

Zombie soldier LD:

  • Features 5 custom sequences.

Zombie HD:

  • Identical across all games.
  • Already have Blue Shift sequences.

Add the following Opposing Force sequences:

  • dead_on_back
  • dead_on_stomach
  • throw_scientist
  • get_off_table
  • table_breathe

Add the following Blue Shift sequences:

  • left_tug
  • left_tug_idle
  • right_tug
  • right_tug_idle

2023-07-15

Zombie barney has no HD variant.
Zombie soldier has no HD variant.

LD HL1 zombie.mdl <-> LD Op4 zombie_barney.mdl

  • Same height
  • Different meshes
  • Same bones for those available
  • Same bone orientations
  • Compatible bone hierarchy
  • Same hitboxes
  • Same hitgroups
  • Same sequences and fps

LD HL1 zombie.mdl <-> LD Op4 zombie_soldier.mdl

  • Different height
  • Different meshes
  • Same bone orientations
  • Different bone length
  • Compatible bone hierarchy
  • Different hitgroups
  • Different hitboxes
  • Same sequences for those available
  • Same sequence fps for those available, except walk which is 28 fps in zombie soldier

LD HL1 zombie.mdl <-> LD Blue Shift zombie.mdl

  • Same height
  • Same meshes
  • Same skin families
  • Same hitboxes
  • Same hitgroups
  • Same textures
  • Same sequences and fps for those available

LD HL1 zombie.mdl <-> HD HL1 zombie.mdl

  • Different height
  • Different bone lengths
  • Same bone orientations except: Bone01, Bone07
  • Same bone hierarchy
  • Same hitboxes
  • Same hitgroups
  • Same sequences for those available (except dummy sequences)
  • Different fps for some sequences

HD HL1 zombie.mdl <-> HD Blue Shift zombie.mdl

  • Binary equal

Additional information

LD HL1 zombie reference is scaled down compared to animations

HD HL1 zombie is slightly taller in height than LD HL1 zombie

HD HL1 zombie has additional bones for maw and headcrab arms

HD HL1 zombie has additional sequences (also found in Blue Shift HD zombie.mdl):
  • left_tug
  • left_tug_idle
  • right_tug
  • right_tug_idle
HD HL1 zombie has dummy (empty) sequences:
  • busting_through_wall
  • c2a3_snack_getup
  • deadidle
  • deadwall
  • eat_to_stand
  • falling
  • zombie_eating
  • zombie_pull_scientist

Zombie barney has additional bones for maw

Zombie soldier is taller in height than LD HL1 zombie

Zombie soldier has all hitgroup 0

Zombie soldier has additional hitboxes

Zombie soldier has additional bones for maw

Zombie soldier is missing many zombie sequences:
  • pause
  • busting_through_wall
  • kick_punch_wall
  • bust_window
  • soda
  • slideidle
  • slidewall
  • ventclimbidle
  • ventclimb
  • deadidle
  • deadwall
  • freakdie
  • freak
  • eatbodytable
  • eatbody
  • eatbodystand
  • ripdoor
  • zombie_pull_scientist
  • zombie_eating
  • eat_to_stand
  • vent_zidle
  • vent_c1a3
  • haulzombie
  • c2a3_snack_getup
Zombie soldier has additional sequences:
  • dead_on_back
  • dead_on_stomach
  • throw_scientist
  • get_off_table
  • table_breathe
LD Blue Shift zombie has additional sequences:
  • left_tug
  • left_tug_idle
  • right_tug
  • right_tug_idle

Main game different models overview.

A binary comparaison has been made against all models with either LD and their associated HD version.

Present means whether or not the model is present in the game models directory.
Identical means whether or not the model is identical across all games.

LD version results
                            |  Valve  | Gearbox | BShift  |           |
                            -------------------------------------------
                            | present | present | present | identical |
                            -------------------------------------------
abone_template1.mdl         |    X    |         |    X    |     X     |
aflock.mdl                  |    X    |         |    X    |     X     |
agibs.mdl                   |    X    |         |    X    |     X     |
agrunt.mdl                  |    X    |         |    X    |     X     |
agrunt01.mdl                |    X    |         |    X    |     X     |
agruntt.mdl                 |    X    |         |    X    |     X     |
apache.mdl                  |    X    |         |    X    |     X     |
apachet.mdl                 |    X    |         |    X    |     X     |
archer.mdl                  |    X    |         |    X    |     X     |
ba_holo.mdl                 |         |         |    X    |     X     |
baby_headcrab.mdl           |    X    |         |    X    |     X     |
baby_strooper.mdl           |         |    X    |         |     X     |
baby_voltigore.mdl          |         |    X    |         |     X     |
ball.mdl                    |         |         |    X    |     X     |
barnacle.mdl                |    X    |         |    X    |     X     |
barnaclet.mdl               |    X    |         |    X    |     X     |
barney.mdl                  |    X    |    X    |    X    |           |
barney_helmet.mdl           |         |         |    X    |     X     |
barney_vest.mdl             |         |         |    X    |     X     |
barney01.mdl                |    X    |         |    X    |           |
barney02.mdl                |    X    |         |    X    |           |
barney03.mdl                |    X    |         |    X    |           |
barney04.mdl                |         |         |    X    |     X     |
barney05.mdl                |         |         |    X    |     X     |
barney06.mdl                |         |         |    X    |     X     |
barneyt.mdl                 |    X    |         |    X    |     X     |
base.mdl                    |    X    |         |    X    |     X     |
base_flag.mdl               |         |         |    X    |     X     |
big_mom.mdl                 |    X    |         |    X    |     X     |
big_momgibs.mdl             |    X    |         |    X    |     X     |
big_momt.mdl                |    X    |         |    X    |     X     |
big_rock.mdl                |    X    |         |    X    |     X     |
bigrat.mdl                  |    X    |         |    X    |     X     |
bleachbones.mdl             |    X    |         |    X    |     X     |
blkop_apache.mdl            |         |    X    |         |     X     |
blkop_apachet.mdl           |         |    X    |         |     X     |
blkop_bodygibs.mdl          |         |    X    |         |     X     |
blkop_dead_osprey.mdl       |         |    X    |         |     X     |
blkop_enginegibs.mdl        |         |    X    |         |     X     |
blkop_osprey.mdl            |         |    X    |         |     X     |
blkop_ospreyt.mdl           |         |    X    |         |     X     |
blkop_tailgibs.mdl          |         |    X    |         |     X     |
bm_leg.mdl                  |    X    |         |    X    |     X     |
bm_sack.mdl                 |    X    |         |    X    |     X     |
bm_shell.mdl                |    X    |         |    X    |     X     |
boid.mdl                    |    X    |         |    X    |     X     |
bonegibs.mdl                |    X    |         |    X    |     X     |
bookgibs.mdl                |    X    |         |    X    |     X     |
breather.mdl                |    X    |         |    X    |     X     |
bskull_template1.mdl        |    X    |         |    X    |     X     |
bullsquid.mdl               |    X    |         |    X    |     X     |
bullsquid01.mdl             |    X    |         |    X    |     X     |
bullsquidt.mdl              |    X    |         |    X    |     X     |
cactusgibs.mdl              |    X    |         |    X    |     X     |
can.mdl                     |    X    |         |    X    |     X     |
catwalkgibs.mdl             |    X    |         |    X    |     X     |
ceilinggibs.mdl             |    X    |         |    X    |     X     |
chair.mdl                   |         |         |    X    |     X     |
chromegibs.mdl              |    X    |         |    X    |     X     |
chumtoad.mdl                |    X    |         |    X    |           |
cindergibs.mdl              |    X    |         |    X    |     X     |
cindergibs_green.mdl        |    X    |         |    X    |     X     |
cindergibs_yellow.mdl       |    X    |         |    X    |     X     |
civ_coat_scientist.mdl      |         |         |    X    |     X     |
civ_coat_scientist01.mdl    |         |         |    X    |     X     |
civ_paper_scientist.mdl     |         |         |    X    |     X     |
civ_paper_scientist01.mdl   |         |         |    X    |     X     |
civ_scientist.mdl           |         |         |    X    |     X     |
civ_scientist01.mdl         |         |         |    X    |     X     |
civ_stand.mdl               |         |    X    |         |     X     |
cleansuit_scientist.mdl     |         |    X    |         |     X     |
cleansuit_scientist01.mdl   |         |    X    |         |     X     |
cleansuit_scientist02.mdl   |         |    X    |         |     X     |
computergibs.mdl            |    X    |         |    X    |     X     |
concrete_gibs.mdl           |    X    |         |    X    |     X     |
concretegibs.mdl            |    X    |         |    X    |     X     |
console_civ_scientist.mdl   |         |         |    X    |     X     |
console_civ_scientist01.mdl |         |         |    X    |     X     |
construction.mdl            |    X    |         |    X    |     X     |
controller.mdl              |    X    |         |    X    |     X     |
controllert.mdl             |    X    |         |    X    |     X     |
crashed_osprey.mdl          |         |    X    |         |     X     |
crossbow_bolt.mdl           |    X    |         |    X    |     X     |
crystal.mdl                 |    X    |         |    X    |     X     |
dead_barney.mdl             |         |         |    X    |     X     |
dead_barney01.mdl           |         |         |    X    |     X     |
dead_osprey.mdl             |    X    |         |    X    |     X     |
deadhaz.mdl                 |         |    X    |         |     X     |
drill.mdl                   |         |    X    |         |     X     |
egg.mdl                     |         |    X    |         |     X     |
filecabinet.mdl             |    X    |         |    X    |     X     |
flag.mdl                    |         |    X    |         |     X     |
fleshgibs.mdl               |    X    |         |    X    |     X     |
floater.mdl                 |    X    |         |    X    |     X     |
forklift.mdl                |    X    |         |    X    |     X     |
friendly.mdl                |    X    |         |    X    |     X     |
fungus(large).mdl           |    X    |         |    X    |     X     |
fungus(large)t.mdl          |    X    |         |    X    |     X     |
fungus(small).mdl           |    X    |         |    X    |     X     |
fungus(small)t.mdl          |    X    |         |    X    |     X     |
fungus.mdl                  |    X    |         |    X    |     X     |
fungust.mdl                 |    X    |         |    X    |     X     |
garbagegibs.mdl             |    X    |         |    X    |     X     |
garg.mdl                    |    X    |         |    X    |     X     |
gargt.mdl                   |    X    |         |    X    |     X     |
gasbag.mdl                  |    X    |         |    X    |     X     |
geneworm.mdl                |         |    X    |         |     X     |
gib_b_bone.mdl              |    X    |         |    X    |     X     |
gib_b_gib.mdl               |    X    |         |    X    |     X     |
gib_hgrunt.mdl              |    X    |         |    X    |     X     |
gib_legbone.mdl             |    X    |         |    X    |     X     |
gib_lung.mdl                |    X    |         |    X    |     X     |
gib_skull.mdl               |    X    |         |    X    |     X     |
glassgibs.mdl               |    X    |         |    X    |     X     |
gman.mdl                    |    X    |    X    |    X    |           |
gmant.mdl                   |    X    |         |    X    |     X     |
gonome.mdl                  |         |    X    |         |     X     |
gordon.mdl                  |         |    X    |         |     X     |
gordon_scientist.mdl        |         |         |    X    |     X     |
gordon_scientistt.mdl       |         |         |    X    |     X     |
gordon_suit.mdl             |         |         |    X    |     X     |
grenade.mdl                 |    X    |         |    X    |     X     |
gun_mag.mdl                 |         |         |    X    |     X     |
hair.mdl                    |    X    |         |    X    |     X     |
hairt.mdl                   |    X    |         |    X    |     X     |
hassassin.mdl               |    X    |    X    |    X    |           |
hassassint.mdl              |    X    |         |    X    |     X     |
headcrab.mdl                |    X    |    X    |    X    |           |
headcrabt.mdl               |    X    |         |    X    |     X     |
hgibs.mdl                   |    X    |         |    X    |     X     |
hgrunt.mdl                  |    X    |         |    X    |           |
hgrunt_medic.mdl            |         |    X    |         |     X     |
hgrunt_medic01.mdl          |         |    X    |         |     X     |
hgrunt_opfor.mdl            |         |    X    |         |     X     |
hgrunt_opfor01.mdl          |         |    X    |         |     X     |
hgrunt_opfor02.mdl          |         |    X    |         |     X     |
hgrunt_opfor03.mdl          |         |    X    |         |     X     |
hgrunt_opfor04.mdl          |         |    X    |         |     X     |
hgrunt_torch.mdl            |         |    X    |         |     X     |
hgrunt_torch01.mdl          |         |    X    |         |     X     |
hgrunt_torch02.mdl          |         |    X    |         |     X     |
hgrunt01.mdl                |    X    |         |    X    |           |
hgrunt02.mdl                |    X    |         |    X    |           |
hgrunt03.mdl                |    X    |         |    X    |           |
hgruntt.mdl                 |    X    |         |    X    |           |
holo.mdl                    |    X    |         |    X    |           |
hornet.mdl                  |    X    |         |    X    |     X     |
houndeye.mdl                |    X    |         |    X    |           |
houndeye_dead.mdl           |         |    X    |         |     X     |
houndeyet.mdl               |    X    |         |    X    |     X     |
hvr.mdl                     |    X    |         |    X    |     X     |
icky.mdl                    |    X    |         |    X    |     X     |
ickyt.mdl                   |    X    |         |    X    |     X     |
in_teleport.mdl             |    X    |         |    X    |     X     |
intro_barney.mdl            |         |         |    X    |     X     |
intro_barney01.mdl          |         |         |    X    |     X     |
intro_commander.mdl         |         |    X    |         |     X     |
intro_medic.mdl             |         |    X    |         |     X     |
intro_otis.mdl              |         |         |    X    |     X     |
intro_otis01.mdl            |         |         |    X    |     X     |
intro_regular.mdl           |         |    X    |         |     X     |
intro_saw.mdl               |         |    X    |         |     X     |
intro_torch.mdl             |         |    X    |         |     X     |
islave.mdl                  |    X    |    X    |    X    |           |
islave_gibs1.mdl            |    X    |         |    X    |     X     |
islave01.mdl                |    X    |    X    |    X    |           |
islave02.mdl                |    X    |    X    |    X    |           |
islavet.mdl                 |    X    |         |    X    |     X     |
kingpin.mdl                 |    X    |         |    X    |     X     |
kosobar.mdl                 |         |    X    |         |     X     |
leech.mdl                   |    X    |         |    X    |     X     |
light.mdl                   |    X    |         |    X    |     X     |
lightt.mdl                  |    X    |         |    X    |     X     |
loader.mdl                  |    X    |    X    |    X    |           |
massn.mdl                   |         |    X    |         |     X     |
massn01.mdl                 |         |    X    |         |     X     |
massn02.mdl                 |         |    X    |         |     X     |
mbarrel.mdl                 |    X    |         |    X    |     X     |
mechgibs.mdl                |    X    |         |    X    |     X     |
med_crategibs.mdl           |    X    |         |    X    |     X     |
metalgibs.mdl               |    X    |         |    X    |     X     |
metalplategibs.mdl          |    X    |         |    X    |     X     |
metalplategibs_dark.mdl     |    X    |         |    X    |     X     |
metalplategibs_green.mdl    |    X    |         |    X    |     X     |
mil_crate.mdl               |    X    |         |    X    |     X     |
mil_crategibs.mdl           |    X    |         |    X    |     X     |
mil_stand.mdl               |         |    X    |         |     X     |
mini_apache.mdl             |         |    X    |    X    |     X     |
mini_osprey.mdl             |         |    X    |         |     X     |
mini_osprey_bodygibs.mdl    |         |    X    |         |     X     |
mini_osprey_enginegibs.mdl  |         |    X    |         |     X     |
mini_osprey_tailgibs.mdl    |         |    X    |         |     X     |
miniturret.mdl              |    X    |         |    X    |     X     |
miniturrett.mdl             |    X    |         |    X    |     X     |
mortar.mdl                  |         |    X    |         |     X     |
mortarshell.mdl             |         |    X    |         |     X     |
nuke_button.mdl             |         |    X    |         |     X     |
nuke_case.mdl               |         |    X    |         |     X     |
nuke_timer.mdl              |         |    X    |         |     X     |
office_gibs.mdl             |    X    |         |    X    |     X     |
osprey.mdl                  |    X    |    X    |    X    |           |
osprey_bodygibs.mdl         |    X    |         |    X    |     X     |
osprey_enginegibs.mdl       |    X    |         |    X    |     X     |
osprey_tailgibs.mdl         |    X    |         |    X    |     X     |
ospreyt.mdl                 |    X    |         |    X    |     X     |
otis.mdl                    |         |    X    |    X    |           |
otis01.mdl                  |         |    X    |    X    |           |
otis02.mdl                  |         |    X    |         |     X     |
otis03.mdl                  |         |    X    |         |     X     |
out_teleport.mdl            |    X    |         |    X    |     X     |
outro_crowbar.mdl           |         |         |    X    |     X     |
p_357.mdl                   |    X    |         |    X    |     X     |
p_9mmar.mdl                 |    X    |         |    X    |     X     |
p_9mmhandgun.mdl            |    X    |         |    X    |     X     |
p_bgrap.mdl                 |         |    X    |         |     X     |
p_crossbow.mdl              |    X    |         |    X    |     X     |
p_crowbar.mdl               |    X    |         |    X    |     X     |
p_desert_eagle.mdl          |         |    X    |         |     X     |
p_displacer.mdl             |         |    X    |         |     X     |
p_egon.mdl                  |    X    |         |    X    |     X     |
p_gauss.mdl                 |    X    |         |    X    |     X     |
p_glock.mdl                 |    X    |         |    X    |     X     |
p_grenade.mdl               |    X    |         |    X    |     X     |
p_hgun.mdl                  |    X    |         |    X    |     X     |
p_knife.mdl                 |         |    X    |         |     X     |
p_m40a1.mdl                 |         |    X    |         |     X     |
p_penguin.mdl               |         |    X    |         |     X     |
p_pipe_wrench.mdl           |         |    X    |         |     X     |
p_rpg.mdl                   |    X    |         |    X    |     X     |
p_satchel.mdl               |    X    |         |    X    |     X     |
p_satchel_radio.mdl         |    X    |         |    X    |     X     |
p_saw.mdl                   |         |    X    |         |     X     |
p_shock.mdl                 |         |    X    |         |     X     |
p_shotgun.mdl               |    X    |         |    X    |     X     |
p_spore_launcher.mdl        |         |    X    |         |     X     |
p_squeak.mdl                |    X    |         |    X    |     X     |
p_tripmine.mdl              |    X    |         |    X    |     X     |
pelvis.mdl                  |    X    |         |    X    |     X     |
pipe_bubbles.mdl            |    X    |         |    X    |     X     |
pit_drone.mdl               |         |    X    |         |     X     |
pit_drone_gibs.mdl          |         |    X    |         |     X     |
pit_drone_spike.mdl         |         |    X    |         |     X     |
pit_worm_gibs.mdl           |         |    X    |         |     X     |
pit_worm_up.mdl             |         |    X    |         |     X     |
plant_01.mdl                |         |    X    |         |     X     |
plant_cactus.mdl            |         |    X    |         |     X     |
plant_palm.mdl              |         |    X    |         |     X     |
player.mdl                  |    X    |    X    |    X    |           |
playert.mdl                 |    X    |         |    X    |     X     |
protozoa.mdl                |    X    |         |    X    |     X     |
qmeal.mdl                   |         |         |    X    |     X     |
recruit.mdl                 |         |    X    |         |     X     |
recruit_push.mdl            |         |    X    |         |     X     |
rengine.mdl                 |    X    |         |    X    |     X     |
renginet.mdl                |    X    |         |    X    |     X     |
ribcage.mdl                 |    X    |         |    X    |     X     |
riblet1.mdl                 |    X    |         |    X    |     X     |
rip.mdl                     |    X    |         |    X    |     X     |
roach.mdl                   |    X    |         |    X    |     X     |
rockgibs.mdl                |    X    |         |    X    |     X     |
rope16.mdl                  |         |    X    |         |     X     |
rope24.mdl                  |         |    X    |         |     X     |
rope32.mdl                  |         |    X    |         |     X     |
rpgrocket.mdl               |    X    |         |    X    |     X     |
sat_globe.mdl               |    X    |         |    X    |     X     |
saw_link.mdl                |         |    X    |         |     X     |
saw_shell.mdl               |         |    X    |         |     X     |
scientist.mdl               |    X    |    X    |    X    |           |
scientist_cower.mdl         |         |         |    X    |     X     |
scientist_cower01.mdl       |         |         |    X    |     X     |
scientist01.mdl             |    X    |         |    X    |           |
scientist02.mdl             |    X    |         |    X    |           |
scientist03.mdl             |    X    |         |    X    |           |
scientist04.mdl             |    X    |         |    X    |           |
scientist05.mdl             |    X    |         |    X    |           |
scientist06.mdl             |    X    |         |    X    |           |
scientist07.mdl             |    X    |         |    X    |           |
scientist08.mdl             |         |         |    X    |     X     |
scientist09.mdl             |         |         |    X    |     X     |
scientist10.mdl             |         |         |    X    |     X     |
scientist11.mdl             |         |         |    X    |     X     |
scientistt.mdl              |    X    |         |    X    |     X     |
scigun.mdl                  |    X    |         |    X    |     X     |
sentry.mdl                  |    X    |         |    X    |     X     |
sentryt.mdl                 |    X    |         |    X    |     X     |
shell.mdl                   |    X    |    X    |    X    |           |
shock_effect.mdl            |         |    X    |         |     X     |
shotgunshell.mdl            |    X    |         |    X    |     X     |
shrapnel.mdl                |    X    |         |    X    |     X     |
skeleton.mdl                |    X    |    X    |    X    |           |
snapbug.mdl                 |    X    |         |    X    |     X     |
snow_tree.mdl               |         |    X    |         |     X     |
sphere.mdl                  |    X    |         |    X    |     X     |
spiggot.mdl                 |    X    |         |    X    |     X     |
spit.mdl                    |    X    |         |    X    |     X     |
spore.mdl                   |         |    X    |         |     X     |
spore_ammo.mdl              |         |    X    |         |     X     |
sprite.mdl                  |         |    X    |         |     X     |
stealth.mdl                 |    X    |         |    X    |     X     |
stick.mdl                   |    X    |         |    X    |     X     |
stickygib.mdl               |    X    |         |    X    |     X     |
stickygibpink.mdl           |    X    |         |    X    |     X     |
stretcher.mdl               |         |    X    |         |     X     |
strooper.mdl                |         |    X    |         |     X     |
strooper_gibs.mdl           |         |    X    |         |     X     |
strooper01.mdl              |         |    X    |         |     X     |
stukabat.mdl                |    X    |         |    X    |     X     |
tech_crategibs.mdl          |    X    |         |    X    |     X     |
teleporter_blue_sprites.mdl |    X    |         |    X    |     X     |
teleporter_orange_rings.mdl |    X    |         |    X    |     X     |
tentacle2.mdl               |    X    |    X    |    X    |           |
tentacle2t.mdl              |    X    |         |    X    |     X     |
tentacle3.mdl               |         |    X    |         |     X     |
testsphere.mdl              |    X    |         |    X    |     X     |
tool_box.mdl                |         |    X    |         |     X     |
tool_box_sm.mdl             |         |         |    X    |     X     |
tree.mdl                    |    X    |         |    X    |     X     |
tree_palm.mdl               |         |    X    |         |     X     |
treet.mdl                   |    X    |         |    X    |     X     |
turret.mdl                  |    X    |         |    X    |     X     |
turrett.mdl                 |    X    |         |    X    |     X     |
uplant1.mdl                 |    X    |         |    X    |     X     |
uplant1t.mdl                |    X    |         |    X    |     X     |
uplant2.mdl                 |    X    |         |    X    |     X     |
uplant2t.mdl                |    X    |         |    X    |     X     |
uplant3.mdl                 |    X    |         |    X    |     X     |
uplant3t.mdl                |    X    |         |    X    |     X     |
v_357.mdl                   |    X    |    X    |    X    |           |
v_9mmar.mdl                 |    X    |    X    |    X    |           |
v_9mmhandgun.mdl            |    X    |    X    |    X    |           |
v_bgrap.mdl                 |         |    X    |         |     X     |
v_bgrap_tonguetip.mdl       |         |    X    |         |     X     |
v_chub.mdl                  |    X    |         |    X    |     X     |
v_crossbow.mdl              |    X    |    X    |    X    |           |
v_crowbar.mdl               |    X    |    X    |    X    |           |
v_desert_eagle.mdl          |         |    X    |         |     X     |
v_displacer.mdl             |         |    X    |         |     X     |
v_egon.mdl                  |    X    |    X    |    X    |           |
v_gauss.mdl                 |    X    |         |    X    |     X     |
v_grenade.mdl               |    X    |    X    |    X    |           |
v_hgun.mdl                  |    X    |         |    X    |     X     |
v_knife.mdl                 |         |    X    |         |     X     |
v_m40a1.mdl                 |         |    X    |         |     X     |
v_penguin.mdl               |         |    X    |         |     X     |
v_pipe_wrench.mdl           |         |    X    |         |     X     |
v_rpg.mdl                   |    X    |    X    |    X    |           |
v_satchel.mdl               |    X    |    X    |    X    |           |
v_satchel_radio.mdl         |    X    |    X    |    X    |           |
v_saw.mdl                   |         |    X    |         |     X     |
v_shock.mdl                 |         |    X    |         |     X     |
v_shotgun.mdl               |    X    |    X    |    X    |           |
v_spore_launcher.mdl        |         |    X    |         |     X     |
v_squeak.mdl                |    X    |    X    |    X    |           |
v_tripmine.mdl              |    X    |    X    |    X    |           |
ventgibs.mdl                |    X    |         |    X    |     X     |
vgibs.mdl                   |         |    X    |         |     X     |
voltigore.mdl               |         |    X    |         |     X     |
w_357.mdl                   |    X    |         |    X    |     X     |
w_357ammo.mdl               |    X    |         |    X    |     X     |
w_357ammobox.mdl            |    X    |         |    X    |     X     |
w_357ammoboxt.mdl           |    X    |         |    X    |     X     |
w_357ammot.mdl              |    X    |         |    X    |     X     |
w_357t.mdl                  |    X    |         |    X    |     X     |
w_9mmar.mdl                 |    X    |    X    |    X    |           |
w_9mmarclip.mdl             |    X    |         |    X    |     X     |
w_9mmarclipt.mdl            |    X    |         |    X    |     X     |
w_9mmart.mdl                |    X    |         |    X    |     X     |
w_9mmclip.mdl               |    X    |         |    X    |     X     |
w_9mmclipt.mdl              |    X    |         |    X    |     X     |
w_9mmhandgun.mdl            |    X    |         |    X    |     X     |
w_9mmhandgunt.mdl           |    X    |         |    X    |     X     |
w_accelerator.mdl           |         |    X    |         |     X     |
w_adrenaline.mdl            |    X    |         |    X    |     X     |
w_adrenalinet.mdl           |    X    |         |    X    |     X     |
w_antidote.mdl              |    X    |         |    X    |     X     |
w_antidotet.mdl             |    X    |         |    X    |     X     |
w_argrenade.mdl             |    X    |         |    X    |     X     |
w_argrenadet.mdl            |    X    |         |    X    |     X     |
w_backpack.mdl              |         |    X    |         |     X     |
w_battery.mdl               |    X    |         |    X    |     X     |
w_batteryt.mdl              |    X    |         |    X    |     X     |
w_bgrap.mdl                 |         |    X    |         |     X     |
w_chainammo.mdl             |    X    |         |    X    |     X     |
w_chainammot.mdl            |    X    |         |    X    |     X     |
w_crossbow.mdl              |    X    |         |    X    |     X     |
w_crossbow_clip.mdl         |    X    |         |    X    |     X     |
w_crossbowt.mdl             |    X    |         |    X    |     X     |
w_crowbar.mdl               |    X    |         |    X    |     X     |
w_crowbart.mdl              |    X    |         |    X    |     X     |
w_desert_eagle.mdl          |         |    X    |         |     X     |
w_displacer.mdl             |         |    X    |         |     X     |
w_egon.mdl                  |    X    |         |    X    |     X     |
w_egont.mdl                 |    X    |         |    X    |     X     |
w_fgrenade.mdl              |         |    X    |         |     X     |
w_flare.mdl                 |    X    |         |    X    |     X     |
w_flaret.mdl                |    X    |         |    X    |     X     |
w_flashlight.mdl            |         |         |    X    |     X     |
w_gauss.mdl                 |    X    |         |    X    |     X     |
w_gaussammo.mdl             |    X    |         |    X    |     X     |
w_gaussammot.mdl            |    X    |         |    X    |     X     |
w_gausst.mdl                |    X    |         |    X    |     X     |
w_grenade.mdl               |    X    |         |    X    |     X     |
w_grenadet.mdl              |    X    |         |    X    |     X     |
w_health.mdl                |         |    X    |         |     X     |
w_hgun.mdl                  |    X    |         |    X    |     X     |
w_hgunt.mdl                 |    X    |         |    X    |     X     |
w_icon.mdl                  |         |    X    |         |     X     |
w_isotopebox.mdl            |    X    |         |    X    |     X     |
w_isotopeboxt.mdl           |    X    |         |    X    |     X     |
w_jumppack.mdl              |         |    X    |         |     X     |
w_knife.mdl                 |         |    X    |         |     X     |
w_longjump.mdl              |    X    |         |    X    |     X     |
w_longjumpt.mdl             |    X    |         |    X    |     X     |
w_m40a1.mdl                 |         |    X    |         |     X     |
w_m40a1clip.mdl             |         |    X    |         |     X     |
w_medkit.mdl                |    X    |         |    X    |     X     |
w_medkitt.mdl               |    X    |         |    X    |     X     |
w_oxygen.mdl                |    X    |         |    X    |     X     |
w_oxygent.mdl               |    X    |         |    X    |     X     |
w_penguin.mdl               |         |    X    |         |     X     |
w_penguinnest.mdl           |         |    X    |         |     X     |
w_pipe_wrench.mdl           |         |    X    |         |     X     |
w_porthev.mdl               |         |    X    |         |     X     |
w_rad.mdl                   |    X    |         |    X    |     X     |
w_radt.mdl                  |    X    |         |    X    |     X     |
w_rpg.mdl                   |    X    |         |    X    |     X     |
w_rpgammo.mdl               |    X    |         |    X    |     X     |
w_rpgammot.mdl              |    X    |         |    X    |     X     |
w_rpgt.mdl                  |    X    |         |    X    |     X     |
w_satchel.mdl               |    X    |         |    X    |     X     |
w_satchelt.mdl              |    X    |         |    X    |     X     |
w_saw.mdl                   |         |    X    |         |     X     |
w_saw_clip.mdl              |         |    X    |         |     X     |
w_security.mdl              |    X    |         |    X    |     X     |
w_securityt.mdl             |    X    |         |    X    |     X     |
w_shock.mdl                 |         |    X    |         |     X     |
w_shock_rifle.mdl           |         |    X    |         |     X     |
w_shotbox.mdl               |    X    |         |    X    |     X     |
w_shotboxt.mdl              |    X    |         |    X    |     X     |
w_shotgun.mdl               |    X    |    X    |    X    |           |
w_shotgunt.mdl              |    X    |         |    X    |     X     |
w_shotshell.mdl             |    X    |         |    X    |     X     |
w_shotshellt.mdl            |    X    |         |    X    |     X     |
w_silencer.mdl              |    X    |         |    X    |     X     |
w_silencert.mdl             |    X    |         |    X    |     X     |
w_spore_launcher.mdl        |         |    X    |         |     X     |
w_sqknest.mdl               |    X    |         |    X    |     X     |
w_sqknestt.mdl              |    X    |         |    X    |     X     |
w_squeak.mdl                |    X    |         |    X    |     X     |
w_squeakt.mdl               |    X    |         |    X    |     X     |
w_suit.mdl                  |    X    |    X    |    X    |           |
w_suitt.mdl                 |    X    |         |    X    |     X     |
w_weaponbox.mdl             |    X    |         |    X    |     X     |
webgibs.mdl                 |    X    |         |    X    |     X     |
wetfloorsign_gibs.mdl       |    X    |         |    X    |     X     |
wire_black16.mdl            |         |    X    |         |     X     |
wire_black24.mdl            |         |    X    |         |     X     |
wire_black32.mdl            |         |    X    |         |     X     |
wire_black8.mdl             |         |    X    |         |     X     |
wire_blue16.mdl             |         |    X    |         |     X     |
wire_blue24.mdl             |         |    X    |         |     X     |
wire_blue32.mdl             |         |    X    |         |     X     |
wire_blue8.mdl              |         |    X    |         |     X     |
wire_copper16.mdl           |         |    X    |         |     X     |
wire_copper24.mdl           |         |    X    |         |     X     |
wire_copper32.mdl           |         |    X    |         |     X     |
wire_copper8.mdl            |         |    X    |         |     X     |
wire_red16.mdl              |         |    X    |         |     X     |
wire_red24.mdl              |         |    X    |         |     X     |
wire_red32.mdl              |         |    X    |         |     X     |
wire_red8.mdl               |         |    X    |         |     X     |
woodgibs.mdl                |    X    |         |    X    |     X     |
wrangler.mdl                |         |         |    X    |     X     |
xen_rockgib_big.mdl         |         |         |    X    |     X     |
xen_rockgib_med.mdl         |         |         |    X    |     X     |
xen_rockgib_small.mdl       |         |         |    X    |     X     |
xen_rockgibs.mdl            |         |         |    X    |     X     |
zombie.mdl                  |    X    |         |    X    |           |
zombie_barney.mdl           |         |    X    |         |     X     |
zombie_barney01.mdl         |         |    X    |         |     X     |
zombie_barney02.mdl         |         |    X    |         |     X     |
zombie_barney03.mdl         |         |    X    |         |     X     |
zombie_soldier.mdl          |         |    X    |         |     X     |
zombie01.mdl                |    X    |         |    X    |           |
zombie02.mdl                |    X    |         |    X    |           |
zombie03.mdl                |    X    |         |    X    |           |
zombie04.mdl                |         |         |    X    |     X     |
zombiegibs1.mdl             |    X    |         |    X    |     X     |
zombiet.mdl                 |    X    |         |    X    |     X     |
                            -------------------------------------------

Binary unequal models found:

barney.mdl
barney01.mdl
barney02.mdl
barney03.mdl
chumtoad.mdl
gman.mdl
hassassin.mdl
headcrab.mdl
hgrunt.mdl
hgrunt01.mdl
hgrunt02.mdl
hgrunt03.mdl
hgruntt.mdl
holo.mdl
houndeye.mdl
islave.mdl
islave01.mdl
islave02.mdl
loader.mdl
osprey.mdl
otis.mdl
otis01.mdl
player.mdl
scientist.mdl
scientist01.mdl
scientist02.mdl
scientist03.mdl
scientist04.mdl
scientist05.mdl
scientist06.mdl
scientist07.mdl
shell.mdl
skeleton.mdl
tentacle2.mdl
v_357.mdl
v_9mmar.mdl
v_9mmhandgun.mdl
v_crossbow.mdl
v_crowbar.mdl
v_egon.mdl
v_grenade.mdl
v_rpg.mdl
v_satchel.mdl
v_satchel_radio.mdl
v_shotgun.mdl
v_squeak.mdl
v_tripmine.mdl
w_9mmar.mdl
w_shotgun.mdl
w_suit.mdl
zombie.mdl
zombie01.mdl
zombie02.mdl
zombie03.mdl
HD version results
                            |  Valve  | Gearbox | BShift  |           |
                            -------------------------------------------
                            | present | present | present | identical |
                            -------------------------------------------
agibs.mdl                   |    X    |    X    |    X    |     X     |
agrunt.mdl                  |    X    |    X    |    X    |     X     |
agrunt01.mdl                |    X    |    X    |    X    |     X     |
agruntt.mdl                 |         |         |    X    |     X     |
ba_holo.mdl                 |         |         |    X    |     X     |
barney.mdl                  |    X    |    X    |    X    |           |
barney01.mdl                |    X    |         |    X    |           |
barney02.mdl                |    X    |         |    X    |           |
barney03.mdl                |    X    |         |    X    |           |
barney04.mdl                |    X    |         |    X    |           |
barney05.mdl                |    X    |         |    X    |           |
barney06.mdl                |         |         |    X    |     X     |
barney07.mdl                |         |         |    X    |     X     |
barneyt.mdl                 |         |         |    X    |     X     |
bullsquid.mdl               |    X    |    X    |    X    |     X     |
bullsquid01.mdl             |    X    |    X    |    X    |     X     |
civ_coat_scientist.mdl      |         |         |    X    |     X     |
civ_coat_scientist01.mdl    |         |         |    X    |     X     |
civ_paper_scientist.mdl     |         |         |    X    |     X     |
civ_paper_scientist01.mdl   |         |         |    X    |     X     |
civ_scientist.mdl           |         |         |    X    |     X     |
civ_scientist01.mdl         |         |         |    X    |     X     |
cleansuit_scientist.mdl     |         |    X    |         |     X     |
console_civ_scientist.mdl   |         |         |    X    |     X     |
console_civ_scientist01.mdl |         |         |    X    |     X     |
crossbow_bolt.mdl           |    X    |    X    |    X    |           |
dead_barney.mdl             |         |         |    X    |     X     |
dead_barney01.mdl           |         |         |    X    |     X     |
gman.mdl                    |    X    |    X    |    X    |           |
gordon_scientist.mdl        |         |         |    X    |     X     |
gordon_scientistt.mdl       |         |         |    X    |     X     |
grenade.mdl                 |    X    |    X    |    X    |           |
hgrunt.mdl                  |    X    |         |    X    |           |
hgrunt_medic.mdl            |         |    X    |         |     X     |
hgrunt_medic01.mdl          |         |    X    |         |     X     |
hgrunt_opfor.mdl            |         |    X    |         |     X     |
hgrunt_opfor01.mdl          |         |    X    |         |     X     |
hgrunt_opfor02.mdl          |         |    X    |         |     X     |
hgrunt_opfor03.mdl          |         |    X    |         |     X     |
hgrunt_torch.mdl            |         |    X    |         |     X     |
hgrunt_torch01.mdl          |         |    X    |         |     X     |
hgrunt_torch02.mdl          |         |    X    |         |     X     |
hgrunt01.mdl                |    X    |         |    X    |           |
hgrunt02.mdl                |    X    |         |    X    |           |
houndeye.mdl                |    X    |    X    |    X    |           |
houndeye_dead.mdl           |         |    X    |         |     X     |
intro_barney.mdl            |         |         |    X    |     X     |
intro_barney01.mdl          |         |         |    X    |     X     |
intro_barneyt.mdl           |         |         |    X    |     X     |
intro_commander.mdl         |         |    X    |         |     X     |
intro_medic.mdl             |         |    X    |         |     X     |
intro_regular.mdl           |         |    X    |         |     X     |
intro_saw.mdl               |         |    X    |         |     X     |
intro_torch.mdl             |         |    X    |         |     X     |
islave.mdl                  |    X    |    X    |    X    |           |
islave01.mdl                |    X    |    X    |    X    |           |
islave02.mdl                |    X    |    X    |    X    |           |
massn.mdl                   |         |    X    |         |     X     |
massn01.mdl                 |         |    X    |         |     X     |
massn02.mdl                 |         |    X    |         |     X     |
p_357.mdl                   |    X    |    X    |    X    |     X     |
p_9mmar.mdl                 |    X    |    X    |    X    |           |
p_9mmhandgun.mdl            |    X    |    X    |    X    |     X     |
p_crossbow.mdl              |    X    |    X    |    X    |     X     |
p_crowbar.mdl               |    X    |    X    |    X    |           |
p_egon.mdl                  |    X    |    X    |    X    |     X     |
p_gauss.mdl                 |    X    |    X    |    X    |           |
p_grenade.mdl               |    X    |    X    |    X    |           |
p_hgun.mdl                  |    X    |    X    |    X    |           |
p_rpg.mdl                   |    X    |    X    |    X    |           |
p_satchel.mdl               |    X    |    X    |    X    |     X     |
p_satchel_radio.mdl         |    X    |    X    |    X    |     X     |
p_shotgun.mdl               |    X    |    X    |    X    |           |
p_squeak.mdl                |    X    |    X    |    X    |     X     |
p_tripmine.mdl              |    X    |    X    |    X    |     X     |
rpgrocket.mdl               |    X    |    X    |    X    |           |
scientist.mdl               |    X    |    X    |    X    |           |
scientist_cower.mdl         |         |         |    X    |     X     |
scientist_cower01.mdl       |         |         |    X    |     X     |
scientist01.mdl             |    X    |         |    X    |           |
scientist02.mdl             |    X    |         |    X    |           |
scientist03.mdl             |    X    |         |    X    |           |
scientist04.mdl             |    X    |         |    X    |           |
scientist05.mdl             |    X    |         |    X    |           |
scientist06.mdl             |    X    |         |    X    |           |
scientist07.mdl             |    X    |         |    X    |           |
scientist08.mdl             |    X    |         |    X    |           |
scientist09.mdl             |    X    |         |    X    |           |
scientist10.mdl             |    X    |         |    X    |           |
scientist11.mdl             |         |         |    X    |     X     |
shell.mdl                   |    X    |    X    |    X    |           |
shotgunshell.mdl            |    X    |    X    |    X    |           |
stretcher.mdl               |         |    X    |         |     X     |
v_357.mdl                   |    X    |    X    |    X    |           |
v_9mmar.mdl                 |    X    |    X    |    X    |           |
v_9mmhandgun.mdl            |    X    |    X    |    X    |           |
v_crossbow.mdl              |    X    |    X    |    X    |           |
v_crowbar.mdl               |    X    |    X    |    X    |           |
v_egon.mdl                  |    X    |    X    |    X    |           |
v_gauss.mdl                 |    X    |    X    |    X    |           |
v_grenade.mdl               |    X    |    X    |    X    |           |
v_hgun.mdl                  |    X    |    X    |    X    |           |
v_rpg.mdl                   |    X    |    X    |    X    |           |
v_satchel.mdl               |    X    |    X    |    X    |           |
v_satchel_radio.mdl         |    X    |    X    |    X    |           |
v_shotgun.mdl               |    X    |    X    |    X    |           |
v_squeak.mdl                |    X    |    X    |    X    |           |
v_tripmine.mdl              |    X    |    X    |    X    |           |
w_357.mdl                   |    X    |    X    |    X    |     X     |
w_357ammo.mdl               |    X    |    X    |    X    |           |
w_357ammobox.mdl            |    X    |    X    |    X    |           |
w_9mmar.mdl                 |    X    |    X    |    X    |     X     |
w_9mmarclip.mdl             |    X    |    X    |    X    |           |
w_9mmhandgun.mdl            |    X    |    X    |    X    |     X     |
w_argrenade.mdl             |    X    |    X    |    X    |           |
w_crossbow.mdl              |    X    |    X    |    X    |           |
w_crossbow_clip.mdl         |    X    |    X    |    X    |           |
w_crowbar.mdl               |    X    |    X    |    X    |           |
w_egon.mdl                  |    X    |    X    |    X    |     X     |
w_gauss.mdl                 |    X    |    X    |    X    |           |
w_gaussammo.mdl             |    X    |    X    |    X    |           |
w_grenade.mdl               |    X    |    X    |    X    |           |
w_hgun.mdl                  |    X    |    X    |    X    |           |
w_rpg.mdl                   |    X    |    X    |    X    |           |
w_rpgammo.mdl               |    X    |    X    |    X    |     X     |
w_satchel.mdl               |    X    |    X    |    X    |     X     |
w_shotbox.mdl               |    X    |    X    |    X    |     X     |
w_shotgun.mdl               |    X    |    X    |    X    |           |
w_sqknest.mdl               |    X    |    X    |    X    |           |
w_squeak.mdl                |    X    |    X    |    X    |     X     |
wrangler.mdl                |         |         |    X    |     X     |
wranglert.mdl               |         |         |    X    |     X     |
zombie.mdl                  |    X    |         |    X    |     X     |
zombie01.mdl                |    X    |         |    X    |     X     |
zombie02.mdl                |    X    |         |    X    |     X     |
zombie03.mdl                |    X    |         |    X    |     X     |
zombie04.mdl                |    X    |         |    X    |     X     |
                            -------------------------------------------

Binary unequal models found:

barney.mdl
barney01.mdl
barney02.mdl
barney03.mdl
barney04.mdl
barney05.mdl
crossbow_bolt.mdl
gman.mdl
grenade.mdl
hgrunt.mdl
hgrunt01.mdl
hgrunt02.mdl
houndeye.mdl
islave.mdl
islave01.mdl
islave02.mdl
p_9mmar.mdl
p_crowbar.mdl
p_gauss.mdl
p_grenade.mdl
p_hgun.mdl
p_rpg.mdl
p_shotgun.mdl
rpgrocket.mdl
scientist.mdl
scientist01.mdl
scientist02.mdl
scientist03.mdl
scientist04.mdl
scientist05.mdl
scientist06.mdl
scientist07.mdl
scientist08.mdl
scientist09.mdl
scientist10.mdl
shell.mdl
shotgunshell.mdl
v_357.mdl
v_9mmar.mdl
v_9mmhandgun.mdl
v_crossbow.mdl
v_crowbar.mdl
v_egon.mdl
v_gauss.mdl
v_grenade.mdl
v_hgun.mdl
v_rpg.mdl
v_satchel.mdl
v_satchel_radio.mdl
v_shotgun.mdl
v_squeak.mdl
v_tripmine.mdl
w_357ammo.mdl
w_357ammobox.mdl
w_9mmarclip.mdl
w_argrenade.mdl
w_crossbow.mdl
w_crossbow_clip.mdl
w_crowbar.mdl
w_gauss.mdl
w_gaussammo.mdl
w_grenade.mdl
w_hgun.mdl
w_rpg.mdl
w_shotgun.mdl
w_sqknest.mdl

Create shared Rosenberg model.

  • Create shared Rosenberg model with
    • default LD scientist body mesh
    • Blue Shift LD scientist body mesh
    • HD scientist body mesh
  • Add all shared scientist sequences
  • Add shared scientist bone controllers
  • Add clipboard and headcrab stick bodygroups
  • Use same hitboxes as shared scientist LD/HD

Additional information

Kept head bodygroup so it does not break body change when showing needle in game.

Original HD Rosenberg uses a different mouth texture from the other scientists. For better appearance, the mesh was edited to use the same texture as the other HD scientists.

Create shared Cleansuit scientist model.

LD Op4 <-> HD Op4

  • same cleansuit mesh
  • same hitboxes
  • same sequences
  • same bone controllers
  • different head meshes (LD/HD)

  • Create shared cleansuit scientist model with:
    • default LD scientist head mesh
    • Blue Shift LD scientist head mesh
    • HD scientist head mesh
  • Add all shared scientist sequences
  • Add shared scientist bone controllers
  • Add clipboard and headcrab stick bodygroups
  • Use same hitboxes as default scientist LD

Additional information

The cleansuit model's arms are a bit longer than the default scientist and it has a few additional bones. The new model has been rigged on top of the default scientist skeleton. Arms have been shortened so they fit the skeleton bone lengths. This allows to use the same needle, clipboard, headcrab stick meshes.

The original model's Einstein and Slick face use textures with custom lighting, but Walter and Luther are unchanged. For consistency, new textures would need to be made but this can be handled in a separate issue. For now, all faces use the default scientist textures.

Create shared Civilian newspaper scientist model.

  • Create shared newspaper civilian model with:
    • default LD scientist body mesh
    • Blue Shift LD scientist body mesh
    • HD blue shirt body mesh
  • Add shared scientist bone controllers
  • Use same hitboxes as shared scientist LD/HD

Additional information

See #88 Additional information for more info.

The original animations were converted to use the HD scientist skeleton. In the process, the bones were scaled to match the reference bone length. The legs now appear longer and the character's height is a bit shorter, making the newspaper clip slightly through the legs. Fixing this may require translating hands at specific frames, or manually editing the animation.

Create shared Alien slave model.

LD HL1 <-> LD OP4

  • same mesh
  • same sequences
  • same sequences fps
  • same bone controllers
  • same hitboxes

HD HL1 <-> HD OP4

  • same sequences
  • same bone controllers
  • same sequence fps
  • slightly different mesh, not noticeable difference
  • slightly different hitboxes

LD/HD HL1 <-> LD/HD Blue Shift

  • All identical

Add the following Opposing Force sequences :

  • throw_podium
  • long_jump
  • dead_on_stomach

Additional information

The HD Op4 model uses a lower resolution texture than HL1 HD. The HL1 HD texture has been used for the new model.

The HD Op4 model has 2 extra bones that are affected at the finger tip of the middle arm. They won't be used since they don't make a difference.

In the HD version all hitgroups were set to 0 (HITGROUP_GENERIC). Correct hitgroups have now been assigned so they can work correctly with AI TraceAttack code.

The original HD crouch sequence had several end frames missing, making the sequence shorter. I added extra frames at the end and filled the in-betweens by copying pose from other keyframes.

The original HD model collar would clip through neck in stairsup sequence. This happened because the HD collar does not connect the neck and the upper spine, and is tied to Bip01 Neck1 instead of Bip01 Spine3. As a result, the collar would rotate and clip through the neck occasionally. I reworked the collar so that it works like in LD.

Several edges marked sharp were unnecessary. They were unmarked sharp.

The HD version's middle arm has hitboxes while the original LD version doesn't. I added the HD middle arm hitboxes to the LD and tweaked several hitboxes for both LD/HD.

Create shared Otis model.

Otis has no HD variant.

LD Op4 otis.mdl <-> LD Blue Shift otis.mdl

  • same meshes
  • different bone hierarchy
  • same hitboxes
  • same bone controllers
  • same textures
  • same sequences and fps for those available

LD Op4 otis.mdl <-> LD Blue Shift intro_otis.mdl

  • same meshes
  • different bone hierarchy
  • same hitboxes
  • same bone controllers
  • same textures
  • same sequences and fps for those available

Barney and Otis comparisons

Note: Barney and Otis have the same bone length and orientations. They have a compatible skeleton.

LD HL1 Barney <-> LD Op4 otis.mdl

  • Same bone length
  • Same bone axis
  • Same bone controllers
  • Same hitboxes
  • Same sequences for those available
  • Same sequences FPS for those available (except for shootgun2_blend2)

LD HL1 Barney <-> LD Blue Shift otis.mdl

  • Same bone length
  • Same bone axis
  • Same bone controllers
  • Same hitboxes
  • Same sequences and fps for those available

LD HL1 Barney <-> LD Blue Shift intro_otis.mdl

  • Same bone length
  • Same bone axis
  • Same bone controllers
  • Same hitboxes
  • Same sequences and fps for those available

Add the following HL1 Barney sequences :

  • fence
  • c1a3_ventb
  • c1a3_emergeidle
  • c1a3_emerge
  • haulbarney
  • sit1
  • almostidle
  • almost
  • laseridle
  • laser_top
  • laser_bottom
  • barneyfallidle
  • barneyfall
  • c3a2_draw
  • assassinated

Add the following Op4 Barney sequences :

  • turn_lever
  • draw_shoot

Add the following Blue Shift Barney sequences :

  • range_fire
  • range_pushbutton
  • range_reload
  • adjust_armor
  • wash_hands
  • dry_hands
  • eaten
  • eaten_loop
  • tugged
  • tugged_idle
  • block_gate
  • block_gate_idle
  • gatedie
  • tram_dive
  • tram_slouch
  • tram_slouch_fly
  • playgame1
  • playgame2
  • raise_flag
  • eating
  • console_sitting
  • console_stand
  • adjust_idle
  • diecrump2
  • dieviolent2

Add the following Opposing Force Otis sequences :

  • fence (otis_fence)
  • dead_sitting
  • wave (otis_wave)
  • cowering
  • candygrab

Add the following Blue Shift Otis sequences :

  • range_struggle
  • range_fire (otis_range_fire)
  • otis_dumped
  • otis_dumped_idle

Add the following Blue Shift intro_otis.mdl sequences :

  • intro_glance

Additional information

1 - The hand and arms textures were unconnected for rolled sleeve mesh. I connected them which fixed the texture seams around the wrists as well.

2 - Body UVs were reworked.

3 - Otis facemap UVs were originally mirrored (right side = left side). I mirrored them back so it's ok.

4 - Desert eagle UVs have been reworked to use the viewmodel texture.

5 - Gun holster bone was added so it can be used to rotate the holster mesh if needed. In addition, because Otis has a wider belly, the holster bone had to be slightly translated lateral.

To allow Barney animations to be used with Otis, the Bone03 position and rotation had to be removed from the LD animations so it wouldn't override Otis' Bone03 position and rotation. This is for eventually using a single skeleton for Barney and Otis.

The only animation I found that features additional rotation on the bone is diesimple, but I made a single commit 31d3a91 so we can restore it later if needed.

HD animations were left intact because Otis has no HD version.

6 - The original Otis range_fire sequence plays weapons/pl_gun3.wav, but I changed it to use weapons/de_shot1.wav.

The sequence is only available in Blue Shift model and is not used in game so it won't impact users that own Blue Shift, but not Opposing Force.

In addition, 5001 is replaced by 1003 (likely used to fire event).

7 - Otis fence animation is slightly different from the Barney fence one. I renamed Otis' fence sequence to otis_fence so to keep consistency with the other Barney sequences.

8 - Otis wave sequence was renamed to otis_wave to avoid confusion.

9 - Helmet hitboxes (10) were removed and the head hitbox (1) now surrounds the head.

10 - Because Otis has no custom pain sounds, the Barney pain wave files are used.

Map changes

See #27 for Otis in maps:

  • of1a2.bsp
  • of1a5.bsp
  • of1a5b.bsp
  • ba_canal2.bsp
  • ba_security2.bsp
  • ba_tram2.bsp

Scientists arms meshes sticking out from body.

In several animations, notably Blue Shift, the scientists arms can be seen sticking out.

This happens if the arms bones are translated too far away.

Solutions:

A) Rework the mesh so that it's connected (No separate mesh for arm and body)

Would definitely solve the issue, but because HL1 only supports one bone per vertex weight, no smooth blending/mesh deformation can be made. This may become a problem in animations when arms are rotated in a specific direction.

B) Apply a translation to the arms bones to ensure they remain inside the upper body

Easier, but can affect gameplay since translating a bone will also translate the associated hitbox.

Create Glock viewmodels.

LD HL1 <-> LD Op4

  • same gun mesh except with different UVs
  • same clip mesh
  • same silencer mesh
  • same bodygroups except Op4 has additional bodygroup for hands
  • different hitboxes
  • same attachments
  • different glock textures
  • same sequences and fps

LD HL1 <-> LD Blue Shift

  • same gun mesh except with different UVs
  • same clip mesh
  • same silencer mesh
  • same bodygroups except Blue Shift has additional bodygroup for hands
  • different hitboxes
  • same attachments
  • different glock textures
  • same sequences and fps

HD HL1 <-> HD Op4

  • same gun mesh
  • same clip mesh
  • same bodygroups
  • different hitboxes
  • same attachments
  • same textures
  • same sequences and fps

HD HL1 <-> HD Blue Shift

  • same gun mesh
  • same clip mesh
  • same bodygroups
  • different hitboxes
  • same attachments
  • same textures
  • same sequences and fps

Low definition:

  • HEV hand
  • Guard hand
  • Soldier hand

High definition:

  • HEV hand
  • Guard hand
  • Soldier hand

Additional information

1 - The LD Op4/Blue Shift gun meshes have a different texture layout than LD HL1. They also have a bit more details than HL1's. The highest resolution textures have been used.

2 - The LD/HD muzzle attachment is slightly offset to the left of the barrel. It was adjusted to be more centered.

3 - All LD variants have an additional sequence add_silencer. All HD variants are missing this sequence. Since it's the last sequence, it's not breaking.

4 - The LD HL1 Glock and hands meshes are merged as one SMD. LD Op4/Blue Shift are separate.

5 - The Op4/Blue Shift Glock mesh is slightly offset compared to HL1's. However their silencer mesh are in the same position as in HL1's so it's not correctly aligned in add_silencer sequences.

6 - The original LD HL1 hand mesh back had several textures misassigned. This has been fixed. Several mesh sharp edges were reworked.

7 - The original LD Op4/Blue Shift have a vertex along the gun side that is assigned to Bip01 R Hand instead of Bone02. This would cause side to glitch incorrectly in reload sequence. This has been fixed.

8 - LD Op4/Blue Shift hands have different volumes than HL1. The soldier and Blue Shift hand meshes had to be rigged to be able to be positioned in a way they would not clip through gun.

9 - HD HL1/Op4 reload_noshot animation does not animate the clip. HD Blue Shift does. The HD Blue Shift animation has been used.

10 - Silencer mesh has been added to HD variants. Note that the HD animation might be done later. See #17 .

11 - LD clip_reference.smd is identical to v_desert_eagle clip_reference.smd. Both models now share the same clip mesh.

12 - In LD/HD reload animations, the clip orientation is turning around, which can make players see through the model since it has no back face. This has been fixed.

13 - The new models were tested in game. Every sequence has been tested except holster and add_silencer, which
are unused in game. They have been reviewed in HLAM and are expected to play correctly if ever used.

Create shared Gman model.

LD HL1 <-> LD Op4

  • Op4 has additional bodygroup 'heads' with cellphone
  • same mesh
  • same bone controllers
  • slightly different hitboxes
  • same sequences and fps for those available
  • same textures

LD HL1 <-> LD Blue Shift

  • All identical

HD HL1 <-> HD Op4

  • Op4 has additional bodygroup 'heads' with cellphone
  • same mesh
  • same bone controllers
  • same hitboxes, except Bip01 L Hand
  • same sequences and fps for those available
  • same textures

HD HL1 <-> HD Blue Shift

  • same mesh
  • same bone controllers
  • same hitboxes
  • same sequences for those available
  • different sequence fps
  • same textures

  • Add suitcase bone controller

Add the following Opposing Force sequences :

  • cell_idle
  • cell_away
  • working_nuke
  • push_button

Additional information

1- The LD HL1 mesh has a few smoothing issues at the back of the neck and glitchy mouth mesh deformation. The Op4 mesh had these issues fixed for the most part, so I used the Op4 mesh.

2- Original LD/HD all use hitgroup 0 (HITGROUP_GENERIC). Correct hitgroups have been added for the new models.

3- Op4 LD cell mesh included the entire Gman mesh. It was removed so only the mesh cell is kept.

4- Because the right hand is animated to hold the suitcase in all sequences, the suitcase is not placed in a separate bodygroup. It will always be present.

5- 'heads' bodygroup has been renamed to 'items'.

6- A bone controller (3) has been added to allow opening the suitcase if needed.

7- Hitboxes have been added to suitcase. They use hitgroup 0 so coders can override behavior if players hit the suitcase.

8- The hitboxes at the lower portion of the coat were removed and a single pelvis hitbox is used instead.

9- In the original HD push_button sequence, the right hand fingers rotation were missing. The animation has been patched with rotations from another sequence so they remain tight.

10- Several end frames of HD sequences yes; no; lookdown have been cut to fit the original LD sequences durations.

Create shared Osprey model.

The Osprey has no HD version.

HL1 <-> Op4

  • same mesh, but Op4 has wheels for take_off sequence
  • same hitboxes
  • same bone controllers
  • same sequences and fps for those available
  • same textures, but Op4 has multiple texture sheets

HL1 <-> Blue Shift

  • Identical

Add the following Opposing Force sequences :

  • on_tarmac
  • take_off

Additional information

1- The HL1 Osprey texture layout is different from Op4. The Op4 Osprey is used as a base since the other Osprey variations use pretty much the same Op4 texture layout.

2- The HL1 rotor sequence origin height is different from the one in Op4. This is because the reference's bone 'Osprey' is in a different position. The sequence has been fixed so it's in the same expected position as in the original HL1.

3- The original Op4 Osprey hitboxes are offset below and rotated 180 degrees around Z axis. This is because the 'Osprey' bone is rotated in the same way and is in a different position. I reworked them so they are correct.

4- The HL1 and Op4 rotor sequence have the same number of frames and same fps, but the blades rotate faster in the Op4 version. The Op4 speed is used.

5- Left wing bones were originally suffixed R while right ones were suffixed L. Bones' names have been swapped to avoid confusion.

6- Hitboxes for all 3 wheels have been added with a specific hitgroup for each, in case modders want to add behavior when wheels are hit.

7- The cockpit hitbox originally only covered half of the cockpit area. This has been widened to cover the entire cockpit.

8- Existing hitboxes have been tweaked and new ones were added.

9- UVs of the floor, ceiling, sideways of the middle boarding interior were reworked and are now correctly aligned.


Osprey variants

I checked the following models:

  • blkop_dead_osprey.mdl
  • blkop_osprey.mdl
  • blkop_osprey_bodygibs.mdl
  • blkop_osprey_enginegibs.mdl
  • blkop_osprey_tailgibs.mdl
  • crashed_osprey.mdl
  • dead_osprey.mdl
  • mini_osprey.mdl
  • mini_osprey_bodygibs.mdl
  • mini_osprey_enginegibs.mdl
  • mini_osprey_tailgibs.mdl
  • osprey.mdl
  • osprey_bodygibs.mdl
  • osprey_enginegibs.mdl
  • osprey_tailgibs.mdl

I made a list of all aspects of each model across all 3 games. Opposing Force has a couple of custom Osprey models such as crashed_osprey.mdl, mini_osprey.mdl and the BlackOps variants.

I checked the models and some have several texture sheets (unwraps) incompatible with the current Osprey. Some also have glitchy appearance due to improper UV setup. In addition, BlackOps variants have inconsistent textures across their counterparts.

Standardizing the textures and meshes between each Osprey model requires a considerable amount of work. BlackOps textures could be remade by desaturating the military Osprey texture but this should be done after all other variants standardization is finished.

Although BlackOps Osprey entity exists in code, it is unused in game. Since crashed_osprey.mdl and mini variations are only used in Op4, and no other model beside osprey.mdl is used, standardization for the others can be done later.

Improve HD scientists hitboxes.

Existing hitboxes have been reworked. New hitboxes were added to spine, head and fingers.

The changes have been applied to all variants:

  • Civilian coat scientist
  • Civilian newspaper scientist
  • Civilian scientist
  • Gordon scientist
  • Rosenberg

Note: Cleansuit scientist is unchanged because it uses LD scientist skeleton.

Create PCV suit model.

The PCV suit has no HD variant.

LD HL1 <-> LD Op4

  • different meshes
  • different hitboxes
  • same sequences
  • same sequences fps

LD HL1 <-> LD Blue Shift

  • Identical

Additional information

1 - Op4 has an additional submodel entry in which the suit is positioned on the back.

2 - Blue Shift's w_suit.mdl is the HEV suit. No custom model is needed.

Map changes

See #27 in maps:

  • of1a1.bsp (PCV suit on table in treatments area)
  • ofboot2.bsp (PCV suit mounted on wall)

Scientist hands/tie clipping through body.

For converted sequences, and because LD/HD meshes have different size and volume, the hands can sometimes end up clipping through the body.

This also happens with sequences that were converted from LD -> HD, in which the tie always keeps the same transform as the reference and can occasionally clip through the body as well. The sequences with ties clipping are not used in the original games so this can be fixed later.

Solutions:

A) Manually edit the animation

Can be easy or difficult depending on the animation. The elbow also needs to be adjusted to ensure the length of each bone is preserved.

When importing an SMD animation, each frame is filled with the position and rotation. This requires carefully moving the bone and ensure they follow correctly across all frames otherwise this will cause animations to jitter.

When building an animation from scratch, keys are set at specific times and interpolated between each. When exporting to SMD, this information is lost.

B) Automatically apply transformations to fix the position and rotation

Same as A).

Use common skeleton, same animation, same hitboxes for all LD/HD models.

Some LD and HD models have different skeletons, different animations, different hitboxes.

The main objective is to make both LD/HD use a common skeleton, same animations, same hitboxes.

Reasons:

  • Ease maintenance of models
  • Avoid confusion for mappers and potential issues that arise from using different sequences (1)
  • Ensure both LD/HD have same sequence durations (2)
  • Ensure both LD/HD use the same hitboxes. (3)

(1) For example, LD and HD scientists don't use the same arm when playing give_shot sequence. The needle is not on the same hand. Depending on what the mapper intended, this can look wrong in LD/HD if other bodygroups are enabled (clipboard/headcrab stick).

(2) Having different sequence durations between LD/HD can cause discrepancy in gameplay. Both variants may end up too soon or too late depending on what the mapper intended.

(3) The HD model is just a graphical overhaul. It shouldn't affect gameplay.

Create shared tentacle model.

Tentacle has no HD variant.

LD HL1 tentacle2.mdl <-> LD Op4 tentacle2.mdl

  • same skeleton
  • same hitboxes
  • same attachments
  • same sequences and fps, but level 1,2,3 sequences altitude is different in Op4
  • same mesh
  • same textures

LD HL1 tentacle2.mdl <-> LD Op4 tentacle3.mdl

  • same hitboxes
  • same attachments
  • same sequences and fps, but level 1,2,3 sequences altitude is different in Op4
  • same mesh
  • same textures

LD HL1 tentacle2.mdl <-> LD Blue Shift tentacle2.mdl

  • Identical

  • Create default tentacle2.mdl
  • Create tentacle2_lower.mdl with Op4 sequences that have different altitude

Additional information

1 - Op4 includes a custom tentacle model 'tentacle3.mdl', which is a slight variation of tentacle2.mdl but with different altitude for level 1,2,3 sequences.

2 - The Op4 tentacle2.mdl Level 1,2,3 root bone is positioned at a different altitude, making the sequences incompatible with the HL1.

3 - The Op4 tentacle has an additional spawnflag 64 'tentacle3' set and the original game DLL contains a string 'tentacle3.mdl', which leads me to believe that a specific model is picked whether or not this spawnflag is set.

4 - HL1 identical sequences have been reused when possible. I tested in game with the custom tentacle2_lower.mdl as tentacle2.mdl and haven't found issues with the sequences.

Op4 sequences with different altitude
Lev1_Idle
Lev1_Fidget_Claw
Lev1_Fidget_Shake
Lev1_Fidget_Snap
Lev1_Strike
Lev1_Tap
Lev1_Rotate
Lev1_Rear
Lev1_Rear_Idle
Lev1_to_Lev2
Lev2_Idle
Lev2_Fidget_Shake
Lev2_Fidget_Swing
Lev2_Fidget_Tut
Lev2_Strike
Lev2_Tap
Lev2_Rotate
Lev2_Rear
Lev2_Rear_Idle
Lev2_to_Lev3
Lev3_Idle
Lev3_Fidget_Shake
Lev3_Fidget_Side
Lev3_Fidget_Swipe
Lev3_Strike
Lev3_Tap
Lev3_Rotate
Lev3_Rear
Lev3_Rear_Idle

Map changes

See #27 in maps:

  • of4a3.bsp (Tentacle 1 and 2)

Create MP5 viewmodels.

LD HL1 <-> LD Op4

  • same mp5 mesh
  • different hitboxes
  • different attachment
  • same textures
  • different sequences
  • same sequence fps for those available except deploy

LD HL1 <-> LD Blue Shift

  • same mp5 mesh
  • different hitboxes
  • different attachment
  • same textures
  • different sequences
  • same sequence fps for those available except deploy

HD HL1 <-> HD Op4

  • same mp5 mesh
  • different hitboxes
  • same attachment
  • same textures
  • same sequences and fps

HD HL1 <-> HD Blue Shift

  • same mp5 mesh
  • different hitboxes
  • same attachment
  • same textures
  • same sequences and fps

Low definition:

  • HEV hand
  • Guard hand
  • Soldier hand

High definition:

  • HEV hand
  • Guard hand
  • Soldier hand

Additional information

1 - LD HL1 sequences (all) are different compared to Op4/Blue Shift. Op4 and Blue Shift sequences are identical.

2 - The LD HL1 viewmodel is rather unstructured and does not appear to be made on top of the regular skeleton rig. In addition, the LD Op4/Blue Shift animations are more polished than the original HL1 so the Op4 animations and skeleton were used as a base. The HEV Python hands meshes were used.

3 - LD Op4/Blue Shift gun attachment was offset from the barrel tip. This has been fixed.

4 - LD Op4/Blue Shift deploy_2 seems to be identical to first 12 frames of longidle. It does not represent a draw/deploy animation. It was removed.

5 - Because Gordon's fingers are thiner than Adrian or Barney, the thumb was clipping through grenade launcher and ammo clip in various sequences:

  • longidle
  • reload
  • shoot_2
  • shoot_3

The animations were manually edited to fix the issues.

6 - The new models have been tested in game. No issue has been found.

Create shared Barney models.

Barney LD:

  • Identical looking mesh across all games.

Barney HD:

  • Identical looking mesh across all games.
  • Op4/Blue Shift body textures are slightly brighter than in HL1 HD.
  • HL1 dieviolent sequence FPS is 12 while Op4/Blue Shift FPS is 20.

Sequences:

  • Opposing Force features 2 additional sequences.
  • Blue Shift features 25 additional sequences.

Add the following Opposing Force sequences:

  • turn_lever
  • draw_shoot

Add the following Blue Shift sequences:

  • range_fire
  • range_pushbutton
  • range_reload
  • adjust_armor
  • wash_hands
  • dry_hands
  • eaten
  • eaten_loop
  • tugged
  • tugged_idle
  • block_gate
  • block_gate_idle
  • gatedie
  • tram_dive
  • tram_slouch
  • tram_slouch_fly
  • playgame1
  • playgame2
  • raise_flag
  • eating
  • console_sitting
  • console_stand
  • adjust_idle
  • diecrump2
  • dieviolent2

Create shared Grunts model.

LD HL1 <-> LD Blue Shift

  • same meshes
  • same skin families
  • same attachments
  • same bone controllers
  • same hitboxes, but HL1 has extra hitboxes
  • same textures
  • same sequence fps for those available
  • same sequence for those available

HD HL1 <-> HD Blue Shift

  • same meshes, but different poly count
  • same skin families
  • same attachments
  • same bone controllers
  • same hitboxes
  • same textures
  • same sequence fps for those available
  • same sequence for those available, but Blue Shift HD has dummy (empty) sequences

LD HL1 <-> HD HL1

  • same sequences for those available
  • different fps for some sequences

Add the following Blue Shift sequences:

  • soldier_dump
  • soldier_dump_idle
  • soldier_shoot_ahead
  • soldier_kick

Additional information

1 - HD Blue Shift DC_soldier_torso.bmp is 256x256 while HD HL1 is 128x128. The highest resolution texture has been used.

2 - HD HL1 mesh DC_soldier_reference.smd has more vertices than HD Blue Shift.

HL1 : 466 verts
BS  : 307 verts

The highest resolution model has been used.

3 - The original LD HL1 dragleft and dragright sequences are swapped, which appears incorrect in game while the HD have the correct side. I swapped the 2 sequences and tested in game to ensure it works in HL1 (c2a3e) and Blue Shift (ba_outro).

4 - In Blue Shift custom sequences, the hand is sticking out of the forearm. The sequences have been fixed so the correct bone length is used.

5 - In the original body mesh, forearms and hands were disconnected.

I tested a few times with different vertex weight setup but the result is always glitchy when forearm and hands are too much rotated. This is unavoidable since HL1 engine does not support multiple weight per vertex.

They will be kept separate.

6 - The grunt neck vertices were weighted to head bone, causing it to stick out of the body when the head bone was too rotated. I weighted them to Bip01 Spine3 so they stay on the torso.

7 - LD/HD model UVs were reworked.

8 - LD/HD hitboxes were reworked.

9 - HD cliffdie sequence had missing cut frames. The LD animation was converted to HD so it can play the full sequence.

10 - The right foot was doing a full rotation around the Talus in the original LD and HD WM_moatjump sequence. This has been fixed.

Create Python viewmodels.

LD HL1 <-> LD Op4

  • same gun mesh
  • different speedload mesh
  • different hand mesh
  • different hitboxes
  • same attachment
  • same textures except for hands
  • same sequences and fps

LD HL1 <-> LD Blue Shift

  • same gun mesh
  • different speedload mesh
  • different hand mesh
  • different hitboxes
  • same attachment
  • same textures except for hands
  • same sequences and fps

HD HL1 <-> HD Op4

  • same gun mesh
  • different hand mesh
  • different hitboxes
  • same attachment
  • same textures except for hands
  • same sequences and fps

HD HL1 <-> HD Blue Shift

  • same gun mesh
  • different hand mesh
  • different hitboxes
  • same attachment
  • same textures except for hands (Blue Shift has lower resolution v_python_Reference.BMP)
  • same sequences and fps

Low definition:

  • HEV hand
  • Guard hand
  • Soldier hand

High definition:

  • HEV hand
  • Guard hand
  • Soldier hand

Additional information

1 - HD HL1 and Op4 v_python_Reference.BMP are higher resolution than in Blue Shift. The highest resolution has been used.

2 - LD HL1 has different gun mesh UVs compared to Op4/Blue Shift.

3 - LD Op4/Blue Shift and all HD variants are missing the reload sound event. This was added.

4 - LD Op4/Blue Shift python_speedload.smd mesh is messed up. The LD HL1 mesh is used.

5 - HD gun attachment 0 is offset compared to LD variants. This has been fixed.

6 - The new models have been tested in game. No issue has been found.

Create shared scientist models.

HL1 LD <-> Op4 LD

  • Same/Identical meshes
  • Same hitboxes
  • Same sequences for those available except:
    • eye_wipe
    • fall_elevator
  • Different sequence FPS

HL1 LD <-> Blue Shift LD

  • Different meshes
  • Different hitboxes
  • Same sequences for those available
  • Different sequence FPS

HL1 HD <-> Op4 HD

  • Same/Identical meshes
  • Same hitboxes
  • Same sequences for those available except:
    • dryhands
    • fall_elevator
    • lean
  • Different sequence FPS

HL1 HD <-> Blue Shift HD

  • Same/Identical meshes
  • Same hitboxes
  • Same sequences for those available
  • Different sequence FPS

Additional information

1 - Slick head is used as 4th model head. Rosenberg will be moved to a separate model.

2 - HL1 LD scientist mouth bone controller max value is 20 while max in Blue Shift is 16. This will work as long as the max value is used when calling SetBodygroup()

3 - In Op4 crouch_idle sequences, the hands are a bit offset away from the head. The HL1 corresponding sequences will be used since they have correct hand placement.

4 - In Op4, the sequence fall_elevator is identical to fall in HL1. The sequence fall.smd is reused without changing the sequence name. HL1 and Op4 now use the same model. fall_elevator is unused in Op4.

5 - In Op4 HD, the fifth head (clipboard) uses Glasses while the LD uses Einstein. For consistency, Einstein is used since the LD came before HD.

6 - The following sequences were not available in HL1 HD and were converted from HL1 LD:

  • scicrash
  • scicrashidle

7 - The following sequences were empty in Op4 HD and were replaced by those in HL1 HD:

  • dryhands
  • lean

8 - The following sequences were empty in Op4 HD and were converted from Op4 LD:

  • of1_a1_cpr2
  • cpr_gesture1
  • cpr_gesture2

9 - LD -> HD sequences do not animate the scientist tie in HD. The tie can sometimes be seen clipping through the body. Fixing this issue requires manually animating the sequence. At least, those sequences are not used in the game so this can be fixed later. See #28

10 - Blue Shift skeleton hierarchy is different from normal HL1 and has different bone length for the most part. When converting from Blue Shift LD -> HL1 LD, the bones length is recalculated to use the target length (HL1). In some animations, the hands and feet may not entirely match the position of the original animation. In almost all situations, the pelvis is translated to the original animation pelvis position, then the following adjustments are made for specific sequences:

  • Ground animations: The pelvis is translated so that the feet are positioned halfway between both feet in the original animation.
  • Sitting/leaned animations: Feet positions can be translated upward if they clip through the ground.

In addition, for converted sequences, and because LD/HD meshes have different size and volume, the hands can sometimes end up clipping through the body. Fixing this may require translating hands at specific frames, or manually editing the animation.


Tasks:

  • Add Op4 ZR bone controller
  • Add Op4 new heads
  • Replace Rosenberg head with Slick head
  • Add newspaper bodygroup

Add Op4 sequences:

  • germandeath
  • of1_a1_cpr1
  • of1_a1_cpr2
  • of1a1_sci1_stretcher
  • of1a1_sci2_stretcher
  • of4a1_hologram_clipboard1
  • of4a1_hologram_clipboard2
  • of1a1_prod_headcrab
  • cage_float
  • table_twitch
  • interogation_idle
  • interogation
  • cell_idle
  • kneel_idle
  • cpr_gesture1
  • cpr_gesture2
  • thrown_out_window

Add Cleansuit scientist sequences:

  • scientist_throwna
  • scientist_thrownb
  • scientist_beatwindow
  • scientist_deadpose1
  • scientist_zombiefear
  • dead_against_wall
  • teleport_fidget

Add Blue Shift sequences:

  • diesimple_rose
  • cower_chat_die
  • dead_in_truck
  • cower_chat
  • boost
  • boost_idle
  • rose_glance
  • elev_dead1
  • elev_dead2
  • tap_idle
  • tap_down
  • railing_chat1
  • railing_chat2
  • telework1
  • telework1_stand
  • telework2
  • telework3
  • wallwork1
  • wallwork2
  • wallwork3
  • wallwork4
  • wallwork5
  • rose_console1
  • rose_console2
  • rose_console3
  • tele_jump1
  • tele_jump2
  • handscan
  • eating
  • working_console
  • ponder_console
  • cower_vents
  • ponder_teleporter
  • power_pipes
  • in_theory
  • you_go
  • sim_ack
  • sim_lever
  • hambone
  • rose_signal
  • chum_walk
  • chum_idle
  • crowbar_swing
  • open_gate
  • work_jeep
  • drive_jeep1
  • drive_jeep2
  • rose_outro

Add Civilian scientist sequences:

  • sit1
  • sit2
  • playgame1

Add Civilian newspaper scientist sequences:

  • idle1 -> paper_idle1
  • idle2 -> paper_idle2
  • idle3 -> paper_idle3

Add Civilian console scientist sequences:

  • idle1 -> console_idle1
  • work -> console_work
  • shocked -> console_shocked
  • sneeze -> console_sneeze

Add Gordon scientist sequences:

  • tram_glance

Add Cower scientist sequences:

  • cower_die

Adjust maps entities for shared models.

Used for documentation.

Because shared models need to play different sequences that have the same name across 3 games, the following adjustments need to be made to maps.

All maps

Change weapon_shotgun angles (Opposing Force and Blue Shift only)

Change:

  • angles to Y Z X where Y = original pitch, Z = original yaw + 90, X = original roll + 180

Note: because the mesh is not fully centered along Z axis, rotating around the X axis (Roll) can cause the model to clip through the ground in some cases.

Some maps in Op4 and Blue Shift use "angle" keyvalue to set the yaw.

Change:

  • angle to angle + 90

Adjust Male BlackOps heads

For all monster_male_assassin do the following:

With keyvalue "head" "0" (White)

Add:

  • skin = 0

With keyvalue "head" "1" (Black)

Add:

  • skin = 1

Change:

  • head to 0

With keyvalue "head" "2" (Black with thermal vision)

Add:

  • skin = 1

Change:

  • head to 1

Opposing Force

of0a0

Commander grunt holding on

Change:

  • m_iszPlay to intro_stand_fallout
{
"origin" "3288 -1876 640"
"m_iszPlay" "fall_out"
"targetname" "fall_out"
"m_iszEntity" "sergeant"
"m_fMoveTo" "0"
"m_flRepeat" "0"
"m_flRadius" "0"
"delay" "0"
"classname" "scripted_sequence"
}

Change:

  • m_iszPlay to intro_stand_react
{
"origin" "3252 -1876 640"
"m_iszPlay" "stand_react"
"targetname" "stand_react"
"m_iszEntity" "sergeant"
"m_fMoveTo" "0"
"m_flRepeat" "0"
"m_flRadius" "0"
"delay" "0"
"spawnflags" "256"
"classname" "scripted_sequence"
}

Change:

  • m_iszPlay to intro_stand_bark
{
"origin" "3792 -1600 640"
"m_iszPlay" "bark"
"targetname" "sgt_bark"
"m_iszEntity" "sergeant"
"m_fMoveTo" "0"
"m_flRepeat" "0"
"m_flRadius" "0"
"delay" "0"
"classname" "scripted_sequence"
}

Sitting grunt medic

Change:

  • m_iszIdle to intro_sitting_holster3
{
"origin" "3420 -1870 624"
"targetname" "b0rk"
"m_fMoveTo" "4"
"m_flRepeat" "0"
"m_flRadius" "512"
"delay" "0"
"m_iszIdle" "sitting3"
"m_iszEntity" "san"
"angle" "271"
"classname" "scripted_sequence"
}

Sitting regular grunt

Change:

  • m_iszIdle to intro_sitting_mp5_1
{
"origin" "3382 -1938 624"
"targetname" "chism"
"m_fMoveTo" "4"
"m_flRepeat" "0"
"m_flRadius" "512"
"delay" "0"
"m_iszIdle" "sitting1"
"m_iszEntity" "yon"
"angle" "90"
"classname" "scripted_sequence"
}

Sitting SAW grunt

Change:

  • m_iszIdle to intro_sitting_mp5_2
{
"origin" "3344 -1870 624"
"targetname" "fucklob"
"m_fMoveTo" "4"
"m_flRepeat" "0"
"m_flRadius" "512"
"delay" "0"
"m_iszIdle" "sitting2"
"m_iszEntity" "ichi"
"angle" "275"
"classname" "scripted_sequence"
}

Change:

  • m_iszPlay to intro_sitting_react
{
"origin" "3504 -1600 640"
"m_iszPlay" "sit_React"
"targetname" "sit_react"
"m_iszEntity" "ichi"
"m_fMoveTo" "0"
"m_flRepeat" "0"
"m_flRadius" "0"
"delay" "0"
"spawnflags" "100"
"angle" "271"
"classname" "scripted_sequence"
}

Change:

  • m_iszPlay to intro_sitting_stiff
{
"origin" "3472 -1600 640"
"m_iszPlay" "stiff"
"targetname" "sit_stiff"
"m_iszEntity" "ichi"
"m_fMoveTo" "0"
"m_flRepeat" "0"
"m_flRadius" "0"
"delay" "0"
"spawnflags" "100"
"angle" "271"
"classname" "scripted_sequence"
}

Change:

  • m_iszPlay to intro_sitting_cower1
{
"origin" "3536 -1600 640"
"m_iszPlay" "cower"
"targetname" "sit_react2"
"m_iszEntity" "ichi"
"m_fMoveTo" "0"
"m_flRepeat" "0"
"m_flRadius" "0"
"delay" "0"
"spawnflags" "100"
"angle" "271"
"classname" "scripted_sequence"
}

Sitting engineer grunt

Change:

  • m_iszIdle to intro_sitting_holster1
{
"origin" "3382 -1870 624"
"targetname" "sean"
"m_fMoveTo" "4"
"m_flRepeat" "0"
"m_flRadius" "512"
"delay" "0"
"m_iszIdle" "sitting1"
"m_iszEntity" "ni"
"angle" "272"
"classname" "scripted_sequence"
}

Change:

  • m_iszPlay to intro_sitting_cower2
{
"origin" "3632 -1600 640"
"m_iszPlay" "cower"
"targetname" "torch_cower"
"m_iszEntity" "ni"
"m_fMoveTo" "0"
"m_flRepeat" "0"
"m_flRadius" "0"
"delay" "0"
"spawnflags" "100"
"angle" "271"
"classname" "scripted_sequence"
}

of1a1

PCV suit on table in treatments area

Add:

  • model = models/w_pcv.mdl

Reason: Opposing Force uses PCV model.

{
"classname" "item_suit"
"angle" "0"
"body" "1"
"origin" "367 2816 48"
}

Scientist with headcrab stick

Add:

  • item = 2

Change:

  • body to 3

Reason: Scientist holds a specific item. Set the correct body value.

{
"origin" "360 2288 56"
"body" "5"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"targetname" "scientist3"
"spawnflags" "146"
"angle" "90"
"classname" "monster_scientist"
}

of1a2

Fence Otis

Change:

  • m_iszPlay to otis_fence

Reason: Otis fence sequence is now named otis_fence to allow to use the Barney fence sequence.

{
"origin" "1196 1900 -192"
"m_iszPlay" "fence"
"m_fMoveTo" "5"
"targetname" "otis1_fence"
"delay" "0"
"m_flRadius" "512"
"m_flRepeat" "0"
"m_iszEntity" "otis1"
"spawnflags" "104"
"angle" "90"
"classname" "scripted_sequence"
}

Change:

  • m_iszPlay to otis_wave

Reason: Otis wave sequence was renamed to avoid confusion.

{
"target" "otis1_fence"
"classname" "scripted_sequence"
"angle" "0"
"spawnflags" "104"
"m_iszEntity" "otis1"
"m_flRepeat" "0"
"m_flRadius" "512"
"delay" "1"
"targetname" "otis1_wave"
"m_fMoveTo" "1"
"m_iszPlay" "wave"
"origin" "1164 1900 -192"
}

of1a4b

Loader

Add:

  • skin = 1

Reason: To make the Loader use the correct crate texture.

{
"origin" "-1808 672 -1212"
"targetname" "duv_loader"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"rendermode" "0"
"renderfx" "0"
"renderamt" "0"
"spawnflags" "128"
"angle" "90"
"classname" "monster_op4loader"
}

of1a5

Vending machine Otis

Add:

  • body = 3
  • skin = 1

Reason: This Otis uses the bald variant.

{
"origin" "1560 -3424 1339"
"suspicious" "0"
"sleeves" "0"
"head" "1"
"bodystate" "0"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"targetname" "gleasonX"
"spawnflags" "22"
"angle" "183"
"classname" "monster_otis"
}

of1a5b

Vending machine Otis

Add:

  • body = 3
  • skin = 1

Reason: This Otis uses the bald variant.

{
"origin" "112 -2096 1344"
"suspicious" "0"
"sleeves" "-1"
"head" "1"
"bodystate" "-1"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"targetname" "gleason"
"spawnflags" "4"
"angle" "76"
"classname" "monster_otis"
}

Abducted scientist

No longer needed: sciact01 is not referenced, and will not play.

Change:

  • m_iszPlay to eye_wipe_op4

Reason: A single LD/HD variant is used for Op4 and HL1 scientist model. Op4 eye_wipe is different from original so it was moved to a separate sequence.

{
"origin" "-448 -1648 1696"
"delay" "0"
"targetname" "sciact01"
"m_flRadius" "512"
"m_flRepeat" "0"
"m_fMoveTo" "2"
"m_iszEntity" "scihist"
"m_iszPlay" "eye_wipe"
"target" "sciact01a"
"spawnflags" "96"
"angle" "219"
"classname" "scripted_sequence"
}

of4a3

Scientist holding a clipboard

Add:

  • item = 1

Change:

  • body to 1

Reason: Scientist holds a specific item. Set the correct body value.

{
"origin" "-439 -1232 356"
"targetname" "grapple_sci"
"body" "4"
"model" "models/scientist.mdl"
"rendercolor" "0 0 0"
"TriggerCondition" "0"
"renderamt" "0"
"rendermode" "2"
"renderfx" "0"
"spawnflags" "4"
"angle" "180"
"classname" "monster_generic"
}

Tentacle 1

Add:

  • model = models/tentacle2_lower.mdl

Reason: Opposing Force tentacle2.mdl uses level 1,2,3 sequences with lower altitude.

{
"origin" "1831 -2272 256"
"sound" "1"
"sweeparc" "100"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"targetname" "tentacle_1"
"angle" "305"
"classname" "monster_tentacle"
}

Tentacle 2

Add:

  • model = models/tentacle3.mdl

Remove:

  • spawnflags

Reason: To use custom model instead of spawnflags.

{
"origin" "1824 -1288 272"
"targetname" "tentacle_2"
"TriggerCondition" "0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"sound" "1"
"sweeparc" "360"
"rendercolor" "0 0 0"
"spawnflags" "64"
"angle" "180"
"classname" "monster_tentacle"
}

of5a1

Male BlackOps Strafe left/right sequences

Change:

  • m_iszPlay to strafeleft_cine

Reason: strafeleft now has motion extraction. strafeleft_cine is the same sequence without motion extraction.

{
"classname" "scripted_sequence"
"angle" "180"
"spawnflags" "104"
"m_flRepeat" "0"
"m_flRadius" "512"
"delay" "0"
"targetname" "assassin5_roll"
"m_fMoveTo" "0"
"m_iszEntity" "assassin6"
"m_iszPlay" "strafeleft"
"origin" "-288 -1688 64"
}

Change:

  • m_iszPlay to straferight_cine

Reason: straferight now has motion extraction. straferight_cine is the same sequence without motion extraction.

{
"classname" "scripted_sequence"
"angle" "180"
"spawnflags" "104"
"m_iszPlay" "straferight"
"m_iszEntity" "assassin5"
"m_fMoveTo" "0"
"targetname" "assassin5_roll"
"delay" "0"
"m_flRadius" "512"
"m_flRepeat" "0"
"origin" "-336 -1536 64"
}

ofboot2

PCV suit mounted on wall

Add:

  • model = models/w_pcv.mdl

Reason: Opposing Force uses PCV model.

{
"origin" "-600 -152 -86"
"classname" "item_suit"
}

Blue Shift

ba_canal2

Dumped Otis 1

Change:

  • body to 3

Add:

  • skin = 1

Reason: This Otis uses the bald variant.

{
"origin" "-1120 2120 1312"
"model" "models/otis.mdl"
"renderfx" "0"
"rendermode" "0"
"renderamt" "0"
"rendercolor" "0 0 0"
"TriggerCondition" "0"
"body" "0"
"targetname" "dump_otis"
"spawnflags" "134"
"angle" "180"
"classname" "monster_generic"
}

Dumped Otis 2

Change:

  • body to 3

Add:

  • skin = 1

Reason: This Otis uses the bald variant.

{
"origin" "-1184 2120 1312"
"targetname" "dump_otis2"
"body" "0"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"model" "models/otis.mdl"
"spawnflags" "134"
"angle" "180"
"classname" "monster_generic"
}

ba_maint

Console scientist

Change:

  • m_iszIdle to console_idle1
  • m_iszPlay to console_work
{
"origin" "-2170 1328 624"
"targetname" "walter_work"
"m_iszIdle" "idle1"
"m_iszPlay" "work"
"m_flRepeat" "0"
"m_flRadius" "512"
"delay" "0"
"m_fMoveTo" "4"
"m_iszEntity" "walter"
"spawnflags" "4"
"classname" "scripted_sequence"
}

Change:

  • m_iszPlay to console_shocked
{
"origin" "-2584 1248 2120"
"m_iszPlay" "shocked"
"targetname" "walter_shock"
"m_flRepeat" "0"
"m_flRadius" "0"
"delay" "0"
"m_fMoveTo" "0"
"m_iszEntity" "walter"
"classname" "scripted_sequence"
}

Change:

  • m_iszPlay to console_sneeze
{
"origin" "-2576 1376 2120"
"m_iszPlay" "sneeze"
"targetname" "walter_sneeze"
"m_flRepeat" "0"
"m_flRadius" "0"
"delay" "0"
"m_fMoveTo" "0"
"m_iszEntity" "walter"
"classname" "scripted_sequence"
}

Sitting paper scientist

No longer needed: A separate model will be used for newspaper scientist.

Change:

  • model to models/civ_scientist.mdl
{
"origin" "-1788 346 676"
"rendermode" "0"
"renderfx" "0"
"TriggerTarget" "player_not_goody"
"body" "0"
"TriggerCondition" "2"
"rendercolor" "0 0 0"
"renderamt" "0"
"model" "models/civ_paper_scientist.mdl"
"targetname" "chump"
"spawnflags" "8"
"angle" "270"
"classname" "monster_generic"
}

Change:

  • m_iszPlay to paper_idle3

Add:

  • m_iszIdle = paper_idle1
{
"origin" "-1788 312 640"
"m_iszEntity" "chump"
"m_iszPlay" "idle3"
"m_fMoveTo" "0"
"m_flRepeat" "0"
"m_flRadius" "512"
"delay" "0"
"targetname" "sent_el_screwio"
"classname" "scripted_sequence"
}

ba_outro

Dr. Rosenberg

Change:

  • model to models/rosenberg.mdl

Remove:

  • body
{
"origin" "-2144 -2192 36"
"model" "models/scientist.mdl"
"renderamt" "0"
"targetname" "dr_rosenberg"
"body" "3"
"rendercolor" "0 0 0"
"spawnflags" "8"
"angle" "218"
"classname" "monster_generic"
}

ba_security2

Shotguns in armory

Change:

  • angles to -90 0 90 (For all below)

Reason: Blue Shift shotgun world model has a different orientation.

{
"origin" "704 1744 484"
"angles" "0 0 -90"
"body" "0"
"model" "models/w_shotgun.mdl"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"targetname" "shotgun1"
"spawnflags" "4"
"classname" "monster_generic"
}

{
"origin" "704 1760 484"
"angles" "0 0 -90"
"body" "0"
"model" "models/w_shotgun.mdl"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"targetname" "shotgun2"
"spawnflags" "4"
"classname" "monster_generic"
}

{
"origin" "704 1776 484"
"angles" "0 0 -90"
"body" "0"
"model" "models/w_shotgun.mdl"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"targetname" "shotgun3"
"spawnflags" "4"
"classname" "monster_generic"
}

{
"origin" "704 1792 484"
"angles" "0 0 -90"
"body" "0"
"model" "models/w_shotgun.mdl"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"targetname" "shotgun4"
"spawnflags" "4"
"classname" "monster_generic"
}

Otis at shooting range

Change:

  • body to 15

Add:

  • skin = 1

Reason: This Otis uses the bald variant, and holding a donut.

{
"origin" "368 1376 492"
"rendercolor" "0 0 0"
"renderamt" "0"
"renderfx" "0"
"TriggerCondition" "2"
"TriggerTarget" "player_not_goody"
"rendermode" "0"
"body" "2"
"model" "models/otis.mdl"
"targetname" "otis"
"spawnflags" "144"
"angle" "270"
"classname" "monster_generic"
}

ba_teleport1

Dr. Rosenberg

Change:

  • model to models/rosenberg.mdl

Remove:

  • body
{
"origin" "-528 -1200 48"
"TriggerTarget" "rosenberg2_death"
"model" "models/scientist.mdl"
"rendermode" "0"
"renderfx" "0"
"body" "3"
"TriggerCondition" "2"
"rendercolor" "0 0 0"
"renderamt" "0"
"targetname" "dr_rosenberg2"
"spawnflags" "8"
"classname" "monster_generic"
}

ba_teleport2

Dr. Rosenberg

Change:

  • model to models/rosenberg.mdl

Remove:

  • body
{
"origin" "80 176 36"
"rendermode" "0"
"renderfx" "0"
"body" "3"
"model" "models/scientist.mdl"
"TriggerTarget" "rosenberg_death"
"TriggerCondition" "4"
"rendercolor" "0 0 0"
"renderamt" "0"
"targetname" "dr_rosenberg1"
"spawnflags" "8"
"classname" "monster_generic"
}

{
"origin" "-1456 -912 36"
"rendermode" "0"
"renderfx" "0"
"body" "3"
"model" "models/scientist.mdl"
"TriggerTarget" "rosenberg_death"
"TriggerCondition" "4"
"rendercolor" "0 0 0"
"renderamt" "0"
"targetname" "dr_rosenberg2"
"spawnflags" "8"
"angle" "90"
"classname" "monster_generic"
}

ba_tram1

Sitting paper scientist

No longer needed: A separate model will be used for newspaper scientist.

Change:

  • model to models/civ_scientist.mdl
{
"origin" "-2840 768 104"
"targetname" "sitter"
"model" "models/civ_paper_scientist.mdl"
"body" "2"
"spawnflags" "256"
"classname" "monster_generic"
}

Change:

  • m_iszIdle to paper_idle3
{
"origin" "-2904 720 64"
"m_iszIdle" "idle3"
"m_iszEntity" "sitter"
"m_fMoveTo" "4"
"m_flRepeat" "0"
"m_flRadius" "512"
"delay" "0"
"spawnflags" "256"
"classname" "scripted_sequence"
}

Scientist carrying coat

No longer needed. It will use a separate model.

Change:

  • model to civ_scientist.mdl
{
"origin" "-2880 1184 128"
"model" "models/civ_coat_scientist.mdl"
"body" "1"
"targetname" "laundry_walker"
"spawnflags" "130"
"angle" "129"
"classname" "monster_generic"
}

Add:

  • m_iszIdle = coat_idle
  • m_iszMove = coat_walk
{
"origin" "-3296 2016 96"
"targetname" "laundry_walker_go"
"m_iszEntity" "laundry_walker"
"m_fMoveTo" "1"
"m_flRepeat" "0"
"m_flRadius" "512"
"delay" "0"
"spawnflags" "96"
"angle" "90"
"classname" "scripted_sequence"
}

ba_tram2

Otis at cafeteria

Add:

  • body = 3
  • skin = 1

Reason: This Otis uses the bald variant.

{
"origin" "768 -832 2352"
"targetname" "otis_bigbooty"
"model" "models/otis.mdl"
"TriggerCondition" "0"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"spawnflags" "272"
"angle" "288"
"classname" "monster_generic"
}

Otis with clipboard

Add:

  • body = 9
  • skin = 1

Reason: This Otis uses the bald variant, and holding a clipboard.

{
"origin" "3392 -656 2312"
"TriggerCondition" "0"
"rendermode" "0"
"renderfx" "0"
"targetname" "otis_redding"
"model" "models/intro_otis.mdl"
"rendercolor" "0 0 0"
"spawnflags" "266"
"angle" "270"
"classname" "monster_generic"
}

ba_yard5a

Dr. Rosenberg

Add:

  • model = models/rosenberg.mdl

Remove:

  • body
{
"origin" "-3840 -3128 -128"
"TriggerTarget" "dr_rosenberg_death_mm"
"targetname" "dr_rosenberg"
"TriggerCondition" "4"
"body" "3"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "0"
"renderfx" "0"
"spawnflags" "6"
"classname" "monster_rosenberg"
}

Change:

  • model to models/rosenberg.mdl

Remove:

  • body
{
"origin" "1220 640 108"
"model" "models/scientist.mdl"
"TriggerTarget" "dr_rosenberg_death_mm"
"targetname" "dr_rosenberg_fake"
"TriggerCondition" "2"
"body" "3"
"rendercolor" "0 0 0"
"renderamt" "0"
"rendermode" "2"
"renderfx" "0"
"spawnflags" "10"
"classname" "monster_generic"
}

Create shared Hologram model.

holo.mdl has no HD variant.

LD HL1 <-> LD Op4

  • Identical

LD HL1 <-> LD Blue Shift

  • same mesh
  • same bone controllers
  • same textures, except PLAYER_Teeth1.bmp
  • slightly different hitboxes
  • same sequences and fps for those available

Add the following Blue Shift sequences:

  • pushcart

Additional information

1 - Original model mouth was glitchy. It has been reworked. Teeth were also added.

2 - Bone weights have been tweaked.

3 - Original LD use hitgroup 0 (HITGROUP_GENERIC). Correct hitgroups have been added for the new model.

4 - Hitboxes have been reworked.

5 - Mesh UVs have been reworked.

6 - The original model has no head XR bone controller. I added one so it can turn head toward clients.

Create shared shotgun world model.

LD HL1 <-> LD Op4

  • different hitboxes
  • same sequences and fps
  • different mesh (Op4 mesh is 90 degrees rotated on Z axis and 180 degrees on X axis)
  • different textures

LD HL1 <-> LD Blue Shift

  • different hitboxes
  • same sequences and fps
  • different mesh (Blue Shift mesh is 90 degrees rotated on Z axis and 180 degrees on X axis)
  • different textures

LD Op4 <-> LD Blue Shift

  • Identical

HD HL1 <-> HD Op4

  • same mesh (Op4 mesh is 90 degrees rotated on Z axis and 180 degrees on X axis)
  • same sequences and fps
  • same hitboxes
  • same textures

HD HL1 <-> HD Blue Shift

  • same mesh (Blue Shift mesh is 90 degrees rotated on Z axis and 180 degrees on X axis)
  • same sequence and fps
  • same hitboxes
  • same textures

HD Op4 <-> HD Blue Shift

  • Identical

  • Create a model with the Op4 LD mesh

Additional information

1 - The LD Op4/Blue Shift world shotgun has a higher resolution texture. The Op4 model has been used.

2 - Op4 and Blue Shift world model is rotated 90 degrees around Z axis (Yaw) and 180 degrees around X axis (Roll). The model has been adapted to face the HL1 orientation.

3 - All HD variants are identical. No need for a custom HD model.

Map changes

See #27 in maps:

  • All maps (Change weapon_shotgun angles)
  • ba_security2.bsp (Shotguns in armory)

Create shared Coat scientist model.

  • Create shared coat scientist civilian model with:
    • default LD scientist body mesh
    • Blue Shift LD scientist body mesh
    • HD blue shirt body mesh
  • Add shared scientist bone controllers
  • Use same hitboxes as shared scientist LD/HD

Additional information

See #88 Additional information for more info.

Create shared Gordon scientist model.

LD Blue Shift <-> HD Blue Shift

  • Same head mesh
  • Same hitboxes
  • Same bone controllers
  • Same sequences
  • Different body mesh (LD/HD)

  • Create shared Gordon scientist model with:
    • default LD scientist body mesh
    • Blue Shift LD scientist body mesh
    • HD scientist body mesh
  • Add all shared scientist sequences
  • Add shared scientist bone controllers
  • Add clipboard and headcrab stick bodygroups
  • Use same hitboxes as shared scientist LD/HD

Additional information

The head mesh UVs have been reworked to reduce seams but there still are a few minor seams along the front side of the neck, which likely happens because of the texture border introduced by linear filtering. With Point filtering, there are no visible seams.

The original model has no mouth bone controller. I added it so modders can make the model speak. LD Blue Shift variant uses the corresponding mouth and teeth textures to keep consistency.

The original model has a badge on upper torso. It was removed for the following reasons:

  1. The badge would clip inside the body if the associated spine bone would rotate too much. To make it functional, it would require adding an extra bone, tie the badge to this new bone, and animate the bone in each sequence to ensure it works. This in itself would be a lot more work.

  2. To make it consistent with other LD models since the other LD scientists don't have badges.

The badge is kept in the HD variant.

Potential issues within StudioMDL.

@SamVanheer

While reworking mesh UVs with viewmodels I found texture coordinates were slightly offset in HLAM compared to the ones in blender. After investigating StudioMDL source code, I found potential issues I wish to discuss.

To illustrate the issues, I created a simple case with a textured cube. The texture is low resolution because it's easier to show the issue. The texture is 37x35. On purpose, I made the texture size not power of 2.

Here is the unwrap sheet in blender :

blender

Here is the unwrap in HLAM after compilation by unmodified StudioMDL :

HLAM_texture_coordinate_issue

In this case the texture coordinates are slightly offset up and left for the most part. On higher resolution textures, this could be more.

Texture coordinates are UVs mapped to pixels. For example given a 64x32 texture, UVs (0,0) (0,5,0.5) (1,1) would map to (0,0) (32,16) (64,32).

When the code calculates the texture coordinates, it subtracts 1 pixel from texture width and height, which results in at least 1 pixel lost.

https://github.com/malortie/custom-hl-viewmodels/blob/b95b433aeaacdb231f0bc0a8cbee7a53b947267c/utils/studiomdl/studiomdl.c#L1407-L1408

When getting the skin width and height, it adds 1, probably because of the previously subtracted pixel but I think it's incorrect.

https://github.com/malortie/custom-hl-viewmodels/blob/b95b433aeaacdb231f0bc0a8cbee7a53b947267c/utils/studiomdl/studiomdl.c#L1528-L1529

After fixing the aforementioned lines, the resulting texture coordinates are now correctly aligned with the texture.

HLAM_texture_coordinate_issue_fixed

There was still extra space on the right and I believe this is coming from the following line in GetSkinWidth(). When power of 2 is disabled, the code returns the width as a multiple of 4.

https://github.com/malortie/custom-hl-viewmodels/blob/b95b433aeaacdb231f0bc0a8cbee7a53b947267c/utils/studiomdl/studiomdl.c#L1498-L1501

It should return rawsize unchanged like in GetSkinHeight(). Later in the code, the width is eventually adapted to be a multiple of 4 for BMP so it shouldn't be changed before.

https://github.com/malortie/custom-hl-viewmodels/blob/b95b433aeaacdb231f0bc0a8cbee7a53b947267c/utils/studiomdl/studiomdl.c#L1545-L1546

After fixing rawsize, the texture shows no extra space which is likely the expected result :

HLAM_extra_space_fixed


I pushed the changes in the branch texture-coordinate-issue. If you could take the time to review the changes and provide feedback, this would be appreciated.

See the following files :

  • bin/studiomdl_fixed.exe (Fixed version of studiomdl.exe)
  • modelsrc/cube/compiled_with_original_studiomdl/cube.mdl (Offset texture coordinates)
  • modelsrc/cube/cube.mdl (Fixed texture coordinates)

Additional information

Because texture coordinates are stored as integers and UVs are floats, the decimal part of the UVs is discarded so can result in a pixel offset farther than it's intended location. I used lroundf to ensure the nearest integer value is returned.

Create shared Loader model.

The loader has no HD variant.

HL1 <-> Op4

  • same hitboxes
  • same mesh
  • same textures, but Op4 has different crate textures
  • same sequences and fps for those available

HL1 <-> Blue Shift

  • Identical

  • Add Op4 crate texture as new skin

Add the following Opposing Force sequences :

  • 45_left
  • park
  • blocked
  • freed
  • dropbox
  • pivotback

Additional information

1- freeze sequence is identical to heroidle. It was removed.

2- Original LD/HD all use hitgroup 0 (HITGROUP_GENERIC). Correct hitgroups have been added for the new models.

3- Hitbox 'body' was covering unnecessary area. It was removed.

4- Several hitboxes have been reworked.

Notable hitgroups:

  • Crate: 0
  • Rear left leg: 8
  • Rear right leg: 9

5- Op4 Loader crate texture is different from HL1. It has been put as a second skin.

Additional details

In HLAM, I found the Op4 crate texture was cropped. When investigating in StudioMDL, I found that the crate03 and crate03b textures are skipped when calculating texture coordinates.

https://github.com/ValveSoftware/halflife/blob/c7240b965743a53a29491dd49320c88eecf6257b/utils/studiomdl/studiomdl.c#L1631-L1637

As a result, the parent texture min/max texcoords are used because texture[i].max_s < texture[i].min_s.

https://github.com/ValveSoftware/halflife/blob/c7240b965743a53a29491dd49320c88eecf6257b/utils/studiomdl/studiomdl.c#L1654-L1657

I manually set the expected S and T values and compiled normally. In HLAM, it still shows cropped in 3D viewport, but in texture panel the texture is full and uncut. In game, it seems to ignore different texture sizes and simply takes the first skin family texture dimension. It seems the game assumes all textures per skin family have the same dimension. This can't be fixed unless Valve updates the renderer.

Because the Op4 crate textures dimensions were 96x128, this caused them to appear stretched because of the box has a cube shape. I extracted C1A1_CRATE2 from halflife.wad which is 96x96 and resized wooden crate textures so they all have the same dimensions.

Unprecached event sounds

Many sequences play sounds using events. Extra sounds may need to be precached in code.

  • ambience/wood2.wav
  • ambience/warn2.wav
  • ambience/turretrot1.wav
  • common/splash_large.wav
  • debris/bustmetal1.wav
  • debris/bustmetal2.wav
  • debris/metal6.wav

Map changes

See of1a4b / Loader in #27.

Rework pelvis mesh.

Various models, including Barney, Otis and Player have issues in sequences where the pelvis and legs are rotated too far.

This issue is visible in barney.mdl and otis.mdl sequences:

  • cowering
  • otis_dumped
  • otis_dumped_idle

One way to improve it would be to split lower pelvis vertices and parent them to each respective leg.


2023-07-22

All LD/HD models have been inspected except:

  • Player weapon models (p_.*)
  • View models (v_.*)
  • Weapon & object world models (w_.*)

The list below lists all meshes that are subject to the issue explained above. Note that depending on where the pelvis root vertex is positioned, the issue is more or less visible in certain models but that's still an issue.

LD meshes:

  • barney/meshes/BARNEY-X_Template_Biped1.smd
  • cleansuit_scientist/meshes/ld/SCI3_Template_Biped1(Headless_Body).smd
  • dead_barney/meshes/ld/dead_barney_ref_pc.smd
  • gman/meshes/ld/gman_reference.smd
  • gonome/meshes/gonome_ref.smd
  • hgrunt/meshes/ld/gruntbody.smd
  • holo/meshes/hologram.smd
  • massn/meshes/ld/Massn_reference.smd
  • otis/meshes/otis_body_reference.smd
  • player/player_template_biped(No_Head)1.smd
  • player/player_template_biped_barney.smd
  • shared/meshes/hgrunt_opfor/ld/grunt_fatigues_reference.smd
  • shared/meshes/scientists/ld/SCI3_Template_Biped1(Headless_Body).smd
  • zombie/meshes/Zom3_Template_Biped(White_Suit)1.smd
  • zombie_barney/meshes/zombie_barney_reference.smd
  • zombie_soldier/meshes/zombie_soldier_reference.smd

HD meshes:

  • barney/meshes/hd/BARNEY-X_Template_Biped1.smd
  • dead_barney/meshes/hd/dead_barney_ref.smd
  • gman/meshes/hd/dc_gman_reference.smd
  • hgrunt/meshes/hd/DC_soldier_reference.smd
  • shared/meshes/civ_scientists/hd/dc_sci_(CIV_headless_body).smd
  • shared/meshes/hgrunt_opfor/hd/grunt_fatigues_reference.smd
  • shared/meshes/scientists/hd/dc_sci_(headless_body).smd
  • zombie/meshes/hd/blue_zom.smd

Because HL1 models don't have vertex blending support, a vertex can only be assigned to one bone. Because the pelvis root vertex is often parented to either Bip01 or Bip01 Pelvis and never to one of the legs, it stays in place which results in visible mesh deformation when legs are rotated away.

Solutions:

A) Parent the pelvis root vertex to one of the legs but this can also cause mesh deformation in certain models when legs are rotated away from each others. (Easiest)

B) Create an edge loop around the pelvis root vertex to allow each leg to have their appropriate vertex. The original root vertex would then have to be removed. The edge loop can be made extremely thin to make it look as if there is still one root vertex.

Solution B) is preferable.

Tests:

Additionally, custom animations that animate the legs in different positions could be made to be able to quickly view if any issue arise after that once all meshes are fixed. Those animations would not be included in the release models.

  • (Optional) Create custom animations that rotate legs in different positions
  • (Optional) Create test models for use with the custom animations

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.