Merge remote-tracking branch 'VOREStation/master' into nova-shuttle

This commit is contained in:
Unknown
2020-04-19 23:18:05 -04:00
75 changed files with 28617 additions and 52528 deletions
+2
View File
@@ -236,6 +236,8 @@
mymob.internals = new /obj/screen()
mymob.internals.icon = ui_style
mymob.internals.icon_state = "internal0"
if(istype(target.internal, /obj/item/weapon/tank)) //Internals on already? Iight, prove it
mymob.internals.icon_state = "internal1"
mymob.internals.name = "internal"
mymob.internals.screen_loc = ui_internal
hud_elements |= mymob.internals
+4 -4
View File
@@ -169,13 +169,13 @@
/obj/item/clothing/shoes/magboots = 2,
/obj/item/weapon/tank/oxygen = 2
)
cost = 40
cost = 60
containertype = /obj/structure/closet/crate/secure
containername = "Security Crowd Control voidsuit crate"
access = access_armory
/datum/supply_pack/voidsuits/security/alt
name = "Security EVA Riot voidsuits"
name = "Security EVA voidsuits"
contains = list(
/obj/item/clothing/suit/space/void/security/alt = 2,
/obj/item/clothing/head/helmet/space/void/security/alt = 2,
@@ -183,9 +183,9 @@
/obj/item/clothing/shoes/magboots = 2,
/obj/item/weapon/tank/oxygen = 2
)
cost = 50
cost = 60
containertype = /obj/structure/closet/crate/secure
containername = "Security EVA Riot voidsuit crate"
containername = "Security EVA voidsuit crate"
access = access_armory
/datum/supply_pack/voidsuits/supply
+1 -1
View File
@@ -1,6 +1,6 @@
/atom/movable
layer = OBJ_LAYER
appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER //VOREStation Edit
appearance_flags = TILE_BOUND|PIXEL_SCALE
var/last_move = null
var/anchored = 0
// var/elevation = 2 - not used anywhere
+6
View File
@@ -634,6 +634,9 @@
/obj/item/clothing/under/dress/sailordress = 5,
/obj/item/clothing/under/dress/sari = 5,
/obj/item/clothing/under/dress/sari/green = 5,
/obj/item/clothing/under/dress/qipao = 5,
/obj/item/clothing/under/dress/qipao/red = 5,
/obj/item/clothing/under/dress/qipao/white = 5,
/obj/item/clothing/under/shorts/red = 5,
/obj/item/clothing/under/shorts/green = 5,
/obj/item/clothing/under/shorts/blue = 5,
@@ -801,6 +804,9 @@
/obj/item/clothing/under/dress/sailordress = 100,
/obj/item/clothing/under/dress/sari = 100,
/obj/item/clothing/under/dress/sari/green = 100,
/obj/item/clothing/under/dress/qipao = 100,
/obj/item/clothing/under/dress/qipao/red = 100,
/obj/item/clothing/under/dress/qipao/white = 100,
/obj/item/clothing/under/shorts/red = 100,
/obj/item/clothing/under/shorts/green = 100,
/obj/item/clothing/under/shorts/blue = 100,
+2 -1
View File
@@ -4,6 +4,7 @@
robot_module_types += "Janihound"
robot_module_types += "Sci-borg"
robot_module_types += "Pupdozer"
robot_module_types += "KMine"
return 1
var/list/shell_module_types = list(
@@ -50,4 +51,4 @@ var/global/list/acceptable_fruit_types= list(
"vanilla",
"watermelon",
"wheat",
"whitebeet")
"whitebeet")
@@ -179,3 +179,18 @@ Swimsuits
display_name = "sleek modern coat, detective"
path = /obj/item/clothing/under/detective_alt
allowed_roles = list("Head of Security", "Detective")
/*
Qipao
*/
/datum/gear/uniform/qipao
display_name = "qipao, black"
path = /obj/item/clothing/under/dress/qipao
/datum/gear/uniform/qipao_red
display_name = "qipao, red"
path = /obj/item/clothing/under/dress/qipao/red
/datum/gear/uniform/qipao_white
display_name = "qipao, white"
path = /obj/item/clothing/under/dress/qipao/white
+14
View File
@@ -5,3 +5,17 @@
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/mob/head_vr.dmi'
flags_inv = HIDEEARS|BLOCKHAIR
/obj/item/clothing/head/crown
name = "crown"
desc = "How regal!"
icon_state = "crown"
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/mob/head_vr.dmi'
/obj/item/clothing/head/fancy_crown
name = "fancy crown"
desc = "How extraordinarily regal!"
icon_state = "fancycrown"
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/mob/head_vr.dmi'
@@ -4,7 +4,7 @@
icon_state = "griffinboots"
item_state = "griffinboots"
icon = 'icons/obj/clothing/shoes_vr.dmi'
icon_override = 'icons/mob/feet_vr.dmi' // This appends "_r" "_l" to icon state
icon_override = 'icons/mob/feet_vr.dmi'
/obj/item/clothing/shoes/bhop
name = "jump boots"
@@ -12,7 +12,7 @@
icon_state = "jetboots"
item_state = "jetboots"
icon = 'icons/obj/clothing/shoes_vr.dmi'
icon_override = 'icons/mob/feet_vr.dmi' // This appends "_r" "_l" to icon state
icon_override = 'icons/mob/feet_vr.dmi'
// resistance_flags = FIRE_PROOF
action_button_name = "Activate Jump Boots"
permeability_coefficient = 0.05
@@ -40,3 +40,22 @@
user.visible_message("<span class='warning'>[user] dashes forward into the air!</span>")
user.throw_at(target, jumpdistance, jumpspeed)
recharging_time = world.time + recharging_rate
/obj/item/clothing/shoes/magboots/adv
name = "advanced magboots"
desc = "Advanced magnetic boots for a trained user. They have a lower magnetic force, allowing the user to move more quickly."
icon = 'icons/obj/clothing/shoes_vr.dmi'
icon_override = 'icons/mob/feet_vr.dmi'
icon_state = "advmag0"
item_flags = PHORONGUARD
item_state_slots = list(slot_r_hand_str = "magboots", slot_l_hand_str = "magboots")
icon_base = "advmag"
/obj/item/clothing/shoes/magboots/adv/set_slowdown()
if(magpulse)
slowdown = shoes ? max(SHOES_SLOWDOWN, shoes.slowdown) : SHOES_SLOWDOWN //So you can't put on magboots to make you walk faster.
else if(shoes)
slowdown = shoes.slowdown
else
slowdown = SHOES_SLOWDOWN
@@ -43,3 +43,13 @@
/obj/item/clothing/suit/space/rig
species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_FENNEC, SPECIES_XENOHYBRID)
/obj/item/clothing/shoes/magboots/rig/ce
name = "advanced boots"
/obj/item/clothing/shoes/magboots/rig/ce/set_slowdown()
if(magpulse)
slowdown = shoes ? max(SHOES_SLOWDOWN, shoes.slowdown) : SHOES_SLOWDOWN //So you can't put on magboots to make you walk faster.
else if(shoes)
slowdown = shoes.slowdown
else
slowdown = SHOES_SLOWDOWN
@@ -162,6 +162,7 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/ce
glove_type = /obj/item/clothing/gloves/gauntlets/rig/ce
boot_type = /obj/item/clothing/shoes/magboots/rig/ce //VOREStation Add
allowed = list(
/obj/item/device/flashlight,
@@ -193,27 +193,32 @@
/obj/item/clothing/head/helmet/space/void/security/riot
name = "crowd control voidsuit helmet"
desc = "A heavy-set and ominous looking crowd control suit helmet. Fitted with state of the art shock absorbing materials, to disperse blunt force trauma."
icon_state = "rig0-sec_riot"
armor = list(melee = 70, bullet = 15, laser = 15, energy = 5, bomb = 40, bio = 100, rad = 10)
item_state_slots = list(slot_r_hand_str = "sec_helm_riot", slot_l_hand_str = "sec_helm_riot")
/obj/item/clothing/suit/space/void/security/riot
name = "crowd control voidsuit"
desc = "A heavy-set and ominous looking crowd control suit. Fitted with state of the art shock absorbing materials, to disperse blunt force trauma."
icon_state = "rig-sec_riot"
armor = list(melee = 70, bullet = 15, laser = 15, energy = 5, bomb = 40, bio = 100, rad = 10)
item_state_slots = list(slot_r_hand_str = "sec_voidsuit_riot", slot_l_hand_str = "sec_voidsuit_riot")
//Security Surplus Voidsuit
/obj/item/clothing/head/helmet/space/void/security/alt
name = "riot security voidsuit helmet"
desc = "A somewhat tacky voidsuit helmet, a fact mitigated by heavy armor plating."
name = "security EVA voidsuit helmet"
desc = "A grey-black voidsuit helmet with red highlights. A little tacky, but it offers better protection against modern firearms and radiation than standard-issue security voidsuit helmets."
armor = list(melee = 30, bullet = 40, laser = 40, energy = 25, bomb = 60, bio = 100, rad = 50)
icon_state = "rig0-secalt"
armor = list(melee = 70, bullet = 20, laser = 30, energy = 5, bomb = 35, bio = 100, rad = 10)
item_state_slots = list(slot_r_hand_str = "syndicate-helm-black", slot_l_hand_str = "syndicate-helm-black")
/obj/item/clothing/suit/space/void/security/alt
name = "security EVA voidsuit"
desc = "A grey-black voidsuit with red highlights. A little tacky, but it offers better protection against modern firearms and radiation than standard-issue security voidsuits."
armor = list(melee = 30, bullet = 40, laser = 40, energy = 25, bomb = 60, bio = 100, rad = 50)
icon_state = "rig-secalt"
name = "riot security voidsuit"
desc = "A heavily armored voidsuit, designed to intimidate people who find black intimidating. Surprisingly slimming."
armor = list(melee = 70, bullet = 20, laser = 30, energy = 5, bomb = 35, bio = 100, rad = 10)
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)
item_state_slots = list(slot_r_hand_str = "sec_voidsuitTG", slot_l_hand_str = "sec_voidsuitTG")
//Atmospherics
/obj/item/clothing/head/helmet/space/void/atmos
@@ -64,3 +64,72 @@
// This variable is normally used to set the icon_override when the suit is refitted,
// however the species spritesheet now means we no longer need that anyway!
sprite_sheets_refit = list()
/obj/item/clothing/head/helmet/space/void/heck
name = "\improper H.E.C.K. helmet"
desc = "Hostile Environiment Cross-Kinetic Helmet: A helmet designed to withstand the wide variety of hazards from \[REDACTED\]. It wasn't enough for its last owner."
icon_state = "hostile_env"
item_state = "hostile_env"
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/mob/head_vr.dmi'
armor = list(melee = 60, bullet = 35, laser = 35, energy = 15, bomb = 55, bio = 100, rad = 20)
/obj/item/clothing/head/helmet/space/void/heck/Initialize()
. = ..()
var/mutable_appearance/glass_overlay = mutable_appearance(icon, "hostile_env_glass")
glass_overlay.appearance_flags = RESET_COLOR
add_overlay(glass_overlay)
/obj/item/clothing/head/helmet/space/void/heck/apply_accessories(var/image/standing)
. = ..()
var/mutable_appearance/glass_overlay = mutable_appearance(icon_override, "hostile_env_glass")
glass_overlay.appearance_flags = KEEP_APART|RESET_COLOR
standing.add_overlay(glass_overlay)
return standing
/obj/item/clothing/suit/space/void/heck
name = "\improper H.E.C.K. suit"
desc = "Hostile Environment Cross-Kinetic Suit: A suit designed to withstand the wide variety of hazards from \[REDACTED\]. It wasn't enough for its last owner."
icon_state = "hostile_env"
item_state = "hostile_env"
icon = 'icons/obj/clothing/suits_vr.dmi'
icon_override = 'icons/mob/suit_vr.dmi'
slowdown = 1.5
armor = list(melee = 60, bullet = 35, laser = 35, energy = 15, bomb = 55, bio = 100, rad = 20)
/obj/item/clothing/head/helmet/space/void/syndicate_contract
name = "syndicate contract helmet"
desc = "A free helmet, gifted you by your new not-quite-corporate master!"
icon_state = "syndicate-contract"
item_state = "syndicate-contract"
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/mob/head_vr.dmi'
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
siemens_coefficient = 0.6
camera_networks = list(NETWORK_MERCENARY)
/obj/item/clothing/suit/space/void/syndicate_contract
name = "syndicate contract suit"
desc = "A free suit, gifted you by your new not-quite-corporate master!"
icon_state = "syndicate-contract"
item_state = "syndicate-contract"
icon = 'icons/obj/clothing/suits_vr.dmi'
icon_override = 'icons/mob/suit_vr.dmi'
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
siemens_coefficient = 0.6
/obj/item/clothing/head/helmet/space/void/chrono
name = "chrono-helmet"
desc = "From out of space and time, this helmet will protect you while you perform your duties."
icon_state = "chronohelmet"
item_state = "chronohelmet"
icon = 'icons/obj/clothing/hats_vr.dmi'
icon_override = 'icons/mob/head_vr.dmi'
/obj/item/clothing/suit/space/void/chrono
name = "chrono-suit"
desc = "From out of space and time, this helmet will protect you while you perform your duties."
icon_state = "chronosuit"
item_state = "chronosuit"
icon = 'icons/obj/clothing/suits_vr.dmi'
icon_override = 'icons/mob/suit_vr.dmi'
+15
View File
@@ -1,3 +1,18 @@
/obj/item/clothing/head/bomb_hood/security
icon_state = "bombsuitsec"
body_parts_covered = HEAD
/obj/item/clothing/suit/storage/toggle/paramedic
name = "paramedic vest"
desc = "A vest that protects against minor chemical spills."
icon = 'icons/obj/clothing/suits_vr.dmi'
icon_override = 'icons/mob/suit_vr.dmi'
icon_state = "paramedic-vest"
item_state = "paramedic-vest"
item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat")
blood_overlay_type = "coat"
body_parts_covered = UPPER_TORSO
flags_inv = HIDEHOLSTER
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
index = 1
@@ -108,4 +108,21 @@
//Same as Nanotrasen Security Uniforms
/obj/item/clothing/under/ert
armor = list(melee = 5, bullet = 10, laser = 10, energy = 5, bomb = 5, bio = 0, rad = 0)
armor = list(melee = 5, bullet = 10, laser = 10, energy = 5, bomb = 5, bio = 0, rad = 0)
/obj/item/clothing/under/dress/qipao
name = "qipao"
icon = 'icons/obj/clothing/uniforms_vr.dmi'
icon_override = 'icons/mob/uniform_vr.dmi'
icon_state = "qipao"
item_state = "qipao"
/obj/item/clothing/under/dress/qipao/white
name = "white qipao"
icon_state = "qipao_white"
item_state = "qipao_white"
/obj/item/clothing/under/dress/qipao/red
name = "red qipao"
icon_state = "qipao_red"
item_state = "qipao_red"
@@ -1,6 +1,6 @@
//Updates the mob's health from organs and mob damage variables
/mob/living/carbon/human/updatehealth()
var/huskmodifier = 1.5 // With 1.5, you need 250 burn instead of 200 to husk a human.
var/huskmodifier = 2.5 //VOREStation Edit // With 1.5, you need 250 burn instead of 200 to husk a human.
if(status_flags & GODMODE)
health = getMaxHealth()
+13 -4
View File
@@ -4,9 +4,9 @@
#define HUMAN_MAX_OXYLOSS 1 //Defines how much oxyloss humans can get per tick. A tile with no air at all (such as space) applies this value, otherwise it's a percentage of it.
#define HUMAN_CRIT_MAX_OXYLOSS ( 2.0 / 6) //The amount of damage you'll get when in critical condition. We want this to be a 5 minute deal = 300s. There are 50HP to get through, so (1/6)*last_tick_duration per second. Breaths however only happen every 4 ticks. last_tick_duration = ~2.0 on average
#define HEAT_DAMAGE_LEVEL_1 5 //Amount of damage applied when your body temperature just passes the 360.15k safety point
#define HEAT_DAMAGE_LEVEL_2 10 //Amount of damage applied when your body temperature passes the 400K point
#define HEAT_DAMAGE_LEVEL_3 20 //Amount of damage applied when your body temperature passes the 1000K point
#define HEAT_DAMAGE_LEVEL_1 2 //VOREStation Edit //Amount of damage applied when your body temperature just passes the 360.15k safety point
#define HEAT_DAMAGE_LEVEL_2 4 //VOREStation Edit //Amount of damage applied when your body temperature passes the 400K point
#define HEAT_DAMAGE_LEVEL_3 8 //VOREStation Edit //Amount of damage applied when your body temperature passes the 1000K point
#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point
#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point
@@ -22,6 +22,7 @@
#define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point
#define RADIATION_SPEED_COEFFICIENT 0.1
#define HUMAN_COMBUSTION_TEMP 524 //524k is the sustained combustion temperature of human fat
/mob/living/carbon/human
var/oxygen_alert = 0
@@ -1821,7 +1822,15 @@
if(thermal_protection == 1) // Immune.
return
else
bodytemperature += (BODYTEMP_HEATING_MAX + (fire_stacks * 15)) * (1-thermal_protection)
var/fire_temp_add = (BODYTEMP_HEATING_MAX + (fire_stacks * 15)) * (1-thermal_protection)
//This is to prevent humans from heating up indefinitely. A human being on fire (fat burns at 250C) can't magically
// increase your body temperature beyond 250C, but it's possible something else (atmos) has heated us up beyond it,
// so don't worry about the firestacks at that point. Really, we should be cooling the room down, because it has
// to expend energy to heat our body up! But let's not worry about that.
if((bodytemperature + fire_temp_add) > HUMAN_COMBUSTION_TEMP)
return
bodytemperature += fire_temp_add
/mob/living/carbon/human/rejuvenate()
restore_blood()
@@ -4,6 +4,7 @@
/mob/living
var/ooc_notes = null
var/obj/structure/mob_spawner/source_spawner = null
appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER
//custom say verbs
var/custom_say = null
@@ -689,3 +689,10 @@
icon_state = "decompiler"
max_item_count = 20
delivery = TRUE
/obj/item/device/dogborg/sleeper/compactor/supply //Miner borg belly
name = "Supply Satchel"
desc = "A mounted survival unit with fuel processor."
icon_state = "sleeperc"
injection_chems = list("glucose","inaprovaline","tricordrazine")
max_item_count = 1
@@ -43,6 +43,7 @@
robot_modules["Janihound"] = /obj/item/weapon/robot_module/robot/scrubpup
robot_modules["Sci-borg"] = /obj/item/weapon/robot_module/robot/science
robot_modules["Pupdozer"] = /obj/item/weapon/robot_module/robot/engiedog
robot_modules["KMine"] = /obj/item/weapon/robot_module/robot/kmine
return 1
//Just add a new proc with the robot_module type if you wish to run some other vore code
@@ -615,6 +616,56 @@
R.verbs |= /mob/living/proc/shred_limb
R.verbs |= /mob/living/silicon/robot/proc/rest_style
..()
/obj/item/weapon/robot_module/robot/kmine
name = "Supply Hound Module"
sprites = list(
"KMine" = "kmine",
)
channels = list("Supply" = 1)
can_be_pushed = 0
/obj/item/weapon/robot_module/robot/kmine/New(var/mob/living/silicon/robot/R)
src.modules += new /obj/item/borg/sight/material(src)
src.modules += new /obj/item/weapon/tool/wrench/cyborg(src)
src.modules += new /obj/item/weapon/tool/screwdriver/cyborg(src)
src.modules += new /obj/item/weapon/storage/bag/ore(src)
src.modules += new /obj/item/weapon/pickaxe/borgdrill(src)
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
src.modules += new /obj/item/weapon/gripper/miner(src)
src.modules += new /obj/item/weapon/mining_scanner(src)
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
var/datum/matter_synth/water = new /datum/matter_synth(500)
water.name = "Water reserves"
water.recharge_rate = 0
R.water_res = water
synths += water
var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src)
T.water = water
src.modules += T
var/obj/item/device/dogborg/sleeper/B = new /obj/item/device/dogborg/sleeper/compactor/supply(src)
B.water = water
src.modules += B
R.icon = 'icons/mob/widerobot_vr.dmi'
R.hands.icon = 'icons/mob/screen1_robot_vr.dmi'
R.ui_style_vr = TRUE
R.pixel_x = -16
R.old_x = -16
R.default_pixel_x = -16
R.dogborg = TRUE
R.wideborg = TRUE
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
R.verbs |= /mob/living/silicon/robot/proc/robot_mount
R.verbs |= /mob/living/proc/toggle_rider_reins
R.verbs |= /mob/living/proc/shred_limb
R.verbs |= /mob/living/silicon/robot/proc/rest_style
..()
/obj/item/weapon/robot_module/Reset(var/mob/living/silicon/robot/R)
R.pixel_x = initial(pixel_x)
@@ -630,4 +681,4 @@
R.verbs -= /mob/living/proc/toggle_rider_reins
R.verbs -= /mob/living/proc/shred_limb
R.verbs -= /mob/living/silicon/robot/proc/rest_style
..()
..()
+1
View File
@@ -204,6 +204,7 @@
/datum/robolimb/dsi_teshari/New()
species_cannot_use = GLOB.all_species.Copy()
species_cannot_use -= SPECIES_TESHARI
species_cannot_use -= SPECIES_CUSTOM
..()
/obj/item/weapon/disk/limb/dsi_teshari
+103 -16
View File
@@ -36,36 +36,123 @@
var/from_suit = /obj/item/clothing/suit/space/void
var/to_helmet = /obj/item/clothing/head/cardborg
var/to_suit = /obj/item/clothing/suit/cardborg
//conversion costs. refunds all parts by default, but can be tweaked per-kit
var/from_helmet_cost = 1
var/from_suit_cost = 2
var/to_helmet_cost = -1
var/to_suit_cost = -2
var/owner_ckey = null //ckey of the kit owner as a string
var/skip_content_check = FALSE //can we skip the contents check? we generally shouldn't, but this is necessary for rigs/coats with hoods/etc.
var/transfer_contents = FALSE //should we transfer the contents across before deleting? we generally shouldn't, esp. in the case of rigs/coats with hoods/etc. note this does nothing if skip is FALSE.
var/can_repair = FALSE //can we be used to repair damaged voidsuits when converting them?
var/can_revert = TRUE //can we revert items, or is it a one-way trip?
var/delete_on_empty = FALSE //do we self-delete when emptied?
//Conversion proc
/obj/item/device/modkit_conversion/afterattack(obj/O, mob/user as mob)
var/flag
var/cost
var/to_type
if(istype(O,from_helmet))
flag = 1
var/keycheck
if(isturf(O)) //silently fail if you click on a turf. shouldn't work anyway because turfs aren't objects but if I don't do this it spits runtimes.
return
if(istype(O,/obj/item/clothing/suit/space/void/) && !can_repair) //check if we're a voidsuit and if we're allowed to repair
var/obj/item/clothing/suit/space/void/SS = O
if(LAZYLEN(SS.breaches))
to_chat(user, "<span class='warning'>You should probably repair that before you start tinkering with it.</span>")
return
if(O.blood_DNA || O.contaminated) //check if we're bloody or gooey or whatever, so modkits can't be used to hide crimes easily.
to_chat(user, "<span class='warning'>You should probably clean that up before you start tinkering with it.</span>")
return
//we have to check that it's not the original type first, because otherwise it might convert wrong based on pathing; the subtype can still count as the basetype
if(istype(O,to_helmet) && can_revert)
cost = to_helmet_cost
to_type = from_helmet
else if(istype(O,to_suit) && can_revert)
cost = to_suit_cost
to_type = from_suit
else if(!can_revert && (istype(O,to_helmet) || istype (O,to_suit)))
to_chat(user, "<span class='warning'>This kit doesn't seem to have the tools necessary to revert changes to modified items.</span>")
return
else if(istype(O,from_helmet))
cost = from_helmet_cost
to_type = to_helmet
keycheck = TRUE
else if(istype(O,from_suit))
flag = 2
cost = from_suit_cost
to_type = to_suit
keycheck = TRUE
else
return
if(!(parts & flag))
to_chat(user, "<span class='warning'>This kit has no parts for this modification left.</span>")
return
if(istype(O,to_type))
to_chat(user, "<span class='notice'>[O] is already modified.</span>")
return
if(!isturf(O.loc))
to_chat(user, "<span class='warning'>[O] must be safely placed on the ground for modification.</span>")
to_chat(user, "<span class='warning'>You need to put \the [O] on the ground, a table, or other worksurface before modifying it.</span>")
return
if(!skip_content_check && O.contents.len) //check if we're loaded/modified, in the event of gun/suit kits, to avoid purging stuff like ammo, badges, armbands, or suit helmets
to_chat(user, "<span class='warning'>You should probably remove any attached items or loaded ammunition before trying to modify that!</span>")
return
if(cost > parts)
to_chat(user, "<span class='warning'>The kit doesn't have enough parts left to modify that.</span>")
if(can_revert && ((to_helmet_cost || to_suit_cost) < 0))
to_chat(user, "<span class='notice'> You can recover parts by using the kit on an already-modified item.</span>")
return
if(keycheck && owner_ckey) //check if we're supposed to care
if(user.ckey != owner_ckey) //ERROR: UNAUTHORIZED USER
to_chat(user, "<span class='warning'>You probably shouldn't mess with all these strange tools and parts...</span>") //give them a slightly fluffy explanation as to why it didn't work
return
playsound(user.loc, 'sound/items/Screwdriver.ogg', 100, 1)
var/N = new to_type(O.loc)
user.visible_message("<span class='warning'>[user] opens \the [src] and modifies \the [O] into \the [N].</span>","<span class='warning'>You open \the [src] and modify \the [O] into \the [N].</span>")
var/obj/N = new to_type(O.loc)
user.visible_message("<span class='notice'>[user] opens \the [src] and modifies \the [O] into \the [N].</span>","<span class='notice'>You open \the [src] and modify \the [O] into \the [N].</span>")
//crude, but transfer prints and fibers to avoid forensics abuse, same as the bloody/gooey check above
N.fingerprints = O.fingerprints
N.fingerprintshidden = O.fingerprintshidden
N.fingerprintslast = O.fingerprintslast
N.suit_fibers = O.suit_fibers
//transfer logic could technically be made more thorough and handle stuff like helmet/boots/tank vars for suits, but in those cases you should be removing the items first anyway
if(skip_content_check && transfer_contents)
N.contents = O.contents
if(istype(N,/obj/item/weapon/gun/projectile/))
var/obj/item/weapon/gun/projectile/NN = N
var/obj/item/weapon/gun/projectile/OO = O
NN.magazine_type = OO.magazine_type
NN.ammo_magazine = OO.ammo_magazine
if(istype(N,/obj/item/weapon/gun/energy/))
var/obj/item/weapon/gun/energy/NE = N
var/obj/item/weapon/gun/energy/OE = O
NE.cell_type = OE.cell_type
else
if(istype(N,/obj/item/weapon/gun/projectile/))
var/obj/item/weapon/gun/projectile/NM = N
NM.contents = list()
NM.magazine_type = null
NM.ammo_magazine = null
if(istype(N,/obj/item/weapon/gun/energy/))
var/obj/item/weapon/gun/energy/NO = N
NO.contents = list()
NO.cell_type = null
qdel(O)
parts &= ~flag
if(!parts)
parts -= cost
if(!parts && delete_on_empty)
qdel(src)
//DEBUG ITEM
/obj/item/device/modkit_conversion/fluff/debug_gunkit
name = "Gun Transformation Kit"
desc = "A kit containing all the needed tools and fabric to modify one sidearm to another."
skip_content_check = FALSE
transfer_contents = FALSE
icon = 'icons/vore/custom_items_vr.dmi'
icon_state = "harmony_kit"
from_helmet = /obj/item/weapon/gun/energy/laser
to_helmet = /obj/item/weapon/gun/energy/retro
//DEBUG ITEM ENDS
//JoanRisu:Joan Risu
/obj/item/weapon/flame/lighter/zippo/fluff/joan
name = "Federation Zippo Lighter"
@@ -0,0 +1,4 @@
author: Leshana
delete-after: True
changes:
- rscadd: "Glass Emergency Shutters are now constructable and deconstructing them will give you the glass back."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 740 B

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 KiB

After

Width:  |  Height:  |  Size: 628 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 611 B

After

Width:  |  Height:  |  Size: 859 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

File diff suppressed because it is too large Load Diff
+28 -1
View File
@@ -1016,6 +1016,11 @@
icon_state = "techfloororange_corners";
dir = 1
},
/obj/structure/cable/cyan{
d1 = 2;
d2 = 8;
icon_state = "2-8"
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/aro2/bighallway)
"cc" = (
@@ -1490,6 +1495,11 @@
/obj/structure/railing{
dir = 4
},
/obj/structure/cable/cyan{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/turf/simulated/floor/bluegrid,
/area/aro2/bighallway)
"de" = (
@@ -1897,6 +1907,11 @@
/turf/simulated/wall/rpshull,
/area/aro2/storage)
"dS" = (
/obj/structure/cable/cyan{
d1 = 1;
d2 = 8;
icon_state = "1-8"
},
/turf/simulated/floor/bluegrid,
/area/aro2/bighallway)
"dT" = (
@@ -2045,6 +2060,9 @@
initial_shield_modes = 2113;
target_radius = 31
},
/obj/structure/cable/cyan{
icon_state = "0-4"
},
/turf/simulated/floor/bluegrid,
/area/aro2/bighallway)
"ee" = (
@@ -4772,6 +4790,15 @@
},
/turf/simulated/floor/tiled/techfloor,
/area/shuttle/aroboat2)
"TY" = (
/obj/effect/floor_decal/techfloor/orange,
/obj/structure/cable/cyan{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/turf/simulated/floor/tiled/techfloor/grid,
/area/aro2/bighallway)
"VH" = (
/obj/structure/grille,
/obj/structure/window/phoronreinforced/full,
@@ -15689,7 +15716,7 @@ bI
hT
gU
cb
cr
TY
dd
dS
eu
@@ -10193,7 +10193,7 @@ a
a
a
a
a
c
a
a
a
@@ -10755,7 +10755,7 @@ a
a
a
a
c
a
a
a
a
@@ -10193,7 +10193,7 @@ a
a
a
a
a
c
a
a
a
@@ -10755,7 +10755,7 @@ a
a
a
a
c
a
a
a
a
@@ -10193,7 +10193,7 @@ a
a
a
a
a
c
a
a
a
@@ -10755,7 +10755,7 @@ a
a
a
a
c
a
a
a
a
@@ -10193,7 +10193,7 @@ a
a
a
a
a
c
a
a
a
@@ -10755,7 +10755,7 @@ a
a
a
a
c
a
a
a
a
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1
View File
@@ -2242,6 +2242,7 @@
"aei" = (
/obj/structure/table/reinforced,
/obj/machinery/camera/network/engineering,
/obj/item/clothing/shoes/magboots/adv,
/turf/simulated/floor/tiled,
/area/crew_quarters/heads/chief)
"aej" = (
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+42 -25
View File
@@ -238,6 +238,9 @@
name = "\improper Vacant Prep Area"
/area/vacant/vacant_site/gateway/lower
name = "\improper Lower Vacant Prep Area"
//TFF 5/4/20 - Mining Ops move TODO Change all Vacant areas to construction_site per vermin event location announcement.
/area/construction/vacant_mining_ops
name = "\improper Vacant Mining Operations"
// /area/tether/surfacebase/east_stairs_three //This is just part of an upper hallway
@@ -252,32 +255,38 @@
/area/tether/surfacebase/emergency_storage/atrium
name = "\improper Atrium Emergency Storage"
// Main mining area
/area/tether/surfacebase/mining_main
//TFF 7/4/20 - New areas for Surface Cargo bits as well as the Mining Outpost. Some former ones deleted. Others renamed.
// Surface Cargo/Mining EVA/Warehouse/Mining Outpost adadditions
/area/tether/surfacebase/cargo
name = "Surface Cargo Foyer"
icon = 'icons/turf/areas.dmi'
icon_state = "quartstorage"
/area/tether/surfacebase/cargo/mining //TODO: Change to medical airlock access
name = "\improper Mining Equipment Storage"
icon_state = "outpost_mine_main"
/area/tether/surfacebase/mining_main/airlock
/area/tether/surfacebase/cargo/mining/airlock //TODO: Change to medical airlock
name = "\improper Mining Airlock"
/area/tether/surfacebase/mining_main/storage
name = "\improper Mining Gear Storage"
/area/tether/surfacebase/mining_main/uxstorage
name = "\improper Mining Secondary Storage"
/area/tether/surfacebase/mining_main/ore
name = "\improper Mining Ore Storage"
/area/tether/surfacebase/mining_main/eva
name = "\improper Mining EVA"
/area/tether/surfacebase/mining_main/break_room
name = "\improper Mining Crew Area"
/area/tether/surfacebase/mining_main/refinery
name = "\improper Mining Refinery"
/area/tether/surfacebase/mining_main/external
name = "\improper Mining Refinery"
/area/tether/surfacebase/mining_main/bathroom
name = "\improper Mining Bathroom"
/area/tether/surfacebase/mining_main/lobby
name = "\improper Mining Lobby"
/area/tether/surfacebase/mining_main/surfacecargo
/area/tether/surfacebase/cargo/warehouse
name = "\improper Surface Cargo Warehouse"
/area/tether/surfacebase/cargo/office
name = "\improper Surface Cargo Office"
lightswitch = 0
/area/tether/surfacebase/mining_main
icon_state = "outpost_mine_main"
/area/tether/surfacebase/mining_main/eva
name = "\improper Mining EVA"
/area/tether/surfacebase/mining_main/external //TODO: repath for medical move
name = "\improper Mining External"
/area/tether/surfacebase/mining_main/break_room
name = "\improper Mining Crew Area"
/area/tether/surfacebase/mining_main/bathroom
name = "\improper Mining Bathroom"
/area/outpost/mining_main/hangar
name = "\improper Mining Outpost Shuttle Hangar"
/area/outpost/mining_main/secondary_gear_storage
name = "\improper Mining Outpost Gear Storage"
/area/outpost/mining_main/drill_equipment
name = "\improper Mining Equipment Storage"
// Mining Underdark
/area/mine/unexplored/underdark
@@ -1070,12 +1079,20 @@
/area/shuttle/medivac/engines
name = "\improper Medivac Engines"
// Belter Dock
//TFF 5/4/20 - Mining Ops move
// Asteroid Mining belter and Mining Outpost shuttles and refinery/gear areas
/area/quartermaster/belterdock
name = "\improper Cargo Belter Access"
icon_state = "mining"
/area/quartermaster/belterdock/gear
name = "\improper Mining Gear Storage"
/area/quartermaster/belterdock/refinery
name = "\improper Mining Refinery"
/area/quartermaster/belterdock/surface_mining_outpost_shuttle_hangar
name = "\improper Mining Outpost Shuttle - Station"
area/shuttle/mining_outpost/shuttle
name = "\improper Mining Outpost Shuttle"
icon_state = "shuttle2"
// Elevator area //
/area/tether/elevator
+6 -1
View File
@@ -130,11 +130,12 @@
/area/rnd/miscellaneous_lab
)
//TFF 5/4/20 - Mining Ops move, airlock path change
unit_test_exempt_from_atmos = list(
/area/engineering/atmos_intake, // Outside,
/area/rnd/external, // Outside,
/area/tether/surfacebase/mining_main/external, // Outside,
/area/tether/surfacebase/mining_main/airlock, // Its an airlock,
/area/tether/surfacebase/cargo/mining/airlock, // It's an airlock, TODO: repath for later Med EVA on Surface
/area/tether/surfacebase/emergency_storage/rnd,
/area/tether/surfacebase/emergency_storage/atrium)
@@ -177,6 +178,10 @@
Z_LEVEL_ROGUEMINE_3,
Z_LEVEL_ROGUEMINE_4)
//TFF 16/4/20 - mining outpost shuttle defines
mining_station_z = list(Z_LEVEL_SPACE_HIGH)
mining_outpost_z = list(Z_LEVEL_SURFACE_MINE)
lateload_single_pick = null //Nothing right now.
planet_datums_to_make = list(/datum/planet/virgo3b)
+12
View File
@@ -200,3 +200,15 @@
/datum/shuttle/autodock/ferry/belter/New()
move_time = move_time + rand(-5 SECONDS, 5 SECONDS)
..()
//////////////////////////////////////////////////////////////
//TFF 12/4/20 Surface Mining Outpost Shuttle
/datum/shuttle/autodock/ferry/surface_mining_outpost
name = "Mining Outpost"
location = FERRY_LOCATION_STATION
warmup_time = 5
shuttle_area = /area/shuttle/mining_outpost
landmark_station = "mining_station"
landmark_offsite = "mining_outpost"
docking_controller_tag = "mining_docking"
+5
View File
@@ -32,6 +32,11 @@
shuttle_tag = "Trade"
req_one_access = list(access_trader)
//TFF 12/4/20 - Add console for Mining Outpost Shuttle
/obj/machinery/computer/shuttle_control/surface_mining_outpost
name = "surface mining outpost shuttle control console"
shuttle_tag = "Mining Outpost"
req_one_access = list(access_mining)
//
// "Tram" Emergency Shuttler
// Becuase the tram only has its own doors and no corresponding station doors, a docking controller is overkill.
+4 -2
View File
@@ -62,11 +62,13 @@ var/list/all_maps = list()
var/ai_shell_restricted = FALSE //VOREStation Addition - are there z-levels restricted?
var/ai_shell_allowed_levels = list() //VOREStation Addition - which z-levels ARE we allowed to visit?
//VOREStation Addition Start - belter stuff
//VOREStation Addition Start - belter stuff TFF 16/4/20 - Mining Outpost Shuttle
var/list/belter_docked_z = list()
var/list/belter_transit_z = list()
var/list/belter_belt_z = list()
//VOREStation Addition End - belter stuff
var/list/mining_station_z = list()
var/list/mining_outpost_z = list()
//VOREStation Addition End
var/station_name = "BAD Station"
var/station_short = "Baddy"