mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
Adds option for projectile guns to cycle casings
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
matter = list("metal" = 1000)
|
matter = list("metal" = 1000)
|
||||||
recoil = 1
|
recoil = 1
|
||||||
|
|
||||||
|
var/eject_casings = 1 //experimental: for guns that don't eject casings, like revolvers.
|
||||||
var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine
|
var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine
|
||||||
|
|
||||||
//For SINGLE_CASING or SPEEDLOADER guns
|
//For SINGLE_CASING or SPEEDLOADER guns
|
||||||
@@ -45,10 +46,19 @@
|
|||||||
ammo_magazine.stored_ammo -= C
|
ammo_magazine.stored_ammo -= C
|
||||||
|
|
||||||
if(istype(C))
|
if(istype(C))
|
||||||
|
if(eject_casings)
|
||||||
C.loc = get_turf(src) //Eject casing onto ground.
|
C.loc = get_turf(src) //Eject casing onto ground.
|
||||||
|
else
|
||||||
|
//cycle it to the end
|
||||||
|
if(ammo_magazine)
|
||||||
|
ammo_magazine.stored_ammo += C
|
||||||
|
else
|
||||||
|
loaded += C
|
||||||
|
|
||||||
if(C.BB)
|
if(C.BB)
|
||||||
in_chamber = C.BB
|
in_chamber = C.BB
|
||||||
C.BB.loc = src //Set projectile loc to gun.
|
C.BB.loc = src //Set projectile loc to gun.
|
||||||
|
C.BB = null
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
@@ -63,12 +73,16 @@
|
|||||||
switch(AM.mag_type)
|
switch(AM.mag_type)
|
||||||
if(MAGAZINE)
|
if(MAGAZINE)
|
||||||
if(ammo_magazine)
|
if(ammo_magazine)
|
||||||
return //already a magazine here
|
user << "<span class='warning'>[src] already has a magazine loaded!</span>" //already a magazine here
|
||||||
|
return
|
||||||
user.remove_from_mob(AM)
|
user.remove_from_mob(AM)
|
||||||
AM.loc = src
|
AM.loc = src
|
||||||
ammo_magazine = AM
|
ammo_magazine = AM
|
||||||
user.visible_message("[user] inserts [AM] into [src].", "<span class='notice'>You insert [AM] into [src]!</span>")
|
user.visible_message("[user] inserts [AM] into [src].", "<span class='notice'>You insert [AM] into [src]!</span>")
|
||||||
if(SPEEDLOADER)
|
if(SPEEDLOADER)
|
||||||
|
if(loaded.len >= max_shells)
|
||||||
|
user << "<span class='warning'>[src] is full!</span>"
|
||||||
|
return
|
||||||
var/count = 0
|
var/count = 0
|
||||||
for(var/obj/item/ammo_casing/C in AM.stored_ammo)
|
for(var/obj/item/ammo_casing/C in AM.stored_ammo)
|
||||||
if(loaded.len >= max_shells)
|
if(loaded.len >= max_shells)
|
||||||
@@ -86,12 +100,15 @@
|
|||||||
|
|
||||||
else if(istype(A, /obj/item/ammo_casing))
|
else if(istype(A, /obj/item/ammo_casing))
|
||||||
var/obj/item/ammo_casing/C = A
|
var/obj/item/ammo_casing/C = A
|
||||||
if(!(load_method & SINGLE_CASING) || caliber != C.caliber || loaded.len >= max_shells)
|
if(!(load_method & SINGLE_CASING) || caliber != C.caliber)
|
||||||
return //incompatible or full
|
return //incompatible
|
||||||
|
if(loaded.len >= max_shells)
|
||||||
|
user << "<span class='warning'>[src] is full!</span>"
|
||||||
|
return
|
||||||
|
|
||||||
user.remove_from_mob(C)
|
user.remove_from_mob(C)
|
||||||
C.loc = src
|
C.loc = src
|
||||||
loaded += C
|
loaded.Insert(C, 1) //add to the head of the list
|
||||||
user.visible_message("[user] inserts \a [C] into [src].", "<span class='notice'>You insert \a [C] into [src]!</span>")
|
user.visible_message("[user] inserts \a [C] into [src].", "<span class='notice'>You insert \a [C] into [src]!</span>")
|
||||||
update_icon()
|
update_icon()
|
||||||
return
|
return
|
||||||
@@ -125,7 +142,7 @@
|
|||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
else
|
else
|
||||||
user << "<span class='warning'>There's nothing loaded in [src]!</span>"
|
user << "<span class='warning'>[src] is empty!</span>"
|
||||||
|
|
||||||
/obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob)
|
/obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob)
|
||||||
load_ammo(A, user)
|
load_ammo(A, user)
|
||||||
|
|||||||
Reference in New Issue
Block a user