Merge pull request #168 from Hawk-v3/master

Even More Vore Morges
This commit is contained in:
Hawk-v3
2019-09-23 22:13:19 +01:00
committed by GitHub
65 changed files with 93438 additions and 57084 deletions
+1
View File
@@ -1,5 +1,6 @@
#define SPECIES_WHITELIST_SELECTABLE 0x20 // Can select and customize, but not join as
#define LANGUAGE_SLAVIC "Pan-Slavic"
#define LANGUAGE_BIRDSONG "Birdsong"
#define LANGUAGE_SAGARU "Sagaru"
#define LANGUAGE_CANILUNZT "Canilunzt"
+8
View File
@@ -44,6 +44,14 @@
name = OUTFIT_JOB_NAME("Cook")
id_pda_assignment = "Cook"
// Rykka adds Server Outfit
/decl/hierarchy/outfit/job/service/server
name = OUTFIT_JOB_NAME("Server")
uniform = /obj/item/clothing/under/waiter
// End Outfit addition
/decl/hierarchy/outfit/job/service/gardener
name = OUTFIT_JOB_NAME("Gardener")
uniform = /obj/item/clothing/under/rank/hydroponics
+1 -1
View File
@@ -2738,4 +2738,4 @@ var/list/the_station_areas = list (
icon_state = "yellow"
luminosity = 1
dynamic_lighting = 0
requires_power = 0
requires_power = 0
+2 -2
View File
@@ -6,13 +6,13 @@
faction = "Station"
total_positions = -1
spawn_positions = -1
supervisors = "the staff from the departmen you're interning in"
supervisors = "the staff from the department you're interning in"
selection_color = "#555555"
economic_modifier = 2
access = list() //See /datum/job/intern/get_access()
minimal_access = list() //See /datum/job/intern/get_access()
outfit_type = /decl/hierarchy/outfit/job/assistant/intern
alt_titles = list("Apprentice Engineer","Medical Intern","Lab Assistant","Security Cadet","Jr. Cargo Tech", "Jr. Explorer") //VOREStation Edit
alt_titles = list("Apprentice Engineer","Medical Intern","Lab Assistant","Security Cadet","Jr. Cargo Tech", "Jr. Explorer", "Server" = /decl/hierarchy/outfit/job/service/server)
timeoff_factor = 0 // Interns, noh
/datum/job/intern/New()
+5 -5
View File
@@ -267,8 +267,8 @@
data["access"] = !isLocked(user)
data["locked"] = locked
data["enabled"] = enabled
data["is_lethal"] = 1
data["lethal"] = lethal
//data["is_lethal"] = 1 // VOREStation Removal of "Lethal" setting - it does nothing. Rykka did dis.
//data["lethal"] = lethal // VOREStation Removal of "Lethal" setting - it does nothing. Rykka did dis.
if(data["access"])
var/settings[0]
@@ -291,8 +291,8 @@
var/value = text2num(href_list["value"])
if(href_list["command"] == "enable")
enabled = value
else if(href_list["command"] == "lethal")
lethal = value
//else if(href_list["command"] == "lethal") // VOREStation Removal of "Lethal" setting - it does nothing. Rykka did dis.
//lethal = value // VOREStation Removal of "Lethal" setting - it does nothing. Rykka did dis.
else if(href_list["command"] == "check_synth")
check_synth = value
else if(href_list["command"] == "check_weapons")
@@ -1138,4 +1138,4 @@
#undef TURRET_PRIORITY_TARGET
#undef TURRET_SECONDARY_TARGET
#undef TURRET_NOT_TARGET
#undef TURRET_NOT_TARGET
+4 -4
View File
@@ -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, "<span class='notice'>\The [EW] has no recharge port.</span>")
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)
@@ -6,6 +6,8 @@
invisibility = 99 // nope cant see this shit
plane = ABOVE_PLANE
anchored = 1
icon = 'icons/mob/screen1.dmi' //VS Edit
icon_state = "centermarker" //VS Edit
/obj/effect/step_trigger/proc/Trigger(var/atom/movable/A)
return 0
@@ -99,7 +99,7 @@
if((slot_flags & SLOT_BACK) && M.get_equipped_item(slot_back) == src)
return 1
if((slot_flags & SLOT_BELT) && M.get_equipped_item(slot_belt) == src)
if((slot_flags & SLOT_BACK) && M.get_equipped_item(slot_s_store) == src)
return 1
return 0
+2 -2
View File
@@ -26,10 +26,10 @@
/obj/item/gunbox/blueshield/secondary/attack_self(mob/living/user)
var/list/options = list()
options["NSFW Variable Pistol(Microbattery)"] = list(/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos)
options["NSCW Variable Pistol(Microbattery)"] = list(/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos)
options["E-Gun (Weapon Cell)"] = list(/obj/item/weapon/gun/energy/gun, /obj/item/weapon/cell/device/weapon, /obj/item/weapon/cell/device/weapon)
options["Consul Revolver (.44)"] = list(/obj/item/weapon/gun/projectile/revolver/consul, /obj/item/ammo_magazine/s44, /obj/item/ammo_magazine/s44, /obj/item/ammo_magazine/s44/rubber)
var/choice = input(user,"Would you prefer an NSFW, e-gun or a revolver?") as null|anything in options
var/choice = input(user,"Would you prefer an NSCW, e-gun or a revolver?") as null|anything in options
if(src && choice)
var/list/things_to_spawn = options[choice]
for(var/new_type in things_to_spawn) // Spawn all the things, the gun and the ammo.
@@ -6,6 +6,7 @@
R.add_language(LANGUAGE_ECUREUILIAN, 1)
R.add_language(LANGUAGE_DAEMON, 1)
R.add_language(LANGUAGE_ENOCHIAN, 1)
R.add_language(LANGUAGE_SLAVIC, 1)
return 1
else
return 0
+7 -4
View File
@@ -29,18 +29,21 @@
if (istype(M,/mob/living/carbon/human)) //Repairing robolimbs
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting)
//VOREStation Edit Start
if (S && (S.robotic >= ORGAN_ROBOT))
if(!S.get_damage())
user << "<span class='notice'>Nothing to fix here.</span>"
to_chat(user, "<span class='notice'>Nothing to fix here.</span>")
else if((S.open < 2) && (S.brute_dam + S.burn_dam >= S.min_broken_damage) && !repair_external)
to_chat(user, "<span class='notice'>The damage is too extensive for this nanite swarm to handle.</span>")
else if(can_use(1))
user.setClickCooldown(user.get_attack_speed(src))
if(S.open >= 2)
if(do_after(user,5 * toolspeed))
S.heal_damage(20, 20, robo_repair = 1)
S.heal_damage(restoration_internal, restoration_internal, robo_repair = 1)
else if(do_after(user,5 * toolspeed))
S.heal_damage(10,10, robo_repair =1)
S.heal_damage(restoration_external,restoration_external, robo_repair =1)
H.updatehealth()
use(1)
user.visible_message("<span class='notice'>\The [user] applies some nanite paste on [user != M ? "[M]'s [S.name]" : "[S]"] with [src].</span>",\
"<span class='notice'>You apply some nanite paste on [user == M ? "your" : "[M]'s"] [S.name].</span>")
//VOREStation Edit End
@@ -0,0 +1,13 @@
/obj/item/stack/nanopaste
var/restoration_external = 5
var/restoration_internal = 20
var/repair_external = FALSE
/obj/item/stack/nanopaste/advanced
name = "advanced nanopaste"
singular_name = "advanced nanite swarm"
desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery. These ones are capable of restoring condition even of most thrashed robotic parts"
icon = 'icons/obj/stacks_vr.dmi'
icon_state = "adv_nanopaste"
restoration_external = 10
repair_external = TRUE
@@ -33,6 +33,7 @@
source.add_language(LANGUAGE_BIRDSONG)
source.add_language(LANGUAGE_SAGARU)
source.add_language(LANGUAGE_CANILUNZT)
source.add_language(LANGUAGE_SLAVIC)
source.add_language(LANGUAGE_SOL_COMMON) //In case they're giving a xenomorph an implant or something.
/obj/item/weapon/implant/vrlanguage/post_implant(mob/source)
-1
View File
@@ -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)
+3 -3
View File
@@ -8,7 +8,7 @@
layer = MOB_LAYER
plane = MOB_PLANE
explosion_resistance = 5
var/can_pass_lying = 1
var/can_pass_lying = TRUE
var/list/mobs_can_pass = list(
/mob/living/bot,
/mob/living/simple_mob/slime/xenobio,
@@ -37,7 +37,7 @@
if (istype(A, /obj/structure/bed) && B.has_buckled_mobs())//if it's a bed/chair and someone is buckled, it will not pass
return 0
if(istype(A, /obj/vehicle)) //no vehicles
if(istype(A, /obj/vehicle) || istype (A, /obj/mecha)) //no vehicles
return 0
var/mob/living/M = A
@@ -66,4 +66,4 @@
name = "airtight plastic flaps"
desc = "Heavy duty, airtight, plastic flaps. Have extra safety installed, preventing passage of living beings."
can_atmos_pass = ATMOS_PASS_NO
can_pass_lying = 0
can_pass_lying = FALSE
@@ -0,0 +1,30 @@
//Atmosphere properties
#define VIRGO3B_ONE_ATMOSPHERE 82.4 //kPa
#define VIRGO3B_AVG_TEMP 234 //kelvin
#define VIRGO3B_PER_N2 0.16 //percent
#define VIRGO3B_PER_O2 0.00
#define VIRGO3B_PER_N2O 0.00 //Currently no capacity to 'start' a turf with this. See turf.dm
#define VIRGO3B_PER_CO2 0.12
#define VIRGO3B_PER_PHORON 0.72
//Math only beyond this point
#define VIRGO3B_MOL_PER_TURF (VIRGO3B_ONE_ATMOSPHERE*CELL_VOLUME/(VIRGO3B_AVG_TEMP*R_IDEAL_GAS_EQUATION))
#define VIRGO3B_MOL_N2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_N2)
#define VIRGO3B_MOL_O2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_O2)
#define VIRGO3B_MOL_N2O (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_N2O)
#define VIRGO3B_MOL_CO2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_CO2)
#define VIRGO3B_MOL_PHORON (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_PHORON)
//Turfmakers
#define VIRGO3B_SET_ATMOS nitrogen=VIRGO3B_MOL_N2;oxygen=VIRGO3B_MOL_O2;carbon_dioxide=VIRGO3B_MOL_CO2;phoron=VIRGO3B_MOL_PHORON;temperature=VIRGO3B_AVG_TEMP
#define VIRGO3B_TURF_CREATE(x) x/virgo3b/nitrogen=VIRGO3B_MOL_N2;x/virgo3b/oxygen=VIRGO3B_MOL_O2;x/virgo3b/carbon_dioxide=VIRGO3B_MOL_CO2;x/virgo3b/phoron=VIRGO3B_MOL_PHORON;x/virgo3b/temperature=VIRGO3B_AVG_TEMP;x/virgo3b/outdoors=TRUE;x/virgo3b/update_graphic(list/graphic_add = null, list/graphic_remove = null) return 0
#define VIRGO3B_TURF_CREATE_UN(x) x/virgo3b/nitrogen=VIRGO3B_MOL_N2;x/virgo3b/oxygen=VIRGO3B_MOL_O2;x/virgo3b/carbon_dioxide=VIRGO3B_MOL_CO2;x/virgo3b/phoron=VIRGO3B_MOL_PHORON;x/virgo3b/temperature=VIRGO3B_AVG_TEMP
// This is a wall you surround the area of your "planet" with, that makes the atmosphere inside stay within bounds, even if canisters
// are opened or other strange things occur.
/turf/unsimulated/wall/planetary/virgo3b
name = "facility wall"
desc = "An eight-meter tall carbyne wall. For when the wildlife on your planet is mostly militant megacorps."
alpha = 0xFF
VIRGO3B_SET_ATMOS
+1
View File
@@ -4,6 +4,7 @@
icon_state = "riveted"
opacity = 1
density = 1
blocks_air = TRUE
/turf/unsimulated/wall/fakeglass
name = "window"
+1 -1
View File
@@ -703,7 +703,7 @@
"if told you I'd have to kill you",
"... wait, why am I even telling you this? Just let me pass",
"stop asking questions")
/* Space foxes: deleted. Keeping them commented for historical reasons.
/* Space foxes: deleted. Keeping them commented for historical reasons. -YW
/datum/lore/organization/gov/kitsuhana
name = "Kitsuhana Heavy Industries"
short_name = "Kitsuhana"
@@ -144,13 +144,13 @@
/datum/gear/fluff/sariU_disk
path = /obj/item/weapon/disk/limb/eggnerdltd
display_name = "Sari-U's Eggnerd Disk"
ckeywhitelist = list("cross_exonar")
ckeywhitelist = list("crossexonar")
character_name = list("Sari-U")
/datum/gear/fluff/sariE_disk
path = /obj/item/weapon/disk/limb/eggnerdltd
display_name = "Sari-E's Eggnerd Disk"
ckeywhitelist = list("cross_exonar")
ckeywhitelist = list("crossexonar")
character_name = list("Sari-E")
// D CKEYS
@@ -494,14 +494,14 @@
/datum/gear/fluff/resh_uniform
path = /obj/item/clothing/suit/security/navyhos
display_name = "Resh's HoS Uniform"
ckeywhitelist = list("mr_signmeup")
ckeywhitelist = list("mrsignmeup")
character_name = list("Reshskakskakss Seekiseekis")
allowed_roles = list("Head of Security")
/datum/gear/fluff/daniel_medal
path = /obj/item/clothing/accessory/medal/conduct
display_name = "Daniel's Conduct Medal"
ckeywhitelist = list("mr_signmeup")
ckeywhitelist = list("mrsignmeup")
character_name = list("Daniel Fisher")
// N CKEYS
@@ -17,36 +17,36 @@
//Area allowing backpacks to be placed on rigsuits.
/obj/item/weapon/rig/vox
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack)
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/combat
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack)
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/ert
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \
/obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \
/obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack)
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/light/ninja
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell, /obj/item/weapon/storage/backpack)
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell, /obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/merc
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs, /obj/item/weapon/storage/backpack)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs, /obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/ce
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/medical
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller,/obj/item/weapon/storage/backpack)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller,/obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/hazmat
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils,/obj/item/weapon/storage/backpack)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils,/obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/hazard
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack)
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/industrial
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd,/obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/military
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/handcuffs, \
/obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/weldingtool, /obj/item/weapon/tool, /obj/item/device/multitool, \
/obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit, /obj/item/weapon/storage/backpack)
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/device/suit_cooling_unit, /obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
/obj/item/weapon/rig/pmc
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \
/obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \
/obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack)
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack,/obj/item/device/subspaceradio)
+3 -3
View File
@@ -29,9 +29,9 @@
fruit = list("cabbage" = 1)
reagents = list("rice" = 20)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi
@@ -5,7 +5,13 @@
reusable = TRUE
var/datum/planet/target_planet
var/list/banned_weathers = list() //VOREStation Temp Edit
var/list/banned_weathers = list(
//VOREStation Edit - Virgo 3B Weather,
/datum/weather/virgo3b/ash_storm,
/datum/weather/virgo3b/emberfall,
/datum/weather/virgo3b/blood_moon,
/datum/weather/virgo3b/fallout)
//VOREStation Edit End
var/list/possible_weathers = list()
/datum/gm_action/planet_weather_shift/set_up()
+1 -2
View File
@@ -111,7 +111,7 @@
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1)
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10)
/material/sandstone/generate_recipes()
/material/stone/generate_recipes()
..()
recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1)
@@ -127,7 +127,6 @@
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20)
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("airtight plastic flaps", /obj/structure/plasticflaps/mining, 5, time = 25, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1)
recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE)
+13
View File
@@ -92,6 +92,19 @@
"uhk","zir","sc'orth","sc'er","thc'yek","th'zirk","th'esk","k'ayek","ka'mil","sc'","ik'yir","yol","kig","k'zit","'","'","zrk","krg","isk'yet","na'k",
"sc'azz","th'sc","nil","n'ahk","sc'yeth","aur'sk","iy'it","azzg","a'","i'","o'","u'","a","i","o","u","zz","kr","ak","nrk","tzzk","bz","xic'","k'lax'","histh")
/datum/language/human/slavic
name = LANGUAGE_SLAVIC
desc = "The official language of the Independent Colonial Confederation of Gilgamesh, originally established in 2122 by the short-lived United Slavic Confederation on Earth."
colour = "solcom"
key = "r"
syllables = list(
"rus", "zem", "ave", "groz", "ski", "ska", "ven", "konst", "pol", "lin", "svy",
"danya", "da", "mied", "zan", "das", "krem", "myka", "to", "st", "no", "na", "ni",
"ko", "ne", "en", "po", "ra", "li", "on", "byl", "cto", "eni", "ost", "ol", "ego",
"ver", "stv", "pro"
)
/datum/language/unathi
flags = 0
/datum/language/tajaran
+1
View File
@@ -1281,6 +1281,7 @@ default behaviour is:
var/turf/end_T = get_turf(target)
if(end_T)
add_attack_logs(src,M,"Thrown via grab to [end_T.x],[end_T.y],[end_T.z]")
src.drop_from_inventory(G) //VOREStation Addition: grab exploit fix
src.drop_from_inventory(item)
if(!item || !isturf(item.loc))
@@ -0,0 +1,2 @@
/mob/living/silicon/robot/drone
mob_size = MOB_SMALL
@@ -12,6 +12,8 @@
/mob/living/simple_mob/animal/passive/mouse/attack_hand(mob/living/hander)
if(hander.a_intent == I_HELP) //if lime intent
get_scooped(hander) //get scooped
else
..()
/obj/item/weapon/holder/mouse/attack_self(var/mob/U)
for(var/mob/living/simple_mob/M in src.contents)
@@ -0,0 +1,11 @@
/mob/living/simple_mob/humanoid/pirate
ai_holder_type = /datum/ai_holder/simple_mob/melee
/mob/living/simple_mob/humanoid/pirate/ranged
ai_holder_type = /datum/ai_holder/simple_mob/ranged
/mob/living/simple_mob/humanoid/russian
ai_holder_type = /datum/ai_holder/simple_mob/melee
/mob/living/simple_mob/humanoid/russian/ranged
ai_holder_type = /datum/ai_holder/simple_mob/ranged
@@ -9,14 +9,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null
amounts of both oxygen and nitrogen. Fortunately, the oxygen is not enough to be combustible in any meaningful way, however \
the phoron is desirable by many corporations, including NanoTrasen."
current_time = new /datum/time/virgo3b()
expected_z_levels = list(
Z_LEVEL_SURFACE_LOW,
Z_LEVEL_SURFACE_MID,
Z_LEVEL_SURFACE_HIGH,
Z_LEVEL_SURFACE_MINE,
Z_LEVEL_SOLARS,
Z_LEVEL_PLAINS
)
// expected_z_levels = list(1) // This is defined elsewhere.
planetary_wall_type = /turf/unsimulated/wall/planetary/virgo3b
/datum/planet/virgo3b/New()
+3 -3
View File
@@ -692,18 +692,18 @@
var/obj/item/projectile/in_chamber = consume_next_projectile()
if (istype(in_chamber))
user.visible_message("<span class = 'warning'>[user] pulls the trigger.</span>")
play_fire_sound()
play_fire_sound(M, in_chamber)
if(istype(in_chamber, /obj/item/projectile/beam/lasertag))
user.show_message("<span class = 'warning'>You feel rather silly, trying to commit suicide with a toy.</span>")
mouthshoot = 0
return
in_chamber.on_hit(M)
if (in_chamber.damage_type != HALLOSS)
if(in_chamber.damage_type != HALLOSS && !in_chamber.nodamage)
log_and_message_admins("[key_name(user)] commited suicide using \a [src]")
user.apply_damage(in_chamber.damage*2.5, in_chamber.damage_type, "head", used_weapon = "Point blank shot in the mouth with \a [in_chamber]", sharp=1)
user.death()
else
else if(in_chamber.damage_type == HALLOSS)
to_chat(user, "<span class = 'notice'>Ow...</span>")
user.apply_effect(110,AGONY,0)
qdel(in_chamber)
+328 -27
View File
@@ -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
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"
@@ -804,7 +804,7 @@
var/mob/living/carbon/human/H = user
if(H.head == src)
H.update_inv_head()
/*
/obj/item/weapon/rig/light/hacker/fluff/aronai
name = "KHI-99-AAR suit module"
suit_type = "nano"
@@ -821,6 +821,8 @@
/obj/item/rig_module/teleporter
)
No. With a teleporter? Just *no*. - Hawk, YW
*/
//Viveret:Keturah
/obj/item/clothing/under/dress/maid
name = "Maid Outfit"
@@ -0,0 +1,283 @@
// 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 HI-102b 'Nanotech Selectable-Cell Weapon' and the Vey-Med ML-3 'Medigun'. \
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/hephaestus,
/datum/category_item/catalogue/information/organization/vey_med)
icon = 'icons/vore/custom_guns_vr.dmi'
icon_state = "nsfw"
icon_override = 'icons/vore/custom_guns_vr.dmi'
item_state = "gun"
caliber = "nsfw"
origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 6, TECH_MAGNETS = 4)
fire_sound = 'sound/weapons/Taser.ogg'
load_method = MAGAZINE //Nyeh heh hehhh.
magazine_type = null
allowed_magazines = list(/obj/item/ammo_magazine/cell_mag)
handle_casings = HOLD_CASINGS //Don't eject batteries!
recoil = 0
var/charge_left = 0
var/max_charge = 0
charge_sections = 5
/obj/item/weapon/gun/projectile/cell_loaded/consume_next_projectile()
if(chambered && ammo_magazine)
var/obj/item/ammo_casing/microbattery/batt = chambered
if(batt.shots_left)
return new chambered.projectile_type()
else
for(var/B in ammo_magazine.stored_ammo)
var/obj/item/ammo_casing/microbattery/other_batt = B
if(istype(other_batt,chambered.type) && other_batt.shots_left)
switch_to(other_batt)
return new chambered.projectile_type()
break
return null
/obj/item/weapon/gun/projectile/cell_loaded/proc/update_charge()
charge_left = 0
max_charge = 0
if(!chambered)
return
var/obj/item/ammo_casing/microbattery/batt = chambered
charge_left = batt.shots_left
max_charge = initial(batt.shots_left)
if(ammo_magazine) //Crawl to find more
for(var/B in ammo_magazine.stored_ammo)
var/obj/item/ammo_casing/microbattery/bullet = B
if(istype(bullet,batt.type))
charge_left += bullet.shots_left
max_charge += initial(bullet.shots_left)
/obj/item/weapon/gun/projectile/cell_loaded/proc/switch_to(obj/item/ammo_casing/microbattery/new_batt)
if(ishuman(loc))
if(chambered && new_batt.type == chambered.type)
to_chat(loc,"<span class='warning'>\The [src] is now using the next [new_batt.type_name] power cell.</span>")
else
to_chat(loc,"<span class='warning'>\The [src] is now firing [new_batt.type_name].</span>")
chambered = new_batt
update_charge()
update_icon()
/obj/item/weapon/gun/projectile/cell_loaded/attack_self(mob/user)
if(!chambered)
return
var/list/stored_ammo = ammo_magazine.stored_ammo
if(stored_ammo.len == 1)
return //silly you.
//Find an ammotype that ISN'T the same, or exhaust the list and don't change.
var/our_slot = stored_ammo.Find(chambered)
for(var/index in 1 to stored_ammo.len)
var/true_index = ((our_slot + index - 1) % stored_ammo.len) + 1 // Stupid ONE BASED lists!
var/obj/item/ammo_casing/microbattery/next_batt = stored_ammo[true_index]
if(chambered != next_batt && !istype(next_batt, chambered.type))
switch_to(next_batt)
break
/*
/obj/item/weapon/gun/projectile/cell_loaded/special_check(mob/user)
if(!chambered)
return
var/obj/item/ammo_casing/microbattery/batt = chambered
if(!batt.shots_left)
return FALSE
return TRUE
*/
/obj/item/weapon/gun/projectile/cell_loaded/load_ammo(var/obj/item/A, mob/user)
. = ..()
if(ammo_magazine && ammo_magazine.stored_ammo.len)
switch_to(ammo_magazine.stored_ammo[1])
/obj/item/weapon/gun/projectile/cell_loaded/unload_ammo(mob/user, var/allow_dump=1)
chambered = null
return ..()
/obj/item/weapon/gun/projectile/cell_loaded/update_icon()
update_charge()
cut_overlays()
if(!chambered)
return
var/obj/item/ammo_casing/microbattery/batt = chambered
var/batt_color = batt.type_color //Used many times
//Mode bar
var/image/mode_bar = image(icon, icon_state = "[initial(icon_state)]_type")
mode_bar.color = batt_color
add_overlay(mode_bar)
//Barrel color
var/image/barrel_color = image(icon, icon_state = "[initial(icon_state)]_barrel")
barrel_color.alpha = 150
barrel_color.color = batt_color
add_overlay(barrel_color)
//Charge bar
var/ratio = CEILING(((charge_left / max_charge) * charge_sections), 1)
for(var/i = 0, i < ratio, i++)
var/image/charge_bar = image(icon, icon_state = "[initial(icon_state)]_charge")
charge_bar.pixel_x = i
charge_bar.color = batt_color
add_overlay(charge_bar)
// The Magazine //
/obj/item/ammo_magazine/cell_mag
name = "microbattery magazine"
desc = "A microbattery holder for a cell-based variable weapon."
icon = 'icons/obj/ammo_vr.dmi'
icon_state = "cell_mag"
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_MAGNETS = 3)
caliber = "nsfw"
ammo_type = /obj/item/ammo_casing/microbattery
initial_ammo = 0
max_ammo = 3
var/x_offset = 5 //for update_icon() shenanigans- moved here so it can be adjusted for bigger mags
var/capname = "nsfw_mag" //as above
var/chargename = "nsfw_mag" //as above
mag_type = MAGAZINE
var/list/modes = list()
/obj/item/ammo_magazine/cell_mag/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/ammo_casing/microbattery))
var/obj/item/ammo_casing/microbattery/B = W
if(!istype(B, ammo_type))
to_chat(user, "<span class='warning'>[B] does not fit into [src].</span>")
return
if(stored_ammo.len >= max_ammo)
to_chat(user, "<span class='warning'>[src] is full!</span>")
return
user.remove_from_mob(B)
B.loc = src
stored_ammo.Add(B)
update_icon()
playsound(user.loc, 'sound/weapons/flipblade.ogg', 50, 1)
update_icon()
/obj/item/ammo_magazine/cell_mag/update_icon()
cut_overlays()
if(!stored_ammo.len)
return //Why bother
var/current = 0
for(var/B in stored_ammo)
var/obj/item/ammo_casing/microbattery/batt = B
var/image/cap = image(icon, icon_state = "[capname]_cap")
cap.color = batt.type_color
cap.pixel_x = current * x_offset //Caps don't need a pixel_y offset
add_overlay(cap)
if(batt.shots_left)
var/ratio = CEILING(((batt.shots_left / initial(batt.shots_left)) * 4), 1) //4 is how many lights we have a sprite for
var/image/charge = image(icon, icon_state = "[chargename]_charge-[ratio]")
charge.color = "#29EAF4" //Could use battery color but eh.
charge.pixel_x = current * x_offset
add_overlay(charge)
current++ //Increment for offsets
/obj/item/ammo_magazine/cell_mag/advanced
name = "advanced microbattery magazine"
desc = "A microbattery holder for a cell-based variable weapon. This one has much more cell capacity!"
max_ammo = 6
x_offset = 3
icon_state = "cell_mag_extended"
// The Casing //
/obj/item/ammo_casing/microbattery
name = "\'NSCW\' microbattery - UNKNOWN"
desc = "A miniature battery for an energy weapon."
catalogue_data = list(/datum/category_item/catalogue/information/organization/hephaestus)
icon = 'icons/obj/ammo_vr.dmi'
icon_state = "nsfw_batt"
slot_flags = SLOT_BELT | SLOT_EARS
throwforce = 1
w_class = ITEMSIZE_TINY
var/shots_left = 4
leaves_residue = 0
caliber = "nsfw"
var/type_color = null
var/type_name = null
projectile_type = /obj/item/projectile/beam
/obj/item/ammo_casing/microbattery/Initialize()
. = ..()
pixel_x = rand(-10, 10)
pixel_y = rand(-10, 10)
update_icon()
/obj/item/ammo_casing/microbattery/update_icon()
cut_overlays()
var/image/ends = image(icon, icon_state = "[initial(icon_state)]_ends")
ends.color = type_color
add_overlay(ends)
/obj/item/ammo_casing/microbattery/expend()
shots_left--
// The Pack //
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid
name = "hybrid cell-loaded gun kit"
desc = "A storage case for a multi-purpose handgun. Variety hour!"
w_class = ITEMSIZE_NORMAL
max_w_class = ITEMSIZE_NORMAL
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid/New()
..()
new /obj/item/weapon/gun/projectile/cell_loaded(src)
new /obj/item/ammo_magazine/cell_mag/advanced(src)
new /obj/item/ammo_casing/microbattery/combat/stun(src)
new /obj/item/ammo_casing/microbattery/combat/stun(src)
new /obj/item/ammo_casing/microbattery/combat/stun(src)
new /obj/item/ammo_casing/microbattery/combat/net(src)
new /obj/item/ammo_casing/microbattery/combat/net(src)
new /obj/item/ammo_casing/microbattery/medical/brute3(src)
new /obj/item/ammo_casing/microbattery/medical/burn3(src)
new /obj/item/ammo_casing/microbattery/medical/stabilize2(src)
new /obj/item/ammo_casing/microbattery/medical/toxin3(src)
new /obj/item/ammo_casing/microbattery/medical/omni3(src)
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat
name = "military cell-loaded gun kit"
desc = "A storage case for a multi-purpose handgun. Variety hour!"
w_class = ITEMSIZE_NORMAL
max_w_class = ITEMSIZE_NORMAL
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid_combat/New()
..()
new /obj/item/weapon/gun/projectile/cell_loaded(src)
new /obj/item/ammo_magazine/cell_mag/advanced(src)
new /obj/item/ammo_casing/microbattery/combat/shotstun(src)
new /obj/item/ammo_casing/microbattery/combat/shotstun(src)
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
new /obj/item/ammo_casing/microbattery/combat/ion(src)
new /obj/item/ammo_casing/microbattery/combat/xray(src)
new /obj/item/ammo_casing/microbattery/medical/stabilize2(src)
new /obj/item/ammo_casing/microbattery/medical/haste(src)
new /obj/item/ammo_casing/microbattery/medical/resist(src)
@@ -0,0 +1,72 @@
// The Gun //
/obj/item/weapon/gun/projectile/cell_loaded/medical
name = "cell-loaded medigun"
desc = "The ML-3 'Medigun', or ML3 for short, is a powerful cell-based ranged healing device based on the HI-102b NSCW. \
It uses an internal nanite fabricator, powered and controlled by discrete cells, to deliver a variety of effects at range. Up to six combinations of \
healing beams can be configured at once, depending on cartridge used. Ammo not included."
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
icon_state = "ml3m"
description_info = "This is a ranged healing device that uses interchangable nanite discharge cells in a magazine. Each cell is a different healing beam type, and up to three can be loaded in the magazine. Each battery usually provides four discharges of that beam type, and multiple from the same type may be loaded to increase the number of shots for that type."
description_fluff = "The Vey-Med ML-3 'Medigun' allows one to customize their loadout in the field, or before deploying, to allow emergency response personnel to deliver a variety of ranged healing options."
description_antag = ""
origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 2, TECH_BIO = 5)
allowed_magazines = list(/obj/item/ammo_magazine/cell_mag/medical)
/obj/item/weapon/gun/projectile/cell_loaded/medical/cmo
name = "advanced cell-loaded medigun"
desc = "This is a variation on the ML-3 'Medigun', a powerful cell-based ranged healing device based on the HI-102b NSCW. \
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\'"
catalogue_data = list(/datum/category_item/catalogue/information/organization/vey_med)
description_info = "This magazine holds self-charging nanite fabricators to power the ML-3 'Medigun'. Up to three can be loaded at once, and each provides four shots of their respective healing type. Loading multiple of the same type will provide additional shots of that type. The batteries can be recharged in a normal recharger."
ammo_type = /obj/item/ammo_casing/microbattery/medical
icon_state = "ml3m_mag"
origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 3)
/obj/item/ammo_magazine/cell_mag/medical/advanced
name = "advanced nanite magazine"
desc = "A nanite discharge cell for the \'ML-3\'. This one is a more advanced version which can hold six individual nanite discharge cells."
max_ammo = 6
x_offset = 3
icon_state = "ml3m_mag_extended"
origin_tech = list(TECH_MATERIAL = 5, TECH_BIO = 5)
// The Pack //
/obj/item/weapon/storage/secure/briefcase/ml3m_pack_med
name = "\improper ML-3 \'Medigun\' kit"
desc = "A storage case for a multi-purpose healing gun. Variety hour!"
w_class = ITEMSIZE_NORMAL
max_w_class = ITEMSIZE_NORMAL
/obj/item/weapon/storage/secure/briefcase/ml3m_pack_med/New()
..()
new /obj/item/weapon/gun/projectile/cell_loaded/medical(src)
new /obj/item/ammo_magazine/cell_mag/medical(src)
new /obj/item/ammo_casing/microbattery/medical/brute(src)
new /obj/item/ammo_casing/microbattery/medical/burn(src)
new /obj/item/ammo_casing/microbattery/medical/stabilize(src)
/obj/item/weapon/storage/secure/briefcase/ml3m_pack_cmo
name = "\improper Advanced ML-3 \'Medigun\' kit"
desc = "A storage case for a multi-purpose healing gun. Variety hour!"
w_class = ITEMSIZE_NORMAL
max_w_class = ITEMSIZE_NORMAL
/obj/item/weapon/storage/secure/briefcase/ml3m_pack_cmo/New()
..()
new /obj/item/weapon/gun/projectile/cell_loaded/medical/cmo(src)
new /obj/item/ammo_magazine/cell_mag/medical(src)
new /obj/item/ammo_casing/microbattery/medical/brute(src)
new /obj/item/ammo_casing/microbattery/medical/burn(src)
new /obj/item/ammo_casing/microbattery/medical/stabilize(src)
new /obj/item/ammo_casing/microbattery/medical/toxin(src)
new /obj/item/ammo_casing/microbattery/medical/omni(src)
@@ -0,0 +1,340 @@
// The Casing //
/obj/item/ammo_casing/microbattery/medical
name = "\'ML-3\' 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\' nanite cell - BRUTE"
type_color = "#BF0000"
type_name = "<span style='color:#BF0000;font-weight:bold;'>BRUTE</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/brute
/obj/item/projectile/beam/medical_cell/brute/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustBruteLoss(-5)
else
return 1
/obj/item/ammo_casing/microbattery/medical/burn
name = "\'ML-3\' nanite cell - BURN"
type_color = "#FF8000"
type_name = "<span style='color:#FF8000;font-weight:bold;'>BURN</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/burn
/obj/item/projectile/beam/medical_cell/burn/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustFireLoss(-5)
else
return 1
/obj/item/ammo_casing/microbattery/medical/stabilize
name = "\'ML-3\' nanite cell - STABILIZE" //Disinfects all open wounds, cures oxy damage
type_color = "#0080FF"
type_name = "<span style='color:#0080FF;font-weight:bold;'>STABILIZE</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/stabilize
/obj/item/projectile/beam/medical_cell/stabilize/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustOxyLoss(-30)
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
var/obj/item/organ/external/O = target.organs_by_name[name]
for (var/datum/wound/W in O.wounds)
if (W.internal)
continue
W.disinfect()
target.add_modifier(/datum/modifier/stabilize, 20 SECONDS)
else
return 1
/datum/modifier/stabilize
name = "stabilize"
desc = "Your injuries are stabilized and your pain abates!"
mob_overlay_state = "cyan_sparkles"
stacks = MODIFIER_STACK_EXTEND
pain_immunity = TRUE
bleeding_rate_percent = 0.1 //only a little
incoming_oxy_damage_percent = 0
/obj/item/ammo_casing/microbattery/medical/toxin
name = "\'ML-3\' nanite cell - TOXIN"
type_color = "#00A000"
type_name = "<span style='color:#00A000;font-weight:bold;'>TOXIN</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/toxin
/obj/item/projectile/beam/medical_cell/toxin/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustToxLoss(-5)
else
return 1
/obj/item/ammo_casing/microbattery/medical/omni
name = "\'ML-3\' nanite cell - OMNI"
type_color = "#8040FF"
type_name = "<span style='color:#8040FF;font-weight:bold;'>OMNI</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/omni
/obj/item/projectile/beam/medical_cell/omni/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustBruteLoss(-2.5)
target.adjustFireLoss(-2.5)
target.adjustToxLoss(-2.5)
target.adjustOxyLoss(-10)
else
return 1
/obj/item/ammo_casing/microbattery/medical/antirad
name = "\'ML-3\' nanite cell - ANTIRAD"
type_color = "#008000"
type_name = "<span style='color:#008000;font-weight:bold;'>ANTIRAD</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/antirad
/obj/item/projectile/beam/medical_cell/antirad/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustToxLoss(-2.5)
target.radiation = max(target.radiation - 150, 0) //same as 5 units of arithrazine, sans the brute damage
else
return 1
/obj/item/ammo_casing/microbattery/medical/brute2
name = "\'ML-3\' nanite cell - BRUTE-II"
type_color = "#BF0000"
type_name = "<span style='color:#BF0000;font-weight:bold;'>BRUTE-II</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/brute2
/obj/item/projectile/beam/medical_cell/brute2/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustBruteLoss(-10)
else
return 1
/obj/item/ammo_casing/microbattery/medical/burn2
name = "\'ML-3\' nanite cell - BURN-II"
type_color = "#FF8000"
type_name = "<span style='color:#FF8000;font-weight:bold;'>BURN-II</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/burn2
/obj/item/projectile/beam/medical_cell/burn2/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustFireLoss(-10)
else
return 1
/obj/item/ammo_casing/microbattery/medical/stabilize2
name = "\'ML-3\' nanite cell - STABILIZE-II" //Disinfects and bandages all open wounds, cures all oxy damage
type_color = "#0080FF"
type_name = "<span style='color:#0080FF;font-weight:bold;'>STABILIZE-II</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/stabilize2
/obj/item/projectile/beam/medical_cell/stabilize2/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustOxyLoss(-200)
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
var/obj/item/organ/external/O = target.organs_by_name[name]
for (var/datum/wound/W in O.wounds)
if(W.internal)
continue
if(O.is_bandaged() == FALSE)
W.bandage()
if(O.is_salved() == FALSE)
W.salve()
W.disinfect()
target.add_modifier(/datum/modifier/stabilize, 20 SECONDS)
else
return 1
/obj/item/ammo_casing/microbattery/medical/omni2
name = "\'ML-3\' nanite cell - OMNI-II"
type_color = "#8040FF"
type_name = "<span style='color:#8040FF;font-weight:bold;'>OMNI-II</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/omni2
/obj/item/projectile/beam/medical_cell/omni2/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustBruteLoss(-5)
target.adjustFireLoss(-5)
target.adjustToxLoss(-5)
target.adjustOxyLoss(-30)
else
return 1
/obj/item/ammo_casing/microbattery/medical/toxin2
name = "\'ML-3\' nanite cell - TOXIN-II"
type_color = "#00A000"
type_name = "<span style='color:#00A000;font-weight:bold;'>TOXIN-II</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/toxin2
/obj/item/projectile/beam/medical_cell/toxin2/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustToxLoss(-20)
else
return 1
/obj/item/ammo_casing/microbattery/medical/haste
name = "\'ML-3\' nanite cell - HASTE"
type_color = "#FF3300"
type_name = "<span style='color:#FF3300;font-weight:bold;'>HASTE</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/haste
/obj/item/projectile/beam/medical_cell/haste/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.add_modifier(/datum/modifier/ml3mhaste, 20 SECONDS)
else
return 1
/datum/modifier/ml3mhaste
name = "haste"
desc = "You can move much faster!"
mob_overlay_state = "haste"
stacks = MODIFIER_STACK_EXTEND
slowdown = -0.5 //a little faster!
evasion = 1.15 //and a little harder to hit!
/obj/item/ammo_casing/microbattery/medical/resist
name = "\'ML-3\' nanite cell - RESIST"
type_color = "#555555"
type_name = "<span style='color:#555555;font-weight:bold;'>RESIST</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/resist
/obj/item/projectile/beam/medical_cell/resist/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.add_modifier(/datum/modifier/resistance, 20 SECONDS)
else
return 1
/datum/modifier/resistance
name = "resistance"
desc = "You resist 15% of all incoming damage and stuns!"
mob_overlay_state = "repel_missiles"
stacks = MODIFIER_STACK_EXTEND
disable_duration_percent = 0.85
incoming_damage_percent = 0.85
/obj/item/ammo_casing/microbattery/medical/corpse_mend
name = "\'ML-3\' nanite cell - CORPSE MEND"
type_color = "#669900"
type_name = "<span style='color:#669900;font-weight:bold;'>CORPSE MEND</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/corpse_mend
/obj/item/projectile/beam/medical_cell/corpse_mend/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
if(target.stat == DEAD)
target.adjustBruteLoss(-50)
target.adjustFireLoss(-50)
target.adjustToxLoss(-50)
target.adjustOxyLoss(-200)
else
return 1
/obj/item/ammo_casing/microbattery/medical/brute3
name = "\'ML-3\' nanite cell - BRUTE-III"
type_color = "#BF0000"
type_name = "<span style='color:#BF0000;font-weight:bold;'>BRUTE-III</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/brute3
/obj/item/projectile/beam/medical_cell/brute3/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustBruteLoss(-20)
else
return 1
/obj/item/ammo_casing/microbattery/medical/burn3
name = "\'ML-3\' nanite cell - BURN-III"
type_color = "#FF8000"
type_name = "<span style='color:#FF8000;font-weight:bold;'>BURN-III</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/burn3
/obj/item/projectile/beam/medical_cell/burn3/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustFireLoss(-20)
else
return 1
/obj/item/ammo_casing/microbattery/medical/toxin3
name = "\'ML-3\' nanite cell - TOXIN-III"
type_color = "#00A000"
type_name = "<span style='color:#00A000;font-weight:bold;'>TOXIN-III</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/toxin3
/obj/item/projectile/beam/medical_cell/toxin3/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustToxLoss(-20)
else
return 1
/obj/item/ammo_casing/microbattery/medical/omni3
name = "\'ML-3\' nanite cell - OMNI-III"
type_color = "#8040FF"
type_name = "<span style='color:#8040FF;font-weight:bold;'>OMNI-III</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/omni3
/obj/item/projectile/beam/medical_cell/omni3/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustBruteLoss(-10)
target.adjustFireLoss(-10)
target.adjustToxLoss(-10)
target.adjustOxyLoss(-60)
else
return 1
// Illegal cells!
/obj/item/ammo_casing/microbattery/medical/shrink
name = "\'ML-3\' nanite cell - SHRINK"
type_color = "#910ffc"
type_name = "<span style='color:#910ffc;font-weight:bold;'>SHRINK</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/shrink
/obj/item/projectile/beam/medical_cell/shrink/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.resize(0.5)
target.show_message("<font color='blue'>The beam fires into your body, changing your size!</font>")
target.updateicon()
else
return 1
/obj/item/ammo_casing/microbattery/medical/grow
name = "\'ML-3\' nanite cell - GROW"
type_color = "#fc0fdc"
type_name = "<span style='color:#fc0fdc;font-weight:bold;'>GROW</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/grow
/obj/item/projectile/beam/medical_cell/grow/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.resize(2.0)
target.show_message("<font color='blue'>The beam fires into your body, changing your size!</font>")
target.updateicon()
else
return 1
/obj/item/ammo_casing/microbattery/medical/normalsize
name = "\'ML-3\' nanite cell - NORMALSIZE"
type_color = "#C70FEC"
type_name = "<span style='color:#C70FEC;font-weight:bold;'>NORMALSIZE</span>"
projectile_type = /obj/item/projectile/beam/medical_cell/normalsize
/obj/item/projectile/beam/medical_cell/normalsize/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.resize(1)
target.show_message("<font color='blue'>The beam fires into your body, changing your size!</font>")
target.updateicon()
else
return 1
@@ -0,0 +1,75 @@
// The Gun //
/obj/item/weapon/gun/projectile/cell_loaded/combat
name = "cell-loaded revolver"
desc = "Variety is the spice of life! The HI-102b 'Nanotech Selectable-Cell Weapon', or NSCW 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/hephaestus)
description_fluff = "The Hephaestus 'Nanotech Selectable Cell 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 HI-102b 'Nanotech Selectable-Cell Weapon', or NSCW 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 \'NSCW\'"
icon_state = "nsfw_mag"
max_ammo = 4
x_offset = 4
catalogue_data = list(/datum/category_item/catalogue/information/organization/hephaestus)
description_info = "This magazine holds NSCW microbatteries to power the NSCW 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 HI-102b \'NSCW\' 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 HI-102b \'NSCW\' gun kit"
desc = "A storage case for a multi-purpose handgun. Variety hour!"
w_class = ITEMSIZE_NORMAL
max_w_class = ITEMSIZE_NORMAL
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos/New()
..()
new /obj/item/weapon/gun/projectile/cell_loaded/combat(src)
new /obj/item/ammo_magazine/cell_mag/combat(src)
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
new /obj/item/ammo_casing/microbattery/combat/lethal(src)
new /obj/item/ammo_casing/microbattery/combat/stun(src)
new /obj/item/ammo_casing/microbattery/combat/stun(src)
new /obj/item/ammo_casing/microbattery/combat/stun(src)
new /obj/item/ammo_casing/microbattery/combat/net(src)
new /obj/item/ammo_casing/microbattery/combat/ion(src)
@@ -0,0 +1,115 @@
// The Casing //
/obj/item/ammo_casing/microbattery/combat
name = "\'NSCW\' microbattery - UNKNOWN"
desc = "A miniature battery for an energy weapon."
catalogue_data = list(/datum/category_item/catalogue/information/organization/hephaestus)
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 1, TECH_MAGNETS = 2)
/obj/item/ammo_casing/microbattery/combat/lethal
name = "\'NSCW\' microbattery - LETHAL"
type_color = "#bf3d3d"
type_name = "<span style='color:#bf3d3d;font-weight:bold;'>LETHAL</span>"
projectile_type = /obj/item/projectile/beam
/obj/item/ammo_casing/microbattery/combat/stun
name = "\'NSCW\' microbattery - STUN"
type_color = "#0f81bc"
type_name = "<span style='color:#0f81bc;font-weight:bold;'>STUN</span>"
projectile_type = /obj/item/projectile/beam/stun/blue
/obj/item/ammo_casing/microbattery/combat/net
name = "\'NSCW\' microbattery - NET"
type_color = "#43f136"
type_name = "<span style='color:#43d136;font-weight:bold;'>NET</span>"
projectile_type = /obj/item/projectile/beam/energy_net
/obj/item/ammo_casing/microbattery/combat/xray
name = "\'NSCW\' microbattery - XRAY"
type_color = "#32c025"
type_name = "<span style='color:#32c025;font-weight:bold;'>XRAY</span>"
projectile_type = /obj/item/projectile/beam/xray
/obj/item/ammo_casing/microbattery/combat/shotstun
name = "\'NSCW\' microbattery - SCATTERSTUN"
type_color = "#88ffff"
type_name = "<span style='color:#88ffff;font-weight:bold;'>SCATTERSTUN</span>"
projectile_type = /obj/item/projectile/bullet/pellet/e_shot_stun
/obj/item/projectile/bullet/pellet/e_shot_stun
icon_state = "spell"
damage = 2
agony = 20
pellets = 6 //number of pellets
range_step = 2 //projectile will lose a fragment each time it travels this distance. Can be a non-integer.
base_spread = 90 //lower means the pellets spread more across body parts. If zero then this is considered a shrapnel explosion instead of a shrapnel cone
spread_step = 10
embed_chance = 0
sharp = 0
check_armour = "melee"
/obj/item/ammo_casing/microbattery/combat/ion
name = "\'NSCW\' microbattery - ION"
type_color = "#d084d6"
type_name = "<span style='color:#d084d6;font-weight:bold;'>ION</span>"
projectile_type = /obj/item/projectile/ion/small
/obj/item/ammo_casing/microbattery/combat/stripper
name = "\'NSCW\' microbattery - STRIPPER"
type_color = "#fc8d0f"
type_name = "<span style='color:#fc8d0f;font-weight:bold;'>STRIPPER</span>"
projectile_type = /obj/item/projectile/bullet/stripper
/obj/item/projectile/bullet/stripper
icon_state = "magicm"
nodamage = 1
agony = 5
embed_chance = 0
sharp = 0
check_armour = "melee"
/obj/item/projectile/bullet/stripper/on_hit(var/atom/stripped)
if(ishuman(stripped))
var/mob/living/carbon/human/H = stripped
if(H.wear_suit)
H.unEquip(H.wear_suit)
if(H.w_uniform)
H.unEquip(H.w_uniform)
if(H.back)
H.unEquip(H.back)
if(H.shoes)
H.unEquip(H.shoes)
if(H.gloves)
H.unEquip(H.gloves)
//Hats can stay! Most other things fall off with removing these.
..()
/obj/item/ammo_casing/microbattery/combat/final
name = "\'NSCW\' microbattery - FINAL OPTION"
type_color = "#fcfc0f"
type_name = "<span style='color:#000000;font-weight:bold;'>FINAL OPTION</span>" //Doesn't look good in yellow in chat
projectile_type = /obj/item/projectile/beam/final_option
/obj/item/projectile/beam/final_option
name = "final option beam"
icon_state = "omnilaser"
nodamage = 1
agony = 5
damage_type = HALLOSS
light_color = "#00CC33"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
/obj/item/projectile/beam/final_option/on_hit(var/atom/impacted)
if(isliving(impacted))
var/mob/living/L = impacted
if(L.mind)
var/nif
if(ishuman(L))
var/mob/living/carbon/human/H = L
nif = H.nif
SStranscore.m_backup(L.mind,nif,one_time = TRUE)
L.gib()
..()
-748
View File
@@ -1,748 +0,0 @@
// -------------- NSFW -------------
/obj/item/weapon/gun/projectile/nsfw //this one can load both medical and security cells! for ERT/admin use.
name = "cell-loaded revolver"
desc = "Variety is the spice of life! This weapon is a hybrid of the HI-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/hephaestus,
/datum/category_item/catalogue/information/organization/vey_med)
icon = 'icons/vore/custom_guns_vr.dmi'
icon_state = "nsfw"
icon_override = 'icons/vore/custom_guns_vr.dmi'
item_state = "gun"
caliber = "nsfw"
origin_tech = list(TECH_COMBAT = 7, TECH_MATERIAL = 6, TECH_MAGNETS = 4)
fire_sound = 'sound/weapons/Taser.ogg'
load_method = MAGAZINE //Nyeh heh hehhh.
magazine_type = null
allowed_magazines = list(/obj/item/ammo_magazine/nsfw_mag)
handle_casings = HOLD_CASINGS //Don't eject batteries!
recoil = 0
var/charge_left = 0
var/max_charge = 0
charge_sections = 5
/obj/item/weapon/gun/projectile/nsfw/consume_next_projectile()
if(chambered && ammo_magazine)
var/obj/item/ammo_casing/nsfw_batt/batt = chambered
if(batt.shots_left)
return new chambered.projectile_type()
else
for(var/B in ammo_magazine.stored_ammo)
var/obj/item/ammo_casing/nsfw_batt/other_batt = B
if(istype(other_batt,chambered.type) && other_batt.shots_left)
switch_to(other_batt)
return new chambered.projectile_type()
break
return null
/obj/item/weapon/gun/projectile/nsfw/proc/update_charge()
charge_left = 0
max_charge = 0
if(!chambered)
return
var/obj/item/ammo_casing/nsfw_batt/batt = chambered
charge_left = batt.shots_left
max_charge = initial(batt.shots_left)
if(ammo_magazine) //Crawl to find more
for(var/B in ammo_magazine.stored_ammo)
var/obj/item/ammo_casing/nsfw_batt/bullet = B
if(istype(bullet,batt.type))
charge_left += bullet.shots_left
max_charge += initial(bullet.shots_left)
/obj/item/weapon/gun/projectile/nsfw/proc/switch_to(obj/item/ammo_casing/nsfw_batt/new_batt)
if(ishuman(loc))
if(chambered && new_batt.type == chambered.type)
to_chat(loc,"<span class='warning'>\The [src] is now using the next [new_batt.type_name] power cell.</span>")
else
to_chat(loc,"<span class='warning'>\The [src] is now firing [new_batt.type_name].</span>")
chambered = new_batt
update_charge()
update_icon()
/obj/item/weapon/gun/projectile/nsfw/attack_self(mob/user)
if(!chambered)
return
var/list/stored_ammo = ammo_magazine.stored_ammo
if(stored_ammo.len == 1)
return //silly you.
//Find an ammotype that ISN'T the same, or exhaust the list and don't change.
var/our_slot = stored_ammo.Find(chambered)
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]
if(chambered != next_batt && !istype(next_batt, chambered.type))
switch_to(next_batt)
break
/*
/obj/item/weapon/gun/projectile/nsfw/special_check(mob/user)
if(!chambered)
return
var/obj/item/ammo_casing/nsfw_batt/batt = chambered
if(!batt.shots_left)
return FALSE
return TRUE
*/
/obj/item/weapon/gun/projectile/nsfw/load_ammo(var/obj/item/A, mob/user)
. = ..()
if(ammo_magazine && ammo_magazine.stored_ammo.len)
switch_to(ammo_magazine.stored_ammo[1])
/obj/item/weapon/gun/projectile/nsfw/unload_ammo(mob/user, var/allow_dump=1)
chambered = null
return ..()
/obj/item/weapon/gun/projectile/nsfw/update_icon()
update_charge()
cut_overlays()
if(!chambered)
return
var/obj/item/ammo_casing/nsfw_batt/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/nsfw/combat
name = "cell-loaded revolver"
desc = "Variety is the spice of life! The HI-102b 'Nanotech Selectable-Fire Weapon', is an unholy hybrid of an ammo-driven \
energy weapon that allows the user to mix and match their own fire modes. Up to three combinations of \
energy beams can be configured at once. Ammo not included."
catalogue_data = list(/datum/category_item/catalogue/information/organization/hephaestus)
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 Hephaestus Industries '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)
/obj/item/weapon/gun/projectile/nsfw/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 HI-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/nsfw_mag/medical)
/obj/item/weapon/gun/projectile/nsfw/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 HI-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/nsfw_mag
name = "microbattery magazine"
desc = "A microbattery holder for a cell-based variable weapon."
icon = 'icons/obj/ammo_vr.dmi'
icon_state = "nsfw_mag"
caliber = "nsfw"
matter = list(DEFAULT_WALL_MATERIAL = 1680, "glass" = 2000)
ammo_type = /obj/item/ammo_casing/nsfw_batt
initial_ammo = 0
max_ammo = 3
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/nsfw_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/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/nsfw_mag/combat //security
name = "microbattery magazine"
desc = "A microbattery holder for the \'NSFW\'"
catalogue_data = list(/datum/category_item/catalogue/information/organization/hephaestus)
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
/obj/item/ammo_magazine/nsfw_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
icon_state = "ml3m_mag"
/obj/item/ammo_magazine/nsfw_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/nsfw_batt
name = "\'NSFW\' microbattery - UNKNOWN"
desc = "A miniature battery for an energy weapon."
catalogue_data = list(/datum/category_item/catalogue/information/organization/hephaestus)
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/nsfw_batt/Initialize()
. = ..()
pixel_x = rand(-10, 10)
pixel_y = rand(-10, 10)
update_icon()
/obj/item/ammo_casing/nsfw_batt/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()
shots_left--
// Specific batteries //
// Security (Combat) //
/obj/item/ammo_casing/nsfw_batt/combat
name = "\'NSFW\' microbattery - UNKNOWN"
desc = "A miniature battery for an energy weapon."
catalogue_data = list(/datum/category_item/catalogue/information/organization/hephaestus)
/obj/item/ammo_casing/nsfw_batt/combat/lethal
name = "\'NSFW\' microbattery - LETHAL"
type_color = "#bf3d3d"
type_name = "<span style='color:#bf3d3d;font-weight:bold;'>LETHAL</span>"
projectile_type = /obj/item/projectile/beam
/obj/item/ammo_casing/nsfw_batt/combat/stun
name = "\'NSFW\' microbattery - STUN"
type_color = "#0f81bc"
type_name = "<span style='color:#0f81bc;font-weight:bold;'>STUN</span>"
projectile_type = /obj/item/projectile/beam/stun/blue
/obj/item/ammo_casing/nsfw_batt/combat/net
name = "\'NSFW\' microbattery - NET"
type_color = "#43f136"
type_name = "<span style='color:#43d136;font-weight:bold;'>NET</span>"
projectile_type = /obj/item/projectile/beam/energy_net
/obj/item/ammo_casing/nsfw_batt/combat/xray
name = "\'NSFW\' microbattery - XRAY"
type_color = "#32c025"
type_name = "<span style='color:#32c025;font-weight:bold;'>XRAY</span>"
projectile_type = /obj/item/projectile/beam/xray
/obj/item/ammo_casing/nsfw_batt/combat/shotstun
name = "\'NSFW\' microbattery - SCATTERSTUN"
type_color = "#88ffff"
type_name = "<span style='color:#88ffff;font-weight:bold;'>SCATTERSTUN</span>"
projectile_type = /obj/item/projectile/bullet/pellet/e_shot_stun
/obj/item/projectile/bullet/pellet/e_shot_stun
icon_state = "spell"
damage = 2
agony = 20
pellets = 6 //number of pellets
range_step = 2 //projectile will lose a fragment each time it travels this distance. Can be a non-integer.
base_spread = 90 //lower means the pellets spread more across body parts. If zero then this is considered a shrapnel explosion instead of a shrapnel cone
spread_step = 10
embed_chance = 0
sharp = 0
check_armour = "melee"
/obj/item/ammo_casing/nsfw_batt/combat/ion
name = "\'NSFW\' microbattery - ION"
type_color = "#d084d6"
type_name = "<span style='color:#d084d6;font-weight:bold;'>ION</span>"
projectile_type = /obj/item/projectile/ion/small
/obj/item/ammo_casing/nsfw_batt/combat/stripper
name = "\'NSFW\' microbattery - STRIPPER"
type_color = "#fc8d0f"
type_name = "<span style='color:#fc8d0f;font-weight:bold;'>STRIPPER</span>"
projectile_type = /obj/item/projectile/bullet/stripper
/obj/item/projectile/bullet/stripper
icon_state = "magicm"
nodamage = 1
agony = 5
embed_chance = 0
sharp = 0
check_armour = "melee"
/obj/item/projectile/bullet/stripper/on_hit(var/atom/stripped)
if(ishuman(stripped))
var/mob/living/carbon/human/H = stripped
if(H.wear_suit)
H.unEquip(H.wear_suit)
if(H.w_uniform)
H.unEquip(H.w_uniform)
if(H.back)
H.unEquip(H.back)
if(H.shoes)
H.unEquip(H.shoes)
if(H.gloves)
H.unEquip(H.gloves)
//Hats can stay! Most other things fall off with removing these.
..()
/obj/item/ammo_casing/nsfw_batt/combat/final
name = "\'NSFW\' microbattery - FINAL OPTION"
type_color = "#fcfc0f"
type_name = "<span style='color:#000000;font-weight:bold;'>FINAL OPTION</span>" //Doesn't look good in yellow in chat
projectile_type = /obj/item/projectile/beam/final_option
/obj/item/projectile/beam/final_option
name = "final option beam"
icon_state = "omnilaser"
nodamage = 1
agony = 5
damage_type = HALLOSS
light_color = "#00CC33"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
/obj/item/projectile/beam/final_option/on_hit(var/atom/impacted)
if(isliving(impacted))
var/mob/living/L = impacted
if(L.mind)
var/nif
if(ishuman(L))
var/mob/living/carbon/human/H = L
nif = H.nif
SStranscore.m_backup(L.mind,nif,one_time = TRUE)
L.gib()
..()
/obj/item/weapon/storage/secure/briefcase/nsfw_pack
name = "\improper HI-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/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 path(src)
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hos
name = "\improper HI-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/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)
/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/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)
/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/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)
// Medical //
/obj/item/ammo_casing/nsfw_batt/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
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/ML3M/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
name = "\'ML-3/M\' nanite cell - BRUTE"
type_color = "#BF0000"
type_name = "<span style='color:#BF0000;font-weight:bold;'>BRUTE</span>"
projectile_type = /obj/item/projectile/beam/ML3M/brute
/obj/item/projectile/beam/ML3M/brute/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/nsfw_batt/medical/burn
name = "\'ML-3/M\' nanite cell - BURN"
type_color = "#FF8000"
type_name = "<span style='color:#FF8000;font-weight:bold;'>BURN</span>"
projectile_type = /obj/item/projectile/beam/ML3M/burn
/obj/item/projectile/beam/ML3M/burn/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/nsfw_batt/medical/stabilize
name = "\'ML-3/M\' nanite cell - STABILIZE" //Disinfects all open wounds, cures oxy damage
type_color = "#0080FF"
type_name = "<span style='color:#0080FF;font-weight:bold;'>STABILIZE</span>"
projectile_type = /obj/item/projectile/beam/ML3M/stabilize
/obj/item/projectile/beam/ML3M/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/nsfw_batt/medical/tox
name = "\'ML-3/M\' nanite cell - TOX"
type_color = "#00A000"
type_name = "<span style='color:#00A000;font-weight:bold;'>TOX</span>"
projectile_type = /obj/item/projectile/beam/ML3M/tox
/obj/item/projectile/beam/ML3M/tox/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.adjustToxLoss(-10)
else
return 1
/obj/item/ammo_casing/nsfw_batt/medical/omni
name = "\'ML-3/M\' nanite cell - OMNI"
type_color = "#8040FF"
type_name = "<span style='color:#8040FF;font-weight:bold;'>OMNI</span>"
projectile_type = /obj/item/projectile/beam/ML3M/omni
/obj/item/projectile/beam/ML3M/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)
else
return 1
/obj/item/ammo_casing/nsfw_batt/medical/antirad
name = "\'ML-3/M\' nanite cell - OMNI"
type_color = "#008000"
type_name = "<span style='color:#008000;font-weight:bold;'>ANTIRAD</span>"
projectile_type = /obj/item/projectile/beam/ML3M/antirad
/obj/item/projectile/beam/ML3M/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
else
return 1
/obj/item/ammo_casing/nsfw_batt/medical/brute2
name = "\'ML-3/M\' nanite cell - BRUTE-II"
type_color = "#BF0000"
type_name = "<span style='color:#BF0000;font-weight:bold;'>BRUTE-II</span>"
projectile_type = /obj/item/projectile/beam/ML3M/brute2
/obj/item/projectile/beam/ML3M/brute2/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/nsfw_batt/medical/burn2
name = "\'ML-3/M\' nanite cell - BURN-II"
type_color = "#FF8000"
type_name = "<span style='color:#FF8000;font-weight:bold;'>BURN-II</span>"
projectile_type = /obj/item/projectile/beam/ML3M/burn2
/obj/item/projectile/beam/ML3M/burn2/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/nsfw_batt/medical/stabilize2
name = "\'ML-3/M\' nanite cell - STABILIZE-II" //Disinfects and bandages all open wounds, cures all oxy damage
type_color = "#0080FF"
type_name = "<span style='color:#0080FF;font-weight:bold;'>STABILIZE-II</span>"
projectile_type = /obj/item/projectile/beam/ML3M/stabilize2
/obj/item/projectile/beam/ML3M/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/nsfw_batt/medical/omni2
name = "\'ML-3/M\' nanite cell - OMNI-II"
type_color = "#8040FF"
type_name = "<span style='color:#8040FF;font-weight:bold;'>OMNI-II</span>"
projectile_type = /obj/item/projectile/beam/ML3M/omni2
/obj/item/projectile/beam/ML3M/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.adjustOxyLoss(-30)
else
return 1
/obj/item/ammo_casing/nsfw_batt/medical/tox2
name = "\'ML-3/M\' nanite cell - TOX-II"
type_color = "#00A000"
type_name = "<span style='color:#00A000;font-weight:bold;'>TOX-II</span>"
projectile_type = /obj/item/projectile/beam/ML3M/tox2
/obj/item/projectile/beam/ML3M/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
name = "\'ML-3/M\' nanite cell - HASTE"
type_color = "#FF3300"
type_name = "<span style='color:#FF3300;font-weight:bold;'>HASTE</span>"
projectile_type = /obj/item/projectile/beam/ML3M/haste
/obj/item/projectile/beam/ML3M/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 = -1 //a little faster!
evasion = 1.25 //and a little harder to hit!
/obj/item/ammo_casing/nsfw_batt/medical/resistance
name = "\'ML-3/M\' nanite cell - RESIST"
type_color = "#555555"
type_name = "<span style='color:#555555;font-weight:bold;'>RESIST</span>"
projectile_type = /obj/item/projectile/beam/ML3M/resistance
/obj/item/projectile/beam/ML3M/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 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
/obj/item/ammo_casing/nsfw_batt/medical/revival
name = "\'ML-3/M\' nanite cell - REVIVAL"
type_color = "#669900"
type_name = "<span style='color:#669900;font-weight:bold;'>REVIVAL</span>"
projectile_type = /obj/item/projectile/beam/ML3M/revival
/obj/item/projectile/beam/ML3M/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
/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
name = "\'ML-3/M\' nanite cell - SHRINK"
type_color = "#910ffc"
type_name = "<span style='color:#910ffc;font-weight:bold;'>SHRINK</span>"
projectile_type = /obj/item/projectile/beam/ML3M/shrink
/obj/item/projectile/beam/ML3M/shrink/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.resize(0.5)
target.show_message("<font color='blue'> The beam fires into your body, changing your size!</font>")
target.updateicon()
else
return 1
/obj/item/ammo_casing/nsfw_batt/medical/grow
name = "\'ML-3/M\' nanite cell - GROW"
type_color = "#fc0fdc"
type_name = "<span style='color:#fc0fdc;font-weight:bold;'>GROW</span>"
projectile_type = /obj/item/projectile/beam/ML3M/grow
/obj/item/projectile/beam/ML3M/grow/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.resize(2.0)
target.show_message("<font color='blue'> The beam fires into your body, changing your size!</font>")
target.updateicon()
else
return 1
/obj/item/ammo_casing/nsfw_batt/medical/normalsize
name = "\'ML-3/M\' nanite cell - NORMALSIZE"
type_color = "#C70FEC"
type_name = "<span style='color:#C70FEC;font-weight:bold;'>NORMALSIZE</span>"
projectile_type = /obj/item/projectile/beam/ML3M/normalsize
/obj/item/projectile/beam/ML3M/normalsize/on_hit(var/mob/living/carbon/human/target)
if(istype(target, /mob/living/carbon/human))
target.resize(1)
target.show_message("<font color='blue'> The beam fires into your body, changing your size!</font>")
target.updateicon()
else
return 1
@@ -4,6 +4,7 @@
name = "micro"
desc = "Another crewmember, small enough to fit in your hand."
icon_state = "micro"
icon_override = 'icons/mob/head_vr.dmi'
slot_flags = SLOT_FEET | SLOT_HEAD | SLOT_ID
w_class = ITEMSIZE_SMALL
item_icons = list() // No in-hand sprites (for now, anyway, we could totally add some)
@@ -34,4 +35,9 @@
var/turf/here = get_turf(src)
for(var/atom/movable/A in src)
A.forceMove(here)
return ..()
return ..()
/obj/item/weapon/holder/micro/sync(var/mob/living/M)
..()
for(var/mob/living/carbon/human/I in contents)
item_state = lowertext(I.species.name)
+1 -1
View File
@@ -135,7 +135,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
var/mob/living/simple_mob/SA = M
if(!SA.has_hands)
return 0
if(M.buckled)
if(buckled)
to_chat(usr,"<span class='notice'>You have to unbuckle \the [M] before you pick them up.</span>")
return 0
if(size_diff >= 0.50)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 614 B

After

Width:  |  Height:  |  Size: 813 B

+4 -1
View File
@@ -11,4 +11,7 @@
#maps/RandomZLevels/listeningpost.dmm
#maps/RandomZLevels/blackmarketpackers.dmm
#maps/RandomZLevels/beach.dmm
#maps/RandomZLevels/zoo.dmm
#maps/RandomZLevels/zoo.dmm
#This one works with the Tether, uncomment when gateway code is unfucked
#maps/RandomZLevels/snow_outpost.dmm
+41
View File
@@ -0,0 +1,41 @@
// -- Areas -- //
/area/awaymission/snow_outpost
icon_state = "blank"
requires_power = 0
base_turf = /turf/snow/snow2
ambience = list('sound/music/main.ogg', 'sound/ambience/maintenance/maintenance4.ogg', 'sound/ambience/sif/sif1.ogg', 'sound/ambience/ruins/ruins1.ogg')
base_turf = /turf/simulated/floor/snow/snow2
/area/awaymission/snow_outpost/outside
icon_state = "away1"
requires_power = 1
always_unpowered = 1
dynamic_lighting = 1
power_light = 0
power_equip = 0
power_environ = 0
mobcountmax = 100
floracountmax = 7000
valid_mobs = list(/mob/living/simple_mob/animal/sif/savik, /mob/living/simple_mob/animal/wolf, /mob/living/simple_mob/animal/sif/shantak,
/mob/living/simple_mob/animal/sif/kururak, /mob/living/simple_mob/animal/sif/frostfly)
valid_flora = list(/obj/structure/flora/tree/pine, /obj/structure/flora/tree/pine, /obj/structure/flora/tree/pine,
/obj/structure/flora/tree/dead, /obj/structure/flora/grass/brown, /obj/structure/flora/grass/green,
/obj/structure/flora/grass/both, /obj/structure/flora/bush, /obj/structure/flora/ausbushes/grassybush,
/obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/pointybush,
/obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/fullgrass)
/area/awaymission/snow_outpost/restricted // No mob spawns!
icon_state = "red"
mobcountmax = 1 // Hacky fix.
floracountmax = 100
valid_mobs = list(/obj/structure/flora/tree/pine) // Hacky fix.
valid_flora = list(/obj/structure/flora/tree/pine, /obj/structure/flora/tree/pine, /obj/structure/flora/tree/pine,
/obj/structure/flora/tree/dead, /obj/structure/flora/grass/brown, /obj/structure/flora/grass/green,
/obj/structure/flora/grass/both, /obj/structure/flora/bush, /obj/structure/flora/ausbushes/grassybush,
/obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/pointybush,
/obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/fullgrass)
/area/awaymission/snow_outpost/outpost
icon_state = "away"
ambience = list('sound/ambience/chapel/chapel1.ogg', 'sound/ambience/ruins/ruins5.ogg', 'sound/ambience/ruins/ruins1.ogg') // Rykka was here. <3
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -65,7 +65,7 @@
//guard = 20
mobs_to_pick_from = list(
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/basic = 3,
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion = 3,
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion = 1,
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser = 3,
/mob/living/simple_mob/vore/aggressive/corrupthound = 1
)
+2 -2
View File
@@ -119,9 +119,9 @@
mobs_to_pick_from = list(
/mob/living/simple_mob/vore/aggressive/frog = 3, //Frogs are 3x more likely to spawn than,
/mob/living/simple_mob/vore/aggressive/deathclaw = 1, //these deathclaws are, with these values,
/mob/living/simple_mob/animal/giant_spider = 3,
/mob/living/simple_mob/animal/giant_spider = 2,
/mob/living/simple_mob/vore/aggressive/giant_snake = 1,
/mob/living/simple_mob/animal/giant_spider/ion = 2
/mob/living/simple_mob/animal/giant_spider/webslinger = 1
)
// These are step-teleporters, for map edge transitions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -5627,7 +5627,7 @@
/area/gateway/prep_room)
"akc" = (
/obj/machinery/door/blast/shutters{
dir = 2;
dir = 8;
id = "PubPrep";
layer = 3.3;
name = "Public Access Shutter"
@@ -5817,7 +5817,7 @@
icon_state = "4-8"
},
/obj/machinery/door/blast/shutters{
dir = 2;
dir = 8;
id = "PubPrep";
layer = 3.3;
name = "Public Access Shutter"
+73 -34
View File
@@ -4240,18 +4240,20 @@
/turf/simulated/floor/tiled/techfloor,
/area/ai_upload)
"go" = (
/obj/effect/floor_decal/borderfloor,
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 1
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/borderfloor/corner,
/obj/effect/floor_decal/corner/lightgrey/bordercorner,
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 8
},
/obj/effect/floor_decal/corner/paleblue/border,
/obj/effect/floor_decal/borderfloor/corner2{
dir = 9
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2";
pixel_y = 0
},
/obj/effect/floor_decal/corner/paleblue/bordercorner2{
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 9
},
/turf/simulated/floor/tiled,
@@ -4336,21 +4338,20 @@
/turf/simulated/open,
/area/engineering/locker_room)
"gx" = (
/obj/effect/floor_decal/borderfloor,
/obj/effect/floor_decal/corner/paleblue/border,
/obj/effect/floor_decal/borderfloor/corner2{
dir = 9
},
/obj/effect/floor_decal/corner/paleblue/bordercorner2{
dir = 9
},
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 8
},
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 1
},
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 8
},
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 5
},
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 8
},
/turf/simulated/floor/tiled,
/area/hallway/station/starboard)
"gy" = (
@@ -9785,18 +9786,14 @@
/turf/simulated/floor/tiled,
/area/hallway/station/starboard)
"op" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/borderfloor/corner,
/obj/effect/floor_decal/corner/lightgrey/bordercorner,
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 8
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 5
},
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2";
pixel_y = 0
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 8
},
/turf/simulated/floor/tiled,
/area/hallway/station/starboard)
@@ -12914,6 +12911,11 @@
/obj/item/weapon/autopsy_scanner,
/obj/item/weapon/surgical/cautery,
/obj/effect/floor_decal/techfloor,
/obj/machinery/light_switch{
dir = 1;
pixel_x = 0;
pixel_y = -26
},
/turf/simulated/floor/tiled/techfloor,
/area/medical/morgue)
"th" = (
@@ -13434,6 +13436,9 @@
/obj/effect/floor_decal/corner/paleblue/border{
dir = 9
},
/obj/machinery/computer/guestpass{
pixel_y = 32
},
/turf/simulated/floor/tiled/white,
/area/medical/resleeving)
"tV" = (
@@ -13724,6 +13729,7 @@
/obj/structure/table/standard,
/obj/random/tetheraid,
/obj/random/tetheraid,
/obj/item/weapon/storage/secure/briefcase/ml3m_pack_med,
/obj/item/device/radio/intercom/department/medbay{
dir = 1;
pixel_y = 24
@@ -14963,6 +14969,11 @@
pixel_y = -26;
range = 12
},
/obj/machinery/light_switch{
dir = 1;
pixel_x = -8;
pixel_y = -26
},
/turf/simulated/floor/carpet/blue,
/area/medical/psych)
"wx" = (
@@ -15048,6 +15059,11 @@
/obj/effect/floor_decal/corner/paleblue/bordercorner2{
dir = 8
},
/obj/machinery/light_switch{
dir = 1;
pixel_x = 0;
pixel_y = -26
},
/turf/simulated/floor/tiled/white,
/area/medical/resleeving)
"wF" = (
@@ -16206,7 +16222,6 @@
/area/medical/surgery2)
"yx" = (
/obj/structure/table/standard,
/obj/item/stack/nanopaste,
/obj/effect/floor_decal/borderfloorwhite{
dir = 6
},
@@ -16922,6 +16937,11 @@
/obj/effect/floor_decal/corner/pink/bordercorner2{
dir = 5
},
/obj/machinery/light_switch{
dir = 8;
pixel_x = 26;
pixel_y = 8
},
/turf/simulated/floor/tiled/white,
/area/medical/patient_a)
"zF" = (
@@ -17586,6 +17606,11 @@
/obj/effect/floor_decal/corner/pink/bordercorner2{
dir = 5
},
/obj/machinery/light_switch{
dir = 8;
pixel_x = 26;
pixel_y = 8
},
/turf/simulated/floor/tiled/white,
/area/medical/patient_b)
"AI" = (
@@ -18370,6 +18395,11 @@
/obj/effect/floor_decal/corner/pink/bordercorner2{
dir = 5
},
/obj/machinery/light_switch{
dir = 8;
pixel_x = 26;
pixel_y = 8
},
/turf/simulated/floor/tiled/white,
/area/medical/patient_c)
"BR" = (
@@ -19243,6 +19273,11 @@
/obj/effect/floor_decal/corner/paleblue/border{
dir = 8
},
/obj/machinery/light_switch{
dir = 4;
pixel_x = -28;
pixel_y = 0
},
/turf/simulated/floor/tiled/white,
/area/medical/ward)
"Dg" = (
@@ -20190,6 +20225,11 @@
/obj/effect/floor_decal/corner/pink/border{
dir = 10
},
/obj/machinery/light_switch{
dir = 1;
pixel_x = 0;
pixel_y = -24
},
/turf/simulated/floor/tiled/white,
/area/medical/exam_room)
"EK" = (
@@ -20474,7 +20514,6 @@
/area/maintenance/station/sec_lower)
"Fg" = (
/obj/structure/table/standard,
/obj/item/stack/nanopaste,
/obj/effect/floor_decal/borderfloorwhite{
dir = 5
},
@@ -32697,7 +32736,7 @@ pk
pT
qF
fG
go
gx
pr
qN
rw
@@ -32839,7 +32878,7 @@ pl
lK
qG
fH
gx
op
ps
qO
rx
@@ -32975,7 +33014,7 @@ lJ
lJ
lJ
nL
op
go
oV
pm
pU
+77 -58
View File
@@ -3669,10 +3669,15 @@
/area/hallway/station/upper)
"fR" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled,
/obj/machinery/door/airlock/multi_tile/glass{
name = "Security Lobby"
},
/obj/effect/floor_decal/steeldecal/steel_decals_central1{
dir = 8
},
/turf/simulated/floor/tiled/monofloor{
dir = 8
},
/area/security/lobby)
"fS" = (
/obj/effect/floor_decal/borderfloor{
@@ -5904,26 +5909,24 @@
/turf/simulated/floor/tiled,
/area/security/hallwayaux)
"jm" = (
/obj/effect/floor_decal/borderfloor{
/obj/effect/floor_decal/corner/lightgrey{
dir = 9
},
/obj/effect/floor_decal/corner/lightgrey{
dir = 6
},
/obj/structure/sign/poster{
pixel_x = -32
},
/obj/effect/floor_decal/steeldecal/steel_decals6{
dir = 1
},
/obj/effect/floor_decal/steeldecal/steel_decals7,
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 4
},
/obj/effect/floor_decal/corner/red/border{
dir = 1
},
/obj/effect/floor_decal/borderfloor/corner2{
dir = 4
/obj/effect/floor_decal/steeldecal/steel_decals6{
dir = 8
},
/obj/item/device/radio/intercom{
dir = 1;
pixel_y = 24;
req_access = list()
},
/obj/effect/floor_decal/corner/red/bordercorner2{
dir = 4
dir = 8;
pixel_x = -24
},
/turf/simulated/floor/tiled,
/area/hallway/station/upper)
@@ -15927,20 +15930,24 @@
/turf/simulated/wall,
/area/maintenance/station/elevator)
"yA" = (
/obj/effect/floor_decal/corner/lightgrey{
dir = 9
},
/obj/effect/floor_decal/corner/lightgrey{
dir = 6
},
/obj/structure/sign/poster{
pixel_x = -32
},
/obj/effect/floor_decal/steeldecal/steel_decals6{
/obj/effect/floor_decal/borderfloor{
dir = 1
},
/obj/effect/floor_decal/steeldecal/steel_decals6{
dir = 8
/obj/effect/floor_decal/steeldecal/steel_decals7,
/obj/effect/floor_decal/steeldecal/steel_decals7{
dir = 4
},
/obj/effect/floor_decal/corner/red/border{
dir = 1
},
/obj/effect/floor_decal/borderfloor/corner2{
dir = 4
},
/obj/effect/floor_decal/corner/red/bordercorner2{
dir = 4
},
/obj/machinery/computer/guestpass{
pixel_y = 30
},
/turf/simulated/floor/tiled,
/area/hallway/station/upper)
@@ -16099,6 +16106,18 @@
/area/medical/reception)
"yL" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/disposalpipe/segment,
/obj/effect/floor_decal/steeldecal/steel_decals_central1{
dir = 4
},
/turf/simulated/floor/tiled/monofloor{
dir = 4
},
/area/security/lobby)
"yM" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/door/airlock/multi_tile/glass{
name = "Medbay Lobby"
},
@@ -16110,25 +16129,11 @@
name = "Medbay Emergency Lockdown Shutters";
opacity = 0
},
/turf/simulated/floor/tiled/monofloor{
/obj/effect/floor_decal/steeldecal/steel_decals_central1{
dir = 8
},
/area/medical/reception)
"yM" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/door/blast/shutters{
density = 0;
dir = 2;
icon_state = "shutter0";
id = "medbayquar";
name = "Medbay Emergency Lockdown Shutters";
opacity = 0
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/tiled/monofloor{
dir = 4
dir = 8
},
/area/medical/reception)
"yN" = (
@@ -16526,11 +16531,24 @@
/area/security/lobby)
"zr" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/door/airlock/multi_tile/glass{
name = "Security Lobby"
/obj/machinery/door/blast/shutters{
density = 0;
dir = 2;
icon_state = "shutter0";
id = "medbayquar";
name = "Medbay Emergency Lockdown Shutters";
opacity = 0
},
/turf/simulated/floor/tiled,
/area/security/lobby)
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/disposalpipe/segment,
/obj/effect/floor_decal/steeldecal/steel_decals_central1{
dir = 4
},
/turf/simulated/floor/tiled/monofloor{
dir = 4
},
/area/medical/reception)
"zs" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/door/airlock/medical{
@@ -23600,6 +23618,7 @@
/obj/item/clothing/glasses/hud/health,
/obj/item/device/defib_kit/compact/combat/loaded,
/obj/item/weapon/cmo_disk_holder,
/obj/item/weapon/storage/secure/briefcase/ml3m_pack_cmo,
/obj/effect/floor_decal/borderfloorwhite{
dir = 6
},
@@ -37313,7 +37332,7 @@ wp
wn
xL
yw
zr
fR
hZ
mX
pS
@@ -37455,7 +37474,7 @@ wq
wV
xM
yx
fR
yL
jf
nc
qQ
@@ -37598,10 +37617,10 @@ uP
uP
uP
zt
jm
yA
nf
Ch
yL
yM
AC
Cl
Cl
@@ -37743,7 +37762,7 @@ yz
jr
ng
rq
yM
zr
AD
Cm
Cm
@@ -38164,7 +38183,7 @@ vO
wu
wX
sp
yA
jm
zv
Aq
Aw
File diff suppressed because it is too large Load Diff
+9 -17
View File
@@ -375,13 +375,13 @@
/area/centcom/specops)
"aH" = (
/obj/structure/closet/crate/medical,
/obj/item/stack/nanopaste,
/obj/item/stack/nanopaste/advanced,
/obj/item/weapon/tank/anesthetic,
/obj/item/clothing/mask/breath/medical,
/obj/item/clothing/mask/surgical,
/obj/item/clothing/mask/surgical,
/obj/item/stack/nanopaste,
/obj/item/stack/nanopaste,
/obj/item/stack/nanopaste/advanced,
/obj/item/stack/nanopaste/advanced,
/obj/item/weapon/storage/firstaid/surgery,
/turf/unsimulated/floor{
icon_state = "vault";
@@ -1098,7 +1098,8 @@
/area/centcom/specops)
"bP" = (
/obj/machinery/door/blast/regular{
name = "When Everything else fails."
name = "When Everything else fails.";
dir = 4
},
/turf/unsimulated/floor{
icon_state = "dark"
@@ -1159,16 +1160,7 @@
/area/centcom/specops)
"bW" = (
/obj/structure/table/reinforced,
/obj/item/ammo_casing/nsfw_batt/combat/stun,
/obj/item/ammo_casing/nsfw_batt/combat/stun,
/obj/item/ammo_casing/nsfw_batt/combat/stun,
/obj/item/ammo_casing/nsfw_batt/medical/brute2,
/obj/item/ammo_casing/nsfw_batt/medical/burn2,
/obj/item/ammo_casing/nsfw_batt/medical/stabilize2,
/obj/item/ammo_casing/nsfw_batt/combat/net,
/obj/item/ammo_casing/nsfw_batt/combat/net,
/obj/item/ammo_magazine/nsfw_mag,
/obj/item/weapon/gun/projectile/nsfw,
/obj/item/weapon/storage/secure/briefcase/nsfw_pack_hybrid,
/turf/unsimulated/floor/steel{
icon = 'icons/turf/floors_vr.dmi';
icon_state = "wood"
@@ -7453,7 +7445,7 @@
/obj/effect/floor_decal/corner/paleblue/border{
dir = 1
},
/obj/item/stack/nanopaste,
/obj/item/stack/nanopaste/advanced,
/turf/unsimulated/floor/steel{
icon_state = "white"
},
@@ -16979,8 +16971,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"
},
-1
View File
@@ -9,7 +9,6 @@
#include "tether_shuttle_defs.dm"
#include "tether_shuttles.dm"
#include "tether_telecomms.dm"
#include "tether_virgo3b.dm"
#include "tether-01-surface1.dmm"
#include "tether-02-surface2.dmm"
+65 -2
View File
@@ -170,6 +170,8 @@
name = "\improper Civilian West Substation"
/area/maintenance/substation/exploration
name = "\improper Exploration Substation"
/area/maintenance/tether_midpoint
name = "\improper Tether Midpoint Maint"
/area/tether/surfacebase/medical
@@ -258,7 +260,7 @@
/area/maintenance/lower/trash_pit
name = "\improper Trash Pit"
/area/maintenance/lower/solars
name = "\improper Solars maintenanceance"
name = "\improper Solars Maintenance"
/area/maintenance/lower/mining_eva
name = "\improper Mining EVA Maintenance"
/area/maintenance/lower/public_garden_maintenence
@@ -290,6 +292,9 @@
/area/rnd/chemistry_lab
name = "\improper Research Chemistry Lab"
icon_state = "research"
/area/rnd/miscellaneous_lab
name = "\improper Research Miscellaneous Lab"
icon_state = "research"
/area/rnd/staircase/secondfloor
name = "\improper Research Staircase Second Floor"
icon_state = "research"
@@ -316,6 +321,10 @@
name = "\improper Research Outpost Hallway"
icon_state = "research"
/area/rnd/outpost/breakroom
name = "\improper Research Outpost Breakroom"
icon_state = "research"
/area/rnd/outpost/airlock
name = "\improper Research Outpost Airlock"
icon_state = "green"
@@ -360,6 +369,9 @@
/area/rnd/outpost/anomaly_lab/testing
name = "\improper Anomaly Lab Testing Chamber"
icon_state = "research"
/area/rnd/outpost/anomaly_lab/airlock
name = "\improper Anomaly Lab Testing Chamber Airlock"
icon_state = "research"
/area/rnd/outpost/anomaly_lab/storage
name = "\improper Anomaly Storage"
icon_state = "research"
@@ -367,6 +379,48 @@
name = "\improper Research Outpost Xenoarch Storage"
icon_state = "research"
// Xenobiology Outpost Areas
/area/rnd/outpost/xenobiology/outpost_north_airlock
name = "\improper Xenbiology Northern Airlock"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_south_airlock
name = "\improper Xenbiology Southern Airlock"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_hallway
name = "\improper Xenbiology Access Corridor"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_breakroom
name = "\improper Xenbiology Breakroom"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_office
name = "\improper Xenbiology Main Office"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_autopsy
name = "\improper Xenbiology Alien Autopsy Room"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_decon
name = "\improper Xenbiology Decontamination and Showers"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_first_aid
name = "\improper Xenbiology First Aid"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_slimepens
name = "\improper Xenbiology Slime and Xenos Containment"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_main
name = "\improper Xenbiology Main Outpost"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_storage
name = "\improper Xenbiology Equipment Storage"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_stairs
name = "\improper Xenbiology Stairwell"
icon_state = "research"
/area/rnd/outpost/xenobiology/outpost_substation
name = "\improper Xenbiology SMES Substation"
icon_state = "research"
// Misc
/area/hallway/lower/third_south
name = "\improper Hallway Third Floor South"
@@ -627,6 +681,12 @@
/area/hallway/station/docks
name = "\improper Docks Hallway"
/area/bridge/secondary
name = "\improper Secondary Command Office"
/area/bridge/secondary/meeting_room
name = "\improper Secondary Command Meeting Room"
/area/maintenance/station
icon_state = "fsmaint"
/area/maintenance/station/bridge
@@ -733,6 +793,9 @@
requires_power = FALSE
/area/tether/midpoint
name = "\improper Tether Midpoint"
//////////////////////////////////
/area/antag/antag_base
@@ -914,4 +977,4 @@
excluded |= /area/tether/surfacebase/atrium_three
excluded |= /area/teleporter/departing
excluded |= /area/hallway/station/upper
..()
..()
+12 -24
View File
@@ -1,26 +1,3 @@
//Atmosphere properties
#define VIRGO3B_ONE_ATMOSPHERE 82.4 //kPa
#define VIRGO3B_AVG_TEMP 234 //kelvin
#define VIRGO3B_PER_N2 0.16 //percent
#define VIRGO3B_PER_O2 0.00
#define VIRGO3B_PER_N2O 0.00 //Currently no capacity to 'start' a turf with this. See turf.dm
#define VIRGO3B_PER_CO2 0.12
#define VIRGO3B_PER_PHORON 0.72
//Math only beyond this point
#define VIRGO3B_MOL_PER_TURF (VIRGO3B_ONE_ATMOSPHERE*CELL_VOLUME/(VIRGO3B_AVG_TEMP*R_IDEAL_GAS_EQUATION))
#define VIRGO3B_MOL_N2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_N2)
#define VIRGO3B_MOL_O2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_O2)
#define VIRGO3B_MOL_N2O (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_N2O)
#define VIRGO3B_MOL_CO2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_CO2)
#define VIRGO3B_MOL_PHORON (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_PHORON)
//Turfmakers
#define VIRGO3B_SET_ATMOS nitrogen=VIRGO3B_MOL_N2;oxygen=VIRGO3B_MOL_O2;carbon_dioxide=VIRGO3B_MOL_CO2;phoron=VIRGO3B_MOL_PHORON;temperature=VIRGO3B_AVG_TEMP
#define VIRGO3B_TURF_CREATE(x) x/virgo3b/nitrogen=VIRGO3B_MOL_N2;x/virgo3b/oxygen=VIRGO3B_MOL_O2;x/virgo3b/carbon_dioxide=VIRGO3B_MOL_CO2;x/virgo3b/phoron=VIRGO3B_MOL_PHORON;x/virgo3b/temperature=VIRGO3B_AVG_TEMP;x/virgo3b/outdoors=TRUE;x/virgo3b/update_graphic(list/graphic_add = null, list/graphic_remove = null) return 0
#define VIRGO3B_TURF_CREATE_UN(x) x/virgo3b/nitrogen=VIRGO3B_MOL_N2;x/virgo3b/oxygen=VIRGO3B_MOL_O2;x/virgo3b/carbon_dioxide=VIRGO3B_MOL_CO2;x/virgo3b/phoron=VIRGO3B_MOL_PHORON;x/virgo3b/temperature=VIRGO3B_AVG_TEMP
//Normal map defs
#define Z_LEVEL_SURFACE_LOW 1
#define Z_LEVEL_SURFACE_MID 2
@@ -133,7 +110,8 @@
/area/crew_quarters/sleep/Dorm_1/holo,
/area/crew_quarters/sleep/Dorm_3/holo,
/area/crew_quarters/sleep/Dorm_5/holo,
/area/crew_quarters/sleep/Dorm_7/holo)
/area/crew_quarters/sleep/Dorm_7/holo,
/area/rnd/miscellaneous_lab) //TFF 31/8/19 - exempt new construction site from unit tests
unit_test_exempt_from_atmos = list(
/area/engineering/atmos/intake, // Outside,
/area/rnd/external, // Outside,
@@ -179,6 +157,16 @@
return 1
/datum/planet/virgo3b
expected_z_levels = list(
Z_LEVEL_SURFACE_LOW,
Z_LEVEL_SURFACE_MID,
Z_LEVEL_SURFACE_HIGH,
Z_LEVEL_SURFACE_MINE,
Z_LEVEL_SOLARS,
Z_LEVEL_PLAINS
)
// Short range computers see only the six main levels, others can see the surrounding surface levels.
/datum/map/tether/get_map_levels(var/srcz, var/long_range = TRUE)
if (long_range && (srcz in map_levels))
-6
View File
@@ -122,12 +122,6 @@ VIRGO3B_TURF_CREATE(/turf/simulated/mineral/floor)
update_icon()
//Unsimulated
/turf/unsimulated/wall/planetary/virgo3b
name = "facility wall"
desc = "An eight-meter tall carbyne wall. For when the wildlife on your planet is mostly militant megacorps."
alpha = 0xFF
VIRGO3B_SET_ATMOS
/turf/unsimulated/mineral/virgo3b
blocks_air = TRUE
+10 -1
View File
@@ -1061,6 +1061,7 @@
#include "code\game\objects\items\stacks\medical.dm"
#include "code\game\objects\items\stacks\medical_vr.dm"
#include "code\game\objects\items\stacks\nanopaste.dm"
#include "code\game\objects\items\stacks\nanopaste_vr.dm"
#include "code\game\objects\items\stacks\rods.dm"
#include "code\game\objects\items\stacks\stack.dm"
#include "code\game\objects\items\stacks\telecrystal.dm"
@@ -1382,6 +1383,7 @@
#include "code\game\turfs\unsimulated\beach.dm"
#include "code\game\turfs\unsimulated\floor.dm"
#include "code\game\turfs\unsimulated\planetary.dm"
#include "code\game\turfs\unsimulated\planetary_vr.dm"
#include "code\game\turfs\unsimulated\shuttle.dm"
#include "code\game\turfs\unsimulated\sky_vr.dm"
#include "code\game\turfs\unsimulated\walls.dm"
@@ -2394,6 +2396,7 @@
#include "code\modules\mob\living\silicon\robot\drone\drone_items.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_manufacturer.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_say.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_vr.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\event.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\event_vr.dm"
#include "code\modules\mob\living\silicon\robot\robot_modules\station.dm"
@@ -2489,6 +2492,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\horror\Willy.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\clown.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\russian.dm"
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs.dm"
@@ -2762,6 +2766,7 @@
#include "code\modules\Phorochemistry\phorotelepad.dm"
#include "code\modules\planet\planet.dm"
#include "code\modules\planet\time.dm"
#include "code\modules\planet\virgo3b_vr.dm"
#include "code\modules\planet\weather.dm"
#include "code\modules\power\apc.dm"
#include "code\modules\power\apc_vr.dm"
@@ -3209,10 +3214,14 @@
#include "code\modules\vore\fluffstuff\guns\crestrose.dm"
#include "code\modules\vore\fluffstuff\guns\dominator.dm"
#include "code\modules\vore\fluffstuff\guns\gunsword.dm"
#include "code\modules\vore\fluffstuff\guns\nsfw.dm"
#include "code\modules\vore\fluffstuff\guns\protector.dm"
#include "code\modules\vore\fluffstuff\guns\pummeler.dm"
#include "code\modules\vore\fluffstuff\guns\sickshot.dm"
#include "code\modules\vore\fluffstuff\guns\cell_loaded\cell_loaded.dm"
#include "code\modules\vore\fluffstuff\guns\cell_loaded\ml3m.dm"
#include "code\modules\vore\fluffstuff\guns\cell_loaded\ml3m_cells.dm"
#include "code\modules\vore\fluffstuff\guns\cell_loaded\nsfw.dm"
#include "code\modules\vore\fluffstuff\guns\cell_loaded\nsfw_cells.dm"
#include "code\modules\vore\persist\persist_vr.dm"
#include "code\modules\vore\resizing\grav_pull_vr.dm"
#include "code\modules\vore\resizing\holder_micro_vr.dm"