Also fixes slidey walls at centcom, gives the ERT commander a NSFW with stun, xray, lethal, and net. Gives deathsquad a full NSFW kit (including 'final option' ammo), replaces my own fluff Hunter with a NSFW with stun and net (so, same as the hunter, but that sprite is so badass I can't help it), and fixes a typo on my permit while I'm on there (KIN isn't a thing, KHI is).
This commit is contained in:
Arokha Sieyes
2017-06-17 15:44:52 -04:00
parent 06528e4751
commit bd39011ab4
12 changed files with 436 additions and 32 deletions
@@ -163,19 +163,15 @@
New()
..() //Might look like a lot... but all small items.
/*
new /obj/item/weapon/reagent_containers/hypospray/vr/fluff/aronai(src)
new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_st(src)
new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_bt(src)
new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_bu(src)
new /obj/item/weapon/reagent_containers/glass/beaker/vial/vr/fluff/aro_tx(src)
*/
//Centcom stuff and permit
new /obj/item/weapon/card/id/centcom/fluff/aronai(src)
new /obj/item/fluff/permit/aronai_kadigan(src)
//new /obj/item/clothing/glasses/omnihud/med/fluff/aronai(src)
//Gun and holster
new /obj/item/weapon/gun/energy/netgun(src)
new /obj/item/weapon/gun/projectile/nsfw(src)
new /obj/item/ammo_magazine/nsfw_mag(src)
new /obj/item/ammo_casing/nsfw_batt/stun(src)
new /obj/item/ammo_casing/nsfw_batt/stun(src)
new /obj/item/ammo_casing/nsfw_batt/net(src)
new /obj/item/clothing/accessory/holster(src)
//Aerowing:Sebastian Aji
@@ -77,7 +77,7 @@
<b>DOB:</b> 12/Jul/2530 | <b>HEIGHT:</b> 188cm | <b>SEX:</b> Male
The individual named above is licensed by the Nanotrasen Department of Civil Protection
to carry one KIN (foreign) personal defense weapon, non-lethal only.
to carry one KHI (foreign) personal defense weapon, non-lethal only.
This license expires on 16/Feb/2562 and must be renewed by CentCom prior to this date."}
// joanrisu:Joan Risu
+383
View File
@@ -0,0 +1,383 @@
// -------------- NSFW -------------
/obj/item/weapon/gun/projectile/nsfw
name = "KHI-102b \'NSFW\'"
desc = "Variety is the spice of life! The 'Nanotech Selectable-Fire Weapon' is an unholy hybrid of an ammo-driven \
energy weapon that allows the user to mix and match their own fire modes. Up to three 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_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."
description_antag = ""
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/nsfw_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/nsfw/consume_next_projectile()
if(chambered && ammo_magazine)
var/obj/item/ammo_casing/nsfw_batt/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/nsfw_batt/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/nsfw/proc/update_charge()
charge_left = 0
max_charge = 0
if(!chambered)
return
var/obj/item/ammo_casing/nsfw_batt/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/nsfw_batt/bullet = B
if(istype(bullet,batt.type))
charge_left += bullet.shots_left
max_charge += initial(bullet.shots_left)
/obj/item/weapon/gun/projectile/nsfw/proc/switch_to(obj/item/ammo_casing/nsfw_batt/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/nsfw/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)
var/index = our_slot + 1
var/obj/item/ammo_casing/nsfw_batt/new_choice
while((index != our_slot) && !new_choice)
if(index > stored_ammo.len)
index = 1
var/obj/item/ammo_casing/nsfw_batt/next_batt = stored_ammo[index]
if(!istype(next_batt,chambered.type))
new_choice = next_batt
index++
if(new_choice)
switch_to(new_choice)
/*
/obj/item/weapon/gun/projectile/nsfw/special_check(mob/user)
if(!chambered)
return
var/obj/item/ammo_casing/nsfw_batt/batt = chambered
if(!batt.shots_left)
return FALSE
return TRUE
*/
/obj/item/weapon/gun/projectile/nsfw/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/nsfw/unload_ammo(mob/user, var/allow_dump=1)
chambered = null
return ..()
/obj/item/weapon/gun/projectile/nsfw/update_icon()
var/mutable_appearance/ma = new(src)
update_charge()
if(!chambered)
ma.overlays = list()
appearance = ma
return
var/obj/item/ammo_casing/nsfw_batt/batt = chambered
var/batt_color = batt.type_color //Used many times
var/list/newverlays = list()
//Mode bar
var/mutable_appearance/mode_bar = mutable_appearance(icon, "[initial(icon_state)]_type")
mode_bar.color = batt_color
newverlays += mode_bar
//Barrel color
var/mutable_appearance/barrel_color = mutable_appearance(icon, "[initial(icon_state)]_barrel")
barrel_color.alpha = 150
barrel_color.color = batt_color
newverlays += barrel_color
//Charge bar
var/ratio = Ceiling((charge_left / max_charge) * charge_sections)
for(var/i = 0, i < ratio, i++)
var/mutable_appearance/charge_bar = mutable_appearance(icon, "[initial(icon_state)]_charge")
charge_bar.pixel_x = i
charge_bar.color = batt_color
newverlays += charge_bar
ma.overlays = newverlays
if(ma.overlays.len != newverlays.len) //PANIC!
del(ma)
spawn(5)
update_icon()
return
appearance = ma
// The Magazine //
/obj/item/ammo_magazine/nsfw_mag
name = "microbattery magazine"
desc = "A microbattery holder for the \'NSFW\'"
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."
icon = 'icons/obj/ammo_vr.dmi'
icon_state = "nsfw_mag"
caliber = "nsfw"
matter = list(DEFAULT_WALL_MATERIAL = 1680, "glass" = 2000)
ammo_type = /obj/item/ammo_casing/nsfw_batt
initial_ammo = 0
max_ammo = 3
mag_type = MAGAZINE
var/list/modes
/obj/item/ammo_magazine/nsfw_mag/New()
..()
modes = list()
/obj/item/ammo_magazine/nsfw_mag/update_icon()
var/mutable_appearance/ma = new(src)
if(!stored_ammo.len)
ma.overlays = list()
appearance = ma
return //Why bother
var/x_offset = 5
var/list/newverlays = list()
var/current = 0
for(var/B in stored_ammo)
var/obj/item/ammo_casing/nsfw_batt/batt = B
var/mutable_appearance/cap = mutable_appearance(icon,"[initial(icon_state)]_cap")
cap.color = batt.type_color
cap.pixel_x = current * x_offset //Caps don't need a pixel_y offset
newverlays += cap
if(batt.shots_left)
var/ratio = Ceiling((batt.shots_left / initial(batt.shots_left)) * 4) //4 is how many lights we have a sprite for
var/mutable_appearance/charge = mutable_appearance(icon,"[initial(icon_state)]_charge-[ratio]")
charge.color = "#29EAF4" //Could use battery color but eh.
charge.pixel_x = current * x_offset
newverlays += charge
current++ //Increment for offsets
ma.overlays = newverlays
if(ma.overlays.len != newverlays.len) //PANIC!
del(ma)
spawn(5)
update_icon()
return
appearance = ma
// The Casing //
/obj/item/ammo_casing/nsfw_batt
name = "\'NSFW\' microbattery - LETHAL"
desc = "A miniature battery for an energy weapon."
icon = 'icons/obj/ammo_vr.dmi'
icon_state = "nsfw_batt"
flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_EARS
throwforce = 1
w_class = ITEMSIZE_TINY
leaves_residue = 0
caliber = "nsfw"
var/shots_left = 4
var/type_color = "#bf3d3d"
var/type_name = "<span style='color:#bf3d3d;font-weight:bold;'>LETHAL</span>"
projectile_type = /obj/item/projectile/beam
/obj/item/ammo_casing/nsfw_batt/New()
pixel_x = rand(-10, 10)
pixel_y = rand(-10, 10)
update_icon()
/obj/item/ammo_casing/nsfw_batt/update_icon()
var/mutable_appearance/ma = new(src)
ma.overlays.Cut()
var/mutable_appearance/ends = mutable_appearance(icon,"[initial(icon_state)]_ends")
ends.color = type_color
ma.overlays += ends
appearance = ma
/obj/item/ammo_casing/nsfw_batt/expend()
shots_left--
// Specific batteries //
/obj/item/ammo_casing/nsfw_batt/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/nsfw_batt/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/nsfw_batt/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/nsfw_batt/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/nsfw_batt/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/nsfw_batt/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/nsfw_batt/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/laser_omni/muzzle
tracer_type = /obj/effect/projectile/laser_omni/tracer
impact_type = /obj/effect/projectile/laser_omni/impact
/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()
..()
/obj/item/ammo_casing/nsfw_batt/shrink
name = "\'NSFW\' microbattery - SHRINK"
type_color = "#910ffc"
type_name = "<span style='color:#910ffc;font-weight:bold;'>SHRINK</span>"
projectile_type = /obj/item/projectile/beam/shrinklaser
/obj/item/ammo_casing/nsfw_batt/grow
name = "\'NSFW\' microbattery - GROW"
type_color = "#fc0fdc"
type_name = "<span style='color:#fc0fdc;font-weight:bold;'>GROW</span>"
projectile_type = /obj/item/projectile/beam/growlaser
/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!"
max_w_class = ITEMSIZE_NORMAL
/obj/item/weapon/storage/secure/briefcase/nsfw_pack/New()
..()
new /obj/item/weapon/gun/projectile/nsfw(src)
new /obj/item/ammo_magazine/nsfw_mag(src)
for(var/path in typesof(/obj/item/ammo_casing/nsfw_batt))
new path(src)
@@ -2,8 +2,11 @@
/obj/item/weapon/gun/energy/protector
name = "\improper KHI-98a \'Protector\'"
desc = "The KHI-98a is the first firearm custom-designed for Nanotrasen by KHI. It features a powerful stun mode, and \
an alert-level-locked lethal mode, only usable on code blue and higher. It also features an integrated flashlight! \
(CtrlClick to toggle flashlight)"
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 = "The first 'commission' from a Kitsuhana citizen for NanoTrasen, 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"
@@ -5,6 +5,10 @@
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"
@@ -5,6 +5,10 @@
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, or on animals. May cause contraction and release of various 'things' from various 'orifices'."
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"