henbagle / LE1CommunityPatch

Issue tracker for the Community Patch mod for Mass Effect 1: Legendary Edition
13 stars 0 forks source link

Eye movements can be seen on dead people #102

Closed henbagle closed 2 years ago

henbagle commented 2 years ago

File: SFXGame.pcc

Needs fixed in localized file? No

Export ID/TLK Str Ref: 6112, 6117

Description of fix: The BioPawn class has two functions that handle disabling and re-enabling of eye blink movements, DisableEyeBlinks and EnableEyeBlinks respectively. These functions are called, for example, in Action Stations where the pawn is supposed to be dead, or sometimes at the start and end of FaceFX Animations. These two functions work by disabling a specific AnimNode. The name of this AnimNode is configurable, in Coalesced (EyeNoiseNodeName in BIOGame.ini).

The problem is that there are two AnimNodes, not one, that need to be disabled for the eye movements to stop. Export 65 and 66 in BIOC_Materials. "AddEyeballNoise" and "AddEyeBlinkNoise". Coalesced only specifies the latter, so it is the only one that is disabled. To fix this, we have updated these two BioPawn methods so they no longer use the coalesced specified node, and disable two hard-coded nodes. These scripts are updated via merge mod. The updated text of both methods is below.

DisableEyeBlinks:

public final function DisableEyeBlinks()
{
    local array<AnimNode> AnimNodes;
    local AnimNode Node;
    local AnimNodeAdditiveBlending AdditiveNode;

    if (Mesh == None)
    {
        return;
    }
    DisableEyeBlinkRefCount++;
    if (bEyeBlinkDisabled)
    {
        return;
    }
    AnimNodes = Mesh.AllAnimNodes(Class'AnimNodeAdditiveBlending');
    foreach AnimNodes(Node, )
    {
        AdditiveNode = AnimNodeAdditiveBlending(Node);
        if (AdditiveNode != None && (AdditiveNode.NodeName == 'AddEyeBlinkNoise' || AdditiveNode.NodeName == 'AddEyeballNoise'))
        {
            AdditiveNode.SetBlendTarget(0.0, 0.0);
        }
    }
    bEyeBlinkDisabled = TRUE;
}

EnableEyeBlinks:

public final function EnableEyeBlinks()
{
    local array<AnimNode> AnimNodes;
    local AnimNode Node;
    local AnimNodeAdditiveBlending AdditiveNode;

    if (Mesh == None)
    {
        return;
    }
    DisableEyeBlinkRefCount--;
    if (DisableEyeBlinkRefCount == 0)
    {
        AnimNodes = Mesh.AllAnimNodes(Class'AnimNodeAdditiveBlending');
        foreach AnimNodes(Node, )
        {
            AdditiveNode = AnimNodeAdditiveBlending(Node);
            if (AdditiveNode != None && (AdditiveNode.NodeName == 'AddEyeBlinkNoise' || AdditiveNode.NodeName == 'AddEyeballNoise'))
            {
                AdditiveNode.SetBlendTarget(1.0, 0.0);
            }
        }
        bEyeBlinkDisabled = FALSE;
    }
}