/datum/wires/syndicatebomb holder_type = /obj/machinery/syndicatebomb randomize = TRUE /datum/wires/syndicatebomb/New(atom/holder) wires = list( WIRE_BOOM, WIRE_UNBOLT, WIRE_ACTIVATE, WIRE_DELAY, WIRE_PROCEED ) ..() /datum/wires/syndicatebomb/interactable(mob/user) var/obj/machinery/syndicatebomb/P = holder if(P.open_panel) return TRUE /datum/wires/syndicatebomb/on_pulse(wire) var/obj/machinery/syndicatebomb/B = holder switch(wire) if(WIRE_BOOM) if(B.active) holder.visible_message("\icon[B] An alarm sounds! It's go-") B.explode_now = TRUE tell_admins(B) if(WIRE_UNBOLT) holder.visible_message("\icon[B] The bolts spin in place for a moment.") if(WIRE_DELAY) if(B.delayedbig) holder.visible_message("\icon[B] The bomb has already been delayed.") else holder.visible_message("\icon[B] The bomb chirps.") playsound(B, 'sound/machines/chime.ogg', 30, 1) B.detonation_timer += 300 B.delayedbig = TRUE if(WIRE_PROCEED) holder.visible_message("\icon[B] The bomb buzzes ominously!") playsound(B, 'sound/machines/buzz-sigh.ogg', 30, 1) var/seconds = B.seconds_remaining() if(seconds >= 61) // Long fuse bombs can suddenly become more dangerous if you tinker with them. B.detonation_timer = world.time + 600 else if(seconds >= 21) B.detonation_timer -= 100 else if(seconds >= 11) // Both to prevent negative timers and to have a little mercy. B.detonation_timer = world.time + 100 if(WIRE_ACTIVATE) if(!B.active && !B.defused) holder.visible_message("\icon[B] You hear the bomb start ticking!") B.activate() B.update_icon() else if(B.delayedlittle) holder.visible_message("\icon[B] Nothing happens.") else holder.visible_message("\icon[B] The bomb seems to hesitate for a moment.") B.detonation_timer += 100 B.delayedlittle = TRUE /datum/wires/syndicatebomb/on_cut(wire, mend) var/obj/machinery/syndicatebomb/B = holder switch(wire) if(WIRE_BOOM) if(mend) B.defused = FALSE // Cutting and mending all the wires of an inactive bomb will thus cure any sabotage. else if(B.active) holder.visible_message("\icon[B] An alarm sounds! It's go-") B.explode_now = TRUE tell_admins(B) else B.defused = TRUE if(WIRE_UNBOLT) if(!mend && B.anchored) holder.visible_message("\icon[B] The bolts lift out of the ground!") playsound(B, 'sound/effects/stealthoff.ogg', 30, 1) B.anchored = FALSE if(WIRE_PROCEED) if(!mend && B.active) holder.visible_message("\icon[B] An alarm sounds! It's go-") B.explode_now = TRUE tell_admins(B) if(WIRE_ACTIVATE) if(!mend && B.active) holder.visible_message("\icon[B] The timer stops! The bomb has been defused!") B.active = FALSE B.defused = TRUE B.update_icon() /datum/wires/syndicatebomb/proc/tell_admins(obj/machinery/syndicatebomb/B) if(istype(B, /obj/machinery/syndicatebomb/training)) return var/turf/T = get_turf(B) log_game("\A [B] was detonated via boom wire at [COORD(T)].") message_admins("A [B.name] was detonated via boom wire at [ADMIN_COORDJMP(T)].")