Return of Data Mining, Art Assets, Model Dumping & More! (SPOILERS!)


Recommended Posts

I thought I posted this already but obviously not. It was suggested I put these here so I shall.
Anyhow I was doing some digging and found out that the giant eye in the sky is indeed named Alter, here's the animations of it revealing and hiding itself.
alter_reveal.gif.99c814b2bf0d7d1ec182538e078cb04c.gifalter_hide.gif.918999389476c388836b2b2d3c368b48.gif

  • Like 10
  • Thanks 1
Link to comment
Share on other sites

10 hours ago, -Variant said:

I thought I posted this already but obviously not. It was suggested I put these here so I shall.
Anyhow I was doing some digging and found out that the giant eye in the sky is indeed named Alter, here's the animations of it revealing and hiding itself.
alter_reveal.gif.99c814b2bf0d7d1ec182538e078cb04c.gifalter_hide.gif.918999389476c388836b2b2d3c368b48.gif

Thats the icon for the new full moon nights (the ones while moonstorm is activated)

  • Like 2
Link to comment
Share on other sites

Did you guys know... The gestalts don't attack you when you're wearing an enlightened crown? Like a bone helm. You don't need to struggle with every night's lunacy effect if you have an enlightened crown when you're gonna exploit the perma full moon!

Edited by HeatAndRun
  • Like 2
  • Thanks 1
Link to comment
Share on other sites

1 minute ago, HeatAndRun said:

Did you guys know... The gestalts don't attack you when you're wearing an enlightened crown? Like a bone helm. You don't need to struggle with every night's lunacy effect if you have an enlightened crown when you're gonna exploit the perma full moon!

I never seemed to notice this. That's really cool, but I still think it's sanity threshold needs lowering.

  • Sad 1
Link to comment
Share on other sites

Most likely someone has already written something like this before me, but I noticed in the game files the designation of things from The Gorge for the map. As long as I remember there were no maps  in the Gorge. Does anyone know why they are needed in the game?

1234.png.07ee7c5d10626388ef137ec992a500c9.png

And also this, I can't remember what it is1233.png.ca55299aa0711d16b481f758ae1344df.png

  • Like 8
  • Thanks 1
Link to comment
Share on other sites

37 minutes ago, Deerclops Mika said:

Most likely someone has already written something like this before me, but I noticed in the game files the designation of things from The Gorge for the map. As long as I remember there were no maps  in the Gorge. Does anyone know why they are needed in the game?

Maybe in an early version of the Gorge you could use the map?

 

38 minutes ago, Deerclops Mika said:

And also this, I can't remember what it is

That's the old design of the mushlight!  : )

  • Like 3
  • Thanks 2
Link to comment
Share on other sites

Does anyone know if and where the Archive Sigil is used?1890042795_ArchiveSigil.png.3f8f1f4727f3aebdca6b734f5eee7f2d.png
It's found under data/anim/archive_sigil.zip 

There's an animation included, but I couldn't get it to run..

 

 

And while I'm here, could anyone of you help me understand the brightmare_gestalt_invaderbrain.lua file found in scripts/brains?
 

Spoiler

require "behaviours/chaseandattack"
require "behaviours/panic"
require "behaviours/attackwall"
require "behaviours/leash"
require "behaviours/standstill"

local WORK_DIST = 3 --must be greater than physics radii
local LOST_DIST = 60
local RETURN_DIST = 15
local BASE_DIST = 6

local LOST_TIME = 5
local AGGRO_TIME = 6
local PETRIFY_TIME = 3
local PETRIFY_TIME_VAR = 1

local MoonBeastBrain = Class(Brain, function(self, inst)
    Brain._ctor(self, inst)
    self._losttime = nil
    self._petrifytime = nil
end)

local function GetInvadeTarget(inst)
    return inst.components.entitytracker:GetEntity("invadeTarget")
end

local function LostInvadeTarget(self)
    local target = GetInvadeTarget(self.inst)
    if target ~= nil and self.inst:IsNear(target, LOST_DIST) then
        self._losttime = nil
        return false
    elseif self._losttime == nil then
        self._losttime = GetTime()
        return false
    end
    return GetTime() - self._losttime > LOST_TIME
end

local function LostMoonCharge(self)
    local target = GetInvadeTarget(self.inst)
    if target == nil or
        (   target.components.timer ~= nil and
            target.components.timer:TimerExists("InvadeTarget") ) then
        self._petrifytime = nil
        return false
    elseif self._petrifytime == nil then
        self._petrifytime = GetTime() + GetRandomWithVariance(PETRIFY_TIME, PETRIFY_TIME_VAR)
        return false
    end
    return GetTime() > self._petrifytime
end

local function ShouldTargetInvadeTarget(inst)
    local target = GetInvadeTarget(inst)
    return target ~= nil
        and target:HasTag("wagstaff_npc")
        --and target.components.timer ~= nil
        --and target.components.timer:TimerExists("InvadeTarget")
        and GetTime() - inst.components.combat:GetLastAttackedTime() > AGGRO_TIME
end

local function GetInvadeTargetPos(inst)
    local target = GetInvadeTarget(inst)
    return target ~= nil and target:GetPosition() or nil
end

local function AttackInvadeTarget(inst)
    --inst:PushEvent("workmoonbase", { invadetarget = GetInvadeTarget(inst) })
end

local BREAKSKELETONS_MUST_TAGS = { "playerskeleton", "HAMMER_workable" }
local function BreakSkeletons(inst)
    local skel = FindEntity(inst, 1.25, nil, BREAKSKELETONS_MUST_TAGS)
    if skel ~= nil then
        skel.components.workable:WorkedBy(inst, 1)
    end
end

local function shouldspit(inst)
    if inst:HasTag("gestalt_invader_spitter") then
        if inst.components.combat.target and not inst.components.timer:TimerExists("spit_cooldown") then
            return true
        end
    end
end

local function spit(inst)
    local act = BufferedAction(inst, inst.components.combat.target, ACTIONS.TOSS)
    return act
end

local function shouldwaittospit(inst)
    if inst:HasTag("gestalt_invader_spitter") then
        if inst.components.combat.target then
            if inst:GetDistanceSqToInst(inst.components.combat.target) <= 4*4 then
                return true
            end
        end
    end
end

function MoonBeastBrain:OnStart()
    local root = PriorityNode(
    {
        WhileNode(function() return self.inst.components.hauntable ~= nil and self.inst.components.hauntable.panic end, "PanicHaunted", Panic(self.inst)),
        WhileNode(function() return self.inst.components.health.takingfiredamage end, "OnFire", Panic(self.inst)),

        --Teleported away, or moonbase got removed
        WhileNode(function() return LostInvadeTarget(self) end, "Lost Target",
            ActionNode(function() self.inst.components.health:Kill() end)),

        WhileNode(function() return shouldspit(self.inst) end, "Spit",
            DoAction(self.inst, spit)),
        
        WhileNode(function() return shouldwaittospit(self.inst) end, "waittospit",
            StandStill(self.inst)),

        SequenceNode{
            ActionNode(function() BreakSkeletons(self.inst) end),
            AttackWall(self.inst),
            ActionNode(function() self.inst.components.combat:ResetCooldown() end),
        },

        WhileNode(function() return ShouldTargetInvadeTarget(self.inst) end, "InvadeTarget",
            PriorityNode({
                Leash(self.inst, function() return GetInvadeTarget(self.inst):GetPosition() end, WORK_DIST, WORK_DIST),
                ActionNode(function() AttackInvadeTarget(self.inst) end),
                StandStill(self.inst),
            })),

        ChaseAndAttack(self.inst, 100),
        Leash(self.inst, GetInvadeTargetPos, RETURN_DIST, BASE_DIST),
        Panic(self.inst),
    }, .25)

    self.bt = BT(self.inst, root)
end

return MoonBeastBrain
 

I'm not much of a coder myself, but it looks to me like a Moonbase/Wagstaff-Type event, except with Gestalts I reckon? Did Klei just plan on using Gestalts instead of mutated birds originally and scrapped the idea? What creature has the tag "gestalt_invader_spitter"?

Would really appreciate the help of someone who actually knows what's going on here haha

Thanks in advance!

  • Like 2
Link to comment
Share on other sites

34 minutes ago, Tim S. said:

And while I'm here, could anyone of you help me understand the brightmare_gestalt_invaderbrain.lua file found in scripts/brains?
 

  Reveal hidden contents

require "behaviours/chaseandattack"
require "behaviours/panic"
require "behaviours/attackwall"
require "behaviours/leash"
require "behaviours/standstill"

local WORK_DIST = 3 --must be greater than physics radii
local LOST_DIST = 60
local RETURN_DIST = 15
local BASE_DIST = 6

local LOST_TIME = 5
local AGGRO_TIME = 6
local PETRIFY_TIME = 3
local PETRIFY_TIME_VAR = 1

local MoonBeastBrain = Class(Brain, function(self, inst)
    Brain._ctor(self, inst)
    self._losttime = nil
    self._petrifytime = nil
end)

local function GetInvadeTarget(inst)
    return inst.components.entitytracker:GetEntity("invadeTarget")
end

local function LostInvadeTarget(self)
    local target = GetInvadeTarget(self.inst)
    if target ~= nil and self.inst:IsNear(target, LOST_DIST) then
        self._losttime = nil
        return false
    elseif self._losttime == nil then
        self._losttime = GetTime()
        return false
    end
    return GetTime() - self._losttime > LOST_TIME
end

local function LostMoonCharge(self)
    local target = GetInvadeTarget(self.inst)
    if target == nil or
        (   target.components.timer ~= nil and
            target.components.timer:TimerExists("InvadeTarget") ) then
        self._petrifytime = nil
        return false
    elseif self._petrifytime == nil then
        self._petrifytime = GetTime() + GetRandomWithVariance(PETRIFY_TIME, PETRIFY_TIME_VAR)
        return false
    end
    return GetTime() > self._petrifytime
end

local function ShouldTargetInvadeTarget(inst)
    local target = GetInvadeTarget(inst)
    return target ~= nil
        and target:HasTag("wagstaff_npc")
        --and target.components.timer ~= nil
        --and target.components.timer:TimerExists("InvadeTarget")
        and GetTime() - inst.components.combat:GetLastAttackedTime() > AGGRO_TIME
end

local function GetInvadeTargetPos(inst)
    local target = GetInvadeTarget(inst)
    return target ~= nil and target:GetPosition() or nil
end

local function AttackInvadeTarget(inst)
    --inst:PushEvent("workmoonbase", { invadetarget = GetInvadeTarget(inst) })
end

local BREAKSKELETONS_MUST_TAGS = { "playerskeleton", "HAMMER_workable" }
local function BreakSkeletons(inst)
    local skel = FindEntity(inst, 1.25, nil, BREAKSKELETONS_MUST_TAGS)
    if skel ~= nil then
        skel.components.workable:WorkedBy(inst, 1)
    end
end

local function shouldspit(inst)
    if inst:HasTag("gestalt_invader_spitter") then
        if inst.components.combat.target and not inst.components.timer:TimerExists("spit_cooldown") then
            return true
        end
    end
end

local function spit(inst)
    local act = BufferedAction(inst, inst.components.combat.target, ACTIONS.TOSS)
    return act
end

local function shouldwaittospit(inst)
    if inst:HasTag("gestalt_invader_spitter") then
        if inst.components.combat.target then
            if inst:GetDistanceSqToInst(inst.components.combat.target) <= 4*4 then
                return true
            end
        end
    end
end

function MoonBeastBrain:OnStart()
    local root = PriorityNode(
    {
        WhileNode(function() return self.inst.components.hauntable ~= nil and self.inst.components.hauntable.panic end, "PanicHaunted", Panic(self.inst)),
        WhileNode(function() return self.inst.components.health.takingfiredamage end, "OnFire", Panic(self.inst)),

        --Teleported away, or moonbase got removed
        WhileNode(function() return LostInvadeTarget(self) end, "Lost Target",
            ActionNode(function() self.inst.components.health:Kill() end)),

        WhileNode(function() return shouldspit(self.inst) end, "Spit",
            DoAction(self.inst, spit)),
        
        WhileNode(function() return shouldwaittospit(self.inst) end, "waittospit",
            StandStill(self.inst)),

        SequenceNode{
            ActionNode(function() BreakSkeletons(self.inst) end),
            AttackWall(self.inst),
            ActionNode(function() self.inst.components.combat:ResetCooldown() end),
        },

        WhileNode(function() return ShouldTargetInvadeTarget(self.inst) end, "InvadeTarget",
            PriorityNode({
                Leash(self.inst, function() return GetInvadeTarget(self.inst):GetPosition() end, WORK_DIST, WORK_DIST),
                ActionNode(function() AttackInvadeTarget(self.inst) end),
                StandStill(self.inst),
            })),

        ChaseAndAttack(self.inst, 100),
        Leash(self.inst, GetInvadeTargetPos, RETURN_DIST, BASE_DIST),
        Panic(self.inst),
    }, .25)

    self.bt = BT(self.inst, root)
end

return MoonBeastBrain
 

I'm not much of a coder myself, but it looks to me like a Moonbase/Wagstaff-Type event, except with Gestalts I reckon? Did Klei just plan on using Gestalts instead of mutated birds originally and scrapped the idea? What creature has the tag "gestalt_invader_spitter"?

Would really appreciate the help of someone who actually knows what's going on here haha

Thanks in advance!

Yup! It looks like it was originally gonna be gestalts, Heck the functions that spawn the birds in the event still have names like "SpawnGestalt", the brightmare_gestalt_invaderbrain is identical to the mutant bird brain too!

 

36 minutes ago, Tim S. said:

Does anyone know if and where the Archive Sigil is used?1890042795_ArchiveSigil.png.3f8f1f4727f3aebdca6b734f5eee7f2d.png
It's found under data/anim/archive_sigil.zip 

There's an animation included, but I couldn't get it to run..

This is interesting! I don't think it's used anywhere, so its probably unused. There's only two "animations" named "on" and "off", theyre just the still images you posted there. "Off" being the white sign, "On" being the yellow sign.

  • Like 3
  • Thanks 1
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
 Share