#include "script/common.lua" HACK_TIME = 1.5 JOINTED_STATIC = 1 JOINTED_DYNAMIC = 2 function init() target = FindBody() shape = FindShape() joint = FindJoint() snd = LoadLoop("transmission.ogg") local s = GetJointOtherShape(joint, shape) if IsBodyDynamic(GetShapeBody(s)) then bodyType = JOINTED_DYNAMIC initialMass = GetBodyMass(GetShapeBody(s)) else bodyType = JOINTED_STATIC end hackTime = 0 done = false alreadyTriggered = false end function tick(dt) if GetBool("level.alarmdisabled") then RemoveTag(target, "interact") SetTag(target, "target", "disabled") SetShapeEmissiveScale(shape, 0) done = true end if not done then if GetPlayerInteractBody() == target and InputDown("interact") then hackTime = math.min(HACK_TIME, hackTime + dt) PlayLoop(snd, GetBodyTransform(target).pos) if hackTime == HACK_TIME then SetTag(target, "hacked") SetTag(target, "target", "cleared") RemoveTag(target, "interact") SetShapeEmissiveScale(shape, 0) done = true end else hackTime = 0 end local triggerAlarm = false if bodyType == JOINTED_STATIC then if IsJointBroken(joint) then triggerAlarm = true else local s = GetJointOtherShape(joint, shape) if IsBodyDynamic(GetShapeBody(s)) then triggerAlarm = true end end else if IsJointBroken(joint) then triggerAlarm = true else local s = GetJointOtherShape(joint, shape) local currentMass = GetBodyMass(GetShapeBody(s)) if currentMass < 0.5 * initialMass then triggerAlarm = true end end end if triggerAlarm and not alreadyTriggered then SetBool("level.alarm", true) alreadyTriggered = true end end end function draw() if not done and hackTime > 0 then UiPush() UiTranslate(UiCenter()-100, UiHeight()-220) progressBar(200, 20, hackTime/HACK_TIME) UiTranslate(100, -10) UiAlign("center") UiFont("bold.ttf", 24) UiText("loc@UI_TEXT_HACKING") UiPop() end end