Jump to content

Solution for invisible ghost on shape-shifting character (like Wolfgang)

Recommended Posts

I've found the solution for this, so I thought I'd share it with you since it was pretty tough to figure out based on the problem.


Basically you need to make the character stop shape shifting while dead.

-- All code stolen right from Wolfgang, so some of this might not be relevant for you.-- Just before your conditions which trigger shape shifting. In Wolfgang's case this is his "onhungerchange" function.if inst.sg:HasStateTag("nomorph") or        inst:HasTag("playerghost") or        inst.components.health:IsDead() then        return    end-- Enable and disable stuff depending on if the character is alive or dead.local function onbecamehuman(inst)    if inst._wasnomorph == nil then        inst.strength = "normal"        inst._wasnomorph = inst.sg:HasStateTag("nomorph")        inst.talksoundoverride = nil        inst.hurtsoundoverride = nil        inst:ListenForEvent("hungerdelta", onhungerchange)        inst:ListenForEvent("newstate", onnewstate)        onhungerchange(inst, nil, true)    endendlocal function onbecameghost(inst)    if inst._wasnomorph ~= nil then        inst.strength = "normal"        inst._wasnomorph = nil        inst.talksoundoverride = nil        inst.hurtsoundoverride = nil        inst:RemoveEventCallback("hungerdelta", onhungerchange)        inst:RemoveEventCallback("newstate", onnewstate)    endendlocal function onload(inst)    inst:ListenForEvent("ms_respawnedfromghost", onbecamehuman)    inst:ListenForEvent("ms_becameghost", onbecameghost)    if inst:HasTag("playerghost") then        onbecameghost(inst)    else        onbecamehuman(inst)    endend

Hope this was useful to someone. Cheers.

Edited by RedMattis
Link to comment
Share on other sites

How does this work if you use this code?

                inst:AddComponent("beard")                inst.components.beard.onreset = function()                        inst.AnimState:SetBuild("drok")                end                inst.components.beard.prize = "beardhair"                local beard_days = {1,2,3,4,5}                local beard_bits = {3,5,8,10,14}                inst.components.beard:AddCallback(beard_days[1], function()                        inst.components.beard.bits = beard_bits[1]                        inst.AnimState:SetBuild("drokquarter")                end)                inst.components.beard:AddCallback(beard_days[2], function()                        inst.components.beard.bits = beard_bits[2]                        inst.AnimState:SetBuild("drokhalf")                end)                inst.components.beard:AddCallback(beard_days[3], function()                        inst.components.beard.bits = beard_bits[3]                        inst.AnimState:SetBuild("drokfull")                end)                inst.components.beard:AddCallback(beard_days[4], function()                        inst.components.beard.bits = beard_bits[4]                        inst.AnimState:SetBuild("drokfullstubble")                end)                inst.components.beard:AddCallback(beard_days[5], function()                        inst.components.beard.bits = beard_bits[5]                        inst.AnimState:SetBuild("drokfullbeard")                end)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Create New...