mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-21 03:56:47 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into 12/16/2015_newwizard
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
var/caliber = "" //Which kind of guns it can be loaded into
|
||||
var/projectile_type //The bullet type to create when New() is called
|
||||
var/obj/item/projectile/BB = null //The loaded bullet - make it so that the projectiles are created only when needed?
|
||||
var/spent_icon = null
|
||||
// var/spent_icon = null
|
||||
|
||||
/obj/item/ammo_casing/New()
|
||||
..()
|
||||
@@ -46,8 +46,10 @@
|
||||
BB.name = "[initial(BB.name)] (\"[label_text]\")"
|
||||
|
||||
/obj/item/ammo_casing/update_icon()
|
||||
if(spent_icon && !BB)
|
||||
icon_state = spent_icon
|
||||
/* if(spent_icon && !BB)
|
||||
icon_state = spent_icon*/
|
||||
if(!BB) // This is really just a much better way of doing this.
|
||||
icon_state = "[initial(icon_state)]-spent"
|
||||
|
||||
/obj/item/ammo_casing/examine(mob/user)
|
||||
..()
|
||||
@@ -88,6 +90,7 @@
|
||||
var/list/ammo_states = list() //values
|
||||
|
||||
/obj/item/ammo_magazine/New()
|
||||
..()
|
||||
if(multiple_sprites)
|
||||
initialize_magazine_icondata(src)
|
||||
|
||||
@@ -112,6 +115,24 @@
|
||||
C.loc = src
|
||||
stored_ammo.Insert(1, C) //add to the head of the list
|
||||
update_icon()
|
||||
if(istype(W, /obj/item/ammo_magazine/clip))
|
||||
var/obj/item/ammo_magazine/clip/L = W
|
||||
if(L.caliber != caliber)
|
||||
user << "<span class='warning'>The ammo in [L] does not fit into [src].</span>"
|
||||
return
|
||||
if(!L.stored_ammo.len)
|
||||
user << "<span class='warning'>There's no more ammo [L]!</span>"
|
||||
return
|
||||
if(stored_ammo.len >= max_ammo)
|
||||
user << "<span class='warning'>[src] is full!</span>"
|
||||
return
|
||||
var/obj/item/ammo_casing/AC = L.stored_ammo[1] //select the next casing.
|
||||
L.stored_ammo -= AC //Remove this casing from loaded list of the clip.
|
||||
AC.loc = src
|
||||
stored_ammo.Insert(1, AC) //add it to the head of our magazine's list
|
||||
L.update_icon()
|
||||
playsound(user.loc, 'sound/weapons/flipblade.ogg', 50, 1)
|
||||
update_icon()
|
||||
|
||||
/obj/item/ammo_magazine/attack_self(mob/user)
|
||||
if(!stored_ammo.len)
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
///////// .357 /////////
|
||||
|
||||
/obj/item/ammo_magazine/a357
|
||||
//name = "ammo box (.357)"
|
||||
//desc = "A box of .357 ammo"
|
||||
//icon_state = "357"
|
||||
name = "speed loader (.357)"
|
||||
icon_state = "T38"
|
||||
name = "speedloader (.357)"
|
||||
desc = "A speedloader for .357 revolvers."
|
||||
icon_state = "38"
|
||||
caliber = "357"
|
||||
ammo_type = /obj/item/ammo_casing/a357
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1260)
|
||||
max_ammo = 7
|
||||
max_ammo = 6
|
||||
multiple_sprites = 1
|
||||
|
||||
///////// .38 /////////
|
||||
|
||||
/obj/item/ammo_magazine/c38
|
||||
name = "speed loader (.38)"
|
||||
name = "speedloader (.38)"
|
||||
desc = "A speedloader for .38 revolvers."
|
||||
icon_state = "38"
|
||||
caliber = "38"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 360)
|
||||
@@ -20,11 +23,13 @@
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/c38/rubber
|
||||
name = "speed loader (.38 rubber)"
|
||||
name = "speedloader (.38 rubber)"
|
||||
ammo_type = /obj/item/ammo_casing/c38r
|
||||
|
||||
///////// .45 /////////
|
||||
|
||||
/obj/item/ammo_magazine/c45m
|
||||
name = "magazine (.45)"
|
||||
name = "pistol magazine (.45)"
|
||||
icon_state = "45"
|
||||
mag_type = MAGAZINE
|
||||
ammo_type = /obj/item/ammo_casing/c45
|
||||
@@ -46,17 +51,79 @@
|
||||
|
||||
/obj/item/ammo_magazine/c45m/flash
|
||||
name = "magazine (.45 flash)"
|
||||
ammo_type = "/obj/item/ammo_casing/c45f"
|
||||
ammo_type = /obj/item/ammo_casing/c45f
|
||||
|
||||
/obj/item/ammo_magazine/c45uzi
|
||||
name = "stick magazine (.45)"
|
||||
icon_state = "uzi45"
|
||||
mag_type = MAGAZINE
|
||||
ammo_type = /obj/item/ammo_casing/c45
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1200)
|
||||
caliber = ".45"
|
||||
max_ammo = 16
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/c45uzi/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/tommymag
|
||||
name = "tommygun magazine (.45)"
|
||||
icon_state = "tommy-mag"
|
||||
mag_type = MAGAZINE
|
||||
ammo_type = /obj/item/ammo_casing/c45
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1500)
|
||||
caliber = ".45"
|
||||
max_ammo = 20
|
||||
|
||||
/obj/item/ammo_magazine/tommymag/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/tommydrum
|
||||
name = "tommygun drum magazine (.45)"
|
||||
icon_state = "tommy-drum"
|
||||
w_class = 3 // Bulky ammo doesn't fit in your pockets!
|
||||
mag_type = MAGAZINE
|
||||
ammo_type = /obj/item/ammo_casing/c45
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 3750)
|
||||
caliber = ".45"
|
||||
max_ammo = 50
|
||||
|
||||
/obj/item/ammo_magazine/tommydrum/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/clip/c45
|
||||
name = "ammo clip (.45)"
|
||||
icon_state = "clip_pistol"
|
||||
desc = "A stripper clip for reloading .45 rounds into magazines."
|
||||
caliber = ".45"
|
||||
ammo_type = /obj/item/ammo_casing/c45
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 675) // metal costs very roughly based around one .45 casing = 75 metal
|
||||
max_ammo = 9
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/clip/c45/rubber
|
||||
name = "ammo clip (.45 rubber)"
|
||||
ammo_type = /obj/item/ammo_casing/c45r
|
||||
|
||||
/obj/item/ammo_magazine/clip/c45/practice
|
||||
name = "ammo clip (.45 practice)"
|
||||
ammo_type = /obj/item/ammo_casing/c45p
|
||||
|
||||
/obj/item/ammo_magazine/clip/c45/flash
|
||||
name = "ammo clip (.45 flash)"
|
||||
ammo_type = /obj/item/ammo_casing/c45f
|
||||
|
||||
///////// 9mm /////////
|
||||
|
||||
/obj/item/ammo_magazine/mc9mm
|
||||
name = "magazine (9mm)"
|
||||
icon_state = "9x19p"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 600)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 480)
|
||||
caliber = "9mm"
|
||||
ammo_type = /obj/item/ammo_casing/c9mm
|
||||
max_ammo = 10
|
||||
max_ammo = 8
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/mc9mm/empty
|
||||
@@ -65,17 +132,13 @@
|
||||
/obj/item/ammo_magazine/mc9mm/flash
|
||||
ammo_type = /obj/item/ammo_casing/c9mmf
|
||||
|
||||
/obj/item/ammo_magazine/c9mm
|
||||
name = "ammunition Box (9mm)"
|
||||
icon_state = "9mm"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1800)
|
||||
caliber = "9mm"
|
||||
ammo_type = /obj/item/ammo_casing/c9mm
|
||||
max_ammo = 30
|
||||
/obj/item/ammo_magazine/mc9mm/rubber
|
||||
name = "magazine (9mm rubber)"
|
||||
ammo_type = /obj/item/ammo_casing/c9mmr
|
||||
|
||||
/obj/item/ammo_magazine/c9mm/empty
|
||||
initial_ammo = 0
|
||||
/obj/item/ammo_magazine/mc9mm/practice
|
||||
name = "magazine (9mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/c9mmp
|
||||
|
||||
/obj/item/ammo_magazine/mc9mmt
|
||||
name = "top mounted magazine (9mm)"
|
||||
@@ -94,22 +157,85 @@
|
||||
name = "top mounted magazine (9mm rubber)"
|
||||
ammo_type = /obj/item/ammo_casing/c9mmr
|
||||
|
||||
/obj/item/ammo_magazine/mc9mmt/flash
|
||||
name = "top mounted magazine (9mm flash)"
|
||||
ammo_type = /obj/item/ammo_casing/c9mmf
|
||||
|
||||
/obj/item/ammo_magazine/mc9mmt/practice
|
||||
name = "top mounted magazine (9mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/c9mmp
|
||||
|
||||
/obj/item/ammo_magazine/c45
|
||||
name = "ammunition Box (.45)"
|
||||
/obj/item/ammo_magazine/p90
|
||||
name = "high capacity top mounted magazine (9mm armor-piercing)"
|
||||
icon_state = "p90"
|
||||
mag_type = MAGAZINE
|
||||
ammo_type = /obj/item/ammo_casing/c9mm/ap
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 3000)
|
||||
caliber = "9mm"
|
||||
max_ammo = 50
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/p90/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/clip/c9mm
|
||||
name = "ammo clip (9mm)"
|
||||
icon_state = "clip_pistol"
|
||||
desc = "A stripper clip for reloading 9mm rounds into magazines."
|
||||
caliber = "9mm"
|
||||
ammo_type = /obj/item/ammo_casing/c9mm
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 540) // metal costs are very roughly based around one 9mm casing = 60 metal
|
||||
max_ammo = 9
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/clip/c9mm/rubber
|
||||
name = "ammo clip (.45 rubber)"
|
||||
ammo_type = /obj/item/ammo_casing/c9mmr
|
||||
|
||||
/obj/item/ammo_magazine/clip/c9mm/practice
|
||||
name = "ammo clip (.45 practice)"
|
||||
ammo_type = /obj/item/ammo_casing/c9mmp
|
||||
|
||||
/obj/item/ammo_magazine/clip/c9mm/flash
|
||||
name = "ammo clip (.45 flash)"
|
||||
ammo_type = /obj/item/ammo_casing/c9mmf
|
||||
|
||||
/obj/item/ammo_magazine/c9mm // Made by RnD for Prototype SMG and should probably be removed because why does it require DIAMONDS to make bullets?
|
||||
name = "ammunition Box (9mm)"
|
||||
icon_state = "9mm"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
caliber = ".45"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2250)
|
||||
ammo_type = /obj/item/ammo_casing/c45
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1800)
|
||||
caliber = "9mm"
|
||||
ammo_type = /obj/item/ammo_casing/c9mm
|
||||
max_ammo = 30
|
||||
|
||||
/obj/item/ammo_magazine/c9mm/empty
|
||||
initial_ammo = 0
|
||||
|
||||
///////// 5mm /////////
|
||||
/*
|
||||
/obj/item/ammo_magazine/c5mm
|
||||
name = "magazine (5mm)"
|
||||
icon_state = "fiveseven"
|
||||
mag_type = MAGAZINE
|
||||
ammo_type = /obj/item/ammo_casing/c5mm
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1200)
|
||||
caliber = "5mm"
|
||||
max_ammo = 20
|
||||
//multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/clip/c5mm
|
||||
name = "ammo clip (5mm)"
|
||||
icon_state = "clip_pistol"
|
||||
desc = "A stripper clip for reloading 5mm rounds into magazines."
|
||||
caliber = "5mm"
|
||||
ammo_type = /obj/item/ammo_casing/c5mm
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 540) // metal costs are very roughly based around one 5mm casing = 60 metal
|
||||
max_ammo = 9
|
||||
multiple_sprites = 1
|
||||
*/
|
||||
///////// 10mm /////////
|
||||
|
||||
/obj/item/ammo_magazine/a10mm
|
||||
name = "magazine (10mm)"
|
||||
icon_state = "12mm"
|
||||
@@ -124,6 +250,18 @@
|
||||
/obj/item/ammo_magazine/a10mm/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/clip/a10mm
|
||||
name = "ammo clip (10mm)"
|
||||
icon_state = "clip_pistol"
|
||||
desc = "A stripper clip for reloading 5mm rounds into magazines."
|
||||
caliber = "10mm"
|
||||
ammo_type = /obj/item/ammo_casing/a10mm
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 675) // metal costs are very roughly based around one 10mm casing = 75 metal
|
||||
max_ammo = 9
|
||||
multiple_sprites = 1
|
||||
|
||||
///////// 5.56mm /////////
|
||||
|
||||
/obj/item/ammo_magazine/a556
|
||||
name = "magazine (5.56mm)"
|
||||
icon_state = "5.56"
|
||||
@@ -142,8 +280,53 @@
|
||||
name = "magazine (5.56mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/a556p
|
||||
|
||||
/obj/item/ammo_magazine/a556/ap
|
||||
name = "magazine (5.56mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a556/ap
|
||||
|
||||
/obj/item/ammo_magazine/a556m
|
||||
name = "20rnd magazine (5.56mm)"
|
||||
icon_state = "5.56mid"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a556"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 3600)
|
||||
ammo_type = /obj/item/ammo_casing/a556
|
||||
max_ammo = 20
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/a556m/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/a556m/ap
|
||||
name = "20rnd magazine (5.56mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a556/ap
|
||||
|
||||
/obj/item/ammo_magazine/a556m/practice
|
||||
name = "20rnd magazine (5.56mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/a556p
|
||||
|
||||
/obj/item/ammo_magazine/clip/a556
|
||||
name = "ammo clip (5.56mm)"
|
||||
icon_state = "clip_rifle"
|
||||
caliber = "a556"
|
||||
ammo_type = /obj/item/ammo_casing/a556
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 450) // metal costs are very roughly based around one 10mm casing = 180 metal
|
||||
max_ammo = 5
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/clip/a556/ap
|
||||
name = "rifle clip (5.56mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a556/ap
|
||||
|
||||
/obj/item/ammo_magazine/clip/a556/practice
|
||||
name = "rifle clip (5.56mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/a556
|
||||
|
||||
///////// .50 AE /////////
|
||||
|
||||
/obj/item/ammo_magazine/a50
|
||||
name = "magazine (.50)"
|
||||
name = "magazine (.50 AE)"
|
||||
icon_state = "50ae"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
@@ -156,17 +339,17 @@
|
||||
/obj/item/ammo_magazine/a50/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/a75
|
||||
name = "ammo magazine (20mm)"
|
||||
icon_state = "75"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "75"
|
||||
ammo_type = /obj/item/ammo_casing/a75
|
||||
/obj/item/ammo_magazine/clip/a50
|
||||
name = "ammo clip (.50 AE)"
|
||||
icon_state = "clip_pistol"
|
||||
desc = "A stripper clip for reloading .50 Action Express rounds into magazines."
|
||||
caliber = ".50"
|
||||
ammo_type = /obj/item/ammo_casing/a50
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1620) // metal costs are very roughly based around one .50 casing = 180 metal
|
||||
max_ammo = 9
|
||||
multiple_sprites = 1
|
||||
max_ammo = 4
|
||||
|
||||
/obj/item/ammo_magazine/a75/empty
|
||||
initial_ammo = 0
|
||||
///////// 7.62mm /////////
|
||||
|
||||
/obj/item/ammo_magazine/a762
|
||||
name = "magazine box (7.62mm)"
|
||||
@@ -174,11 +357,16 @@
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a762"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 4500)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000)
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
w_class = 3 // This should NOT fit in your pocket!!
|
||||
max_ammo = 50
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/a762/ap
|
||||
name = "magazine box (7.62mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a762/ap
|
||||
|
||||
/obj/item/ammo_magazine/a762/empty
|
||||
initial_ammo = 0
|
||||
|
||||
@@ -187,23 +375,57 @@
|
||||
icon_state = "c762"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a762"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1800)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 4000)
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
max_ammo = 20
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/caps
|
||||
name = "speed loader (caps)"
|
||||
icon_state = "T38"
|
||||
caliber = "caps"
|
||||
color = "#FF0000"
|
||||
ammo_type = /obj/item/ammo_casing/cap
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 600)
|
||||
max_ammo = 7
|
||||
/obj/item/ammo_magazine/c762/ap
|
||||
name = "magazine (7.62mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a762/ap
|
||||
|
||||
/obj/item/ammo_magazine/c762/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/s762 // 's' for small!
|
||||
name = "magazine (7.62mm)"
|
||||
icon_state = "SVD"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "a762"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
max_ammo = 10
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/s762/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/s762/ap
|
||||
name = "magazine (7.62mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a762/ap
|
||||
|
||||
/obj/item/ammo_magazine/clip/a762
|
||||
name = "ammo clip (7.62mm)"
|
||||
icon_state = "clip_rifle"
|
||||
caliber = "a762"
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000) // metal costs are very roughly based around one 7.62 casing = 200 metal
|
||||
max_ammo = 5
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/clip/a762/ap
|
||||
name = "rifle clip (7.62mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a762/ap
|
||||
|
||||
/obj/item/ammo_magazine/clip/a762/practice
|
||||
name = "rifle clip (7.62mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/a762p
|
||||
|
||||
///////// 12g /////////
|
||||
|
||||
/obj/item/ammo_magazine/g12
|
||||
name = "magazine (12 gauge)"
|
||||
icon_state = "g12"
|
||||
icon_state = "12g"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "shotgun"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2200)
|
||||
@@ -224,4 +446,30 @@
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/flash
|
||||
|
||||
/obj/item/ammo_magazine/g12/empty
|
||||
initial_ammo = 0
|
||||
initial_ammo = 0
|
||||
|
||||
///////// .75 Gyrojet /////////
|
||||
|
||||
/obj/item/ammo_magazine/a75
|
||||
name = "ammo magazine (.75 Gyrojet)"
|
||||
icon_state = "75"
|
||||
mag_type = MAGAZINE
|
||||
caliber = "75"
|
||||
ammo_type = /obj/item/ammo_casing/a75
|
||||
multiple_sprites = 1
|
||||
max_ammo = 4
|
||||
|
||||
/obj/item/ammo_magazine/a75/empty
|
||||
initial_ammo = 0
|
||||
|
||||
///////// Misc. /////////
|
||||
|
||||
/obj/item/ammo_magazine/caps
|
||||
name = "speedloader (caps)"
|
||||
icon_state = "T38"
|
||||
caliber = "caps"
|
||||
color = "#FF0000"
|
||||
ammo_type = /obj/item/ammo_casing/cap
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 600)
|
||||
max_ammo = 7
|
||||
multiple_sprites = 1
|
||||
@@ -9,7 +9,7 @@
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/strong
|
||||
|
||||
/obj/item/ammo_casing/a75
|
||||
desc = "A 20mm bullet casing."
|
||||
desc = "A .75 gyrojet rocket sheathe."
|
||||
caliber = "75"
|
||||
projectile_type = /obj/item/projectile/bullet/gyro
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
/obj/item/ammo_casing/c38r
|
||||
desc = "A .38 rubber bullet casing."
|
||||
caliber = "38"
|
||||
icon_state = "r-casing"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/rubber
|
||||
|
||||
/obj/item/ammo_casing/c9mm
|
||||
@@ -28,21 +29,34 @@
|
||||
caliber = "9mm"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol
|
||||
|
||||
/obj/item/ammo_casing/c9mm/ap
|
||||
desc = "A 9mm armor-piercing bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/ap
|
||||
|
||||
/obj/item/ammo_casing/c9mmf
|
||||
desc = "A 9mm flash shell casing."
|
||||
caliber = "9mm"
|
||||
icon_state = "r-casing"
|
||||
projectile_type = /obj/item/projectile/energy/flash
|
||||
|
||||
/obj/item/ammo_casing/c9mmr
|
||||
desc = "A 9mm rubber bullet casing."
|
||||
caliber = "9mm"
|
||||
icon_state = "r-casing"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/rubber
|
||||
|
||||
/obj/item/ammo_casing/c9mmp
|
||||
desc = "A 9mm practice bullet casing."
|
||||
caliber = "9mm"
|
||||
icon_state = "r-casing"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/practice
|
||||
|
||||
/*
|
||||
/obj/item/ammo_casing/c5mm
|
||||
desc = "A 5mm bullet casing."
|
||||
caliber = "5mm"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/ap
|
||||
*/
|
||||
|
||||
/obj/item/ammo_casing/c45
|
||||
desc = "A .45 bullet casing."
|
||||
@@ -52,16 +66,19 @@
|
||||
/obj/item/ammo_casing/c45p
|
||||
desc = "A .45 practice bullet casing."
|
||||
caliber = ".45"
|
||||
icon_state = "r-casing"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/practice
|
||||
|
||||
/obj/item/ammo_casing/c45r
|
||||
desc = "A .45 rubber bullet casing."
|
||||
caliber = ".45"
|
||||
icon_state = "r-casing"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/rubber
|
||||
|
||||
/obj/item/ammo_casing/c45f
|
||||
desc = "A .45 flash shell casing."
|
||||
caliber = ".45"
|
||||
icon_state = "r-casing"
|
||||
projectile_type = /obj/item/projectile/energy/flash
|
||||
|
||||
/obj/item/ammo_casing/a10mm
|
||||
@@ -112,7 +129,6 @@
|
||||
name = "stun shell"
|
||||
desc = "A 12 gauge taser cartridge."
|
||||
icon_state = "stunshell"
|
||||
spent_icon = "stunshell-spent"
|
||||
projectile_type = /obj/item/projectile/energy/electrode/stunshot
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 360, "glass" = 720)
|
||||
|
||||
@@ -131,13 +147,27 @@
|
||||
/obj/item/ammo_casing/a762
|
||||
desc = "A 7.62mm bullet casing."
|
||||
caliber = "a762"
|
||||
icon_state = "rifle-casing"
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a762
|
||||
|
||||
/obj/item/ammo_casing/a762/ap
|
||||
desc = "A 7.62mm armor-piercing bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a762/ap
|
||||
|
||||
/obj/item/ammo_casing/a762p
|
||||
desc = "A 7.62mm practice bullet casing."
|
||||
caliber = "a762"
|
||||
icon_state = "rifle-casing" // Need to make an icon for these
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/practice
|
||||
|
||||
/obj/item/ammo_casing/a762/blank
|
||||
desc = "A blank 7.62mm bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/blank
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 90)
|
||||
|
||||
/obj/item/ammo_casing/a145
|
||||
name = "shell casing"
|
||||
desc = "A 14.5mm shell."
|
||||
icon_state = "lcasing"
|
||||
spent_icon = "lcasing-spent"
|
||||
caliber = "14.5mm"
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a145
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1250)
|
||||
@@ -145,12 +175,18 @@
|
||||
/obj/item/ammo_casing/a556
|
||||
desc = "A 5.56mm bullet casing."
|
||||
caliber = "a556"
|
||||
icon_state = "rifle-casing"
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a556
|
||||
|
||||
/obj/item/ammo_casing/a556/ap
|
||||
desc = "A 5.56mm armor-piercing bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a556/ap
|
||||
|
||||
/obj/item/ammo_casing/a556p
|
||||
desc = "A 5.56mm practice bullet casing."
|
||||
caliber = "a556"
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a556/practice
|
||||
icon_state = "rifle-casing" // Need to make an icon for these
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/practice
|
||||
|
||||
/obj/item/ammo_casing/rocket
|
||||
name = "rocket shell"
|
||||
@@ -163,5 +199,11 @@
|
||||
name = "cap"
|
||||
desc = "A cap for children toys."
|
||||
caliber = "caps"
|
||||
icon_state = "r-casing"
|
||||
color = "#FF0000"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/cap
|
||||
|
||||
/obj/item/ammo_casing/spent // For simple hostile mobs only, so they don't cough up usable bullets when firing. This is for literally nothing else.
|
||||
icon_state = "s-casing-spent"
|
||||
BB = null
|
||||
projectile_type = null
|
||||
@@ -66,6 +66,7 @@
|
||||
var/mode_name = null
|
||||
var/requires_two_hands
|
||||
var/wielded_icon = "gun_wielded"
|
||||
var/one_handed_penalty = 0 // Penalty applied if someone fires a two-handed gun with one hand.
|
||||
|
||||
var/next_fire_time = 0
|
||||
|
||||
@@ -81,6 +82,13 @@
|
||||
var/tmp/told_cant_shoot = 0 //So that it doesn't spam them with the fact they cannot hit them.
|
||||
var/tmp/lock_time = -100
|
||||
|
||||
var/dna_lock = 0 //whether or not the gun is locked to dna
|
||||
var/list/stored_dna = list() //list of the dna stored in the gun, used to allow users to use it or not
|
||||
var/safety_level = 0 //either 0 or 1, at 0 the game buzzes and tells the user they can't use it, at 1 it self destructs after 10 seconds
|
||||
var/controller_dna = null //The dna of the person who is the primary controller of the gun
|
||||
var/controller_lock = 0 //whether or not the gun is locked by the primar controller, 0 or 1, at 1 it is locked and does not allow
|
||||
var/exploding = 0
|
||||
|
||||
/obj/item/weapon/gun/New()
|
||||
..()
|
||||
for(var/i in 1 to firemodes.len)
|
||||
@@ -89,11 +97,16 @@
|
||||
if(isnull(scoped_accuracy))
|
||||
scoped_accuracy = accuracy
|
||||
|
||||
if(!dna_lock)
|
||||
verbs -= /obj/item/weapon/gun/verb/remove_dna
|
||||
verbs -= /obj/item/weapon/gun/verb/give_dna
|
||||
verbs -= /obj/item/weapon/gun/verb/allow_dna
|
||||
|
||||
/obj/item/weapon/gun/update_held_icon()
|
||||
if(requires_two_hands)
|
||||
var/mob/living/M = loc
|
||||
if(istype(M))
|
||||
if((M.l_hand == src && !M.r_hand) || (M.r_hand == src && !M.l_hand))
|
||||
if(M.item_is_in_hands(src) && !M.hands_are_full())
|
||||
name = "[initial(name)] (wielded)"
|
||||
item_state = wielded_icon
|
||||
else
|
||||
@@ -113,6 +126,20 @@
|
||||
return 0
|
||||
|
||||
var/mob/living/M = user
|
||||
if(dna_lock && stored_dna)
|
||||
if(!authorized_user(user))
|
||||
if(safety_level == 0)
|
||||
M << "<span class='danger'>\The [src] buzzes in dissapoint and displays an invalid DNA symbol.</span>"
|
||||
return 0
|
||||
if(!exploding)
|
||||
if(safety_level == 1)
|
||||
M << "<span class='danger'>\The [src] hisses in dissapointment.</span>"
|
||||
visible_message("<span class='game say'><span class='name'>\The [src]</span> announces, \"Self-destruct occurring in ten seconds.\"</span>", "<span class='game say'><span class='name'>\The [src]</span> announces, \"Self-destruct occurring in ten seconds.\"</span>")
|
||||
sleep(100)
|
||||
explosion(src, -1, 0, 2, 3, 0)
|
||||
exploding = 1
|
||||
qdel(src)
|
||||
return 0
|
||||
if(HULK in M.mutations)
|
||||
M << "<span class='danger'>Your fingers are much too large for the trigger guard!</span>"
|
||||
return 0
|
||||
@@ -145,7 +172,7 @@
|
||||
PreFire(A,user,params) //They're using the new gun system, locate what they're aiming at.
|
||||
return
|
||||
|
||||
if(user && user.a_intent == I_HELP) //regardless of what happens, refuse to shoot if help intent is on
|
||||
if(user && user.a_intent == I_HELP && user.is_preference_enabled(/datum/client_preference/safefiring)) //regardless of what happens, refuse to shoot if help intent is on
|
||||
user << "<span class='warning'>You refrain from firing your [src] as your intent is set to help.</span>"
|
||||
else
|
||||
Fire(A,user,params) //Otherwise, fire normally.
|
||||
@@ -163,6 +190,8 @@
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
user.break_cloak()
|
||||
|
||||
if(!special_check(user))
|
||||
return
|
||||
|
||||
@@ -179,9 +208,9 @@
|
||||
var/held_acc_mod = 0
|
||||
var/held_disp_mod = 0
|
||||
if(requires_two_hands)
|
||||
if((user.l_hand == src && user.r_hand) || (user.r_hand == src && user.l_hand))
|
||||
held_acc_mod = -3
|
||||
held_disp_mod = 3
|
||||
if(user.item_is_in_hands(src) && user.hands_are_full())
|
||||
held_acc_mod = held_acc_mod - one_handed_penalty
|
||||
held_disp_mod = held_disp_mod - round(one_handed_penalty / 2)
|
||||
|
||||
//actually attempt to shoot
|
||||
var/turf/targloc = get_turf(target) //cache this in case target gets deleted during shooting, e.g. if it was a securitron that got destroyed.
|
||||
@@ -209,10 +238,16 @@
|
||||
target = targloc
|
||||
pointblank = 0
|
||||
|
||||
// We do this down here, so we don't get the message if we fire an empty gun.
|
||||
if(requires_two_hands)
|
||||
if(user.item_is_in_hands(src) && user.hands_are_full())
|
||||
if(one_handed_penalty >= 2)
|
||||
user << "<span class='warning'>You struggle to keep \the [src] pointed at the correct position with just one hand!</span>"
|
||||
|
||||
admin_attack_log(usr, attacker_message="Fired [src]", admin_message="fired a gun ([src]) (MODE: [src.mode_name]) [reflex ? "by reflex" : "manually"].")
|
||||
|
||||
//update timing
|
||||
user.setClickCooldown(4)
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
user.setMoveCooldown(move_delay)
|
||||
next_fire_time = world.time + fire_delay
|
||||
|
||||
@@ -417,4 +452,78 @@
|
||||
return new_mode
|
||||
|
||||
/obj/item/weapon/gun/attack_self(mob/user)
|
||||
switch_firemodes(user)
|
||||
switch_firemodes(user)
|
||||
|
||||
/obj/item/weapon/gun/proc/get_dna(mob/user)
|
||||
var/mob/living/M = user
|
||||
if(!controller_lock)
|
||||
|
||||
if(!stored_dna && !(M.dna in stored_dna))
|
||||
M << "<span class='warning'>\The [src] buzzes and displays a symbol showing the gun already contains your DNA.</span>"
|
||||
return 0
|
||||
else
|
||||
stored_dna += M.dna
|
||||
M << "<span class='notice'>\The [src] pings and a needle flicks out from the grip, taking a DNA sample from you.</span>"
|
||||
if(!controller_dna)
|
||||
controller_dna = M.dna
|
||||
M << "<span class='notice'>\The [src] processes the dna sample and pings, acknowledging you as the primary controller.</span>"
|
||||
return 1
|
||||
else
|
||||
M << "<span class='warning'>\The [src] buzzes and displays a locked symbol. It is not allowing DNA samples at this time.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/gun/verb/give_dna()
|
||||
set name = "Give DNA"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
get_dna(usr)
|
||||
|
||||
/obj/item/weapon/gun/proc/clear_dna(mob/user)
|
||||
var/mob/living/M = user
|
||||
if(!controller_lock)
|
||||
if(!authorized_user(M))
|
||||
M << "<span class='warning'>\The [src] buzzes and displays an invalid user symbol.</span>"
|
||||
return 0
|
||||
else
|
||||
stored_dna -= user.dna
|
||||
M << "<span class='notice'>\The [src] beeps and clears the DNA it has stored.</span>"
|
||||
if(M.dna == controller_dna)
|
||||
controller_dna = null
|
||||
M << "<span class='notice'>\The [src] beeps and removes you as the primary controller.</span>"
|
||||
if(controller_lock)
|
||||
controller_lock = 0
|
||||
return 1
|
||||
else
|
||||
M << "<span class='warning'>\The [src] buzzes and displays a locked symbol. It is not allowing DNA modifcation at this time.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/gun/verb/remove_dna()
|
||||
set name = "Remove DNA"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
clear_dna(usr)
|
||||
|
||||
/obj/item/weapon/gun/proc/toggledna(mob/user)
|
||||
var/mob/living/M = user
|
||||
if(authorized_user(M) && user.dna == controller_dna)
|
||||
if(!controller_lock)
|
||||
controller_lock = 1
|
||||
M << "<span class='notice'>\The [src] beeps and displays a locked symbol, informing you it will no longer allow DNA samples.</span>"
|
||||
else
|
||||
controller_lock = 0
|
||||
M << "<span class='notice'>\The [src] beeps and displays an unlocked symbol, informing you it will now allow DNA samples.</span>"
|
||||
else
|
||||
M << "<span class='warning'>\The [src] buzzes and displays an invalid user symbol.</span>"
|
||||
|
||||
/obj/item/weapon/gun/verb/allow_dna()
|
||||
set name = "Toggle DNA Samples Allowance"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
toggledna(usr)
|
||||
|
||||
/obj/item/weapon/gun/proc/authorized_user(mob/user)
|
||||
if(!stored_dna || !stored_dna.len)
|
||||
return 1
|
||||
if(!(user.dna in stored_dna))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
desc = "A vicious alien projectile weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive."
|
||||
|
||||
var/last_regen = 0
|
||||
var/spike_gen_time = 100
|
||||
var/spike_gen_time = 150
|
||||
var/max_spikes = 3
|
||||
var/spikes = 3
|
||||
release_force = 30
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/weapon/gun/energy/laser
|
||||
name = "laser carbine"
|
||||
desc = "An Hesphaistos Industries G40E carbine, designed to kill with concentrated energy blasts."
|
||||
desc = "An Hesphaistos Industries G40E carbine, designed to kill with concentrated energy blasts. This varient has the ability to \
|
||||
switch between standard fire and a more efficent but weaker 'suppressive' fire."
|
||||
icon_state = "laser"
|
||||
item_state = "laser"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
@@ -10,16 +11,29 @@
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
projectile_type = /obj/item/projectile/beam/midlaser
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 2
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="normal", projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 200),
|
||||
list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 50),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/mounted
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
requires_two_hands = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/practice
|
||||
name = "practice laser carbine"
|
||||
desc = "A modified version of the HI G40E, this one fires less concentrated energy bolts designed for target practice."
|
||||
projectile_type = /obj/item/projectile/beam/practice
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="normal", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 200),
|
||||
list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 50),
|
||||
)
|
||||
|
||||
obj/item/weapon/gun/energy/retro
|
||||
name = "retro laser"
|
||||
icon_state = "retro"
|
||||
@@ -47,7 +61,8 @@ obj/item/weapon/gun/energy/retro
|
||||
|
||||
/obj/item/weapon/gun/energy/lasercannon
|
||||
name = "laser cannon"
|
||||
desc = "With the laser cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!"
|
||||
desc = "With the laser cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron \
|
||||
flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!"
|
||||
icon_state = "lasercannon"
|
||||
item_state = null
|
||||
fire_sound = 'sound/weapons/lasercannonfire.ogg'
|
||||
@@ -55,33 +70,39 @@ obj/item/weapon/gun/energy/retro
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
projectile_type = /obj/item/projectile/beam/heavylaser
|
||||
charge_cost = 400
|
||||
max_shots = 5
|
||||
max_shots = 6
|
||||
fire_delay = 20
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 6 // The thing's heavy and huge.
|
||||
accuracy = 2
|
||||
|
||||
/obj/item/weapon/gun/energy/lasercannon/mounted
|
||||
name = "mounted laser cannon"
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
recharge_time = 10
|
||||
accuracy = 0 // Mounted cannons are just fine the way they are.
|
||||
requires_two_hands = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
|
||||
|
||||
/obj/item/weapon/gun/energy/xray
|
||||
name = "xray laser gun"
|
||||
desc = "A high-power laser gun capable of expelling concentrated xray blasts."
|
||||
desc = "A high-power laser gun capable of expelling concentrated xray blasts, which are able to penetrate matter easier than \
|
||||
standard photonic beams, resulting in an effective 'anti-armor' energy weapon."
|
||||
icon_state = "xray"
|
||||
item_state = "xray"
|
||||
fire_sound = 'sound/weapons/laser3.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
|
||||
fire_sound = 'sound/weapons/eluger.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2)
|
||||
projectile_type = /obj/item/projectile/beam/xray
|
||||
charge_cost = 100
|
||||
max_shots = 20
|
||||
fire_delay = 1
|
||||
max_shots = 12
|
||||
|
||||
/obj/item/weapon/gun/energy/sniperrifle
|
||||
name = "marksman energy rifle"
|
||||
desc = "The HI DMR 9E is an older design of Hesphaistos Industries. A designated marksman rifle capable of shooting powerful ionized beams, this is a weapon to kill from a distance."
|
||||
desc = "The HI DMR 9E is an older design of Hesphaistos Industries. A designated marksman rifle capable of shooting powerful \
|
||||
ionized beams, this is a weapon to kill from a distance."
|
||||
icon_state = "sniper"
|
||||
item_state = "laser"
|
||||
fire_sound = 'sound/weapons/marauder.ogg'
|
||||
item_state = "laser" // placeholder
|
||||
fire_sound = 'sound/weapons/gauss_shoot.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
|
||||
projectile_type = /obj/item/projectile/beam/sniper
|
||||
slot_flags = SLOT_BACK
|
||||
@@ -89,9 +110,11 @@ obj/item/weapon/gun/energy/retro
|
||||
max_shots = 4
|
||||
fire_delay = 35
|
||||
force = 10
|
||||
w_class = 4
|
||||
w_class = 5 // So it can't fit in a backpack.
|
||||
accuracy = -3 //shooting at the hip
|
||||
scoped_accuracy = 0
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 4 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
|
||||
|
||||
/obj/item/weapon/gun/energy/sniperrifle/verb/scope()
|
||||
set category = "Object"
|
||||
|
||||
@@ -5,13 +5,14 @@
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
max_shots = 10
|
||||
fire_delay = 10 // Handguns should be inferior to two-handed weapons.
|
||||
|
||||
projectile_type = /obj/item/projectile/beam/stun
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
|
||||
modifystate = "energystun"
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="energystun", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="energykill", fire_sound='sound/weapons/Laser.ogg'),
|
||||
)
|
||||
|
||||
@@ -22,22 +23,25 @@
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/burst
|
||||
name = "fm-2t"
|
||||
name = "burst laser"
|
||||
desc = "The FM-2t is a versatile energy based small arm, capable of switching between stun or kill with a three round burst option for both settings."
|
||||
icon_state = "fm-2tstun100"
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
max_shots = 12
|
||||
max_shots = 21 //7 trigger pulls
|
||||
|
||||
projectile_type = /obj/item/projectile/beam/stun/weak
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2, TECH_ILLEGAL = 3)
|
||||
modifystate = "fm-2tstun"
|
||||
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 2
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="stun 3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), projectile_type=/obj/item/projectile/beam/stun, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam/weaklaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'),
|
||||
list(mode_name="lethal 3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), projectile_type=/obj/item/projectile/beam, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'),
|
||||
list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="fm-2tstun", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/weaklaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'),
|
||||
list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), projectile_type=/obj/item/projectile/beam/weaklaser, modifystate="fm-2tkill", fire_sound='sound/weapons/Laser.ogg'),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/nuclear
|
||||
@@ -50,6 +54,9 @@
|
||||
self_recharge = 1
|
||||
modifystate = null
|
||||
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 1 // It's rather bulky, so holding it in one hand is a little harder than with two, however it's not 'required'.
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg'),
|
||||
|
||||
@@ -7,25 +7,26 @@
|
||||
force = 10
|
||||
fire_sound='sound/weapons/Laser.ogg'
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
charge_cost=100
|
||||
max_shots = 20 // This is cut in half by "DESTROY" mode.
|
||||
sel_mode = 2
|
||||
max_shots = 10
|
||||
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost=null),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost=null),
|
||||
list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=25, charge_cost=400),
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', fire_delay=null, charge_cost=100),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', fire_delay=null, charge_cost=100),
|
||||
list(mode_name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/gauss_shoot.ogg', fire_delay=null, charge_cost=200),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/pulse_rifle/mounted
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
use_external_power = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/pulse_rifle/destroyer
|
||||
name = "pulse destroyer"
|
||||
desc = "A heavy-duty, pulse-based energy weapon. Because of its complexity and cost, it is rarely seen in use except by specialists."
|
||||
cell_type = /obj/item/weapon/cell/super
|
||||
fire_delay = 25
|
||||
fire_sound='sound/weapons/pulse.ogg'
|
||||
fire_sound='sound/weapons/gauss_shoot.ogg'
|
||||
projectile_type=/obj/item/projectile/beam/pulse
|
||||
charge_cost=400
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/obj/item/weapon/gun/energy/ionrifle/update_icon()
|
||||
..()
|
||||
if(power_supply.charge < charge_cost)
|
||||
item_state = "ionrifle-empty"
|
||||
item_state = "ionrifle0"
|
||||
else
|
||||
item_state = initial(item_state)
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/obj/item/weapon/gun/energy/taser
|
||||
name = "taser gun"
|
||||
desc = "The NT Mk30 NL is a small, low capacity gun used for non-lethal takedowns. Produced by NT, it's actually a licensed version of a W-T design."
|
||||
desc = "The NT Mk30 NL is a small gun used for non-lethal takedowns. Produced by NT, it's actually a licensed version of a W-T design."
|
||||
icon_state = "taser"
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
max_shots = 5
|
||||
max_shots = 10
|
||||
projectile_type = /obj/item/projectile/beam/stun
|
||||
|
||||
/obj/item/weapon/gun/energy/taser/mounted
|
||||
@@ -15,7 +15,7 @@
|
||||
/obj/item/weapon/gun/energy/taser/mounted/cyborg
|
||||
name = "taser gun"
|
||||
max_shots = 6
|
||||
recharge_time = 10 //Time it takes for shots to recharge (in ticks)
|
||||
recharge_time = 7 //Time it takes for shots to recharge (in ticks)
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/stunrevolver
|
||||
@@ -25,7 +25,7 @@
|
||||
item_state = "stunrevolver"
|
||||
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
|
||||
projectile_type = /obj/item/projectile/energy/electrode
|
||||
projectile_type = /obj/item/projectile/energy/electrode/strong
|
||||
max_shots = 8
|
||||
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
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>")
|
||||
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
|
||||
else
|
||||
user << "<span class='warning'>[src] is empty.</span>"
|
||||
|
||||
@@ -117,6 +118,7 @@
|
||||
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>")
|
||||
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
|
||||
chambered = null
|
||||
else
|
||||
user << "<span class='warning'>[src] is empty.</span>"
|
||||
@@ -54,6 +54,7 @@
|
||||
item_storage.remove_from_storage(removing, src.loc)
|
||||
user.put_in_hands(removing)
|
||||
user << "You remove [removing] from the hopper."
|
||||
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
|
||||
else
|
||||
user << "There is nothing to remove in \the [src]."
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
flags = CONDUCT
|
||||
slot_flags = 0
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 5)
|
||||
fire_sound = 'sound/effects/bang.ogg'
|
||||
|
||||
fire_sound = 'sound/weapons/rpg.ogg'
|
||||
|
||||
release_force = 15
|
||||
throw_distance = 30
|
||||
var/max_rockets = 1
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
/obj/item/weapon/syringe_cartridge/attack_self(mob/user)
|
||||
if(syringe)
|
||||
user << "<span class='notice'>You remove [syringe] from [src].</span>"
|
||||
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
|
||||
user.put_in_hands(syringe)
|
||||
syringe = null
|
||||
sharp = initial(sharp)
|
||||
@@ -114,6 +115,7 @@
|
||||
darts -= C
|
||||
user.put_in_hands(C)
|
||||
user.visible_message("[user] removes \a [C] from [src].", "<span class='notice'>You remove \a [C] from [src].</span>")
|
||||
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
//For MAGAZINE guns
|
||||
var/magazine_type = null //the type of magazine that the gun comes preloaded with
|
||||
var/obj/item/ammo_magazine/ammo_magazine = null //stored magazine
|
||||
var/allowed_magazines //determines list of which magazines will fit in the gun
|
||||
var/auto_eject = 0 //if the magazine should automatically eject itself when empty.
|
||||
var/auto_eject_sound = null
|
||||
//TODO generalize ammo icon states for guns
|
||||
@@ -96,9 +97,9 @@
|
||||
/obj/item/weapon/gun/projectile/proc/load_ammo(var/obj/item/A, mob/user)
|
||||
if(istype(A, /obj/item/ammo_magazine))
|
||||
var/obj/item/ammo_magazine/AM = A
|
||||
if(!(load_method & AM.mag_type) || caliber != AM.caliber)
|
||||
return //incompatible
|
||||
|
||||
if(!(load_method & AM.mag_type) || caliber != AM.caliber || allowed_magazines && !is_type_in_list(A, allowed_magazines))
|
||||
user << "<span class='warning'>[AM] won't load into [src]!</span>"
|
||||
return
|
||||
switch(AM.mag_type)
|
||||
if(MAGAZINE)
|
||||
if(ammo_magazine)
|
||||
@@ -167,6 +168,7 @@
|
||||
loaded.len--
|
||||
user.put_in_hands(C)
|
||||
user.visible_message("[user] removes \a [C] from [src].", "<span class='notice'>You remove \a [C] from [src].</span>")
|
||||
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
|
||||
else
|
||||
user << "<span class='warning'>[src] is empty.</span>"
|
||||
update_icon()
|
||||
|
||||
@@ -11,23 +11,16 @@
|
||||
ammo_type = /obj/item/ammo_casing/c9mm
|
||||
multi_aim = 1
|
||||
burst_delay = 2
|
||||
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 1
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
|
||||
// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1,-2,-2), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/mini_uzi
|
||||
name = "\improper Uzi"
|
||||
desc = "The UZI is a lightweight, fast firing gun. For when you want someone dead. Uses .45 rounds."
|
||||
icon_state = "mini-uzi"
|
||||
w_class = 3
|
||||
load_method = SPEEDLOADER //yup. until someone sprites a magazine for it.
|
||||
max_shells = 15
|
||||
caliber = ".45"
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
|
||||
ammo_type = /obj/item/ammo_casing/c45
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r
|
||||
name = "submachine gun"
|
||||
desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. Uses 10mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
|
||||
@@ -41,9 +34,13 @@
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/a10mm
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a10mm)
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 2
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r/update_icon()
|
||||
..()
|
||||
if(ammo_magazine)
|
||||
@@ -64,21 +61,27 @@
|
||||
slot_flags = SLOT_BACK
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/c762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/c762, /obj/item/ammo_magazine/s762)
|
||||
|
||||
one_handed_penalty = 4
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6)),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6))
|
||||
// list(mode_name="short bursts", burst=5, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2,-2,-3), dispersion=list(0.6, 1.0, 1.0, 1.0, 1.2)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/sts35/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
icon_state = (ammo_magazine)? "arifle" : "arifle-empty"
|
||||
if(istype(ammo_magazine,/obj/item/ammo_magazine/s762))
|
||||
icon_state = "arifle-small"
|
||||
else
|
||||
icon_state = (ammo_magazine)? "arifle" : "arifle-empty"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/wt550
|
||||
name = "machine pistol"
|
||||
desc = "The W-T 550 Saber is a cheap self-defense weapon, mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds."
|
||||
desc = "The WT550 Saber is a cheap self-defense weapon mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds."
|
||||
icon_state = "wt550"
|
||||
item_state = "wt550"
|
||||
w_class = 3
|
||||
@@ -89,6 +92,7 @@
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/mc9mmt/rubber
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/mc9mmt)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/wt550/update_icon()
|
||||
..()
|
||||
@@ -99,22 +103,25 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/z8
|
||||
name = "bullpup assault rifle"
|
||||
desc = "The Z8 Bulldog is an older model bullpup carbine, made by the now defunct Zendai Foundries. Uses armor piercing 5.56mm rounds. Makes you feel like a space marine when you hold it."
|
||||
icon_state = "carbine"
|
||||
name = "designated marksman rifle"
|
||||
desc = "The Z8 Bulldog is an older model designated marksman rifle, made by the now defunct Zendai Foundries. Makes you feel like a space marine when you hold it, even though it can only hold 10 round magazines. Uses 5.56mm rounds and has an under barrel grenade launcher."
|
||||
icon_state = "carbine" // This isn't a carbine. :T
|
||||
item_state = "z8carbine"
|
||||
w_class = 4
|
||||
force = 10
|
||||
caliber = "a556"
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3)
|
||||
ammo_type = "/obj/item/ammo_casing/a556"
|
||||
ammo_type = "/obj/item/ammo_casing/a556" // Is this really needed anymore?
|
||||
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
slot_flags = SLOT_BACK
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/a556
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a556)
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
|
||||
one_handed_penalty = 4
|
||||
|
||||
burst_delay = 4
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, use_launcher=null, burst_accuracy=null, dispersion=null),
|
||||
@@ -149,12 +156,13 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/z8/update_icon()
|
||||
/obj/item/weapon/gun/projectile/automatic/z8/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
if(ammo_magazine)
|
||||
icon_state = "carbine-[round(ammo_magazine.stored_ammo.len,2)]"
|
||||
else
|
||||
icon_state = "carbine"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/z8/examine(mob/user)
|
||||
@@ -168,7 +176,7 @@
|
||||
name = "light machine gun"
|
||||
desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armoury- 2531' engraved on the reciever"
|
||||
icon_state = "l6closed100"
|
||||
item_state = "l6closedmag"
|
||||
item_state = "l6closed"
|
||||
w_class = 4
|
||||
force = 10
|
||||
slot_flags = 0
|
||||
@@ -176,15 +184,18 @@
|
||||
caliber = "a762"
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2)
|
||||
slot_flags = SLOT_BACK
|
||||
ammo_type = "/obj/item/ammo_casing/a762"
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
ammo_type = "/obj/item/ammo_casing/a762" // Is this really needed anymore?
|
||||
fire_sound = 'sound/weapons/machinegun.ogg'
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/a762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a762, /obj/item/ammo_magazine/c762)
|
||||
|
||||
one_handed_penalty = 6
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
|
||||
list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
|
||||
list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2))
|
||||
)
|
||||
|
||||
var/cover_open = 0
|
||||
@@ -199,6 +210,7 @@
|
||||
cover_open = !cover_open
|
||||
user << "<span class='notice'>You [cover_open ? "open" : "close"] [src]'s cover.</span>"
|
||||
update_icon()
|
||||
update_held_icon()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user as mob)
|
||||
if(cover_open)
|
||||
@@ -213,7 +225,13 @@
|
||||
return ..() //once open, behave like normal
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon()
|
||||
icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 25) : "-empty"]"
|
||||
if(istype(ammo_magazine,/obj/item/ammo_magazine/c762))
|
||||
icon_state = "l6[cover_open ? "open" : "closed"]mag"
|
||||
item_state = icon_state
|
||||
else
|
||||
icon_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? round(ammo_magazine.stored_ammo.len, 25) : "-empty"]"
|
||||
item_state = "l6[cover_open ? "open" : "closed"][ammo_magazine ? "" : "-empty"]"
|
||||
update_held_icon()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/l6_saw/load_ammo(var/obj/item/A, mob/user)
|
||||
if(!cover_open)
|
||||
@@ -228,21 +246,25 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/as24
|
||||
name = "\improper AS-24 automatic shotgun"
|
||||
desc = "A durable, rugged looking automatic weapon of a make popular on the frontier worlds. Uses 12 gauge shells. It is unmarked."
|
||||
name = "automatic shotgun"
|
||||
desc = "The AS-24 is a durable, rugged looking automatic weapon of a make popular on the frontier worlds. Uses 12 gauge shells. It is unmarked."
|
||||
icon_state = "ashot"
|
||||
item_state = null
|
||||
w_class = 4
|
||||
force = 10
|
||||
caliber = "shotgun"
|
||||
fire_sound = 'sound/weapons/shotgun.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
|
||||
slot_flags = SLOT_BACK
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/g12
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/g12)
|
||||
|
||||
one_handed_penalty = 4
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0),
|
||||
list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 0.6)),
|
||||
list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 0.6))
|
||||
// list(mode_name="6-round bursts", burst=6, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2, 1.2)),
|
||||
)
|
||||
|
||||
@@ -254,5 +276,99 @@
|
||||
icon_state = "ashot"
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/mini_uzi
|
||||
name = "\improper Uzi"
|
||||
desc = "A lightweight, compact, fast firing gun, for when you want someone really dead. Uses .45 rounds."
|
||||
icon_state = "mini-uzi"
|
||||
w_class = 3
|
||||
load_method = MAGAZINE
|
||||
caliber = ".45"
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
|
||||
magazine_type = /obj/item/ammo_magazine/c45uzi
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/c45uzi)
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0),
|
||||
list(mode_name="3-round bursts", burst=3, burst_delay=1, fire_delay=4, move_delay=4, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/mini_uzi/update_icon()
|
||||
..()
|
||||
if(ammo_magazine)
|
||||
icon_state = "mini-uzi"
|
||||
else
|
||||
icon_state = "mini-uzi-empty"
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/p90
|
||||
name = "personal defense weapon"
|
||||
desc = "The H90K is a compact, high capacity submachine gun produced by Hephaistos Industries. Despite its fierce reputation, it still manages to feel like a toy. Uses 9mm rounds."
|
||||
icon_state = "p90smg"
|
||||
item_state = "p90"
|
||||
w_class = 3
|
||||
caliber = "9mm"
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
|
||||
slot_flags = SLOT_BELT // ToDo: Belt sprite.
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/p90
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/p90, /obj/item/ammo_magazine/mc9mmt) // ToDo: New sprite for the different mag.
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/p90/update_icon()
|
||||
icon_state = "p90smg-[ammo_magazine ? round(ammo_magazine.stored_ammo.len, 6) : "empty"]"
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/tommygun
|
||||
name = "\improper Tommygun"
|
||||
desc = "This weapon was made famous by gangsters in the 20th century. Cybersun Industries is currently reproducing these for a target market of historic gun collectors and classy criminals. Uses .45 rounds."
|
||||
icon_state = "tommygun"
|
||||
w_class = 3
|
||||
caliber = ".45"
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
|
||||
slot_flags = SLOT_BELT // ToDo: Belt sprite.
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/tommymag
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/tommymag, /obj/item/ammo_magazine/tommydrum)
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/tommygun/update_icon()
|
||||
..()
|
||||
icon_state = (ammo_magazine)? "tommygun" : "tommygun-empty"
|
||||
// update_held_icon()
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine
|
||||
name = "assault carbine"
|
||||
desc = "The bullpup configured GP3000 is a lightweight, compact, military-grade assault rifle produced by Gurov Projectile Weapons LLC. It is sold almost exclusively to standing armies. The serial number on this one has been scratched off. Uses 5.56mm rounds."
|
||||
icon_state = "bullpupm"
|
||||
item_state = "bullpup"
|
||||
w_class = 4
|
||||
force = 10
|
||||
caliber = "a556"
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
|
||||
slot_flags = SLOT_BACK
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/a556m
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a556, /obj/item/ammo_magazine/a556m)
|
||||
|
||||
one_handed_penalty = 4
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-1,-2), dispersion=list(0.0, 0.6, 0.6))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
if(istype(ammo_magazine,/obj/item/ammo_magazine/a556m))
|
||||
icon_state = "bullpupm"
|
||||
else
|
||||
icon_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
|
||||
item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
// For all intents and purposes, these work exactly the same as pump shotguns. It's unnecessary to make their own procs for them.
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle
|
||||
name = "bolt action rifle"
|
||||
desc = "A reproduction of an almost ancient weapon design from the early 20th century. It's still popular among hunters and collectors due to its reliability. Uses 7.62mm rounds."
|
||||
item_state = "boltaction"
|
||||
icon_state = "boltaction"
|
||||
fire_sound = 'sound/weapons/rifleshot.ogg'
|
||||
max_shells = 5
|
||||
caliber = "a762"
|
||||
origin_tech = list(TECH_COMBAT = 1)// Old as shit rifle doesn't have very good tech.
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
load_method = SINGLE_CASING|SPEEDLOADER
|
||||
action_sound = 'sound/weapons/riflebolt.ogg'
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice // For target practice
|
||||
desc = "A bolt-action rifle with a lightweight synthetic wood stock, designed for competitive shooting. Comes shipped with practice rounds pre-loaded into the gun. Popular among professional marksmen. Uses 7.62mm rounds."
|
||||
ammo_type = /obj/item/ammo_casing/a762p
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial
|
||||
name = "ceremonial bolt-action rifle"
|
||||
desc = "A bolt-action rifle with a heavy, high-quality wood stock that has a beautiful finish. Clearly not intended to be used in combat. Uses 7.62mm rounds."
|
||||
ammo_type = /obj/item/ammo_casing/a762/blank
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin
|
||||
name = "\improper Mosin Nagant"
|
||||
desc = "Despite its age, the Mosin Nagant continues to be a favorite weapon among colonists, conscripts, and militias across the cosmos. Most today are built by Chen-Iltchenko Firearms, but it's hard to say who built this particular gun, considering the design has been ripped off by just about every arms manufacturer in the galaxy. Uses 7.62mm rounds."
|
||||
icon_state = "mosin"
|
||||
item_state = "mosin"
|
||||
|
||||
// Stole hacky terrible code from doublebarrel shotgun. -Spades
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/mosin/attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter) && w_class != 3)
|
||||
user << "<span class='notice'>You begin to shorten the barrel and stock of \the [src].</span>"
|
||||
if(loaded.len)
|
||||
afterattack(user, user) //will this work? //it will. we call it twice, for twice the FUN
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>", "<span class='danger'>The rifle goes off in your face!</span>")
|
||||
return
|
||||
if(do_after(user, 30))
|
||||
icon_state = "obrez"
|
||||
w_class = 3
|
||||
recoil = 2 // Owch
|
||||
accuracy = -1 // You know damn well why.
|
||||
item_state = "gun"
|
||||
slot_flags &= ~SLOT_BACK //you can't sling it on your back
|
||||
slot_flags |= (SLOT_BELT|SLOT_HOLSTER) //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not.
|
||||
name = "\improper Obrez"
|
||||
desc = "The firepower of a Mosin, now the size of a pistol, with an effective combat range of about three feet. Uses 7.62mm rounds."
|
||||
user << "<span class='warning'>You shorten the barrel and stock of \the [src]!</span>"
|
||||
else
|
||||
..()
|
||||
@@ -54,6 +54,7 @@
|
||||
silenced = 1
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/chemdart
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/chemdart)
|
||||
auto_eject = 0
|
||||
|
||||
var/list/beakers = list() //All containers inside the gun.
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
/obj/item/weapon/gun/projectile/colt
|
||||
var/unique_reskin
|
||||
name = "vintage .45 pistol"
|
||||
name = ".45 pistol"
|
||||
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
|
||||
magazine_type = /obj/item/ammo_magazine/c45m
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/c45m)
|
||||
icon_state = "colt"
|
||||
caliber = ".45"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
fire_sound = 'sound/weapons/semiauto.ogg'
|
||||
load_method = MAGAZINE
|
||||
|
||||
/obj/item/weapon/gun/projectile/colt/detective
|
||||
@@ -54,6 +55,7 @@
|
||||
options["NT Mk. 58"] = "secguncomp"
|
||||
options["NT Mk. 58 Custom"] = "secgundark"
|
||||
options["Colt M1911"] = "colt"
|
||||
options["FiveSeven"] = "fnseven"
|
||||
options["USP"] = "usp"
|
||||
options["H&K VP"] = "VP78"
|
||||
options["P08 Luger"] = "p08"
|
||||
@@ -72,7 +74,7 @@
|
||||
magazine_type = /obj/item/ammo_magazine/c45m/rubber
|
||||
caliber = ".45"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
fire_sound = 'sound/weapons/semiauto.ogg'
|
||||
load_method = MAGAZINE
|
||||
|
||||
/obj/item/weapon/gun/projectile/sec/update_icon()
|
||||
@@ -108,42 +110,69 @@
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/c45m
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/c45m)
|
||||
|
||||
/obj/item/weapon/gun/projectile/deagle
|
||||
name = "desert eagle"
|
||||
desc = "A robust handgun that uses .50 AE ammo"
|
||||
desc = "A robust handgun that uses .50 AE rounds."
|
||||
icon_state = "deagle"
|
||||
item_state = "deagle"
|
||||
force = 14.0
|
||||
caliber = ".50"
|
||||
load_method = MAGAZINE
|
||||
fire_sound = 'sound/weapons/deagle.ogg'
|
||||
magazine_type = /obj/item/ammo_magazine/a50
|
||||
auto_eject = 1
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a50)
|
||||
|
||||
/obj/item/weapon/gun/projectile/deagle/update_icon()
|
||||
..()
|
||||
if(ammo_magazine)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-e"
|
||||
|
||||
/obj/item/weapon/gun/projectile/deagle/gold
|
||||
desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .50 AE ammo."
|
||||
desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .50 AE rounds."
|
||||
icon_state = "deagleg"
|
||||
item_state = "deagleg"
|
||||
|
||||
/obj/item/weapon/gun/projectile/deagle/camo
|
||||
desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE ammo."
|
||||
desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE rounds."
|
||||
icon_state = "deaglecamo"
|
||||
item_state = "deagleg"
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
|
||||
/*
|
||||
/obj/item/weapon/gun/projectile/fiveseven
|
||||
name = "\improper WT-AP57"
|
||||
desc = "This tacticool pistol made by Ward-Takahashi trades stopping power for armor piercing and a high capacity. Uses 5mm rounds."
|
||||
icon_state = "fnseven"
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
|
||||
caliber = "5mm"
|
||||
load_method = MAGAZINE
|
||||
fire_sound = 'sound/weapons/semiauto.ogg'
|
||||
magazine_type = /obj/item/ammo_magazine/c5mm
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/c5mm)
|
||||
|
||||
/obj/item/weapon/gun/projectile/fiveseven/update_icon()
|
||||
..()
|
||||
if(ammo_magazine)
|
||||
icon_state = "fnseven"
|
||||
else
|
||||
icon_state = "fnseven-empty"
|
||||
*/
|
||||
|
||||
/obj/item/weapon/gun/projectile/gyropistol
|
||||
/obj/item/weapon/gun/projectile/gyropistol // Does this even appear anywhere outside of admin abuse?
|
||||
name = "gyrojet pistol"
|
||||
desc = "A bulky pistol designed to fire self propelled rounds"
|
||||
desc = "Speak softly, and carry a big gun. Fires rare .75 caliber self-propelled exploding bolts--because fuck you and everything around you."
|
||||
icon_state = "gyropistol"
|
||||
max_shells = 8
|
||||
caliber = "75"
|
||||
fire_sound = 'sound/effects/Explosion1.ogg'
|
||||
fire_sound = 'sound/weapons/rpg.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 3)
|
||||
ammo_type = "/obj/item/ammo_casing/a75"
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/a75
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/a75)
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
|
||||
@@ -163,18 +192,19 @@
|
||||
caliber = "9mm"
|
||||
silenced = 0
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2)
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
fire_sound = 'sound/weapons/semiauto.ogg'
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/mc9mm
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/mc9mm)
|
||||
|
||||
/obj/item/weapon/gun/projectile/pistol/flash
|
||||
name = "holdout signal pistol"
|
||||
magazine_type = /obj/item/ammo_magazine/mc9mm/flash
|
||||
|
||||
/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/user as mob)
|
||||
/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/living/user as mob)
|
||||
if(user.get_inactive_hand() == src)
|
||||
if(silenced)
|
||||
if(user.l_hand != src && user.r_hand != src)
|
||||
if(!user.item_is_in_hands(src))
|
||||
..()
|
||||
return
|
||||
user << "<span class='notice'>You unscrew [silenced] from [src].</span>"
|
||||
@@ -185,9 +215,9 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/user as mob)
|
||||
/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/living/user as mob)
|
||||
if(istype(I, /obj/item/weapon/silencer))
|
||||
if(user.l_hand != src && user.r_hand != src) //if we're not in his hands
|
||||
if(!user.item_is_in_hands(src)) //if we're not in his hands
|
||||
user << "<span class='notice'>You'll need [src] in your hands to do that.</span>"
|
||||
return
|
||||
user.drop_item()
|
||||
@@ -246,3 +276,36 @@
|
||||
var/obj/item/ammo_casing/ammo = ammo_type
|
||||
caliber = initial(ammo.caliber)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/projectile/derringer
|
||||
name = "derringer"
|
||||
desc = "It's not size of your gun that matters, just the size of your load. Uses .357 rounds." //OHHH MYYY~
|
||||
icon_state = "derringer"
|
||||
item_state = "concealed"
|
||||
w_class = 2
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 3)
|
||||
handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading
|
||||
load_method = SINGLE_CASING
|
||||
max_shells = 2
|
||||
ammo_type = /obj/item/ammo_casing/a357
|
||||
|
||||
/obj/item/weapon/gun/projectile/luger
|
||||
name = "\improper P08 Luger"
|
||||
desc = "Not some cheap Scheisse .45 caliber Martian knockoff! This Luger is an authentic reproduction by RauMauser. Accuracy, easy handling, and its signature appearance make it popular among historic gun collectors. Uses 9mm rounds."
|
||||
icon_state = "p08"
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
|
||||
caliber = "9mm"
|
||||
load_method = MAGAZINE
|
||||
fire_sound = 'sound/weapons/semiauto.ogg'
|
||||
magazine_type = /obj/item/ammo_magazine/mc9mm
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/mc9mm)
|
||||
|
||||
/obj/item/weapon/gun/projectile/luger/update_icon()
|
||||
..()
|
||||
if(ammo_magazine)
|
||||
icon_state = "[initial(icon_state)]"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-e"
|
||||
|
||||
/obj/item/weapon/gun/projectile/luger/brown
|
||||
icon_state = "p08b"
|
||||
@@ -1,12 +1,12 @@
|
||||
/obj/item/weapon/gun/projectile/revolver
|
||||
name = "revolver"
|
||||
desc = "The Lumoco Arms HE Colt is a choice revolver for when you absolutely, positively need to put a hole in the other guy. Uses .357 ammo."
|
||||
desc = "The Lumoco Arms HE Colt is a choice revolver for when you absolutely, positively need to put a hole in the other guy. Uses .357 rounds."
|
||||
icon_state = "revolver"
|
||||
item_state = "revolver"
|
||||
caliber = "357"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
handle_casings = CYCLE_CASINGS
|
||||
max_shells = 7
|
||||
max_shells = 6
|
||||
ammo_type = /obj/item/ammo_casing/a357
|
||||
var/chamber_offset = 0 //how many empty chambers in the cylinder until you hit a round
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/mateba
|
||||
name = "mateba"
|
||||
desc = "This unique looking handgun is named after an Italian company famous for the manufacture of these revolvers, and pasta kneading machines. Uses .357 rounds." // Yes I'm serious. -Spades
|
||||
icon_state = "mateba"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
|
||||
@@ -42,7 +43,6 @@
|
||||
name = "revolver"
|
||||
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
|
||||
icon_state = "detective"
|
||||
max_shells = 6
|
||||
caliber = "38"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
@@ -68,10 +68,9 @@
|
||||
|
||||
// Blade Runner pistol.
|
||||
/obj/item/weapon/gun/projectile/revolver/deckard
|
||||
name = "Deckard .44"
|
||||
name = "Deckard .38"
|
||||
desc = "A custom-built revolver, based off the semi-popular Detective Special model."
|
||||
icon_state = "deckard-empty"
|
||||
max_shells = 6
|
||||
caliber = "38"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
@@ -100,3 +99,15 @@
|
||||
max_shells = 7
|
||||
ammo_type = /obj/item/ammo_casing/cap
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/judge
|
||||
name = "\"The Judge\""
|
||||
desc = "A revolving hand-shotgun by Cybersun Industries that packs the power of a 12 guage in the palm of your hand (if you don't break your wrist). Uses 12 shotgun rounds."
|
||||
icon_state = "judge"
|
||||
caliber = "shotgun"
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 4)
|
||||
max_shells = 5
|
||||
fire_sound = 'sound/weapons/shotgun.ogg'
|
||||
recoil = 2 // ow my fucking hand
|
||||
accuracy = -1 // smooth bore + short barrel = shit accuracy
|
||||
ammo_type = /obj/item/ammo_casing/shotgun
|
||||
// ToDo: Remove accuracy debuf in exchange for slightly injuring your hand every time you fire it.
|
||||
@@ -13,7 +13,9 @@
|
||||
load_method = SINGLE_CASING
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
|
||||
handle_casings = HOLD_CASINGS
|
||||
fire_sound = 'sound/weapons/shotgun.ogg'
|
||||
var/recentpump = 0 // to prevent spammage
|
||||
var/action_sound = 'sound/weapons/shotgunpump.ogg'
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/consume_next_projectile()
|
||||
if(chambered)
|
||||
@@ -26,7 +28,7 @@
|
||||
recentpump = world.time
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/proc/pump(mob/M as mob)
|
||||
playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1)
|
||||
playsound(M, action_sound, 60, 1)
|
||||
|
||||
if(chambered)//We have a shell in the chamber
|
||||
chambered.loc = get_turf(src)//Eject casing
|
||||
@@ -65,7 +67,7 @@
|
||||
caliber = "shotgun"
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
|
||||
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
|
||||
|
||||
|
||||
burst_delay = 0
|
||||
firemodes = list(
|
||||
list(mode_name="fire one barrel at a time", burst=1),
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
////////////// PTR-7 Anti-Materiel Rifle //////////////
|
||||
|
||||
/obj/item/weapon/gun/projectile/heavysniper
|
||||
name = "anti-materiel rifle"
|
||||
desc = "A portable anti-armour rifle fitted with a scope, the HI PTR-7 Rifle was originally designed to used against armoured exosuits. It is capable of punching through windows and non-reinforced walls with ease. Fires armor piercing 14.5mm shells."
|
||||
icon_state = "heavysniper"
|
||||
item_state = "l6closednomag" //placeholder
|
||||
w_class = 4
|
||||
item_state = "l6closed-empty" // placeholder
|
||||
w_class = 5 // So it can't fit in a backpack.
|
||||
force = 10
|
||||
slot_flags = SLOT_BACK
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
|
||||
caliber = "14.5mm"
|
||||
recoil = 2 //extra kickback
|
||||
//fire_sound = 'sound/weapons/sniper.ogg'
|
||||
recoil = 3 //extra kickback
|
||||
fire_sound = 'sound/weapons/sniper.ogg' // extra boom
|
||||
handle_casings = HOLD_CASINGS
|
||||
load_method = SINGLE_CASING
|
||||
max_shells = 1
|
||||
@@ -65,3 +67,41 @@
|
||||
|
||||
toggle_scope(2.0)
|
||||
|
||||
////////////// Dragunov Sniper Rifle //////////////
|
||||
|
||||
/* // Commented out until it's not worthless. Also might be nice to have a new icon that looks more sci-fi Dragunov-ish.
|
||||
/obj/item/weapon/gun/projectile/SVD
|
||||
name = "\improper Dragunov"
|
||||
desc = "The SVD, also known as the Dragunov, was mass produced with an Optical Sniper Sight so simple that even Ivan can figure out how it works. Too bad for you that it's written in Russian. Uses 7.62mm rounds."
|
||||
icon_state = "SVD"
|
||||
item_state = "SVD"
|
||||
w_class = 5 // So it can't fit in a backpack.
|
||||
force = 10
|
||||
slot_flags = SLOT_BACK // Needs a sprite.
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
|
||||
recoil = 2 //extra kickback
|
||||
caliber = "a762"
|
||||
load_method = MAGAZINE
|
||||
accuracy = -3 //shooting at the hip
|
||||
scoped_accuracy = 0
|
||||
// requires_two_hands = 1
|
||||
one_handed_penalty = 4 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
|
||||
fire_sound = 'sound/weapons/SVD_shot.ogg'
|
||||
magazine_type = /obj/item/ammo_magazine/SVD
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/SVD, /obj/item/ammo_magazine/c762)
|
||||
|
||||
/obj/item/weapon/gun/projectile/SVD/update_icon()
|
||||
..()
|
||||
// if(istype(ammo_magazine,/obj/item/ammo_magazine/c762)
|
||||
// icon_state = "SVD-bigmag" //No icon for this exists yet.
|
||||
if(ammo_magazine)
|
||||
icon_state = "SVD"
|
||||
else
|
||||
icon_state = "SVD-empty"
|
||||
|
||||
/obj/item/weapon/gun/projectile/SVD/verb/scope()
|
||||
set category = "Object"
|
||||
set name = "Use Scope"
|
||||
set popup_menu = 1
|
||||
|
||||
toggle_scope(2.0)*/
|
||||
@@ -23,6 +23,11 @@
|
||||
check_armour = "laser"
|
||||
eyeblur = 2
|
||||
|
||||
/obj/item/projectile/beam/weaklaser
|
||||
name = "weak laser"
|
||||
icon_state = "laser"
|
||||
damage = 15
|
||||
|
||||
/obj/item/projectile/beam/midlaser
|
||||
damage = 40
|
||||
armor_penetration = 10
|
||||
@@ -37,15 +42,6 @@
|
||||
tracer_type = /obj/effect/projectile/laser_heavy/tracer
|
||||
impact_type = /obj/effect/projectile/laser_heavy/impact
|
||||
|
||||
/obj/item/projectile/beam/weaklaser
|
||||
name = "weak laser"
|
||||
icon_state = "laser"
|
||||
damage = 15
|
||||
|
||||
muzzle_type = /obj/effect/projectile/laser_heavy/muzzle
|
||||
tracer_type = /obj/effect/projectile/laser_heavy/tracer
|
||||
impact_type = /obj/effect/projectile/laser_heavy/impact
|
||||
|
||||
/obj/item/projectile/beam/xray
|
||||
name = "xray beam"
|
||||
icon_state = "xray"
|
||||
@@ -140,9 +136,6 @@
|
||||
icon_state = "xray"
|
||||
damage = 50
|
||||
armor_penetration = 10
|
||||
stun = 3
|
||||
weaken = 3
|
||||
stutter = 3
|
||||
|
||||
muzzle_type = /obj/effect/projectile/xray/muzzle
|
||||
tracer_type = /obj/effect/projectile/xray/tracer
|
||||
@@ -163,11 +156,4 @@
|
||||
/obj/item/projectile/beam/stun/weak
|
||||
name = "weak stun beam"
|
||||
icon_state = "stun"
|
||||
nodamage = 1
|
||||
taser_effect = 1
|
||||
agony = 25
|
||||
damage_type = HALLOSS
|
||||
|
||||
muzzle_type = /obj/effect/projectile/stun/muzzle
|
||||
tracer_type = /obj/effect/projectile/stun/tracer
|
||||
impact_type = /obj/effect/projectile/stun/impact
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
damage *= 0.7 //squishy mobs absorb KE
|
||||
return 1
|
||||
|
||||
var/chance = 0
|
||||
var/chance = damage
|
||||
if(istype(A, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = A
|
||||
chance = round(damage/W.material.integrity*180)
|
||||
@@ -52,8 +52,6 @@
|
||||
if(D.glass) chance *= 2
|
||||
else if(istype(A, /obj/structure/girder))
|
||||
chance = 100
|
||||
else if(istype(A, /obj/machinery) || istype(A, /obj/structure))
|
||||
chance = damage
|
||||
|
||||
if(prob(chance))
|
||||
if(A.opacity)
|
||||
@@ -128,6 +126,10 @@
|
||||
/obj/item/projectile/bullet/pistol
|
||||
damage = 20
|
||||
|
||||
/obj/item/projectile/bullet/pistol/ap
|
||||
damage = 20
|
||||
armor_penetration = 30
|
||||
|
||||
/obj/item/projectile/bullet/pistol/medium
|
||||
damage = 25
|
||||
|
||||
@@ -169,15 +171,23 @@
|
||||
/* "Rifle" rounds */
|
||||
|
||||
/obj/item/projectile/bullet/rifle
|
||||
armor_penetration = 20
|
||||
armor_penetration = 15
|
||||
penetrating = 1
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762
|
||||
damage = 25
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a762/ap
|
||||
damage = 20
|
||||
armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds.
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a556
|
||||
damage = 35
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a556/ap
|
||||
damage = 30
|
||||
armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds.
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a145
|
||||
damage = 80
|
||||
stun = 3
|
||||
@@ -219,8 +229,9 @@
|
||||
/obj/item/projectile/bullet/pistol/practice
|
||||
damage = 5
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a556/practice
|
||||
/obj/item/projectile/bullet/rifle/practice
|
||||
damage = 5
|
||||
penetrating = 0
|
||||
|
||||
/obj/item/projectile/bullet/shotgun/practice
|
||||
name = "practice"
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
H.set_species(randomize)
|
||||
H.universal_speak = 1
|
||||
var/datum/preferences/A = new() //Randomize appearance for the human
|
||||
A.randomize_appearance_for(H)
|
||||
A.randomize_appearance_and_body_for(H)
|
||||
|
||||
if(new_mob)
|
||||
for (var/spell/S in M.spell_list)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
kill_count = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
|
||||
var/flash_range = 0
|
||||
var/brightness = 7
|
||||
var/light_duration = 5
|
||||
var/light_colour = "#ffffff"
|
||||
|
||||
/obj/item/projectile/energy/flash/on_impact(var/atom/A)
|
||||
var/turf/T = flash_range? src.loc : get_turf(A)
|
||||
@@ -23,22 +23,31 @@
|
||||
//blind adjacent people
|
||||
for (var/mob/living/carbon/M in viewers(T, flash_range))
|
||||
if(M.eyecheck() < 1)
|
||||
flick("e_flash", M.flash)
|
||||
M.flash_eyes()
|
||||
|
||||
//snap pop
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, 1)
|
||||
src.visible_message("<span class='warning'>\The [src] explodes in a bright flash!</span>")
|
||||
|
||||
new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows
|
||||
new /obj/effect/effect/sparks(T)
|
||||
new /obj/effect/effect/smoke/illumination(T, brightness=max(flash_range*2, brightness), lifetime=light_duration)
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/sparks = PoolOrNew(/datum/effect/effect/system/spark_spread)
|
||||
sparks.set_up(2, 1, T)
|
||||
sparks.start()
|
||||
|
||||
new /obj/effect/decal/cleanable/ash(src.loc) //always use src.loc so that ash doesn't end up inside windows
|
||||
new /obj/effect/effect/smoke/illumination(T, 5, brightness, brightness, light_colour)
|
||||
//blinds people like the flash round, but can also be used for temporary illumination
|
||||
/obj/item/projectile/energy/flash/flare
|
||||
damage = 10
|
||||
flash_range = 1
|
||||
brightness = 9 //similar to a flare
|
||||
light_duration = 200
|
||||
brightness = 15
|
||||
|
||||
/obj/item/projectile/energy/flash/flare/on_impact(var/atom/A)
|
||||
light_colour = pick("#e58775", "#ffffff", "#90ff90", "#a09030")
|
||||
|
||||
..() //initial flash
|
||||
|
||||
//residual illumination
|
||||
new /obj/effect/effect/smoke/illumination(src.loc, rand(190,240) SECONDS, range=8, power=3, color=light_colour) //same lighting power as flare
|
||||
|
||||
/obj/item/projectile/energy/electrode
|
||||
name = "electrode"
|
||||
@@ -49,6 +58,9 @@
|
||||
damage_type = HALLOSS
|
||||
//Damage will be handled on the MOB side, to prevent window shattering.
|
||||
|
||||
/obj/item/projectile/energy/electrode/strong
|
||||
agony = 55
|
||||
|
||||
/obj/item/projectile/energy/electrode/stunshot
|
||||
name = "stunshot"
|
||||
damage = 5
|
||||
|
||||
@@ -113,7 +113,8 @@ obj/aiming_overlay/proc/update_aiming_deferred()
|
||||
|
||||
var/cancel_aim = 1
|
||||
|
||||
if(!(aiming_with in owner) || (istype(owner, /mob/living/carbon/human) && (owner.l_hand != aiming_with && owner.r_hand != aiming_with)))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(!(aiming_with in owner) || (istype(H) && !H.item_is_in_hands(aiming_with)))
|
||||
owner << "<span class='warning'>You must keep hold of your weapon!</span>"
|
||||
else if(owner.eye_blind)
|
||||
owner << "<span class='warning'>You are blind and cannot see your target!</span>"
|
||||
@@ -201,6 +202,7 @@ obj/aiming_overlay/proc/update_aiming_deferred()
|
||||
else
|
||||
owner << "<span class='notice'>You will no longer aim rather than fire.</span>"
|
||||
owner.client.remove_gun_icons()
|
||||
owner.gun_setting_icon.icon_state = "gun[active]"
|
||||
|
||||
/obj/aiming_overlay/proc/cancel_aiming(var/no_message = 0)
|
||||
if(!aiming_with || !aiming_at)
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
/mob/living/proc/trigger_aiming(var/trigger_type)
|
||||
//as core click exists at the mob level
|
||||
/mob/proc/trigger_aiming(var/trigger_type)
|
||||
return
|
||||
|
||||
/mob/living/trigger_aiming(var/trigger_type)
|
||||
if(!aimed.len)
|
||||
return
|
||||
for(var/obj/aiming_overlay/AO in aimed)
|
||||
@@ -16,14 +20,10 @@
|
||||
if(!owner.canClick())
|
||||
return
|
||||
owner.setClickCooldown(5) // Spam prevention, essentially.
|
||||
if(owner.a_intent == I_HELP)
|
||||
if(owner.a_intent == I_HELP && owner.is_preference_enabled(/datum/client_preference/safefiring))
|
||||
owner << "<span class='warning'>You refrain from firing \the [aiming_with] as your intent is set to help.</span>"
|
||||
return
|
||||
owner.visible_message("<span class='danger'>\The [owner] pulls the trigger reflexively!</span>")
|
||||
var/obj/item/weapon/gun/G = aiming_with
|
||||
if(istype(G))
|
||||
G.Fire(aiming_at, owner)
|
||||
|
||||
/mob/living/ClickOn(var/atom/A, var/params)
|
||||
. = ..()
|
||||
trigger_aiming(TARGET_CAN_CLICK)
|
||||
|
||||
Reference in New Issue
Block a user