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}}