mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-31 07:58:22 +01:00
Merge branch 'master' into kk-headsets
This commit is contained in:
@@ -11,8 +11,6 @@
|
||||
/mob/living/carbon/Life()
|
||||
..()
|
||||
|
||||
handle_viruses()
|
||||
|
||||
// Increase germ_level regularly
|
||||
if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level
|
||||
germ_level++
|
||||
@@ -398,7 +396,10 @@
|
||||
return
|
||||
..()
|
||||
if(istype(A, /mob/living/carbon) && prob(10))
|
||||
spread_disease_to(A, "Contact")
|
||||
var/mob/living/carbon/human/H = A
|
||||
for(var/datum/disease/D in GetViruses())
|
||||
if(D.spread_flags & CONTACT_GENERAL)
|
||||
H.ContractDisease(D)
|
||||
|
||||
/mob/living/carbon/cannot_use_vents()
|
||||
return
|
||||
@@ -542,3 +543,12 @@
|
||||
if(allergen_type in species.food_preference)
|
||||
return species.food_preference_bonus
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/handle_diseases()
|
||||
for(var/thing in GetViruses())
|
||||
var/datum/disease/D = thing
|
||||
if(prob(D.infectivity))
|
||||
D.spread()
|
||||
|
||||
if(stat != DEAD || D.allow_dead)
|
||||
D.stage_act()
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
blocks_emissive = EMISSIVE_BLOCK_UNIQUE // BLEH, this could be improved for transparent species and stuff! And blocks glowing eyes?!
|
||||
var/datum/species/species //Contains icon generation and language information, set during New().
|
||||
var/list/stomach_contents = list()
|
||||
var/list/datum/disease2/disease/virus2 = list()
|
||||
var/list/antibodies = list()
|
||||
var/last_eating = 0 //Not sure what this does... I found it hidden in food.dm
|
||||
|
||||
@@ -29,4 +28,4 @@
|
||||
//these two help govern taste. The first is the last time a taste message was shown to the plaer.
|
||||
//the second is the message in question.
|
||||
var/last_taste_time = 0
|
||||
var/last_taste_text = ""
|
||||
var/last_taste_text = ""
|
||||
|
||||
@@ -1062,10 +1062,6 @@
|
||||
sync_organ_dna()
|
||||
// end vorestation addition
|
||||
|
||||
for (var/ID in virus2)
|
||||
var/datum/disease2/disease/V = virus2[ID]
|
||||
V.cure(src)
|
||||
|
||||
losebreath = 0
|
||||
|
||||
..()
|
||||
|
||||
@@ -44,6 +44,17 @@
|
||||
if(!temp || !temp.is_usable())
|
||||
to_chat(H, span_warning("You can't use your hand."))
|
||||
return
|
||||
|
||||
for(var/thing in GetViruses())
|
||||
var/datum/disease/D = thing
|
||||
if(D.IsSpreadByTouch())
|
||||
H.ContractDisease(D)
|
||||
|
||||
for(var/thing in H.GetViruses())
|
||||
var/datum/disease/D = thing
|
||||
if(D.IsSpreadByTouch())
|
||||
ContractDisease(D)
|
||||
|
||||
if(H.lying)
|
||||
return
|
||||
M.break_cloak()
|
||||
@@ -65,8 +76,9 @@
|
||||
return FALSE
|
||||
|
||||
if(istype(M,/mob/living/carbon))
|
||||
var/mob/living/carbon/C = M
|
||||
C.spread_disease_to(src, "Contact")
|
||||
for(var/datum/disease/D in M.GetViruses())
|
||||
if(D.spread_flags & CONTACT_HANDS)
|
||||
ContractDisease(D)
|
||||
|
||||
switch(M.a_intent)
|
||||
if(I_HELP)
|
||||
|
||||
@@ -504,9 +504,12 @@
|
||||
/mob/living/carbon/human/handle_post_breath(datum/gas_mixture/breath)
|
||||
..()
|
||||
//spread some viruses while we are at it
|
||||
if(breath && virus2.len > 0 && prob(10))
|
||||
for(var/mob/living/carbon/M in view(1,src))
|
||||
src.spread_disease_to(M)
|
||||
if(breath && !isnull(viruses) && prob(10))
|
||||
for(var/datum/disease/D in GetViruses())
|
||||
if((D.spread_flags & SPECIAL) || (D.spread_flags & NON_CONTAGIOUS))
|
||||
continue
|
||||
for(var/mob/living/carbon/M in view(1,src))
|
||||
ContractDisease(D)
|
||||
|
||||
|
||||
/mob/living/carbon/human/get_breath_from_internal(volume_needed=BREATH_VOLUME)
|
||||
@@ -2031,8 +2034,8 @@
|
||||
|
||||
if (BITTEST(hud_updateflag, STATUS_HUD))
|
||||
var/foundVirus = 0
|
||||
for (var/ID in virus2)
|
||||
if (ID in virusDB)
|
||||
for (var/datum/disease/D in GetViruses())
|
||||
if(D.discovered)
|
||||
foundVirus = 1
|
||||
break
|
||||
|
||||
@@ -2054,8 +2057,10 @@
|
||||
holder2.icon_state = "hudbrainworm"
|
||||
else
|
||||
holder.icon_state = "hudhealthy"
|
||||
if(virus2.len)
|
||||
holder2.icon_state = "hudill"
|
||||
if(viruses.len)
|
||||
for(var/datum/disease/D in GetViruses())
|
||||
if(D.discovered)
|
||||
holder2.icon_state = "hudill"
|
||||
else
|
||||
holder2.icon_state = "hudhealthy"
|
||||
if(block_hud)
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
/mob/living/carbon/proc/handle_viruses()
|
||||
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
|
||||
if(bodytemperature > 406)
|
||||
for (var/ID in virus2)
|
||||
var/datum/disease2/disease/V = virus2[ID]
|
||||
V.cure(src)
|
||||
|
||||
if(life_tick % 3) //don't spam checks over all objects in view every tick.
|
||||
for(var/obj/effect/decal/cleanable/O in view(1,src))
|
||||
if(istype(O,/obj/effect/decal/cleanable/blood))
|
||||
var/obj/effect/decal/cleanable/blood/B = O
|
||||
if(B.virus2.len)
|
||||
for (var/ID in B.virus2)
|
||||
var/datum/disease2/disease/V = B.virus2[ID]
|
||||
infect_virus2(src,V)
|
||||
|
||||
else if(istype(O,/obj/effect/decal/cleanable/mucus))
|
||||
var/obj/effect/decal/cleanable/mucus/M = O
|
||||
if(M.virus2.len)
|
||||
for (var/ID in M.virus2)
|
||||
var/datum/disease2/disease/V = M.virus2[ID]
|
||||
infect_virus2(src,V)
|
||||
|
||||
else if(istype(O,/obj/effect/decal/cleanable/vomit))
|
||||
var/obj/effect/decal/cleanable/vomit/Vom = O
|
||||
if(Vom.virus2.len)
|
||||
for (var/ID in Vom.virus2)
|
||||
var/datum/disease2/disease/V = Vom.virus2[ID]
|
||||
infect_virus2(src,V)
|
||||
|
||||
if(virus2.len)
|
||||
for (var/ID in virus2)
|
||||
var/datum/disease2/disease/V = virus2[ID]
|
||||
if(isnull(V)) // Trying to figure out a runtime error that keeps repeating
|
||||
CRASH("virus2 nulled before calling activate()")
|
||||
else
|
||||
V.activate(src)
|
||||
// activate may have deleted the virus
|
||||
if(!V) continue
|
||||
|
||||
// check if we're immune
|
||||
var/list/common_antibodies = V.antigen & src.antibodies
|
||||
if(common_antibodies.len)
|
||||
V.dead = 1
|
||||
|
||||
return
|
||||
@@ -1,10 +1,28 @@
|
||||
/mob/living
|
||||
var/datum/language/default_language
|
||||
|
||||
/mob/living/verb/set_default_language(language as null|anything in languages)
|
||||
/mob/living/verb/set_default_language()
|
||||
set name = "Set Default Language"
|
||||
set category = "IC.Settings"
|
||||
|
||||
var/language = tgui_input_list(usr, "Select your default language", "Available languages", languages)
|
||||
|
||||
apply_default_language(language)
|
||||
|
||||
// Silicons can't neccessarily speak everything in their languages list
|
||||
/mob/living/silicon/set_default_language()
|
||||
var/language = tgui_input_list(usr, "Select your default language", "Available languages", speech_synthesizer_langs)
|
||||
// Silicons have no species language usually. So let's default them to GALCOM
|
||||
if(!language)
|
||||
to_chat(src, span_notice("You will now speak your standard default language, common, if you do not specify a language when speaking."))
|
||||
for(var/datum/language/lang in speech_synthesizer_langs)
|
||||
if(lang.name == LANGUAGE_GALCOM)
|
||||
default_language = lang
|
||||
break
|
||||
return
|
||||
apply_default_language(language)
|
||||
|
||||
/mob/living/proc/apply_default_language(var/language)
|
||||
if (only_species_language && language != GLOB.all_languages[src.species_language])
|
||||
to_chat(src, span_notice("You can only speak your species language, [src.species_language]."))
|
||||
return 0
|
||||
@@ -22,10 +40,6 @@
|
||||
to_chat(src, span_notice("You will now speak whatever your standard default language is if you do not specify one when speaking."))
|
||||
default_language = language
|
||||
|
||||
// Silicons can't neccessarily speak everything in their languages list
|
||||
/mob/living/silicon/set_default_language(language as null|anything in speech_synthesizer_langs)
|
||||
..()
|
||||
|
||||
/mob/living/verb/check_default_language()
|
||||
set name = "Check Default Language"
|
||||
set category = "IC.Game"
|
||||
|
||||
@@ -51,6 +51,10 @@
|
||||
//Chemicals in the body, this is moved over here so that blood can be added after death
|
||||
handle_chemicals_in_body()
|
||||
|
||||
// Handle viruses - Dead or not!
|
||||
if(LAZYLEN(viruses))
|
||||
handle_diseases()
|
||||
|
||||
//Handle temperature/pressure differences between body and environment
|
||||
if(environment)
|
||||
handle_environment(environment)
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
/mob/living/simple_mob/vore/aggressive/macrophage
|
||||
name = "Germ"
|
||||
desc = "A giant virus!"
|
||||
icon = 'icons/mob/macrophage.dmi'
|
||||
icon_state = "macrophage-1"
|
||||
|
||||
faction = FACTION_MACROBACTERIA
|
||||
maxHealth = 60
|
||||
health = 60
|
||||
|
||||
var/datum/disease/base_disease = null
|
||||
var/list/infections = list()
|
||||
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 5
|
||||
grab_resist = 100
|
||||
see_in_dark = 8
|
||||
|
||||
response_help = "shoos"
|
||||
response_disarm = "swats away"
|
||||
response_harm = "squashes"
|
||||
attacktext = list("squashed")
|
||||
friendly = list("shoos", "rubs")
|
||||
|
||||
vore_bump_chance = "attempts to absorb"
|
||||
|
||||
vore_active = TRUE
|
||||
vore_capacity = 1
|
||||
|
||||
can_be_drop_prey = FALSE
|
||||
allow_mind_transfer = TRUE
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/macrophage/green
|
||||
icon_state = "macrophage-2"
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/macrophage/pink
|
||||
icon_state = "macrophage-3"
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/macrophage/blue
|
||||
icon_state = "macrophage-4"
|
||||
|
||||
/obj/belly/macrophage
|
||||
name = "capsid"
|
||||
fancy_vore = TRUE
|
||||
contamination_color = "green"
|
||||
vore_verb = "absorb"
|
||||
escapable = TRUE
|
||||
escapable = 5
|
||||
desc = "In an attempt to get away from the giant virus, it's oversized envelope proteins dragged you right past it's matrix, encapsulating you deep inside it's capsid... The strange walls kneading and keeping you tight along within it's nucleoprotein."
|
||||
belly_fullscreen = "VBO_gematically_angular"
|
||||
belly_fullscreen_color = "#87d8d8"
|
||||
digest_mode = DM_ABSORB
|
||||
affects_vore_sprites = FALSE
|
||||
|
||||
/mob/living/simple_mob/vore/aggressive/macrophage/init_vore()
|
||||
|
||||
if(LAZYLEN(vore_organs))
|
||||
return TRUE
|
||||
|
||||
var/obj/belly/B = new /obj/belly/macrophage(src)
|
||||
vore_selected = B
|
||||
@@ -239,3 +239,6 @@
|
||||
var/list/list/misc_tabs = list()
|
||||
|
||||
var/list/datum/action/actions
|
||||
|
||||
var/list/viruses
|
||||
var/list/resistances
|
||||
|
||||
Reference in New Issue
Block a user