/obj/item/ship_ammunition/longbow
name = "longbow casing"
desc = "The Longbow's bread and butter. When loaded, this thing can pack an extreme punch."
icon = 'icons/obj/guns/ship/ship_ammo_longarm.dmi'
icon_state = "generic_casing"
item_state = "generic_casing_obj"
caliber = SHIP_CALIBER_406MM
ammunition_behaviour = SHIP_AMMO_BEHAVIOUR_DUMBFIRE
var/obj/item/primer/primer
var/obj/item/warhead/longbow/warhead
/obj/item/ship_ammunition/longbow/attackby(obj/item/attacking_item, mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(istype(attacking_item, /obj/item/primer) && !primer)
var/obj/item/primer/P = attacking_item
user.visible_message(SPAN_NOTICE("[H] starts connecting \the [P] to the casing..."), SPAN_NOTICE("You start connecting \the [P] to the casing..."))
if(do_after(H, 3 SECONDS))
visible_message(SPAN_NOTICE("You connect \the [P] to the casing!"), SPAN_NOTICE("[H] connects \the [P] to the casing!"))
H.drop_from_inventory(P)
add_primer(P)
playsound(src, 'sound/machines/rig/rig_deploy.ogg', 40)
if(istype(attacking_item, /obj/item/warhead) && !warhead)
var/obj/item/warhead/W = attacking_item
user.visible_message( SPAN_NOTICE("[H] starts connecting \the [W] to the casing..."), SPAN_NOTICE("You start connecting \the [W] to the casing..."))
if(do_after(H, 5 SECONDS))
visible_message(SPAN_NOTICE("You connect \the [W] to the casing!"), SPAN_NOTICE("[H] connects \the [W] to the casing!"))
H.drop_from_inventory(W)
add_warhead(W)
playsound(src, 'sound/machines/rig/rig_deploy.ogg', 40)
update_status()
/obj/item/ship_ammunition/longbow/can_be_loaded()
if(primer && warhead)
return TRUE
return FALSE
/obj/item/ship_ammunition/longbow/proc/add_primer(var/obj/item/primer/P)
if(P && !QDELETED(P))
primer = P
P.forceMove(src)
var/image/OL = image(P.icon, P.primer_state, layer = layer - 0.01)
AddOverlays(OL)
update_status()
/obj/item/ship_ammunition/longbow/proc/add_warhead(var/obj/item/warhead/W)
if(W && !QDELETED(W))
warhead = W
W.forceMove(src)
AddOverlays(W.warhead_state)
impact_type = W.warhead_type
ammunition_flags = initial(ammunition_flags)
ammunition_flags |= SHIP_AMMO_FLAG_VERY_FRAGILE
ammunition_flags |= SHIP_AMMO_FLAG_INFLAMMABLE
cookoff_devastation = warhead.cookoff_devastation
cookoff_heavy = warhead.cookoff_heavy
cookoff_light = warhead.cookoff_light
update_status()
/obj/item/ship_ammunition/longbow/update_status()
desc = initial(desc)
desc += "
"
if(primer && !warhead)
desc += "It is loaded with [primer], but no warhead."
name = "longbow casing"
ammunition_flags = initial(ammunition_flags)
else if(warhead && !primer)
desc += "It has a [warhead], but no primer."
name = "[warhead.warhead_type] longbow casing"
else if(warhead && primer)
desc += "It has a [warhead] and is loaded with [primer]! It's ready to go."
name = "[warhead.warhead_type] longbow shell"
else
name = "longbow casing"
desc += "It isn't loaded with a warhead and has no primer."
ammunition_flags = initial(ammunition_flags)
/obj/item/ship_ammunition/longbow/get_speed()
return primer ? primer.speed : 0
/obj/item/ship_ammunition/longbow/throw_fail_consequences(var/mob/living/carbon/C)
. = ..()
if(warhead)
if(prob(75))
visible_message(SPAN_DANGER("\The [src] goes off!"))
warhead.cookoff()
qdel(src)
/obj/item/primer
name = "primer"
desc = "This is a medium power primer for Longbow warheads."
icon = 'icons/obj/guns/ship/ship_ammo_longarm.dmi'
icon_state = "primer_med_obj"
w_class = WEIGHT_CLASS_HUGE
var/primer_state = "primer_med" //This is the overlay state when it gets applied to the projectile.
var/speed = 30 //Somewhat of a misleading name. This is the lag in world ticks between each walk() called by the overmap projectile. Lower is better.
/obj/item/primer/low
name = "low power primer"
desc = "This is a low power primer for Longbow warheads."
icon_state = "primer_low_obj"
primer_state = "primer_low"
speed = 40
/obj/item/primer/high
name = "high power primer"
desc = "This is a high power primer for Longbow warheads."
icon_state = "primer_high_obj"
primer_state = "primer_high"
speed = 20
/obj/item/warhead
name = "warhead"
desc = "This is a generic warhead. Not for use."
icon = 'icons/obj/guns/ship/ship_ammo_longarm.dmi'
icon_state = "generic_warhead_obj"
w_class = WEIGHT_CLASS_HUGE
var/warhead_state = "generic_warhead" //This is the overlay state when it gets applied to the projectile.
var/caliber
var/warhead_type
/obj/item/warhead/longbow
name = "longbow high-explosive warhead"
desc = "A high-explosive warhead for the Longbow cannon. It packs a stronger punch than all the others, but does not penetrate through the hull on initial contact. Handle with care!"
icon_state = "high_ex_obj"
warhead_state = "high_ex"
caliber = SHIP_CALIBER_406MM
warhead_type = SHIP_AMMO_IMPACT_HE
slowdown = 2
var/drop_counter = 0
var/cookoff_devastation = 0
var/cookoff_heavy = 3
var/cookoff_light = 4
/obj/item/warhead/longbow/too_heavy_to_throw()
return TRUE
/obj/item/warhead/longbow/throw_impact(atom/hit_atom)
. = ..()
if(prob(10))
cookoff(FALSE)
/obj/item/warhead/longbow/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit)
. = ..()
if(. != BULLET_ACT_HIT)
return .
if(hitting_projectile.damage > 5)
cookoff(TRUE)
/obj/item/warhead/longbow/attackby(obj/item/attacking_item, mob/user)
. = ..()
if(istype(attacking_item, /obj/item/mecha_equipment/clamp)) //loading a warhead into a mech shouldn't explode it
return
if(attacking_item.force > 10 && user.a_intent == I_HURT) //presumably you need to hit it pretty hard to actually set the thing off
cookoff(FALSE)
/obj/item/warhead/longbow/ex_act(severity)
cookoff(TRUE)
/obj/item/warhead/longbow/fire_act(exposed_temperature, exposed_volume)
. = ..()
if(exposed_temperature >= T0C+200)
cookoff(TRUE)
/obj/item/warhead/longbow/proc/cookoff(var/caused_by_heat = TRUE)
visible_message(SPAN_DANGER("\The [src] [caused_by_heat ? "cooks" : "goes"] off and explodes!"))
explosion(get_turf(src), cookoff_devastation, cookoff_heavy, cookoff_light)
qdel(src)
/obj/item/warhead/longbow/ap
name = "longbow armor-piercing warhead"
desc = "An armor-piercing warhead for the Longbow cannon. It penetrates through the hull and then explodes inside the target, albeit at the cost of less explosive power. Handle with care!"
icon_state = "armor_piercing_obj"
warhead_state = "armor_piercing"
warhead_type = SHIP_AMMO_IMPACT_AP
cookoff_devastation = 0
cookoff_heavy = 2
cookoff_light = 6
/obj/item/warhead/longbow/bunker
name = "longbow bunker-buster warhead"
desc = "A bunker-buster warhead for the Longbow cannon. This will pierce straight through anything, but won't explode! Handle with care!"
icon_state = "bunker_buster_obj"
warhead_state = "bunker_buster"
warhead_type = SHIP_AMMO_IMPACT_BUNKERBUSTER
cookoff_devastation = 0
cookoff_heavy = 1
cookoff_light = 4
/obj/item/ship_ammunition/longbow/preset_he/Initialize()
. = ..()
var/obj/item/primer/P = new()
add_primer(P)
var/obj/item/warhead/longbow/W = new()
add_warhead(W)
/obj/item/ship_ammunition/longbow/preset_ap/Initialize()
. = ..()
var/obj/item/primer/P = new()
add_primer(P)
var/obj/item/warhead/longbow/ap/W = new()
add_warhead(W)
/obj/item/ship_ammunition/longbow/preset_bb/Initialize()
. = ..()
var/obj/item/primer/P = new()
add_primer(P)
var/obj/item/warhead/longbow/bunker/W = new()
add_warhead(W)