Polaris sync

This commit is contained in:
killer653
2017-08-06 19:07:17 -04:00
652 changed files with 44410 additions and 18080 deletions

View File

@@ -31,18 +31,18 @@
/obj/item/ammo_casing/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/screwdriver))
if(!BB)
user << "\blue There is no bullet in the casing to inscribe anything into."
user << "<font color='blue'>There is no bullet in the casing to inscribe anything into.</font>"
return
var/tmp_label = ""
var/label_text = sanitizeSafe(input(user, "Inscribe some text into \the [initial(BB.name)]","Inscription",tmp_label), MAX_NAME_LEN)
if(length(label_text) > 20)
user << "\red The inscription can be at most 20 characters long."
user << "<font color='red'>The inscription can be at most 20 characters long.</font>"
else if(!label_text)
user << "\blue You scratch the inscription off of [initial(BB)]."
user << "<font color='blue'>You scratch the inscription off of [initial(BB)].</font>"
BB.name = initial(BB.name)
else
user << "\blue You inscribe \"[label_text]\" into \the [initial(BB.name)]."
user << "<font color='blue'>You inscribe \"[label_text]\" into \the [initial(BB.name)].</font>"
BB.name = "[initial(BB.name)] (\"[label_text]\")"
/obj/item/ammo_casing/update_icon()

View File

@@ -288,104 +288,104 @@
name = "ammunition box (10mm haywire)"
ammo_type = /obj/item/ammo_casing/a10mm/emp
///////// 5.56mm /////////
///////// 5.45mm /////////
/obj/item/ammo_magazine/m556
name = "magazine (5.56mm)"
icon_state = "m556"
/obj/item/ammo_magazine/m545
name = "magazine (5.45mm)"
icon_state = "m545"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
caliber = "5.56mm"
caliber = "5.45mm"
matter = list(DEFAULT_WALL_MATERIAL = 1800)
ammo_type = /obj/item/ammo_casing/a556
ammo_type = /obj/item/ammo_casing/a545
max_ammo = 20
multiple_sprites = 1
/obj/item/ammo_magazine/m556/ext
name = "extended magazine (5.56mm)"
/obj/item/ammo_magazine/m545/ext
name = "extended magazine (5.45mm)"
matter = list(DEFAULT_WALL_MATERIAL = 2700)
max_ammo = 30
/obj/item/ammo_magazine/m556/empty
/obj/item/ammo_magazine/m545/empty
initial_ammo = 0
/obj/item/ammo_magazine/m556/ext/empty
/obj/item/ammo_magazine/m545/ext/empty
initial_ammo = 0
/obj/item/ammo_magazine/m556/practice
name = "magazine (5.56mm practice)"
ammo_type = /obj/item/ammo_casing/a556p
/obj/item/ammo_magazine/m545/practice
name = "magazine (5.45mm practice)"
ammo_type = /obj/item/ammo_casing/a545p
/obj/item/ammo_magazine/m556/practice/ext
name = "extended magazine (5.56mm practice)"
/obj/item/ammo_magazine/m545/practice/ext
name = "extended magazine (5.45mm practice)"
max_ammo = 30
/obj/item/ammo_magazine/m556/ap
name = "magazine (5.56mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a556/ap
/obj/item/ammo_magazine/m545/ap
name = "magazine (5.45mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a545/ap
/obj/item/ammo_magazine/m556/ap/ext
name = "extended magazine (5.56mm armor-piercing)"
/obj/item/ammo_magazine/m545/ap/ext
name = "extended magazine (5.45mm armor-piercing)"
max_ammo = 30
/obj/item/ammo_magazine/m556/small
name = "reduced magazine (5.56mm)"
icon_state = "m556-small"
/obj/item/ammo_magazine/m545/small
name = "reduced magazine (5.45mm)"
icon_state = "m545-small"
matter = list(DEFAULT_WALL_MATERIAL = 900)
max_ammo = 10
/obj/item/ammo_magazine/m556/small/empty
/obj/item/ammo_magazine/m545/small/empty
initial_ammo = 0
/obj/item/ammo_magazine/m556/small/practice
name = "magazine (5.56mm practice)"
ammo_type = /obj/item/ammo_casing/a556p
/obj/item/ammo_magazine/m545/small/practice
name = "magazine (5.45mm practice)"
ammo_type = /obj/item/ammo_casing/a545p
/obj/item/ammo_magazine/m556/small/ap
name = "magazine (5.56mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a556/ap
/obj/item/ammo_magazine/m545/small/ap
name = "magazine (5.45mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a545/ap
/obj/item/ammo_magazine/clip/c556
name = "ammo clip (5.56mm)"
/obj/item/ammo_magazine/clip/c545
name = "ammo clip (5.45mm)"
icon_state = "clip_rifle"
caliber = "5.56mm"
ammo_type = /obj/item/ammo_casing/a556
caliber = "5.45mm"
ammo_type = /obj/item/ammo_casing/a545
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/c556/ap
name = "rifle clip (5.56mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a556/ap
/obj/item/ammo_magazine/clip/c545/ap
name = "rifle clip (5.45mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a545/ap
/obj/item/ammo_magazine/clip/c556/practice
name = "rifle clip (5.56mm practice)"
ammo_type = /obj/item/ammo_casing/a556
/obj/item/ammo_magazine/clip/c545/practice
name = "rifle clip (5.45mm practice)"
ammo_type = /obj/item/ammo_casing/a545
/obj/item/ammo_magazine/m556saw
name = "magazine box (5.56mm)"
icon_state = "a556"
/obj/item/ammo_magazine/m545saw
name = "magazine box (5.45mm)"
icon_state = "a545"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
caliber = "5.56mm"
caliber = "5.45mm"
matter = list(DEFAULT_WALL_MATERIAL = 10000)
ammo_type = /obj/item/ammo_casing/a556
ammo_type = /obj/item/ammo_casing/a545
w_class = ITEMSIZE_NORMAL // This should NOT fit in your pocket!!
max_ammo = 50
multiple_sprites = 1
/obj/item/ammo_magazine/m556saw/ap
name = "magazine box (5.56mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a556/ap
/obj/item/ammo_magazine/m545saw/ap
name = "magazine box (5.45mm armor-piercing)"
ammo_type = /obj/item/ammo_casing/a545/ap
/obj/item/ammo_magazine/m556saw/empty
/obj/item/ammo_magazine/m545saw/empty
initial_ammo = 0
///////// .44 Magnum /////////
/obj/item/ammo_magazine/m44
name = "magazine (.44)"
icon_state = "44" // Vorestation Hotfix
icon_state = "44"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
caliber = ".44"
@@ -467,7 +467,7 @@
icon_state = "12g"
mag_type = MAGAZINE
caliber = "12g"
matter = list(DEFAULT_WALL_MATERIAL = 2200)
matter = list(DEFAULT_WALL_MATERIAL = 13000) //did the math. now fixed the exploityness of this thing. Have fun!
ammo_type = /obj/item/ammo_casing/a12g
max_ammo = 24
multiple_sprites = 1
@@ -511,4 +511,32 @@
ammo_type = /obj/item/ammo_casing/cap
matter = list(DEFAULT_WALL_MATERIAL = 600)
max_ammo = 7
multiple_sprites = 1
multiple_sprites = 1
/obj/item/ammo_magazine/clip/c12g
name = "ammo clip (12g slug)"
icon_state = "12gclip_s" //largely a codersprite, looks good enough. feel free to make a better one.
desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with slugs."
caliber = "12g"
ammo_type = /obj/item/ammo_casing/a12g
matter = list(DEFAULT_WALL_MATERIAL = 1790) // slugs shells x4 + 350 metal for the clip itself.
max_ammo = 4
/obj/item/ammo_magazine/clip/c12g/pellet
name = "ammo clip (12g buckshot)"
icon_state = "12gclip_p"
desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with buckshot."
ammo_type = /obj/item/ammo_casing/a12g/pellet
matter = list(DEFAULT_WALL_MATERIAL = 1790) // buckshot and slugs cost the same
/obj/item/ammo_magazine/clip/c12g/beanbag
name = "ammo clip (12g beanbag)"
icon_state = "12gclip_bean"
desc = "A color-coded metal clip for holding and quickly loading shotgun shells. This one is loaded with beanbags."
ammo_type = /obj/item/ammo_casing/a12g/beanbag
matter = list(DEFAULT_WALL_MATERIAL = 1070) //beanbags x4 + 350 metal

View File

@@ -270,33 +270,33 @@
matter = list(DEFAULT_WALL_MATERIAL = 1250)
/*
* 5.56mm
* 5.45mm
*/
/obj/item/ammo_casing/a556
desc = "A 5.56mm bullet casing."
caliber = "5.56mm"
/obj/item/ammo_casing/a545
desc = "A 5.45mm bullet casing."
caliber = "5.45mm"
icon_state = "rifle-casing"
projectile_type = /obj/item/projectile/bullet/rifle/a556
projectile_type = /obj/item/projectile/bullet/rifle/a545
/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/a545/ap
desc = "A 5.45mm armor-piercing bullet casing."
projectile_type = /obj/item/projectile/bullet/rifle/a545/ap
/obj/item/ammo_casing/a556p
desc = "A 5.56mm practice bullet casing."
caliber = "5.56mm"
/obj/item/ammo_casing/a545p
desc = "A 5.45mm practice bullet casing."
caliber = "5.45mm"
icon_state = "rifle-casing" // Need to make an icon for these
projectile_type = /obj/item/projectile/bullet/rifle/practice
/obj/item/ammo_casing/a556/blank
desc = "A blank 5.56mm bullet casing."
/obj/item/ammo_casing/a545/blank
desc = "A blank 5.45mm bullet casing."
projectile_type = /obj/item/projectile/bullet/blank
matter = list(DEFAULT_WALL_MATERIAL = 90)
/obj/item/ammo_casing/a556/hp
desc = "A 5.56mm hollow-point bullet casing."
projectile_type = /obj/item/projectile/bullet/rifle/a556/hollow
/obj/item/ammo_casing/a545/hp
desc = "A 5.45mm hollow-point bullet casing."
projectile_type = /obj/item/projectile/bullet/rifle/a545/hollow
/*
* Misc

View File

@@ -238,7 +238,8 @@
if(istype(A, /obj/item/weapon/screwdriver))
if(dna_lock && attached_lock && !attached_lock.controller_lock)
user << "<span class='notice'>You begin removing \the [attached_lock] from \the [src].</span>"
if(do_after(user, 25))
playsound(src, A.usesound, 50, 1)
if(do_after(user, 25 * A.toolspeed))
user << "<span class='notice'>You remove \the [attached_lock] from \the [src].</span>"
user.put_in_hands(attached_lock)
dna_lock = 0
@@ -576,9 +577,9 @@
var/mob/living/carbon/human/M = user
mouthshoot = 1
M.visible_message("\red [user] sticks their gun in their mouth, ready to pull the trigger...")
M.visible_message("<font color='red'>[user] sticks their gun in their mouth, ready to pull the trigger...</font>")
if(!do_after(user, 40))
M.visible_message("\blue [user] decided life was worth living")
M.visible_message("<font color='blue'>[user] decided life was worth living</font>")
mouthshoot = 0
return
var/obj/item/projectile/in_chamber = consume_next_projectile()

View File

@@ -6,12 +6,12 @@
fire_sound = 'sound/weapons/Taser.ogg'
fire_delay = 10 // Handguns should be inferior to two-handed weapons.
projectile_type = /obj/item/projectile/beam/stun
projectile_type = /obj/item/projectile/beam/stun/med
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
modifystate = "energystun"
firemodes = list(
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="energystun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 240),
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="energystun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 240),
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="energykill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 480),
)
@@ -50,6 +50,7 @@
name = "advanced energy gun"
desc = "An energy gun with an experimental miniaturized reactor."
icon_state = "nucgunstun"
projectile_type = /obj/item/projectile/beam/stun
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3)
slot_flags = SLOT_BELT
force = 8 //looks heavier than a pistol

View File

@@ -16,7 +16,7 @@
//Override this to avoid a runtime with suicide handling.
/obj/item/weapon/gun/launcher/handle_suicide(mob/living/user)
user << "\red Shooting yourself with \a [src] is pretty tricky. You can't seem to manage it."
user << "<font color='red'>Shooting yourself with \a [src] is pretty tricky. You can't seem to manage it.</font>"
return
/obj/item/weapon/gun/launcher/proc/update_release_force(obj/item/projectile)

View File

@@ -167,6 +167,7 @@
var/obj/item/C = cell
C.loc = get_turf(user)
user << "<span class='notice'>You jimmy [cell] out of [src] with [W].</span>"
playsound(src, W.usesound, 50, 1)
cell = null
else
user << "<span class='notice'>[src] doesn't have a cell installed.</span>"
@@ -231,7 +232,7 @@
var/obj/item/weapon/weldingtool/T = W
if(T.remove_fuel(0,user))
if(!src || !T.isOn()) return
playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
playsound(src, W.usesound, 50, 1)
user << "<span class='notice'>You weld the rods into place.</span>"
buildstate++
update_icon()
@@ -267,6 +268,7 @@
else if(istype(W,/obj/item/weapon/screwdriver))
if(buildstate == 5)
user << "<span class='notice'>You secure the crossbow's various parts.</span>"
playsound(src, W.usesound, 50, 1)
new /obj/item/weapon/gun/launcher/crossbow(get_turf(src))
qdel(src)
return

View File

@@ -191,7 +191,7 @@
var/obj/item/weapon/weldingtool/T = W
if(T.remove_fuel(0,user))
if(!src || !T.isOn()) return
playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
playsound(src, W.usesound, 100, 1)
user << "<span class='notice'>You weld the pipe into place.</span>"
buildstate++
update_icon()
@@ -199,7 +199,7 @@
var/obj/item/weapon/weldingtool/T = W
if(T.remove_fuel(0,user))
if(!src || !T.isOn()) return
playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
playsound(src, W.usesound, 100, 1)
user << "<span class='notice'>You weld the metal chassis together.</span>"
buildstate++
update_icon()
@@ -207,7 +207,7 @@
var/obj/item/weapon/weldingtool/T = W
if(T.remove_fuel(0,user))
if(!src || !T.isOn()) return
playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
playsound(src, W.usesound, 100, 1)
user << "<span class='notice'>You weld the valve into place.</span>"
new /obj/item/weapon/gun/launcher/pneumatic(get_turf(src))
qdel(src)

View File

@@ -20,7 +20,7 @@
/obj/item/weapon/gun/launcher/rocket/examine(mob/user)
if(!..(user, 2))
return
user << "\blue [rockets.len] / [max_rockets] rockets."
user << "<font color='blue'>[rockets.len] / [max_rockets] rockets.</font>"
/obj/item/weapon/gun/launcher/rocket/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/ammo_casing/rocket))
@@ -28,10 +28,10 @@
user.drop_item()
I.loc = src
rockets += I
user << "\blue You put the rocket in [src]."
user << "\blue [rockets.len] / [max_rockets] rockets."
user << "<font color='blue'>You put the rocket in [src].</font>"
user << "<font color='blue'>[rockets.len] / [max_rockets] rockets.</font>"
else
usr << "\red [src] cannot hold more rockets."
usr << "<font color='red'>[src] cannot hold more rockets.</font>"
/obj/item/weapon/gun/launcher/rocket/consume_next_projectile()
if(rockets.len)

View File

@@ -32,13 +32,14 @@
//var/list/icon_keys = list() //keys
//var/list/ammo_states = list() //values
/obj/item/weapon/gun/projectile/New()
/obj/item/weapon/gun/projectile/New(loc, var/starts_loaded = 1)
..()
if(ispath(ammo_type) && (load_method & (SINGLE_CASING|SPEEDLOADER)))
for(var/i in 1 to max_shells)
loaded += new ammo_type(src)
if(ispath(magazine_type) && (load_method & MAGAZINE))
ammo_magazine = new magazine_type(src)
if(starts_loaded)
if(ispath(ammo_type) && (load_method & (SINGLE_CASING|SPEEDLOADER)))
for(var/i in 1 to max_shells)
loaded += new ammo_type(src)
if(ispath(magazine_type) && (load_method & MAGAZINE))
ammo_magazine = new magazine_type(src)
update_icon()
/obj/item/weapon/gun/projectile/consume_next_projectile()

View File

@@ -51,17 +51,17 @@
/obj/item/weapon/gun/projectile/automatic/sts35
name = "assault rifle"
desc = "The rugged STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 5.56mm rounds. This one is unmarked."
desc = "The rugged STS-35 is a durable automatic weapon of a make popular on the frontier worlds. Uses 5.45mm rounds. This one is unmarked."
icon_state = "arifle"
item_state = null
w_class = ITEMSIZE_LARGE
force = 10
caliber = "5.56mm"
caliber = "5.45mm"
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/m556
allowed_magazines = list(/obj/item/ammo_magazine/m556)
magazine_type = /obj/item/ammo_magazine/m545
allowed_magazines = list(/obj/item/ammo_magazine/m545)
one_handed_penalty = 4
@@ -73,7 +73,7 @@
/obj/item/weapon/gun/projectile/automatic/sts35/update_icon(var/ignore_inhands)
..()
if(istype(ammo_magazine,/obj/item/ammo_magazine/m556/small))
if(istype(ammo_magazine,/obj/item/ammo_magazine/m545/small))
icon_state = "arifle-small" // If using the small magazines, use the small magazine sprite.
else
icon_state = (ammo_magazine)? "arifle" : "arifle-empty"
@@ -111,7 +111,6 @@
force = 10
caliber = "7.62mm"
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3)
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
@@ -181,14 +180,13 @@
force = 10
slot_flags = 0
max_shells = 50
caliber = "5.56mm"
caliber = "5.45mm"
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2)
slot_flags = SLOT_BACK
ammo_type = "/obj/item/ammo_casing/a556" // Is this really needed anymore?
fire_sound = 'sound/weapons/machinegun.ogg'
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/m556saw
allowed_magazines = list(/obj/item/ammo_magazine/m556saw, /obj/item/ammo_magazine/m556)
magazine_type = /obj/item/ammo_magazine/m545saw
allowed_magazines = list(/obj/item/ammo_magazine/m545saw, /obj/item/ammo_magazine/m545)
one_handed_penalty = 6
@@ -345,7 +343,7 @@
/obj/item/weapon/gun/projectile/automatic/carbine // Admin abuse assault rifle. ToDo: Make this less shit. Maybe remove its autofire, and make it spawn with only 10 rounds at start.
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."
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.45mm rounds."
icon_state = "bullpup"
item_state = "bullpup"
w_class = ITEMSIZE_LARGE

View File

@@ -19,7 +19,7 @@
/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 5.56mm rounds."
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

View File

@@ -0,0 +1,42 @@
/obj/item/weapon/gun/projectile/contender
name = "Thompson Contender"
desc = "A perfect, pristine replica of an ancient one-shot hand-cannon. For when you really want to make a hole. This one has been modified to work almost like a bolt-action. Uses .357 rounds."
icon_state = "pockrifle"
var/icon_retracted = "pockrifle-empty"
item_state = "revolver"
caliber = ".357"
handle_casings = HOLD_CASINGS
max_shells = 1
ammo_type = /obj/item/ammo_casing/a357
var/retracted_bolt = 0
load_method = SINGLE_CASING
/obj/item/weapon/gun/projectile/contender/attack_self(mob/user as mob)
if(chambered)
chambered.loc = get_turf(src)
chambered = null
var/obj/item/ammo_casing/C = loaded[1]
loaded -= C
if(!retracted_bolt)
to_chat(user, "<span class='notice'>You cycle back the bolt on [src], ejecting the casing and allowing you to reload.</span>")
icon_state = icon_retracted
retracted_bolt = 1
return 1
else if(retracted_bolt && loaded.len)
to_chat(user, "<span class='notice'>You cycle the loaded round into the chamber, allowing you to fire.</span>")
else
to_chat(user, "<span class='notice'>You cycle the boly back into position, leaving the gun empty.</span>")
icon_state = initial(icon_state)
retracted_bolt = 0
/obj/item/weapon/gun/projectile/contender/load_ammo(var/obj/item/A, mob/user)
if(!retracted_bolt)
to_chat(user, "<span class='notice'>You can't load [src] without cycling the bolt.</span>")
return
..()
/obj/item/weapon/gun/projectile/contender/tacticool
desc = "A modified replica of an ancient one-shot hand-cannon, reinvented with a tactical look. For when you really want to make a hole. This one has been modified to work almost like a bolt-action. Uses .357 rounds."
icon_state = "pockrifle_b"
icon_retracted = "pockrifle_b-empty"

View File

@@ -96,25 +96,25 @@
// return
..()
if (beakers.len)
user << "\blue [src] contains:"
user << "<font color='blue'>[src] contains:</font>"
for(var/obj/item/weapon/reagent_containers/glass/beaker/B in beakers)
if(B.reagents && B.reagents.reagent_list.len)
for(var/datum/reagent/R in B.reagents.reagent_list)
user << "\blue [R.volume] units of [R.name]"
user << "<font color='blue'>[R.volume] units of [R.name]</font>"
/obj/item/weapon/gun/projectile/dartgun/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/reagent_containers/glass))
if(!istype(I, container_type))
user << "\blue [I] doesn't seem to fit into [src]."
user << "<font color='blue'>[I] doesn't seem to fit into [src].</font>"
return
if(beakers.len >= max_beakers)
user << "\blue [src] already has [max_beakers] beakers in it - another one isn't going to fit!"
user << "<font color='blue'>[src] already has [max_beakers] beakers in it - another one isn't going to fit!</font>"
return
var/obj/item/weapon/reagent_containers/glass/beaker/B = I
user.drop_item()
B.loc = src
beakers += B
user << "\blue You slot [B] into [src]."
user << "<font color='blue'>You slot [B] into [src].</font>"
src.updateUsrDialog()
return 1
..()

View File

@@ -268,7 +268,7 @@
/obj/item/ammo_casing/a12g/stunshell = "12g",
/obj/item/ammo_casing/a12g/flash = "12g",
/obj/item/ammo_casing/a762 = "7.62mm",
/obj/item/ammo_casing/a556 = "5.56mm"
/obj/item/ammo_casing/a545 = "5.45mm"
)
/obj/item/weapon/gun/projectile/pirate/New()

View File

@@ -45,7 +45,7 @@
icon_state = "detective"
caliber = ".38"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/Gunshot_light.ogg'
fire_sound = 'sound/weapons/semiauto.ogg'
ammo_type = /obj/item/ammo_casing/a38
/obj/item/weapon/gun/projectile/revolver/detective/verb/rename_gun()
@@ -73,7 +73,7 @@
icon_state = "deckard-empty"
caliber = ".38"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/Gunshot_light.ogg'
fire_sound = 'sound/weapons/semiauto.ogg'
ammo_type = /obj/item/ammo_casing/a38
/obj/item/weapon/gun/projectile/revolver/deckard/emp
@@ -124,6 +124,7 @@
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
max_shells = 9
fire_sound = 'sound/weapons/semiauto.ogg'
caliber = ".38"
ammo_type = /obj/item/ammo_casing/a38
var/secondary_max_shells = 1
@@ -155,6 +156,7 @@
if(caliber && secondary_caliber)
caliber = secondary_caliber
fire_sound = 'sound/weapons/shotgun.ogg'
if(ammo_type && secondary_ammo_type)
ammo_type = secondary_ammo_type
@@ -171,6 +173,7 @@
if(caliber && secondary_caliber)
caliber = initial(caliber)
fire_sound = initial(fire_sound)
if(ammo_type && secondary_ammo_type)
ammo_type = initial(ammo_type)

View File

@@ -10,7 +10,7 @@
slot_flags = SLOT_BACK
caliber = "12g"
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
load_method = SINGLE_CASING
load_method = SINGLE_CASING|SPEEDLOADER
ammo_type = /obj/item/ammo_casing/a12g/beanbag
handle_casings = HOLD_CASINGS
fire_sound = 'sound/weapons/shotgun.ogg'
@@ -49,6 +49,7 @@
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
max_shells = 7 //match the ammo box capacity, also it can hold a round in the chamber anyways, for a total of 8.
ammo_type = /obj/item/ammo_casing/a12g
load_method = SINGLE_CASING|SPEEDLOADER
/obj/item/weapon/gun/projectile/shotgun/doublebarrel
name = "double-barreled shotgun"

View File

@@ -0,0 +1,176 @@
////////////// PTR-7 Anti-Materiel Rifle //////////////
/obj/item/weapon/gun/projectile/heavysniper/collapsible
/obj/item/weapon/gun/projectile/heavysniper/collapsible/verb/take_down()
set category = "Object"
set name = "Disassemble Rifle"
var/mob/living/carbon/human/user = usr
if(user.stat)
return
if(chambered)
to_chat(user, "<span class='warning'>You need to empty the rifle to break it down.</span>")
else
collapse_rifle(user)
/obj/item/weapon/gun/projectile/heavysniper/proc/collapse_rifle(mob/user)
to_chat(user, "<span class='warning'>You begin removing \the [src]'s barrel.</span>")
if(do_after(user, 40))
if(user.unEquip(src, force=1))
to_chat(user, "<span class='warning'>You remove \the [src]'s barrel.</span>")
qdel(src)
var/obj/item/barrel = new /obj/item/sniper_rifle_part/barrel(user)
var/obj/item/sniper_rifle_part/assembly = new /obj/item/sniper_rifle_part/trigger_group(user)
var/obj/item/sniper_rifle_part/stock/stock = new(assembly)
assembly.stock = stock
assembly.part_count = 2
assembly.update_build()
user.put_in_any_hand_if_possible(assembly) || assembly.dropInto(user.loc)
user.put_in_any_hand_if_possible(barrel) || barrel.dropInto(user.loc)
/obj/item/sniper_rifle_part
name = "AM rifle part"
desc = "A part of an antimateriel rifle."
w_class = ITEMSIZE_NORMAL
icon = 'icons/obj/gun.dmi'
var/obj/item/sniper_rifle_part/barrel = null
var/obj/item/sniper_rifle_part/stock = null
var/obj/item/sniper_rifle_part/trigger_group = null
var/part_count = 1
/obj/item/sniper_rifle_part/barrel
name = "AM rifle barrel"
icon_state = "heavysniper-barrel"
/obj/item/sniper_rifle_part/barrel/New()
..()
barrel = src
/obj/item/sniper_rifle_part/stock
name = "AM rifle stock"
icon_state = "heavysniper-stock"
/obj/item/sniper_rifle_part/stock/New()
..()
stock = src
/obj/item/sniper_rifle_part/trigger_group
name = "AM rifle trigger assembly"
icon_state = "heavysniper-trig"
/obj/item/sniper_rifle_part/trigger_group/New()
..()
trigger_group = src
/obj/item/sniper_rifle_part/attack_self(mob/user as mob)
if(part_count == 1)
to_chat(user, "<span class='warning'>You can't disassemble this further!</span>")
return
to_chat(user, "<span class='notice'>You start disassembling \the [src].</span>")
if(!do_after(user, 40))
return
to_chat(user, "<span class='notice'>You disassemble \the [src].</span>")
for(var/obj/item/sniper_rifle_part/P in list(barrel, stock, trigger_group))
if(P.barrel != P)
P.barrel = null
if(P.stock != P)
P.stock = null
if(P.trigger_group != P)
P.trigger_group = null
if(P != src)
user.put_in_any_hand_if_possible(P) || P.dropInto(loc)
P.part_count = 1
update_build()
/obj/item/sniper_rifle_part/attackby(var/obj/item/sniper_rifle_part/A as obj, mob/user as mob)
to_chat(user, "<span class='notice'>You begin adding \the [A] to \the [src].</span>")
if(!do_after(user, 30))
return
if(istype(A, /obj/item/sniper_rifle_part/trigger_group))
if(A.part_count > 1 && src.part_count > 1)
to_chat(user, "<span class='warning'>Disassemble one of these parts first!</span>")
return
if(!trigger_group)
if(user.unEquip(A, force=1))
trigger_group = A
else
to_chat(user, "<span class='warning'>There's already a trigger group!</span>")
return
else if(istype(A, /obj/item/sniper_rifle_part/barrel))
if(!barrel)
if(user.unEquip(A, force=1))
barrel = A
else
to_chat(user, "<span class='warning'>There's already a barrel!</span>")
return
else if(istype(A, /obj/item/sniper_rifle_part/stock))
if(!stock)
if(user.unEquip(A, force=1))
stock = A
else
to_chat(user, "<span class='warning'>There's already a stock!</span>")
return
A.forceMove(src)
to_chat(user, "<span class='notice'>You install \the [A].</span>")
if(A.barrel && !src.barrel)
src.barrel = A.barrel
if(A.stock && !src.stock)
src.stock = A.stock
if(A.trigger_group && !src.trigger_group)
src.trigger_group = A.trigger_group
part_count = A.part_count + src.part_count
update_build(user)
/obj/item/sniper_rifle_part/proc/update_build()
switch(part_count)
if(1)
name = initial(name)
w_class = ITEMSIZE_NORMAL
icon_state = initial(icon_state)
if(2)
if(barrel && trigger_group)
name = "AM rifle barrel-trigger assembly"
icon_state = "heavysniper-trigbar"
else if(stock && trigger_group)
name = "AM rifle stock-trigger assembly"
icon_state = "heavysniper-trigstock"
else if(stock && barrel)
name = "AM rifle stock-barrel assembly"
icon_state = "heavysniper-barstock"
w_class = ITEMSIZE_LARGE
if(3)
var/obj/item/weapon/gun/projectile/heavysniper/collapsible/gun = new (get_turf(src), 0)
if(usr && istype(usr, /mob/living/carbon/human))
var/mob/living/carbon/human/user = usr
user.unEquip(src, force=1)
user.put_in_any_hand_if_possible(gun) || gun.dropInto(loc)
qdel(src)
/obj/item/weapon/gun/projectile/heavysniper/update_icon()
if(bolt_open)
icon_state = "heavysniper-open"
else
icon_state = "heavysniper"

View File

@@ -182,3 +182,8 @@
name = "weak stun beam"
icon_state = "stun"
agony = 25
/obj/item/projectile/beam/stun/med
name = "stun beam"
icon_state = "stun"
agony = 35

View File

@@ -209,14 +209,14 @@
armor_penetration = -50
penetrating = 0
/obj/item/projectile/bullet/rifle/a556
/obj/item/projectile/bullet/rifle/a545
damage = 25
/obj/item/projectile/bullet/rifle/a556/ap
/obj/item/projectile/bullet/rifle/a545/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/hollow
/obj/item/projectile/bullet/rifle/a545/hollow
damage = 35
armor_penetration = -50
penetrating = 0

View File

@@ -99,10 +99,10 @@
M.apply_effect((rand(30,80)),IRRADIATE)
M.Weaken(5)
for (var/mob/V in viewers(src))
V.show_message("\red [M] writhes in pain as \his vacuoles boil.", 3, "\red You hear the crunching of leaves.", 2)
V.show_message("<font color='red'>[M] writhes in pain as \his vacuoles boil.</font>", 3, "<font color='red'>You hear the crunching of leaves.</font>", 2)
if(prob(35))
// for (var/mob/V in viewers(src)) //Public messages commented out to prevent possible metaish genetics experimentation and stuff. - Cheridan
// V.show_message("\red [M] is mutated by the radiation beam.", 3, "\red You hear the snapping of twigs.", 2)
// V.show_message("<font color='red'>[M] is mutated by the radiation beam.</font>", 3, "<font color='red'> You hear the snapping of twigs.</font>", 2)
if(prob(80))
randmutb(M)
domutcheck(M,null)
@@ -111,13 +111,13 @@
domutcheck(M,null)
else
M.adjustFireLoss(rand(5,15))
M.show_message("\red The radiation beam singes you!")
M.show_message("<font color='red'>The radiation beam singes you!</font>")
// for (var/mob/V in viewers(src))
// V.show_message("\red [M] is singed by the radiation beam.", 3, "\red You hear the crackle of burning leaves.", 2)
// V.show_message("<font color='red'>[M] is singed by the radiation beam.</font>", 3, "<font color='red'> You hear the crackle of burning leaves.</font>", 2)
else if(istype(target, /mob/living/carbon/))
// for (var/mob/V in viewers(src))
// V.show_message("The radiation beam dissipates harmlessly through [M]", 3)
M.show_message("\blue The radiation beam dissipates harmlessly through your body.")
M.show_message("<font color='blue'>The radiation beam dissipates harmlessly through your body.</font>")
else
return 1
@@ -148,7 +148,7 @@
if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
M.nutrition += 30
else if (istype(target, /mob/living/carbon/))
M.show_message("\blue The radiation beam dissipates harmlessly through your body.")
M.show_message("<font color='blue'>The radiation beam dissipates harmlessly through your body.</font>")
else
return 1