diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 1a482e6d24..63c9c1a24e 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -42,6 +42,7 @@ var/global/list/facial_hair_styles_male_list = list() var/global/list/facial_hair_styles_female_list = list() var/global/list/skin_styles_female_list = list() //unused var/global/list/body_marking_styles_list = list() //stores /datum/sprite_accessory/marking indexed by name +var/global/list/body_marking_nopersist_list = list() // Body marking styles, minus non-genetic markings and augments var/global/list/ear_styles_list = list() // Stores /datum/sprite_accessory/ears indexed by type var/global/list/tail_styles_list = list() // Stores /datum/sprite_accessory/tail indexed by type var/global/list/wing_styles_list = list() // Stores /datum/sprite_accessory/wing indexed by type @@ -149,6 +150,8 @@ GLOBAL_LIST_EMPTY(mannequins) for(var/path in paths) var/datum/sprite_accessory/marking/M = new path() body_marking_styles_list[M.name] = M + if(!M.genetic) + body_marking_nopersist_list[M.name] = M //Surgery Steps - Initialize all /datum/surgery_step into a list paths = subtypesof(/datum/surgery_step) diff --git a/code/controllers/subsystems/supply.dm b/code/controllers/subsystems/supply.dm index 04908f3f31..af096c33a8 100644 --- a/code/controllers/subsystems/supply.dm +++ b/code/controllers/subsystems/supply.dm @@ -56,6 +56,8 @@ SUBSYSTEM_DEF(supply) return 1 if(istype(A,/obj/item/device/perfect_tele_beacon)) //VOREStation Addition: Translocator beacons return 1 //VOREStation Addition: Translocator beacons + if(istype(A,/obj/machinery/power/quantumpad)) // //VOREStation Add: Quantum pads + return 1 //VOREStation Add: Quantum pads for(var/atom/B in A.contents) if(.(B)) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 93a2895311..df62ad8ecf 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -123,6 +123,7 @@ var/global/list/datum/dna/gene/dna_genes[0] // New stuff var/species = SPECIES_HUMAN var/list/body_markings = list() + var/list/body_markings_genetic = list() var/list/body_descriptors = null var/list/genetic_modifiers = list() // Modifiers with the MODIFIER_GENETIC flag are saved. Note that only the type is saved, not an instance. @@ -143,6 +144,8 @@ var/global/list/datum/dna/gene/dna_genes[0] new_dna.custom_ask=custom_ask //VOREStaton Edit new_dna.custom_whisper=custom_whisper //VOREStaton Edit new_dna.custom_exclaim=custom_exclaim //VOREStaton Edit + var/list/body_markings_genetic = (body_markings - body_marking_nopersist_list) + new_dna.body_markings=body_markings_genetic.Copy() for(var/b=1;b<=DNA_SE_LENGTH;b++) new_dna.SE[b]=SE[b] if(b<=DNA_UI_LENGTH) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index a2f310aaf1..6a61f01502 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -50,6 +50,11 @@ if(istype(P, /obj/item/weapon/circuitboard)) var/obj/item/weapon/circuitboard/B = P if(B.board_type == "machine") + //VOREStation Addition End + if(istype(B, /obj/item/weapon/circuitboard/quantumpad) && istype(get_area(src), /area/shuttle)) + to_chat(user, "This is too unstable a platform for a quantum pad to operate on!") + return + //VOREStation Addition End playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) to_chat(user, "You add the circuit board to the frame.") circuit = P diff --git a/code/game/objects/items/weapons/capture_crystal.dm b/code/game/objects/items/weapons/capture_crystal.dm index 8b225d9298..5e492eec34 100644 --- a/code/game/objects/items/weapons/capture_crystal.dm +++ b/code/game/objects/items/weapons/capture_crystal.dm @@ -1,5 +1,5 @@ /obj/item/capture_crystal - name = "Curious Crystal" + name = "curious crystal" desc = "A silent, unassuming crystal in what appears to be some kind of steel housing." icon = 'icons/obj/capture_crystal_vr.dmi' icon_state = "inactive" diff --git a/code/game/objects/items/weapons/implants/implantlanguage.dm b/code/game/objects/items/weapons/implants/implantlanguage.dm index 692cdd381f..595e40c2b9 100644 --- a/code/game/objects/items/weapons/implants/implantlanguage.dm +++ b/code/game/objects/items/weapons/implants/implantlanguage.dm @@ -7,6 +7,7 @@ desc = "An implant allowing someone to speak the range of frequencies used in Galactic Common, as well as produce any phonemes that they usually cannot. Only helps with producing sounds, not understanding them." known_implant = TRUE var/list/languages = list(LANGUAGE_GALCOM) // List of languages that this assists with + initialize_loc = BP_HEAD /obj/item/weapon/implant/language/post_implant(mob/M) // Amends the mob's voice organ, then deletes itself if(ishuman(M)) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index a03effa2e2..fb07754d1e 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -240,6 +240,7 @@ return // Basic dismantling. + var/dismantle_toolspeed = 0 if(isnull(construction_stage) || !reinf_material) var/cut_delay = 60 - material.cut_delay @@ -259,6 +260,7 @@ else if(istype(W,/obj/item/weapon/melee/energy/blade)) dismantle_sound = "sparks" dismantle_verb = "slicing" + dismantle_toolspeed = 1 cut_delay *= 0.5 else if(istype(W,/obj/item/weapon/pickaxe)) var/obj/item/weapon/pickaxe/P = W @@ -272,7 +274,7 @@ if(dismantle_sound) playsound(src, dismantle_sound, 100, 1) - if(cut_delay<0) + if(cut_delay < 0) cut_delay = 0 if(!do_after(user,cut_delay * W.toolspeed)) @@ -386,7 +388,7 @@ construction_stage = 0 user.update_examine_panel(src) update_icon() - to_chat(user, "The slice through the support rods.") + to_chat(user, "You slice through the support rods.") return if(0) if(W.is_crowbar()) diff --git a/code/modules/client/preference_setup/loadout/loadout_cyberware.dm b/code/modules/client/preference_setup/loadout/loadout_cyberware.dm index 2540e86fc8..1fac24c862 100644 --- a/code/modules/client/preference_setup/loadout/loadout_cyberware.dm +++ b/code/modules/client/preference_setup/loadout/loadout_cyberware.dm @@ -12,19 +12,6 @@ path = /obj/item/weapon/implant/tracking/weak cost = 0 //VOREStation Edit. Changed cost to 0 -// Remove these after generic implant has been in for awhile and everyone has had a reasonable period to copy their old descs. -/datum/gear/utility/implant/dud1 - display_name = "implant, head" - description = "An implant with no obvious purpose (DEPRECATED, USE GENERIC IMPLANT)." - path = /obj/item/weapon/implant/dud - cost = 1 -/datum/gear/utility/implant/dud2 - display_name = "implant, torso" - description = "An implant with no obvious purpose (DEPRECATED, USE GENERIC IMPLANT)." - path = /obj/item/weapon/implant/dud/torso - cost = 1 -// End removal marker. - /datum/gear/utility/implant/generic display_name = "implant, generic, primary" description = "An implant with no obvious purpose." diff --git a/code/modules/client/stored_item.dm b/code/modules/client/stored_item.dm index 6ce1a4c524..d2210b2245 100644 --- a/code/modules/client/stored_item.dm +++ b/code/modules/client/stored_item.dm @@ -246,3 +246,7 @@ persist_storable = FALSE /obj/item/weapon/reagent_containers/food/snacks/grown persist_storable = FALSE +/obj/item/weapon/stock_parts + persist_storable = FALSE +/obj/item/weapon/rcd + persist_storable = FALSE \ No newline at end of file diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index d27edd297b..e46fd9fc29 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -36,6 +36,9 @@ qdel(selected_image) QDEL_NULL(vorePanel) //VOREStation Add QDEL_LIST_NULL(vore_organs) //VOREStation Add + temp_language_sources = null //VOREStation Add + temp_languages = null //VOREStation Add + if(LAZYLEN(organs)) organs_by_name.Cut() diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index a71c2b2963..5f5a3bfe69 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -2062,9 +2062,12 @@ shaved color_blend_mode = ICON_ADD + var/genetic = TRUE var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD +//Tattoos + /datum/sprite_accessory/marking/tat_rheart name = "Tattoo (Heart, R. Arm)" icon_state = "tat_rheart" @@ -2117,6 +2120,300 @@ shaved icon_state = "tat_tiger" body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) +//New tats + +/datum/sprite_accessory/marking/tat_belly + name = "Tattoo (Belly)" + icon_state = "tat_belly" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/tat_forrest_left + name = "Tattoo (Forrest, Left Eye)" + icon_state = "tat_forrest_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_forrest_right + name = "Tattoo (Forrest, Right Eye)" + icon_state = "tat_forrest_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_hunter_left + name = "Tattoo (Hunter, Left Eye)" + icon_state = "tat_hunter_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_hunter_right + name = "Tattoo (Hunter, Right Eye)" + icon_state = "tat_hunter_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_jaeger_left + name = "Tattoo (Jaeger, Left Eye)" + icon_state = "tat_jaeger_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_jaeger_right + name = "Tattoo (Jaeger, Right Eye)" + icon_state = "tat_jaeger_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_kater_left + name = "Tattoo (Kater, Left Eye)" + icon_state = "tat_kater_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_kater_right + name = "Tattoo (Kater, Right Eye)" + icon_state = "tat_kater_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_lujan_left + name = "Tattoo (Lujan, Left Eye)" + icon_state = "tat_lujan_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_lujan_right + name = "Tattoo (Lujan, Right Eye)" + icon_state = "tat_lujan_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_montana_left + name = "Tattoo (Montana, Left Face)" + icon_state = "tat_montana_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_montana_right + name = "Tattoo (Montana, Right Face)" + icon_state = "tat_montana_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_natasha_left + name = "Tattoo (Natasha, Left Eye)" + icon_state = "tat_natasha_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_natasha_right + name = "Tattoo (Natasha, Right Eye)" + icon_state = "tat_natasha_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_tamoko + name = "Tattoo (Ta Moko, Face)" + icon_state = "tat_tamoko" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_toshi_left + name = "Tattoo (Toshi, Left Eye)" + icon_state = "tat_toshi_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_toshi_right + name = "Tattoo (Volgin, Right Eye)" + icon_state = "tat_toshi_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_wings_back + name = "Tattoo (Wings, Lower Back)" + icon_state = "tat_wingsback" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/tilaka + name = "Tilaka" + icon_state = "tilaka" + body_parts = list(BP_HEAD) + + +/datum/sprite_accessory/marking/bands + name = "Color Bands" + icon_state = "bands" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) + +/datum/sprite_accessory/marking/bandsface + name = "Color Bands (Face)" + icon_state = "bandsface" + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_TAJ,SPECIES_UNATHI) + +/datum/sprite_accessory/marking/bandsface_human + name = "Color Bands (Face)" + icon_state = "bandshumanface" + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN,SPECIES_SKRELL) + +/datum/sprite_accessory/marking/tiger_stripes + name = "Tiger Stripes" + icon_state = "tiger" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN) + species_allowed = list(SPECIES_TAJ) //There's a tattoo for non-cats + +/datum/sprite_accessory/marking/tigerhead + name = "Tiger Stripes (Head, Minor)" + icon_state = "tigerhead" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tigerface + name = "Tiger Stripes (Head, Major)" + icon_state = "tigerface" + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_TAJ) //There's a tattoo for non-cats + +/datum/sprite_accessory/marking/backstripe + name = "Back Stripe" + icon_state = "backstripe" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/bindi + name = "Bindi" + icon_state = "bindi" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/blush + name = "Blush" + icon_state= "blush" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/bridge + name = "Bridge" + icon_state = "bridge" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/brow_left + name = "Brow Left" + icon_state = "brow_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/brow_right + name = "Brow Right" + icon_state = "brow_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/cheekspot_left + name = "Cheek Spot (Left Cheek)" + icon_state = "cheekspot_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/cheekspot_right + name = "Cheek Spot (Right Cheek)" + icon_state = "cheekspot_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/cheshire_left + name = "Cheshire (Left Cheek)" + icon_state = "cheshire_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/cheshire_right + name = "Cheshire (Right Cheek)" + icon_state = "cheshire_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/eyestripe + name = "Eye Stripe" + icon_state = "eyestripe" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/eyecorner_left + name = "Eye Corner Left" + icon_state = "eyecorner_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/eyecorner_right + name = "Eye Corner Right" + icon_state = "eyecorner_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/fullfacepaint + name = "Full Face Paint" + icon_state = "fullface" + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_HUMAN,SPECIES_HUMAN_VATBORN,SPECIES_SKRELL) + +/datum/sprite_accessory/marking/lips + name = "Lips" + icon_state = "lips" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/lowercheek_left + name = "Lower Cheek Left" + icon_state = "lowercheek_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/lowercheek_left + name = "Lower Cheek Right" + icon_state = "lowercheek_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/neck + name = "Neck Cover" + icon_state = "neck" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/neckthick + name = "Neck Cover (Thick)" + icon_state = "neckthick" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/nosestripe + name = "Nose Stripe" + icon_state = "nosestripe" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/nosetape + name = "Nose Tape" + icon_state = "nosetape" + body_parts = list(BP_HEAD) + genetic = FALSE + +/datum/sprite_accessory/marking/scratch_abdomen_left + name = "Scar, Abdomen Left" + icon_state = "scratch_abdomen_l" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scratch_abdomen_right + name = "Scar, Abdomen Right" + icon_state = "scratch_abdomen_r" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scratch_abdomen_small_left + name = "Scar, Abdomen Small Left" + icon_state = "scratch_abdomensmall_l" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scratch_abdomen_small_right + name = "Scar, Abdomen Small Right" + icon_state = "scratch_abdomensmall_r" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scratch_back + name = "Scar, Back" + icon_state = "scratch_back" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scratch_chest_left + name = "Scar, Chest (Left)" + icon_state = "scratch_chest_l" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/scratch_chest_right + name = "Scar, Chest (Right)" + icon_state = "scratch_chest_r" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/skull_paint + name = "Skull Paint" + icon_state = "skull" + body_parts = list(BP_HEAD) + genetic = FALSE + +//Heterochromia + +/datum/sprite_accessory/marking/heterochromia + name = "Heterochromia (right eye)" + icon_state = "heterochromia" + body_parts = list(BP_HEAD) + +//Taj/Unathi shared markings + /datum/sprite_accessory/marking/taj_paw_socks name = "Socks Coloration (Taj)" icon_state = "taj_pawsocks" @@ -2171,42 +2468,6 @@ shaved body_parts = list(BP_HEAD) species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/marking/bands - name = "Color Bands" - icon_state = "bands" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN) - -/datum/sprite_accessory/marking/bandsface - name = "Color Bands (Face)" - icon_state = "bandsface" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tiger_stripes - name = "Tiger Stripes" - icon_state = "tiger" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN) - species_allowed = list(SPECIES_TAJ) //There's a tattoo for non-cats - -/datum/sprite_accessory/marking/tigerhead - name = "Tiger Stripes (Head, Minor)" - icon_state = "tigerhead" - body_parts = list(BP_HEAD) - -/datum/sprite_accessory/marking/tigerface - name = "Tiger Stripes (Head, Major)" - icon_state = "tigerface" - body_parts = list(BP_HEAD) - species_allowed = list(SPECIES_TAJ) //There's a tattoo for non-cats - -/datum/sprite_accessory/marking/backstripe - name = "Back Stripe" - icon_state = "backstripe" - body_parts = list(BP_TORSO) - -/datum/sprite_accessory/marking/heterochromia - name = "Heterochromia (right eye)" - icon_state = "heterochromia" - body_parts = list(BP_HEAD) //Taj specific stuff /datum/sprite_accessory/marking/taj_belly @@ -2340,10 +2601,174 @@ shaved do_colouration = 0 +//Cybernetic Augments, some species-limited due to sprite misalignment. /aug/ types are excluded from dna. + +/datum/sprite_accessory/marking/aug + name = "Augment (Backports, Back)" + icon_state = "aug_backports" + genetic = FALSE + body_parts = list(BP_TORSO) + species_allowed = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_TAJ,SPECIES_HUMAN_VATBORN,SPECIES_UNATHI,SPECIES_ZADDAT) + +/datum/sprite_accessory/marking/aug/diode + name = "Augment (Backports Diode, Back)" + icon_state = "aug_backportsdiode" + +/datum/sprite_accessory/marking/aug/backportswide + name = "Augment (Backports Wide, Back)" + icon_state = "aug_backportswide" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/aug/backportswide/diode + name = "Augment (Backports Wide Diode, Back)" + icon_state = "aug_backportswidediode" + +/datum/sprite_accessory/marking/aug/headcase + name = "Augment (Headcase, Head)" + icon_state = "aug_headcase" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/headcase_light + name = "Augment (Headcase Light, Head)" + icon_state = "aug_headcaselight" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/headport + name = "Augment (Headport, Head)" + icon_state = "aug_headport" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/headport/diode + name = "Augment (Headport Diode, Head)" + icon_state = "aug_headplugdiode" + +/datum/sprite_accessory/marking/aug/lowerjaw + name = "Augment (Lower Jaw, Head)" + icon_state = "aug_lowerjaw" + body_parts = list(BP_HEAD) + species_allowed = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_HUMAN_VATBORN,SPECIES_ZADDAT) + +/datum/sprite_accessory/marking/aug/scalpports + name = "Augment (Scalp Ports)" + icon_state = "aug_scalpports" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/scalpports/vertex_left + name = "Augment (Scalp Port, Vertex Left)" + icon_state = "aug_vertexport_l" + +/datum/sprite_accessory/marking/aug/scalpports/vertex_right + name = "Augment (Scalp Port, Vertex Right)" + icon_state = "aug_vertexport_r" + +/datum/sprite_accessory/marking/aug/scalpports/occipital_left + name = "Augment (Scalp Port, Occipital Left)" + icon_state = "aug_occipitalport_l" + +/datum/sprite_accessory/marking/aug/scalpports/occipital_right + name = "Augment (Scalp Port, Occipital Right)" + icon_state = "aug_occipitalport_r" + +/datum/sprite_accessory/marking/aug/scalpportsdiode + name = "Augment (Scalp Ports Diode)" + icon_state = "aug_scalpportsdiode" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/scalpportsdiode/vertex_left + name = "Augment (Scalp Port Diode, Vertex Left)" + icon_state = "aug_vertexportdiode_l" + +/datum/sprite_accessory/marking/aug/scalpportsdiode/vertex_right + name = "Augment (Scalp Port Diode, Vertex Right)" + icon_state = "aug_vertexportdiode_r" + +/datum/sprite_accessory/marking/aug/scalpportsdiode/occipital_left + name = "Augment (Scalp Port Diode, Occipital Left)" + icon_state = "aug_occipitalportdiode_l" + +/datum/sprite_accessory/marking/aug/scalpportsdiode/occipital_right + name = "Augment (Scalp Port Diode, Occipital Right)" + icon_state = "aug_occipitalportdiode_r" + +/datum/sprite_accessory/marking/aug/backside_left + name = "Augment (Backside Left, Head)" + icon_state = "aug_backside_l" + +/datum/sprite_accessory/marking/aug/backside_left/side_diode + name = "Augment (Backside Left Diode, Head)" + icon_state = "aug_sidediode_l" + +/datum/sprite_accessory/marking/aug/backside_right + name = "Augment (Backside Right, Head)" + icon_state = "aug_backside_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/backside_right/side_diode + name = "Augment (Backside Right Diode, Head)" + icon_state = "aug_sidediode_r" + +/datum/sprite_accessory/marking/aug/side_deunan_left + name = "Augment (Deunan, Side Left)" + icon_state = "aug_sidedeunan_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_deunan_right + name = "Augment (Deunan, Side Right)" + icon_state = "aug_sidedeunan_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_kuze_left + name = "Augment (Kuze, Side Left)" + icon_state = "aug_sidekuze_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_kuze_left/side_diode + name = "Augment (Kuze Diode, Side Left)" + icon_state = "aug_sidekuzediode_l" + +/datum/sprite_accessory/marking/aug/side_kuze_right + name = "Augment (Kuze, Side Right)" + icon_state = "aug_sidekuze_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_kuze_right/side_diode + name = "Augment (Kuze Diode, Side Right)" + icon_state = "aug_sidekuzediode_r" + +/datum/sprite_accessory/marking/aug/side_kinzie_left + name = "Augment (Kinzie, Side Left)" + icon_state = "aug_sidekinzie_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_kinzie_right + name = "Augment (Kinzie, Side Right)" + icon_state = "aug_sidekinzie_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_shelly_left + name = "Augment (Shelly, Side Left)" + icon_state = "aug_sideshelly_l" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/side_shelly_right + name = "Augment (Shelly, Side Right)" + icon_state = "aug_sideshelly_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/aug/chestports + name = "Augment (Chest Ports)" + icon_state = "aug_chestports" + body_parts = list(BP_TORSO) + +/datum/sprite_accessory/marking/aug/abdomenports + name = "Augment (Abdomen Ports)" + icon_state = "aug_abdomenports" + body_parts = list(BP_TORSO) //skin styles - WIP //going to have to re-integrate this with surgery //let the icon_state hold an icon preview for now + /datum/sprite_accessory/skin icon = 'icons/mob/human_races/r_human.dmi' diff --git a/code/modules/shieldgen/directional_shield.dm b/code/modules/shieldgen/directional_shield.dm index 2677a56536..209dc9ca9a 100644 --- a/code/modules/shieldgen/directional_shield.dm +++ b/code/modules/shieldgen/directional_shield.dm @@ -103,7 +103,7 @@ if(always_on) create_shields() GLOB.moved_event.register(src, src, .proc/moved_event) - ..() + return ..() /obj/item/shield_projector/Destroy() destroy_shields() diff --git a/code/modules/telesci/quantum_pad.dm b/code/modules/telesci/quantum_pad.dm index a55004e404..1ca5dfbf4e 100644 --- a/code/modules/telesci/quantum_pad.dm +++ b/code/modules/telesci/quantum_pad.dm @@ -65,6 +65,11 @@ return if(istype(I, /obj/item/device/multitool)) + //VOREStation Addition Start + if(istype(get_area(src), /area/shuttle)) + to_chat(user, "This is too unstable a platform for \the [src] to operate on!") + return + //VOREStation Addition End if(panel_open) var/obj/item/device/multitool/M = I M.connectable = src @@ -128,6 +133,10 @@ if(istype(get_area(src), /area/shuttle)) to_chat(user, "This is too unstable a platform for \the [src] to operate on!") + //VOREStation Addition Start + if(linked_pad) + linked_pad.linked_pad = null + //VOREStation Addition End return if(!powernet) @@ -175,6 +184,11 @@ update_icon() if(!linked_pad) return + //VOREStation Addition Start + if(istype(get_area(src), /area/shuttle)) + to_chat(user, "This is too unstable a platform for \the [src] to operate on!") + return + //VOREStation Addition End playsound(src, 'sound/weapons/flash.ogg', 25, 1) teleporting = 1 diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index e9e5baab15..f96af5c204 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -374,6 +374,7 @@ ML.muffled = 0 if(ML.absorbed) ML.absorbed = FALSE + handle_absorb_langs(ML, owner) if(ishuman(M) && ishuman(OW)) var/mob/living/carbon/human/Prey = M var/mob/living/carbon/human/Pred = OW @@ -676,6 +677,11 @@ absorb_alert_prey = replacetext(absorb_alert_prey, "%countprey", absorbed_count) M.absorbed = TRUE + if(M.ckey) + owner.temp_language_sources += M + M.temp_language_sources += owner + handle_absorb_langs(M, owner) + to_chat(M, "[absorb_alert_prey]") to_chat(owner, "[absorb_alert_owner]") if(M.noisy) //Mute drained absorbee hunger if enabled. @@ -741,6 +747,7 @@ unabsorb_alert_prey = replacetext(unabsorb_alert_prey, "%countprey", absorbed_count) M.absorbed = FALSE + handle_absorb_langs(M, owner) to_chat(M, "[unabsorb_alert_prey]") to_chat(owner, "[unabsorb_alert_owner]") @@ -752,6 +759,39 @@ if(isanimal(owner)) owner.update_icon() +///////////////////////////////////////////////////////////////////////// +/obj/belly/proc/handle_absorb_langs(var/mob/living/prey, var/mob/living/pred) + for(var/mob/living/p in pred.temp_language_sources) //Let's look at the pred's sources + if (!p.absorbed) + for(var/L in pred.temp_languages) + if(L in p.languages) + pred.languages -= L + pred.temp_languages -= L + pred.temp_language_sources -= p + else + for(var/L in p.languages) + if(L in pred.languages) + continue + pred.languages += L + pred.temp_languages += L + + for(var/mob/living/P in prey.temp_language_sources) //Let's look at the prey's sources + if (!prey.absorbed) + for(var/L in prey.temp_languages) + if(L in P.languages) + prey.languages -= L + prey.temp_languages -= L + prey.temp_language_sources -= P + else + for(var/L in P.languages) + if(L in prey.languages) + continue + prey.languages += L + prey.temp_languages += L + +//////////////////////////////////////////////////////////////////////// + + //Digest a single item //Receives a return value from digest_act that's how much nutrition //the item should be worth diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 6837cc4d56..ffaaa5ec09 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -12,6 +12,8 @@ var/obj/belly/vore_selected // Default to no vore capability. var/list/vore_organs = list() // List of vore containers inside a mob var/absorbed = FALSE // If a mob is absorbed into another + var/list/temp_language_sources = list() //VOREStation Addition - Absorbs add languages to the pred + var/list/temp_languages = list() //VOREStation Addition - Absorbs add languages to the pred var/weight = 137 // Weight for mobs for weightgain system var/weight_gain = 1 // How fast you gain weight var/weight_loss = 0.5 // How fast you lose weight diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 31d74f6d0e..d83744547d 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -540,6 +540,9 @@ to_chat(user,"You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!") to_chat(M,"[host] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!") to_chat(OB.owner,"Someone inside you has eaten someone else!") + if(M.absorbed) + M.absorbed = FALSE + OB.handle_absorb_langs(M, OB.owner) TB.nom_mob(M) /datum/vore_look/proc/pick_from_outside(mob/user, params) diff --git a/icons/mob/human_races/markings.dmi b/icons/mob/human_races/markings.dmi index f9f91da90b..de0dcafb7c 100644 Binary files a/icons/mob/human_races/markings.dmi and b/icons/mob/human_races/markings.dmi differ diff --git a/maps/stellardelight/stellar_delight3.dmm b/maps/stellardelight/stellar_delight3.dmm index 9688aec1ba..299c0bacca 100644 --- a/maps/stellardelight/stellar_delight3.dmm +++ b/maps/stellardelight/stellar_delight3.dmm @@ -13225,6 +13225,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/item/weapon/folder/white_cmo, /turf/simulated/floor/tiled/eris/white/cargo, /area/crew_quarters/heads/cmo) "VG" = ( @@ -13678,6 +13679,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/item/weapon/folder/white_rd, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/heads/hor) "Xo" = ( diff --git a/maps/submaps/engine_submaps/engine.dm b/maps/submaps/engine_submaps/engine.dm index 74db547fb2..63a0552c6d 100644 --- a/maps/submaps/engine_submaps/engine.dm +++ b/maps/submaps/engine_submaps/engine.dm @@ -4,6 +4,9 @@ var/clean_turfs // A list of lists, where each list is (x, ) /obj/effect/landmark/engine_loader/New() +INITIALIZE_IMMEDIATE(/obj/effect/landmark/engine_loader) + +/obj/effect/landmark/engine_loader/Initialize() if(SSmapping.engine_loader) warning("Duplicate engine_loader landmarks: [log_info_line(src)] and [log_info_line(SSmapping.engine_loader)]") delete_me = TRUE