From cfb53d3c46e5054adae2a9d0d049c10cd0851b83 Mon Sep 17 00:00:00 2001 From: Heroman Date: Tue, 17 Sep 2019 07:12:26 +1000 Subject: [PATCH 1/5] Refactors and rebalances NSFW and ML3M stuff --- code/game/machinery/recharger.dm | 8 +- code/modules/vore/fluffstuff/guns/nsfw.dm | 352 ++++++++++++---------- icons/obj/ammo_vr.dmi | Bin 5227 -> 5366 bytes maps/tether/tether-10-colony.dmm | 20 +- 4 files changed, 209 insertions(+), 171 deletions(-) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 691492a88fd..e9997425078 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -10,7 +10,7 @@ active_power_usage = 40000 //40 kW var/efficiency = 40000 //will provide the modified power rate when upgraded var/obj/item/charging = null - var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/ammo_casing/nsfw_batt) //VOREStation Add - NSFW Batteries + var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/ammo_casing/microbattery) //VOREStation Add - NSFW Batteries var/icon_state_charged = "recharger2" var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" //also when unpowered @@ -72,7 +72,7 @@ if(EW.use_external_power) to_chat(user, "\The [EW] has no recharge port.") return - else if(!G.get_cell() && !istype(G, /obj/item/ammo_casing/nsfw_batt)) //VOREStation Edit: NSFW charging + else if(!G.get_cell() && !istype(G, /obj/item/ammo_casing/microbattery)) //VOREStation Edit: NSFW charging to_chat(user, "\The [G] does not have a battery installed.") return @@ -157,8 +157,8 @@ update_use_power(1) //VOREStation Add - NSFW Batteries - else if(istype(charging, /obj/item/ammo_casing/nsfw_batt)) - var/obj/item/ammo_casing/nsfw_batt/batt = charging + else if(istype(charging, /obj/item/ammo_casing/microbattery)) + var/obj/item/ammo_casing/microbattery/batt = charging if(batt.shots_left >= initial(batt.shots_left)) icon_state = icon_state_charged update_use_power(1) diff --git a/code/modules/vore/fluffstuff/guns/nsfw.dm b/code/modules/vore/fluffstuff/guns/nsfw.dm index 26a6c9c5c19..983de082eb0 100644 --- a/code/modules/vore/fluffstuff/guns/nsfw.dm +++ b/code/modules/vore/fluffstuff/guns/nsfw.dm @@ -1,6 +1,6 @@ // -------------- NSFW ------------- -/obj/item/weapon/gun/projectile/nsfw //this one can load both medical and security cells! for ERT/admin use. - name = "cell-loaded revolver" +/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." @@ -20,21 +20,21 @@ load_method = MAGAZINE //Nyeh heh hehhh. magazine_type = null - allowed_magazines = list(/obj/item/ammo_magazine/nsfw_mag) + 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/nsfw/consume_next_projectile() +/obj/item/weapon/gun/projectile/cell_loaded/consume_next_projectile() if(chambered && ammo_magazine) - var/obj/item/ammo_casing/nsfw_batt/batt = chambered + 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/nsfw_batt/other_batt = B + 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() @@ -42,25 +42,25 @@ return null -/obj/item/weapon/gun/projectile/nsfw/proc/update_charge() +/obj/item/weapon/gun/projectile/cell_loaded/proc/update_charge() charge_left = 0 max_charge = 0 if(!chambered) return - var/obj/item/ammo_casing/nsfw_batt/batt = chambered + 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/nsfw_batt/bullet = B + 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/nsfw/proc/switch_to(obj/item/ammo_casing/nsfw_batt/new_batt) +/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,"\The [src] is now using the next [new_batt.type_name] power cell.") @@ -71,7 +71,7 @@ update_charge() update_icon() -/obj/item/weapon/gun/projectile/nsfw/attack_self(mob/user) +/obj/item/weapon/gun/projectile/cell_loaded/attack_self(mob/user) if(!chambered) return @@ -85,38 +85,38 @@ 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/nsfw_batt/next_batt = stored_ammo[true_index] + 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/nsfw/special_check(mob/user) +/obj/item/weapon/gun/projectile/cell_loaded/special_check(mob/user) if(!chambered) return - var/obj/item/ammo_casing/nsfw_batt/batt = chambered + var/obj/item/ammo_casing/microbattery/batt = chambered if(!batt.shots_left) return FALSE return TRUE */ -/obj/item/weapon/gun/projectile/nsfw/load_ammo(var/obj/item/A, mob/user) +/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/nsfw/unload_ammo(mob/user, var/allow_dump=1) +/obj/item/weapon/gun/projectile/cell_loaded/unload_ammo(mob/user, var/allow_dump=1) chambered = null return ..() -/obj/item/weapon/gun/projectile/nsfw/update_icon() +/obj/item/weapon/gun/projectile/cell_loaded/update_icon() update_charge() cut_overlays() if(!chambered) return - var/obj/item/ammo_casing/nsfw_batt/batt = chambered + var/obj/item/ammo_casing/microbattery/batt = chambered var/batt_color = batt.type_color //Used many times //Mode bar @@ -138,20 +138,28 @@ charge_bar.color = batt_color add_overlay(charge_bar) -/obj/item/weapon/gun/projectile/nsfw/combat +/obj/item/weapon/gun/projectile/cell_loaded/combat + 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) + +/obj/item/weapon/gun/projectile/cell_loaded/combat/advanced 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 three combinations of \ + 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_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 = "" - allowed_magazines = list(/obj/item/ammo_magazine/nsfw_mag/combat) + allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/combat) -/obj/item/weapon/gun/projectile/nsfw/medical +/obj/item/weapon/gun/projectile/cell_loaded/medical name = "\improper ML-3 \'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 three combinations of \ @@ -162,9 +170,9 @@ 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 = "" - allowed_magazines = list(/obj/item/ammo_magazine/nsfw_mag/medical) + allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/medical) -/obj/item/weapon/gun/projectile/nsfw/medical/cmo +/obj/item/weapon/gun/projectile/cell_loaded/medical/cmo name = "\improper Advanced ML-3 \'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 is capable of holding large magazines. Ammo not included." @@ -173,14 +181,14 @@ // The Magazine // -/obj/item/ammo_magazine/nsfw_mag +/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 = "nsfw_mag" + icon_state = "cell_mag" caliber = "nsfw" matter = list(DEFAULT_WALL_MATERIAL = 1680, "glass" = 2000) - ammo_type = /obj/item/ammo_casing/nsfw_batt + 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 @@ -190,14 +198,30 @@ var/list/modes = list() -/obj/item/ammo_magazine/nsfw_mag/update_icon() +/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, "[B] does not fit into [src].") + return + if(stored_ammo.len >= max_ammo) + to_chat(user, "[src] is full!") + 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/nsfw_batt/batt = B + 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 @@ -212,22 +236,32 @@ current++ //Increment for offsets -/obj/item/ammo_magazine/nsfw_mag/combat //security +/obj/item/ammo_magazine/cell_mag/combat //security 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/nsfw_batt/combat + ammo_type = /obj/item/ammo_casing/microbattery/combat -/obj/item/ammo_magazine/nsfw_mag/medical //medical +/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 + +/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/nsfw_batt/medical + ammo_type = /obj/item/ammo_casing/microbattery/medical icon_state = "ml3m_mag" -/obj/item/ammo_magazine/nsfw_mag/medical/advanced +/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 @@ -235,7 +269,7 @@ icon_state = "ml3m_mag_extended" // The Casing // -/obj/item/ammo_casing/nsfw_batt +/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) @@ -252,55 +286,55 @@ var/type_name = null projectile_type = /obj/item/projectile/beam -/obj/item/ammo_casing/nsfw_batt/Initialize() +/obj/item/ammo_casing/microbattery/Initialize() . = ..() pixel_x = rand(-10, 10) pixel_y = rand(-10, 10) update_icon() -/obj/item/ammo_casing/nsfw_batt/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/nsfw_batt/expend() +/obj/item/ammo_casing/microbattery/expend() shots_left-- // Specific batteries // // Security (Combat) // -/obj/item/ammo_casing/nsfw_batt/combat +/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) -/obj/item/ammo_casing/nsfw_batt/combat/lethal +/obj/item/ammo_casing/microbattery/combat/lethal name = "\'NSFW\' microbattery - LETHAL" type_color = "#bf3d3d" type_name = "LETHAL" projectile_type = /obj/item/projectile/beam -/obj/item/ammo_casing/nsfw_batt/combat/stun +/obj/item/ammo_casing/microbattery/combat/stun name = "\'NSFW\' microbattery - STUN" type_color = "#0f81bc" type_name = "STUN" projectile_type = /obj/item/projectile/beam/stun/blue -/obj/item/ammo_casing/nsfw_batt/combat/net +/obj/item/ammo_casing/microbattery/combat/net name = "\'NSFW\' microbattery - NET" type_color = "#43f136" type_name = "NET" projectile_type = /obj/item/projectile/beam/energy_net -/obj/item/ammo_casing/nsfw_batt/combat/xray +/obj/item/ammo_casing/microbattery/combat/xray name = "\'NSFW\' microbattery - XRAY" type_color = "#32c025" type_name = "XRAY" projectile_type = /obj/item/projectile/beam/xray -/obj/item/ammo_casing/nsfw_batt/combat/shotstun +/obj/item/ammo_casing/microbattery/combat/shotstun name = "\'NSFW\' microbattery - SCATTERSTUN" type_color = "#88ffff" type_name = "SCATTERSTUN" @@ -318,13 +352,13 @@ sharp = 0 check_armour = "melee" -/obj/item/ammo_casing/nsfw_batt/combat/ion +/obj/item/ammo_casing/microbattery/combat/ion name = "\'NSFW\' microbattery - ION" type_color = "#d084d6" type_name = "ION" projectile_type = /obj/item/projectile/ion/small -/obj/item/ammo_casing/nsfw_batt/combat/stripper +/obj/item/ammo_casing/microbattery/combat/stripper name = "\'NSFW\' microbattery - STRIPPER" type_color = "#fc8d0f" type_name = "STRIPPER" @@ -354,7 +388,7 @@ //Hats can stay! Most other things fall off with removing these. ..() -/obj/item/ammo_casing/nsfw_batt/combat/final +/obj/item/ammo_casing/microbattery/combat/final name = "\'NSFW\' microbattery - FINAL OPTION" type_color = "#fcfc0f" type_name = "FINAL OPTION" //Doesn't look good in yellow in chat @@ -393,9 +427,9 @@ /obj/item/weapon/storage/secure/briefcase/nsfw_pack/New() ..() - new /obj/item/weapon/gun/projectile/nsfw/combat(src) - new /obj/item/ammo_magazine/nsfw_mag/combat(src) - for(var/path in subtypesof(/obj/item/ammo_casing/nsfw_batt/combat)) + 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 @@ -406,14 +440,27 @@ /obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos/New() ..() - new /obj/item/weapon/gun/projectile/nsfw/combat(src) - new /obj/item/ammo_magazine/nsfw_mag/combat(src) - new /obj/item/ammo_casing/nsfw_batt/combat/lethal(src) - new /obj/item/ammo_casing/nsfw_batt/combat/lethal(src) - new /obj/item/ammo_casing/nsfw_batt/combat/stun(src) - new /obj/item/ammo_casing/nsfw_batt/combat/stun(src) - new /obj/item/ammo_casing/nsfw_batt/combat/net(src) - new /obj/item/ammo_casing/nsfw_batt/combat/ion(src) + 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/net(src) + new /obj/item/ammo_casing/microbattery/combat/ion(src) + +/obj/item/weapon/storage/secure/briefcase/ml3m_pack + 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/New() + ..() + new /obj/item/weapon/gun/projectile/cell_loaded/medical/cmo(src) + new /obj/item/ammo_magazine/cell_mag/medical/advanced(src) + for(var/path in subtypesof(/obj/item/ammo_casing/microbattery/medical)) + new path(src) /obj/item/weapon/storage/secure/briefcase/ml3m_pack_med name = "\improper ML-3 \'Medigun\' kit" @@ -423,11 +470,11 @@ /obj/item/weapon/storage/secure/briefcase/ml3m_pack_med/New() ..() - new /obj/item/weapon/gun/projectile/nsfw/medical(src) - new /obj/item/ammo_magazine/nsfw_mag/medical(src) - new /obj/item/ammo_casing/nsfw_batt/medical/brute(src) - new /obj/item/ammo_casing/nsfw_batt/medical/burn(src) - new /obj/item/ammo_casing/nsfw_batt/medical/stabilize(src) + 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" @@ -437,25 +484,24 @@ /obj/item/weapon/storage/secure/briefcase/ml3m_pack_cmo/New() ..() - new /obj/item/weapon/gun/projectile/nsfw/medical/cmo(src) - new /obj/item/ammo_magazine/nsfw_mag/medical/advanced(src) - new /obj/item/ammo_casing/nsfw_batt/medical/brute2(src) - new /obj/item/ammo_casing/nsfw_batt/medical/brute2(src) - new /obj/item/ammo_casing/nsfw_batt/medical/burn2(src) - new /obj/item/ammo_casing/nsfw_batt/medical/burn2(src) - new /obj/item/ammo_casing/nsfw_batt/medical/stabilize2(src) - new /obj/item/ammo_casing/nsfw_batt/medical/stabilize2(src) + 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) // Medical // -/obj/item/ammo_casing/nsfw_batt/medical +/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" -/obj/item/projectile/beam/ML3M +/obj/item/projectile/beam/medical_cell name = "\improper healing beam" icon_state = "medbeam" nodamage = 1 @@ -469,40 +515,40 @@ tracer_type = /obj/effect/projectile/tracer/medigun impact_type = /obj/effect/projectile/impact/medigun -/obj/item/projectile/beam/ML3M/on_hit(var/mob/living/carbon/human/target) //what does it do when it hits someone? +/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/nsfw_batt/medical/brute +/obj/item/ammo_casing/microbattery/medical/brute name = "\'ML-3/M\' nanite cell - BRUTE" type_color = "#BF0000" type_name = "BRUTE" - projectile_type = /obj/item/projectile/beam/ML3M/brute + projectile_type = /obj/item/projectile/beam/medical_cell/brute -/obj/item/projectile/beam/ML3M/brute/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/brute/on_hit(var/mob/living/carbon/human/target) if(istype(target, /mob/living/carbon/human)) - target.adjustBruteLoss(-10) + target.adjustBruteLoss(-5) else return 1 -/obj/item/ammo_casing/nsfw_batt/medical/burn +/obj/item/ammo_casing/microbattery/medical/burn name = "\'ML-3/M\' nanite cell - BURN" type_color = "#FF8000" type_name = "BURN" - projectile_type = /obj/item/projectile/beam/ML3M/burn + projectile_type = /obj/item/projectile/beam/medical_cell/burn -/obj/item/projectile/beam/ML3M/burn/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/burn/on_hit(var/mob/living/carbon/human/target) if(istype(target, /mob/living/carbon/human)) - target.adjustFireLoss(-10) + target.adjustFireLoss(-5) else return 1 -/obj/item/ammo_casing/nsfw_batt/medical/stabilize +/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 = "STABILIZE" - projectile_type = /obj/item/projectile/beam/ML3M/stabilize + projectile_type = /obj/item/projectile/beam/medical_cell/stabilize -/obj/item/projectile/beam/ML3M/stabilize/on_hit(var/mob/living/carbon/human/target) +/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)) @@ -524,78 +570,78 @@ bleeding_rate_percent = 0.1 //only a little incoming_oxy_damage_percent = 0 -/obj/item/ammo_casing/nsfw_batt/medical/tox - name = "\'ML-3/M\' nanite cell - TOX" +/obj/item/ammo_casing/microbattery/medical/toxin + name = "\'ML-3/M\' nanite cell - TOXIN" type_color = "#00A000" - type_name = "TOX" - projectile_type = /obj/item/projectile/beam/ML3M/tox + type_name = "TOXIN" + projectile_type = /obj/item/projectile/beam/medical_cell/tox -/obj/item/projectile/beam/ML3M/tox/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/tox/on_hit(var/mob/living/carbon/human/target) if(istype(target, /mob/living/carbon/human)) - target.adjustToxLoss(-10) + target.adjustToxLoss(-5) else return 1 -/obj/item/ammo_casing/nsfw_batt/medical/omni +/obj/item/ammo_casing/microbattery/medical/omni name = "\'ML-3/M\' nanite cell - OMNI" type_color = "#8040FF" type_name = "OMNI" - projectile_type = /obj/item/projectile/beam/ML3M/omni + projectile_type = /obj/item/projectile/beam/medical_cell/omni -/obj/item/projectile/beam/ML3M/omni/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/omni/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(-15) + target.adjustBruteLoss(-2.5) + target.adjustFireLoss(-2.5) + target.adjustToxLoss(-2.5) + target.adjustOxyLoss(-10) else return 1 -/obj/item/ammo_casing/nsfw_batt/medical/antirad +/obj/item/ammo_casing/microbattery/medical/antirad name = "\'ML-3/M\' nanite cell - OMNI" type_color = "#008000" type_name = "ANTIRAD" - projectile_type = /obj/item/projectile/beam/ML3M/antirad + projectile_type = /obj/item/projectile/beam/medical_cell/antirad -/obj/item/projectile/beam/ML3M/antirad/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/antirad/on_hit(var/mob/living/carbon/human/target) if(istype(target, /mob/living/carbon/human)) - target.adjustToxLoss(-5) - target.radiation = max(target.radiation - 350, 0) //same as 5 units of arithrazine, sans the brute damage + 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/nsfw_batt/medical/brute2 +/obj/item/ammo_casing/microbattery/medical/brute2 name = "\'ML-3/M\' nanite cell - BRUTE-II" type_color = "#BF0000" type_name = "BRUTE-II" - projectile_type = /obj/item/projectile/beam/ML3M/brute2 + projectile_type = /obj/item/projectile/beam/medical_cell/brute2 -/obj/item/projectile/beam/ML3M/brute2/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/brute2/on_hit(var/mob/living/carbon/human/target) if(istype(target, /mob/living/carbon/human)) - target.adjustBruteLoss(-20) + target.adjustBruteLoss(-10) else return 1 -/obj/item/ammo_casing/nsfw_batt/medical/burn2 +/obj/item/ammo_casing/microbattery/medical/burn2 name = "\'ML-3/M\' nanite cell - BURN-II" type_color = "#FF8000" type_name = "BURN-II" - projectile_type = /obj/item/projectile/beam/ML3M/burn2 + projectile_type = /obj/item/projectile/beam/medical_cell/burn2 -/obj/item/projectile/beam/ML3M/burn2/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/burn2/on_hit(var/mob/living/carbon/human/target) if(istype(target, /mob/living/carbon/human)) - target.adjustFireLoss(-20) + target.adjustFireLoss(-10) else return 1 -/obj/item/ammo_casing/nsfw_batt/medical/stabilize2 +/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 = "STABILIZE-II" - projectile_type = /obj/item/projectile/beam/ML3M/stabilize2 + projectile_type = /obj/item/projectile/beam/medical_cell/stabilize2 -/obj/item/projectile/beam/ML3M/stabilize2/on_hit(var/mob/living/carbon/human/target) +/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)) @@ -612,40 +658,40 @@ else return 1 -/obj/item/ammo_casing/nsfw_batt/medical/omni2 +/obj/item/ammo_casing/microbattery/medical/omni2 name = "\'ML-3/M\' nanite cell - OMNI-II" type_color = "#8040FF" type_name = "OMNI-II" - projectile_type = /obj/item/projectile/beam/ML3M/omni2 + projectile_type = /obj/item/projectile/beam/medical_cell/omni2 -/obj/item/projectile/beam/ML3M/omni2/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/omni2/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.adjustBruteLoss(-5) + target.adjustFireLoss(-5) + target.adjustToxLoss(-5) target.adjustOxyLoss(-30) else return 1 -/obj/item/ammo_casing/nsfw_batt/medical/tox2 - name = "\'ML-3/M\' nanite cell - TOX-II" +/obj/item/ammo_casing/microbattery/medical/toxin2 + name = "\'ML-3/M\' nanite cell - TOXIN-II" type_color = "#00A000" type_name = "TOX-II" - projectile_type = /obj/item/projectile/beam/ML3M/tox2 + projectile_type = /obj/item/projectile/beam/medical_cell/tox2 -/obj/item/projectile/beam/ML3M/tox2/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/tox2/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/nsfw_batt/medical/haste +/obj/item/ammo_casing/microbattery/medical/haste name = "\'ML-3/M\' nanite cell - HASTE" type_color = "#FF3300" type_name = "HASTE" - projectile_type = /obj/item/projectile/beam/ML3M/haste + projectile_type = /obj/item/projectile/beam/medical_cell/haste -/obj/item/projectile/beam/ML3M/haste/on_hit(var/mob/living/carbon/human/target) +/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 @@ -656,16 +702,16 @@ desc = "You can move much faster!" mob_overlay_state = "haste" stacks = MODIFIER_STACK_EXTEND - slowdown = -1 //a little faster! - evasion = 1.25 //and a little harder to hit! + slowdown = -0.5 //a little faster! + evasion = 1.15 //and a little harder to hit! -/obj/item/ammo_casing/nsfw_batt/medical/resistance +/obj/item/ammo_casing/microbattery/medical/resistance name = "\'ML-3/M\' nanite cell - RESIST" type_color = "#555555" type_name = "RESIST" - projectile_type = /obj/item/projectile/beam/ML3M/resistance + projectile_type = /obj/item/projectile/beam/medical_cell/resistance -/obj/item/projectile/beam/ML3M/resistance/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/resistance/on_hit(var/mob/living/carbon/human/target) if(istype(target, /mob/living/carbon/human)) target.add_modifier(/datum/modifier/resistance, 20 SECONDS) else @@ -673,19 +719,19 @@ /datum/modifier/resistance name = "resistance" - desc = "You resist 25% of all incoming damage and stuns!" + desc = "You resist 15% of all incoming damage and stuns!" mob_overlay_state = "repel_missiles" stacks = MODIFIER_STACK_EXTEND - disable_duration_percent = 0.75 - incoming_damage_percent = 0.75 + disable_duration_percent = 0.85 + incoming_damage_percent = 0.85 -/obj/item/ammo_casing/nsfw_batt/medical/revival +/obj/item/ammo_casing/microbattery/medical/revival name = "\'ML-3/M\' nanite cell - REVIVAL" type_color = "#669900" type_name = "REVIVAL" - projectile_type = /obj/item/projectile/beam/ML3M/revival + projectile_type = /obj/item/projectile/beam/medical_cell/revival -/obj/item/projectile/beam/ML3M/revival/on_hit(var/mob/living/carbon/human/target) +/obj/item/projectile/beam/medical_cell/revival/on_hit(var/mob/living/carbon/human/target) if(istype(target, /mob/living/carbon/human)) if(target.stat == DEAD) target.adjustBruteLoss(-50) @@ -695,22 +741,14 @@ else return 1 -/datum/modifier/resistance - name = "resistance" - desc = "You resist 25% of all incoming damage and stuns!" - mob_overlay_state = "repel_missiles" - stacks = MODIFIER_STACK_EXTEND - disable_duration_percent = 0.75 - incoming_damage_percent = 0.75 - // Illegal cells! -/obj/item/ammo_casing/nsfw_batt/medical/shrink +/obj/item/ammo_casing/microbattery/medical/shrink name = "\'ML-3/M\' nanite cell - SHRINK" type_color = "#910ffc" type_name = "SHRINK" - projectile_type = /obj/item/projectile/beam/ML3M/shrink + projectile_type = /obj/item/projectile/beam/medical_cell/shrink -/obj/item/projectile/beam/ML3M/shrink/on_hit(var/mob/living/carbon/human/target) +/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(" The beam fires into your body, changing your size!") @@ -718,13 +756,13 @@ else return 1 -/obj/item/ammo_casing/nsfw_batt/medical/grow +/obj/item/ammo_casing/microbattery/medical/grow name = "\'ML-3/M\' nanite cell - GROW" type_color = "#fc0fdc" type_name = "GROW" - projectile_type = /obj/item/projectile/beam/ML3M/grow + projectile_type = /obj/item/projectile/beam/medical_cell/grow -/obj/item/projectile/beam/ML3M/grow/on_hit(var/mob/living/carbon/human/target) +/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(" The beam fires into your body, changing your size!") @@ -732,13 +770,13 @@ else return 1 -/obj/item/ammo_casing/nsfw_batt/medical/normalsize +/obj/item/ammo_casing/microbattery/medical/normalsize name = "\'ML-3/M\' nanite cell - NORMALSIZE" type_color = "#C70FEC" type_name = "NORMALSIZE" - projectile_type = /obj/item/projectile/beam/ML3M/normalsize + projectile_type = /obj/item/projectile/beam/medical_cell/normalsize -/obj/item/projectile/beam/ML3M/normalsize/on_hit(var/mob/living/carbon/human/target) +/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(" The beam fires into your body, changing your size!") diff --git a/icons/obj/ammo_vr.dmi b/icons/obj/ammo_vr.dmi index 2fa66e4424b2bd0612bb3e038db4867b147d4ebc..441c9547f67def3cd824bfc1af3259a985d88570 100644 GIT binary patch literal 5366 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 Date: Tue, 17 Sep 2019 11:24:58 +1000 Subject: [PATCH 2/5] Implements ML-3M, Adds prototype NSFW --- code/game/objects/random/misc.dm | 1 - code/modules/research/designs_vr.dm | 355 +++++++- .../guns/cell_loaded/cell_loaded.dm | 261 ++++++ .../vore/fluffstuff/guns/cell_loaded/ml3m.dm | 69 ++ .../fluffstuff/guns/cell_loaded/ml3m_cells.dm | 340 ++++++++ .../vore/fluffstuff/guns/cell_loaded/nsfw.dm | 74 ++ .../fluffstuff/guns/cell_loaded/nsfw_cells.dm | 115 +++ code/modules/vore/fluffstuff/guns/nsfw.dm | 785 ------------------ icons/obj/ammo_vr.dmi | Bin 5366 -> 5404 bytes maps/tether/tether-06-station2.dmm | 1 + maps/tether/tether-07-station3.dmm | 1 + maps/tether/tether-10-colony.dmm | 11 +- vorestation.dme | 6 +- 13 files changed, 1195 insertions(+), 824 deletions(-) create mode 100644 code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm create mode 100644 code/modules/vore/fluffstuff/guns/cell_loaded/ml3m.dm create mode 100644 code/modules/vore/fluffstuff/guns/cell_loaded/ml3m_cells.dm create mode 100644 code/modules/vore/fluffstuff/guns/cell_loaded/nsfw.dm create mode 100644 code/modules/vore/fluffstuff/guns/cell_loaded/nsfw_cells.dm delete mode 100644 code/modules/vore/fluffstuff/guns/nsfw.dm diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index 06d08ce3ec4..f9180c99f1d 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -173,7 +173,6 @@ prob(3);/obj/item/weapon/reagent_containers/syringe/antiviral, prob(5);/obj/item/weapon/reagent_containers/syringe/inaprovaline, prob(1);/obj/item/weapon/reagent_containers/hypospray, - prob(1);/obj/item/weapon/storage/secure/briefcase/ml3m_pack_med, prob(1);/obj/item/weapon/storage/box/freezer, prob(2);/obj/item/stack/nanopaste) diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm index b8946835b7f..8df2ee63b0d 100644 --- a/code/modules/research/designs_vr.dm +++ b/code/modules/research/designs_vr.dm @@ -12,30 +12,7 @@ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2, TECH_DATA = 4, TECH_ENGINEERING = 2) materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000) build_path = /obj/item/weapon/implantcase/backup - -/datum/design/item/implant/sizecontrol - name = "Size control implant" - id = "implant_size" - req_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4, TECH_DATA = 4, TECH_ENGINEERING = 3) - materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000, "silver" = 3000) - build_path = /obj/item/weapon/implanter/sizecontrol - sort_string = "TAAAA" - -/datum/design/item/weapon/sizegun - name = "Size gun" - id = "sizegun" - req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) - materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 2000, "uranium" = 2000) - build_path = /obj/item/weapon/gun/energy/sizegun - sort_string = "TAAAB" - -/datum/design/item/bluespace_jumpsuit - name = "Bluespace jumpsuit" - id = "bsjumpsuit" - req_tech = list(TECH_BLUESPACE = 2, TECH_MATERIAL = 3, TECH_POWER = 2) - materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000) - build_path = /obj/item/clothing/under/bluespace - sort_string = "TAAAC" + sort_string = "SAAAA" /datum/design/item/sleevemate name = "SleeveMate 3700" @@ -43,7 +20,7 @@ req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_BIO = 2) materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000) build_path = /obj/item/device/sleevemate - sort_string = "TAAAD" + sort_string = "SAAAB" /datum/design/item/bodysnatcher name = "Body Snatcher" @@ -51,6 +28,31 @@ req_tech = list(TECH_MAGNET = 3, TECH_BIO = 3, TECH_ILLEGAL = 2) materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000) build_path = /obj/item/device/bodysnatcher + sort_string = "SAAAC" + +/datum/design/item/weapon/sizegun + name = "Size gun" + id = "sizegun" + req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 2000, "uranium" = 2000) + build_path = /obj/item/weapon/gun/energy/sizegun + sort_string = "SBAAA" + +/datum/design/item/bluespace_jumpsuit + name = "Bluespace jumpsuit" + id = "bsjumpsuit" + req_tech = list(TECH_BLUESPACE = 2, TECH_MATERIAL = 3, TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000) + build_path = /obj/item/clothing/under/bluespace + sort_string = "SBAAB" + +/datum/design/item/implant/sizecontrol + name = "Size control implant" + id = "implant_size" + req_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4, TECH_DATA = 4, TECH_ENGINEERING = 3) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000, "silver" = 3000) + build_path = /obj/item/weapon/implanter/sizecontrol + sort_string = "SBAAC" /datum/design/item/item/pressureinterlock name = "APP pressure interlock" @@ -369,8 +371,307 @@ /datum/design/item/robot_upgrade/sizeshift name = "Size Alteration Module" - desc = "Used to allow robot to freely alter their size." id = "borg_sizeshift_module" req_tech = list(TECH_BLUESPACE = 3, TECH_MATERIAL = 3, TECH_POWER = 2) materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000) - build_path = /obj/item/borg/upgrade/sizeshift \ No newline at end of file + build_path = /obj/item/borg/upgrade/sizeshift + + + +// NSFW gun and cells +/datum/design/item/weapon/prototype_nsfw + name = "cell-loaded revolver" + id = "nsfw_prototype" + req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_POWER = 4, TECH_COMBAT = 7) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 6000, "phoron" = 8000, "uranium" = 4000) + build_path = /obj/item/weapon/gun/projectile/cell_loaded/combat/prototype + sort_string = "TNAAA" + +/datum/design/item/weapon/prototype_nsfw_mag + name = "combat cell magazine" + id = "nsfw_mag_prototype" + req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_POWER = 4, TECH_COMBAT = 7) + materials = list(DEFAULT_WALL_MATERIAL = 8000, "glass" = 4000, "phoron" = 4000) + build_path = /obj/item/ammo_magazine/cell_mag/combat/prototype + sort_string = "TNABA" + +/datum/design/item/nsfw_cell/AssembleDesignName() + ..() + name = "Microbattery prototype ([item_name])" + +/datum/design/item/nsfw_cell/stun + name = "STUN" + id = "nsfw_cell_stun" + req_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 2, TECH_POWER = 3, TECH_COMBAT = 3) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000) + build_path = /obj/item/ammo_casing/microbattery/combat/stun + sort_string = "TNACA" + +/datum/design/item/nsfw_cell/lethal + name = "LETHAL" + id = "nsfw_cell_lethal" + req_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_POWER = 3, TECH_COMBAT = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "phoron" = 3000) + build_path = /obj/item/ammo_casing/microbattery/combat/lethal + sort_string = "TNACB" + +/datum/design/item/nsfw_cell/net + name = "NET" + id = "nsfw_cell_net" + req_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_POWER = 3, TECH_COMBAT = 4) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "uranium" = 3000) + build_path = /obj/item/ammo_casing/microbattery/combat/net + sort_string = "TNACC" + +/datum/design/item/nsfw_cell/ion + name = "ION" + id = "nsfw_cell_ion" + req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_POWER = 5, TECH_COMBAT = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "silver" = 3000) + build_path = /obj/item/ammo_casing/microbattery/combat/ion + sort_string = "TNACD" + +/datum/design/item/nsfw_cell/shotstun + name = "SCATTERSTUN" + id = "nsfw_cell_shotstun" + req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 3, TECH_POWER = 6, TECH_COMBAT = 6) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "silver" = 2000, "gold" = 2000) + build_path = /obj/item/ammo_casing/microbattery/combat/shotstun + sort_string = "TNACE" + +/datum/design/item/nsfw_cell/xray + name = "XRAY" + id = "nsfw_cell_xray" + req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_POWER = 5, TECH_COMBAT = 7) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "silver" = 1000, "gold" = 1000, "uranium" = 1000, "phoron" = 1000) + build_path = /obj/item/ammo_casing/microbattery/combat/xray + sort_string = "TNACF" + +/datum/design/item/nsfw_cell/stripper + name = "STRIPPER" + id = "nsfw_cell_stripper" + req_tech = list(TECH_MATERIAL = 7, TECH_BIO = 4, TECH_POWER = 4, TECH_COMBAT = 4, TECH_ILLEGAL = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "uranium" = 2000, "phoron" = 2000, "diamond" = 500) + build_path = /obj/item/ammo_casing/microbattery/combat/stripper + sort_string = "TNACG" + +/* +/datum/design/item/nsfw_cell/final + name = "FINAL OPTION" + id = "nsfw_cell_final" + req_tech = list(TECH_COMBAT = 69, TECH_ILLEGAL = 69, TECH_PRECURSOR = 1) + materials = list("unobtanium" = 9001) + build_path = /obj/item/ammo_casing/microbattery/combat/final + sort_string = "TNACH" +*/ + + + +// ML-3M medigun and cells +/datum/design/item/medical/cell_medigun + name = "cell-loaded medigun" + id = "cell_medigun" + req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_POWER = 3, TECH_BIO = 5) + materials = list(DEFAULT_WALL_MATERIAL = 8000, "plastic" = 8000, "glass" = 5000, "silver" = 1000, "gold" = 1000, "uranium" = 1000) + build_path = /obj/item/weapon/gun/projectile/cell_loaded/medical + sort_string = "MLAAA" + +/datum/design/item/medical/cell_medigun_mag + name = "medical cell magazine" + id = "cell_medigun_mag" + req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_POWER = 3, TECH_BIO = 5) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "plastic" = 6000, "glass" = 3000, "silver" = 500, "gold" = 500) + build_path = /obj/item/ammo_magazine/cell_mag/medical + sort_string = "MLABA" + +/datum/design/item/medical/cell_medigun_mag_advanced + name = "advanced medical cell magazine" + id = "cell_medigun_mag_advanced" + req_tech = list(TECH_MATERIAL = 7, TECH_MAGNET = 6, TECH_POWER = 4, TECH_BIO = 7) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "plastic" = 10000, "glass" = 5000, "silver" = 1500, "gold" = 1500, "diamond" = 5000) + build_path = /obj/item/ammo_magazine/cell_mag/medical/advanced + sort_string = "MLABB" + +/datum/design/item/ml3m_cell/AssembleDesignName() + ..() + name = "Nanite cell prototype ([item_name])" + +//Tier 0 + +/datum/design/item/ml3m_cell/brute + name = "BRUTE" + id = "ml3m_cell_brute" + req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_BIO = 2) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000) + build_path = /obj/item/ammo_casing/microbattery/medical/brute + sort_string = "MLACA" + +/datum/design/item/ml3m_cell/burn + name = "BURN" + id = "ml3m_cell_burn" + req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_BIO = 2) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000) + build_path = /obj/item/ammo_casing/microbattery/medical/burn + sort_string = "MLACB" + +/datum/design/item/ml3m_cell/stabilize + name = "STABILIZE" + id = "ml3m_cell_stabilize" + req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_BIO = 2) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000) + build_path = /obj/item/ammo_casing/microbattery/medical/stabilize + sort_string = "MLACC" + +//Tier 1 + +/datum/design/item/ml3m_cell/toxin + name = "TOXIN" + id = "ml3m_cell_toxin" + req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_BIO = 4) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500) + build_path = /obj/item/ammo_casing/microbattery/medical/toxin + sort_string = "MLACD" + +/datum/design/item/ml3m_cell/omni + name = "OMNI" + id = "ml3m_cell_omni" + req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_BIO = 4) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500) + build_path = /obj/item/ammo_casing/microbattery/medical/omni + sort_string = "MLACE" + +/datum/design/item/ml3m_cell/antirad + name = "ANTIRAD" + id = "ml3m_cell_antirad" + req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_BIO = 4) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500) + build_path = /obj/item/ammo_casing/microbattery/medical/antirad + sort_string = "MLACF" + +//Tier 2 + +/datum/design/item/ml3m_cell/brute2 + name = "BRUTE-II" + id = "ml3m_cell_brute2" + req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_POWER = 2, TECH_BIO = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "gold" = 1000) + build_path = /obj/item/ammo_casing/microbattery/medical/brute2 + sort_string = "MLACG" + +/datum/design/item/ml3m_cell/burn2 + name = "BURN-II" + id = "ml3m_cell_burn2" + req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_POWER = 2, TECH_BIO = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "gold" = 1000) + build_path = /obj/item/ammo_casing/microbattery/medical/burn2 + sort_string = "MLACH" + +/datum/design/item/ml3m_cell/stabilize2 + name = "STABILIZE-II" + id = "ml3m_cell_stabilize2" + req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_POWER = 2, TECH_BIO = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "silver" = 1000) + build_path = /obj/item/ammo_casing/microbattery/medical/stabilize2 + sort_string = "MLACI" + +/datum/design/item/ml3m_cell/omni2 + name = "OMNI-II" + id = "ml3m_cell_omni2" + req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_POWER = 2, TECH_BIO = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "uranium" = 1000) + build_path = /obj/item/ammo_casing/microbattery/medical/omni2 + sort_string = "MLACJ" + +//Tier 3 + +/datum/design/item/ml3m_cell/toxin2 + name = "TOXIN-II" + id = "ml3m_cell_toxin2" + req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 3, TECH_POWER = 3, TECH_BIO = 6) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "uranium" = 1000, "silver" = 1000, "diamond" = 500) + build_path = /obj/item/ammo_casing/microbattery/medical/toxin2 + sort_string = "MLACK" + +/datum/design/item/ml3m_cell/haste + name = "HASTE" + id = "ml3m_cell_haste" + req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 3, TECH_POWER = 3, TECH_BIO = 6) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "gold" = 1000, "silver" = 1000, "diamond" = 1000) + build_path = /obj/item/ammo_casing/microbattery/medical/haste + sort_string = "MLACL" + +/datum/design/item/ml3m_cell/resist + name = "RESIST" + id = "ml3m_cell_resist" + req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 3, TECH_POWER = 3, TECH_BIO = 6) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "gold" = 1000, "uranium" = 1000, "diamond" = 1000) + build_path = /obj/item/ammo_casing/microbattery/medical/resist + sort_string = "MLACM" + +/datum/design/item/ml3m_cell/corpse_mend + name = "CORPSE MEND" + id = "ml3m_cell_corpse_mend" + req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 3, TECH_POWER = 3, TECH_BIO = 6) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "phoron" = 3000, "diamond" = 3000) + build_path = /obj/item/ammo_casing/microbattery/medical/corpse_mend + sort_string = "MLACN" + +//Tier 4 + +/datum/design/item/ml3m_cell/brute3 + name = "BRUTE-III" + id = "ml3m_cell_brute3" + req_tech = list(TECH_MATERIAL = 7, TECH_MAGNET = 6, TECH_POWER = 5, TECH_BIO = 7, TECH_PRECURSOR = 2) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "diamond" = 500, "verdantium" = 1000) + build_path = /obj/item/ammo_casing/microbattery/medical/brute3 + sort_string = "MLACO" + +/datum/design/item/ml3m_cell/burn3 + name = "BURN-III" + id = "ml3m_cell_burn3" + req_tech = list(TECH_MATERIAL = 7, TECH_MAGNET = 6, TECH_POWER = 5, TECH_BIO = 7, TECH_PRECURSOR = 2) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "diamond" = 500, "verdantium" = 1000) + build_path = /obj/item/ammo_casing/microbattery/medical/burn3 + sort_string = "MLACP" + +/datum/design/item/ml3m_cell/toxin3 + name = "TOXIN-III" + id = "ml3m_cell_toxin3" + req_tech = list(TECH_MATERIAL = 7, TECH_MAGNET = 6, TECH_POWER = 5, TECH_BIO = 7, TECH_ARCANE = 2) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "diamond" = 500, "verdantium" = 1000) + build_path = /obj/item/ammo_casing/microbattery/medical/toxin3 + sort_string = "MLACQ" + +/datum/design/item/ml3m_cell/omni3 + name = "OMNI-III" + id = "ml3m_cell_omni3" + req_tech = list(TECH_MATERIAL = 7, TECH_MAGNET = 6, TECH_POWER = 5, TECH_BIO = 7, TECH_ARCANE = 2) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "diamond" = 500, "verdantium" = 1000) + build_path = /obj/item/ammo_casing/microbattery/medical/omni3 + sort_string = "MLACR" + +//Tierless + +/datum/design/item/ml3m_cell/shrink + name = "SHRINK" + id = "ml3m_cell_shrink" + req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_BLUESPACE = 3, TECH_BIO = 5, TECH_ILLEGAL = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "uranium" = 2000) + build_path = /obj/item/ammo_casing/microbattery/medical/shrink + sort_string = "MLADA" + +/datum/design/item/ml3m_cell/grow + name = "GROW" + id = "ml3m_cell_grow" + req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_BLUESPACE = 3, TECH_BIO = 5, TECH_ILLEGAL = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "uranium" = 2000) + build_path = /obj/item/ammo_casing/microbattery/medical/grow + sort_string = "MLADB" + +/datum/design/item/ml3m_cell/normalsize + name = "NORMALSIZE" + id = "ml3m_cell_normalsize" + req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_BLUESPACE = 3, TECH_BIO = 5, TECH_ILLEGAL = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "uranium" = 2000) + build_path = /obj/item/ammo_casing/microbattery/medical/normalsize + sort_string = "MLADC" \ No newline at end of file diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm b/code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm new file mode 100644 index 00000000000..66db8708597 --- /dev/null +++ b/code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm @@ -0,0 +1,261 @@ +// 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,"\The [src] is now using the next [new_batt.type_name] power cell.") + else + to_chat(loc,"\The [src] is now firing [new_batt.type_name].") + + 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, "[B] does not fit into [src].") + return + if(stored_ammo.len >= max_ammo) + to_chat(user, "[src] is full!") + 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) \ No newline at end of file diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/ml3m.dm b/code/modules/vore/fluffstuff/guns/cell_loaded/ml3m.dm new file mode 100644 index 00000000000..2a2be206575 --- /dev/null +++ b/code/modules/vore/fluffstuff/guns/cell_loaded/ml3m.dm @@ -0,0 +1,69 @@ +// 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 = "" + 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" + +/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" + + +// 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) \ No newline at end of file diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/ml3m_cells.dm b/code/modules/vore/fluffstuff/guns/cell_loaded/ml3m_cells.dm new file mode 100644 index 00000000000..49f0a15e3f6 --- /dev/null +++ b/code/modules/vore/fluffstuff/guns/cell_loaded/ml3m_cells.dm @@ -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 = "BRUTE" + 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 = "BURN" + 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 = "STABILIZE" + 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 = "TOXIN" + 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 = "OMNI" + 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 = "ANTIRAD" + 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 = "BRUTE-II" + 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 = "BURN-II" + 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 = "STABILIZE-II" + 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 = "OMNI-II" + 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 = "TOXIN-II" + 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 = "HASTE" + 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 = "RESIST" + 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 = "CORPSE MEND" + 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 = "BRUTE-III" + 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 = "BURN-III" + 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 = "TOXIN-III" + 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 = "OMNI-III" + 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 = "SHRINK" + 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("The beam fires into your body, changing your size!") + target.updateicon() + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/grow + name = "\'ML-3/M\' nanite cell - GROW" + type_color = "#fc0fdc" + type_name = "GROW" + 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("The beam fires into your body, changing your size!") + target.updateicon() + else + return 1 + +/obj/item/ammo_casing/microbattery/medical/normalsize + name = "\'ML-3/M\' nanite cell - NORMALSIZE" + type_color = "#C70FEC" + type_name = "NORMALSIZE" + 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("The beam fires into your body, changing your size!") + target.updateicon() + else + return 1 \ No newline at end of file diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/nsfw.dm b/code/modules/vore/fluffstuff/guns/cell_loaded/nsfw.dm new file mode 100644 index 00000000000..8bfec0261e7 --- /dev/null +++ b/code/modules/vore/fluffstuff/guns/cell_loaded/nsfw.dm @@ -0,0 +1,74 @@ +// 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/net(src) + new /obj/item/ammo_casing/microbattery/combat/ion(src) \ No newline at end of file diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/nsfw_cells.dm b/code/modules/vore/fluffstuff/guns/cell_loaded/nsfw_cells.dm new file mode 100644 index 00000000000..946368baadc --- /dev/null +++ b/code/modules/vore/fluffstuff/guns/cell_loaded/nsfw_cells.dm @@ -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 = "LETHAL" + projectile_type = /obj/item/projectile/beam + +/obj/item/ammo_casing/microbattery/combat/stun + name = "\'NSFW\' microbattery - STUN" + type_color = "#0f81bc" + type_name = "STUN" + projectile_type = /obj/item/projectile/beam/stun/blue + +/obj/item/ammo_casing/microbattery/combat/net + name = "\'NSFW\' microbattery - NET" + type_color = "#43f136" + type_name = "NET" + projectile_type = /obj/item/projectile/beam/energy_net + +/obj/item/ammo_casing/microbattery/combat/xray + name = "\'NSFW\' microbattery - XRAY" + type_color = "#32c025" + type_name = "XRAY" + projectile_type = /obj/item/projectile/beam/xray + +/obj/item/ammo_casing/microbattery/combat/shotstun + name = "\'NSFW\' microbattery - SCATTERSTUN" + type_color = "#88ffff" + type_name = "SCATTERSTUN" + 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 = "ION" + projectile_type = /obj/item/projectile/ion/small + +/obj/item/ammo_casing/microbattery/combat/stripper + name = "\'NSFW\' microbattery - STRIPPER" + type_color = "#fc8d0f" + type_name = "STRIPPER" + 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 = "FINAL OPTION" //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() + + ..() \ No newline at end of file diff --git a/code/modules/vore/fluffstuff/guns/nsfw.dm b/code/modules/vore/fluffstuff/guns/nsfw.dm deleted file mode 100644 index 983de082eb0..00000000000 --- a/code/modules/vore/fluffstuff/guns/nsfw.dm +++ /dev/null @@ -1,785 +0,0 @@ -// -------------- NSFW ------------- -/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,"\The [src] is now using the next [new_batt.type_name] power cell.") - else - to_chat(loc,"\The [src] is now firing [new_batt.type_name].") - - 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) - -/obj/item/weapon/gun/projectile/cell_loaded/combat - 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) - -/obj/item/weapon/gun/projectile/cell_loaded/combat/advanced - 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/medical - name = "\improper ML-3 \'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 three combinations of \ - healing beams can be configured at once. 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 = "" - allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/medical) - -/obj/item/weapon/gun/projectile/cell_loaded/medical/cmo - name = "\improper Advanced ML-3 \'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 is capable of holding large magazines. Ammo not included." - - icon_state = "ml3m_cmo" - - -// 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" - caliber = "nsfw" - matter = list(DEFAULT_WALL_MATERIAL = 1680, "glass" = 2000) - 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, "[B] does not fit into [src].") - return - if(stored_ammo.len >= max_ammo) - to_chat(user, "[src] is full!") - 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/combat //security - 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 - -/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" - -/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" - -// 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-- - -// Specific batteries // -// Security (Combat) // - -/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) - -/obj/item/ammo_casing/microbattery/combat/lethal - name = "\'NSFW\' microbattery - LETHAL" - type_color = "#bf3d3d" - type_name = "LETHAL" - projectile_type = /obj/item/projectile/beam - -/obj/item/ammo_casing/microbattery/combat/stun - name = "\'NSFW\' microbattery - STUN" - type_color = "#0f81bc" - type_name = "STUN" - projectile_type = /obj/item/projectile/beam/stun/blue - -/obj/item/ammo_casing/microbattery/combat/net - name = "\'NSFW\' microbattery - NET" - type_color = "#43f136" - type_name = "NET" - projectile_type = /obj/item/projectile/beam/energy_net - -/obj/item/ammo_casing/microbattery/combat/xray - name = "\'NSFW\' microbattery - XRAY" - type_color = "#32c025" - type_name = "XRAY" - projectile_type = /obj/item/projectile/beam/xray - -/obj/item/ammo_casing/microbattery/combat/shotstun - name = "\'NSFW\' microbattery - SCATTERSTUN" - type_color = "#88ffff" - type_name = "SCATTERSTUN" - 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 = "ION" - projectile_type = /obj/item/projectile/ion/small - -/obj/item/ammo_casing/microbattery/combat/stripper - name = "\'NSFW\' microbattery - STRIPPER" - type_color = "#fc8d0f" - type_name = "STRIPPER" - 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 = "FINAL OPTION" //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() - - ..() - -/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/net(src) - new /obj/item/ammo_casing/microbattery/combat/ion(src) - -/obj/item/weapon/storage/secure/briefcase/ml3m_pack - 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/New() - ..() - new /obj/item/weapon/gun/projectile/cell_loaded/medical/cmo(src) - new /obj/item/ammo_magazine/cell_mag/medical/advanced(src) - for(var/path in subtypesof(/obj/item/ammo_casing/microbattery/medical)) - new path(src) - -/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) - - -// Medical // - -/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" - -/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 = "BRUTE" - 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 = "BURN" - 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 = "STABILIZE" - 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 = "TOXIN" - projectile_type = /obj/item/projectile/beam/medical_cell/tox - -/obj/item/projectile/beam/medical_cell/tox/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 = "OMNI" - 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 - OMNI" - type_color = "#008000" - type_name = "ANTIRAD" - 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 = "BRUTE-II" - 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 = "BURN-II" - 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 = "STABILIZE-II" - 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 = "OMNI-II" - 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 = "TOX-II" - projectile_type = /obj/item/projectile/beam/medical_cell/tox2 - -/obj/item/projectile/beam/medical_cell/tox2/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 = "HASTE" - 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/resistance - name = "\'ML-3/M\' nanite cell - RESIST" - type_color = "#555555" - type_name = "RESIST" - projectile_type = /obj/item/projectile/beam/medical_cell/resistance - -/obj/item/projectile/beam/medical_cell/resistance/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/revival - name = "\'ML-3/M\' nanite cell - REVIVAL" - type_color = "#669900" - type_name = "REVIVAL" - projectile_type = /obj/item/projectile/beam/medical_cell/revival - -/obj/item/projectile/beam/medical_cell/revival/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 - -// Illegal cells! -/obj/item/ammo_casing/microbattery/medical/shrink - name = "\'ML-3/M\' nanite cell - SHRINK" - type_color = "#910ffc" - type_name = "SHRINK" - 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(" The beam fires into your body, changing your size!") - target.updateicon() - else - return 1 - -/obj/item/ammo_casing/microbattery/medical/grow - name = "\'ML-3/M\' nanite cell - GROW" - type_color = "#fc0fdc" - type_name = "GROW" - 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(" The beam fires into your body, changing your size!") - target.updateicon() - else - return 1 - -/obj/item/ammo_casing/microbattery/medical/normalsize - name = "\'ML-3/M\' nanite cell - NORMALSIZE" - type_color = "#C70FEC" - type_name = "NORMALSIZE" - 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(" The beam fires into your body, changing your size!") - target.updateicon() - else - return 1 \ No newline at end of file diff --git a/icons/obj/ammo_vr.dmi b/icons/obj/ammo_vr.dmi index 441c9547f67def3cd824bfc1af3259a985d88570..b3d64a736babf5a834b9b37ef399b8693a55e73e 100644 GIT binary patch literal 5404 zcmbVQcT`hZzr6`12q+*3NEZ|sq>c0%bP!aK4n|sFP!Xh8C4qnq1O!w%LKu-ENE0<8 zkOWbXW++21p(gYwp#@T2ocZ4OzQ5jE^X|Iq+;h)5=bpRH*}whU`#iFCz3AqlsmFR#_EY8O`7`UXmw&%OLoTV<RqSJpZ&0PKocgx zZPn)GCw^^2V%=Rwnb}e#B-^lg13#}dwmzwH;GT&Q|1@tj*uPqIhfj;oAlx@Gt#W zslWh{=s3uCiXo5D!wiLJGc^z4Bt%X_sR%8#Mp12SarW@bGM-Au3l*6cGTm*p!{W_h zb7Ag251vUNoAtMkT>B*}EV?FNvHF~x;j!>lV=48IU+%hemkx0oHEM%nLJR72i(3k@ zFhWeTQG<~HD{m~1xT|oYcH{=GVSb88Cqo;kRxbzr1fN)6_SOJ|9wc(bU(gf<l0N(UYf z?5t0SjT+_@Q6QEI@%JDC{$?G`2SHOGALQj72h2>-kndvSr)!(%tek^V>9k5J2)7xj zf!%xY-s|kL?a08u-EwrCVW0QX=g*w^`T3f^{wj1$l^Re4 zJnsWA`wp6Je#B%l&EB8m6I15|7QzffQqC`gHOl>-M^PvZ2dr|`ooOLGm|{N(_86ep zPMP!R#n}QGqQC1B92(BoRK#ekvM(M03zCMfIAF_qTaIj<6MVU|6J>2)7bcVZf>p_0%1h;!S9v;v9YnPa5!A<*-3}Zw� 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 O;Np23^O|#BcmE5}NM8H^ literal 5366 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 nRJiK_tOk4jAAQc85Y!_)@AXvscfaU76R Date: Tue, 17 Sep 2019 11:29:40 +1000 Subject: [PATCH 3/5] Adds extra stun cell to HoS kit --- code/modules/vore/fluffstuff/guns/cell_loaded/nsfw.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/nsfw.dm b/code/modules/vore/fluffstuff/guns/cell_loaded/nsfw.dm index 8bfec0261e7..241e2e2c1dc 100644 --- a/code/modules/vore/fluffstuff/guns/cell_loaded/nsfw.dm +++ b/code/modules/vore/fluffstuff/guns/cell_loaded/nsfw.dm @@ -70,5 +70,6 @@ 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) \ No newline at end of file From ebe667c4d2e270270894ea7438e45ef6d9a6d076 Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Tue, 17 Sep 2019 11:53:13 +1000 Subject: [PATCH 4/5] Adds combat hybrid cell-loaded gun kit --- .../guns/cell_loaded/cell_loaded.dm | 23 ++++++++++++++++++- maps/tether/tether-10-colony.dmm | 4 ++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm b/code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm index 66db8708597..8e9a5181e66 100644 --- a/code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm +++ b/code/modules/vore/fluffstuff/guns/cell_loaded/cell_loaded.dm @@ -258,4 +258,25 @@ 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) \ No newline at end of file + 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) \ No newline at end of file diff --git a/maps/tether/tether-10-colony.dmm b/maps/tether/tether-10-colony.dmm index 6fe1783d6d1..4c3d5da2f4e 100644 --- a/maps/tether/tether-10-colony.dmm +++ b/maps/tether/tether-10-colony.dmm @@ -16981,8 +16981,8 @@ /area/centcom/evac) "QQ" = ( /obj/structure/table/rack, -/obj/item/weapon/storage/secure/briefcase/nsfw_pack, -/obj/item/weapon/storage/secure/briefcase/nsfw_pack, +/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat, +/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat, /turf/unsimulated/floor{ icon_state = "dark" }, From 6e989be5b7daeaddd2d2563d5ef8266e7a615041 Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Tue, 17 Sep 2019 12:04:31 +1000 Subject: [PATCH 5/5] Adds proper tech levels to ML3M and its magazines --- code/modules/vore/fluffstuff/guns/cell_loaded/ml3m.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/vore/fluffstuff/guns/cell_loaded/ml3m.dm b/code/modules/vore/fluffstuff/guns/cell_loaded/ml3m.dm index 2a2be206575..6dbf09204f6 100644 --- a/code/modules/vore/fluffstuff/guns/cell_loaded/ml3m.dm +++ b/code/modules/vore/fluffstuff/guns/cell_loaded/ml3m.dm @@ -10,6 +10,7 @@ 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 @@ -28,6 +29,7 @@ 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" @@ -35,6 +37,7 @@ max_ammo = 6 x_offset = 3 icon_state = "ml3m_mag_extended" + origin_tech = list(TECH_MATERIAL = 5, TECH_BIO = 5) // The Pack //