/obj/machinery/ship_weapon/leviathan name = "leviathan zero-point artillery" desc = "A hulking structure made up of an uncalculable amount of moving parts, components and capacitors. It has no branding other than the \"ZAT\" inscription on the sides." icon = 'icons/obj/machinery/ship_guns/leviathan.dmi' icon_state = "weapon_off" special_firing_mechanism = TRUE max_damage = 10000 projectile_type = /obj/projectile/ship_ammo/leviathan use_ammunition = FALSE heavy_firing_sound = 'sound/weapons/gunshot/ship_weapons/leviathan_fire.ogg' caliber = SHIP_CALIBER_ZAT firing_effects = FIRING_EFFECT_FLAG_THROW_MOBS|FIRING_EFFECT_FLAG_EXTREMELY_LOUD screenshake_type = SHIP_GUN_SCREENSHAKE_ALL_MOBS layer = ABOVE_HUMAN_LAYER use_power = POWER_USE_OFF //Start off. idle_power_usage = 100 KILO WATTS active_power_usage = 20 MEGA WATTS var/obj/machinery/power/smes/buildable/smes /obj/machinery/ship_weapon/leviathan/Destroy() smes = null return ..() /obj/machinery/ship_weapon/leviathan/LateInitialize() . = ..() couple_to_smes() /obj/machinery/ship_weapon/leviathan/ex_act(severity) return //Not happening bro. /obj/machinery/ship_weapon/leviathan/firing_checks() if(use_power == POWER_USE_OFF) return FALSE if(!istype(smes)) return FALSE if(firing) return FALSE . = ..() /obj/machinery/ship_weapon/leviathan/pre_fire(atom/target, obj/effect/landmark/landmark) firing = TRUE icon_state = "weapon_on" visible_message(SPAN_DANGER("\The [src] begins lighting up with a powerful hum...")) var/power_draw = smes.drain_power_simple(active_power_usage) if(power_draw >= active_power_usage) for(var/mob/M in GLOB.living_mob_list) if(AreConnectedZLevels(GET_Z(M), z)) if(get_area(M) != get_area(src)) to_chat(M, SPAN_DANGER("The ground below you starts shaking...")) sound_to(M, sound('sound/weapons/gunshot/ship_weapons/leviathan_chargeup.ogg')) flick("weapon_charge", src) sleep(10 SECONDS) var/obj/item/ship_ammunition/leviathan/L = new() ammunition |= L if(!stat) visible_message(SPAN_DANGER("\The [src] fires, quaking the ground below you!")) for(var/mob/M in GLOB.living_mob_list) if(AreConnectedZLevels(M.z, z) && (get_area(M) != get_area(src))) to_chat(M, SPAN_DANGER("A gigantic shock courses through the hull of the ship!")) . = ..() else visible_message(SPAN_DANGER("\The [src]'s capacitors fizzle out!")) . = FALSE disable() /obj/machinery/ship_weapon/leviathan/process() if(firing) for(var/mob/M in GLOB.living_mob_list) if(AreConnectedZLevels(GET_Z(M), z)) shake_camera(M, 3, 3) /obj/machinery/ship_weapon/leviathan/power_change() . = ..() if((stat & NOPOWER) && .) disable() /obj/machinery/ship_weapon/leviathan/update_use_power(new_use_power) . = ..() if(new_use_power == POWER_USE_OFF && (use_power != POWER_USE_OFF)) disable() /obj/machinery/ship_weapon/leviathan/disable() firing = FALSE if(use_power != POWER_USE_OFF) visible_message(SPAN_DANGER("\The [src]'s humming comes to an abrupt halt.")) for(var/mob/living/L in GLOB.living_mob_list) if(AreConnectedZLevels(L.z, z)) sound_to(L, 'sound/effects/ship_weapons/leviathan_powerdown.ogg') to_chat(L, SPAN_WARNING("The ground below you settles down, no longer vibrating.")) update_use_power(POWER_USE_OFF) icon_state = "weapon_off" /obj/machinery/ship_weapon/leviathan/enable() couple_to_smes() if(!smes) visible_message(SPAN_DANGER("\The [src] doesn't light up at all! Its maintenance display indicates there is no SMES to draw power from.")) return visible_message(SPAN_DANGER("\The [src] lights up with a powerful hum...")) for(var/mob/living/L in GLOB.living_mob_list) if(AreConnectedZLevels(L.z, z)) sound_to(L, 'sound/effects/ship_weapons/leviathan_powerup.ogg') to_chat(L, SPAN_WARNING("The ground below you starts vibrating with a slight hum...")) update_use_power(POWER_USE_IDLE) icon_state = "weapon_on" /obj/machinery/ship_weapon/leviathan/proc/couple_to_smes() if(smes) return var/list/obj/machinery/power/smes/candidates = list() for(var/obj/machinery/power/smes/S in SSmachinery.machinery) if(get_area(S) == get_area(src)) candidates += S for(var/obj/machinery/power/smes/buildable/superconducting/SC in candidates) if(istype(SC)) smes = SC return for(var/obj/machinery/power/smes/buildable/SM in candidates) if(istype(SM)) smes = SM return /obj/item/ship_ammunition/leviathan name = "zero-point artillery beam" desc = "A beam of pure energy." range = OVERMAP_PROJECTILE_RANGE_ULTRAHIGH caliber = SHIP_CALIBER_ZAT impact_type = SHIP_AMMO_IMPACT_ZAT overmap_icon_state = "heavy_pulse" /obj/item/ship_ammunition/leviathan/Initialize() . = ..() set_light(3, 3, LIGHT_COLOR_PURPLE) /obj/item/ship_ammunition/leviathan/get_speed() return 2 /obj/projectile/ship_ammo/leviathan name = "zero-point artillery beam" desc = "A concentrated stream of pure energy." icon_state = "pulse" damage = 10000 armor_penetration = 1000 penetrating = 100 hitscan = TRUE impact_sounds = list(BULLET_IMPACT_MEAT = SOUNDS_LASER_MEAT, BULLET_IMPACT_METAL = SOUNDS_LASER_METAL) muzzle_type = /obj/effect/projectile/muzzle/pulse tracer_type = /obj/effect/projectile/tracer/pulse impact_type = /obj/effect/projectile/impact/pulse /obj/projectile/ship_ammo/leviathan/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() if(!is_landmark_hit) if(ismob(target)) var/mob/M = target M.visible_message(SPAN_DANGER("[M] evaporates as they are engulfed by the beam!")) M.dust() return explosion(target, 6, 6, 6) else target.visible_message(SPAN_DANGER("A giant, purple laser descends from the sky!")) explosion(target, 30, 30, 30) /obj/machinery/zat_lever name = "activation lever" desc = "An old-style lever that couples the Leviathan's capacitors. Flicking this will result in extreme power usage!" icon = 'icons/obj/power.dmi' icon_state = "lever1" var/obj/machinery/ship_weapon/leviathan/ZAT var/toggled = FALSE var/cooldown = 0 /obj/machinery/zat_lever/Initialize(mapload, d, populate_components, is_internal) ..() return INITIALIZE_HINT_LATELOAD /obj/machinery/zat_lever/LateInitialize() . = ..() for(var/obj/machinery/ship_weapon/leviathan/cannon in get_area(src)) ZAT = cannon break /obj/machinery/zat_lever/Destroy() ZAT = null return..() /obj/machinery/zat_lever/attack_hand(mob/user) if(!use_check_and_message(user, USE_DISALLOW_SILICONS) && !stat && (cooldown + 10 SECONDS < world.time)) if(do_after(user, 1 SECOND)) visible_message(SPAN_DANGER("[user] pulls \the [src] [toggled ? "up" : "down"]!")) toggled = !toggled switch(toggled) if(FALSE) flick("lever3", src) ZAT.disable() sleep(2) icon_state = "lever1" if(TRUE) flick("lever2", src) ZAT.enable() sleep(2) icon_state = "lever_down" playsound(src, 'sound/effects/spring.ogg', 100) cooldown = world.time /obj/item/leviathan_key name = "leviathan activation key" desc = "A key made of hardlight used to activate the Leviathan. It is a software-controlled morphing key that uses self-replicating encryption: \ it cannot be replicated at all. Most importantly, if it is stolen, it can simply be deactivated by the SCC. A marvel of modern technology! \ If you're vain, you could also probably wear it as a necklace." icon = 'icons/obj/machinery/ship_guns/zat_confirmation_terminals.dmi' icon_state = "cannon_key" item_state = "cannon_key" contained_sprite = TRUE slot_flags = SLOT_MASK /obj/item/leviathan_case name = "leviathan key case" desc = "It contains the Leviathan's activation key. The case is made out of authentic ebony wood, while the cushioning on the inside is made of silk." icon = 'icons/obj/machinery/ship_guns/zat_confirmation_terminals.dmi' icon_state = "key_case" var/open = FALSE var/obj/item/leviathan_key/LK /obj/item/leviathan_case/Initialize() . = ..() LK = new(src) /obj/item/leviathan_case/Destroy() QDEL_NULL(LK) return ..() /obj/item/leviathan_case/attack_self(mob/user) if(use_check_and_message(user)) return open = !open if(open) user.visible_message(SPAN_NOTICE("[user] opens \the [src].")) if(LK) icon_state = "key_case-o" else icon_state = "key_case-e" else user.visible_message(SPAN_NOTICE("[user] closes \the [src].")) icon_state = "key_case" /obj/item/leviathan_case/attack_hand(mob/user) if(!open || !LK || !ishuman(loc)) . = ..() return if(use_check_and_message(user, USE_FORCE_SRC_IN_USER)) return if(LK) user.visible_message(SPAN_NOTICE("[user] retrieves \the [LK].")) user.put_in_hands(LK) LK = null icon_state = "key_case-e" /obj/item/leviathan_case/attackby(obj/item/attacking_item, mob/user) . = ..() if(use_check_and_message(user)) return if(!LK && open) if(istype(attacking_item, /obj/item/leviathan_key)) var/obj/item/leviathan_key/key = attacking_item user.visible_message(SPAN_NOTICE("[user] puts \the [key] back into \the [src].")) LK = key user.drop_from_inventory(key, src) icon_state = "key_case-o" /obj/machinery/leviathan_safeguard name = "leviathan activation terminal" desc = "The terminal used to confirm if you really want to wipe someone out." icon = 'icons/obj/machinery/ship_guns/zat_confirmation_terminals.dmi' icon_state = "safeguard" anchored = TRUE density = TRUE var/opened = FALSE var/locked = FALSE var/obj/item/leviathan_key/key var/obj/machinery/leviathan_button/button /obj/machinery/leviathan_safeguard/Initialize(mapload, d, populate_components, is_internal) ..() return INITIALIZE_HINT_LATELOAD /obj/machinery/leviathan_safeguard/LateInitialize() . = ..() if(SSatlas.current_map.use_overmap && !linked) var/my_sector = GLOB.map_sectors["[z]"] if (istype(my_sector, /obj/effect/overmap/visitable)) attempt_hook_up(my_sector) if(linked) ASSERT(isnull(linked.levi_safeguard)) //There should only ever be one linked.levi_safeguard = src for(var/obj/machinery/leviathan_button/LB in range(3, src)) if(istype(LB)) button = LB /obj/machinery/leviathan_safeguard/Destroy() if(linked) linked.levi_safeguard = null QDEL_NULL(key) button = null . = ..() /obj/machinery/leviathan_safeguard/ex_act(severity) return /obj/machinery/leviathan_safeguard/emp_act(severity) . = ..() return /obj/machinery/leviathan_safeguard/proc/open() opened = TRUE flick("safeguard_opening", src) icon_state = "safeguard_open" /obj/machinery/leviathan_safeguard/attackby(obj/item/attacking_item, mob/user) if(!opened || locked) return if(istype(attacking_item, /obj/item/leviathan_key) && !key && !stat) var/obj/item/leviathan_key/LK = attacking_item if(use_check_and_message(user)) return if(do_after(user, 1 SECOND)) visible_message(SPAN_WARNING("[user] places \the [LK] inside \the [src]'s keyhole!")) key = LK user.drop_from_inventory(attacking_item, src) icon_state = "safeguard_open" playsound(src, 'sound/effects/ship_weapons/levi_key_insert.ogg', 50) /obj/machinery/leviathan_safeguard/attack_hand(mob/user) if(key && !stat && opened && !locked) if(use_check_and_message(user)) return if(do_after(user, 1 SECOND)) visible_message(SPAN_WARNING("[user] twists \the [key]!")) flick("safeguard_locking", src) icon_state = "safeguard_locked" locked = TRUE playsound(src, 'sound/effects/ship_weapons/levi_key_twist.ogg', 50) button.open() /obj/machinery/leviathan_button name = "leviathan fire button" desc = "The button that controls the Leviathan's firing mechanism." icon = 'icons/obj/machinery/ship_guns/zat_confirmation_terminals.dmi' icon_state = "button_closed" anchored = TRUE var/open = FALSE /obj/machinery/leviathan_button/Initialize() ..() return INITIALIZE_HINT_LATELOAD /obj/machinery/leviathan_button/LateInitialize() . = ..() if(SSatlas.current_map.use_overmap && !linked) var/my_sector = GLOB.map_sectors["[z]"] if (istype(my_sector, /obj/effect/overmap/visitable)) attempt_hook_up(my_sector) /obj/machinery/leviathan_button/ex_act(severity) return /obj/machinery/leviathan_button/emp_act(severity) . = ..() return /obj/machinery/leviathan_button/proc/open() icon_state = "button_open" open = TRUE /obj/machinery/leviathan_button/attack_hand(mob/user) set waitfor = FALSE if(open) if(use_check_and_message(user)) return if(linked.targeting) var/list/obj/effect/possible_entry_points = list() if(istype(linked.targeting, /obj/effect/overmap/visitable)) var/obj/effect/overmap/visitable/V = linked.targeting for(var/obj/effect/O in V.generic_waypoints) possible_entry_points[O.name] = O for(var/obj/effect/O in V.entry_points) possible_entry_points[O.name] = O possible_entry_points = sortList(possible_entry_points) if(istype(linked.targeting, /obj/effect/overmap/event)) possible_entry_points += SHIP_HAZARD_TARGET var/targeted_landmark = tgui_input_list(user, "Select an entry point.", "Leviathan Control", possible_entry_points) if(!targeted_landmark && length(possible_entry_points)) return var/obj/effect/landmark if(length(possible_entry_points) && !(targeted_landmark == SHIP_HAZARD_TARGET)) landmark = possible_entry_points[targeted_landmark] if(do_after(user, 1 SECOND) && !use_check_and_message(user)) playsound(src, 'sound/effects/ship_weapons/levi_button_press.ogg', 50) visible_message(SPAN_DANGER("[user] presses \the [src]!")) for(var/obj/machinery/ship_weapon/leviathan/LT in linked.ship_weapons) if(istype(LT)) LT.firing_command(linked.targeting, landmark)