mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 03:02:54 +00:00
Polaris sync
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
42
code/modules/projectiles/guns/projectile/contender.dm
Normal file
42
code/modules/projectiles/guns/projectile/contender.dm
Normal 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"
|
||||
@@ -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
|
||||
..()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user