Cannot decompile 2: the Ichthyoquel

Creating a new thread instead of necroing another. Click here for the first thread.
I am attempting to modify the Ichthyosaur’s model, but after recompiling I am left with this:

I have (more than sorta) determined that this is caused by the animations breaking upon being decompiled. I’ve searched high and low for an answer, and I have found that this is a relatively unknown issue, but nobody has yet figured out an answer (apart from remaking the animations themselves).

Just as before, the model was modified in Blender, and Crowbar was used to decompile and recompile the model in question.

As far as I know, this only applies to npc models that have existed since the mod version, and therefore may be caused by the models being manufactured with an old toolset/workflow unique to Black Mesa during it development as a mod.

It should be noted that this effect still applies even before modifying the .smd in Blender [read: decompiling and recompiling the model only], which seems to support the theory above.

AnyACTUAL help would be appreciated.

Bump, as this is still a problem.

Another bump, as a solution has yet to be reached.

Third bump’s the charm!

Third Fourth bump’s the charm!

F_SchoManno, I suggest you checkout the discord for Source Modding Community, they should be able to help you.
https://discordapp.com/invite/wpFf2f6

Post in the source_modding channel.

First, I’m by no means an expert, but from what I can tell, Crowbar doesn’t handle delta animations very well. If you look in the .QC file, you’ll find these $animation definitions:

[code]$Animation “a_swimright” “ichthyosaur_anims\a_swimright.smd” {
fps 30
// This subtract line guesses the animation name and frame index. There is no way to determine which $animation and which frame was used. Change as needed.
subtract “icky_delta.smd” 0
}

$Animation “a_swimleft” “ichthyosaur_anims\a_swimleft.smd” {
fps 30
// This subtract line guesses the animation name and frame index. There is no way to determine which $animation and which frame was used. Change as needed.
subtract “icky_delta.smd” 0
}

$Animation “a_swimup” “ichthyosaur_anims\a_swimup.smd” {
fps 30
// This subtract line guesses the animation name and frame index. There is no way to determine which $animation and which frame was used. Change as needed.
subtract “icky_delta.smd” 0
}

$Animation “a_swimdown” “ichthyosaur_anims\a_swimdown.smd” {
fps 30
// This subtract line guesses the animation name and frame index. There is no way to determine which $animation and which frame was used. Change as needed.
subtract “icky_delta.smd” 0
}[/code]
What happens here is that the “subtract” lines will subtract the animation in the icky_delta.smd, which contains a reference pose, from the “a_swimright”, “a_swimleft”, “a_swimup” and “a_swimdown” animations, thus creating deltas for these animations. However, the “a_swimright.smd”, “a_swimleft.smd”, “a_swimup.smd” and “a_swimdown.smd” files already contain the delta animations, which means the reference pose is being subtracted twice from the original animations!

Further down, the $sequence definitions that reference these animations also contain subtract commands:

[code]$Sequence “side_to_side” {
“a_swimright”
“a_swimleft”
autoplay
blend “sidetoside” -90 90
blendwidth 2
delta
fadein 0.2
fadeout 0.2
hidden
fps 30
// This subtract line guesses the animation name and frame index. There is no way to determine which $animation and which frame was used. Change as needed.
subtract “icky_delta.smd” 0
}

$Sequence “up_and_down” {
“a_swimup”
“a_swimdown”
autoplay
blend “upanddown” -90 90
blendwidth 2
delta
fadein 0.2
fadeout 0.2
hidden
fps 30
// This subtract line guesses the animation name and frame index. There is no way to determine which $animation and which frame was used. Change as needed.
subtract “icky_delta.smd” 0
}[/code]I’m not sure if the “subtract” commands here have any effect. The $sequence page on the VDC wiki doesn’t mention the “subtract” command as being a valid command in a $sequence definition block. In any case, it doesn’t make any sense to include them here since they have already been included in the respective $animation definition blocks.

Crowbar has however correctly inserted the “delta” command in these blocks which states that the referenced animations contain animations that have been subtracted (delta animations), and that these sequences are meant to be played on top of whatever sequence(s) that are currently being played.

TLDR;[/size]
[/size]
The solution[/size] is to delete (or comment out) all the “subtract” lines from the .QC file.

I’ve confirmed that this solves the problem, at least for viewing in HLMV. I haven’t tested if it works correctly in-game.

Another solution would be to numerically add the animation data in “icky_delta.smd” file to the animation data in “a_swimright.smd”, “a_swimleft.smd”, “a_swimup.smd” and “a_swimdown.smd” files, and keep the “subtract” commands in their respective $animation definition blocks. But I think you would have to write a script or a program to do that.

A third solution would of course be to recreate the “a_swimright”, “a_swimleft”, “a_swimup” and “a_swimdown” animations from scratch, using “icky_delta.smd” as the starting point for the animations.
ichthyosaur.qc.txt (9.22 KB)

Founded in 2004, Leakfree.org became one of the first online communities dedicated to Valve’s Source engine development. It is more famously known for the formation of Black Mesa: Source under the 'Leakfree Modification Team' handle in September 2004.