diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm index f4492c7d6f..d42cbe7f63 100644 --- a/code/controllers/subsystems/vote.dm +++ b/code/controllers/subsystems/vote.dm @@ -23,7 +23,7 @@ SUBSYSTEM_DEF(vote) if(mode) time_remaining = round((started_time + duration - world.time)/10) if(mode == VOTE_GAMEMODE && ticker.current_state >= GAME_STATE_SETTING_UP) - to_chat(world, "Gamemode vote aborted: Game has alread ystarted.") + to_chat(world, "Gamemode vote aborted: Game has already started.") reset() return if(time_remaining <= 0) diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index cd8320b571..d886a0faf1 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -1,6 +1,6 @@ /obj/machinery/biogenerator name = "biogenerator" - desc = "" + desc = "Converts plants into biomass, which can be used for fertilizer and sort-of-synthetic products." icon = 'icons/obj/biogenerator.dmi' icon_state = "biogen-stand" density = 1 @@ -50,7 +50,7 @@ return if(istype(O, /obj/item/weapon/reagent_containers/glass)) if(beaker) - to_chat(user, "]The [src] is already loaded.") + to_chat(user, "\The [src] is already loaded.") else user.remove_from_mob(O) O.loc = src @@ -104,23 +104,25 @@ if(beaker) dat += "Activate Biogenerator!
" dat += "Detach Container

" - dat += "Food
" - dat += "10 milk ([round(20/build_eff)])
" - dat += "Slab of meat ([round(50/build_eff)])
" - dat += "Nutrient
" + dat += "Food:
" + dat += "10 milk ([round(20/build_eff)]) | x5
" + dat += "10 cream ([round(20/build_eff)]) | x5
" + dat += "Slab of meat ([round(50/build_eff)]) | x5
" + dat += "Nutrient:
" dat += "E-Z-Nutrient ([round(60/build_eff)]) | x5
" dat += "Left 4 Zed ([round(120/build_eff)]) | x5
" dat += "Robust Harvest ([round(150/build_eff)]) | x5
" - dat += "Leather
" + dat += "Leather:
" dat += "Wallet ([round(100/build_eff)])
" dat += "Botanical gloves ([round(250/build_eff)])
" + dat += "Plant bag ([round(250/build_eff)])
" + dat += "Large plant bag ([round(250/build_eff)])
" dat += "Utility belt ([round(300/build_eff)])
" dat += "Leather Satchel ([round(400/build_eff)])
" dat += "Cash Bag ([round(400/build_eff)])
" dat += "Chemistry Bag ([round(400/build_eff)])
" dat += "Workboots ([round(400/build_eff)])
" dat += "Leather Shoes ([round(400/build_eff)])
" - dat += "Leather Chaps ([round(400/build_eff)])
" dat += "Leather Coat ([round(500/build_eff)])
" dat += "Leather Jacket ([round(500/build_eff)])
" @@ -165,10 +167,11 @@ processing = 1 update_icon() updateUsrDialog() - playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) + playsound(src.loc, 'sound/machines/blender.ogg', 40, 1) use_power(S * 30) sleep((S + 15) / eat_eff) processing = 0 + playsound(src.loc, 'sound/machines/biogenerator_end.ogg', 40, 1) update_icon() else menustat = "void" @@ -187,8 +190,20 @@ switch(item) if("milk") beaker.reagents.add_reagent("milk", 10) + if("milk5") + beaker.reagents.add_reagent("milk", 50) + if("cream") + beaker.reagents.add_reagent("cream", 10) + if("cream5") + beaker.reagents.add_reagent("cream", 50) if("meat") new/obj/item/weapon/reagent_containers/food/snacks/meat(loc) + if("meat5") + new/obj/item/weapon/reagent_containers/food/snacks/meat(loc) //This is ugly. + new/obj/item/weapon/reagent_containers/food/snacks/meat(loc) + new/obj/item/weapon/reagent_containers/food/snacks/meat(loc) + new/obj/item/weapon/reagent_containers/food/snacks/meat(loc) + new/obj/item/weapon/reagent_containers/food/snacks/meat(loc) if("ez") new/obj/item/weapon/reagent_containers/glass/bottle/eznutrient(loc) if("l4z") @@ -217,6 +232,10 @@ new/obj/item/weapon/storage/wallet(loc) if("gloves") new/obj/item/clothing/gloves/botanic_leather(loc) + if("plantbag") + new/obj/item/weapon/storage/bag/plants(loc) + if("plantbaglarge") + new/obj/item/weapon/storage/bag/plants/large(loc) if("tbelt") new/obj/item/weapon/storage/belt/utility(loc) if("satchel") diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 6c5817c036..cb73fe4d7a 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -15,6 +15,8 @@ var/light_power_on = 1 var/overlay_layer + clicksound = "keyboard" + /obj/machinery/computer/New() overlay_layer = layer ..() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index c103f1f39e..5f5387184d 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -112,6 +112,8 @@ Class Procs: var/uid var/panel_open = 0 var/global/gl_uid = 1 + var/clicksound // sound played on succesful interface. Just put it in the list of vars at the start. + var/clickvol = 40 // volume var/interact_offline = 0 // Can the machine be interacted with while de-powered. var/obj/item/weapon/circuitboard/circuit = null @@ -228,6 +230,7 @@ Class Procs: return attack_hand(user) /obj/machinery/attack_hand(mob/user as mob) + if(inoperable(MAINT)) return 1 if(user.lying || user.stat) @@ -244,6 +247,9 @@ Class Procs: to_chat(user, "You momentarily forget how to use [src].") return 1 + if(clicksound && istype(user, /mob/living/carbon)) + playsound(src, clicksound, clickvol) + add_fingerprint(user) return ..() diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 2c4fa65abf..9d1365290c 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -170,6 +170,10 @@ w_class = ITEMSIZE_SMALL can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown) +/obj/item/weapon/storage/bag/plants/large + name = "large plant bag" + w_class = ITEMSIZE_SMALL + max_storage_space = ITEMSIZE_COST_NORMAL * 45 // ----------------------------- // Sheet Snatcher diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index 2b10bdff4a..c2a8a40e7e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -16,7 +16,7 @@ /obj/item/clothing/head/greenbandana, /obj/item/weapon/material/minihoe, /obj/item/weapon/material/knife/machete/hatchet, - /obj/item/weapon/tool/wirecutters/clippers, + /obj/item/weapon/tool/wirecutters/clippers/trimmers, /obj/item/weapon/reagent_containers/spray/plantbgone, /obj/item/clothing/suit/storage/hooded/wintercoat/hydro, /obj/item/clothing/shoes/boots/winter/hydro) diff --git a/code/game/sound.dm b/code/game/sound.dm index d1569259a0..b9810d7915 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -135,6 +135,9 @@ if ("thunder") soundin = pick('sound/effects/thunder/thunder1.ogg', 'sound/effects/thunder/thunder2.ogg', 'sound/effects/thunder/thunder3.ogg', 'sound/effects/thunder/thunder4.ogg', 'sound/effects/thunder/thunder5.ogg', 'sound/effects/thunder/thunder6.ogg', 'sound/effects/thunder/thunder7.ogg', 'sound/effects/thunder/thunder8.ogg', 'sound/effects/thunder/thunder9.ogg', 'sound/effects/thunder/thunder10.ogg') + if ("keyboard") soundin = pick('sound/effects/keyboard/keyboard1.ogg','sound/effects/keyboard/keyboard2.ogg','sound/effects/keyboard/keyboard3.ogg', 'sound/effects/keyboard/keyboard4.ogg') + if ("button") soundin = pick('sound/machines/button1.ogg','sound/machines/button2.ogg','sound/machines/button3.ogg','sound/machines/button4.ogg') + if ("switch") soundin = pick('sound/machines/switch1.ogg','sound/machines/switch2.ogg','sound/machines/switch3.ogg','sound/machines/switch4.ogg') if ("casing_sound") soundin = pick('sound/weapons/casingfall1.ogg','sound/weapons/casingfall2.ogg','sound/weapons/casingfall3.ogg') return soundin diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index add5f8a67e..30d4e6adef 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -329,7 +329,8 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) return if(initiator) - initiator << 'sound/effects/adminhelp.ogg' + if(initiator.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping)) + initiator << 'sound/effects/adminhelp.ogg' to_chat(initiator, "- AdminHelp Rejected! -") to_chat(initiator, "Your admin help was rejected.") diff --git a/code/modules/hydroponics/trays/tray_tools.dm b/code/modules/hydroponics/trays/tray_tools.dm index c242f30bed..12582f01ed 100644 --- a/code/modules/hydroponics/trays/tray_tools.dm +++ b/code/modules/hydroponics/trays/tray_tools.dm @@ -4,6 +4,13 @@ name = "plant clippers" desc = "A tool used to take samples from plants." +/obj/item/weapon/tool/wirecutters/clippers/trimmers + name = "hedgetrimmers" + desc = "An old pair of trimmers with a pretty dull blade. You would probably have a hard time cutting anything but plants with it." + icon_state = "hedget" + item_state = "hedget" + force = 7 //One point extra than standard wire cutters. + /obj/item/device/analyzer/plant_analyzer name = "plant analyzer" icon = 'icons/obj/device.dmi' diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm index 18e7a2d316..54b83e28a4 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm @@ -45,7 +45,10 @@ var/obj/item/organ/internal/nano/refactory/refactory var/datum/modifier/healing - player_msg = "In this form, you can move a little faster, your health will regenerate as long as you have metal in you!" + var/obj/prev_left_hand + var/obj/prev_right_hand + + player_msg = "In this form, you can move a little faster, your health will regenerate as long as you have metal in you, and you can ventcrawl!" can_buckle = TRUE //Blobsurfing @@ -152,7 +155,13 @@ var/obj/item/organ/internal/O = organ O.removed() O.forceMove(drop_location()) + var/list/items = humanform.get_equipped_items() + if(prev_left_hand) items += prev_left_hand + if(prev_right_hand) items += prev_right_hand + for(var/obj/object in items) + object.forceMove(drop_location()) QDEL_NULL(humanform) //Don't leave it just sitting in nullspace + animate(src,alpha = 0,time = 2 SECONDS) sleep(2 SECONDS) qdel(src) @@ -193,6 +202,13 @@ /mob/living/simple_animal/protean_blob/DoPunch(var/atom/A) if(refactory && istype(A,/obj/item/stack/material)) var/obj/item/stack/material/S = A + var/substance = S.material.name + var/list/edible_materials = list("steel", "plasteel", "diamond", "mhydrogen") //Can't eat all materials, just useful ones. + var allowed = FALSE + for(var/material in edible_materials) + if(material == substance) allowed = TRUE + if(!allowed) + return if(refactory.add_stored_material(S.material.name,1*S.perunit) && S.use(1)) visible_message("[name] gloms over some of \the [S], absorbing it.") else @@ -201,6 +217,13 @@ /mob/living/simple_animal/protean_blob/attackby(var/obj/item/O, var/mob/user) if(refactory && istype(O,/obj/item/stack/material)) var/obj/item/stack/material/S = O + var/substance = S.material.name + var/list/edible_materials = list("steel", "plasteel", "diamond", "mhydrogen") //Can't eat all materials, just useful ones. + var allowed = FALSE + for(var/material in edible_materials) + if(material == substance) allowed = TRUE + if(!allowed) + return if(refactory.add_stored_material(S.material.name,1*S.perunit) && S.use(1)) visible_message("[name] gloms over some of \the [S], absorbing it.") else @@ -213,11 +236,13 @@ // Helpers - Unsafe, WILL perform change. /mob/living/carbon/human/proc/nano_intoblob() + handle_grasp() //It's possible to blob out before some key parts of the life loop. This results in things getting dropped at null. TODO: Fix the code so this can be done better. + remove_micros(src, src) //Living things don't fare well in roblobs. if(buckled) buckled.unbuckle_mob() if(LAZYLEN(buckled_mobs)) for(var/buckledmob in buckled_mobs) - unbuckle_mob(buckledmob, force = TRUE) + riding_datum.force_dismount(buckledmob) if(pulledby) pulledby.stop_pulling() stop_pulling() @@ -256,6 +281,9 @@ blob.transform = matrix()*size_multiplier blob.size_multiplier = size_multiplier + if(l_hand) blob.prev_left_hand = l_hand //Won't save them if dropped above, but necessary if handdrop is disabled. + if(r_hand) blob.prev_right_hand = r_hand + //Put our owner in it (don't transfer var/mind) blob.ckey = ckey temporary_form = blob @@ -281,6 +309,13 @@ //Return our blob in case someone wants it return blob +//For some reason, there's no way to force drop all the mobs grabbed. This ought to fix that. And be moved elsewhere. Call with caution, doesn't handle cycles. +/proc/remove_micros(var/src, var/mob/root) + for(var/obj/item/I in src) + remove_micros(I, root) //Recursion. I'm honestly depending on there being no containment loop, but at the cost of performance that can be fixed too. + if(istype(I, /obj/item/weapon/holder)) + root.remove_from_mob(I) + /mob/living/carbon/human/proc/nano_outofblob(var/mob/living/simple_animal/protean_blob/blob) if(!istype(blob)) return @@ -288,7 +323,7 @@ buckled.unbuckle_mob() if(LAZYLEN(buckled_mobs)) for(var/buckledmob in buckled_mobs) - unbuckle_mob(buckledmob, force = TRUE) + riding_datum.force_dismount(buckledmob) if(pulledby) pulledby.stop_pulling() stop_pulling() @@ -319,7 +354,6 @@ //Put our owner in it (don't transfer var/mind) ckey = blob.ckey temporary_form = null - Life(1) //Fix my blindness right meow //Transfer vore organs vore_selected = blob.vore_selected @@ -328,6 +362,11 @@ B.forceMove(src) B.owner = src + if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming. + if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand) + + Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right. + //Get rid of friend blob qdel(blob) diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm index 4b3b6891ad..d6f65e6f63 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm @@ -24,7 +24,7 @@ return //Organ is missing, needs restoring - if(!organs_by_name[choice]) + if(!organs_by_name[choice] || istype(organs_by_name[choice], /obj/item/organ/external/stump)) //allows limb stumps to regenerate like removed limbs. if(refactory.get_stored_material(DEFAULT_WALL_MATERIAL) < PER_LIMB_STEEL_COST) to_chat(src,"You're missing that limb, and need to store at least [PER_LIMB_STEEL_COST] steel to regenerate it.") return @@ -33,6 +33,10 @@ return if(!refactory.use_stored_material(DEFAULT_WALL_MATERIAL,PER_LIMB_STEEL_COST)) return + if(organs_by_name[choice]) + var/obj/item/organ/external/oldlimb = organs_by_name[choice] + oldlimb.removed() + qdel(oldlimb) var/mob/living/simple_animal/protean_blob/blob = nano_intoblob() active_regen = TRUE @@ -60,7 +64,7 @@ usable_manufacturers[company] = M if(!usable_manufacturers.len) return - var/manu_choice = input(src, "Which manufacturer do you wish to mimmic for this limb?", "Manufacturer for [choice]") as null|anything in usable_manufacturers + var/manu_choice = input(src, "Which manufacturer do you wish to mimic for this limb?", "Manufacturer for [choice]") as null|anything in usable_manufacturers if(!manu_choice) return //Changed mind @@ -70,13 +74,13 @@ return //Lost it meanwhile eo.robotize(manu_choice) - visible_message("[src]'s ") + visible_message("[src]'s [choice] loses its shape, then reforms.") update_icons_body() //// // Full Refactor //// -/mob/living/carbon/human/proc/nano_regenerate() +/mob/living/carbon/human/proc/nano_regenerate() //fixed the proc, it used to leave active_regen true. set name = "Ref - Whole Body" set desc = "Allows you to regrow limbs and replace organs, given you have enough materials." set category = "Abilities" @@ -97,7 +101,7 @@ to_chat(src, "You are already refactoring!") return - var/swap_not_rebuild = alert(src,"Do you want to rebuild, or reshape?","Rebuild or Reshape","Rebuild","Cancel","Reshape") + var/swap_not_rebuild = alert(src,"Do you want to rebuild, or reshape?","Rebuild or Reshape","Reshape","Cancel","Rebuild") if(swap_not_rebuild == "Cancel") return if(swap_not_rebuild == "Reshape") @@ -113,7 +117,7 @@ usable_manufacturers[company] = M if(!usable_manufacturers.len) return - var/manu_choice = input(src, "Which manufacturer do you wish to mimmic?", "Manufacturer") as null|anything in usable_manufacturers + var/manu_choice = input(src, "Which manufacturer do you wish to mimic?", "Manufacturer") as null|anything in usable_manufacturers if(!manu_choice) return //Changed mind @@ -123,7 +127,7 @@ var/obj/item/organ/external/torso = organs_by_name[BP_TORSO] to_chat(src, "Remain still while the process takes place! It will take 5 seconds.") visible_message("[src]'s form collapses into an amorphous blob of black ichor...") - + var/mob/living/simple_animal/protean_blob/blob = nano_intoblob() active_regen = TRUE if(do_after(blob,5 SECONDS)) @@ -145,13 +149,13 @@ visible_message("[src]'s form begins to shift and ripple as if made of oil...") active_regen = TRUE - nano_intoblob() - if(do_after(src,delay_length)) + var/mob/living/simple_animal/protean_blob/blob = nano_intoblob() + if(do_after(blob, delay_length, null, 0)) if(stat != DEAD && refactory) var/list/holder = refactory.materials species.create_organs(src) var/obj/item/organ/external/torso = organs_by_name[BP_TORSO] - torso.robotize(synthetic.company) + torso.robotize() //synthetic wasn't defined here. LAZYCLEARLIST(blood_DNA) LAZYCLEARLIST(feet_blood_DNA) blood_color = null @@ -162,9 +166,15 @@ log_debug("[src] protean-regen'd but lacked a refactory when done.") else new_refactory.materials = holder - to_chat(src, "Your refactoring is complete!") + to_chat(src, "Your refactoring is complete.") //Guarantees the message shows no matter how bad the timing. + to_chat(blob, "Your refactoring is complete!") + else + to_chat(src, "Your refactoring has failed.") + to_chat(blob, "Your refactoring has failed!") else - to_chat(src, "Your refactoring is interrupted!") + to_chat(src, "Your refactoring is interrupted.") + to_chat(blob, "Your refactoring is interrupted!") + active_regen = FALSE nano_outofblob() @@ -189,11 +199,19 @@ return var/obj/item/stack/material/matstack = held + var/substance = matstack.material.name + var/list/edible_materials = list("steel", "plasteel", "diamond", "mhydrogen") //Can't eat all materials, just useful ones. + var allowed = FALSE + for(var/material in edible_materials) + if(material == substance) allowed = TRUE + if(!allowed) + to_chat(src,"You can't process [substance]!") + return //Only a few things matter, the rest are best not cluttering the lists. + var/howmuch = input(src,"How much do you want to store? (0-[matstack.amount])","Select amount") as null|num if(!howmuch || matstack != get_active_hand() || howmuch > matstack.amount) return //Quietly fail - var/substance = matstack.material.name var/actually_added = refactory.add_stored_material(substance,howmuch*matstack.perunit) matstack.use(Ceiling(actually_added/matstack.perunit)) if(actually_added && actually_added < howmuch) @@ -222,7 +240,7 @@ to_chat(temporary_form,"You can only do this while not stunned.") else nano_outofblob(temporary_form) - + //Human form else if(stat) to_chat(src,"You can only do this while not stunned.") @@ -241,7 +259,7 @@ if(stat) to_chat(src,"You must be awake and standing to perform this action!") return - + var/new_species = input("Please select a species to emulate.", "Shapeshifter Body") as null|anything in playable_species if(new_species) impersonate_bodytype = new_species @@ -269,7 +287,7 @@ return var/size_factor = new_size/100 - + //Will be: -1.75 for 200->25, and 1.75 for 25->200 var/sizediff = size_factor - user.size_multiplier @@ -361,7 +379,7 @@ desc = "Rebuild or replace a single limb, assuming you have 2000 steel." icon_state = "limb" to_call = /mob/living/carbon/human/proc/nano_partswap - + /obj/effect/protean_ability/reform_body ability_name = "Ref - Whole Body" desc = "Rebuild your entire body into whatever design you want, assuming you have 10,000 metal." diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm index 05237f5742..52aad66fcc 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm @@ -21,6 +21,7 @@ health_hud_intensity = 2 num_alternate_languages = 3 species_language = LANGUAGE_SOL_COMMON + assisted_langs = list(LANGUAGE_EAL) color_mult = TRUE breath_type = null @@ -115,7 +116,7 @@ /datum/species/protean/create_organs(var/mob/living/carbon/human/H) var/obj/item/device/nif/saved_nif = H.nif if(saved_nif) - H.nif.unimplant() + H.nif.unimplant(H) //Needs reference to owner to unimplant right. H.nif.forceMove(null) ..() if(saved_nif) @@ -162,13 +163,14 @@ /datum/species/protean/handle_death(var/mob/living/carbon/human/H) to_chat(H,"You died as a Protean. Please sit out of the round for at least 30 minutes before respawning, to represent the time it would take to ship a new-you to the station.") - spawn(1) + spawn(1) //This spawn is here so that if the protean_blob calls qdel, it doesn't try to gib the humanform. if(H) H.gib() /datum/species/protean/handle_environment_special(var/mob/living/carbon/human/H) if((H.getActualBruteLoss() + H.getActualFireLoss()) > H.maxHealth*0.5 && isturf(H.loc)) //So, only if we're not a blob (we're in nullspace) or in someone (or a locker, really, but whatever) H.nano_intoblob() + return ..() //Any instakill shot runtimes since there are no organs after this. No point to not skip these checks, going to nullspace anyway. var/obj/item/organ/internal/nano/refactory/refactory = locate() in H.internal_organs if(refactory && !(refactory.status & ORGAN_DEAD)) diff --git a/code/modules/organs/subtypes/nano.dm b/code/modules/organs/subtypes/nano.dm index 39398f5909..fe23f37f85 100644 --- a/code/modules/organs/subtypes/nano.dm +++ b/code/modules/organs/subtypes/nano.dm @@ -109,9 +109,9 @@ /obj/item/organ/internal/nano/refactory/proc/use_stored_material(var/material,var/amt) if(status & ORGAN_DEAD) return 0 - + var/available = materials[material] - + //Success if(available >= amt) var/new_amt = available-amt @@ -141,12 +141,13 @@ . = ..() icon_state = "posi1" + /obj/item/organ/internal/mmi_holder/posibrain/nano/update_from_mmi() . = ..() icon = initial(icon) icon_state = "posi1" stored_mmi.icon_state = "posi1" - + stored_mmi.brainmob.languages = owner.languages // The 'out on the ground' object, not the organ holder diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 4b69151b2b..1241f036d4 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -28,6 +28,7 @@ var/tab = "home" var/analyze_data[0] flags = OPENCONTAINER + clicksound = "button" /obj/machinery/chem_master/New() ..() diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm index e6bced87c4..a32f83f794 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm @@ -48,6 +48,12 @@ if(H.species.gets_food_nutrition == 0) H.nutrition += removed is_vampire = 1 //VOREStation Edit END + if(alien == IS_SLIME) // Treat it like nutriment for the jello, but not equivalent. + M.heal_organ_damage(0.2 * removed * volume_mod, 0) // More 'effective' blood means more usable material. + M.nutrition += 20 * removed * volume_mod + M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed) + M.adjustToxLoss(removed / 2) // Still has some water in the form of plasma. + return if(effective_dose > 5) if(is_vampire == 0) //VOREStation Edit. @@ -68,6 +74,9 @@ var/mob/living/carbon/human/H = M if(H.isSynthetic()) return + if(alien == IS_SLIME) + affect_ingest(M, alien, removed) + return if(data && data["virus2"]) var/list/vlist = data["virus2"] if(vlist.len) @@ -79,6 +88,9 @@ M.antibodies |= data["antibodies"] /datum/reagent/blood/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(alien == IS_SLIME) //They don't have blood, so it seems weird that they would instantly 'process' the chemical like another species does. + affect_ingest(M, alien, removed) + return M.inject_blood(src, volume * volume_mod) remove_self(volume) diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index e786751e5d..4c8e97850d 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -531,6 +531,13 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY +/datum/sprite_accessory/wing/feathered_medium + name = "medium feathered wings, colorable" // Keekenox made these feathery things with a little bit more shape to them than the other wings. They are medium sized wing boys. + desc = "" + icon_state = "feathered3" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + /datum/sprite_accessory/wing/bat_black name = "bat wings, black" desc = "" diff --git a/html/changelogs/Kates - Hedgetrimmers.yml b/html/changelogs/Kates - Hedgetrimmers.yml new file mode 100644 index 0000000000..142f879e40 --- /dev/null +++ b/html/changelogs/Kates - Hedgetrimmers.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: LBnesquik + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Remplaced the plant clippers with a reskinned pair of hedgetrimmers." diff --git a/html/changelogs/Lbnesquik - Botany improvements #5662.yml b/html/changelogs/Lbnesquik - Botany improvements #5662.yml new file mode 100644 index 0000000000..980a849850 --- /dev/null +++ b/html/changelogs/Lbnesquik - Botany improvements #5662.yml @@ -0,0 +1,44 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Lbnesquik + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "General biogenerator improvements:" + - rscadd: "Added feedback noise to the processing." + - rscadd: "Allow for cream dispensing." + - rscadd: "Allow for plant bag creation." + - rscadd: "Allow for 5 units of meat to be dispensed at once." + - rscadd: "Allow for 5 units of liquids to be dispensed at once totalling 50u." + - rscadd: "Add and allow the creation of larger plant bags for easier ferrying of plants.." + - rscadd: "Add a description to the machine itself." + - bugfix: "Fix a typo." diff --git a/html/changelogs/Mechoid-PromBlud.yml b/html/changelogs/Mechoid-PromBlud.yml new file mode 100644 index 0000000000..e08778ff4d --- /dev/null +++ b/html/changelogs/Mechoid-PromBlud.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Mechoid + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Prometheans are no longer murdered by blood, and instead process it like a weak nutrient. Will slow the regeneration of toxins due to water content." diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index c02abf60c8..41d2fbd305 100644 Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index 0e16db099e..d24841e6c1 100644 Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ diff --git a/icons/mob/vore/wings_vr.dmi b/icons/mob/vore/wings_vr.dmi index f4241e295c..42d2cf426d 100644 Binary files a/icons/mob/vore/wings_vr.dmi and b/icons/mob/vore/wings_vr.dmi differ diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index b25a6cbc56..a7d05818bf 100644 Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ diff --git a/sound/machines/biogenerator_end.ogg b/sound/machines/biogenerator_end.ogg new file mode 100644 index 0000000000..91ec8313fe Binary files /dev/null and b/sound/machines/biogenerator_end.ogg differ diff --git a/sound/machines/button1.ogg b/sound/machines/button1.ogg new file mode 100644 index 0000000000..3499e2d172 Binary files /dev/null and b/sound/machines/button1.ogg differ diff --git a/sound/machines/button2.ogg b/sound/machines/button2.ogg new file mode 100644 index 0000000000..83970986e3 Binary files /dev/null and b/sound/machines/button2.ogg differ diff --git a/sound/machines/button3.ogg b/sound/machines/button3.ogg new file mode 100644 index 0000000000..a28da269ad Binary files /dev/null and b/sound/machines/button3.ogg differ diff --git a/sound/machines/button4.ogg b/sound/machines/button4.ogg new file mode 100644 index 0000000000..9fceed1611 Binary files /dev/null and b/sound/machines/button4.ogg differ diff --git a/sound/machines/switch1.ogg b/sound/machines/switch1.ogg new file mode 100644 index 0000000000..96f2a0e19c Binary files /dev/null and b/sound/machines/switch1.ogg differ diff --git a/sound/machines/switch2.ogg b/sound/machines/switch2.ogg new file mode 100644 index 0000000000..346ab69a32 Binary files /dev/null and b/sound/machines/switch2.ogg differ diff --git a/sound/machines/switch3.ogg b/sound/machines/switch3.ogg new file mode 100644 index 0000000000..1529b0009a Binary files /dev/null and b/sound/machines/switch3.ogg differ diff --git a/sound/machines/switch4.ogg b/sound/machines/switch4.ogg new file mode 100644 index 0000000000..cd51d4deb0 Binary files /dev/null and b/sound/machines/switch4.ogg differ