Merge branch 'master' into upstream-merge-8298

This commit is contained in:
Novacat
2022-03-04 09:57:28 -05:00
committed by GitHub
825 changed files with 158690 additions and 79022 deletions
+36
View File
@@ -246,3 +246,39 @@
magazine_icondata_keys[M.type] = icon_keys
magazine_icondata_states[M.type] = ammo_states
/*
* Ammo Boxes
*/
/obj/item/ammo_magazine/ammo_box
name = "ammo box"
desc = "A box that holds some kind of ammo."
icon = 'icons/obj/ammo_boxes.dmi'
icon_state = "pistol"
slot_flags = null //You can't fit a box on your belt
item_state = "paper"
matter = null
throwforce = 3
throw_speed = 5
throw_range = 12
preserve_item = 1
caliber = ".357"
drop_sound = 'sound/items/drop/matchbox.ogg'
pickup_sound = 'sound/items/pickup/matchbox.ogg'
/obj/item/ammo_magazine/ammo_box/AltClick(mob/user)
if(can_remove_ammo)
if(isliving(user) && Adjacent(user))
if(stored_ammo.len)
var/obj/item/ammo_casing/C = stored_ammo[stored_ammo.len]
stored_ammo-=C
user.put_in_hands(C)
user.visible_message("\The [user] removes \a [C] from [src].", "<span class='notice'>You remove \a [C] from [src].</span>")
update_icon()
return
..()
/obj/item/ammo_magazine/ammo_box/examine(mob/user)
. = ..()
. += to_chat(usr, "<span class='notice'>Alt-click to extract contents</span>")
@@ -0,0 +1,554 @@
/************************************************************************/
/*
# An explaination of the naming format for guns and ammo:
#
# a = Ammo, as in individual rounds of ammunition.
# b = Box, intended to have ammo taken out one at a time by hand.
# c = Clips, intended to reload magazines or guns quickly.
# m = Magazine, intended to hold rounds of ammo.
# s = Speedloaders, intended to reload guns quickly.
#
# Use this format, followed by the caliber. For example, a shotgun's caliber
# variable is "12g" as a result. Ergo, a shotgun round's path would have "a12g",
# or a magazine with shotgun shells would be "m12g" instead. To avoid confusion
# for developers and in-game admins spawning these items, stick to this format.
# Likewise, when creating new rounds, the caliber variable should match whatever
# the name says.
#
# This comment is copied in rounds.dm and magazines.dm as well.
#
# Also, to remove bullets from ammo boxes, use Alt-Click on the box.
*/
/************************************************************************/
/*
* Foam
*/
/obj/item/ammo_magazine/ammo_box/foam
name = "\improper Donk-Soft ammo box"
desc = "Contains Donk-Soft foam darts. It's Donk or Don't! Ages 8 and up."
icon = 'icons/obj/gun_toy.dmi'
icon_state = "foambox"
caliber = "foam"
ammo_type = /obj/item/ammo_casing/afoam_dart
matter = list(MAT_PLASTIC = 1800)
max_ammo = 30
multiple_sprites = null
/obj/item/ammo_magazine/ammo_box/foam/riot
name = "\improper Donk-Soft riot ammo box"
desc = "Contains Donk-Soft riot darts. It's Donk or Don't! Ages 18 and up."
icon_state = "foambox_riot"
matter = list(MAT_STEEL = 5040, MAT_PLASTIC = 1800)
/*
* Cap
*/
/obj/item/ammo_magazine/ammo_box/cap
name = "\improper AlliCo SNAP! Caps"
desc = "A box of spare caps for capguns. Ages 8 and up."
icon = 'icons/obj/gun_toy.dmi'
icon_state = "capbox"
caliber = "caps"
ammo_type = /obj/item/ammo_casing/cap
matter = list(MAT_STEEL = 2040)
max_ammo = 24
multiple_sprites = null
/*
* .357
*/
/obj/item/ammo_magazine/ammo_box/b357
name = "ammo box (.357)"
desc = "A box of .357 rounds"
icon_state = "magnum"
caliber = ".357"
ammo_type = /obj/item/ammo_casing/a357
matter = list(MAT_STEEL = 5040)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b357/rubber
name = "ammo box (.357 rubber)"
desc = "A box of .357 rubber rounds"
icon_state = "magnum_r"
caliber = ".357"
ammo_type = /obj/item/ammo_casing/a357/rubber
matter = list(MAT_STEEL = 5040)
max_ammo = 24
multiple_sprites = 1
/*
* .38
*/
/obj/item/ammo_magazine/ammo_box/b38
name = "ammo box (.38)"
desc = "A box of .38 rounds"
icon_state = "pistol"
caliber = ".38"
ammo_type = /obj/item/ammo_casing/a38
matter = list(MAT_STEEL = 1440)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b38/rubber
name = "ammo box (.38 rubber)"
desc = "A box of .38 rubber rounds"
icon_state = "pistol_p"
caliber = ".38"
ammo_type = /obj/item/ammo_casing/a38/rubber
matter = list(MAT_STEEL = 1440)
max_ammo = 24
multiple_sprites = 1
/*
* 10mm
*/
/obj/item/ammo_magazine/ammo_box/b10mm
name = "ammo box (10mm)"
desc = "A box of 10mm rounds"
icon_state = "box10mm"
caliber = "10mm"
ammo_type = /obj/item/ammo_casing/a10mm
matter = list(MAT_STEEL = 3000)
max_ammo = 40
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b10mm/practice
name = "ammo box (10mm practice)"
desc = "A box of 10mm practice rounds"
icon_state = "box10mm-practice"
caliber = "10mm"
ammo_type = /obj/item/ammo_casing/a10mm/practice
matter = list(MAT_STEEL = 2400)
max_ammo = 40
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b10mm/rubber
name = "ammo box (10mm rubber)"
desc = "A box of 10mm rubber rounds"
icon_state = "box10mm-rubber"
caliber = "10mm"
ammo_type = /obj/item/ammo_casing/a10mm/rubber
matter = list(MAT_STEEL = 2400)
max_ammo = 40
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b10mm/emp
name = "ammo box (10mm haywire)"
desc = "A box of 10mm haywire rounds"
icon_state = "box10mm-hw"
caliber = "10mm"
ammo_type = /obj/item/ammo_casing/a10mm/emp
matter = list(MAT_STEEL = 5200, MAT_URANIUM = 4000)
max_ammo = 40
multiple_sprites = 1
/*
* .44
*/
/obj/item/ammo_magazine/ammo_box/b44
name = "ammo box (.44)"
desc = "A box of .44 rounds"
icon_state = "box44"
caliber = ".44"
ammo_type = /obj/item/ammo_casing/a44
matter = list(MAT_STEEL = 5040)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b44/rubber
name = "ammo box (.44 rubber)"
desc = "A box of .44 rubber rounds"
icon_state = "box44-rubber"
caliber = ".44"
ammo_type = /obj/item/ammo_casing/a44/rubber
matter = list(MAT_STEEL = 1440)
max_ammo = 24
multiple_sprites = 1
/*
* .45
*/
/obj/item/ammo_magazine/ammo_box/b45
name = "ammo box (.45)"
desc = "A box of .45 rounds"
icon_state = "pistol_s"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45
matter = list(MAT_STEEL = 1800)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b45/practice
name = "ammo box (.45 practice)"
desc = "A box of .45 practice rounds"
icon_state = "pistol_p"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45/practice
matter = list(MAT_STEEL = 1440)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b45/ap
name = "ammo box (.45 AP)"
desc = "A box of .45 armor-piercing rounds"
icon_state = "pistol_ap"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45/ap
matter = list(MAT_STEEL = 1200, MAT_PLASTEEL = 600)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b45/hp
name = "ammo box (.45 HP)"
desc = "A box of .45 hollow-point rounds"
icon_state = "pistol_hp"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45/hp
matter = list(MAT_STEEL = 1440, MAT_PLASTIC = 360)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b45/rubber
name = "ammo box (.45 rubber)"
desc = "A box of .45 rubber rounds"
icon_state = "pistol_r"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45/rubber
matter = list(MAT_STEEL = 1440)
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b45/emp
name = "ammo box (.45 haywire)"
desc = "A box of .45 haywire rounds"
icon_state = "pistol_hw"
caliber = ".45"
ammo_type = /obj/item/ammo_casing/a45/emp
matter = list(MAT_STEEL = 3120, MAT_URANIUM = 2400)
max_ammo = 24
multiple_sprites = 1
/*
* 12g (aka shotgun ammo)
*/
/obj/item/ammo_magazine/ammo_box/b12g
name = "ammo box (12 gauge slug)"
desc = "A box of 12 gauge slug rounds"
icon_state = "slug"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g
matter = list(MAT_STEEL = 2880)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/pellet
name = "ammo box (12 gauge buckshot)"
desc = "A box of 12 gauge buckshot rounds"
icon_state = "buckshot"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/pellet
matter = list(MAT_STEEL = 2880)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/beanbag
name = "ammo box (12 gauge beanbag)"
desc = "A box of 12 gauge beanbag rounds"
icon_state = "bean"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/beanbag
matter = list(MAT_STEEL = 1440)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/stunshell
name = "ammo box (12 gauge stun)"
desc = "A box of 12 gauge stun rounds"
icon_state = "stunslug"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/stunshell
matter = list(MAT_STEEL = 2880, MAT_GLASS = 5760)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/emp
name = "ammo box (12 gauge EMP)"
desc = "A box of 12 gauge EMP rounds"
icon_state = "emp"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/emp
matter = list(MAT_STEEL = 2880, MAT_URANIUM = 1920)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/flechette
name = "ammo box (12 gauge flechette)"
desc = "A box of 12 gauge flechette rounds"
icon_state = "bean"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/flechette
matter = list(MAT_STEEL = 2880, MAT_PLASTEEL = 800)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/practice
name = "ammo box (12 gauge practice)"
desc = "A box of 12 gauge practice rounds"
icon_state = "practice"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/practice
matter = list(MAT_STEEL = 480)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/blank
name = "ammo box (12 gauge blank)"
desc = "A box of 12 gauge blank rounds"
icon_state = "blank"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/blank
matter = list(MAT_STEEL = 720)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b12g/flash
name = "ammo box (12 gauge flash)"
desc = "A box of 12 gauge flash rounds"
icon_state = "flash"
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g/flash
matter = list(MAT_STEEL = 720, MAT_GLASS = 720)
max_ammo = 8
multiple_sprites = 1
/*
* 14.5mm (anti-materiel rifle round)
*/
/obj/item/ammo_magazine/ammo_box/b145
desc = "ammo box (14.5mm)"
desc = "A box of 14.5mm rounds"
icon_state = "sniper"
caliber = "14.5mm"
ammo_type = /obj/item/ammo_casing/a145
matter = list(MAT_STEEL = 8750)
max_ammo = 7
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b145/highvel
desc = "ammo box (14.5mm sabot)"
desc = "A box of 14.5mm sabot rounds"
icon_state = "sniper"
caliber = "14.5mm"
ammo_type = /obj/item/ammo_casing/a145
matter = list(MAT_STEEL = 8750)
max_ammo = 7
multiple_sprites = 1
/*
* 7.62mm
*/
/obj/item/ammo_magazine/ammo_box/b762
name = "ammo box (7.62mm)"
desc = "A box of 7.62mm rounds"
icon_state = "rifle"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762
matter = list(MAT_STEEL = 6000)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/hp
name = "ammo box (7.62mm HP)"
desc = "A box of 7.62mm hollow-point rounds"
icon_state = "rifle_hp"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/hp
matter = list(MAT_STEEL = 9000)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/ap
name = "ammo box (7.62mm AP)"
desc = "A box of 7.62mm armor-piercing rounds"
icon_state = "rifle_ap"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/ap
matter = list(MAT_STEEL = 9000)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/practice
name = "ammo box (7.62mm practice)"
desc = "A box of 7.62mm practice rounds"
icon_state = "rifle_p"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/practice
matter = list(MAT_STEEL = 2700)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/hunter
name = "ammo box (7.62mm hunter)"
desc = "A box of 7.62mm hunter rounds"
icon_state = "rifle_hunter"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/hunter
matter = list(MAT_STEEL = 6000)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/surplus
name = "ammo wrap (7.62mm)"
desc = "A paper wrap of 7.62mm rounds"
icon_state = "paper_wrap"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762
matter = list(MAT_STEEL = 1600)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/surplus/blank
name = "ammo wrap (7.62mm blank)"
desc = "A paper wrap of 7.62mm blank rounds"
icon_state = "paper_wrap"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/blank
matter = list(MAT_STEEL = 720)
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b762/surplus/hunter
name = "ammo wrap (7.62mm hunter)"
desc = "A paper wrap of 7.62mm hunter rounds"
icon_state = "paper_wrap"
caliber = "7.62mm"
ammo_type = /obj/item/ammo_casing/a762/hunter
matter = list(MAT_STEEL = 1600)
max_ammo = 8
multiple_sprites = 1
/*
* 5.45mm
*/
/obj/item/ammo_magazine/ammo_box/b545
name = "ammo box (5.45mm)"
desc = "A box of 5.45mm rounds"
icon_state = "hrifle"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545
matter = list(MAT_STEEL = 5400)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/ap
name = "ammo box (5.45mm AP)"
desc = "A box of 5.45mm armor-piercing rounds"
icon_state = "hrifle-ap"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/ap
matter = list(MAT_STEEL = 8100)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/hp
name = "ammo box (5.45mm HP)"
desc = "A box of 5.45mm hollow-point rounds"
icon_state = "hrifle-hp"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/hp
matter = list(MAT_STEEL = 5400)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/practice
name = "ammo box (5.45mm practice)"
desc = "A box of 5.45mm practice rounds"
icon_state = "hrifle-practice"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/practice
matter = list(MAT_STEEL = 2700)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/hunter
name = "ammo box (5.45mm hunter)"
desc = "A box of 5.45mm hunter rounds"
icon_state = "hrifle-hunter"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/hunter
matter = list(MAT_STEEL = 5400)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/blank
name = "ammo box (5.45mm blank)"
desc = "A box of 5.45mm blank rounds"
icon_state = "hrifle-practice"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/blank
matter = list(MAT_STEEL = 2700)
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/large
name = "ammo box (5.45mm)"
desc = "A steel box of 5.45mm rounds"
icon_state = "boxhrifle"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545
matter = list(MAT_STEEL = 18000)
max_ammo = 100
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/large/ap
name = "ammo box (5.45mm AP)"
desc = "A steel box of 5.45mm armor-piercing rounds"
icon_state = "boxhrifle-ap"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/ap
matter = list(MAT_STEEL = 27000)
max_ammo = 100
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/large/hp
name = "ammo box (5.45mm HP)"
desc = "A steel box of 5.45mm hollow-point rounds"
icon_state = "boxhrifle-hp"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/hp
matter = list(MAT_STEEL = 18000)
max_ammo = 100
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/large/practice
name = "ammo box (5.45mm practice)"
desc = "A steel box of 5.45mm practice rounds"
icon_state = "boxhrifle-practice"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/practice
matter = list(MAT_STEEL = 9000)
max_ammo = 100
multiple_sprites = 1
/obj/item/ammo_magazine/ammo_box/b545/large/hunter
name = "ammo box (5.45mm hunter)"
desc = "A steel box of 5.45mm hunter rounds"
icon_state = "boxhrifle-hunter"
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545/hunter
matter = list(MAT_STEEL = 18000)
max_ammo = 100
multiple_sprites = 1
+148 -90
View File
@@ -3,7 +3,7 @@
# An explaination of the naming format for guns and ammo:
#
# a = Ammo, as in individual rounds of ammunition.
# b = Box, intended to have ammo taken out one at a time by hand. Really obsolete. Don't use this.
# b = Box, intended to have ammo taken out one at a time by hand.
# c = Clips, intended to reload magazines or guns quickly.
# m = Magazine, intended to hold rounds of ammo.
# s = Speedloaders, intended to reload guns quickly.
@@ -15,14 +15,50 @@
# Likewise, when creating new rounds, the caliber variable should match whatever
# the name says.
#
# This comment is copied in rounds.dm as well.
# This comment is copied in rounds.dm and ammo_boxes.dm as well.
#
# Also, if a magazine is only meant for a specific gun, include the name
# of the specific gun in the path. Example: m45uzi is only for the Uzi.
*/
/************************************************************************/
///////// Foam /////////
/obj/item/ammo_magazine/mfoam_dart/pistol
name = "\improper Donk-Soft pistol magazine"
icon = 'icons/obj/gun_toy.dmi'
icon_state = "toy"
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/afoam_dart
matter = list(MAT_PLASTIC = 250)
caliber = "foam"
max_ammo = 9
multiple_sprites = 1
/obj/item/ammo_magazine/mfoam_dart/pistol/empty
initial_ammo = 0
/obj/item/ammo_magazine/mfoam_dart/pistol/riot
ammo_type = /obj/item/ammo_casing/afoam_dart/riot
// SMG
/obj/item/ammo_magazine/mfoam_dart/smg
name = "\improper Donk-Soft smg magazine"
icon = 'icons/obj/gun_toy.dmi'
icon_state = "toysmg"
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/afoam_dart
matter = list(MAT_PLASTIC = 250)
caliber = "foam"
max_ammo = 20
multiple_sprites = 1
/obj/item/ammo_magazine/mfoam_dart/smg/empty
initial_ammo = 0
/obj/item/ammo_magazine/mfoam_dart/smg/riot
ammo_type = /obj/item/ammo_casing/afoam_dart/riot
matter = list(MAT_PLASTIC = 1260, MAT_PLASTIC = 250)
///////// .357 /////////
@@ -36,6 +72,21 @@
max_ammo = 6
multiple_sprites = 1
/obj/item/ammo_magazine/s357/stun
name = "speedloader (.357 stun)"
icon_state = "T38"
ammo_type = /obj/item/ammo_casing/a357/stun
/obj/item/ammo_magazine/s357/rubber
name = "speedloader (.357 rubber)"
icon_state = "T38"
ammo_type = /obj/item/ammo_casing/a357/rubber
/obj/item/ammo_magazine/s357/flash
name = "speedloader (.357 flash)"
icon_state = "S38"
ammo_type = /obj/item/ammo_casing/a357/flash
///////// .38 /////////
/obj/item/ammo_magazine/s38
@@ -96,6 +147,7 @@
name = "ammunition box (.45 haywire)"
ammo_type = /obj/item/ammo_casing/a45/emp
// Uzi
/obj/item/ammo_magazine/m45uzi
name = "stick magazine (.45)"
icon_state = "uzi45"
@@ -109,14 +161,16 @@
/obj/item/ammo_magazine/m45uzi/empty
initial_ammo = 0
// Tommy Gun
/obj/item/ammo_magazine/m45tommy
name = "Tommy Gun magazine (.45)"
icon_state = "tommy-mag"
icon_state = "tomstick"
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/a45
matter = list(MAT_STEEL = 1500)
caliber = ".45"
max_ammo = 20
multiple_sprites = 1
/obj/item/ammo_magazine/m45tommy/ap
name = "Tommy Gun magazine (.45 AP)"
@@ -127,21 +181,23 @@
/obj/item/ammo_magazine/m45tommydrum
name = "Tommy Gun drum magazine (.45)"
icon_state = "tommy-drum"
icon_state = "tomdrum"
w_class = ITEMSIZE_NORMAL // Bulky ammo doesn't fit in your pockets!
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/a45
matter = list(MAT_STEEL = 3750)
caliber = ".45"
max_ammo = 50
multiple_sprites = 1
/obj/item/ammo_magazine/m45tommydrum/empty
initial_ammo = 0
/obj/item/ammo_magazine/m45tommydrum/ap
name = "Tommy Gun drum magazine (.45 AP)"
ammo_type = /obj/item/ammo_casing/a45/ap
/obj/item/ammo_magazine/m45tommydrum/empty
initial_ammo = 0
// Stripper Clip
/obj/item/ammo_magazine/clip/c45
name = "ammo clip (.45)"
icon_state = "clip_pistol"
@@ -164,13 +220,14 @@
name = "ammo clip (.45 flash)"
ammo_type = /obj/item/ammo_casing/a45/flash
// Speedloader
/obj/item/ammo_magazine/s45
name = "speedloader (.45)"
icon_state = "45s"
ammo_type = /obj/item/ammo_casing/a45
matter = list(MAT_STEEL = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal
caliber = ".45"
max_ammo = 7
max_ammo = 6
multiple_sprites = 1
/obj/item/ammo_magazine/s45/empty
@@ -203,6 +260,9 @@
max_ammo = 30
multiple_sprites = 1
/obj/item/ammo_magazine/m5mmcaseless/empty
initial_ammo = 0
/obj/item/ammo_magazine/m5mmcaseless/stun
icon_state = "caseless-mag-alt"
ammo_type = /obj/item/ammo_casing/a5mmcaseless/stun
@@ -211,7 +271,7 @@
/obj/item/ammo_magazine/m9mm
name = "magazine (9mm)"
icon_state = "9x19p_fullsize"
icon_state = "m91"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
matter = list(MAT_STEEL = 600)
@@ -220,15 +280,6 @@
max_ammo = 10
multiple_sprites = 1
/obj/item/ammo_magazine/m9mm/large
desc = "\"FOR LAW ENFORCEMENT/MILITARY USE ONLY\" is clearly etched on the magazine. This is probably illegal for you to have." // Remember, Security is not Law Enforcement, so it's illegal for Security to use as well.
icon_state = "9x19p_highcap"
max_ammo = 17
origin_tech = list(TECH_COMBAT = 2, TECH_ILLEGAL = 1)
/obj/item/ammo_magazine/m9mm/large/preban // Sold by traders.
desc = "A large capacity magazine that was built before the SolGov Assault Weapons Ban, so it's legal to own."
/obj/item/ammo_magazine/m9mm/empty
initial_ammo = 0
@@ -244,10 +295,33 @@
name = "magazine (9mm practice)"
ammo_type = /obj/item/ammo_casing/a9mm/practice
// Extended
/obj/item/ammo_magazine/m9mm/large
name = "extended magazine (9mm)"
desc = "\"FOR LAW ENFORCEMENT/MILITARY USE ONLY\" is clearly etched on the magazine. This is probably illegal for you to have." // Remember, Security is not Law Enforcement, so it's illegal for Security to use as well.
icon_state = "m93"
origin_tech = list(TECH_COMBAT = 2, TECH_ILLEGAL = 1)
mag_type = MAGAZINE
matter = list(MAT_STEEL = 1000)
caliber = "9mm"
ammo_type = /obj/item/ammo_casing/a9mm
max_ammo = 17
multiple_sprites = 1
/obj/item/ammo_magazine/m9mm/large/empty
initial_ammo = 0
/obj/item/ammo_magazine/m9mm/large/preban // Sold by traders.
desc = "A large capacity magazine that was built before the SolGov Assault Weapons Ban, so it's legal to own."
/obj/item/ammo_magazine/m9mm/large/preban/hp // Hollow Point version
name = "magazine (9mm hollow-point)"
ammo_type = /obj/item/ammo_casing/a9mm/hp
// Compact
/obj/item/ammo_magazine/m9mm/compact
name = "compact magazine (9mm)"
icon_state = "9x19p"
icon_state = "m92"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
matter = list(MAT_STEEL = 480)
@@ -302,6 +376,7 @@
ammo_type = /obj/item/ammo_casing/a9mm/ap
matter = list(MAT_STEEL = 1000, MAT_PLASTEEL = 2000)
// P90
/obj/item/ammo_magazine/m9mmp90
name = "large capacity top mounted magazine (9mm armor-piercing)"
icon_state = "p90"
@@ -315,6 +390,7 @@
/obj/item/ammo_magazine/m9mmp90/empty
initial_ammo = 0
// Stripper Clip
/obj/item/ammo_magazine/clip/c9mm
name = "ammo clip (9mm)"
icon_state = "clip_pistol"
@@ -337,6 +413,7 @@
name = "ammo clip (.45 flash)"
ammo_type = /obj/item/ammo_casing/a9mm/flash
// Advanced SMG
/obj/item/ammo_magazine/m9mmAdvanced
desc = "A very high capacity double stack magazine made specially for the Advanced SMG. Filled with 21 9mm bullets."
icon_state = "S9mm"
@@ -373,20 +450,6 @@
/obj/item/ammo_magazine/m10mm/empty
initial_ammo = 0
/obj/item/ammo_magazine/clip/c10mm
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(MAT_STEEL = 675) // metal costs are very roughly based around one 10mm casing = 75 metal
max_ammo = 9
multiple_sprites = 1
/obj/item/ammo_magazine/box/emp/b10
name = "ammunition box (10mm haywire)"
ammo_type = /obj/item/ammo_casing/a10mm/emp
///////// 5.45mm /////////
/obj/item/ammo_magazine/m545
@@ -400,41 +463,43 @@
max_ammo = 20
multiple_sprites = 1
/obj/item/ammo_magazine/m545/ext
name = "extended magazine (5.45mm)"
matter = list(MAT_STEEL = 2700)
max_ammo = 30
/obj/item/ammo_magazine/m545/empty
initial_ammo = 0
/obj/item/ammo_magazine/m545/ext/empty
initial_ammo = 0
/obj/item/ammo_magazine/m545/practice
name = "magazine (5.45mm practice)"
ammo_type = /obj/item/ammo_casing/a545/practice
/obj/item/ammo_magazine/m545/practice/ext
name = "extended magazine (5.45mm practice)"
max_ammo = 30
/obj/item/ammo_magazine/m545/ap
name = "magazine (5.45mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a545/ap
/obj/item/ammo_magazine/m545/ap/ext
name = "extended magazine (5.45mm armor-piercing)"
max_ammo = 30
/obj/item/ammo_magazine/m545/hunter
name = "magazine (5.45mm hunting)"
ammo_type = /obj/item/ammo_casing/a545/hunter
// Extended
/obj/item/ammo_magazine/m545/ext
name = "extended magazine (5.45mm)"
matter = list(MAT_STEEL = 2700)
max_ammo = 30
/obj/item/ammo_magazine/m545/ext/empty
initial_ammo = 0
/obj/item/ammo_magazine/m545/practice/ext
name = "extended magazine (5.45mm practice)"
max_ammo = 30
/obj/item/ammo_magazine/m545/ap/ext
name = "extended magazine (5.45mm armor-piercing)"
max_ammo = 30
/obj/item/ammo_magazine/m545/hunter/ext
name = "extended magazine (5.45mm hunting)"
max_ammo = 30
// Reduced
/obj/item/ammo_magazine/m545/small
name = "reduced magazine (5.45mm)"
icon_state = "m545-small"
@@ -456,6 +521,7 @@
name = "magazine (5.45mm hunting)"
ammo_type = /obj/item/ammo_casing/a545/hunter
// Stripper Clip
/obj/item/ammo_magazine/clip/c545
name = "ammo clip (5.45mm)"
icon_state = "clip_rifle"
@@ -477,6 +543,7 @@
name = "rifle clip (5.45mm practice)"
ammo_type = /obj/item/ammo_casing/a545
// SAW
/obj/item/ammo_magazine/m545saw
name = "magazine box (5.45mm)"
icon_state = "a545"
@@ -489,6 +556,9 @@
max_ammo = 50
multiple_sprites = 1
/obj/item/ammo_magazine/m545saw/empty
initial_ammo = 0
/obj/item/ammo_magazine/m545saw/ap
name = "magazine box (5.45mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a545/ap
@@ -497,9 +567,6 @@
name = "magazine box (5.45mm hunting)"
ammo_type = /obj/item/ammo_casing/a545/hunter
/obj/item/ammo_magazine/m545saw/empty
initial_ammo = 0
///////// .44 Magnum /////////
/obj/item/ammo_magazine/m44
@@ -516,6 +583,7 @@
/obj/item/ammo_magazine/m44/empty
initial_ammo = 0
// Stripper Clip
/obj/item/ammo_magazine/clip/c44
name = "ammo clip (.44)"
icon_state = "clip_pistol"
@@ -526,6 +594,7 @@
max_ammo = 9
multiple_sprites = 1
// Speedloader
/obj/item/ammo_magazine/s44
name = "speedloader (.44)"
icon_state = "44"
@@ -560,33 +629,31 @@
max_ammo = 10
multiple_sprites = 1
/obj/item/ammo_magazine/m762/empty
initial_ammo = 0
/obj/item/ammo_magazine/m762/ap
name = "magazine (7.62mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a762/ap
/obj/item/ammo_magazine/m762/empty
// Extended
/obj/item/ammo_magazine/m762/ext
name = "extended magazine (7.62mm)"
icon_state = "m762"
matter = list(MAT_STEEL = 4000)
max_ammo = 20
/obj/item/ammo_magazine/m762/ext/empty
initial_ammo = 0
/obj/item/ammo_magazine/m762m // Intentionally not a subtype of m762 because it's supposed to be incompatible with the Z8 Bulldog rifle.
name = "magazine (7.62mm)"
icon_state = "m762"
mag_type = MAGAZINE
caliber = "7.62mm"
matter = list(MAT_STEEL = 4000)
ammo_type = /obj/item/ammo_casing/a762
max_ammo = 20
multiple_sprites = 1
/obj/item/ammo_magazine/m762m/ap
/obj/item/ammo_magazine/m762/ext/ap
name = "magazine (7.62mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a762/ap
/obj/item/ammo_magazine/m762m/empty
initial_ammo = 0
/obj/item/ammo_magazine/m762garand
name = "garand clip (7.62mm)" // The clip goes into the magazine, hence the name. I'm very sure this is correct.
icon_state = "gclip"
// Enbloc
/obj/item/ammo_magazine/m762enbloc
name = "enbloc (7.62mm)"
icon_state = "enbloc"
mag_type = MAGAZINE
caliber = "7.62mm"
matter = list(MAT_STEEL = 1600)
@@ -594,13 +661,14 @@
max_ammo = 8
multiple_sprites = 1
/obj/item/ammo_magazine/m762garand/ap
/obj/item/ammo_magazine/m762enbloc/ap
name = "garand clip (7.62mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a762/ap
/obj/item/ammo_magazine/m762/empty
/obj/item/ammo_magazine/m762enbloc/empty
initial_ammo = 0
// Stripper Clip
/obj/item/ammo_magazine/clip/c762
name = "ammo clip (7.62mm)"
icon_state = "clip_rifle"
@@ -622,6 +690,7 @@
name = "rifle clip (7.62mm hunting)"
ammo_type = /obj/item/ammo_casing/a762/hunter
// SVD
/obj/item/ammo_magazine/m762svd
name = "\improper SVD magazine (7.62mm)"
icon_state = "SVD"
@@ -632,13 +701,13 @@
max_ammo = 10
multiple_sprites = 1
/obj/item/ammo_magazine/m762svd/empty
initial_ammo = 0
/obj/item/ammo_magazine/m762svd/ap
name = "\improper SVD magazine (7.62mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a762/ap
/obj/item/ammo_magazine/m762svd/empty
initial_ammo = 0
///////// 12g /////////
/obj/item/ammo_magazine/m12gdrum
@@ -651,6 +720,9 @@
max_ammo = 24
multiple_sprites = 1
/obj/item/ammo_magazine/m12gdrum/empty
initial_ammo = 0
/obj/item/ammo_magazine/m12gdrum/beanbag
name = "magazine (12 gauge beanbag)"
ammo_type = /obj/item/ammo_casing/a12g/beanbag
@@ -663,9 +735,7 @@
name = "magazine (12 gauge flash)"
ammo_type = /obj/item/ammo_casing/a12g/flash
/obj/item/ammo_magazine/m12gdrum/empty
initial_ammo = 0
// Clip
/obj/item/ammo_magazine/clip/c12g
name = "ammo clip (12g slug)"
icon_state = "12gclipslug" // Still a placeholder sprite. Feel free to make a better one.
@@ -703,15 +773,3 @@
/obj/item/ammo_magazine/m75/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(MAT_STEEL = 600)
max_ammo = 7
multiple_sprites = 1
@@ -1,9 +0,0 @@
/obj/item/ammo_magazine/m9mm/large/preban/hp // Hollow Point Version
name = "magazine (9mm hollow-point)"
ammo_type = /obj/item/ammo_casing/a9mm/hp
/obj/item/weapon/magnetic_ammo/pistol/khi
name = "flechette magazine (small, khi)"
desc = "A magazine containing smaller carbyne flechettes, intended for a pistol."
icon_state = "caseless-mag-short-alt"
remaining = 12
@@ -17,3 +17,9 @@
name = "flechette magazine (small)"
desc = "A magazine containing smaller steel flechettes, intended for a pistol."
icon_state = "caseless-mag-short"
/obj/item/weapon/magnetic_ammo/pistol/khi
name = "flechette magazine (small, khi)"
desc = "A magazine containing smaller carbyne flechettes, intended for a pistol."
icon_state = "caseless-mag-short-alt"
remaining = 12
+91 -6
View File
@@ -19,6 +19,26 @@
*/
/************************************************************************/
/*
* Foam
*/
/obj/item/ammo_casing/afoam_dart
name = "foam dart"
desc = "It's Donk or Don't! Ages 8 and up."
projectile_type = /obj/item/projectile/bullet/foam_dart
matter = list(MAT_PLASTIC = 60)
caliber = "foam"
icon = 'icons/obj/gun_toy.dmi'
icon_state = "foamdart"
caseless = 1
/obj/item/ammo_casing/afoam_dart/riot
name = "riot foam dart"
desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up."
matter = list(MAT_STEEL = 210, MAT_PLASTIC = 60)
icon_state = "foamdart_riot"
/*
* .357
*/
@@ -29,6 +49,12 @@
projectile_type = /obj/item/projectile/bullet/pistol/strong
matter = list(MAT_STEEL = 210)
/obj/item/ammo_casing/a357/bb
desc = "A .357 BB."
projectile_type = /obj/item/projectile/bullet/bb
matter = list(MAT_PLASTIC = 20)
caseless = TRUE
/*
* .38
*/
@@ -51,6 +77,12 @@
projectile_type = /obj/item/projectile/ion/small
matter = list(MAT_STEEL = 130, MAT_URANIUM = 100)
/obj/item/ammo_casing/a38/bb
desc = "A .38 BB."
projectile_type = /obj/item/projectile/bullet/bb
matter = list(MAT_PLASTIC = 20)
caseless = TRUE
/*
* .44
*/
@@ -72,6 +104,12 @@
projectile_type = /obj/item/projectile/bullet/rifle/a44rifle
matter = list(MAT_STEEL = 210)
/obj/item/ammo_casing/a44/bb
desc = "A .44 BB."
projectile_type = /obj/item/projectile/bullet/bb
matter = list(MAT_PLASTIC = 20)
caseless = TRUE
/*
* .75 (aka Gyrojet Rockets, aka admin abuse)
*/
@@ -101,7 +139,6 @@
desc = "A 9mm hollow-point bullet casing."
projectile_type = /obj/item/projectile/bullet/pistol/hp
/obj/item/ammo_casing/a9mm/flash
desc = "A 9mm flash shell casing."
icon_state = "r-casing"
@@ -117,6 +154,12 @@
icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/practice
/obj/item/ammo_casing/a9mm/bb
desc = "A 9mm BB."
projectile_type = /obj/item/projectile/bullet/bb
matter = list(MAT_PLASTIC = 20)
caseless = TRUE
/*
* .45
*/
@@ -163,6 +206,12 @@
projectile_type = /obj/item/projectile/bullet/pistol/medium/hp
matter = list(MAT_STEEL = 60, MAT_PLASTIC = 15)
/obj/item/ammo_casing/a45/bb
desc = "A .45 BB."
projectile_type = /obj/item/projectile/bullet/bb
matter = list(MAT_PLASTIC = 20)
caseless = TRUE
/*
* 10mm
*/
@@ -173,6 +222,18 @@
projectile_type = /obj/item/projectile/bullet/pistol/medium
matter = list(MAT_STEEL = 75)
/obj/item/ammo_casing/a10mm/practice
desc = "A 10mm practice bullet casing."
icon_state = "r-casing"
projectile_type = /obj/item/projectile/bullet/practice
matter = list(MAT_STEEL = 60)
/obj/item/ammo_casing/a10mm/rubber
desc = "A 10mm rubber bullet casing."
projectile_type = /obj/item/projectile/bullet/pistol/rubber
icon_state = "r-casing"
matter = list(MAT_STEEL = 60)
/obj/item/ammo_casing/a10mm/emp
name = "10mm haywire round"
desc = "A 10mm bullet casing fitted with a single-use ion pulse generator."
@@ -180,6 +241,12 @@
icon_state = "empcasing"
matter = list(MAT_STEEL = 130, MAT_URANIUM = 100)
/obj/item/ammo_casing/a10mm/bb
desc = "A 10mm BB."
projectile_type = /obj/item/projectile/bullet/bb
matter = list(MAT_PLASTIC = 20)
caseless = TRUE
/*
* 12g (aka shotgun ammo)
*/
@@ -256,6 +323,11 @@
projectile_type = /obj/item/projectile/scatter/flechette
matter = list(MAT_STEEL = 360, MAT_PLASTEEL = 100)
/obj/item/ammo_casing/a12g/bb
desc = "A shotgun BB shell."
projectile_type = /obj/item/projectile/bullet/pellet/shotgun/bb // Shotgun
matter = list(MAT_PLASTIC = 120) // 6 pellets
/*
* 7.62mm
*/
@@ -291,6 +363,12 @@
desc = "A 7.62mm hunting bullet casing."
projectile_type = /obj/item/projectile/bullet/rifle/a762/hunter
/obj/item/ammo_casing/a762/bb
desc = "A 7.62mm BB."
projectile_type = /obj/item/projectile/bullet/bb
matter = list(MAT_PLASTIC = 20)
caseless = TRUE
/*
* 14.5mm (anti-materiel rifle round)
*/
@@ -345,6 +423,12 @@
desc = "A 5.45mm hunting bullet casing."
projectile_type = /obj/item/projectile/bullet/rifle/a545/hunter
/obj/item/ammo_casing/a545/bb
desc = "A 5.45mm BB."
projectile_type = /obj/item/projectile/bullet/bb
matter = list(MAT_PLASTIC = 20)
caseless = TRUE
/*
* 5mm Caseless
*/
@@ -375,14 +459,15 @@
/obj/item/ammo_casing/cap
name = "cap"
desc = "A cap for children toys."
desc = "A cap for children toys. Ages 8 and up."
caliber = "caps"
icon_state = "r-casing"
color = "#FF0000"
projectile_type = /obj/item/projectile/bullet/pistol/cap
icon = 'icons/obj/gun_toy.dmi'
icon_state = "cap"
projectile_type = /obj/item/projectile/bullet/cap
matter = list(MAT_STEEL = 85)
caseless = 1
/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
projectile_type = null
+1 -1
View File
@@ -465,7 +465,7 @@
P.dispersion = disp
P.shot_from = src.name
P.silenced = silenced
P.silenced |= silenced // A silent bullet (e.g., BBs) can be fired quietly from any gun.
P.old_style_target(target)
P.fire()
@@ -18,6 +18,7 @@
var/transforming = 0
var/failure_chance = 15 // This can become negative with part tiers above 3, which helps offset penalties
var/obj/item/weapon/stock_parts/scanning_module/scanmod
var/dropnoms_active = TRUE
/obj/item/weapon/bluespace_harpoon/Initialize()
. = ..()
@@ -26,6 +27,8 @@
/obj/item/weapon/bluespace_harpoon/examine(var/mob/user)
. = ..()
. += "It is currently in [mode ? "transmitting" : "recieving"] mode."
. += "Spatial rearrangement is [dropnoms_active ? "active" : "inactive"]."
if(Adjacent(user))
. += "It has [scanmod ? scanmod : "no scanner module"] installed."
@@ -80,7 +83,7 @@
playsound(src, 'sound/weapons/wave.ogg', 60, 1)
return
var/turf/T = get_turf(A)
if(!T || (T.check_density() && mode == 1))
if(!T || (T.check_density(ignore_mobs = TRUE) && mode == 1))
to_chat(user,"<span class = 'warning'>That's a little too solid to harpoon into!</span>")
return
var/turf/ownturf = get_turf(src)
@@ -118,12 +121,47 @@
for(var/rider in L.buckled_mobs)
sendfailchance += 15
var/mob/living/living_user = user
var/can_dropnom = TRUE
if(!dropnoms_active || !istype(living_user))
can_dropnom = FALSE
if(mode)
if(user in FromTurf)
if(prob(sendfailchance))
user.forceMove(pick(trange(24,user)))
else
user.forceMove(ToTurf)
var/vore_happened = FALSE
if(can_dropnom && living_user.can_be_drop_pred)
var/obj/belly/belly_dest
if(living_user.vore_selected)
belly_dest = living_user.vore_selected
else if(living_user.vore_organs.len)
belly_dest = pick(living_user.vore_organs)
if(belly_dest)
for(var/mob/living/prey in ToTurf)
if(prey != user && prey.can_be_drop_prey)
prey.forceMove(belly_dest)
vore_happened = TRUE
to_chat(prey, "<span class='danger'>[living_user] materializes around you, as you end up in their [belly_dest]!</span>")
to_chat(living_user, "<span class='notice'>You materialize around [prey] as they end up in your [belly_dest]!</span>")
if(can_dropnom && !vore_happened && living_user.can_be_drop_prey)
var/mob/living/pred
for(var/mob/living/potential_pred in ToTurf)
if(potential_pred != user && potential_pred.can_be_drop_pred)
pred = potential_pred
if(pred)
var/obj/belly/belly_dest
if(pred.vore_selected)
belly_dest = pred.vore_selected
else if(pred.vore_organs.len)
belly_dest = pick(pred.vore_organs)
if(belly_dest)
living_user.forceMove(belly_dest)
to_chat(pred, "<span class='notice'>[living_user] materializes inside you as they end up in your [belly_dest]!</span>")
to_chat(living_user, "<span class='danger'>You materialize inside [pred] as you end up in their [belly_dest]!</span>")
else
for(var/obj/O in FromTurf)
if(O.anchored) continue
@@ -132,25 +170,58 @@
else
O.forceMove(ToTurf)
var/user_vored = FALSE
for(var/mob/living/M in FromTurf)
if(prob(recievefailchance))
M.forceMove(pick(trange(24,user)))
else
M.forceMove(ToTurf)
if(can_dropnom && living_user.can_be_drop_pred && M.can_be_drop_prey)
var/obj/belly/belly_dest
if(living_user.vore_selected)
belly_dest = living_user.vore_selected
else if(living_user.vore_organs.len)
belly_dest = pick(living_user.vore_organs)
if(belly_dest)
M.forceMove(belly_dest)
to_chat(living_user, "<span class='notice'>[M] materializes inside you as they end up in your [belly_dest]!</span>")
to_chat(M, "<span class='danger'>You materialize inside [living_user] as you end up in their [belly_dest]!</span>")
else if(can_dropnom && living_user.can_be_drop_prey && M.can_be_drop_pred && !user_vored)
var/obj/belly/belly_dest
if(M.vore_selected)
belly_dest = M.vore_selected
else if(M.vore_organs.len)
belly_dest = pick(M.vore_organs)
if(belly_dest)
living_user.forceMove(belly_dest)
user_vored = TRUE
to_chat(living_user, "<span class='danger'>[M] materializes around you, as you end up in their [belly_dest]!</span>")
to_chat(M, "<span class='notice'>You materialize around [living_user] as they end up in your [belly_dest]!</span>")
/obj/item/weapon/bluespace_harpoon/attack_self(mob/living/user as mob)
return chande_fire_mode(user)
/obj/item/weapon/bluespace_harpoon/verb/chande_fire_mode(mob/user as mob)
set name = "Change fire mode"
set name = "Change Fire Mode"
set category = "Object"
set src in oview(1)
set src in range(0)
if(transforming) return
mode = !mode
transforming = 1
to_chat(user,"<span class = 'info'>You change \the [src]'s mode to [mode ? "transmiting" : "receiving"].</span>")
update_icon()
/obj/item/weapon/bluespace_harpoon/verb/chande_dropnom_mode(mob/user as mob)
set name = "Toggle Spatial Rearrangement"
set category = "Object"
set src in range(0)
dropnoms_active = !dropnoms_active
to_chat(user,"<span class = 'info'>You switch \the [src]'s spatial rearrangement [dropnoms_active ? "on" : "off"]. (Telenoms [dropnoms_active ? "enabled" : "disabled"])</span>")
/obj/item/weapon/bluespace_harpoon/update_icon()
if(transforming)
switch(mode)
@@ -191,7 +191,7 @@
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty()
if(power_supply)
power_supply.use(power_supply.charge)
update_icon()
update_icon()
/obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload(recharge_time)
if(!power_supply)
@@ -223,7 +223,7 @@
/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon()
cut_overlays()
if(overheat || (power_supply.charge == 0))
if(overheat || !power_supply || (power_supply.charge == 0))
add_overlay(emptystate)
#define KA_ENVIRO_TYPE_COLD 0
@@ -273,6 +273,7 @@
else if(environment == KA_ENVIRO_TYPE_OFFSITE)
if(!offsite_environment_check(get_turf(src)))
name = "nullified [name]"
nodamage = TRUE
damage = 0
pressure_decrease_active = TRUE
return ..()
@@ -292,6 +293,7 @@
else if(environment == KA_ENVIRO_TYPE_OFFSITE)
if(!offsite_environment_check(get_turf(src)))
name = "nullified [name]"
nodamage = TRUE
damage = 0
pressure_decrease_active = TRUE
return ..()
@@ -323,6 +325,7 @@
else if(environment == KA_ENVIRO_TYPE_OFFSITE)
if(!offsite_environment_check(get_turf(src)))
name = "nullified [name]"
nodamage = TRUE
damage = 0
pressure_decrease_active = TRUE
var/turf/target_turf = get_turf(target)
@@ -546,7 +549,7 @@
//Tendril-unique modules
/obj/item/borg/upgrade/modkit/cooldown/repeater
name = "rapid repeater"
desc = "Quarters the kinetic accelerator's cooldown on striking a living target, but greatly increases the base cooldown."
desc = "Quarters the kinetic accelerator's cooldown on striking a living or mineral target, but greatly increases the base cooldown."
denied_type = /obj/item/borg/upgrade/modkit/cooldown/repeater
modifier = -14 //Makes the cooldown 3 seconds(with no cooldown mods) if you miss. Don't miss.
cost = 50
@@ -654,9 +657,11 @@
name = "offsite pressure modulator"
desc = "A non-standard modification kit that increases the damage a kinetic accelerator does in pressurized environments, \
in exchange for nullifying any projected forces while on or in an associated facility."
denied_type = /obj/item/borg/upgrade/modkit/heater
maximum_of_type = 1
cost = 35
/obj/item/borg/upgrade/modkit/indoors/offsite/modify_projectile(obj/item/projectile/kinetic/K)
/obj/item/borg/upgrade/modkit/offsite/modify_projectile(obj/item/projectile/kinetic/K)
K.environment = KA_ENVIRO_TYPE_OFFSITE
// Atmospheric
@@ -664,7 +669,7 @@
name = "temperature modulator"
desc = "A remarkably unusual modification kit that makes kinetic accelerators more usable in hot, overpressurized environments, \
in exchange for making them weak elsewhere, like the cold or in space."
denied_type = /obj/item/borg/upgrade/modkit/indoors
denied_type = /obj/item/borg/upgrade/modkit/offsite
maximum_of_type = 1
cost = 10
@@ -278,41 +278,6 @@
accuracy = 0
scoped_accuracy = 20
////////Laser Tag////////////////////
/obj/item/weapon/gun/energy/lasertag
name = "laser tag gun"
item_state = "laser"
desc = "Standard issue weapon of the Imperial Guard"
origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2)
matter = list(MAT_STEEL = 2000)
projectile_type = /obj/item/projectile/beam/lasertag/blue
cell_type = /obj/item/weapon/cell/device/weapon/recharge
battery_lock = 1
var/required_vest
/obj/item/weapon/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M)
if(ishuman(M))
if(!istype(M.wear_suit, required_vest))
to_chat(M, "<span class='warning'>You need to be wearing your laser tag vest!</span>")
return 0
return ..()
/obj/item/weapon/gun/energy/lasertag/blue
icon_state = "bluetag"
item_state = "bluetag"
projectile_type = /obj/item/projectile/beam/lasertag/blue
required_vest = /obj/item/clothing/suit/bluetag
/obj/item/weapon/gun/energy/lasertag/red
icon_state = "redtag"
item_state = "redtag"
projectile_type = /obj/item/projectile/beam/lasertag/red
required_vest = /obj/item/clothing/suit/redtag
/obj/item/weapon/gun/energy/lasertag/omni
projectile_type = /obj/item/projectile/beam/lasertag/omni
// Laser scattergun, proof of concept.
/obj/item/weapon/gun/energy/lasershotgun
@@ -127,35 +127,6 @@
cut_overlays()
update_mode()
/////////////////////////////////////////////////////
//////////////////// Custom Ammo ////////////////////
/////////////////////////////////////////////////////
//---------------- Beams ----------------
/obj/item/projectile/beam/eluger
name = "laser beam"
icon_state = "xray"
light_color = "#00FF00"
muzzle_type = /obj/effect/projectile/muzzle/xray
tracer_type = /obj/effect/projectile/tracer/xray
impact_type = /obj/effect/projectile/impact/xray
/obj/item/projectile/beam/imperial
name = "laser beam"
fire_sound = 'sound/weapons/mandalorian.ogg'
icon_state = "darkb"
light_color = "#8837A3"
muzzle_type = /obj/effect/projectile/muzzle/darkmatter
tracer_type = /obj/effect/projectile/tracer/darkmatter
impact_type = /obj/effect/projectile/impact/darkmatter
/obj/item/projectile/beam/stun/kin21
name = "kinh21 stun beam"
icon_state = "omnilaser"
light_color = "#0000FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
//Gun Locking Mechanism
/obj/item/weapon/gun/energy/locked
req_access = list(access_armory) //for toggling safety
@@ -45,4 +45,14 @@
L.Confuse(1)
L.throw_at(get_edge_target_turf(L, throwdir), rand(3,6), 10)
//VOREStation Add Start
if(istype(L, /mob/living/simple_mob/vore/alienanimals/startreader))
var/mob/living/simple_mob/vore/alienanimals/startreader/S = L
if(!S.flipped)
S.adjustBruteLoss(100)
S.visible_message("<span class='notice'>\The [S] is flipped over!!!</span>")
S.flipped = TRUE
S.flip_cooldown = 10
S.handle_flip()
//VOREStation Add End
return 1
@@ -47,7 +47,9 @@
modifystate = "floramut"
cell_type = /obj/item/weapon/cell/device/weapon/recharge
battery_lock = 1
var/decl/plantgene/gene = null
var/obj/item/weapon/stock_parts/micro_laser/emitter
firemodes = list(
list(mode_name="induce mutations", projectile_type=/obj/item/projectile/energy/floramut, modifystate="floramut"),
@@ -55,8 +57,42 @@
list(mode_name="induce specific mutations", projectile_type=/obj/item/projectile/energy/floramut/gene, modifystate="floramut"),
)
/obj/item/weapon/gun/energy/floragun/Initialize()
. = ..()
emitter = new(src)
/obj/item/weapon/gun/energy/floragun/examine(var/mob/user)
. = ..()
if(Adjacent(user))
. += "It has [emitter ? emitter : "no micro laser"] installed."
/obj/item/weapon/gun/energy/floragun/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/stock_parts/micro_laser))
if(!emitter)
user.drop_item()
W.loc = src
emitter = W
to_chat(user, "<span class='notice'>You install a [emitter.name] in [src].</span>")
else
to_chat(user, "<span class='notice'>[src] already has a laser.</span>")
else if(W.is_screwdriver())
if(emitter)
to_chat(user, "<span class='notice'>You remove the [emitter.name] from the [src].</span>")
emitter.loc = get_turf(src.loc)
playsound(src, W.usesound, 50, 1)
emitter = null
return
else
to_chat(user, "<span class='notice'>There is no micro laser in this [src].</span>")
return
/obj/item/weapon/gun/energy/floragun/afterattack(obj/target, mob/user, adjacent_flag)
//allow shooting into adjacent hydrotrays regardless of intent
if(!emitter)
to_chat(user, "<span class='notice'>The [src] has no laser! </span>")
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
return
if(adjacent_flag && istype(target,/obj/machinery/portable_atmospherics/hydroponics))
user.visible_message("<span class='danger'>\The [user] fires \the [src] into \the [target]!</span>")
Fire(target,user)
@@ -82,8 +118,16 @@
/obj/item/weapon/gun/energy/floragun/consume_next_projectile()
. = ..()
var/obj/item/projectile/energy/floramut/gene/G = .
var/obj/item/projectile/energy/florayield/GY = .
var/obj/item/projectile/energy/floramut/GM = .
// Inserting the upgrade level of the gun to the projectile as there isn't a better way to do this.
if(istype(G))
G.gene = gene
G.lasermod = emitter.rating
else if(istype(GY))
GY.lasermod = emitter.rating
else if(istype(GM))
GM.lasermod = emitter.rating
/obj/item/weapon/gun/energy/meteorgun
name = "meteor gun"
@@ -85,6 +85,8 @@
/obj/item/weapon/gun/magnetic/matfed/attackby(var/obj/item/thing, var/mob/user)
. = ..()
update_rating_mod()
if(removable_components)
if(thing.is_crowbar())
if(!manipulator)
@@ -112,7 +114,6 @@
update_rating_mod()
return
if(is_type_in_list(thing, load_type))
var/obj/item/stack/material/M = thing
var/success = FALSE
@@ -147,7 +148,6 @@
playsound(src, 'sound/weapons/flipblade.ogg', 50, 1)
update_icon()
return
. = ..()
#define GEN_STARTING -1
#define GEN_OFF 0
@@ -415,7 +415,7 @@
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m762
allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762m)
allowed_magazines = list(/obj/item/ammo_magazine/m762, /obj/item/ammo_magazine/m762/ext)
projectile_type = /obj/item/projectile/bullet/rifle/a762
one_handed_penalty = 45
@@ -429,7 +429,7 @@
..()
if(istype(ammo_magazine,/obj/item/ammo_magazine/m762))
icon_state = "bullpup-small"
else if(istype(ammo_magazine,/obj/item/ammo_magazine/m762m))
else if(istype(ammo_magazine,/obj/item/ammo_magazine/m762/ext))
icon_state = "bullpup"
else
item_state = "bullpup-empty"
@@ -78,7 +78,7 @@
caliber = ".45"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
ammo_type = /obj/item/ammo_casing/a45/rubber
max_shells = 7
max_shells = 6
/obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
@@ -148,18 +148,6 @@
flick("deckard-reload",src)
..()
/obj/item/weapon/gun/projectile/revolver/capgun
name = "cap gun"
desc = "Looks almost like the real thing! Ages 8 and up."
icon_state = "revolver"
item_state = "revolver"
caliber = "caps"
origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
handle_casings = CYCLE_CASINGS
max_shells = 7
ammo_type = /obj/item/ammo_casing/cap
projectile_type = /obj/item/projectile/bullet/pistol/strong
/obj/item/weapon/gun/projectile/revolver/judge
name = "\"The Judge\""
desc = "A revolving hand-shotgun by Jindal Arms that packs the power of a 12 guage in the palm of your hand (if you don't break your wrist). Uses 12g rounds."
@@ -12,8 +12,8 @@
slot_flags = SLOT_BACK
//fire_sound = 'sound/weapons/rifleshot.ogg'
load_method = MAGAZINE // ToDo: Make it so MAGAZINE, SPEEDLOADER and SINGLE_CASING can all be used on the same gun.
magazine_type = /obj/item/ammo_magazine/m762garand
allowed_magazines = list(/obj/item/ammo_magazine/m762garand)
magazine_type = /obj/item/ammo_magazine/m762enbloc
allowed_magazines = list(/obj/item/ammo_magazine/m762enbloc)
auto_eject = 1
auto_eject_sound = 'sound/weapons/garand_ping.ogg'
+251
View File
@@ -0,0 +1,251 @@
/* Toys Guns!
*
* Contains:
* Cap Gun
* Shotgun
* Pistol
* N99 Pistol
* Levergun
* Revolver
* Big Iron
* Crossbow
* Crossbow (Halloween)
* Sawn Off
* SMG
* Laser Tag
*/
/*
* Cap Gun
*/
/obj/item/weapon/gun/projectile/revolver/capgun
name = "cap gun"
desc = "Looks almost like the real thing! Ages 8 and up."
icon = 'icons/obj/gun_toy.dmi'
icon_state = "cap_gun"
item_state = "revolver"
caliber = "caps"
origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
ammo_type = /obj/item/ammo_casing/cap
projectile_type = /obj/item/projectile/bullet/cap
matter = list(MAT_STEEL = 1000)
handle_casings = null
recoil = 1 //it's a toy
/*
* Shotgun
*/
/obj/item/weapon/gun/projectile/shotgun/pump/toy
name = "\improper Donk-Soft shotgun"
desc = "Donk-Soft foam shotgun! It's Donk or Don't! Ages 8 and up."
icon = 'icons/obj/gun_toy.dmi'
icon_state = "shotgun"
item_state = "shotgun"
max_shells = 6
w_class = ITEMSIZE_LARGE
force = 2
slot_flags = null
caliber = "foam"
origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
load_method = SINGLE_CASING
ammo_type = /obj/item/ammo_casing/afoam_dart
projectile_type = /obj/item/projectile/bullet/foam_dart
matter = list(MAT_PLASTIC = 2000)
handle_casings = null
recoil = null //it's a toy
/*
* Pistol
*/
/obj/item/weapon/gun/projectile/pistol/toy
name = "\improper Donk-Soft pistol"
desc = "Donk-Soft foam pistol! It's Donk or Don't! Ages 8 and up."
icon = 'icons/obj/gun_toy.dmi'
icon_state = "pistol"
item_state = "gun"
magazine_type = /obj/item/ammo_magazine/mfoam_dart/pistol
allowed_magazines = list(/obj/item/ammo_magazine/mfoam_dart/pistol)
projectile_type = /obj/item/projectile/bullet/foam_dart
caliber = "foam"
origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
load_method = MAGAZINE
matter = list(MAT_PLASTIC = 1000)
recoil = null //it's a toy
/obj/item/weapon/gun/projectile/pistol/toy/update_icon()
if(ammo_magazine)
icon_state = initial(icon_state)
else
icon_state = "[initial(icon_state)]-e"
/*
* N99 Pistol
*/
/obj/item/weapon/gun/projectile/pistol/toy/n99
name = "\improper Donk-Soft commemorative pistol"
desc = "A special made Donk-Soft pistol to promote 'Radius: Legend of the Demon Core', a popular post-apocolyptic TV series."
icon_state = "n99"
item_state = "gun"
/obj/item/weapon/gun/projectile/pistol/toy/n99/update_icon()
if(ammo_magazine)
icon_state = initial(icon_state)
else
icon_state = "[initial(icon_state)]-e"
/*
* Levergun
*/
/obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun
name = "\improper Donk-Soft levergun"
desc = "Donk-Soft foam levergun! Time to cowboy up! Ages 8 and up."
icon_state = "leveraction"
item_state = "leveraction"
max_shells = 5
pump_animation = "leveraction-cycling"
/*
* Revolver
*/
/obj/item/weapon/gun/projectile/revolver/toy
name = "\improper Donk-Soft revolver"
desc = "Donk-Soft foam revolver! Time to cowboy up! Ages 8 and up."
icon = 'icons/obj/gun_toy.dmi'
icon_state = "revolver"
item_state = "revolver"
caliber = "foam"
ammo_type = /obj/item/ammo_casing/afoam_dart
projectile_type = /obj/item/projectile/bullet/foam_dart
origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
load_method = SINGLE_CASING
max_shells = 6
matter = list(MAT_PLASTIC = 1000)
handle_casings = null
recoil = null //it's a toy
/*
* Big Iron
*/
/obj/item/weapon/gun/projectile/revolver/toy/big_iron
name = "\improper Donk-Soft big iron"
desc = "A special made Donk-Soft pistol to promote 'A Fistful of Phoron', a popular frontier novel series."
icon_state = "big_iron"
item_state = "revolver"
/*
* Crossbow
*/
/obj/item/weapon/gun/projectile/revolver/toy/crossbow
name = "\improper Donk-Soft crossbow"
desc = "Donk-Soft foam crossbow! It's Donk or Don't! Ages 8 and up."
icon = 'icons/obj/gun_toy.dmi'
icon_state = "foamcrossbow"
item_state = "foamcrossbow"
max_shells = 5
/*
* Crossbow (Halloween)
*/
/obj/item/weapon/gun/projectile/revolver/toy/crossbow/halloween
name = "\improper Donk-Soft special edition crossbow"
desc = "A special edition Donk-Soft crossbow! Made special for your Halloween cosplay. It's Donk or Don't! Ages 8 and up."
icon = 'icons/obj/gun_toy.dmi'
icon_state = "foamcrossbow_halloween"
item_state = "foamcrossbow_halloween"
max_shells = 5
/*
* Sawn Off
*/
/obj/item/weapon/gun/projectile/revolver/toy/sawnoff //revolver code just because it's easier
name = "\improper Donk-Soft sawn off shotgun"
desc = "Donk-Soft foam sawn off! It's Donk or Don't! Ages 8 and up."
icon = 'icons/obj/gun_toy.dmi'
icon_state = "sawnshotgun"
item_state = "dshotgun"
max_shells = 2
w_class = ITEMSIZE_NORMAL
matter = list(MAT_PLASTIC = 1500)
/*
* SMG
*/
/obj/item/weapon/gun/projectile/automatic/toy
name = "\improper Donk-Soft SMG"
desc = "Donk-Soft foam SMG! It's Donk or Don't! Ages 8 and up."
icon = 'icons/obj/gun_toy.dmi'
icon_state = "smg"
caliber = "foam"
w_class = ITEMSIZE_NORMAL
load_method = MAGAZINE
origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
slot_flags = SLOT_BELT
magazine_type = /obj/item/ammo_magazine/mfoam_dart/smg
allowed_magazines = list(/obj/item/ammo_magazine/mfoam_dart/smg)
projectile_type = /obj/item/projectile/bullet/foam_dart
matter = list(MAT_PLASTIC = 1500)
recoil = null //it's a toy
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=2, burst_accuracy=list(0,-2,-2), dispersion=null)
)
/obj/item/weapon/gun/projectile/automatic/toy/riot
magazine_type = /obj/item/ammo_magazine/mfoam_dart/smg/riot
/obj/item/weapon/gun/projectile/automatic/toy/update_icon()
if(ammo_magazine)
icon_state = initial(icon_state)
else
icon_state = "[initial(icon_state)]-e"
/*
* Laser Tag
*/
/obj/item/weapon/gun/energy/lasertag
name = "laser tag gun"
desc = "Standard issue weapon of the Imperial Guard"
icon = 'icons/obj/gun_toy.dmi'
item_state = "omnitag"
item_state = "retro"
origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2)
matter = list(MAT_STEEL = 2000)
projectile_type = /obj/item/projectile/beam/lasertag/blue
cell_type = /obj/item/weapon/cell/device/weapon/recharge
battery_lock = 1
var/required_vest
/obj/item/weapon/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M)
if(ishuman(M))
if(!istype(M.wear_suit, required_vest))
to_chat(M, "<span class='warning'>You need to be wearing your laser tag vest!</span>")
return 0
return ..()
/obj/item/weapon/gun/energy/lasertag/blue
icon_state = "bluetag"
item_state = "bluetag"
projectile_type = /obj/item/projectile/beam/lasertag/blue
required_vest = /obj/item/clothing/suit/bluetag
/obj/item/weapon/gun/energy/lasertag/blue/sub
name = "Brigader Sidearm"
desc = "A laser tag replica of the standard issue weapon for the Spacer Union Brigade from the hit series Spacer Trail (Blue Team)."
icon_state = "bluetwo"
item_state = "retro"
/obj/item/weapon/gun/energy/lasertag/red
icon_state = "redtag"
item_state = "redtag"
projectile_type = /obj/item/projectile/beam/lasertag/red
required_vest = /obj/item/clothing/suit/redtag
/obj/item/weapon/gun/energy/lasertag/red/dom
name = "Mu'tu'bi sidearm"
desc = "A laser tag replica of the Mu'tu'bi sidearm from the hit series Spacer Trail (Red Team)."
icon_state = "redtwo"
item_state = "retro"
/obj/item/weapon/gun/energy/lasertag/omni
projectile_type = /obj/item/projectile/beam/lasertag/omni
+5 -5
View File
@@ -83,10 +83,10 @@
//Misc/Polaris variables
var/def_zone = "" //Aiming at
var/mob/firer = null//Who shot it
var/silenced = 0 //Attack message
var/shot_from = "" // name of the object which shot us
var/def_zone = "" //Aiming at
var/mob/firer = null //Who shot it
var/silenced = FALSE //Attack message
var/shot_from = "" // name of the object which shot us
var/accuracy = 0
var/dispersion = 0.0
@@ -748,7 +748,7 @@
/obj/item/projectile/proc/launch_from_gun(atom/target, target_zone, mob/user, params, angle_override, forced_spread, obj/item/weapon/gun/launcher)
shot_from = launcher.name
silenced = launcher.silenced
silenced |= launcher.silenced // Silent bullets (e.g., BBs) are always silent
if(user)
firer = user
+114 -3
View File
@@ -37,6 +37,14 @@
icon_state = "laser"
damage = 15
/obj/item/projectile/beam/weaklaser/blue
icon_state = "bluelaser"
light_color = "#0066FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
tracer_type = /obj/effect/projectile/tracer/laser_blue
impact_type = /obj/effect/projectile/impact/laser_blue
/obj/item/projectile/beam/smalllaser
damage = 25
@@ -44,7 +52,7 @@
damage = 30
armor_penetration = 10
/obj/item/projectile/beam/midlaser
damage = 40
armor_penetration = 10
@@ -226,7 +234,7 @@
fire_sound = 'sound/weapons/Taser.ogg'
nodamage = 1
taser_effect = 1
agony = 40
agony = 35
damage_type = HALLOSS
light_color = "#FFFFFF"
hitsound = 'sound/weapons/zapbang.ogg'
@@ -264,6 +272,34 @@
if(A.cell)
A.cell.give(drainamt * 2)
/obj/item/projectile/beam/stun/kin21
name = "kinh21 stun beam"
icon_state = "omnilaser"
light_color = "#0000FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
/obj/item/projectile/beam/stun/blue
icon_state = "bluelaser"
light_color = "#0066FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
tracer_type = /obj/effect/projectile/tracer/laser_blue
impact_type = /obj/effect/projectile/impact/laser_blue
/obj/item/projectile/beam/disable
name = "disabler beam"
icon_state = "omnilaser"
nodamage = 1
taser_effect = 1
agony = 100 //One shot stuns for the time being until adjustments are fully made.
damage_type = HALLOSS
light_color = "#00CECE"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
/obj/item/projectile/beam/shock
name = "shock beam"
icon_state = "lightning"
@@ -282,11 +318,26 @@
damage = 5
agony = 10
/obj/item/projectile/beam/eluger
name = "laser beam"
icon_state = "xray"
light_color = "#00FF00"
muzzle_type = /obj/effect/projectile/muzzle/xray
tracer_type = /obj/effect/projectile/tracer/xray
impact_type = /obj/effect/projectile/impact/xray
/obj/item/projectile/beam/imperial
name = "laser beam"
fire_sound = 'sound/weapons/mandalorian.ogg'
icon_state = "darkb"
light_color = "#8837A3"
muzzle_type = /obj/effect/projectile/muzzle/darkmatter
tracer_type = /obj/effect/projectile/tracer/darkmatter
impact_type = /obj/effect/projectile/impact/darkmatter
//
// Projectile Beam Definitions
//
/obj/item/projectile/beam/pointdefense
name = "point defense salvo"
icon_state = "laser"
@@ -300,3 +351,63 @@
muzzle_type = /obj/effect/projectile/muzzle/pointdefense
tracer_type = /obj/effect/projectile/tracer/pointdefense
impact_type = /obj/effect/projectile/impact/pointdefense
//
// Energy Net
//
/obj/item/projectile/beam/energy_net
name = "energy net projection"
icon_state = "xray"
nodamage = 1
agony = 5
damage_type = HALLOSS
light_color = "#00CC33"
muzzle_type = /obj/effect/projectile/muzzle/xray
tracer_type = /obj/effect/projectile/tracer/xray
impact_type = /obj/effect/projectile/impact/xray
/obj/item/projectile/beam/energy_net/on_hit(var/atom/netted)
do_net(netted)
..()
/obj/item/projectile/beam/energy_net/proc/do_net(var/mob/M)
var/obj/item/weapon/energy_net/net = new (get_turf(M))
net.throw_impact(M)
//
// Healing Beam
//
/obj/item/projectile/beam/medigun
name = "healing beam"
icon_state = "healbeam"
damage = 0 //stops it damaging walls
nodamage = TRUE
no_attack_log = TRUE
damage_type = BURN
check_armour = "laser"
light_color = "#80F5FF"
combustion = FALSE
muzzle_type = /obj/effect/projectile/muzzle/medigun
tracer_type = /obj/effect/projectile/tracer/medigun
impact_type = /obj/effect/projectile/impact/medigun
/obj/item/projectile/beam/medigun/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/M = target
if(M.health < M.maxHealth)
var/obj/effect/overlay/pulse = new /obj/effect/overlay(get_turf(M))
pulse.icon = 'icons/effects/effects.dmi'
pulse.icon_state = "heal"
pulse.name = "heal"
pulse.anchored = TRUE
spawn(20)
qdel(pulse)
to_chat(target, "<span class='notice'>As the beam strikes you, your injuries close up!</span>")
M.adjustBruteLoss(-15)
M.adjustFireLoss(-15)
M.adjustToxLoss(-5)
M.adjustOxyLoss(-5)
return 1
@@ -1,85 +0,0 @@
/obj/item/projectile/beam/disable
name = "disabler beam"
icon_state = "omnilaser"
nodamage = 1
taser_effect = 1
agony = 100 //One shot stuns for the time being until adjustments are fully made.
damage_type = HALLOSS
light_color = "#00CECE"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
/obj/item/projectile/beam/stun
agony = 35
/obj/item/projectile/beam/energy_net
name = "energy net projection"
icon_state = "xray"
nodamage = 1
agony = 5
damage_type = HALLOSS
light_color = "#00CC33"
muzzle_type = /obj/effect/projectile/muzzle/xray
tracer_type = /obj/effect/projectile/tracer/xray
impact_type = /obj/effect/projectile/impact/xray
/obj/item/projectile/beam/energy_net/on_hit(var/atom/netted)
do_net(netted)
..()
/obj/item/projectile/beam/energy_net/proc/do_net(var/mob/M)
var/obj/item/weapon/energy_net/net = new (get_turf(M))
net.throw_impact(M)
/obj/item/projectile/beam/stun/blue
icon_state = "bluelaser"
light_color = "#0066FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
tracer_type = /obj/effect/projectile/tracer/laser_blue
impact_type = /obj/effect/projectile/impact/laser_blue
/obj/item/projectile/beam/weaklaser/blue
icon_state = "bluelaser"
light_color = "#0066FF"
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
tracer_type = /obj/effect/projectile/tracer/laser_blue
impact_type = /obj/effect/projectile/impact/laser_blue
/obj/item/projectile/beam/medigun
name = "healing beam"
icon_state = "healbeam"
damage = 0 //stops it damaging walls
nodamage = TRUE
no_attack_log = TRUE
damage_type = BURN
check_armour = "laser"
light_color = "#80F5FF"
combustion = FALSE
muzzle_type = /obj/effect/projectile/muzzle/medigun
tracer_type = /obj/effect/projectile/tracer/medigun
impact_type = /obj/effect/projectile/impact/medigun
/obj/item/projectile/beam/medigun/on_hit(var/atom/target, var/blocked = 0)
if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/M = target
if(M.health < M.maxHealth)
var/obj/effect/overlay/pulse = new /obj/effect/overlay(get_turf(M))
pulse.icon = 'icons/effects/effects.dmi'
pulse.icon_state = "heal"
pulse.name = "heal"
pulse.anchored = TRUE
spawn(20)
qdel(pulse)
to_chat(target, "<span class='notice'>As the beam strikes you, your injuries close up!</span>")
M.adjustBruteLoss(-15)
M.adjustFireLoss(-15)
M.adjustToxLoss(-5)
M.adjustOxyLoss(-5)
return 1
+68 -2
View File
@@ -321,6 +321,72 @@
embed_chance = 0
sharp = FALSE
/obj/item/projectile/bullet/blank/cap/process()
/* BB Rounds */
/obj/item/projectile/bullet/bb // Generic single BB
name = "BB"
damage = 0
agony = 0
embed_chance = 0
sharp = FALSE
silenced = TRUE
/obj/item/projectile/bullet/pellet/shotgun/bb // Shotgun
name = "BB"
damage = 0
agony = 0
embed_chance = 0
sharp = FALSE
pellets = 6
range_step = 1
spread_step = 10
silenced = TRUE
/* toy projectiles */
/obj/item/projectile/bullet/cap
name = "cap"
desc = "SNAP!"
damage = 0 // It's a damn toy.
embed_chance = 0
nodamage = TRUE
sharp = FALSE
damage_type = HALLOSS
impact_effect_type = null
fire_sound = 'sound/effects/snap.ogg'
combustion = FALSE
/obj/item/projectile/bullet/cap/process()
loc = null
qdel(src)
qdel(src)
/obj/item/projectile/bullet/foam_dart
name = "foam dart"
desc = "I hope you're wearing eye protection."
damage = 0 // It's a damn toy.
embed_chance = 0
nodamage = TRUE
sharp = FALSE
damage_type = HALLOSS
impact_effect_type = null
fire_sound = 'sound/items/syringeproj.ogg'
combustion = FALSE
icon = 'icons/obj/gun_toy.dmi'
icon_state = "foamdart_proj"
range = 15
/obj/item/projectile/bullet/foam_dart/on_impact(var/atom/A)
. = ..()
var/turf/T = get_turf(loc)
if(istype(T))
new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
/obj/item/projectile/bullet/foam_dart/on_range(var/atom/A)
. = ..()
var/turf/T = get_turf(loc)
if(istype(T))
new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
/obj/item/projectile/bullet/foam_dart/riot
name = "riot foam dart"
desc = "Whose smart idea was it to use toys as crowd control? Ages 18 and up."
agony = 50
icon_state = "foamdart_riot_proj"
@@ -1,29 +0,0 @@
/obj/item/projectile/bullet/pistol/rubber/strong //"rubber" bullets for revolvers and matebas
damage = 10
agony = 60
embed_chance = 0
sharp = FALSE
check_armour = "melee"
/obj/item/projectile/energy/flash/strong
name = "chemical shell"
icon_state = "bullet"
damage = 10
range = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
flash_strength = 15
brightness = 15
/obj/item/projectile/energy/electrode/stunshot/strong
name = "stunshot"
icon_state = "bullet"
damage = 10
taser_effect = 1
agony = 100
/obj/item/projectile/bullet/magnetic/flechette/small/khi
name = "small carbyne flechette"
icon_state = "flechette"
fire_sound = 'sound/weapons/rapidslice.ogg'
damage = 18
armor_penetration = 100
penetrating = 10
@@ -87,6 +87,13 @@
damage = 5
agony = 80
/obj/item/projectile/energy/electrode/stunshot/strong
name = "stunshot"
icon_state = "bullet"
damage = 10
taser_effect = 1
agony = 100
/obj/item/projectile/energy/declone
name = "declone"
icon_state = "declone"
@@ -136,6 +143,19 @@
name = "largebolt"
damage = 20
/obj/item/projectile/energy/bow
name = "engergy bolt"
icon_state = "cbbolt"
damage = 20
/obj/item/projectile/energy/bow/heavy
damage = 30
icon_state = "cbbolt"
/obj/item/projectile/energy/bow/stun
name = "stun bolt"
agony = 30
/obj/item/projectile/energy/acid //Slightly up-gunned (Read: The thing does agony and checks bio resist) variant of the simple alien mob's projectile, for queens and sentinels.
name = "acidic spit"
icon_state = "neurotoxin"
@@ -260,3 +280,23 @@
range = 10
damage = 15
SA_bonus_damage = 60 // 75 total on animals
/obj/item/projectile/energy/electrode/strong
agony = 70
/obj/item/projectile/energy
flash_strength = 10
/obj/item/projectile/energy/flash
flash_range = 1
/obj/item/projectile/energy/flash/strong
name = "chemical shell"
icon_state = "bullet"
damage = 10
range = 15 //if the shell hasn't hit anything after travelling this far it just explodes.
flash_strength = 15
brightness = 15
/obj/item/projectile/energy/flash/flare
flash_range = 2
@@ -1,25 +0,0 @@
/obj/item/projectile/energy/electrode/strong
agony = 70
/obj/item/projectile/energy
flash_strength = 10
/obj/item/projectile/energy/flash
flash_range = 1
/obj/item/projectile/energy/flash/flare
flash_range = 2
/obj/item/projectile/energy/bow
name = "engergy bolt"
icon_state = "cbbolt"
damage = 20
/obj/item/projectile/energy/bow/heavy
damage = 30
icon_state = "cbbolt"
/obj/item/projectile/energy/bow/stun
name = "stun bolt"
agony = 30
@@ -9,22 +9,30 @@
does_spin = 0
/obj/item/projectile/bullet/srmrocket/on_hit(atom/target, blocked=0)
..()
if(!isliving(target)) //if the target isn't alive, so is a wall or something
explosion(target, 0, 1, 2, 4)
else
explosion(target, 0, 0, 2, 4)
return 1
/obj/item/projectile/bullet/srmrocket/throw_impact(atom/target, var/speed)
if(!isliving(target)) //if the target isn't alive, so is a wall or something
explosion(target, 0, 1, 2, 4)
else
explosion(target, 0, 0, 2, 4)
qdel(src)
/obj/item/projectile/bullet/srmrocket/weak //Used in the jury rigged one.
damage = 10
/obj/item/projectile/bullet/srmrocket/weak/on_hit(atom/target, blocked=0)
..()
explosion(target, 0, 0, 2, 4)//No need to have a question.
return 1
/obj/item/projectile/bullet/srmrocket/weak/throw_impact(atom/target, var/speed)
explosion(target, 0, 0, 2, 4)//No need to have a question.
qdel(src)
/*Old vars here for reference.
var/devastation = 0
var/heavy_blast = 1
@@ -29,6 +29,14 @@
damage = 12
armor_penetration = 100
/obj/item/projectile/bullet/magnetic/flechette/small/khi
name = "small carbyne flechette"
icon_state = "flechette"
fire_sound = 'sound/weapons/rapidslice.ogg'
damage = 18
armor_penetration = 100
penetrating = 10
/obj/item/projectile/bullet/magnetic/flechette/hunting
name = "shredder slug"
armor_penetration = 30
@@ -179,4 +187,4 @@
explosion(A, -1, -1, 1, 3)
return ..()
else
..()
..()
@@ -87,7 +87,12 @@
new_temperature = round(new_temperature * temp_factor)
L.bodytemperature = new_temperature
//VOREStation Add Start - The last metroid has escaped from captivity, the galaxy is no longer safe.
if(istype(L, /mob/living/simple_mob/vore/alienanimals/space_jellyfish) && target_temperature <= T0C)
var/mob/living/simple_mob/vore/alienanimals/space_jellyfish/J = L
J.adjustFireLoss(75)
J.movement_cooldown *= 2
//VOREStation Add End
return 1
/obj/item/projectile/temp/hot
@@ -138,7 +143,7 @@
light_power = 0.5
light_color = "#33CC00"
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
var/lasermod = 0
combustion = FALSE
/obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0)
@@ -195,6 +200,7 @@
light_power = 0.5
light_color = "#FFFFFF"
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
var/lasermod = 0
/obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0)
var/mob/living/M = target