This happens when they have no cold/heat modules, or have an equal amount to cancel each other out, and it causes them to be ignored, as entities considered endothermic by missiles are skipped entirely for missile targeting.
Part of the issue comes from here, in wx78.lua
local function GetThermicTemperatureFn(inst, observer) return inst._temperature_modulelean * TUNING.WX78_HEATERTEMPPERMODULE end
This is returning 0 when WX-78's temperature module lean is 0, and 0 is a valid value. Ideally, this should be returning nil instead when the module lean value is 0, even if both exo and endo thermics are disabled, for the sake of consistency.
The same should apply to the thermal stones (and dumbbells, which I should remind that they don't return equipped heat, just have it be the same as the GetHeat function for them), and probably other things. One case that does affect gameplay more is Hot Springs, as I reported here a while back (they heat up things that are below 0, thermics could be disabled on them too on their glassed state for further consistency, besides returning nil heat).
Anyhow, ideally: heat, carried heat, and equipped heat functions should never return 0 as default unless that's a default endothermic value.
All that said, part of the issue also lies here:
--NOTE: GetHeat() can be nil! if heater:IsExothermic() then temperature = math.max(temperature, heater:GetHeat(v) or temperature) elseif heater:IsEndothermic() then endo = true temperature = math.min(temperature, heater:GetHeat(v) or temperature) elseif v.currentTempRange then --heatrock special case because thermics setup isn't reliable endo = v.currentTempRange < 3 if v.currentTempRange ~= 3 and v.components.temperature then temperature = v.components.temperature:GetCurrent() end else -- HERE --for other things that don't setup thermics temperature = heater:GetHeat(v) or temperature endo = temperature < ambient_temp end
That last bit there is where it happens.
I feel like you could just ditch that else case entirely (and probably continue with the rest of the checks), kinda like this:
-- ._lightinst ==> winona_spotlight -- .currentTempRange ==> heatrock local heater = v._lightinst and v._lightinst.components.heater or v.components.heater if heater then --NOTE: GetHeat() can be nil! if heater:IsExothermic() then temperature = math.max(temperature, heater:GetHeat(v) or temperature) elseif heater:IsEndothermic() then endo = true temperature = math.min(temperature, heater:GetHeat(v) or temperature) elseif v.currentTempRange then --heatrock special case because thermics setup isn't reliable endo = v.currentTempRange < 3 if v.currentTempRange ~= 3 and v.components.temperature then temperature = v.components.temperature:GetCurrent() end else heater = nil -- --for other things that don't setup thermics -- temperature = heater:GetHeat(v) or temperature -- endo = temperature < ambient_temp end end if not heater then if v.components.temperature then temperature = v.components.temperature:GetCurrent() elseif v.components.fueled and not v.components.fueled:IsEmpty() and v:HasTag("engineeringbattery") then temperature = temperature + 10 elseif v.components.burnable and v.components.burnable:IsSmoldering() then --only add smoldering bonus if we don't have an actual temperature temperature = temperature + 5 end end
This would instead make it so WX-78's actual character temperature is used when they have no cold/heat modules, like any other character.
Something to keep in mind is that while WX-78 with a cold module will consistently get ignored, I think that's a neat little touch and it does make sense, as they basically become a walking endothermic source similar to a small endothermic fire.
If anything, that could be expanded when using the Chill Amulet. Maybe not just by wearing it but by requiring something from the player, like wearing it for a certain amount of time for an effect to activate (could be really neat if doing this caused the player to emit cold just like WX-78, or even share some of the behaviors of the Refrigerant Circuits).
Honestly? You could make it so that, aside from Refrigerant WX-78, if players are below 0 body temperature (or below whatever value world temperature is if it's below 0), they are also skipped. The thing about this is that being below 0 means you're taking freezing damage over time and you have to stay that way with no nearby heat sources, as they'll easily warm you up quickly. The Chill Amulet would make this simple but you'd have no body armor, and durability goes down kinda fast. A Mooncaller staff could be used but that's not gonna be anywhere as consistent with a single one because of thermic falloff.
Anyhow, that's all. Just in case, I'll link another report I made about Warbot's missiles temperature calculations here.
- Fight Warbot as WX-78 with no heat or cold modules while world temperature is above 0.
- Notice how the missile attack will never go off if there's no nearby exothermic entities. And how if there is, the missiles will ignore WX-78.
A developer has marked this issue as fixed. This means that the issue has been addressed in the current development build and will likely be in the next update.
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 accountSign in
Already have an account? Sign in here.
Sign In Now