mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Gun Refactors and Changes
- The Protector is now a minature energy gun, it has 3 lethal, 6 standard stun, and no special stun shot anymore. It retains the alert level lock, there is a version without the lock. - The energy net gun now gets 3 net shots, but loses its stun alternate fire. It also gets a new sprite from baystation. - Refactors all Vorestation weapons in vore/fluffstuff to be in their appropriate directories. - Removes all personalized custom weapons. - KHI is no longer the manufacturer for the Protector, Net Gun, and AR Glasses. I wanted to make KHI a bit rarer, and their specialty mainly ultra high tech equipment. - Refactors Expedition Phasers. No practical change, but now there are unlocked versions of all three phaser variants.
This commit is contained in:
115
code/modules/projectiles/guns/energy/bsharpoon_vr.dm
Normal file
115
code/modules/projectiles/guns/energy/bsharpoon_vr.dm
Normal file
@@ -0,0 +1,115 @@
|
||||
//RD 'gun'
|
||||
/obj/item/weapon/bluespace_harpoon
|
||||
name = "bluespace harpoon"
|
||||
desc = "For climbing on bluespace mountains!"
|
||||
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "harpoon-2"
|
||||
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
origin_tech = list(TECH_BLUESPACE = 5)
|
||||
|
||||
var/mode = 1 // 1 mode - teleport you to turf 0 mode teleport turf to you
|
||||
var/last_fire = 0
|
||||
var/transforming = 0
|
||||
|
||||
/obj/item/weapon/bluespace_harpoon/afterattack(atom/A, mob/user as mob)
|
||||
var/current_fire = world.time
|
||||
if(!user || !A)
|
||||
return
|
||||
if(transforming)
|
||||
to_chat(user,"<span class = 'warning'>You can't fire while \the [src] transforming!</span>")
|
||||
return
|
||||
if(!(current_fire - last_fire >= 30 SECONDS))
|
||||
to_chat(user,"<span class = 'warning'>\The [src] is recharging...</span>")
|
||||
return
|
||||
if(is_jammed(A) || is_jammed(user))
|
||||
to_chat(user,"<span class = 'warning'>\The [src] shot fizzles due to interference!</span>")
|
||||
last_fire = current_fire
|
||||
playsound(user, 'sound/weapons/wave.ogg', 60, 1)
|
||||
return
|
||||
var/turf/T = get_turf(A)
|
||||
if(!T || (T.check_density() && 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)
|
||||
if(ownturf.z != T.z || get_dist(T,ownturf) > world.view)
|
||||
to_chat(user, "<span class='warning'>The target is out of range!</span>")
|
||||
return
|
||||
if(get_area(A).flags & BLUE_SHIELDED)
|
||||
to_chat(user, "<span class='warning'>The target area protected by bluespace shielding!</span>")
|
||||
return
|
||||
if(!(A in view(user, world.view)))
|
||||
to_chat(user, "<span class='warning'>Harpoon fails to lock on the obstructed target!</span>")
|
||||
return
|
||||
|
||||
last_fire = current_fire
|
||||
playsound(user, 'sound/weapons/wave.ogg', 60, 1)
|
||||
|
||||
user.visible_message("<span class='warning'>[user] fires \the [src]!</span>","<span class='warning'>You fire \the [src]!</span>")
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(4, 1, A)
|
||||
s.start()
|
||||
s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(4, 1, user)
|
||||
s.start()
|
||||
|
||||
var/turf/FromTurf = mode ? get_turf(user) : get_turf(A)
|
||||
var/turf/ToTurf = mode ? get_turf(A) : get_turf(user)
|
||||
|
||||
var/recievefailchance = 5
|
||||
var/sendfailchance = 5
|
||||
if(istype(user, /mob/living))
|
||||
var/mob/living/L = user
|
||||
if(LAZYLEN(L.buckled_mobs))
|
||||
for(var/rider in L.buckled_mobs)
|
||||
sendfailchance += 15
|
||||
|
||||
if(mode)
|
||||
if(user in FromTurf)
|
||||
if(prob(sendfailchance))
|
||||
user.forceMove(pick(trange(24,user)))
|
||||
else
|
||||
user.forceMove(ToTurf)
|
||||
else
|
||||
for(var/obj/O in FromTurf)
|
||||
if(O.anchored) continue
|
||||
if(prob(recievefailchance))
|
||||
O.forceMove(pick(trange(24,user)))
|
||||
else
|
||||
O.forceMove(ToTurf)
|
||||
|
||||
for(var/mob/living/M in FromTurf)
|
||||
if(prob(recievefailchance))
|
||||
M.forceMove(pick(trange(24,user)))
|
||||
else
|
||||
M.forceMove(ToTurf)
|
||||
|
||||
/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 category = "Object"
|
||||
set src in oview(1)
|
||||
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/update_icon()
|
||||
if(transforming)
|
||||
switch(mode)
|
||||
if(0)
|
||||
flick("harpoon-2-change", src)
|
||||
icon_state = "harpoon-1"
|
||||
if(1)
|
||||
flick("harpoon-1-change",src)
|
||||
icon_state = "harpoon-2"
|
||||
transforming = 0
|
||||
@@ -0,0 +1,282 @@
|
||||
// The Gun //
|
||||
/obj/item/weapon/gun/projectile/cell_loaded //this one can load both medical and security cells! for ERT/admin use.
|
||||
name = "multipurpose cell-loaded revolver"
|
||||
desc = "Variety is the spice of life! This weapon is a hybrid of the KHI-102b 'Nanotech Selectable-Fire Weapon' and the Vey-Med ML-3 'Medigun', dubbed the 'NSFW-ML3M'. \
|
||||
It can fire both harmful and healing cells with an internal nanite fabricator and energy weapon cell loader. Up to three combinations of \
|
||||
energy beams can be configured at once. Ammo not included."
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
|
||||
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
icon_state = "nsfw"
|
||||
|
||||
icon_override = 'icons/vore/custom_guns_vr.dmi'
|
||||
item_state = "gun"
|
||||
|
||||
caliber = "nsfw"
|
||||
|
||||
origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 6, TECH_MAGNETS = 4)
|
||||
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
|
||||
load_method = MAGAZINE //Nyeh heh hehhh.
|
||||
magazine_type = null
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/cell_mag)
|
||||
handle_casings = HOLD_CASINGS //Don't eject batteries!
|
||||
recoil = 0
|
||||
var/charge_left = 0
|
||||
var/max_charge = 0
|
||||
charge_sections = 5
|
||||
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/consume_next_projectile()
|
||||
if(chambered && ammo_magazine)
|
||||
var/obj/item/ammo_casing/microbattery/batt = chambered
|
||||
if(batt.shots_left)
|
||||
return new chambered.projectile_type()
|
||||
else
|
||||
for(var/B in ammo_magazine.stored_ammo)
|
||||
var/obj/item/ammo_casing/microbattery/other_batt = B
|
||||
if(istype(other_batt,chambered.type) && other_batt.shots_left)
|
||||
switch_to(other_batt)
|
||||
return new chambered.projectile_type()
|
||||
break
|
||||
|
||||
return null
|
||||
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/proc/update_charge()
|
||||
charge_left = 0
|
||||
max_charge = 0
|
||||
|
||||
if(!chambered)
|
||||
return
|
||||
|
||||
var/obj/item/ammo_casing/microbattery/batt = chambered
|
||||
|
||||
charge_left = batt.shots_left
|
||||
max_charge = initial(batt.shots_left)
|
||||
if(ammo_magazine) //Crawl to find more
|
||||
for(var/B in ammo_magazine.stored_ammo)
|
||||
var/obj/item/ammo_casing/microbattery/bullet = B
|
||||
if(istype(bullet,batt.type))
|
||||
charge_left += bullet.shots_left
|
||||
max_charge += initial(bullet.shots_left)
|
||||
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/proc/switch_to(obj/item/ammo_casing/microbattery/new_batt)
|
||||
if(ishuman(loc))
|
||||
if(chambered && new_batt.type == chambered.type)
|
||||
to_chat(loc,"<span class='warning'>\The [src] is now using the next [new_batt.type_name] power cell.</span>")
|
||||
else
|
||||
to_chat(loc,"<span class='warning'>\The [src] is now firing [new_batt.type_name].</span>")
|
||||
|
||||
chambered = new_batt
|
||||
update_charge()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/attack_self(mob/user)
|
||||
if(!chambered)
|
||||
return
|
||||
|
||||
var/list/stored_ammo = ammo_magazine.stored_ammo
|
||||
|
||||
if(stored_ammo.len == 1)
|
||||
return //silly you.
|
||||
|
||||
//Find an ammotype that ISN'T the same, or exhaust the list and don't change.
|
||||
var/our_slot = stored_ammo.Find(chambered)
|
||||
|
||||
for(var/index in 1 to stored_ammo.len)
|
||||
var/true_index = ((our_slot + index - 1) % stored_ammo.len) + 1 // Stupid ONE BASED lists!
|
||||
var/obj/item/ammo_casing/microbattery/next_batt = stored_ammo[true_index]
|
||||
if(chambered != next_batt && !istype(next_batt, chambered.type))
|
||||
switch_to(next_batt)
|
||||
break
|
||||
/*
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/special_check(mob/user)
|
||||
if(!chambered)
|
||||
return
|
||||
|
||||
var/obj/item/ammo_casing/microbattery/batt = chambered
|
||||
if(!batt.shots_left)
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
*/
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/load_ammo(var/obj/item/A, mob/user)
|
||||
. = ..()
|
||||
if(ammo_magazine && ammo_magazine.stored_ammo.len)
|
||||
switch_to(ammo_magazine.stored_ammo[1])
|
||||
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/unload_ammo(mob/user, var/allow_dump=1)
|
||||
chambered = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/update_icon()
|
||||
update_charge()
|
||||
|
||||
cut_overlays()
|
||||
if(!chambered)
|
||||
return
|
||||
|
||||
var/obj/item/ammo_casing/microbattery/batt = chambered
|
||||
var/batt_color = batt.type_color //Used many times
|
||||
|
||||
//Mode bar
|
||||
var/image/mode_bar = image(icon, icon_state = "[initial(icon_state)]_type")
|
||||
mode_bar.color = batt_color
|
||||
add_overlay(mode_bar)
|
||||
|
||||
//Barrel color
|
||||
var/image/barrel_color = image(icon, icon_state = "[initial(icon_state)]_barrel")
|
||||
barrel_color.alpha = 150
|
||||
barrel_color.color = batt_color
|
||||
add_overlay(barrel_color)
|
||||
|
||||
//Charge bar
|
||||
var/ratio = CEILING(((charge_left / max_charge) * charge_sections), 1)
|
||||
for(var/i = 0, i < ratio, i++)
|
||||
var/image/charge_bar = image(icon, icon_state = "[initial(icon_state)]_charge")
|
||||
charge_bar.pixel_x = i
|
||||
charge_bar.color = batt_color
|
||||
add_overlay(charge_bar)
|
||||
|
||||
|
||||
// The Magazine //
|
||||
/obj/item/ammo_magazine/cell_mag
|
||||
name = "microbattery magazine"
|
||||
desc = "A microbattery holder for a cell-based variable weapon."
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "cell_mag"
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_MAGNETS = 3)
|
||||
caliber = "nsfw"
|
||||
ammo_type = /obj/item/ammo_casing/microbattery
|
||||
initial_ammo = 0
|
||||
max_ammo = 3
|
||||
var/x_offset = 5 //for update_icon() shenanigans- moved here so it can be adjusted for bigger mags
|
||||
var/capname = "nsfw_mag" //as above
|
||||
var/chargename = "nsfw_mag" //as above
|
||||
mag_type = MAGAZINE
|
||||
|
||||
var/list/modes = list()
|
||||
|
||||
/obj/item/ammo_magazine/cell_mag/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/ammo_casing/microbattery))
|
||||
var/obj/item/ammo_casing/microbattery/B = W
|
||||
if(!istype(B, ammo_type))
|
||||
to_chat(user, "<span class='warning'>[B] does not fit into [src].</span>")
|
||||
return
|
||||
if(stored_ammo.len >= max_ammo)
|
||||
to_chat(user, "<span class='warning'>[src] is full!</span>")
|
||||
return
|
||||
user.remove_from_mob(B)
|
||||
B.loc = src
|
||||
stored_ammo.Add(B)
|
||||
update_icon()
|
||||
playsound(user.loc, 'sound/weapons/flipblade.ogg', 50, 1)
|
||||
update_icon()
|
||||
|
||||
/obj/item/ammo_magazine/cell_mag/update_icon()
|
||||
cut_overlays()
|
||||
if(!stored_ammo.len)
|
||||
return //Why bother
|
||||
|
||||
var/current = 0
|
||||
for(var/B in stored_ammo)
|
||||
var/obj/item/ammo_casing/microbattery/batt = B
|
||||
var/image/cap = image(icon, icon_state = "[capname]_cap")
|
||||
cap.color = batt.type_color
|
||||
cap.pixel_x = current * x_offset //Caps don't need a pixel_y offset
|
||||
add_overlay(cap)
|
||||
|
||||
if(batt.shots_left)
|
||||
var/ratio = CEILING(((batt.shots_left / initial(batt.shots_left)) * 4), 1) //4 is how many lights we have a sprite for
|
||||
var/image/charge = image(icon, icon_state = "[chargename]_charge-[ratio]")
|
||||
charge.color = "#29EAF4" //Could use battery color but eh.
|
||||
charge.pixel_x = current * x_offset
|
||||
add_overlay(charge)
|
||||
|
||||
current++ //Increment for offsets
|
||||
|
||||
/obj/item/ammo_magazine/cell_mag/advanced
|
||||
name = "advanced microbattery magazine"
|
||||
desc = "A microbattery holder for a cell-based variable weapon. This one has much more cell capacity!"
|
||||
max_ammo = 6
|
||||
x_offset = 3
|
||||
icon_state = "cell_mag_extended"
|
||||
|
||||
|
||||
// The Casing //
|
||||
/obj/item/ammo_casing/microbattery
|
||||
name = "\'NSFW\' microbattery - UNKNOWN"
|
||||
desc = "A miniature battery for an energy weapon."
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "nsfw_batt"
|
||||
slot_flags = SLOT_BELT | SLOT_EARS
|
||||
throwforce = 1
|
||||
w_class = ITEMSIZE_TINY
|
||||
var/shots_left = 4
|
||||
|
||||
leaves_residue = 0
|
||||
caliber = "nsfw"
|
||||
var/type_color = null
|
||||
var/type_name = null
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
|
||||
/obj/item/ammo_casing/microbattery/Initialize()
|
||||
. = ..()
|
||||
pixel_x = rand(-10, 10)
|
||||
pixel_y = rand(-10, 10)
|
||||
update_icon()
|
||||
|
||||
/obj/item/ammo_casing/microbattery/update_icon()
|
||||
cut_overlays()
|
||||
|
||||
var/image/ends = image(icon, icon_state = "[initial(icon_state)]_ends")
|
||||
ends.color = type_color
|
||||
add_overlay(ends)
|
||||
|
||||
/obj/item/ammo_casing/microbattery/expend()
|
||||
shots_left--
|
||||
|
||||
|
||||
// The Pack //
|
||||
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid
|
||||
name = "hybrid cell-loaded gun kit"
|
||||
desc = "A storage case for a multi-purpose handgun. Variety hour!"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid/New()
|
||||
..()
|
||||
new /obj/item/weapon/gun/projectile/cell_loaded(src)
|
||||
new /obj/item/ammo_magazine/cell_mag/advanced(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/stun(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/stun(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/stun(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/net(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/net(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/brute3(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/burn3(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/stabilize2(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/toxin3(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/omni3(src)
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat
|
||||
name = "military cell-loaded gun kit"
|
||||
desc = "A storage case for a multi-purpose handgun. Variety hour!"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat/New()
|
||||
..()
|
||||
new /obj/item/weapon/gun/projectile/cell_loaded(src)
|
||||
new /obj/item/ammo_magazine/cell_mag/advanced(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/shotstun(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/shotstun(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/ion(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/xray(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/stabilize2(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/haste(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/resist(src)
|
||||
72
code/modules/projectiles/guns/energy/cell_loaded_vr/ml3m.dm
Normal file
72
code/modules/projectiles/guns/energy/cell_loaded_vr/ml3m.dm
Normal file
@@ -0,0 +1,72 @@
|
||||
// The Gun //
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/medical
|
||||
name = "cell-loaded medigun"
|
||||
desc = "The ML-3 'Medigun', or ML3M for short, is a powerful cell-based ranged healing device based on the KHI-102b NSFW. \
|
||||
It uses an internal nanite fabricator, powered and controlled by discrete cells, to deliver a variety of effects at range. Up to six combinations of \
|
||||
healing beams can be configured at once, depending on cartridge used. Ammo not included."
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
|
||||
|
||||
icon_state = "ml3m"
|
||||
description_info = "This is a ranged healing device that uses interchangable nanite discharge cells in a magazine. Each cell is a different healing beam type, and up to three can be loaded in the magazine. Each battery usually provides four discharges of that beam type, and multiple from the same type may be loaded to increase the number of shots for that type."
|
||||
description_fluff = "The Vey-Med ML-3 'Medigun' allows one to customize their loadout in the field, or before deploying, to allow emergency response personnel to deliver a variety of ranged healing options."
|
||||
description_antag = ""
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 2, TECH_BIO = 5)
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/medical)
|
||||
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/medical/cmo
|
||||
name = "advanced cell-loaded medigun"
|
||||
desc = "This is a variation on the ML-3 'Medigun', a powerful cell-based ranged healing device based on the KHI-102b NSFW. \
|
||||
It has an extended sight for increased accuracy, and much more comfortable grip. Ammo not included."
|
||||
|
||||
icon_state = "ml3m_cmo"
|
||||
|
||||
|
||||
// The Magazine //
|
||||
/obj/item/ammo_magazine/cell_mag/medical //medical
|
||||
name = "nanite magazine"
|
||||
desc = "A nanite fabrication magazine for the \'ML-3/M\'"
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
|
||||
description_info = "This magazine holds self-charging nanite fabricators to power the ML-3 'Medigun'. Up to three can be loaded at once, and each provides four shots of their respective healing type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger."
|
||||
ammo_type = /obj/item/ammo_casing/microbattery/medical
|
||||
icon_state = "ml3m_mag"
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 3)
|
||||
|
||||
/obj/item/ammo_magazine/cell_mag/medical/advanced
|
||||
name = "advanced nanite magazine"
|
||||
desc = "A nanite discharge cell for the \'ML-3/M\'. This one is a more advanced version which can hold six individual nanite discharge cells."
|
||||
max_ammo = 6
|
||||
x_offset = 3
|
||||
icon_state = "ml3m_mag_extended"
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_BIO = 5)
|
||||
|
||||
|
||||
// The Pack //
|
||||
/obj/item/weapon/storage/secure/briefcase/ml3m_pack_med
|
||||
name = "\improper ML-3 \'Medigun\' kit"
|
||||
desc = "A storage case for a multi-purpose healing gun. Variety hour!"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/ml3m_pack_med/New()
|
||||
..()
|
||||
new /obj/item/weapon/gun/projectile/cell_loaded/medical(src)
|
||||
new /obj/item/ammo_magazine/cell_mag/medical(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/brute(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/burn(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/stabilize(src)
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/ml3m_pack_cmo
|
||||
name = "\improper Advanced ML-3 \'Medigun\' kit"
|
||||
desc = "A storage case for a multi-purpose healing gun. Variety hour!"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/ml3m_pack_cmo/New()
|
||||
..()
|
||||
new /obj/item/weapon/gun/projectile/cell_loaded/medical/cmo(src)
|
||||
new /obj/item/ammo_magazine/cell_mag/medical(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/brute(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/burn(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/stabilize(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/toxin(src)
|
||||
new /obj/item/ammo_casing/microbattery/medical/omni(src)
|
||||
@@ -0,0 +1,340 @@
|
||||
// The Casing //
|
||||
/obj/item/ammo_casing/microbattery/medical
|
||||
name = "\'ML-3/M\' nanite cell - UNKNOWN"
|
||||
desc = "A miniature nanite fabricator for a medigun."
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
|
||||
icon_state = "ml3m_batt"
|
||||
origin_tech = list(TECH_BIO = 2, TECH_MATERIAL = 1, TECH_MAGNETS = 2)
|
||||
|
||||
/obj/item/projectile/beam/medical_cell
|
||||
name = "\improper healing beam"
|
||||
icon_state = "medbeam"
|
||||
nodamage = 1
|
||||
damage = 0
|
||||
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/medical_cell/on_hit(var/mob/living/carbon/human/target) //what does it do when it hits someone?
|
||||
return
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/brute
|
||||
name = "\'ML-3/M\' nanite cell - BRUTE"
|
||||
type_color = "#BF0000"
|
||||
type_name = "<span style='color:#BF0000;font-weight:bold;'>BRUTE</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/brute
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/brute/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustBruteLoss(-5)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/burn
|
||||
name = "\'ML-3/M\' nanite cell - BURN"
|
||||
type_color = "#FF8000"
|
||||
type_name = "<span style='color:#FF8000;font-weight:bold;'>BURN</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/burn
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/burn/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustFireLoss(-5)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/stabilize
|
||||
name = "\'ML-3/M\' nanite cell - STABILIZE" //Disinfects all open wounds, cures oxy damage
|
||||
type_color = "#0080FF"
|
||||
type_name = "<span style='color:#0080FF;font-weight:bold;'>STABILIZE</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/stabilize
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/stabilize/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustOxyLoss(-30)
|
||||
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
|
||||
var/obj/item/organ/external/O = target.organs_by_name[name]
|
||||
for (var/datum/wound/W in O.wounds)
|
||||
if (W.internal)
|
||||
continue
|
||||
W.disinfect()
|
||||
target.add_modifier(/datum/modifier/stabilize, 20 SECONDS)
|
||||
else
|
||||
return 1
|
||||
|
||||
/datum/modifier/stabilize
|
||||
name = "stabilize"
|
||||
desc = "Your injuries are stabilized and your pain abates!"
|
||||
mob_overlay_state = "cyan_sparkles"
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
pain_immunity = TRUE
|
||||
bleeding_rate_percent = 0.1 //only a little
|
||||
incoming_oxy_damage_percent = 0
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/toxin
|
||||
name = "\'ML-3/M\' nanite cell - TOXIN"
|
||||
type_color = "#00A000"
|
||||
type_name = "<span style='color:#00A000;font-weight:bold;'>TOXIN</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/toxin
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/toxin/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustToxLoss(-5)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/omni
|
||||
name = "\'ML-3/M\' nanite cell - OMNI"
|
||||
type_color = "#8040FF"
|
||||
type_name = "<span style='color:#8040FF;font-weight:bold;'>OMNI</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/omni
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/omni/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustBruteLoss(-2.5)
|
||||
target.adjustFireLoss(-2.5)
|
||||
target.adjustToxLoss(-2.5)
|
||||
target.adjustOxyLoss(-10)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/antirad
|
||||
name = "\'ML-3/M\' nanite cell - ANTIRAD"
|
||||
type_color = "#008000"
|
||||
type_name = "<span style='color:#008000;font-weight:bold;'>ANTIRAD</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/antirad
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/antirad/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustToxLoss(-2.5)
|
||||
target.radiation = max(target.radiation - 150, 0) //same as 5 units of arithrazine, sans the brute damage
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/brute2
|
||||
name = "\'ML-3/M\' nanite cell - BRUTE-II"
|
||||
type_color = "#BF0000"
|
||||
type_name = "<span style='color:#BF0000;font-weight:bold;'>BRUTE-II</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/brute2
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/brute2/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustBruteLoss(-10)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/burn2
|
||||
name = "\'ML-3/M\' nanite cell - BURN-II"
|
||||
type_color = "#FF8000"
|
||||
type_name = "<span style='color:#FF8000;font-weight:bold;'>BURN-II</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/burn2
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/burn2/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustFireLoss(-10)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/stabilize2
|
||||
name = "\'ML-3/M\' nanite cell - STABILIZE-II" //Disinfects and bandages all open wounds, cures all oxy damage
|
||||
type_color = "#0080FF"
|
||||
type_name = "<span style='color:#0080FF;font-weight:bold;'>STABILIZE-II</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/stabilize2
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/stabilize2/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustOxyLoss(-200)
|
||||
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
|
||||
var/obj/item/organ/external/O = target.organs_by_name[name]
|
||||
for (var/datum/wound/W in O.wounds)
|
||||
if(W.internal)
|
||||
continue
|
||||
if(O.is_bandaged() == FALSE)
|
||||
W.bandage()
|
||||
if(O.is_salved() == FALSE)
|
||||
W.salve()
|
||||
W.disinfect()
|
||||
target.add_modifier(/datum/modifier/stabilize, 20 SECONDS)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/omni2
|
||||
name = "\'ML-3/M\' nanite cell - OMNI-II"
|
||||
type_color = "#8040FF"
|
||||
type_name = "<span style='color:#8040FF;font-weight:bold;'>OMNI-II</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/omni2
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/omni2/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustBruteLoss(-5)
|
||||
target.adjustFireLoss(-5)
|
||||
target.adjustToxLoss(-5)
|
||||
target.adjustOxyLoss(-30)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/toxin2
|
||||
name = "\'ML-3/M\' nanite cell - TOXIN-II"
|
||||
type_color = "#00A000"
|
||||
type_name = "<span style='color:#00A000;font-weight:bold;'>TOXIN-II</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/toxin2
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/toxin2/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustToxLoss(-20)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/haste
|
||||
name = "\'ML-3/M\' nanite cell - HASTE"
|
||||
type_color = "#FF3300"
|
||||
type_name = "<span style='color:#FF3300;font-weight:bold;'>HASTE</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/haste
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/haste/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.add_modifier(/datum/modifier/ml3mhaste, 20 SECONDS)
|
||||
else
|
||||
return 1
|
||||
|
||||
/datum/modifier/ml3mhaste
|
||||
name = "haste"
|
||||
desc = "You can move much faster!"
|
||||
mob_overlay_state = "haste"
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
slowdown = -0.5 //a little faster!
|
||||
evasion = 1.15 //and a little harder to hit!
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/resist
|
||||
name = "\'ML-3/M\' nanite cell - RESIST"
|
||||
type_color = "#555555"
|
||||
type_name = "<span style='color:#555555;font-weight:bold;'>RESIST</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/resist
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/resist/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.add_modifier(/datum/modifier/resistance, 20 SECONDS)
|
||||
else
|
||||
return 1
|
||||
|
||||
/datum/modifier/resistance
|
||||
name = "resistance"
|
||||
desc = "You resist 15% of all incoming damage and stuns!"
|
||||
mob_overlay_state = "repel_missiles"
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
disable_duration_percent = 0.85
|
||||
incoming_damage_percent = 0.85
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/corpse_mend
|
||||
name = "\'ML-3/M\' nanite cell - CORPSE MEND"
|
||||
type_color = "#669900"
|
||||
type_name = "<span style='color:#669900;font-weight:bold;'>CORPSE MEND</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/corpse_mend
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/corpse_mend/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
if(target.stat == DEAD)
|
||||
target.adjustBruteLoss(-50)
|
||||
target.adjustFireLoss(-50)
|
||||
target.adjustToxLoss(-50)
|
||||
target.adjustOxyLoss(-200)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/brute3
|
||||
name = "\'ML-3/M\' nanite cell - BRUTE-III"
|
||||
type_color = "#BF0000"
|
||||
type_name = "<span style='color:#BF0000;font-weight:bold;'>BRUTE-III</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/brute3
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/brute3/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustBruteLoss(-20)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/burn3
|
||||
name = "\'ML-3/M\' nanite cell - BURN-III"
|
||||
type_color = "#FF8000"
|
||||
type_name = "<span style='color:#FF8000;font-weight:bold;'>BURN-III</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/burn3
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/burn3/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustFireLoss(-20)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/toxin3
|
||||
name = "\'ML-3/M\' nanite cell - TOXIN-III"
|
||||
type_color = "#00A000"
|
||||
type_name = "<span style='color:#00A000;font-weight:bold;'>TOXIN-III</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/toxin3
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/toxin3/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustToxLoss(-20)
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/omni3
|
||||
name = "\'ML-3/M\' nanite cell - OMNI-III"
|
||||
type_color = "#8040FF"
|
||||
type_name = "<span style='color:#8040FF;font-weight:bold;'>OMNI-III</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/omni3
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/omni3/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.adjustBruteLoss(-10)
|
||||
target.adjustFireLoss(-10)
|
||||
target.adjustToxLoss(-10)
|
||||
target.adjustOxyLoss(-60)
|
||||
else
|
||||
return 1
|
||||
|
||||
// Illegal cells!
|
||||
/obj/item/ammo_casing/microbattery/medical/shrink
|
||||
name = "\'ML-3/M\' nanite cell - SHRINK"
|
||||
type_color = "#910ffc"
|
||||
type_name = "<span style='color:#910ffc;font-weight:bold;'>SHRINK</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/shrink
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/shrink/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.resize(0.5)
|
||||
target.show_message("<font color='blue'>The beam fires into your body, changing your size!</font>")
|
||||
target.updateicon()
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/grow
|
||||
name = "\'ML-3/M\' nanite cell - GROW"
|
||||
type_color = "#fc0fdc"
|
||||
type_name = "<span style='color:#fc0fdc;font-weight:bold;'>GROW</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/grow
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/grow/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.resize(2.0)
|
||||
target.show_message("<font color='blue'>The beam fires into your body, changing your size!</font>")
|
||||
target.updateicon()
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/ammo_casing/microbattery/medical/normalsize
|
||||
name = "\'ML-3/M\' nanite cell - NORMALSIZE"
|
||||
type_color = "#C70FEC"
|
||||
type_name = "<span style='color:#C70FEC;font-weight:bold;'>NORMALSIZE</span>"
|
||||
projectile_type = /obj/item/projectile/beam/medical_cell/normalsize
|
||||
|
||||
/obj/item/projectile/beam/medical_cell/normalsize/on_hit(var/mob/living/carbon/human/target)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
target.resize(1)
|
||||
target.show_message("<font color='blue'>The beam fires into your body, changing your size!</font>")
|
||||
target.updateicon()
|
||||
else
|
||||
return 1
|
||||
75
code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw.dm
Normal file
75
code/modules/projectiles/guns/energy/cell_loaded_vr/nsfw.dm
Normal file
@@ -0,0 +1,75 @@
|
||||
// The Gun //
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/combat
|
||||
name = "cell-loaded revolver"
|
||||
desc = "Variety is the spice of life! The KHI-102b 'Nanotech Selectable-Fire Weapon', or NSFW for short, is an unholy hybrid of an ammo-driven \
|
||||
energy weapon that allows the user to mix and match their own fire modes. Up to four combinations of \
|
||||
energy beams can be configured at once. Ammo not included."
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
|
||||
|
||||
description_fluff = "The Kitsuhana 'Nanotech Selectable Fire Weapon' allows one to customize their loadout in the field, or before deploying, to achieve various results in a weapon they are already familiar with wielding."
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/combat)
|
||||
|
||||
/obj/item/weapon/gun/projectile/cell_loaded/combat/prototype
|
||||
name = "prototype cell-loaded revolver"
|
||||
desc = "Variety is the spice of life! A prototype based on KHI-102b 'Nanotech Selectable-Fire Weapon', or NSFW for short, is an unholy hybrid of an ammo-driven \
|
||||
energy weapon that allows the user to mix and match their own fire modes. Up to two combinations of \
|
||||
energy beams can be configured at once. Ammo not included."
|
||||
|
||||
description_info = "This gun is an energy weapon that uses interchangable microbatteries in a magazine. Each battery is a different beam type, and up to three can be loaded in the magazine. Each battery usually provides four discharges of that beam type, and multiple from the same type may be loaded to increase the number of shots for that type."
|
||||
description_antag = ""
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/combat/prototype)
|
||||
|
||||
origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 4, TECH_MAGNETS = 3)
|
||||
|
||||
|
||||
// The Magazine //
|
||||
/obj/item/ammo_magazine/cell_mag/combat
|
||||
name = "microbattery magazine"
|
||||
desc = "A microbattery holder for the \'NSFW\'"
|
||||
icon_state = "nsfw_mag"
|
||||
max_ammo = 4
|
||||
x_offset = 4
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
|
||||
description_info = "This magazine holds NSFW microbatteries to power the NSFW handgun. Up to three can be loaded at once, and each provides four shots of their respective energy type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger."
|
||||
ammo_type = /obj/item/ammo_casing/microbattery/combat
|
||||
|
||||
/obj/item/ammo_magazine/cell_mag/combat/prototype
|
||||
name = "prototype microbattery magazine"
|
||||
icon_state = "nsfw_mag_prototype"
|
||||
max_ammo = 2
|
||||
x_offset = 6
|
||||
catalogue_data = null
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_MAGNETS = 2)
|
||||
|
||||
|
||||
// The Pack //
|
||||
/obj/item/weapon/storage/secure/briefcase/nsfw_pack
|
||||
name = "\improper KHI-102b \'NSFW\' gun kit"
|
||||
desc = "A storage case for a multi-purpose handgun. Variety hour!"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/nsfw_pack/New()
|
||||
..()
|
||||
new /obj/item/weapon/gun/projectile/cell_loaded/combat(src)
|
||||
new /obj/item/ammo_magazine/cell_mag/combat(src)
|
||||
for(var/path in subtypesof(/obj/item/ammo_casing/microbattery/combat))
|
||||
new path(src)
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos
|
||||
name = "\improper KHI-102b \'NSFW\' gun kit"
|
||||
desc = "A storage case for a multi-purpose handgun. Variety hour!"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos/New()
|
||||
..()
|
||||
new /obj/item/weapon/gun/projectile/cell_loaded/combat(src)
|
||||
new /obj/item/ammo_magazine/cell_mag/combat(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/stun(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/stun(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/stun(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/net(src)
|
||||
new /obj/item/ammo_casing/microbattery/combat/ion(src)
|
||||
@@ -0,0 +1,115 @@
|
||||
// The Casing //
|
||||
/obj/item/ammo_casing/microbattery/combat
|
||||
name = "\'NSFW\' microbattery - UNKNOWN"
|
||||
desc = "A miniature battery for an energy weapon."
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 1, TECH_MAGNETS = 2)
|
||||
|
||||
/obj/item/ammo_casing/microbattery/combat/lethal
|
||||
name = "\'NSFW\' microbattery - LETHAL"
|
||||
type_color = "#bf3d3d"
|
||||
type_name = "<span style='color:#bf3d3d;font-weight:bold;'>LETHAL</span>"
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
|
||||
/obj/item/ammo_casing/microbattery/combat/stun
|
||||
name = "\'NSFW\' microbattery - STUN"
|
||||
type_color = "#0f81bc"
|
||||
type_name = "<span style='color:#0f81bc;font-weight:bold;'>STUN</span>"
|
||||
projectile_type = /obj/item/projectile/beam/stun/blue
|
||||
|
||||
/obj/item/ammo_casing/microbattery/combat/net
|
||||
name = "\'NSFW\' microbattery - NET"
|
||||
type_color = "#43f136"
|
||||
type_name = "<span style='color:#43d136;font-weight:bold;'>NET</span>"
|
||||
projectile_type = /obj/item/projectile/beam/energy_net
|
||||
|
||||
/obj/item/ammo_casing/microbattery/combat/xray
|
||||
name = "\'NSFW\' microbattery - XRAY"
|
||||
type_color = "#32c025"
|
||||
type_name = "<span style='color:#32c025;font-weight:bold;'>XRAY</span>"
|
||||
projectile_type = /obj/item/projectile/beam/xray
|
||||
|
||||
/obj/item/ammo_casing/microbattery/combat/shotstun
|
||||
name = "\'NSFW\' microbattery - SCATTERSTUN"
|
||||
type_color = "#88ffff"
|
||||
type_name = "<span style='color:#88ffff;font-weight:bold;'>SCATTERSTUN</span>"
|
||||
projectile_type = /obj/item/projectile/bullet/pellet/e_shot_stun
|
||||
|
||||
/obj/item/projectile/bullet/pellet/e_shot_stun
|
||||
icon_state = "spell"
|
||||
damage = 2
|
||||
agony = 20
|
||||
pellets = 6 //number of pellets
|
||||
range_step = 2 //projectile will lose a fragment each time it travels this distance. Can be a non-integer.
|
||||
base_spread = 90 //lower means the pellets spread more across body parts. If zero then this is considered a shrapnel explosion instead of a shrapnel cone
|
||||
spread_step = 10
|
||||
embed_chance = 0
|
||||
sharp = 0
|
||||
check_armour = "melee"
|
||||
|
||||
/obj/item/ammo_casing/microbattery/combat/ion
|
||||
name = "\'NSFW\' microbattery - ION"
|
||||
type_color = "#d084d6"
|
||||
type_name = "<span style='color:#d084d6;font-weight:bold;'>ION</span>"
|
||||
projectile_type = /obj/item/projectile/ion/small
|
||||
|
||||
/obj/item/ammo_casing/microbattery/combat/stripper
|
||||
name = "\'NSFW\' microbattery - STRIPPER"
|
||||
type_color = "#fc8d0f"
|
||||
type_name = "<span style='color:#fc8d0f;font-weight:bold;'>STRIPPER</span>"
|
||||
projectile_type = /obj/item/projectile/bullet/stripper
|
||||
|
||||
/obj/item/projectile/bullet/stripper
|
||||
icon_state = "magicm"
|
||||
nodamage = 1
|
||||
agony = 5
|
||||
embed_chance = 0
|
||||
sharp = 0
|
||||
check_armour = "melee"
|
||||
|
||||
/obj/item/projectile/bullet/stripper/on_hit(var/atom/stripped)
|
||||
if(ishuman(stripped))
|
||||
var/mob/living/carbon/human/H = stripped
|
||||
if(H.wear_suit)
|
||||
H.unEquip(H.wear_suit)
|
||||
if(H.w_uniform)
|
||||
H.unEquip(H.w_uniform)
|
||||
if(H.back)
|
||||
H.unEquip(H.back)
|
||||
if(H.shoes)
|
||||
H.unEquip(H.shoes)
|
||||
if(H.gloves)
|
||||
H.unEquip(H.gloves)
|
||||
//Hats can stay! Most other things fall off with removing these.
|
||||
..()
|
||||
|
||||
/obj/item/ammo_casing/microbattery/combat/final
|
||||
name = "\'NSFW\' microbattery - FINAL OPTION"
|
||||
type_color = "#fcfc0f"
|
||||
type_name = "<span style='color:#000000;font-weight:bold;'>FINAL OPTION</span>" //Doesn't look good in yellow in chat
|
||||
projectile_type = /obj/item/projectile/beam/final_option
|
||||
|
||||
/obj/item/projectile/beam/final_option
|
||||
name = "final option beam"
|
||||
icon_state = "omnilaser"
|
||||
nodamage = 1
|
||||
agony = 5
|
||||
damage_type = HALLOSS
|
||||
light_color = "#00CC33"
|
||||
|
||||
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/final_option/on_hit(var/atom/impacted)
|
||||
if(isliving(impacted))
|
||||
var/mob/living/L = impacted
|
||||
if(L.mind)
|
||||
var/nif
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
nif = H.nif
|
||||
SStranscore.m_backup(L.mind,nif,one_time = TRUE)
|
||||
L.gib()
|
||||
|
||||
..()
|
||||
40
code/modules/projectiles/guns/energy/crestrose_vr.dm
Normal file
40
code/modules/projectiles/guns/energy/crestrose_vr.dm
Normal file
@@ -0,0 +1,40 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/fluff/crestrose
|
||||
name = "Crescent Rose"
|
||||
desc = "Can you match my resolve? If so then you will succeed. I believe that the human spirit is indomitable. Keep Moving Forward. Uses 7.62mm rounds."
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
icon_state = "crestrose_fold"
|
||||
|
||||
icon_override = 'icons/vore/custom_guns_vr.dmi'
|
||||
item_state = "laser" //placeholder
|
||||
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 4)
|
||||
slot_flags = null
|
||||
fire_sound = 'sound/weapons/Gunshot_light.ogg'
|
||||
load_method = MAGAZINE
|
||||
force = 3
|
||||
recoil = 2
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
hitsound = null
|
||||
caliber = "s762"
|
||||
magazine_type = /obj/item/ammo_magazine/m762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m762)
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="fold", icon_state="crestrose_fold",item_state = "laser",force=3),
|
||||
list(mode_name="scythe", icon_state="crestrose",item_state = "crestrose",force=15),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/fluff/crestrose/switch_firemodes(mob/user)
|
||||
if(..())
|
||||
update_icon()
|
||||
update_held_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/fluff/crestrose/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
||||
if(default_parry_check(user, attacker, damage_source) && prob(50))
|
||||
user.visible_message("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
|
||||
playsound(user.loc, 'sound/weapons/punchmiss.ogg', 50, 1)
|
||||
return 1
|
||||
return 0
|
||||
50
code/modules/projectiles/guns/energy/dominator_vr.dm
Normal file
50
code/modules/projectiles/guns/energy/dominator_vr.dm
Normal file
@@ -0,0 +1,50 @@
|
||||
// -------------- Dominator -------------
|
||||
/obj/item/weapon/gun/energy/gun/fluff/dominator
|
||||
name = "bulky energy gun"
|
||||
desc = "A MWPSB Dominator from the Federation. Like the basic Energy Gun, this gun has two settings. It is used by the United Federation Public Safety Bureau's Criminal Investigation Division. The weapon can only be fired by the owner and is alert-level locked."
|
||||
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
icon_state = "dominatorstun100"
|
||||
|
||||
icon_override = 'icons/vore/custom_guns_vr.dmi'
|
||||
item_state = null
|
||||
item_icons = null
|
||||
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
projectile_type = /obj/item/projectile/beam/stun
|
||||
|
||||
modifystate = "dominatorstun"
|
||||
|
||||
dna_lock = 1
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", charge_cost=240,projectile_type=/obj/item/projectile/beam/stun, modifystate="dominatorstun", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="lethal", charge_cost=480,projectile_type=/obj/item/projectile/beam/dominator, modifystate="dominatorkill", fire_sound='sound/weapons/gauss_shoot.ogg'),
|
||||
)
|
||||
|
||||
var/emagged = FALSE
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/fluff/dominator/special_check(mob/user)
|
||||
if(!emagged && mode_name == "lethal" && get_security_level() == "green")
|
||||
to_chat(user,"<span class='warning'>The trigger refuses to depress while on the lethal setting under security level green!</span>")
|
||||
return FALSE
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/fluff/dominator/emag_act(var/remaining_charges,var/mob/user)
|
||||
..()
|
||||
if(!emagged)
|
||||
emagged = TRUE
|
||||
to_chat(user,"<span class='warning'>You disable the alert level locking mechanism on \the [src]!</span>")
|
||||
|
||||
return TRUE
|
||||
|
||||
|
||||
// Dominator Ammo
|
||||
/obj/item/projectile/beam/dominator
|
||||
name = "dominator lethal beam"
|
||||
icon_state = "xray"
|
||||
muzzle_type = /obj/effect/projectile/muzzle/xray
|
||||
tracer_type = /obj/effect/projectile/tracer/xray
|
||||
impact_type = /obj/effect/projectile/impact/xray
|
||||
127
code/modules/projectiles/guns/energy/gunsword_vr.dm
Normal file
127
code/modules/projectiles/guns/energy/gunsword_vr.dm
Normal file
@@ -0,0 +1,127 @@
|
||||
/obj/item/weapon/gun/energy/gun/fluff/gunsword
|
||||
name = "Sword Buster"
|
||||
desc = "The Sword Buster gun is custom built using the science behind a Golden Empire pistol. The cell can be removed in close range and used as energy shortsword."
|
||||
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
icon_state = "gbuster100"
|
||||
|
||||
icon_override = 'icons/vore/custom_guns_vr.dmi'
|
||||
item_state = null
|
||||
item_icons = null
|
||||
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 4)
|
||||
slot_flags = null
|
||||
projectile_type = /obj/item/projectile/beam/stun
|
||||
fire_sound = 'sound/weapons/gauss_shoot.ogg'
|
||||
charge_meter = 1
|
||||
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/gunsword
|
||||
|
||||
modifystate = "gbuster"
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", charge_cost=240,projectile_type=/obj/item/projectile/beam/stun, modifystate="gbuster", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="lethal", charge_cost=480,projectile_type=/obj/item/projectile/beam, modifystate="gbuster", fire_sound='sound/weapons/gauss_shoot.ogg'),
|
||||
)
|
||||
|
||||
|
||||
|
||||
// -----------------gunsword battery--------------------------
|
||||
/obj/item/weapon/cell/device/weapon/gunsword
|
||||
name = "Buster Cell"
|
||||
desc = "The Buster Cell. It doubles as a sword when activated outside the gun housing."
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
icon_state = "gsaberoff"
|
||||
icon_override = 'icons/vore/custom_guns_vr.dmi'
|
||||
item_state = "gsaberoff"
|
||||
maxcharge = 2400
|
||||
charge_amount = 20
|
||||
force = 3
|
||||
throwforce = 5
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 5)
|
||||
|
||||
var/active = 0
|
||||
var/active_force = 30
|
||||
var/active_throwforce = 20
|
||||
var/active_w_class = ITEMSIZE_LARGE
|
||||
var/active_embed_chance = 0 //In the off chance one of these is supposed to embed, you can just tweak this var
|
||||
sharp = 0
|
||||
edge = 0
|
||||
armor_penetration = 50
|
||||
flags = NOBLOODY
|
||||
var/lrange = 2
|
||||
var/lpower = 2
|
||||
var/lcolor = "#800080"
|
||||
|
||||
|
||||
/obj/item/weapon/cell/device/weapon/gunsword/proc/activate(mob/living/user)
|
||||
if(active)
|
||||
return
|
||||
icon_state = "gsaber"
|
||||
item_state = "gsaber"
|
||||
active = 1
|
||||
embed_chance = active_embed_chance
|
||||
force = active_force
|
||||
throwforce = active_throwforce
|
||||
sharp = 1
|
||||
edge = 1
|
||||
w_class = active_w_class
|
||||
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
|
||||
set_light(lrange, lpower, lcolor)
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/cell/device/weapon/gunsword/proc/deactivate(mob/living/user)
|
||||
if(!active)
|
||||
return
|
||||
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
|
||||
icon_state = "gsaberoff"
|
||||
item_state = "gsaberoff"
|
||||
active = 0
|
||||
embed_chance = initial(embed_chance)
|
||||
force = initial(force)
|
||||
throwforce = initial(throwforce)
|
||||
sharp = initial(sharp)
|
||||
edge = initial(edge)
|
||||
w_class = initial(w_class)
|
||||
set_light(0,0)
|
||||
attack_verb = list()
|
||||
|
||||
|
||||
/obj/item/weapon/cell/device/weapon/gunsword/attack_self(mob/living/user as mob)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
if (active)
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
user.visible_message("<span class='danger'>\The [user] accidentally cuts [TU.himself] with \the [src].</span>",\
|
||||
"<span class='danger'>You accidentally cut yourself with \the [src].</span>")
|
||||
user.take_organ_damage(5,5)
|
||||
deactivate(user)
|
||||
update_icon()
|
||||
update_held_icon()
|
||||
else
|
||||
activate(user)
|
||||
update_icon()
|
||||
update_held_icon()
|
||||
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/cell/device/weapon/gunsword/suicide_act(mob/user)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
if(active)
|
||||
user.visible_message(pick("<span class='danger'>\The [user] is slitting [TU.his] stomach open with \the [src]! It looks like [TU.he] [TU.is] trying to commit seppuku.</span>",\
|
||||
"<span class='danger'>\The [user] is falling on \the [src]! It looks like [TU.he] [TU.is] trying to commit suicide.</span>"))
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/cell/device/weapon/gunsword/update_icon()
|
||||
overlays.Cut()
|
||||
304
code/modules/projectiles/guns/energy/laser_vr.dm
Normal file
304
code/modules/projectiles/guns/energy/laser_vr.dm
Normal file
@@ -0,0 +1,304 @@
|
||||
/* TUTORIAL
|
||||
"icon" is the file with the HUD/ground icon for the item
|
||||
"icon_state" is the iconstate in this file for the item
|
||||
"icon_override" is the file with the on-mob icons, can be the same file
|
||||
"item_state" is the iconstate for the on-mob icons:
|
||||
item_state_s is used for worn uniforms on mobs
|
||||
item_state_r and item_state_l are for being held in each hand
|
||||
|
||||
"item_state_slots" can replace "item_state", it is a list:
|
||||
item_state_slots["slotname1"] = "item state for that slot"
|
||||
item_state_slots["slotname2"] = "item state for that slot"
|
||||
|
||||
on guns, in particular:
|
||||
item_state being null makes it look for exactly the icon_state in the on-mob file,
|
||||
including any 0,75,etc appended from the energy bar setting
|
||||
item_state being present prevents different mode sprites, sadly, but you may
|
||||
be able to override this on the gun itself with a proc
|
||||
*/
|
||||
|
||||
/* TEMPLATE
|
||||
//ckey:Character Name
|
||||
/obj/item/weapon/gun/type/fluff/charactername
|
||||
name = ""
|
||||
desc = ""
|
||||
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
icon_state = "myicon"
|
||||
|
||||
icon_override = 'icons/vore/custom_guns_vr.dmi'
|
||||
item_state = "myicon"
|
||||
|
||||
*/
|
||||
|
||||
// For general use
|
||||
/obj/item/weapon/gun/energy/imperial
|
||||
name = "imperial energy pistol"
|
||||
desc = "An elegant weapon developed by the Imperium Auream. Their weaponsmiths have cleverly found a way to make a gun that is only about the size of an average energy pistol, yet with the fire power of a laser carbine."
|
||||
icon_state = "ge_pistol"
|
||||
item_state = "ge_pistol"
|
||||
fire_sound = 'sound/weapons/mandalorian.ogg'
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
item_icons = list(slot_r_hand_str = 'icons/obj/gun_vr.dmi', slot_l_hand_str = 'icons/obj/gun_vr.dmi') // WORK YOU FUCKING CUNT PIECE OF SHIT BASTARD STUPID BITCH ITEM ICON AAAAHHHH
|
||||
item_state_slots = list(slot_r_hand_str = "ge_pistol_r", slot_l_hand_str = "ge_pistol_l")
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
force = 10
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
projectile_type = /obj/item/projectile/beam/imperial
|
||||
|
||||
// Removed because gun64_vr.dmi guns don't work.
|
||||
/*
|
||||
//-----------------------G44 Energy Variant--------------------
|
||||
/obj/item/weapon/gun/energy/gun/burst/g44e
|
||||
name = "G44 Energy Rifle"
|
||||
desc = "The G44 Energy is a laser variant of the G44 lightweight assault rifle manufactured by the National Armory of Gaia. Though almost exclusively to the United Federation's Military Assault Command Operations Department (MACOs) and Starfleet, it is occassionally sold to security departments for their stun capabilities."
|
||||
icon = 'icons/obj/gun64_vr.dmi'
|
||||
icon_state = "g44estun100"
|
||||
item_state = "energystun100" //This is temporary.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
charge_cost = 100
|
||||
force = 8
|
||||
w_class = ITEMSIZE_LARGE
|
||||
fire_delay = 6
|
||||
pixel_x = -16
|
||||
|
||||
projectile_type = /obj/item/projectile/beam/stun/weak
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2, TECH_ILLEGAL = 3)
|
||||
modifystate = "g44estun"
|
||||
|
||||
one_handed_penalty = 60
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", burst=1, projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="g44estun", fire_sound='sound/weapons/Taser.ogg', charge_cost = 100),
|
||||
list(mode_name="stun burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/stun/weak, modifystate="g44estun", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="lethal", burst=1, projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="g44ekill", fire_sound='sound/weapons/Laser.ogg', charge_cost = 200),
|
||||
list(mode_name="lethal burst", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,0,0), dispersion=list(0.0, 0.2, 0.5), projectile_type=/obj/item/projectile/beam/burstlaser, modifystate="g44ekill", fire_sound='sound/weapons/Laser.ogg'),
|
||||
)
|
||||
*/
|
||||
|
||||
//////////////////// Energy Weapons ////////////////////
|
||||
|
||||
// ------------ Energy Luger ------------
|
||||
/obj/item/weapon/gun/energy/gun/eluger
|
||||
name = "energy Luger"
|
||||
desc = "The finest sidearm produced by RauMauser. Although its battery cannot be removed, its ergonomic design makes it easy to shoot, allowing for rapid follow-up shots. It also has the ability to toggle between stun and kill."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "elugerstun100"
|
||||
item_state = "gun"
|
||||
fire_delay = null // Lugers are quite comfortable to shoot, thus allowing for more controlled follow-up shots. Rate of fire similar to a laser carbine.
|
||||
battery_lock = 1 // In exchange for balance, you cannot remove the battery. Also there's no sprite for that and I fucking suck at sprites. -Ace
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2) // Illegal tech cuz Space Nazis
|
||||
modifystate = "elugerstun"
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
firemodes = list(
|
||||
list(mode_name="stun", charge_cost=120,projectile_type=/obj/item/projectile/beam/stun, modifystate="elugerstun", fire_sound='sound/weapons/Taser.ogg'),
|
||||
list(mode_name="lethal", charge_cost=240,projectile_type=/obj/item/projectile/beam/eluger, modifystate="elugerkill", fire_sound='sound/weapons/eluger.ogg'),
|
||||
)
|
||||
|
||||
//////////////////// Eris Ported Guns ////////////////////
|
||||
//HoP gun
|
||||
/obj/item/weapon/gun/energy/gun/martin
|
||||
name = "holdout energy gun"
|
||||
desc = "The FS PDW E \"Martin\" is small holdout e-gun. Don't miss!"
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "PDW"
|
||||
item_state = "gun"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
projectile_type = /obj/item/projectile/beam/stun
|
||||
charge_cost = 1200
|
||||
charge_meter = 0
|
||||
modifystate = null
|
||||
battery_lock = 1
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg', charge_cost = 600),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg', charge_cost = 1200),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/martin/proc/update_mode()
|
||||
var/datum/firemode/current_mode = firemodes[sel_mode]
|
||||
switch(current_mode.name)
|
||||
if("stun") add_overlay("taser_pdw")
|
||||
if("lethal") add_overlay("lazer_pdw")
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/martin/update_icon()
|
||||
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
|
||||
var/locked = 1
|
||||
var/lockable = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/attackby(obj/item/I, mob/user)
|
||||
var/obj/item/weapon/card/id/id = I.GetID()
|
||||
if(!lockable)
|
||||
return ..()
|
||||
if(istype(id))
|
||||
if(check_access(id))
|
||||
locked = !locked
|
||||
to_chat(user, "<span class='warning'>You [locked ? "enable" : "disable"] the safety lock on \the [src].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Access denied.</span>")
|
||||
user.visible_message("<span class='notice'>[user] swipes \the [I] against \the [src].</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/emag_act(var/remaining_charges,var/mob/user)
|
||||
..()
|
||||
if(locked)
|
||||
locked = !locked
|
||||
to_chat(user, "<span class='warning'>You [locked ? "enable" : "disable"] the safety lock on \the [src]!</span>")
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/special_check(mob/user)
|
||||
if(locked)
|
||||
var/turf/T = get_turf(src)
|
||||
if(T.z in using_map.map_levels)
|
||||
to_chat(user, "<span class='warning'>The safety device prevents the gun from firing this close to the facility.</span>")
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
//Expedition Frontier Phaser
|
||||
/obj/item/weapon/gun/energy/locked/frontier
|
||||
name = "frontier phaser"
|
||||
desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "phaser"
|
||||
item_state = "phaser"
|
||||
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi', "slot_belt" = 'icons/mob/belt_vr.dmi')
|
||||
fire_sound = 'sound/weapons/laser2.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 2, TECH_POWER = 4)
|
||||
charge_cost = 300
|
||||
|
||||
battery_lock = 1
|
||||
unacidable = 1
|
||||
|
||||
var/recharging = 0
|
||||
var/phase_power = 75
|
||||
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
firemodes = list(
|
||||
list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam, charge_cost = 300),
|
||||
list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/frontier/unload_ammo(var/mob/user)
|
||||
if(recharging)
|
||||
return
|
||||
recharging = 1
|
||||
update_icon()
|
||||
user.visible_message("<span class='notice'>[user] opens \the [src] and starts pumping the handle.</span>", \
|
||||
"<span class='notice'>You open \the [src] and start pumping the handle.</span>")
|
||||
while(recharging)
|
||||
if(!do_after(user, 10, src))
|
||||
break
|
||||
playsound(get_turf(src),'sound/items/change_drill.ogg',25,1)
|
||||
if(power_supply.give(phase_power) < phase_power)
|
||||
break
|
||||
|
||||
recharging = 0
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/frontier/update_icon()
|
||||
if(recharging)
|
||||
icon_state = "[initial(icon_state)]_pump"
|
||||
update_held_icon()
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/frontier/emp_act(severity)
|
||||
return ..(severity+2)
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/frontier/ex_act() //|rugged|
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/frontier/unlocked
|
||||
desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization."
|
||||
req_access = newlist() //for toggling safety
|
||||
locked = 0
|
||||
lockable = 0
|
||||
|
||||
//Phaser Carbine - Reskinned phaser
|
||||
/obj/item/weapon/gun/energy/locked/frontier/carbine
|
||||
name = "frontier carbine"
|
||||
desc = "An ergonomically improved version of the venerable frontier phaser, the carbine is a fairly new weapon, and has only been produced in limited numbers so far. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "carbinekill"
|
||||
item_state = "retro"
|
||||
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi')
|
||||
|
||||
modifystate = "carbinekill"
|
||||
firemodes = list(
|
||||
list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam, modifystate="carbinekill", charge_cost = 300),
|
||||
list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, modifystate="carbinestun", charge_cost = 60),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/frontier/carbine/update_icon()
|
||||
if(recharging)
|
||||
icon_state = "[modifystate]_pump"
|
||||
update_held_icon()
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/frontier/carbine/unlocked
|
||||
desc = "An ergonomically improved version of the venerable frontier phaser, the carbine is a fairly new weapon, and has only been produced in limited numbers so far."
|
||||
req_access = newlist() //for toggling safety
|
||||
locked = 0
|
||||
lockable = 0
|
||||
|
||||
//Expeditionary Holdout Phaser Pistol
|
||||
/obj/item/weapon/gun/energy/locked/frontier/holdout
|
||||
name = "holdout frontier phaser"
|
||||
desc = "An minaturized weapon designed for the purpose of expeditionary support to defend themselves on the field. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "holdoutkill"
|
||||
item_state = null
|
||||
phase_power = 100
|
||||
|
||||
w_class = ITEMSIZE_SMALL
|
||||
charge_cost = 600
|
||||
modifystate = "holdoutkill"
|
||||
firemodes = list(
|
||||
list(mode_name="lethal", fire_delay=12, projectile_type=/obj/item/projectile/beam, modifystate="holdoutkill", charge_cost = 600),
|
||||
list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, modifystate="holdoutstun", charge_cost = 120),
|
||||
list(mode_name="stun", fire_delay=12, projectile_type=/obj/item/projectile/beam/stun/med, modifystate="holdoutshock", charge_cost = 300),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/locked/frontier/holdout/unlocked
|
||||
desc = "An minaturized weapon designed for the purpose of expeditionary support to defend themselves on the field. Includes a built-in crank charger for recharging away from civilization."
|
||||
req_access = newlist() //for toggling safety
|
||||
locked = 0
|
||||
lockable = 0
|
||||
@@ -1,35 +1,12 @@
|
||||
/obj/item/weapon/gun/energy/netgun
|
||||
name = "energy net gun"
|
||||
desc = "A Kitsuhana-designed, usually dubbed 'Hunter' or 'non-lethal capture device' stunner and energy net launcher, \
|
||||
for when you want criminals to stop acting like they're on a 20th century British comedy sketch show."
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
|
||||
desc = "Specially made-to-order by Xenonomix, the XX-1 \"Varmint Catcher\" is designed to trap even the most unruly of creatures for safe transport."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "hunter"
|
||||
icon_state = "netgun"
|
||||
item_state = "gun" // Placeholder
|
||||
mode_name = "stun"
|
||||
|
||||
fire_sound = 'sound/weapons/eluger.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_MAGNET = 3)
|
||||
projectile_type = /obj/item/projectile/beam/stun/blue
|
||||
charge_cost = 240
|
||||
fire_delay = 5
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/blue, fire_sound='sound/weapons/Taser.ogg', charge_cost=240, fire_delay=5),
|
||||
list(mode_name="capture", projectile_type=/obj/item/projectile/beam/energy_net, fire_sound = 'sound/weapons/eluger.ogg', charge_cost=1200, fire_delay=50)
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/netgun/update_icon()
|
||||
overlays.Cut()
|
||||
|
||||
if(power_supply)
|
||||
var/ratio = power_supply.charge / power_supply.maxcharge
|
||||
|
||||
if(power_supply.charge < charge_cost)
|
||||
ratio = 0
|
||||
else
|
||||
ratio = max(round(ratio, 0.25) * 100, 25)
|
||||
|
||||
overlays += "[initial(icon_state)]_cell"
|
||||
overlays += "[initial(icon_state)]_[ratio]"
|
||||
overlays += "[initial(icon_state)]_[mode_name]"
|
||||
projectile_type = /obj/item/projectile/beam/energy_net
|
||||
charge_cost = 800
|
||||
fire_delay = 50
|
||||
|
||||
104
code/modules/projectiles/guns/energy/protector_vr.dm
Normal file
104
code/modules/projectiles/guns/energy/protector_vr.dm
Normal file
@@ -0,0 +1,104 @@
|
||||
// -------------- Protector -------------
|
||||
/obj/item/weapon/gun/energy/gun/protector
|
||||
name = "secure small energy gun"
|
||||
desc = "The LAEP95 'Protector' is another firearm from Lawson Arms and "+TSC_HEPH+", unlike the Perun this is designed for issue to non-security staff. It contains a detachable cell, and an alert-level-locked lethal mode, only usable on code blue and higher. It also features an integrated flashlight!"
|
||||
|
||||
description_info = "This gun can only be fired in lethal mode while on higher security alert levels. It is legal for sec to carry for this reason, since it cannot be used for lethal force until SOP allows it, in essence."
|
||||
description_fluff = "A lighter weapon designed for non-security staff, this gun has a wireless connection to the computer's datacore to ensure it can't be used without authorization from heads of staff who have raised the alert level. Until then, *click*!"
|
||||
description_antag = "The gun can be emagged to remove the lethal security level restriction, allowing it to be fired on lethal mode at all times."
|
||||
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
icon_state = "prot"
|
||||
|
||||
icon_override = 'icons/vore/custom_guns_vr.dmi'
|
||||
item_state = "gun"
|
||||
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
projectile_type = /obj/item/projectile/beam/stun
|
||||
|
||||
modifystate = "stun"
|
||||
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2)
|
||||
|
||||
charge_sections = 3 //For the icon
|
||||
ammo_x_offset = 2
|
||||
ammo_y_offset = 0
|
||||
can_flashlight = TRUE
|
||||
light_state = "prot_light"
|
||||
flight_x_offset = 0
|
||||
flight_y_offset = 0
|
||||
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/med, modifystate="stun", charge_cost = 400),
|
||||
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="kill", charge_cost = 800),
|
||||
)
|
||||
|
||||
var/emagged = FALSE
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/protector/special_check(mob/user)
|
||||
if(!emagged && mode_name == "lethal" && get_security_level() == "green")
|
||||
to_chat(user,"<span class='warning'>The trigger refuses to depress while on the lethal setting under security level green!</span>")
|
||||
return FALSE
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/protector/emag_act(var/remaining_charges,var/mob/user)
|
||||
..()
|
||||
if(!emagged)
|
||||
emagged = TRUE
|
||||
to_chat(user,"<span class='warning'>You disable the alert level locking mechanism on \the [src]!</span>")
|
||||
|
||||
return TRUE
|
||||
|
||||
//Update icons from /tg/, so fancy! Use this more!
|
||||
/obj/item/weapon/gun/energy/gun/protector/update_icon()
|
||||
overlays.Cut()
|
||||
var/ratio = 0
|
||||
|
||||
/* Don't have one for this gun
|
||||
var/itemState = null
|
||||
if(!initial(item_state))
|
||||
itemState = icon_state
|
||||
*/
|
||||
|
||||
var/iconState = "[icon_state]_charge"
|
||||
if (modifystate)
|
||||
overlays += "[icon_state]_[modifystate]"
|
||||
iconState += "_[modifystate]"
|
||||
/* Don't have one for this gun
|
||||
if(itemState)
|
||||
itemState += "[modifystate]"
|
||||
*/
|
||||
if(power_supply)
|
||||
ratio = CEILING(((power_supply.charge / power_supply.maxcharge) * charge_sections), 1)
|
||||
|
||||
if(power_supply.charge < charge_cost)
|
||||
overlays += "[icon_state]_empty"
|
||||
else
|
||||
if(!shaded_charge)
|
||||
var/mutable_appearance/charge_overlay = mutable_appearance(icon, iconState)
|
||||
for(var/i = ratio, i >= 1, i--)
|
||||
charge_overlay.pixel_x = ammo_x_offset * (i - 1)
|
||||
overlays += charge_overlay
|
||||
else
|
||||
overlays += "[icon_state]_[modifystate][ratio]"
|
||||
|
||||
if(can_flashlight & gun_light)
|
||||
var/mutable_appearance/flashlight_overlay = mutable_appearance(icon, light_state)
|
||||
flashlight_overlay.pixel_x = flight_x_offset
|
||||
flashlight_overlay.pixel_y = flight_y_offset
|
||||
overlays += flashlight_overlay
|
||||
|
||||
/* Don't have one for this gun
|
||||
if(itemState)
|
||||
itemState += "[ratio]"
|
||||
item_state = itemState
|
||||
*/
|
||||
|
||||
/obj/item/weapon/gun/energy/gun/protector/unlocked
|
||||
emagged = TRUE
|
||||
name = "small energy gun"
|
||||
desc = "The LAEP95 'Protector' is another firearm from Lawson Arms and "+TSC_HEPH+", unlike the Perun this is designed for issue to non-security staff. It contains a detachable cell. It also features an integrated flashlight!"
|
||||
48
code/modules/projectiles/guns/energy/pummeler_vr.dm
Normal file
48
code/modules/projectiles/guns/energy/pummeler_vr.dm
Normal file
@@ -0,0 +1,48 @@
|
||||
// -------------- Pummeler -------------
|
||||
/obj/item/weapon/gun/energy/pummeler
|
||||
name = "hypersonic gun"
|
||||
desc = "For when you want to get that pesky marketing guy out of your face ASAP. The PML9 'Pummeler' fires one HUGE \
|
||||
sonic blast in the direction of fire, throwing the target away from you at high speed. Now you can REALLY \
|
||||
turn up the bass to max."
|
||||
|
||||
description_info = "This gun punts people away and has a chance of knocking them down briefly. It may also throw them over railings in the process!"
|
||||
description_fluff = ""
|
||||
description_antag = ""
|
||||
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
icon_state = "pum"
|
||||
|
||||
icon_override = 'icons/vore/custom_guns_vr.dmi'
|
||||
item_state = "gun"
|
||||
|
||||
fire_sound = 'sound/effects/basscannon.ogg'
|
||||
projectile_type = /obj/item/projectile/pummel
|
||||
|
||||
charge_cost = 600
|
||||
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_MAGNET = 5)
|
||||
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
w_class = ITEMSIZE_LARGE
|
||||
|
||||
//Projectile
|
||||
/obj/item/projectile/pummel
|
||||
name = "sonic blast"
|
||||
icon_state = "sound"
|
||||
damage = 5
|
||||
damage_type = BRUTE
|
||||
check_armour = "melee"
|
||||
embed_chance = 0
|
||||
vacuum_traversal = 0
|
||||
range = 6 //Scary name, but just deletes the projectile after this range
|
||||
|
||||
/obj/item/projectile/pummel/on_hit(var/atom/movable/target, var/blocked = 0)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
var/throwdir = get_dir(firer,L)
|
||||
if(prob(40) && !blocked)
|
||||
L.Stun(1)
|
||||
L.Confuse(1)
|
||||
L.throw_at(get_edge_target_turf(L, throwdir), rand(3,6), 10)
|
||||
|
||||
return 1
|
||||
48
code/modules/projectiles/guns/energy/sickshot_vr.dm
Normal file
48
code/modules/projectiles/guns/energy/sickshot_vr.dm
Normal file
@@ -0,0 +1,48 @@
|
||||
// -------------- Sickshot -------------
|
||||
/obj/item/weapon/gun/energy/sickshot
|
||||
name = "\'Sickshot\' revolver"
|
||||
desc = "Need to stun someone? Don't mind having to clean up the mess afterwards? The MPA6 'Sickshot' is the answer to your prayers. \
|
||||
Using a short-range concentrated blast of disruptive sound, the Sickshot will nauseate and confuse the target for several seconds. NOTE: Not suitable \
|
||||
for use in vacuum. Usage on animals may cause panic and rage without stunning. May cause contraction and release of various 'things' from various 'orifices', even if the target is already dead."
|
||||
|
||||
description_info = "This gun causes nausea in targets, stunning them briefly and causing vomiting. It will also cause them to vomit up prey, sometimes. Repeated shots may help in that case."
|
||||
description_fluff = ""
|
||||
description_antag = ""
|
||||
|
||||
icon = 'icons/vore/custom_guns_vr.dmi'
|
||||
icon_state = "sickshot"
|
||||
|
||||
icon_override = 'icons/vore/custom_guns_vr.dmi'
|
||||
item_state = "gun"
|
||||
|
||||
fire_sound = 'sound/weapons/eluger.ogg'
|
||||
projectile_type = /obj/item/projectile/sickshot
|
||||
|
||||
charge_cost = 600
|
||||
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_MAGNET = 2)
|
||||
|
||||
//Projectile
|
||||
/obj/item/projectile/sickshot
|
||||
name = "sickshot pulse"
|
||||
icon_state = "sound"
|
||||
damage = 5
|
||||
armor_penetration = 30
|
||||
damage_type = BURN
|
||||
check_armour = "melee"
|
||||
embed_chance = 0
|
||||
vacuum_traversal = 0
|
||||
range = 5 //Scary name, but just deletes the projectile after this range
|
||||
|
||||
/obj/item/projectile/sickshot/on_hit(var/atom/movable/target, var/blocked = 0)
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(prob(20))
|
||||
L.release_vore_contents()
|
||||
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.vomit()
|
||||
H.Confuse(2)
|
||||
|
||||
return 1
|
||||
@@ -1,2 +1,226 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/wt550/lethal
|
||||
magazine_type = /obj/item/ammo_magazine/m9mmt
|
||||
magazine_type = /obj/item/ammo_magazine/m9mmt
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//////////////////// Projectile Weapons ////////////////////
|
||||
////////////////////////////////////////////////////////////
|
||||
// For general use
|
||||
/obj/item/weapon/gun/projectile/automatic/battlerifle
|
||||
name = "\improper USDF service rifle"
|
||||
desc = "You had your chance to be afraid before you joined my beloved Corps! But, to guide you back to the true path, I have brought this motivational device! Uses 9.5x40mm rounds."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "battlerifle"
|
||||
icon_override = 'icons/obj/gun_vr.dmi'
|
||||
item_state = "battlerifle_i"
|
||||
item_icons = null
|
||||
w_class = ITEMSIZE_LARGE
|
||||
recoil = 2 // The battlerifle was known for its nasty recoil.
|
||||
max_shells = 36
|
||||
caliber = "9.5x40mm"
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
|
||||
magazine_type = /obj/item/ammo_magazine/m95
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m95)
|
||||
fire_sound = 'sound/weapons/battlerifle.ogg'
|
||||
load_method = MAGAZINE
|
||||
slot_flags = SLOT_BACK
|
||||
one_handed_penalty = 60 // The weapon itself is heavy
|
||||
|
||||
// For general use
|
||||
/obj/item/weapon/gun/projectile/automatic/pdw
|
||||
name = "personal defense weapon"
|
||||
desc = "The X-9MM is a select-fire personal defense weapon designed in-house by Xing Private Security. It was made to compete with the WT550 Saber, but never caught on with NanoTrasen. Uses 9mm rounds."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "pdw"
|
||||
item_state = "c20r" // Placeholder
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
caliber = "9mm"
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
|
||||
slot_flags = SLOT_BELT
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/m9mml
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m9mm, /obj/item/ammo_magazine/m9mml)
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, burst_accuracy=list(0,-15,-30), dispersion=list(0.0, 0.6, 0.6))
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/pdw/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
if(istype(ammo_magazine,/obj/item/ammo_magazine/m9mm))
|
||||
icon_state = "pdw-short"
|
||||
else
|
||||
icon_state = (ammo_magazine)? "pdw" : "pdw-empty"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
|
||||
// For general use
|
||||
/obj/item/weapon/gun/projectile/automatic/stg
|
||||
name = "\improper Sturmgewehr"
|
||||
desc = "An STG-560 built by RauMauser. Experience the terror of the Siegfried line, redone for the 26th century! The Kaiser would be proud. Uses unique 7.92x33mm Kurz rounds."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "stg60"
|
||||
item_state = "arifle"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
max_shells = 30
|
||||
caliber = "7.92x33mm"
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2, TECH_ILLEGAL = 6)
|
||||
magazine_type = /obj/item/ammo_magazine/mtg
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/mtg)
|
||||
load_method = MAGAZINE
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/stg/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
icon_state = (ammo_magazine)? "stg60" : "stg60-empty"
|
||||
item_state = (ammo_magazine)? "arifle" : "arifle-empty"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
|
||||
// Removed because gun64_vr.dmi guns don't work.
|
||||
/*
|
||||
//-----------------------UF-ARC----------------------------------
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine/fluff/ufarc
|
||||
name = "UF-ARC"
|
||||
desc = "The UF-ARC is a lightweight assault rifle manufactured by the National Armory of Gaia and sold almost exclusively to the United Federation's standing army, the Military Assault Command Operations Department (MACOs)."
|
||||
icon = 'icons/obj/gun64_vr.dmi'
|
||||
icon_state = "ufarc"
|
||||
icon_override = 'icons/obj/gun_vr.dmi'
|
||||
item_state = "battlerifle_i"
|
||||
item_icons = null
|
||||
pixel_x = -16
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine/fluff/ufarc/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
// TODO - Fix this for spriting different size magazines
|
||||
icon_state = (ammo_magazine)? "ufarc" : "ufarc-empty"
|
||||
item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
|
||||
|
||||
|
||||
//-----------------------G44----------------------------------
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine/fluff/g44
|
||||
name = "G44 Rifle"
|
||||
desc = "The G44 is a lightweight assault rifle manufactured by the National Armory of Gaia and sold almost exclusively to the United Federation's standing army, the Military Assault Command Operations Department (MACOs)."
|
||||
icon = 'icons/obj/gun64_vr.dmi'
|
||||
icon_state = "g44"
|
||||
item_state = "bullpup"
|
||||
pixel_x = -16
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/carbine/fluff/g44/update_icon(var/ignore_inhands)
|
||||
..()
|
||||
// TODO - Fix this for spriting different size magazines
|
||||
icon_state = (ammo_magazine)? "g44" : "g44-empty"
|
||||
item_state = (ammo_magazine)? "bullpup" : "bullpup-empty"
|
||||
if(!ignore_inhands) update_held_icon()
|
||||
*/
|
||||
|
||||
//////////////////// Eris Ported Guns ////////////////////
|
||||
// No idea what this is for.
|
||||
/obj/item/weapon/gun/projectile/automatic/sol
|
||||
name = "\improper \"Sol\" SMG"
|
||||
desc = "The FS 9x19mm \"Sol\" is a compact and reliable submachine gun. Uses 9mm rounds."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "SMG-IS"
|
||||
item_state = "wt550"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
slot_flags = SLOT_BELT
|
||||
caliber = "9mm"
|
||||
magazine_type = /obj/item/ammo_magazine/m9mm
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m9mm)
|
||||
load_method = MAGAZINE
|
||||
multi_aim = 1
|
||||
burst_delay = 2
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/sol/proc/update_charge()
|
||||
if(!ammo_magazine)
|
||||
return
|
||||
var/ratio = ammo_magazine.stored_ammo.len / ammo_magazine.max_ammo
|
||||
if(ratio < 0.25 && ratio != 0)
|
||||
ratio = 0.25
|
||||
ratio = round(ratio, 0.25) * 100
|
||||
overlays += "smg_[ratio]"
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/sol/update_icon()
|
||||
icon_state = (ammo_magazine)? "SMG-IS" : "SMG-IS-empty"
|
||||
overlays.Cut()
|
||||
update_charge()
|
||||
|
||||
//--------------- StG-60 ----------------
|
||||
/obj/item/ammo_magazine/m792
|
||||
name = "box mag (7.92x33mm Kurz)"
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "stg_30rnd"
|
||||
caliber = "7.92x33mm"
|
||||
ammo_type = /obj/item/ammo_casing/a792
|
||||
max_ammo = 30
|
||||
mag_type = MAGAZINE
|
||||
|
||||
/obj/item/ammo_casing/a792
|
||||
desc = "A 7.92x33mm Kurz casing."
|
||||
icon_state = "rifle-casing"
|
||||
caliber = "7.92x33mm"
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a762
|
||||
|
||||
/obj/item/ammo_magazine/mtg/empty
|
||||
initial_ammo = 0
|
||||
|
||||
//------------- Battlerifle -------------
|
||||
/obj/item/ammo_magazine/m95
|
||||
name = "box mag (9.5x40mm)"
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "battlerifle"
|
||||
caliber = "9.5x40mm"
|
||||
ammo_type = /obj/item/ammo_casing/a95
|
||||
max_ammo = 36
|
||||
mag_type = MAGAZINE
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_casing/a95
|
||||
desc = "A 9.5x40mm bullet casing."
|
||||
icon_state = "rifle-casing"
|
||||
caliber = "9.5x40mm"
|
||||
projectile_type = /obj/item/projectile/bullet/rifle/a95
|
||||
|
||||
/obj/item/projectile/bullet/rifle/a95
|
||||
damage = 40
|
||||
|
||||
/obj/item/ammo_magazine/m95/empty
|
||||
initial_ammo = 0
|
||||
|
||||
//---------------- PDW ------------------
|
||||
/obj/item/ammo_magazine/m9mml
|
||||
name = "\improper SMG magazine (9mm)"
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "smg"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1800)
|
||||
caliber = "9mm"
|
||||
ammo_type = /obj/item/ammo_casing/a9mm
|
||||
max_ammo = 30
|
||||
multiple_sprites = 1
|
||||
|
||||
/obj/item/ammo_magazine/m9mml/empty
|
||||
initial_ammo = 0
|
||||
|
||||
/obj/item/ammo_magazine/m9mml/ap
|
||||
name = "\improper SMG magazine (9mm armor-piercing)"
|
||||
ammo_type = /obj/item/ammo_casing/a9mm/ap
|
||||
|
||||
/* Seems to have been de-coded?
|
||||
/obj/item/ammo_magazine/m9mml/flash
|
||||
name = "\improper SMG magazine (9mm flash)"
|
||||
ammo_type = /obj/item/ammo_casing/a9mmf
|
||||
|
||||
/obj/item/ammo_magazine/m9mml/rubber
|
||||
name = "\improper SMG magazine (9mm rubber)"
|
||||
ammo_type = /obj/item/ammo_casing/a9mmr
|
||||
|
||||
/obj/item/ammo_magazine/m9mml/practice
|
||||
name = "\improper SMG magazine (9mm practice)"
|
||||
ammo_type = /obj/item/ammo_casing/a9mmp
|
||||
*/
|
||||
|
||||
29
code/modules/projectiles/guns/projectile/dartgun_vr.dm
Normal file
29
code/modules/projectiles/guns/projectile/dartgun_vr.dm
Normal file
@@ -0,0 +1,29 @@
|
||||
//-----------------------Tranq Gun----------------------------------
|
||||
/obj/item/weapon/gun/projectile/dartgun/tranq
|
||||
name = "tranquilizer gun"
|
||||
desc = "A gas-powered dart gun designed by the National Armory of Gaia. This gun is used primarily by United Federation special forces for Tactical Espionage missions. Don't forget your bandana."
|
||||
icon_state = "tranqgun"
|
||||
item_state = null
|
||||
|
||||
caliber = "dart"
|
||||
fire_sound = 'sound/weapons/empty.ogg'
|
||||
fire_sound_text = "a metallic click"
|
||||
recoil = 0
|
||||
silenced = 1
|
||||
load_method = MAGAZINE
|
||||
magazine_type = /obj/item/ammo_magazine/chemdart
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/chemdart)
|
||||
auto_eject = 0
|
||||
|
||||
/obj/item/weapon/gun/projectile/dartgun/tranq/update_icon()
|
||||
if(!ammo_magazine)
|
||||
icon_state = "tranqgun"
|
||||
return 1
|
||||
|
||||
if(!ammo_magazine.stored_ammo || ammo_magazine.stored_ammo.len)
|
||||
icon_state = "tranqgun"
|
||||
else if(ammo_magazine.stored_ammo.len > 5)
|
||||
icon_state = "tranqgun"
|
||||
else
|
||||
icon_state = "tranqgun"
|
||||
return 1
|
||||
@@ -9,4 +9,66 @@
|
||||
magazine_type = /obj/item/ammo_magazine/m9mm/large/preban // Spawns with big magazines that are legal.
|
||||
|
||||
/obj/item/weapon/gun/projectile/p92x/large/preban/hp
|
||||
magazine_type = /obj/item/ammo_magazine/m9mm/large/preban/hp // Spawns with legal hollow-point mag
|
||||
magazine_type = /obj/item/ammo_magazine/m9mm/large/preban/hp // Spawns with legal hollow-point mag
|
||||
|
||||
//////////////////// Eris Ported Guns ////////////////////
|
||||
//HoS Gun
|
||||
/obj/item/weapon/gun/projectile/lamia
|
||||
name = "FS HG .44 \"Lamia\""
|
||||
desc = "Uses .44 rounds."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "Headdeagle"
|
||||
item_state = "revolver"
|
||||
caliber = ".44"
|
||||
magazine_type = /obj/item/ammo_magazine/m44/rubber
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m44,/obj/item/ammo_magazine/m44/rubber)
|
||||
load_method = MAGAZINE
|
||||
auto_eject = 1
|
||||
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 4)
|
||||
|
||||
/obj/item/weapon/gun/projectile/lamia/update_icon()
|
||||
overlays.Cut()
|
||||
if(!ammo_magazine)
|
||||
return
|
||||
var/ratio = ammo_magazine.stored_ammo.len * 100 / ammo_magazine.max_ammo
|
||||
ratio = round(ratio, 33)
|
||||
overlays += "deagle_[ratio]"
|
||||
|
||||
//Civilian gun
|
||||
/obj/item/weapon/gun/projectile/giskard
|
||||
name = "\improper \"Giskard\" holdout pistol"
|
||||
desc = "The FS HG .380 \"Giskard\" can even fit into the pocket! Uses .380 rounds."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "giskardcivil"
|
||||
caliber = ".380"
|
||||
magazine_type = /obj/item/ammo_magazine/m380
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m380)
|
||||
load_method = MAGAZINE
|
||||
w_class = ITEMSIZE_SMALL
|
||||
fire_sound = 'sound/weapons/gunshot_pathetic.ogg'
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 3)
|
||||
|
||||
/obj/item/weapon/gun/projectile/giskard/update_icon()
|
||||
..()
|
||||
if(ammo_magazine && ammo_magazine.stored_ammo.len)
|
||||
icon_state = "giskardcivil"
|
||||
else
|
||||
icon_state = "giskardcivil_empty"
|
||||
|
||||
//Not so civilian gun
|
||||
/obj/item/weapon/gun/projectile/giskard/olivaw
|
||||
name = "\improper \"Olivaw\" holdout burst-pistol"
|
||||
desc = "The FS HG .380 \"Olivaw\" is a more advanced version of the \"Giskard\". This one seems to have a two-round burst-fire mode. Uses .380 rounds."
|
||||
icon_state = "olivawcivil"
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=1.2, move_delay=null, burst_accuracy=null, dispersion=null),
|
||||
list(mode_name="2-round bursts", burst=2, fire_delay=0.2, move_delay=4, burst_accuracy=list(0,-15), dispersion=list(1.2, 1.8)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/giskard/olivaw/update_icon()
|
||||
..()
|
||||
if(ammo_magazine && ammo_magazine.stored_ammo.len)
|
||||
icon_state = "olivawcivil"
|
||||
else
|
||||
icon_state = "olivawcivil_empty"
|
||||
|
||||
115
code/modules/projectiles/guns/projectile/revolver_vr.dm
Normal file
115
code/modules/projectiles/guns/projectile/revolver_vr.dm
Normal file
@@ -0,0 +1,115 @@
|
||||
//////////////////// Eris Ported Guns ////////////////////
|
||||
//Detective gun
|
||||
/obj/item/weapon/gun/projectile/revolver/consul
|
||||
name = "\improper \"Consul\" Revolver"
|
||||
desc = "Are you feeling lucky, punk? Uses .44 rounds."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "inspector"
|
||||
item_state = "revolver"
|
||||
caliber = ".44"
|
||||
ammo_type = /obj/item/ammo_casing/a44/rubber
|
||||
handle_casings = CYCLE_CASINGS
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/consul/proc/update_charge()
|
||||
if(loaded.len==0)
|
||||
overlays += "inspector_off"
|
||||
else
|
||||
overlays += "inspector_on"
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolver/consul/update_icon()
|
||||
overlays.Cut()
|
||||
update_charge()
|
||||
|
||||
//.357 special ammo
|
||||
/obj/item/ammo_magazine/s357/stun
|
||||
name = "speedloader (.357 stun)"
|
||||
desc = "A speedloader for .357 revolvers."
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "s357"
|
||||
caliber = ".357"
|
||||
ammo_type = /obj/item/ammo_casing/a357/stun
|
||||
|
||||
|
||||
/obj/item/ammo_casing/a357/stun
|
||||
desc = "A .357 stun bullet casing."
|
||||
caliber = ".357"
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "stun357"
|
||||
projectile_type = /obj/item/projectile/energy/electrode/stunshot/strong
|
||||
|
||||
/obj/item/ammo_magazine/s357/rubber
|
||||
name = "speedloader (.357 rubber)"
|
||||
desc = "A speedloader for .357 revolvers."
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "r357"
|
||||
caliber = ".357"
|
||||
ammo_type = /obj/item/ammo_casing/a357/rubber
|
||||
|
||||
|
||||
/obj/item/ammo_casing/a357/rubber
|
||||
desc = "A .357 rubber bullet casing."
|
||||
caliber = ".357"
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "rubber357"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/rubber/strong
|
||||
|
||||
/obj/item/ammo_magazine/s357/flash
|
||||
name = "speedloader (.357 flash)"
|
||||
desc = "A speedloader for .357 revolvers."
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "f357"
|
||||
caliber = ".357"
|
||||
ammo_type = /obj/item/ammo_casing/a357/flash
|
||||
|
||||
/obj/item/ammo_casing/a357/flash
|
||||
desc = "A .357 flash bullet casing."
|
||||
caliber = ".357"
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "flash357"
|
||||
projectile_type = /obj/item/projectile/energy/flash/strong
|
||||
|
||||
//.380
|
||||
/obj/item/ammo_casing/a380
|
||||
desc = "A .380 bullet casing."
|
||||
caliber = ".380"
|
||||
projectile_type = /obj/item/projectile/bullet/pistol
|
||||
|
||||
/obj/item/ammo_magazine/m380
|
||||
name = "magazine (.380)"
|
||||
icon_state = "9x19p"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 480)
|
||||
caliber = ".380"
|
||||
ammo_type = /obj/item/ammo_casing/a380
|
||||
max_ammo = 8
|
||||
multiple_sprites = 1
|
||||
|
||||
//.44
|
||||
/obj/item/ammo_casing/a44/rubber
|
||||
icon_state = "r-casing"
|
||||
desc = "A .44 rubber bullet casing."
|
||||
projectile_type = /obj/item/projectile/bullet/pistol/rubber/strong
|
||||
|
||||
/obj/item/ammo_magazine/m44/rubber
|
||||
desc = "A magazine for .44 less-than-lethal ammo."
|
||||
ammo_type = /obj/item/ammo_casing/a44/rubber
|
||||
|
||||
//.44 speedloaders
|
||||
/obj/item/ammo_magazine/s44
|
||||
name = "speedloader (.44)"
|
||||
desc = "A speedloader for .44 revolvers."
|
||||
icon = 'icons/obj/ammo_vr.dmi'
|
||||
icon_state = "s357"
|
||||
caliber = ".44"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1260)
|
||||
ammo_type = /obj/item/ammo_casing/a44
|
||||
max_ammo = 6
|
||||
multiple_sprites = 1
|
||||
mag_type = SPEEDLOADER
|
||||
|
||||
/obj/item/ammo_magazine/s44/rubber
|
||||
name = "speedloader (.44 rubber)"
|
||||
icon_state = "r357"
|
||||
ammo_type = /obj/item/ammo_casing/a44/rubber
|
||||
11
code/modules/projectiles/guns/projectile/shotgun_vr.dm
Normal file
11
code/modules/projectiles/guns/projectile/shotgun_vr.dm
Normal file
@@ -0,0 +1,11 @@
|
||||
// For general use
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/USDF
|
||||
name = "\improper USDF tactical shotgun"
|
||||
desc = "All you greenhorns who wanted to see Xenomorphs up close... this is your lucky day. Uses 12g rounds."
|
||||
icon = 'icons/obj/gun_vr.dmi'
|
||||
icon_state = "haloshotgun"
|
||||
icon_override = 'icons/obj/gun_vr.dmi'
|
||||
item_state = "haloshotgun_i"
|
||||
item_icons = null
|
||||
ammo_type = /obj/item/ammo_casing/a12g
|
||||
max_shells = 12
|
||||
@@ -1,36 +0,0 @@
|
||||
////////////// Dragunov Sniper Rifle //////////////
|
||||
|
||||
/obj/item/weapon/gun/projectile/SVD
|
||||
name = "\improper Dragunov"
|
||||
desc = "The SVD, also known as the Dragunov, was mass produced with an Optical Sniper Sight so simple that even Ivan can figure out how it works. Too bad for you that it's written in Russian. Uses 7.62mm rounds."
|
||||
icon_state = "SVD"
|
||||
item_state = "SVD"
|
||||
w_class = ITEMSIZE_HUGE // So it can't fit in a backpack.
|
||||
force = 10
|
||||
slot_flags = SLOT_BACK // Needs a sprite.
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
|
||||
recoil = 2 //extra kickback
|
||||
caliber = "a762"
|
||||
load_method = MAGAZINE
|
||||
accuracy = -45 //shooting at the hip
|
||||
scoped_accuracy = 0
|
||||
one_handed_penalty = 60 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
|
||||
fire_sound = 'sound/weapons/SVD_shot.ogg'
|
||||
magazine_type = /obj/item/ammo_magazine/m762
|
||||
allowed_magazines = list(/obj/item/ammo_magazine/m762)
|
||||
|
||||
/obj/item/weapon/gun/projectile/SVD/update_icon()
|
||||
..()
|
||||
// if(istype(ammo_magazine,/obj/item/ammo_magazine/m762)
|
||||
// icon_state = "SVD-bigmag" //No icon for this exists yet.
|
||||
if(ammo_magazine)
|
||||
icon_state = "SVD"
|
||||
else
|
||||
icon_state = "SVD-empty"
|
||||
|
||||
/obj/item/weapon/gun/projectile/SVD/verb/scope()
|
||||
set category = "Object"
|
||||
set name = "Use Scope"
|
||||
set popup_menu = 1
|
||||
|
||||
toggle_scope(2.0)
|
||||
Reference in New Issue
Block a user