Merge branch 'master' into kk-headsets

This commit is contained in:
Killian
2024-11-05 11:53:33 +00:00
committed by GitHub
117 changed files with 4219 additions and 2913 deletions
+13 -3
View File
@@ -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)
+12 -7
View File
@@ -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)
-48
View File
@@ -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
+19 -5
View File
@@ -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"
+4
View File
@@ -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
+3
View File
@@ -239,3 +239,6 @@
var/list/list/misc_tabs = list()
var/list/datum/action/actions
var/list/viruses
var/list/resistances