Files
Bubberstation/code/modules/projectiles/guns/ballistic/launchers.dm
2022-04-18 00:58:40 +01:00

112 lines
4.6 KiB
Plaintext

//KEEP IN MIND: These are different from gun/grenadelauncher. These are designed to shoot premade rocket and grenade projectiles, not flashbangs or chemistry casings etc.
//Put handheld rocket launchers here if someone ever decides to make something so hilarious ~Paprika
/obj/item/gun/ballistic/revolver/grenadelauncher//this is only used for underbarrel grenade launchers at the moment, but admins can still spawn it if they feel like being assholes
desc = "A break-operated grenade launcher."
name = "grenade launcher"
icon_state = "dshotgun_sawn"
inhand_icon_state = "gun"
mag_type = /obj/item/ammo_box/magazine/internal/grenadelauncher
fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg'
w_class = WEIGHT_CLASS_NORMAL
pin = /obj/item/firing_pin/implant/pindicate
bolt_type = BOLT_TYPE_NO_BOLT
has_gun_safety = FALSE //SKYRAT EDIT
/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted
pin = /obj/item/firing_pin
/obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, params)
..()
if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing))
chamber_round()
/obj/item/gun/ballistic/revolver/grenadelauncher/cyborg
desc = "A 6-shot grenade launcher."
name = "multi grenade launcher"
icon = 'icons/mecha/mecha_equipment.dmi'
icon_state = "mecha_grenadelnchr"
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/grenademulti
pin = /obj/item/firing_pin
/obj/item/gun/ballistic/revolver/grenadelauncher/cyborg/attack_self()
return
/obj/item/gun/ballistic/automatic/gyropistol
name = "gyrojet pistol"
desc = "A prototype pistol designed to fire self propelled rockets."
icon_state = "gyropistol"
fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg'
mag_type = /obj/item/ammo_box/magazine/m75
burst_size = 1
fire_delay = 0
fire_select_modes = list(SELECT_SEMI_AUTOMATIC) //SKYRAT EDIT CHANGE
casing_ejector = FALSE
/obj/item/gun/ballistic/rocketlauncher
name = "\improper PML-9"
desc = "A reusable rocket propelled grenade launcher. The words \"NT this way\" and an arrow have been written near the barrel. \
A sticker near the cheek rest reads, \"ENSURE AREA BEHIND IS CLEAR BEFORE FIRING\""
icon_state = "rocketlauncher"
inhand_icon_state = "rocketlauncher"
mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher
fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg'
w_class = WEIGHT_CLASS_BULKY
can_suppress = FALSE
pin = /obj/item/firing_pin/implant/pindicate
burst_size = 1
fire_delay = 0
casing_ejector = FALSE
weapon_weight = WEAPON_HEAVY
bolt_type = BOLT_TYPE_NO_BOLT
internal_magazine = TRUE
cartridge_wording = "rocket"
empty_indicator = TRUE
tac_reloads = FALSE
/// Do we shit flames behind us when we fire?
var/backblast = TRUE
/obj/item/gun/ballistic/rocketlauncher/Initialize(mapload)
. = ..()
if(backblast)
AddElement(/datum/element/backblast)
/obj/item/gun/ballistic/rocketlauncher/unrestricted
pin = /obj/item/firing_pin
/obj/item/gun/ballistic/rocketlauncher/nobackblast
name = "flameless PML-11"
desc = "A reusable rocket propelled grenade launcher. This one has been fitted with a special coolant loop to avoid embarassing teamkill 'accidents' from backblast."
backblast = FALSE
/obj/item/gun/ballistic/rocketlauncher/afterattack()
. = ..()
magazine.get_round(FALSE) //Hack to clear the mag after it's fired
/obj/item/gun/ballistic/rocketlauncher/attack_self_tk(mob/user)
return //too difficult to remove the rocket with TK
/obj/item/gun/ballistic/rocketlauncher/suicide_act(mob/living/user)
user.visible_message(span_warning("[user] aims [src] at the ground! It looks like [user.p_theyre()] performing a sick rocket jump!"), \
span_userdanger("You aim [src] at the ground to perform a bisnasty rocket jump..."))
if(can_shoot())
user.notransform = TRUE
playsound(src, 'sound/vehicles/rocketlaunch.ogg', 80, TRUE, 5)
animate(user, pixel_z = 300, time = 30, easing = LINEAR_EASING)
sleep(70)
animate(user, pixel_z = 0, time = 5, easing = LINEAR_EASING)
sleep(5)
user.notransform = FALSE
process_fire(user, user, TRUE)
if(!QDELETED(user)) //if they weren't gibbed by the explosion, take care of them for good.
user.gib()
return MANUAL_SUICIDE
else
sleep(5)
shoot_with_empty_chamber(user)
sleep(20)
user.visible_message(span_warning("[user] looks about the room realizing [user.p_theyre()] still there. [user.p_they(TRUE)] proceed to shove [src] down their throat and choke [user.p_them()]self with it!"), \
span_userdanger("You look around after realizing you're still here, then proceed to choke yourself to death with [src]!"))
sleep(20)
return OXYLOSS