mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-30 20:13:08 +00:00
Adds sounds for turning on flashlights, flares, flipping coins, shuffling deck of cards, using lighters and zippos, drills, sonic jackhammers, bikes and some weapon related sounds.
117 lines
4.1 KiB
Plaintext
117 lines
4.1 KiB
Plaintext
/obj/item/weapon/gun/launcher/grenade
|
|
name = "grenade launcher"
|
|
desc = "A bulky pump-action grenade launcher. Holds up to 6 grenades in a revolving magazine."
|
|
icon_state = "riotgun"
|
|
item_state = "riotgun"
|
|
w_class = 4
|
|
force = 10
|
|
|
|
fire_sound = 'sound/weapons/grenadelaunch.ogg'
|
|
fire_sound_text = "a metallic thunk"
|
|
recoil = 0
|
|
throw_distance = 7
|
|
release_force = 5
|
|
|
|
var/obj/item/weapon/grenade/chambered
|
|
var/list/grenades = new/list()
|
|
var/max_grenades = 5 //holds this + one in the chamber
|
|
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
|
|
|
//revolves the magazine, allowing players to choose between multiple grenade types
|
|
/obj/item/weapon/gun/launcher/grenade/proc/pump(mob/M as mob)
|
|
playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1)
|
|
|
|
var/obj/item/weapon/grenade/next
|
|
if(grenades.len)
|
|
next = grenades[1] //get this first, so that the chambered grenade can still be removed if the grenades list is empty
|
|
if(chambered)
|
|
grenades += chambered //rotate the revolving magazine
|
|
chambered = null
|
|
if(next)
|
|
grenades -= next //Remove grenade from loaded list.
|
|
chambered = next
|
|
M << "<span class='warning'>You pump [src], loading \a [next] into the chamber.</span>"
|
|
else
|
|
M << "<span class='warning'>You pump [src], but the magazine is empty.</span>"
|
|
update_icon()
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/examine(mob/user)
|
|
if(..(user, 2))
|
|
var/grenade_count = grenades.len + (chambered? 1 : 0)
|
|
user << "Has [grenade_count] grenade\s remaining."
|
|
if(chambered)
|
|
user << "\A [chambered] is chambered."
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/proc/load(obj/item/weapon/grenade/G, mob/user)
|
|
if(grenades.len >= max_grenades)
|
|
user << "<span class='warning'>[src] is full.</span>"
|
|
return
|
|
user.remove_from_mob(G)
|
|
G.loc = src
|
|
grenades.Insert(1, G) //add to the head of the list, so that it is loaded on the next pump
|
|
user.visible_message("[user] inserts \a [G] into [src].", "<span class='notice'>You insert \a [G] into [src].</span>")
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/proc/unload(mob/user)
|
|
if(grenades.len)
|
|
var/obj/item/weapon/grenade/G = grenades[grenades.len]
|
|
grenades.len--
|
|
user.put_in_hands(G)
|
|
user.visible_message("[user] removes \a [G] from [src].", "<span class='notice'>You remove \a [G] from [src].</span>")
|
|
else
|
|
user << "<span class='warning'>[src] is empty.</span>"
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/attack_self(mob/user)
|
|
pump(user)
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/attackby(obj/item/I, mob/user)
|
|
if((istype(I, /obj/item/weapon/grenade)))
|
|
load(I, user)
|
|
else
|
|
..()
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/attack_hand(mob/user)
|
|
if(user.get_inactive_hand() == src)
|
|
unload(user)
|
|
else
|
|
..()
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/consume_next_projectile()
|
|
if(chambered)
|
|
chambered.det_time = 10
|
|
chambered.activate(null)
|
|
return chambered
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/handle_post_fire(mob/user)
|
|
message_admins("[key_name_admin(user)] fired a grenade ([chambered.name]) from a grenade launcher ([src.name]).")
|
|
log_game("[key_name_admin(user)] used a grenade ([chambered.name]).",ckey=key_name(user))
|
|
chambered = null
|
|
|
|
//Underslung grenade launcher to be used with the Z8
|
|
/obj/item/weapon/gun/launcher/grenade/underslung
|
|
name = "underslung grenade launcher"
|
|
desc = "Not much more than a tube and a firing mechanism, this grenade launcher is designed to be fitted to a rifle."
|
|
w_class = 3
|
|
force = 5
|
|
max_grenades = 0
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/underslung/attack_self()
|
|
return
|
|
|
|
//load and unload directly into chambered
|
|
/obj/item/weapon/gun/launcher/grenade/underslung/load(obj/item/weapon/grenade/G, mob/user)
|
|
if(chambered)
|
|
user << "<span class='warning'>[src] is already loaded.</span>"
|
|
return
|
|
user.remove_from_mob(G)
|
|
G.loc = src
|
|
chambered = G
|
|
user.visible_message("[user] load \a [G] into [src].", "<span class='notice'>You load \a [G] into [src].</span>")
|
|
|
|
/obj/item/weapon/gun/launcher/grenade/underslung/unload(mob/user)
|
|
if(chambered)
|
|
user.put_in_hands(chambered)
|
|
user.visible_message("[user] removes \a [chambered] from [src].", "<span class='notice'>You remove \a [chambered] from [src].</span>")
|
|
chambered = null
|
|
else
|
|
user << "<span class='warning'>[src] is empty.</span>"
|