Divine Skins
Divine Skins Wiki

Hero swap part 3: attachments, camera, and game data

Copy every attachment, camera preview, and game data block from the original hero so the camera, health bar, and sounds still work.

Advanced

Part 3 of 4. You start with viper_work.vmdl, which compiles in CSDK 12 after part 2. You finish with the original hero's attachments, camera previews, and game data in your model. Then the camera, health bar, and sounds work. The whole path is in Hero model swap: overview.

The four parts of a hero model swap, with part 3, attachments, highlighted

What you need

Open your work model from part 2 in ModelDoc. Use Source 2 Viewer 20.0 or newer, or a dev build from 2026-08-04 or later.

Watch the walkthrough

Basilisken fixes the camera and FOV from 1:14:44. Pugzilla covers attachments from 34:31 and the health bar from 53:21.

This video uses an older interface

Both videos predate the Source 2 Viewer fix of August 2026, so they copy every value by hand. With a current build, you mostly check values.

Why attachments matter

Attachments are named points on the skeleton. The game hangs things on them: the camera, gun aim, muzzle flash, ability effects, the health bar, the portrait camera, ziplines, and foot placement. Game data blocks hold the rest, such as camera offsets, health bar height, and sound settings.

Wrong values put the camera in the middle of the screen. They can also drop the health bar to the feet or mute hero sounds.

The rule for this part

Every value in this part comes from the original hero. You copy values. You never invent or tune them.

WhatWhat you do
Attachment positions and anglesCopy them from the original
Camera preview FOV valuesUse the original hero's values
CitadelCameraSettings_t (camera offsets and heights)Keep the original values. Never change them
Hitboxes (HitboxSetList)Keep the original sets. Never edit, scale, or delete them
Every other game data blockCopy it from the original
Camera values and hitboxes are off limits

A different camera offset, height, or FOV gives you a wider or higher view than other players. Changed hitboxes change what you see when you aim. Both are unfair mods, and this wiki never covers them. CSDK 12 compiles the original hitbox sets fine, so there is no reason to touch them.

Check your Source 2 Viewer version

Source 2 Viewer builds from before 2026-08-04 decompiled attachments with small errors. A pivot angle of -90 came out as -89.972. That small error puts the camera in the middle of the screen.

  • You decompiled with 20.0 or newer, or a dev build from 2026-08-04 or later: your values should already match. Check them below.
  • You decompiled with an older build: copy every camera attachment value by hand, as shown below.

Quick check: select standing_pivot in your model. Its angles should be whole numbers like -90, not -89.97.

Copy the original values

Make a reference copy of the original

The compiled original keeps the exact values. Put a copy where CSDK 12 can open it.

  1. In Source 2 Viewer, right-click the hero's .vmdl_c and choose Export as is.
  2. Save it into CSDK 12's own game folder, at the same path: Reduced_CSDK_12/game/citadel/models/heroes_staging/viper/.
  3. In the CSDK 12 Asset Browser, open that viper.vmdl_c.
  4. Place it next to your work model, so you can read both.
viper.vmdl_c

Never let your own compiled model overwrite this copy. A replaced reference is a common cause of the centered camera. Your viper_work file name keeps them apart.

Pugzilla's short video Compiled Models In CSDK exports every hero this way. It takes 4 to 5 GB and slows CSDK 12 down, so one hero is enough here.

Copy attachment positions and angles

Diagram: the eleven camera attachments in four groups. Pivots: standing_pivot and crouching_pivot. Near and far: near_00 to near_02 and far_00 to far_02, preview FOV 90 on most heroes. Gun aim: gunaim_00 to gunaim_02, preview FOV set to the hero's own value.
  1. Open AttachmentList in both models.
  2. Select standing_pivot in each model and compare Relative Origin and Relative Angles.
  3. Copy the reference values wherever yours differ.
  4. Repeat for crouching_pivot, near_00 to near_02, far_00 to far_02, and gunaim_00 to gunaim_02.
  5. Check that the other attachments are all there too, such as aim, ability_cast, muzzle_fx, head_fx, healthbar, portrait_camera, and zipline.
  6. Click Compile.

Never delete or move an attachment. If one is missing, copy it from the reference.

Add camera previews

Each camera attachment needs a preview with the right field of view (FOV).

  1. In Source 2 Viewer, open the original .vmdl_c and go to the Data tab.
  2. Find AttachmentCameraData. Note the FOV it lists for each camera attachment.
  3. In ModelDoc, select standing_pivot through gunaim_02.
  4. Right-click them and choose Add Attachment Preview.
  5. Set the FOV to 90 and the screen size to 1920 by 1080.
  6. Select the three gunaim_ attachments. Set their FOV to the hero's own value from the Data tab.
  7. Click Compile.

The gun aim FOV differs per hero. The guides show 42 for Vyper, 50 for Billy, and 55 for Drifter. Use the number in your hero's Data tab.

Add the camera prefab

Fuji's guide adds ready-made camera data from CSDK 12. This step comes from one guide and may differ on the current build.

  1. Open content/citadel/models/prefabs/camera_attachmentdata/ in your CSDK 12 folder.
  2. Find camera_attachmentdata_<hero>.vmdl_prefab for your hero.
  3. Add a prefab node to your model that points to this file.
  4. Right-click the prefab node and choose Flatten Prefab.
  5. Click Compile.

The folder is missing? Update CSDK 12. Older guides set this camera data in CS2 Workshop Tools instead.

Copy the game data

GameDataList holds Deadlock's own settings for the hero. Source 2 Viewer has written these blocks into decompiled models since version 17.0, so yours should be there already.

BlockWhat it controls
CCitadelHeroModelGameData_tHero select and shop animation graphs, ambient particles
CitadelCameraSettings_tCamera offsets and heights. Never change it
CitadelUnitStatusSettings_tHealth bar height
CitadelTaggedSoundSettings_tHero sounds. Without it, some sounds go missing
CitadelMuzzleSettings_tMuzzle flash
CitadelEventIDToBodyGroupMapping_tGame events that switch bodygroups
CitadelModelParticleSettings_tParticles on the model
CitadelModelDamageNumberSettings_tDamage numbers
Feet nodesFootstep sounds
  1. Open GameDataList in your model.
  2. Compare each block with the original's Data tab in Source 2 Viewer.
  3. Copy every value that differs.
  4. Add any block that is missing. Use the text editor method below.
  5. Click Compile.

Some heroes have extra blocks, for example for a pet or a second rig. Copy those too.

Copy a block with a text editor

Use this for any block that is missing or wrong. The health bar block is the usual one.

  1. In Source 2 Viewer, decompile the original hero's .vmdl_c as .vmdl into a new, empty folder.
  2. Open that file and your viper_work.vmdl in your text editor.
  3. Search both files for the block name, such as CitadelUnitStatusSettings_t.
  4. Replace your block with the original block. If yours is missing, paste the original next to the other game data blocks.
  5. Save your file.
  6. Go back to ModelDoc. It warns that the file changed outside the editor. Reload it.
  7. Click Compile.

Check your work

  1. Click Compile and fix any errors.
  2. Count the attachments in your model and in the reference. The numbers should match.
  3. Keep the reference copy. You need it again after game updates.

You cannot check the camera in game yet. Part 4 adds the animations, then you test the camera, aiming, health bar, and sounds.

Common problems

  • The camera sits in the middle of the screen. A camera attachment value differs from the original. See Model and skin problems.
  • The health bar sits at the feet. Copy CitadelUnitStatusSettings_t with the text editor method above.
  • Some hero sounds are missing. Copy CitadelTaggedSoundSettings_t and the feet nodes the same way.

Next steps

Hero swap part 4: add AnimGraph 2 and compile
Advanced

Link the hero's skeleton and animations in CS2 Workshop Tools, then pack and test your skin.

Credits

This guide is based on the work of these creators. Check out their original guides.