mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 11:13:16 +00:00
Rewrites grenade launchers
This commit is contained in:
@@ -1329,6 +1329,7 @@
|
|||||||
#include "code\modules\projectiles\guns\energy\stun.dm"
|
#include "code\modules\projectiles\guns\energy\stun.dm"
|
||||||
#include "code\modules\projectiles\guns\energy\temperature.dm"
|
#include "code\modules\projectiles\guns\energy\temperature.dm"
|
||||||
#include "code\modules\projectiles\guns\launcher\crossbow.dm"
|
#include "code\modules\projectiles\guns\launcher\crossbow.dm"
|
||||||
|
#include "code\modules\projectiles\guns\launcher\grenade_launcher.dm"
|
||||||
#include "code\modules\projectiles\guns\launcher\pneumatic.dm"
|
#include "code\modules\projectiles\guns\launcher\pneumatic.dm"
|
||||||
#include "code\modules\projectiles\guns\launcher\rocket.dm"
|
#include "code\modules\projectiles\guns\launcher\rocket.dm"
|
||||||
#include "code\modules\projectiles\guns\launcher\syringe_gun.dm"
|
#include "code\modules\projectiles\guns\launcher\syringe_gun.dm"
|
||||||
@@ -1353,7 +1354,6 @@
|
|||||||
#include "code\modules\reagents\Chemistry-Reagents-Antidepressants.dm"
|
#include "code\modules\reagents\Chemistry-Reagents-Antidepressants.dm"
|
||||||
#include "code\modules\reagents\Chemistry-Reagents.dm"
|
#include "code\modules\reagents\Chemistry-Reagents.dm"
|
||||||
#include "code\modules\reagents\Chemistry-Recipes.dm"
|
#include "code\modules\reagents\Chemistry-Recipes.dm"
|
||||||
#include "code\modules\reagents\grenade_launcher.dm"
|
|
||||||
#include "code\modules\reagents\reagent_containers.dm"
|
#include "code\modules\reagents\reagent_containers.dm"
|
||||||
#include "code\modules\reagents\reagent_dispenser.dm"
|
#include "code\modules\reagents\reagent_dispenser.dm"
|
||||||
#include "code\modules\reagents\reagent_containers\blood_pack.dm"
|
#include "code\modules\reagents\reagent_containers\blood_pack.dm"
|
||||||
|
|||||||
82
code/modules/projectiles/guns/launcher/grenade_launcher.dm
Normal file
82
code/modules/projectiles/guns/launcher/grenade_launcher.dm
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/obj/item/weapon/gun/launcher/grenade
|
||||||
|
name = "grenade launcher"
|
||||||
|
desc = "A bulky pump-action grenade launcher. Holds up to 5 grenades in a revolving magazine."
|
||||||
|
icon = 'icons/obj/gun.dmi'
|
||||||
|
icon_state = "riotgun"
|
||||||
|
item_state = "riotgun"
|
||||||
|
w_class = 4
|
||||||
|
force = 10
|
||||||
|
|
||||||
|
fire_sound = 'sound/weapons/empty.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 = 4 //holds this + one in the chamber
|
||||||
|
matter = list("metal" = 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/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)))
|
||||||
|
if(grenades.len >= max_grenades)
|
||||||
|
user << "<span class='warning'>[src] is full.</span>"
|
||||||
|
return
|
||||||
|
user.remove_from_mob(I)
|
||||||
|
I.loc = src
|
||||||
|
grenades.Insert(1, I) //add to the head of the list, so that it is loaded on the next pump
|
||||||
|
user.visible_message("[user] inserts \a [I] into [src].", "<span class='notice'>You insert \a [I] into [src].</span>")
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/gun/launcher/grenade/attack_hand(mob/user)
|
||||||
|
if(src in 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>"
|
||||||
|
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]).")
|
||||||
|
chambered = null
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/gun/grenadelauncher
|
|
||||||
name = "grenade launcher"
|
|
||||||
icon = 'icons/obj/gun.dmi'
|
|
||||||
icon_state = "riotgun"
|
|
||||||
item_state = "riotgun"
|
|
||||||
w_class = 4.0
|
|
||||||
throw_speed = 2
|
|
||||||
throw_range = 10
|
|
||||||
force = 5.0
|
|
||||||
var/list/grenades = new/list()
|
|
||||||
var/max_grenades = 3
|
|
||||||
matter = list("metal" = 2000)
|
|
||||||
|
|
||||||
examine(mob/user)
|
|
||||||
if(..(user, 2))
|
|
||||||
user << "\blue [grenades] / [max_grenades] Grenades."
|
|
||||||
|
|
||||||
attackby(obj/item/I as obj, mob/user as mob)
|
|
||||||
|
|
||||||
if((istype(I, /obj/item/weapon/grenade)))
|
|
||||||
if(grenades.len < max_grenades)
|
|
||||||
user.drop_item()
|
|
||||||
I.loc = src
|
|
||||||
grenades += I
|
|
||||||
user << "\blue You put the grenade in the grenade launcher."
|
|
||||||
user << "\blue [grenades.len] / [max_grenades] Grenades."
|
|
||||||
else
|
|
||||||
usr << "\red The grenade launcher cannot hold more grenades."
|
|
||||||
|
|
||||||
afterattack(obj/target, mob/user , flag)
|
|
||||||
|
|
||||||
if (istype(target, /obj/item/weapon/storage/backpack ))
|
|
||||||
return
|
|
||||||
|
|
||||||
else if (locate (/obj/structure/table, src.loc))
|
|
||||||
return
|
|
||||||
|
|
||||||
else if(target == user)
|
|
||||||
return
|
|
||||||
|
|
||||||
if(grenades.len)
|
|
||||||
spawn(0) fire_grenade(target,user)
|
|
||||||
else
|
|
||||||
usr << "\red The grenade launcher is empty."
|
|
||||||
|
|
||||||
proc
|
|
||||||
fire_grenade(atom/target, mob/user)
|
|
||||||
for(var/mob/O in viewers(world.view, user))
|
|
||||||
O.show_message(text("\red [] fired a grenade!", user), 1)
|
|
||||||
user << "\red You fire the grenade launcher!"
|
|
||||||
var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta!
|
|
||||||
grenades -= F
|
|
||||||
F.loc = user.loc
|
|
||||||
F.throw_at(target, 30, 2, user)
|
|
||||||
message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
|
|
||||||
log_game("[key_name_admin(user)] used a grenade ([src.name]).")
|
|
||||||
F.active = 1
|
|
||||||
F.icon_state = initial(icon_state) + "_active"
|
|
||||||
playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
|
||||||
spawn(15)
|
|
||||||
F.prime()
|
|
||||||
@@ -1046,7 +1046,7 @@
|
|||||||
"uf" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
|
"uf" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
|
||||||
"ug" = (/turf/unsimulated/wall,/area/centcom/test)
|
"ug" = (/turf/unsimulated/wall,/area/centcom/test)
|
||||||
"uh" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
|
"uh" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
|
||||||
"ui" = (/obj/structure/table/rack,/obj/item/weapon/gun/grenadelauncher,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
|
"ui" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/grenade,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
|
||||||
"uj" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
|
"uj" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
|
||||||
"uk" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
|
"uk" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
|
||||||
"ul" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
|
"ul" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
|
||||||
|
|||||||
Reference in New Issue
Block a user