diff --git a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm index 50758f324bf..1429b9b30a3 100644 --- a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm +++ b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm @@ -9,12 +9,13 @@ circuit = /obj/item/weapon/circuitboard/algae_farm anchored = 1 density = 1 - use_power = 2 + power_channel = EQUIP + use_power = 1 idle_power_usage = 100 // Minimal lights to keep algae alive active_power_usage = 5000 // Powerful grow lights to stimulate oxygen production //power_rating = 7500 //7500 W ~ 10 HP - var/list/stored_material = list(MATERIAL_ALGAE = 10000, MATERIAL_CARBON = 0) + var/list/stored_material = list(MATERIAL_ALGAE = 0, MATERIAL_CARBON = 0) // Capacity increases with matter bin quality var/list/storage_capacity = list(MATERIAL_ALGAE = 10000, MATERIAL_CARBON = 10000) // Speed at which we convert CO2 to O2. Increases with manipulator quality @@ -32,6 +33,9 @@ var/const/input_gas = "carbon_dioxide" var/const/output_gas = "oxygen" +/obj/machinery/atmospherics/binary/algae_farm/filled + stored_material = list(MATERIAL_ALGAE = 10000, MATERIAL_CARBON = 0) + /obj/machinery/atmospherics/binary/algae_farm/New() ..() desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]." @@ -54,6 +58,8 @@ recent_moles_transferred = 0 if(inoperable() || use_power < 2) + ui_error = null + update_icon() if(use_power == 1) last_power_draw = idle_power_usage else @@ -65,9 +71,11 @@ // STEP 1 - Check material resources if(stored_material[MATERIAL_ALGAE] < algae_per_mole) ui_error = "Insufficient [material_display_name(MATERIAL_ALGAE)] to process." + update_icon() return if(stored_material[MATERIAL_CARBON] + carbon_per_mole > storage_capacity[MATERIAL_CARBON]) ui_error = "[material_display_name(MATERIAL_CARBON)] output storage is full." + update_icon() return var/moles_to_convert = min(moles_per_tick,\ stored_material[MATERIAL_ALGAE] * algae_per_mole,\ @@ -85,6 +93,7 @@ var/co2_moles = internal.gas[input_gas] if(co2_moles < MINIMUM_MOLES_TO_FILTER) ui_error = "Insufficient [gas_data.name[input_gas]] to process." + update_icon() return // STEP 4 - Consume the resources @@ -104,7 +113,7 @@ update_icon() /obj/machinery/atmospherics/binary/algae_farm/update_icon() - if(inoperable() || !anchored) + if(inoperable() || !anchored || use_power < 2) icon_state = "algae-off" else if(recent_moles_transferred >= moles_per_tick) icon_state = "algae-full" @@ -120,6 +129,8 @@ return if(default_deconstruction_crowbar(user, W)) return + if(default_part_replacement(user, W)) + return if(try_load_materials(user, W)) return else @@ -131,6 +142,29 @@ return 1 ui_interact(user) +/obj/machinery/atmospherics/binary/algae_farm/RefreshParts() + ..() + + var/cap_rating = 0 + var/bin_rating = 0 + var/manip_rating = 0 + + for(var/obj/item/weapon/stock_parts/P in component_parts) + if(istype(P, /obj/item/weapon/stock_parts/capacitor)) + cap_rating += P.rating + if(istype(P, /obj/item/weapon/stock_parts/matter_bin)) + bin_rating += P.rating + if(istype(P, /obj/item/weapon/stock_parts/manipulator)) + manip_rating += P.rating + + power_per_mole = round(initial(power_per_mole) / cap_rating) + + var/storage = 5000 * (bin_rating**2)/2 + for(var/mat in storage_capacity) + storage_capacity[mat] = storage + + moles_per_tick = initial(moles_per_tick) + (manip_rating**2 - 1) + /obj/machinery/atmospherics/binary/algae_farm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nano_ui/master_ui = null, var/datum/topic_state/state = default_state) var/data[0] data["panelOpen"] = panel_open @@ -255,6 +289,9 @@ color = "#557722" default_type = MATERIAL_ALGAE +/obj/item/stack/material/algae/ten + amount = 10 + /material/carbon name = MATERIAL_CARBON stack_type = /obj/item/stack/material/carbon diff --git a/code/datums/supplypacks/engineering_vr.dm b/code/datums/supplypacks/engineering_vr.dm index f41a134e7b9..321269a2eac 100644 --- a/code/datums/supplypacks/engineering_vr.dm +++ b/code/datums/supplypacks/engineering_vr.dm @@ -10,4 +10,11 @@ /obj/item/clothing/suit/radiation = 2, /obj/item/clothing/suit/radiation/taur = 1, /obj/item/clothing/head/radiation = 3 - ) \ No newline at end of file + ) + +/datum/supply_packs/eng/algae + contains = list(/obj/item/stack/material/algae/ten) + name = "Algae Sheets (10)" + cost = 20 + containertype = /obj/structure/closet/crate + containername = "algae sheets crate" \ No newline at end of file diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index fd5afe34ea5..77ea2587e43 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -193,6 +193,12 @@ var/global/list/datum/dna/gene/dna_genes[0] src.base_species = CS.base_species src.blood_color = CS.blood_color + if(istype(character.species,/datum/species/xenochimera)) + var/datum/species/xenochimera/CS = character.species + //src.species_traits = CS.traits.Copy() //No traits + src.base_species = CS.base_species + src.blood_color = CS.blood_color + // +1 to account for the none-of-the-above possibility SetUIValueRange(DNA_UI_EAR_STYLE, ear_style + 1, ear_styles_list.len + 1, 1) SetUIValueRange(DNA_UI_TAIL_STYLE, tail_style + 1, tail_styles_list.len + 1, 1) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 35b6028c483..a7e7d2ddae2 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -229,6 +229,10 @@ var/datum/species/custom/new_CS = CS.produceCopy(dna.base_species,dna.species_traits,src) new_CS.blood_color = dna.blood_color + if(istype(H.species,/datum/species/xenochimera)) + var/datum/species/xenochimera/CS = H.species + var/datum/species/xenochimera/new_CS = CS.produceCopy(dna.base_species,dna.species_traits,src) + new_CS.blood_color = dna.blood_color // VOREStation Edit End H.force_update_organs() //VOREStation Add - Gotta do this too diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 4a8b4f2d3c7..5203d7ec2e9 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -123,6 +123,7 @@ dat += "Leather Coat ([round(500/build_eff)])
" dat += "Leather Jacket ([round(500/build_eff)])
" dat += "Winter Coat ([round(500/build_eff)])
" + dat += "4 Algae Sheets ([round(400/build_eff)])
" //VOREStation Edit - Algae for oxygen generator //dat += "Other
" //dat += "Monkey (500)
" else @@ -236,6 +237,9 @@ new/obj/item/clothing/suit/storage/toggle/brown_jacket(loc) if("wintercoat") new/obj/item/clothing/suit/storage/hooded/wintercoat(loc) + if("algae") //VOREStation Edit - Algae for oxygen generator + var/obj/item/stack/material/algae/A = new(loc) + A.amount = 4 //VOREStation Edit End processing = 0 menustat = "complete" update_icon() diff --git a/code/game/objects/items/trash_vr.dm b/code/game/objects/items/trash_vr.dm index 57d3bbbef01..edb90afcbff 100644 --- a/code/game/objects/items/trash_vr.dm +++ b/code/game/objects/items/trash_vr.dm @@ -21,7 +21,7 @@ if(isrobot(M)) var/mob/living/silicon/robot/R = M - if(R.module.type == /obj/item/weapon/robot_module/scrubpup) // You can now feed the trash borg yay. + if(R.module.type == /obj/item/weapon/robot_module/robot/scrubpup) // You can now feed the trash borg yay. playsound(R.loc,'sound/items/eatfood.ogg', rand(10,50), 1) user.drop_item() var/belly = R.vore_selected diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 19300c75f4f..c6b8f32e1e3 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -73,7 +73,7 @@ if(!(path in negative_traits)) pref.neg_traits -= path - if(!pref.custom_base || !(pref.custom_base in playable_species - whitelisted_species)) + if(!pref.custom_base || (pref.custom_base != "Xenochimera" && !(pref.custom_base in playable_species - whitelisted_species))) pref.custom_base = "Human" /datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character) @@ -86,8 +86,15 @@ //Any additional non-trait settings can be applied here new_CS.blood_color = pref.blood_color + if(pref.species == "Xenochimera") + var/datum/species/xenochimera/CS = character.species + var/S = pref.custom_base ? pref.custom_base : "Human" + var/datum/species/xenochimera/new_CS = CS.produceCopy(S, pref.pos_traits + pref.neu_traits + pref.neg_traits, character) + + //Any additional non-trait settings can be applied here + new_CS.blood_color = pref.blood_color + /datum/category_item/player_setup_item/vore/traits/content(var/mob/user) - //if(pref.species == "Custom Species" || pref.custom_species) //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their custom species. . += "Custom Species " . += "[pref.custom_species ? pref.custom_species : "-Input Name-"]
" @@ -95,6 +102,12 @@ . += "Icon Base: " . += "[pref.custom_base ? pref.custom_base : "Human"]
" + if(pref.species == "Xenochimera") + . += "Icon Base: " + . += "[pref.custom_base ? pref.custom_base : "Human"]
" + + if(pref.species == "Custom Species") + var/points_left = pref.starting_trait_points var/traits_left = pref.max_traits for(var/T in pref.pos_traits + pref.neg_traits) @@ -153,6 +166,12 @@ pref.custom_base = text_choice return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["custom_base_xenochimera"]) + var/text_choice = input("Pick an icon set for your species:","Icon Base") in playable_species - whitelisted_species - "Custom Species" - "Promethean" + "Xenochimera" + if(text_choice in playable_species) + pref.custom_base = text_choice + return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["blood_color"]) var/color_choice = input("Pick a blood color (does not apply to synths)","Blood Color",pref.blood_color) as color if(color_choice) diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm index 2d82f4ddb01..895b5530a20 100644 --- a/code/modules/mob/living/carbon/human/emote_vr.dm +++ b/code/modules/mob/living/carbon/human/emote_vr.dm @@ -84,7 +84,10 @@ log_and_message_admins("lost their [breaking] with *flip, ahahah.", src) else src.Weaken(5) - E.fracture() + if(E.cannot_break) //Prometheans go splat + E.droplimb(0,DROPLIMB_BLUNT) + else + E.fracture() message += " And breaks something!" log_and_message_admins("broke their [breaking] with *flip, ahahah.", src) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index 480ca6e1488..2f46b1b13fb 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -15,6 +15,7 @@ brute_mod = 0.8 //About as tanky to brute as a Unathi. They'll probably snap and go feral when hurt though. burn_mod = 1.15 //As vulnerable to burn as a Tajara. can_fly = 1 //They have wings by default. + var/base_species = "Xenochimera" num_alternate_languages = 2 secondary_langs = list("Sol Common") @@ -194,6 +195,52 @@ H.shock_stage = min(H.shock_stage + coldshock, 160) //cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage or trigger feral. return +/datum/species/xenochimera/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H) + ASSERT(to_copy) + ASSERT(istype(H)) + + if(ispath(to_copy)) + to_copy = "[initial(to_copy.name)]" + if(istext(to_copy)) + to_copy = all_species[to_copy] + + var/datum/species/xenochimera/new_copy = new() + + //Initials so it works with a simple path passed, or an instance + new_copy.base_species = to_copy.name + new_copy.icobase = to_copy.icobase + new_copy.deform = to_copy.deform + new_copy.tail = to_copy.tail + new_copy.tail_animation = to_copy.tail_animation + new_copy.icobase_tail = to_copy.icobase_tail + new_copy.color_mult = to_copy.color_mult + new_copy.primitive_form = to_copy.primitive_form + new_copy.appearance_flags = to_copy.appearance_flags + new_copy.flesh_color = to_copy.flesh_color + new_copy.base_color = to_copy.base_color + new_copy.blood_mask = to_copy.blood_mask + new_copy.damage_mask = to_copy.damage_mask + new_copy.damage_overlays = to_copy.damage_overlays + + //Set up a mob + H.species = new_copy + H.icon_state = lowertext(new_copy.get_bodytype()) + + if(new_copy.holder_type) + H.holder_type = new_copy.holder_type + + if(H.dna) + H.dna.ready_dna(H) + + return new_copy + +/datum/species/xenochimera/get_bodytype() + return base_species + +/datum/species/xenochimera/get_race_key() + var/datum/species/real = all_species[base_species] + return real.race_key + ///////////////////// /////SPIDER RACE///// diff --git a/code/modules/mob/living/silicon/robot/robot_modules_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules_vr.dm index 5cddbb34a0d..7918bc1532d 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules_vr.dm @@ -1,8 +1,8 @@ /hook/startup/proc/robot_modules_vr() - robot_modules["Medihound"] = /obj/item/weapon/robot_module/medihound - robot_modules["K9"] = /obj/item/weapon/robot_module/knine - robot_modules["ERT"] = /obj/item/weapon/robot_module/ert - robot_modules["Janihound"] = /obj/item/weapon/robot_module/scrubpup + robot_modules["Medihound"] = /obj/item/weapon/robot_module/robot/medihound + robot_modules["K9"] = /obj/item/weapon/robot_module/robot/knine + robot_modules["ERT"] = /obj/item/weapon/robot_module/robot/ert + robot_modules["Janihound"] = /obj/item/weapon/robot_module/robot/scrubpup return 1 //Just add a new proc with the robot_module type if you wish to run some other vore code @@ -17,7 +17,7 @@ src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people. . = ..() //Any Global vore modules will come from here -/obj/item/weapon/robot_module/knine +/obj/item/weapon/robot_module/robot/knine name = "k9 robot module" sprites = list( "K9 hound" = "k9", @@ -27,8 +27,7 @@ networks = list(NETWORK_SECURITY) can_be_pushed = 0 -/obj/item/weapon/robot_module/knine/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/knine/New(var/mob/living/silicon/robot/R) src.modules += new /obj/item/weapon/handcuffs/cyborg(src) //You need cuffs to be a proper sec borg! src.modules += new /obj/item/weapon/dogborg/jaws/big(src) //In case there's some kind of hostile mob. src.modules += new /obj/item/weapon/melee/baton/robot(src) //Since the pounce module refused to work, they get a stunbaton instead. @@ -38,6 +37,7 @@ src.modules += new /obj/item/device/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig. src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg(src) //They /are/ a security borg, after all. src.modules += new /obj/item/weapon/dogborg/pounce(src) //Pounce + src.modules += new /obj/item/borg/sight/hud/sec(src) //Security hud to access crime records etc. src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) //Emag. Not a big problem. R.icon = 'icons/mob/widerobot_vr.dmi' R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' @@ -46,7 +46,7 @@ R.old_x = -16 ..() -/obj/item/weapon/robot_module/knine/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) +/obj/item/weapon/robot_module/robot/knine/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/device/flash/F = locate() in src.modules if(F.broken) F.broken = 0 @@ -65,7 +65,7 @@ B.bcell.give(amount) -/obj/item/weapon/robot_module/medihound +/obj/item/weapon/robot_module/robot/medihound name = "MediHound module" channels = list("Medical" = 1) networks = list(NETWORK_MEDICAL) @@ -76,18 +76,18 @@ "Dark Medical Hound (Static)" = "medihounddark" ) -/obj/item/weapon/robot_module/medihound/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/medihound/New(var/mob/living/silicon/robot/R) src.modules += new /obj/item/weapon/dogborg/jaws/small(src) //In case a patient is being attacked by carp. src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop the crew. src.modules += new /obj/item/device/dogborg/tongue(src) //Clean up bloody items by licking them, and eat rubbish for minor energy. src.modules += new /obj/item/device/healthanalyzer(src) // See who's hurt specificially. src.modules += new /obj/item/device/dogborg/sleeper(src) //So they can nom people and heal them - src.modules += new /obj/item/weapon/extinguisher/mini(src) //So they can put burning patients out. src.modules += new /obj/item/weapon/reagent_containers/borghypo(src)//So medi-hounds aren't nearly useless src.modules += new /obj/item/weapon/reagent_containers/syringe(src) //In case the chemist is nice! src.modules += new /obj/item/weapon/reagent_containers/glass/beaker(src)//For holding the chemicals when the chemist is nice src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people. src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life + src.modules += new /obj/item/borg/sight/hud/med(src) //Medhud for accessing records and such. src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce R.icon = 'icons/mob/widerobot_vr.dmi' R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' @@ -96,7 +96,7 @@ R.old_x = -16 ..() -/obj/item/weapon/robot_module/ert +/obj/item/weapon/robot_module/robot/ert name = "Emergency Responce module" channels = list("Security" = 1) networks = list(NETWORK_SECURITY) @@ -105,8 +105,7 @@ "Standard" = "ert" ) -/obj/item/weapon/robot_module/ert/New(var/mob/living/silicon/robot/R) - src.modules += new /obj/item/device/flash(src) +/obj/item/weapon/robot_module/robot/ert/New(var/mob/living/silicon/robot/R) src.modules += new /obj/item/weapon/handcuffs/cyborg(src) src.modules += new /obj/item/weapon/dogborg/jaws/big(src) src.modules += new /obj/item/weapon/melee/baton/robot(src) @@ -123,7 +122,7 @@ R.old_x = -16 ..() -/obj/item/weapon/robot_module/scrubpup +/obj/item/weapon/robot_module/robot/scrubpup name = "Custodial Hound module" sprites = list( "Custodial Hound" = "scrubpup", @@ -131,7 +130,7 @@ channels = list("Service" = 1) can_be_pushed = 0 -/obj/item/weapon/robot_module/scrubpup/New(var/mob/living/silicon/robot/R) +/obj/item/weapon/robot_module/robot/scrubpup/New(var/mob/living/silicon/robot/R) src.modules += new /obj/item/device/lightreplacer/dogborg(src) src.modules += new /obj/item/weapon/dogborg/jaws/small(src) src.modules += new /obj/item/device/dogborg/boop_module(src) @@ -145,6 +144,6 @@ R.old_x = -16 ..() -/obj/item/weapon/robot_module/scrubpup/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) +/obj/item/weapon/robot_module/robot/scrubpup/respawn_consumable(var/mob/living/silicon/robot/R, var/amount) var/obj/item/device/lightreplacer/LR = locate() in src.modules LR.Charge(R, amount) diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index 16db4b4df44..292c8272b4c 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -41,7 +41,7 @@ . = ..() if(module) - if(module.type == /obj/item/weapon/robot_module/scrubpup)//no water reserve mechanics yet. + if(module.type == /obj/item/weapon/robot_module/robot/scrubpup)//no water reserve mechanics yet. var/turf/tile = loc if(isturf(tile)) tile.clean_blood() diff --git a/code/modules/mob/living/simple_animal/vore/carp.dm b/code/modules/mob/living/simple_animal/vore/carp.dm index 9c46207ade0..9abde1a005e 100644 --- a/code/modules/mob/living/simple_animal/vore/carp.dm +++ b/code/modules/mob/living/simple_animal/vore/carp.dm @@ -19,6 +19,9 @@ pixel_x = -16 pixel_y = -16 +/mob/living/simple_animal/hostile/carp/large/huge + icon = 'icons/mob/vore64x64.dmi' + // Activate Noms! /mob/living/simple_animal/hostile/carp/large vore_active = 1 diff --git a/code/modules/mob/living/simple_animal/vore/otie.dm b/code/modules/mob/living/simple_animal/vore/otie.dm index 8b1fd3ffbb0..b309e572116 100644 --- a/code/modules/mob/living/simple_animal/vore/otie.dm +++ b/code/modules/mob/living/simple_animal/vore/otie.dm @@ -104,9 +104,29 @@ loot_list = list(/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/suit/armor/vest/alt) vore_pounce_chance = 60 // Good boys don't do too much police brutality. - var/check_records = 1 // If true, arrests people without a record. + var/check_records = 0 // If true, arrests people without a record. var/check_arrest = 1 // If true, arrests people who are set to arrest. +/mob/living/simple_animal/otie/friendly/security/phoron + name = "mutated guard otie" + desc = "An extra rare phoron resistant version of the VARMAcorp trained snowflake guard dogs." + icon_state = "sifguard" + icon_living = "sifguard" + icon_rest = "sifguard_rest" + icon_dead = "sifguard-dead" + + melee_damage_lower = 10 + melee_damage_upper = 25 + // Lazy way of making sure this otie survives outside. + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + /mob/living/simple_animal/otie/PunchTarget() if(istype(target_mob,/mob/living/simple_animal/mouse)) return EatTarget() @@ -141,13 +161,21 @@ return found_atom ..() -/mob/living/simple_animal/otie/friendly/security/attackby(var/obj/item/O, var/mob/user) // Trade donuts for bellybrig victims. - if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/donut)) +/mob/living/simple_animal/otie/attackby(var/obj/item/O, var/mob/user) // Trade donuts for bellybrig victims. + if(istype(O, /obj/item/weapon/reagent_containers/food)) qdel(O) - user << "The guard pup accepts your offer for their catch." - for(var/I in vore_organs) - var/datum/belly/B = vore_organs[I] - B.release_all_contents() + playsound(src.loc,'sound/items/eatfood.ogg', rand(10,50), 1) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/donut) && istype(src, /mob/living/simple_animal/otie/friendly/security)) + user << "The guard pup accepts your offer for their catch." + for(var/I in vore_organs) + var/datum/belly/B = vore_organs[I] + B.release_all_contents() + return + if(prob(2)) //Small chance to get prey out from non-sec oties. + for(var/I in vore_organs) + var/datum/belly/B = vore_organs[I] + B.release_all_contents() + return return ..() diff --git a/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm b/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm index f0822c4afea..f28593d4304 100644 --- a/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm +++ b/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm @@ -59,7 +59,7 @@ icon_gib = "gibbed-a" vore_icons = SA_ICON_LIVING -/mob/living/simple_animal/hostile/alien/queen/large +/mob/living/simple_animal/hostile/alien/queen/empress vore_active = 1 icon = 'icons/mob/vore64x64.dmi' icon_state = "queen_s" diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index e3e5cf61983..df3efeee5df 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -387,6 +387,12 @@ var/color_blend_mode = ICON_MULTIPLY species_allowed = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Vasilissan", "Rapala") //This lets all races use the facial hair styles. + shaved + name = "Shaved" + icon_state = "bald" + gender = NEUTER + species_allowed = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Xenochimera", "Xenomorph Hybrid", "Vasilissan", "Rapala") //This needed to be manually defined, apparantly. + vulp_none name = "None" diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 7e09c5c3756..d6d1b725914 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -129,7 +129,7 @@ var/list/organ_cache = list() else if(owner && owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs //** Handle antibiotics and curing infections handle_antibiotics() - handle_rejection() + //handle_rejection() //VOREStation Edit. Was causing major issues. handle_germ_effects() //check if we've hit max_damage diff --git a/icons/mob/pai_vr.dmi b/icons/mob/pai_vr.dmi index 32591393918..7bbdaee11bd 100644 Binary files a/icons/mob/pai_vr.dmi and b/icons/mob/pai_vr.dmi differ diff --git a/icons/mob/vore64x32.dmi b/icons/mob/vore64x32.dmi index a0d2035f514..dfeff29d0ed 100644 Binary files a/icons/mob/vore64x32.dmi and b/icons/mob/vore64x32.dmi differ diff --git a/maps/tether/tether-01-surface.dmm b/maps/tether/tether-01-surface.dmm index c936787bd65..2aaeb3fd7e4 100644 --- a/maps/tether/tether-01-surface.dmm +++ b/maps/tether/tether-01-surface.dmm @@ -1831,7 +1831,7 @@ "aJk" = (/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) "aJl" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/blue{dir = 6},/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos/processing) "aJm" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/atmospherics/pipe/simple/visible/blue{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) -"aJn" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/closet/crate/hydroponics,/obj/item/stack/material/algae,/obj/item/stack/material/algae,/obj/item/stack/material/algae,/obj/machinery/atmospherics/pipe/simple/visible/blue{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) +"aJn" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/closet/crate/hydroponics,/obj/item/stack/material/algae,/obj/item/stack/material/algae,/obj/item/stack/material/algae,/obj/machinery/atmospherics/pipe/simple/visible/blue{dir = 4},/obj/item/stack/material/algae,/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) "aJo" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/atmospherics/pipe/simple/visible/blue{dir = 10},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) "aJp" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos/processing) "aJq" = (/obj/machinery/portable_atmospherics/canister/empty,/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) @@ -1850,7 +1850,7 @@ "aJD" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 8; start_pressure = 1215.9},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) "aJE" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/tiled/techfloor,/area/engineering/atmos/processing) "aJF" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/black{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) -"aJG" = (/obj/machinery/atmospherics/binary/algae_farm{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) +"aJG" = (/obj/machinery/atmospherics/binary/algae_farm/filled{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) "aJH" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible/blue{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) "aJI" = (/obj/machinery/portable_atmospherics/canister/empty,/obj/machinery/camera/network/engineering{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/engineering/atmos/processing) "aJJ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/turf/simulated/floor/tiled/steel_dirty/virgo3b,/area/engineering/atmos/intake) diff --git a/nano/templates/algae_farm_vr.tmpl b/nano/templates/algae_farm_vr.tmpl index 86a6357b523..be730d9d650 100644 --- a/nano/templates/algae_farm_vr.tmpl +++ b/nano/templates/algae_farm_vr.tmpl @@ -7,6 +7,13 @@ Used In File(s): \code\game\machinery\partslathe.dm {{/if}}
+
+ {{if data.usePower==2}} + {{:helper.link('Deactivate Processing', 'power', {'deactivate' : 1})}} + {{else}} + {{:helper.link('Activate Processing', 'power', {'activate' : 1})}} + {{/if}} +
Flow Rate
{{:helper.fixed(data.last_flow_rate)}} L/s