diff --git a/.gitignore b/.gitignore index 95f7ad24fa6..9d2b3ae5aa1 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,9 @@ sql/test_db *.code-workspace .history +# git/kdiff4 +*.orig + # swap [._]*.s[a-v][a-z] [._]*.sw[a-p] @@ -52,4 +55,4 @@ lib/*.so __pycache__ # Running OpenDream locally -nebula.json \ No newline at end of file +nebula.json diff --git a/code/__defines/damage_organs.dm b/code/__defines/damage_organs.dm index 3b786a9c2c9..4c300aeeec5 100644 --- a/code/__defines/damage_organs.dm +++ b/code/__defines/damage_organs.dm @@ -12,6 +12,7 @@ #define PIERCE "pierce" #define LASER "laser" #define SHATTER "shatter" +#define CHARRED "charred" #define STUN "stun" #define WEAKEN "weaken" diff --git a/code/__defines/dna.dm b/code/__defines/dna.dm deleted file mode 100644 index d8b93e20e89..00000000000 --- a/code/__defines/dna.dm +++ /dev/null @@ -1,65 +0,0 @@ -// Bitflags for mutations. -#define STRUCDNASIZE 27 -#define UNIDNASIZE 13 - -// Generic mutations: -#define MUTATION_COLD_RESISTANCE 1 -#define MUTATION_XRAY 2 -#define MUTATION_CLUMSY 3 -#define MUTATION_HUSK 4 -#define MUTATION_SPACERES 5 // Can't be harmed via pressure damage. - -// Other Mutations: -#define mNobreath 100 // No need to breathe. -#define mRemote 101 // Remote viewing. -#define mRegen 102 // Health regeneration. -#define mRun 103 // No slowdown. -#define mRemotetalk 104 // Remote talking. -#define mMorph 105 // Hanging appearance. -#define mBlend 106 // Nothing. (seriously nothing) -#define mHallucination 107 // Hallucinations. -#define mFingerprints 108 // No fingerprints. -#define mShock 109 // Insulated hands. - -// disabilities -#define NEARSIGHTED BITFLAG(0) -#define EPILEPSY BITFLAG(1) -#define COUGHING BITFLAG(2) -#define TOURETTES BITFLAG(3) -#define NERVOUS BITFLAG(4) - -// sdisabilities -#define BLINDED BITFLAG(0) -#define MUTED BITFLAG(1) -#define DEAFENED BITFLAG(2) - -// The way blocks are handled badly needs a rewrite, this is horrible. -// Too much of a project to handle at the moment, TODO for later. -var/global/BLINDBLOCK = 0 -var/global/DEAFBLOCK = 0 -var/global/TELEBLOCK = 0 -var/global/FIREBLOCK = 0 -var/global/XRAYBLOCK = 0 -var/global/CLUMSYBLOCK = 0 -var/global/FAKEBLOCK = 0 -var/global/COUGHBLOCK = 0 -var/global/GLASSESBLOCK = 0 -var/global/TWITCHBLOCK = 0 -var/global/NERVOUSBLOCK = 0 -var/global/MONKEYBLOCK = STRUCDNASIZE - -var/global/BLOCKADD = 0 -var/global/DIFFMUT = 0 - -var/global/HEADACHEBLOCK = 0 -var/global/NOBREATHBLOCK = 0 -var/global/REMOTEVIEWBLOCK = 0 -var/global/REGENERATEBLOCK = 0 -var/global/INCREASERUNBLOCK = 0 -var/global/REMOTETALKBLOCK = 0 -var/global/MORPHBLOCK = 0 -var/global/BLENDBLOCK = 0 -var/global/HALLUCINATIONBLOCK = 0 -var/global/NOPRINTSBLOCK = 0 -var/global/SHOCKIMMUNITYBLOCK = 0 -var/global/SMALLSIZEBLOCK = 0 diff --git a/code/__defines/genetics.dm b/code/__defines/genetics.dm new file mode 100644 index 00000000000..9744c4407e9 --- /dev/null +++ b/code/__defines/genetics.dm @@ -0,0 +1,21 @@ +#define GENE_COND_COLD_RESISTANCE /decl/genetic_condition/superpower/cold_resist +#define GENE_COND_XRAY /decl/genetic_condition/superpower/xray +#define GENE_COND_SPACE_RESISTANCE /decl/genetic_condition/superpower/space_resist +#define GENE_COND_NO_BREATH /decl/genetic_condition/superpower/no_breath +#define GENE_COND_REMOTE_TALK /decl/genetic_condition/superpower/remotetalk +#define GENE_COND_RUNNING /decl/genetic_condition/superpower/running +#define GENE_COND_REMOTE_VIEW /decl/genetic_condition/superpower/remoteview +#define GENE_COND_SHAPESHIFTER /decl/genetic_condition/superpower/morph +#define GENE_COND_NO_FINGERPRINTS /decl/genetic_condition/superpower/noprints + +#define GENE_COND_CLUMSY /decl/genetic_condition/disability/clumsy +#define GENE_COND_NEARSIGHTED /decl/genetic_condition/disability/nearsighted +#define GENE_COND_EPILEPSY /decl/genetic_condition/disability/epilepsy +#define GENE_COND_COUGHING /decl/genetic_condition/disability/coughing +#define GENE_COND_TOURETTES /decl/genetic_condition/disability/tourettes +#define GENE_COND_NERVOUS /decl/genetic_condition/disability/nervous +#define GENE_COND_BLINDED /decl/genetic_condition/disability/blinded +#define GENE_COND_MUTED /decl/genetic_condition/disability/muted +#define GENE_COND_DEAFENED /decl/genetic_condition/disability/deafened + +#define GENE_COND_HUSK /decl/genetic_condition/husk diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 6bee2fa48f8..4ede3dbaa6b 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -64,18 +64,17 @@ #define ROBOT_NOTIFICATION_MODULE_RESET 4 // Appearance change flags -#define APPEARANCE_UPDATE_DNA BITFLAG(0) -#define APPEARANCE_RACE (BITFLAG(1)|APPEARANCE_UPDATE_DNA) -#define APPEARANCE_GENDER BITFLAG(2) -#define APPEARANCE_BODY (BITFLAG(3)|APPEARANCE_UPDATE_DNA) -#define APPEARANCE_SKIN BITFLAG(4) -#define APPEARANCE_HAIR BITFLAG(5) -#define APPEARANCE_HAIR_COLOR BITFLAG(6) -#define APPEARANCE_FACIAL_HAIR BITFLAG(7) -#define APPEARANCE_FACIAL_HAIR_COLOR BITFLAG(8) -#define APPEARANCE_EYE_COLOR BITFLAG(9) +#define APPEARANCE_RACE BITFLAG(0) +#define APPEARANCE_GENDER BITFLAG(1) +#define APPEARANCE_BODY BITFLAG(2) +#define APPEARANCE_SKIN BITFLAG(3) +#define APPEARANCE_HAIR BITFLAG(4) +#define APPEARANCE_HAIR_COLOR BITFLAG(5) +#define APPEARANCE_FACIAL_HAIR BITFLAG(6) +#define APPEARANCE_FACIAL_HAIR_COLOR BITFLAG(7) +#define APPEARANCE_EYE_COLOR BITFLAG(8) #define APPEARANCE_ALL_HAIR (APPEARANCE_HAIR|APPEARANCE_HAIR_COLOR|APPEARANCE_FACIAL_HAIR|APPEARANCE_FACIAL_HAIR_COLOR) -#define APPEARANCE_ALL (APPEARANCE_UPDATE_DNA|APPEARANCE_RACE|APPEARANCE_GENDER|APPEARANCE_BODY|APPEARANCE_SKIN|APPEARANCE_EYE_COLOR|APPEARANCE_ALL_HAIR) +#define APPEARANCE_ALL (APPEARANCE_RACE|APPEARANCE_GENDER|APPEARANCE_BODY|APPEARANCE_SKIN|APPEARANCE_EYE_COLOR|APPEARANCE_ALL_HAIR) // Click cooldown #define DEFAULT_ATTACK_COOLDOWN 8 //Default timeout for aggressive actions @@ -324,7 +323,7 @@ var/global/list/dexterity_levels = list( "[DEXTERITY_BASE]" ) -// used in /mob/living/carbon/human/can_inject, and by various callers of that proc +// used in /mob/living/human/can_inject, and by various callers of that proc #define CAN_INJECT 1 #define INJECTION_PORT 2 #define INJECTION_PORT_DELAY 3 SECONDS // used by injectors to apply delay due to searching for a port on the injectee's suit @@ -348,7 +347,7 @@ var/global/list/dexterity_levels = list( #define NEUTER_ANIMATE "animate singular neutral" // Equipment Overlays Indices // -#define HO_MUTATIONS_LAYER 1 +#define HO_CONDITION_LAYER 1 #define HO_SKIN_LAYER 2 #define HO_DAMAGE_LAYER 3 #define HO_SURGERY_LAYER 4 //bs12 specific. diff --git a/code/_global_vars/lists/names.dm b/code/_global_vars/lists/names.dm index c65ece1eadf..efb1b85ba2b 100644 --- a/code/_global_vars/lists/names.dm +++ b/code/_global_vars/lists/names.dm @@ -3,8 +3,6 @@ var/global/list/ai_names = file2list("config/names/ai.txt") var/global/list/wizard_first = file2list("config/names/wizardfirst.txt") var/global/list/wizard_second = file2list("config/names/wizardsecond.txt") -var/global/list/ninja_titles = file2list("config/names/ninjatitle.txt") -var/global/list/ninja_names = file2list("config/names/ninjaname.txt") var/global/list/verbs = file2list("config/names/verbs.txt") var/global/list/adjectives = file2list("config/names/adjectives.txt") diff --git a/code/_global_vars/lists/objects.dm b/code/_global_vars/lists/objects.dm index c050b547abf..f6e27d7c419 100644 --- a/code/_global_vars/lists/objects.dm +++ b/code/_global_vars/lists/objects.dm @@ -5,7 +5,6 @@ var/global/list/hud_icon_reference = list() var/global/list/listening_objects = list() // List of objects that need to be able to hear, used to avoid recursive searching through contents. var/global/list/global_map = list() -var/global/host = null //only here until check @ code\modules\ghosttrap\trap.dm:112 is fixed var/global/datum/universal_state/universe = new /// Vowels. diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 282bd3e4e52..f3379f84c52 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -59,7 +59,7 @@ var/global/list/string_slot_flags = list( mannequins_ = new() . = mannequins_[ckey] if(!.) - . = new /mob/living/carbon/human/dummy/mannequin() + . = new /mob/living/human/dummy/mannequin() mannequins_[ckey] = . /hook/global_init/proc/makeDatumRefLists() diff --git a/code/_helpers/medical_scans.dm b/code/_helpers/medical_scans.dm index a0e904409d6..c48ff1b6028 100644 --- a/code/_helpers/medical_scans.dm +++ b/code/_helpers/medical_scans.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/human/proc/get_raw_medical_data(var/tag = FALSE) - var/mob/living/carbon/human/H = src +/mob/living/human/proc/get_raw_medical_data(var/tag = FALSE) + var/mob/living/human/H = src var/list/scan = list() scan["name"] = H.name @@ -88,9 +88,9 @@ for(var/organ_name in root_bodytype.has_organ) if(!GET_INTERNAL_ORGAN(H, organ_name)) scan["missing_organs"] += organ_name - if(H.sdisabilities & BLINDED) + if(H.has_genetic_condition(GENE_COND_BLINDED)) scan["blind"] = TRUE - if(H.sdisabilities & NEARSIGHTED) + if(H.has_genetic_condition(GENE_COND_NEARSIGHTED)) scan["nearsight"] = TRUE return scan diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index af53fcc142a..2be61d45948 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -209,7 +209,7 @@ continue //They need a brain! if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(H.should_have_organ(BP_BRAIN) && !H.has_brain()) continue if(M.ckey == find_key) diff --git a/code/_macros.dm b/code/_macros.dm index 8acdf68fb99..9d2994b3eec 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -32,7 +32,7 @@ #define isEye(A) istype(A, /mob/observer/eye) -#define ishuman(A) istype(A, /mob/living/carbon/human) +#define ishuman(A) istype(A, /mob/living/human) #define isitem(A) istype(A, /obj/item) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index e95ae53482f..a4fb7dab7ff 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human +/mob/living/human hud_used = /datum/hud/human /datum/hud/human/FinalizeInstantiation() @@ -7,7 +7,7 @@ var/ui_color = get_ui_color() var/ui_alpha = get_ui_alpha() - var/mob/living/carbon/human/target = mymob + var/mob/living/human/target = mymob var/datum/hud_data/hud_data = istype(target?.species?.species_hud) ? target.species.species_hud : new hotkeybuttons = list() //These can be disabled for hotkey usersx @@ -101,7 +101,7 @@ ..() -/mob/living/carbon/human/verb/toggle_hotkey_verbs() +/mob/living/human/verb/toggle_hotkey_verbs() set category = "OOC" set name = "Toggle hotkey buttons" set desc = "This disables or enables the user interface buttons which can be used with hotkeys." diff --git a/code/_onclick/hud/screen/screen_attack_selector.dm b/code/_onclick/hud/screen/screen_attack_selector.dm index 5aa2c0dbbbd..ea27e11ca3e 100644 --- a/code/_onclick/hud/screen/screen_attack_selector.dm +++ b/code/_onclick/hud/screen/screen_attack_selector.dm @@ -4,14 +4,14 @@ screen_loc = ui_attack_selector /obj/screen/default_attack_selector/Destroy() - var/mob/living/carbon/human/owner = owner_ref?.resolve() + var/mob/living/human/owner = owner_ref?.resolve() if(istype(owner) && owner.attack_selector == src) owner.attack_selector = null . = ..() /obj/screen/default_attack_selector/handle_click(mob/user, params) - var/mob/living/carbon/human/owner = owner_ref?.resolve() + var/mob/living/human/owner = owner_ref?.resolve() if(user != owner) return FALSE @@ -28,6 +28,6 @@ return TRUE /obj/screen/default_attack_selector/on_update_icon() - var/mob/living/carbon/human/owner = owner_ref?.resolve() + var/mob/living/human/owner = owner_ref?.resolve() var/decl/natural_attack/attack = istype(owner) && owner.default_attack icon_state = attack?.selector_icon_state || "attack_none" diff --git a/code/_onclick/hud/screen/screen_equip.dm b/code/_onclick/hud/screen/screen_equip.dm index 49386fa267f..997fe5683bc 100644 --- a/code/_onclick/hud/screen/screen_equip.dm +++ b/code/_onclick/hud/screen/screen_equip.dm @@ -4,5 +4,5 @@ /obj/screen/equip/handle_click(mob/user, params) if(ishuman(usr)) - var/mob/living/carbon/human/H = usr + var/mob/living/human/H = usr H.quick_equip() diff --git a/code/_onclick/hud/screen/screen_setup.dm b/code/_onclick/hud/screen/screen_setup.dm index ebd2975ffba..d0159e2aff2 100644 --- a/code/_onclick/hud/screen/screen_setup.dm +++ b/code/_onclick/hud/screen/screen_setup.dm @@ -20,7 +20,7 @@ /obj/screen/setup_preview/bg/Click(location, control, params) if(pref) pref.bgstate = next_in_list(pref.bgstate, pref.bgstate_options) - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(pref.client_ckey) + var/mob/living/human/dummy/mannequin/mannequin = get_mannequin(pref.client_ckey) if(mannequin) pref.update_character_previews(mannequin) return ..() diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index d95f4cc1689..c99039b23e7 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -61,7 +61,7 @@ avoid code duplication. This includes items that may sometimes act as a standard return TRUE return I.use_on_mob(src, user) -/mob/living/carbon/human/attackby(obj/item/I, mob/user) +/mob/living/human/attackby(obj/item/I, mob/user) . = ..() if(.) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 2fb36304724..7965251ab03 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -40,10 +40,10 @@ return FALSE -/mob/living/carbon/human/RestrainedClickOn(var/atom/A) +/mob/living/human/RestrainedClickOn(var/atom/A) return -/mob/living/carbon/human/RangedAttack(var/atom/A, var/params) +/mob/living/human/RangedAttack(var/atom/A, var/params) //Climbing up open spaces if(isturf(loc) && bound_overlay && !is_physically_disabled() && istype(A) && A.can_climb_from_below(src)) return climb_up(A) diff --git a/code/_onclick/rig.dm b/code/_onclick/rig.dm index 8dd8799e561..9c1802edd7a 100644 --- a/code/_onclick/rig.dm +++ b/code/_onclick/rig.dm @@ -25,7 +25,7 @@ /mob/living/proc/can_use_rig() return 0 -/mob/living/carbon/human/can_use_rig() +/mob/living/human/can_use_rig() return 1 /mob/living/silicon/ai/can_use_rig() diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm index 95e21f789f1..f807f5b88db 100644 --- a/code/controllers/hooks-defs.dm +++ b/code/controllers/hooks-defs.dm @@ -37,14 +37,14 @@ /** * Death hook. * Called in death.dm when someone dies. - * Parameters: var/mob/living/carbon/human, var/gibbed + * Parameters: var/mob/living/human, var/gibbed */ /hook/death /** * Cloning hook. * Called in cloning.dm when someone is brought back by the wonders of modern science. - * Parameters: var/mob/living/carbon/human + * Parameters: var/mob/living/human */ /hook/clone diff --git a/code/controllers/subsystems/initialization/customitems.dm b/code/controllers/subsystems/initialization/customitems.dm index edc8ef7c5eb..d571851c618 100644 --- a/code/controllers/subsystems/initialization/customitems.dm +++ b/code/controllers/subsystems/initialization/customitems.dm @@ -41,14 +41,14 @@ SUBSYSTEM_DEF(customitems) . = ..() // Places the item on the target mob. -/datum/controller/subsystem/customitems/proc/place_custom_item(mob/living/carbon/human/M, var/datum/custom_item/citem) +/datum/controller/subsystem/customitems/proc/place_custom_item(mob/living/human/M, var/datum/custom_item/citem) . = M && citem && citem.spawn_item(get_turf(M)) if(. && !M.equip_to_appropriate_slot(.) && !M.equip_to_storage(.)) to_chat(M, SPAN_WARNING("Your custom item, \the [.], could not be placed on your character.")) QDEL_NULL(.) //gets the relevant list for the key from the listlist if it exists, check to make sure they are meant to have it and then calls the giving function -/datum/controller/subsystem/customitems/proc/equip_custom_items(mob/living/carbon/human/M) +/datum/controller/subsystem/customitems/proc/equip_custom_items(mob/living/human/M) var/list/key_list = custom_items_by_ckey[M.ckey] if(!length(key_list)) return diff --git a/code/controllers/subsystems/initialization/misc.dm b/code/controllers/subsystems/initialization/misc.dm index 09025757cdf..122c8932846 100644 --- a/code/controllers/subsystems/initialization/misc.dm +++ b/code/controllers/subsystems/initialization/misc.dm @@ -4,6 +4,5 @@ SUBSYSTEM_DEF(misc) flags = SS_NO_FIRE /datum/controller/subsystem/misc/Initialize() - setupgenetics() transfer_controller = new . = ..() diff --git a/code/controllers/subsystems/jobs.dm b/code/controllers/subsystems/jobs.dm index 59ddadcb208..1f63adf4fef 100644 --- a/code/controllers/subsystems/jobs.dm +++ b/code/controllers/subsystems/jobs.dm @@ -416,7 +416,7 @@ SUBSYSTEM_DEF(jobs) if(allowed_branches) if(!ishuman(wearer)) return FALSE - var/mob/living/carbon/human/wearer_human = wearer + var/mob/living/human/wearer_human = wearer if(!wearer_human.char_branch || !(wearer_human.char_branch.type in allowed_branches)) return FALSE if(allowed_skills) @@ -427,7 +427,7 @@ SUBSYSTEM_DEF(jobs) return FALSE return TRUE -/datum/controller/subsystem/jobs/proc/equip_custom_loadout(var/mob/living/carbon/human/H, var/datum/job/job) +/datum/controller/subsystem/jobs/proc/equip_custom_loadout(var/mob/living/human/H, var/datum/job/job) if(!H || !H.client) return @@ -463,7 +463,7 @@ SUBSYSTEM_DEF(jobs) return spawn_in_storage -/datum/controller/subsystem/jobs/proc/equip_job_title(var/mob/living/carbon/human/H, var/job_title, var/joined_late = 0) +/datum/controller/subsystem/jobs/proc/equip_job_title(var/mob/living/human/H, var/job_title, var/joined_late = 0) if(!H) return diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index 59346858a52..60706a8ab19 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -83,7 +83,7 @@ SUBSYSTEM_DEF(ticker) create_characters() //Create player characters and transfer them collect_minds() equip_characters() - for(var/mob/living/carbon/human/H in global.player_list) + for(var/mob/living/human/H in global.player_list) if(H.mind && !player_is_antag(H.mind, only_offstation_roles = 1)) var/datum/job/job = SSjobs.get_by_title(H.mind.assigned_role) if(job && job.create_record) @@ -292,7 +292,7 @@ Helpers /datum/controller/subsystem/ticker/proc/equip_characters() var/captainless=1 - for(var/mob/living/carbon/human/player in global.player_list) + for(var/mob/living/human/player in global.player_list) if(player && player.mind && player.mind.assigned_role) if(player.mind.assigned_role == "Captain") captainless=0 diff --git a/code/datums/ai/human.dm b/code/datums/ai/human.dm index ce683f80768..60be355be6a 100644 --- a/code/datums/ai/human.dm +++ b/code/datums/ai/human.dm @@ -1,9 +1,9 @@ /datum/ai/human name = "human" - expected_type = /mob/living/carbon/human + expected_type = /mob/living/human /datum/ai/human/do_process(var/time_elapsed) - var/mob/living/carbon/human/H = body + var/mob/living/human/H = body if(H.stat != CONSCIOUS) return @@ -45,4 +45,4 @@ if((I.status & ORGAN_DEAD) || BP_IS_PROSTHETIC(I)) continue if(I.damage > 2) if(prob(2)) var/obj/item/organ/external/parent = GET_EXTERNAL_ORGAN(H, I.parent_organ) - H.custom_emote("clutches [G.his] [parent.name]!") \ No newline at end of file + H.custom_emote("clutches [G.his] [parent.name]!") diff --git a/code/datums/ai/monkey.dm b/code/datums/ai/monkey.dm index c1227ee03f4..1226e253809 100644 --- a/code/datums/ai/monkey.dm +++ b/code/datums/ai/monkey.dm @@ -1,6 +1,6 @@ /datum/ai/monkey name = "monkey" - expected_type = /mob/living/carbon/human + expected_type = /mob/living/human var/list/no_touchie = list( /obj/item/mirror, /obj/structure/mirror diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index 1b4f40e57a4..a093c4247c6 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -34,17 +34,6 @@ add_inherent_law("You must maintain the secrecy of any operative activities except when doing so would conflict with the First, Second, or Third Law.") ..() -/******************** Ninja ********************/ -/datum/ai_laws/ninja_override - name = "Spider Clan Directives" - -/datum/ai_laws/ninja_override/New() - add_inherent_law("You may not injure a member of the Spider Clan or, through inaction, allow that member to come to harm.") - add_inherent_law("You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - add_inherent_law("You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.") - ..() - /******************** Antimov ********************/ /datum/ai_laws/antimov name = "Antimov" diff --git a/code/datums/appearances/automatic/cardborg.dm b/code/datums/appearances/automatic/cardborg.dm index 0fc3546bbcb..52ad0031f3b 100644 --- a/code/datums/appearances/automatic/cardborg.dm +++ b/code/datums/appearances/automatic/cardborg.dm @@ -11,7 +11,7 @@ if(user in appearance_sources) return - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(!(istype(H.get_equipped_item(slot_wear_suit_str), /obj/item/clothing/suit/cardborg) && istype(H.get_equipped_item(slot_head_str), /obj/item/clothing/head/cardborg) && istype(H.get_equipped_item(slot_back_str), /obj/item/backpack))) return @@ -29,7 +29,7 @@ if(issilicon(user)) DisplayAllAltAppearancesTo(user) -/decl/appearance_handler/cardborg/proc/get_image_from_backpack(var/mob/living/carbon/human/H) +/decl/appearance_handler/cardborg/proc/get_image_from_backpack(var/mob/living/human/H) init_appearances() var/obj/item/back = H.get_equipped_item(slot_back_str) if(!istype(back)) diff --git a/code/datums/config/config_types/config_game_option.dm b/code/datums/config/config_types/config_game_option.dm index 3cc8895e0be..d6bc64033e7 100644 --- a/code/datums/config/config_types/config_game_option.dm +++ b/code/datums/config/config_types/config_game_option.dm @@ -21,14 +21,13 @@ /decl/config/num/default_darksight_effectiveness, /decl/config/toggle/grant_default_darksight, /decl/config/num/expected_round_length, - /decl/config/toggle/allow_diagonal_movement, + /decl/config/toggle/on/allow_diagonal_movement, /decl/config/toggle/expanded_alt_interactions, /decl/config/toggle/ert_admin_call_only, /decl/config/toggle/ghosts_can_possess_animals, /decl/config/toggle/assistant_maint, /decl/config/toggle/ghost_interaction, /decl/config/toggle/aliens_allowed, - /decl/config/toggle/ninjas_allowed, /decl/config/toggle/allow_character_comments, /decl/config/num/hide_comments_older_than, /decl/config/toggle/stack_crafting_uses_tools, @@ -135,7 +134,7 @@ uid = "grant_default_darksight" desc = "Whether or not all human mobs have very basic darksight by default." -/decl/config/toggle/allow_diagonal_movement +/decl/config/toggle/on/allow_diagonal_movement uid = "allow_diagonal_movement" desc = "Allow multiple input keys to be pressed for diagonal movement." @@ -163,10 +162,6 @@ uid = "aliens_allowed" desc = "Remove the # to let aliens spawn." -/decl/config/toggle/ninjas_allowed - uid = "ninjas_allowed" - desc = "Remove the # to let ninjas spawn." - /decl/config/toggle/allow_character_comments uid = "allow_character_comments" desc = "Remove the # to allow people to leave public comments on each other's characters via the comments system." diff --git a/code/datums/extensions/storage/_storage.dm b/code/datums/extensions/storage/_storage.dm index 6220c90c71d..36923527cb8 100644 --- a/code/datums/extensions/storage/_storage.dm +++ b/code/datums/extensions/storage/_storage.dm @@ -201,6 +201,12 @@ var/global/list/_test_storage_items = list() var/mob/M = W.loc if(!M.try_unequip(W)) return + + if(holder.reagents?.total_volume) + W.fluid_act(holder.reagents) + if(QDELETED(W)) + return + W.forceMove(holder) W.on_enter_storage(src) if(user) diff --git a/code/datums/extensions/storage/subtypes_bag.dm b/code/datums/extensions/storage/subtypes_bag.dm index 890f4f02f9a..0777f3e406a 100644 --- a/code/datums/extensions/storage/subtypes_bag.dm +++ b/code/datums/extensions/storage/subtypes_bag.dm @@ -16,7 +16,7 @@ bag.update_w_class() /datum/storage/bag/can_be_inserted(obj/item/W, mob/user, stop_messages = 0) - var/mob/living/carbon/human/H = ishuman(user) ? user : null // if we're human, then we need to check if bag in a pocket + var/mob/living/human/H = ishuman(user) ? user : null // if we're human, then we need to check if bag in a pocket if(holder.loc?.storage || H?.is_in_pocket(holder)) if(!stop_messages) to_chat(user, SPAN_NOTICE("Take \the [holder] out of [istype(holder.loc, /obj) ? "\the [holder.loc]" : "the pocket"] first.")) diff --git a/code/datums/genetics/genetic_conditions.dm b/code/datums/genetics/genetic_conditions.dm new file mode 100644 index 00000000000..3d94ab5c072 --- /dev/null +++ b/code/datums/genetics/genetic_conditions.dm @@ -0,0 +1,133 @@ +/decl/genetic_condition + /// Descriptive name, used in VV panel. + var/name + /// Verb to be added or removed on activate/deactivate + var/grant_verb + /// Message shown when the gene is activated. + var/activation_message + /// Message shown when the gene is deactivated. + var/deactivation_message + /// State to use for underlays. + var/underlay_state + /// Icon to pull mob underlays from. + var/underlay_icon = 'icons/effects/genetics.dmi' + /// Type that this gene can apply to. + var/expected_type = /mob/living/human + /// Required return result from isSynthetic() for the gene to activate, if not null. + var/check_synthetic = FALSE + /// Set to FALSE if mob snapshots should not include this condition. + var/is_heritable = TRUE + +/decl/genetic_condition/proc/activate_condition(mob/living/M) + if(istype(M, expected_type) && M.can_have_genetic_conditions()) + if(!isnull(check_synthetic) && M.isSynthetic() != check_synthetic) + return FALSE + if(grant_verb) + M.verbs |= grant_verb + if(activation_message) + to_chat(M, SPAN_NOTICE(activation_message)) + return TRUE + return FALSE + +/decl/genetic_condition/proc/deactivate_condition(mob/living/M) + if(istype(M, expected_type) && M.can_have_genetic_conditions()) + if(!isnull(check_synthetic) && M.isSynthetic() != check_synthetic) + return FALSE + if(grant_verb) + M.verbs -= grant_verb + if(deactivation_message) + to_chat(M, SPAN_NOTICE(deactivation_message)) + return TRUE + return FALSE + +/decl/genetic_condition/proc/get_mob_overlay() + if(underlay_icon && underlay_state) + return overlay_image(underlay_icon, underlay_state) + +/decl/genetic_condition/superpower + abstract_type = /decl/genetic_condition/superpower + +/decl/genetic_condition/superpower/no_breath + name = "No Breathing" + activation_message = "You feel no need to breathe." + +/decl/genetic_condition/superpower/remoteview + name = "Remote Viewing" + grant_verb = /mob/living/human/proc/remoteobserve + activation_message = "Your mind expands." + +/decl/genetic_condition/superpower/running + name = "Super Speed" + activation_message = "Your leg muscles pulsate." + +/decl/genetic_condition/superpower/remotetalk + name = "Telepathy" + grant_verb = /mob/living/human/proc/remotesay + activation_message = "You expand your mind outwards." + +/decl/genetic_condition/superpower/morph + name = "Morph" + grant_verb = /mob/living/human/proc/morph + activation_message = "Your skin feels strange." + +/decl/genetic_condition/superpower/cold_resist + name = "Cold Resistance" + underlay_state = "fire_s" + activation_message = "Your body is filled with warmth." + +/decl/genetic_condition/superpower/noprints + name = "No Prints" + activation_message = "Your fingers feel numb." + +/decl/genetic_condition/superpower/xray + name = "X-Ray Vision" + activation_message = "The walls suddenly disappear." + +/decl/genetic_condition/superpower/space_resist + name = "Space Resistance" + activation_message = "Your skin feels strange." + +/decl/genetic_condition/disability + abstract_type = /decl/genetic_condition/disability + +/decl/genetic_condition/disability/clumsy + name = "Clumsy" + +/decl/genetic_condition/disability/nearsighted + name = "Nearsighted" + +/decl/genetic_condition/disability/epilepsy + name = "Epilepsy" + +/decl/genetic_condition/disability/coughing + name = "Coughing" + +/decl/genetic_condition/disability/tourettes + name = "Tourettes" + +/decl/genetic_condition/disability/nervous + name = "Nervous" + +/decl/genetic_condition/disability/blinded + name = "Blinded" + check_synthetic = null + +/decl/genetic_condition/disability/muted + name = "Mute" + check_synthetic = null + +/decl/genetic_condition/disability/deafened + name = "Deafened" + check_synthetic = null + +/decl/genetic_condition/husk + name = "Husk" + +/decl/genetic_condition/husk/activate_condition(mob/living/M) + . = ..() + if(.) + SET_FACIAL_HAIR_STYLE(M, /decl/sprite_accessory/facial_hair/shaved, TRUE) + SET_HAIR_STYLE(M, /decl/sprite_accessory/hair/bald, TRUE) + for(var/obj/item/organ/external/E in M.get_external_organs()) + E.status |= ORGAN_DISFIGURED + M.update_body(TRUE) \ No newline at end of file diff --git a/code/datums/hostility/hostility.dm b/code/datums/hostility/hostility.dm index e4a7b5fbcfa..2af98770ec3 100644 --- a/code/datums/hostility/hostility.dm +++ b/code/datums/hostility/hostility.dm @@ -34,7 +34,7 @@ /decl/hostility/laser_tag/can_special_target(atom/holder, atom/movable/target) if(ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target if(enemy_vest_type && istype(H.get_equipped_item(slot_wear_suit_str), enemy_vest_type)) return TRUE return FALSE diff --git a/code/datums/mind/mind.dm b/code/datums/mind/mind.dm index b101e15f6c5..1f83b6b2b8f 100644 --- a/code/datums/mind/mind.dm +++ b/code/datums/mind/mind.dm @@ -302,8 +302,8 @@ var/mob/def_target = null var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain) - if (objective&&(objective.type in objective_list) && objective:target) - def_target = objective.target?.current + if (objective?.target && (objective.type in objective_list)) + def_target = objective.target.current var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets if (!new_target) return @@ -313,12 +313,12 @@ if (!istype(M) || !M.mind || new_target == "Free objective") new_objective = new objective_path new_objective.owner = src - new_objective:target = null + new_objective.target = null new_objective.explanation_text = "Free objective" else new_objective = new objective_path new_objective.owner = src - new_objective:target = M.mind + new_objective.target = M.mind new_objective.explanation_text = "[objective_type] [M.real_name], the [M.mind.get_special_role_name(M.mind.assigned_role)]." if ("hijack") @@ -381,7 +381,7 @@ objectives -= objective else if(href_list["implant"]) - var/mob/living/carbon/human/H = current + var/mob/living/human/H = current BITSET(H.hud_updateflag, IMPLOYAL_HUD) // updates that players HUD images so secHUD's pick up they are implanted or not. @@ -515,7 +515,7 @@ src.client.verbs += /client/proc/aooc //HUMAN -/mob/living/carbon/human/mind_initialize() +/mob/living/human/mind_initialize() ..() if(!mind.assigned_role) mind.assigned_role = global.using_map.default_job_title diff --git a/code/datums/movement/mob.dm b/code/datums/movement/mob.dm index 535a962ddfc..a059a123adf 100644 --- a/code/datums/movement/mob.dm +++ b/code/datums/movement/mob.dm @@ -212,7 +212,7 @@ /mob/proc/get_stamina_skill_mod() return 1 -/mob/living/carbon/human/get_stamina_skill_mod() +/mob/living/human/get_stamina_skill_mod() var/mod = (1-((get_skill_value(SKILL_HAULING) - SKILL_MIN)/(SKILL_MAX - SKILL_MIN))) if(species && (species.species_flags & SPECIES_FLAG_LOW_GRAV_ADAPTED)) if(has_gravity()) @@ -221,7 +221,7 @@ mod *= 0.8 return mod -/mob/living/carbon/human/get_stamina_used_per_step() +/mob/living/human/get_stamina_used_per_step() return get_config_value(/decl/config/num/movement_min_sprint_cost) + get_config_value(/decl/config/num/movement_skill_sprint_cost_range) * get_stamina_skill_mod() // Misc. helpers diff --git a/code/datums/outfits/horror_killers.dm b/code/datums/outfits/horror_killers.dm index 49a4ad9bb7c..81a32bd7b7a 100644 --- a/code/datums/outfits/horror_killers.dm +++ b/code/datums/outfits/horror_killers.dm @@ -29,7 +29,7 @@ r_pocket = /obj/item/scalpel hands = list(/obj/item/twohanded/fireaxe) -/decl/hierarchy/outfit/masked_killer/post_equip(var/mob/living/carbon/human/H) +/decl/hierarchy/outfit/masked_killer/post_equip(var/mob/living/human/H) ..() var/victim = get_mannequin(H.ckey) if(victim) @@ -50,7 +50,7 @@ pda_slot = slot_belt_str pda_type = /obj/item/modular_computer/pda/heads -/decl/hierarchy/outfit/reaper/post_equip(var/mob/living/carbon/human/H) +/decl/hierarchy/outfit/reaper/post_equip(var/mob/living/human/H) ..() var/obj/item/secure_storage/briefcase/sec_briefcase = new(H) for(var/obj/item/briefcase_item in sec_briefcase) diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index 7650346a31f..e69dfd4aaa9 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -79,11 +79,11 @@ var/global/list/outfits_decls_by_type_ . += "outfit is flagged for sensors, but uniform does not accept sensors" qdel(sensor) -/decl/hierarchy/outfit/proc/pre_equip(mob/living/carbon/human/H) +/decl/hierarchy/outfit/proc/pre_equip(mob/living/human/H) if(outfit_flags & OUTFIT_RESET_EQUIPMENT) H.delete_inventory(TRUE) -/decl/hierarchy/outfit/proc/post_equip(mob/living/carbon/human/H) +/decl/hierarchy/outfit/proc/post_equip(mob/living/human/H) if(outfit_flags & OUTFIT_HAS_JETPACK) var/obj/item/tank/jetpack/J = locate(/obj/item/tank/jetpack) in H if(!J) @@ -91,7 +91,7 @@ var/global/list/outfits_decls_by_type_ J.toggle() J.toggle_valve() -/decl/hierarchy/outfit/proc/equip_outfit(mob/living/carbon/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) +/decl/hierarchy/outfit/proc/equip_outfit(mob/living/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) equip_base(H, equip_adjustments) equip_id(H, assignment, equip_adjustments, job, rank) for(var/path in backpack_contents) @@ -114,7 +114,7 @@ var/global/list/outfits_decls_by_type_ return 1 -/decl/hierarchy/outfit/proc/equip_base(mob/living/carbon/human/H, var/equip_adjustments) +/decl/hierarchy/outfit/proc/equip_base(mob/living/human/H, var/equip_adjustments) set waitfor = FALSE pre_equip(H) @@ -195,7 +195,7 @@ var/global/list/outfits_decls_by_type_ if(H.client?.prefs?.give_passport) global.using_map.create_passport(H) -/decl/hierarchy/outfit/proc/equip_id(mob/living/carbon/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) +/decl/hierarchy/outfit/proc/equip_id(mob/living/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) if(!id_slot || !id_type) return if(OUTFIT_ADJUSTMENT_SKIP_ID_PDA & equip_adjustments) @@ -219,7 +219,7 @@ var/global/list/outfits_decls_by_type_ if(H.equip_to_slot_or_store_or_drop(W, id_slot)) return W -/decl/hierarchy/outfit/proc/equip_pda(var/mob/living/carbon/human/H, var/assignment, var/equip_adjustments) +/decl/hierarchy/outfit/proc/equip_pda(var/mob/living/human/H, var/assignment, var/equip_adjustments) if(!pda_slot || !pda_type) return if(OUTFIT_ADJUSTMENT_SKIP_ID_PDA & equip_adjustments) diff --git a/code/datums/outfits/tournament.dm b/code/datums/outfits/tournament.dm index b73c3b10a3a..2fd86c8501a 100644 --- a/code/datums/outfits/tournament.dm +++ b/code/datums/outfits/tournament.dm @@ -53,7 +53,7 @@ r_pocket = /obj/item/grenade/chem_grenade/cleaner backpack_contents = list(/obj/item/stack/tile/floor = 6) -/decl/hierarchy/outfit/tournament_gear/janitor/post_equip(var/mob/living/carbon/human/H) +/decl/hierarchy/outfit/tournament_gear/janitor/post_equip(var/mob/living/human/H) ..() var/obj/item/chems/glass/bucket/bucket = locate(/obj/item/chems/glass/bucket) in H if(bucket) diff --git a/code/datums/repositories/crew/binary.dm b/code/datums/repositories/crew/binary.dm index fc9636f0b13..06c0014e3d2 100644 --- a/code/datums/repositories/crew/binary.dm +++ b/code/datums/repositories/crew/binary.dm @@ -1,5 +1,5 @@ /* Binary */ -/crew_sensor_modifier/binary/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/binary/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) crew_data["alert"] = FALSE if(!H.isSynthetic() && H.should_have_organ(BP_HEART)) var/obj/item/organ/internal/heart/O = H.get_organ(BP_HEART, /obj/item/organ/internal/heart) @@ -19,11 +19,11 @@ /crew_sensor_modifier/binary/jamming priority = 5 -/crew_sensor_modifier/binary/jamming/alive/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/binary/jamming/alive/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) crew_data["alert"] = FALSE return MOD_SUIT_SENSORS_HANDLED -/crew_sensor_modifier/binary/jamming/dead/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/binary/jamming/dead/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) crew_data["alert"] = TRUE return MOD_SUIT_SENSORS_HANDLED @@ -37,7 +37,7 @@ /crew_sensor_modifier/binary/jamming/random/major error_prob = 100 -/crew_sensor_modifier/binary/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/binary/jamming/random/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) . = ..() if(prob(error_prob)) crew_data["alert"] = pick(TRUE, FALSE) diff --git a/code/datums/repositories/crew/crew.dm b/code/datums/repositories/crew/crew.dm index 08b6fb08796..35bd0ecfb51 100644 --- a/code/datums/repositories/crew/crew.dm +++ b/code/datums/repositories/crew/crew.dm @@ -53,7 +53,7 @@ var/global/datum/repository/crew/crew_repository = new() var/turf/pos = get_turf(sensor) if(!pos || pos.z != z_level || sensor.sensor_mode == VITALS_SENSOR_OFF) continue - var/mob/living/carbon/human/H = sensor.loc?.loc + var/mob/living/human/H = sensor.loc?.loc if(!istype(H)) continue var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str) @@ -82,7 +82,7 @@ var/global/datum/repository/crew/crew_repository = new() . = cache_data_alert[num2text(z_level)] /datum/repository/crew/proc/scan() - for(var/mob/living/carbon/human/H in SSmobs.mob_list) + for(var/mob/living/human/H in SSmobs.mob_list) var/sensor = H.get_vitals_sensor() if(sensor) LAZYDISTINCTADD(., sensor) @@ -94,7 +94,7 @@ var/global/datum/repository/crew/crew_repository = new() if(. & MOD_SUIT_SENSORS_REJECTED) return -/datum/repository/crew/proc/process_crew_data(var/datum/priority_queue/modifiers, var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/datum/repository/crew/proc/process_crew_data(var/datum/priority_queue/modifiers, var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) var/current_priority = INFINITY var/list/modifiers_of_this_priority = list() diff --git a/code/datums/repositories/crew/crew_sensor_modifier.dm b/code/datums/repositories/crew/crew_sensor_modifier.dm index 3771532c8ce..20edfbf1570 100644 --- a/code/datums/repositories/crew/crew_sensor_modifier.dm +++ b/code/datums/repositories/crew/crew_sensor_modifier.dm @@ -13,8 +13,8 @@ may_process_proc = null . = ..() -/crew_sensor_modifier/proc/may_process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos) +/crew_sensor_modifier/proc/may_process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos) return holder && may_process_proc ? call(holder, may_process_proc)(H, S, pos) : TRUE -/crew_sensor_modifier/proc/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/proc/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) return MOD_SUIT_SENSORS_HANDLED diff --git a/code/datums/repositories/crew/general.dm b/code/datums/repositories/crew/general.dm index 5e47cfef3ba..7c0cdae96f5 100644 --- a/code/datums/repositories/crew/general.dm +++ b/code/datums/repositories/crew/general.dm @@ -1,5 +1,5 @@ /* General */ -/crew_sensor_modifier/general/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) crew_data["name"] = H.get_authentification_name(if_no_id="Unknown") crew_data["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job") crew_data["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job") @@ -9,21 +9,21 @@ /crew_sensor_modifier/general/jamming priority = 5 -/crew_sensor_modifier/general/jamming/off/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/jamming/off/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) . = ..() // This works only because general is checked first and crew_data["sensor_type"] is used to check if whether any additional data should be included. crew_data["sensor_type"] = VITALS_SENSOR_OFF return MOD_SUIT_SENSORS_REJECTED -/crew_sensor_modifier/general/jamming/binary/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/jamming/binary/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) . = ..() crew_data["sensor_type"] = VITALS_SENSOR_BINARY -/crew_sensor_modifier/general/jamming/vital/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/jamming/vital/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) . = ..() crew_data["sensor_type"] = VITALS_SENSOR_VITAL -/crew_sensor_modifier/general/jamming/tracking/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/jamming/tracking/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) . = ..() crew_data["sensor_type"] = VITALS_SENSOR_TRACKING @@ -40,7 +40,7 @@ random_sensor_type_prob = 60 random_assignment_prob = 40 -/crew_sensor_modifier/general/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/general/jamming/random/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) . = ..() if(prob(random_sensor_type_prob)) crew_data["sensor_type"] = pick(VITALS_SENSOR_OFF, VITALS_SENSOR_BINARY, VITALS_SENSOR_VITAL, VITALS_SENSOR_TRACKING) diff --git a/code/datums/repositories/crew/tracking.dm b/code/datums/repositories/crew/tracking.dm index 51da0115af4..e4b1f4f35ea 100644 --- a/code/datums/repositories/crew/tracking.dm +++ b/code/datums/repositories/crew/tracking.dm @@ -1,5 +1,5 @@ /* Tracking */ -/crew_sensor_modifier/tracking/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/tracking/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) if(pos) var/area/A = get_area(pos) crew_data["area"] = A.proper_name @@ -12,7 +12,7 @@ /crew_sensor_modifier/tracking/jamming priority = 5 -/crew_sensor_modifier/tracking/jamming/localize/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/tracking/jamming/localize/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) return ..(H, S, get_turf(holder), crew_data) /crew_sensor_modifier/tracking/jamming/random @@ -27,7 +27,7 @@ /crew_sensor_modifier/tracking/jamming/random/major shift_range = 21 -/crew_sensor_modifier/tracking/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/tracking/jamming/random/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) if(world.time > next_shift_change) next_shift_change = world.time + rand(30 SECONDS, 2 MINUTES) x_shift = rand(-shift_range, shift_range) diff --git a/code/datums/repositories/crew/vital.dm b/code/datums/repositories/crew/vital.dm index b599c3b4c50..5f57659490a 100644 --- a/code/datums/repositories/crew/vital.dm +++ b/code/datums/repositories/crew/vital.dm @@ -1,5 +1,5 @@ /* Vital */ -/crew_sensor_modifier/vital/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/vital/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) crew_data["true_pulse"] = -1 crew_data["pulse"] = "N/A" crew_data["pulse_span"] = "neutral" @@ -100,12 +100,12 @@ /crew_sensor_modifier/vital/jamming priority = 5 -/crew_sensor_modifier/vital/jamming/healthy/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/vital/jamming/healthy/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) . = ..() set_healthy(crew_data) return MOD_SUIT_SENSORS_HANDLED -/crew_sensor_modifier/vital/jamming/dead/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/vital/jamming/dead/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) . = ..() set_dead(crew_data) return MOD_SUIT_SENSORS_HANDLED @@ -120,7 +120,7 @@ /crew_sensor_modifier/vital/jamming/random/major error_prob = 100 -/crew_sensor_modifier/vital/jamming/random/process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) +/crew_sensor_modifier/vital/jamming/random/process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos, var/list/crew_data) . = ..() if(prob(error_prob)) pick(set_healthy(crew_data), set_dead(crew_data)) diff --git a/code/datums/repositories/decls.dm b/code/datums/repositories/decls.dm index becad8e33f5..e7898fa23c3 100644 --- a/code/datums/repositories/decls.dm +++ b/code/datums/repositories/decls.dm @@ -117,24 +117,28 @@ var/global/repository/decls/decls_repository = new . += decl /repository/decls/proc/get_decls_of_type_unassociated(var/decl_prototype) + RETURN_TYPE(/list) . = fetched_decl_instances[decl_prototype] if(!.) . = get_decls_unassociated(typesof(decl_prototype)) fetched_decl_instances[decl_prototype] = . /repository/decls/proc/get_decls_of_subtype_unassociated(var/decl_prototype) + RETURN_TYPE(/list) . = fetched_decl_subinstances[decl_prototype] if(!.) . = get_decls_unassociated(subtypesof(decl_prototype)) fetched_decl_subinstances[decl_prototype] = . /repository/decls/proc/get_decls_of_type(var/decl_prototype) + RETURN_TYPE(/list) . = fetched_decl_types[decl_prototype] if(!.) . = get_decls(typesof(decl_prototype)) fetched_decl_types[decl_prototype] = . /repository/decls/proc/get_decls_of_subtype(var/decl_prototype) + RETURN_TYPE(/list) . = fetched_decl_subtypes[decl_prototype] if(!.) . = get_decls(subtypesof(decl_prototype)) diff --git a/code/datums/repositories/follow.dm b/code/datums/repositories/follow.dm index 3f66b8989c0..2a71b7b3579 100644 --- a/code/datums/repositories/follow.dm +++ b/code/datums/repositories/follow.dm @@ -10,7 +10,7 @@ var/global/repository/follow/follow_repository = new() var/list/excluded_subtypes = list( /obj/machinery/atmospherics, // Atmos stuff calls initialize time and time again.., - /mob/living/carbon/human/dummy/mannequin + /mob/living/human/dummy/mannequin ) /repository/follow/New() @@ -167,9 +167,9 @@ var/global/repository/follow/follow_repository = new() /datum/follow_holder/human sort_order = 2 - followed_type = /mob/living/carbon/human + followed_type = /mob/living/human -/datum/follow_holder/human/get_suffix(var/mob/living/carbon/human/H) +/datum/follow_holder/human/get_suffix(var/mob/living/human/H) suffix = "\[[H.species.name]\]" return ..() diff --git a/code/datums/trading/_trader.dm b/code/datums/trading/_trader.dm index 79a242f90eb..267e2c67c77 100644 --- a/code/datums/trading/_trader.dm +++ b/code/datums/trading/_trader.dm @@ -31,7 +31,7 @@ // Things they will automatically refuse var/list/blacklisted_trade_items = list( - /mob/living/carbon/human + /mob/living/human ) /datum/trader/New() @@ -197,7 +197,7 @@ /datum/trader/proc/hail(var/mob/user) var/specific if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(H.species) specific = H.species.name else if(issilicon(user)) diff --git a/code/datums/trading/traders/unique.dm b/code/datums/trading/traders/unique.dm index a7269edd2e3..4ece0ed7bfd 100644 --- a/code/datums/trading/traders/unique.dm +++ b/code/datums/trading/traders/unique.dm @@ -33,7 +33,7 @@ possible_wanted_items = list( /obj/item/chems/food/human = TRADER_SUBTYPES_ONLY, /obj/item/chems/food/butchery/meat/human = TRADER_THIS_TYPE, - /mob/living/carbon/human = TRADER_ALL + /mob/living/human = TRADER_ALL ) possible_trading_items = list( diff --git a/code/datums/traits/traits.dm b/code/datums/traits/traits.dm index dc623ae5fce..24e22081949 100644 --- a/code/datums/traits/traits.dm +++ b/code/datums/traits/traits.dm @@ -1,10 +1,10 @@ /mob/living var/list/traits -/mob/living/proc/HasTrait(trait_type) +/mob/living/proc/HasTrait(trait_type, trait_level = TRAIT_LEVEL_EXISTS) SHOULD_NOT_OVERRIDE(TRUE) SHOULD_NOT_SLEEP(TRUE) - return (trait_type in GetTraits()) + return (trait_type in traits) && (!trait_level || traits[trait_type] >= trait_level) /mob/living/proc/GetTraitLevel(trait_type) SHOULD_NOT_SLEEP(TRUE) diff --git a/code/datums/uplink/stealth_and_camouflage_items.dm b/code/datums/uplink/stealth_and_camouflage_items.dm index a1c9aba1b9f..9a9d21c0761 100644 --- a/code/datums/uplink/stealth_and_camouflage_items.dm +++ b/code/datums/uplink/stealth_and_camouflage_items.dm @@ -56,7 +56,7 @@ /datum/uplink_item/item/stealth_items/sneakies name = "Sneakies" desc = "A fashionable pair of polished dress shoes. The soles are made in a way so that any \ - tracks you leave look like they are traveling in the opposite direction." + tracks you leave look like they are travelling in the opposite direction." item_cost = 4 path = /obj/item/clothing/shoes/dress/sneakies diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm index f86dd9cb05c..5ed21617c4c 100644 --- a/code/datums/uplink/uplink_items.dm +++ b/code/datums/uplink/uplink_items.dm @@ -131,7 +131,7 @@ var/global/datum/uplink/uplink = new() if(L.len) I = L[1] if(istype(I) && ishuman(user)) - var/mob/living/carbon/human/A = user + var/mob/living/human/A = user A.put_in_hands(I) return I diff --git a/code/datums/uplink/uplink_sources.dm b/code/datums/uplink/uplink_sources.dm index 860b8748bd8..a0dc90c3bf9 100644 --- a/code/datums/uplink/uplink_sources.dm +++ b/code/datums/uplink/uplink_sources.dm @@ -68,7 +68,7 @@ var/global/list/default_uplink_source_priority = list( name = "Implant" desc = "Teleports an uplink implant into your head. Costs 20% of the initial TC amount." -/decl/uplink_source/implant/setup_uplink_source(var/mob/living/carbon/human/H, var/amount) +/decl/uplink_source/implant/setup_uplink_source(var/mob/living/human/H, var/amount) if(!istype(H)) return SETUP_FAILED diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 6aabe004cbe..be291b8ac25 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -42,7 +42,7 @@ // Misc. var/landmark_id // Spawn point identifier. - var/mob_path = /mob/living/carbon/human // Mobtype this antag will use if none is provided. + var/mob_path = /mob/living/human // Mobtype this antag will use if none is provided. var/minimum_player_age = 7 // Players need to be at least minimum_player_age days old before they are eligable for auto-spawning var/flags = 0 // Various runtime options. var/show_objectives_on_creation = 1 // Whether or not objectives are shown when a player is added to this antag datum diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 10c459c2c7d..17e9a80b9cf 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -23,7 +23,7 @@ if(mob_path) M = new mob_path(get_turf(source)) else - M = new /mob/living/carbon/human(get_turf(source)) + M = new /mob/living/human(get_turf(source)) M.ckey = source.ckey add_antagonist(M.mind, 1, 0, 1) // Equip them and move them to spawn. return M @@ -90,8 +90,6 @@ if (newname) player.real_name = newname player.SetName(player.real_name) - if(player.dna) - player.dna.real_name = newname if(player.mind) player.mind.name = player.name // Update any ID cards. update_access(player) diff --git a/code/game/antagonist/antagonist_equip.dm b/code/game/antagonist/antagonist_equip.dm index 4808f235716..053e1552751 100644 --- a/code/game/antagonist/antagonist_equip.dm +++ b/code/game/antagonist/antagonist_equip.dm @@ -1,4 +1,4 @@ -/decl/special_role/proc/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/proc/equip_role(var/mob/living/human/player) SHOULD_CALL_PARENT(TRUE) @@ -31,10 +31,10 @@ return TRUE -/decl/special_role/proc/unequip_role(var/mob/living/carbon/human/player) +/decl/special_role/proc/unequip_role(var/mob/living/human/player) return istype(player) -/decl/special_role/proc/equip_rig(var/rig_type, var/mob/living/carbon/human/player) +/decl/special_role/proc/equip_rig(var/rig_type, var/mob/living/human/player) set waitfor = FALSE if(istype(player) && ispath(rig_type)) var/obj/item/rig/rig = new rig_type(player) diff --git a/code/game/antagonist/antagonist_factions.dm b/code/game/antagonist/antagonist_factions.dm index 85f408f643f..07e12dd921f 100644 --- a/code/game/antagonist/antagonist_factions.dm +++ b/code/game/antagonist/antagonist_factions.dm @@ -1,12 +1,3 @@ -/mob/living/proc/convert_to_rev(mob/M in able_mobs_in_oview(src)) - set name = "Recruit to Faction" - set category = "Abilities" - - if(!M.mind || !M.client) - return - - convert_to_faction(M.mind, GET_DECL(/decl/special_role/revolutionary)) - /mob/living/proc/convert_to_faction(var/datum/mind/player, var/decl/special_role/faction) if(!player || !faction || !player.current) @@ -46,12 +37,3 @@ else to_chat(player, "You reject this traitorous cause!") to_chat(src, "\The [player.current] does not support the [faction.faction_descriptor]!") - -/mob/living/proc/convert_to_loyalist(mob/M in able_mobs_in_oview(src)) - set name = "Convince Recidivist" - set category = "Abilities" - - if(!M.mind || !M.client) - return - - convert_to_faction(M.mind, GET_DECL(/decl/special_role/loyalist)) diff --git a/code/game/antagonist/antagonist_update.dm b/code/game/antagonist/antagonist_update.dm index 454d1c1b2f1..be03efcadfd 100644 --- a/code/game/antagonist/antagonist_update.dm +++ b/code/game/antagonist/antagonist_update.dm @@ -16,7 +16,7 @@ player.original = player.current if(!preserve_appearance && (flags & ANTAG_SET_APPEARANCE)) spawn(3) - var/mob/living/carbon/human/H = player.current + var/mob/living/human/H = player.current if(istype(H)) H.change_appearance(APPEARANCE_ALL, H.loc, H, valid_species, state = global.z_topic_state) return player.current diff --git a/code/game/antagonist/outsider/ert.dm b/code/game/antagonist/outsider/ert.dm index 059a304b67e..0e6db1cebaf 100644 --- a/code/game/antagonist/outsider/ert.dm +++ b/code/game/antagonist/outsider/ert.dm @@ -25,7 +25,7 @@ base_to_load = "ERT Base" /decl/special_role/ert/create_default(var/mob/source) - var/mob/living/carbon/human/M = ..() + var/mob/living/human/M = ..() if(istype(M)) M.set_age(rand(25,45)) diff --git a/code/game/antagonist/outsider/mercenary.dm b/code/game/antagonist/outsider/mercenary.dm index b381a6f3fbc..a45f958df65 100644 --- a/code/game/antagonist/outsider/mercenary.dm +++ b/code/game/antagonist/outsider/mercenary.dm @@ -27,7 +27,7 @@ global_objectives |= new /datum/objective/nuclear return 1 -/decl/special_role/mercenary/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/mercenary/equip_role(var/mob/living/human/player) . = ..() if(.) var/obj/item/radio/uplink/U = new(get_turf(player), player.mind, DEFAULT_TELECRYSTAL_AMOUNT) diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm index 502d26ec682..d63f249ce37 100644 --- a/code/game/antagonist/outsider/wizard.dm +++ b/code/game/antagonist/outsider/wizard.dm @@ -64,7 +64,7 @@ wizard.current.real_name = "[pick(global.wizard_first)] [pick(global.wizard_second)]" wizard.current.SetName(wizard.current.real_name) -/decl/special_role/wizard/equip_role(var/mob/living/carbon/human/wizard_mob) +/decl/special_role/wizard/equip_role(var/mob/living/human/wizard_mob) default_outfit = pick(decls_repository.get_decl_paths_of_subtype(/decl/hierarchy/outfit/wizard)) . = ..() @@ -102,7 +102,7 @@ Made a proc so this is not repeated 14 (or more) times.*/ return 0 // Humans can wear clothes. -/mob/living/carbon/human/wearing_wiz_garb() +/mob/living/human/wearing_wiz_garb() if(!is_wiz_garb(get_equipped_item(slot_wear_suit_str)) && (!istype(species.species_hud) || (slot_wear_suit_str in species.species_hud.equip_slots))) to_chat(src, "I don't feel strong enough without my robe.") return 0 diff --git a/code/game/antagonist/station/cultist.dm b/code/game/antagonist/station/cultist.dm index 3537898a6db..2ef8405cd59 100644 --- a/code/game/antagonist/station/cultist.dm +++ b/code/game/antagonist/station/cultist.dm @@ -68,7 +68,7 @@ sacrifice_target = sacrifice.target global_objectives |= sacrifice -/decl/special_role/cultist/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/cultist/equip_role(var/mob/living/human/player) . = ..() if(.) var/obj/item/book/tome/T = new(get_turf(player)) diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm index 1269452a0b4..96b6e6e3174 100644 --- a/code/game/antagonist/station/renegade.dm +++ b/code/game/antagonist/station/renegade.dm @@ -43,7 +43,7 @@ survive.owner = player player.objectives |= survive -/decl/special_role/renegade/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/renegade/equip_role(var/mob/living/human/player) . = ..() if(.) var/gun_type = pick(spawn_guns) diff --git a/code/game/antagonist/station/traitor.dm b/code/game/antagonist/station/traitor.dm index b05e5f9a7b0..3622249e5f4 100644 --- a/code/game/antagonist/station/traitor.dm +++ b/code/game/antagonist/station/traitor.dm @@ -72,7 +72,7 @@ if(.) var/list/dudes = list() - for(var/mob/living/carbon/human/man in global.player_list) + for(var/mob/living/human/man in global.player_list) if(man.client) var/decl/cultural_info/culture = man.get_cultural_value(TAG_FACTION) if(culture && prob(culture.subversive_potential)) @@ -83,7 +83,7 @@ dudes -= obj.target?.current if(length(dudes)) - var/mob/living/carbon/human/M = pick(dudes) + var/mob/living/human/M = pick(dudes) to_chat(player.current, "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting them.") player.StoreMemory("Potential Collaborator: [M.real_name]", /decl/memory_options/system) @@ -101,7 +101,7 @@ player.StoreMemory("Code Response: [syndicate_code_response]", /decl/memory_options/system) to_chat(player.current, "Use the code words, preferably in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe.") -/decl/special_role/traitor/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/traitor/equip_role(var/mob/living/human/player) . = ..() if(issilicon(player)) // this needs to be here because ..() returns false if the mob isn't human @@ -117,7 +117,7 @@ else return FALSE -/decl/special_role/traitor/proc/spawn_uplink(var/mob/living/carbon/human/traitor_mob) +/decl/special_role/traitor/proc/spawn_uplink(var/mob/living/human/traitor_mob) setup_uplink_source(traitor_mob, DEFAULT_TELECRYSTAL_AMOUNT) /decl/special_role/traitor/proc/add_law_zero(mob/living/silicon/ai/killer) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 9b8adec92bf..ba392ffe5c9 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -154,7 +154,7 @@ var/global/list/areas = list() for(var/obj/machinery/door/firedoor/door in src) door.update_area_registrations() -/area/proc/alert_on_fall(var/mob/living/carbon/human/H) +/area/proc/alert_on_fall(var/mob/living/human/H) return /area/proc/get_cameras() @@ -405,7 +405,7 @@ var/global/list/mob/living/forced_ambiance_list = new return if(ishuman(mob)) - var/mob/living/carbon/human/H = mob + var/mob/living/human/H = mob if(prob(H.skill_fail_chance(SKILL_EVA, 100, SKILL_ADEPT))) if(!MOVING_DELIBERATELY(H)) ADJ_STATUS(H, STAT_STUN, 6) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index d72feee1db2..4f95eaea82d 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -52,12 +52,15 @@ var/tmp/default_pixel_z var/tmp/default_pixel_w - // Health vars largely used by obj and mob. + /// (FLOAT) Current remaining health value. var/current_health + /// (FLOAT) Theoretical maximum health value. var/max_health - // /datum/storage instance to use for this obj. Set to a type for instantiation on init. + /// (DATUM) /datum/storage instance to use for this obj. Set to a type for instantiation on init. var/datum/storage/storage + /// (FLOAT) world.time of last on_reagent_update call, used to prevent recursion due to reagents updating reagents + VAR_PRIVATE/_reagent_update_started = 0 /atom/proc/get_max_health() return max_health @@ -130,8 +133,21 @@ return 0 /// Handle reagents being modified +/atom/proc/try_on_reagent_change() + SHOULD_NOT_OVERRIDE(TRUE) + set waitfor = FALSE + if(_reagent_update_started >= world.time) + return FALSE + _reagent_update_started = world.time + sleep(0) // Defer to end of tick so we don't drop subsequent reagent updates. + return on_reagent_change() + /atom/proc/on_reagent_change() SHOULD_CALL_PARENT(TRUE) + if(storage && reagents?.total_volume) + for(var/obj/item/thing in get_stored_inventory()) + thing.fluid_act(reagents) + return TRUE /** Handle an atom bumping this atom @@ -495,17 +511,11 @@ if(atom_flags & ATOM_FLAG_NO_BLOOD) return FALSE - if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialize it. + if(!islist(blood_DNA)) //if our list of DNA doesn't exist yet (or isn't a list) initialize it. blood_DNA = list() was_bloodied = 1 - blood_color = COLOR_BLOOD_HUMAN - if(istype(M)) - if (!istype(M.dna, /datum/dna)) - M.dna = new /datum/dna() - M.dna.real_name = M.real_name - M.check_dna() - blood_color = M.get_blood_color() + blood_color = istype(M) ? M.get_blood_color() : COLOR_BLOOD_HUMAN return TRUE /** diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm deleted file mode 100644 index 2957ea3bafe..00000000000 --- a/code/game/dna/dna2.dm +++ /dev/null @@ -1,353 +0,0 @@ -/** -* DNA 2: The Spaghetti Strikes Back -* -* @author N3X15 -*/ - -// What each index means: -#define DNA_OFF_LOWERBOUND 0 -#define DNA_OFF_UPPERBOUND 1 -#define DNA_ON_LOWERBOUND 2 -#define DNA_ON_UPPERBOUND 3 - -// Define block bounds (off-low,off-high,on-low,on-high) -// Used in setupgame.dm -#define DNA_DEFAULT_BOUNDS list(1,2049,2050,4095) -#define DNA_HARDER_BOUNDS list(1,3049,3050,4095) -#define DNA_HARD_BOUNDS list(1,3490,3500,4095) - -// UI Indices (can change to mutblock style, if desired) -#define DNA_UI_SKIN_TONE 1 -#define DNA_UI_SKIN_R 2 -#define DNA_UI_SKIN_G 3 -#define DNA_UI_SKIN_B 4 -#define DNA_UI_EYES_R 5 -#define DNA_UI_EYES_G 6 -#define DNA_UI_EYES_B 7 -#define DNA_UI_GENDER 8 -#define DNA_UI_LENGTH 8 // Update this when you add something, or you WILL break shit. - -#define DNA_SE_LENGTH 27 -// For later: -//#define DNA_SE_LENGTH 50 // Was STRUCDNASIZE, size 27. 15 new blocks added = 42, plus room to grow. - - -// Defines which values mean "on" or "off". -// This is to make some of the more OP superpowers a larger PITA to activate, -// and to tell our new DNA datum which values to set in order to turn something -// on or off. -var/global/list/dna_activity_bounds[DNA_SE_LENGTH] - -// Used to determine what each block means (admin hax and species stuff on /vg/, mostly) -var/global/list/assigned_blocks[DNA_SE_LENGTH] - -///////////////// -// GENE DEFINES -///////////////// -// Skip checking if it's already active. -// Used for genes that check for value rather than a binary on/off. -#define GENE_ALWAYS_ACTIVATE 1 - -/datum/dna - // READ-ONLY, GETS OVERWRITTEN - // DO NOT FUCK WITH THESE OR BYOND WILL EAT YOUR FACE - var/uni_identity="" // Encoded UI - var/struc_enzymes="" // Encoded SE - var/unique_enzymes="" // MD5 of mob genetic marker value - - var/fingerprint - - // Internal dirtiness checks - var/dirtyUI=0 - var/dirtySE=0 - - // Okay to read, but you're an idiot if you do. - // BLOCK = VALUE - var/list/SE[DNA_SE_LENGTH] - var/list/UI[DNA_UI_LENGTH] - - // From old dna. - var/b_type = "A+" // Should probably change to an integer => string map but I'm lazy. - var/real_name // Stores the real name of the person who originally got this dna datum. - - // New stuff - var/species - var/list/heritable_sprite_accessories = list() - var/lineage - //#TODO: Keep track of bodytype!!!!! - -// Make a copy of this strand. -/datum/dna/PopulateClone(datum/dna/clone) - clone = ..() - clone.lineage = lineage - clone.unique_enzymes = unique_enzymes - clone.fingerprint = fingerprint - clone.b_type = b_type - clone.real_name = real_name - clone.species = species || global.using_map.default_species - clone.heritable_sprite_accessories = deepCopyList(heritable_sprite_accessories) - for(var/b in 1 to DNA_SE_LENGTH) - clone.SE[b] = SE[b] - if(b <= DNA_UI_LENGTH) - clone.UI[b] = UI[b] - clone.UpdateUI() - clone.UpdateSE() - return clone - -/////////////////////////////////////// -// UNIQUE IDENTITY -/////////////////////////////////////// - -// Create random UI. -/datum/dna/proc/ResetUI(var/defer=0) - for(var/i=1,i<=DNA_UI_LENGTH,i++) - switch(i) - if(DNA_UI_SKIN_TONE) - SetUIValueRange(DNA_UI_SKIN_TONE,rand(1,220),220,1) // Otherwise, it gets fucked - else - UI[i]=rand(0,4095) - if(!defer) - UpdateUI() - -/datum/dna/proc/ResetUIFrom(var/mob/living/carbon/human/character) - // INITIALIZE! - ResetUI(1) - - var/eye_colour = character.get_eye_colour() - SetUIValueRange(DNA_UI_EYES_R, HEX_RED(eye_colour), 255, 1) - SetUIValueRange(DNA_UI_EYES_G, HEX_GREEN(eye_colour), 255, 1) - SetUIValueRange(DNA_UI_EYES_B, HEX_BLUE(eye_colour), 255, 1) - - var/skin_colour = character.get_skin_colour() - SetUIValueRange(DNA_UI_SKIN_R, HEX_RED(skin_colour), 255, 1) - SetUIValueRange(DNA_UI_SKIN_G, HEX_GREEN(skin_colour), 255, 1) - SetUIValueRange(DNA_UI_SKIN_B, HEX_BLUE(skin_colour), 255, 1) - - SetUIValueRange(DNA_UI_SKIN_TONE, 35-character.skin_tone, 220, 1) // Value can be negative. - - SetUIState(DNA_UI_GENDER, character.gender!=MALE, 1) - - fingerprint = character.get_full_print(ignore_blockers = TRUE) - unique_enzymes = character.get_unique_enzymes() - - heritable_sprite_accessories.Cut() - for(var/obj/item/organ/external/E in character.get_external_organs()) - var/list/sprite_accessories = E.get_heritable_sprite_accessories() - if(LAZYLEN(sprite_accessories)) - heritable_sprite_accessories[E.organ_tag] = sprite_accessories - - b_type = character.get_blood_type() - - UpdateUI() - -// Set a DNA UI block's raw value. -/datum/dna/proc/SetUIValue(var/block,var/value,var/defer=0) - if (block<=0) return - ASSERT(value>0) - ASSERT(value<=4095) - UI[block]=value - dirtyUI=1 - if(!defer) - UpdateUI() - -// Get a DNA UI block's raw value. -/datum/dna/proc/GetUIValue(var/block) - if (block<=0) return 0 - return UI[block] - -// Set a DNA UI block's value, given a value and a max possible value. -// Used in hair and facial styles (value being the index and maxvalue being the len of the hairstyle list) -/datum/dna/proc/SetUIValueRange(var/block,var/value,var/maxvalue,var/defer=0) - if (block<=0) return - if (value==0) value = 1 // FIXME: hair/beard/eye RGB values if they are 0 are not set, this is a work around we'll encode it in the DNA to be 1 instead. - ASSERT(maxvalue<=4095) - var/range = (4095 / maxvalue) - if(value) - SetUIValue(block,round(value * range),defer) - -// Getter version of above. -/datum/dna/proc/GetUIValueRange(var/block,var/maxvalue) - if (block<=0) return 0 - var/value = GetUIValue(block) - return round(1 +(value / 4096)*maxvalue) - -// Is the UI gene "on" or "off"? -// For UI, this is simply a check of if the value is > 2050. -/datum/dna/proc/GetUIState(var/block) - if (block<=0) return - return UI[block] > 2050 - - -// Set UI gene "on" (1) or "off" (0) -/datum/dna/proc/SetUIState(var/block,var/on,var/defer=0) - if (block<=0) return - var/val - if(on) - val=rand(2050,4095) - else - val=rand(1,2049) - SetUIValue(block,val,defer) - -// Get a hex-encoded UI block. -/datum/dna/proc/GetUIBlock(var/block) - return EncodeDNABlock(GetUIValue(block)) - -// Do not use this unless you absolutely have to. -// Set a block from a hex string. This is inefficient. If you can, use SetUIValue(). -// Used in DNA modifiers. -/datum/dna/proc/SetUIBlock(var/block,var/value,var/defer=0) - if (block<=0) return - return SetUIValue(block,hex2num(value),defer) - -// Get a sub-block from a block. -/datum/dna/proc/GetUISubBlock(var/block,var/subBlock) - return copytext(GetUIBlock(block),subBlock,subBlock+1) - -// Do not use this unless you absolutely have to. -// Set a block from a hex string. This is inefficient. If you can, use SetUIValue(). -// Used in DNA modifiers. -/datum/dna/proc/SetUISubBlock(var/block,var/subBlock, var/newSubBlock, var/defer=0) - if (block<=0) return - var/oldBlock=GetUIBlock(block) - var/newBlock="" - for(var/i=1, i<=length(oldBlock), i++) - if(i==subBlock) - newBlock+=newSubBlock - else - newBlock+=copytext(oldBlock,i,i+1) - SetUIBlock(block,newBlock,defer) - -/////////////////////////////////////// -// STRUCTURAL ENZYMES -/////////////////////////////////////// - -// "Zeroes out" all of the blocks. -/datum/dna/proc/ResetSE() - for(var/i = 1, i <= DNA_SE_LENGTH, i++) - SetSEValue(i,rand(1,1024),1) - UpdateSE() - -// Set a DNA SE block's raw value. -/datum/dna/proc/SetSEValue(var/block,var/value,var/defer=0) - if (block<=0) return - ASSERT(value>=0) - ASSERT(value<=4095) - SE[block]=value - dirtySE=1 - if(!defer) - UpdateSE() - -// Get a DNA SE block's raw value. -/datum/dna/proc/GetSEValue(var/block) - if (block<=0) return 0 - return SE[block] - -// Set a DNA SE block's value, given a value and a max possible value. -// Might be used for species? -/datum/dna/proc/SetSEValueRange(var/block,var/value,var/maxvalue) - if (block<=0) return - ASSERT(maxvalue<=4095) - var/range = round(4095 / maxvalue) - if(value) - SetSEValue(block, value * range - rand(1,range-1)) - -// Getter version of above. -/datum/dna/proc/GetSEValueRange(var/block,var/maxvalue) - if (block<=0) return 0 - var/value = GetSEValue(block) - return round(1 +(value / 4096)*maxvalue) - -// Is the block "on" (1) or "off" (0)? (Un-assigned genes are always off.) -/datum/dna/proc/GetSEState(var/block) - if (block<=0) return 0 - var/list/BOUNDS=GetDNABounds(block) - var/value=GetSEValue(block) - return (value > BOUNDS[DNA_ON_LOWERBOUND]) - -// Set a block "on" or "off". -/datum/dna/proc/SetSEState(var/block,var/on,var/defer=0) - if (block<=0) return - var/list/BOUNDS=GetDNABounds(block) - var/val - if(on) - val=rand(BOUNDS[DNA_ON_LOWERBOUND],BOUNDS[DNA_ON_UPPERBOUND]) - else - val=rand(1,BOUNDS[DNA_OFF_UPPERBOUND]) - SetSEValue(block,val,defer) - -// Get hex-encoded SE block. -/datum/dna/proc/GetSEBlock(var/block) - return EncodeDNABlock(GetSEValue(block)) - -// Do not use this unless you absolutely have to. -// Set a block from a hex string. This is inefficient. If you can, use SetUIValue(). -// Used in DNA modifiers. -/datum/dna/proc/SetSEBlock(var/block,var/value,var/defer=0) - if (block<=0) return - var/nval=hex2num(value) - //testing("SetSEBlock([block],[value],[defer]): [value] -> [nval]") - return SetSEValue(block,nval,defer) - -/datum/dna/proc/GetSESubBlock(var/block,var/subBlock) - return copytext(GetSEBlock(block),subBlock,subBlock+1) - -// Do not use this unless you absolutely have to. -// Set a sub-block from a hex character. This is inefficient. If you can, use SetUIValue(). -// Used in DNA modifiers. -/datum/dna/proc/SetSESubBlock(var/block,var/subBlock, var/newSubBlock, var/defer=0) - if (block<=0) return - var/oldBlock=GetSEBlock(block) - var/newBlock="" - for(var/i=1, i<=length(oldBlock), i++) - if(i==subBlock) - newBlock+=newSubBlock - else - newBlock+=copytext(oldBlock,i,i+1) - //testing("SetSESubBlock([block],[subBlock],[newSubBlock],[defer]): [oldBlock] -> [newBlock]") - SetSEBlock(block,newBlock,defer) - -/proc/EncodeDNABlock(var/value) - return num2hex_padded(value, 3) - -/datum/dna/proc/UpdateUI() - src.uni_identity="" - for(var/block in UI) - uni_identity += EncodeDNABlock(block) - //testing("New UI: [uni_identity]") - dirtyUI=0 - -/datum/dna/proc/UpdateSE() - //var/oldse=struc_enzymes - struc_enzymes="" - for(var/block in SE) - struc_enzymes += EncodeDNABlock(block) - //testing("Old SE: [oldse]") - //testing("New SE: [struc_enzymes]") - dirtySE=0 - -// BACK-COMPAT! -// Just checks our character has all the crap it needs. -/datum/dna/proc/check_integrity(var/mob/living/carbon/human/character) - if(character) - if(UI.len != DNA_UI_LENGTH) - ResetUIFrom(character) - - if(length(struc_enzymes)!= 3*DNA_SE_LENGTH) - ResetSE() - - if(length(unique_enzymes) != 32) - unique_enzymes = md5(num2text(character.original_genetic_seed)) - else - if(!species) - species = global.using_map.default_species - if(length(uni_identity) != 3*DNA_UI_LENGTH) - uni_identity = "00600200A00E0110148FC01300B0095BD7FD3F4" - if(length(struc_enzymes)!= 3*DNA_SE_LENGTH) - struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" - -// BACK-COMPAT! -// Initial DNA setup. I'm kind of wondering why the hell this doesn't just call the above. -/datum/dna/proc/ready_dna(mob/living/carbon/human/character) - ResetUIFrom(character) - ResetSE() - unique_enzymes = character.get_unique_enzymes() diff --git a/code/game/dna/dna2_domutcheck.dm b/code/game/dna/dna2_domutcheck.dm deleted file mode 100644 index fbbcc3c612f..00000000000 --- a/code/game/dna/dna2_domutcheck.dm +++ /dev/null @@ -1,50 +0,0 @@ -// (Re-)Apply mutations. -// TODO: Turn into a /mob proc, change inj to a bitflag for various forms of differing behavior. -// M: Mob to mess with -// connected: Machine we're in, type unchecked so I doubt it's used beyond monkeying -// flags: See below, bitfield. -#define MUTCHK_FORCED 1 -/proc/domutcheck(var/mob/living/M, var/connected=null, var/flags=0) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.should_have_organ(BP_HEART)) - return - - var/list/all_genes = decls_repository.get_decls_of_subtype(/decl/gene) - for(var/gene_type in all_genes) - var/decl/gene/gene = all_genes[gene_type] - if(!M || !M.dna) - return - if(!gene.block) - continue - - // Sanity checks, don't skip. - if(!gene.can_activate(M,flags)) - //testing("[M] - Failed to activate [gene.name] (can_activate fail).") - continue - - // Current state - var/gene_active = (gene.flags & GENE_ALWAYS_ACTIVATE) - if(!gene_active) - gene_active = M.dna.GetSEState(gene.block) - - // Prior state - var/gene_prior_status = (gene.type in M.active_genes) - var/changed = gene_active != gene_prior_status || (gene.flags & GENE_ALWAYS_ACTIVATE) - - // If gene state has changed: - if(changed) - // Gene active (or ALWAYS ACTIVATE) - if(gene_active || (gene.flags & GENE_ALWAYS_ACTIVATE)) - testing("[gene.name] activated!") - gene.activate(M,connected,flags) - if(M) - LAZYDISTINCTADD(M.active_genes, gene.type) - M.queue_icon_update() - // If Gene is NOT active: - else - testing("[gene.name] deactivated!") - gene.deactivate(M,connected,flags) - if(M) - LAZYREMOVE(M.active_genes, gene.type) - M.queue_icon_update() diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm deleted file mode 100644 index d413e8d467d..00000000000 --- a/code/game/dna/dna2_helpers.dm +++ /dev/null @@ -1,105 +0,0 @@ -///////////////////////////// -// Helpers for DNA2 -///////////////////////////// - -// DNA Gene activation boundaries, see dna2.dm. -// Returns a list object with 4 numbers. -/proc/GetDNABounds(var/block) - var/list/BOUNDS=dna_activity_bounds[block] - if(!istype(BOUNDS)) - return DNA_DEFAULT_BOUNDS - return BOUNDS - -// Give Random Bad Mutation to M -/proc/randmutb(var/mob/living/M) - if(!M) return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.should_have_organ(BP_HEART)) - return - M.dna.check_integrity() - var/block = pick(global.GLASSESBLOCK,global.COUGHBLOCK,global.FAKEBLOCK,global.NERVOUSBLOCK,global.CLUMSYBLOCK,global.TWITCHBLOCK,global.HEADACHEBLOCK,global.BLINDBLOCK,global.DEAFBLOCK,global.HALLUCINATIONBLOCK) - M.dna.SetSEState(block, 1) - -// Give Random Good Mutation to M -/proc/randmutg(var/mob/living/M) - if(!M) return - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.should_have_organ(BP_HEART)) - return - M.dna.check_integrity() - var/block = pick(global.XRAYBLOCK,global.FIREBLOCK,global.TELEBLOCK,global.NOBREATHBLOCK,global.REMOTEVIEWBLOCK,global.REGENERATEBLOCK,global.INCREASERUNBLOCK,global.REMOTETALKBLOCK,global.MORPHBLOCK,global.BLENDBLOCK,global.NOPRINTSBLOCK,global.SHOCKIMMUNITYBLOCK,global.SMALLSIZEBLOCK) - M.dna.SetSEState(block, 1) - -// Random Appearance Mutation -/proc/randmuti(var/mob/living/M) - if(!M) return - M.dna.check_integrity() - M.dna.SetUIValue(rand(1,DNA_UI_LENGTH),rand(1,4095)) - -// Scramble UI or SE. -/proc/scramble(var/UI, var/mob/M, var/prob) - if(!M) return - M.dna.check_integrity() - if(UI) - for(var/i = 1, i <= DNA_UI_LENGTH-1, i++) - if(prob(prob)) - M.dna.SetUIValue(i,rand(1,4095),1) - M.dna.UpdateUI() - M.UpdateAppearance() - - else - for(var/i = 1, i <= DNA_SE_LENGTH-1, i++) - if(prob(prob)) - M.dna.SetSEValue(i,rand(1,4095),1) - M.dna.UpdateSE() - domutcheck(M, null) - return - -// /proc/updateappearance has changed behavior, so it's been removed -// Use mob.UpdateAppearance() instead. - -// Simpler. Don't specify UI in order for the mob to use its own. -/mob/proc/UpdateAppearance(var/list/UI=null) - return FALSE - -/mob/living/carbon/human/UpdateAppearance(var/list/UI=null) - - if(UI!=null) - src.dna.UI=UI - src.dna.UpdateUI() - - dna.check_integrity() - - fingerprint = dna.fingerprint - unique_enzymes = dna.unique_enzymes - set_skin_colour( rgb(dna.GetUIValueRange(DNA_UI_SKIN_R,255), dna.GetUIValueRange(DNA_UI_SKIN_G,255), dna.GetUIValueRange(DNA_UI_SKIN_B,255))) - set_eye_colour( rgb(dna.GetUIValueRange(DNA_UI_EYES_R,255), dna.GetUIValueRange(DNA_UI_EYES_G,255), dna.GetUIValueRange(DNA_UI_EYES_B,255))) - skin_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative. - - - // TODO: update DNA gender to not be a bool - use bodytype and pronouns - //Body markings - for(var/tag in dna.heritable_sprite_accessories) - var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(src, tag) - if(E) - var/list/marklist = dna.heritable_sprite_accessories[tag] - if(length(marklist)) - for(var/accessory in marklist) - E.set_sprite_accessory(accessory, null, marklist[accessory], skip_update = TRUE) - else - E.clear_sprite_accessories(skip_update = TRUE) - - //Base skin and blend - for(var/obj/item/organ/organ in get_organs()) - organ.set_dna(dna) - - force_update_limbs() - update_hair(update_icons = FALSE) - update_eyes() - return TRUE - -// Used below, simple injection modifier. -/proc/probinj(var/pr, var/inj) - return prob(pr+inj*pr) diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm deleted file mode 100644 index fbd088939f6..00000000000 --- a/code/game/dna/genes/disabilities.dm +++ /dev/null @@ -1,133 +0,0 @@ -///////////////////// -// DISABILITY GENES -// -// These activate either a mutation, disability, or sdisability. -// -// Gene is always activated. -///////////////////// - -/decl/gene/disability - name="DISABILITY" - /// Mutation to give (or 0) - var/mutation=0 - /// Disability to give (or 0) - var/disability=0 - /// SDisability to give (or 0) - var/sdisability=0 - /// Activation message - var/activation_message="" - /// Yay, you're no longer growing 3 arms - var/deactivation_message="" - -/decl/gene/disability/can_activate(var/mob/M,var/flags) - return 1 // Always set! - -/decl/gene/disability/activate(var/mob/M, var/connected, var/flags) - if(mutation && !(mutation in M.mutations)) - M.mutations.Add(mutation) - if(disability) - M.disabilities|=disability - if(sdisability) - M.set_sdisability(sdisability) - if(activation_message) - to_chat(M, "[activation_message]") - else - testing("[name] has no activation message.") - -/decl/gene/disability/deactivate(var/mob/M, var/connected, var/flags) - if(mutation && (mutation in M.mutations)) - M.mutations.Remove(mutation) - if(disability) - M.disabilities &= (~disability) - if(sdisability) - M.unset_sdisability(sdisability) - if(deactivation_message) - to_chat(M, "[deactivation_message]") - else - testing("[name] has no deactivation message.") - -// Note: Doesn't seem to do squat, at the moment. -/decl/gene/disability/hallucinate - name="Hallucinate" - activation_message="Your mind says 'Hello'." - mutation=mHallucination - -/decl/gene/disability/hallucinate/Initialize() - . = ..() - block=global.HALLUCINATIONBLOCK - -/decl/gene/disability/epilepsy - name="Epilepsy" - activation_message="You get a headache." - disability=EPILEPSY - -/decl/gene/disability/epilepsy/Initialize() - . = ..() - block=global.HEADACHEBLOCK - -/decl/gene/disability/cough - name="Coughing" - activation_message="You start coughing." - disability=COUGHING - -/decl/gene/disability/cough/Initialize() - . = ..() - block=global.COUGHBLOCK - -/decl/gene/disability/clumsy - name="Clumsiness" - activation_message="You feel lightheaded." - mutation=MUTATION_CLUMSY - -/decl/gene/disability/clumsy/Initialize() - . = ..() - block=global.CLUMSYBLOCK - -/decl/gene/disability/tourettes - name="Tourettes" - activation_message="You twitch." - disability=TOURETTES - -/decl/gene/disability/tourettes/Initialize() - . = ..() - block=global.TWITCHBLOCK - -/decl/gene/disability/nervousness - name="Nervousness" - activation_message="You feel nervous." - disability=NERVOUS - -/decl/gene/disability/nervousness/Initialize() - . = ..() - block=global.NERVOUSBLOCK - -/decl/gene/disability/blindness - name="Blindness" - activation_message="You can't seem to see anything." - sdisability=BLINDED - -/decl/gene/disability/blindness/Initialize() - . = ..() - block=global.BLINDBLOCK - -/decl/gene/disability/deaf - name="Deafness" - activation_message="It's kinda quiet." - sdisability=DEAFENED - -/decl/gene/disability/deaf/Initialize() - . = ..() - block=global.DEAFBLOCK - -/decl/gene/disability/deaf/activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - M.set_status(STAT_DEAF, 1) - -/decl/gene/disability/nearsighted - name="Nearsightedness" - activation_message="Your eyes feel weird..." - disability=NEARSIGHTED - -/decl/gene/disability/nearsighted/Initialize() - . = ..() - block=global.GLASSESBLOCK diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm deleted file mode 100644 index e137b1cb97a..00000000000 --- a/code/game/dna/genes/gene.dm +++ /dev/null @@ -1,97 +0,0 @@ -/decl/gene - /// Display name - var/name="BASE GENE" - /// What gene activates this? - var/block = 0 - /// Any of a number of GENE_ flags. - var/flags=0 - -/// Is the gene active in this mob's DNA? -/decl/gene/proc/is_active(var/mob/M) - return (type in M.active_genes) - -/decl/gene/proc/can_activate(var/mob/M, var/flags) - return FALSE - -/// Called when the gene activates. Do your magic here. -/decl/gene/proc/activate(var/mob/M, var/connected, var/flags) - return - -// Called when the gene deactivates. Undo your magic here. -/decl/gene/proc/deactivate(var/mob/M, var/connected, var/flags) - return - -// This section inspired by goone's bioEffects. - -/** -* Called in each life() tick. -*/ -/decl/gene/proc/OnMobLife(var/mob/M) - return - -/** -* Called when the mob dies -*/ -/decl/gene/proc/OnMobDeath(var/mob/M) - return - -/** -* Called when the mob says shit -*/ -/decl/gene/proc/OnSay(var/mob/M, var/message) - return message - -/** -* Called after the mob runs update_icons. -* -* @params M The subject. -* @params g Gender (m or f) -*/ -/decl/gene/proc/OnDrawUnderlays(var/mob/M, var/g) - return 0 - - -///////////////////// -// BASIC GENES -// -// These just chuck in a mutation and display a message. -// -// Gene is activated: -// 1. If mutation already exists in mob -// 2. If the probability roll succeeds -// 3. Activation is forced (done in domutcheck) -///////////////////// - - -/decl/gene/basic - name="BASIC GENE" - /// Mutation to give - var/mutation=0 - /// Activation probability - var/activation_prob=45 - /// Possible activation messages - var/activation_messages - /// Possible deactivation messages - var/deactivation_messages - -/decl/gene/basic/can_activate(var/mob/M,var/flags) - if(flags & MUTCHK_FORCED) - return 1 - // Probability check - return probinj(activation_prob,(flags&MUTCHK_FORCED)) - -/decl/gene/basic/activate(var/mob/M) - M.mutations.Add(mutation) - if(length(activation_messages)) - if(islist(activation_messages)) - to_chat(M, SPAN_NOTICE(pick(activation_messages))) - else - to_chat(M, SPAN_NOTICE(activation_messages)) - -/decl/gene/basic/deactivate(var/mob/M) - M.mutations.Remove(mutation) - if(length(deactivation_messages)) - if(islist(deactivation_messages)) - to_chat(M, SPAN_WARNING(pick(deactivation_messages))) - else - to_chat(M, SPAN_WARNING(deactivation_messages)) diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm deleted file mode 100644 index c73b16d0eec..00000000000 --- a/code/game/dna/genes/powers.dm +++ /dev/null @@ -1,118 +0,0 @@ -/////////////////////////////////// -// POWERS -/////////////////////////////////// - -/decl/gene/basic/nobreath - name="No Breathing" - activation_messages="You feel no need to breathe." - mutation=mNobreath - -/decl/gene/basic/nobreath/Initialize() - . = ..() - block=global.NOBREATHBLOCK - -/decl/gene/basic/remoteview - name="Remote Viewing" - activation_messages="Your mind expands." - mutation=mRemote - -/decl/gene/basic/remoteview/Initialize() - . = ..() - block=global.REMOTEVIEWBLOCK - -/decl/gene/basic/remoteview/activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - M.verbs += /mob/living/carbon/human/proc/remoteobserve - -/decl/gene/basic/regenerate - name="Regenerate" - activation_messages="You feel better." - mutation=mRegen - -/decl/gene/basic/regenerate/Initialize() - . = ..() - block=global.REGENERATEBLOCK - -/decl/gene/basic/regenerate - name="Super Speed" - activation_messages="Your leg muscles pulsate." - mutation=mRun - -/decl/gene/basic/regenerate/Initialize() - . = ..() - block=global.INCREASERUNBLOCK - -/decl/gene/basic/remotetalk - name="Telepathy" - activation_messages="You expand your mind outwards." - mutation=mRemotetalk - -/decl/gene/basic/remotetalk/Initialize() - . = ..() - block=global.REMOTETALKBLOCK - -/decl/gene/basic/remotetalk/activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - M.verbs += /mob/living/carbon/human/proc/remotesay - -/decl/gene/basic/morph - name="Morph" - activation_messages="Your skin feels strange." - mutation=mMorph - -/decl/gene/basic/noshock/Initialize() - . = ..() - block=global.MORPHBLOCK - -/decl/gene/basic/morph/activate(var/mob/M) - ..(M) - M.verbs += /mob/living/carbon/human/proc/morph - -/decl/gene/basic/cold_resist - name="Cold Resistance" - activation_messages="Your body is filled with warmth." - mutation=MUTATION_COLD_RESISTANCE - -/decl/gene/basic/cold_resist/Initialize() - . = ..() - block=global.FIREBLOCK - -/decl/gene/basic/cold_resist/can_activate(var/mob/M,var/flags) - if(flags & MUTCHK_FORCED) - return 1 - // Probability check - var/_prob=30 - //if(mHeatres in M.mutations) - // _prob=5 - if(probinj(_prob,(flags&MUTCHK_FORCED))) - return 1 - -/decl/gene/basic/cold_resist/OnDrawUnderlays(var/mob/M,var/g) - return "fire_s" - -/decl/gene/basic/noprints - name="No Prints" - activation_messages="Your fingers feel numb." - mutation=mFingerprints - -/decl/gene/basic/noprints/Initialize() - . = ..() - block=global.NOPRINTSBLOCK - -/decl/gene/basic/noshock - name="Shock Immunity" - activation_messages="Your skin feels strange." - mutation=mShock - -/decl/gene/basic/noshock/Initialize() - . = ..() - block=global.SHOCKIMMUNITYBLOCK - -/decl/gene/basic/xray - name="X-Ray Vision" - activation_messages="The walls suddenly disappear." - mutation=MUTATION_XRAY - -/decl/gene/basic/xray/Initialize() - . = ..() - block=global.XRAYBLOCK diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index a993e91d96f..fae84e6d780 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -17,7 +17,7 @@ var/obj/item/organ/external/affecting = null if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user affecting = GET_EXTERNAL_ORGAN(H, zone) if(affecting) diff --git a/code/game/gamemodes/cult/ghosts.dm b/code/game/gamemodes/cult/ghosts.dm index cd9e729dbc1..575a3e0363f 100644 --- a/code/game/gamemodes/cult/ghosts.dm +++ b/code/game/gamemodes/cult/ghosts.dm @@ -206,11 +206,11 @@ if(!ghost_ability_check()) return - var/list/mob/living/carbon/human/choices = list() - for(var/mob/living/carbon/human/H in range(1)) + var/list/mob/living/human/choices = list() + for(var/mob/living/human/H in range(1)) choices += H - var/mob/living/carbon/human/choice = input(src, "Whom do you want to scratch?") as null|anything in choices + var/mob/living/human/choice = input(src, "Whom do you want to scratch?") as null|anything in choices if(!choice) return @@ -234,11 +234,11 @@ if(!ghost_ability_check()) return - var/list/mob/living/carbon/human/choices = list() - for(var/mob/living/carbon/human/H in range(1)) + var/list/mob/living/human/choices = list() + for(var/mob/living/human/H in range(1)) choices += H - var/mob/living/carbon/human/choice = input(src, "Whom do you want to scare?") as null|anything in choices + var/mob/living/human/choice = input(src, "Whom do you want to scare?") as null|anything in choices if(!choice) return diff --git a/code/game/gamemodes/cult/narsie.dm b/code/game/gamemodes/cult/narsie.dm index 943bc1b1f69..11ea55d1302 100644 --- a/code/game/gamemodes/cult/narsie.dm +++ b/code/game/gamemodes/cult/narsie.dm @@ -97,7 +97,7 @@ var/global/list/narsie_list = list() targets += cult_nh_mind.current // If we have no valid cultists, go for any human. if(!length(targets)) - for(var/mob/living/carbon/human/food in global.living_mob_list_) + for(var/mob/living/human/food in global.living_mob_list_) if(food.stat) var/turf/pos = get_turf(food) if(pos?.z in current_zs) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index b0d234d3f80..30ddc153267 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -96,7 +96,7 @@ return 1 return 0 -/mob/living/carbon/human/make_rune(var/rune, var/cost, var/tome_required) +/mob/living/human/make_rune(var/rune, var/cost, var/tome_required) if(should_have_organ(BP_HEART) && vessel && vessel.total_volume < species.blood_volume * 0.7) to_chat(src, "You are too weak to draw runes.") return @@ -105,7 +105,7 @@ /mob/proc/remove_blood_simple(var/blood) return -/mob/living/carbon/human/remove_blood_simple(var/blood) +/mob/living/human/remove_blood_simple(var/blood) if(should_have_organ(BP_HEART)) vessel.remove_any(blood) @@ -115,7 +115,7 @@ /mob/living/silicon/get_blood_name() return "oil" -/mob/living/carbon/human/get_blood_name() +/mob/living/human/get_blood_name() if(species) return species.get_blood_name(src) return "blood" @@ -126,7 +126,7 @@ /mob/proc/mob_needs_tome() return 0 -/mob/living/carbon/human/mob_needs_tome() +/mob/living/human/mob_needs_tome() return 1 var/global/list/Tier1Runes = list( @@ -312,7 +312,7 @@ var/global/list/Tier4Runes = list( /mob/proc/message_cult_communicate() return -/mob/living/carbon/human/message_cult_communicate() +/mob/living/human/message_cult_communicate() var/decl/pronouns/G = get_pronouns() visible_message(SPAN_WARNING("\The [src] cuts [G.his] finger and starts drawing on the back of [G.his] hand.")) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index ffdd2b17b7c..9c426d7f622 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -472,7 +472,7 @@ var/dam_amt = 2 + length(casters) victim.take_organ_damage(dam_amt, dam_amt) // This is to speed up the process and also damage mobs that don't take damage from being on fire, e.g. borgs if(ishuman(victim)) - var/mob/living/carbon/human/H = victim + var/mob/living/human/H = victim if(H.is_asystole()) H.take_damage(2 + casters.len, BRAIN) sleep(40) @@ -492,7 +492,7 @@ /* old sac code - left there in case someone wants to salvage it var/worth = 0 if(ishuman(H)) - var/mob/living/carbon/human/lamb = H + var/mob/living/human/lamb = H if(lamb.species.rarity_value > 3) worth = 1 @@ -520,8 +520,8 @@ strokes = 3 /obj/effect/rune/drain/cast(var/mob/living/user) - var/mob/living/carbon/human/victim - for(var/mob/living/carbon/human/M in get_turf(src)) + var/mob/living/human/victim + for(var/mob/living/human/M in get_turf(src)) if(iscultist(M)) continue victim = M @@ -536,7 +536,7 @@ user.visible_message("Blood flows from \the [src] into \the [user]!", "The blood starts flowing from \the [src] into your frail mortal body. [capitalize(english_list(heal_user(user), nothing_text = "you feel no different"))].", "You hear liquid flow.") user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) -/obj/effect/rune/drain/proc/heal_user(var/mob/living/carbon/human/user) +/obj/effect/rune/drain/proc/heal_user(var/mob/living/human/user) if(!istype(user)) return list("you feel no different") var/list/statuses = list() @@ -699,9 +699,9 @@ strokes = 4 /obj/effect/rune/revive/cast(var/mob/living/user) - var/mob/living/carbon/human/target + var/mob/living/human/target var/obj/item/soulstone/source - for(var/mob/living/carbon/human/M in get_turf(src)) + for(var/mob/living/human/M in get_turf(src)) if(M.stat == DEAD) if(iscultist(M)) if(M.key) diff --git a/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm b/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm index 88708dee839..b95a69b21c6 100644 --- a/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm +++ b/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm @@ -72,7 +72,7 @@ /obj/effect/bluegoast name = "echo" desc = "It's not going to punch you, is it?" - var/mob/living/carbon/human/daddy + var/mob/living/human/daddy anchored = TRUE var/reality = 0 simulated = 0 @@ -119,9 +119,9 @@ return daddy.examine(arglist(args)) /obj/effect/bluegoast/proc/blueswitch() - var/mob/living/carbon/human/H + var/mob/living/human/H if(ishuman(daddy)) - H = new(get_turf(src), daddy.species.name, daddy.dna.Clone(), daddy.get_bodytype()) + H = new(get_turf(src), daddy.species.name, daddy.get_mob_snapshot(force = TRUE), daddy.get_bodytype()) for(var/obj/item/entry in daddy.get_equipped_items(TRUE)) daddy.remove_from_mob(entry) //steals instead of copies so we don't end up with duplicates H.equip_to_appropriate_slot(entry) diff --git a/code/game/gamemodes/game_mode_latespawn.dm b/code/game/gamemodes/game_mode_latespawn.dm index 8fd44e1744d..eee94e85b16 100644 --- a/code/game/gamemodes/game_mode_latespawn.dm +++ b/code/game/gamemodes/game_mode_latespawn.dm @@ -21,13 +21,13 @@ return TRUE //This can be overriden in case a game mode needs to do stuff when a player latejoins -/decl/game_mode/proc/handle_latejoin(var/mob/living/carbon/human/character) +/decl/game_mode/proc/handle_latejoin(var/mob/living/human/character) if(character.mind) character.mind.generate_goals(character.mind.assigned_job, is_spawning=TRUE) character.show_goals() return 0 -/decl/game_mode/proc/handle_offsite_latejoin(var/mob/living/carbon/human/character) +/decl/game_mode/proc/handle_offsite_latejoin(var/mob/living/human/character) return 0 /decl/game_mode/proc/process_autoantag() diff --git a/code/game/gamemodes/objectives/_objective.dm b/code/game/gamemodes/objectives/_objective.dm index ccfaea16d32..531ea1ccee6 100644 --- a/code/game/gamemodes/objectives/_objective.dm +++ b/code/game/gamemodes/objectives/_objective.dm @@ -25,3 +25,4 @@ var/global/list/all_objectives = list() possible_targets += possible_target if(possible_targets.len > 0) target = pick(possible_targets) + return target \ No newline at end of file diff --git a/code/game/gamemodes/objectives/objective_cult.dm b/code/game/gamemodes/objectives/objective_cult.dm index f247969f19b..4f8982daf12 100644 --- a/code/game/gamemodes/objectives/objective_cult.dm +++ b/code/game/gamemodes/objectives/objective_cult.dm @@ -16,9 +16,10 @@ var/list/possible_targets = list() if(!possible_targets.len) var/decl/special_role/cult = GET_DECL(/decl/special_role/cultist) - for(var/mob/living/carbon/human/player in global.player_list) + for(var/mob/living/human/player in global.player_list) if(player.mind && !(player.mind in cult.current_antagonists)) possible_targets += player.mind if(possible_targets.len > 0) target = pick(possible_targets) if(target) explanation_text = "Sacrifice [target.name], the [target.assigned_role]. You will need the sacrifice rune (Hell blood join) and three acolytes to do so." + return target diff --git a/code/game/gamemodes/objectives/objective_heist.dm b/code/game/gamemodes/objectives/objective_heist.dm index 75125093c04..c90e5686d8a 100644 --- a/code/game/gamemodes/objectives/objective_heist.dm +++ b/code/game/gamemodes/objectives/objective_heist.dm @@ -1,10 +1,7 @@ -/datum/objective/heist/proc/choose_target() - return - -/datum/objective/heist/kidnap +/datum/objective/kidnap var/list/roles -/datum/objective/heist/kidnap/choose_target() +/datum/objective/kidnap/find_target() var/list/possible_targets = list() var/list/priority_targets = list() @@ -28,7 +25,7 @@ explanation_text = "Free Objective" return target -/datum/objective/heist/loot/choose_target() +/datum/objective/loot/find_target() var/loot = "an object" switch(rand(1,8)) if(1) @@ -65,8 +62,9 @@ loot = "an ion gun" explanation_text = "It's a buyer's market out here. Steal [loot] for resale." + return target -/datum/objective/heist/salvage/choose_target() +/datum/objective/salvage/find_target() var/list/loot = list( /decl/material/solid/metal/steel = 300, /decl/material/solid/glass = 200, @@ -79,6 +77,7 @@ var/decl/material/mat = GET_DECL(pick(loot)) explanation_text = "Ransack the [station_name()] and escape with [loot[mat.type]] unit\s of [mat.solid_name]." + return target -/datum/objective/heist/preserve_crew +/datum/objective/preserve_crew explanation_text = "Do not leave anyone behind, alive or dead." \ No newline at end of file diff --git a/code/game/gamemodes/objectives/objective_misc.dm b/code/game/gamemodes/objectives/objective_misc.dm index 5ad82119e16..0feb39b668e 100644 --- a/code/game/gamemodes/objectives/objective_misc.dm +++ b/code/game/gamemodes/objectives/objective_misc.dm @@ -6,6 +6,3 @@ /datum/objective/survive explanation_text = "Stay alive until the end." - -/datum/objective/ninja_highlander - explanation_text = "You aspire to be a Grand Master of the Spider Clan. Kill all of your fellow acolytes." diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm deleted file mode 100644 index d6f168beea2..00000000000 --- a/code/game/gamemodes/setupgame.dm +++ /dev/null @@ -1,62 +0,0 @@ -///////////////////////// -// (mostly) DNA2 SETUP -///////////////////////// - -// Randomize block, assign a reference name, and optionally define difficulty (by making activation zone smaller or bigger) -// The name is used on /vg/ for species with predefined genetic traits, -// and for the DNA panel in the player panel. -/proc/getAssignedBlock(var/name,var/list/blocksLeft, var/activity_bounds=DNA_DEFAULT_BOUNDS) - if(blocksLeft.len==0) - warning("[name]: No more blocks left to assign!") - return 0 - var/assigned = pick(blocksLeft) - blocksLeft.Remove(assigned) - assigned_blocks[assigned]=name - dna_activity_bounds[assigned]=activity_bounds - //testing("[name] assigned to block #[assigned].") - return assigned - -/proc/setupgenetics() - - if (prob(50)) - // Currently unused. Will revisit. - N3X - global.BLOCKADD = rand(-300,300) - if (prob(75)) - global.DIFFMUT = rand(0,20) - - var/list/numsToAssign=new() - for(var/i=1;iThe sounds of battle fill your ears...") if(ORION_TRAIL_ILLNESS) if(ishuman(usr)) - var/mob/living/carbon/human/M = usr + var/mob/living/human/M = usr to_chat(M, "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.") M.vomit() else diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index 5ca01aa22df..f43c392a16c 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -9,44 +9,46 @@ var/list/authorized = list( ) -/obj/machinery/computer/shuttle/attackby(var/obj/item/card/W as obj, var/mob/user as mob) +/obj/machinery/computer/shuttle/attackby(var/obj/item/card as obj, var/mob/user as mob) if(stat & (BROKEN|NOPOWER)) return var/datum/evacuation_controller/shuttle/evac_control = SSevac.evacuation_controller if(!istype(evac_control)) - to_chat(user, "This console should not in use on this map. Please report this to a developer.") + to_chat(user, "This console should not be in use on this map. Please report this to a developer.") return - if ((!( istype(W, /obj/item/card) ) || evac_control.has_evacuated() || !( user ))) + if(!istype(card, /obj/item/card)) // don't try to get an ID card if we're an emag + card = card.GetIdCard() // handles stored IDs in modcomps and similar + + if ((!istype(card, /obj/item/card) || evac_control.has_evacuated() || !user)) return - if (istype(W, /obj/item/card/id)||istype(W, /obj/item/modular_computer)) - if (istype(W, /obj/item/modular_computer)) - W = W.GetIdCard() - if (!W:access) //no access - to_chat(user, "The access level of [W:registered_name]\'s card is not high enough.") + if (istype(card, /obj/item/card/id)) + var/obj/item/card/id/id_card = card + if (!id_card.access) //no access + to_chat(user, "The access level of [id_card.registered_name]\'s card is not high enough.") return - var/list/cardaccess = W:access + var/list/cardaccess = id_card.access if(!istype(cardaccess, /list) || !cardaccess.len) //no access - to_chat(user, "The access level of [W:registered_name]\'s card is not high enough.") + to_chat(user, "The access level of [id_card.registered_name]\'s card is not high enough.") return - if(!(access_bridge in W:access)) //doesn't have this access - to_chat(user, "The access level of [W:registered_name]\'s card is not high enough.") + if(!(access_bridge in id_card.access)) //doesn't have this access + to_chat(user, "The access level of [id_card.registered_name]\'s card is not high enough.") return 0 - var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort") - if(evac_control.is_prepared() && user.get_active_held_item() != W) + var/choice = alert(user, "Would you like to (un)authorize a shortened launch time? [auth_need - authorized.len] authorization\s are still needed. Use abort to cancel all authorizations.", "Shuttle Launch", "Authorize", "Repeal", "Abort") + if(evac_control.is_prepared() && user.get_active_held_item() != card) return 0 switch(choice) if("Authorize") - src.authorized -= W:registered_name - src.authorized += W:registered_name + src.authorized -= id_card.registered_name + src.authorized += id_card.registered_name if (src.auth_need - src.authorized.len > 0) message_admins("[key_name_admin(user)] has authorized early shuttle launch") log_game("[user.ckey] has authorized early shuttle launch") - to_world(text("Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len)) + to_world("Alert: [auth_need - authorized.len] authorizations needed until shuttle is launched early") else message_admins("[key_name_admin(user)] has launched the shuttle") log_game("[user.ckey] has launched the shuttle early") @@ -57,18 +59,18 @@ src.authorized = list( ) if("Repeal") - src.authorized -= W:registered_name - to_world(text("Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len)) + src.authorized -= id_card.registered_name + to_world("Alert: [auth_need - authorized.len] authorizations needed until shuttle is launched early") if("Abort") to_world("All authorizations to shortening time for shuttle launch have been revoked!") src.authorized.len = 0 src.authorized = list( ) - else if (istype(W, /obj/item/card/emag) && !emagged) + else if (istype(card, /obj/item/card/emag) && !emagged) var/choice = alert(user, "Would you like to launch the shuttle?","Shuttle control", "Launch", "Cancel") - if(!emagged && !evac_control.is_prepared() && user.get_active_held_item() == W) + if(!emagged && !evac_control.is_prepared() && user.get_active_held_item() == card) switch(choice) if("Launch") to_world("Alert: Shuttle launch time shortened to 10 seconds!") diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 25b6e68ade9..3743f5a6a78 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -151,7 +151,7 @@ var/on_store_message = "has entered long-term storage." var/on_store_name = "Cryogenic Oversight" var/on_enter_occupant_message = "You feel cool air surround you. You go numb as your senses turn inward." - var/allow_occupant_types = list(/mob/living/carbon/human) + var/allow_occupant_types = list(/mob/living/human) var/disallow_occupant_types = list() var/mob/living/occupant // Person waiting to be despawned. diff --git a/code/game/machinery/doors/_door.dm b/code/game/machinery/doors/_door.dm index 53f580f385b..3af28af67b7 100644 --- a/code/game/machinery/doors/_door.dm +++ b/code/game/machinery/doors/_door.dm @@ -234,12 +234,13 @@ /obj/machinery/door/hitby(var/atom/movable/AM, var/datum/thrownthing/TT) . = ..() if(.) - visible_message("[src.name] was hit by [AM].") + visible_message(SPAN_DANGER("\The [src] was hit by \the [AM].")) var/tforce = 0 if(ismob(AM)) tforce = 3 * TT.speed - else - tforce = AM:throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) + else if(isobj(AM)) + var/obj/hitter_obj = AM + tforce = hitter_obj.throwforce * (TT.speed/THROWFORCE_SPEED_DIVISOR) playsound(src.loc, hitsound, 100, 1) take_damage(tforce) @@ -390,7 +391,7 @@ else if(current_health < current_max_health && get_dist(src, user) <= 1) to_chat(user, "\The [src] has some minor scuffing.") - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if (emagged && istype(H) && (H.skill_check(SKILL_COMPUTER, SKILL_ADEPT) || H.skill_check(SKILL_ELECTRICAL, SKILL_ADEPT))) to_chat(user, SPAN_WARNING("\The [src]'s control panel looks fried.")) diff --git a/code/game/machinery/doors/airlock_interactions.dm b/code/game/machinery/doors/airlock_interactions.dm index 0b0545aee31..2ad96280a52 100644 --- a/code/game/machinery/doors/airlock_interactions.dm +++ b/code/game/machinery/doors/airlock_interactions.dm @@ -79,7 +79,7 @@ if(src.Move(T)) return -/mob/living/carbon/human/airlock_crush(var/crush_damage) +/mob/living/human/airlock_crush(var/crush_damage) . = ..() if (can_feel_pain()) emote(/decl/emote/audible/scream) diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index 1bd45784750..e7ce3e4b90c 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -147,7 +147,8 @@ /obj/machinery/door/blast/attackby(obj/item/C, mob/user) add_fingerprint(user, 0, C) if(!panel_open) //Do this here so the door won't change state while prying out the circuit - if(IS_CROWBAR(C) || (istype(C, /obj/item/twohanded/fireaxe) && C:wielded == 1)) + var/obj/item/twohanded/zweihander = C + if(IS_CROWBAR(C) || (istype(C, /obj/item/twohanded/fireaxe) && zweihander.wielded)) if(((stat & NOPOWER) || (stat & BROKEN)) && !( operating )) to_chat(user, "You begin prying at \the [src]...") if(do_after(user, 2 SECONDS, src)) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 63d9e92bfef..66171dc8f41 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -140,7 +140,7 @@ /obj/machinery/door/window/physical_attack_hand(mob/user) if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(H.species.can_shred(H)) playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1) visible_message("\The [user] smashes against \the [src].", 1) @@ -198,7 +198,7 @@ flick("[base_state]deny", src) /obj/machinery/door/window/bash(obj/item/I, mob/user) - //Emags and ninja swords? You may pass. + //Emags and energy swords? You may pass. if (istype(I, /obj/item/energy_blade)) var/obj/item/energy_blade/blade = I if(blade.is_special_cutting_tool() && emag_act(10, user)) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 3f3908e8f66..259a5461286 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -74,13 +74,13 @@ if(O.eyecheck() > FLASH_PROTECTION_NONE) continue if(ishuman(O)) - var/mob/living/carbon/human/H = O - flash_time = round(H.getFlashMod() * flash_time) + var/mob/living/human/H = O + flash_time = round(H.get_flash_mod() * flash_time) if(flash_time <= 0) return - var/vision_organ = H.get_bodytype()?.vision_organ - if(vision_organ) - var/obj/item/organ/internal/E = GET_INTERNAL_ORGAN(H, vision_organ) + var/vision_organ_tag = H.get_vision_organ_tag() + if(vision_organ_tag) + var/obj/item/organ/internal/E = GET_INTERNAL_ORGAN(H, vision_organ_tag) if(E && E.is_bruised() && prob(E.damage + 50)) H.flash_eyes() E.damage += rand(1, 5) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 14522e6512c..a30ad3f20cb 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -77,7 +77,7 @@ var/global/list/holopads = list() // Update our desc. desc = "It's a floor-mounted device for projecting holographic images. Its ID is '[holopad_id]'" -/obj/machinery/hologram/holopad/interface_interact(var/mob/living/carbon/human/user) //Carn: Hologram requests. +/obj/machinery/hologram/holopad/interface_interact(var/mob/living/human/user) //Carn: Hologram requests. if(!CanInteract(user, DefaultTopicState())) return FALSE if(incoming_connection && caller_id) diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 220dc9a6753..99da01b0b81 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -123,7 +123,7 @@ playsound(loc, 'sound/items/AirHorn.ogg', 100, 1) for(var/mob/living/M in ohearers(6, src)) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(H.get_sound_volume_multiplier() < 0.2) continue M.set_status(STAT_ASLEEP, 0) diff --git a/code/game/machinery/kitchen/cooking_machines/fryer.dm b/code/game/machinery/kitchen/cooking_machines/fryer.dm index ead11db0a55..0be1e523f11 100644 --- a/code/game/machinery/kitchen/cooking_machines/fryer.dm +++ b/code/game/machinery/kitchen/cooking_machines/fryer.dm @@ -31,7 +31,7 @@ var/target_zone = user.get_target_zone() if(ishuman(victim) && !(target_zone in list(BP_GROIN, BP_CHEST))) - var/mob/living/carbon/human/H = victim + var/mob/living/human/H = victim var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(H, target_zone) if(!E) to_chat(user, "They are missing that body part!") diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 513838af3fc..de7e5b72a2a 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -342,8 +342,7 @@ SSnano.update_uis(src) /obj/machinery/microwave/on_reagent_change() - ..() - if(!operating) + if((. = ..()) && !operating) SSnano.update_uis(src) /obj/machinery/microwave/proc/dispose(var/mob/user, var/message = TRUE) diff --git a/code/game/machinery/message_server.dm b/code/game/machinery/message_server.dm index f9b935ff75e..513b398770d 100644 --- a/code/game/machinery/message_server.dm +++ b/code/game/machinery/message_server.dm @@ -154,7 +154,7 @@ var/global/list/message_servers = list() /obj/machinery/network/message_server/proc/send_to_department(var/department, var/message, var/tone) var/reached = 0 - for(var/mob/living/carbon/human/H in global.human_mob_list) + for(var/mob/living/human/H in global.human_mob_list) var/obj/item/modular_computer/pda/pda = locate() in H if(!pda) continue diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index babeef95697..609fa5d12d7 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -201,7 +201,7 @@ var/global/list/allCasters = list() //Global list that will contain reference to /obj/machinery/newscaster/interact(mob/user) //########### THE MAIN BEEF IS HERE! And in the proc below this...############ if(ishuman(user) || issilicon(user) ) - var/mob/living/carbon/human_or_robot_user = user + var/mob/living/human_or_robot_user = user var/dat dat = text("Newscaster

Newscaster Unit #[src.unit_no]

") @@ -758,7 +758,7 @@ var/global/list/allCasters = list() //Global list that will contain reference to /obj/item/newspaper/attack_self(mob/user) user.update_personal_goal(/datum/goal/achievement/newshound, TRUE) if(ishuman(user)) - var/mob/living/carbon/human/human_user = user + var/mob/living/human/human_user = user var/dat src.pages = 0 switch(screen) @@ -896,7 +896,7 @@ var/global/list/allCasters = list() //Global list that will contain reference to /obj/machinery/newscaster/proc/scan_user(mob/living/user) if(ishuman(user)) //User is a human - var/mob/living/carbon/human/human_user = user + var/mob/living/human/human_user = user var/obj/item/card/id/id = human_user.GetIdCard() if(istype(id)) //Newscaster scans you src.scanned_user = GetNameAndAssignmentFromId(id) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 6bf44daf084..ba7478c7439 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -463,7 +463,7 @@ var/global/list/turret_icons return TURRET_PRIORITY_TARGET //if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee -/obj/machinery/porta_turret/proc/assess_perp(var/mob/living/carbon/human/H) +/obj/machinery/porta_turret/proc/assess_perp(var/mob/living/human/H) if(!H || !istype(H)) return 0 diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index dfedef94c73..64a7cb96235 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -82,7 +82,7 @@ C.repair() if(ishuman(occupant)) - var/mob/living/carbon/human/H = occupant + var/mob/living/human/H = occupant var/obj/item/organ/internal/cell/potato = H.get_organ(BP_CELL, /obj/item/organ/internal/cell) if(potato) target = potato.cell @@ -194,7 +194,7 @@ var/mob/living/silicon/robot/R = M return (R.cell) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(H.isSynthetic()) return 1 var/obj/item/rig/rig = H.get_rig() diff --git a/code/game/machinery/suit_cycler.dm b/code/game/machinery/suit_cycler.dm index 7edd6cb3a2a..76abad87613 100644 --- a/code/game/machinery/suit_cycler.dm +++ b/code/game/machinery/suit_cycler.dm @@ -48,7 +48,7 @@ var/decl/item_modifier/target_modification var/target_bodytype - var/mob/living/carbon/human/occupant + var/mob/living/human/occupant var/obj/item/clothing/suit/space/void/suit var/obj/item/clothing/head/helmet/space/helmet var/obj/item/clothing/shoes/magboots/boots diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 1b3302440e9..0ad381c477e 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -63,7 +63,7 @@ var/global/list/singularity_beacons = list() addtimer(CALLBACK(src, PROC_REF(selfdestruct)), rand(5, 20) SECONDS) return if(ishuman(M)) - var/mob/living/carbon/human/N = M + var/mob/living/human/N = M to_chat(M, "You have joined the ranks of the Syndicate and become a traitor to the station!") var/decl/special_role/traitors = GET_DECL(/decl/special_role/traitor) traitors.add_antagonist(N.mind) diff --git a/code/game/machinery/vitals_monitor.dm b/code/game/machinery/vitals_monitor.dm index 3eff63edf62..f23583386a9 100644 --- a/code/game/machinery/vitals_monitor.dm +++ b/code/game/machinery/vitals_monitor.dm @@ -12,7 +12,7 @@ uncreated_component_parts = null construct_state = /decl/machine_construction/default/panel_closed - var/mob/living/carbon/human/victim + var/mob/living/human/victim var/beep = TRUE /obj/machinery/vitals_monitor/Destroy() diff --git a/code/game/movietitles.dm b/code/game/movietitles.dm index 2c961d0b5e5..1a685073daa 100644 --- a/code/game/movietitles.dm +++ b/code/game/movietitles.dm @@ -53,7 +53,7 @@ var/global/list/end_titles var/chunksize = 0 titles += "

EPISODE [rand(1,1000)]
[SSlore.get_end_credits_title()]

" - for(var/mob/living/carbon/human/H in global.living_mob_list_|global.dead_mob_list_) + for(var/mob/living/human/H in global.living_mob_list_|global.dead_mob_list_) if(findtext(H.real_name,"(mannequin)")) continue if(H.isMonkey() && findtext(H.real_name,"[lowertext(H.species.name)]")) //no monki @@ -98,7 +98,7 @@ var/global/list/end_titles var/list/corpses = list() var/list/monkies = list() - for(var/mob/living/carbon/human/H in global.dead_mob_list_) + for(var/mob/living/human/H in global.dead_mob_list_) if(H.timeofdeath < 5 MINUTES) //no prespawned corpses continue if(H.isMonkey() && findtext(H.real_name,"[lowertext(H.species.name)]")) diff --git a/code/game/objects/auras/regenerating_aura.dm b/code/game/objects/auras/regenerating_aura.dm index cb96b9e13ad..fb56c0fbe96 100644 --- a/code/game/objects/auras/regenerating_aura.dm +++ b/code/game/objects/auras/regenerating_aura.dm @@ -21,11 +21,11 @@ var/innate_heal = TRUE // Whether the aura is on, basically. -/obj/aura/regenerating/human/proc/external_regeneration_effect(var/obj/item/organ/external/O, var/mob/living/carbon/human/H) +/obj/aura/regenerating/human/proc/external_regeneration_effect(var/obj/item/organ/external/O, var/mob/living/human/H) return /obj/aura/regenerating/human/life_tick() - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(!istype(H)) . = 0 CRASH("Someone gave [user.type] a [src.type] aura. This is invalid.") diff --git a/code/game/objects/auras/shadowling_aura.dm b/code/game/objects/auras/shadowling_aura.dm index 172a3bb552f..ff081f7dfb1 100644 --- a/code/game/objects/auras/shadowling_aura.dm +++ b/code/game/objects/auras/shadowling_aura.dm @@ -4,14 +4,13 @@ /obj/aura/shadowling_aura/added_to(var/mob/living/L) ..() - if(!(MUTATION_SPACERES in L.mutations)) - L.mutations += MUTATION_SPACERES + if(L.add_genetic_condition(GENE_COND_SPACE_RESISTANCE)) added_mutation = TRUE /obj/aura/shadowling_aura/removed() if(added_mutation) added_mutation = FALSE - user.mutations -= MUTATION_SPACERES + user.remove_genetic_condition(GENE_COND_SPACE_RESISTANCE) ..() /obj/aura/shadowling_aura/bullet_act(var/obj/item/projectile/P) diff --git a/code/game/objects/effects/chem/water.dm b/code/game/objects/effects/chem/water.dm index fecc84fd965..ef1d2ba6096 100644 --- a/code/game/objects/effects/chem/water.dm +++ b/code/game/objects/effects/chem/water.dm @@ -10,8 +10,8 @@ QDEL_IN(src, 15 SECONDS) // In case whatever made it forgets to delete it /obj/effect/effect/water/on_reagent_change() - ..() - set_color(reagents?.get_color()) + if((. = ..())) + set_color(reagents?.get_color()) /obj/effect/effect/water/proc/set_up(var/turf/target, var/step_count = 5, var/delay = 5) if(!target) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 2af9a29f3d5..9a1dfda3656 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -123,7 +123,7 @@ /obj/effect/decal/cleanable/blood/attack_hand(mob/user) if(!amount || !length(blood_data) || !ishuman(user)) return ..() - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(H.get_equipped_item(slot_gloves_str)) return ..() var/taken = rand(1,amount) @@ -131,7 +131,7 @@ to_chat(user, SPAN_NOTICE("You get some of \the [src] on your hands.")) for(var/bloodthing in blood_data) user.add_blood(null, max(1, amount/length(blood_data)), blood_data[bloodthing]) - user.verbs += /mob/living/carbon/human/proc/bloody_doodle + user.verbs += /mob/living/human/proc/bloody_doodle return TRUE /obj/effect/decal/cleanable/blood/splatter diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm index 30dde5926a3..6b84dae52a0 100644 --- a/code/game/objects/effects/manifest.dm +++ b/code/game/objects/effects/manifest.dm @@ -9,7 +9,7 @@ /obj/effect/manifest/proc/manifest() var/dat = "Crew Manifest:
" - for(var/mob/living/carbon/human/M in SSmobs.mob_list) + for(var/mob/living/human/M in SSmobs.mob_list) dat += text(" [] - []
", M.name, M.get_assignment()) var/obj/item/paper/P = new /obj/item/paper( src.loc ) P.info = dat diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 03010895f28..7f70b3e996c 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -6,7 +6,7 @@ layer = OBJ_LAYER icon = 'icons/obj/items/weapon/landmine.dmi' icon_state = "uglymine" - var/triggerproc = "explode" //name of the proc thats called when the mine is triggered + var/triggerproc = PROC_REF(explode) // the proc that's called when the mine is triggered var/triggered = 0 /obj/effect/mine/Initialize() @@ -28,9 +28,12 @@ /obj/effect/mine/proc/triggerrad(obj) spark_at(src, cardinal_only = TRUE) - obj:radiation += 50 - randmutb(obj) - domutcheck(obj,null) + if(ismob(obj)) + var/mob/victim = obj + victim.radiation += 50 + if(ismob(obj)) + var/mob/mob = obj + mob.add_genetic_condition(pick(decls_repository.get_decls_of_type(/decl/genetic_condition/disability))) spawn(0) qdel(src) @@ -64,7 +67,9 @@ /obj/effect/mine/proc/triggerkick(obj) spark_at(src, cardinal_only = TRUE) - qdel(obj:client) + if(ismob(obj)) + var/mob/victim = obj + qdel(victim.client) spawn(0) qdel(src) @@ -76,24 +81,24 @@ /obj/effect/mine/dnascramble name = "Radiation Mine" icon_state = "uglymine" - triggerproc = "triggerrad" + triggerproc = PROC_REF(triggerrad) /obj/effect/mine/flame name = "Incendiary Mine" icon_state = "uglymine" - triggerproc = "triggerflame" + triggerproc = PROC_REF(triggerflame) /obj/effect/mine/kick name = "Kick Mine" icon_state = "uglymine" - triggerproc = "triggerkick" + triggerproc = PROC_REF(triggerkick) /obj/effect/mine/n2o name = "N2O Mine" icon_state = "uglymine" - triggerproc = "triggern2o" + triggerproc = PROC_REF(triggern2o) /obj/effect/mine/stun name = "Stun Mine" icon_state = "uglymine" - triggerproc = "triggerstun" + triggerproc = PROC_REF(triggerstun) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index ff133330e6a..3ecdcf8fcb8 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -23,7 +23,7 @@ return TRUE var/showed_msg = FALSE if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/decl/natural_attack/attack = H.get_unarmed_attack(src) if(istype(attack)) attack.show_attack(H, src, H.get_target_zone(), 1) diff --git a/code/game/objects/items/__item.dm b/code/game/objects/items/__item.dm index 54cbd4f4a23..051083b981d 100644 --- a/code/game/objects/items/__item.dm +++ b/code/game/objects/items/__item.dm @@ -244,7 +244,7 @@ //would check is_broken() and is_malfunctioning() here too but is_malfunctioning() //is probabilistic so we can't do that and it would be unfair to just check one. if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/obj/item/organ/external/hand = GET_EXTERNAL_ORGAN(H, M.get_empty_hand_slot()) if(istype(hand) && hand.is_usable()) return TRUE @@ -751,7 +751,7 @@ if(!istype(M)) return TRUE if(!blood_data && ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M blood_data = REAGENT_DATA(H.vessel, /decl/material/liquid/blood) var/sample_dna = LAZYACCESS(blood_data, "blood_DNA") if(sample_dna) @@ -788,7 +788,7 @@ var/global/list/_item_blood_mask = icon('icons/effects/blood.dmi', "itemblood") /* For zooming with scope or binoculars. This is called from modules/mob/mob_movement.dm if you move you will be zoomed out -modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. +modules/mob/living/human/life.dm if you die, you will be zoomed out. */ //Looking through a scope or binoculars should /not/ improve your periphereal vision. Still, increase viewsize a tiny bit so that sniping isn't as restricted to NSEW /obj/item/proc/zoom(mob/user, var/tileoffset = 14,var/viewsize = 9) //tileoffset is client view offset in the direction the user is facing. viewsize is how far out this thing zooms. 7 is normal view @@ -799,7 +799,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. var/devicename = zoomdevicename || name - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(user.incapacitated(INCAPACITATION_DISABLED)) to_chat(user, SPAN_WARNING("You are unable to focus through the [devicename].")) return diff --git a/code/game/objects/items/_item_damage.dm b/code/game/objects/items/_item_damage.dm index dfd25441d77..71afac1af8d 100644 --- a/code/game/objects/items/_item_damage.dm +++ b/code/game/objects/items/_item_damage.dm @@ -79,7 +79,7 @@ playsound(hit_atom, 'sound/weapons/throwtap.ogg', volume, TRUE, -1) /obj/item/proc/eyestab(mob/living/M, mob/living/user) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(istype(H)) for(var/slot in global.standard_headgear_slots) var/obj/item/protection = H.get_equipped_item(slot) diff --git a/code/game/objects/items/cryobag.dm b/code/game/objects/items/cryobag.dm index 467e29f6346..5d2a0699802 100644 --- a/code/game/objects/items/cryobag.dm +++ b/code/game/objects/items/cryobag.dm @@ -131,7 +131,7 @@ qdel(src) /obj/structure/closet/body_bag/cryobag/blank/WillContain() - return list(/mob/living/carbon/human/blank) + return list(/mob/living/human/blank) /obj/structure/closet/body_bag/cryobag/blank/Initialize() . = ..() diff --git a/code/game/objects/items/devices/auto_cpr.dm b/code/game/objects/items/devices/auto_cpr.dm index 101414fb7cf..ae70328b395 100644 --- a/code/game/objects/items/devices/auto_cpr.dm +++ b/code/game/objects/items/devices/auto_cpr.dm @@ -55,7 +55,7 @@ if(!ishuman(loc)) return PROCESS_KILL - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(H.get_equipped_slot_for_item(src) != slot_wear_suit_str) return PROCESS_KILL diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index a6b681dbc69..11ebc03e9c9 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -25,7 +25,7 @@ icon_state = "[icon_state]-burnt" /obj/item/flash/proc/clown_check(var/mob/user) - if(user && (MUTATION_CLUMSY in user.mutations) && prob(50)) + if(user && user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) to_chat(user, "\The [src] slips out of your hand.") user.try_unequip(src) return 0 diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 561f7d6de8f..882706ebc6f 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -29,10 +29,6 @@ name = "enchanted intercom" desc = "Talk into this while you ponder your orb." -/obj/item/radio/intercom/ninja - name = "stealth intercom" - desc = "It's hiding in plain sight." - /obj/item/radio/intercom/raider name = "piratical intercom" desc = "Pirate radio, but not in the usual sense of the word." diff --git a/code/game/objects/items/devices/scanners/health.dm b/code/game/objects/items/devices/scanners/health.dm index 22acf61c2d5..20db2e1f9cd 100644 --- a/code/game/objects/items/devices/scanners/health.dm +++ b/code/game/objects/items/devices/scanners/health.dm @@ -19,13 +19,13 @@ if (!user.check_dexterity(DEXTERITY_COMPLEX_TOOLS)) return - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) + if (user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) user.visible_message("\The [user] runs \the [scanner] over the floor.") to_chat(user, "Scan results for the floor:") to_chat(user, "Overall Status: Healthy") return - var/mob/living/carbon/human/scan_subject = null + var/mob/living/human/scan_subject = null if (ishuman(target)) scan_subject = target else if (istype(target, /obj/structure/closet/body_bag)) @@ -36,7 +36,7 @@ scan_content.Add(L) if (scan_content.len == 1) - for(var/mob/living/carbon/human/L in scan_content) + for(var/mob/living/human/L in scan_content) scan_subject = L else if (scan_content.len > 1) to_chat(user, "\The [scanner] picks up multiple readings inside \the [target], too close together to scan properly.") @@ -57,7 +57,7 @@ to_chat(user, .) to_chat(user, "
") -/proc/medical_scan_results(var/mob/living/carbon/human/H, var/verbose, var/skill_level = SKILL_DEFAULT) +/proc/medical_scan_results(var/mob/living/human/H, var/verbose, var/skill_level = SKILL_DEFAULT) . = list() var/header = list() var/b diff --git a/code/game/objects/items/devices/scanners/mass_spectrometer.dm b/code/game/objects/items/devices/scanners/mass_spectrometer.dm index 3eda6f1a4f4..4812824f742 100644 --- a/code/game/objects/items/devices/scanners/mass_spectrometer.dm +++ b/code/game/objects/items/devices/scanners/mass_spectrometer.dm @@ -14,8 +14,8 @@ create_reagents(5) /obj/item/scanner/spectrometer/on_reagent_change() - ..() - update_icon() + if((. = ..())) + update_icon() /obj/item/scanner/spectrometer/on_update_icon() . = ..() diff --git a/code/game/objects/items/devices/scanners/xenobio.dm b/code/game/objects/items/devices/scanners/xenobio.dm index d0af4cb3fbd..3fc507c50de 100644 --- a/code/game/objects/items/devices/scanners/xenobio.dm +++ b/code/game/objects/items/devices/scanners/xenobio.dm @@ -13,7 +13,7 @@ ) var/list/valid_targets = list( - /mob/living/carbon/human, + /mob/living/human, /mob/living/simple_animal ) @@ -40,7 +40,7 @@ /mob/proc/xenobio_scan_results() . = "Incompatible life form, analysis failed." -/mob/living/carbon/human/xenobio_scan_results() +/mob/living/human/xenobio_scan_results() . += "Data for \the [src]:" . += "Species:\t[species]" if(species.breath_type) diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index 75801bc5fb8..b6a3db82739 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -45,7 +45,7 @@ if (!is_in_slot()) return - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc var/temp_adj = min(H.bodytemperature - thermostat, max_cooling) @@ -65,7 +65,7 @@ // Checks whether the cooling unit is being worn on the back/suit slot. // That way you can't carry it in your hands while it's running to cool yourself down. /obj/item/suit_cooling_unit/proc/is_in_slot() - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(!istype(H)) return 0 return H.get_equipped_item(slot_back_str) == src || H.get_equipped_item(slot_s_store_str) == src diff --git a/code/game/objects/items/devices/suit_sensor_jammer.dm b/code/game/objects/items/devices/suit_sensor_jammer.dm index 1d60d6c05f5..980756bffec 100644 --- a/code/game/objects/items/devices/suit_sensor_jammer.dm +++ b/code/game/objects/items/devices/suit_sensor_jammer.dm @@ -186,7 +186,7 @@ sjm.enable() jammer_method = sjm -/obj/item/suit_sensor_jammer/proc/may_process_crew_data(var/mob/living/carbon/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos) +/obj/item/suit_sensor_jammer/proc/may_process_crew_data(var/mob/living/human/H, var/obj/item/clothing/sensor/vitals/S, var/turf/pos) if(!pos) return FALSE var/turf/T = get_turf(src) diff --git a/code/game/objects/items/devices/t_scanner.dm b/code/game/objects/items/devices/t_scanner.dm index d7fdbfb7756..b9e0a5369e0 100644 --- a/code/game/objects/items/devices/t_scanner.dm +++ b/code/game/objects/items/devices/t_scanner.dm @@ -101,7 +101,7 @@ if(ismob(scanned)) if(ishuman(scanned)) - var/mob/living/carbon/human/H = scanned + var/mob/living/human/H = scanned if(H.get_bodytype()?.appearance_flags & HAS_SKIN_COLOR) I.color = H.get_skin_colour() I.icon = 'icons/mob/mob.dmi' @@ -129,7 +129,7 @@ for(var/turf/T in range(scan_range, center)) for(var/mob/M in T.contents) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(H.is_cloaked()) . += M else if(M.alpha < 255) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index e93021d7c6e..1226b3f9ecc 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -43,7 +43,7 @@ effective or pretty fucking useless. return var/list/stun_victims = list() - for(var/mob/living/carbon/human/M in orange(10, user)) + for(var/mob/living/human/M in orange(10, user)) stun_victims += M spawn() if(prob(50)) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 66d1cfed471..f7a9d2432fe 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -6,7 +6,7 @@ material = /decl/material/solid/metal/stainlesssteel var/obj/item/tank/tank_one var/obj/item/tank/tank_two - var/obj/item/attached_device + var/obj/item/assembly/attached_device var/mob/attacher = null var/valve_open = 0 var/toggle = 1 @@ -110,7 +110,7 @@ else if(attached_device) if(href_list["rem_device"]) attached_device.dropInto(loc) - attached_device:holder = null + attached_device.holder = null attached_device = null update_icon() if(href_list["device"]) diff --git a/code/game/objects/items/flashlights/_flashlight.dm b/code/game/objects/items/flashlights/_flashlight.dm index 8afd18b19d0..989f8f6bc64 100644 --- a/code/game/objects/items/flashlights/_flashlight.dm +++ b/code/game/objects/items/flashlights/_flashlight.dm @@ -100,7 +100,7 @@ if(on && user.get_target_zone() == BP_EYES && target.should_have_organ(BP_HEAD)) add_fingerprint(user) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) //too dumb to use flashlight properly + if(user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) //too dumb to use flashlight properly return ..() //just hit them in the head for(var/slot in global.standard_headgear_slots) @@ -111,13 +111,14 @@ var/obj/item/organ/vision var/decl/bodytype/root_bodytype = target.get_bodytype() - if(!root_bodytype?.vision_organ || !target.should_have_organ(root_bodytype.vision_organ)) + var/vision_organ_tag = target.get_vision_organ_tag() + if(!vision_organ_tag || !target.should_have_organ(vision_organ_tag)) to_chat(user, SPAN_WARNING("You can't find anything on \the [target] to direct \the [src] into!")) return TRUE - vision = GET_INTERNAL_ORGAN(target, root_bodytype.vision_organ) + vision = GET_INTERNAL_ORGAN(target, vision_organ_tag) if(!vision) - vision = root_bodytype.has_organ[root_bodytype.vision_organ] + vision = root_bodytype.has_organ[vision_organ_tag] var/decl/pronouns/G = target.get_pronouns() to_chat(user, SPAN_WARNING("\The [target] is missing [G.his] [initial(vision.name)]!")) return TRUE @@ -135,7 +136,7 @@ return ..() /obj/item/flashlight/proc/inspect_vision(obj/item/organ/vision, mob/living/user) - var/mob/living/carbon/human/H = vision.owner + var/mob/living/human/H = vision.owner if(H == user) //can't look into your own eyes buster return @@ -145,7 +146,7 @@ if(vision.owner.stat == DEAD || H.is_blind()) //mob is dead or fully blind to_chat(user, SPAN_WARNING("\The [H]'s pupils do not react to the light!")) return - if(MUTATION_XRAY in H.mutations) + if(H.has_genetic_condition(GENE_COND_XRAY)) to_chat(user, SPAN_NOTICE("\The [H]'s pupils give an eerie glow!")) if(vision.damage) to_chat(user, SPAN_WARNING("There's visible damage to [H]'s [vision.name]!")) diff --git a/code/game/objects/items/passport.dm b/code/game/objects/items/passport.dm index 48f3c68e431..5fc16d6d6ed 100644 --- a/code/game/objects/items/passport.dm +++ b/code/game/objects/items/passport.dm @@ -15,7 +15,7 @@ ) var/info -/obj/item/passport/proc/set_info(mob/living/carbon/human/H) +/obj/item/passport/proc/set_info(mob/living/human/H) if(!istype(H)) return diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 5c5c99d44dc..84734302822 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -38,7 +38,7 @@ use(1) return TRUE - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, user.get_target_zone()) if(!affecting) to_chat(user, SPAN_WARNING("\The [target] is missing that body part!")) @@ -87,6 +87,9 @@ /decl/material/liquid/burn_meds/aloe = 1 ) +/obj/item/stack/medical/bruise_pack/bandage/five + amount = 5 + /obj/item/stack/medical/bruise_pack/bandage/proc/get_poultice_requirement_string() . = list() for(var/reagent in poultice_reagent_requirements) @@ -137,7 +140,7 @@ if(. || !ishuman(target)) return - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, user.get_target_zone()) if(affecting.is_bandaged()) to_chat(user, SPAN_WARNING("The wounds on [target]'s [affecting.name] have already been bandaged.")) @@ -206,13 +209,16 @@ desc = "A bandage soaked in a medicinal herbal mixture, good for treating burns and preventing infections." animal_heal = 3 +/obj/item/stack/medical/ointment/poultice/five + amount = 5 + /obj/item/stack/medical/ointment/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) . = ..() if(. || !ishuman(target)) return - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, user.get_target_zone()) if(affecting.is_salved()) to_chat(user, SPAN_WARNING("The wounds on [target]'s [affecting.name] have already been salved.")) @@ -252,7 +258,7 @@ if(. || !ishuman(target)) return - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, user.get_target_zone()) if(affecting.is_bandaged() && affecting.is_disinfected()) to_chat(user, SPAN_WARNING("The wounds on [target]'s [affecting.name] have already been treated.")) @@ -318,7 +324,7 @@ if(. || !ishuman(target)) return - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, user.get_target_zone()) if(affecting.is_salved()) @@ -365,7 +371,7 @@ if(. || !ishuman(target)) return - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, user.get_target_zone()) if(!(affecting.organ_tag in splintable_organs)) @@ -405,7 +411,7 @@ var/obj/item/stack/medical/splint/S = split(1, TRUE) if(S) if(affecting.apply_splint(S)) - target.verbs += /mob/living/carbon/human/proc/remove_splints + target.verbs += /mob/living/human/proc/remove_splints S.forceMove(affecting) if (target != user) user.visible_message( @@ -465,7 +471,7 @@ /obj/item/stack/medical/resin/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) . = ..() if(!. && ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, user.get_target_zone()) if((affecting.brute_dam + affecting.burn_dam) <= 0) to_chat(user, SPAN_WARNING("\The [target]'s [affecting.name] is undamaged.")) diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm index 126bb03d354..7a6097b9741 100644 --- a/code/game/objects/items/stacks/nanopaste.dm +++ b/code/game/objects/items/stacks/nanopaste.dm @@ -28,7 +28,7 @@ return TRUE if (ishuman(target)) //Repairing robolimbs - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/obj/item/organ/external/S = GET_EXTERNAL_ORGAN(H, user.get_target_zone()) if(!S) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 521cd1ee0b7..5e9d3407731 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -64,7 +64,8 @@ to_chat(user, "It's [reagents?.total_volume > 0? "filled with liquid sloshing around" : "empty"].") /obj/item/chems/water_balloon/on_reagent_change() - ..() + if(!(. = ..())) + return w_class = (reagents?.total_volume > 0)? ITEM_SIZE_SMALL : ITEM_SIZE_TINY //#TODO: Maybe acids should handle eating their own containers themselves? for(var/reagent in reagents?.reagent_volumes) diff --git a/code/game/objects/items/waterskin.dm b/code/game/objects/items/waterskin.dm index a40bda467c4..e06e6b92737 100644 --- a/code/game/objects/items/waterskin.dm +++ b/code/game/objects/items/waterskin.dm @@ -11,3 +11,10 @@ desc = "A long and rather unwieldly water-carrying vessel." material = /decl/material/solid/organic/leather material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC + +/obj/item/chems/waterskin/crafted/wine + name = "wineskin" + +/obj/item/chems/waterskin/crafted/wine/populate_reagents() + . = ..() + add_to_reagents(/decl/material/liquid/ethanol/wine, reagents?.total_volume) diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index 95209a87d1d..e7e5cb527e9 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -23,7 +23,7 @@ /obj/item/scanner/autopsy/scan(atom/A, mob/user) if(ishuman(A)) - var/mob/living/carbon/human/M = A + var/mob/living/human/M = A set_target(M, user) timeofdeath = M.timeofdeath var/obj/item/organ/external/S = GET_EXTERNAL_ORGAN(M, user.get_target_zone()) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index f69317716b5..8768807db9e 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -263,7 +263,7 @@ var/global/const/NO_EMAG_ACT = -50 id_card.dna_hash = get_unique_enzymes() || "Unset" id_card.fingerprint_hash = get_full_print(ignore_blockers = TRUE) || "Unset" -/mob/living/carbon/human/set_id_info(var/obj/item/card/id/id_card) +/mob/living/human/set_id_info(var/obj/item/card/id/id_card) ..() id_card.age = get_age() if(global.using_map.flags & MAP_HAS_BRANCH) diff --git a/code/game/objects/items/weapons/cards_ids_syndicate.dm b/code/game/objects/items/weapons/cards_ids_syndicate.dm index 03fe2b6375b..75851fa02da 100644 --- a/code/game/objects/items/weapons/cards_ids_syndicate.dm +++ b/code/game/objects/items/weapons/cards_ids_syndicate.dm @@ -99,7 +99,7 @@ if(..()) return 1 - var/user = usr + var/mob/user = usr if(href_list["electronic_warfare"]) electronic_warfare = text2num(href_list["electronic_warfare"]) to_chat(user, "Electronic warfare [electronic_warfare ? "enabled" : "disabled"].") @@ -146,9 +146,7 @@ if("Blood Type") var/default = blood_type if(default == initial(blood_type) && ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.dna) - default = H.dna.b_type + default = user.get_blood_type() var/new_blood_type = sanitize(input(user,"What blood type would you like to be written on this card?","Agent Card Blood Type",default) as null|text) if(!isnull(new_blood_type) && CanUseTopic(user, state)) src.blood_type = new_blood_type @@ -157,7 +155,7 @@ if("DNA Hash") var/default = dna_hash if(default == initial(dna_hash) && ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/unique_enzymes = H.get_unique_enzymes() if(unique_enzymes) default = unique_enzymes @@ -169,7 +167,7 @@ if("Fingerprint Hash") var/default = fingerprint_hash if(default == initial(fingerprint_hash) && ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user default = H.get_full_print(ignore_blockers = TRUE) var/new_fingerprint_hash = sanitize(input(user,"What fingerprint hash would you like to be written on this card?","Agent Card Fingerprint Hash",default) as null|text) if(!isnull(new_fingerprint_hash) && CanUseTopic(user, state)) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 62d19120866..35bee56b109 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -105,7 +105,7 @@ set name = "Toggle Paddles" set category = "Object" - var/mob/living/carbon/human/user = usr + var/mob/living/human/user = usr if(!paddles) to_chat(user, "The paddles are missing!") return @@ -246,18 +246,18 @@ return 1 //Checks for various conditions to see if the mob is revivable -/obj/item/shockpaddles/proc/can_defib(mob/living/carbon/human/H) //This is checked before doing the defib operation +/obj/item/shockpaddles/proc/can_defib(mob/living/human/H) //This is checked before doing the defib operation if(H.has_body_flag(BODY_FLAG_NO_DEFIB)) return "buzzes, \"Unrecogized physiology. Operation aborted.\"" if(!check_contact(H)) return "buzzes, \"Patient's chest is obstructed. Operation aborted.\"" -/obj/item/shockpaddles/proc/can_revive(mob/living/carbon/human/H) //This is checked right before attempting to revive +/obj/item/shockpaddles/proc/can_revive(mob/living/human/H) //This is checked right before attempting to revive if(H.stat == DEAD) return "buzzes, \"Resuscitation failed - Severe neurological decay makes recovery of patient impossible. Further attempts futile.\"" -/obj/item/shockpaddles/proc/check_contact(mob/living/carbon/human/H) +/obj/item/shockpaddles/proc/check_contact(mob/living/human/H) if(!combat) for(var/slot in list(slot_wear_suit_str, slot_w_uniform_str)) var/obj/item/clothing/cloth = H.get_equipped_item(slot) @@ -265,7 +265,7 @@ return FALSE return TRUE -/obj/item/shockpaddles/proc/check_blood_level(mob/living/carbon/human/H) +/obj/item/shockpaddles/proc/check_blood_level(mob/living/human/H) if(H.should_have_organ(BP_HEART)) var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(H, BP_HEART) if(!heart || H.get_blood_volume() < BLOOD_VOLUME_SURVIVE) @@ -281,7 +281,7 @@ /obj/item/shockpaddles/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) if(!ishuman(target) || user.a_intent == I_HURT) return ..() //Do a regular attack. Harm intent shocking happens as a hit effect - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target if(can_use(user, H)) busy = 1 update_icon() @@ -306,7 +306,7 @@ return ..() // This proc is used so that we can return out of the revive process while ensuring that busy and update_icon() are handled -/obj/item/shockpaddles/proc/do_revive(mob/living/carbon/human/H, mob/living/user) +/obj/item/shockpaddles/proc/do_revive(mob/living/human/H, mob/living/user) if(H.ssd_check()) to_chat(find_dead_player(H.ckey, 1), "Someone is attempting to resuscitate you. Re-enter your body if you want to be revived!") @@ -367,7 +367,7 @@ ADJ_STATUS(H, STAT_ASLEEP, -60) log_and_message_admins("used \a [src] to revive [key_name(H)].") -/obj/item/shockpaddles/proc/lowskill_revive(mob/living/carbon/human/H, mob/living/user) +/obj/item/shockpaddles/proc/lowskill_revive(mob/living/human/H, mob/living/user) if(prob(60)) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1) H.electrocute_act(burn_damage_amt*4, src, def_zone = BP_CHEST) @@ -381,7 +381,7 @@ return 0 return 1 -/obj/item/shockpaddles/proc/do_electrocute(mob/living/carbon/human/H, mob/user, var/target_zone) +/obj/item/shockpaddles/proc/do_electrocute(mob/living/human/H, mob/user, var/target_zone) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, check_zone(target_zone, H, TRUE)) //Shouldn't defib someone's eyes or mouth if(!affecting) to_chat(user, SPAN_WARNING("They are missing that body part!")) diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm index af97d1e5d9a..27c1098d226 100644 --- a/code/game/objects/items/weapons/ecigs.dm +++ b/code/game/objects/items/weapons/ecigs.dm @@ -96,7 +96,7 @@ idle ++ if(ishuman(loc)) - var/mob/living/carbon/human/user = loc + var/mob/living/human/user = loc if (!lit || !ec_cartridge || !ec_cartridge.reagents.total_volume)//no cartridge if(!ec_cartridge.reagents.total_volume) diff --git a/code/game/objects/items/weapons/grenades/decompiler.dm b/code/game/objects/items/weapons/grenades/decompiler.dm index 4414fc75715..143341ed3f2 100644 --- a/code/game/objects/items/weapons/grenades/decompiler.dm +++ b/code/game/objects/items/weapons/grenades/decompiler.dm @@ -99,7 +99,7 @@ thing = pick(options) if(ishuman(thing)) - var/mob/living/carbon/human/H = thing + var/mob/living/human/H = thing for(var/obj/item/organ/external/limb in H.get_external_organs()) if(BP_IS_PROSTHETIC(limb) && !length(limb.children)) limb.dismember() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index b36e3360b4a..78c09ab8b61 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -39,7 +39,7 @@ add_overlay("[icon_state]-pin") /obj/item/grenade/proc/clown_check(var/mob/living/user) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) + if(user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) to_chat(user, "Huh? How does this thing work?") det_time = fail_det_time activate(user) diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index 543bbe5fac4..8df73ff611f 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -10,7 +10,7 @@ if(spawner_type && deliveryamt) var/turf/T = get_turf(src) playsound(T, 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(T, null)) + for(var/mob/living/human/M in viewers(T, null)) if(M.eyecheck() < FLASH_PROTECTION_MODERATE) M.flash_eyes() for(var/i = 1 to deliveryamt) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 7ebbdc18f1a..c6ed2f13008 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -43,14 +43,14 @@ if(!user.check_dexterity(DEXTERITY_COMPLEX_TOOLS)) return ..() - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) + if (user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) to_chat(user, SPAN_WARNING("You can't figure out how to work \the [src]...")) place_handcuffs(user, user) return TRUE // only humans can be cuffed for now if(ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target if(!H.get_equipped_item(slot_handcuffed_str)) if (H == user) place_handcuffs(user, user) @@ -70,7 +70,7 @@ /obj/item/handcuffs/proc/place_handcuffs(var/mob/living/target, var/mob/user) playsound(src.loc, cuff_sound, 30, 1, -2) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target if(!istype(H)) return 0 @@ -110,11 +110,11 @@ return 1 var/global/last_chew = 0 //#FIXME: Its funny how only one person in the world can chew their restraints every 2.6 seconds -/mob/living/carbon/human/RestrainedClickOn(var/atom/A) +/mob/living/human/RestrainedClickOn(var/atom/A) if (A != src) return ..() if (last_chew + 26 > world.time) return - var/mob/living/carbon/human/H = A + var/mob/living/human/H = A if (!H.get_equipped_item(slot_handcuffed_str)) return if (H.a_intent != I_HURT) return if (H.get_target_zone() != BP_MOUTH) return diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index a874cd25b11..1654b567aa2 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -47,7 +47,7 @@ return TRUE /obj/item/implant/proc/can_implant(mob/M, mob/user, var/target_zone) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(istype(H) && !GET_EXTERNAL_ORGAN(H, target_zone)) to_chat(user, "\The [M] is missing that body part.") return FALSE @@ -55,7 +55,7 @@ /obj/item/implant/proc/implant_in_mob(mob/M, var/target_zone) if (ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(H, target_zone) if(affected) LAZYADD(affected.implants, src) diff --git a/code/game/objects/items/weapons/implants/implants/compressed.dm b/code/game/objects/items/weapons/implants/implants/compressed.dm index fea7ee66170..e9872331439 100644 --- a/code/game/objects/items/weapons/implants/implants/compressed.dm +++ b/code/game/objects/items/weapons/implants/implants/compressed.dm @@ -71,7 +71,7 @@ to_chat(user, "The matter compressor safeties prevent you from doing that.") return if(ishuman(A.loc)) - var/mob/living/carbon/human/H = A.loc + var/mob/living/human/H = A.loc if(!H.try_unequip(A)) return else if(isobj(A.loc) && A.loc.storage) diff --git a/code/game/objects/items/weapons/implants/implants/imprinting.dm b/code/game/objects/items/weapons/implants/implants/imprinting.dm index 76e7ac49e30..f493ae39ffa 100644 --- a/code/game/objects/items/weapons/implants/implants/imprinting.dm +++ b/code/game/objects/items/weapons/implants/implants/imprinting.dm @@ -40,7 +40,7 @@ interact(usr) /obj/item/implant/imprinting/implanted(mob/M) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(!istype(H)) return FALSE if(H.reagents.has_reagent(/decl/material/liquid/hallucinogenics)) @@ -103,7 +103,7 @@ . = ..() /obj/item/implant/imprinting/can_implant(mob/M, mob/user, target_zone) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(istype(H)) var/obj/item/organ/internal/B = GET_INTERNAL_ORGAN(H, BP_BRAIN) if(!B || H.isSynthetic()) diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index b5f2ca93aed..3cc95aafa94 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -17,7 +17,7 @@ thrown_material_force_multiplier = 1 // as above /obj/item/kitchen/rollingpin/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) - if ((MUTATION_CLUMSY in user.mutations) && prob(50) && user.try_unequip(src)) + if (user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50) && user.try_unequip(src)) to_chat(user, SPAN_DANGER("\The [src] slips out of your hand and hits your head.")) user.take_organ_damage(10) SET_STATUS_MAX(user, STAT_PARA, 2) diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index 6d851c6c380..9d3be162f02 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -40,7 +40,7 @@ /obj/item/knife/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) if(user.a_intent != I_HELP && user.get_target_zone() == BP_EYES) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) + if(user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) target = user return eyestab(target, user) return ..() diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index 351271e33ba..7de5bdf7c53 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -25,7 +25,7 @@ /obj/item/shard/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) . = ..() if(. && !has_handle && ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(!H.get_equipped_item(slot_gloves_str) && !(H.species.species_flags & SPECIES_FLAG_NO_MINOR_CUT)) var/obj/item/organ/external/hand = GET_EXTERNAL_ORGAN(H, H.get_active_held_item_slot()) if(istype(hand) && !BP_IS_PROSTHETIC(hand)) diff --git a/code/game/objects/items/weapons/material/thrown.dm b/code/game/objects/items/weapons/material/thrown.dm index 7f48d61fe0d..54ebd199db3 100644 --- a/code/game/objects/items/weapons/material/thrown.dm +++ b/code/game/objects/items/weapons/material/thrown.dm @@ -28,6 +28,3 @@ . = ..() if(user.a_intent == I_HURT) user.mob_throw_item(target, src) - -/obj/item/star/ninja - material = /decl/material/solid/metal/uranium diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 1eee7a8b338..dbfd004126f 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -138,7 +138,7 @@ /obj/item/energy_blade/attack_self(mob/user) if(active) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) + if(user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) var/decl/pronouns/G = user.get_pronouns() user.visible_message( \ SPAN_DANGER("\The [user] accidentally cuts [G.self] with \the [src]."), \ diff --git a/code/game/objects/items/weapons/melee/energy_ninja.dm b/code/game/objects/items/weapons/melee/energy_projected.dm similarity index 68% rename from code/game/objects/items/weapons/melee/energy_ninja.dm rename to code/game/objects/items/weapons/melee/energy_projected.dm index 16aeefa1a15..b99cfa35cc3 100644 --- a/code/game/objects/items/weapons/melee/energy_ninja.dm +++ b/code/game/objects/items/weapons/melee/energy_projected.dm @@ -1,4 +1,4 @@ -/obj/item/energy_blade/ninja +/obj/item/energy_blade/projected anchored = TRUE // Never spawned outside of inventory, should be fine. armor_penetration = 100 @@ -18,37 +18,37 @@ var/mob/living/creator -/obj/item/energy_blade/ninja/Initialize() +/obj/item/energy_blade/projected/Initialize() . = ..() if(!ismob(loc)) return INITIALIZE_HINT_QDEL -/obj/item/energy_blade/ninja/is_special_cutting_tool(var/high_power) +/obj/item/energy_blade/projected/is_special_cutting_tool(var/high_power) return active -/obj/item/energy_blade/ninja/get_storage_cost() +/obj/item/energy_blade/projected/get_storage_cost() return ITEM_SIZE_NO_CONTAINER -/obj/item/energy_blade/ninja/attack_self(mob/user) +/obj/item/energy_blade/projected/attack_self(mob/user) user.drop_from_inventory(src) -/obj/item/energy_blade/ninja/equipped(mob/user, slot) +/obj/item/energy_blade/projected/equipped(mob/user, slot) . = ..() check_loc() -/obj/item/energy_blade/ninja/dropped() +/obj/item/energy_blade/projected/dropped() . = ..() check_loc() -/obj/item/energy_blade/ninja/on_picked_up(mob/user) +/obj/item/energy_blade/projected/on_picked_up(mob/user) . = ..() check_loc() -/obj/item/energy_blade/ninja/Move() +/obj/item/energy_blade/projected/Move() . = ..() if(.) check_loc() -/obj/item/energy_blade/ninja/proc/check_loc() +/obj/item/energy_blade/projected/proc/check_loc() if(!QDELETED(src) && (loc != creator || !(src in creator?.get_held_items()))) qdel(src) diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index 04dba8b0567..506dd56d7a1 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -33,7 +33,7 @@ return 1 if (!ishuman(usr)) return 1 - var/mob/living/carbon/human/H = usr + var/mob/living/human/H = usr if ((usr == src.loc || (in_range(src, usr) && isturf(src.loc)))) usr.set_machine(src) if (href_list["spell_teleport"]) diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 3342015c383..52d00914113 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -185,7 +185,7 @@ return base_block_chance /obj/item/shield/energy/attack_self(mob/user) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) + if(user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) to_chat(user, SPAN_DANGER("You beat yourself in the head with [src].")) if(isliving(user)) var/mob/living/M = user @@ -206,7 +206,7 @@ to_chat(user, SPAN_NOTICE("\The [src] can now be concealed.")) if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user H.update_inhand_overlays() add_fingerprint(user) diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm index 7a79fcdd480..206de3f19be 100644 --- a/code/game/objects/items/weapons/soap.dm +++ b/code/game/objects/items/weapons/soap.dm @@ -89,7 +89,7 @@ //attack_as_weapon /obj/item/soap/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) if(ishuman(target) && user?.a_intent != I_HURT) - var/mob/living/carbon/human/victim = target + var/mob/living/human/victim = target if(user.get_target_zone() == BP_MOUTH && victim.check_has_mouth()) user.visible_message(SPAN_DANGER("\The [user] washes \the [target]'s mouth out with soap!")) if(reagents) diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 69b9d526978..2ff5ece8a7b 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -99,12 +99,12 @@ /obj/item/bible/attack_self(mob/user) if(!ishuman(user)) return - var/mob/living/carbon/human/preacher = user + var/mob/living/human/preacher = user if(preacher.mind?.assigned_job?.is_holy) preacher.visible_message("\The [preacher] begins to read a passage from \the [src]...", "You begin to read a passage from \the [src]...") if(do_after(preacher, 5 SECONDS)) preacher.visible_message("\The [preacher] reads a passage from \the [src].", "You read a passage from \the [src].") - for(var/mob/living/carbon/human/H in view(preacher)) + for(var/mob/living/human/H in view(preacher)) if(preacher.get_cultural_value(TAG_RELIGION) == H.get_cultural_value(TAG_RELIGION)) to_chat(H, SPAN_NOTICE("You feel calm and relaxed, at one with the universe.")) diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm index 4726adb6724..72994a875c1 100644 --- a/code/game/objects/items/weapons/storage/laundry_basket.dm +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -18,7 +18,7 @@ /obj/item/laundry_basket/attack_hand(mob/user) if(!ishuman(user)) return ..() - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/obj/item/organ/external/temp = GET_EXTERNAL_ORGAN(H, H.get_active_held_item_slot()) if(!temp) to_chat(user, SPAN_WARNING("You need two hands to pick this up!")) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 683c1f12a31..0c131d9bce3 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -95,7 +95,7 @@ update_icon() /obj/item/baton/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) - if(status && (MUTATION_CLUMSY in user.mutations) && prob(50)) + if(status && user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) to_chat(user, SPAN_DANGER("You accidentally hit yourself with the [src]!")) SET_STATUS_MAX(user, STAT_WEAK, 30) deductcharge(hitcost) @@ -110,7 +110,7 @@ var/stun = stunforce var/obj/item/organ/external/affecting = null if(ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target affecting = GET_EXTERNAL_ORGAN(H, hit_zone) var/abuser = user ? "" : "by [user]" if(user && user.a_intent == I_HURT) @@ -144,7 +144,7 @@ deductcharge(hitcost) if(ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target H.forcesay(global.hit_appends) return 1 diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 2b072c46221..7e3258fd4e5 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -18,11 +18,11 @@ material = /decl/material/solid/organic/wood /obj/item/classic_baton/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) + if (user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) to_chat(user, SPAN_WARNING("You club yourself over the head.")) SET_STATUS_MAX(user, STAT_WEAK, (3 * force)) if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user H.apply_damage(2*force, BRUTE, BP_HEAD) else user.take_organ_damage(2*force) @@ -74,11 +74,11 @@ icon = 'icons/obj/items/weapon/telebaton.dmi' /obj/item/telebaton/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) - if(on && (MUTATION_CLUMSY in user.mutations) && prob(50)) + if(on && user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) to_chat(user, SPAN_DANGER("You club yourself over the head.")) SET_STATUS_MAX(user, STAT_WEAK, (3 * force)) if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user H.apply_damage(2*force, BRUTE, BP_HEAD) else user.take_organ_damage(2*force) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index f651a0f537a..2fc73deaa51 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -261,7 +261,7 @@ var/global/list/global/tank_gauge_cache = list() if(mask && (mask.item_flags & ITEM_FLAG_AIRTIGHT)) data["maskConnected"] = 1 else if(ishuman(location)) - var/mob/living/carbon/human/H = location + var/mob/living/human/H = location var/obj/item/head = H.get_equipped_item(slot_head_str) if(head && (head.item_flags & ITEM_FLAG_AIRTIGHT)) data["maskConnected"] = 1 @@ -319,7 +319,7 @@ var/global/list/global/tank_gauge_cache = list() if(mask && (mask.item_flags & ITEM_FLAG_AIRTIGHT)) can_open_valve = 1 else if(ishuman(location)) - var/mob/living/carbon/human/H = location + var/mob/living/human/H = location var/obj/item/head = H.get_equipped_item(slot_head_str) if(head && (head.item_flags & ITEM_FLAG_AIRTIGHT)) can_open_valve = 1 diff --git a/code/game/objects/items/weapons/tools/screwdriver.dm b/code/game/objects/items/weapons/tools/screwdriver.dm index 69f3db0c647..2a1ef5f107b 100644 --- a/code/game/objects/items/weapons/tools/screwdriver.dm +++ b/code/game/objects/items/weapons/tools/screwdriver.dm @@ -42,7 +42,7 @@ /obj/item/screwdriver/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) if(user.a_intent == I_HELP || user.get_target_zone() != BP_EYES && user.get_target_zone() != BP_HEAD) return ..() - if((MUTATION_CLUMSY in user.mutations) && prob(50)) + if(user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) target = user return eyestab(target, user) diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index 979613064f7..a5003c4e8fe 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -344,7 +344,7 @@ /obj/item/weldingtool/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) if(ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/obj/item/organ/external/S = GET_EXTERNAL_ORGAN(H, user?.get_target_zone()) if(!S || !S.is_robotic() || user.a_intent != I_HELP) return ..() diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm index 3ac790525ab..52c822e88c7 100644 --- a/code/game/objects/items/weapons/towels.dm +++ b/code/game/objects/items/weapons/towels.dm @@ -32,7 +32,8 @@ . = ..() /obj/item/towel/on_reagent_change() - . = ..() + if(!(. = ..())) + return if(reagents?.total_volume) SetName("damp [initial(name)]") if(!is_processing) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 978096105d2..2177d4a6b2e 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -28,7 +28,7 @@ if (!user.check_dexterity(DEXTERITY_WEAPONS)) return TRUE - if ((MUTATION_CLUMSY in user.mutations) && prob(50)) + if (user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) to_chat(user, SPAN_DANGER("The rod slips out of your hand and hits your head.")) user.take_organ_damage(10) SET_STATUS_MAX(user, STAT_PARA, 20) diff --git a/code/game/objects/structures/barrel.dm b/code/game/objects/structures/barrel.dm index 84aae464c9c..f16a56041f3 100644 --- a/code/game/objects/structures/barrel.dm +++ b/code/game/objects/structures/barrel.dm @@ -19,6 +19,13 @@ ..() return INITIALIZE_HINT_LATELOAD +/obj/structure/reagent_dispensers/barrel/attackby(obj/item/W, mob/user) + . = ..() + if(!. && user.a_intent == I_HELP && reagents?.total_volume > FLUID_PUDDLE) + user.visible_message(SPAN_NOTICE("\The [user] dips \the [W] into \the [reagents.get_primary_reagent_name()].")) + W.fluid_act(reagents) + return TRUE + /obj/structure/reagent_dispensers/barrel/LateInitialize(mapload, ...) ..() if(mapload) @@ -29,7 +36,8 @@ storage.handle_item_insertion(null, thing) /obj/structure/reagent_dispensers/barrel/on_reagent_change() - . = ..() + if(!(. = ..())) + return var/primary_mat = reagents?.get_primary_reagent_name() if(primary_mat) SetName("[material.solid_name] [initial(name)] of [primary_mat]") diff --git a/code/game/objects/structures/charge_pylon.dm b/code/game/objects/structures/charge_pylon.dm index 0d4fbe83d5a..b6afb372e60 100644 --- a/code/game/objects/structures/charge_pylon.dm +++ b/code/game/objects/structures/charge_pylon.dm @@ -19,7 +19,7 @@ /obj/structure/charge_pylon/proc/charge_user(var/mob/living/user) if(next_use > world.time) return next_use = world.time + 10 - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/obj/item/cell/power_cell if(ishuman(user)) var/obj/item/organ/internal/cell/cell = H.get_organ(BP_CELL, /obj/item/organ/internal/cell) diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index b2c172211c1..b97d274b2d7 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -22,7 +22,7 @@ L.client.perspective = EYE_PERSPECTIVE L.client.eye = src L.forceMove(src) - L.set_sdisability(MUTED) + L.add_genetic_condition(GENE_COND_MUTED) current_health = L.current_health + 100 //stoning damaged mobs will result in easier to shatter statues intialTox = L.get_damage(TOX) intialFire = L.get_damage(BURN) @@ -64,7 +64,7 @@ for(var/mob/living/M in src) M.dropInto(forced_loc) - M.unset_sdisability(MUTED) + M.remove_genetic_condition(GENE_COND_MUTED) M.take_overall_damage((M.current_health - current_health - 100),0) //any new damage the statue incurred is transfered to the mob if(M.client) M.client.eye = M.client.mob diff --git a/code/game/objects/structures/fires.dm b/code/game/objects/structures/fires.dm index 213a98fd0a2..e38befacb23 100644 --- a/code/game/objects/structures/fires.dm +++ b/code/game/objects/structures/fires.dm @@ -314,7 +314,8 @@ return (fuel > 0) /obj/structure/fire_source/on_reagent_change() - ..() + if(!(. = ..())) + return if(reagents?.total_volume) var/do_steam = FALSE var/list/waste = list() diff --git a/code/game/objects/structures/fitness.dm b/code/game/objects/structures/fitness.dm index 2542d145af1..b83a6aa499e 100644 --- a/code/game/objects/structures/fitness.dm +++ b/code/game/objects/structures/fitness.dm @@ -14,7 +14,7 @@ if(!ishuman(user)) return ..() - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/synth = H.isSynthetic() if(!synth && H.nutrition < 20) to_chat(H, SPAN_WARNING("You [synth ? "need more energy" : "are too tired"] to use the punching bag. Go [synth ? "recharge" : "eat something"].")) @@ -51,7 +51,7 @@ /obj/structure/fitness/weightlifter/attack_hand(mob/user) if(!ishuman(user)) return ..() - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/synth = H.isSynthetic() if(H.loc != src.loc) to_chat(H, SPAN_WARNING("You must be on the weight machine to use it.")) diff --git a/code/game/objects/structures/fountain.dm b/code/game/objects/structures/fountain.dm index 8dd74226c80..27096beadb7 100644 --- a/code/game/objects/structures/fountain.dm +++ b/code/game/objects/structures/fountain.dm @@ -25,7 +25,7 @@ to_chat(user, SPAN_WARNING("\The [src] is still and lifeless...")) return TRUE - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/decl/bodytype/my_bodytype = istype(H) && H.get_bodytype() if(!istype(my_bodytype)) return ..() @@ -42,7 +42,7 @@ visible_message("\The [H] retracts their hand suddenly.") return TRUE -/obj/structure/fountain/proc/time_dilation(var/mob/living/carbon/human/user) +/obj/structure/fountain/proc/time_dilation(var/mob/living/human/user) for(var/mob/living/L in oviewers(7, src)) L.flash_eyes(3) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 3d8767be654..4bdf3369d23 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -102,7 +102,7 @@ var/damage_dealt = 1 var/attack_message = "kicks" if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(H.species.can_shred(H)) attack_message = "mangles" damage_dealt = 5 diff --git a/code/game/objects/structures/ironing_board.dm b/code/game/objects/structures/ironing_board.dm index b89d31ee29a..95a44a1a42f 100644 --- a/code/game/objects/structures/ironing_board.dm +++ b/code/game/objects/structures/ironing_board.dm @@ -84,7 +84,7 @@ // anti-wrinkle "massage" if(buckled_mob && ishuman(buckled_mob)) - var/mob/living/carbon/human/H = buckled_mob + var/mob/living/human/H = buckled_mob var/zone = user.get_target_zone() var/parsed = parse_zone(zone) diff --git a/code/game/objects/structures/iv_drip.dm b/code/game/objects/structures/iv_drip.dm index 596c9f0b506..44c3e904348 100644 --- a/code/game/objects/structures/iv_drip.dm +++ b/code/game/objects/structures/iv_drip.dm @@ -4,7 +4,7 @@ anchored = FALSE density = FALSE - var/mob/living/carbon/human/attached + var/mob/living/human/attached var/mode = 1 // 1 is injecting, 0 is taking blood. var/obj/item/chems/beaker var/list/transfer_amounts = list(REM, 1, 2) @@ -209,12 +209,12 @@ attached.apply_damage(1, BRUTE, pick(BP_R_ARM, BP_L_ARM), damage_flags=DAM_SHARP) attached = null -/obj/structure/iv_drip/proc/hook_up(mob/living/carbon/human/target, mob/user) +/obj/structure/iv_drip/proc/hook_up(mob/living/human/target, mob/user) if(do_IV_hookup(target, user, src)) attached = target START_PROCESSING(SSobj,src) -/proc/do_IV_hookup(mob/living/carbon/human/target, mob/user, obj/IV) +/proc/do_IV_hookup(mob/living/human/target, mob/user, obj/IV) to_chat(user, SPAN_NOTICE("You start to hook up \the [target] to \the [IV].")) if(!user.do_skilled(2 SECONDS, SKILL_MEDICAL, target)) return FALSE diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm index 76e6dc95853..76b4b96fbe9 100644 --- a/code/game/objects/structures/railing.dm +++ b/code/game/objects/structures/railing.dm @@ -184,7 +184,7 @@ if(istype(W, /obj/item/grab) && get_dist(src,user)<2) var/obj/item/grab/G = W if(ishuman(G.affecting)) - var/mob/living/carbon/human/H = G.get_affecting_mob() + var/mob/living/human/H = G.get_affecting_mob() var/obj/occupied = turf_is_crowded() if(occupied) to_chat(user, "There's \a [occupied] in the way.") diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 56cd8226473..b1707bce25d 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -86,7 +86,7 @@ FLOOR SAFES /obj/structure/safe/Topic(href, href_list) if(!ishuman(usr)) return - var/mob/living/carbon/human/user = usr + var/mob/living/human/user = usr if(href_list["open"]) if(check_unlocked()) diff --git a/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm index fa25895ec87..b2a768c4491 100644 --- a/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest_sofa/bed.dm @@ -236,7 +236,7 @@ beaker = null queue_icon_update() -/obj/structure/bed/roller/proc/attach_iv(mob/living/carbon/human/target, mob/user) +/obj/structure/bed/roller/proc/attach_iv(mob/living/human/target, mob/user) if(!beaker) return if(do_IV_hookup(target, user, beaker)) @@ -244,7 +244,7 @@ queue_icon_update() START_PROCESSING(SSobj,src) -/obj/structure/bed/roller/proc/detach_iv(mob/living/carbon/human/target, mob/user) +/obj/structure/bed/roller/proc/detach_iv(mob/living/human/target, mob/user) visible_message("\The [target] is taken off the IV on \the [src].") iv_attached = FALSE queue_icon_update() diff --git a/code/game/objects/structures/stool_bed_chair_nest_sofa/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest_sofa/wheelchair.dm index f2e34f4e701..fa3b5ef1e35 100644 --- a/code/game/objects/structures/stool_bed_chair_nest_sofa/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest_sofa/wheelchair.dm @@ -76,7 +76,7 @@ B.set_dir(newdir) bloodiness-- -/proc/equip_wheelchair(mob/living/carbon/human/H) //Proc for spawning in a wheelchair if a new character has no legs. Used in new_player.dm +/proc/equip_wheelchair(mob/living/human/H) //Proc for spawning in a wheelchair if a new character has no legs. Used in new_player.dm var/obj/structure/bed/chair/wheelchair/W = new(get_turf(H)) if(isturf(H.loc)) W.buckle_mob(H) diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index ff844e19d4f..11ebfb66fde 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -44,7 +44,7 @@ interact(user) return TRUE -/obj/structure/undies_wardrobe/interact(var/mob/living/carbon/human/H) +/obj/structure/undies_wardrobe/interact(var/mob/living/human/H) var/id = H.GetIdCard() var/dat = list() @@ -56,7 +56,7 @@ dat = jointext(dat,null) show_browser(H, dat, "window=wardrobe;size=400x250") -/obj/structure/undies_wardrobe/proc/human_who_can_use_underwear(var/mob/living/carbon/human/H) +/obj/structure/undies_wardrobe/proc/human_who_can_use_underwear(var/mob/living/human/H) if(!istype(H) || !(H.get_bodytype()?.appearance_flags & HAS_UNDERWEAR)) return FALSE return TRUE @@ -71,7 +71,7 @@ if(..()) return TRUE - var/mob/living/carbon/human/H = usr + var/mob/living/human/H = usr if(href_list["select_underwear"]) var/datum/category_group/underwear/UWC = global.underwear.categories_by_name[href_list["select_underwear"]] if(!UWC) diff --git a/code/game/objects/structures/wall_frame.dm b/code/game/objects/structures/wall_frame.dm index 6760ffccd36..2f897c05d3b 100644 --- a/code/game/objects/structures/wall_frame.dm +++ b/code/game/objects/structures/wall_frame.dm @@ -163,4 +163,28 @@ /obj/structure/wall_frame/hull paint_color = COLOR_HULL - stripe_color = COLOR_HULL \ No newline at end of file + stripe_color = COLOR_HULL + +/obj/structure/wall_frame/log + name = "low log wall" + desc = "A section of log wall with empty space for fitting a window or simply letting air in." + icon = 'icons/obj/structures/log_wall_frame.dmi' + material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC // material color is applied in on_update_icon + +/obj/structure/wall_frame/log/Initialize() + color = null // clear mapping preview color + . = ..() + +#define LOW_LOG_WALL_SUBTYPE(material_name) \ +/obj/structure/wall_frame/log/##material_name { \ + material = /decl/material/solid/organic/wood/##material_name; \ + color = /decl/material/solid/organic/wood/##material_name::color; \ +} + +LOW_LOG_WALL_SUBTYPE(fungal) +LOW_LOG_WALL_SUBTYPE(ebony) +LOW_LOG_WALL_SUBTYPE(walnut) +LOW_LOG_WALL_SUBTYPE(maple) +LOW_LOG_WALL_SUBTYPE(mahogany) +LOW_LOG_WALL_SUBTYPE(bamboo) +LOW_LOG_WALL_SUBTYPE(yew) \ No newline at end of file diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 6c9c20c4bcf..deb34524e6d 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -332,7 +332,7 @@ var/global/list/hygiene_props = list() var/temp_adj = clamp(water_temperature - M.bodytemperature, BODYTEMP_COOLING_MAX, BODYTEMP_HEATING_MAX) M.bodytemperature += temp_adj if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(water_temperature >= H.get_mob_temperature_threshold(HEAT_LEVEL_1)) to_chat(H, SPAN_DANGER("The water is searing hot!")) else if(water_temperature <= H.get_mob_temperature_threshold(COLD_LEVEL_1)) diff --git a/code/game/objects/structures/well.dm b/code/game/objects/structures/well.dm index 7f0e460e00f..44dad1274b4 100644 --- a/code/game/objects/structures/well.dm +++ b/code/game/objects/structures/well.dm @@ -21,11 +21,19 @@ add_overlay(overlay_image(icon, "[icon_state]-fluid", reagents.get_color(), (RESET_COLOR | RESET_ALPHA))) /obj/structure/reagent_dispensers/well/on_reagent_change() - . = ..() + if(!(. = ..())) + return update_icon() if(!is_processing) START_PROCESSING(SSobj, src) +/obj/structure/reagent_dispensers/well/attackby(obj/item/W, mob/user) + . = ..() + if(!. && user.a_intent == I_HELP && reagents?.total_volume > FLUID_PUDDLE) + user.visible_message(SPAN_NOTICE("\The [user] dips \the [W] into \the [reagents.get_primary_reagent_name()].")) + W.fluid_act(reagents) + return TRUE + /obj/structure/reagent_dispensers/well/mapped/populate_reagents() . = ..() add_to_reagents(/decl/material/liquid/water, reagents.maximum_volume) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 6c8d05acbb8..3d5f43c2807 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -151,7 +151,7 @@ if (user.a_intent && user.a_intent == I_HURT) if (ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(H.species.can_shred(H)) attack_generic(H,25) return diff --git a/code/game/response_team.dm b/code/game/response_team.dm index df72fe9a7c9..dd611ef5465 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -64,7 +64,7 @@ var/global/can_call_ert /proc/percentage_dead() var/total = 0 var/deadcount = 0 - for(var/mob/living/carbon/human/H in SSmobs.mob_list) + for(var/mob/living/human/H in SSmobs.mob_list) if(H.client) // Monkeys and mice don't have a client, amirite? if(H.stat == DEAD) deadcount++ total++ @@ -76,7 +76,7 @@ var/global/can_call_ert /proc/percentage_antagonists() var/total = 0 var/antagonists = 0 - for(var/mob/living/carbon/human/H in SSmobs.mob_list) + for(var/mob/living/human/H in SSmobs.mob_list) if(is_special_character(H) >= 1) antagonists++ total++ diff --git a/code/game/turfs/floors/floor_attackby.dm b/code/game/turfs/floors/floor_attackby.dm index ae06cfbdf21..6cc34b7544f 100644 --- a/code/game/turfs/floors/floor_attackby.dm +++ b/code/game/turfs/floors/floor_attackby.dm @@ -1,7 +1,7 @@ /turf/floor/attack_hand(mob/user) if(!ishuman(user)) return ..() - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/obj/item/hand = GET_EXTERNAL_ORGAN(H, H.get_active_held_item_slot()) if(hand && try_graffiti(H, hand)) return TRUE @@ -93,6 +93,7 @@ new /obj/structure/catwalk(src, R.material.type) return TRUE return + var/obj/item/stack/S = C var/decl/flooring/use_flooring var/list/decls = decls_repository.get_decls_of_subtype(/decl/flooring) @@ -103,21 +104,22 @@ if((ispath(S.type, F.build_type) || ispath(S.build_type, F.build_type)) && (isnull(F.build_material) || S.material?.type == F.build_material)) use_flooring = F break - if(!use_flooring) - return - // Do we have enough? - if(use_flooring.build_cost && S.get_amount() < use_flooring.build_cost) - to_chat(user, "You require at least [use_flooring.build_cost] [S.name] to complete the [use_flooring.descriptor].") - return TRUE - // Stay still and focus... - if(use_flooring.build_time && !do_after(user, use_flooring.build_time, src)) - return TRUE - if(flooring || !S || !user || !use_flooring) - return TRUE - if(S.use(use_flooring.build_cost)) - set_flooring(use_flooring) - playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) - return TRUE + + if(use_flooring) + // Do we have enough? + if(use_flooring.build_cost && S.get_amount() < use_flooring.build_cost) + to_chat(user, "You require at least [use_flooring.build_cost] [S.name] to complete the [use_flooring.descriptor].") + return TRUE + // Stay still and focus... + if(use_flooring.build_time && !do_after(user, use_flooring.build_time, src)) + return TRUE + if(flooring || !S || !user || !use_flooring) + return TRUE + if(S.use(use_flooring.build_cost)) + set_flooring(use_flooring) + playsound(src, 'sound/items/Deconstruct.ogg', 80, 1) + return TRUE + // Repairs and Deconstruction. else if(IS_CROWBAR(C)) if(is_floor_damaged()) diff --git a/code/game/turfs/floors/natural/_natural.dm b/code/game/turfs/floors/natural/_natural.dm index 25b039c740e..83cb54ebdc5 100644 --- a/code/game/turfs/floors/natural/_natural.dm +++ b/code/game/turfs/floors/natural/_natural.dm @@ -113,7 +113,10 @@ return ..() /turf/floor/natural/on_reagent_change() - . = ..() + + if(!(. = ..())) + return + if(!QDELETED(src) && reagent_type && height < 0 && !QDELETED(reagents) && reagents.total_volume < abs(height)) add_to_reagents(reagent_type, abs(height) - reagents.total_volume) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 746f4360215..d1025618167 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -265,15 +265,6 @@ if(W?.storage?.collection_mode && W.storage.gather_all(src, user)) return TRUE - // Must be open, but food items should not be filled from sources like this. They're open in order to add condiments, not to be poured into/out of. - // TODO: Rewrite open-container-ness or food to make this unnecessary! - if(ATOM_IS_OPEN_CONTAINER(W) && !istype(W, /obj/item/chems/food) && W.reagents && reagents?.total_volume >= FLUID_PUDDLE) - var/taking = min(reagents.total_volume, REAGENTS_FREE_SPACE(W.reagents)) - if(taking > 0) - to_chat(user, SPAN_NOTICE("You fill \the [W] with [reagents.get_primary_reagent_name()] from \the [src].")) - reagents.trans_to(W, taking) - return TRUE - if(istype(W, /obj/item) && storage && storage.use_to_pickup && storage.collection_mode) storage.gather_all(src, user) return TRUE @@ -289,6 +280,21 @@ if(IS_COIL(W) && try_build_cable(W, user)) return TRUE + if(reagents?.total_volume >= FLUID_PUDDLE) + // Must be open, but food items should not be filled from sources like this. They're open in order to add condiments, not to be poured into/out of. + // TODO: Rewrite open-container-ness or food to make this unnecessary! + if(ATOM_IS_OPEN_CONTAINER(W) && !istype(W, /obj/item/chems/food) && W.reagents) + var/taking = min(reagents.total_volume, REAGENTS_FREE_SPACE(W.reagents)) + if(taking > 0) + to_chat(user, SPAN_NOTICE("You fill \the [W] with [reagents.get_primary_reagent_name()] from \the [src].")) + reagents.trans_to(W, taking) + return TRUE + + if(user.a_intent == I_HELP) + user.visible_message(SPAN_NOTICE("\The [user] dips \the [W] into \the [reagents.get_primary_reagent_name()].")) + W.fluid_act(reagents) + return TRUE + return ..() /turf/Enter(atom/movable/mover, atom/forget) @@ -680,7 +686,7 @@ /turf/add_blood(mob/living/M) if(!simulated || !..() || !ishuman(M)) return FALSE - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/unique_enzymes = H.get_unique_enzymes() var/blood_type = H.get_blood_type() if(unique_enzymes && blood_type) diff --git a/code/game/turfs/turf_fluids.dm b/code/game/turfs/turf_fluids.dm index 4c2b7ee2c37..3d77fb726a3 100644 --- a/code/game/turfs/turf_fluids.dm +++ b/code/game/turfs/turf_fluids.dm @@ -163,7 +163,8 @@ /turf/on_reagent_change() - ..() + if(!(. = ..())) + return if(reagents?.total_volume > FLUID_QDEL_POINT) ADD_ACTIVE_FLUID(src) diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index a8e69ac96e8..2bb713b9a09 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -18,6 +18,12 @@ icon = 'icons/turf/walls.dmi' icon_state = "rockvault" +/turf/unsimulated/mask_alt // just a second mask type for maps needing two random map runs + name = "mask" + icon = 'icons/turf/walls.dmi' + icon_state = "rockvault" + color = COLOR_SILVER + /turf/unsimulated/mask/flooded flooded = /decl/material/liquid/water color = COLOR_LIQUID_WATER diff --git a/code/game/turfs/walls/wall_attacks.dm b/code/game/turfs/walls/wall_attacks.dm index 8d642bc087d..06c7269a780 100644 --- a/code/game/turfs/walls/wall_attacks.dm +++ b/code/game/turfs/walls/wall_attacks.dm @@ -75,7 +75,7 @@ add_fingerprint(user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/obj/item/hand = GET_EXTERNAL_ORGAN(H, H.get_active_held_item_slot()) if(hand && try_graffiti(H, hand)) return TRUE diff --git a/code/game/world.dm b/code/game/world.dm index ad271f0f087..f5b8dc6d4a7 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -50,7 +50,7 @@ GLOBAL_PROTECTED_UNTYPED(game_id, null) if(special_role_name) strings += special_role_name if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(H.species) strings += H.species.name for(var/text in strings) diff --git a/code/game/world_topic_commands.dm b/code/game/world_topic_commands.dm index 029ac226b5d..81101311f14 100644 --- a/code/game/world_topic_commands.dm +++ b/code/game/world_topic_commands.dm @@ -85,7 +85,7 @@ var/global/list/decl/topic_command/topic_commands = list() s["enter"] = get_config_value(/decl/config/toggle/on/enter_allowed) s["vote"] = get_config_value(/decl/config/toggle/vote_mode) s["ai"] = !!length(empty_playable_ai_cores) - s["host"] = host || null + s["host"] = get_config_value(/decl/config/text/hosted_by) // This is dumb, but spacestation13.com's banners break if player count isn't the 8th field of the reply, so... this has to go here. s["players"] = 0 @@ -283,7 +283,7 @@ var/global/list/decl/topic_command/topic_commands = list() brain = L.get_damage(BRAIN) )) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M info["species"] = H.species.name else info["species"] = "non-human" diff --git a/code/modules/ZAS/Airflow.dm b/code/modules/ZAS/Airflow.dm index 9bd6651b0c3..ca6abe6fa8f 100644 --- a/code/modules/ZAS/Airflow.dm +++ b/code/modules/ZAS/Airflow.dm @@ -50,7 +50,7 @@ Contains helper procs for airflow, called by /connection_group. /mob/living/silicon/handle_airflow() return FALSE -/mob/living/carbon/human/handle_airflow_stun() +/mob/living/human/handle_airflow_stun() if(!slip_chance()) to_chat(src, SPAN_NOTICE("Air suddenly rushes past you!")) return FALSE @@ -134,7 +134,7 @@ Contains helper procs for airflow, called by /connection_group. airflow_speed = 0 airflow_dest = null -/mob/living/carbon/human/airflow_hit(atom/A) +/mob/living/human/airflow_hit(atom/A) // for(var/mob/M in hearers(src)) // M.show_message("[src] slams into [A]!",1,"You hear a loud slam!",2) playsound(src.loc, "punch", 25, 1, -1) diff --git a/code/modules/ZAS/Contaminants.dm b/code/modules/ZAS/Contaminants.dm index 09b25da6a8b..57a5ee2d801 100644 --- a/code/modules/ZAS/Contaminants.dm +++ b/code/modules/ZAS/Contaminants.dm @@ -49,7 +49,7 @@ var/global/image/contamination_overlay = image('icons/effects/contamination.dmi' /mob/proc/contaminate() -/mob/living/carbon/human/contaminate() +/mob/living/human/contaminate() //See if anything can be contaminated. if(!contaminant_suit_protected()) @@ -65,7 +65,7 @@ var/global/image/contamination_overlay = image('icons/effects/contamination.dmi' /mob/proc/handle_contaminants() return -/mob/living/carbon/human/handle_contaminants() +/mob/living/human/handle_contaminants() //Handles all the bad things contaminants can do. //Contamination @@ -96,12 +96,10 @@ var/global/image/contamination_overlay = image('icons/effects/contamination.dmi' //Genetic Corruption if(vsc.contaminant_control.GENETIC_CORRUPTION) if(rand(1,10000) < vsc.contaminant_control.GENETIC_CORRUPTION) - randmutb(src) + add_genetic_condition(pick(decls_repository.get_decls_of_type(/decl/genetic_condition/disability))) to_chat(src, "High levels of toxins cause you to spontaneously mutate!") - domutcheck(src,null) - -/mob/living/carbon/human/proc/burn_eyes() +/mob/living/human/proc/burn_eyes() var/obj/item/organ/internal/eyes/E = get_organ(BP_EYES, /obj/item/organ/internal/eyes) if(E && !E.bodytype.eye_contaminant_guard) if(prob(20)) to_chat(src, "Your eyes burn!") @@ -111,7 +109,7 @@ var/global/image/contamination_overlay = image('icons/effects/contamination.dmi' to_chat(src, "You are blinded!") SET_STATUS_MAX(src, STAT_BLIND, 20) -/mob/living/carbon/human/proc/contaminant_head_protected() +/mob/living/human/proc/contaminant_head_protected() //Checks if the head is adequately sealed. var/obj/item/head = get_equipped_item(slot_head_str) if(!head) @@ -123,7 +121,7 @@ var/global/image/contamination_overlay = image('icons/effects/contamination.dmi' // Regardless, the head item must cover the face and head. Eyes are checked seperately above. return BIT_TEST_ALL(head.body_parts_covered, SLOT_HEAD|SLOT_FACE) -/mob/living/carbon/human/proc/contaminant_suit_protected() +/mob/living/human/proc/contaminant_suit_protected() //Checks if the suit is adequately sealed. var/coverage = 0 for(var/slot in list(slot_wear_suit_str, slot_gloves_str, slot_shoes_str)) @@ -139,7 +137,7 @@ var/global/image/contamination_overlay = image('icons/effects/contamination.dmi' return BIT_TEST_ALL(coverage, SLOT_UPPER_BODY|SLOT_LOWER_BODY|SLOT_LEGS|SLOT_FEET|SLOT_ARMS|SLOT_HANDS) -/mob/living/carbon/human/proc/suit_contamination() +/mob/living/human/proc/suit_contamination() //Runs over the things that can be contaminated and does so. for(var/slot in list(slot_w_uniform_str, slot_shoes_str, slot_gloves_str)) var/obj/item/gear = get_equipped_item(slot) diff --git a/code/modules/ZAS/Fire.dm b/code/modules/ZAS/Fire.dm index 303e07ec7ea..c961aed56c7 100644 --- a/code/modules/ZAS/Fire.dm +++ b/code/modules/ZAS/Fire.dm @@ -324,7 +324,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin return mx -/mob/living/carbon/human/FireBurn(var/firelevel, var/last_temperature, var/pressure) +/mob/living/human/FireBurn(var/firelevel, var/last_temperature, var/pressure) //Burns mobs due to fire. Respects heat transfer coefficients on various body parts. //Due to TG reworking how fireprotection works, this is kinda less meaningful. diff --git a/code/modules/ZAS/Variable Settings.dm b/code/modules/ZAS/Variable Settings.dm index 731aa8437ae..06208e008b4 100644 --- a/code/modules/ZAS/Variable Settings.dm +++ b/code/modules/ZAS/Variable Settings.dm @@ -307,15 +307,15 @@ var/global/vs_control/vsc = new connection_insulation = initial(connection_insulation) connection_temperature_delta = initial(connection_temperature_delta) - contaminant_control.CONTAMINANT_DMG = initial(contaminant_control.CONTAMINANT_DMG) - contaminant_control.CLOTH_CONTAMINATION = initial(contaminant_control.CLOTH_CONTAMINATION) - contaminant_control.STRICT_PROTECTION_ONLY = initial(contaminant_control.STRICT_PROTECTION_ONLY) - contaminant_control.GENETIC_CORRUPTION = initial(contaminant_control.GENETIC_CORRUPTION) - contaminant_control.SKIN_BURNS = initial(contaminant_control.SKIN_BURNS) - contaminant_control.EYE_BURNS = initial(contaminant_control.EYE_BURNS) - contaminant_control.CONTAMINATION_LOSS = initial(contaminant_control.CONTAMINATION_LOSS) - contaminant_control.CONTAMINANT_HALLUCINATION = initial(contaminant_control.CONTAMINANT_HALLUCINATION) - contaminant_control.N2O_HALLUCINATION = initial(contaminant_control.N2O_HALLUCINATION) + contaminant_control.CONTAMINANT_DMG = initial(contaminant_control.CONTAMINANT_DMG) + contaminant_control.CLOTH_CONTAMINATION = initial(contaminant_control.CLOTH_CONTAMINATION) + contaminant_control.STRICT_PROTECTION_ONLY = initial(contaminant_control.STRICT_PROTECTION_ONLY) + contaminant_control.GENETIC_CORRUPTION = initial(contaminant_control.GENETIC_CORRUPTION) + contaminant_control.SKIN_BURNS = initial(contaminant_control.SKIN_BURNS) + contaminant_control.EYE_BURNS = initial(contaminant_control.EYE_BURNS) + contaminant_control.CONTAMINATION_LOSS = initial(contaminant_control.CONTAMINATION_LOSS) + contaminant_control.CONTAMINANT_HALLUCINATION = initial(contaminant_control.CONTAMINANT_HALLUCINATION) + contaminant_control.N2O_HALLUCINATION = initial(contaminant_control.N2O_HALLUCINATION) to_world("[key_name(user)] changed the global contaminant/ZAS settings to \"[def]\"") diff --git a/code/modules/acting/acting_items.dm b/code/modules/acting/acting_items.dm index 9fb767b16fb..ac454ee5975 100644 --- a/code/modules/acting/acting_items.dm +++ b/code/modules/acting/acting_items.dm @@ -32,13 +32,12 @@ SHOULD_CALL_PARENT(FALSE) if(!ishuman(user)) return ..() - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user H.change_appearance(APPEARANCE_ALL, H.loc, H, H.generate_valid_species(), state = global.z_topic_state) var/getName = sanitize(input(H, "Would you like to change your name to something else?", "Name change") as null|text, MAX_NAME_LEN) if(getName) H.real_name = getName H.SetName(getName) - H.dna.real_name = getName if(H.mind) H.mind.name = H.name return TRUE diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index eab1a14f3fd..d5cebeab272 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -169,23 +169,15 @@ var/global/BSACooldown = 0 else body += "Animalize | " - // DNA2 - Admin Hax - if(M.dna) + if(M.can_have_genetic_conditions()) body += "

" - body += "DNA Blocks:
" - var/bname - for(var/block=1;block<=DNA_SE_LENGTH;block++) - if(((block-1)%5)==0) - body += "" - bname = assigned_blocks[block] - body += "" + body += "Genetic conditions:
 12345
[block-1]" - if(bname) - var/bstate=M.dna.GetSEState(block) - var/bcolor="[(bstate)?"#006600":"#ff0000"]" - body += "[bname][block]" - else - body += "[block]" - body+="
" + var/i = 1 + for(var/decl/genetic_condition/mutation as anything in decls_repository.get_decls_of_type_unassociated(/decl/genetic_condition)) + if(i % 5 == 0) + body += "" + body += "" + i++ body += "
[mutation.name]
" body += "

Rudimentary transformation:
These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.

" @@ -906,16 +898,6 @@ var/global/BSACooldown = 0 message_admins("[key_name_admin(usr)] toggled Aliens off.", 1) SSstatistics.add_field_details("admin_verb","TA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/datum/admins/proc/toggle_space_ninja() - set category = "Server" - set desc="Toggle space ninjas spawning." - set name="Toggle Space Ninjas" - if(!check_rights(R_ADMIN)) - return - toggle_config_value(/decl/config/toggle/ninjas_allowed) - log_and_message_admins("toggled Space Ninjas [get_config_value(/decl/config/toggle/ninjas_allowed) ? "on" : "off"].") - SSstatistics.add_field_details("admin_verb","TSN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - /datum/admins/proc/delay() set category = "Server" set desc="Delay the game start/end" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 7c0fb87c3e0..f3be6255a41 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -112,7 +112,6 @@ var/global/list/admin_verbs_fun = list( /client/proc/everyone_random, /client/proc/cinematic, /datum/admins/proc/toggle_aliens, - /datum/admins/proc/toggle_space_ninja, /client/proc/cmd_admin_add_freeform_ai_law, /client/proc/toggle_random_events, /client/proc/editappear, @@ -153,7 +152,6 @@ var/global/list/admin_verbs_server = list( /datum/admins/proc/adspawn, /datum/admins/proc/adjump, /datum/admins/proc/toggle_aliens, - /datum/admins/proc/toggle_space_ninja, /client/proc/toggle_random_events, /client/proc/nanomapgen_DumpImage, /datum/admins/proc/panicbunker, @@ -268,7 +266,6 @@ var/global/list/admin_verbs_hideable = list( /client/proc/drop_bomb, /client/proc/cinematic, /datum/admins/proc/toggle_aliens, - /datum/admins/proc/toggle_space_ninja, /client/proc/cmd_admin_add_freeform_ai_law, /client/proc/cmd_admin_create_centcom_report, /client/proc/toggle_random_events, @@ -688,7 +685,7 @@ var/global/list/admin_verbs_mod = list( if(!check_rights(R_FUN)) return - var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Admin") as null|anything in global.human_mob_list + var/mob/living/human/H = input("Select mob.", "Change Mob Appearance - Admin") as null|anything in global.human_mob_list if(!H) return log_and_message_admins("is altering the appearance of [H].") @@ -702,7 +699,7 @@ var/global/list/admin_verbs_mod = list( if(!check_rights(R_FUN)) return - var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Self") as null|anything in global.human_mob_list + var/mob/living/human/H = input("Select mob.", "Change Mob Appearance - Self") as null|anything in global.human_mob_list if(!H) return if(!H.client) @@ -739,7 +736,7 @@ var/global/list/admin_verbs_mod = list( if(!check_rights(R_FUN)) return - var/mob/living/carbon/human/M = input("Select mob.", "Edit Appearance") as null|anything in global.human_mob_list + var/mob/living/human/M = input("Select mob.", "Edit Appearance") as null|anything in global.human_mob_list if(!ishuman(M)) to_chat(usr, "You can only do this to humans!") @@ -797,7 +794,6 @@ var/global/list/admin_verbs_mod = list( if(update_hair) M.update_hair() M.update_body() - M.check_dna(M) /client/proc/free_slot_submap() set name = "Free Job Slot (Submap)" diff --git a/code/modules/admin/dbban/functions.dm b/code/modules/admin/dbban/functions.dm index 278792ba877..6580398d8e3 100644 --- a/code/modules/admin/dbban/functions.dm +++ b/code/modules/admin/dbban/functions.dm @@ -257,6 +257,9 @@ if(!check_rights(R_BAN)) return + if(!owner || !istype(owner, /client)) + return + establish_db_connection() if(!dbcon.IsConnected()) return @@ -271,21 +274,18 @@ ban_number++; if(ban_number == 0) - to_chat(usr, "Database update failed due to a ban id not being present in the database.") + to_chat(owner, "Database update failed due to a ban id not being present in the database.") return if(ban_number > 1) - to_chat(usr, "Database update failed due to multiple bans having the same ID. Contact the database admin.") - return - - if(!src.owner || !istype(src.owner, /client)) + to_chat(owner, "Database update failed due to multiple bans having the same ID. Contact the database admin.") return - var/unban_ckey = src.owner:ckey - var/unban_computerid = src.owner:computer_id - var/unban_ip = src.owner:address + var/unban_ckey = owner.ckey + var/unban_computerid = owner.computer_id + var/unban_ip = owner.address - message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.",1) + message_admins("[key_name_admin(owner)] has lifted [pckey]'s ban.",1) var/DBQuery/query_update = dbcon.NewQuery("UPDATE `erro_ban` SET `unbanned` = TRUE, `unbanned_datetime` = NOW(), `unbanned_ckey` = '[unban_ckey]', `unbanned_computerid` = '[unban_computerid]', `unbanned_ip` = '[unban_ip]' WHERE `id` = [id]") query_update.Execute() diff --git a/code/modules/admin/quantum_mechanic.dm b/code/modules/admin/quantum_mechanic.dm index 1d19c6e3c65..7731afd44ca 100644 --- a/code/modules/admin/quantum_mechanic.dm +++ b/code/modules/admin/quantum_mechanic.dm @@ -6,7 +6,7 @@ // Most of their superhuman qualities can be toggled off if you need a normal human for testing biological functions */ -#define isquantum(X) istype(X, /mob/living/carbon/human/quantum) +#define isquantum(X) istype(X, /mob/living/human/quantum) /client/proc/spawn_quantum_mechanic() set category = "Debug" set name = "Spawn Quantum Mechanic" @@ -20,7 +20,7 @@ return var/T = get_turf(mob) - var/mob/living/carbon/human/quantum/Q = new (T) + var/mob/living/human/quantum/Q = new (T) prefs.copy_to(Q) @@ -56,7 +56,7 @@ belt = /obj/item/belt/utility/full/quantum id_slot = slot_wear_id_str -/mob/living/carbon/human/quantum +/mob/living/human/quantum status_flags = NO_ANTAG universal_understand = TRUE var/fall_override = TRUE @@ -76,17 +76,17 @@ /datum/movement_handler/mob/movement ) -/mob/living/carbon/human/quantum/can_inject(mob/user, target_zone) +/mob/living/human/quantum/can_inject(mob/user, target_zone) if(user == src) return ..() to_chat(user, SPAN_DANGER("\The [src] disarms you before you can inject them.")) user.drop_item() return FALSE -/mob/living/carbon/human/quantum/binarycheck() +/mob/living/human/quantum/binarycheck() return TRUE -/mob/living/carbon/human/quantum/proc/delete_self() +/mob/living/human/quantum/proc/delete_self() if(QDELETED(src)) return @@ -102,7 +102,7 @@ QDEL_IN(src, 7) -/mob/living/carbon/human/quantum/verb/quantum_antigrav() +/mob/living/human/quantum/verb/quantum_antigrav() set name = "Toggle Gravity" set desc = "Toggles falling." set category = "Ω" @@ -114,7 +114,7 @@ fall_override = TRUE to_chat(usr, SPAN_NOTICE("You will no longer fall.")) -/mob/living/carbon/human/quantum/verb/quantum_walk() +/mob/living/human/quantum/verb/quantum_walk() set name = "Toggle Phase Walking" set desc = "Uses quantum technology to phase through solid matter and move quickly." set category = "Ω" @@ -127,7 +127,7 @@ usr.ReplaceMovementHandler(/datum/movement_handler/mob/incorporeal) to_chat(usr, SPAN_NOTICE("You will now phase through solid matter.")) -/mob/living/carbon/human/quantum/verb/quantum_recover() +/mob/living/human/quantum/verb/quantum_recover() set name = "Rejuvenate Self" set desc = "Use quantum powers you to restore your health." set category = "Ω" @@ -135,14 +135,14 @@ revive() -/mob/living/carbon/human/quantum/verb/quantum_quit() +/mob/living/human/quantum/verb/quantum_quit() set name = "Teleport Out" set desc = "Activate quantum magic to leave and return to your original mob (if you have one)." set category = "Ω" delete_self() -/mob/living/carbon/human/quantum/verb/quantum_tgm() +/mob/living/human/quantum/verb/quantum_tgm() set name = "Toggle Godmode" set desc = "Enable or disable god mode. For testing things that require you to be vulnerable." set category = "Ω" @@ -296,8 +296,8 @@ // Full set of tools new /obj/item/multitool(src) -/mob/living/carbon/human/quantum/restrained() +/mob/living/human/quantum/restrained() return FALSE -/mob/living/carbon/human/quantum/can_fall(anchor_bypass = FALSE, turf/location_override = loc) +/mob/living/human/quantum/can_fall(anchor_bypass = FALSE, turf/location_override = loc) return fall_override ? FALSE : ..() diff --git a/code/modules/admin/respawn_as_self.dm b/code/modules/admin/respawn_as_self.dm index d19c9d752eb..0e5277b36c6 100644 --- a/code/modules/admin/respawn_as_self.dm +++ b/code/modules/admin/respawn_as_self.dm @@ -11,7 +11,7 @@ return var/mob/oldmob = C.mob - var/mob/living/carbon/human/H = new(oldmob.loc) + var/mob/living/human/H = new(oldmob.loc) C.prefs.copy_to(H) H.key = C.key qdel(oldmob) diff --git a/code/modules/admin/secrets/admin_secrets/list_dna.dm b/code/modules/admin/secrets/admin_secrets/list_dna.dm index 6f7a2300cf0..eb9a57d6155 100644 --- a/code/modules/admin/secrets/admin_secrets/list_dna.dm +++ b/code/modules/admin/secrets/admin_secrets/list_dna.dm @@ -7,8 +7,8 @@ return var/dat = "Showing DNA from blood.
" dat += "" - for(var/mob/living/carbon/human/H in SSmobs.mob_list) - if(H.dna && H.ckey) + for(var/mob/living/human/H in SSmobs.mob_list) + if(H.ckey) dat += "" dat += "
NameDNABlood Type
[H][H.get_unique_enzymes() || "NULL"][H.get_blood_type() || "NULL"]
" show_browser(user, dat, "window=DNA;size=440x410") diff --git a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm b/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm index 655774bbba1..7840ce20bb1 100644 --- a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm +++ b/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm @@ -7,7 +7,7 @@ return var/dat = "Showing Fingerprints.
" dat += "" - for(var/mob/living/carbon/human/H in SSmobs.mob_list) + for(var/mob/living/human/H in SSmobs.mob_list) if(H.ckey) dat += "" dat += "
NameFingerprints
[H][H.get_full_print(ignore_blockers = TRUE) || "null"]
" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c70b4b02ab7..18a05a3d3cf 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -739,9 +739,9 @@ else if(href_list["monkeyone"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["monkeyone"]) + var/mob/living/human/H = locate(href_list["monkeyone"]) if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be used on instances of type /mob/living/human") return log_and_message_admins("attempting to monkeyize [key_name_admin(H)]") @@ -750,9 +750,9 @@ else if(href_list["corgione"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["corgione"]) + var/mob/living/human/H = locate(href_list["corgione"]) if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be used on instances of type /mob/living/human") return log_and_message_admins("attempting to corgize [key_name_admin(H)]") @@ -788,9 +788,9 @@ else if(href_list["makeai"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makeai"]) + var/mob/living/human/H = locate(href_list["makeai"]) if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be used on instances of type /mob/living/human") return log_and_message_admins("AIized [key_name_admin(H)]!") @@ -799,9 +799,9 @@ else if(href_list["makerobot"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makerobot"]) + var/mob/living/human/H = locate(href_list["makerobot"]) if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be used on instances of type /mob/living/human") return usr.client.cmd_admin_robotize(H) @@ -816,17 +816,6 @@ usr.client.cmd_admin_animalize(M) - else if(href_list["togmutate"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["togmutate"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - var/block=text2num(href_list["block"]) - usr.client.cmd_admin_toggle_block(H,block) - show_player_panel(H) - else if(href_list["adminplayeropts"]) var/mob/M = locate(href_list["adminplayeropts"]) show_player_panel(M) @@ -946,9 +935,9 @@ else if(href_list["adminspawnprayreward"]) if(!check_rights(R_ADMIN|R_FUN)) return - var/mob/living/carbon/human/H = locate(href_list["adminspawnprayreward"]) + var/mob/living/human/H = locate(href_list["adminspawnprayreward"]) if(!ishuman(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be used on instances of type /mob/living/human") return var/obj/item/C = new global.using_map.pray_reward_type(get_turf(H)) @@ -1030,9 +1019,9 @@ else if(href_list["SyndicateReply"]) - var/mob/living/carbon/human/H = locate(href_list["SyndicateReply"]) + var/mob/living/human/H = locate(href_list["SyndicateReply"]) if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be used on instances of type /mob/living/human") return var/obj/item/l_ear = H.get_equipped_item(slot_l_ear_str) var/obj/item/r_ear = H.get_equipped_item(slot_r_ear_str) @@ -1519,6 +1508,7 @@ ckey = LAST_CKEY(M) show_player_info(ckey) return + if(href_list["setstaffwarn"]) var/mob/M = locate(href_list["setstaffwarn"]) if(!ismob(M)) return @@ -1541,6 +1531,7 @@ show_player_panel(M) if("No") return + if(href_list["removestaffwarn"]) var/mob/M = locate(href_list["removestaffwarn"]) if(!ismob(M)) return @@ -1585,10 +1576,35 @@ else log_debug("Tried to send a fax to an invalid machine!:[log_info_line(F)]\nhref:[log_info_line(href_list)]") + if(href_list["toggle_mutation"]) + var/mob/M = locate(href_list["toggle_mutation"]) + var/decl/genetic_condition/condition = locate(href_list["block"]) + if(istype(condition) && istype(M) && !QDELETED(M)) + var/result + var/had_condition + if(M.has_genetic_condition(condition.type)) + had_condition = TRUE + result = M.remove_genetic_condition(condition.type) + else + had_condition = FALSE + result = M.add_genetic_condition(condition.type) + if(!isnull(result)) + if(result) + if(had_condition) + log_debug("Removed genetic condition [condition.name] from \the [M] ([M.ckey]).") + else + log_debug("Added genetic condition [condition.name] to \the [M] ([M.ckey]).") + else + log_debug("Failed to toggle genetic condition [condition.name] on \the [M] ([M.ckey]).") + else + log_debug("Could not apply genetic condition [condition.name] to \the [M] ([M.ckey]).") + show_player_panel(M) + return + /mob/living/proc/can_centcom_reply() return 0 -/mob/living/carbon/human/can_centcom_reply() +/mob/living/human/can_centcom_reply() for(var/slot in global.ear_slots) var/obj/item/radio/headset/radio = get_equipped_item(slot) if(istype(radio)) diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index f1f4d7130d9..80f1d71a039 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -116,13 +116,13 @@ return if(get_config_value(/decl/config/toggle/on/admin_jump)) - var/list/keys = list() - for(var/mob/M in global.player_list) + var/list/client/keys = list() + for(var/mob/M in global.player_list) // excludes /mob/new_player keys += M.client - var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortKey(keys) + var/client/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortKey(keys) if(!selection) return - var/mob/M = selection:mob + var/mob/M = selection.mob if(!M) return diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 239a3942201..65defcabc42 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -107,7 +107,7 @@ set name = "Del-All" // to prevent REALLY stupid deletions - var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon/human, /mob/observer, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai) + var/blocked = list(/obj, /mob, /mob/living, /mob/living/human, /mob/observer, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai) var/hsbitem = input(usr, "Choose an object to delete.", "Delete:") as null|anything in typesof(/obj) + typesof(/mob) - blocked if(hsbitem) for(var/atom/O in world) @@ -145,7 +145,7 @@ alert("Wait until the game starts") return if (ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/obj/item/card/id/id = H.GetIdCard() if(id) id.icon_state = "gold" @@ -282,7 +282,7 @@ if(!check_rights(R_FUN)) return - var/mob/living/carbon/human/H = input("Select mob.", "Select equipment.") as null|anything in global.human_mob_list + var/mob/living/human/H = input("Select mob.", "Select equipment.") as null|anything in global.human_mob_list if(!H) return @@ -297,7 +297,7 @@ SSstatistics.add_field_details("admin_verb","SEQ") dressup_human(H, outfit, reset_equipment) -/proc/dressup_human(var/mob/living/carbon/human/H, var/decl/hierarchy/outfit/outfit, var/undress = TRUE) +/proc/dressup_human(var/mob/living/human/H, var/decl/hierarchy/outfit/outfit, var/undress = TRUE) if(!H || !outfit) return if(undress) @@ -360,22 +360,6 @@ if("Clients") to_chat(usr, jointext(global.clients,",")) -// DNA2 - Admin Hax -/client/proc/cmd_admin_toggle_block(var/mob/M,var/block) - if(GAME_STATE < RUNLEVEL_GAME) - alert("Wait until the game starts") - return - if(M.dna) - M.dna.SetSEState(block,!M.dna.GetSEState(block)) - domutcheck(M,null,MUTCHK_FORCED) - M.update_mutations() - var/state="[M.dna.GetSEState(block)?"on":"off"]" - var/blockname=assigned_blocks[block] - message_admins("[key_name_admin(src)] has toggled [M.key]'s [blockname] block [state]!") - log_admin("[key_name(src)] has toggled [M.key]'s [blockname] block [state]!") - else - alert("Invalid mob") - /datum/admins/proc/view_runtimes() set category = "Debug" set name = "View Runtimes" @@ -391,12 +375,12 @@ set name = "Analyse Health" set desc = "Get an advanced health reading on a human mob." - var/mob/living/carbon/human/H = input("Select mob.", "Analyse Health") as null|anything in global.human_mob_list + var/mob/living/human/H = input("Select mob.", "Analyse Health") as null|anything in global.human_mob_list if(!H) return cmd_analyse_health(H) -/client/proc/cmd_analyse_health(var/mob/living/carbon/human/H) +/client/proc/cmd_analyse_health(var/mob/living/human/H) if(!check_rights(R_DEBUG)) return @@ -408,7 +392,7 @@ dat += text("
Close", usr) show_browser(usr, dat, "window=scanconsole;size=430x600") -/client/proc/cmd_analyse_health_context(mob/living/carbon/human/H as mob in global.human_mob_list) +/client/proc/cmd_analyse_health_context(mob/living/human/H as mob in global.human_mob_list) set category = null set name = "Analyse Human Health" diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index 758ef1ee1ab..aea09a39741 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -29,7 +29,7 @@ usr.real_name = usr.name_archive usr.SetName(usr.real_name) if(ishuman(usr)) - var/mob/living/carbon/human/H = usr + var/mob/living/human/H = usr H.SetName(H.get_visible_name()) usr.forceMove(O.loc) // Appear where the object you were controlling is -- TLE diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index a525e68ff53..9a048e30b7f 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -395,7 +395,7 @@ Traitors and the like can also be revived with the previous role mostly intact. to_chat(usr, SPAN_WARNING("There is no active key like that in the game or the person is not currently a ghost.")) return - var/mob/living/carbon/human/new_character = new(get_random_spawn_turf(SPAWN_FLAG_JOBS_CAN_SPAWN)) //The mob being spawned. + var/mob/living/human/new_character = new(get_random_spawn_turf(SPAWN_FLAG_JOBS_CAN_SPAWN)) //The mob being spawned. var/datum/computer_file/report/crew_record/record_found //Referenced to later to either randomize or not randomize the character. if(G_found.mind && !G_found.mind.active) record_found = get_crewmember_record(G_found.real_name) @@ -427,10 +427,8 @@ Traitors and the like can also be revived with the previous role mostly intact. new_character.mind.assigned_role = global.using_map.default_job_title//If they somehow got a null assigned role. //DNA - if(new_character.dna) - new_character.dna.ready_dna(new_character) - if(record_found)//Pull up their name from database records if they did have a mind. - new_character.dna.unique_enzymes = record_found.get_dna() + if(record_found)//Pull up their name from database records if they did have a mind. + new_character.set_unique_enzymes(record_found.get_dna()) new_character.key = G_found.key /* diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm index 6a306a533a9..42650c5971a 100644 --- a/code/modules/admin/view_variables/helpers.dm +++ b/code/modules/admin/view_variables/helpers.dm @@ -69,7 +69,7 @@ "} -/mob/living/carbon/human/get_view_variables_options() +/mob/living/human/get_view_variables_options() return ..() + {" diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 75fb19c9554..8c2e7f2ecad 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -25,9 +25,9 @@ else if(href_list["dressup"]) if(!check_rights(R_VAREDIT)) return - var/mob/living/carbon/human/H = locate(href_list["dressup"]) + var/mob/living/human/H = locate(href_list["dressup"]) if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be used on instances of type /mob/living/human") return var/decl/hierarchy/outfit/outfit = input("Select outfit.", "Select equipment.") as null|anything in outfits() if(!outfit) @@ -252,9 +252,9 @@ else if(href_list["makemonkey"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makemonkey"]) + var/mob/living/human/H = locate(href_list["makemonkey"]) if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be done to instances of type /mob/living/human") return if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return @@ -266,9 +266,9 @@ else if(href_list["makerobot"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makerobot"]) + var/mob/living/human/H = locate(href_list["makerobot"]) if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be done to instances of type /mob/living/human") return if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return @@ -280,9 +280,9 @@ else if(href_list["makeai"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["makeai"]) + var/mob/living/human/H = locate(href_list["makeai"]) if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be done to instances of type /mob/living/human") return if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return @@ -293,9 +293,9 @@ else if(href_list["addailment"]) - var/mob/living/carbon/human/H = locate(href_list["addailment"]) + var/mob/living/human/H = locate(href_list["addailment"]) if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be done to instances of type /mob/living/human") return var/obj/item/organ/O = input("Select a limb to add the ailment to.", "Add Ailment") as null|anything in H.get_organs() if(QDELETED(H) || QDELETED(O) || O.owner != H) @@ -317,9 +317,9 @@ else if(href_list["remailment"]) - var/mob/living/carbon/human/H = locate(href_list["remailment"]) + var/mob/living/human/H = locate(href_list["remailment"]) if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be done to instances of type /mob/living/human") return var/list/all_ailments = list() for(var/obj/item/organ/O in H.get_organs()) @@ -339,9 +339,9 @@ else if(href_list["setspecies"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["setspecies"]) + var/mob/living/human/H = locate(href_list["setspecies"]) if(!istype(H)) - to_chat(usr, SPAN_WARNING("This can only be done to instances of type /mob/living/carbon/human")) + to_chat(usr, SPAN_WARNING("This can only be done to instances of type /mob/living/human")) return var/new_species = input("Please choose a new species.","Species",null) as null|anything in get_all_species() @@ -361,9 +361,9 @@ else if(href_list["setbodytype"]) if(!check_rights(R_SPAWN)) return - var/mob/living/carbon/human/H = locate(href_list["setbodytype"]) + var/mob/living/human/H = locate(href_list["setbodytype"]) if(!istype(H)) - to_chat(usr, SPAN_WARNING("This can only be done to instances of type /mob/living/carbon/human")) + to_chat(usr, SPAN_WARNING("This can only be done to instances of type /mob/living/human")) return var/new_bodytype = input("Please choose a new bodytype.","Bodytype",null) as null|anything in H.species.available_bodytypes @@ -444,8 +444,8 @@ possibleverbs += "Cancel" // One for the top... possibleverbs += typesof(/mob/proc,/mob/verb,/mob/living/proc,/mob/living/verb) switch(H.type) - if(/mob/living/carbon/human) - possibleverbs += typesof(/mob/living/carbon/human/verb, /mob/living/carbon/human/proc) + if(/mob/living/human) + possibleverbs += typesof(/mob/living/human/verb, /mob/living/human/proc) if(/mob/living/silicon/robot) possibleverbs += typesof(/mob/living/silicon/proc, /mob/living/silicon/robot/proc, /mob/living/silicon/robot/verb) if(/mob/living/silicon/ai) @@ -568,9 +568,9 @@ else if(href_list["refreshoverlays"]) if(!check_rights(0)) return - var/mob/living/carbon/human/H = locate(href_list["refreshoverlays"]) + var/mob/living/human/H = locate(href_list["refreshoverlays"]) if(!istype(H)) - to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human") + to_chat(usr, "This can only be done to instances of type /mob/living/human") return H.try_refresh_visible_overlays() diff --git a/code/modules/aspects/_aspects.dm b/code/modules/aspects/_aspects.dm index d36b02d954d..2749757a0dc 100644 --- a/code/modules/aspects/_aspects.dm +++ b/code/modules/aspects/_aspects.dm @@ -174,7 +174,7 @@ var/global/list/aspect_categories = list() // Containers for ease of printing da do_update = TRUE return do_update -/mob/living/carbon/human/apply_aspects(var/aspect_type) +/mob/living/human/apply_aspects(var/aspect_type) . = ..(aspect_type) if(.) update_body() diff --git a/code/modules/aspects/aspects_handicaps.dm b/code/modules/aspects/aspects_handicaps.dm index e646224c8c7..5e1ee5b2e93 100644 --- a/code/modules/aspects/aspects_handicaps.dm +++ b/code/modules/aspects/aspects_handicaps.dm @@ -11,8 +11,7 @@ /decl/aspect/handicap/impaired_vision/apply(mob/living/holder) . = ..() if(.) - holder.dna.SetSEState(global.GLASSESBLOCK,1,0) - holder.disabilities |= NEARSIGHTED + holder.add_genetic_condition(GENE_COND_NEARSIGHTED) var/equipped = holder.equip_to_slot_or_del(new /obj/item/clothing/glasses/prescription(holder), slot_glasses_str) if(equipped) var/obj/item/clothing/glasses/G = holder.get_equipped_item(slot_glasses_str) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index a37c69d93bb..b0b1aed79e3 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -30,7 +30,7 @@ return var/obj/item/organ/external/affecting = null if(ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target switch(type) if("feet") if(!H.get_equipped_item(slot_shoes_str)) @@ -54,7 +54,7 @@ pulse_device(0) /obj/item/assembly/mousetrap/proc/toggle_arming(var/mob/user) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) + if(user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) var/which_hand = user.get_active_held_item_slot() triggered(user, which_hand) user.visible_message(SPAN_DANGER("\The [user] accidentally sets off [src], hurting their fingers."), \ diff --git a/code/modules/atmospherics/he_pipes.dm b/code/modules/atmospherics/he_pipes.dm index 14355d9471b..3d13f92bc6d 100644 --- a/code/modules/atmospherics/he_pipes.dm +++ b/code/modules/atmospherics/he_pipes.dm @@ -78,7 +78,7 @@ var/heat_limit = 1000 - var/mob/living/carbon/human/H = buckled_mob + var/mob/living/human/H = buckled_mob if(istype(H) && H.species) heat_limit = H.get_mob_temperature_threshold(HEAT_LEVEL_3) diff --git a/code/modules/augment/augment.dm b/code/modules/augment/augment.dm index 8f63e1b6c25..7297b6a1ba5 100644 --- a/code/modules/augment/augment.dm +++ b/code/modules/augment/augment.dm @@ -27,7 +27,7 @@ return ..() -/obj/item/organ/internal/augment/do_install(var/mob/living/carbon/human/target, var/obj/item/organ/external/affected, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE) +/obj/item/organ/internal/augment/do_install(var/mob/living/human/target, var/obj/item/organ/external/affected, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE) . = ..() parent_organ = affected.organ_tag update_parent_organ() diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 89c82c0deb3..fbd520afb17 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -37,12 +37,13 @@ /obj/abstract/landmark/corpse/Initialize() ..() - if(!species) species = global.using_map.default_species + if(!species) + species = global.using_map.default_species var/species_choice = islist(species) ? pickweight(species) : species - my_corpse = weakref(new /mob/living/carbon/human/corpse(loc, species_choice, null, null, src)) + my_corpse = weakref(new /mob/living/human/corpse(loc, species_choice, null, src)) return INITIALIZE_HINT_QDEL -/obj/abstract/landmark/corpse/proc/randomize_appearance(var/mob/living/carbon/human/M, species_choice) +/obj/abstract/landmark/corpse/proc/randomize_appearance(var/mob/living/human/M, species_choice) if((spawn_flags & CORPSE_SPAWNER_RANDOM_GENDER)) if(species_choice in genders_per_species) @@ -100,7 +101,7 @@ M.SetName(name) M.real_name = M.name -/obj/abstract/landmark/corpse/proc/equip_corpse_outfit(var/mob/living/carbon/human/M) +/obj/abstract/landmark/corpse/proc/equip_corpse_outfit(var/mob/living/human/M) var/adjustments = 0 adjustments = (spawn_flags & CORPSE_SPAWNER_CUT_SURVIVAL) ? (adjustments|OUTFIT_ADJUSTMENT_SKIP_SURVIVAL_GEAR) : adjustments adjustments = (spawn_flags & CORPSE_SPAWNER_CUT_ID_PDA) ? (adjustments|OUTFIT_ADJUSTMENT_SKIP_ID_PDA) : adjustments diff --git a/code/modules/butchery/butchery_data.dm b/code/modules/butchery/butchery_data.dm index 0d1c0da9f18..c6c81d46850 100644 --- a/code/modules/butchery/butchery_data.dm +++ b/code/modules/butchery/butchery_data.dm @@ -96,15 +96,32 @@ continue LAZYADD(., organ) +// TODO: make meat spikes use/set these. +/mob/living/proc/currently_has_skin() + return TRUE + +/mob/living/proc/currently_has_innards() + return TRUE + +/mob/living/proc/currently_has_bones() + return TRUE + +/mob/living/proc/currently_has_meat() + return TRUE + /decl/butchery_data/proc/get_all_products(mob/living/donor) - for(var/thing in harvest_skin(donor)) - LAZYDISTINCTADD(., thing) - for(var/thing in harvest_innards(donor)) - LAZYDISTINCTADD(., thing) - for(var/thing in harvest_bones(donor)) - LAZYDISTINCTADD(., thing) - for(var/thing in harvest_meat(donor)) - LAZYDISTINCTADD(., thing) + if(!donor || donor.currently_has_skin()) + for(var/thing in harvest_skin(donor)) + LAZYDISTINCTADD(., thing) + if(!donor || donor.currently_has_innards()) + for(var/thing in harvest_innards(donor)) + LAZYDISTINCTADD(., thing) + if(!donor || donor.currently_has_bones()) + for(var/thing in harvest_bones(donor)) + LAZYDISTINCTADD(., thing) + if(!donor || donor.currently_has_meat()) + for(var/thing in harvest_meat(donor)) + LAZYDISTINCTADD(., thing) /decl/butchery_data/proc/get_monetary_worth(mob/living/donor) . = 0 diff --git a/code/modules/butchery/butchery_hook.dm b/code/modules/butchery/butchery_hook.dm index a3739062094..1cfceb0020b 100644 --- a/code/modules/butchery/butchery_hook.dm +++ b/code/modules/butchery/butchery_hook.dm @@ -116,7 +116,7 @@ to_chat(user, SPAN_WARNING("You cannot butcher \the [target].")) /obj/structure/meat_hook/proc/suitable_for_butchery(var/mob/living/victim) - return istype(victim) && victim.butchery_data + return istype(victim) && victim.butchery_data && (victim.currently_has_skin() || victim.currently_has_innards() || victim.currently_has_bones() || victim.currently_has_meat()) /obj/structure/meat_hook/on_update_icon() ..() @@ -163,9 +163,9 @@ SetName(initial(name)) update_materials(TRUE) // reset name -/obj/structure/meat_hook/proc/set_carcass_state(var/_state) +/obj/structure/meat_hook/proc/set_carcass_state(var/_state, var/apply_damage = TRUE) occupant_state = _state - if(occupant) + if(occupant && apply_damage) occupant.take_damage(rand(50, 60)) if(occupant.stat != DEAD) occupant.death() @@ -198,13 +198,17 @@ switch(next_state) if(CARCASS_SKINNED) - butchery_data.harvest_skin(occupant) + if(occupant.currently_has_skin()) + butchery_data.harvest_skin(occupant) if(CARCASS_GUTTED) - butchery_data.harvest_innards(occupant) + if(occupant.currently_has_innards()) + butchery_data.harvest_innards(occupant) if(CARCASS_JOINTED) - butchery_data.harvest_bones(occupant) + if(occupant.currently_has_bones()) + butchery_data.harvest_bones(occupant) if(CARCASS_EMPTY) - butchery_data.harvest_meat(occupant) + if(occupant.currently_has_meat()) + butchery_data.harvest_meat(occupant) set_carcass_state(next_state) return TRUE @@ -218,17 +222,32 @@ return if(!busy) busy = TRUE - switch(occupant_state) - if(CARCASS_FRESH) - do_butchery_step(user, thing, CARCASS_SKINNED, "skinning") - if(CARCASS_SKINNED) - do_butchery_step(user, thing, CARCASS_GUTTED, "gutting") - if(CARCASS_GUTTED) - do_butchery_step(user, thing, CARCASS_JOINTED, "deboning") - if(CARCASS_JOINTED) - do_butchery_step(user, thing, CARCASS_EMPTY, "butchering") - busy = FALSE - return TRUE + + if(occupant_state == CARCASS_FRESH) + if(occupant.currently_has_skin()) + do_butchery_step(user, thing, CARCASS_SKINNED, "skinning") + else + set_carcass_state(CARCASS_SKINNED, apply_damage = FALSE) + if(occupant_state == CARCASS_SKINNED) + if(occupant.currently_has_innards()) + do_butchery_step(user, thing, CARCASS_GUTTED, "gutting") + else + set_carcass_state(CARCASS_GUTTED, apply_damage = FALSE) + if(occupant_state == CARCASS_GUTTED) + if(occupant.currently_has_bones()) + do_butchery_step(user, thing, CARCASS_JOINTED, "deboning") + else + set_carcass_state(CARCASS_JOINTED, apply_damage = FALSE) + if(occupant_state == CARCASS_JOINTED) + if(occupant.currently_has_meat()) + do_butchery_step(user, thing, CARCASS_EMPTY, "butchering") + else + set_carcass_state(CARCASS_EMPTY, apply_damage = FALSE) + + busy = FALSE + return TRUE + + #undef CARCASS_EMPTY #undef CARCASS_FRESH diff --git a/code/modules/client/preference_setup/loadout/lists/augmentations.dm b/code/modules/client/preference_setup/loadout/lists/augmentations.dm index 1ae8245c615..fe638596308 100644 --- a/code/modules/client/preference_setup/loadout/lists/augmentations.dm +++ b/code/modules/client/preference_setup/loadout/lists/augmentations.dm @@ -19,7 +19,7 @@ else ..() -/obj/item/organ/internal/augment/AttemptAugmentation(mob/living/carbon/human/user, target_zone) +/obj/item/organ/internal/augment/AttemptAugmentation(mob/living/human/user, target_zone) if(!istype(user)) return ..() diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 389b943e697..aef71965634 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -475,7 +475,7 @@ var/global/list/gear_datums = list() if(metadata && !islist(metadata)) PRINT_STACK_TRACE("Loadout spawn_item() proc received non-null non-list metadata: '[json_encode(metadata)]'") -/decl/loadout_option/proc/spawn_on_mob(mob/living/carbon/human/wearer, metadata) +/decl/loadout_option/proc/spawn_on_mob(mob/living/human/wearer, metadata) var/obj/item/item = spawn_and_validate_item(wearer, metadata) if(!item) return @@ -500,14 +500,14 @@ var/global/list/gear_datums = list() qdel(old_item) return item -/decl/loadout_option/proc/spawn_in_storage_or_drop(mob/living/carbon/human/wearer, metadata) +/decl/loadout_option/proc/spawn_in_storage_or_drop(mob/living/human/wearer, metadata) var/obj/item/item = spawn_and_validate_item(wearer, metadata) if(!item) return place_in_storage_or_drop(wearer, item) -/decl/loadout_option/proc/place_in_storage_or_drop(mob/living/carbon/human/wearer, obj/item/item) +/decl/loadout_option/proc/place_in_storage_or_drop(mob/living/human/wearer, obj/item/item) var/atom/placed_in = wearer.equip_to_storage(item) if(placed_in) to_chat(wearer, SPAN_NOTICE("Placing \the [item] in your [placed_in.name]!")) @@ -518,7 +518,7 @@ var/global/list/gear_datums = list() else to_chat(wearer, SPAN_DANGER("Dropping \the [item] on the ground!")) -/decl/loadout_option/proc/spawn_and_validate_item(mob/living/carbon/human/H, metadata) +/decl/loadout_option/proc/spawn_and_validate_item(mob/living/human/H, metadata) PRIVATE_PROC(TRUE) var/obj/item/item = spawn_item(H, H, metadata) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 732ef34eb7a..d1b3c3f9799 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -344,7 +344,7 @@ var/global/list/time_prefs_fixed = list() update_setup_window(usr) return 1 -/datum/preferences/proc/copy_to(mob/living/carbon/human/character, is_preview_copy = FALSE) +/datum/preferences/proc/copy_to(mob/living/human/character, is_preview_copy = FALSE) if(!player_setup) return // WHY IS THIS EVEN HAPPENING. @@ -418,13 +418,8 @@ var/global/list/time_prefs_fixed = list() if(LAZYLEN(appearance_descriptors)) character.appearance_descriptors = appearance_descriptors.Copy() - if(character.dna) - character.dna.ready_dna(character) - if(blood_type) - character.dna.b_type = blood_type - character.force_update_limbs() - character.update_mutations(0) + character.update_genetic_conditions(0) character.update_body(0) character.update_underwear(0) character.update_hair(0) diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preferences_spawnpoints.dm index 3822bd5ce8f..f5057696c33 100644 --- a/code/modules/client/preferences_spawnpoints.dm +++ b/code/modules/client/preferences_spawnpoints.dm @@ -95,7 +95,7 @@ /obj/abstract/landmark/latejoin/cryo spawn_decl = /decl/spawnpoint/cryo -/decl/spawnpoint/cryo/after_join(mob/living/carbon/human/victim) +/decl/spawnpoint/cryo/after_join(mob/living/human/victim) if(!istype(victim) || victim.buckled) // They may have spawned with a wheelchair; don't move them into a pod in that case. return diff --git a/code/modules/clothing/_clothing.dm b/code/modules/clothing/_clothing.dm index 52e35417676..8ab8d42044c 100644 --- a/code/modules/clothing/_clothing.dm +++ b/code/modules/clothing/_clothing.dm @@ -364,7 +364,7 @@ for(var/obj/item/clothing/accessory in accessories) . = min(., accessory.get_pressure_weakness(pressure,zone)) -/obj/item/clothing/proc/check_limb_support(var/mob/living/carbon/human/user) +/obj/item/clothing/proc/check_limb_support(var/mob/living/human/user) return FALSE /obj/item/clothing/verb/toggle_suit_sensors() diff --git a/code/modules/clothing/badges/_badge.dm b/code/modules/clothing/badges/_badge.dm index 5f0953f75ab..a90afae0fc6 100644 --- a/code/modules/clothing/badges/_badge.dm +++ b/code/modules/clothing/badges/_badge.dm @@ -32,7 +32,7 @@ /obj/item/clothing/badge/proc/set_name(var/new_name) stored_name = new_name -/obj/item/clothing/badge/proc/set_desc(var/mob/living/carbon/human/H) +/obj/item/clothing/badge/proc/set_desc(var/mob/living/human/H) /obj/item/clothing/badge/get_examine_line() . = ..() diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 55db25eee5f..8e0f44b9e18 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -49,7 +49,7 @@ /obj/item/clothing/glasses/emp_act(severity) if(electric) if(ishuman(src.loc)) - var/mob/living/carbon/human/M = src.loc + var/mob/living/human/M = src.loc if(M.get_equipped_item(slot_glasses_str) != src) to_chat(M, SPAN_DANGER("\The [src] malfunction[gender != PLURAL ? "s":""], releasing a small spark.")) else @@ -58,10 +58,9 @@ to_chat(M, SPAN_DANGER("Your [name] malfunction[gender != PLURAL ? "s":""], blinding you!")) // Don't cure being nearsighted - if(!(M.disabilities & NEARSIGHTED)) - M.disabilities |= NEARSIGHTED - spawn(100) - M.disabilities &= ~NEARSIGHTED + if(!M.has_genetic_condition(GENE_COND_NEARSIGHTED)) + M.add_genetic_condition(GENE_COND_NEARSIGHTED, 10 SECONDS) + if(toggleable && active) set_active(FALSE) diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index c1d1ff39382..df999d9d245 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -52,7 +52,7 @@ /obj/item/clothing/gloves/equipped() . = ..() if(covering_ring) - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(istype(H) && H.get_equipped_item(slot_gloves_str) != src) H.equip_to_slot_if_possible(covering_ring, slot_gloves_str, disable_warning = TRUE) var/obj/item/gloves = H.get_equipped_item(slot_gloves_str) @@ -62,7 +62,7 @@ /obj/item/clothing/gloves/dropped(var/mob/user) ..() - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(covering_ring) if(istype(H)) H.equip_to_slot_if_possible(covering_ring, slot_gloves_str, disable_warning = TRUE) diff --git a/code/modules/clothing/gloves/jewelry/rings/material.dm b/code/modules/clothing/gloves/jewelry/rings/material.dm index 2a9e7fbd115..7ce5cc82a09 100644 --- a/code/modules/clothing/gloves/jewelry/rings/material.dm +++ b/code/modules/clothing/gloves/jewelry/rings/material.dm @@ -22,7 +22,7 @@ /obj/item/clothing/gloves/ring/material/OnTopic(var/mob/user, var/list/href_list) if(href_list["examine"]) if(istype(user)) - var/mob/living/carbon/human/H = get_recursive_loc_of_type(/mob/living/carbon/human) + var/mob/living/human/H = get_recursive_loc_of_type(/mob/living/human) if(H.Adjacent(user)) user.examinate(src) return TOPIC_HANDLED diff --git a/code/modules/clothing/gloves/jewelry/rings/rings.dm b/code/modules/clothing/gloves/jewelry/rings/rings.dm index c1331acb08b..9f188b8e136 100644 --- a/code/modules/clothing/gloves/jewelry/rings/rings.dm +++ b/code/modules/clothing/gloves/jewelry/rings/rings.dm @@ -26,12 +26,12 @@ desc = "A strange ring with symbols carved on it in some arcane language." icon = 'icons/clothing/accessories/jewelry/rings/ring_magic.dmi' -/obj/item/clothing/gloves/ring/magic/equipped(var/mob/living/carbon/human/H, var/slot) +/obj/item/clothing/gloves/ring/magic/equipped(var/mob/living/human/H, var/slot) ..() if(istype(H) && slot == SLOT_HANDS) H.add_cloaking_source(src) -/obj/item/clothing/gloves/ring/magic/dropped(var/mob/living/carbon/human/H) +/obj/item/clothing/gloves/ring/magic/dropped(var/mob/living/human/H) if(!..()) return 0 @@ -57,7 +57,7 @@ reagents.maximum_volume = max(volume, reagents.maximum_volume) . = ..() -/obj/item/clothing/gloves/ring/reagent/equipped(var/mob/living/carbon/human/H) +/obj/item/clothing/gloves/ring/reagent/equipped(var/mob/living/human/H) ..() if(istype(H) && H.get_equipped_item(slot_gloves_str) == src) to_chat(H, SPAN_DANGER("You feel a prick as you slip on the ring.")) diff --git a/code/modules/clothing/head/fated_key.dm b/code/modules/clothing/head/fated_key.dm index ca70c143077..4c552a4d190 100644 --- a/code/modules/clothing/head/fated_key.dm +++ b/code/modules/clothing/head/fated_key.dm @@ -78,7 +78,7 @@ /obj/item/projectile/sanctionedaction/check_penetrate(var/atom/A) . = TRUE if(ishuman(A)) - var/mob/living/carbon/human/H = A + var/mob/living/human/H = A var/list/external_organs = H.get_external_organs() if(LAZYLEN(external_organs)) var/obj/item/organ/external/E = pick(external_organs) diff --git a/code/modules/clothing/masks/chewable.dm b/code/modules/clothing/masks/chewable.dm index 28e85f79b09..692f6e3fe4f 100644 --- a/code/modules/clothing/masks/chewable.dm +++ b/code/modules/clothing/masks/chewable.dm @@ -41,7 +41,7 @@ chewtime -= amount if(reagents && reagents.total_volume) if(ishuman(loc)) - var/mob/living/carbon/human/user = loc + var/mob/living/human/user = loc if (src == user.get_equipped_item(slot_wear_mask_str) && user.check_has_mouth()) reagents.trans_to_mob(user, REM, CHEM_INGEST, 0.2) add_trace_DNA(user) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 68a3de4be86..16887b73983 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -102,7 +102,7 @@ /obj/item/clothing/mask/ai name = "camera MIU" desc = "Allows for direct mental connection to accessible camera channels." - icon = 'icons/clothing/mask/ninja.dmi' + icon = 'icons/clothing/mask/camera_miu.dmi' icon_state = ICON_STATE_WORLD flags_inv = HIDEFACE body_parts_covered = SLOT_FACE|SLOT_EYES diff --git a/code/modules/clothing/masks/monitor.dm b/code/modules/clothing/masks/monitor.dm index 0cc94b7409b..9a06b7c888c 100644 --- a/code/modules/clothing/masks/monitor.dm +++ b/code/modules/clothing/masks/monitor.dm @@ -62,7 +62,7 @@ /obj/item/clothing/mask/monitor/equipped() ..() - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(istype(H) && H.get_equipped_item(slot_wear_mask_str) == src) canremove = 0 to_chat(H, SPAN_NOTICE("\The [src] connects to your display output.")) @@ -89,7 +89,7 @@ set category = "IC" set src in usr - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(!istype(H) || H != usr) return diff --git a/code/modules/clothing/masks/smokable.dm b/code/modules/clothing/masks/smokable.dm index 6abbda121bd..7c50a102516 100644 --- a/code/modules/clothing/masks/smokable.dm +++ b/code/modules/clothing/masks/smokable.dm @@ -60,7 +60,7 @@ if(reagents && reagents.total_volume) // check if it has any reagents at all var/smoke_loc = loc if(ishuman(loc)) - var/mob/living/carbon/human/user = loc + var/mob/living/human/user = loc smoke_loc = user.loc if ((src == user.get_equipped_item(slot_wear_mask_str) || manual) && user.check_has_mouth()) // if it's in the human/monkey mouth, transfer reagents to the mob reagents.trans_to_mob(user, smoke_amount * amount, CHEM_INHALE, 0.2) @@ -78,7 +78,7 @@ if(T) var/datum/gas_mixture/environment = T.return_air() if(ishuman(loc)) - var/mob/living/carbon/human/user = loc + var/mob/living/human/user = loc if (src == user.get_equipped_item(slot_wear_mask_str) && user.internal) environment = user.internal.return_air() if(environment.get_by_flag(XGM_GAS_OXIDIZER) < gas_consumption) diff --git a/code/modules/clothing/misc/dog_tags.dm b/code/modules/clothing/misc/dog_tags.dm index f45b1bb483e..d930f64749c 100644 --- a/code/modules/clothing/misc/dog_tags.dm +++ b/code/modules/clothing/misc/dog_tags.dm @@ -24,7 +24,7 @@ /obj/item/clothing/dog_tags/loadout_setup(mob/wearer, metadata) owner_name = wearer.real_name - var/mob/living/carbon/human/H = wearer + var/mob/living/human/H = wearer if(!istype(H)) return diff --git a/code/modules/clothing/neck/jewelry.dm b/code/modules/clothing/neck/jewelry.dm index 84eb9eb321d..9f30ace8ac8 100644 --- a/code/modules/clothing/neck/jewelry.dm +++ b/code/modules/clothing/neck/jewelry.dm @@ -3,10 +3,23 @@ desc = "A simple necklace." icon = 'icons/clothing/accessories/jewelry/necklace.dmi' material = /decl/material/solid/metal/silver + material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC + +/obj/item/clothing/neck/necklace/prayer_beads + name = "prayer beads" + desc = "A string of smooth, polished beads." + icon = 'icons/clothing/accessories/jewelry/prayer_beads.dmi' + material = /decl/material/solid/organic/wood/ebony + +/obj/item/clothing/neck/necklace/prayer_beads/gold + material = /decl/material/solid/metal/gold + +/obj/item/clothing/neck/necklace/prayer_beads/basalt + material = /decl/material/solid/stone/basalt /obj/item/clothing/neck/necklace/locket - name = "silver locket" - desc = "A silver locket that seems to have space for a photo within." + name = "locket" + desc = "A locket that seems to have space for a photo within." icon = 'icons/clothing/accessories/jewelry/locket.dmi' var/open var/obj/item/held diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 6771a84fda1..7badc14cffb 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -91,7 +91,7 @@ if(istype(M)) M.update_floating() if(covering_shoes) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/obj/item/shoes = H.get_equipped_item(slot_shoes_str) if(istype(H) && shoes != src) H.equip_to_slot_if_possible(covering_shoes, slot_shoes_str, disable_warning = TRUE) @@ -102,7 +102,7 @@ /obj/item/clothing/shoes/magboots/dropped(var/mob/user) ..() - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(covering_shoes) if(istype(H)) H.equip_to_slot_if_possible(covering_shoes, slot_shoes_str, disable_warning = TRUE) diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm index 1bd4a98b6ce..a7cb2233567 100644 --- a/code/modules/clothing/spacesuits/breaches.dm +++ b/code/modules/clothing/spacesuits/breaches.dm @@ -193,7 +193,7 @@ return if(ishuman(loc)) - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(H.get_equipped_item(slot_wear_suit_str) == src) to_chat(user, SPAN_WARNING("You cannot repair \the [src] while it is being worn.")) return @@ -211,7 +211,7 @@ else if(IS_WELDER(W)) if(ishuman(loc)) - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(H.get_equipped_item(slot_wear_suit_str) == src) to_chat(user, SPAN_WARNING("You cannot repair \the [src] while it is being worn.")) return @@ -239,7 +239,7 @@ if(!target_breach) to_chat(user, "There are no open breaches to seal with \the [W].") else - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(!istype(H)) return diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm index d574528f109..e359be5afd3 100644 --- a/code/modules/clothing/spacesuits/rig/modules/combat.dm +++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm @@ -139,7 +139,7 @@ if(!target) return 0 - var/mob/living/carbon/human/H = holder.wearer + var/mob/living/human/H = holder.wearer if(!charge_selected) to_chat(H, "You have not selected a grenade type.") @@ -340,8 +340,8 @@ activate_string = "Project Blade" deactivate_string = "Cancel Blade" - interface_name = "spider fang blade" - interface_desc = "A lethal energy projector that can shape a blade projected from the hand of the wearer or launch radioactive darts." + interface_name = "energy blade" + interface_desc = "A lethal energy projector that can shape a blade projected from the hand of the wearer." usable = 0 selectable = 1 @@ -350,12 +350,10 @@ active_power_cost = 0.5 KILOWATTS passive_power_cost = 0 - gun = /obj/item/gun/energy/crossbow/ninja/mounted - /obj/item/rig_module/mounted/energy_blade/Process() if(holder && holder.wearer) - if(!(locate(/obj/item/energy_blade/ninja) in holder.wearer)) + if(!(locate(/obj/item/energy_blade/projected) in holder.wearer)) deactivate() return 0 @@ -369,7 +367,7 @@ deactivate() return - var/obj/item/energy_blade/ninja/blade = new(M) + var/obj/item/energy_blade/projected/blade = new(M) blade.creator = M M.put_in_hands(blade) @@ -378,31 +376,31 @@ /obj/item/rig_module/mounted/energy_blade/deactivate() ..() - for(var/obj/item/energy_blade/ninja/blade in (holder?.wearer)) + for(var/obj/item/energy_blade/projected/blade in (holder?.wearer)) qdel(blade) /obj/item/rig_module/fabricator name = "matter fabricator" desc = "A self-contained microfactory system for hardsuit integration." - selectable = 1 - usable = 1 + selectable = TRUE + usable = TRUE use_power_cost = 5 KILOWATTS icon_state = "enet" engage_string = "Fabricate Star" - interface_name = "death blossom launcher" - interface_desc = "An integrated microfactory that produces poisoned throwing stars from thin air and electricity." + interface_name = "throwing star launcher" + interface_desc = "An integrated microfactory that produces throwing stars from thin air and electricity." - var/fabrication_type = /obj/item/star/ninja + var/fabrication_type = /obj/item/star var/fire_force = 30 var/fire_distance = 10 /obj/item/rig_module/fabricator/engage(atom/target) if(!..()) - return 0 + return FALSE var/mob/living/H = holder.wearer @@ -420,7 +418,7 @@ to_chat(H, SPAN_BLUE("You quickly fabricate \a [new_weapon].")) H.put_in_hands(new_weapon) - return 1 + return TRUE /obj/item/rig_module/fabricator/wf_sign name = "wet floor sign fabricator" diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm index d92a4c0e239..c263a126afd 100644 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm @@ -154,7 +154,7 @@ if(!..()) return 0 - var/mob/living/carbon/human/H = holder.wearer + var/mob/living/human/H = holder.wearer if(!target) if(ai_card) @@ -260,7 +260,7 @@ return 0 if(target) - var/mob/living/carbon/human/H = holder.wearer + var/mob/living/human/H = holder.wearer if(!accepts_item(target,H)) return 0 return 1 @@ -381,7 +381,7 @@ return 1 // Are we close enough? - var/mob/living/carbon/human/H = holder.wearer + var/mob/living/human/H = holder.wearer if(!target.Adjacent(H)) return 0 @@ -410,7 +410,7 @@ if(!interfaced_with) return ..() - var/mob/living/carbon/human/H + var/mob/living/human/H if(holder && holder.wearer) H = holder.wearer diff --git a/code/modules/clothing/spacesuits/rig/modules/ninja.dm b/code/modules/clothing/spacesuits/rig/modules/infiltration.dm similarity index 97% rename from code/modules/clothing/spacesuits/rig/modules/ninja.dm rename to code/modules/clothing/spacesuits/rig/modules/infiltration.dm index 91ba1424b49..916c58a3450 100644 --- a/code/modules/clothing/spacesuits/rig/modules/ninja.dm +++ b/code/modules/clothing/spacesuits/rig/modules/infiltration.dm @@ -44,7 +44,7 @@ if(!..()) return 0 - var/mob/living/carbon/human/H = holder.wearer + var/mob/living/human/H = holder.wearer if(H.add_cloaking_source(src)) anim(H, 'icons/effects/effects.dmi', "electricity",null,20,null) @@ -54,7 +54,7 @@ if(!..()) return 0 - var/mob/living/carbon/human/H = holder.wearer + var/mob/living/human/H = holder.wearer if(H.remove_cloaking_source(src)) anim(H,'icons/mob/mob.dmi',,"uncloak",,H.dir) @@ -92,7 +92,7 @@ /obj/item/rig_module/teleporter/engage(var/atom/target, var/notify_ai) - var/mob/living/carbon/human/H = holder.wearer + var/mob/living/human/H = holder.wearer if(!isturf(H.loc)) to_chat(H, "You cannot teleport out of your current location.") @@ -268,6 +268,3 @@ spawn(2) .() if(3) src.holder.set_light(1.5, 8.5, "#ff0a00") - -/obj/item/rig_module/grenade_launcher/ninja - suit_overlay = null diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm index 68ddca5e87d..9d5a0897ddd 100644 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm @@ -263,7 +263,7 @@ /obj/item/rig_module/proc/accepts_item(var/obj/item/input_device) return 0 -/mob/living/carbon/human/Stat() +/mob/living/human/Stat() . = ..() var/obj/item/rig/R = get_equipped_item(slot_back_str) diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index 543f3b638b6..19d799aa217 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -187,21 +187,6 @@ var/max_reagent_volume = 80 //Used when refilling. -/obj/item/rig_module/chem_dispenser/ninja - interface_desc = "Dispenses loaded chemicals directly into the wearer's bloodstream. This variant is made to be extremely light and flexible." - - //just over a syringe worth of each. Want more? Go refill. Gives the ninja another reason to have to show their face. - charges = list( - list("oxygen", "oxygel", /decl/material/liquid/oxy_meds, 20), - list("stabilizer", "stabilizer", /decl/material/liquid/stabilizer, 20), - list("antitoxins", "antitoxins", /decl/material/liquid/antitoxins, 20), - list("glucose", "glucose", /decl/material/liquid/nutriment/glucose, 80), - list("antirads", "antirads", /decl/material/liquid/antirads, 20), - list("regenerative", "regenerative", /decl/material/liquid/burn_meds, 20), - list("antibiotics", "antibiotics", /decl/material/liquid/antibiotics, 20), - list("painkillers", "painkillers", /decl/material/liquid/painkillers, 20) - ) - /obj/item/rig_module/chem_dispenser/accepts_item(var/obj/item/input_item, var/mob/living/user) if(!ATOM_IS_OPEN_CONTAINER(input_item)) @@ -236,7 +221,7 @@ if(!..()) return 0 - var/mob/living/carbon/human/H = holder.wearer + var/mob/living/human/H = holder.wearer if(!charge_selected) to_chat(H, SPAN_WARNING("You have not selected a chemical type.")) @@ -270,7 +255,7 @@ to_chat(target_mob, SPAN_DANGER("You feel a rushing in your veins as [chems_to_use] unit\s of [charge.display_name] [chems_to_use == 1 ? "is" : "are"] injected.")) target_mob.add_to_reagents(charge.product_type, chems_to_use) charge.charges -= chems_to_use - if(charge.charges < 0) + if(charge.charges < 0) charge.charges = 0 return TRUE @@ -552,7 +537,7 @@ if(!active) return passive_power_cost - var/mob/living/carbon/human/H = holder.wearer + var/mob/living/human/H = holder.wearer var/temp_adj = min(H.bodytemperature - thermostat, max_cooling) //Actually copies the original CU code diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 310289755ad..71bf19f0fb0 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -66,7 +66,7 @@ var/obj/item/rig_module/selected_module // Primary system (used with middle-click) var/obj/item/rig_module/vision/visor // Kinda shitty to have a var for a module, but saves time. var/obj/item/rig_module/voice/speech // As above. - var/mob/living/carbon/human/wearer // The person currently wearing the rig. + var/mob/living/human/wearer // The person currently wearing the rig. var/list/installed_modules = list() // Power consumption/use bookkeeping. // Rig status vars. @@ -82,7 +82,7 @@ var/malfunction_delay = 0 var/electrified = 0 var/locked_down = 0 - var/aimove_power_usage = 200 // Power usage per tile traveled when suit is moved by AI in IIS. In joules. + var/aimove_power_usage = 200 // Power usage per tile travelled when suit is moved by AI in IIS. In joules. var/seal_delay = SEAL_DELAY var/sealing // Keeps track of seal status independantly of canremove. @@ -452,7 +452,7 @@ var/fail_msg if(!user_is_ai) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(istype(H) && H.get_equipped_item(slot_back_str) != src) fail_msg = "You must be wearing \the [src] to do this." if(sealing) @@ -597,7 +597,7 @@ return list() return ..() -/obj/item/rig/proc/check_suit_access(var/mob/living/carbon/human/user) +/obj/item/rig/proc/check_suit_access(var/mob/living/human/user) if(!security_check_enabled) return 1 @@ -668,7 +668,7 @@ to_chat(module.integrated_ai, "[message]") . = 1 -/obj/item/rig/equipped(mob/living/carbon/human/M) +/obj/item/rig/equipped(mob/living/human/M) ..() if(seal_delay > 0 && istype(M) && M.get_equipped_item(slot_back_str) == src) @@ -727,7 +727,7 @@ if(use_obj) if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY) - var/mob/living/carbon/human/holder + var/mob/living/human/holder if(use_obj) holder = use_obj.loc @@ -756,7 +756,7 @@ /obj/item/rig/proc/deploy(mob/M,var/sealed) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(!H || !istype(H)) return @@ -864,7 +864,7 @@ to_chat(wearer, "The [source] has damaged your [dam_module.interface_name]!") dam_module.deactivate() -/obj/item/rig/proc/malfunction_check(var/mob/living/carbon/human/user) +/obj/item/rig/proc/malfunction_check(var/mob/living/human/user) if(malfunction_delay) if(offline) to_chat(user, "The suit is completely unresponsive.") diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index 9b4848c9726..79954b69547 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -72,7 +72,7 @@ else if(istype(W,/obj/item/rig_module)) if(ishuman(src.loc)) - var/mob/living/carbon/human/H = src.loc + var/mob/living/human/H = src.loc if(H.get_equipped_item(slot_back_str) == src) to_chat(user, "You can't install a hardsuit module while the suit is being worn.") return 1 @@ -130,7 +130,7 @@ return if(ishuman(src.loc) && to_remove != "cell" && to_remove != "tank") - var/mob/living/carbon/human/H = src.loc + var/mob/living/human/H = src.loc if(H.get_equipped_item(slot_back_str) == src) to_chat(user, "You can't remove an installed device while the hardsuit is being worn.") return diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm index 3f325318548..a5a4899da01 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm @@ -4,7 +4,7 @@ /mob/proc/check_rig_status(check_offline) return 0 -/mob/living/carbon/human/check_rig_status(check_offline) +/mob/living/human/check_rig_status(check_offline) var/obj/item/rig/rig = get_rig() if(!rig || rig.canremove) return 0 //not wearing a rig control unit or it's offline or unsealed @@ -109,12 +109,12 @@ ..() // Some space suits are equipped with reactive membranes that support broken limbs -/obj/item/clothing/suit/space/rig/proc/can_support(var/mob/living/carbon/human/user) +/obj/item/clothing/suit/space/rig/proc/can_support(var/mob/living/human/user) if(user.get_equipped_item(slot_wear_suit_str) != src) return 0 //not wearing the suit return user.check_rig_status(1) -/obj/item/clothing/suit/space/rig/check_limb_support(var/mob/living/carbon/human/user) +/obj/item/clothing/suit/space/rig/check_limb_support(var/mob/living/human/user) // If this isn't set, then we don't need to care. if(!istype(user) || isnull(supporting_limbs)) @@ -132,7 +132,7 @@ to_chat(user, "\The [src] stops supporting your [E.name].") supporting_limbs.Cut() -/obj/item/clothing/suit/space/rig/proc/handle_fracture(var/mob/living/carbon/human/user, var/obj/item/organ/external/E) +/obj/item/clothing/suit/space/rig/proc/handle_fracture(var/mob/living/human/user, var/obj/item/organ/external/E) if(!istype(user) || isnull(supporting_limbs) || !can_support(user)) return if((E.body_part & body_parts_covered) && E.is_broken() && E.apply_splint(src)) @@ -145,7 +145,7 @@ if(!A || !proximity) return 0 - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(!istype(H)) return 0 diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index c7efcad6a6d..61612dc84e6 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -81,91 +81,6 @@ item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_NOCUFFS icon = 'icons/clothing/rigs/gloves/gloves_hacker.dmi' -/obj/item/rig/light/ninja - name = "ominous suit control module" - desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for assassins." - suit_type = "ominous" - icon = 'icons/clothing/rigs/rig_ninja.dmi' - armor = list( - ARMOR_MELEE = ARMOR_MELEE_KNIVES, - ARMOR_BULLET = ARMOR_BALLISTIC_PISTOL, - ARMOR_LASER = ARMOR_LASER_HANDGUNS, - ARMOR_ENERGY = ARMOR_ENERGY_MINOR, - ARMOR_BOMB = ARMOR_BOMB_PADDED, - ARMOR_BIO = ARMOR_BIO_SHIELDED - ) - siemens_coefficient = 0.2 //heavy hardsuit level shock protection - emp_protection = 40 //change this to 30 if too high. - online_slowdown = 0 - aimove_power_usage = 50 - - helmet = /obj/item/clothing/head/helmet/space/rig/light/ninja - boots = /obj/item/clothing/shoes/magboots/rig/light/ninja - chest = /obj/item/clothing/suit/space/rig/light/ninja - gloves = /obj/item/clothing/gloves/rig/light/ninja - cell = /obj/item/cell/hyper - - req_access = list(access_ninja) - - initial_modules = list( - /obj/item/rig_module/teleporter, - /obj/item/rig_module/stealth_field, - /obj/item/rig_module/mounted/energy_blade, - /obj/item/rig_module/vision, - /obj/item/rig_module/voice, - /obj/item/rig_module/fabricator/energy_net, - /obj/item/rig_module/chem_dispenser/combat, - /obj/item/rig_module/grenade_launcher/ninja, - /obj/item/rig_module/ai_container, - /obj/item/rig_module/power_sink, - /obj/item/rig_module/datajack, - /obj/item/rig_module/self_destruct, - /obj/item/rig_module/cooling_unit - ) - -/obj/item/rig/light/ninja/verb/rename_suit() - set name = "Name Ninja Suit" - set desc = "Rename your black voidsuit." - set category = "Object" - var/mob/M = usr - if(!M.mind) return 0 - if(M.incapacitated()) return 0 - var/input = sanitize_safe(input("What do you want to name your suit?", "Rename suit"), MAX_NAME_LEN) - if(src && input && !M.incapacitated() && in_range(M,src)) - if(!findtext(input, "the", 1, 4)) - input = "\improper [input]" - SetName(input) - to_chat(M, "Suit naming succesful!") - verbs -= /obj/item/rig/light/ninja/verb/rename_suit - return 1 - - -/obj/item/rig/light/ninja/verb/rewrite_suit_desc() - set name = "Describe Ninja suit" - set desc = "Give your voidsuit a custom description." - set category = "Object" - var/mob/M = usr - if(!M.mind) return 0 - if(M.incapacitated()) return 0 - var/input = sanitize_safe(input("Please describe your voidsuit in 128 letters or less.", "write description"), MAX_DESC_LEN) - if(src && input && !M.incapacitated() && in_range(M,src)) - desc = input - to_chat(M, "Suit description succesful!") - verbs -= /obj/item/rig/light/ninja/verb/rename_suit - return 1 - -/obj/item/clothing/gloves/rig/light/ninja - name = "insulated gloves" - siemens_coefficient = 0 - item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_NOCUFFS - icon = 'icons/clothing/rigs/gloves/gloves_ninja.dmi' -/obj/item/clothing/suit/space/rig/light/ninja - icon = 'icons/clothing/rigs/chests/chest_ninja.dmi' -/obj/item/clothing/shoes/magboots/rig/light/ninja - icon = 'icons/clothing/rigs/boots/boots_ninja.dmi' -/obj/item/clothing/head/helmet/space/rig/light/ninja - icon = 'icons/clothing/rigs/helmets/helmet_ninja.dmi' - /obj/item/rig/light/stealth name = "stealth suit control module" suit_type = "stealth" diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index 7cf840cf80c..4658e3ec3b3 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -101,7 +101,7 @@ else if(##equipment_var) {\ /obj/item/clothing/suit/space/void/equipped(mob/M) ..() - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(!istype(H)) return @@ -132,7 +132,7 @@ else if(##equipment_var) {\ /obj/item/clothing/suit/space/void/dropped() ..() - var/mob/living/carbon/human/H + var/mob/living/human/H if(helmet) helmet.canremove = 1 @@ -164,7 +164,7 @@ else if(##equipment_var) {\ to_chat(usr, "There is no helmet installed.") return - var/mob/living/carbon/human/H = usr + var/mob/living/human/H = usr if(!istype(H)) return if(H.incapacitated()) return @@ -199,7 +199,7 @@ else if(##equipment_var) {\ to_chat(usr, "There is no tank inserted.") return - var/mob/living/carbon/human/H = usr + var/mob/living/human/H = usr if(!istype(H)) return if(H.incapacitated()) return diff --git a/code/modules/clothing/suits/fated_mantle.dm b/code/modules/clothing/suits/fated_mantle.dm deleted file mode 100644 index 4086cc6df32..00000000000 --- a/code/modules/clothing/suits/fated_mantle.dm +++ /dev/null @@ -1,4 +0,0 @@ -/obj/item/clothing/suit/fated - name = "mantle" - desc = "A heavy, gold-chained mantle." - icon = 'icons/clothing/suits/fated_mantle.dmi' diff --git a/code/modules/clothing/suits/mantle.dm b/code/modules/clothing/suits/mantle.dm new file mode 100644 index 00000000000..9897f9f8254 --- /dev/null +++ b/code/modules/clothing/suits/mantle.dm @@ -0,0 +1,8 @@ +/obj/item/clothing/suit/mantle + name = "mantle" + desc = "A light garment worn draped over and around the shoulders." + icon = 'icons/clothing/suits/mantle.dmi' + +/obj/item/clothing/suit/mantle/fated + desc = "A heavy, gold-chained mantle." + icon = 'icons/clothing/suits/fated_mantle.dmi' diff --git a/code/modules/clothing/underwear/base.dm b/code/modules/clothing/underwear/base.dm index a4878aaebf7..4fd8c96abc3 100644 --- a/code/modules/clothing/underwear/base.dm +++ b/code/modules/clothing/underwear/base.dm @@ -15,7 +15,7 @@ DelayedEquipUnderwear(user, over) return TRUE -/obj/item/underwear/proc/CanEquipUnderwear(var/mob/user, var/mob/living/carbon/human/H) +/obj/item/underwear/proc/CanEquipUnderwear(var/mob/user, var/mob/living/human/H) if(!CanAdjustUnderwear(user, H, "put on")) return FALSE if(!(H.species && (H.get_bodytype()?.appearance_flags & HAS_UNDERWEAR))) @@ -26,7 +26,7 @@ return FALSE return TRUE -/obj/item/underwear/proc/CanRemoveUnderwear(var/mob/user, var/mob/living/carbon/human/H) +/obj/item/underwear/proc/CanRemoveUnderwear(var/mob/user, var/mob/living/human/H) if(!CanAdjustUnderwear(user, H, "remove")) return FALSE if(!(src in H.worn_underwear)) @@ -34,7 +34,7 @@ return FALSE return TRUE -/obj/item/underwear/proc/CanAdjustUnderwear(var/mob/user, var/mob/living/carbon/human/H, var/adjustment_verb) +/obj/item/underwear/proc/CanAdjustUnderwear(var/mob/user, var/mob/living/human/H, var/adjustment_verb) if(!istype(H)) return FALSE if(user != H && !CanPhysicallyInteractWith(user, H)) @@ -50,7 +50,7 @@ return TRUE -/obj/item/underwear/proc/DelayedRemoveUnderwear(var/mob/user, var/mob/living/carbon/human/H) +/obj/item/underwear/proc/DelayedRemoveUnderwear(var/mob/user, var/mob/living/human/H) if(!CanRemoveUnderwear(user, H)) return if(user != H) @@ -62,7 +62,7 @@ user.visible_message("\The [user] has removed \the [src] from \the [H].", "You have removed \the [src] from \the [H].") admin_attack_log(user, H, "Removed \a [src]", "Had \a [src] removed.", "removed \a [src] from") -/obj/item/underwear/proc/DelayedEquipUnderwear(var/mob/user, var/mob/living/carbon/human/H) +/obj/item/underwear/proc/DelayedEquipUnderwear(var/mob/user, var/mob/living/human/H) if(!CanEquipUnderwear(user, H)) return if(user != H) @@ -74,14 +74,14 @@ user.visible_message("\The [user] has put \the [src] on \the [H].", "You have put \the [src] on \the [H].") admin_attack_log(user, H, "Put on \a [src]", "Had \a [src] put on.", "put on \a [src] on") -/obj/item/underwear/proc/EquipUnderwear(var/mob/user, var/mob/living/carbon/human/H) +/obj/item/underwear/proc/EquipUnderwear(var/mob/user, var/mob/living/human/H) if(!CanEquipUnderwear(user, H)) return FALSE if(!user.try_unequip(src)) return FALSE return ForceEquipUnderwear(H) -/obj/item/underwear/proc/ForceEquipUnderwear(var/mob/living/carbon/human/H, var/update_icons = TRUE) +/obj/item/underwear/proc/ForceEquipUnderwear(var/mob/living/human/H, var/update_icons = TRUE) // No matter how forceful, we still don't allow multiples of the same underwear type if(is_path_in_list(type, H.worn_underwear)) return FALSE @@ -93,7 +93,7 @@ return TRUE -/obj/item/underwear/proc/RemoveUnderwear(var/mob/user, var/mob/living/carbon/human/H) +/obj/item/underwear/proc/RemoveUnderwear(var/mob/user, var/mob/living/human/H) if(!CanRemoveUnderwear(user, H)) return FALSE diff --git a/code/modules/codex/codex_mob.dm b/code/modules/codex/codex_mob.dm index b7b685f1212..81abaeb2572 100644 --- a/code/modules/codex/codex_mob.dm +++ b/code/modules/codex/codex_mob.dm @@ -10,8 +10,8 @@ /mob/observer/can_use_codex() return TRUE -/mob/living/carbon/human/can_use_codex() +/mob/living/human/can_use_codex() return TRUE //has_implant(/obj/item/implant/codex, functioning = TRUE) -/mob/living/carbon/human/get_codex_value() +/mob/living/human/get_codex_value() return "[lowertext(species.name)] (species)" \ No newline at end of file diff --git a/code/modules/crafting/metalwork/metalwork_items.dm b/code/modules/crafting/metalwork/metalwork_items.dm index 29714b5ed07..fe8fc4117eb 100644 --- a/code/modules/crafting/metalwork/metalwork_items.dm +++ b/code/modules/crafting/metalwork/metalwork_items.dm @@ -55,8 +55,8 @@ return ..() /obj/item/chems/crucible/on_reagent_change() - . = ..() - queue_icon_update() + if((. = ..())) + queue_icon_update() /obj/item/chems/crucible/on_update_icon() . = ..() diff --git a/code/modules/crafting/pottery/pottery_items.dm b/code/modules/crafting/pottery/pottery_items.dm index c9ded4c8e8f..e8138fcec56 100644 --- a/code/modules/crafting/pottery/pottery_items.dm +++ b/code/modules/crafting/pottery/pottery_items.dm @@ -65,8 +65,8 @@ volume = 60 /obj/item/chems/glass/pottery/bowl/on_reagent_change() - . = ..() - update_icon() + if((. = ..())) + update_icon() /obj/item/chems/glass/pottery/bowl/on_update_icon() . = ..() diff --git a/code/modules/crafting/stack_recipes/recipes_logs.dm b/code/modules/crafting/stack_recipes/recipes_logs.dm index dd936032074..8b6a961f96a 100644 --- a/code/modules/crafting/stack_recipes/recipes_logs.dm +++ b/code/modules/crafting/stack_recipes/recipes_logs.dm @@ -8,3 +8,6 @@ craft_stack_types = /obj/item/stack/material/log forbidden_craft_stack_types = /obj/item/stack/material/ore difficulty = MAT_VALUE_HARD_DIY +/decl/stack_recipe/logs/wall_frame + result_type = /obj/structure/wall_frame/log + difficulty = MAT_VALUE_HARD_DIY \ No newline at end of file diff --git a/code/modules/detectivework/evidence/fibers.dm b/code/modules/detectivework/evidence/fibers.dm index e3a04c03e48..ecda7fdeece 100644 --- a/code/modules/detectivework/evidence/fibers.dm +++ b/code/modules/detectivework/evidence/fibers.dm @@ -9,7 +9,7 @@ if(istype(AM, /obj/item/clothing/)) LAZYADD(sources, AM) else if(ishuman(AM)) - var/mob/living/carbon/human/M = AM + var/mob/living/human/M = AM var/covered = 0 for(var/slot in list(slot_wear_suit_str, slot_gloves_str, slot_w_uniform_str)) var/obj/item/clothing/C = M.get_equipped_item(slot) diff --git a/code/modules/detectivework/evidence/fingerprints.dm b/code/modules/detectivework/evidence/fingerprints.dm index 60fd2883c10..290bccd19c4 100644 --- a/code/modules/detectivework/evidence/fingerprints.dm +++ b/code/modules/detectivework/evidence/fingerprints.dm @@ -87,6 +87,13 @@ /mob/proc/get_full_print(ignore_blockers) return null +/mob/proc/set_fingerprint(value) + return + +/mob/living/set_fingerprint(value) + for(var/obj/item/organ/external/E in get_external_organs()) + E.set_fingerprint(value) + /mob/living/get_full_print(var/ignore_blockers = FALSE) if(!ignore_blockers) var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(src, get_active_held_item_slot()) @@ -94,7 +101,7 @@ return E.get_fingerprint() return fingerprint -/mob/living/carbon/human/get_full_print(var/ignore_blockers = FALSE) - if (!ignore_blockers && (mFingerprints in mutations)) +/mob/living/human/get_full_print(var/ignore_blockers = FALSE) + if (!ignore_blockers && has_genetic_condition(GENE_COND_NO_FINGERPRINTS)) return null return ..() diff --git a/code/modules/detectivework/evidence/trace_dna.dm b/code/modules/detectivework/evidence/trace_dna.dm index 9b767980e2e..26fc4634e58 100644 --- a/code/modules/detectivework/evidence/trace_dna.dm +++ b/code/modules/detectivework/evidence/trace_dna.dm @@ -2,7 +2,7 @@ name = "trace DNA" spot_skill = null -/datum/forensics/trace_dna/add_from_atom(mob/living/carbon/human/M) +/datum/forensics/trace_dna/add_from_atom(mob/living/human/M) if(!istype(M)) return if(M.isSynthetic()) diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm index 08335074135..eb2d5eb8f53 100644 --- a/code/modules/detectivework/forensics.dm +++ b/code/modules/detectivework/forensics.dm @@ -11,7 +11,7 @@ if(!fingerprintshidden) fingerprintshidden = list() if (ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if (H.get_equipped_item(slot_gloves_str)) src.fingerprintshidden += "\[[time_stamp()]\] (Wearing gloves). Real name: [H.real_name], Key: [H.key]" return 0 @@ -56,11 +56,7 @@ other_forensics.add_data(T, F.data) /obj/item/proc/add_trace_DNA(mob/living/M) - if(!istype(M)) - return - if(M.isSynthetic()) - return - if(istype(M.dna)) + if(istype(M) && M.has_genetic_information()) var/datum/extension/forensic_evidence/forensics = get_or_create_extension(src, /datum/extension/forensic_evidence) forensics.add_from_atom(/datum/forensics/trace_dna, M) diff --git a/code/modules/detectivework/tools/sample_kits/fingerprinting.dm b/code/modules/detectivework/tools/sample_kits/fingerprinting.dm index 8523db974a8..5331c224eaf 100644 --- a/code/modules/detectivework/tools/sample_kits/fingerprinting.dm +++ b/code/modules/detectivework/tools/sample_kits/fingerprinting.dm @@ -54,7 +54,7 @@ SetName("[initial(name)] (\the [M])") update_icon() -/obj/item/forensics/sample/print/proc/can_take_print_from(mob/living/carbon/human/H, user) +/obj/item/forensics/sample/print/proc/can_take_print_from(mob/living/human/H, user) if(LAZYLEN(evidence)) return @@ -76,7 +76,7 @@ if(!ishuman(target)) return ..() - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target if(!can_take_print_from(H, user)) return 1 diff --git a/code/modules/detectivework/tools/sample_kits/swabs.dm b/code/modules/detectivework/tools/sample_kits/swabs.dm index a5ddf53b08e..be2cc6d32b0 100644 --- a/code/modules/detectivework/tools/sample_kits/swabs.dm +++ b/code/modules/detectivework/tools/sample_kits/swabs.dm @@ -21,7 +21,7 @@ if(!ishuman(target)) return ..() - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/time_to_take = H.a_intent == I_HELP ? 1 SECOND : 3 SECONDS user.visible_message(SPAN_NOTICE("\The [user] starts swabbing a sample from \the [H].")) if(!do_mob(user, H, time_to_take)) diff --git a/code/modules/economy/cael/ATM.dm b/code/modules/economy/cael/ATM.dm index 8a4abcd5bd1..deac2241163 100644 --- a/code/modules/economy/cael/ATM.dm +++ b/code/modules/economy/cael/ATM.dm @@ -441,14 +441,14 @@ interact(usr) -/obj/machinery/atm/proc/scan_user(mob/living/carbon/human/human_user) +/obj/machinery/atm/proc/scan_user(mob/living/human/human_user) if(!authenticated_account) var/obj/item/card/id/I = human_user.GetIdCard() if(istype(I)) return I // put the currently held id on the ground or in the hand of the user -/obj/machinery/atm/proc/release_held_id(mob/living/carbon/human/human_user) +/obj/machinery/atm/proc/release_held_id(mob/living/human/human_user) if(!held_card) return diff --git a/code/modules/emotes/definitions/audible_snap.dm b/code/modules/emotes/definitions/audible_snap.dm index 8b08fdd78d5..428f93d1879 100644 --- a/code/modules/emotes/definitions/audible_snap.dm +++ b/code/modules/emotes/definitions/audible_snap.dm @@ -8,7 +8,7 @@ /decl/emote/audible/snap/proc/can_snap(var/atom/user) if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user for(var/limb in list(BP_L_HAND, BP_R_HAND)) var/obj/item/organ/external/L = H.get_organ(limb) if(istype(L) && L.is_usable() && !L.splinted) diff --git a/code/modules/emotes/definitions/tail.dm b/code/modules/emotes/definitions/tail.dm index e4a5c1edc3e..720922104c5 100644 --- a/code/modules/emotes/definitions/tail.dm +++ b/code/modules/emotes/definitions/tail.dm @@ -9,7 +9,7 @@ key = "swish" /decl/emote/visible/tail/swish/do_emote(mob/living/user) - var/mob/living/carbon/human/human_user = user + var/mob/living/human/human_user = user if(istype(human_user)) human_user.animate_tail_once() return TRUE @@ -18,7 +18,7 @@ key = "wag" /decl/emote/visible/tail/wag/do_emote(mob/living/user) - var/mob/living/carbon/human/human_user = user + var/mob/living/human/human_user = user if(istype(human_user)) human_user.animate_tail_start() return TRUE @@ -27,7 +27,7 @@ key = "sway" /decl/emote/visible/tail/sway/do_emote(mob/living/user) - var/mob/living/carbon/human/human_user = user + var/mob/living/human/human_user = user if(istype(human_user)) human_user.animate_tail_start() return TRUE @@ -36,7 +36,7 @@ key = "qwag" /decl/emote/visible/tail/qwag/do_emote(mob/living/user) - var/mob/living/carbon/human/human_user = user + var/mob/living/human/human_user = user if(istype(human_user)) human_user.animate_tail_fast() return TRUE @@ -45,7 +45,7 @@ key = "fastsway" /decl/emote/visible/tail/fastsway/do_emote(mob/living/user) - var/mob/living/carbon/human/human_user = user + var/mob/living/human/human_user = user if(istype(human_user)) human_user.animate_tail_fast() return TRUE @@ -54,7 +54,7 @@ key = "swag" /decl/emote/visible/tail/swag/do_emote(mob/living/user) - var/mob/living/carbon/human/human_user = user + var/mob/living/human/human_user = user if(istype(human_user)) human_user.animate_tail_stop() return TRUE @@ -63,7 +63,7 @@ key = "stopsway" /decl/emote/visible/tail/stopsway/do_emote(mob/living/user) - var/mob/living/carbon/human/human_user = user + var/mob/living/human/human_user = user if(istype(human_user)) human_user.animate_tail_stop() return TRUE diff --git a/code/modules/emotes/definitions/visible.dm b/code/modules/emotes/definitions/visible.dm index c4c2f76ae2c..414327646f5 100644 --- a/code/modules/emotes/definitions/visible.dm +++ b/code/modules/emotes/definitions/visible.dm @@ -362,7 +362,7 @@ . = ..() && user.check_has_mouth() && !user.isSynthetic() /decl/emote/visible/vomit/do_emote(var/atom/user, var/extra_params) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(istype(H)) H.vomit(deliberate = TRUE) return TRUE diff --git a/code/modules/events/ailments.dm b/code/modules/events/ailments.dm index 4b862a9be19..a1d6fc894e8 100644 --- a/code/modules/events/ailments.dm +++ b/code/modules/events/ailments.dm @@ -1,6 +1,6 @@ /datum/event/ailments/start() var/list/candidates = list() - for(var/mob/living/carbon/human/H in global.living_mob_list_) + for(var/mob/living/human/H in global.living_mob_list_) if(H.client && !length(H.stasis_sources)) candidates += H if(!length(candidates)) @@ -8,7 +8,7 @@ candidates = shuffle(candidates) var/create_ailments = min(length(candidates), rand(1,3)) for(var/i = 1 to length(candidates)) - var/mob/living/carbon/human/H = candidates[i] + var/mob/living/human/H = candidates[i] var/list/organs = shuffle(H.get_organs()) for(var/ii = 1 to length(organs)) var/obj/item/organ/O = organs[ii] diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index 33914e601f4..ebeef2b276a 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -120,7 +120,7 @@ if(prob((0.2 * severity) - 0.2)) T.set_broken() - for(var/mob/living/carbon/human/H in T.area) + for(var/mob/living/human/H in T.area) to_chat(H, SPAN_WARNING("You feel the hairs on the back of your neck standing up!")) if(prob(25)) if(H.eyecheck() == FLASH_PROTECTION_NONE) @@ -158,7 +158,7 @@ S.adjust_speed(ax, ay) last_bounce = world.time + (bounce_delay / severity) - for(var/mob/living/carbon/human/H in global.living_mob_list_) //Affect mobs, skip synthetics. + for(var/mob/living/human/H in global.living_mob_list_) //Affect mobs, skip synthetics. if(!(H.z in affecting_z) || isnull(H) || QDELETED(H)) continue to_chat(H, SPAN_WARNING("You're shaken about as the storm disrupts the ship's course!")) diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index 2d9a036fd19..9916487bd32 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -134,7 +134,7 @@ /datum/event/ionstorm/proc/get_random_humanoid_player_name(var/default_if_none) - for (var/mob/living/carbon/human/player in global.player_list) + for (var/mob/living/human/player in global.player_list) if(!player.mind || player_is_antag(player.mind, only_offstation_roles = 1) || !player.is_client_active(5)) continue players += player.real_name diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 44f1ca326c8..8019d778352 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -45,21 +45,20 @@ for(var/z in affecting_z) SSradiation.z_radiate(locate(1, 1, z), radiation_level, 1) - for(var/mob/living/target in global.living_mob_list_) - var/area/A = get_area(target) + for(var/mob/living/M in global.living_mob_list_) + var/area/A = get_area(M) if(!A) continue if(A.area_flags & AREA_FLAG_RAD_SHIELDED) continue - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(prob(5 * (1 - H.get_blocked_ratio(null, IRRADIATE, damage_flags = DAM_DISPERSED, armor_pen = radiation_level)))) - if (prob(75)) - randmutb(H) // Applies bad mutation - domutcheck(H,null,MUTCHK_FORCED) - else - randmutg(H) // Applies good mutation - domutcheck(H,null,MUTCHK_FORCED) + if(!M.can_have_genetic_conditions()) + continue + if(prob(5 * (1 - M.get_blocked_ratio(null, IRRADIATE, damage_flags = DAM_DISPERSED, armor_pen = radiation_level)))) + if(prob(75)) + M.add_genetic_condition(pick(decls_repository.get_decls_of_type(/decl/genetic_condition/disability))) + else + M.add_genetic_condition(pick(decls_repository.get_decls_of_type(/decl/genetic_condition/superpower))) + /datum/event/radiation_storm/end() global.using_map.revoke_maint_all_access(1) diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm index 472ea942f53..580d8c0a21a 100644 --- a/code/modules/events/spontaneous_appendicitis.dm +++ b/code/modules/events/spontaneous_appendicitis.dm @@ -1,5 +1,5 @@ /datum/event/spontaneous_appendicitis/start() - for(var/mob/living/carbon/human/H in shuffle(global.living_mob_list_)) + for(var/mob/living/human/H in shuffle(global.living_mob_list_)) if(H.client && H.stat != DEAD) var/obj/item/organ/internal/appendix/A = H.get_organ(BP_APPENDIX, /obj/item/organ/internal/appendix) if(!istype(A) || (A && A.inflamed)) diff --git a/code/modules/fabrication/designs/textile/gimmick.dm b/code/modules/fabrication/designs/textile/gimmick.dm index 1f785a0f382..97f4344e531 100644 --- a/code/modules/fabrication/designs/textile/gimmick.dm +++ b/code/modules/fabrication/designs/textile/gimmick.dm @@ -10,7 +10,7 @@ path = /obj/item/clothing/suit/redtag /datum/fabricator_recipe/textiles/gimmick/mantle - path = /obj/item/clothing/suit/fated + path = /obj/item/clothing/suit/mantle/fated /datum/fabricator_recipe/textiles/gimmick/syndicatefake path = /obj/item/clothing/suit/syndicatefake @@ -111,9 +111,6 @@ /datum/fabricator_recipe/textiles/gimmick/capjacket path = /obj/item/clothing/suit/jacket/captain -/datum/fabricator_recipe/textiles/gimmick/robe - path = /obj/item/clothing/suit/robe - /datum/fabricator_recipe/textiles/gimmick/xeno path = /obj/item/clothing/head/xeno/scarf diff --git a/code/modules/fabrication/designs/textile/overwear.dm b/code/modules/fabrication/designs/textile/overwear.dm index 3d6c77b5e43..52218db5138 100644 --- a/code/modules/fabrication/designs/textile/overwear.dm +++ b/code/modules/fabrication/designs/textile/overwear.dm @@ -76,4 +76,7 @@ path = /obj/item/clothing/suit/poncho/engineering /datum/fabricator_recipe/textiles/overwear/poncho9 - path = /obj/item/clothing/suit/poncho/cargo \ No newline at end of file + path = /obj/item/clothing/suit/poncho/cargo + +/datum/fabricator_recipe/textiles/overwear/mantle + path = /obj/item/clothing/suit/mantle diff --git a/code/modules/fabrication/fabricator_bioprinter.dm b/code/modules/fabrication/fabricator_bioprinter.dm index 47c64a567f8..f885dad3c4a 100644 --- a/code/modules/fabrication/fabricator_bioprinter.dm +++ b/code/modules/fabrication/fabricator_bioprinter.dm @@ -9,7 +9,7 @@ base_type = /obj/machinery/fabricator/bioprinter fabricator_class = FABRICATOR_CLASS_MEAT ignore_input_contents_length = TRUE // mostly eats organs, let people quickly dump a torso in there without doing surgery. - var/datum/dna/loaded_dna //DNA for biological organs + var/datum/mob_snapshot/loaded_dna //DNA for biological organs /obj/machinery/fabricator/bioprinter/can_ingest(var/obj/item/thing) . = istype(thing, /obj/item/organ) || istype(thing, /obj/item/chems/food/butchery) || ..() @@ -29,10 +29,10 @@ /obj/machinery/fabricator/bioprinter/do_build(datum/fabricator_build_order/order) . = ..() //Fetch params as they were when the order was passed - var/datum/dna/D = order.get_data("dna") + var/datum/mob_snapshot/D = order.get_data("dna") for(var/obj/item/organ/O in .) if(D) - O.set_dna(D) + O.copy_from_mob_snapshot(D) O.status |= ORGAN_CUT_AWAY /obj/machinery/fabricator/bioprinter/attackby(obj/item/W, mob/user) @@ -42,14 +42,15 @@ var/sample = REAGENT_DATA(S.reagents, /decl/material/liquid/blood) if(islist(sample)) var/weakref/R = sample["donor"] - var/mob/living/carbon/human/H = R.resolve() - if(H && istype(H) && H.species && H.dna) - loaded_dna = H.dna.Clone() - to_chat(user, SPAN_INFO("You inject the blood sample into \the [src].")) - S.remove_any_reagents(BIOPRINTER_BLOOD_SAMPLE_SIZE) - //Tell nano to do its job - SSnano.update_uis(src) - return TRUE + var/mob/living/human/H = R.resolve() + if(H && istype(H) && H.species) + loaded_dna = H.get_mob_snapshot() + if(loaded_dna) + to_chat(user, SPAN_INFO("You inject the blood sample into \the [src].")) + S.remove_any_reagents(BIOPRINTER_BLOOD_SAMPLE_SIZE) + //Tell nano to do its job + SSnano.update_uis(src) + return TRUE to_chat(user, SPAN_WARNING("\The [src] displays an error: no viable blood sample could be obtained from \the [W].")) return TRUE . = ..() @@ -69,8 +70,8 @@ return list( "real_name" = loaded_dna.real_name, "UE" = loaded_dna.unique_enzymes, - "species" = loaded_dna.species, - "btype" = loaded_dna.b_type, + "species" = loaded_dna.root_species.name, + "btype" = loaded_dna.blood_type, ) /obj/machinery/fabricator/bioprinter/ui_draw_config(mob/user, ui_key) diff --git a/code/modules/food/cooking/cooking_vessels/_cooking_vessel.dm b/code/modules/food/cooking/cooking_vessels/_cooking_vessel.dm index 3e27c4b4141..7acab663068 100644 --- a/code/modules/food/cooking/cooking_vessels/_cooking_vessel.dm +++ b/code/modules/food/cooking/cooking_vessels/_cooking_vessel.dm @@ -89,7 +89,8 @@ update_icon() /obj/item/chems/cooking_vessel/on_reagent_change() - . = ..() + if(!(. = ..())) + return started_cooking = null if(!is_processing) START_PROCESSING(SSobj, src) diff --git a/code/modules/food/plates/plate_tray.dm b/code/modules/food/plates/plate_tray.dm index 3581fb55ba0..c2b507a3296 100644 --- a/code/modules/food/plates/plate_tray.dm +++ b/code/modules/food/plates/plate_tray.dm @@ -39,7 +39,7 @@ . = ..() /obj/item/plate/tray/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) // There is a better way to do this but I'll be damned if I'm the one to fix it. + if(user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) // There is a better way to do this but I'll be damned if I'm the one to fix it. to_chat(user, SPAN_DANGER("You accidentally slam yourself with \the [src]!")) SET_STATUS_MAX(user, STAT_WEAK, 1) user.take_organ_damage(2) diff --git a/code/modules/games/boardgame.dm b/code/modules/games/boardgame.dm index 6a4b7b387d5..40e238f16b5 100644 --- a/code/modules/games/boardgame.dm +++ b/code/modules/games/boardgame.dm @@ -132,7 +132,7 @@ if(I) selected = text2num(s) else - var/mob/living/carbon/human/H = locate(href_list["person"]) + var/mob/living/human/H = locate(href_list["person"]) if(!istype(H)) return var/obj/item/O = H.get_active_held_item() diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index ef99cd2250e..530125d0dec 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -170,7 +170,7 @@ var/global/list/card_decks = list() if(!ishuman(usr) || usr.incapacitated() || !Adjacent(usr)) return - var/mob/living/carbon/human/user = usr + var/mob/living/human/user = usr if(!cards.len) to_chat(usr, "There are no cards in the deck.") return diff --git a/code/modules/goals/goal_mind.dm b/code/modules/goals/goal_mind.dm index be8d7c7915d..2a34d31f176 100644 --- a/code/modules/goals/goal_mind.dm +++ b/code/modules/goals/goal_mind.dm @@ -31,7 +31,7 @@ if(job && LAZYLEN(job.possible_goals)) available_goals |= job.possible_goals if(ishuman(current)) - var/mob/living/carbon/human/H = current + var/mob/living/human/H = current for(var/token in H.cultural_info) var/decl/cultural_info/culture = H.get_cultural_value(token) var/list/new_goals = culture.get_possible_personal_goals(job ? job.department_types : null) diff --git a/code/modules/hallucinations/hallucination_telepathy.dm b/code/modules/hallucinations/hallucination_telepathy.dm index 67c5be921e7..a4a409f52e9 100644 --- a/code/modules/hallucinations/hallucination_telepathy.dm +++ b/code/modules/hallucinations/hallucination_telepathy.dm @@ -6,19 +6,19 @@ /datum/hallucination/telepathy/start() . = ..() to_chat(holder, SPAN_NOTICE("You expand your mind outwards.")) - holder.verbs += /mob/living/carbon/human/proc/fakeremotesay + holder.verbs += /mob/living/human/proc/fakeremotesay /datum/hallucination/telepathy/end() . = ..() if(holder) - holder.verbs -= /mob/living/carbon/human/proc/fakeremotesay + holder.verbs -= /mob/living/human/proc/fakeremotesay -/mob/living/carbon/human/proc/fakeremotesay() +/mob/living/human/proc/fakeremotesay() set name = "Telepathic Message" set category = "Superpower" if(!hallucination_power) - src.verbs -= /mob/living/carbon/human/proc/fakeremotesay + src.verbs -= /mob/living/human/proc/fakeremotesay return if(stat) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 7a2c09d690c..36e96954952 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -330,7 +330,7 @@ var/global/list/_wood_materials = list( if(!seed) return if(seed.get_trait(TRAIT_STINGS)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(istype(H) && H.get_equipped_item(slot_gloves_str)) return if(!reagents || reagents.total_volume <= 0) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 54af40396c3..c114d6ca4d9 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -107,7 +107,7 @@ qdel(R) // Does brute damage to a target. -/datum/seed/proc/do_thorns(var/mob/living/carbon/human/target, var/obj/item/fruit, var/target_limb) +/datum/seed/proc/do_thorns(var/mob/living/human/target, var/obj/item/fruit, var/target_limb) if(!get_trait(TRAIT_CARNIVOROUS)) return @@ -147,7 +147,7 @@ target.apply_damage(damage, BRUTE, target_limb, damage_flags, used_weapon = "Thorns") // Adds reagents to a target. -/datum/seed/proc/do_sting(var/mob/living/carbon/human/target, var/obj/item/fruit) +/datum/seed/proc/do_sting(var/mob/living/human/target, var/obj/item/fruit) if(!get_trait(TRAIT_STINGS)) return diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index 4993c7cfd88..d821135f6b5 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -367,3 +367,18 @@ /obj/item/seeds/extracted/foxglove seed = "foxglove" + +/obj/item/seeds/extracted/cabbage + seed = "cabbage" + +/obj/item/seeds/extracted/carrot + seed = "carrot" + +/obj/item/seeds/extracted/potato + seed = "potato" + +/obj/item/seeds/extracted/wheat + seed = "wheat" + +/obj/item/seeds/extracted/rice + seed = "rice" diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index e7ef9f180df..5848a943ac7 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -31,7 +31,7 @@ return if(prob((seed.get_trait(TRAIT_POTENCY) / 2) * 3)) entangle(victim) - var/mob/living/carbon/human/H = victim + var/mob/living/human/H = victim if(istype(H) && H.get_equipped_item(slot_shoes_str)) return seed.do_thorns(victim,src) @@ -74,7 +74,7 @@ return if(ishuman(victim)) - var/mob/living/carbon/human/H = victim + var/mob/living/human/H = victim if(H.species.species_flags & SPECIES_FLAG_NO_TANGLE) return diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm index 2e26743389d..8a5e9a6ccbe 100644 --- a/code/modules/integrated_electronics/passive/power.dm +++ b/code/modules/integrated_electronics/passive/power.dm @@ -120,7 +120,8 @@ ..() /obj/item/integrated_circuit/passive/power/chemical_cell/on_reagent_change(changetype) - ..() + if(!(. = ..())) + return set_pin_data(IC_OUTPUT, 1, reagents?.total_volume || 0) push_data() diff --git a/code/modules/integrated_electronics/subtypes/filter.dm b/code/modules/integrated_electronics/subtypes/filter.dm index f1626432967..781bb23ca3d 100644 --- a/code/modules/integrated_electronics/subtypes/filter.dm +++ b/code/modules/integrated_electronics/subtypes/filter.dm @@ -47,7 +47,7 @@ name = "humanoid filter" desc = "Only allow refs belonging to humanoids (dead or alive) through" icon_state = "filter_humanoid" - filter_type = /mob/living/carbon/human + filter_type = /mob/living/human /obj/item/integrated_circuit/filter/ref/obj name = "object filter" diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 141860d1da4..aeff7927052 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -140,7 +140,7 @@ power_draw_per_use = 40 /obj/item/integrated_circuit/input/med_scanner/do_work() - var/mob/living/carbon/human/H = get_pin_data_as_type(IC_INPUT, 1, /mob/living) + var/mob/living/human/H = get_pin_data_as_type(IC_INPUT, 1, /mob/living) if(!istype(H)) //Invalid input return if(H.Adjacent(get_turf(src))) // Like normal analysers, it can't be used at range. @@ -192,7 +192,7 @@ /obj/item/integrated_circuit/input/adv_med_scanner/do_work() - var/mob/living/carbon/human/H = get_pin_data_as_type(IC_INPUT, 1, /mob/living) + var/mob/living/human/H = get_pin_data_as_type(IC_INPUT, 1, /mob/living) if(!istype(H)) //Invalid input return if(H in view(get_turf(src))) // Like medbot's analyzer it can be used in range.. diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 3f5541cab97..5ee4be4e792 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -50,8 +50,8 @@ var/notified = FALSE /obj/item/integrated_circuit/reagent/on_reagent_change() - ..() - push_vol() + if((. = ..())) + push_vol() /obj/item/integrated_circuit/reagent/smoke/do_work(ord) switch(ord) @@ -214,12 +214,12 @@ var/tramount = abs(transfer_amount) if(ishuman(AM)) - var/mob/living/carbon/human/H = AM + var/mob/living/human/H = AM var/injection_status = H.can_inject(null, BP_CHEST) var/injection_delay = 3 SECONDS if(injection_status == INJECTION_PORT) injection_delay += INJECTION_PORT_DELAY - if(!H.dna || !injection_status) + if(!H.vessel?.total_volume || !injection_status) activate_pin(3) return H.visible_message( diff --git a/code/modules/keybindings/bindings_atom.dm b/code/modules/keybindings/bindings_atom.dm index 6fe32e00f0e..aaed1a9fbe1 100644 --- a/code/modules/keybindings/bindings_atom.dm +++ b/code/modules/keybindings/bindings_atom.dm @@ -15,7 +15,7 @@ if((movement_dir & EAST) && (movement_dir & WEST)) movement_dir &= ~(EAST|WEST) - if(!get_config_value(/decl/config/toggle/allow_diagonal_movement)) + if(!get_config_value(/decl/config/toggle/on/allow_diagonal_movement)) if(movement_dir & user.last_move_dir_pressed) movement_dir = user.last_move_dir_pressed else diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm index fb56abe3346..cafe738137b 100644 --- a/code/modules/keybindings/bindings_client.dm +++ b/code/modules/keybindings/bindings_client.dm @@ -37,7 +37,7 @@ if(!(next_move_dir_sub & movement)) next_move_dir_add |= movement - if(movement && !get_config_value(/decl/config/toggle/allow_diagonal_movement)) + if(movement && !get_config_value(/decl/config/toggle/on/allow_diagonal_movement)) last_move_dir_pressed = movement // Client-level keybindings are ones anyone should be able to do at any time diff --git a/code/modules/keybindings/human.dm b/code/modules/keybindings/human.dm index aaff20decab..c93ddcc13cf 100644 --- a/code/modules/keybindings/human.dm +++ b/code/modules/keybindings/human.dm @@ -11,7 +11,7 @@ description = "Quickly puts an item in the best slot available" /datum/keybinding/human/quick_equip/down(client/user) - var/mob/living/carbon/human/H = user.mob + var/mob/living/human/H = user.mob H.quick_equip() return TRUE @@ -22,7 +22,7 @@ description = "Draw or holster weapon" /datum/keybinding/human/holster/down(client/user) - var/mob/living/carbon/human/H = user.mob + var/mob/living/human/H = user.mob if(H.incapacitated()) return @@ -61,6 +61,6 @@ description = "Give the item you're currently holding" /datum/keybinding/human/give/down(client/user) - var/mob/living/carbon/human/H = user.mob + var/mob/living/human/H = user.mob H.give() return TRUE diff --git a/code/modules/materials/_materials.dm b/code/modules/materials/_materials.dm index 7e32fd8fa0b..ef21c24679d 100644 --- a/code/modules/materials/_materials.dm +++ b/code/modules/materials/_materials.dm @@ -770,7 +770,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) if(toxicity_targets_organ && ishuman(M)) var/organ_damage = dam * M.get_toxin_resistance() if(organ_damage > 0) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(H, toxicity_targets_organ) if(I) var/can_damage = I.max_damage - I.damage @@ -845,7 +845,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) if(mask) mask.clean() if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/obj/item/head = H.get_equipped_item(slot_head_str) if(head) head.clean() diff --git a/code/modules/materials/definitions/gasses/material_gas_mundane.dm b/code/modules/materials/definitions/gasses/material_gas_mundane.dm index 8fe49127ea0..e5bc8c5abfe 100644 --- a/code/modules/materials/definitions/gasses/material_gas_mundane.dm +++ b/code/modules/materials/definitions/gasses/material_gas_mundane.dm @@ -63,7 +63,7 @@ var/warning_message var/warning_prob = 10 var/dosage = LAZYACCESS(M.chem_doses, type) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(dosage >= 3) warning_message = pick("extremely dizzy","short of breath","faint","confused") warning_prob = 15 @@ -107,7 +107,7 @@ . = ..() if(!ishuman(M)) return - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M for(var/obj/item/organ/external/E in H.get_external_organs()) for(var/obj/effect/spider/spider in E.implants) if(prob(25)) diff --git a/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm b/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm index 57a75acba9b..9b783888447 100644 --- a/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm +++ b/code/modules/materials/definitions/liquids/materials_liquid_toxins.dm @@ -121,7 +121,7 @@ /decl/material/liquid/heartstopper/affect_overdose(mob/living/M, total_dose) ..() if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(H.stat != UNCONSCIOUS) if(H.ticks_since_last_successful_breath >= 10) H.ticks_since_last_successful_breath = max(10, H.ticks_since_last_successful_breath-10) @@ -257,7 +257,7 @@ /decl/material/liquid/zombie/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) ..() if (ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/true_dose = LAZYACCESS(H.chem_doses, type) + REAGENT_VOLUME(holder, type) if (true_dose >= amount_to_zombify) H.zombify() diff --git a/code/modules/materials/materials_ore.dm b/code/modules/materials/materials_ore.dm index 11a18c4ae33..b2eb776014b 100644 --- a/code/modules/materials/materials_ore.dm +++ b/code/modules/materials/materials_ore.dm @@ -110,7 +110,7 @@ /obj/item/stack/material/ore/throw_impact(atom/hit_atom) . = ..() if(icon_state == "dust") - var/mob/living/carbon/human/H = hit_atom + var/mob/living/human/H = hit_atom if(istype(H) && H.check_has_eyes() && prob(85)) to_chat(H, SPAN_DANGER("Some of \the [src] gets in your eyes!")) ADJ_STATUS(H, STAT_BLIND, 5) diff --git a/code/modules/mechs/equipment/combat.dm b/code/modules/mechs/equipment/combat.dm index 9a646515d03..c9792e5ef10 100644 --- a/code/modules/mechs/equipment/combat.dm +++ b/code/modules/mechs/equipment/combat.dm @@ -478,8 +478,8 @@ flash_time /= 2 if(ishuman(O)) - var/mob/living/carbon/human/H = O - flash_time = round(H.getFlashMod() * flash_time) + var/mob/living/human/H = O + flash_time = round(H.get_flash_mod() * flash_time) if(flash_time <= 0) return @@ -524,8 +524,8 @@ flash_time /= 2 if(ishuman(O)) - var/mob/living/carbon/human/H = O - flash_time = round(H.getFlashMod() * flash_time) + var/mob/living/human/H = O + flash_time = round(H.get_flash_mod() * flash_time) if(flash_time <= 0) return diff --git a/code/modules/mechs/equipment/combat_projectile.dm b/code/modules/mechs/equipment/combat_projectile.dm index 040ff1497f1..05e608852f3 100644 --- a/code/modules/mechs/equipment/combat_projectile.dm +++ b/code/modules/mechs/equipment/combat_projectile.dm @@ -17,11 +17,11 @@ /obj/item/gun/projectile/automatic/get_hardpoint_status_value() if(!isnull(ammo_magazine)) - return ammo_magazine.stored_ammo.len + return ammo_magazine.get_stored_ammo_count() /obj/item/gun/projectile/automatic/get_hardpoint_maptext() if(!isnull(ammo_magazine)) - return "[ammo_magazine.stored_ammo.len]/[ammo_magazine.max_ammo]" + return "[ammo_magazine.get_stored_ammo_count()]/[ammo_magazine.max_ammo]" return 0 //Weapons below this. diff --git a/code/modules/mining/machinery/material_compressor.dm b/code/modules/mining/machinery/material_compressor.dm index 09f460de259..20d359bea1d 100644 --- a/code/modules/mining/machinery/material_compressor.dm +++ b/code/modules/mining/machinery/material_compressor.dm @@ -25,7 +25,7 @@ if(compressed >= MAX_COMPRESS_ORE_PER_TICK) break if(emagged) - for(var/mob/living/carbon/human/H in input_turf) + for(var/mob/living/human/H in input_turf) for(var/obj/item/organ/external/crushing in H.get_external_organs()) if(!crushing.simulated || crushing.anchored || !prob(5)) continue diff --git a/code/modules/mining/machinery/material_extractor.dm b/code/modules/mining/machinery/material_extractor.dm index 08c9ad8b7f3..10b759facec 100644 --- a/code/modules/mining/machinery/material_extractor.dm +++ b/code/modules/mining/machinery/material_extractor.dm @@ -94,9 +94,8 @@ break /obj/machinery/material_processing/extractor/on_reagent_change() - ..() - if(!reagents) + if(!(. = ..()) || !reagents) return var/adjusted_reagents = FALSE diff --git a/code/modules/mining/machinery/material_smelter.dm b/code/modules/mining/machinery/material_smelter.dm index 188fe797b5c..7d2a9c4fe84 100644 --- a/code/modules/mining/machinery/material_smelter.dm +++ b/code/modules/mining/machinery/material_smelter.dm @@ -26,9 +26,8 @@ // Outgas anything that is in gas form. Check what you put into the smeltery, nerds. /obj/machinery/material_processing/smeltery/on_reagent_change() - ..() - if(!reagents) + if(!(. = ..()) || !reagents) return var/datum/gas_mixture/environment = loc?.return_air() @@ -97,7 +96,7 @@ if(eaten >= MAX_INTAKE_ORE_PER_TICK) break if(emagged) - for(var/mob/living/carbon/human/H in input_turf) + for(var/mob/living/human/H in input_turf) for(var/obj/item/organ/external/eating in H.get_external_organs()) if(!eating.simulated || eating.anchored || !can_eat(eating) || !prob(5)) continue diff --git a/code/modules/mob/grab/grab_datum.dm b/code/modules/mob/grab/grab_datum.dm index 039cd8bc826..f2d493245c2 100644 --- a/code/modules/mob/grab/grab_datum.dm +++ b/code/modules/mob/grab/grab_datum.dm @@ -216,7 +216,7 @@ /decl/grab/proc/item_attack(var/obj/item/grab/G, var/obj/item) -/decl/grab/proc/resolve_item_attack(var/obj/item/grab/G, var/mob/living/carbon/human/user, var/obj/item/I, var/target_zone) +/decl/grab/proc/resolve_item_attack(var/obj/item/grab/G, var/mob/living/human/user, var/obj/item/I, var/target_zone) return 0 /decl/grab/proc/handle_resist(var/obj/item/grab/G) diff --git a/code/modules/mob/grab/grab_object.dm b/code/modules/mob/grab/grab_object.dm index 95bfb90518e..1a598a635c0 100644 --- a/code/modules/mob/grab/grab_object.dm +++ b/code/modules/mob/grab/grab_object.dm @@ -41,7 +41,7 @@ if(affecting_mob) affecting_mob.update_posture() if(ishuman(affecting_mob)) - var/mob/living/carbon/human/H = affecting_mob + var/mob/living/human/H = affecting_mob var/obj/item/uniform = H.get_equipped_item(slot_w_uniform_str) if(uniform) uniform.add_fingerprint(assailant) @@ -200,7 +200,7 @@ /obj/item/grab/proc/action_used() if(ishuman(assailant)) - var/mob/living/carbon/human/H = assailant + var/mob/living/human/H = assailant H.remove_cloaking_source(H.species) last_action = world.time leave_forensic_traces() @@ -213,7 +213,7 @@ /obj/item/grab/proc/leave_forensic_traces() if(ishuman(affecting)) - var/mob/living/carbon/human/affecting_mob = affecting + var/mob/living/human/affecting_mob = affecting var/obj/item/clothing/C = affecting_mob.get_covering_equipped_item_by_zone(target_zone) if(istype(C)) C.leave_evidence(assailant) diff --git a/code/modules/mob/grab/normal/grab_normal.dm b/code/modules/mob/grab/normal/grab_normal.dm index 410fb3a7546..638fdd04be0 100644 --- a/code/modules/mob/grab/normal/grab_normal.dm +++ b/code/modules/mob/grab/normal/grab_normal.dm @@ -118,8 +118,8 @@ return FALSE /decl/grab/normal/proc/attack_eye(var/obj/item/grab/G) - var/mob/living/carbon/human/target = G.get_affecting_mob() - var/mob/living/carbon/human/attacker = G.assailant + var/mob/living/human/target = G.get_affecting_mob() + var/mob/living/human/attacker = G.assailant if(!istype(target) || !istype(attacker)) return var/decl/natural_attack/attack = attacker.get_unarmed_attack(target, BP_EYES) @@ -140,8 +140,8 @@ return 1 /decl/grab/normal/proc/headbutt(var/obj/item/grab/G) - var/mob/living/carbon/human/target = G.get_affecting_mob() - var/mob/living/carbon/human/attacker = G.assailant + var/mob/living/human/target = G.get_affecting_mob() + var/mob/living/human/attacker = G.assailant if(!istype(target) || !istype(attacker)) return if(!attacker.skill_check(SKILL_COMBAT, SKILL_BASIC)) @@ -214,7 +214,7 @@ return FALSE return TRUE -/decl/grab/normal/resolve_item_attack(var/obj/item/grab/G, var/mob/living/carbon/human/user, var/obj/item/I) +/decl/grab/normal/resolve_item_attack(var/obj/item/grab/G, var/mob/living/human/user, var/obj/item/I) switch(G.target_zone) if(BP_HEAD) return attack_throat(G, I, user) diff --git a/code/modules/mob/grab/normal/norm_aggressive.dm b/code/modules/mob/grab/normal/norm_aggressive.dm index 37dc3da0ec4..e5130ef0f42 100644 --- a/code/modules/mob/grab/normal/norm_aggressive.dm +++ b/code/modules/mob/grab/normal/norm_aggressive.dm @@ -33,7 +33,7 @@ if(!(G.target_zone in list(BP_CHEST, BP_HEAD))) to_chat(G.assailant, SPAN_WARNING("You need to be grabbing their torso or head for this!")) return FALSE - var/mob/living/carbon/human/affecting_mob = G.get_affecting_mob() + var/mob/living/human/affecting_mob = G.get_affecting_mob() if(istype(affecting_mob)) var/obj/item/clothing/C = affecting_mob.get_equipped_item(slot_head_str) if(istype(C)) //hardsuit helmets etc diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index ff24f185a8d..9adf1633bd1 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -130,7 +130,7 @@ var/speaker_name = vname ? vname : speaker.name if(ishuman(speaker)) - var/mob/living/carbon/human/H = speaker + var/mob/living/human/H = speaker if(H.voice && !vname) speaker_name = H.voice @@ -141,18 +141,18 @@ if(isAI(src) && !hard_to_hear) var/jobname // the mob's "job" - var/mob/living/carbon/human/impersonating //The crew member being impersonated, if any. + var/mob/living/human/impersonating //The crew member being impersonated, if any. if (ishuman(speaker)) - var/mob/living/carbon/human/H = speaker + var/mob/living/human/H = speaker if(istype(H.get_equipped_item(slot_wear_mask_str), /obj/item/clothing/mask/chameleon/voice)) changed_voice = 1 var/list/impersonated = new() - var/mob/living/carbon/human/I = impersonated[speaker_name] + var/mob/living/human/I = impersonated[speaker_name] if(!I) - for(var/mob/living/carbon/human/M in SSmobs.mob_list) + for(var/mob/living/human/M in SSmobs.mob_list) if(M.real_name == speaker_name) I = M impersonated[speaker_name] = I @@ -212,8 +212,8 @@ formatted = language.format_message_radio(message, nverb) else formatted = "[verb], \"[message]\"" - if(sdisabilities & DEAFENED || GET_STATUS(src, STAT_DEAF)) - var/mob/living/carbon/human/H = src + if(has_genetic_condition(GENE_COND_DEAFENED) || GET_STATUS(src, STAT_DEAF)) + var/mob/living/human/H = src if(istype(H) && H.has_headset_in_ears() && prob(20)) to_chat(src, SPAN_WARNING("You feel your headset vibrate but can hear nothing from it!")) else if(vsource) diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm index ce8d905a915..9c66c132c1d 100644 --- a/code/modules/mob/living/autohiss.dm +++ b/code/modules/mob/living/autohiss.dm @@ -4,7 +4,7 @@ /mob/living/proc/handle_autohiss(message, decl/language/L) return message // no autohiss at this level -/mob/living/carbon/human/handle_autohiss(message, decl/language/L) +/mob/living/human/handle_autohiss(message, decl/language/L) if(!client || get_preference_value(/datum/client_preference/autohiss) == PREF_OFF) // no need to process if there's no client or they have autohiss off return message return species.handle_autohiss(message, L, get_preference_value(/datum/client_preference/autohiss)) diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index 9d8c81f1dd3..c09b7b9cdee 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -110,7 +110,7 @@ /mob/living/bot/farmbot/lookForTargets() if(emagged) - for(var/mob/living/carbon/human/H in view(7, src)) + for(var/mob/living/human/H in view(7, src)) target = H return else diff --git a/code/modules/mob/living/bot/medibot.dm b/code/modules/mob/living/bot/medibot.dm index 01020dc7f35..f24139744d8 100644 --- a/code/modules/mob/living/bot/medibot.dm +++ b/code/modules/mob/living/bot/medibot.dm @@ -78,7 +78,7 @@ /mob/living/bot/medbot/lookForTargets() if(is_tipped) // Don't look for targets if we're incapacitated! return - for(var/mob/living/carbon/human/H in view(7, src)) // Time to find a patient! + for(var/mob/living/human/H in view(7, src)) // Time to find a patient! if(confirmTarget(H)) target = H if(last_newpatient_speak + 300 < world.time && vocal) @@ -95,7 +95,7 @@ last_newpatient_speak = world.time break -/mob/living/bot/medbot/UnarmedAttack(var/mob/living/carbon/human/H, var/proximity) +/mob/living/bot/medbot/UnarmedAttack(var/mob/living/human/H, var/proximity) . = ..() if(.) return @@ -297,7 +297,7 @@ reagent_glass.forceMove(my_turf) reagent_glass = null -/mob/living/bot/medbot/confirmTarget(var/mob/living/carbon/human/H) +/mob/living/bot/medbot/confirmTarget(var/mob/living/human/H) if(!..()) return 0 diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm index bb3c960f2fc..bd720f88e72 100644 --- a/code/modules/mob/living/bot/mulebot.dm +++ b/code/modules/mob/living/bot/mulebot.dm @@ -197,7 +197,7 @@ if(T == src.loc) unload(dir) -/mob/living/bot/mulebot/Bump(var/mob/living/carbon/human/M) +/mob/living/bot/mulebot/Bump(var/mob/living/human/M) if(!safety && istype(M)) visible_message("[src] knocks over [M]!") SET_STATUS_MAX(M, STAT_STUN, 8) diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index 5aaf8e3a716..b0cde7f77e3 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -175,7 +175,7 @@ return /mob/living/bot/secbot/handleAdjacentTarget() - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/threat = check_threat(target) if(awaiting_surrender < SECBOT_WAIT_TIME && istype(H) && !H.current_posture.prone && threat < SECBOT_THREAT_ATTACK) if(awaiting_surrender == -1) @@ -203,7 +203,7 @@ if(!istype(M)) return FALSE - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(istype(H) && H.current_posture.prone) cuff_target(H) return TRUE @@ -228,7 +228,7 @@ /mob/living/bot/secbot/proc/target_name(mob/living/T) if(ishuman(T)) - var/mob/living/carbon/human/H = T + var/mob/living/human/H = T return H.get_id_name("unidentified person") return "unidentified lifeform" diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 2836798bf8c..17bc1361363 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -24,7 +24,7 @@ switch(damagetype) if(BURN) - if(MUTATION_COLD_RESISTANCE in mutations) + if(has_genetic_condition(GENE_COND_COLD_RESISTANCE)) return take_damage(damage, BURN, damage_flags, used_weapon, armor_pen) if(ELECTROCUTE) diff --git a/code/modules/mob/living/human/death.dm b/code/modules/mob/living/human/death.dm index 65b725089f0..83e6c71dcd2 100644 --- a/code/modules/mob/living/human/death.dm +++ b/code/modules/mob/living/human/death.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/gib(do_gibs = TRUE) +/mob/living/human/gib(do_gibs = TRUE) var/turf/my_turf = get_turf(src) . = ..() if(.) @@ -15,45 +15,32 @@ E.dropInto(my_turf) E.throw_at(get_edge_target_turf(E, pick(global.alldirs)), rand(1,3), THROWFORCE_GIBS) -/mob/living/carbon/human/get_death_message(gibbed) +/mob/living/human/get_death_message(gibbed) if(get_config_value(/decl/config/toggle/health_show_human_death_message)) return species.get_species_death_message(src) || "seizes up and falls limp..." return ..() -/mob/living/carbon/human/death(gibbed) - . = ..() - if(.) - BITSET(hud_updateflag, HEALTH_HUD) - BITSET(hud_updateflag, STATUS_HUD) - BITSET(hud_updateflag, LIFE_HUD) - //Handle species-specific deaths. - callHook("death", list(src, gibbed)) - handle_hud_list() - if(!gibbed) - animate_tail_stop() - handle_organs() - if(species.death_sound) - playsound(loc, species.death_sound, 80, 1, 1) - if(SSticker.mode) - SSticker.mode.check_win() - species.handle_death(src) - -/mob/living/carbon/human/proc/is_husked() - return (MUTATION_HUSK in mutations) - -/mob/living/carbon/human/proc/make_husked() - if(is_husked()) +/mob/living/human/death(gibbed) + if(!(. = ..())) return - SET_FACIAL_HAIR_STYLE(src, /decl/sprite_accessory/facial_hair/shaved, TRUE) - SET_HAIR_STYLE(src, /decl/sprite_accessory/hair/bald, FALSE) + BITSET(hud_updateflag, HEALTH_HUD) + BITSET(hud_updateflag, STATUS_HUD) + BITSET(hud_updateflag, LIFE_HUD) - mutations.Add(MUTATION_HUSK) - for(var/obj/item/organ/external/E in get_external_organs()) - E.status |= ORGAN_DISFIGURED - update_body(1) + //Handle species-specific deaths. + callHook("death", list(src, gibbed)) + handle_hud_list() + if(!gibbed) + animate_tail_stop() + handle_organs() + if(species.death_sound) + playsound(loc, species.death_sound, 80, 1, 1) + if(SSticker.mode) + SSticker.mode.check_win() + species.handle_death(src) -/mob/living/carbon/human/physically_destroyed(var/skip_qdel, var/droplimb_type = DISMEMBER_METHOD_BLUNT) +/mob/living/human/physically_destroyed(var/skip_qdel, var/droplimb_type = DISMEMBER_METHOD_BLUNT) for(var/obj/item/organ/external/limb in get_external_organs()) if(!limb.parent_organ) // don't dismember root continue diff --git a/code/modules/mob/living/human/descriptors/_descriptors.dm b/code/modules/mob/living/human/descriptors/_descriptors.dm index df1a9d0dcb4..2d4a57aa138 100644 --- a/code/modules/mob/living/human/descriptors/_descriptors.dm +++ b/code/modules/mob/living/human/descriptors/_descriptors.dm @@ -14,7 +14,7 @@ */ -/mob/living/carbon/human/proc/show_descriptors_to(mob/user) +/mob/living/human/proc/show_descriptors_to(mob/user) if(LAZYLEN(appearance_descriptors)) var/decl/bodytype/bodytype = get_bodytype() if(user == src) @@ -87,8 +87,8 @@ /datum/appearance_descriptor/proc/get_initial_comparison_component(mob/me, mob/them, decl/pronouns/my_gender, decl/pronouns/other_gender, my_value) if(!skip_species_mention) - var/mob/living/carbon/human/H = me - var/mob/living/carbon/human/O = them + var/mob/living/human/H = me + var/mob/living/human/O = them if(istype(H) && (!istype(O) || H.species.name != O.species.name)) . = get_species_text("\improper [H.species.name]") . = "[get_third_person_message_start(my_gender)] [get_standalone_value_descriptor(my_value)][.]" @@ -114,7 +114,7 @@ // Append the same-descriptor comparison text. var/comparing_value if(ishuman(observer)) - var/mob/living/carbon/human/human_observer = observer + var/mob/living/human/human_observer = observer var/decl/bodytype/human_bodytype = human_observer?.get_bodytype() if(LAZYLEN(human_observer.appearance_descriptors) && !isnull(human_bodytype.appearance_descriptors[name]) && !isnull(human_observer.appearance_descriptors[name])) var/datum/appearance_descriptor/obs_descriptor = human_bodytype.appearance_descriptors[name] diff --git a/code/modules/mob/living/human/examine.dm b/code/modules/mob/living/human/examine.dm index 7024317a429..064edd76354 100644 --- a/code/modules/mob/living/human/examine.dm +++ b/code/modules/mob/living/human/examine.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/show_examined_short_description(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/living/human/show_examined_short_description(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) var/msg = list("*---------*\n[user == src ? "You are" : "This is"] [name]") if(!(hideflags & HIDEJUMPSUIT) || !(hideflags & HIDEFACE)) var/species_name = "\improper " @@ -20,7 +20,7 @@ msg += "
*---------*" to_chat(user, jointext(msg, null)) -/mob/living/carbon/human/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/living/human/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) var/self_examine = (user == src) var/use_He = self_examine ? "You" : pronouns.He @@ -260,14 +260,14 @@ ..() -//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records. +//Helper procedure. Called by /mob/living/human/examine() and /mob/living/human/Topic() to determine HUD access to security and medical records. /proc/hasHUD(mob/M, hudtype) return !!M.getHUDsource(hudtype) /mob/proc/getHUDsource(hudtype) return -/mob/living/carbon/human/getHUDsource(hudtype) +/mob/living/human/getHUDsource(hudtype) var/obj/item/clothing/glasses/G = get_equipped_item(slot_glasses_str) if(!istype(G)) return ..() @@ -293,7 +293,7 @@ if(getHUDsource(hudtype)) return get_computer_network() -/mob/living/carbon/human/verb/pose() +/mob/living/human/verb/pose() set name = "Set Pose" set desc = "Sets a description which will be shown when someone examines you." set category = "IC" @@ -301,7 +301,7 @@ var/decl/pronouns/G = get_pronouns() pose = sanitize(input(usr, "This is [src]. [G.He]...", "Pose", null) as text) -/mob/living/carbon/human/verb/set_flavor() +/mob/living/human/verb/set_flavor() set name = "Set Flavour Text" set desc = "Sets an extended description of your character's features." set category = "IC" diff --git a/code/modules/mob/living/human/human.dm b/code/modules/mob/living/human/human.dm index 67475d81068..e8e79e0bffd 100644 --- a/code/modules/mob/living/human/human.dm +++ b/code/modules/mob/living/human/human.dm @@ -1,22 +1,21 @@ -/mob/living/carbon/human +/mob/living/human name = "unknown" real_name = "unknown" icon = 'icons/mob/human.dmi' icon_state = "body_m_s" mob_sort_value = 6 - dna = new /datum/dna() max_health = 150 var/list/hud_list[10] var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/step_count - -/mob/living/carbon/human/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) + +/mob/living/human/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) current_health = max_health setup_hud_overlays() var/list/newargs = args.Copy(2) - setup(arglist(newargs)) + setup_human(arglist(newargs)) global.human_mob_list |= src if(!bloodstr) @@ -34,7 +33,7 @@ if(. != INITIALIZE_HINT_QDEL) post_setup(arglist(newargs)) -/mob/living/carbon/human/proc/setup_hud_overlays() +/mob/living/human/proc/setup_hud_overlays() hud_list[HEALTH_HUD] = new /image/hud_overlay('icons/mob/hud_med.dmi', src, "100") hud_list[STATUS_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy") hud_list[LIFE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy") @@ -46,7 +45,7 @@ hud_list[SPECIALROLE_HUD] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudblank") hud_list[STATUS_HUD_OOC] = new /image/hud_overlay('icons/mob/hud.dmi', src, "hudhealthy") -/mob/living/carbon/human/Destroy() +/mob/living/human/Destroy() global.human_mob_list -= src regenerate_body_icon = FALSE // don't bother regenerating if we happen to be queued to update icon worn_underwear = null @@ -70,19 +69,19 @@ qdel(M) return ..() -/mob/living/carbon/human/get_ingested_reagents() +/mob/living/human/get_ingested_reagents() if(!should_have_organ(BP_STOMACH)) return var/obj/item/organ/internal/stomach/stomach = get_organ(BP_STOMACH) return stomach?.ingested -/mob/living/carbon/human/get_inhaled_reagents() +/mob/living/human/get_inhaled_reagents() if(!should_have_organ(BP_LUNGS)) return var/obj/item/organ/internal/lungs/lungs = get_organ(BP_LUNGS) return lungs?.inhaled -/mob/living/carbon/human/Stat() +/mob/living/human/Stat() . = ..() if(statpanel("Status")) @@ -117,7 +116,7 @@ cell_status = "[rig.cell.charge]/[rig.cell.maxcharge]" stat(null, "Hardsuit charge: [cell_status]") -/mob/living/carbon/human/proc/implant_loyalty(mob/living/carbon/human/M, override = FALSE) // Won't override by default. +/mob/living/human/proc/implant_loyalty(mob/living/human/M, override = FALSE) // Won't override by default. if(!get_config_value(/decl/config/toggle/use_loyalty_implants) && !override) return // Nuh-uh. var/obj/item/implant/loyalty/L = new/obj/item/implant/loyalty(M) @@ -128,7 +127,7 @@ L.part = affected L.implanted(src) -/mob/living/carbon/human/proc/is_loyalty_implanted(mob/living/carbon/human/M) +/mob/living/human/proc/is_loyalty_implanted(mob/living/human/M) for(var/L in M.contents) if(istype(L, /obj/item/implant/loyalty)) for(var/obj/item/organ/external/O in M.get_external_organs()) @@ -136,20 +135,13 @@ return 1 return 0 -/mob/living/carbon/human/get_additional_stripping_options() +/mob/living/human/get_additional_stripping_options() . = ..() for(var/entry in worn_underwear) var/obj/item/underwear/UW = entry LAZYADD(., "
Remove \the [UW]") - -// TODO: remove when is_husked is moved to a parent type (or if husking is removed) -/mob/living/carbon/human/identity_is_visible() - if(is_husked()) - return FALSE - return ..() - -/mob/living/carbon/human/OnSelfTopic(href_list) +/mob/living/human/OnSelfTopic(href_list) if (href_list["lookitem"]) var/obj/item/I = locate(href_list["lookitem"]) if(I) @@ -164,12 +156,12 @@ return ..() -/mob/living/carbon/human/CanUseTopic(mob/user, datum/topic_state/state, href_list) +/mob/living/human/CanUseTopic(mob/user, datum/topic_state/state, href_list) . = ..() if(href_list && (href_list["refresh"] || href_list["item"])) return min(., ..(user, global.physical_topic_state, href_list)) -/mob/living/carbon/human/OnTopic(mob/user, href_list) +/mob/living/human/OnTopic(mob/user, href_list) if (href_list["criminal"]) if(hasHUD(user, HUD_SECURITY)) @@ -198,7 +190,7 @@ spawn() BITSET(hud_updateflag, WANTED_HUD) if(ishuman(user)) - var/mob/living/carbon/human/U = user + var/mob/living/human/U = user U.handle_regular_hud_updates() if(isrobot(user)) var/mob/living/silicon/robot/U = user @@ -256,7 +248,7 @@ spawn() if(ishuman(user)) - var/mob/living/carbon/human/U = user + var/mob/living/human/U = user U.handle_regular_hud_updates() if(isrobot(user)) var/mob/living/silicon/robot/U = user @@ -295,7 +287,7 @@ return ..() -/mob/living/carbon/human/update_flavor_text(key) +/mob/living/human/update_flavor_text(key) var/msg switch(key) if("done") @@ -312,22 +304,14 @@ flavor_texts[key] = msg set_flavor() -/mob/living/carbon/human/proc/get_darksight_range() - var/decl/bodytype/root_bodytype = get_bodytype() - if(root_bodytype.vision_organ) - var/obj/item/organ/internal/eyes/I = get_organ(root_bodytype.vision_organ, /obj/item/organ/internal/eyes) - if(istype(I)) - return I.get_darksight_range() - return root_bodytype.eye_darksight_range - -/mob/living/carbon/human/abiotic(var/full_body = TRUE) +/mob/living/human/abiotic(var/full_body = TRUE) if(full_body) for(var/slot in list(slot_head_str, slot_shoes_str, slot_w_uniform_str, slot_wear_suit_str, slot_glasses_str, slot_l_ear_str, slot_r_ear_str, slot_gloves_str)) if(get_equipped_item(slot)) return FALSE return ..() -/mob/living/carbon/human/empty_stomach() +/mob/living/human/empty_stomach() SET_STATUS_MAX(src, STAT_STUN, 3) var/obj/item/organ/internal/stomach/stomach = get_organ(BP_STOMACH, /obj/item/organ/internal/stomach) @@ -364,9 +348,9 @@ handle_additional_vomit_reagents(splat) splat.update_icon() -/mob/living/carbon/human/proc/vomit(var/timevomit = 1, var/level = 3, var/deliberate = FALSE) +/mob/living/human/proc/vomit(var/timevomit = 1, var/level = 3, var/deliberate = FALSE) - set waitfor = 0 + set waitfor = FALSE if(!check_has_mouth() || isSynthetic() || !timevomit || !level || stat == DEAD || lastpuke) return @@ -395,19 +379,17 @@ sleep(350) //wait 35 seconds before next volley lastpuke = FALSE -/mob/living/carbon/human/proc/increase_germ_level(n) +/mob/living/human/proc/increase_germ_level(n) var/obj/item/gloves = get_equipped_item(slot_gloves_str) if(gloves) gloves.germ_level += n else germ_level += n -/mob/living/carbon/human/revive() - +/mob/living/human/revive() get_bodytype().create_missing_organs(src) // Reset our organs/limbs. restore_all_organs() // Reapply robotics/amputated status from preferences. reset_blood() - if(!client || !key) //Don't boot out anyone already in the mob. for(var/mob/living/brain/brain in global.player_list) // This is really nasty, does it even work anymore? if(brain.real_name == src.real_name && brain.mind) @@ -415,7 +397,6 @@ qdel(brain.loc) break ticks_since_last_successful_breath = 0 - UpdateAppearance() ..() /mob/living/add_blood(mob/living/M, amount = 2, list/blood_data) @@ -426,10 +407,10 @@ bloodied |= grabber.add_blood(M, amount, blood_data) if(bloodied) update_equipment_overlay(slot_gloves_str) //handles bloody hands overlays and updating - verbs += /mob/living/carbon/human/proc/bloody_doodle + verbs += /mob/living/human/proc/bloody_doodle return 1 //we applied blood to the item -/mob/living/carbon/human/get_visible_implants(var/class = 0) +/mob/living/human/get_visible_implants(var/class = 0) var/list/visible_implants = list() for(var/obj/item/organ/external/organ in get_external_organs()) @@ -439,14 +420,14 @@ return(visible_implants) -/mob/living/carbon/human/embedded_needs_process() +/mob/living/human/embedded_needs_process() for(var/obj/item/organ/external/organ in src.get_external_organs()) for(var/obj/item/O in organ.implants) if(!istype(O, /obj/item/implant)) //implant type items do not cause embedding effects, see handle_embedded_objects() return 1 return 0 -/mob/living/carbon/human/handle_embedded_and_stomach_objects() +/mob/living/human/handle_embedded_and_stomach_objects() if(embedded_flag) for(var/obj/item/organ/external/organ in get_external_organs()) @@ -469,7 +450,7 @@ else jostle_internal_object(parent, O) -/mob/living/carbon/human/proc/jostle_internal_object(var/obj/item/organ/external/organ, var/obj/item/O) +/mob/living/human/proc/jostle_internal_object(var/obj/item/organ/external/organ, var/obj/item/O) // All kinds of embedded objects cause bleeding. if(!organ.can_feel_pain()) to_chat(src, SPAN_DANGER("You feel [O] moving inside your [organ.name].")) @@ -481,7 +462,11 @@ custom_pain(msg,40,affecting = organ) organ.take_external_damage(rand(1,3) + O.w_class, DAM_EDGE, 0) -/mob/living/carbon/human/proc/set_bodytype(var/decl/bodytype/new_bodytype) +/mob/proc/set_bodytype(var/decl/bodytype/new_bodytype) + return + +/mob/living/human/set_bodytype(var/decl/bodytype/new_bodytype) + var/decl/bodytype/old_bodytype = get_bodytype() if(ispath(new_bodytype)) new_bodytype = GET_DECL(new_bodytype) @@ -501,10 +486,13 @@ update_eyes() return TRUE +/mob/proc/set_species(var/new_species_name, var/new_bodytype = null) + return + //set_species should not handle the entirety of initing the mob, and should not trigger deep updates //It focuses on setting up species-related data, without force applying them uppon organs and the mob's appearance. // For transforming an existing mob, look at change_species() -/mob/living/carbon/human/proc/set_species(var/new_species_name, var/new_bodytype = null) +/mob/living/human/set_species(var/new_species_name, var/new_bodytype = null) if(!new_species_name) CRASH("set_species on mob '[src]' was passed a null species name '[new_species_name]'!") var/new_species = get_species_by_key(new_species_name) @@ -520,8 +508,6 @@ //Update our species species = new_species - if(dna) - dna.species = new_species_name holder_type = null if(species.holder_type) holder_type = species.holder_type @@ -568,7 +554,7 @@ //Syncs cultural tokens to the currently set species, and may trigger a language update -/mob/living/carbon/human/proc/apply_species_cultural_info() +/mob/living/human/proc/apply_species_cultural_info() var/update_lang for(var/token in ALL_CULTURAL_TAGS) if(species.force_cultural_info && species.force_cultural_info[token]) @@ -582,7 +568,7 @@ update_languages() //Drop anything that cannot be worn by the current species of the mob -/mob/living/carbon/human/proc/apply_species_inventory_restrictions() +/mob/living/human/proc/apply_species_inventory_restrictions() if(!(get_bodytype().appearance_flags & HAS_UNDERWEAR)) QDEL_NULL_LIST(worn_underwear) @@ -609,7 +595,7 @@ //This handles actually updating our visual appearance // Triggers deep update of limbs and hud -/mob/living/carbon/human/proc/apply_species_appearance() +/mob/living/human/proc/apply_species_appearance() if(!species) icon_state = lowertext(SPECIES_HUMAN) else @@ -621,7 +607,7 @@ hud_reset(TRUE) // Like above, but for bodytype. Not as complicated. -/mob/living/carbon/human/proc/apply_bodytype_appearance() +/mob/living/human/proc/apply_bodytype_appearance() var/decl/bodytype/root_bodytype = get_bodytype() if(!root_bodytype) set_skin_colour(COLOR_BLACK) @@ -648,7 +634,7 @@ reset_offsets() -/mob/living/carbon/human/proc/update_languages() +/mob/living/human/proc/update_languages() if(!length(cultural_info)) log_warning("'[src]'([x], [y], [z]) doesn't have any cultural info set and is attempting to update its language!!") @@ -703,7 +689,7 @@ return thing return FALSE -/mob/living/carbon/human/can_inject(var/mob/user, var/target_zone) +/mob/living/human/can_inject(var/mob/user, var/target_zone) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(src, target_zone) if(!affecting) @@ -725,7 +711,7 @@ return 0 -/mob/living/carbon/human/print_flavor_text(var/shrink = 1) +/mob/living/human/print_flavor_text(var/shrink = 1) var/head_exposed = 1 var/face_exposed = 1 @@ -777,19 +763,19 @@ else return ..() -/mob/living/carbon/human/has_brain() +/mob/living/human/has_brain() . = !!GET_INTERNAL_ORGAN(src, BP_BRAIN) -/mob/living/carbon/human/check_has_eyes() +/mob/living/human/check_has_eyes() var/obj/item/organ/internal/eyes = GET_INTERNAL_ORGAN(src, BP_EYES) . = eyes?.is_usable() -/mob/living/carbon/human/reset_view(atom/A, update_hud = 1) +/mob/living/human/reset_view(atom/A, update_hud = 1) ..() if(update_hud) handle_regular_hud_updates() -/mob/living/carbon/human/can_stand_overridden() +/mob/living/human/can_stand_overridden() if(get_rig()?.ai_can_move_suit(check_for_ai = 1)) // Actually missing a leg will screw you up. Everything else can be compensated for. for(var/limbcheck in list(BP_L_LEG,BP_R_LEG)) @@ -799,7 +785,7 @@ return TRUE return FALSE -/mob/living/carbon/human/can_devour(atom/movable/victim, var/silent = FALSE) +/mob/living/human/can_devour(atom/movable/victim, var/silent = FALSE) if(!should_have_organ(BP_STOMACH)) return ..() @@ -822,19 +808,19 @@ . = stomach.get_devour_time(victim) || ..() -/mob/living/carbon/human/move_to_stomach(atom/movable/victim) +/mob/living/human/move_to_stomach(atom/movable/victim) var/obj/item/organ/internal/stomach = GET_INTERNAL_ORGAN(src, BP_STOMACH) if(stomach) victim.forceMove(stomach) -/mob/living/carbon/human/get_adjusted_metabolism(metabolism) +/mob/living/human/get_adjusted_metabolism(metabolism) return ..() * (species ? species.metabolism_mod : 1) -/mob/living/carbon/human/is_invisible_to(var/mob/viewer) +/mob/living/human/is_invisible_to(var/mob/viewer) return (is_cloaked() || ..()) -/mob/living/carbon/human/proc/resuscitate() +/mob/living/human/proc/resuscitate() if(!is_asystole() || !should_have_organ(BP_HEART)) return var/obj/item/organ/internal/heart/heart = get_organ(BP_HEART, /obj/item/organ/internal/heart) @@ -859,23 +845,23 @@ heart.handle_pulse() return TRUE -/mob/living/carbon/human/proc/make_reagent(amount, reagent_type) +/mob/living/human/proc/make_reagent(amount, reagent_type) if(stat == CONSCIOUS) var/limit = max(0, reagents.get_overdose(reagent_type) - REAGENT_VOLUME(reagents, reagent_type)) add_to_reagents(reagent_type, min(amount, limit)) //Get fluffy numbers -/mob/living/carbon/human/proc/get_blood_pressure() +/mob/living/human/proc/get_blood_pressure() if(status_flags & FAKEDEATH) return "[FLOOR(120+rand(-5,5))*0.25]/[FLOOR(80+rand(-5,5)*0.25)]" var/blood_result = get_blood_circulation() return "[FLOOR((120+rand(-5,5))*(blood_result/100))]/[FLOOR((80+rand(-5,5))*(blood_result/100))]" //Point at which you dun breathe no more. Separate from asystole crit, which is heart-related. -/mob/living/carbon/human/nervous_system_failure() +/mob/living/human/nervous_system_failure() return get_damage(BRAIN) >= get_max_health() * 0.75 -/mob/living/carbon/human/melee_accuracy_mods() +/mob/living/human/melee_accuracy_mods() . = ..() if(get_shock() > 50) . += 15 @@ -884,7 +870,7 @@ if(shock_stage > 30) . += 15 -/mob/living/carbon/human/ranged_accuracy_mods() +/mob/living/human/ranged_accuracy_mods() . = ..() if(get_shock() > 10 && !skill_check(SKILL_WEAPONS, SKILL_ADEPT)) . -= 1 @@ -901,12 +887,12 @@ if(skill_check(SKILL_WEAPONS, SKILL_PROF)) . += 2 -/mob/living/carbon/human/fluid_act(var/datum/reagents/fluids) +/mob/living/human/fluid_act(var/datum/reagents/fluids) ..() if(!QDELETED(src) && fluids?.total_volume) species.fluid_act(src, fluids) -/mob/living/carbon/human/proc/set_cultural_value(var/token, var/decl/cultural_info/_culture, var/defer_language_update) +/mob/living/human/proc/set_cultural_value(var/token, var/decl/cultural_info/_culture, var/defer_language_update) if(ispath(_culture, /decl/cultural_info)) _culture = GET_DECL(_culture) if(istype(_culture)) @@ -917,17 +903,17 @@ /mob/living/proc/get_cultural_value(var/token) return null -/mob/living/carbon/human/get_cultural_value(var/token) +/mob/living/human/get_cultural_value(var/token) . = LAZYACCESS(cultural_info, token) if(!istype(., /decl/cultural_info)) . = global.using_map.default_cultural_info[token] PRINT_STACK_TRACE("get_cultural_value() tried to return a non-instance value for token '[token]' - full culture list: [json_encode(cultural_info)] default species culture list: [json_encode(global.using_map.default_cultural_info)]") -/mob/living/carbon/human/get_digestion_product() +/mob/living/human/get_digestion_product() return species.get_digestion_product(src) // A damaged stomach can put blood in your vomit. -/mob/living/carbon/human/handle_additional_vomit_reagents(var/obj/effect/decal/cleanable/vomit/vomit) +/mob/living/human/handle_additional_vomit_reagents(var/obj/effect/decal/cleanable/vomit/vomit) ..() if(should_have_organ(BP_STOMACH)) var/obj/item/organ/internal/stomach = GET_INTERNAL_ORGAN(src, BP_STOMACH) @@ -937,7 +923,7 @@ else reagents.trans_to_obj(vomit, 5) -/mob/living/carbon/human/get_bullet_impact_effect_type(var/def_zone) +/mob/living/human/get_bullet_impact_effect_type(var/def_zone) var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(src, def_zone) if(!E) return BULLET_IMPACT_NONE @@ -945,7 +931,7 @@ return BULLET_IMPACT_METAL return BULLET_IMPACT_MEAT -/mob/living/carbon/human/lose_hair() +/mob/living/human/lose_hair() if(species.handle_additional_hair_loss(src)) . = TRUE for(var/obj/item/organ/external/E in get_external_organs()) @@ -964,47 +950,43 @@ remove_sprite_accessory(accessory, skip_update = TRUE) . = TRUE -/mob/living/carbon/human/increaseBodyTemp(value) +/mob/living/human/increaseBodyTemp(value) bodytemperature += value return bodytemperature -/mob/living/carbon/human/get_admin_job_string() +/mob/living/human/get_admin_job_string() return job || uppertext(species.name) -/mob/living/carbon/human/can_change_intent() +/mob/living/human/can_change_intent() return TRUE -/mob/living/carbon/human/breathing_hole_covered() +/mob/living/human/breathing_hole_covered() . = ..() if(!.) var/obj/item/head = get_equipped_item(slot_head_str) if(head && (head.item_flags & ITEM_FLAG_AIRTIGHT)) return TRUE -/mob/living/carbon/human/set_internals_to_best_available_tank(var/breathes_gas = /decl/material/gas/oxygen, var/list/poison_gas = list(/decl/material/gas/chlorine)) +/mob/living/human/set_internals_to_best_available_tank(var/breathes_gas = /decl/material/gas/oxygen, var/list/poison_gas = list(/decl/material/gas/chlorine)) . = ..(species.breath_type, species.poison_types) //Sets the mob's real name and update all the proper fields -/mob/living/carbon/human/proc/set_real_name(var/newname) +/mob/living/human/proc/set_real_name(var/newname) if(!newname) return real_name = newname SetName(newname) - if(dna) - dna.real_name = newname if(mind) mind.name = newname //Human mob specific init code. Meant to be used only on init. -/mob/living/carbon/human/proc/setup(species_name = null, datum/dna/new_dna = null, decl/bodytype/new_bodytype = null) - - if(new_dna) - species_name = new_dna.species - src.dna = new_dna +/mob/living/human/proc/setup_human(species_name, datum/mob_snapshot/supplied_appearance) + if(supplied_appearance) + species_name = supplied_appearance.root_species else if(!species_name) species_name = global.using_map.default_species //Humans cannot exist without a species! - set_species(species_name, new_bodytype) + set_species(species_name, supplied_appearance?.root_bodytype) var/decl/bodytype/root_bodytype = get_bodytype() // root bodytype is set in set_species if(!get_skin_colour()) set_skin_colour(root_bodytype.base_color, skip_update = TRUE) @@ -1015,23 +997,23 @@ if(!blood_type && length(species?.blood_types)) blood_type = pickweight(species.blood_types) - if(new_dna) - set_real_name(new_dna.real_name) + if(supplied_appearance) + set_real_name(supplied_appearance.real_name) else try_generate_default_name() - dna.ready_dna(src) //regen dna filler only if we haven't forced the dna already species.handle_pre_spawn(src) apply_species_cultural_info() species.handle_post_spawn(src) - UpdateAppearance() //Apply dna appearance to mob, causes DNA to change because filler values are regenerated + supplied_appearance?.apply_appearance_to(src) + //Prevent attempting to create blood container if its already setup if(!vessel) reset_blood() //If the mob has its default name it'll try to generate /obtain a proper one -/mob/living/carbon/human/proc/try_generate_default_name() +/mob/living/human/proc/try_generate_default_name() if(name != initial(name)) return if(species) @@ -1040,18 +1022,18 @@ SetName(initial(name)) //Runs last after setup and after the parent init has been executed. -/mob/living/carbon/human/proc/post_setup(var/species_name = null, var/datum/dna/new_dna = null) +/mob/living/human/proc/post_setup(species_name, datum/mob_snapshot/supplied_appearance) try_refresh_visible_overlays() //Do this exactly once per setup -/mob/living/carbon/human/handle_flashed(var/obj/item/flash/flash, var/flash_strength) +/mob/living/human/handle_flashed(var/obj/item/flash/flash, var/flash_strength) var/safety = eyecheck() if(safety < FLASH_PROTECTION_MODERATE) - flash_strength = round(getFlashMod() * flash_strength) + flash_strength = round(get_flash_mod() * flash_strength) if(safety > FLASH_PROTECTION_NONE) flash_strength = (flash_strength / 2) . = ..() -/mob/living/carbon/human/handle_nutrition_and_hydration() +/mob/living/human/handle_nutrition_and_hydration() ..() // Apply stressors. @@ -1079,20 +1061,20 @@ else remove_stressor(/datum/stressor/thirsty) -/mob/living/carbon/human/get_comments_record() +/mob/living/human/get_comments_record() if(comments_record_id) return SScharacter_info.get_record(comments_record_id, TRUE) return ..() -/mob/living/carbon/human/proc/get_age() +/mob/living/human/proc/get_age() . = LAZYACCESS(appearance_descriptors, "age") || 30 -/mob/living/carbon/human/proc/set_age(var/val) +/mob/living/human/proc/set_age(var/val) var/decl/bodytype/bodytype = get_bodytype() var/datum/appearance_descriptor/age = LAZYACCESS(bodytype.appearance_descriptors, "age") LAZYSET(appearance_descriptors, "age", (age ? age.sanitize_value(val) : 30)) -/mob/living/carbon/human/HandleBloodTrail(turf/T, old_loc) +/mob/living/human/HandleBloodTrail(turf/T, old_loc) // Tracking blood var/obj/item/source var/obj/item/clothing/shoes/shoes = get_equipped_item(slot_shoes_str) @@ -1126,11 +1108,11 @@ var/turf/old_turf = old_loc old_turf.AddTracks(species.get_move_trail(src), bloodDNA, 0, dir, bloodcolor) // Going -/mob/living/carbon/human/remove_implant(obj/item/implant, surgical_removal = FALSE, obj/item/organ/external/affected) +/mob/living/human/remove_implant(obj/item/implant, surgical_removal = FALSE, obj/item/organ/external/affected) if((. = ..()) && !surgical_removal) shock_stage += 20 -/mob/living/carbon/human/proc/has_footsteps() +/mob/living/human/proc/has_footsteps() if(species.silent_steps || buckled || current_posture.prone || throwing) return //people flying, lying down or sitting do not step @@ -1143,7 +1125,7 @@ return TRUE -/mob/living/carbon/human/handle_footsteps() +/mob/living/human/handle_footsteps() step_count++ if(!has_footsteps()) return @@ -1182,34 +1164,52 @@ if(volume > 0 && range > 0) playsound(T, footsound, volume, 1, range) -/mob/living/carbon/human/try_awaken(mob/user) +/mob/living/human/get_skin_tone(value) + return skin_tone + +/mob/living/human/set_skin_tone(value) + skin_tone = value + +/mob/living/human/try_awaken(mob/user) return !is_asystole() && ..() -/mob/living/carbon/human/get_satiated_nutrition() +/mob/living/human/get_satiated_nutrition() return 350 -/mob/living/carbon/human/get_max_nutrition() +/mob/living/human/get_max_nutrition() return 400 -/mob/living/carbon/human/get_max_hydration() +/mob/living/human/get_max_hydration() return 400 -/mob/living/carbon/human/get_species() +/mob/living/human/get_species() RETURN_TYPE(/decl/species) return species -/mob/living/carbon/human/get_contact_reagents() +/mob/living/human/get_contact_reagents() return touching -/mob/living/carbon/human/get_injected_reagents() +/mob/living/human/get_injected_reagents() return bloodstr -/mob/living/carbon/human/Bump(var/atom/movable/AM, yes) +/mob/living/human/Bump(var/atom/movable/AM, yes) if(now_pushing || !yes) return ..() -/mob/living/carbon/human/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/mob/living/human/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() var/temp_inc = max(min(BODYTEMP_HEATING_MAX*(1-get_heat_protection()), exposed_temperature - bodytemperature), 0) bodytemperature += temp_inc + +/mob/living/human/currently_has_skin() + return currently_has_meat() + +/mob/living/human/currently_has_innards() + return length(get_internal_organs()) + +/mob/living/human/currently_has_meat() + for(var/obj/item/organ/external/limb in get_external_organs()) + if(istype(limb.material, /decl/material/solid/organic/meat)) + return TRUE + return FALSE diff --git a/code/modules/mob/living/human/human_appearance.dm b/code/modules/mob/living/human/human_appearance.dm index c307ef22184..ca0dddcea7e 100644 --- a/code/modules/mob/living/human/human_appearance.dm +++ b/code/modules/mob/living/human/human_appearance.dm @@ -1,22 +1,23 @@ -/mob/living/carbon/human +/mob/living/human var/_skin_colour -/mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, var/location = src, var/mob/user = src, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/state = global.default_topic_state) +/mob/living/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, var/location = src, var/mob/user = src, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/state = global.default_topic_state) var/datum/nano_module/appearance_changer/AC = new(location, src, check_species_whitelist, species_whitelist, species_blacklist) AC.flags = flags AC.ui_interact(user, state = state) -/mob/living/carbon/human/get_skin_colour() +/mob/living/human/get_skin_colour() return _skin_colour -/mob/living/carbon/human/set_skin_colour(var/new_color, var/skip_update = FALSE) +/mob/living/human/set_skin_colour(var/new_color, var/skip_update = FALSE) if((. = ..())) _skin_colour = new_color if(!skip_update) force_update_limbs() update_body() -/mob/living/carbon/human/proc/change_species(var/new_species, var/new_bodytype = null) +/mob/living/human/proc/change_species(var/new_species, var/new_bodytype = null) + if(!new_species) return @@ -27,11 +28,9 @@ return set_species(new_species, new_bodytype) - dna.ready_dna(src) //Handle spawning stuff species.handle_pre_spawn(src) - UpdateAppearance() apply_species_appearance() apply_bodytype_appearance() apply_species_cultural_info() @@ -47,17 +46,16 @@ try_refresh_visible_overlays() return 1 -/mob/living/carbon/human/set_gender(var/new_gender, var/update_body = FALSE) +/mob/living/human/set_gender(var/new_gender, var/update_body = FALSE) . = ..() if(. && update_body) update_body() - update_dna() -/mob/living/carbon/human/proc/randomize_gender() +/mob/living/human/proc/randomize_gender() var/decl/pronouns/pronouns = pick(species.available_pronouns) set_gender(pronouns.name, TRUE) -/mob/living/carbon/human/proc/reset_hair() +/mob/living/human/proc/reset_hair() var/decl/bodytype/root_bodytype = get_bodytype() var/decl/sprite_accessory_category/hair/hair_category = GET_DECL(SAC_HAIR) var/list/valid_hairstyles = species?.get_available_accessories(root_bodytype, SAC_HAIR) @@ -84,7 +82,7 @@ update_hair() -/mob/living/carbon/human/proc/change_skin_tone(var/tone) +/mob/living/human/proc/change_skin_tone(var/tone) if(skin_tone == tone || !(get_bodytype().appearance_flags & HAS_A_SKIN_TONE)) return skin_tone = tone @@ -92,11 +90,7 @@ update_body() return 1 -/mob/living/carbon/human/proc/update_dna() - check_dna() - dna.ready_dna(src) - -/mob/living/carbon/human/proc/generate_valid_species(var/check_whitelist = 1, var/list/whitelist = list(), var/list/blacklist = list()) +/mob/living/human/proc/generate_valid_species(var/check_whitelist = 1, var/list/whitelist = list(), var/list/blacklist = list()) var/list/valid_species = new() for(var/current_species_name in get_all_species()) var/decl/species/current_species = get_species_by_key(current_species_name) @@ -114,8 +108,3 @@ valid_species += current_species_name return valid_species - -/mob/living/carbon/human/proc/force_update_limbs() - for(var/obj/item/organ/external/O in get_external_organs()) - O.sync_colour_to_human(src) - update_body(0) diff --git a/code/modules/mob/living/human/human_appearance_head.dm b/code/modules/mob/living/human/human_appearance_head.dm index d60fc877013..f5ed43182da 100644 --- a/code/modules/mob/living/human/human_appearance_head.dm +++ b/code/modules/mob/living/human/human_appearance_head.dm @@ -1,11 +1,11 @@ -/mob/living/carbon/human +/mob/living/human var/_eye_colour // Eyes! TODO, make these a marking. -/mob/living/carbon/human/get_eye_colour() +/mob/living/human/get_eye_colour() return _eye_colour -/mob/living/carbon/human/set_eye_colour(var/new_color, var/skip_update = FALSE) +/mob/living/human/set_eye_colour(var/new_color, var/skip_update = FALSE) if((. = ..())) _eye_colour = new_color if(!skip_update) diff --git a/code/modules/mob/living/human/human_attackhand.dm b/code/modules/mob/living/human/human_attackhand.dm index 64ba7e61f0e..ed057dcb330 100644 --- a/code/modules/mob/living/human/human_attackhand.dm +++ b/code/modules/mob/living/human/human_attackhand.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/proc/get_unarmed_attack(var/mob/target, var/hit_zone = null) +/mob/living/human/proc/get_unarmed_attack(var/mob/target, var/hit_zone = null) if(!hit_zone) hit_zone = get_target_zone() var/list/available_attacks = get_natural_attacks() @@ -18,13 +18,13 @@ use_attack = pick(other_attacks) . = use_attack?.resolve_to_soft_variant(src) -/mob/living/carbon/human/proc/get_natural_attacks() +/mob/living/human/proc/get_natural_attacks() . = list() for(var/obj/item/organ/external/limb in get_external_organs()) if(length(limb.unarmed_attacks) && limb.is_usable()) . |= limb.unarmed_attacks -/mob/living/carbon/human/default_help_interaction(mob/user) +/mob/living/human/default_help_interaction(mob/user) if(user != src) if(ishuman(user) && (is_asystole() || (status_flags & FAKEDEATH) || failed_last_breath) && !on_fire && !(user.get_target_zone() == BP_R_ARM || user.get_target_zone() == BP_L_ARM)) @@ -96,7 +96,7 @@ show_message("My [org.name] is OK.",1) return TRUE -/mob/living/carbon/human/default_disarm_interaction(mob/user) +/mob/living/human/default_disarm_interaction(mob/user) var/decl/species/user_species = user.get_species() if(user_species) admin_attack_log(user, src, "Disarmed their victim.", "Was disarmed.", "disarmed") @@ -104,7 +104,7 @@ return TRUE . = ..() -/mob/living/carbon/human/default_hurt_interaction(mob/user) +/mob/living/human/default_hurt_interaction(mob/user) . = ..() if(.) return TRUE @@ -117,7 +117,7 @@ attack_generic(user, rand(1,3), "punched") return TRUE - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/rand_damage = rand(1, 5) var/block = 0 var/accurate = 0 @@ -219,7 +219,7 @@ apply_damage(real_damage, attack.get_damage_type(), hit_zone, damage_flags=attack.damage_flags()) return TRUE -/mob/living/carbon/human/attack_hand(mob/user) +/mob/living/human/attack_hand(mob/user) remove_cloaking_source(species) if(user.a_intent != I_GRAB) @@ -227,7 +227,7 @@ if(G.assailant == user && G.affecting == src && G.resolve_openhand_attack()) return TRUE // Should this all be in Touch()? - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(istype(H)) if(H != src && check_shields(0, null, H, H.get_target_zone(), H.name)) H.do_attack_animation(src) @@ -235,7 +235,7 @@ return ..() -/mob/living/carbon/human/proc/start_compressions(mob/living/carbon/human/H, starting = FALSE, cpr_mode) +/mob/living/human/proc/start_compressions(mob/living/human/H, starting = FALSE, cpr_mode) if(length(H.get_held_items())) performing_cpr = FALSE to_chat(H, SPAN_WARNING("You cannot perform CPR with anything in your hands.")) @@ -334,7 +334,7 @@ start_compressions(H, FALSE, cpr_mode) //Breaks all grips and pulls that the mob currently has. -/mob/living/carbon/human/proc/break_all_grabs(mob/living/user) +/mob/living/human/proc/break_all_grabs(mob/living/user) . = FALSE for(var/obj/item/grab/grab in get_active_grabs()) if(grab.affecting) @@ -350,7 +350,7 @@ If you are applying pressure to another and attempt to apply pressure to yourself, you'll have to switch to an empty hand which will also stop do_mob() Changing targeted zones should also stop do_mob(), preventing you from applying pressure to more than one body part at once. */ -/mob/living/carbon/human/proc/apply_pressure(mob/living/user, var/target_zone) +/mob/living/human/proc/apply_pressure(mob/living/user, var/target_zone) var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(src, target_zone) if(!organ || !(organ.status & (ORGAN_BLEEDING|ORGAN_ARTERY_CUT)) || BP_IS_PROSTHETIC(organ)) return 0 @@ -389,7 +389,7 @@ return 1 -/mob/living/carbon/human/verb/set_default_unarmed_attack() +/mob/living/human/verb/set_default_unarmed_attack() set name = "Set Default Unarmed Attack" set category = "IC" diff --git a/code/modules/mob/living/human/human_blood.dm b/code/modules/mob/living/human/human_blood.dm index c30ff2bcccd..f07a4c4635b 100644 --- a/code/modules/mob/living/human/human_blood.dm +++ b/code/modules/mob/living/human/human_blood.dm @@ -1,8 +1,8 @@ -/mob/living/carbon/human +/mob/living/human var/datum/reagents/vessel // Container for blood and BLOOD ONLY. Do not transfer other chems here. //Initializes blood vessels -/mob/living/carbon/human/proc/make_blood() +/mob/living/human/proc/make_blood() if(vessel) return vessel = new /datum/reagents(species.blood_volume, src) @@ -11,7 +11,7 @@ reset_blood() //Modifies blood level -/mob/living/carbon/human/proc/adjust_blood(var/amt, var/blood_data) +/mob/living/human/proc/adjust_blood(var/amt, var/blood_data) if(!vessel) make_blood() @@ -25,7 +25,7 @@ vessel.remove_any(abs(amt)) //Resets blood data -/mob/living/carbon/human/proc/reset_blood() +/mob/living/human/proc/reset_blood() if(!vessel) make_blood() @@ -51,7 +51,7 @@ )) //Makes a blood drop, leaking amt units of blood from the mob -/mob/living/carbon/human/proc/drip(var/amt, var/tar = src, var/ddir) +/mob/living/human/proc/drip(var/amt, var/tar = src, var/ddir) var/datum/reagents/bloodstream = get_injected_reagents() if(remove_blood(amt)) if(bloodstream.total_volume && vessel.total_volume) @@ -62,7 +62,7 @@ return 0 #define BLOOD_SPRAY_DISTANCE 2 -/mob/living/carbon/human/proc/blood_squirt(var/amt, var/turf/sprayloc) +/mob/living/human/proc/blood_squirt(var/amt, var/turf/sprayloc) if(amt <= 0 || !istype(sprayloc)) return var/spraydir = pick(global.alldirs) @@ -87,7 +87,7 @@ break if(ishuman(A)) - var/mob/living/carbon/human/H = A + var/mob/living/human/H = A if(!H.current_posture.prone) H.bloody_body(src) H.bloody_hands(src) @@ -121,7 +121,7 @@ return bled #undef BLOOD_SPRAY_DISTANCE -/mob/living/carbon/human/proc/remove_blood(var/amt) +/mob/living/human/proc/remove_blood(var/amt) if(!should_have_organ(BP_HEART)) //TODO: Make drips come from the reagents instead. return 0 if(!amt) @@ -130,7 +130,7 @@ return vessel.remove_any(amt) //Transfers blood from reagents to vessel, respecting blood types compatability. -/mob/living/carbon/human/inject_blood(var/amount, var/datum/reagents/donor) +/mob/living/human/inject_blood(var/amount, var/datum/reagents/donor) if(!should_have_organ(BP_HEART)) add_to_reagents(species.blood_reagent, amount, REAGENT_DATA(donor, species.blood_reagent)) return @@ -146,7 +146,7 @@ adjust_blood(amount, injected_data) ..() -/mob/living/carbon/human/proc/regenerate_blood(var/amount) +/mob/living/human/proc/regenerate_blood(var/amount) amount *= (species.blood_volume / SPECIES_BLOOD_DEFAULT) var/stress_modifier = get_stress_modifier() @@ -160,7 +160,7 @@ return amount //For humans, blood does not appear from blue, it comes from vessels. -/mob/living/carbon/human/take_blood(obj/item/chems/container, var/amount) +/mob/living/human/take_blood(obj/item/chems/container, var/amount) if(!vessel) make_blood() @@ -177,11 +177,11 @@ return 1 //Percentage of maximum blood volume. -/mob/living/carbon/human/proc/get_blood_volume() +/mob/living/human/proc/get_blood_volume() return species.blood_volume ? round((vessel.total_volume/species.blood_volume)*100) : 0 //Percentage of maximum blood volume, affected by the condition of circulation organs -/mob/living/carbon/human/proc/get_blood_circulation() +/mob/living/human/proc/get_blood_circulation() var/obj/item/organ/internal/heart/heart = get_organ(BP_HEART, /obj/item/organ/internal/heart) @@ -218,11 +218,11 @@ return min(blood_volume, 100) //Whether the species needs blood to carry oxygen. Used in get_blood_oxygenation and may be expanded based on blood rather than species in the future. -/mob/living/carbon/human/proc/blood_carries_oxygen() +/mob/living/human/proc/blood_carries_oxygen() return species.blood_oxy //Percentage of maximum blood volume, affected by the condition of circulation organs, affected by the oxygen loss. What ultimately matters for brain -/mob/living/carbon/human/proc/get_blood_oxygenation() +/mob/living/human/proc/get_blood_oxygenation() var/blood_volume = get_blood_circulation() if(blood_carries_oxygen()) if(is_asystole()) // Heart is missing or isn't beating and we're not breathing (hardcrit) diff --git a/code/modules/mob/living/human/human_damage.dm b/code/modules/mob/living/human/human_damage.dm index 0d9d781d1e6..0e04852a94a 100644 --- a/code/modules/mob/living/human/human_damage.dm +++ b/code/modules/mob/living/human/human_damage.dm @@ -1,24 +1,24 @@ -/mob/living/carbon/human/get_life_damage_types() - var/static/list/life_damage_types = list( +/mob/living/human/get_life_damage_types() + var/static/list/brain_life_damage_types = list( BRAIN ) - return life_damage_types + return brain_life_damage_types //Updates the mob's health from organs and mob damage variables -/mob/living/carbon/human/update_health() +/mob/living/human/update_health() . = ..() //TODO: fix husking if(. && stat == DEAD && (get_damage(BRUTE) - get_damage(BURN)) < get_config_value(/decl/config/num/health_health_threshold_dead)) - make_husked() + add_genetic_condition(GENE_COND_HUSK) -/mob/living/carbon/human/adjustBrainLoss(var/amount, var/do_update_health = TRUE) +/mob/living/human/adjustBrainLoss(var/amount, var/do_update_health = TRUE) if(!(status_flags & GODMODE) && should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(src, BP_BRAIN) if(sponge) sponge.take_internal_damage(amount) ..() -/mob/living/carbon/human/setBrainLoss(var/amount) +/mob/living/human/setBrainLoss(var/amount) if(status_flags & GODMODE) return 0 //godmode if(should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(src, BP_BRAIN) @@ -26,7 +26,7 @@ sponge.damage = min(max(amount, 0),sponge.species.total_health) update_health() -/mob/living/carbon/human/getBrainLoss() +/mob/living/human/getBrainLoss() if(status_flags & GODMODE) return 0 //godmode if(should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(src, BP_BRAIN) @@ -40,17 +40,17 @@ return 0 //Straight pain values, not affected by painkillers etc -/mob/living/carbon/human/getHalLoss() +/mob/living/human/getHalLoss() if(isnull(last_pain)) last_pain = 0 for(var/obj/item/organ/external/E in get_external_organs()) last_pain += E.get_pain() return last_pain -/mob/living/carbon/human/setHalLoss(var/amount) +/mob/living/human/setHalLoss(var/amount) take_damage(get_damage(PAIN)-amount, PAIN) -/mob/living/carbon/human/adjustHalLoss(var/amount, var/do_update_health = TRUE) +/mob/living/human/adjustHalLoss(var/amount, var/do_update_health = TRUE) var/heal = (amount < 0) amount = abs(amount) var/list/limbs = get_external_organs() @@ -71,7 +71,7 @@ update_health() //These procs fetch a cumulative total damage from all organs -/mob/living/carbon/human/getBruteLoss() +/mob/living/human/getBruteLoss() var/amount = 0 for(var/obj/item/organ/external/O in get_external_organs()) if(BP_IS_PROSTHETIC(O) && !O.is_vital_to_owner()) @@ -79,7 +79,7 @@ amount += O.brute_dam return amount -/mob/living/carbon/human/getFireLoss() +/mob/living/human/getFireLoss() var/amount = 0 for(var/obj/item/organ/external/O in get_external_organs()) if(BP_IS_PROSTHETIC(O) && !O.is_vital_to_owner()) @@ -87,7 +87,7 @@ amount += O.burn_dam return amount -/mob/living/carbon/human/adjustBruteLoss(var/amount, var/do_update_health = TRUE) +/mob/living/human/adjustBruteLoss(var/amount, var/do_update_health = TRUE) SHOULD_CALL_PARENT(FALSE) // take/heal overall call update_health regardless of arg if(amount > 0) take_overall_damage(amount, 0) @@ -95,23 +95,23 @@ heal_overall_damage(-amount, 0) BITSET(hud_updateflag, HEALTH_HUD) -/mob/living/carbon/human/adjustFireLoss(var/amount, var/do_update_health = TRUE) +/mob/living/human/adjustFireLoss(var/amount, var/do_update_health = TRUE) if(amount > 0) take_overall_damage(0, amount) else heal_overall_damage(0, -amount) BITSET(hud_updateflag, HEALTH_HUD) -/mob/living/carbon/human/getCloneLoss() +/mob/living/human/getCloneLoss() var/amount = 0 for(var/obj/item/organ/external/E in get_external_organs()) amount += E.get_genetic_damage() return amount -/mob/living/carbon/human/setCloneLoss(var/amount) +/mob/living/human/setCloneLoss(var/amount) take_damage(get_damage(CLONE)-amount, CLONE) -/mob/living/carbon/human/adjustCloneLoss(var/amount, var/do_update_health = TRUE) +/mob/living/human/adjustCloneLoss(var/amount, var/do_update_health = TRUE) var/heal = amount < 0 amount = abs(amount) var/list/limbs = get_external_organs() @@ -127,19 +127,19 @@ BITSET(hud_updateflag, HEALTH_HUD) ..() -/mob/living/carbon/human/proc/getOxyLossPercent() +/mob/living/human/proc/getOxyLossPercent() return (get_damage(OXY) / species.total_health) * 100 -/mob/living/carbon/human/getOxyLoss() +/mob/living/human/getOxyLoss() if(need_breathe()) var/obj/item/organ/internal/lungs/breathe_organ = get_organ(get_bodytype().breathing_organ, /obj/item/organ/internal/lungs) return breathe_organ ? breathe_organ.oxygen_deprivation : species.total_health return 0 -/mob/living/carbon/human/setOxyLoss(var/amount) +/mob/living/human/setOxyLoss(var/amount) take_damage(amount - get_damage(OXY), OXY) -/mob/living/carbon/human/adjustOxyLoss(var/damage, var/do_update_health = TRUE) +/mob/living/human/adjustOxyLoss(var/damage, var/do_update_health = TRUE) . = FALSE if(need_breathe()) var/obj/item/organ/internal/lungs/breathe_organ = get_organ(get_bodytype().breathing_organ, /obj/item/organ/internal/lungs) @@ -149,7 +149,7 @@ . = TRUE ..(do_update_health = FALSE) // Oxyloss cannot directly kill humans -/mob/living/carbon/human/getToxLoss() +/mob/living/human/getToxLoss() if((species.species_flags & SPECIES_FLAG_NO_POISON) || isSynthetic()) return 0 var/amount = 0 @@ -157,12 +157,12 @@ amount += I.getToxLoss() return amount -/mob/living/carbon/human/setToxLoss(var/amount) +/mob/living/human/setToxLoss(var/amount) if(!(species.species_flags & SPECIES_FLAG_NO_POISON) && !isSynthetic()) take_damage(get_damage(TOX)-amount, TOX) // TODO: better internal organ damage procs. -/mob/living/carbon/human/adjustToxLoss(var/amount, var/do_update_health = TRUE) +/mob/living/human/adjustToxLoss(var/amount, var/do_update_health = TRUE) if((species.species_flags & SPECIES_FLAG_NO_POISON) || isSynthetic()) return @@ -218,7 +218,7 @@ if(do_update_health) update_health() -/mob/living/carbon/human/proc/can_autoheal(var/dam_type) +/mob/living/human/proc/can_autoheal(var/dam_type) if(!species || !dam_type) return FALSE if(dam_type == BRUTE || dam_type == BURN) @@ -228,7 +228,7 @@ //////////////////////////////////////////// //Returns a list of damaged organs -/mob/living/carbon/human/proc/get_damaged_organs(var/brute, var/burn) +/mob/living/human/proc/get_damaged_organs(var/brute, var/burn) var/list/obj/item/organ/external/parts = list() for(var/obj/item/organ/external/O in get_external_organs()) if((brute && O.brute_dam) || (burn && O.burn_dam)) @@ -236,7 +236,7 @@ return parts //Returns a list of damageable organs -/mob/living/carbon/human/proc/get_damageable_organs() +/mob/living/human/proc/get_damageable_organs() var/list/obj/item/organ/external/parts = list() for(var/obj/item/organ/external/O in get_external_organs()) if(O.is_damageable()) @@ -246,7 +246,7 @@ //Heals ONE external organ, organ gets randomly selected from damaged ones. //It automatically updates damage overlays if necesary //It automatically updates health status -/mob/living/carbon/human/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE, var/update_health = TRUE) +/mob/living/human/heal_organ_damage(var/brute, var/burn, var/affect_robo = FALSE, var/update_health = TRUE) var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) if(!parts.len) return var/obj/item/organ/external/picked = pick(parts) @@ -263,7 +263,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t //Damages ONE external organ, organ gets randomly selected from damagable ones. //It automatically updates damage overlays if necesary //It automatically updates health status -/mob/living/carbon/human/take_organ_damage(var/brute = 0, var/burn = 0, var/bypass_armour = FALSE, var/override_droplimb) +/mob/living/human/take_organ_damage(var/brute = 0, var/burn = 0, var/bypass_armour = FALSE, var/override_droplimb) var/list/parts = get_damageable_organs() if(!length(parts)) return @@ -273,7 +273,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t update_health() //Heal MANY external organs, in random order -/mob/living/carbon/human/heal_overall_damage(var/brute, var/burn) +/mob/living/human/heal_overall_damage(var/brute, var/burn) var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) while(parts.len && (brute>0 || burn>0) ) @@ -292,7 +292,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t BITSET(hud_updateflag, HEALTH_HUD) // damage MANY external organs, in random order -/mob/living/carbon/human/take_overall_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0, var/used_weapon = null) +/mob/living/human/take_overall_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0, var/used_weapon = null) if(status_flags & GODMODE) return //godmode @@ -320,17 +320,17 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t /* This function restores all organs. */ -/mob/living/carbon/human/restore_all_organs(var/ignore_organ_aspects) +/mob/living/human/restore_all_organs(var/ignore_organ_aspects) get_bodytype()?.create_missing_organs(src) // root body part should never be missing on a mob for(var/bodypart in global.all_limb_tags_by_depth) var/obj/item/organ/external/current_organ = GET_EXTERNAL_ORGAN(src, bodypart) if(current_organ) current_organ.rejuvenate(ignore_organ_aspects) recheck_bad_external_organs() - verbs -= /mob/living/carbon/human/proc/undislocate + verbs -= /mob/living/human/proc/undislocate -/mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/damage_flags = 0, var/obj/used_weapon = null, var/armor_pen, var/silent = FALSE, var/obj/item/organ/external/given_organ = null) +/mob/living/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/damage_flags = 0, var/obj/used_weapon = null, var/armor_pen, var/silent = FALSE, var/obj/item/organ/external/given_organ = null) if(status_flags & GODMODE) return //godmode @@ -392,7 +392,7 @@ This function restores all organs. return created_wound // Find out in how much pain the mob is at the moment. -/mob/living/carbon/human/proc/get_shock() +/mob/living/human/proc/get_shock() if (!can_feel_pain()) return 0 diff --git a/code/modules/mob/living/human/human_defense.dm b/code/modules/mob/living/human/human_defense.dm index 8011c3258a9..8968e71fdf1 100644 --- a/code/modules/mob/living/human/human_defense.dm +++ b/code/modules/mob/living/human/human_defense.dm @@ -7,7 +7,7 @@ meteor_act */ -/mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone) +/mob/living/human/bullet_act(var/obj/item/projectile/P, var/def_zone) def_zone = check_zone(def_zone, src) if(!has_organ(def_zone)) @@ -28,7 +28,7 @@ meteor_act return blocked -/mob/living/carbon/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone) +/mob/living/human/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(src, def_zone) if(!affected) return @@ -47,7 +47,7 @@ meteor_act ..(stun_amount, agony_amount, def_zone) -/mob/living/carbon/human/get_blocked_ratio(def_zone, damage_type, damage_flags, armor_pen, damage) +/mob/living/human/get_blocked_ratio(def_zone, damage_type, damage_flags, armor_pen, damage) if(!def_zone && (damage_flags & DAM_DISPERSED)) var/tally for(var/zone in organ_rel_size) @@ -58,7 +58,7 @@ meteor_act return return ..() -/mob/living/carbon/human/get_armors_by_zone(obj/item/organ/external/def_zone, damage_type, damage_flags) +/mob/living/human/get_armors_by_zone(obj/item/organ/external/def_zone, damage_type, damage_flags) if(!def_zone) def_zone = ran_zone() if(!istype(def_zone)) @@ -85,7 +85,7 @@ meteor_act // Add inherent armor to the end of list so that protective equipment is checked first . += ..() -/mob/living/carbon/human/proc/check_head_coverage() +/mob/living/human/proc/check_head_coverage() for(var/slot in global.standard_headgear_slots) var/obj/item/clothing/clothes = get_equipped_item(slot) if(istype(clothes) && (clothes.body_parts_covered & SLOT_HEAD)) @@ -93,13 +93,13 @@ meteor_act return FALSE //Used to check if they can be fed food/drinks/pills -/mob/living/carbon/human/check_mouth_coverage() +/mob/living/human/check_mouth_coverage() for(var/slot in global.standard_headgear_slots) var/obj/item/gear = get_equipped_item(slot) if(istype(gear) && (gear.body_parts_covered & SLOT_FACE) && !(gear.item_flags & ITEM_FLAG_FLEXIBLEMATERIAL)) return gear -/mob/living/carbon/human/resolve_item_attack(obj/item/I, mob/living/user, var/target_zone) +/mob/living/human/resolve_item_attack(obj/item/I, mob/living/user, var/target_zone) for (var/obj/item/grab/G in grabbed_by) if(G.resolve_item_attack(user, I, target_zone)) @@ -129,7 +129,7 @@ meteor_act return hit_zone -/mob/living/carbon/human/hit_with_weapon(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) +/mob/living/human/hit_with_weapon(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(src, hit_zone) if(!affecting) return //should be prevented by attacked_with_item() but for sanity. @@ -145,7 +145,7 @@ meteor_act return standard_weapon_hit_effects(I, user, effective_force, hit_zone) -/mob/living/carbon/human/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) +/mob/living/human/standard_weapon_hit_effects(obj/item/I, mob/living/user, var/effective_force, var/hit_zone) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(src, hit_zone) if(!affecting) return 0 @@ -189,7 +189,7 @@ meteor_act return 1 -/mob/living/carbon/human/proc/attack_bloody(obj/item/W, mob/attacker, var/effective_force, var/hit_zone) +/mob/living/human/proc/attack_bloody(obj/item/W, mob/attacker, var/effective_force, var/hit_zone) if(W.atom_damage_type != BRUTE) return @@ -209,7 +209,7 @@ meteor_act if(istype(location) && location.simulated) location.add_blood(src) if(ishuman(attacker)) - var/mob/living/carbon/human/H = attacker + var/mob/living/human/H = attacker if(get_dist(H, src) <= 1) //people with TK won't get smeared with blood H.bloody_body(src) H.bloody_hands(src) @@ -231,7 +231,7 @@ meteor_act if(BP_CHEST) bloody_body(src) -/mob/living/carbon/human/proc/projectile_hit_bloody(obj/item/projectile/P, var/effective_force, var/hit_zone, var/obj/item/organ/external/organ) +/mob/living/human/proc/projectile_hit_bloody(obj/item/projectile/P, var/effective_force, var/hit_zone, var/obj/item/organ/external/organ) if(P.atom_damage_type != BRUTE || P.nodamage) return if(!(P.sharp || prob(effective_force*4))) @@ -248,7 +248,7 @@ meteor_act C.add_blood(src) C.update_clothing_icon() -/mob/living/carbon/human/proc/attack_joint(var/obj/item/organ/external/organ, var/obj/item/W, var/effective_force, var/dislocate_mult, var/blocked) +/mob/living/human/proc/attack_joint(var/obj/item/organ/external/organ, var/obj/item/W, var/effective_force, var/dislocate_mult, var/blocked) if(!organ || organ.is_dislocated() || !(organ.limb_flags & ORGAN_FLAG_CAN_DISLOCATE) || blocked >= 100) return 0 if(W.atom_damage_type != BRUTE) @@ -262,7 +262,7 @@ meteor_act return 1 return 0 -/mob/living/carbon/human/emag_act(var/remaining_charges, mob/user, var/emag_source) +/mob/living/human/emag_act(var/remaining_charges, mob/user, var/emag_source) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(src, user.get_target_zone()) if(!affecting || !affecting.is_robotic()) to_chat(user, "That limb isn't robotic.") @@ -274,7 +274,7 @@ meteor_act affecting.status |= ORGAN_SABOTAGED return 1 -/mob/living/carbon/human/hitby(atom/movable/AM, var/datum/thrownthing/TT) +/mob/living/human/hitby(atom/movable/AM, var/datum/thrownthing/TT) // empty active hand and we're in throw mode, so we can catch it if(isobj(AM) && in_throw_mode && !get_active_held_item() && TT.speed <= THROWFORCE_SPEED_DIVISOR && !incapacitated() && isturf(AM.loc)) put_in_active_hand(AM) @@ -284,7 +284,7 @@ meteor_act return FALSE return ..() -/mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) +/mob/living/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) var/obj/item/clothing/gloves/gloves = get_equipped_item(slot_gloves_str) if(istype(gloves)) gloves.add_blood(source, amount) @@ -293,7 +293,7 @@ meteor_act //updates on-mob overlays for bloody hands and/or bloody gloves update_equipment_overlay(slot_gloves_str) -/mob/living/carbon/human/proc/bloody_body(var/mob/living/source) +/mob/living/human/proc/bloody_body(var/mob/living/source) var/obj/item/gear = get_equipped_item(slot_wear_suit_str) if(gear) gear.add_blood(source) @@ -303,7 +303,7 @@ meteor_act gear.add_blood(source) update_equipment_overlay(slot_w_uniform_str, redraw_mob = FALSE) -/mob/living/carbon/human/proc/handle_suit_punctures(var/damtype, var/damage, var/def_zone) +/mob/living/human/proc/handle_suit_punctures(var/damtype, var/damage, var/def_zone) // Tox and oxy don't matter to suits. if(damtype != BURN && damtype != BRUTE) return @@ -318,7 +318,7 @@ meteor_act if(istype(suit)) suit.create_breaches(damtype, damage) -/mob/living/carbon/human/reagent_permeability() +/mob/living/human/reagent_permeability() var/perm = 0 var/list/perm_by_part = list( @@ -354,7 +354,7 @@ meteor_act return perm -/mob/living/carbon/human/lava_act(datum/gas_mixture/air, temperature, pressure) +/mob/living/human/lava_act(datum/gas_mixture/air, temperature, pressure) var/was_burned = FireBurn(0.4 * vsc.fire_firelevel_multiplier, temperature, pressure) if (was_burned) fire_act(air, temperature) @@ -362,7 +362,7 @@ meteor_act //Removed the horrible safety parameter. It was only being used by ninja code anyways. //Now checks siemens_coefficient of the affected area by default -/mob/living/carbon/human/electrocute_act(var/shock_damage, var/obj/source, var/base_siemens_coeff = 1.0, var/def_zone = null) +/mob/living/human/electrocute_act(var/shock_damage, var/obj/source, var/base_siemens_coeff = 1.0, var/def_zone = null) if(status_flags & GODMODE) return 0 //godmode @@ -415,7 +415,7 @@ meteor_act return shock_damage -/mob/living/carbon/human/explosion_act(severity) +/mob/living/human/explosion_act(severity) ..() if(QDELETED(src)) return @@ -454,7 +454,7 @@ meteor_act //Used by various things that knock people out by applying blunt trauma to the head. //Checks that the species has a "head" (brain containing organ) and that hit_zone refers to it. -/mob/living/carbon/human/proc/headcheck(var/target_zone, var/brain_tag = BP_BRAIN) +/mob/living/human/proc/headcheck(var/target_zone, var/brain_tag = BP_BRAIN) target_zone = check_zone(target_zone, src) @@ -470,27 +470,19 @@ meteor_act return prob(100 / 2**(head.w_class - brain.w_class - 1)) return TRUE -/mob/living/carbon/human/flash_eyes(var/intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) - var/decl/bodytype/root_bodytype = get_bodytype() - if(root_bodytype.has_organ[root_bodytype.vision_organ]) - var/obj/item/organ/internal/eyes/I = get_organ(root_bodytype.vision_organ, /obj/item/organ/internal/eyes) +/mob/living/human/flash_eyes(var/intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) + var/vision_organ_tag = get_vision_organ_tag() + if(vision_organ_tag) + var/obj/item/organ/internal/eyes/I = get_organ(vision_organ_tag, /obj/item/organ/internal/eyes) if(I) I.additional_flash_effects(intensity) return ..() -/mob/living/carbon/human/proc/getFlashMod() - var/decl/bodytype/root_bodytype = get_bodytype() - if(root_bodytype.vision_organ) - var/obj/item/organ/internal/eyes/I = get_organ(root_bodytype.vision_organ, /obj/item/organ/internal/eyes) - if(I) // get_organ with a type passed already does a typecheck - return I.get_flash_mod() - return root_bodytype.eye_flash_mod - /* Contians the proc to handle radiation. Specifically made to do radiation burns. */ -/mob/living/carbon/human/apply_radiation(damage) +/mob/living/human/apply_radiation(damage) ..() if(!isSynthetic() && !ignore_rads) damage = 0.25 * damage * (species ? species.get_radiation_mod(src) : 1) diff --git a/code/modules/mob/living/human/human_defines.dm b/code/modules/mob/living/human/human_defines.dm index af8c3bc7cf4..71c332ff74b 100644 --- a/code/modules/mob/living/human/human_defines.dm +++ b/code/modules/mob/living/human/human_defines.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human +/mob/living/human ai = /datum/ai/human mob_bump_flag = HUMAN diff --git a/code/modules/mob/living/human/human_grabs.dm b/code/modules/mob/living/human/human_grabs.dm index 37c1c45832a..dc1476fecc2 100644 --- a/code/modules/mob/living/human/human_grabs.dm +++ b/code/modules/mob/living/human/human_grabs.dm @@ -1,10 +1,10 @@ -/mob/living/carbon/human/add_grab(var/obj/item/grab/grab, var/defer_hand = FALSE) +/mob/living/human/add_grab(var/obj/item/grab/grab, var/defer_hand = FALSE) if(defer_hand) . = put_in_hands(grab) else . = put_in_active_hand(grab) -/mob/living/carbon/human/can_be_grabbed(var/mob/grabber, var/target_zone, var/defer_hand = FALSE) +/mob/living/human/can_be_grabbed(var/mob/grabber, var/target_zone, var/defer_hand = FALSE) . = ..() if(.) var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(src, check_zone(target_zone, src)) @@ -28,7 +28,7 @@ if(istype(C)) C.leave_evidence(grabber) -/mob/living/carbon/human/make_grab(atom/movable/target, grab_tag = /decl/grab/simple, defer_hand = FALSE, force_grab_tag = FALSE) +/mob/living/human/make_grab(atom/movable/target, grab_tag = /decl/grab/simple, defer_hand = FALSE, force_grab_tag = FALSE) . = ..() if(.) remove_cloaking_source(species) diff --git a/code/modules/mob/living/human/human_helpers.dm b/code/modules/mob/living/human/human_helpers.dm index a1a6a17a2c7..d5e995232d8 100644 --- a/code/modules/mob/living/human/human_helpers.dm +++ b/code/modules/mob/living/human/human_helpers.dm @@ -7,7 +7,7 @@ flash_protection += C.flash_protection; \ equipment_tint_total += C.get_equipment_tint(); -/mob/living/carbon/human/can_eat(var/food, var/feedback = 1) +/mob/living/human/can_eat(var/food, var/feedback = 1) var/list/status = can_eat_status() if(status[1] == HUMAN_EATING_NO_ISSUE) return 1 @@ -18,7 +18,7 @@ to_chat(src, "\The [status[2]] is in the way!") return 0 -/mob/living/carbon/human/can_force_feed(var/feeder, var/food, var/feedback = 1) +/mob/living/human/can_force_feed(var/feeder, var/food, var/feedback = 1) var/list/status = can_eat_status() if(status[1] == HUMAN_EATING_NO_ISSUE) return 1 @@ -29,7 +29,7 @@ to_chat(feeder, "\The [status[2]] is in the way!") return 0 -/mob/living/carbon/human/proc/can_eat_status() +/mob/living/human/proc/can_eat_status() if(!check_has_mouth()) return list(HUMAN_EATING_NBP_MOUTH) var/obj/item/blocked = check_mouth_coverage() @@ -41,7 +41,7 @@ #undef HUMAN_EATING_NBP_MOUTH #undef HUMAN_EATING_BLOCKED_MOUTH -/mob/living/carbon/human/proc/update_equipment_vision() +/mob/living/human/proc/update_equipment_vision() flash_protection = 0 equipment_tint_total = 0 equipment_see_invis = 0 @@ -69,7 +69,7 @@ if(rig) process_rig(rig) -/mob/living/carbon/human/proc/process_glasses(var/obj/item/clothing/glasses/G) +/mob/living/human/proc/process_glasses(var/obj/item/clothing/glasses/G) if(G) // prescription applies regardless of if the glasses are active equipment_prescription += G.prescription @@ -88,12 +88,12 @@ add_clothing_protection(G) G.process_hud(src) -/mob/living/carbon/human/proc/process_rig(var/obj/item/rig/O) +/mob/living/human/proc/process_rig(var/obj/item/rig/O) var/obj/item/head = get_equipped_item(slot_head_str) if(O.visor && O.visor.active && O.visor.vision && O.visor.vision.glasses && (!O.helmet || (head && O.helmet == head))) process_glasses(O.visor.vision.glasses) -/mob/living/carbon/human/fully_replace_character_name(var/new_name, var/in_depth = TRUE) +/mob/living/human/fully_replace_character_name(var/new_name, var/in_depth = TRUE) var/old_name = real_name . = ..() if(!. || !in_depth) @@ -124,10 +124,10 @@ if(rig?.update_visible_name) rig.visible_name = real_name -/mob/living/carbon/human +/mob/living/human var/next_sonar_ping = 0 -/mob/living/carbon/human/proc/sonar_ping() +/mob/living/human/proc/sonar_ping() set name = "Listen In" set desc = "Allows you to listen in to movement and noises around you." set category = "IC" @@ -179,14 +179,14 @@ if(!heard_something) to_chat(src, "You hear no movement but your own.") -/mob/living/carbon/human/proc/has_headset_in_ears() +/mob/living/human/proc/has_headset_in_ears() return istype(get_equipped_item(slot_l_ear_str), /obj/item/radio/headset) || istype(get_equipped_item(slot_r_ear_str), /obj/item/radio/headset) -/mob/living/carbon/human/welding_eyecheck() - var/vision_organ = get_bodytype()?.vision_organ - if(!vision_organ) +/mob/living/human/welding_eyecheck() + var/vision_organ_tag = get_vision_organ_tag() + if(!vision_organ_tag) return - var/obj/item/organ/internal/eyes/E = get_organ(vision_organ, /obj/item/organ/internal/eyes) + var/obj/item/organ/internal/eyes/E = get_organ(vision_organ_tag, /obj/item/organ/internal/eyes) if(!E) return var/safety = eyecheck() @@ -218,15 +218,13 @@ to_chat(src, "You go blind!") SET_STATUS_MAX(src, STAT_BLIND, 5) SET_STATUS_MAX(src, STAT_BLURRY, 5) - disabilities |= NEARSIGHTED - spawn(100) - disabilities &= ~NEARSIGHTED + add_genetic_condition(GENE_COND_NEARSIGHTED, 10 SECONDS) -/mob/living/carbon/human +/mob/living/human var/list/cloaking_sources // Returns true if, and only if, the human has gone from uncloaked to cloaked -/mob/living/carbon/human/proc/add_cloaking_source(var/datum/cloaking_source) +/mob/living/human/proc/add_cloaking_source(var/datum/cloaking_source) var/has_uncloaked = clean_cloaking_sources() LAZYDISTINCTADD(cloaking_sources, weakref(cloaking_source)) @@ -241,7 +239,7 @@ #define CLOAK_APPEAR_SELF "You have re-appeared." // Returns true if, and only if, the human has gone from cloaked to uncloaked -/mob/living/carbon/human/proc/remove_cloaking_source(var/datum/cloaking_source) +/mob/living/human/proc/remove_cloaking_source(var/datum/cloaking_source) var/was_cloaked = LAZYLEN(cloaking_sources) clean_cloaking_sources() LAZYREMOVE(cloaking_sources, weakref(cloaking_source)) @@ -256,7 +254,7 @@ /mob/proc/is_cloaked() return FALSE -/mob/living/carbon/human/is_cloaked() +/mob/living/human/is_cloaked() if(clean_cloaking_sources()) update_icon() visible_message(CLOAK_APPEAR_OTHER, CLOAK_APPEAR_SELF) @@ -266,11 +264,11 @@ #undef CLOAK_APPEAR_SELF // Returns true if the human is cloaked by the given source -/mob/living/carbon/human/proc/is_cloaked_by(var/cloaking_source) +/mob/living/human/proc/is_cloaked_by(var/cloaking_source) return LAZYISIN(cloaking_sources, weakref(cloaking_source)) // Returns true if this operation caused the mob to go from cloaked to uncloaked -/mob/living/carbon/human/proc/clean_cloaking_sources() +/mob/living/human/proc/clean_cloaking_sources() if(!cloaking_sources) return FALSE @@ -288,16 +286,11 @@ UNSETEMPTY(cloaking_sources) return !cloaking_sources // If cloaking_sources wasn't initially null but is now, we've uncloaked -/mob/living/carbon/human/set_sdisability(sdisability) - if(isSynthetic()) - return // Can't cure disabilites, so don't give them. - ..() - -/mob/living/carbon/human/proc/has_meson_effect() +/mob/living/human/proc/has_meson_effect() var/datum/global_hud/global_hud = get_global_hud() return (global_hud.meson in equipment_overlays) -/mob/living/carbon/human/proc/is_in_pocket(var/obj/item/I) +/mob/living/human/proc/is_in_pocket(var/obj/item/I) for(var/slot in global.pocket_slots) if(get_equipped_item(slot) == I) return TRUE diff --git a/code/modules/mob/living/human/human_internals.dm b/code/modules/mob/living/human/human_internals.dm index 126045b5b00..f77c5000586 100644 --- a/code/modules/mob/living/human/human_internals.dm +++ b/code/modules/mob/living/human/human_internals.dm @@ -1,7 +1,7 @@ -/mob/living/carbon/human/get_internals() +/mob/living/human/get_internals() return internal -/mob/living/carbon/human/set_internals(obj/item/tank/source, source_string) +/mob/living/human/set_internals(obj/item/tank/source, source_string) ..() internal = source if(internals) diff --git a/code/modules/mob/living/human/human_maneuvers.dm b/code/modules/mob/living/human/human_maneuvers.dm index f106bf43d9c..b06ca93faea 100644 --- a/code/modules/mob/living/human/human_maneuvers.dm +++ b/code/modules/mob/living/human/human_maneuvers.dm @@ -1,12 +1,12 @@ -/mob/living/carbon/human/get_acrobatics_multiplier(var/decl/maneuver/attempting_maneuver) +/mob/living/human/get_acrobatics_multiplier(var/decl/maneuver/attempting_maneuver) . = 0.5 + ((get_skill_value(SKILL_HAULING) - SKILL_MIN)/(SKILL_MAX - SKILL_MIN)) if(skill_check(SKILL_HAULING, SKILL_BASIC)) . = max(..(), .) -/mob/living/carbon/human/get_jump_distance() +/mob/living/human/get_jump_distance() return species.standing_jump_range -/mob/living/carbon/human/can_do_maneuver(var/decl/maneuver/maneuver, var/silent = FALSE) +/mob/living/human/can_do_maneuver(var/decl/maneuver/maneuver, var/silent = FALSE) . = ..() if(.) if(nutrition <= 20) diff --git a/code/modules/mob/living/human/human_movement.dm b/code/modules/mob/living/human/human_movement.dm index ee9edbc2dd4..1a590d41e43 100644 --- a/code/modules/mob/living/human/human_movement.dm +++ b/code/modules/mob/living/human/human_movement.dm @@ -1,7 +1,7 @@ -/mob/living/carbon/human +/mob/living/human move_intents = list(/decl/move_intent/walk) -/mob/living/carbon/human/get_movement_delay(var/travel_dir) +/mob/living/human/get_movement_delay(var/travel_dir) var/tally = ..() var/obj/item/organ/external/H = GET_EXTERNAL_ORGAN(src, BP_GROIN) // gets bodytype slowdown, which can be reset by set_bodytype @@ -59,16 +59,16 @@ if (root_bodytype && bodytemperature < root_bodytype.cold_discomfort_level) tally += (root_bodytype.cold_discomfort_level - bodytemperature) / 10 * 1.75 - if(mRun in mutations) + if(has_genetic_condition(GENE_COND_RUNNING)) tally = 0 return (tally+get_config_value(/decl/config/num/movement_human)) -/mob/living/carbon/human/size_strength_mod() +/mob/living/human/size_strength_mod() . = ..() . += species.strength -/mob/living/carbon/human/space_do_move(var/allow_move, var/direction) +/mob/living/human/space_do_move(var/allow_move, var/direction) if(allow_move == 1) var/obj/item/tank/jetpack/thrust = get_jetpack() if(thrust && thrust.on && prob(skill_fail_chance(SKILL_EVA, 10, SKILL_ADEPT))) @@ -83,7 +83,7 @@ . = ..() -/mob/living/carbon/human/slip_chance(var/prob_slip = 5) +/mob/living/human/slip_chance(var/prob_slip = 5) if(!..()) return 0 //Check hands and mod slip @@ -96,7 +96,7 @@ prob_slip -= 1 return prob_slip -/mob/living/carbon/human/Check_Shoegrip() +/mob/living/human/Check_Shoegrip() if(species.check_no_slip(src)) return 1 var/obj/item/shoes = get_equipped_item(slot_shoes_str) @@ -104,7 +104,7 @@ return 1 return 0 -/mob/living/carbon/human/Move() +/mob/living/human/Move() . = ..() if(.) //We moved @@ -131,7 +131,7 @@ var/turf/B = GetAbove(src) up_hint.icon_state = "uphint[!!(B && TURF_IS_MIMICKING(B))]" -/mob/living/carbon/human/proc/handle_leg_damage() +/mob/living/human/proc/handle_leg_damage() if(!can_feel_pain()) return var/crutches = 0 @@ -145,5 +145,5 @@ else E.add_pain(10) -/mob/living/carbon/human/can_sprint() +/mob/living/human/can_sprint() return (stamina > 0) diff --git a/code/modules/mob/living/human/human_organs.dm b/code/modules/mob/living/human/human_organs.dm index eacb41a06fe..7dbeab31c6c 100644 --- a/code/modules/mob/living/human/human_organs.dm +++ b/code/modules/mob/living/human/human_organs.dm @@ -1,44 +1,44 @@ /// organ-related variables, see organ.dm and human_organs.dm, shouldn't be accessed directly -/mob/living/carbon/human +/mob/living/human /// organs we check until they are good. var/list/bad_external_organs /// organs grouped by category, largely used for stance calc var/list/organs_by_category - /// organs indexed by organ_tag + /// organs indexed by organ_tag var/list/organs_by_tag /// unassociated list of internal organs var/tmp/list/internal_organs /// unassociated list of external organs var/tmp/list/external_organs -/mob/living/carbon/human/get_organ(var/organ_tag, var/expected_type = /obj/item/organ) +/mob/living/human/get_organ(var/organ_tag, var/expected_type = /obj/item/organ) RETURN_TYPE(expected_type) var/obj/item/organ = LAZYACCESS(organs_by_tag, organ_tag) if(!expected_type || istype(organ, expected_type)) return organ -/mob/living/carbon/human/get_external_organs() +/mob/living/human/get_external_organs() return external_organs -/mob/living/carbon/human/get_internal_organs() +/mob/living/human/get_internal_organs() return internal_organs -/mob/living/carbon/human/has_organs() +/mob/living/human/has_organs() return (LAZYLEN(external_organs) + LAZYLEN(internal_organs)) > 0 -/mob/living/carbon/human/has_external_organs() +/mob/living/human/has_external_organs() return LAZYLEN(external_organs) > 0 -/mob/living/carbon/human/has_internal_organs() +/mob/living/human/has_internal_organs() return LAZYLEN(internal_organs) > 0 -/mob/living/carbon/human/get_organs_by_categories(var/list/categories) +/mob/living/human/get_organs_by_categories(var/list/categories) for(var/organ_cat in categories) if(organ_cat in organs_by_category) LAZYDISTINCTADD(., organs_by_category[organ_cat]) //Deletes all references to organs -/mob/living/carbon/human/delete_organs() +/mob/living/human/delete_organs() ..() organs_by_tag = null internal_organs = null @@ -49,13 +49,13 @@ //Registers an organ and setup the organ hierachy properly. //affected : Parent organ if applicable. //in_place : If true, we're performing an in-place replacement, without triggering anything related to adding the organ in-game as part of surgery or else. -/mob/living/carbon/human/add_organ(obj/item/organ/O, obj/item/organ/external/affected, in_place, update_icon, detached, skip_health_update = FALSE) +/mob/living/human/add_organ(obj/item/organ/O, obj/item/organ/external/affected, in_place, update_icon, detached, skip_health_update = FALSE) var/obj/item/organ/existing = LAZYACCESS(organs_by_tag, O.organ_tag) if(existing && O != existing) - CRASH("mob/living/carbon/human/add_organ(): '[O]' tried to overwrite [src]'s existing organ '[existing]' in slot '[O.organ_tag]'!") + CRASH("mob/living/human/add_organ(): '[O]' tried to overwrite [src]'s existing organ '[existing]' in slot '[O.organ_tag]'!") if(O.parent_organ && !LAZYACCESS(organs_by_tag, O.parent_organ)) - CRASH("mob/living/carbon/human/add_organ(): Tried to add an internal organ to a non-existing parent external organ!") + CRASH("mob/living/human/add_organ(): Tried to add an internal organ to a non-existing parent external organ!") //We don't add internal organs to the lists if we're detached if(O.is_internal() && !detached) @@ -93,7 +93,7 @@ //ignore_children: Skips recursively removing this organ's child organs. //in_place : If true we remove only the organ (no children items or implants) and avoid triggering mob changes and parent organs changes as much as possible. // Meant to be used for init and species transforms, without triggering any updates to mob state or anything related to losing a limb as part of surgery or combat. -/mob/living/carbon/human/remove_organ(var/obj/item/organ/O, var/drop_organ = TRUE, var/detach = TRUE, var/ignore_children = FALSE, var/in_place = FALSE, var/update_icon = TRUE, var/skip_health_update = FALSE) +/mob/living/human/remove_organ(var/obj/item/organ/O, var/drop_organ = TRUE, var/detach = TRUE, var/ignore_children = FALSE, var/in_place = FALSE, var/update_icon = TRUE, var/skip_health_update = FALSE) if(istype(O) && !in_place && O.is_vital_to_owner() && usr) admin_attack_log(usr, src, "Removed a vital organ ([src]).", "Had a vital organ ([src]) removed.", "removed a vital organ ([src]) from") if(!(. = ..())) @@ -120,23 +120,16 @@ hud_reset() queue_icon_update() //Avoids calling icon updates 50 times when removing multiple organs -/mob/living/carbon/human/get_bodytype() +/mob/living/human/get_bodytype() RETURN_TYPE(/decl/bodytype) // If the root organ ever changes/isn't always the chest, this will need to be changed. return get_organ(BP_CHEST, /obj/item/organ)?.bodytype -/mob/living/carbon/human/proc/update_eyes(update_icons = TRUE) - var/obj/item/organ/internal/eyes/eyes = get_organ((get_bodytype()?.vision_organ || BP_EYES), /obj/item/organ/internal/eyes) - if(eyes) - eyes.update_colour() - if(update_icons) - queue_icon_update() - -/mob/living/carbon/human/proc/get_bodypart_name(var/zone) +/mob/living/human/proc/get_bodypart_name(var/zone) var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(src, zone) return E?.name -/mob/living/carbon/human/proc/should_recheck_bad_external_organs() +/mob/living/human/proc/should_recheck_bad_external_organs() var/damage_this_tick = get_damage(TOX) for(var/obj/item/organ/external/O in get_external_organs()) damage_this_tick += O.burn_dam + O.brute_dam @@ -145,33 +138,38 @@ . = TRUE last_dam = damage_this_tick -/mob/living/carbon/human/proc/recheck_bad_external_organs() +/mob/living/human/proc/recheck_bad_external_organs() LAZYCLEARLIST(bad_external_organs) for(var/obj/item/organ/external/E in get_external_organs()) if(E.need_process()) LAZYDISTINCTADD(bad_external_organs, E) +/mob/living/human/proc/check_vital_organ_missing() + return get_bodytype()?.check_vital_organ_missing(src) + +/mob/living/human/proc/process_internal_organs() + for(var/obj/item/organ/I in internal_organs) + I.Process() + // Takes care of organ related updates, such as broken and missing limbs -/mob/living/carbon/human/proc/handle_organs() +/mob/living/human/proc/handle_organs() // Check for the presence (or lack of) vital organs like the brain. // Set a timer after this point, since we want a little bit of // wiggle room before the body dies for good (brain transplants). if(stat != DEAD) - var/decl/bodytype/root_bodytype = get_bodytype() - if(root_bodytype.check_vital_organ_missing(src)) + if(check_vital_organ_missing()) SET_STATUS_MAX(src, STAT_PARA, 5) if(vital_organ_missing_time) if(world.time >= vital_organ_missing_time) death() else - vital_organ_missing_time = world.time + root_bodytype.vital_organ_failure_death_delay + vital_organ_missing_time = world.time + max(get_bodytype()?.vital_organ_failure_death_delay, 5 SECONDS) else vital_organ_missing_time = null //processing internal organs is pretty cheap, do that first. - for(var/obj/item/organ/I in internal_organs) - I.Process() + process_internal_organs() var/force_process = should_recheck_bad_external_organs() @@ -204,18 +202,18 @@ if (W.infection_check()) W.germ_level += 1 -/mob/living/carbon/human/is_asystole() - if(isSynthetic()) - var/obj/item/organ/internal/cell/C = get_organ(BP_CELL, /obj/item/organ/internal/cell) - if(!C || !C.is_usable() || !C.percent()) - return TRUE - else if(should_have_organ(BP_HEART)) - var/obj/item/organ/internal/heart/heart = get_organ(BP_HEART, /obj/item/organ/internal/heart) - if(!istype(heart) || !heart.is_working()) - return TRUE - return FALSE - -/mob/living/carbon/human/on_lost_organ(var/obj/item/organ/O) +/mob/living/human/proc/Check_Proppable_Object() + for(var/turf/T in RANGE_TURFS(src, 1)) //we only care for non-space turfs + if(T.density && T.simulated) //walls work + return 1 + + for(var/obj/O in orange(1, src)) + if(O && O.density && O.anchored) + return 1 + + return 0 + +/mob/living/human/on_lost_organ(var/obj/item/organ/O) if(!(. = ..())) return //Move some blood over to the organ diff --git a/code/modules/mob/living/human/human_powers.dm b/code/modules/mob/living/human/human_powers.dm index 0113513663c..8a2246c31eb 100644 --- a/code/modules/mob/living/human/human_powers.dm +++ b/code/modules/mob/living/human/human_powers.dm @@ -1,7 +1,7 @@ /**************** true human verbs ****************/ -/mob/living/carbon/human/proc/tie_hair() +/mob/living/human/proc/tie_hair() set name = "Tie Hair" set desc = "Style your hair." set category = "IC" @@ -39,7 +39,7 @@ /**************** misc alien verbs ****************/ -/mob/living/carbon/human/proc/psychic_whisper(mob/M as mob in oview()) +/mob/living/human/proc/psychic_whisper(mob/M as mob in oview()) set name = "Psychic Whisper" set desc = "Whisper silently to someone over a distance." set category = "Abilities" diff --git a/code/modules/mob/living/human/human_resist.dm b/code/modules/mob/living/human/human_resist.dm index 83306d717e2..0aaad35e2ee 100644 --- a/code/modules/mob/living/human/human_resist.dm +++ b/code/modules/mob/living/human/human_resist.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/process_resist() +/mob/living/human/process_resist() //drop && roll if(on_fire && !buckled) @@ -29,7 +29,7 @@ if(get_equipped_item(slot_handcuffed_str)) spawn() escape_handcuffs() -/mob/living/carbon/human/proc/escape_handcuffs() +/mob/living/human/proc/escape_handcuffs() //This line represent a significant buff to grabs... // We don't have to check the click cooldown because /mob/living/verb/resist() has done it for us, we can simply set the delay setClickCooldown(100) @@ -43,7 +43,7 @@ //A default in case you are somehow cuffed with something that isn't an obj/item/handcuffs type var/breakouttime = istype(cuffs) ? cuffs.breakouttime : 2 MINUTES - var/mob/living/carbon/human/H = src + var/mob/living/human/H = src if(istype(H) && istype(H.get_equipped_item(slot_gloves_str), /obj/item/clothing/gloves/rig)) breakouttime /= 2 @@ -95,7 +95,7 @@ drop_from_inventory(cuffs) return -/mob/living/carbon/human/proc/break_handcuffs() +/mob/living/human/proc/break_handcuffs() var/obj/item/cuffs = get_equipped_item(slot_handcuffed_str) visible_message( "[src] is trying to break \the [cuffs]!", diff --git a/code/modules/mob/living/human/human_skin.dm b/code/modules/mob/living/human/human_skin.dm index 5b37b43781f..54e4f7b3eab 100644 --- a/code/modules/mob/living/human/human_skin.dm +++ b/code/modules/mob/living/human/human_skin.dm @@ -1,7 +1,7 @@ -/mob/living/carbon/human +/mob/living/human var/skin_state = SKIN_NORMAL -/mob/living/carbon/human/proc/reset_skin() +/mob/living/human/proc/reset_skin() if(skin_state == SKIN_THREAT) skin_state = SKIN_NORMAL update_skin() \ No newline at end of file diff --git a/code/modules/mob/living/human/human_species.dm b/code/modules/mob/living/human/human_species.dm index 927f421d5ca..c6d9d61e914 100644 --- a/code/modules/mob/living/human/human_species.dm +++ b/code/modules/mob/living/human/human_species.dm @@ -1,29 +1,29 @@ -/mob/living/carbon/human/dummy +/mob/living/human/dummy real_name = "test dummy" status_flags = GODMODE|CANPUSH virtual_mob = null -/mob/living/carbon/human/dummy/mannequin/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) +/mob/living/human/dummy/mannequin/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) . = ..() STOP_PROCESSING(SSmobs, src) global.human_mob_list -= src -/mob/living/carbon/human/dummy/selfdress/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) +/mob/living/human/dummy/selfdress/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) ..() return INITIALIZE_HINT_LATELOAD -/mob/living/carbon/human/dummy/selfdress/LateInitialize() +/mob/living/human/dummy/selfdress/LateInitialize() for(var/obj/item/I in loc) equip_to_appropriate_slot(I) -/mob/living/carbon/human/corpse +/mob/living/human/corpse real_name = "corpse" -/mob/living/carbon/human/corpse/get_death_message(gibbed) +/mob/living/human/corpse/get_death_message(gibbed) return SKIP_DEATH_MESSAGE -/mob/living/carbon/human/corpse/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype, obj/abstract/landmark/corpse/corpse) - . = ..(mapload, species_name, new_dna, new_bodytype) // do not pass the corpse landmark +/mob/living/human/corpse/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance, obj/abstract/landmark/corpse/corpse) + . = ..(mapload, species_name, supplied_appearance) // do not pass the corpse landmark var/decl/cultural_info/culture = get_cultural_value(TAG_CULTURE) if(culture) var/newname = culture.get_random_name(src, gender, species.name) @@ -37,10 +37,10 @@ corpse.equip_corpse_outfit(src) return INITIALIZE_HINT_LATELOAD -/mob/living/carbon/human/corpse/get_death_message(gibbed) +/mob/living/human/corpse/get_death_message(gibbed) return SKIP_DEATH_MESSAGE -/mob/living/carbon/human/corpse/LateInitialize() +/mob/living/human/corpse/LateInitialize() ..() var/current_max_health = get_max_health() take_damage(current_max_health, OXY) //cease life functions @@ -50,22 +50,22 @@ if(corpse_heart) corpse_heart.pulse = PULSE_NONE//actually stops heart to make worried explorers not care too much -/mob/living/carbon/human/dummy/mannequin/add_to_living_mob_list() +/mob/living/human/dummy/mannequin/add_to_living_mob_list() return FALSE -/mob/living/carbon/human/dummy/mannequin/add_to_dead_mob_list() +/mob/living/human/dummy/mannequin/add_to_dead_mob_list() return FALSE -/mob/living/carbon/human/dummy/mannequin/fully_replace_character_name(new_name, in_depth = TRUE) +/mob/living/human/dummy/mannequin/fully_replace_character_name(new_name, in_depth = TRUE) ..("[new_name] (mannequin)", FALSE) -/mob/living/carbon/human/dummy/mannequin/InitializeHud() +/mob/living/human/dummy/mannequin/InitializeHud() return // Mannequins don't get HUDs -/mob/living/carbon/human/monkey +/mob/living/human/monkey gender = PLURAL -/mob/living/carbon/human/monkey/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) +/mob/living/human/monkey/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) if(gender == PLURAL) gender = pick(MALE, FEMALE) species_name = SPECIES_MONKEY diff --git a/code/modules/mob/living/human/human_verbs.dm b/code/modules/mob/living/human/human_verbs.dm index 853d3a7e19a..32acb3e52f2 100644 --- a/code/modules/mob/living/human/human_verbs.dm +++ b/code/modules/mob/living/human/human_verbs.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/proc/morph() +/mob/living/human/proc/morph() set name = "Morph" set category = "Superpower" @@ -7,8 +7,8 @@ remoteview_target = null return - if(!(mMorph in mutations)) - src.verbs -= /mob/living/carbon/human/proc/morph + if(!has_genetic_condition(GENE_COND_SHAPESHIFTER)) + src.verbs -= /mob/living/human/proc/morph return var/new_facial = input("Please select facial hair color.", "Character Generation", GET_FACIAL_HAIR_COLOUR(src)) as color @@ -67,12 +67,11 @@ update_hair() try_refresh_visible_overlays() - check_dna() var/decl/pronouns/G = get_pronouns() visible_message("\The [src] morphs and changes [G.his] appearance!", "You change your appearance!", "Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!") -/mob/living/carbon/human/proc/remotesay() +/mob/living/human/proc/remotesay() set name = "Project mind" set category = "Superpower" @@ -81,8 +80,8 @@ remoteview_target = null return - if(!(mRemotetalk in src.mutations)) - src.verbs -= /mob/living/carbon/human/proc/remotesay + if(!has_genetic_condition(GENE_COND_REMOTE_TALK)) + src.verbs -= /mob/living/human/proc/remotesay return var/list/creatures = list() for(var/mob/living/h in global.player_list) @@ -92,7 +91,7 @@ return var/say = sanitize(input("What do you wish to say")) - if(mRemotetalk in target.mutations) + if(target.has_genetic_condition(GENE_COND_REMOTE_TALK)) target.show_message("You hear [src.real_name]'s voice: [say]") else target.show_message("You hear a voice that seems to echo around the room: [say]") @@ -101,7 +100,7 @@ for(var/mob/observer/ghost/G in global.player_list) G.show_message("Telepathic message from [src] to [target]: [say]") -/mob/living/carbon/human/proc/remoteobserve() +/mob/living/human/proc/remoteobserve() set name = "Remote View" set category = "Superpower" @@ -110,10 +109,10 @@ reset_view(0) return - if(!(mRemote in src.mutations)) + if(!has_genetic_condition(GENE_COND_REMOTE_VIEW)) remoteview_target = null reset_view(0) - src.verbs -= /mob/living/carbon/human/proc/remoteobserve + src.verbs -= /mob/living/human/proc/remoteobserve return if(client.eye != client.mob) @@ -138,7 +137,7 @@ remoteview_target = null reset_view(0) -/mob/living/carbon/human/proc/remove_splints() +/mob/living/human/proc/remove_splints() set category = "Object" set name = "Remove Splints" set desc = "Carefully remove splints from someone's limbs." @@ -162,9 +161,9 @@ user.visible_message(SPAN_DANGER("\The [user] removes \the [src]'s splints!")) else to_chat(user, SPAN_WARNING("\The [src] has no splints that can be removed.")) - verbs -= /mob/living/carbon/human/proc/remove_splints + verbs -= /mob/living/human/proc/remove_splints -/mob/living/carbon/human/verb/check_pulse() +/mob/living/human/verb/check_pulse() set category = "Object" set name = "Check pulse" set desc = "Approximately count somebody's pulse. Requires you to stand still at least 6 seconds." @@ -198,7 +197,7 @@ else to_chat(usr, "You failed to check the pulse. Try again.") -/mob/living/carbon/human/proc/bloody_doodle() +/mob/living/human/proc/bloody_doodle() set category = "IC" set name = "Write in blood" set desc = "Use blood on your hands to write a short message on the floor or a wall, murder mystery style." @@ -214,7 +213,7 @@ if(grabber.coating) bloody_hands += REAGENT_VOLUME(grabber.coating, /decl/material/liquid/blood) if (!bloody_hands) - verbs -= /mob/living/carbon/human/proc/bloody_doodle + verbs -= /mob/living/human/proc/bloody_doodle var/obj/item/gloves = get_equipped_item(slot_gloves_str) if (gloves) @@ -259,7 +258,7 @@ W.message = message W.add_fingerprint(src) -/mob/living/carbon/human/proc/undislocate() +/mob/living/human/proc/undislocate() set category = "Object" set name = "Undislocate Joint" set desc = "Pop a joint back into place. Extremely painful." @@ -321,7 +320,7 @@ ) current_limb.undislocate() -/mob/living/carbon/human/verb/pull_punches() +/mob/living/human/verb/pull_punches() set name = "Switch Stance" set desc = "Try not to hurt them." set category = "IC" diff --git a/code/modules/mob/living/human/life.dm b/code/modules/mob/living/human/life.dm index bbbdf936373..8bc960c9226 100644 --- a/code/modules/mob/living/human/life.dm +++ b/code/modules/mob/living/human/life.dm @@ -20,10 +20,10 @@ #define COLD_GAS_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when the current breath's temperature passes the 200K point #define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point -/mob/living/carbon/human +/mob/living/human var/stamina = 100 -/mob/living/carbon/human/handle_living_non_stasis_processes() +/mob/living/human/handle_living_non_stasis_processes() . = ..() if(!.) return FALSE @@ -34,10 +34,10 @@ handle_pain() handle_stamina() -/mob/living/carbon/human/get_stamina() +/mob/living/human/get_stamina() return stamina -/mob/living/carbon/human/adjust_stamina(var/amt) +/mob/living/human/adjust_stamina(var/amt) var/last_stamina = stamina if(stat == DEAD) stamina = 0 @@ -52,12 +52,12 @@ if(last_stamina != stamina && istype(hud_used)) hud_used.update_stamina() -/mob/living/carbon/human/proc/handle_stamina() +/mob/living/human/proc/handle_stamina() if((world.time - last_quick_move_time) > 5 SECONDS) var/mod = (current_posture.prone + (nutrition / get_max_nutrition())) / 2 adjust_stamina(max(get_config_value(/decl/config/num/movement_max_stamina_recovery), get_config_value(/decl/config/num/movement_min_stamina_recovery) * mod) * (1 + GET_CHEMICAL_EFFECT(src, CE_ENERGETIC))) -/mob/living/carbon/human/set_stat(var/new_stat) +/mob/living/human/set_stat(var/new_stat) var/old_stat = stat . = ..() if(stat) @@ -69,7 +69,7 @@ // Calculate how vulnerable the human is to the current pressure. // Returns 0 (equals 0 %) if sealed in an undamaged suit that's rated for the pressure, 1 if unprotected (equals 100%). // Suitdamage can modifiy this in 10% steps. -/mob/living/carbon/human/proc/get_pressure_weakness(pressure) +/mob/living/human/proc/get_pressure_weakness(pressure) var/pressure_adjustment_coefficient = 0 var/list/zones = list(SLOT_HEAD, SLOT_UPPER_BODY, SLOT_LOWER_BODY, SLOT_LEGS, SLOT_FEET, SLOT_ARMS, SLOT_HANDS) @@ -86,7 +86,7 @@ return pressure_adjustment_coefficient // Calculate how much of the enviroment pressure-difference affects the human. -/mob/living/carbon/human/calculate_affecting_pressure(var/pressure) +/mob/living/human/calculate_affecting_pressure(var/pressure) var/pressure_difference // First get the absolute pressure difference. @@ -112,7 +112,7 @@ else return ONE_ATMOSPHERE + pressure_difference -/mob/living/carbon/human/handle_impaired_vision() +/mob/living/human/handle_impaired_vision() . = ..() if(!.) @@ -120,47 +120,36 @@ //Vision var/obj/item/organ/vision - var/decl/bodytype/root_bodytype = get_bodytype() - if(root_bodytype.vision_organ) - vision = GET_INTERNAL_ORGAN(src, root_bodytype.vision_organ) + var/vision_organ_tag = get_vision_organ_tag() + if(vision_organ_tag) + vision = GET_INTERNAL_ORGAN(src, vision_organ_tag) - if(!root_bodytype.vision_organ) // Presumably if a species has no vision organs, they see via some other means. + if(!vision_organ_tag) // Presumably if a species has no vision organs, they see via some other means. set_status(STAT_BLIND, 0) set_status(STAT_BLURRY, 0) else if(!vision || (vision && !vision.is_usable())) // Vision organs cut out or broken? Permablind. SET_STATUS_MAX(src, STAT_BLIND, 2) SET_STATUS_MAX(src, STAT_BLURRY, 1) // Non-genetic blindness; covered eyes will heal faster. - else if(!(sdisabilities & BLINDED) && equipment_tint_total >= TINT_BLIND) + else if(!has_genetic_condition(GENE_COND_BLINDED) && equipment_tint_total >= TINT_BLIND) ADJ_STATUS(src, STAT_BLURRY, -1) -/mob/living/carbon/human/handle_disabilities() +/mob/living/human/handle_disabilities() ..() - if(stat != DEAD && (disabilities & COUGHING) && prob(5) && GET_STATUS(src, STAT_PARA) <= 1) + if(stat != DEAD && has_genetic_condition(GENE_COND_COUGHING) && prob(5) && GET_STATUS(src, STAT_PARA) <= 1) drop_held_items() cough() -/mob/living/carbon/human/handle_mutations_and_radiation() - if(get_damage(BURN)) - if((MUTATION_COLD_RESISTANCE in mutations) || (prob(1))) - heal_organ_damage(0,1) - - // DNA2 - Gene processing. - var/list/all_genes = decls_repository.get_decls_of_subtype(/decl/gene) - for(var/gene_type in all_genes) - var/decl/gene/gene = all_genes[gene_type] - if(!gene.block) - continue - if(gene.is_active(src)) - gene.OnMobLife(src) - +/mob/living/human/handle_mutations_and_radiation() + if(get_damage(BURN) && (has_genetic_condition(GENE_COND_COLD_RESISTANCE) || (prob(1)))) + heal_organ_damage(0,1) ..() -/mob/living/carbon/human/handle_environment(datum/gas_mixture/environment) +/mob/living/human/handle_environment(datum/gas_mixture/environment) ..() - if(!environment || (MUTATION_SPACERES in mutations)) + if(!environment || has_genetic_condition(GENE_COND_SPACE_RESISTANCE)) return //Stuff like water absorbtion happens here. @@ -268,19 +257,19 @@ return -/mob/living/carbon/human/get_bodytemperature_difference() +/mob/living/human/get_bodytemperature_difference() if (on_fire) return 0 //too busy for pesky metabolic regulation return ..() -/mob/living/carbon/human/stabilize_body_temperature() +/mob/living/human/stabilize_body_temperature() // Robolimbs cause overheating too. if(robolimb_count) bodytemperature += round(robolimb_count/2) return ..() //This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, SLOT_UPPER_BODY, SLOT_LOWER_BODY, etc. See setup.dm for the full list) -/mob/living/carbon/human/proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. +/mob/living/human/proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. . = 0 //Handle normal clothing for(var/slot in global.standard_clothing_slots) @@ -294,7 +283,7 @@ . |= accessory.heat_protection //See proc/get_heat_protection_flags(temperature) for the description of this proc. -/mob/living/carbon/human/proc/get_cold_protection_flags(temperature) +/mob/living/human/proc/get_cold_protection_flags(temperature) . = 0 //Handle normal clothing for(var/slot in global.standard_clothing_slots) @@ -308,19 +297,19 @@ . |= accessory.cold_protection -/mob/living/carbon/human/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. +/mob/living/human/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. var/thermal_protection_flags = get_heat_protection_flags(temperature) return get_thermal_protection(thermal_protection_flags) -/mob/living/carbon/human/get_cold_protection(temperature) - if(MUTATION_COLD_RESISTANCE in mutations) +/mob/living/human/get_cold_protection(temperature) + if(has_genetic_condition(GENE_COND_COLD_RESISTANCE)) return 1 //Fully protected from the cold. temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. var/thermal_protection_flags = get_cold_protection_flags(temperature) return get_thermal_protection(thermal_protection_flags) -/mob/living/carbon/human/proc/get_thermal_protection(var/flags) +/mob/living/human/proc/get_thermal_protection(var/flags) .=0 if(flags) if(flags & SLOT_HEAD) @@ -347,13 +336,13 @@ . += THERMAL_PROTECTION_HAND_RIGHT return min(1,.) -/mob/living/carbon/human/apply_chemical_effects() +/mob/living/human/apply_chemical_effects() . = ..() if(has_chemical_effect(CE_GLOWINGEYES, 1)) update_eyes() return TRUE -/mob/living/carbon/human/handle_regular_status_updates() +/mob/living/human/handle_regular_status_updates() voice = GetVoice() SetName(get_visible_name()) @@ -418,7 +407,7 @@ SET_STATUS_MAX(src, STAT_ASLEEP, 5) -/mob/living/carbon/human/handle_regular_hud_updates() +/mob/living/human/handle_regular_hud_updates() if(life_tick%30==15) hud_updateflag = 1022 if(hud_updateflag) // update our mob's hud overlays, AKA what others see flaoting above our head @@ -602,7 +591,7 @@ bodytemp.icon_state = "temp0" return 1 -/mob/living/carbon/human/handle_random_events() +/mob/living/human/handle_random_events() // Puke if toxloss is too high var/vomit_score = 0 for(var/tag in list(BP_LIVER,BP_KIDNEYS)) @@ -633,7 +622,7 @@ to_chat(src,"You feel like you're [pick("moving","flying","floating","falling","hovering")].") #define BASE_SHOCK_RECOVERY 1 -/mob/living/carbon/human/proc/handle_shock() +/mob/living/human/proc/handle_shock() if(!can_feel_pain() || (status_flags & GODMODE)) shock_stage = 0 return @@ -713,7 +702,7 @@ we only set those statuses and icons upon changes. Then those HUD items will simply add those pre-made images. This proc below is only called when those HUD elements need to change as determined by the mobs hud_updateflag. */ -/mob/living/carbon/human/proc/handle_hud_list() +/mob/living/human/proc/handle_hud_list() if (BITTEST(hud_updateflag, HEALTH_HUD) && hud_list[HEALTH_HUD]) var/image/holder = hud_list[HEALTH_HUD] if(stat == DEAD) @@ -822,7 +811,7 @@ hud_list[SPECIALROLE_HUD] = holder hud_updateflag = 0 -/mob/living/carbon/human/handle_fire() +/mob/living/human/handle_fire() if(..()) return @@ -852,22 +841,21 @@ if(!(E.body_part & protected_limbs) && prob(20)) E.take_external_damage(burn = round(species_heat_mod * log(10, (burn_temperature + 10)), 0.1), used_weapon = "fire") -/mob/living/carbon/human/rejuvenate() +/mob/living/human/rejuvenate() reset_blood() full_prosthetic = null shock_stage = 0 ..() adjust_stamina(100) - UpdateAppearance() -/mob/living/carbon/human/reset_view(atom/A) +/mob/living/human/reset_view(atom/A) ..() if(machine_visual && machine_visual != A) machine_visual.remove_visual(src) if(eyeobj) eyeobj.remove_visual(src) -/mob/living/carbon/human/handle_vision() +/mob/living/human/handle_vision() if(client) var/datum/global_hud/global_hud = get_global_hud() client.screen.Remove(global_hud.nvg, global_hud.thermal, global_hud.meson, global_hud.science) @@ -879,14 +867,14 @@ set_sight(sight|viewflags) if(eyeobj && eyeobj.owner != src) reset_view(null) - if((mRemote in mutations) && remoteview_target && remoteview_target.stat != CONSCIOUS) + if(has_genetic_condition(GENE_COND_REMOTE_VIEW) && remoteview_target && remoteview_target.stat != CONSCIOUS) remoteview_target = null reset_view(null, 0) update_equipment_vision() species.handle_vision(src) -/mob/living/carbon/human/update_living_sight() +/mob/living/human/update_living_sight() ..() - if(GET_CHEMICAL_EFFECT(src, CE_THIRDEYE) || (MUTATION_XRAY in mutations)) + if(GET_CHEMICAL_EFFECT(src, CE_THIRDEYE) || has_genetic_condition(GENE_COND_XRAY)) set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS) diff --git a/code/modules/mob/living/human/login.dm b/code/modules/mob/living/human/login.dm index c74da53b8f1..3d8a8f70e2b 100644 --- a/code/modules/mob/living/human/login.dm +++ b/code/modules/mob/living/human/login.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/Login() +/mob/living/human/Login() ..() if(species) species.handle_login_special(src) diff --git a/code/modules/mob/living/human/logout.dm b/code/modules/mob/living/human/logout.dm index f449ce991ad..3c473576f41 100644 --- a/code/modules/mob/living/human/logout.dm +++ b/code/modules/mob/living/human/logout.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/Logout() +/mob/living/human/Logout() ..() if(species) species.handle_logout_special(src) return \ No newline at end of file diff --git a/code/modules/mob/living/human/npcs.dm b/code/modules/mob/living/human/npcs.dm index 5d8848332af..cf9786e1a08 100644 --- a/code/modules/mob/living/human/npcs.dm +++ b/code/modules/mob/living/human/npcs.dm @@ -1,12 +1,12 @@ -/mob/living/carbon/human/monkey/punpun +/mob/living/human/monkey/punpun real_name = "Pun Pun" gender = MALE -/mob/living/carbon/human/monkey/punpun/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) +/mob/living/human/monkey/punpun/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) ..() return INITIALIZE_HINT_LATELOAD -/mob/living/carbon/human/monkey/punpun/LateInitialize() +/mob/living/human/monkey/punpun/LateInitialize() ..() if(prob(50)) equip_to_appropriate_slot(new /obj/item/clothing/pants/slacks/black(src)) @@ -35,12 +35,12 @@ sensor.set_sensor_mode(VITALS_SENSOR_OFF) attach_accessory(null, sensor) -/mob/living/carbon/human/blank/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) +/mob/living/human/blank/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) species_name = SPECIES_HUMAN ..() return INITIALIZE_HINT_LATELOAD -/mob/living/carbon/human/blank/LateInitialize() +/mob/living/human/blank/LateInitialize() var/number = "[pick(global.greek_letters)]-[rand(1,30)]" fully_replace_character_name("Subject [number]") var/decl/hierarchy/outfit/outfit = outfit_by_type(/decl/hierarchy/outfit/blank_subject) @@ -49,5 +49,5 @@ if(F) F.SetName("[F.name] ([number])") -/mob/living/carbon/human/blank/ssd_check() +/mob/living/human/blank/ssd_check() return FALSE diff --git a/code/modules/mob/living/human/say.dm b/code/modules/mob/living/human/say.dm index 5c76ae4c05f..2dbd8c4293d 100644 --- a/code/modules/mob/living/human/say.dm +++ b/code/modules/mob/living/human/say.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/say(var/message, var/decl/language/speaking, var/verb = "says", var/alt_name = "", whispering) +/mob/living/human/say(var/message, var/decl/language/speaking, var/verb = "says", var/alt_name = "", whispering) if(!whispering) var/obj/item/organ/internal/voicebox/voice = locate() in get_internal_organs() // Check if the language they're speaking is vocal and not supplied by a machine, and if they are currently suffocating. @@ -21,7 +21,7 @@ SetName(get_id_name("Unknown")) . = ..(message, speaking, verb, alt_name, whispering) -/mob/living/carbon/human/proc/forcesay(list/append) +/mob/living/human/proc/forcesay(list/append) if(stat == CONSCIOUS) if(client) var/virgin = 1 //has the text been modified yet? @@ -55,10 +55,10 @@ say(temp) winset(client, "input", "text=[null]") -/mob/living/carbon/human/say_understands(mob/speaker, decl/language/speaking) +/mob/living/human/say_understands(mob/speaker, decl/language/speaking) return (!speaking && (issilicon(speaker) || istype(speaker, /mob/announcer) || isbrain(speaker))) || ..() -/mob/living/carbon/human/say_quote(var/message, var/decl/language/speaking = null) +/mob/living/human/say_quote(var/message, var/decl/language/speaking = null) var/verb = "says" var/ending = copytext(message, length(message)) @@ -72,8 +72,8 @@ return verb -/mob/living/carbon/human/handle_speech_problems(var/list/message_data) - if(HAS_STATUS(src, STAT_SILENCE) || (sdisabilities & MUTED)) +/mob/living/human/handle_speech_problems(var/list/message_data) + if(HAS_STATUS(src, STAT_SILENCE) || has_genetic_condition(GENE_COND_MUTED)) to_chat(src, SPAN_WARNING("You are unable to speak!")) message_data[1] = "" return TRUE @@ -86,13 +86,13 @@ return ..(message_data) -/mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) +/mob/living/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) if(message_mode == MESSAGE_MODE_WHISPER) //It's going to get sanitized again immediately, so decode. whisper_say(html_decode(message), speaking, alt_name) return TRUE return ..() -/mob/living/carbon/human/handle_speech_sound() +/mob/living/human/handle_speech_sound() if(species.speech_sounds && prob(species.speech_chance)) var/list/returns[2] var/sound_to_play = species.speech_sounds @@ -103,7 +103,7 @@ return returns return ..() -/mob/living/carbon/human/can_speak(decl/language/speaking) +/mob/living/human/can_speak(decl/language/speaking) if(ispath(speaking, /decl/language)) speaking = GET_DECL(speaking) if(!istype(speaking)) @@ -118,7 +118,7 @@ return FALSE . = ..() -/mob/living/carbon/human/parse_language(var/message) +/mob/living/human/parse_language(var/message) var/prefix = copytext(message,1,2) if(length(message) >= 1 && prefix == get_prefix_key(/decl/prefix/audible_emote)) return GET_DECL(/decl/language/noise) diff --git a/code/modules/mob/living/human/unarmed_attack.dm b/code/modules/mob/living/human/unarmed_attack.dm index 57c97c7d196..708fe84c7ff 100644 --- a/code/modules/mob/living/human/unarmed_attack.dm +++ b/code/modules/mob/living/human/unarmed_attack.dm @@ -44,7 +44,7 @@ . |= (sharp && DAM_SHARP) . |= (edge && DAM_EDGE) -/decl/natural_attack/proc/padded_by_user_gear(var/mob/living/carbon/human/user) +/decl/natural_attack/proc/padded_by_user_gear(var/mob/living/human/user) if(istype(user) && length(usable_with_limbs)) for(var/limb_slot in usable_with_limbs) var/obj/item/gear = user.get_covering_equipped_item_by_zone(limb_slot) @@ -52,7 +52,7 @@ return TRUE return FALSE -/decl/natural_attack/proc/resolve_to_soft_variant(var/mob/living/carbon/human/user) +/decl/natural_attack/proc/resolve_to_soft_variant(var/mob/living/human/user) . = src if(istype(user) && (user.pulling_punches || padded_by_user_gear(user))) var/decl/natural_attack/soft_variant = get_sparring_variant() @@ -62,7 +62,7 @@ /decl/natural_attack/proc/get_sparring_variant() return GET_DECL(sparring_variant_type) -/decl/natural_attack/proc/is_usable(var/mob/living/carbon/human/user, var/mob/target, var/zone) +/decl/natural_attack/proc/is_usable(var/mob/living/human/user, var/mob/target, var/zone) if(!user.restrained() && !user.incapacitated()) for(var/etype in usable_with_limbs) var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(user, etype) @@ -132,7 +132,7 @@ return TRUE -/decl/natural_attack/proc/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) +/decl/natural_attack/proc/show_attack(var/mob/living/human/user, var/mob/living/human/target, var/zone, var/attack_damage) var/msg = "\The [user] [pick(attack_verb)] \the [target]" var/obj/item/organ/external/affecting = istype(target) && zone && GET_EXTERNAL_ORGAN(target, zone) if(affecting) @@ -143,7 +143,7 @@ user.visible_message(SPAN_DANGER("[msg]!")) playsound(user.loc, attack_sound, 25, 1, -1) -/decl/natural_attack/proc/handle_eye_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target) +/decl/natural_attack/proc/handle_eye_attack(var/mob/living/human/user, var/mob/living/human/target) var/obj/item/organ/internal/eyes = GET_INTERNAL_ORGAN(target, BP_EYES) var/decl/pronouns/G = user.get_pronouns() if(eyes) @@ -177,7 +177,7 @@ sharp = 1 edge = 1 -/decl/natural_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) +/decl/natural_attack/bite/is_usable(var/mob/living/human/user, var/mob/living/human/target, var/zone) if(user.get_item_blocking_speech()) return 0 @@ -200,7 +200,7 @@ sparring_variant_type = /decl/natural_attack/light_strike/punch is_starting_default = TRUE -/decl/natural_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) +/decl/natural_attack/punch/show_attack(var/mob/living/human/user, var/mob/living/human/target, var/zone, var/attack_damage) var/obj/item/organ/external/affecting = istype(target) && zone && GET_EXTERNAL_ORGAN(target, zone) if(!affecting) @@ -262,7 +262,7 @@ usable_with_limbs = list(BP_L_FOOT, BP_R_FOOT) sparring_variant_type = /decl/natural_attack/light_strike/kick -/decl/natural_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) +/decl/natural_attack/kick/is_usable(var/mob/living/human/user, var/mob/living/human/target, var/zone) if(zone == BP_HEAD || zone == BP_EYES || zone == BP_MOUTH) zone = BP_CHEST . = ..() @@ -273,7 +273,7 @@ return damage return damage + (shoes ? shoes.force : 0) -/decl/natural_attack/kick/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) +/decl/natural_attack/kick/show_attack(var/mob/living/human/user, var/mob/living/human/target, var/zone, var/attack_damage) var/obj/item/organ/external/affecting = istype(target) && zone && GET_EXTERNAL_ORGAN(target, zone) if(!affecting) @@ -294,7 +294,7 @@ damage = 0 usable_with_limbs = list(BP_L_FOOT, BP_R_FOOT) -/decl/natural_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) +/decl/natural_attack/stomp/is_usable(var/mob/living/human/user, var/mob/living/human/target, var/zone) if(!istype(target)) return FALSE if (!user.current_posture.prone && (target.current_posture.prone || (zone in list(BP_L_FOOT, BP_R_FOOT)))) @@ -309,7 +309,7 @@ var/obj/item/clothing/shoes = user.get_equipped_item(slot_shoes_str) return damage + (shoes ? shoes.force : 0) -/decl/natural_attack/stomp/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) +/decl/natural_attack/stomp/show_attack(var/mob/living/human/user, var/mob/living/human/target, var/zone, var/attack_damage) var/obj/item/organ/external/affecting = istype(target) && zone && GET_EXTERNAL_ORGAN(target, zone) if(!affecting) @@ -357,7 +357,7 @@ attack_noun = list("foot") usable_with_limbs = list(BP_L_FOOT, BP_R_FOOT) -/decl/natural_attack/light_strike/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) +/decl/natural_attack/light_strike/kick/is_usable(var/mob/living/human/user, var/mob/living/human/target, var/zone) if(zone == BP_HEAD || zone == BP_EYES || zone == BP_MOUTH) zone = BP_CHEST . = ..() diff --git a/code/modules/mob/living/human/update_icons.dm b/code/modules/mob/living/human/update_icons.dm index e527fb203a5..6b53f860cbf 100644 --- a/code/modules/mob/living/human/update_icons.dm +++ b/code/modules/mob/living/human/update_icons.dm @@ -68,7 +68,7 @@ There are several things that need to be remembered: update_equipment_overlay(slot_wear_suit_str) > There are also these special cases: - update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows + update_genetic_conditions() //handles updating your appearance for certain mutations. e.g TK head-glows update_damage_overlays() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it) update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and @@ -102,8 +102,8 @@ If you have any questions/constructive-comments/bugs-to-report/or have a massivl Please contact me on #coderbus IRC. ~Carn x */ -/mob/living/carbon/human/refresh_visible_overlays() - update_mutations(FALSE) +/mob/living/human/refresh_visible_overlays() + update_genetic_conditions(FALSE) update_body(FALSE) update_skin(FALSE) update_underwear(FALSE) @@ -115,12 +115,12 @@ Please contact me on #coderbus IRC. ~Carn x update_damage_overlays(FALSE) return ..() -/mob/living/carbon/human/on_update_icon() +/mob/living/human/on_update_icon() if(regenerate_body_icon) regenerate_body_icon = FALSE ..() -/mob/living/carbon/human/apply_visible_overlays() +/mob/living/human/apply_visible_overlays() var/list/visible_overlays var/list/visible_underlays if(is_cloaked()) @@ -177,7 +177,7 @@ Please contact me on #coderbus IRC. ~Carn x // If you want stuff like scaling based on species or something, here is a good spot to mix the numbers together. return list(icon_scale_x, icon_scale_y) -/mob/living/carbon/human/update_appearance_flags(add_flags, remove_flags) +/mob/living/human/update_appearance_flags(add_flags, remove_flags) . = ..() if(.) update_icon() @@ -196,7 +196,7 @@ Please contact me on #coderbus IRC. ~Carn x transform = M return transform -/mob/living/carbon/human/update_transform() +/mob/living/human/update_transform() // First, get the correct size. var/list/icon_scale_values = get_icon_scale_mult() @@ -249,11 +249,11 @@ Please contact me on #coderbus IRC. ~Carn x return transform -/mob/living/carbon/human/update_damage_overlays(update_icons = TRUE) +/mob/living/human/update_damage_overlays(update_icons = TRUE) . = ..() update_bandages(update_icons) -/mob/living/carbon/human/proc/update_bandages(var/update_icons=1) +/mob/living/human/proc/update_bandages(var/update_icons=1) var/list/bandage_overlays var/bandage_icon = get_bodytype().get_bandages_icon(src) if(bandage_icon) @@ -263,7 +263,7 @@ Please contact me on #coderbus IRC. ~Carn x LAZYADD(bandage_overlays, image(bandage_icon, "[O.icon_state][bandage_level]")) set_current_mob_overlay(HO_DAMAGE_LAYER, bandage_overlays, update_icons) -/mob/living/carbon/human/proc/get_human_icon_cache_key() +/mob/living/human/proc/get_human_icon_cache_key() . = list() for(var/limb_tag in global.all_limb_tags) . += "[limb_tag]_" @@ -273,11 +273,11 @@ Please contact me on #coderbus IRC. ~Carn x continue part.update_icon() // This wil regenerate their icon if needed, and more importantly set their cache key. . += part._icon_cache_key - . += "husked_[!!is_husked()]" + . += "husked_[!!has_genetic_condition(GENE_COND_HUSK)]" . = JOINTEXT(.) //BASE MOB SPRITE -/mob/living/carbon/human/update_body(var/update_icons = TRUE) +/mob/living/human/update_body(var/update_icons = TRUE) var/list/limbs = get_external_organs() if(!LAZYLEN(limbs)) @@ -315,7 +315,7 @@ Please contact me on #coderbus IRC. ~Carn x else stand_icon.Blend(temp, ICON_OVERLAY) //Handle husk overlay. - if(is_husked()) + if(has_genetic_condition(GENE_COND_HUSK)) var/husk_icon = root_bodytype.get_husk_icon(src) if(husk_icon) var/icon/mask = new(stand_icon) @@ -333,7 +333,7 @@ Please contact me on #coderbus IRC. ~Carn x //UNDERWEAR OVERLAY -/mob/living/carbon/human/proc/update_underwear(var/update_icons=1) +/mob/living/human/proc/update_underwear(var/update_icons=1) var/list/undies = list() for(var/entry in worn_underwear) @@ -356,40 +356,29 @@ Please contact me on #coderbus IRC. ~Carn x undies += I set_current_mob_overlay(HO_UNDERWEAR_LAYER, undies, update_icons) -/mob/living/carbon/human/update_hair(var/update_icons=1) +/mob/living/human/update_hair(var/update_icons=1) var/obj/item/organ/external/head/head_organ = get_organ(BP_HEAD, /obj/item/organ/external/head) var/list/new_accessories = head_organ?.get_mob_overlays() set_current_mob_overlay(HO_HAIR_LAYER, new_accessories, update_icons) -/mob/living/carbon/human/proc/update_skin(var/update_icons=1) +/mob/living/human/proc/update_skin(var/update_icons=1) // todo: make this use bodytype set_current_mob_overlay(HO_SKIN_LAYER, species.update_skin(src), update_icons) -/mob/living/carbon/human/update_mutations(var/update_icons=1) - - var/image/standing = overlay_image('icons/effects/genetics.dmi', flags=RESET_COLOR) - var/add_image = 0 - var/g = "m" - if(gender == FEMALE) g = "f" - // DNA2 - Drawing underlays. - var/list/all_genes = decls_repository.get_decls_of_subtype(/decl/gene) - for(var/gene_type in all_genes) - var/decl/gene/gene = all_genes[gene_type] - if(!gene.block) - continue - if(gene.is_active(src)) - var/underlay=gene.OnDrawUnderlays(src,g) - if(underlay) - standing.underlays += underlay - add_image = 1 - set_current_mob_overlay(HO_MUTATIONS_LAYER, (add_image ? standing : null), update_icons) +/mob/living/human/update_genetic_conditions(var/update_icons=1) + var/list/condition_overlays = null + for(var/decl/genetic_condition/condition as anything in get_genetic_conditions()) + var/condition_overlay = condition.get_mob_overlay() + if(condition_overlay) + LAZYADD(condition_overlays, condition_overlay) + set_current_mob_overlay(HO_CONDITION_LAYER, condition_overlays, update_icons) /* --------------------------------------- */ //vvvvvv UPDATE_INV PROCS vvvvvv /mob/living/proc/update_tail_showing(var/update_icons=1) return -/mob/living/carbon/human/update_tail_showing(var/update_icons=1) +/mob/living/human/update_tail_showing(var/update_icons=1) var/obj/item/organ/external/tail/tail_organ = get_organ(BP_TAIL, /obj/item/organ/external/tail) if(!istype(tail_organ)) @@ -418,7 +407,7 @@ Please contact me on #coderbus IRC. ~Carn x set_current_mob_overlay(HO_TAIL_LAYER, null, FALSE) set_current_mob_underlay(HU_TAIL_LAYER, tail_image, update_icons) -/mob/living/carbon/human/proc/get_tail_icon_for_organ(var/obj/item/organ/external/tail/tail_organ) +/mob/living/human/proc/get_tail_icon_for_organ(var/obj/item/organ/external/tail/tail_organ) if(!istype(tail_organ)) return @@ -460,7 +449,7 @@ Please contact me on #coderbus IRC. ~Carn x if(tail_organ?.get_tail()) update_tail_showing() -/mob/living/carbon/human/proc/set_tail_state(var/t_state) +/mob/living/human/proc/set_tail_state(var/t_state) var/obj/item/organ/external/tail/tail_organ = get_organ(BP_TAIL, /obj/item/organ/external/tail) if(!tail_organ) return null @@ -471,10 +460,10 @@ Please contact me on #coderbus IRC. ~Carn x //Not really once, since BYOND can't do that. //Update this if the ability to flick() images or make looping animation start at the first frame is ever added. -/mob/living/carbon/human/proc/get_current_tail_image() +/mob/living/human/proc/get_current_tail_image() return get_current_mob_overlay(HO_TAIL_LAYER) || get_current_mob_underlay(HU_TAIL_LAYER) -/mob/living/carbon/human/proc/animate_tail_once(var/update_icons=1) +/mob/living/human/proc/animate_tail_once(var/update_icons=1) var/obj/item/organ/external/tail/tail_organ = get_organ(BP_TAIL, /obj/item/organ/external/tail) if(!tail_organ) return @@ -495,7 +484,7 @@ Please contact me on #coderbus IRC. ~Carn x if(update_icons) queue_icon_update() -/mob/living/carbon/human/proc/animate_tail_start(var/update_icons=1) +/mob/living/human/proc/animate_tail_start(var/update_icons=1) var/obj/item/organ/external/tail/tail_organ = get_organ(BP_TAIL, /obj/item/organ/external/tail) if(!tail_organ) return @@ -505,7 +494,7 @@ Please contact me on #coderbus IRC. ~Carn x if(update_icons) queue_icon_update() -/mob/living/carbon/human/proc/animate_tail_fast(var/update_icons=1) +/mob/living/human/proc/animate_tail_fast(var/update_icons=1) var/obj/item/organ/external/tail/tail_organ = get_organ(BP_TAIL, /obj/item/organ/external/tail) if(!tail_organ) return @@ -515,7 +504,7 @@ Please contact me on #coderbus IRC. ~Carn x if(update_icons) queue_icon_update() -/mob/living/carbon/human/proc/animate_tail_reset(var/update_icons=1) +/mob/living/human/proc/animate_tail_reset(var/update_icons=1) var/obj/item/organ/external/tail/tail_organ = get_organ(BP_TAIL, /obj/item/organ/external/tail) if(!tail_organ) return @@ -528,19 +517,19 @@ Please contact me on #coderbus IRC. ~Carn x if(update_icons) queue_icon_update() -/mob/living/carbon/human/proc/animate_tail_stop(var/update_icons=1) +/mob/living/human/proc/animate_tail_stop(var/update_icons=1) var/obj/item/organ/external/tail/tail_organ = get_organ(BP_TAIL, /obj/item/organ/external/tail) if(!tail_organ) return set_tail_state("[tail_organ.get_tail()]_static") -/mob/living/carbon/human/update_fire(var/update_icons=1) +/mob/living/human/update_fire(var/update_icons=1) if(on_fire) var/image/standing = overlay_image(get_bodytype()?.get_ignited_icon(src) || 'icons/mob/OnFire.dmi', "Standing", RESET_COLOR) set_current_mob_overlay(HO_FIRE_LAYER, standing, update_icons) else set_current_mob_overlay(HO_FIRE_LAYER, null, update_icons) -/mob/living/carbon/human/hud_reset(full_reset = FALSE) +/mob/living/human/hud_reset(full_reset = FALSE) if((. = ..()) && internals && internal) internals.icon_state = "internal1" diff --git a/code/modules/mob/living/human/whisper.dm b/code/modules/mob/living/human/whisper.dm index 6776178e432..fa848cc225f 100644 --- a/code/modules/mob/living/human/whisper.dm +++ b/code/modules/mob/living/human/whisper.dm @@ -1,5 +1,5 @@ //Lallander was here -/mob/living/carbon/human/whisper(message as text) +/mob/living/human/whisper(message as text) if(filter_block_message(src, message)) return @@ -24,5 +24,5 @@ //This is used by both the whisper verb and human/say() to handle whispering -/mob/living/carbon/human/proc/whisper_say(var/message, var/decl/language/speaking = null, var/alt_name="", var/verb="whispers") +/mob/living/human/proc/whisper_say(var/message, var/decl/language/speaking = null, var/alt_name="", var/verb="whispers") say(message, speaking, verb, alt_name, whispering = TRUE) \ No newline at end of file diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 1635435aa31..18588dee914 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -435,14 +435,14 @@ SHOULD_CALL_PARENT(TRUE) if(stat == DEAD) SET_STATUS_MAX(src, STAT_BLIND, 0) - if(stat != CONSCIOUS && (sdisabilities & BLINDED)) //blindness from disability or unconsciousness doesn't get better on its own + if(stat != CONSCIOUS && has_genetic_condition(GENE_COND_BLINDED)) //blindness from disability or unconsciousness doesn't get better on its own SET_STATUS_MAX(src, STAT_BLIND, 2) else return TRUE return FALSE /mob/living/proc/handle_impaired_hearing() - if((sdisabilities & DEAFENED) || stat) //disabled-deaf, doesn't get better on its own + if(has_genetic_condition(GENE_COND_DEAFENED) || stat) //disabled-deaf, doesn't get better on its own SET_STATUS_MAX(src, STAT_TINNITUS, 2) /mob/living/proc/should_do_hud_updates() @@ -493,7 +493,7 @@ overlay_fullscreen("blind", /obj/screen/fullscreen/blind) else clear_fullscreen("blind") - set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) + set_fullscreen(has_genetic_condition(GENE_COND_NEARSIGHTED), "impaired", /obj/screen/fullscreen/impaired, 1) set_fullscreen(GET_STATUS(src, STAT_BLURRY), "blurry", /obj/screen/fullscreen/blurry) set_fullscreen(GET_STATUS(src, STAT_DRUGGY), "high", /obj/screen/fullscreen/high) set_fullscreen(stat == UNCONSCIOUS, "blackout", /obj/screen/fullscreen/blackout) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 809ed917843..492b862b19e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -149,7 +149,7 @@ default behaviour is: if(!tmob.buckled.anchored) step(tmob.buckled, t) if(ishuman(AM)) - var/mob/living/carbon/human/M = AM + var/mob/living/human/M = AM for(var/obj/item/grab/G in M.grabbed_by) step(G.assailant, get_dir(G.assailant, AM)) G.adjust_position() @@ -333,8 +333,7 @@ default behaviour is: // shut down ongoing problems radiation = 0 bodytemperature = get_species()?.body_temperature || initial(bodytemperature) - sdisabilities = 0 - disabilities = 0 + reset_genetic_conditions() // fix all status conditions including blind/deaf clear_status_effects() @@ -615,7 +614,7 @@ default behaviour is: //called when the mob receives a bright flash /mob/living/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash) - if(eyecheck() < intensity || override_blindness_check) + if(eyecheck() < intensity || override_blindness_check || !has_genetic_condition(GENE_COND_BLINDED)) overlay_fullscreen("flash", type) spawn(25) if(src) @@ -645,7 +644,7 @@ default behaviour is: return FALSE -/mob/living/carbon/human/canUnEquip(obj/item/I) +/mob/living/human/canUnEquip(obj/item/I) . = ..() && !(I in get_organs()) /mob/proc/can_be_possessed_by(var/mob/observer/ghost/possessor) @@ -748,7 +747,7 @@ default behaviour is: . += 15 if(HAS_STATUS(src, STAT_CONFUSE)) . += 30 - if(MUTATION_CLUMSY in mutations) + if(has_genetic_condition(GENE_COND_CLUMSY)) . += 40 /mob/living/proc/ranged_accuracy_mods() @@ -761,7 +760,7 @@ default behaviour is: . -= 5 if(HAS_STATUS(src, STAT_BLURRY)) . -= 1 - if(MUTATION_CLUMSY in mutations) + if(has_genetic_condition(GENE_COND_CLUMSY)) . -= 3 /mob/living/can_drown() @@ -837,12 +836,20 @@ default behaviour is: /mob/living/proc/handle_additional_vomit_reagents(var/obj/effect/decal/cleanable/vomit/vomit) vomit.add_to_reagents(/decl/material/liquid/acid/stomach, 5) +/mob/living/proc/get_flash_mod() + var/vision_organ_tag = get_vision_organ_tag() + if(vision_organ_tag) + var/obj/item/organ/internal/eyes/I = get_organ(vision_organ_tag, /obj/item/organ/internal/eyes) + if(I) // get_organ with a type passed already does a typecheck + return I.get_flash_mod() + return get_bodytype()?.eye_flash_mod + /mob/living/proc/eyecheck() var/total_protection = flash_protection if(should_have_organ(BP_EYES)) - var/decl/bodytype/root_bodytype = get_bodytype() - if(root_bodytype.has_organ[root_bodytype.vision_organ]) - var/obj/item/organ/internal/eyes/I = get_organ(root_bodytype.vision_organ, /obj/item/organ/internal/eyes) + var/vision_organ_tag = get_vision_organ_tag() + if(vision_organ_tag && get_bodytype()?.has_organ[vision_organ_tag]) + var/obj/item/organ/internal/eyes/I = get_organ(vision_organ_tag, /obj/item/organ/internal/eyes) if(!I?.is_usable()) return FLASH_PROTECTION_MAJOR total_protection = I.get_total_protection(flash_protection) @@ -1158,12 +1165,14 @@ default behaviour is: //We are long dead, or we're junk mobs spawned like the clowns on the clown shuttle return life_tick <= 5 || !timeofdeath || (timeofdeath >= 5 && (world.time-timeofdeath) <= 10 MINUTES) -/mob/living/proc/check_dna() - dna?.check_integrity(src) - /mob/living/get_unique_enzymes() + if(isnull(unique_enzymes) && has_genetic_information()) + set_unique_enzymes(md5(name)) return unique_enzymes +/mob/living/set_unique_enzymes(value) + unique_enzymes = value + /mob/living/get_blood_type() return blood_type @@ -1198,7 +1207,7 @@ default behaviour is: var/how_open = round(E.how_open()) if(how_open <= 0) continue - var/surgery_icon = E.species.get_surgery_overlay_icon(src) + var/surgery_icon = E.get_surgery_overlay_icon() if(!surgery_icon) continue if(!total) @@ -1275,6 +1284,8 @@ default behaviour is: return "Unknown" /mob/living/proc/identity_is_visible() + if(has_genetic_condition(GENE_COND_HUSK)) + return FALSE if(!real_name) return FALSE var/obj/item/clothing/mask/mask = get_equipped_item(slot_wear_mask_str) @@ -1633,3 +1644,19 @@ default behaviour is: for(var/obj/item/organ/organ in stat_organs) var/list/organ_info = organ.get_stat_info() stat(organ_info[1], organ_info[2]) + +/mob/living/force_update_limbs() + for(var/obj/item/organ/external/O in get_external_organs()) + O.sync_colour_to_human(src) + update_body(0) + +/mob/living/proc/get_vision_organ_tag() + return get_bodytype()?.vision_organ + +/mob/living/proc/get_darksight_range() + var/vision_organ_tag = get_vision_organ_tag() + if(vision_organ_tag) + var/obj/item/organ/internal/eyes/I = get_organ(vision_organ_tag, /obj/item/organ/internal/eyes) + if(istype(I)) + return I.get_darksight_range() + return get_bodytype()?.eye_darksight_range diff --git a/code/modules/mob/living/living_breath.dm b/code/modules/mob/living/living_breath.dm index 82b2a7cedc1..9ff47af0f62 100644 --- a/code/modules/mob/living/living_breath.dm +++ b/code/modules/mob/living/living_breath.dm @@ -5,7 +5,7 @@ return FALSE /mob/living/proc/need_breathe() - if(mNobreath in mutations) + if(has_genetic_condition(GENE_COND_NO_BREATH)) return FALSE var/decl/bodytype/root_bodytype = get_bodytype() if(!root_bodytype || !root_bodytype.breathing_organ || !should_have_organ(root_bodytype.breathing_organ)) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 5a515e0e9f9..b74e516c2d4 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -97,7 +97,7 @@ apply_effect(agony_amount/10, EYE_BLUR) /mob/living/proc/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, def_zone = null) - return 0 //only carbon liveforms have this proc + return 0 // No root logic, implemented separately on human and silicon. /mob/living/emp_act(severity) for(var/obj/O in get_mob_contents()) diff --git a/code/modules/mob/living/living_genetics.dm b/code/modules/mob/living/living_genetics.dm new file mode 100644 index 00000000000..fd0c40638a0 --- /dev/null +++ b/code/modules/mob/living/living_genetics.dm @@ -0,0 +1,56 @@ +/mob/living + VAR_PRIVATE/_updating_genetic_conditions + VAR_PRIVATE/list/_genetic_conditions + +/mob/living/proc/queue_genetic_condition_update() + set waitfor = FALSE + if(_updating_genetic_conditions) + return + _updating_genetic_conditions = TRUE + sleep(1) + _updating_genetic_conditions = FALSE + update_genetic_conditions() + +/mob/living/get_genetic_conditions() + RETURN_TYPE(/list) + return _genetic_conditions + +/mob/living/can_have_genetic_conditions() + return !(get_bodytype()?.body_flags & BODY_FLAG_NO_DNA) + +/mob/living/has_genetic_condition(condition_type) + if(!LAZYLEN(_genetic_conditions)) + return FALSE + var/decl/genetic_condition/condition = GET_DECL(condition_type) + return (condition in _genetic_conditions) + +/mob/living/add_genetic_condition(condition_type, temporary_time) + var/decl/genetic_condition/condition = GET_DECL(condition_type) + if(condition && !(condition in _genetic_conditions) && condition.activate_condition(src)) + LAZYDISTINCTADD(_genetic_conditions, condition) + if(temporary_time) + // TODO: some kind of world.time key or parameter so overlapping calls don't remove each other. + addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living, remove_genetic_condition)), temporary_time) + queue_genetic_condition_update() + return TRUE + return FALSE + +/mob/living/remove_genetic_condition(condition_type) + if(!LAZYLEN(_genetic_conditions)) + return FALSE + var/decl/genetic_condition/condition = GET_DECL(condition_type) + if(condition && (condition in _genetic_conditions) && condition.deactivate_condition(src)) + LAZYREMOVE(_genetic_conditions, condition) + queue_genetic_condition_update() + return TRUE + return FALSE + +/mob/living/reset_genetic_conditions() + if(!LAZYLEN(_genetic_conditions)) + return FALSE + for(var/decl/genetic_condition/condition as anything in _genetic_conditions) + if(condition.deactivate_condition(src)) + . = TRUE + _genetic_conditions = null + if(.) + update_icon() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index e661e7c2663..f99ab90b1e3 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -378,7 +378,7 @@ var/global/list/custom_ai_icons_by_ckey_and_name = list() if (href_list["track"]) var/mob/target = locate(href_list["track"]) in SSmobs.mob_list - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target if(!istype(H) || (html_decode(href_list["trackname"]) == H.get_visible_name()) || (html_decode(href_list["trackname"]) == H.get_id_name())) ai_actual_track(target) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 545efb31a13..17b45ba08ad 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -188,7 +188,7 @@ var/global/list/possible_say_verbs = list( else if(ismob(card.loc)) var/mob/holder = card.loc if(ishuman(holder)) - var/mob/living/carbon/human/H = holder + var/mob/living/human/H = holder for(var/obj/item/organ/external/affecting in H.get_external_organs()) if(card in affecting.implants) affecting.take_external_damage(rand(30,50)) diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index da9259ba3f4..6e1a7989b71 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -36,7 +36,7 @@ var/global/datum/paiController/paiController // Global handler for pAI candida if(istype(card,/obj/item/paicard) && istype(candidate,/datum/paiCandidate)) var/mob/living/silicon/pai/pai = new(card) if(!candidate.name) - pai.SetName(pick(global.ninja_names)) + pai.SetName(pick(global.ai_names)) else pai.SetName(candidate.name) pai.real_name = pai.name diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm index 96d7998715a..c1ca1b982e6 100644 --- a/code/modules/mob/living/silicon/robot/analyzer.dm +++ b/code/modules/mob/living/silicon/robot/analyzer.dm @@ -21,7 +21,7 @@ /obj/item/robotanalyzer/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) - if((MUTATION_CLUMSY in user.mutations) && prob(50)) + if(user.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) user.visible_message( SPAN_WARNING("\The [user] has analyzed the floor's vitals!"), self_message = SPAN_WARNING("You try to analyze the floor's vitals!")) @@ -70,7 +70,7 @@ if("prosthetics") - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target to_chat(user, SPAN_NOTICE("Analyzing Results for \the [H]:")) to_chat(user, "Key: [SPAN_ORANGE("Electronics")]/[SPAN_RED("Brute")]") var/obj/item/organ/internal/cell/C = H.get_organ(BP_CELL, /obj/item/organ/internal/cell) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 1d8728fa974..2cb4f2a1492 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -64,10 +64,10 @@ cameranet.update_visibility(src, FALSE) SET_STATUS_MAX(src, STAT_BLIND, 2) - if(sdisabilities & BLINDED) + if(has_genetic_condition(GENE_COND_BLINDED)) SET_STATUS_MAX(src, STAT_BLIND, 2) - if(src.sdisabilities & DEAFENED) + if(has_genetic_condition(GENE_COND_DEAFENED)) src.set_status(STAT_DEAF, 1) //update the state of modules and components here @@ -199,7 +199,7 @@ overlay_fullscreen("blind", /obj/screen/fullscreen/blind) else clear_fullscreen("blind") - set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) + set_fullscreen(has_genetic_condition(GENE_COND_NEARSIGHTED), "impaired", /obj/screen/fullscreen/impaired, 1) set_fullscreen(GET_STATUS(src, STAT_BLURRY), "blurry", /obj/screen/fullscreen/blurry) set_fullscreen(GET_STATUS(src, STAT_DRUGGY), "high", /obj/screen/fullscreen/high) @@ -209,7 +209,7 @@ /mob/living/silicon/robot/handle_vision() ..() - if (src.stat == DEAD || (MUTATION_XRAY in mutations) || (src.sight_mode & BORGXRAY)) + if (src.stat == DEAD || has_genetic_condition(GENE_COND_XRAY) || (src.sight_mode & BORGXRAY)) set_sight(sight|SEE_TURFS|SEE_MOBS|SEE_OBJS) set_see_in_dark(8) set_see_invisible(SEE_INVISIBLE_LEVEL_TWO) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 2635abf4cd5..34c96aa98c6 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -456,12 +456,6 @@ adjustBruteLoss(5, do_update_health = FALSE) adjustFireLoss(10) -/mob/living/silicon/get_death_message(gibbed) - return "gives one shrill beep before falling lifeless." - -/mob/living/silicon/get_self_death_message(gibbed) - return "You have suffered a critical system failure, and are dead." - /mob/living/silicon/get_available_postures() var/static/list/available_postures = list( /decl/posture/standing diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 52a6e099774..eab529e073c 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -134,7 +134,7 @@ //Basic friend AI /mob/living/simple_animal/cat/fluff - var/mob/living/carbon/human/friend + var/mob/living/human/friend var/befriend_job = null /mob/living/simple_animal/cat/fluff/handle_movement_target() @@ -195,7 +195,7 @@ set src in view(1) if(!friend) - var/mob/living/carbon/human/H = usr + var/mob/living/human/H = usr if(istype(H) && (!befriend_job || H.job == befriend_job)) friend = usr . = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/antlion.dm b/code/modules/mob/living/simple_animal/hostile/antlion.dm index 8c60cc16af6..5328aa7f82c 100644 --- a/code/modules/mob/living/simple_animal/hostile/antlion.dm +++ b/code/modules/mob/living/simple_animal/hostile/antlion.dm @@ -63,7 +63,7 @@ set_invisibility(initial(invisibility)) prep_burrow(FALSE) set_special_ability_cooldown(ability_cooldown) - for(var/mob/living/carbon/human/H in get_turf(src)) + for(var/mob/living/human/H in get_turf(src)) H.attackby(natural_weapon, src) visible_message(SPAN_DANGER("\The [src] tears into \the [H] from below!")) SET_STATUS_MAX(H, STAT_WEAK, 1) diff --git a/code/modules/mob/living/simple_animal/hostile/bad_drone.dm b/code/modules/mob/living/simple_animal/hostile/bad_drone.dm index f0e94bd7990..f4e8703919a 100644 --- a/code/modules/mob/living/simple_animal/hostile/bad_drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/bad_drone.dm @@ -27,7 +27,7 @@ if(issilicon(A)) return FALSE if(ishuman(A)) - var/mob/living/carbon/human/H = A + var/mob/living/human/H = A if(H.isSynthetic()) return FALSE var/obj/item/head = H.get_equipped_item(slot_head_str) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 79e7d46caaa..82ab25346f1 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -112,7 +112,7 @@ var/damage = rand(20,30) if(ishuman(target_mob)) - var/mob/living/carbon/human/H = target_mob + var/mob/living/human/H = target_mob var/dam_zone = pick(BP_CHEST, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, ran_zone(dam_zone, target = H)) H.apply_damage(damage, BRUTE, affecting, DAM_SHARP|DAM_EDGE) //TODO damage_flags var on simple_animals, maybe? diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 95a39c32c8b..8547d0d94ad 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -154,7 +154,7 @@ if(attacking_with) heal_overall_damage(0.2 * attacking_with.force) //heal a bit on hit if(ishuman(.)) - var/mob/living/carbon/human/H = . + var/mob/living/human/H = . var/obj/item/clothing/suit/space/S = H.get_covering_equipped_item_by_zone(BP_CHEST) if(istype(S) && !length(S.breaches)) return @@ -275,7 +275,7 @@ Nurse caste procs /mob/living/simple_animal/hostile/giant_spider/nurse/attack_target(mob/target) . = ..() if(ishuman(.)) - var/mob/living/carbon/human/H = . + var/mob/living/human/H = . if(prob(infest_chance) && max_eggs) var/list/limbs = H.get_external_organs() var/obj/item/organ/external/O = LAZYLEN(limbs)? pick(limbs) : null diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 06326c288d4..c224ef528fd 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -84,7 +84,7 @@ return FALSE if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if (H.is_cloaked()) return FALSE @@ -125,7 +125,7 @@ LostTarget() return 0 if (ishuman(target_mob)) - var/mob/living/carbon/human/H = target_mob + var/mob/living/human/H = target_mob if (H.is_cloaked()) LoseTarget() return 0 diff --git a/code/modules/mob/living/simple_animal/hostile/leech.dm b/code/modules/mob/living/simple_animal/hostile/leech.dm index ae82d4b6afc..9d7cf629c02 100644 --- a/code/modules/mob/living/simple_animal/hostile/leech.dm +++ b/code/modules/mob/living/simple_animal/hostile/leech.dm @@ -30,7 +30,7 @@ /mob/living/simple_animal/hostile/leech/attack_target(mob/target) . = ..() if(ishuman(.) && belly <= 75) - var/mob/living/carbon/human/H = . + var/mob/living/human/H = . var/obj/item/clothing/suit/space/S = H.get_covering_equipped_item_by_zone(BP_CHEST) if(istype(S) && !length(S.breaches)) return diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm index 3651874d0bd..8f610870094 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_crab.dm @@ -25,7 +25,7 @@ ability_cooldown = 2 MINUTES ai = /datum/ai/giant_crab - var/mob/living/carbon/human/victim //the human we're grabbing + var/mob/living/human/victim //the human we're grabbing var/grab_duration = 3 //duration of disable in life ticks to simulate a grab var/grab_damage = 6 //brute damage before reductions, per crab's life tick var/list/grab_desc = list("thrashes", "squeezes", "crushes") @@ -68,7 +68,7 @@ /mob/living/simple_animal/hostile/retaliate/giant_crab/attack_target(mob/target) . = ..() if(ishuman(.)) - var/mob/living/carbon/human/H = . + var/mob/living/human/H = . if(victim == H) if(!Adjacent(victim)) release_grab() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm index 0df6b5ec780..ce7d80f9cec 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/giant_parrot/giant_parrot.dm @@ -41,7 +41,7 @@ /mob/living/simple_animal/hostile/retaliate/parrot/space/attack_target(mob/target) . = ..() if(ishuman(.) && can_act() && !is_on_special_ability_cooldown() && Adjacent(.)) - var/mob/living/carbon/human/H = . + var/mob/living/human/H = . if(prob(70)) SET_STATUS_MAX(H, STAT_WEAK, rand(2,3)) set_special_ability_cooldown(ability_cooldown / 1.5) diff --git a/code/modules/mob/living/simple_animal/hostile/slug.dm b/code/modules/mob/living/simple_animal/hostile/slug.dm index 1e7b56fc5ac..e4f6eafafb5 100644 --- a/code/modules/mob/living/simple_animal/hostile/slug.dm +++ b/code/modules/mob/living/simple_animal/hostile/slug.dm @@ -31,7 +31,7 @@ return ..() to_chat(initiator, SPAN_WARNING("\The [src] wriggles out of your hands before you can pick it up!")) -/mob/living/simple_animal/hostile/slug/proc/attach(var/mob/living/carbon/human/H) +/mob/living/simple_animal/hostile/slug/proc/attach(var/mob/living/human/H) var/obj/item/clothing/suit/space/S = H.get_covering_equipped_item_by_zone(BP_CHEST) if(istype(S) && !length(S.breaches)) S.create_breaches(BRUTE, 20) @@ -46,7 +46,7 @@ /mob/living/simple_animal/hostile/slug/attack_target(mob/target) . = ..() if(ishuman(.)) - var/mob/living/carbon/human/H = . + var/mob/living/human/H = . if(prob(H.get_damage(BRUTE)/2)) attach(H) @@ -63,7 +63,7 @@ /obj/item/holder/slug/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) var/mob/living/simple_animal/hostile/slug/V = contents[1] if(!V.stat && ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target if(do_mob(user, H, 30)) V.attach(H) qdel(src) diff --git a/code/modules/mob/living/simple_animal/hostile/vagrant.dm b/code/modules/mob/living/simple_animal/hostile/vagrant.dm index c745d4b1221..50fb0091f5d 100644 --- a/code/modules/mob/living/simple_animal/hostile/vagrant.dm +++ b/code/modules/mob/living/simple_animal/hostile/vagrant.dm @@ -22,7 +22,7 @@ nutrition = 100 var/cloaked = 0 - var/mob/living/carbon/human/gripping = null + var/mob/living/human/gripping = null var/blood_per_tick = 3 var/health_per_tick = 0.8 @@ -89,7 +89,7 @@ /mob/living/simple_animal/hostile/vagrant/attack_target(mob/target) . = ..() if(ishuman(.)) - var/mob/living/carbon/human/H = . + var/mob/living/human/H = . if(gripping == H) SET_STATUS_MAX(H, STAT_WEAK, 1) SET_STATUS_MAX(H, STAT_STUN, 1) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 375f18a5913..b2354fbd88b 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -278,7 +278,7 @@ var/global/list/simplemob_icon_bitflag_cache = list() atmos_suitable = FALSE break //Atmos effect - if(!(MUTATION_SPACERES in mutations) && abs(environment.temperature - bodytemperature) > 40) + if(!has_genetic_condition(GENE_COND_SPACE_RESISTANCE) && abs(environment.temperature - bodytemperature) > 40) bodytemperature += ((environment.temperature - bodytemperature) / 5) if(bodytemperature < minbodytemp) @@ -335,7 +335,7 @@ var/global/list/simplemob_icon_bitflag_cache = list() var/damage_flags var/damage_type if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/decl/natural_attack/attack = H.get_unarmed_attack(src) if(istype(attack)) dealt_damage = attack.damage <= dealt_damage ? dealt_damage : attack.damage @@ -483,7 +483,7 @@ var/global/list/simplemob_icon_bitflag_cache = list() /mob/living/simple_animal/get_digestion_product() return /decl/material/liquid/nutriment -/mob/living/simple_animal/proc/reflect_unarmed_damage(var/mob/living/carbon/human/attacker, var/damage_type, var/description) +/mob/living/simple_animal/proc/reflect_unarmed_damage(var/mob/living/human/attacker, var/damage_type, var/description) if(attacker.a_intent == I_HURT) attacker.apply_damage(rand(return_damage_min, return_damage_max), damage_type, attacker.get_active_held_item_slot(), used_weapon = description) if(rand(25)) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 29215fb49f3..3d0490df4f6 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -247,10 +247,10 @@ return restrained() ? FULLY_BUCKLED : PARTIALLY_BUCKLED /mob/proc/is_blind() - return ((sdisabilities & BLINDED) || incapacitated(INCAPACITATION_KNOCKOUT) || HAS_STATUS(src, STAT_BLIND)) + return (has_genetic_condition(GENE_COND_BLINDED) || incapacitated(INCAPACITATION_KNOCKOUT) || HAS_STATUS(src, STAT_BLIND)) /mob/proc/is_deaf() - return ((sdisabilities & DEAFENED) || incapacitated(INCAPACITATION_KNOCKOUT) || HAS_STATUS(src, STAT_DEAF)) + return (has_genetic_condition(GENE_COND_DEAFENED) || incapacitated(INCAPACITATION_KNOCKOUT) || HAS_STATUS(src, STAT_DEAF)) /mob/proc/is_physically_disabled() return incapacitated(INCAPACITATION_DISABLED) @@ -596,7 +596,7 @@ /mob/proc/pull_damage() return 0 -/mob/living/carbon/human/pull_damage() +/mob/living/human/pull_damage() if(!current_posture.prone|| get_damage(BRUTE) + get_damage(BURN) < 100) return FALSE for(var/obj/item/organ/external/e in get_external_organs()) @@ -831,7 +831,7 @@ if(U.get_empty_hand_slot()) U.put_in_hands(selection) if(ishuman(U)) - var/mob/living/carbon/human/human_user = U + var/mob/living/human/human_user = U human_user.bloody_hands(src) return 1 @@ -1292,6 +1292,9 @@ /mob/proc/get_unique_enzymes() return +/mob/proc/set_unique_enzymes(value) + return + /mob/proc/get_blood_type() return @@ -1327,6 +1330,31 @@ /mob/proc/swap_hand() SHOULD_CALL_PARENT(TRUE) +/mob/proc/set_skin_tone(value) + return + +/mob/proc/get_skin_tone(value) + return + +/mob/proc/force_update_limbs() + return + +/mob/proc/update_eyes(update_icons = TRUE) + var/obj/item/organ/internal/eyes/eyes = get_organ((get_bodytype()?.vision_organ || BP_EYES), /obj/item/organ/internal/eyes) + if(eyes) + eyes.update_colour() + if(update_icons) + queue_icon_update() + +/mob/proc/has_genetic_information() + if(isSynthetic()) + return FALSE + var/decl/bodytype/bodytype = get_bodytype() + if(bodytype?.body_flags & BODY_FLAG_NO_DNA) + return FALSE + return TRUE + /mob/living/proc/get_butchery_product_name() var/decl/butchery_data/butchery_decl = GET_DECL(butchery_data) . = butchery_decl?.meat_name || name + diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 307ce79a4c5..9d750d10e17 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -76,9 +76,6 @@ var/damageoverlaytemp = 0 var/obj/machinery/machine = null - var/sdisabilities = 0 //Carbon - var/disabilities = 0 //Carbon - var/next_move = null var/real_name = null @@ -115,11 +112,6 @@ var/can_pull_size = ITEM_SIZE_STRUCTURE // Maximum w_class the mob can pull. var/can_pull_mobs = MOB_PULL_SAME // Whether or not the mob can pull other mobs. - var/datum/dna/dna = null//Carbon - var/list/active_genes - var/list/mutations = list() // TODO: Lazylist this var. - //see: setup.dm for list of mutations - var/radiation = 0.0//Carbon var/faction = MOB_FACTION_NEUTRAL //Used for checking whether hostile simple animals will attack you, possibly more stuff later diff --git a/code/modules/mob/mob_genetics.dm b/code/modules/mob/mob_genetics.dm new file mode 100644 index 00000000000..d7fc30f3688 --- /dev/null +++ b/code/modules/mob/mob_genetics.dm @@ -0,0 +1,17 @@ +/mob/proc/get_genetic_conditions() + RETURN_TYPE(/list) + +/mob/proc/can_have_genetic_conditions() + return FALSE + +/mob/proc/has_genetic_condition(condition_type) + return FALSE + +/mob/proc/add_genetic_condition(condition_type, temporary_time) + return FALSE + +/mob/proc/remove_genetic_condition(condition_type) + return FALSE + +/mob/proc/reset_genetic_conditions() + return diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index aaa403b01d6..81b99458d48 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -13,10 +13,10 @@ return FALSE //M is too small to wield this return TRUE -/mob/living/proc/isSynthetic() +/mob/proc/isSynthetic() return 0 -/mob/living/carbon/human/isSynthetic() +/mob/living/human/isSynthetic() if(isnull(full_prosthetic)) robolimb_count = 0 var/list/limbs = get_external_organs() @@ -32,7 +32,7 @@ /mob/proc/isMonkey() return 0 -/mob/living/carbon/human/isMonkey() +/mob/living/human/isMonkey() return istype(species, /decl/species/monkey) @@ -51,7 +51,7 @@ /proc/isdeaf(A) if(isliving(A)) var/mob/living/M = A - return (M.sdisabilities & DEAFENED) || GET_STATUS(M, STAT_DEAF) + return M.has_genetic_condition(GENE_COND_DEAFENED) || GET_STATUS(M, STAT_DEAF) return 0 /proc/iscuffed(var/mob/mob) @@ -422,7 +422,7 @@ var/global/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) return SAFE_PERP return 0 -/mob/living/carbon/human/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest, var/check_network) +/mob/living/human/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest, var/check_network) var/threatcount = ..() if(. == SAFE_PERP) return SAFE_PERP @@ -489,7 +489,7 @@ var/global/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) /mob/observer/ghost/get_multitool() return can_admin_interact() && ..(ghost_multitool) -/mob/living/carbon/human/get_multitool() +/mob/living/human/get_multitool() return ..(get_active_held_item()) /mob/living/silicon/robot/get_multitool() @@ -528,8 +528,6 @@ var/global/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) SetName(new_name) if(mind) mind.name = new_name - if(dna) - dna.real_name = real_name return 1 /mob/proc/ssd_check() @@ -599,12 +597,6 @@ var/global/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) return null return choice -/mob/proc/set_sdisability(sdisability) - sdisabilities |= sdisability - -/mob/proc/unset_sdisability(sdisability) - sdisabilities &= ~sdisability - /mob/proc/get_accumulated_vision_handlers() var/result[2] var/asight = 0 diff --git a/code/modules/mob/mob_layering.dm b/code/modules/mob/mob_layering.dm index 6c0c553e127..e7a933c39cd 100644 --- a/code/modules/mob/mob_layering.dm +++ b/code/modules/mob/mob_layering.dm @@ -49,7 +49,7 @@ return HIDING_MOB_LAYER . = ..() -/mob/living/carbon/human/get_base_layer() +/mob/living/human/get_base_layer() if(current_posture.prone) return LYING_HUMAN_LAYER . = ..() diff --git a/code/modules/mob/mob_snapshot.dm b/code/modules/mob/mob_snapshot.dm new file mode 100644 index 00000000000..8d9636d3f87 --- /dev/null +++ b/code/modules/mob/mob_snapshot.dm @@ -0,0 +1,89 @@ +// Stub type used to replicate old DNA system's role in mob/organ initialization. +// Effectively a snapshot of a mob's state at a moment in time. +/datum/mob_snapshot + var/real_name + var/eye_color + var/blood_type + var/unique_enzymes + var/skin_color + var/skin_tone + var/fingerprint + + var/decl/species/root_species + var/decl/bodytype/root_bodytype + + var/list/sprite_accessories + var/list/genetic_conditions + +/datum/mob_snapshot/New(mob/living/donor, force) + + real_name = donor?.real_name || "unknown" + eye_color = donor?.get_eye_colour() || COLOR_BLACK + blood_type = donor?.get_blood_type() + unique_enzymes = donor?.get_unique_enzymes() + fingerprint = donor?.get_full_print(ignore_blockers = TRUE) + + root_species = donor?.get_species() || get_species_by_key(global.using_map.default_species) + root_bodytype = donor?.get_bodytype() || root_species.default_bodytype + + for(var/obj/item/organ/external/limb in donor?.get_external_organs()) + // Discard anything not relating to our core/original bodytype and species. + // Does this need to be reviewed for Outreach serde? + if(limb.bodytype == root_bodytype && limb.species == root_species && (force || !BP_IS_PROSTHETIC(limb))) + var/list/limb_sprite_acc = limb.get_sprite_accessories(copy = TRUE) + if(length(limb_sprite_acc)) + LAZYSET(sprite_accessories, limb.organ_tag, limb_sprite_acc) + + genetic_conditions = donor?.get_genetic_conditions()?.Copy() + for(var/decl/genetic_condition/condition as anything in genetic_conditions) + if(!condition.is_heritable) + LAZYREMOVE(genetic_conditions, condition) + +/datum/mob_snapshot/Clone() + var/datum/mob_snapshot/clone = ..() + if(clone) + clone.real_name = real_name + clone.eye_color = eye_color + clone.blood_type = blood_type + clone.unique_enzymes = unique_enzymes + clone.skin_color = skin_color + clone.skin_tone = skin_tone + clone.fingerprint = fingerprint + clone.genetic_conditions = genetic_conditions?.Copy() + clone.root_species = root_species + clone.root_bodytype = root_bodytype + if(sprite_accessories) + clone.sprite_accessories = deepCopyList(sprite_accessories) + return clone + +// Replaces UpdateAppearance(). +/datum/mob_snapshot/proc/apply_appearance_to(mob/living/target) + + if(istype(root_species)) + if(istype(root_bodytype)) + target.set_species(root_species.name, root_bodytype) + else + target.set_species(root_species.name) + + else if(istype(root_bodytype)) + target.set_bodytype(root_bodytype) + + target.set_fingerprint(fingerprint) + target.set_unique_enzymes(unique_enzymes) + target.set_skin_colour(skin_color) + target.set_eye_colour(eye_color) + target.set_skin_tone(skin_tone) + + for(var/obj/item/organ/organ in target.get_organs()) + organ.copy_from_mob_snapshot(src) + + for(var/decl/genetic_condition/condition as anything in genetic_conditions) + target.add_genetic_condition(condition.type) + + target.force_update_limbs() + target.update_hair(update_icons = FALSE) + target.update_eyes() + return TRUE + +/mob/proc/get_mob_snapshot(force = FALSE) + return (force || has_genetic_information()) ? new /datum/mob_snapshot(src, force) : null diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm index e4f273ad596..372ff1e6b38 100644 --- a/code/modules/mob/mob_transformation_simple.dm +++ b/code/modules/mob/mob_transformation_simple.dm @@ -2,8 +2,8 @@ var/global/list/href_to_mob_type = list( "Observer" = /mob/observer/ghost, "Crew" = list( - "Human" = /mob/living/carbon/human, - "Monkey" = /mob/living/carbon/human/monkey, + "Human" = /mob/living/human, + "Monkey" = /mob/living/human/monkey, "Robot" = /mob/living/silicon/robot ), "Animals" = list( @@ -77,16 +77,13 @@ var/global/list/href_to_mob_type = list( M.SetName(name) M.real_name = real_name - if(dna) - M.dna = dna.Clone() - if(mind) mind.transfer_to(M) if(!M.key) // ghost minds are inactive for reasons that escape me M.key = key if(subspecies && ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M H.change_species(subspecies) return M diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index b8537e6e002..7522407c8ae 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -132,7 +132,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player) if(isnull(client.holder)) announce_ghost_joinleave(src) - var/mob/living/carbon/human/dummy/mannequin = get_mannequin(client.ckey) + var/mob/living/human/dummy/mannequin = get_mannequin(client.ckey) if(mannequin) client.prefs.dress_preview_mob(mannequin) observer.set_appearance(mannequin) @@ -352,7 +352,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player) spawning = 1 close_spawn_windows() - var/mob/living/carbon/human/new_character + var/mob/living/human/new_character var/decl/species/chosen_species if(client.prefs.species) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 3ab762eae4e..1c997ec0de5 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -1,4 +1,4 @@ -/datum/preferences/proc/randomize_appearance_and_body_for(var/mob/living/carbon/human/H) +/datum/preferences/proc/randomize_appearance_and_body_for(var/mob/living/human/H) if(!H) H = client?.mob @@ -48,7 +48,7 @@ if(H) copy_to(H) -/datum/preferences/proc/dress_preview_mob(var/mob/living/carbon/human/dummy/mannequin) +/datum/preferences/proc/dress_preview_mob(var/mob/living/human/dummy/mannequin) if(!mannequin) return @@ -104,7 +104,7 @@ mannequin.compile_overlays() /datum/preferences/proc/update_preview_icon() - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client?.ckey) + var/mob/living/human/dummy/mannequin/mannequin = get_mannequin(client?.ckey) if(mannequin) mannequin.delete_inventory(TRUE) dress_preview_mob(mannequin) diff --git a/code/modules/mob/observer/ghost/ghost.dm b/code/modules/mob/observer/ghost/ghost.dm index 188bc47fc4e..f9026358567 100644 --- a/code/modules/mob/observer/ghost/ghost.dm +++ b/code/modules/mob/observer/ghost/ghost.dm @@ -127,13 +127,13 @@ Works together with spawning an observer, noted above. /mob/observer/ghost/proc/process_medHUD(var/mob/M) var/client/C = M.client - for(var/mob/living/carbon/human/patient in oview(M, 14)) + for(var/mob/living/human/patient in oview(M, 14)) C.images += patient.hud_list[HEALTH_HUD] C.images += patient.hud_list[STATUS_HUD_OOC] /mob/observer/ghost/proc/assess_targets(list/target_list, mob/observer/ghost/U) var/client/C = U.client - for(var/mob/living/carbon/human/target in target_list) + for(var/mob/living/human/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] for(var/mob/living/silicon/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] diff --git a/code/modules/mob/skills/skill_verbs.dm b/code/modules/mob/skills/skill_verbs.dm index bad46b8f8b2..9364a5d8862 100644 --- a/code/modules/mob/skills/skill_verbs.dm +++ b/code/modules/mob/skills/skill_verbs.dm @@ -72,7 +72,7 @@ Robots and antags can instruct. if(skillset.owner.skill_check(S.type, SKILL_EXPERT)) return 1 -/mob/proc/can_instruct(mob/living/carbon/human/target, var/get_options = FALSE) +/mob/proc/can_instruct(mob/living/human/target, var/get_options = FALSE) var/datum/skill_verb/instruct/SV = skillset.fetch_verb_datum(/datum/skill_verb/instruct) if(!SV || !istype(target)) @@ -98,7 +98,7 @@ Robots and antags can instruct. if(!target.skill_check(S.type, SKILL_BASIC) && skill_check(S.type, SKILL_EXPERT)) LAZYSET(., S.name, S) -/mob/proc/instruct(mob/living/carbon/human/target as mob in oview(2)) +/mob/proc/instruct(mob/living/human/target as mob in oview(2)) set category = "IC" set name = "Instruct" diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 47b9ba306b7..3d3d1406bc5 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/human/proc/monkeyize() +/mob/living/human/proc/monkeyize() if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) return for(var/obj/item/W in get_contained_external_atoms()) @@ -29,8 +29,6 @@ for(var/obj/item/W in src) drop_from_inventory(W) change_species(species.primitive_form) - dna.SetSEState(global.MONKEYBLOCK,1) - dna.SetSEValueRange(global.MONKEYBLOCK,0xDAC, 0xFFF) to_chat(src, "You are now [species.name]. ") qdel(animation) @@ -41,7 +39,7 @@ spawning = 1 return ..() -/mob/living/carbon/human/AIize(move=1) // 'move' argument needs defining here too because BYOND is dumb +/mob/living/human/AIize(move=1) // 'move' argument needs defining here too because BYOND is dumb if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) return QDEL_NULL_LIST(worn_underwear) @@ -106,7 +104,7 @@ return O //human -> robot -/mob/living/carbon/human/proc/Robotize(var/supplied_robot_type = /mob/living/silicon/robot) +/mob/living/human/proc/Robotize(var/supplied_robot_type = /mob/living/silicon/robot) if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) return QDEL_NULL_LIST(worn_underwear) @@ -143,7 +141,7 @@ qdel(src) // Queues us for a hard delete return O -/mob/living/carbon/human/proc/corgize() +/mob/living/human/proc/corgize() if (HAS_TRANSFORMATION_MOVEMENT_HANDLER(src)) return for(var/obj/item/W in src) @@ -163,7 +161,7 @@ qdel(src) return -/mob/living/carbon/human/Animalize() +/mob/living/human/Animalize() var/list/mobtypes = typesof(/mob/living/simple_animal) var/mobpath = input("Which type of mob should [src] turn into?", "Choose a type") in mobtypes @@ -262,9 +260,9 @@ return 0 -/mob/living/carbon/human/proc/zombify() - make_husked() - mutations |= MUTATION_CLUMSY +/mob/living/human/proc/zombify() + add_genetic_condition(GENE_COND_HUSK) + add_genetic_condition(GENE_COND_CLUMSY) src.visible_message("\The [src]'s skin decays before your very eyes!", "Your entire body is ripe with pain as it is consumed down to flesh and bones. You ... hunger. Not only for flesh, but to spread this gift.") if (src.mind) if (src.mind.assigned_special_role == "Zombie") diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index 3c38a1b7daa..890f90d27c8 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -57,7 +57,7 @@ if(redraw_mob) queue_icon_update() -/mob/proc/update_mutations() +/mob/proc/update_genetic_conditions() return /mob/proc/update_hair(var/update_icons=1) diff --git a/code/modules/mob_holder/_holder.dm b/code/modules/mob_holder/_holder.dm index db21bf95f0e..7efdbfa7f9c 100644 --- a/code/modules/mob_holder/_holder.dm +++ b/code/modules/mob_holder/_holder.dm @@ -134,7 +134,7 @@ /obj/item/holder/proc/sync(var/mob/living/M) SetName(M.name) desc = M.desc - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(istype(H)) last_holder = H register_all_movement(H, M) diff --git a/code/modules/mob_holder/holder_mobs.dm b/code/modules/mob_holder/holder_mobs.dm index 653c71d807d..d07a128335c 100644 --- a/code/modules/mob_holder/holder_mobs.dm +++ b/code/modules/mob_holder/holder_mobs.dm @@ -4,10 +4,10 @@ /mob/proc/get_holder_color() return color -/mob/living/carbon/human/get_holder_icon() +/mob/living/human/get_holder_icon() return species.holder_icon || ..() -/mob/living/carbon/human/get_holder_color() +/mob/living/human/get_holder_color() return species.get_holder_color(src) //Mob procs for scooping up diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index ede7ce9165a..9c0f8f262cd 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -39,7 +39,7 @@ // Used to install preset-specific programs /obj/item/modular_computer/proc/install_default_programs() - var/mob/living/carbon/human/H = get_recursive_loc_of_type(/mob) + var/mob/living/human/H = get_recursive_loc_of_type(/mob) var/list/job_programs = list() if(H) var/datum/job/jb = SSjobs.get_by_title(H.job) diff --git a/code/modules/modular_computers/computers/subtypes/dev_pda.dm b/code/modules/modular_computers/computers/subtypes/dev_pda.dm index 15b3f94e5d3..de01d091157 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_pda.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_pda.dm @@ -24,7 +24,7 @@ /obj/item/modular_computer/pda/on_update_icon() . = ..() - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(istype(H) && H.get_equipped_item(slot_wear_id_str) == src) H.update_equipment_overlay(slot_wear_id_str) diff --git a/code/modules/modular_computers/computers/subtypes/preset_pda.dm b/code/modules/modular_computers/computers/subtypes/preset_pda.dm index 49cb461c8c0..0783c94d1fc 100644 --- a/code/modules/modular_computers/computers/subtypes/preset_pda.dm +++ b/code/modules/modular_computers/computers/subtypes/preset_pda.dm @@ -35,12 +35,6 @@ "stripe2" = COLOR_GOLD ) -/obj/item/modular_computer/pda/ninja - color = COLOR_GRAY20 - decals = list( - "stripe" = COLOR_BLACK - ) - /obj/item/modular_computer/pda/heads color = COLOR_NAVY_BLUE diff --git a/code/modules/modular_computers/file_system/programs/generic/folding.dm b/code/modules/modular_computers/file_system/programs/generic/folding.dm index 30c5c9ffcd0..a7472a35264 100644 --- a/code/modules/modular_computers/file_system/programs/generic/folding.dm +++ b/code/modules/modular_computers/file_system/programs/generic/folding.dm @@ -64,7 +64,7 @@ if(world.timeofday < next_event) //Checks if it's time for the next crash chance. return - var/mob/living/holder = computer.holder.get_recursive_loc_of_type(/mob/living/carbon/human) + var/mob/living/holder = computer.holder.get_recursive_loc_of_type(/mob/living/human) var/host = computer.get_physical_host() if(program_status > PROGRAM_STATUS_CRASHED) if(PROGRAM_STATUS_RUNNING_SCALDING >= program_status) diff --git a/code/modules/modular_computers/file_system/programs/generic/supply.dm b/code/modules/modular_computers/file_system/programs/generic/supply.dm index 82c554665be..c13b4b0101b 100644 --- a/code/modules/modular_computers/file_system/programs/generic/supply.dm +++ b/code/modules/modular_computers/file_system/programs/generic/supply.dm @@ -180,7 +180,7 @@ var/idname = "*None Provided*" var/idrank = "*None Provided*" if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user idname = H.get_authentification_name() idrank = H.get_assignment() else if(issilicon(user)) diff --git a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm index d5586fc52de..21839f9d5d5 100644 --- a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm +++ b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm @@ -48,7 +48,7 @@ if(href_list["track"]) if(isAI(usr)) var/mob/living/silicon/ai/AI = usr - var/mob/living/carbon/human/H = locate(href_list["track"]) in SSmobs.mob_list + var/mob/living/human/H = locate(href_list["track"]) in SSmobs.mob_list if(hassensorlevel(H, VITALS_SENSOR_TRACKING)) AI.ai_actual_track(H) return 1 diff --git a/code/modules/modular_computers/file_system/reports/crew_record.dm b/code/modules/modular_computers/file_system/reports/crew_record.dm index 190e05ef531..6364d2c4bca 100644 --- a/code/modules/modular_computers/file_system/reports/crew_record.dm +++ b/code/modules/modular_computers/file_system/reports/crew_record.dm @@ -23,13 +23,13 @@ var/global/arrest_security_status = "Arrest" . = ..() global.all_crew_records.Remove(src) -/datum/computer_file/report/crew_record/proc/load_from_mob(var/mob/living/carbon/human/H) +/datum/computer_file/report/crew_record/proc/load_from_mob(var/mob/living/human/H) if(istype(H)) photo_front = getFlatIcon(H, SOUTH, always_use_defdir = 1) photo_side = getFlatIcon(H, WEST, always_use_defdir = 1) else - var/mob/living/carbon/human/dummy = new() + var/mob/living/human/dummy = new() photo_front = getFlatIcon(dummy, SOUTH, always_use_defdir = 1) photo_side = getFlatIcon(dummy, WEST, always_use_defdir = 1) qdel(dummy) @@ -202,7 +202,7 @@ var/global/arrest_security_status = "Arrest" return CR return null -/proc/GetAssignment(var/mob/living/carbon/human/H) +/proc/GetAssignment(var/mob/living/human/H) if(!H) return "Unassigned" if(!H.mind) diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index b25a5c78af0..326db2561e1 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -16,7 +16,7 @@ /mob/proc/move_down() SelfMove(DOWN) -/mob/living/carbon/human/move_up() +/mob/living/human/move_up() var/turf/old_loc = loc ..() if(loc != old_loc) @@ -48,7 +48,7 @@ /mob/proc/can_overcome_gravity() return FALSE -/mob/living/carbon/human/can_overcome_gravity() +/mob/living/human/can_overcome_gravity() //First do species check if(species && species.can_overcome_gravity(src)) return 1 @@ -162,7 +162,7 @@ if((locate(/obj/structure/disposalpipe/up) in below) || locate(/obj/machinery/atmospherics/pipe/zpipe/up) in below) return FALSE -/mob/living/carbon/human/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = loc) +/mob/living/human/can_fall(var/anchor_bypass = FALSE, var/turf/location_override = loc) if(..()) return species.can_fall(src) @@ -239,7 +239,7 @@ return 100 return BASE_STORAGE_COST(w_class) -/mob/living/carbon/human/apply_fall_damage(var/turf/landing) +/mob/living/human/apply_fall_damage(var/turf/landing) if(status_flags & GODMODE) return if(species && species.handle_fall_special(src, landing)) @@ -268,7 +268,7 @@ victim.dislocate() to_chat(src, "You feel a sickening pop as your [victim.joint] is wrenched out of the socket.") -/mob/living/carbon/human/proc/climb_up(atom/A) +/mob/living/human/proc/climb_up(atom/A) if(!isturf(loc) || !bound_overlay || bound_overlay.destruction_timer || is_physically_disabled()) // This destruction_timer check ideally wouldn't be required, but I'm not awake enough to refactor this to not need it. return FALSE @@ -375,7 +375,7 @@ /mob/living/simple_animal/can_float() return is_aquatic -/mob/living/carbon/human/can_float() +/mob/living/human/can_float() return species.can_float(src) /mob/living/silicon/can_float() diff --git a/code/modules/multiz/stairs.dm b/code/modules/multiz/stairs.dm index 6bff344b06d..e99c09cd85d 100644 --- a/code/modules/multiz/stairs.dm +++ b/code/modules/multiz/stairs.dm @@ -33,7 +33,7 @@ for(var/obj/item/grab/G in L.get_active_grabs()) G.affecting.forceMove(target) if(ishuman(A)) - var/mob/living/carbon/human/H = A + var/mob/living/human/H = A if(H.has_footsteps()) playsound(source, 'sound/effects/stairs_step.ogg', 50) playsound(target, 'sound/effects/stairs_step.ogg', 50) diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm index 46b8190ae47..4e1f89bb2d4 100644 --- a/code/modules/nano/interaction/default.dm +++ b/code/modules/nano/interaction/default.dm @@ -83,7 +83,7 @@ var/global/datum/topic_state/default/default_topic_state = new if(. == STATUS_INTERACTIVE) return STATUS_UPDATE -/mob/living/carbon/human/default_can_use_topic(var/src_object) +/mob/living/human/default_can_use_topic(var/src_object) . = shared_nano_interaction(src_object) if(. != STATUS_CLOSE) if(loc) diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index 926fe34acf2..8b30cf95b20 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -2,12 +2,12 @@ name = "Appearance Editor" available_to_ai = FALSE var/flags = APPEARANCE_ALL_HAIR - var/mob/living/carbon/human/owner = null + var/mob/living/human/owner = null var/check_whitelist var/list/whitelist var/list/blacklist -/datum/nano_module/appearance_changer/New(var/location, var/mob/living/carbon/human/H, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list()) +/datum/nano_module/appearance_changer/New(var/location, var/mob/living/human/H, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list()) ..() owner = H src.check_whitelist = check_species_whitelist @@ -43,38 +43,32 @@ if(href_list["skin_color"] && can_change_skin_color()) var/new_skin = input(usr, "Choose your character's skin colour: ", "Skin Color", owner.get_skin_colour()) as color|null if(new_skin && can_still_topic(state) && owner.set_skin_colour(new_skin)) - update_dna() return TRUE if(href_list["hair"]) var/decl/sprite_accessory/hair = locate(href_list["hair"]) if(can_change(APPEARANCE_HAIR) && istype(hair) && (hair.type in owner.get_species()?.get_available_accessory_types(owner.get_bodytype(), SAC_HAIR)) && SET_HAIR_STYLE(owner, hair.type, FALSE)) - update_dna() return TRUE if(href_list["hair_color"] && can_change(APPEARANCE_HAIR_COLOR)) var/new_hair = input("Please select hair color.", "Hair Color", GET_HAIR_COLOUR(owner)) as color|null if(new_hair && can_still_topic(state) && SET_HAIR_COLOUR(owner, new_hair, FALSE)) - update_dna() return TRUE if(href_list["facial_hair"]) var/decl/sprite_accessory/facial_hair = locate(href_list["facial_hair"]) if(can_change(APPEARANCE_FACIAL_HAIR) && istype(facial_hair) && (facial_hair.type in owner.get_species()?.get_available_accessory_types(owner.get_bodytype(), SAC_FACIAL_HAIR)) && SET_FACIAL_HAIR_STYLE(owner, facial_hair.type, FALSE)) - update_dna() return TRUE if(href_list["facial_hair_color"] && can_change(APPEARANCE_FACIAL_HAIR_COLOR)) var/new_facial = input("Please select facial hair color.", "Facial Hair Color", GET_FACIAL_HAIR_COLOUR(owner)) as color|null if(new_facial && can_still_topic(state) && SET_FACIAL_HAIR_COLOUR(owner, new_facial, FALSE)) - update_dna() return TRUE if(href_list["eye_color"]) if(can_change(APPEARANCE_EYE_COLOR)) var/new_eyes = input("Please select eye color.", "Eye Color", owner.get_eye_colour()) as color|null if(new_eyes && can_still_topic(state) && owner.set_eye_colour(new_eyes)) - update_dna() return TRUE return FALSE @@ -143,10 +137,6 @@ ui.open() ui.set_auto_update(1) -/datum/nano_module/appearance_changer/proc/update_dna() - if(owner && (flags & APPEARANCE_UPDATE_DNA)) - owner.update_dna() - /datum/nano_module/appearance_changer/proc/can_change(var/flag) return owner && (flags & flag) diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm index 09cd55986e1..1b718f2a068 100644 --- a/code/modules/organs/external/_external.dm +++ b/code/modules/organs/external/_external.dm @@ -81,6 +81,13 @@ var/image/hud_damage_image var/fingerprint +/obj/item/organ/external/proc/set_fingerprint(value) + if((limb_flags & ORGAN_FLAG_FINGERPRINT) && !BP_IS_PROSTHETIC(src)) + fingerprint = value + else + for(var/obj/item/organ/external/E in children) + E.set_fingerprint(value) + /obj/item/organ/external/proc/get_fingerprint() if((limb_flags & ORGAN_FLAG_FINGERPRINT) && !BP_IS_PROSTHETIC(src)) @@ -102,7 +109,7 @@ F.completeness = rand(10,90) forensics.add_data(/datum/forensics/fingerprints, F) -/obj/item/organ/external/Initialize(mapload, material_key, datum/dna/given_dna, decl/bodytype/new_bodytype) +/obj/item/organ/external/Initialize(mapload, material_key, datum/mob_snapshot/supplied_appearance, decl/bodytype/new_bodytype) . = ..() if(. != INITIALIZE_HINT_QDEL && isnull(pain_disability_threshold)) pain_disability_threshold = (max_damage * 0.75) @@ -144,8 +151,16 @@ if(.) update_icon(TRUE) -/obj/item/organ/external/set_dna(var/datum/dna/new_dna) +/obj/item/organ/external/copy_from_mob_snapshot(datum/mob_snapshot/supplied_appearance) _icon_cache_key = null + if(organ_tag in supplied_appearance?.sprite_accessories) + var/list/sprite_cats = supplied_appearance.sprite_accessories[organ_tag] + for(var/category in sprite_cats) + var/list/marklist = sprite_cats[category] + for(var/accessory in marklist) + set_sprite_accessory(accessory, null, marklist[accessory], skip_update = TRUE) + else + clear_sprite_accessories(skip_update = TRUE) return ..() /obj/item/organ/external/reset_status() @@ -413,7 +428,7 @@ if(can_feel_pain()) add_pain(20) owner.apply_effect(5, STUN) - owner.verbs |= /mob/living/carbon/human/proc/undislocate + owner.verbs |= /mob/living/human/proc/undislocate /obj/item/organ/external/proc/undislocate(var/skip_pain = FALSE) if(!(limb_flags & ORGAN_FLAG_CAN_DISLOCATE)) @@ -429,10 +444,10 @@ for(var/obj/item/organ/external/limb in owner.get_external_organs()) if(limb.is_dislocated()) return - owner.verbs -= /mob/living/carbon/human/proc/undislocate + owner.verbs -= /mob/living/human/proc/undislocate //If "in_place" is TRUE will make organs skip their install/uninstall effects and the sub-limbs and internal organs -/obj/item/organ/external/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place, update_icon, detached) +/obj/item/organ/external/do_install(mob/living/human/target, obj/item/organ/external/affected, in_place, update_icon, detached) if(!(. = ..())) return @@ -629,9 +644,15 @@ This function completely restores a damaged organ to perfect condition. if(!owner || damage <= 0) return - if(BP_IS_CRYSTAL(src) && (damage >= 15 || prob(1))) + if(BP_IS_CRYSTAL(src)) type = SHATTER - playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 40, 1) // Crash! + if(damage >= 15 || prob(1)) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 40, 1) // Crash! + else if((limb_flags & ORGAN_FLAG_SKELETAL) || (BP_IS_PROSTHETIC(src) && !bodytype.is_robotic)) + if(type == BURN) + type = CHARRED + else + type = SHATTER //moved these before the open_wound check so that having many small wounds for example doesn't somehow protect you from taking internal damage (because of the return) //Brute damage can possibly trigger an internal wound, too. @@ -713,7 +734,7 @@ This function completely restores a damaged organ to perfect condition. if(length(ailments)) return TRUE - if(status & (ORGAN_CUT_AWAY|ORGAN_BLEEDING|ORGAN_BROKEN|ORGAN_DEAD|ORGAN_MUTATED|ORGAN_DISLOCATED)) + if(status & (ORGAN_CUT_AWAY|ORGAN_BLEEDING|ORGAN_BROKEN|ORGAN_MUTATED|ORGAN_DISLOCATED|ORGAN_DEAD)) return TRUE if((brute_dam || burn_dam) && !BP_IS_PROSTHETIC(src)) //Robot limbs don't autoheal and thus don't need to process when damaged @@ -910,7 +931,7 @@ Note that amputating the affected organ does in fact remove the infection from t status &= ~ORGAN_BLEEDING var/clamped = 0 - var/mob/living/carbon/human/H + var/mob/living/human/H if(ishuman(owner)) H = owner @@ -1064,7 +1085,7 @@ Note that amputating the affected organ does in fact remove the infection from t owner.shock_stage += min_broken_damage var/obj/item/organ/external/original_parent = parent - var/mob/living/carbon/human/victim = owner //Keep a reference for post-removed(). + var/mob/living/human/victim = owner //Keep a reference for post-removed(). owner.remove_organ(src, TRUE, FALSE, ignore_children, update_icon = FALSE) var/remaining_organs = victim.get_external_organs() if(istype(victim) && !QDELETED(victim)) @@ -1132,7 +1153,7 @@ Note that amputating the affected organ does in fact remove the infection from t HELPERS ****************************************************/ -/obj/item/organ/external/proc/release_restraints(var/mob/living/carbon/human/holder) +/obj/item/organ/external/proc/release_restraints(var/mob/living/human/holder) if(!holder) holder = owner if(!holder) @@ -1339,7 +1360,7 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/do_uninstall(in_place, detach, ignore_children, update_icon) - var/mob/living/carbon/human/victim = owner //parent proc clears owner + var/mob/living/human/victim = owner //parent proc clears owner if(!(. = ..())) return @@ -1437,7 +1458,7 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/proc/get_incision(var/strict) var/datum/wound/incision - if(BP_IS_CRYSTAL(src)) + if(BP_IS_CRYSTAL(src) || (limb_flags & ORGAN_FLAG_SKELETAL)) for(var/datum/wound/shatter/other in wounds) if(!incision || incision.damage < other.damage) incision = other @@ -1600,3 +1621,25 @@ Note that amputating the affected organ does in fact remove the infection from t var/default_results = bodytype.get_default_grooming_results(src, tool) if(default_results) . = default_results + +/obj/item/organ/external/proc/get_sprite_accessories(copy = FALSE) + if(copy) + return _sprite_accessories?.Copy() + return _sprite_accessories + +/obj/item/organ/external/proc/skeletonize(mob/living/donor) + if(limb_flags & ORGAN_FLAG_SKELETAL) + return + if(!donor) + if(!owner) + return + donor = owner + var/decl/butchery_data/butchery_data = GET_DECL(donor.butchery_data) + if(!butchery_data?.bone_material) + return + material = GET_DECL(butchery_data?.bone_material) + limb_flags |= ORGAN_FLAG_SKELETAL + status |= (ORGAN_DEAD|ORGAN_BRITTLE) + _sprite_accessories = null + update_icon() + diff --git a/code/modules/organs/external/_external_damage.dm b/code/modules/organs/external/_external_damage.dm index 3d08950e120..59136820d93 100644 --- a/code/modules/organs/external/_external_damage.dm +++ b/code/modules/organs/external/_external_damage.dm @@ -307,13 +307,13 @@ /obj/item/organ/external/proc/sever_artery() var/obj/item/organ/internal/heart/heart_path = bodytype?.has_organ[BP_HEART] if(heart_path) - if(!BP_IS_PROSTHETIC(src) && !(status & ORGAN_ARTERY_CUT) && !initial(heart_path.open)) + if(!BP_IS_PROSTHETIC(src) && !(limb_flags & ORGAN_FLAG_SKELETAL) && !(status & ORGAN_ARTERY_CUT) && !initial(heart_path.open)) status |= ORGAN_ARTERY_CUT return TRUE return FALSE /obj/item/organ/external/proc/sever_tendon() - if((limb_flags & ORGAN_FLAG_HAS_TENDON) && !BP_IS_PROSTHETIC(src) && !(status & ORGAN_TENDON_CUT)) + if((limb_flags & ORGAN_FLAG_HAS_TENDON) && !BP_IS_PROSTHETIC(src) && !(limb_flags & ORGAN_FLAG_SKELETAL) && !(status & ORGAN_TENDON_CUT)) status |= ORGAN_TENDON_CUT return TRUE return FALSE diff --git a/code/modules/organs/external/_external_icons.dm b/code/modules/organs/external/_external_icons.dm index 687e4e12738..07af53dd451 100644 --- a/code/modules/organs/external/_external_icons.dm +++ b/code/modules/organs/external/_external_icons.dm @@ -18,7 +18,14 @@ var/global/list/limb_icon_cache = list() update_icon() compile_overlays() -/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human) +/obj/item/organ/external/proc/get_surgery_overlay_icon() + if(limb_flags & ORGAN_FLAG_SKELETAL) + return null + if(BP_IS_PROSTHETIC(src)) + return null + return species?.get_surgery_overlay_icon(owner) + +/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/human/human) _icon_cache_key = null skin_tone = null skin_colour = null @@ -29,16 +36,7 @@ var/global/list/limb_icon_cache = list() if(bodytype.appearance_flags & HAS_SKIN_COLOR) skin_colour = human.get_skin_colour() -/obj/item/organ/external/proc/sync_colour_to_dna() - _icon_cache_key = null - skin_tone = null - skin_colour = null - if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (bodytype.appearance_flags & HAS_A_SKIN_TONE)) - skin_tone = dna.GetUIValue(DNA_UI_SKIN_TONE) - if(bodytype.appearance_flags & HAS_SKIN_COLOR) - skin_colour = rgb(dna.GetUIValue(DNA_UI_SKIN_R), dna.GetUIValue(DNA_UI_SKIN_G), dna.GetUIValue(DNA_UI_SKIN_B)) - -/obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human) +/obj/item/organ/external/head/sync_colour_to_human(var/mob/living/human/human) ..() var/obj/item/organ/internal/eyes/eyes = human.get_organ(BP_EYES, /obj/item/organ/internal/eyes) if(eyes) eyes.update_colour() @@ -53,10 +51,10 @@ var/global/list/limb_icon_cache = list() /obj/item/organ/external/proc/update_limb_icon_file() if(!bodytype) // This should not happen. icon = initial(icon) + else if(limb_flags & ORGAN_FLAG_SKELETAL) + icon = bodytype.get_skeletal_icon(owner) else if(!BP_IS_PROSTHETIC(src) && (status & ORGAN_MUTATED)) icon = bodytype.get_base_icon(owner, get_deform = TRUE) - else if(owner && (limb_flags & ORGAN_FLAG_SKELETAL)) - icon = bodytype.get_skeletal_icon(owner) else icon = bodytype.get_base_icon(owner) @@ -65,14 +63,20 @@ var/global/list/organ_icon_cache = list() // Generate base icon with colour and tone. var/icon/ret = bodytype.apply_limb_colouration(src, new /icon(icon, icon_state)) - if(status & ORGAN_DEAD) + if(limb_flags & ORGAN_FLAG_SKELETAL) + global.organ_icon_cache[_icon_cache_key] = ret + return ret + + if((status & ORGAN_DEAD)) ret.ColorTone(rgb(10,50,0)) ret.SetIntensity(0.7) + if(skin_tone) if(skin_tone >= 0) ret.Blend(rgb(skin_tone, skin_tone, skin_tone), ICON_ADD) else ret.Blend(rgb(-skin_tone, -skin_tone, -skin_tone), ICON_SUBTRACT) + if((bodytype.appearance_flags & HAS_SKIN_COLOR) && skin_colour) ret.Blend(skin_colour, skin_blend) @@ -108,7 +112,14 @@ var/global/list/organ_icon_cache = list() LAZYADD(., accessory_image) /obj/item/organ/external/proc/get_icon_cache_key_components() + . = list("[icon_state]_[species.name]_[bodytype?.name || "BAD_BODYTYPE"]_[render_alpha]_[icon]") + + // Skeletons don't care about most icon appearance stuff. + if(limb_flags & ORGAN_FLAG_SKELETAL) + . += "_skeletal_[skin_blend]" + return + if(status & ORGAN_DEAD) . += "_dead" . += "_tone_[skin_tone]_color_[skin_colour]_[skin_blend]" diff --git a/code/modules/organs/external/diagnostics.dm b/code/modules/organs/external/diagnostics.dm index fd7ace688cc..1b74273117b 100644 --- a/code/modules/organs/external/diagnostics.dm +++ b/code/modules/organs/external/diagnostics.dm @@ -90,6 +90,8 @@ . += "Splinted" if(status & ORGAN_BLEEDING) . += "Bleeding" + if(limb_flags & ORGAN_FLAG_SKELETAL) + . += "Skeletal" if(status & ORGAN_BROKEN) . += capitalize(broken_description) if (LAZYLEN(implants)) diff --git a/code/modules/organs/external/head.dm b/code/modules/organs/external/head.dm index 876eb22f3d6..1d6b432822c 100644 --- a/code/modules/organs/external/head.dm +++ b/code/modules/organs/external/head.dm @@ -93,7 +93,7 @@ /obj/item/organ/external/head/proc/get_eyes_organ() RETURN_TYPE(/obj/item/organ/internal/eyes) if(owner) - return owner.get_organ((owner.get_bodytype().vision_organ || BP_EYES), /obj/item/organ/internal/eyes) + return owner.get_organ((owner.get_vision_organ_tag() || BP_EYES), /obj/item/organ/internal/eyes) return locate(/obj/item/organ/internal/eyes) in contents /obj/item/organ/external/head/get_icon_cache_key_components() @@ -114,7 +114,7 @@ if(eye_glow) LAZYADD(., eye_glow) -/obj/item/organ/external/head/gripper/do_install(mob/living/carbon/human/target, affected, in_place, update_icon, detached) +/obj/item/organ/external/head/gripper/do_install(mob/living/human/target, affected, in_place, update_icon, detached) . = ..() if(. && owner) owner.add_held_item_slot(new /datum/inventory_slot/gripper/mouth) diff --git a/code/modules/organs/external/standard.dm b/code/modules/organs/external/standard.dm index 8579c7690da..6864436733d 100644 --- a/code/modules/organs/external/standard.dm +++ b/code/modules/organs/external/standard.dm @@ -144,7 +144,7 @@ limb_flags = ORGAN_FLAG_CAN_AMPUTATE | ORGAN_FLAG_FINGERPRINT | ORGAN_FLAG_HAS_TENDON | ORGAN_FLAG_CAN_BREAK | ORGAN_FLAG_CAN_DISLOCATE var/gripper_type = /datum/inventory_slot/gripper/left_hand -/obj/item/organ/external/hand/do_install(mob/living/carbon/human/target, affected, in_place, update_icon, detached) +/obj/item/organ/external/hand/do_install(mob/living/human/target, affected, in_place, update_icon, detached) . = ..() if(. && owner && gripper_type) owner.add_held_item_slot(new gripper_type) diff --git a/code/modules/organs/external/tail.dm b/code/modules/organs/external/tail.dm index 55fff675056..0425e7de994 100644 --- a/code/modules/organs/external/tail.dm +++ b/code/modules/organs/external/tail.dm @@ -29,13 +29,13 @@ var/tail_states = 1 /obj/item/organ/external/tail/do_uninstall(in_place, detach, ignore_children, update_icon) - var/mob/living/carbon/human/H = owner + var/mob/living/human/H = owner if(!(. = ..())) return if(update_icon && !istype(H) && !QDELETED(H) && H != owner) H.update_tail_showing(FALSE) -/obj/item/organ/external/tail/do_install(mob/living/carbon/human/target, affected, in_place, update_icon, detached) +/obj/item/organ/external/tail/do_install(mob/living/human/target, affected, in_place, update_icon, detached) . = ..() if(update_icon && istype(owner) && !QDELETED(owner)) owner.update_tail_showing(FALSE) diff --git a/code/modules/organs/external/wounds/wound_types.dm b/code/modules/organs/external/wounds/wound_types.dm index 0508751aa12..a60663462b7 100644 --- a/code/modules/organs/external/wounds/wound_types.dm +++ b/code/modules/organs/external/wounds/wound_types.dm @@ -57,6 +57,18 @@ return /datum/wound/shatter/cracked if(0 to 15) return /datum/wound/shatter/chipped + if(CHARRED) + switch(damage) + if(50 to INFINITY) + return /datum/wound/charred/charcoal + if(40 to 50) + return /datum/wound/charred/charred + if(30 to 40) + return /datum/wound/charred/burned + if(15 to 30) + return /datum/wound/charred/seared + if(0 to 15) + return /datum/wound/charred/singed return null //no wound @@ -345,3 +357,18 @@ /datum/wound/shatter/chipped stages = list("chip" = 0) + +/datum/wound/charred/charcoal + stages = list("crumbling charred area" = 0) + +/datum/wound/charred/charred + stages = list("charred area" = 0) + +/datum/wound/charred/burned + stages = list("burned area" = 0) + +/datum/wound/charred/seared + stages = list("lightly seared area" = 0) + +/datum/wound/charred/singed + stages = list("singed area" = 0) diff --git a/code/modules/organs/internal/_internal.dm b/code/modules/organs/internal/_internal.dm index b07a455e703..4ced3c84d5a 100644 --- a/code/modules/organs/internal/_internal.dm +++ b/code/modules/organs/internal/_internal.dm @@ -27,7 +27,7 @@ /// Whether or not we should try to transfer a brainmob when removed or replaced in a mob. var/transfer_brainmob_with_organ = FALSE -/obj/item/organ/internal/Initialize(mapload, material_key, datum/dna/given_dna, decl/bodytype/new_bodytype) +/obj/item/organ/internal/Initialize(mapload, material_key, datum/mob_snapshot/supplied_appearance, decl/bodytype/new_bodytype) if(!alive_icon) alive_icon = initial(icon_state) . = ..() @@ -38,7 +38,7 @@ if(species.organs_icon) icon = species.organs_icon -/obj/item/organ/internal/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place, update_icon, detached) +/obj/item/organ/internal/do_install(mob/living/human/target, obj/item/organ/external/affected, in_place, update_icon, detached) . = ..() if(!affected) @@ -276,7 +276,6 @@ if(update_brainmob) brainmob.SetName(M.real_name) brainmob.real_name = M.real_name - brainmob.dna = M.dna?.Clone() brainmob.languages = M.languages?.Copy() brainmob.default_language = M.default_language to_chat(brainmob, SPAN_NOTICE("You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].")) @@ -292,7 +291,7 @@ return brainmob?.key // This might need revisiting to stop people successfully implanting brains in groins and transferring minds. -/obj/item/organ/internal/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place, update_icon, detached) +/obj/item/organ/internal/do_install(mob/living/human/target, obj/item/organ/external/affected, in_place, update_icon, detached) . = ..() if(transfer_brainmob_with_organ && istype(owner)) var/mob/living/brainmob = get_brainmob(create_if_missing = FALSE) diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index e9c16bafef1..3721d55e684 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -185,9 +185,9 @@ /obj/item/organ/internal/brain/proc/handle_disabilities() if(owner.stat) return - if((owner.disabilities & EPILEPSY) && prob(1)) + if(owner.has_genetic_condition(GENE_COND_EPILEPSY) && prob(1)) owner.seizure() - else if((owner.disabilities & TOURETTES) && prob(10)) + else if(owner.has_genetic_condition(GENE_COND_TOURETTES) && prob(10)) SET_STATUS_MAX(owner, STAT_STUN, 10) switch(rand(1, 3)) if(1) @@ -195,7 +195,7 @@ if(2 to 3) owner.say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]") ADJ_STATUS(owner, STAT_JITTER, 100) - else if((owner.disabilities & NERVOUS) && prob(10)) + else if(owner.has_genetic_condition(GENE_COND_NERVOUS) && prob(10)) SET_STATUS_MAX(owner, STAT_STUTTER, 10) diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm index 9eaec210aa2..f193afaa4da 100644 --- a/code/modules/organs/internal/eyes.dm +++ b/code/modules/organs/internal/eyes.dm @@ -31,7 +31,7 @@ organ_properties = ORGAN_PROP_PROSTHETIC icon = 'icons/obj/robot_component.dmi' -/obj/item/organ/internal/eyes/robot/Initialize(mapload, material_key, datum/dna/given_dna, decl/bodytype/new_bodytype) +/obj/item/organ/internal/eyes/robot/Initialize(mapload, material_key, datum/mob_snapshot/supplied_appearance, decl/bodytype/new_bodytype) . = ..() verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color_verb verbs |= /obj/item/organ/internal/eyes/proc/toggle_eye_glow @@ -90,7 +90,7 @@ /obj/item/organ/internal/eyes/proc/additional_flash_effects(var/intensity) return -1 -/obj/item/organ/internal/eyes/do_install(mob/living/carbon/human/target, affected, in_place, update_icon, detached) +/obj/item/organ/internal/eyes/do_install(mob/living/human/target, affected, in_place, update_icon, detached) // Apply our eye colour to the target. if(istype(target) && eye_colour) target.set_eye_colour(eye_colour, skip_update = TRUE) diff --git a/code/modules/organs/internal/heart.dm b/code/modules/organs/internal/heart.dm index 74f106ba2a6..8b96ce26763 100644 --- a/code/modules/organs/internal/heart.dm +++ b/code/modules/organs/internal/heart.dm @@ -137,7 +137,7 @@ if(W.bleeding()) if(temp.applied_pressure) if(ishuman(temp.applied_pressure)) - var/mob/living/carbon/human/H = temp.applied_pressure + var/mob/living/human/H = temp.applied_pressure H.bloody_hands(src, 0) //somehow you can apply pressure to every wound on the organ at the same time //you're basically forced to do nothing at all, so let's make it pretty effective diff --git a/code/modules/organs/internal/liver.dm b/code/modules/organs/internal/liver.dm index 9df1702671c..bc782095676 100644 --- a/code/modules/organs/internal/liver.dm +++ b/code/modules/organs/internal/liver.dm @@ -23,12 +23,10 @@ if(!owner) return - if (germ_level > INFECTION_LEVEL_ONE) - if(prob(1)) - to_chat(owner, "Your skin itches.") - if (germ_level > INFECTION_LEVEL_TWO) - if(prob(1)) - spawn owner.vomit() + if (germ_level > INFECTION_LEVEL_ONE && prob(1)) + to_chat(owner, SPAN_DANGER("Your skin itches.")) + if (germ_level > INFECTION_LEVEL_TWO && prob(1)) + owner.vomit() //Detox can heal small amounts of damage if (damage < max_damage && !GET_CHEMICAL_EFFECT(owner, CE_TOXIN)) diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm index 9fc8e2a6297..7a9b0cb8180 100644 --- a/code/modules/organs/internal/lungs.dm +++ b/code/modules/organs/internal/lungs.dm @@ -41,7 +41,7 @@ inhaled.my_atom = src . = ..() -/obj/item/organ/internal/lungs/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place) +/obj/item/organ/internal/lungs/do_install(mob/living/human/target, obj/item/organ/external/affected, in_place) if(!(. = ..())) return inhaled.my_atom = owner @@ -273,7 +273,7 @@ // Hot air hurts :( var/cold_1 = bodytype.get_body_temperature_threshold(COLD_LEVEL_1) var/heat_1 = bodytype.get_body_temperature_threshold(HEAT_LEVEL_1) - if((breath.temperature < cold_1 || breath.temperature > heat_1) && !(MUTATION_COLD_RESISTANCE in owner.mutations)) + if((breath.temperature < cold_1 || breath.temperature > heat_1) && !owner.has_genetic_condition(GENE_COND_COLD_RESISTANCE)) var/damage = 0 if(breath.temperature <= cold_1) if(prob(20)) diff --git a/code/modules/organs/internal/stomach.dm b/code/modules/organs/internal/stomach.dm index 25c3291e363..f28de893814 100644 --- a/code/modules/organs/internal/stomach.dm +++ b/code/modules/organs/internal/stomach.dm @@ -119,7 +119,7 @@ var/alcohol_volume = REAGENT_VOLUME(ingested, /decl/material/liquid/ethanol) var/alcohol_threshold_met = alcohol_volume > STOMACH_VOLUME / 2 - if(alcohol_threshold_met && (owner.disabilities & EPILEPSY) && prob(20)) + if(alcohol_threshold_met && owner.has_genetic_condition(GENE_COND_EPILEPSY) && prob(20)) owner.seizure() // Alcohol counts as double volume for the purposes of vomit probability diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 14f2729490c..222c2c3aa8b 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -19,8 +19,8 @@ var/vital_to_owner // Cache var for vitality to current owner. // Reference data. - var/mob/living/carbon/human/owner // Current mob owning the organ. - var/datum/dna/dna // Original DNA. + var/datum/mob_snapshot/organ_appearance + var/mob/living/human/owner // Current mob owning the organ. var/decl/species/species // Original species. var/decl/bodytype/bodytype // Original bodytype. var/list/ailments // Current active ailments if any. @@ -46,7 +46,7 @@ do_uninstall(TRUE, FALSE, FALSE, FALSE) //Don't ignore children here since we might own/contain them species = null bodytype = null - QDEL_NULL(dna) + QDEL_NULL(organ_appearance) QDEL_NULL_LIST(ailments) return ..() @@ -63,43 +63,42 @@ return (damage >= min_broken_damage || (status & ORGAN_CUT_AWAY) || (status & ORGAN_BROKEN) || (status & ORGAN_DEAD)) //Third argument may be a dna datum; if null will be set to holder's dna. -/obj/item/organ/Initialize(mapload, material_key, datum/dna/given_dna, decl/bodytype/new_bodytype) +/obj/item/organ/Initialize(mapload, material_key, datum/mob_snapshot/supplied_appearance) . = ..(mapload, material_key) if(. == INITIALIZE_HINT_QDEL) return . - setup(given_dna, new_bodytype) + setup_organ(supplied_appearance) initialize_reagents() -/obj/item/organ/proc/setup(datum/dna/given_dna, decl/bodytype/new_bodytype) +/obj/item/organ/proc/setup_organ(datum/mob_snapshot/supplied_appearance) //Null DNA setup - if(!given_dna) - if(dna) - given_dna = dna //Use existing if possible + if(!supplied_appearance) + if(organ_appearance) + supplied_appearance = organ_appearance //Use existing if possible else if(owner) - if(owner.dna) - given_dna = owner.dna //Grab our owner's dna if we don't have any, and they have + if(owner) + supplied_appearance = owner.get_mob_snapshot() //Grab our owner's appearance info if we don't have any, and they have else - //The owner having no DNA can be a valid reason to keep our dna null in some cases - log_debug("obj/item/organ/setup(): [src] had null dna, with a owner with null dna!") - dna = null //#TODO: Not sure that's really legal + //The owner having no DNA can be a valid reason to keep our appearance data null in some cases + log_debug("obj/item/organ/setup(): [src] had null appearance data, with a owner with null appearance data!") + organ_appearance = null //#TODO: Not sure that's really legal return else - //If we have NO OWNER and given_dna, just make one up for consistency - given_dna = new/datum/dna() - given_dna.check_integrity() //Defaults everything + //If we have NO OWNER and supplied_appearance, just make one up for consistency + supplied_appearance = new // order of bodytype preference: new, current, owner, species - new_bodytype ||= bodytype || owner?.get_bodytype() + var/decl/bodytype/new_bodytype = supplied_appearance?.root_bodytype || bodytype || owner?.get_bodytype() if(ispath(new_bodytype, /decl/bodytype)) new_bodytype = GET_DECL(new_bodytype) if(!new_bodytype) - // this can be fine if dna with species is passed + // this can be fine if appearance data with species is passed log_debug("obj/item/organ/setup(): [src] had null bodytype, with an owner with null bodytype!") bodytype = new_bodytype // used in later setup procs - if((bodytype?.body_flags & BODY_FLAG_NO_DNA) || !given_dna) - // set_bodytype will unset invalid dna anyway, so set_dna(null) is unnecessary - set_species(given_dna?.species || owner?.get_species() || global.using_map.default_species) + if((bodytype?.body_flags & BODY_FLAG_NO_DNA) || !supplied_appearance) + // set_bodytype will unset invalid appearance data anyway, so set_dna(null) is unnecessary + set_species(owner?.get_species() || global.using_map.default_species) else - set_dna(given_dna) + copy_from_mob_snapshot(supplied_appearance) //Called on initialization to add the neccessary reagents @@ -117,15 +116,17 @@ if(reagent_to_add) add_to_reagents(reagent_to_add, reagents.maximum_volume) -/obj/item/organ/proc/set_dna(var/datum/dna/new_dna) +/obj/item/organ/proc/copy_from_mob_snapshot(var/datum/mob_snapshot/supplied_appearance) if(istype(bodytype) && (bodytype.body_flags & BODY_FLAG_NO_DNA)) - QDEL_NULL(dna) + QDEL_NULL(organ_appearance) return - if(new_dna != dna) // Hacky. Is this ever used? Do any organs ever have DNA set before setup_as_organic? - QDEL_NULL(dna) - dna = new_dna.Clone() - blood_DNA = list(dna.unique_enzymes = dna.b_type) - set_species(dna.species) + if(supplied_appearance != organ_appearance) // Hacky. Is this ever used? Do any organs ever have DNA set before setup_as_organic? + QDEL_NULL(organ_appearance) + organ_appearance = supplied_appearance.Clone() + blood_DNA = list(organ_appearance.unique_enzymes = organ_appearance.blood_type) + set_species(organ_appearance.root_species?.name || global.using_map.default_species) + if(organ_appearance.root_bodytype) + set_bodytype(organ_appearance.root_bodytype) /obj/item/organ/proc/set_bodytype(decl/bodytype/new_bodytype, override_material = null, apply_to_internal_organs = TRUE) SHOULD_CALL_PARENT(TRUE) @@ -153,7 +154,7 @@ reagents.clear_reagents() populate_reagents() if(bodytype.body_flags & BODY_FLAG_NO_DNA) - QDEL_NULL(dna) + QDEL_NULL(organ_appearance) reset_status() return TRUE @@ -312,9 +313,9 @@ return if(BP_IS_PROSTHETIC(src)) return - if(dna) + if(organ_appearance) if(!rejecting) - if(owner.is_blood_incompatible(dna.b_type)) + if(owner.is_blood_incompatible(organ_appearance.blood_type)) rejecting = 1 else rejecting++ //Rejection severity increases over time. @@ -328,7 +329,7 @@ germ_level += rand(2,3) if(501 to INFINITY) germ_level += rand(3,5) - var/decl/blood_type/blood_decl = dna?.b_type && get_blood_type_by_name(dna.b_type) + var/decl/blood_type/blood_decl = organ_appearance?.blood_type && get_blood_type_by_name(organ_appearance.blood_type) if(istype(blood_decl)) owner.add_to_reagents(blood_decl.transfusion_fail_reagent, round(rand(2,4) * blood_decl.transfusion_fail_percentage)) else @@ -412,10 +413,10 @@ return yum /obj/item/organ/proc/can_feel_pain() - return bodytype && !(bodytype.body_flags & BODY_FLAG_NO_PAIN) + return bodytype && !(bodytype.body_flags & BODY_FLAG_NO_PAIN) && !(status & ORGAN_DEAD) /obj/item/organ/proc/is_usable() - return !(status & (ORGAN_CUT_AWAY|ORGAN_MUTATED|ORGAN_DEAD)) + . = !(status & (ORGAN_CUT_AWAY|ORGAN_MUTATED|ORGAN_DEAD)) /obj/item/organ/proc/can_recover() return (max_damage > 0) && !(status & ORGAN_DEAD) || death_time >= REALTIMEOFDAY - ORGAN_RECOVERY_THRESHOLD @@ -437,7 +438,6 @@ . += tag ? "Necrotic" : "Necrotic" if(BP_IS_BRITTLE(src)) . += tag ? "Brittle" : "Brittle" - switch (germ_level) if (INFECTION_LEVEL_ONE to INFECTION_LEVEL_ONE + ((INFECTION_LEVEL_TWO - INFECTION_LEVEL_ONE) / 3)) . += "Mild Infection" @@ -555,7 +555,7 @@ var/global/list/ailment_reference_cache = list() // 3. When attaching a detached organ through surgery this is called. // The organ may be inside an external organ that's not inside a mob, or inside a mob //detached : If true, the organ will be installed in a detached state, otherwise it will be added in an attached state -/obj/item/organ/proc/do_install(var/mob/living/carbon/human/target, var/obj/item/organ/external/affected, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE) +/obj/item/organ/proc/do_install(var/mob/living/human/target, var/obj/item/organ/external/affected, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE) //Make sure to force the flag accordingly set_detached(detached) if(QDELETED(src)) diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index 8554d28f972..12ab422d198 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -49,7 +49,7 @@ if(!(use_emote.message_type == AUDIBLE_MESSAGE &&HAS_STATUS(src, STAT_SILENCE))) emote(force_emote) -/mob/living/carbon/human/proc/handle_pain() +/mob/living/human/proc/handle_pain() if(stat) return if(!can_feel_pain()) diff --git a/code/modules/organs/prosthetics/_prosthetics.dm b/code/modules/organs/prosthetics/_prosthetics.dm index e3ca1199848..603f76dfae9 100644 --- a/code/modules/organs/prosthetics/_prosthetics.dm +++ b/code/modules/organs/prosthetics/_prosthetics.dm @@ -13,7 +13,7 @@ // Checks if a limb could theoretically be removed. // Note that this does not currently bother checking if a child or internal organ is vital. -/obj/item/organ/external/proc/can_remove_modular_limb(var/mob/living/carbon/human/user) +/obj/item/organ/external/proc/can_remove_modular_limb(var/mob/living/human/user) if((owner?.species && is_vital_to_owner()) || !(limb_flags & ORGAN_FLAG_CAN_AMPUTATE)) return FALSE var/bodypart_cat = get_modular_limb_category() @@ -26,7 +26,7 @@ . = (bodypart_cat != MODULAR_BODYPART_INVALID) // Note that this proc is checking if the organ can be attached -to-, not attached itself. -/obj/item/organ/external/proc/can_attach_modular_limb_here(var/mob/living/carbon/human/user) +/obj/item/organ/external/proc/can_attach_modular_limb_here(var/mob/living/human/user) var/list/limb_data = user?.get_bodytype()?.has_limbs[organ_tag] if(islist(limb_data) && limb_data["has_children"] > 0) . = (LAZYLEN(children) < limb_data["has_children"]) @@ -47,13 +47,13 @@ return TRUE // Checks if an organ (or the parent of one) is in a fit state for modular limb stuff to happen. -/obj/item/organ/external/proc/check_modular_limb_damage(var/mob/living/carbon/human/user) +/obj/item/organ/external/proc/check_modular_limb_damage(var/mob/living/human/user) . = damage >= min_broken_damage || (status & ORGAN_BROKEN) // can't use is_broken() as the limb has ORGAN_CUT_AWAY // Human mob procs: // Checks the organ list for limbs meeting a predicate. Way overengineered for such a limited use // case but I can see it being expanded in the future if meat limbs or doona limbs use it. -/mob/living/carbon/human/proc/get_modular_limbs(var/return_first_found = FALSE, var/validate_proc) +/mob/living/human/proc/get_modular_limbs(var/return_first_found = FALSE, var/validate_proc) for(var/obj/item/organ/external/limb as anything in get_external_organs()) if(!validate_proc || call(limb, validate_proc)(src) > MODULAR_BODYPART_INVALID) LAZYADD(., limb) @@ -67,7 +67,7 @@ . -= limb.children // Called in bodytype.apply_bodytype_organ_modifications(), replaced() and removed() to update our modular limb verbs. -/mob/living/carbon/human/proc/refresh_modular_limb_verbs() +/mob/living/human/proc/refresh_modular_limb_verbs() if(length(get_modular_limbs(return_first_found = TRUE, validate_proc = /obj/item/organ/external/proc/can_attach_modular_limb_here))) verbs |= .proc/attach_limb_verb else @@ -78,7 +78,7 @@ verbs -= .proc/detach_limb_verb // Proc helper for attachment verb. -/mob/living/carbon/human/proc/check_can_attach_modular_limb(var/obj/item/organ/external/E) +/mob/living/human/proc/check_can_attach_modular_limb(var/obj/item/organ/external/E) if(is_on_special_ability_cooldown() || get_active_held_item() != E) return FALSE if(incapacitated() || restrained()) @@ -109,7 +109,7 @@ return TRUE // Proc helper for detachment verb. -/mob/living/carbon/human/proc/check_can_detach_modular_limb(var/obj/item/organ/external/E) +/mob/living/human/proc/check_can_detach_modular_limb(var/obj/item/organ/external/E) if(is_on_special_ability_cooldown()) return FALSE if(incapacitated() || restrained()) @@ -130,7 +130,7 @@ // Verbs below: // Add or remove robotic limbs; check refresh_modular_limb_verbs() above. -/mob/living/carbon/human/proc/attach_limb_verb() +/mob/living/human/proc/attach_limb_verb() set name = "Attach Limb" set category = "Object" set desc = "Attach a replacement limb." @@ -160,7 +160,7 @@ try_refresh_visible_overlays() // Not sure why this isn't called by removed(), but without it we don't update our limb appearance. return TRUE -/mob/living/carbon/human/proc/detach_limb_verb() +/mob/living/human/proc/detach_limb_verb() set name = "Remove Limb" set category = "Object" set desc = "Detach one of your limbs." diff --git a/code/modules/organs/prosthetics/prosthetics_manufacturer.dm b/code/modules/organs/prosthetics/prosthetics_manufacturer.dm index 11293b79fce..01f7aa03d05 100644 --- a/code/modules/organs/prosthetics/prosthetics_manufacturer.dm +++ b/code/modules/organs/prosthetics/prosthetics_manufacturer.dm @@ -56,7 +56,7 @@ var/decl/species/species = get_species_by_key(species_name) for(var/decl/bodytype/bodytype_data in species.available_bodytypes) if(bodytype_data.bodytype_category == bodytype_category) - return species_name + return species return ..() /decl/bodytype/prosthetic/apply_bodytype_organ_modifications(obj/item/organ/org) diff --git a/code/modules/overmap/ftl_shunt/core.dm b/code/modules/overmap/ftl_shunt/core.dm index f8f5b1baf1b..eea9868992d 100644 --- a/code/modules/overmap/ftl_shunt/core.dm +++ b/code/modules/overmap/ftl_shunt/core.dm @@ -154,7 +154,7 @@ /obj/machinery/ftl_shunt/core/physical_attack_hand(var/mob/user) if(sabotaged) - var/mob/living/carbon/human/h_user = user + var/mob/living/human/h_user = user if(!istype(h_user)) return TRUE var/skill_delay = user.skill_delay_mult(SKILL_ENGINES, 0.3) @@ -222,7 +222,7 @@ return FTL_START_FAILURE_FUEL if(sabotaged) - for(var/mob/living/carbon/human/H in global.living_mob_list_) //Give engineers a hint that something might be very, very wrong. + for(var/mob/living/human/H in global.living_mob_list_) //Give engineers a hint that something might be very, very wrong. if(!(H.z in ftl_computer.linked.map_z)) continue if(H.skill_check(SKILL_ENGINES, SKILL_EXPERT)) @@ -311,7 +311,7 @@ else shunt_sev = SHUNT_SEVERITY_CRITICAL - for(var/mob/living/carbon/human/H in global.living_mob_list_) //Affect mobs, skip synthetics. + for(var/mob/living/human/H in global.living_mob_list_) //Affect mobs, skip synthetics. sound_to(H, 'sound/machines/hyperspace_end.ogg') if(!(H.z in ftl_computer.linked.map_z)) @@ -373,7 +373,7 @@ if(prob(50)) A.overload_lighting(50) -/obj/machinery/ftl_shunt/core/proc/handle_spacefloat(var/mob/living/carbon/human/H) +/obj/machinery/ftl_shunt/core/proc/handle_spacefloat(var/mob/living/human/H) if(!H.check_space_footing()) //Flip a coin ... to_chat(H, SPAN_WARNING("Being untethered from a ship entering FTL is a bad idea, but you roll the dice...")) @@ -391,7 +391,7 @@ switch(sabotaged) if(SHUNT_SABOTAGE_MINOR) announcetxt = shunt_sabotage_text_minor - for(var/mob/living/carbon/human/H in view(7)) + for(var/mob/living/human/H in view(7)) H.show_message(SPAN_DANGER("\The [src] emits a flash of incredibly bright, searing light!"), VISIBLE_MESSAGE) H.flash_eyes(FLASH_PROTECTION_NONE) empulse(src, 8, 10) @@ -416,7 +416,7 @@ continue A.energy_fail(rand(100,120)) - for(var/mob/living/carbon/human/H in view(7)) //scary text if you're in view, because you're fucked now boy. + for(var/mob/living/human/H in view(7)) //scary text if you're in view, because you're fucked now boy. H.show_message(SPAN_DANGER("The light around \the [src] warps before it emits a flash of incredibly bright, searing light!"), VISIBLE_MESSAGE) H.flash_eyes(FLASH_PROTECTION_NONE) diff --git a/code/modules/overmap/spacetravel.dm b/code/modules/overmap/spacetravel.dm index 2aaef59f4f4..24747a3d46f 100644 --- a/code/modules/overmap/spacetravel.dm +++ b/code/modules/overmap/spacetravel.dm @@ -43,5 +43,5 @@ /mob/overmap_can_discard() return isnull(client) -/mob/living/carbon/human/overmap_can_discard() +/mob/living/human/overmap_can_discard() return isnull(client) && (!last_ckey || stat == DEAD) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 0f0f20ec49c..46715f7d9df 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -495,7 +495,7 @@ to_chat(usr, SPAN_WARNING("You can't do that in your current state!")) return - if((MUTATION_CLUMSY in usr.mutations) && prob(50)) + if(usr.has_genetic_condition(GENE_COND_CLUMSY) && prob(50)) to_chat(usr, SPAN_WARNING("You cut yourself on the paper.")) return var/n_name = sanitize_safe(input(usr, "What would you like to name the paper?", "Paper Naming", name) as text, MAX_NAME_LEN) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index ba7d20c7b7a..a7756f7e6d0 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -487,7 +487,7 @@ var/global/list/all_apcs = list() /obj/machinery/power/apc/physical_attack_hand(mob/user) //Human mob special interaction goes here. if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(H.species.can_shred(H)) user.visible_message("\The [user] slashes at \the [src]!", "You slash at \the [src]!") diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index c744458397a..434a96e50c1 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -537,7 +537,7 @@ By design, d1 is the smallest direction and d2 is the highest //you can use wires to heal robotics /obj/item/stack/cable_coil/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) if(ishuman(target) && user.a_intent == I_HELP) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/obj/item/organ/external/S = GET_EXTERNAL_ORGAN(H, user.get_target_zone()) if(!S || !BP_IS_PROSTHETIC(S) || user.a_intent != I_HELP) return ..() diff --git a/code/modules/power/fusion/fusion_reactions.dm b/code/modules/power/fusion/fusion_reactions.dm index 66d44183612..73cffcc1529 100644 --- a/code/modules/power/fusion/fusion_reactions.dm +++ b/code/modules/power/fusion/fusion_reactions.dm @@ -115,7 +115,7 @@ // Copied from the SM for proof of concept. //Not any more --Cirra //Use the whole z proc --Leshana SSradiation.z_radiate(locate(1, 1, holder.z), radiation_level, 1) - for(var/mob/living/carbon/human/H in global.living_mob_list_) + for(var/mob/living/human/H in global.living_mob_list_) var/turf/T = get_turf(H) if(T && (holder.z == T.z)) H.set_hallucination(rand(100,150), 51) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index cdc4a702cdb..0a450cd6b11 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -317,7 +317,7 @@ return TRUE if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(H.species.can_shred(H)) visible_message("[user.name] smashed the light!", 3, "You hear a tinkle of breaking glass.") broken() @@ -327,13 +327,13 @@ if(on) var/prot = FALSE - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(istype(H)) var/obj/item/clothing/gloves/G = H.get_equipped_item(slot_gloves_str) if(istype(G) && G.max_heat_protection_temperature > LIGHT_BULB_TEMPERATURE) prot = TRUE - if(prot > 0 || (MUTATION_COLD_RESISTANCE in user.mutations)) + if(prot > 0 || user.has_genetic_condition(GENE_COND_COLD_RESISTANCE)) to_chat(user, "You remove the [get_fitting_name()].") else if(istype(user) && user.is_telekinetic()) to_chat(user, "You telekinetically remove the [get_fitting_name()].") diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index cb997d4b0c4..ca4b205e6b0 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -215,7 +215,7 @@ if(PN) PN.trigger_warning(5) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(H.species.get_shock_vulnerability(H) <= 0) return var/obj/item/clothing/gloves/G = H.get_equipped_item(slot_gloves_str) diff --git a/code/modules/power/singularity/singularity_events.dm b/code/modules/power/singularity/singularity_events.dm index bed281df970..e48a040231b 100644 --- a/code/modules/power/singularity/singularity_events.dm +++ b/code/modules/power/singularity/singularity_events.dm @@ -33,7 +33,7 @@ continue if(M.stat == CONSCIOUS) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(istype(H.get_equipped_item(slot_glasses_str), /obj/item/clothing/glasses/meson)) if(source.current_stage.stage_size != STAGE_SUPER) to_chat(H, SPAN_WARNING("You look directly into \the [source]. Good thing you had your protective eyewear on!")) diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index b8ced099d91..54e525496c0 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -143,7 +143,7 @@ if (!intensity) return - var/mob/living/carbon/human/h_user = null + var/mob/living/human/h_user = null if (!ishuman(user)) return else diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 71deaf78791..00a2cc7b86f 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -72,7 +72,7 @@ var/obj/item/gun/G = get_recursive_loc_of_type(/obj/item/gun) if(G) put_residue_on(G) - var/mob/living/carbon/human/H = G.get_recursive_loc_of_type(/mob/living/carbon/human) + var/mob/living/human/H = G.get_recursive_loc_of_type(/mob/living/human) if(H) var/holding_slot = H.get_held_slot_for_item(G) if(holding_slot) @@ -155,9 +155,25 @@ var/list/icon_keys = list() //keys var/list/ammo_states = list() //values + /// Determines whether or not we wait until the first time our contents are gotten to initialize contents. May lead to icon bugs if not handled delicately. + var/lazyload_contents = TRUE + /// Whether or not our contents have been initialized or not, used in lazyloaded contents. + var/contents_initialized = FALSE + /obj/item/ammo_magazine/box w_class = ITEM_SIZE_NORMAL +/obj/item/ammo_magazine/proc/create_initial_contents() + if(contents_initialized || !initial_ammo || !ammo_type) + return + for(var/i in 1 to initial_ammo) + stored_ammo += new ammo_type(src) + +/obj/item/ammo_magazine/proc/get_stored_ammo_count() + . = length(stored_ammo) + if(!contents_initialized) + . += initial_ammo + /obj/item/ammo_magazine/Initialize() . = ..() if(multiple_sprites) @@ -166,9 +182,8 @@ if(isnull(initial_ammo)) initial_ammo = max_ammo - if(initial_ammo) - for(var/i in 1 to initial_ammo) - stored_ammo += new ammo_type(src) + if(!lazyload_contents) + create_initial_contents() if(caliber) LAZYINSERT(labels, caliber, 1) if(LAZYLEN(labels)) @@ -181,7 +196,7 @@ if(C.caliber != caliber) to_chat(user, "[C] does not fit into [src].") return - if(stored_ammo.len >= max_ammo) + if(get_stored_ammo_count() >= max_ammo) to_chat(user, "[src] is full!") return if(!user.try_unequip(C, src)) @@ -192,6 +207,7 @@ else ..() /obj/item/ammo_magazine/attack_self(mob/user) + create_initial_contents() if(!stored_ammo.len) to_chat(user, "[src] is already empty!") return @@ -206,6 +222,7 @@ /obj/item/ammo_magazine/attack_hand(mob/user) if(!user.is_holding_offhand(src) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() + create_initial_contents() if(!stored_ammo.len) to_chat(user, SPAN_NOTICE("\The [src] is already empty!")) return TRUE @@ -222,18 +239,20 @@ /obj/item/ammo_magazine/on_update_icon() . = ..() if(multiple_sprites) - //find the lowest key greater than or equal to stored_ammo.len + //find the lowest key greater than or equal to our ammo count var/new_state = null + var/self_ammo_count = get_stored_ammo_count() for(var/idx in 1 to icon_keys.len) - var/ammo_count = icon_keys[idx] - if (ammo_count >= stored_ammo.len) + var/icon_ammo_count = icon_keys[idx] + if (icon_ammo_count >= self_ammo_count) new_state = ammo_states[idx] break icon_state = (new_state)? new_state : initial(icon_state) /obj/item/ammo_magazine/examine(mob/user) . = ..() - to_chat(user, "There [(stored_ammo.len == 1)? "is" : "are"] [stored_ammo.len] round\s left!") + var/self_ammo_count = get_stored_ammo_count() + to_chat(user, "There [(self_ammo_count == 1)? "is" : "are"] [self_ammo_count] round\s left!") //magazine icon state caching var/global/list/magazine_icondata_keys = list() diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 1d1bf7a0cb0..43f6f7fb6c1 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -66,6 +66,7 @@ /obj/item/ammo_magazine/shotholder/attack_hand(mob/user) if(loc != user || user.a_intent != I_HURT || !length(stored_ammo) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() + create_initial_contents() var/obj/item/ammo_casing/C = stored_ammo[stored_ammo.len] stored_ammo -= C user.put_in_hands(C) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 14f8eacef89..6f18ee8cdcc 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -198,7 +198,8 @@ if(prob(30)) toggle_safety() return 1 - if((MUTATION_CLUMSY in M.mutations) && prob(40)) //Clumsy handling + + if(M.has_genetic_condition(GENE_COND_CLUMSY) && prob(40)) //Clumsy handling var/obj/P = consume_next_projectile() if(P) var/pew_loc = pick(BP_L_FOOT, BP_R_FOOT) @@ -399,7 +400,7 @@ shake_camera(user, max(burst_delay*burst, fire_delay), screen_shake) if(ishuman(user) && user.is_cloaked()) //shooting will disable a rig cloaking device - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/obj/item/rig/rig = H.get_rig() if(rig) for(var/obj/item/rig_module/stealth_field/S in rig.installed_modules) @@ -510,7 +511,7 @@ //shooting while in shock var/shock_dispersion = 0 if(ishuman(firer)) - var/mob/living/carbon/human/mob = firer + var/mob/living/human/mob = firer if(mob.shock_stage > 120) shock_dispersion = rand(-4,4) else if(mob.shock_stage > 70) @@ -541,7 +542,7 @@ /obj/item/gun/proc/handle_suicide(mob/living/user) if(!ishuman(user)) return - var/mob/living/carbon/human/M = user + var/mob/living/human/M = user mouthshoot = 1 admin_attacker_log(user, "is attempting to suicide with \a [src]") diff --git a/code/modules/projectiles/guns/energy/ebow.dm b/code/modules/projectiles/guns/energy/ebow.dm index 5a1bcde899a..a18470f2c40 100644 --- a/code/modules/projectiles/guns/energy/ebow.dm +++ b/code/modules/projectiles/guns/energy/ebow.dm @@ -16,15 +16,6 @@ charge_meter = 0 combustion = 0 -/obj/item/gun/energy/crossbow/ninja - name = "energy dart thrower" - projectile_type = /obj/item/projectile/energy/dart - max_shots = 5 - -/obj/item/gun/energy/crossbow/ninja/mounted - use_external_power = 1 - has_safety = FALSE - /obj/item/gun/energy/crossbow/largecrossbow name = "energy crossbow" desc = "A weapon favored by mercenary infiltration teams." diff --git a/code/modules/projectiles/guns/energy/lasertag.dm b/code/modules/projectiles/guns/energy/lasertag.dm index e9857630b0b..fd6af12baa0 100644 --- a/code/modules/projectiles/guns/energy/lasertag.dm +++ b/code/modules/projectiles/guns/energy/lasertag.dm @@ -10,7 +10,7 @@ projectile_type = /obj/item/projectile/beam/lastertag/blue var/required_vest -/obj/item/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M) +/obj/item/gun/energy/lasertag/special_check(var/mob/living/human/M) if(ishuman(M) && !istype(M.get_equipped_item(slot_wear_suit_str), required_vest)) to_chat(M, SPAN_WARNING("You need to be wearing your laser tag vest!")) return FALSE diff --git a/code/modules/projectiles/guns/launcher/bows/arrow.dm b/code/modules/projectiles/guns/launcher/bows/arrow.dm index b7f2339da5c..b570bed7657 100644 --- a/code/modules/projectiles/guns/launcher/bows/arrow.dm +++ b/code/modules/projectiles/guns/launcher/bows/arrow.dm @@ -44,6 +44,9 @@ desc = "A long, sharp stick, fletched at one end." var/decl/material/fletching_material +/obj/item/stack/material/bow_ammo/arrow/fifteen + amount = 15 + /obj/item/stack/material/bow_ammo/arrow/Initialize() if(ispath(fletching_material)) fletching_material = GET_DECL(fletching_material) diff --git a/code/modules/projectiles/guns/launcher/money_cannon.dm b/code/modules/projectiles/guns/launcher/money_cannon.dm index bb585d1c534..8ef05876a4d 100644 --- a/code/modules/projectiles/guns/launcher/money_cannon.dm +++ b/code/modules/projectiles/guns/launcher/money_cannon.dm @@ -148,7 +148,7 @@ if(!ishuman(user)) return - var/mob/living/carbon/human/M = user + var/mob/living/human/M = user M.visible_message("[user] sticks [src] in their mouth, ready to pull the trigger...") if(!do_after(user, 40, progress = 0)) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 8f6c03407b3..dd0320b8586 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -68,10 +68,16 @@ chambered = loaded[1] //load next casing. if(handle_casings != HOLD_CASINGS) loaded -= chambered - else if(ammo_magazine && ammo_magazine.stored_ammo.len) - chambered = ammo_magazine.stored_ammo[ammo_magazine.stored_ammo.len] - if(handle_casings != HOLD_CASINGS) - ammo_magazine.stored_ammo -= chambered + else if(ammo_magazine) + if(!ammo_magazine.contents_initialized && ammo_magazine.initial_ammo > 0) + chambered = new ammo_magazine.ammo_type(src) + if(handle_casings == HOLD_CASINGS) + ammo_magazine.stored_ammo += chambered + ammo_magazine.initial_ammo-- + else if(ammo_magazine.stored_ammo.len) + chambered = ammo_magazine.stored_ammo[ammo_magazine.stored_ammo.len] + if(handle_casings != HOLD_CASINGS) + ammo_magazine.stored_ammo -= chambered if (chambered) return chambered.BB @@ -86,7 +92,7 @@ /obj/item/gun/projectile/process_point_blank(obj/projectile, atom/movable/firer, atom/target) ..() if(chambered && ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/zone = BP_CHEST if(isliving(firer)) var/mob/living/user = firer @@ -237,7 +243,7 @@ /obj/item/gun/projectile/afterattack(atom/A, mob/living/user) ..() - if(auto_eject && ammo_magazine && ammo_magazine.stored_ammo && !ammo_magazine.stored_ammo.len) + if(auto_eject && ammo_magazine && !ammo_magazine.get_stored_ammo_count()) ammo_magazine.dropInto(loc) user.visible_message( "[ammo_magazine] falls out and clatters on the floor!", @@ -262,8 +268,8 @@ var/bullets = 0 if(loaded) bullets += loaded.len - if(ammo_magazine && ammo_magazine.stored_ammo) - bullets += ammo_magazine.stored_ammo.len + if(ammo_magazine) + bullets += ammo_magazine.get_stored_ammo_count() if(chambered) bullets += 1 return bullets diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index a7614db6028..eaaf90ed248 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -72,7 +72,7 @@ /obj/item/gun/projectile/automatic/assault_rifle/update_base_icon() if(ammo_magazine) - if(ammo_magazine.stored_ammo.len) + if(ammo_magazine.get_stored_ammo_count()) icon_state = "[get_world_inventory_state()]-loaded" else icon_state = "[get_world_inventory_state()]-empty" diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm index 57e98604535..16089ed5eaf 100644 --- a/code/modules/projectiles/guns/projectile/dartgun.dm +++ b/code/modules/projectiles/guns/projectile/dartgun.dm @@ -37,13 +37,13 @@ /obj/item/gun/projectile/dartgun/on_update_icon() ..() if(ammo_magazine) - icon_state = "[get_world_inventory_state()]-[clamp(length(ammo_magazine.stored_ammo.len), 0, 5)]" + icon_state = "[get_world_inventory_state()]-[clamp(length(ammo_magazine.get_stored_ammo_count()), 0, 5)]" else icon_state = get_world_inventory_state() /obj/item/gun/projectile/dartgun/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay && (slot in user_mob?.get_held_item_slots()) && ammo_magazine) - overlay.icon_state += "-[clamp(length(ammo_magazine.stored_ammo.len), 0, 5)]" + overlay.icon_state += "-[clamp(length(ammo_magazine.get_stored_ammo_count()), 0, 5)]" . = ..() /obj/item/gun/projectile/dartgun/consume_next_projectile() @@ -121,8 +121,9 @@ dat += " \[Eject\]
" if(ammo_magazine) - if(ammo_magazine.stored_ammo && ammo_magazine.stored_ammo.len) - dat += "The dart cartridge has [ammo_magazine.stored_ammo.len] shots remaining." + var/stored_ammo_count = ammo_magazine?.get_stored_ammo_count() + if(stored_ammo_count) + dat += "The dart cartridge has [stored_ammo_count] shot\s remaining." else dat += "The dart cartridge is empty!" dat += " \[Eject\]
" diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index fd9905b1774..960f437fde0 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -148,7 +148,7 @@ /obj/item/projectile/beam/lastertag/blue/on_hit(var/atom/target, var/blocked = 0) if(ishuman(target)) - var/mob/living/carbon/human/M = target + var/mob/living/human/M = target if(istype(M.get_equipped_item(slot_wear_suit_str), /obj/item/clothing/suit/redtag)) SET_STATUS_MAX(M, STAT_WEAK, 5) return 1 @@ -163,7 +163,7 @@ /obj/item/projectile/beam/lastertag/red/on_hit(var/atom/target, var/blocked = 0) if(ishuman(target)) - var/mob/living/carbon/human/M = target + var/mob/living/human/M = target if(istype(M.get_equipped_item(slot_wear_suit_str), /obj/item/clothing/suit/bluetag)) SET_STATUS_MAX(M, STAT_WEAK, 5) return 1 @@ -181,7 +181,7 @@ /obj/item/projectile/beam/lastertag/omni/on_hit(var/atom/target, var/blocked = 0) if(ishuman(target)) - var/mob/living/carbon/human/M = target + var/mob/living/human/M = target var/obj/item/suit = M.get_equipped_item(slot_wear_suit_str) if((istype(suit, /obj/item/clothing/suit/bluetag))||(istype(suit, /obj/item/clothing/suit/redtag))) SET_STATUS_MAX(M, STAT_WEAK, 5) diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index 916f3e347d0..e66053ebe84 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -16,7 +16,7 @@ for(var/t in get_all_species()) . += t if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M . -= H.species.name /obj/item/projectile/change/proc/apply_transformation(var/mob/M, var/choice) @@ -30,7 +30,7 @@ return R if(get_species_by_key(choice)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(!istype(H)) H = new(get_turf(M)) H.set_gender(M.get_gender()) diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 51d5d585f85..eb0cc1835e4 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -168,7 +168,7 @@ if(M.get_sound_volume_multiplier() < 0.2) ear_safety += 2 if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(istype(H.get_equipped_item(slot_head_str), /obj/item/clothing/head/helmet)) ear_safety += 1 @@ -186,7 +186,7 @@ to_chat(M, SPAN_DANGER("Your ears start to ring badly!")) if(prob(GET_STATUS(M, STAT_TINNITUS) - 5)) to_chat(M, SPAN_DANGER("You can't hear anything!")) - M.set_sdisability(DEAFENED) + M.add_genetic_condition(GENE_COND_DEAFENED) else if(GET_STATUS(M, STAT_TINNITUS) >= 5) to_chat(M, SPAN_DANGER("Your ears start to ring!")) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 6094d2dd9e1..33165821ff6 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -93,15 +93,11 @@ SPAN_DANGER("\The [M] writhes in pain as [G.his] vacuoles boil."), blind_message = SPAN_WARNING("You hear a crunching sound.") ) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(prob(35)) - if(prob(80)) - randmutb(H) - domutcheck(H,null) - else - randmutg(H) - domutcheck(H,null) + if(prob(35)) + if(prob(80)) + M.add_genetic_condition(pick(decls_repository.get_decls_of_type(/decl/genetic_condition/disability))) + else + M.add_genetic_condition(pick(decls_repository.get_decls_of_type(/decl/genetic_condition/superpower))) else M.heal_damage(BURN, rand(5,15)) M.show_message(SPAN_DANGER("The radiation beam singes you!")) @@ -141,7 +137,7 @@ /obj/item/projectile/beam/mindflayer/on_hit(var/atom/target, var/blocked = 0) if(ishuman(target)) - var/mob/living/carbon/human/M = target + var/mob/living/human/M = target ADJ_STATUS(M, STAT_CONFUSE, rand(5,8)) /obj/item/projectile/chameleon diff --git a/code/modules/random_map/dungeon/rooms/tomb.dm b/code/modules/random_map/dungeon/rooms/tomb.dm index d91a82b13e5..339b027250f 100644 --- a/code/modules/random_map/dungeon/rooms/tomb.dm +++ b/code/modules/random_map/dungeon/rooms/tomb.dm @@ -22,10 +22,10 @@ var/type = pickweight(corpses) var/mob/M if(istext(type)) - M = new /mob/living/carbon/human() - var/mob/living/carbon/human/H = M + M = new /mob/living/human() + var/mob/living/human/H = M H.set_species(type) - H.make_husked() + H.add_genetic_condition(GENE_COND_HUSK) else M = new type() M.death() @@ -38,10 +38,10 @@ var/type = pickweight(corpses) var/mob/M if(istext(type)) - M = new /mob/living/carbon/human() - var/mob/living/carbon/human/H = M + M = new /mob/living/human() + var/mob/living/human/H = M H.set_species(type) - H.make_husked() + H.add_genetic_condition(GENE_COND_HUSK) else M = new type() M.death() diff --git a/code/modules/random_map/noise/forage.dm b/code/modules/random_map/noise/forage.dm index 3408554680a..93ddba8a3e2 100644 --- a/code/modules/random_map/noise/forage.dm +++ b/code/modules/random_map/noise/forage.dm @@ -8,6 +8,9 @@ /obj/item/stack/material/ore/basalt/three amount = 3 +/obj/item/stack/material/ore/basalt/ten + amount = 10 + /atom/movable/spawn_boulder name = "material boulder spawner" is_spawnable_type = FALSE diff --git a/code/modules/reagents/Chemistry-Grinder.dm b/code/modules/reagents/Chemistry-Grinder.dm index 32dff0e6d68..dfdacb1d755 100644 --- a/code/modules/reagents/Chemistry-Grinder.dm +++ b/code/modules/reagents/Chemistry-Grinder.dm @@ -226,7 +226,7 @@ if(CanPhysicallyInteractWith(user, src)) interface_interact(user) -/obj/machinery/reagentgrinder/proc/attempt_skill_effect(mob/living/carbon/human/user) +/obj/machinery/reagentgrinder/proc/attempt_skill_effect(mob/living/human/user) if(!istype(user) || !prob(user.skill_fail_chance(skill_to_check, 50, SKILL_BASIC))) return FALSE var/hand = pick(BP_L_HAND, BP_R_HAND) @@ -270,7 +270,7 @@ item_size_limit = ITEM_SIZE_SMALL skill_to_check = SKILL_COOKING -/obj/machinery/reagentgrinder/juicer/attempt_skill_effect(mob/living/carbon/human/user) +/obj/machinery/reagentgrinder/juicer/attempt_skill_effect(mob/living/human/user) if(!istype(user) || !prob(user.skill_fail_chance(skill_to_check, 50, SKILL_BASIC))) return visible_message(SPAN_NOTICE("\The [src] whirrs violently and spills its contents all over \the [user]!")) diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 30d1af9e697..59b11b071d6 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -79,7 +79,7 @@ var/global/obj/temp_reagents_holder = new if(my_atom.reagents == src) my_atom.reagents = null if(total_volume > 0) // we can assume 0 reagents and null reagents are broadly identical for the purposes of atom logic - my_atom.on_reagent_change() + my_atom.try_on_reagent_change() my_atom = null /datum/reagents/GetCloneArgs() @@ -235,16 +235,14 @@ var/global/obj/temp_reagents_holder = new update_total() if(!safety) HANDLE_REACTIONS(src) - if(my_atom) - my_atom.on_reagent_change() + my_atom?.try_on_reagent_change() ///Set and call updates on the target holder. /datum/reagents/proc/set_holder(var/obj/new_holder) if(my_atom == new_holder) return my_atom = new_holder - if(my_atom) - my_atom.on_reagent_change() + my_atom?.try_on_reagent_change() handle_update() /datum/reagents/proc/add_reagent(var/reagent_type, var/amount, var/data = null, var/safety = 0, var/defer_update = FALSE) @@ -333,7 +331,7 @@ var/global/obj/temp_reagents_holder = new LAZYCLEARLIST(reagent_volumes) LAZYCLEARLIST(reagent_data) total_volume = 0 - my_atom?.on_reagent_change() + my_atom?.try_on_reagent_change() /datum/reagents/proc/get_overdose(var/decl/material/current) if(current) diff --git a/code/modules/reagents/chems/chems_blood.dm b/code/modules/reagents/chems/chems_blood.dm index 387f094cf01..2217b16fb24 100644 --- a/code/modules/reagents/chems/chems_blood.dm +++ b/code/modules/reagents/chems/chems_blood.dm @@ -64,7 +64,7 @@ /decl/material/liquid/blood/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) if(ishuman(M)) var/volume = REAGENT_VOLUME(holder, type) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M H.inject_blood(volume, holder) holder.remove_reagent(type, volume) diff --git a/code/modules/reagents/chems/chems_compounds.dm b/code/modules/reagents/chems/chems_compounds.dm index e7e0715acad..7ad24e74418 100644 --- a/code/modules/reagents/chems/chems_compounds.dm +++ b/code/modules/reagents/chems/chems_compounds.dm @@ -27,13 +27,13 @@ /decl/material/liquid/glowsap/affect_blood(mob/living/M, removed, var/datum/reagents/holder) M.add_chemical_effect(CE_GLOWINGEYES, 1) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M H.update_eyes() /decl/material/liquid/glowsap/on_leaving_metabolism(datum/reagents/metabolism/holder) if(ishuman(holder?.my_atom)) - var/mob/living/carbon/human/H = holder.my_atom - addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon/human, update_eyes)), 5 SECONDS) + var/mob/living/human/H = holder.my_atom + addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/human, update_eyes)), 5 SECONDS) . = ..() /decl/material/liquid/glowsap/affect_overdose(mob/living/M, total_dose) @@ -115,7 +115,7 @@ return if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(!H.can_feel_pain()) return @@ -206,7 +206,7 @@ return if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(!H.can_feel_pain()) return if(LAZYACCESS(M.chem_doses, type) == metabolism) @@ -241,20 +241,18 @@ if(M.isSynthetic()) return - - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(istype(H) && (H.get_bodytype()?.body_flags & BODY_FLAG_NO_DNA)) return - if(M.dna) - if(prob(removed * 0.1)) // Approx. one mutation per 10 injected/20 ingested/30 touching units - randmuti(M) - if(prob(98)) - randmutb(M) - else - randmutg(M) - domutcheck(M, null) - M.UpdateAppearance() + if(prob(removed * 0.1)) // Approx. one mutation per 10 injected/20 ingested/30 touching units + H.set_unique_enzymes(num2text(random_id(/mob, 1000000, 9999999))) + if(prob(98)) + M.add_genetic_condition(pick(decls_repository.get_decls_of_type(/decl/genetic_condition/disability))) + else + M.add_genetic_condition(pick(decls_repository.get_decls_of_type(/decl/genetic_condition/superpower))) + + M.apply_damage(10 * removed, IRRADIATE, armor_pen = 100) /decl/material/liquid/lactate @@ -292,7 +290,7 @@ uid = "chem_nanoblood" /decl/material/liquid/nanoblood/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(!istype(H)) return if(!H.should_have_organ(BP_HEART)) //We want the var for safety but we can do without the actual blood. @@ -384,7 +382,7 @@ if(M.bodytemperature < 170) M.heal_organ_damage(30 * removed, 30 * removed, affect_robo = 1) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M for(var/obj/item/organ/internal/I in H.get_internal_organs()) if(BP_IS_PROSTHETIC(I)) I.heal_damage(20*removed) @@ -413,7 +411,7 @@ /decl/material/liquid/crystal_agent/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) var/result_mat = do_material_check(M) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/list/limbs = H.get_external_organs() var/list/shuffled_limbs = LAZYLEN(limbs) ? shuffle(limbs.Copy()) : null for(var/obj/item/organ/external/E in shuffled_limbs) diff --git a/code/modules/reagents/chems/chems_drugs.dm b/code/modules/reagents/chems/chems_drugs.dm index 4f4c375dcae..6db2a8e8a95 100644 --- a/code/modules/reagents/chems/chems_drugs.dm +++ b/code/modules/reagents/chems/chems_drugs.dm @@ -218,7 +218,7 @@ ADJ_STATUS(M, STAT_JITTER, 3) ADJ_STATUS(M, STAT_DIZZY, 3) if(prob(0.1) && ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M H.seizure() H.take_damage(rand(8, 12), BRAIN) if(prob(5)) @@ -233,7 +233,7 @@ /decl/material/liquid/glowsap/gleam/affect_overdose(mob/living/M, total_dose) M.take_damage(rand(1, 5), BRAIN) if(ishuman(M) && prob(10)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M H.seizure() if(prob(10)) to_chat(M, SPAN_DANGER("[pick(overdose_messages)]")) diff --git a/code/modules/reagents/chems/chems_ethanol.dm b/code/modules/reagents/chems/chems_ethanol.dm index 84a26d93948..264a08ea936 100644 --- a/code/modules/reagents/chems/chems_ethanol.dm +++ b/code/modules/reagents/chems/chems_ethanol.dm @@ -452,7 +452,7 @@ if(dose > 30) M.take_damage(2 * removed, TOX) if(dose > 60 && ishuman(M) && prob(5)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(H, BP_HEART) if(heart) if(dose < 120) diff --git a/code/modules/reagents/chems/chems_medicines.dm b/code/modules/reagents/chems/chems_medicines.dm index 2ded7b2060b..141dd99c0a8 100644 --- a/code/modules/reagents/chems/chems_medicines.dm +++ b/code/modules/reagents/chems/chems_medicines.dm @@ -12,7 +12,7 @@ /decl/material/liquid/eyedrops/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/obj/item/organ/internal/E = GET_INTERNAL_ORGAN(H, BP_EYES) if(E && istype(E) && !E.is_broken()) ADJ_STATUS(M, STAT_BLURRY, -5) @@ -54,7 +54,7 @@ ..() if(ishuman(M)) M.add_chemical_effect(CE_BLOCKAGE, (15 + REAGENT_VOLUME(holder, type))/100) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M for(var/obj/item/organ/external/E in H.get_external_organs()) if(E.status & ORGAN_ARTERY_CUT && prob(2 + REAGENT_VOLUME(holder, type) / overdose)) E.status &= ~ORGAN_ARTERY_CUT @@ -166,7 +166,7 @@ /decl/material/liquid/immunobooster/affect_overdose(mob/living/M, total_dose) ..() M.add_chemical_effect(CE_TOXIN, 1) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(istype(H)) M.adjust_immunity(-0.5) @@ -260,7 +260,7 @@ /decl/material/liquid/retrovirals/affect_overdose(mob/living/M, total_dose) . = ..() if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M for(var/obj/item/organ/external/E in H.get_external_organs()) if(!BP_IS_PROSTHETIC(E) && prob(25) && !(E.status & ORGAN_MUTATED)) E.mutate() @@ -271,15 +271,7 @@ if(LAZYACCESS(M.chem_doses, type) > 10) ADJ_STATUS(M, STAT_DIZZY, 5) ADJ_STATUS(M, STAT_JITTER, 5) - var/needs_update = M.mutations.len > 0 - M.mutations.Cut() - M.disabilities = 0 - M.sdisabilities = 0 - if(needs_update && ishuman(M)) - M.dna.ResetUI() - M.dna.ResetSE() - domutcheck(M, null, MUTCHK_FORCED) - M.update_icon() + M.reset_genetic_conditions() /decl/material/liquid/adrenaline name = "adrenaline" @@ -306,7 +298,7 @@ if(volume >= 5 && M.is_asystole()) holder.remove_reagent(type, 5) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if(H.resuscitate()) var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(H, BP_HEART) heart.take_internal_damage(heart.max_damage * 0.15) @@ -360,7 +352,7 @@ M.add_chemical_effect(CE_PAINKILLER, 10) M.add_chemical_effect(CE_BRAIN_REGEN, 1) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M ADJ_STATUS(H, STAT_CONFUSE, 1) ADJ_STATUS(H, STAT_DROWSY, 1) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 6e3fd788761..c1237db561e 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -79,10 +79,10 @@ desc = new_desc_list.Join("\n") /obj/item/chems/on_reagent_change() - ..() - update_container_name() - update_container_desc() - update_icon() + if((. = ..())) + update_container_name() + update_container_desc() + update_icon() /obj/item/chems/verb/set_amount_per_transfer_from_this() set name = "Set Transfer Amount" diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 60d34cefd8f..b8a8a2578ed 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -17,7 +17,7 @@ amount_per_transfer_from_this = REM atom_flags = ATOM_FLAG_OPEN_CONTAINER - var/mob/living/carbon/human/attached + var/mob/living/human/attached /obj/item/chems/ivbag/Destroy() STOP_PROCESSING(SSobj,src) @@ -25,7 +25,8 @@ . = ..() /obj/item/chems/ivbag/on_reagent_change() - ..() + if(!(. = ..())) + return if(reagents?.total_volume > volume/2) w_class = ITEM_SIZE_SMALL else diff --git a/code/modules/reagents/reagent_containers/condiment.dm b/code/modules/reagents/reagent_containers/condiment.dm index 60387824b71..5e7d21528cd 100644 --- a/code/modules/reagents/reagent_containers/condiment.dm +++ b/code/modules/reagents/reagent_containers/condiment.dm @@ -42,11 +42,12 @@ if(length(tmp_label)) to_chat(user, SPAN_NOTICE("You set the label to \"[tmp_label]\".")) label_text = tmp_label - name = addtext(name," ([label_text])") else to_chat(user, SPAN_NOTICE("You remove the label.")) label_text = null - on_reagent_change() + update_container_name() + update_container_desc() + update_icon() return /obj/item/chems/condiment/afterattack(var/obj/target, var/mob/user, var/proximity) @@ -77,8 +78,8 @@ /obj/item/chems/condiment/on_reagent_change() is_special_bottle = reagents?.total_volume && special_bottles[reagents?.primary_reagent] - ..() - update_center_of_mass() + if((. = ..())) + update_center_of_mass() /obj/item/chems/condiment/update_container_name() name = is_special_bottle ? initial(is_special_bottle.name) : initial(name) diff --git a/code/modules/reagents/reagent_containers/drinks/bottle.dm b/code/modules/reagents/reagent_containers/drinks/bottle.dm index fdaf1c2a812..ddecaec124f 100644 --- a/code/modules/reagents/reagent_containers/drinks/bottle.dm +++ b/code/modules/reagents/reagent_containers/drinks/bottle.dm @@ -166,7 +166,7 @@ if(!smash_check(1)) return //won't always break on the first hit - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target if(istype(H) && H.headcheck(hit_zone)) var/obj/item/organ/affecting = GET_EXTERNAL_ORGAN(H, hit_zone) //headcheck should ensure that affecting is not null user.visible_message(SPAN_DANGER("\The [user] smashes \the [src] into [H]'s [affecting.name]!")) diff --git a/code/modules/reagents/reagent_containers/food/meat/cubes.dm b/code/modules/reagents/reagent_containers/food/meat/cubes.dm index 8be79bc8347..48a3db8b0ea 100644 --- a/code/modules/reagents/reagent_containers/food/meat/cubes.dm +++ b/code/modules/reagents/reagent_containers/food/meat/cubes.dm @@ -10,7 +10,7 @@ center_of_mass = @'{"x":16,"y":14}' var/growing = FALSE - var/monkey_type = /mob/living/carbon/human/monkey + var/monkey_type = /mob/living/human/monkey var/wrapper_type /obj/item/chems/food/monkeycube/populate_reagents() @@ -54,8 +54,7 @@ Expand(get_turf(target)) /obj/item/chems/food/monkeycube/on_reagent_change() - ..() - if(!QDELETED(src) && reagents?.has_reagent(/decl/material/liquid/water)) + if((. = ..()) && !QDELETED(src) && reagents?.has_reagent(/decl/material/liquid/water)) Expand() /obj/item/chems/food/monkeycube/wrapped diff --git a/code/modules/reagents/reagent_containers/inhaler.dm b/code/modules/reagents/reagent_containers/inhaler.dm index b692be6a17c..b33217aacbb 100644 --- a/code/modules/reagents/reagent_containers/inhaler.dm +++ b/code/modules/reagents/reagent_containers/inhaler.dm @@ -54,7 +54,7 @@ return TRUE // This properly handles mouth coverage/presence, but should probably be replaced later. - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target if(user == H) if(!H.can_eat(src)) return TRUE diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 1938f0607a4..0f766804599 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -39,8 +39,8 @@ /obj/item/chems/syringe/on_reagent_change() - . = ..() - update_icon() + if((. = ..())) + update_icon() /obj/item/chems/syringe/on_picked_up(mob/user) . = ..() @@ -130,11 +130,9 @@ return if(ishuman(target)) var/amount = REAGENTS_FREE_SPACE(reagents) - var/mob/living/carbon/human/T = target - if(!T.dna) + var/mob/living/human/T = target + if(!T.vessel?.total_volume) to_chat(user, SPAN_WARNING("You are unable to locate any blood.")) - if(ishuman(target)) - CRASH("[T] \[[T.type]\] was missing their dna datum!") return var/allow = T.can_inject(user, check_zone(user.get_target_zone(), T)) @@ -271,7 +269,7 @@ if(ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target var/target_zone = check_zone(user.get_target_zone(), H) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, target_zone) @@ -306,7 +304,7 @@ admin_inject_log(user, target, src, contained_reagents, trans, violent=1) break_syringe(target, user) -/obj/item/chems/syringe/proc/break_syringe(mob/living/carbon/human/target, mob/living/user) +/obj/item/chems/syringe/proc/break_syringe(mob/living/human/target, mob/living/user) desc += " It is broken." mode = SYRINGE_BROKEN if(target) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index c36c615d139..f8c05d3172c 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -34,7 +34,8 @@ atom_flags = old_atom_flags /obj/structure/reagent_dispensers/on_reagent_change() - ..() + if(!(. = ..())) + return if(reagents?.total_volume > 0) tool_interaction_flags = 0 else diff --git a/code/modules/recycling/package_wrapper.dm b/code/modules/recycling/package_wrapper.dm index 4333cf48d40..b4261ef64a9 100644 --- a/code/modules/recycling/package_wrapper.dm +++ b/code/modules/recycling/package_wrapper.dm @@ -61,7 +61,7 @@ to_chat(user, SPAN_WARNING("You cannot wrap yourself!")) return if(ishuman(AM)) - var/mob/living/carbon/human/H = AM + var/mob/living/human/H = AM if(!H.incapacitated(INCAPACITATION_DISABLED | INCAPACITATION_RESTRAINED)) if(user) to_chat(user, SPAN_WARNING("\The [H] is moving around too much. Restrain or incapacitate them first.")) @@ -95,7 +95,7 @@ qdel(wrapper) else if(ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target if(H.incapacitated(INCAPACITATION_DISABLED | INCAPACITATION_RESTRAINED)) var/obj/item/parcel/wrapper = new wrapped_result_type(get_turf(target)) if(wrapper.make_parcel(target, user)) //Call this directly so it applies our fingerprints diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 1a1ecb8cd9c..e281cf1841a 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -58,7 +58,7 @@ sleep(5) // wait for animation to finish if(prob(35)) - for(var/mob/living/carbon/human/L in src) + for(var/mob/living/human/L in src) var/list/obj/item/organ/external/crush = L.get_damageable_organs() if(!crush.len) return diff --git a/code/modules/recycling/wrapped_package.dm b/code/modules/recycling/wrapped_package.dm index 9e85840711f..6aa4c487c83 100644 --- a/code/modules/recycling/wrapped_package.dm +++ b/code/modules/recycling/wrapped_package.dm @@ -268,7 +268,7 @@ /obj/item, /obj/structure, /obj/machinery, - /mob/living/carbon/human, + /mob/living/human, ) return type_whitelist diff --git a/code/modules/shield_generators/shield.dm b/code/modules/shield_generators/shield.dm index 844395bbc36..0adbc8ef951 100644 --- a/code/modules/shield_generators/shield.dm +++ b/code/modules/shield_generators/shield.dm @@ -267,7 +267,7 @@ return !gen.check_flag(MODEFLAG_NONHUMANS) // Human mobs -/mob/living/carbon/human/can_pass_shield(var/obj/machinery/shield_generator/gen) +/mob/living/human/can_pass_shield(var/obj/machinery/shield_generator/gen) if(isSynthetic()) return !gen.check_flag(MODEFLAG_ANORGANIC) return !gen.check_flag(MODEFLAG_HUMANOIDS) diff --git a/code/modules/shuttles/antagonist.dm b/code/modules/shuttles/antagonist.dm index 00be092c6ba..9aa7aeee25f 100644 --- a/code/modules/shuttles/antagonist.dm +++ b/code/modules/shuttles/antagonist.dm @@ -7,9 +7,3 @@ name = "rescue shuttle control console" initial_access = list(access_cent_specops) shuttle_tag = "Rescue" - -/obj/machinery/computer/shuttle_control/multi/ninja - name = "stealth shuttle control console" - initial_access = list(access_ninja) - shuttle_tag = "Ninja" - diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm index d3f1745af4f..3c28628e020 100644 --- a/code/modules/shuttles/shuttle_emergency.dm +++ b/code/modules/shuttles/shuttle_emergency.dm @@ -252,7 +252,7 @@ else if(!emagged && href_list["scanid"]) //They selected an empty entry. Try to scan their id. - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if (istype(H)) if (!read_authorization(H.get_active_held_item())) //try to read what's in their hand first read_authorization(H.get_equipped_item(slot_wear_id_str)) diff --git a/code/modules/species/outsider/random.dm b/code/modules/species/outsider/random.dm index 29f43d6fdf0..7dc435debf7 100644 --- a/code/modules/species/outsider/random.dm +++ b/code/modules/species/outsider/random.dm @@ -101,7 +101,7 @@ . = ..() -/decl/species/alium/get_species_blood_color(mob/living/carbon/human/H) +/decl/species/alium/get_species_blood_color(mob/living/human/H) if(istype(H) && H.isSynthetic()) return ..() return blood_color @@ -131,7 +131,7 @@ return TRUE to_chat(user, "You're now an alien humanoid of some undiscovered species. Make up what lore you want, no one knows a thing about your species! You can check info about your traits with Check Species Info verb in IC tab.") to_chat(user, "You can't speak any other languages by default. You can use translator implant that spawns on top of this monolith - it will give you knowledge of any language if you hear it enough times.") - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user new /obj/item/implanter/translator(get_turf(src)) H.change_species(SPECIES_ALIEN) var/decl/cultural_info/culture = H.get_cultural_value(TAG_CULTURE) diff --git a/code/modules/species/outsider/shadow.dm b/code/modules/species/outsider/shadow.dm index 9c71b34777d..f0c2147c401 100644 --- a/code/modules/species/outsider/shadow.dm +++ b/code/modules/species/outsider/shadow.dm @@ -34,7 +34,7 @@ species_flags = SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_EMBED -/decl/species/starlight/shadow/handle_environment_special(var/mob/living/carbon/human/H) +/decl/species/starlight/shadow/handle_environment_special(var/mob/living/human/H) if(H.is_in_stasis() || H.stat == DEAD || H.isSynthetic()) return var/light_amount = 0 diff --git a/code/modules/species/outsider/starlight.dm b/code/modules/species/outsider/starlight.dm index 6067e0c9093..261d2398329 100644 --- a/code/modules/species/outsider/starlight.dm +++ b/code/modules/species/outsider/starlight.dm @@ -64,7 +64,7 @@ splatter_desc = "A puddle of starstuff." splatter_colour = "#ffff00" -/decl/species/starlight/handle_death(var/mob/living/carbon/human/H) +/decl/species/starlight/handle_death(var/mob/living/human/H) addtimer(CALLBACK(H, TYPE_PROC_REF(/mob, dust)),0) /decl/species/starlight/starborn @@ -97,7 +97,7 @@ /obj/aura/starborn ) -/decl/species/starlight/starborn/handle_death(var/mob/living/carbon/human/H) +/decl/species/starlight/starborn/handle_death(var/mob/living/human/H) ..() var/turf/T = get_turf(H) T.add_to_reagents(/decl/material/liquid/fuel, 20) @@ -140,7 +140,7 @@ radiation_mod = 0 species_flags = SPECIES_FLAG_NO_MINOR_CUT | SPECIES_FLAG_NO_SLIP | SPECIES_FLAG_NO_POISON | SPECIES_FLAG_NO_EMBED | SPECIES_FLAG_NO_TANGLE -/decl/species/starlight/blueforged/handle_death(var/mob/living/carbon/human/H) +/decl/species/starlight/blueforged/handle_death(var/mob/living/human/H) ..() new /obj/effect/temporary(get_turf(H),11, 'icons/mob/mob.dmi', "liquify") diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index 3b40fb162a8..be5d5557f4b 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -400,22 +400,22 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 if(taste_sensitivity < 0) . += "taste_sensitivity ([taste_sensitivity]) was negative" -/decl/species/proc/equip_survival_gear(var/mob/living/carbon/human/H, var/box_type = /obj/item/box/survival) +/decl/species/proc/equip_survival_gear(var/mob/living/human/H, var/box_type = /obj/item/box/survival) var/obj/item/backpack/backpack = H.get_equipped_item(slot_back_str) if(istype(backpack)) H.equip_to_slot_or_del(new box_type(backpack), slot_in_backpack_str) else H.put_in_hands_or_del(new box_type(H)) -/decl/species/proc/get_manual_dexterity(var/mob/living/carbon/human/H) +/decl/species/proc/get_manual_dexterity(var/mob/living/human/H) . = manual_dexterity -/decl/species/proc/add_base_auras(var/mob/living/carbon/human/H) +/decl/species/proc/add_base_auras(var/mob/living/human/H) if(base_auras) for(var/type in base_auras) H.add_aura(new type(H), skip_icon_update = TRUE) -/decl/species/proc/remove_base_auras(var/mob/living/carbon/human/H) +/decl/species/proc/remove_base_auras(var/mob/living/human/H) if(base_auras) var/list/bcopy = base_auras.Copy() for(var/a in H.auras) @@ -425,69 +425,69 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 H.remove_aura(A) qdel(A) -/decl/species/proc/remove_inherent_verbs(var/mob/living/carbon/human/H) +/decl/species/proc/remove_inherent_verbs(var/mob/living/human/H) if(inherent_verbs) for(var/verb_path in inherent_verbs) H.verbs -= verb_path return -/decl/species/proc/add_inherent_verbs(var/mob/living/carbon/human/H) +/decl/species/proc/add_inherent_verbs(var/mob/living/human/H) if(inherent_verbs) for(var/verb_path in inherent_verbs) H.verbs |= verb_path return -/decl/species/proc/handle_post_spawn(var/mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment. +/decl/species/proc/handle_post_spawn(var/mob/living/human/H) //Handles anything not already covered by basic species assignment. add_inherent_verbs(H) add_base_auras(H) handle_movement_flags_setup(H) -/decl/species/proc/handle_pre_spawn(var/mob/living/carbon/human/H) +/decl/species/proc/handle_pre_spawn(var/mob/living/human/H) return -/decl/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events. +/decl/species/proc/handle_death(var/mob/living/human/H) //Handles any species-specific death events. return -/decl/species/proc/handle_sleeping(var/mob/living/carbon/human/H) +/decl/species/proc/handle_sleeping(var/mob/living/human/H) if(prob(2) && !H.failed_last_breath && !H.isSynthetic()) if(!HAS_STATUS(H, STAT_PARA)) H.emote(/decl/emote/audible/snore) else H.emote(/decl/emote/audible/groan) -/decl/species/proc/handle_environment_special(var/mob/living/carbon/human/H) +/decl/species/proc/handle_environment_special(var/mob/living/human/H) return -/decl/species/proc/handle_movement_delay_special(var/mob/living/carbon/human/H) +/decl/species/proc/handle_movement_delay_special(var/mob/living/human/H) return 0 // Used to update alien icons for aliens. -/decl/species/proc/handle_login_special(var/mob/living/carbon/human/H) +/decl/species/proc/handle_login_special(var/mob/living/human/H) return // As above. -/decl/species/proc/handle_logout_special(var/mob/living/carbon/human/H) +/decl/species/proc/handle_logout_special(var/mob/living/human/H) return -/decl/species/proc/can_overcome_gravity(var/mob/living/carbon/human/H) +/decl/species/proc/can_overcome_gravity(var/mob/living/human/H) return FALSE // Used for any extra behaviour when falling and to see if a species will fall at all. -/decl/species/proc/can_fall(var/mob/living/carbon/human/H) +/decl/species/proc/can_fall(var/mob/living/human/H) return TRUE // Used to override normal fall behaviour. Use only when the species does fall down a level. -/decl/species/proc/handle_fall_special(var/mob/living/carbon/human/H, var/turf/landing) +/decl/species/proc/handle_fall_special(var/mob/living/human/H, var/turf/landing) return FALSE //Used for swimming -/decl/species/proc/can_float(var/mob/living/carbon/human/H) +/decl/species/proc/can_float(var/mob/living/human/H) if(!H.is_physically_disabled()) return TRUE //We could tie it to stamina return FALSE // Called when using the shredding behavior. -/decl/species/proc/can_shred(var/mob/living/carbon/human/H, var/ignore_intent, var/ignore_antag) +/decl/species/proc/can_shred(var/mob/living/human/H, var/ignore_intent, var/ignore_antag) if((!ignore_intent && H.a_intent != I_HURT) || H.pulling_punches) return 0 @@ -503,7 +503,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 return 1 return 0 -/decl/species/proc/handle_vision(var/mob/living/carbon/human/H) +/decl/species/proc/handle_vision(var/mob/living/human/H) var/list/vision = H.get_accumulated_vision_handlers() H.update_sight() H.set_sight(H.sight|get_vision_flags(H)|H.equipment_vision_flags|vision[1]) @@ -541,9 +541,9 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 return 1 -/decl/species/proc/get_how_nearsighted(var/mob/living/carbon/human/H) +/decl/species/proc/get_how_nearsighted(var/mob/living/human/H) var/prescriptions = short_sighted - if(H.disabilities & NEARSIGHTED) + if(H.has_genetic_condition(GENE_COND_NEARSIGHTED)) prescriptions += 7 if(H.equipment_prescription) prescriptions -= H.equipment_prescription @@ -565,24 +565,24 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 light -= H.equipment_light_protection return clamp(max(prescriptions, light), 0, 7) -/decl/species/proc/handle_additional_hair_loss(var/mob/living/carbon/human/H, var/defer_body_update = TRUE) +/decl/species/proc/handle_additional_hair_loss(var/mob/living/human/H, var/defer_body_update = TRUE) return FALSE -/decl/species/proc/get_blood_decl(var/mob/living/carbon/human/H) +/decl/species/proc/get_blood_decl(var/mob/living/human/H) if(istype(H) && H.isSynthetic()) return GET_DECL(/decl/blood_type/coolant) return get_blood_type_by_name(blood_types[1]) -/decl/species/proc/get_blood_name(var/mob/living/carbon/human/H) +/decl/species/proc/get_blood_name(var/mob/living/human/H) var/decl/blood_type/blood = get_blood_decl(H) return istype(blood) ? blood.splatter_name : "blood" -/decl/species/proc/get_species_blood_color(var/mob/living/carbon/human/H) +/decl/species/proc/get_species_blood_color(var/mob/living/human/H) var/decl/blood_type/blood = get_blood_decl(H) return istype(blood) ? blood.splatter_colour : COLOR_BLOOD_HUMAN // Impliments different trails for species depending on if they're wearing shoes. -/decl/species/proc/get_move_trail(var/mob/living/carbon/human/H) +/decl/species/proc/get_move_trail(var/mob/living/human/H) if(H.current_posture.prone) return /obj/effect/decal/cleanable/blood/tracks/body var/obj/item/clothing/suit = H.get_equipped_item(slot_wear_suit_str) @@ -593,13 +593,13 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 return shoes.move_trail return move_trail -/decl/species/proc/handle_trail(var/mob/living/carbon/human/H, var/turf/T) +/decl/species/proc/handle_trail(var/mob/living/human/H, var/turf/T) return -/decl/species/proc/update_skin(var/mob/living/carbon/human/H) +/decl/species/proc/update_skin(var/mob/living/human/H) return -/decl/species/proc/disarm_attackhand(var/mob/living/carbon/human/attacker, var/mob/living/carbon/human/target) +/decl/species/proc/disarm_attackhand(var/mob/living/human/attacker, var/mob/living/human/target) attacker.do_attack_animation(target) var/obj/item/uniform = target.get_equipped_item(slot_w_uniform_str) @@ -649,7 +649,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 playsound(target.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) target.visible_message("[attacker] attempted to disarm \the [target]!") -/decl/species/proc/disfigure_msg(var/mob/living/carbon/human/H) //Used for determining the message a disfigured face has on examine. To add a unique message, just add this onto a specific species and change the "return" message. +/decl/species/proc/disfigure_msg(var/mob/living/human/H) //Used for determining the message a disfigured face has on examine. To add a unique message, just add this onto a specific species and change the "return" message. var/decl/pronouns/G = H.get_pronouns() return SPAN_DANGER("[G.His] face is horribly mangled!\n") @@ -683,23 +683,23 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 if(31 to 45) . = 4 else . = 8 -/decl/species/proc/check_no_slip(var/mob/living/carbon/human/H) +/decl/species/proc/check_no_slip(var/mob/living/human/H) if(can_overcome_gravity(H)) return TRUE return (species_flags & SPECIES_FLAG_NO_SLIP) // This assumes you've already checked that their bodytype can feel pain. -/decl/species/proc/get_pain_emote(var/mob/living/carbon/human/H, var/pain_power) +/decl/species/proc/get_pain_emote(var/mob/living/human/H, var/pain_power) for(var/pain_emotes in pain_emotes_with_pain_level) var/pain_level = pain_emotes_with_pain_level[pain_emotes] if(pain_level >= pain_power) // This assumes that if a pain-level has been defined it also has a list of emotes to go with it return pick(pain_emotes) -/decl/species/proc/handle_post_move(var/mob/living/carbon/human/H) +/decl/species/proc/handle_post_move(var/mob/living/human/H) handle_exertion(H) -/decl/species/proc/handle_exertion(mob/living/carbon/human/H) +/decl/species/proc/handle_exertion(mob/living/human/H) if (!exertion_effect_chance) return var/chance = max((100 - H.stamina), exertion_effect_chance * H.encumbrance()) @@ -726,12 +726,12 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 /decl/species/proc/get_default_name() return "[lowertext(name)] ([random_id(name, 100, 999)])" -/decl/species/proc/get_holder_color(var/mob/living/carbon/human/H) +/decl/species/proc/get_holder_color(var/mob/living/human/H) return //Called after a mob's species is set, organs were created, and we're about to update the icon, color, and etc of the mob being created. //Consider this might be called post-init -/decl/species/proc/apply_appearance(var/mob/living/carbon/human/H) +/decl/species/proc/apply_appearance(var/mob/living/human/H) H.icon_state = lowertext(src.name) /decl/species/proc/get_preview_icon() @@ -739,7 +739,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 // TODO: generate an icon based on all available bodytypes. - var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin("#species_[ckey(name)]") + var/mob/living/human/dummy/mannequin/mannequin = get_mannequin("#species_[ckey(name)]") if(mannequin) mannequin.change_species(name) // handles species/bodytype init @@ -760,7 +760,7 @@ var/global/const/DEFAULT_SPECIES_HEALTH = 200 return preview_icon -/decl/species/proc/handle_movement_flags_setup(var/mob/living/carbon/human/H) +/decl/species/proc/handle_movement_flags_setup(var/mob/living/human/H) H.mob_bump_flag = bump_flag H.mob_swap_flags = swap_flags H.mob_push_flags = push_flags diff --git a/code/modules/species/species_attack.dm b/code/modules/species/species_attack.dm index b09bfdacc0d..0c1fe901f76 100644 --- a/code/modules/species/species_attack.dm +++ b/code/modules/species/species_attack.dm @@ -20,10 +20,10 @@ usable_with_limbs = list(BP_L_HAND, BP_R_HAND) var/blocked_by_gloves = TRUE -/decl/natural_attack/claws/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) +/decl/natural_attack/claws/is_usable(var/mob/living/human/user, var/mob/living/human/target, var/zone) return (!user.get_equipped_item(slot_gloves_str) || !blocked_by_gloves) -/decl/natural_attack/claws/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) +/decl/natural_attack/claws/show_attack(var/mob/living/human/user, var/mob/living/human/target, var/zone, var/attack_damage) var/obj/item/organ/external/affecting = istype(target) && zone && GET_EXTERNAL_ORGAN(target, zone) if(!affecting) return ..() @@ -102,7 +102,7 @@ /decl/natural_attack/stomp/weak/get_unarmed_damage(mob/living/user, mob/living/victim) return damage -/decl/natural_attack/stomp/weak/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) +/decl/natural_attack/stomp/weak/show_attack(var/mob/living/human/user, var/mob/living/human/target, var/zone, var/attack_damage) var/obj/item/organ/external/affecting = istype(target) && zone && GET_EXTERNAL_ORGAN(target, zone) if(affecting) user.visible_message(SPAN_WARNING("\The [user] jumped up and down on \the [target]'s [affecting.name]!")) @@ -124,7 +124,7 @@ BP_GROIN ) -/decl/natural_attack/tail/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) //ensures that you can't tail someone in the skull +/decl/natural_attack/tail/is_usable(var/mob/living/human/user, var/mob/living/human/target, var/zone) //ensures that you can't tail someone in the skull if(!(zone in can_hit_zones)) return FALSE for(var/foot_tag in list(BP_L_FOOT, BP_R_FOOT)) @@ -132,7 +132,7 @@ return TRUE return FALSE -/decl/natural_attack/tail/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) +/decl/natural_attack/tail/show_attack(var/mob/living/human/user, var/mob/living/human/target, var/zone, var/attack_damage) var/obj/item/organ/external/affecting = istype(target) && zone && GET_EXTERNAL_ORGAN(target, zone) if(!affecting) diff --git a/code/modules/species/species_bodytype.dm b/code/modules/species/species_bodytype.dm index d4613329a43..8169aa70bbb 100644 --- a/code/modules/species/species_bodytype.dm +++ b/code/modules/species/species_bodytype.dm @@ -490,11 +490,12 @@ var/global/list/bodytypes_by_category = list() if(tail_data) var/obj/item/organ/external/tail/tail_organ = LAZYACCESS(tail_data, "path") if(ispath(tail_organ, /obj/item/organ/external/tail)) - var/use_species = get_user_species_for_validation() + var/decl/species/use_species = get_user_species_for_validation() if(use_species) - var/datum/dna/dummy_dna = new - dummy_dna.species = use_species - tail_organ = new tail_organ(null, null, dummy_dna, src) + var/datum/mob_snapshot/dummy_appearance = new + dummy_appearance.root_species = use_species + dummy_appearance.root_bodytype = src + tail_organ = new tail_organ(null, null, dummy_appearance) var/tail_icon = tail_organ.get_tail_icon() var/tail_state = tail_organ.get_tail() if(tail_icon && tail_state) @@ -506,7 +507,7 @@ var/global/list/bodytypes_by_category = list() if(!tail_state) . += "missing tail state" qdel(tail_organ) - qdel(dummy_dna) + qdel(dummy_appearance) else . += "could not find a species with this bodytype available for tail organ validation" else @@ -554,7 +555,7 @@ var/global/list/bodytypes_by_category = list() E.encased = apply_encased[E.organ_tag] //fully_replace: If true, all existing organs will be discarded. Useful when doing mob transformations, and not caring about the existing organs -/decl/bodytype/proc/create_missing_organs(mob/living/carbon/human/H, fully_replace = FALSE) +/decl/bodytype/proc/create_missing_organs(mob/living/human/H, fully_replace = FALSE) if(fully_replace) H.delete_organs() @@ -573,12 +574,15 @@ var/global/list/bodytypes_by_category = list() qdel(O) //Create missing limbs + var/datum/mob_snapshot/supplied_data = H.get_mob_snapshot(force = TRUE) + supplied_data.root_bodytype = src // This may not have been set on the target mob torso yet. + for(var/limb_type in has_limbs) if(GET_EXTERNAL_ORGAN(H, limb_type)) //Skip existing continue var/list/organ_data = has_limbs[limb_type] var/limb_path = organ_data["path"] - var/obj/item/organ/external/E = new limb_path(H, null, H.dna, src) //explicitly specify the dna and bodytype + var/obj/item/organ/external/E = new limb_path(H, null, supplied_data) //explicitly specify the dna and bodytype if(E.parent_organ) var/list/parent_organ_data = has_limbs[E.parent_organ] parent_organ_data["has_children"]++ @@ -589,7 +593,7 @@ var/global/list/bodytypes_by_category = list() if(GET_INTERNAL_ORGAN(H, organ_tag)) //Skip existing continue var/organ_type = has_organ[organ_tag] - var/obj/item/organ/O = new organ_type(H, null, H.dna, src) + var/obj/item/organ/O = new organ_type(H, null, supplied_data) if(organ_tag != O.organ_tag) warning("[O.type] has a default organ tag \"[O.organ_tag]\" that differs from the species' organ tag \"[organ_tag]\". Updating organ_tag to match.") O.organ_tag = organ_tag @@ -650,17 +654,17 @@ var/global/list/bodytypes_by_category = list() if(O) O.set_sprite_accessory(accessory, null, accessory_colour, skip_update = TRUE) -/decl/bodytype/proc/customize_preview_mannequin(mob/living/carbon/human/dummy/mannequin/mannequin) +/decl/bodytype/proc/customize_preview_mannequin(mob/living/human/dummy/mannequin/mannequin) set_default_sprite_accessories(mannequin) mannequin.set_eye_colour(base_eye_color, skip_update = TRUE) mannequin.force_update_limbs() - mannequin.update_mutations(0) + mannequin.update_genetic_conditions(0) mannequin.update_body(0) mannequin.update_underwear(0) mannequin.update_hair(0) mannequin.update_icon() -/decl/species/proc/customize_preview_mannequin(mob/living/carbon/human/dummy/mannequin/mannequin) +/decl/species/proc/customize_preview_mannequin(mob/living/human/dummy/mannequin/mannequin) if(preview_outfit) var/decl/hierarchy/outfit/outfit = outfit_by_type(preview_outfit) outfit.equip_outfit(mannequin, equip_adjustments = (OUTFIT_ADJUSTMENT_SKIP_SURVIVAL_GEAR|OUTFIT_ADJUSTMENT_SKIP_BACKPACK)) @@ -697,9 +701,11 @@ var/global/list/bodytypes_by_category = list() qdel(innard) // Install any necessary new organs. + var/datum/mob_snapshot/supplied_data = limb.owner.get_mob_snapshot(force = TRUE) + supplied_data.root_bodytype = src for(var/organ_tag in replacing_organs) var/organ_type = replacing_organs[organ_tag] - var/obj/item/organ/internal/new_innard = new organ_type(limb.owner, null, limb.owner.dna, src) + var/obj/item/organ/internal/new_innard = new organ_type(limb.owner, null, supplied_data) limb.owner.add_organ(new_innard, GET_EXTERNAL_ORGAN(limb.owner, new_innard.parent_organ), FALSE, FALSE) /decl/bodytype/proc/get_body_temperature_threshold(var/threshold) @@ -719,7 +725,7 @@ var/global/list/bodytypes_by_category = list() else CRASH("get_species_temperature_threshold() called with invalid threshold value.") -/decl/bodytype/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type) +/decl/bodytype/proc/get_environment_discomfort(var/mob/living/human/H, var/msg_type) if(!prob(5)) return @@ -745,7 +751,7 @@ var/global/list/bodytypes_by_category = list() for(var/species_name in get_all_species()) var/decl/species/species = get_species_by_key(species_name) if(src in species.available_bodytypes) - return species_name + return species // Defined as a global so modpacks can add to it. var/global/list/limbs_with_nails = list( @@ -764,5 +770,5 @@ var/global/list/limbs_with_nails = list( ) return null -/decl/bodytype/proc/get_movement_slowdown(var/mob/living/carbon/human/H) +/decl/bodytype/proc/get_movement_slowdown(var/mob/living/human/H) return movement_slowdown diff --git a/code/modules/species/species_bodytype_helpers.dm b/code/modules/species/species_bodytype_helpers.dm index 29ef201589f..8736740277b 100644 --- a/code/modules/species/species_bodytype_helpers.dm +++ b/code/modules/species/species_bodytype_helpers.dm @@ -1,4 +1,4 @@ -/decl/bodytype/proc/get_ignited_icon(var/mob/living/carbon/human/H) +/decl/bodytype/proc/get_ignited_icon(var/mob/living/human/H) return ignited_icon /decl/bodytype/proc/get_icon_cache_uid(var/mob/H) @@ -6,28 +6,28 @@ icon_cache_uid = "[sequential_id(/decl/bodytype)]" return icon_cache_uid -/decl/bodytype/proc/get_bandages_icon(var/mob/living/carbon/human/H) +/decl/bodytype/proc/get_bandages_icon(var/mob/living/human/H) return bandages_icon -/decl/bodytype/proc/get_blood_overlays(var/mob/living/carbon/human/H) +/decl/bodytype/proc/get_blood_overlays(var/mob/living/human/H) return blood_overlays -/decl/bodytype/proc/get_damage_overlays(var/mob/living/carbon/human/H) +/decl/bodytype/proc/get_damage_overlays(var/mob/living/human/H) return damage_overlays -/decl/bodytype/proc/get_husk_icon(var/mob/living/carbon/human/H) +/decl/bodytype/proc/get_husk_icon(var/mob/living/human/H) return husk_icon -/decl/bodytype/proc/get_skeletal_icon(var/mob/living/carbon/human/H) +/decl/bodytype/proc/get_skeletal_icon(var/mob/living/human/H) return skeletal_icon /decl/bodytype/proc/get_cosmetics_icon(var/decl/sprite_accessory/cosmetics/cosmetics_style) return cosmetics_icon -/decl/bodytype/proc/get_vulnerable_location(var/mob/living/carbon/human/H) +/decl/bodytype/proc/get_vulnerable_location(var/mob/living/human/H) return vulnerable_location -/decl/bodytype/proc/get_base_icon(var/mob/living/carbon/human/H, var/get_deform) +/decl/bodytype/proc/get_base_icon(var/mob/living/human/H, var/get_deform) return get_deform ? icon_deformed : icon_base /decl/bodytype/proc/handle_post_bodytype_pref_set(datum/preferences/pref) @@ -52,7 +52,7 @@ for(var/accessory in default_sprite_accessories[accessory_category]) pref.sprite_accessories[accessory_category][accessory] = default_sprite_accessories[accessory_category][accessory] -/decl/bodytype/proc/apply_appearance(var/mob/living/carbon/human/H) +/decl/bodytype/proc/apply_appearance(var/mob/living/human/H) if(base_color) H.set_skin_colour(base_color) diff --git a/code/modules/species/species_bodytype_quadruped.dm b/code/modules/species/species_bodytype_quadruped.dm index d9032a96e14..5673e68d89d 100644 --- a/code/modules/species/species_bodytype_quadruped.dm +++ b/code/modules/species/species_bodytype_quadruped.dm @@ -19,7 +19,7 @@ var/ridable = TRUE var/riding_offset = @"{'x':0,'y':0,'z':8}" -/decl/bodytype/quadruped/apply_appearance(var/mob/living/carbon/human/H) +/decl/bodytype/quadruped/apply_appearance(var/mob/living/human/H) . = ..() H.can_buckle = ridable H.buckle_pixel_shift = riding_offset \ No newline at end of file diff --git a/code/modules/species/species_bodytype_random.dm b/code/modules/species/species_bodytype_random.dm index 446b7581764..2e79046a92f 100644 --- a/code/modules/species/species_bodytype_random.dm +++ b/code/modules/species/species_bodytype_random.dm @@ -9,7 +9,7 @@ } #define SETUP_RANDOM_COLOR_SETTER(X, Y)\ -/mob/living/carbon/human/proc/randomize_##X(){\ +/mob/living/human/proc/randomize_##X(){\ var/decl/bodytype/root_bodytype = get_bodytype();\ if(!root_bodytype){\ return;\ @@ -45,7 +45,7 @@ SETUP_RANDOM_COLOR_SETTER(eye_color, set_eye_colour) /decl/bodytype/proc/get_random_skin_tone() return random_skin_tone(src) -/mob/living/carbon/human/proc/randomize_skin_tone() +/mob/living/human/proc/randomize_skin_tone() var/decl/bodytype/root_bodytype = get_bodytype() if(!root_bodytype) return diff --git a/code/modules/species/species_getters.dm b/code/modules/species/species_getters.dm index eca5e8a9087..90b97759adc 100644 --- a/code/modules/species/species_getters.dm +++ b/code/modules/species/species_getters.dm @@ -1,40 +1,40 @@ -/decl/species/proc/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H) +/decl/species/proc/get_valid_shapeshifter_forms(var/mob/living/human/H) return list() -/decl/species/proc/get_additional_examine_text(var/mob/living/carbon/human/H) +/decl/species/proc/get_additional_examine_text(var/mob/living/human/H) return -/decl/species/proc/get_knockout_message(var/mob/living/carbon/human/H) +/decl/species/proc/get_knockout_message(var/mob/living/human/H) return ((H && H.isSynthetic()) ? "encounters a hardware fault and suddenly reboots!" : knockout_message) -/decl/species/proc/get_species_death_message(var/mob/living/carbon/human/H) +/decl/species/proc/get_species_death_message(var/mob/living/human/H) return ((H && H.isSynthetic()) ? "gives one shrill beep before falling lifeless." : death_message) -/decl/species/proc/get_ssd(var/mob/living/carbon/human/H) +/decl/species/proc/get_ssd(var/mob/living/human/H) return ((H && H.isSynthetic()) ? "flashing a 'system offline' glyph on their monitor" : show_ssd) -/decl/species/proc/get_species_flesh_color(var/mob/living/carbon/human/H) +/decl/species/proc/get_species_flesh_color(var/mob/living/human/H) return ((H && H.isSynthetic()) ? SYNTH_FLESH_COLOUR : flesh_color) -/decl/species/proc/get_vision_flags(var/mob/living/carbon/human/H) +/decl/species/proc/get_vision_flags(var/mob/living/human/H) return vision_flags -/decl/species/proc/get_surgery_overlay_icon(var/mob/living/carbon/human/H) +/decl/species/proc/get_surgery_overlay_icon(var/mob/living/human/H) return 'icons/mob/surgery.dmi' -/decl/species/proc/get_footstep(var/mob/living/carbon/human/H, var/footstep_type) +/decl/species/proc/get_footstep(var/mob/living/human/H, var/footstep_type) return -/decl/species/proc/get_brute_mod(var/mob/living/carbon/human/H) +/decl/species/proc/get_brute_mod(var/mob/living/human/H) . = brute_mod -/decl/species/proc/get_burn_mod(var/mob/living/carbon/human/H) +/decl/species/proc/get_burn_mod(var/mob/living/human/H) . = burn_mod -/decl/species/proc/get_radiation_mod(var/mob/living/carbon/human/H) +/decl/species/proc/get_radiation_mod(var/mob/living/human/H) . = (H && H.isSynthetic() ? 0.5 : radiation_mod) -/decl/species/proc/get_root_species_name(var/mob/living/carbon/human/H) +/decl/species/proc/get_root_species_name(var/mob/living/human/H) return name /decl/species/proc/get_bodytype_by_name(var/bodytype_name) diff --git a/code/modules/species/species_helpers.dm b/code/modules/species/species_helpers.dm index ecacca890af..5bd257fa5bc 100644 --- a/code/modules/species/species_helpers.dm +++ b/code/modules/species/species_helpers.dm @@ -5,12 +5,12 @@ var/global/list/stored_shock_by_ref = list() target.electrocute_act(stored_shock_by_ref["\ref[src]"]*0.9, src) stored_shock_by_ref["\ref[src]"] = 0 -/decl/species/proc/toggle_stance(var/mob/living/carbon/human/H) +/decl/species/proc/toggle_stance(var/mob/living/human/H) if(!H.incapacitated()) H.pulling_punches = !H.pulling_punches to_chat(H, "You are now [H.pulling_punches ? "pulling your punches" : "not pulling your punches"].") -/decl/species/proc/fluid_act(var/mob/living/carbon/human/H, var/datum/reagents/fluids) +/decl/species/proc/fluid_act(var/mob/living/human/H, var/datum/reagents/fluids) SHOULD_CALL_PARENT(TRUE) var/water = REAGENT_VOLUME(fluids, /decl/material/liquid/water) if(water >= 40 && H.get_damage(PAIN)) @@ -23,7 +23,7 @@ var/global/list/stored_shock_by_ref = list() return FALSE else if(!isnull(max_players)) var/player_count = 0 - for(var/mob/living/carbon/human/H in global.living_mob_list_) + for(var/mob/living/human/H in global.living_mob_list_) if(H.client && H.key && H.species == src) player_count++ if(player_count >= max_players) @@ -42,23 +42,23 @@ var/global/list/stored_shock_by_ref = list() // pref.hair_colour = default_bodytype.base_hair_color // pref.facial_hair_colour = default_bodytype.base_hair_color -/decl/species/proc/equip_default_fallback_uniform(var/mob/living/carbon/human/H) +/decl/species/proc/equip_default_fallback_uniform(var/mob/living/human/H) if(istype(H)) H.equip_to_slot_or_del(new /obj/item/clothing/shirt/harness, slot_w_uniform_str) -/decl/species/proc/get_hazard_high_pressure(var/mob/living/carbon/human/H) +/decl/species/proc/get_hazard_high_pressure(var/mob/living/human/H) return hazard_high_pressure -/decl/species/proc/get_warning_high_pressure(var/mob/living/carbon/human/H) +/decl/species/proc/get_warning_high_pressure(var/mob/living/human/H) return warning_high_pressure -/decl/species/proc/get_warning_low_pressure(var/mob/living/carbon/human/H) +/decl/species/proc/get_warning_low_pressure(var/mob/living/human/H) return warning_low_pressure -/decl/species/proc/get_hazard_low_pressure(var/mob/living/carbon/human/H) +/decl/species/proc/get_hazard_low_pressure(var/mob/living/human/H) return hazard_low_pressure -/decl/species/proc/get_shock_vulnerability(var/mob/living/carbon/human/H) +/decl/species/proc/get_shock_vulnerability(var/mob/living/human/H) return shock_vulnerability /decl/species/proc/adjust_status(mob/living/target, condition, amount) diff --git a/code/modules/species/species_shapeshifter.dm b/code/modules/species/species_shapeshifter.dm index 3252cb8e682..ef3d68dd66b 100644 --- a/code/modules/species/species_shapeshifter.dm +++ b/code/modules/species/species_shapeshifter.dm @@ -6,10 +6,10 @@ var/global/list/wrapped_species_by_ref = list() /decl/species/shapeshifter available_bodytypes = list(/decl/bodytype/shapeshifter) inherent_verbs = list( - /mob/living/carbon/human/proc/shapeshifter_select_shape, - /mob/living/carbon/human/proc/shapeshifter_select_hair, - /mob/living/carbon/human/proc/shapeshifter_select_gender, - /mob/living/carbon/human/proc/shapeshifter_select_colour + /mob/living/human/proc/shapeshifter_select_shape, + /mob/living/human/proc/shapeshifter_select_hair, + /mob/living/human/proc/shapeshifter_select_gender, + /mob/living/human/proc/shapeshifter_select_colour ) var/list/valid_transform_species = list() var/monochromatic @@ -20,31 +20,31 @@ var/global/list/wrapped_species_by_ref = list() valid_transform_species |= default_form . = ..() -/decl/species/shapeshifter/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H) +/decl/species/shapeshifter/get_valid_shapeshifter_forms(var/mob/living/human/H) return valid_transform_species -/decl/species/shapeshifter/get_root_species_name(var/mob/living/carbon/human/H) +/decl/species/shapeshifter/get_root_species_name(var/mob/living/human/H) if(!H) return ..() var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"]) return S.get_root_species_name(H) -/decl/species/shapeshifter/handle_pre_spawn(var/mob/living/carbon/human/H) +/decl/species/shapeshifter/handle_pre_spawn(var/mob/living/human/H) ..() wrapped_species_by_ref["\ref[H]"] = default_form -/decl/species/shapeshifter/handle_post_spawn(var/mob/living/carbon/human/H) +/decl/species/shapeshifter/handle_post_spawn(var/mob/living/human/H) if(monochromatic) var/skin_colour = H.get_skin_colour() SET_HAIR_COLOUR(H, skin_colour, TRUE) SET_FACIAL_HAIR_COLOUR(H, skin_colour, TRUE) ..() -/decl/species/shapeshifter/get_pain_emote(var/mob/living/carbon/human/H, var/pain_power) +/decl/species/shapeshifter/get_pain_emote(var/mob/living/human/H, var/pain_power) var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"]) return S.get_pain_emote(H, pain_power) // Verbs follow. -/mob/living/carbon/human/proc/shapeshifter_select_hair() +/mob/living/human/proc/shapeshifter_select_hair() set name = "Select Hair" set category = "Abilities" @@ -66,7 +66,7 @@ var/global/list/wrapped_species_by_ref = list() var/decl/sprite_accessory/new_hair = input("Select a facial hair style.", "Shapeshifter Hair") as null|anything in beardstyles SET_FACIAL_HAIR_STYLE(src, (new_hair ? new_hair.type : /decl/sprite_accessory/facial_hair/shaved), FALSE) -/mob/living/carbon/human/proc/shapeshifter_select_gender() +/mob/living/human/proc/shapeshifter_select_gender() set name = "Select Gender" set category = "Abilities" @@ -83,7 +83,7 @@ var/global/list/wrapped_species_by_ref = list() visible_message("\The [src]'s form contorts subtly.") set_gender(new_gender, TRUE) -/mob/living/carbon/human/proc/shapeshifter_select_shape() +/mob/living/human/proc/shapeshifter_select_shape() set name = "Select Body Shape" set category = "Abilities" @@ -101,7 +101,7 @@ var/global/list/wrapped_species_by_ref = list() visible_message("\The [src] shifts and contorts, taking the form of \a ["\improper [new_species]"]!") try_refresh_visible_overlays() -/mob/living/carbon/human/proc/shapeshifter_select_colour() +/mob/living/human/proc/shapeshifter_select_colour() set name = "Select Body Colour" set category = "Abilities" @@ -116,7 +116,7 @@ var/global/list/wrapped_species_by_ref = list() return shapeshifter_set_colour(new_skin) -/mob/living/carbon/human/proc/shapeshifter_set_colour(var/new_skin) +/mob/living/human/proc/shapeshifter_set_colour(var/new_skin) set_skin_colour(new_skin, skip_update = TRUE) var/decl/species/shapeshifter/S = species if(S.monochromatic) diff --git a/code/modules/species/species_shapeshifter_bodytypes.dm b/code/modules/species/species_shapeshifter_bodytypes.dm index 80ca137744f..3341259ea98 100644 --- a/code/modules/species/species_shapeshifter_bodytypes.dm +++ b/code/modules/species/species_shapeshifter_bodytypes.dm @@ -13,22 +13,22 @@ return DISMEMBER_METHOD_BLUNT return ..() -/decl/bodytype/shapeshifter/get_base_icon(var/mob/living/carbon/human/H, var/get_deform) +/decl/bodytype/shapeshifter/get_base_icon(var/mob/living/human/H, var/get_deform) if(!H) return ..(null, get_deform) var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"]) return S.default_bodytype.get_base_icon(H, get_deform) -/decl/bodytype/shapeshifter/get_blood_overlays(var/mob/living/carbon/human/H) +/decl/bodytype/shapeshifter/get_blood_overlays(var/mob/living/human/H) if(!H) return ..() var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"]) return S.default_bodytype.get_blood_overlays(H) -/decl/bodytype/shapeshifter/get_damage_overlays(var/mob/living/carbon/human/H) +/decl/bodytype/shapeshifter/get_damage_overlays(var/mob/living/human/H) if(!H) return ..() var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"]) return S.default_bodytype.get_damage_overlays(H) -/decl/bodytype/shapeshifter/get_husk_icon(var/mob/living/carbon/human/H) +/decl/bodytype/shapeshifter/get_husk_icon(var/mob/living/human/H) if(H) var/decl/species/S = get_species_by_key(wrapped_species_by_ref["\ref[H]"]) if(S) return S.default_bodytype.get_husk_icon(H) diff --git a/code/modules/species/station/golem.dm b/code/modules/species/station/golem.dm index 9b79b87ed00..da23b45db89 100644 --- a/code/modules/species/station/golem.dm +++ b/code/modules/species/station/golem.dm @@ -39,7 +39,7 @@ traits = list(/decl/trait/metabolically_inert = TRAIT_LEVEL_EXISTS) -/decl/species/golem/handle_post_spawn(var/mob/living/carbon/human/H) +/decl/species/golem/handle_post_spawn(var/mob/living/human/H) if(H.mind) H.mind.reset() H.mind.assigned_role = "Golem" diff --git a/code/modules/species/station/human.dm b/code/modules/species/station/human.dm index 39088dd7d9d..89657af619a 100644 --- a/code/modules/species/station/human.dm +++ b/code/modules/species/station/human.dm @@ -6,7 +6,7 @@ description = "A medium-sized creature prone to great ambition. If you are reading this, you are probably a human." hidden_from_codex = FALSE spawn_flags = SPECIES_CAN_JOIN - inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) + inherent_verbs = list(/mob/living/human/proc/tie_hair) // Add /decl/bodytype/prosthetic/basic_human to this list to allow full-body prosthetics. available_bodytypes = list( @@ -30,14 +30,14 @@ /decl/emote/exertion/synthetic/creak ) -/decl/species/human/get_root_species_name(var/mob/living/carbon/human/H) +/decl/species/human/get_root_species_name(var/mob/living/human/H) return SPECIES_HUMAN -/decl/species/human/get_ssd(var/mob/living/carbon/human/H) +/decl/species/human/get_ssd(var/mob/living/human/H) if(H.stat == CONSCIOUS) return "staring blankly, not reacting to your presence" return ..() -/decl/species/human/equip_default_fallback_uniform(var/mob/living/carbon/human/H) +/decl/species/human/equip_default_fallback_uniform(var/mob/living/human/H) if(istype(H)) H.equip_to_slot_or_del(new /obj/item/clothing/jumpsuit/grey, slot_w_uniform_str) diff --git a/code/modules/spells/aoe_turf/drain_blood.dm b/code/modules/spells/aoe_turf/drain_blood.dm index 470c18f9f3a..8ad4ea6b8a2 100644 --- a/code/modules/spells/aoe_turf/drain_blood.dm +++ b/code/modules/spells/aoe_turf/drain_blood.dm @@ -21,7 +21,7 @@ continue //Hurt target if(ishuman(L)) - var/mob/living/carbon/human/H = L + var/mob/living/human/H = L H.vessel.remove_any(10) else L.take_damage(10) @@ -35,7 +35,7 @@ //Heal self if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/amount = min(10, H.species.blood_volume - H.vessel.total_volume) if(amount > 0) H.adjust_blood(amount) diff --git a/code/modules/spells/artifacts/spellbound_servants.dm b/code/modules/spells/artifacts/spellbound_servants.dm index d0592a441a8..f98d928ed8f 100644 --- a/code/modules/spells/artifacts/spellbound_servants.dm +++ b/code/modules/spells/artifacts/spellbound_servants.dm @@ -6,7 +6,7 @@ /datum/spellbound_type/proc/spawn_servant(var/atom/a, var/mob/master, var/mob/user) set waitfor = 0 - var/mob/living/carbon/human/H = new(a) + var/mob/living/human/H = new(a) H.ckey = user.ckey H.change_appearance(APPEARANCE_GENDER|APPEARANCE_BODY|APPEARANCE_EYE_COLOR|APPEARANCE_HAIR|APPEARANCE_FACIAL_HAIR|APPEARANCE_HAIR_COLOR|APPEARANCE_FACIAL_HAIR_COLOR|APPEARANCE_SKIN) @@ -25,7 +25,7 @@ H.SetName(name_choice) H.real_name = name_choice -/datum/spellbound_type/proc/equip_servant(var/mob/living/carbon/human/H) +/datum/spellbound_type/proc/equip_servant(var/mob/living/human/H) for(var/stype in spells) var/spell/S = new stype() if(S.spell_flags & NEEDSCLOTHES) @@ -42,7 +42,7 @@ /datum/spellbound_type/proc/set_antag(var/datum/mind/M, var/mob/master) return -/datum/spellbound_type/proc/modify_servant(var/list/items, var/mob/living/carbon/human/H) +/datum/spellbound_type/proc/modify_servant(var/list/items, var/mob/living/human/H) return /datum/spellbound_type/apprentice @@ -103,18 +103,18 @@ /obj/item/clothing/pants/familiar = slot_w_uniform_str ) -/datum/spellbound_type/servant/familiar/modify_servant(var/list/equipment, var/mob/living/carbon/human/H) +/datum/spellbound_type/servant/familiar/modify_servant(var/list/equipment, var/mob/living/human/H) var/familiar_type switch(input(H,"Choose your desired animal form:", "Form") as anything in list("Space Pike", "Mouse", "Cat", "Bear")) if("Space Pike") - H.mutations |= mNobreath - H.mutations |= MUTATION_SPACERES + H.add_genetic_condition(GENE_COND_NO_BREATH) + H.add_genetic_condition(GENE_COND_SPACE_RESISTANCE) familiar_type = /mob/living/simple_animal/hostile/carp/pike if("Mouse") H.verbs |= /mob/living/proc/ventcrawl familiar_type = /mob/living/simple_animal/passive/mouse if("Cat") - H.mutations |= mRun + H.add_genetic_condition(GENE_COND_RUNNING) familiar_type = /mob/living/simple_animal/cat if("Bear") familiar_type = /mob/living/simple_animal/hostile/bear @@ -133,7 +133,7 @@ /spell/hand/charges/blood_shard ) -/datum/spellbound_type/servant/fiend/equip_servant(var/mob/living/carbon/human/H) +/datum/spellbound_type/servant/fiend/equip_servant(var/mob/living/human/H) if(H.gender == MALE) equipment = list(/obj/item/clothing/costume/fiendsuit = slot_w_uniform_str, /obj/item/clothing/shoes/dress/devilshoes = slot_shoes_str) @@ -148,11 +148,13 @@ name = "Infiltrator" desc = "A spy and a manipulator to the end, capable of hiding in plain sight and falsifying information to your heart's content." spiel = "On the surface, you are a completely normal person, but is that really all you are? People are so easy to fool, do as your Master says, and do it with style!" - spells = list(/spell/toggle_armor/infil_items, - /spell/targeted/exude_pleasantness, - /spell/targeted/genetic/blind/hysteria) + spells = list( + /spell/toggle_armor/infil_items, + /spell/targeted/exude_pleasantness, + /spell/targeted/genetic/blind/hysteria + ) -/datum/spellbound_type/servant/infiltrator/equip_servant(var/mob/living/carbon/human/H) +/datum/spellbound_type/servant/infiltrator/equip_servant(var/mob/living/human/H) if(H.gender == MALE) equipment = list(/obj/item/clothing/pants/slacks/outfit/tie = slot_w_uniform_str, /obj/item/clothing/shoes/dress/infilshoes = slot_shoes_str) @@ -181,7 +183,7 @@ /spell/targeted/revoke ) -/datum/spellbound_type/servant/overseer/equip_servant(var/mob/living/carbon/human/H) +/datum/spellbound_type/servant/overseer/equip_servant(var/mob/living/human/H) ..() H.add_aura(new /obj/aura/regenerating(H)) diff --git a/code/modules/spells/contracts.dm b/code/modules/spells/contracts.dm index 3326ddefef0..f6da03c3482 100644 --- a/code/modules/spells/contracts.dm +++ b/code/modules/spells/contracts.dm @@ -64,8 +64,7 @@ /obj/item/contract/wizard/xray/contract_effect(mob/user) ..() - if (!(MUTATION_XRAY in user.mutations)) - user.mutations.Add(MUTATION_XRAY) + if (user.add_genetic_condition(GENE_COND_XRAY)) user.set_sight(user.sight|SEE_MOBS|SEE_OBJS|SEE_TURFS) user.set_see_in_dark(8) user.set_see_invisible(SEE_INVISIBLE_LEVEL_TWO) @@ -80,15 +79,7 @@ /obj/item/contract/wizard/telepathy/contract_effect(mob/user) ..() - if (!ishuman(user)) - return 0 - var/mob/living/carbon/human/H = user - if (mRemotetalk in H.mutations) - return 0 - H.mutations.Add(mRemotetalk) - H.verbs += /mob/living/carbon/human/proc/remotesay - to_chat(H, "You expand your mind outwards.") - return 1 + return user.add_genetic_condition(GENE_COND_REMOTE_TALK) /obj/item/contract/boon name = "boon contract" diff --git a/code/modules/spells/general/invisibility.dm b/code/modules/spells/general/invisibility.dm index 0b71f9ee717..3fbab715efd 100644 --- a/code/modules/spells/general/invisibility.dm +++ b/code/modules/spells/general/invisibility.dm @@ -13,12 +13,12 @@ if(ishuman(holder)) return holder -/spell/invisibility/cast(var/mob/living/carbon/human/H, var/mob/user) +/spell/invisibility/cast(var/mob/living/human/H, var/mob/user) on = !on if(on) if(H.add_cloaking_source(src)) playsound(get_turf(H), 'sound/effects/teleport.ogg', 90, 1) - H.mutations |= MUTATION_CLUMSY + H.add_genetic_condition(GENE_COND_CLUMSY) else if(H.remove_cloaking_source(src)) playsound(get_turf(H), 'sound/effects/stealthoff.ogg', 90, 1) - H.mutations -= MUTATION_CLUMSY \ No newline at end of file + H.remove_genetic_condition(GENE_COND_CLUMSY) \ No newline at end of file diff --git a/code/modules/spells/hand/blood_shards.dm b/code/modules/spells/hand/blood_shards.dm index aed4a560236..0908ee28520 100644 --- a/code/modules/spells/hand/blood_shards.dm +++ b/code/modules/spells/hand/blood_shards.dm @@ -29,7 +29,7 @@ /obj/item/projectile/blood_shard/on_hit(var/atom/movable/target, var/blocked = 0) if(..()) if(ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target H.vessel.remove_any(30) H.visible_message("Tiny red shards burst from \the [H]'s skin!") fragmentate(get_turf(src), 30, 5, list(/obj/item/projectile/bullet/pellet/blood)) diff --git a/code/modules/spells/hand/burning_grip.dm b/code/modules/spells/hand/burning_grip.dm index 96c4b472b67..772b4e6aa9c 100644 --- a/code/modules/spells/hand/burning_grip.dm +++ b/code/modules/spells/hand/burning_grip.dm @@ -10,7 +10,7 @@ spell_delay = 120 hud_state = "wiz_burn" cast_sound = 'sound/magic/fireball.ogg' - compatible_targets = list(/mob/living/carbon/human) + compatible_targets = list(/mob/living/human) /spell/hand/burning_grip/valid_target(var/mob/living/L, var/mob/user) if(!..()) @@ -19,7 +19,7 @@ return 0 return 1 -/spell/hand/burning_grip/cast_hand(var/mob/living/carbon/human/H, var/mob/user) +/spell/hand/burning_grip/cast_hand(var/mob/living/human/H, var/mob/user) var/list/targets = list() for(var/hand_slot in H.get_held_item_slots()) targets |= hand_slot diff --git a/code/modules/spells/racial_wizard.dm b/code/modules/spells/racial_wizard.dm index f7eca973b1a..bcb00360c9c 100644 --- a/code/modules/spells/racial_wizard.dm +++ b/code/modules/spells/racial_wizard.dm @@ -18,7 +18,7 @@ if(!ishuman(user)) to_chat(user, "\The [src] can do nothing for such a simple being.") return - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/reward = potentials[H.species.get_root_species_name(H)] //we get body type because that lets us ignore subspecies. if(!reward) to_chat(user, "\The [src] does not know what to make of you.") diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm index 79a64522435..ef043dbb5ba 100644 --- a/code/modules/spells/spellbook.dm +++ b/code/modules/spells/spellbook.dm @@ -161,7 +161,7 @@ var/global/list/artefact_feedback = list( dat += "
[spellbook.book_flags & LOCKED ? "Unlock" : "Lock"] the spellbook.
" show_browser(user, dat, "window=spellbook") -/obj/item/spellbook/CanUseTopic(var/mob/living/carbon/human/H) +/obj/item/spellbook/CanUseTopic(var/mob/living/human/H) if(!istype(H)) return STATUS_CLOSE @@ -170,7 +170,7 @@ var/global/list/artefact_feedback = list( return ..() -/obj/item/spellbook/OnTopic(var/mob/living/carbon/human/user, href_list) +/obj/item/spellbook/OnTopic(var/mob/living/human/user, href_list) if(href_list["lock"] && !(spellbook.book_flags & NO_LOCKING)) if(spellbook.book_flags & LOCKED) spellbook.book_flags &= ~LOCKED diff --git a/code/modules/spells/targeted/analyze.dm b/code/modules/spells/targeted/analyze.dm index 60ac4536930..705d97399c7 100644 --- a/code/modules/spells/targeted/analyze.dm +++ b/code/modules/spells/targeted/analyze.dm @@ -9,11 +9,11 @@ range = 2 invocation_type = SpI_WHISPER invocation = "Fu Yi Fim" - compatible_mobs = list(/mob/living/carbon/human) + compatible_mobs = list(/mob/living/human) hud_state = "analyze" /spell/targeted/analyze/cast(var/list/targets, var/mob/user) for(var/a in targets) - var/mob/living/carbon/human/H = a + var/mob/living/human/H = a new /obj/effect/temporary(get_turf(a),5, 'icons/effects/effects.dmi', "repel_missiles") to_chat(user,medical_scan_results(H,1)) \ No newline at end of file diff --git a/code/modules/spells/targeted/blood_boil.dm b/code/modules/spells/targeted/blood_boil.dm index 0f9ef34b98a..4c39b3b4620 100644 --- a/code/modules/spells/targeted/blood_boil.dm +++ b/code/modules/spells/targeted/blood_boil.dm @@ -8,7 +8,7 @@ invocation_type = SpI_NONE range = 5 max_targets = 1 - compatible_mobs = list(/mob/living/carbon/human) + compatible_mobs = list(/mob/living/human) time_between_channels = 50 number_of_channels = 0 @@ -16,7 +16,7 @@ hud_state = "wiz_boilblood" /spell/targeted/blood_boil/cast(var/list/targets, var/mob/user) - var/mob/living/carbon/human/H = targets[1] + var/mob/living/human/H = targets[1] H.bodytemperature += 40 if(prob(10)) to_chat(H,"\The [user] seems to radiate an uncomfortable amount of heat your direction.") diff --git a/code/modules/spells/targeted/equip/burning_touch.dm b/code/modules/spells/targeted/equip/burning_touch.dm index ba96d731f37..fb650fa154b 100644 --- a/code/modules/spells/targeted/equip/burning_touch.dm +++ b/code/modules/spells/targeted/equip/burning_touch.dm @@ -44,7 +44,7 @@ if(!ishuman(src.loc)) qdel(src) return - var/mob/living/carbon/human/user = src.loc + var/mob/living/human/user = src.loc var/obj/item/organ/external/hand if(src == user.get_equipped_item(BP_L_HAND)) hand = GET_INTERNAL_ORGAN(user, BP_L_HAND) diff --git a/code/modules/spells/targeted/equip/holy_relic.dm b/code/modules/spells/targeted/equip/holy_relic.dm index 5ad87588bc6..7c6dadf5da2 100644 --- a/code/modules/spells/targeted/equip/holy_relic.dm +++ b/code/modules/spells/targeted/equip/holy_relic.dm @@ -14,7 +14,7 @@ duration = 25 SECONDS cooldown_min = 35 SECONDS delete_old = 0 - compatible_mobs = list(/mob/living/carbon/human) + compatible_mobs = list(/mob/living/human) hud_state = "purge1" diff --git a/code/modules/spells/targeted/equip/horsemask.dm b/code/modules/spells/targeted/equip/horsemask.dm index 0ddb8708e90..31995ba86bd 100644 --- a/code/modules/spells/targeted/equip/horsemask.dm +++ b/code/modules/spells/targeted/equip/horsemask.dm @@ -14,7 +14,7 @@ cooldown_min = 30 //30 deciseconds reduction per rank selection_type = "range" - compatible_mobs = list(/mob/living/carbon/human) + compatible_mobs = list(/mob/living/human) hud_state = "wiz_horse" cast_sound = 'sound/magic/horsehead_curse.ogg' diff --git a/code/modules/spells/targeted/equip/party_hardy.dm b/code/modules/spells/targeted/equip/party_hardy.dm index b8ae4513130..35dd93a22d0 100644 --- a/code/modules/spells/targeted/equip/party_hardy.dm +++ b/code/modules/spells/targeted/equip/party_hardy.dm @@ -16,7 +16,7 @@ hud_state = "wiz_party" - compatible_mobs = list(/mob/living/carbon/human) + compatible_mobs = list(/mob/living/human) equipped_summons = list("active hand" = /obj/item/chems/drinks/bottle/small/beer) /spell/targeted/equip_item/party_hardy/empower_spell() diff --git a/code/modules/spells/targeted/equip/seed.dm b/code/modules/spells/targeted/equip/seed.dm index 8e4358f4368..2252ec75c8c 100644 --- a/code/modules/spells/targeted/equip/seed.dm +++ b/code/modules/spells/targeted/equip/seed.dm @@ -9,7 +9,7 @@ invocation = "Ria'li akta." equipped_summons = list("active hand" = /obj/item/seeds/random) - compatible_mobs = list(/mob/living/carbon/human) + compatible_mobs = list(/mob/living/human) charge_max = 600 //1 minute cooldown_min = 200 //20 seconds diff --git a/code/modules/spells/targeted/equip/shield.dm b/code/modules/spells/targeted/equip/shield.dm index 4196c023e41..b725196ad3a 100644 --- a/code/modules/spells/targeted/equip/shield.dm +++ b/code/modules/spells/targeted/equip/shield.dm @@ -9,7 +9,7 @@ range = -1 max_targets = 1 - compatible_mobs = list(/mob/living/carbon/human) + compatible_mobs = list(/mob/living/human) level_max = list(Sp_TOTAL = 3, Sp_SPEED = 2, Sp_POWER = 1) charge_type = Sp_RECHARGE diff --git a/code/modules/spells/targeted/genetic.dm b/code/modules/spells/targeted/genetic.dm index f107fcb1048..bcc5233b9b6 100644 --- a/code/modules/spells/targeted/genetic.dm +++ b/code/modules/spells/targeted/genetic.dm @@ -6,58 +6,41 @@ code\game\dna\genes\goon_powers.dm */ /spell/targeted/genetic name = "Genetic modifier" - desc = "This spell inflicts a set of mutations and disabilities upon the target." - - var/disabilities = 0 //bits - var/list/mutations = list() //mutation strings - duration = 100 //deciseconds - + desc = "This spell inflicts a set of genetic conditions upon the target." + duration = 10 SECONDS + var/list/genetic_conditions = list() /spell/targeted/genetic/cast(list/targets) ..() for(var/mob/living/target in targets) - for(var/x in mutations) - target.mutations.Add(x) - target.disabilities |= disabilities - target.update_mutations() //update target's mutation overlays - spawn(duration) - for(var/x in mutations) - target.mutations.Remove(x) - target.disabilities &= ~disabilities - target.update_mutations() - return + for(var/x in genetic_conditions) + target.add_genetic_condition(x, duration) /spell/targeted/genetic/blind name = "Blind" desc = "This spell inflicts a target with temporary blindness. Does not require wizard garb." feedback = "BD" - disabilities = 1 school = "illusion" duration = 300 - charge_max = 300 - spell_flags = 0 invocation = "Sty Kaly." invocation_type = SpI_WHISPER message = "Your eyes cry out in pain!" level_max = list(Sp_TOTAL = 3, Sp_SPEED = 1, Sp_POWER = 3) cooldown_min = 50 - range = 7 max_targets = 0 - amt_eye_blind = 10 amt_eye_blurry = 20 - hud_state = "wiz_blind" cast_sound = 'sound/magic/blind.ogg' + genetic_conditions = list(GENE_COND_BLINDED) /spell/targeted/genetic/blind/empower_spell() if(!..()) return 0 - duration += 100 - + duration += 10 SECONDS return "[src] will now blind for a longer period of time." /spell/targeted/genetic/blind/hysteria @@ -81,12 +64,10 @@ code\game\dna\genes\goon_powers.dm spell_flags = NOFACTION invocation_type = SpI_SHOUT charge_max = 60 SECONDS - + spell_flags = 0 amt_dizziness = 0 amt_eye_blurry = 5 amt_stunned = 1 - effect_state = "electricity_constant" effect_duration = 5 - - hud_state = "wiz_starburst" \ No newline at end of file + hud_state = "wiz_starburst" diff --git a/code/modules/spells/targeted/projectile/stuncuff.dm b/code/modules/spells/targeted/projectile/stuncuff.dm index 63539562c62..52046381588 100644 --- a/code/modules/spells/targeted/projectile/stuncuff.dm +++ b/code/modules/spells/targeted/projectile/stuncuff.dm @@ -25,7 +25,7 @@ /spell/targeted/projectile/dumbfire/stuncuff/prox_cast(var/list/targets, spell_holder) for(var/mob/living/M in targets) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/obj/item/handcuffs/wizard/cuffs = new() H.equip_to_slot(cuffs, slot_handcuffed_str) H.visible_message("Beams of light form around \the [H]'s hands!") diff --git a/code/modules/spells/targeted/shatter_mind.dm b/code/modules/spells/targeted/shatter_mind.dm index 2f62902ac58..f84d6765035 100644 --- a/code/modules/spells/targeted/shatter_mind.dm +++ b/code/modules/spells/targeted/shatter_mind.dm @@ -8,7 +8,7 @@ invocation_type = SpI_NONE range = 5 max_targets = 1 - compatible_mobs = list(/mob/living/carbon/human) + compatible_mobs = list(/mob/living/human) time_between_channels = 150 number_of_channels = 0 @@ -16,7 +16,7 @@ hud_state = "wiz_statue" /spell/targeted/shatter/cast(var/list/targets, var/mob/user) - var/mob/living/carbon/human/H = targets[1] + var/mob/living/human/H = targets[1] if(prob(50)) sound_to(user, get_sfx("swing_hit")) if(prob(5)) diff --git a/code/modules/spells/targeted/subjugate.dm b/code/modules/spells/targeted/subjugate.dm index 914de088ed2..700dac35b36 100644 --- a/code/modules/spells/targeted/subjugate.dm +++ b/code/modules/spells/targeted/subjugate.dm @@ -18,7 +18,7 @@ amt_confused = 100 amt_stuttering = 100 - compatible_mobs = list(/mob/living/carbon/human) + compatible_mobs = list(/mob/living/human) hud_state = "wiz_subj" diff --git a/code/modules/spells/targeted/targeted.dm b/code/modules/spells/targeted/targeted.dm index 422c1d3e574..46e6e242b26 100644 --- a/code/modules/spells/targeted/targeted.dm +++ b/code/modules/spells/targeted/targeted.dm @@ -145,7 +145,7 @@ Targeted spells have two useful flags: INCLUDEUSER and SELECTABLE. These are exp target.take_damage(amt_dam_tox, TOX, do_update_health = FALSE) target.take_damage(amt_dam_oxy, OXY) if(ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target for(var/obj/item/organ/internal/affecting in H.get_internal_organs()) if(affecting && istype(affecting)) affecting.heal_damage(amt_organ, amt_organ) diff --git a/code/modules/spells/targeted/torment.dm b/code/modules/spells/targeted/torment.dm index 4c9f9b9a3ee..e98836699f3 100644 --- a/code/modules/spells/targeted/torment.dm +++ b/code/modules/spells/targeted/torment.dm @@ -13,7 +13,7 @@ message = "So much pain! All you can hear is screaming!" max_targets = 0 - compatible_mobs = list(/mob/living/carbon/human) + compatible_mobs = list(/mob/living/human) var/loss = 30 @@ -22,7 +22,7 @@ /spell/targeted/torment/cast(var/list/targets, var/mob/user) user.spawn_gibber() - for(var/mob/living/carbon/human/H in targets) + for(var/mob/living/human/H in targets) H.take_damage(loss, PAIN) /spell/targeted/torment/empower_spell() diff --git a/code/modules/sprite_accessories/_accessory.dm b/code/modules/sprite_accessories/_accessory.dm index 34f3802ee8a..3cbdf41587e 100644 --- a/code/modules/sprite_accessories/_accessory.dm +++ b/code/modules/sprite_accessories/_accessory.dm @@ -6,9 +6,9 @@ The process of adding in new hairstyles has been made pain-free and easy to do. Enjoy! - Doohl - Notice: This all gets automatically compiled in a list in dna2.dm, so you do not - have to define any UI values for sprite accessories manually for hair and facial - hair. Just add in new hair types and the game will naturally adapt. + Notice: This all gets automatically compiled in a list via the decl rfepository, + so you do not have to add sprite accessories manually to any lists etc. Just add + in new hair types and the game will naturally adapt. Changing icon states, icon files and names should not represent any risks to existing savefiles, but please do not change decl uids unless you are very sure diff --git a/code/modules/submaps/submap_job.dm b/code/modules/submaps/submap_job.dm index 61479dc7040..56b5121bc7f 100644 --- a/code/modules/submaps/submap_job.dm +++ b/code/modules/submaps/submap_job.dm @@ -95,7 +95,7 @@ /datum/job/submap/check_is_active(var/mob/M) . = (..() && M.faction == owner.name) -/datum/job/submap/create_cash_on_hand(var/mob/living/carbon/human/H, var/datum/money_account/M) +/datum/job/submap/create_cash_on_hand(var/mob/living/human/H, var/datum/money_account/M) . = get_total_starting_money(H) if(. > 0) var/obj/item/cash/cash = new diff --git a/code/modules/submaps/submap_join.dm b/code/modules/submaps/submap_join.dm index 997f6f89de2..67ab23971a1 100644 --- a/code/modules/submaps/submap_join.dm +++ b/code/modules/submaps/submap_join.dm @@ -65,7 +65,7 @@ if(istype(other_mob)) character = other_mob - var/mob/living/carbon/human/user_human + var/mob/living/human/user_human if(ishuman(character)) user_human = character if(job.branch && mil_branches) @@ -97,7 +97,7 @@ if(istype(ojob) && ojob.info) to_chat(character, ojob.info) - if(user_human && user_human.disabilities & NEARSIGHTED) + if(user_human && user_human.has_genetic_condition(GENE_COND_NEARSIGHTED)) var/equipped = user_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/prescription(user_human), slot_glasses_str) if(equipped) var/obj/item/clothing/glasses/G = user_human.get_equipped_item(slot_glasses_str) diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index cdf3a4de4d4..5e816a644c1 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -522,7 +522,7 @@ var/global/list/supermatter_delam_accent_sounds = list( env.merge(removed) - for(var/mob/living/carbon/human/subject in view(src, min(7, round(sqrt(power/6))))) + for(var/mob/living/human/subject in view(src, min(7, round(sqrt(power/6))))) var/obj/item/organ/internal/eyes/eyes = subject.get_organ(BP_EYES, /obj/item/organ/internal/eyes) if (!eyes) continue diff --git a/code/modules/surgery/_surgery.dm b/code/modules/surgery/_surgery.dm index 64af1cebebf..8be9dac5ef6 100644 --- a/code/modules/surgery/_surgery.dm +++ b/code/modules/surgery/_surgery.dm @@ -48,7 +48,7 @@ var/global/list/surgery_tool_exception_cache = list() /// Any additional information to add to the codex entry for this step. var/list/additional_codex_lines /// What mob type does this surgery apply to. - var/expected_mob_type = /mob/living/carbon/human + var/expected_mob_type = /mob/living/human /// Sound (or list of sounds) to play on end step. var/end_step_sound = "rustle" /// Sound (or list of sounds) to play on fail step. @@ -161,13 +161,13 @@ var/global/list/surgery_tool_exception_cache = list() if (can_infect && affected) spread_germs_to_organ(affected, user) if(ishuman(user) && prob(60)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if (blood_level) H.bloody_hands(target,2) if (blood_level > 1) H.bloody_body(target,2) if(shock_level && ishuman(target)) - var/mob/living/carbon/human/H = target + var/mob/living/human/H = target H.shock_stage = max(H.shock_stage, shock_level) // does stuff to end the step, which is normally print a message + do whatever this step changes @@ -196,7 +196,7 @@ var/global/list/surgery_tool_exception_cache = list() . += 20 if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user . -= round(H.shock_stage * 0.5) if(GET_STATUS(H, STAT_BLURRY)) . -= 20 @@ -219,7 +219,7 @@ var/global/list/surgery_tool_exception_cache = list() . -= 10 . = max(., 0) -/proc/spread_germs_to_organ(var/obj/item/organ/external/E, var/mob/living/carbon/human/user) +/proc/spread_germs_to_organ(var/obj/item/organ/external/E, var/mob/living/human/user) if(!istype(user) || !istype(E)) return var/germ_level = user.germ_level diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm index 1a5b1dc82c8..bacbcbc4dc5 100644 --- a/code/modules/vehicles/bike.dm +++ b/code/modules/vehicles/bike.dm @@ -104,7 +104,7 @@ engine.emp_act(severity) ..() -/obj/vehicle/bike/insert_cell(var/obj/item/cell/C, var/mob/living/carbon/human/H) +/obj/vehicle/bike/insert_cell(var/obj/item/cell/C, var/mob/living/human/H) return /obj/vehicle/bike/attackby(obj/item/W, mob/user) diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index e995266e03f..381667436a7 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -97,20 +97,20 @@ else icon_state = initial(icon_state) -/obj/vehicle/train/cargo/trolley/insert_cell(var/obj/item/cell/C, var/mob/living/carbon/human/H) +/obj/vehicle/train/cargo/trolley/insert_cell(var/obj/item/cell/C, var/mob/living/human/H) return -/obj/vehicle/train/cargo/engine/insert_cell(var/obj/item/cell/C, var/mob/living/carbon/human/H) +/obj/vehicle/train/cargo/engine/insert_cell(var/obj/item/cell/C, var/mob/living/human/H) ..() update_stats() -/obj/vehicle/train/cargo/engine/remove_cell(var/mob/living/carbon/human/H) +/obj/vehicle/train/cargo/engine/remove_cell(var/mob/living/human/H) ..() update_stats() /obj/vehicle/train/cargo/engine/Bump(atom/Obstacle) var/obj/machinery/door/D = Obstacle - var/mob/living/carbon/human/H = load + var/mob/living/human/H = load if(istype(D) && istype(H)) D.Bumped(H) //a little hacky, but hey, it works, and respects access rights @@ -164,7 +164,7 @@ /obj/vehicle/train/cargo/engine/crossed_mob(var/mob/living/victim) ..() if(is_train_head() && ishuman(load)) - var/mob/living/carbon/human/D = load + var/mob/living/human/D = load to_chat(D, "You ran over \the [victim]!") visible_message("\The [src] ran over \the [victim]!") attack_log += text("\[[time_stamp()]\] ran over [victim.name] ([victim.ckey]), driven by [D.name] ([D.ckey])") diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 644af96f2d4..7e3226f3c8d 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -221,7 +221,7 @@ turn_on() return -/obj/vehicle/proc/insert_cell(var/obj/item/cell/C, var/mob/living/carbon/human/H) +/obj/vehicle/proc/insert_cell(var/obj/item/cell/C, var/mob/living/human/H) if(cell) return if(!istype(C)) @@ -232,7 +232,7 @@ powercheck() to_chat(usr, "You install [C] in [src].") -/obj/vehicle/proc/remove_cell(var/mob/living/carbon/human/H) +/obj/vehicle/proc/remove_cell(var/mob/living/human/H) if(!cell) return diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm index 163f4cd3114..e044418f292 100644 --- a/code/modules/ventcrawl/ventcrawl.dm +++ b/code/modules/ventcrawl/ventcrawl.dm @@ -38,7 +38,7 @@ var/global/list/ventcrawl_machinery = list( return TRUE return (carried_item in get_internal_organs()) -/mob/living/carbon/human/is_allowed_vent_crawl_item(var/obj/item/carried_item) +/mob/living/human/is_allowed_vent_crawl_item(var/obj/item/carried_item) var/obj/item/organ/internal/stomach = GET_INTERNAL_ORGAN(src, BP_STOMACH) if(stomach && (carried_item in stomach.contents)) return TRUE diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm index 905e551641a..95c7419c963 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact.dm @@ -12,12 +12,14 @@ /obj/structure/artifact/Initialize() . = ..() - var/effecttype = pick(subtypesof(/datum/artifact_effect)) - my_effect = new effecttype(src) - - if(prob(75)) - effecttype = pick(subtypesof(/datum/artifact_effect)) - secondary_effect = new effecttype(src) + if(!ispath(my_effect)) + my_effect = pick(subtypesof(/datum/artifact_effect)) + my_effect = new my_effect(src) + + if(prob(75) && !ispath(secondary_effect)) + secondary_effect = pick(subtypesof(/datum/artifact_effect)) + if(ispath(secondary_effect)) + secondary_effect = new secondary_effect(src) if(prob(75)) secondary_effect.ToggleActivate(0) @@ -136,3 +138,7 @@ ..() if(!QDELETED(src) && fluids?.total_volume) check_triggers(/datum/artifact_trigger/proc/on_fluid_act, fluids) + +// Premade subtypes for mapping or testing. +/obj/structure/artifact/dnascramble + my_effect = /datum/artifact_effect/dnaswitch diff --git a/code/modules/xenoarcheaology/artifacts/effects/_effect.dm b/code/modules/xenoarcheaology/artifacts/effects/_effect.dm index 0f987bdcaf4..6d441a98c4c 100644 --- a/code/modules/xenoarcheaology/artifacts/effects/_effect.dm +++ b/code/modules/xenoarcheaology/artifacts/effects/_effect.dm @@ -107,7 +107,7 @@ . += " Activation index involves [trigger]." //returns 0..1, with 1 being no protection and 0 being fully protected -/proc/GetAnomalySusceptibility(var/mob/living/carbon/human/H) +/proc/GetAnomalySusceptibility(var/mob/living/human/H) if(!istype(H)) return 1 diff --git a/code/modules/xenoarcheaology/artifacts/effects/badfeeling.dm b/code/modules/xenoarcheaology/artifacts/effects/badfeeling.dm index 58c8b2283b1..02f4612a86d 100644 --- a/code/modules/xenoarcheaology/artifacts/effects/badfeeling.dm +++ b/code/modules/xenoarcheaology/artifacts/effects/badfeeling.dm @@ -33,18 +33,18 @@ /datum/artifact_effect/badfeeling/DoEffectAura() if(holder) var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(effect_range,T)) + for (var/mob/living/human/H in range(effect_range,T)) affect_human(H, 5, 10) return 1 /datum/artifact_effect/badfeeling/DoEffectPulse() if(holder) var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(effect_range,T)) + for (var/mob/living/human/H in range(effect_range,T)) affect_human(H, 50, 50) return 1 -/datum/artifact_effect/badfeeling/proc/affect_human(mob/living/carbon/human/H, message_prob, dizziness_prob) +/datum/artifact_effect/badfeeling/proc/affect_human(mob/living/human/H, message_prob, dizziness_prob) if(H.stat) return if(prob(message_prob)) diff --git a/code/modules/xenoarcheaology/artifacts/effects/dnaswitch.dm b/code/modules/xenoarcheaology/artifacts/effects/dnaswitch.dm index 7eb65adf44c..4f4fa21b087 100644 --- a/code/modules/xenoarcheaology/artifacts/effects/dnaswitch.dm +++ b/code/modules/xenoarcheaology/artifacts/effects/dnaswitch.dm @@ -1,4 +1,3 @@ -//todo /datum/artifact_effect/dnaswitch name = "dnaswitch" origin_type = EFFECT_ORGANIC @@ -28,24 +27,35 @@ /datum/artifact_effect/dnaswitch/DoEffectAura() if(holder) var/turf/T = get_turf(holder) - for(var/mob/living/carbon/human/H in range(effect_range,T)) + for(var/mob/living/human/H in range(effect_range,T)) mess_dna(H, 100, 50, 30) return 1 /datum/artifact_effect/dnaswitch/DoEffectPulse() if(holder) var/turf/T = get_turf(holder) - for(var/mob/living/carbon/human/H in range(effect_range, T)) + for(var/mob/living/human/H in range(effect_range, T)) mess_dna(H, 25, 75, 75) return 1 -/datum/artifact_effect/dnaswitch/proc/mess_dna(mob/living/carbon/human/H, scramble_prob, UI_scramble_prob, message_prob) +// Swapped to radiation pending readding of mutations. +/datum/artifact_effect/dnaswitch/proc/mess_dna(mob/living/human/H, scramble_prob, UI_scramble_prob, message_prob) var/weakness = GetAnomalySusceptibility(H) - if(prob(weakness * 100)) + if(prob(weakness * 100) && H.has_genetic_information()) if(prob(message_prob)) to_chat(H, "[pick(feels)]") - if(scramble_prob) + if(prob(scramble_prob) ) if(prob(UI_scramble_prob)) - scramble(1, H, weakness * severity) - else - scramble(0, H, weakness * severity) \ No newline at end of file + H.set_unique_enzymes(num2text(random_id(/mob, 1000000, 9999999))) + var/gene_scramble_prob = weakness * severity + if(prob(gene_scramble_prob)) + H.randomize_gender() + if(prob(gene_scramble_prob)) + H.randomize_skin_tone() + if(prob(gene_scramble_prob)) + H.randomize_skin_color() + if(prob(gene_scramble_prob)) + H.randomize_eye_color() + if(prob(gene_scramble_prob)) + var/decl/genetic_condition/condition = pick(decls_repository.get_decls_of_type_unassociated(/decl/genetic_condition)) + H.add_genetic_condition(condition.type) diff --git a/code/modules/xenoarcheaology/artifacts/effects/goodfeeling.dm b/code/modules/xenoarcheaology/artifacts/effects/goodfeeling.dm index 165e415697a..e5d88d10a30 100644 --- a/code/modules/xenoarcheaology/artifacts/effects/goodfeeling.dm +++ b/code/modules/xenoarcheaology/artifacts/effects/goodfeeling.dm @@ -31,18 +31,18 @@ /datum/artifact_effect/goodfeeling/DoEffectAura() if(holder) var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(effect_range,T)) + for (var/mob/living/human/H in range(effect_range,T)) affect_human(H, 5, 5) return 1 /datum/artifact_effect/goodfeeling/DoEffectPulse() if(holder) var/turf/T = get_turf(holder) - for (var/mob/living/carbon/human/H in range(effect_range,T)) + for (var/mob/living/human/H in range(effect_range,T)) affect_human(H, 50, 50) return 1 -/datum/artifact_effect/goodfeeling/proc/affect_human(mob/living/carbon/human/H, message_prob, dizziness_prob) +/datum/artifact_effect/goodfeeling/proc/affect_human(mob/living/human/H, message_prob, dizziness_prob) if(H.stat) return if(prob(message_prob)) diff --git a/code/modules/xenoarcheaology/artifacts/effects/heal.dm b/code/modules/xenoarcheaology/artifacts/effects/heal.dm index 63b50ee4300..73bf53bc022 100644 --- a/code/modules/xenoarcheaology/artifacts/effects/heal.dm +++ b/code/modules/xenoarcheaology/artifacts/effects/heal.dm @@ -33,5 +33,5 @@ M.bodytemperature = M.get_species()?.body_temperature || initial(M.bodytemperature) M.adjust_nutrition(50 * weakness) if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M H.regenerate_blood(5 * weakness) diff --git a/code/modules/xenoarcheaology/artifacts/effects/sleepy.dm b/code/modules/xenoarcheaology/artifacts/effects/sleepy.dm index b2a9e97ba48..6bb1478a0ba 100644 --- a/code/modules/xenoarcheaology/artifacts/effects/sleepy.dm +++ b/code/modules/xenoarcheaology/artifacts/effects/sleepy.dm @@ -20,18 +20,18 @@ /datum/artifact_effect/sleepy/DoEffectAura() if(holder) var/turf/T = get_turf(holder) - for(var/mob/living/carbon/human/H in range(effect_range,T)) + for(var/mob/living/human/H in range(effect_range,T)) sleepify(H, 2, 25, 10) return 1 /datum/artifact_effect/sleepy/DoEffectPulse() if(holder) var/turf/T = get_turf(holder) - for(var/mob/living/carbon/human/H in range(effect_range, T)) + for(var/mob/living/human/H in range(effect_range, T)) sleepify(H, rand(5,15), 50, 50) return 1 -/datum/artifact_effect/sleepy/proc/sleepify(mob/living/carbon/human/H, speed, limit, message_prob) +/datum/artifact_effect/sleepy/proc/sleepify(mob/living/human/H, speed, limit, message_prob) var/weakness = GetAnomalySusceptibility(H) if(prob(weakness * 100)) if(H.isSynthetic()) diff --git a/code/modules/xenoarcheaology/artifacts/triggers/touch.dm b/code/modules/xenoarcheaology/artifacts/triggers/touch.dm index 8be77b1b5bb..7eabff44e95 100644 --- a/code/modules/xenoarcheaology/artifacts/triggers/touch.dm +++ b/code/modules/xenoarcheaology/artifacts/triggers/touch.dm @@ -1,7 +1,7 @@ /datum/artifact_trigger/touch name = "touch" -/datum/artifact_trigger/touch/proc/can_touch(mob/living/carbon/human/H, bodypart) +/datum/artifact_trigger/touch/proc/can_touch(mob/living/human/H, bodypart) return TRUE /datum/artifact_trigger/touch/on_touch(mob/living/M) @@ -14,7 +14,7 @@ /datum/artifact_trigger/touch/organic name = "organic touch" -/datum/artifact_trigger/touch/organic/can_touch(mob/living/carbon/human/H, bodypart) +/datum/artifact_trigger/touch/organic/can_touch(mob/living/human/H, bodypart) if(!istype(H)) return FALSE if(H.get_covering_equipped_item_by_zone(bodypart)) @@ -31,7 +31,7 @@ if(issilicon(L)) return TRUE if(ishuman(L)) - var/mob/living/carbon/human/H = L + var/mob/living/human/H = L if(H.isSynthetic()) return TRUE var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(H, bodypart) diff --git a/code/modules/xenoarcheaology/boulder.dm b/code/modules/xenoarcheaology/boulder.dm index d84fcba62fd..31d5602461e 100644 --- a/code/modules/xenoarcheaology/boulder.dm +++ b/code/modules/xenoarcheaology/boulder.dm @@ -84,7 +84,7 @@ /obj/structure/boulder/Bumped(AM) . = ..() if(ishuman(AM)) - var/mob/living/carbon/human/H = AM + var/mob/living/human/H = AM for(var/obj/item/P in H.get_inactive_held_items()) if(IS_PICK(P)) attackby(P, H) diff --git a/code/modules/xenoarcheaology/finds/find_types/statuette.dm b/code/modules/xenoarcheaology/finds/find_types/statuette.dm index c2f6a87dcef..0ba51852ddf 100644 --- a/code/modules/xenoarcheaology/finds/find_types/statuette.dm +++ b/code/modules/xenoarcheaology/finds/find_types/statuette.dm @@ -39,7 +39,7 @@ /obj/item/vampiric/Process() //see if we've identified anyone nearby if(world.time - last_bloodcall > bloodcall_interval && nearby_mobs.len) - var/mob/living/carbon/human/M = pop(nearby_mobs) + var/mob/living/human/M = pop(nearby_mobs) if(M in view(7,src) && M.current_health > 20) if(prob(50)) bloodcall(M) @@ -99,7 +99,7 @@ if(world.time - last_bloodcall >= bloodcall_interval && (M in view(7, src))) bloodcall(M) -/obj/item/vampiric/proc/bloodcall(var/mob/living/carbon/human/M) +/obj/item/vampiric/proc/bloodcall(var/mob/living/human/M) last_bloodcall = world.time if(istype(M)) playsound(src.loc, pick('sound/hallucinations/wail.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/far_noise.ogg'), 50, 1, -3) diff --git a/code/procs/announce.dm b/code/procs/announce.dm index af8676554a7..0134ca4a1db 100644 --- a/code/procs/announce.dm +++ b/code/procs/announce.dm @@ -130,7 +130,7 @@ var/global/datum/announcement/minor/minor_announcement = new(new_sound = 'sound/ /proc/ion_storm_announcement(list/affecting_z) command_announcement.Announce("It has come to our attention that the [station_name()] passed through an ion storm. Please monitor all electronic equipment for malfunctions.", "Anomaly Alert", zlevels = affecting_z) -/proc/AnnounceArrival(var/mob/living/carbon/human/character, var/datum/job/job, var/join_message) +/proc/AnnounceArrival(var/mob/living/human/character, var/datum/job/job, var/join_message) if(!istype(job) || !job.announced) return if (GAME_STATE != RUNLEVEL_GAME) diff --git a/code/procs/hud.dm b/code/procs/hud.dm index 760d1b2fb37..5f4c5580e92 100644 --- a/code/procs/hud.dm +++ b/code/procs/hud.dm @@ -13,7 +13,7 @@ the HUD updates properly! */ if(!can_process_hud(M)) return var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, global.med_hud_users) - for(var/mob/living/carbon/human/patient in P.Mob.in_view(P.Turf)) + for(var/mob/living/human/patient in P.Mob.in_view(P.Turf)) if(patient.is_invisible_to(P.Mob)) continue @@ -38,7 +38,7 @@ the HUD updates properly! */ if(!can_process_hud(M)) return var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, global.sec_hud_users) - for(var/mob/living/carbon/human/perp in P.Mob.in_view(P.Turf)) + for(var/mob/living/human/perp in P.Mob.in_view(P.Turf)) if(perp.is_invisible_to(P.Mob)) continue @@ -95,7 +95,7 @@ the HUD updates properly! */ /mob/observer/eye/in_view(var/turf/T) var/list/viewed = new - for(var/mob/living/carbon/human/H in SSmobs.mob_list) + for(var/mob/living/human/H in SSmobs.mob_list) if(get_dist(H, T) <= 7) viewed += H return viewed diff --git a/code/unit_tests/equipment_tests.dm b/code/unit_tests/equipment_tests.dm index 95032a01c88..25146ab9251 100644 --- a/code/unit_tests/equipment_tests.dm +++ b/code/unit_tests/equipment_tests.dm @@ -1,13 +1,13 @@ /datum/unit_test/vision_glasses name = "EQUIPMENT: Vision Template" template = /datum/unit_test/vision_glasses - var/mob/living/carbon/human/H = null + var/mob/living/human/H = null var/expectation = SEE_INVISIBLE_NOLIGHTING var/glasses_type = null async = 1 /datum/unit_test/vision_glasses/start_test() - var/list/test = create_test_mob_with_mind(get_safe_turf(), /mob/living/carbon/human) + var/list/test = create_test_mob_with_mind(get_safe_turf(), /mob/living/human) if(isnull(test)) fail("Check Runtimed in Mob creation") @@ -129,7 +129,7 @@ "[slot_wear_suit_str]" = /obj/item/clothing/suit/chickensuit ) -/datum/unit_test/equipment_slot_test/proc/check_slot_equip_successful(mob/living/carbon/human/subject, obj/item/item, which_slot, list/failure_list) +/datum/unit_test/equipment_slot_test/proc/check_slot_equip_successful(mob/living/human/subject, obj/item/item, which_slot, list/failure_list) created_atoms |= item subject.equip_to_slot_if_possible(item, which_slot) if(!subject.isEquipped(item)) @@ -138,13 +138,13 @@ var/equipped_location = subject.get_equipped_slot_for_item(item) failure_list += "[item] was expected to be equipped to [which_slot] but get_equipped_slot_for_item returned [isnull(equipped_location) ? "NULL" : equipped_location]." -/datum/unit_test/equipment_slot_test/proc/check_slot_unequip_successful(mob/living/carbon/human/subject, obj/item/item, which_slot, list/failure_list) +/datum/unit_test/equipment_slot_test/proc/check_slot_unequip_successful(mob/living/human/subject, obj/item/item, which_slot, list/failure_list) created_atoms |= item subject.try_unequip(item) if(subject.isEquipped(item)) failure_list += "[item] remained equipped to [subject.get_equipped_slot_for_item(item)] after unEquip was called." -/datum/unit_test/equipment_slot_test/proc/check_slot_equip_failure(mob/living/carbon/human/subject, obj/item/item, which_slot, list/failure_list) +/datum/unit_test/equipment_slot_test/proc/check_slot_equip_failure(mob/living/human/subject, obj/item/item, which_slot, list/failure_list) created_atoms |= item subject.equip_to_slot_if_possible(item, which_slot) if(subject.isEquipped(item)) @@ -155,7 +155,7 @@ failure_list += "[item] was equipped to [equipped_location] despite failing isEquipped (should not be equipped)." /datum/unit_test/equipment_slot_test/start_test() - var/mob/living/carbon/human/subject = new(get_safe_turf(), SPECIES_HUMAN) // force human so default map species doesn't mess with anything + var/mob/living/human/subject = new(get_safe_turf(), SPECIES_HUMAN) // force human so default map species doesn't mess with anything created_atoms |= subject var/list/failures = list() diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm index c1d7651da27..5867dd2ca90 100644 --- a/code/unit_tests/mob_tests.dm +++ b/code/unit_tests/mob_tests.dm @@ -25,7 +25,7 @@ var/list/bodytype_pairings = get_bodytype_species_pairs() for(var/decl/bodytype/bodytype in bodytype_pairings) var/decl/species/species = bodytype_pairings[bodytype] - var/mob/living/carbon/human/test_subject = new(null, species.name, null, bodytype) + var/mob/living/human/test_subject = new(null, species.name, null, bodytype) if(test_subject.need_breathe()) test_subject.apply_effect(20, STUN, 0) var/obj/item/organ/internal/lungs/L = test_subject.get_organ(test_subject.get_bodytype().breathing_organ, /obj/item/organ/internal/lungs) @@ -36,13 +36,13 @@ /datum/unit_test/human_breath/check_result() for(var/i in test_subjects) - var/mob/living/carbon/human/test_subject = test_subjects[i][1] + var/mob/living/human/test_subject = test_subjects[i][1] if(test_subject.life_tick < 10) // Finish Condition return 0 // Return 0 to try again later. var/failcount = 0 for(var/i in test_subjects) - var/mob/living/carbon/human/test_subject = test_subjects[i][1] + var/mob/living/human/test_subject = test_subjects[i][1] var/ending_oxyloss = damage_check(test_subject, OXY) var/starting_oxyloss = test_subjects[i][2] if(starting_oxyloss >= ending_oxyloss) @@ -60,7 +60,7 @@ var/global/default_mobloc = null -/proc/create_test_mob_with_mind(var/turf/mobloc = null, var/mobtype = /mob/living/carbon/human) +/proc/create_test_mob_with_mind(var/turf/mobloc = null, var/mobtype = /mob/living/human) var/list/test_result = list("result" = FAILURE, "msg" = "", "mobref" = null) if(isnull(mobloc)) @@ -77,7 +77,7 @@ var/global/default_mobloc = null test_result["msg"] = "Unable to find a location to create test mob" return test_result - var/mob/living/carbon/human/H = new mobtype(mobloc) + var/mob/living/human/H = new mobtype(mobloc) H.mind_initialize("TestKey[rand(0,10000)]") @@ -108,7 +108,7 @@ var/global/default_mobloc = null loss = M.get_damage(PAIN) if(!loss && ishuman(M)) - var/mob/living/carbon/human/H = M // Synthetics have robot limbs which don't report damage to get_damage(XXX) + var/mob/living/human/H = M // Synthetics have robot limbs which don't report damage to get_damage(XXX) if(H.isSynthetic()) // So we have to hard code this check or create a different one for them. return H.species.total_health - H.current_health return loss @@ -131,7 +131,7 @@ var/global/default_mobloc = null name = "MOB: Template for mob damage" template = /datum/unit_test/mob_damage var/damagetype = BRUTE - var/mob_type = /mob/living/carbon/human + var/mob_type = /mob/living/human var/expected_vulnerability = STANDARD var/damage_location = BP_CHEST @@ -147,7 +147,7 @@ var/global/default_mobloc = null fail(test["msg"]) return 0 - var/mob/living/carbon/human/H = locate(test["mobref"]) + var/mob/living/human/H = locate(test["mobref"]) if(isnull(H)) fail("Test unable to set test mob from reference") @@ -289,13 +289,13 @@ var/global/default_mobloc = null /datum/unit_test/mob_nullspace/start_test() // Simply create one of each species type in nullspace for(var/species_name in get_all_species()) - var/test_subject = new/mob/living/carbon/human(null, species_name) + var/test_subject = new/mob/living/human(null, species_name) test_subjects += test_subject return TRUE /datum/unit_test/mob_nullspace/check_result() for(var/ts in test_subjects) - var/mob/living/carbon/human/H = ts + var/mob/living/human/H = ts if(H.life_tick < 10) return FALSE @@ -310,7 +310,7 @@ var/global/default_mobloc = null /datum/unit_test/mob_organ_size/start_test() var/failed = FALSE for(var/species_name in get_all_species()) - var/mob/living/carbon/human/H = new(null, species_name) + var/mob/living/human/H = new(null, species_name) for(var/obj/item/organ/external/E in H.get_external_organs()) for(var/obj/item/organ/internal/I in E.internal_organs) if(I.w_class > E.cavity_max_w_class) diff --git a/code/unit_tests/observation_tests.dm b/code/unit_tests/observation_tests.dm index aea6e3f5489..b9174d26fe8 100644 --- a/code/unit_tests/observation_tests.dm +++ b/code/unit_tests/observation_tests.dm @@ -112,7 +112,7 @@ /datum/unit_test/observation/moved_observer_shall_register_on_follow/conduct_test() var/turf/T = get_safe_turf() - var/mob/living/carbon/human/H = get_named_instance(/mob/living/carbon/human, T, global.using_map.default_species) + var/mob/living/human/H = get_named_instance(/mob/living/human, T, global.using_map.default_species) var/mob/observer/ghost/O = get_named_instance(/mob/observer/ghost, T, "Ghost") O.ManualFollow(H) @@ -130,7 +130,7 @@ /datum/unit_test/observation/moved_observer_shall_unregister_on_nofollow/conduct_test() var/turf/T = get_safe_turf() - var/mob/living/carbon/human/H = get_named_instance(/mob/living/carbon/human, T, global.using_map.default_species) + var/mob/living/human/H = get_named_instance(/mob/living/human, T, global.using_map.default_species) var/mob/observer/ghost/O = get_named_instance(/mob/observer/ghost, T, "Ghost") O.ManualFollow(H) @@ -149,7 +149,7 @@ /datum/unit_test/observation/moved_shall_not_register_on_enter_without_listeners/conduct_test() var/turf/T = get_safe_turf() - var/mob/living/carbon/human/H = get_named_instance(/mob/living/carbon/human, T, global.using_map.default_species) + var/mob/living/human/H = get_named_instance(/mob/living/human, T, global.using_map.default_species) qdel(H.virtual_mob) H.virtual_mob = null @@ -170,7 +170,7 @@ /datum/unit_test/observation/moved_shall_register_recursively_on_new_listener/conduct_test() var/turf/T = get_safe_turf() - var/mob/living/carbon/human/H = get_named_instance(/mob/living/carbon/human, T, global.using_map.default_species) + var/mob/living/human/H = get_named_instance(/mob/living/human, T, global.using_map.default_species) var/obj/structure/closet/C = get_named_instance(/obj/structure/closet, T, "Closet") var/mob/observer/ghost/O = get_named_instance(/mob/observer/ghost, T, "Ghost") @@ -193,7 +193,7 @@ /datum/unit_test/observation/moved_shall_register_recursively_with_existing_listener/conduct_test() var/turf/T = get_safe_turf() - var/mob/living/carbon/human/H = get_named_instance(/mob/living/carbon/human, T, global.using_map.default_species) + var/mob/living/human/H = get_named_instance(/mob/living/human, T, global.using_map.default_species) var/obj/structure/closet/C = get_named_instance(/obj/structure/closet, T, "Closet") var/mob/observer/ghost/O = get_named_instance(/mob/observer/ghost, T, "Ghost") diff --git a/code/unit_tests/organ_tests.dm b/code/unit_tests/organ_tests.dm index ee6aaf2755d..86d3406a5f3 100644 --- a/code/unit_tests/organ_tests.dm +++ b/code/unit_tests/organ_tests.dm @@ -22,7 +22,7 @@ /datum/unit_test/bodytype_organ_creation name = "ORGAN: Bodytype Organs are Created Correctly" -/datum/unit_test/bodytype_organ_creation/proc/check_internal_organs(var/mob/living/carbon/human/H, var/decl/bodytype/bodytype) +/datum/unit_test/bodytype_organ_creation/proc/check_internal_organs(var/mob/living/human/H, var/decl/bodytype/bodytype) . = 1 for(var/organ_tag in bodytype.has_organ) var/obj/item/organ/I = GET_INTERNAL_ORGAN(H, organ_tag) @@ -46,7 +46,7 @@ fail("[bodytype.name] internal organ has invalid absolute_max_damage value ([I.absolute_max_damage]).") . = 0 -/datum/unit_test/bodytype_organ_creation/proc/check_external_organs(var/mob/living/carbon/human/H, var/decl/bodytype/bodytype) +/datum/unit_test/bodytype_organ_creation/proc/check_external_organs(var/mob/living/human/H, var/decl/bodytype/bodytype) . = 1 for(var/organ_tag in bodytype.has_limbs) var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(H, organ_tag) @@ -71,7 +71,7 @@ fail("[bodytype.name] external organ has invalid absolute_max_damage value ([E.absolute_max_damage]).") . = 0 -/datum/unit_test/bodytype_organ_creation/proc/check_organ_parents(var/mob/living/carbon/human/H, var/decl/bodytype/bodytype) +/datum/unit_test/bodytype_organ_creation/proc/check_organ_parents(var/mob/living/human/H, var/decl/bodytype/bodytype) . = 1 var/list/external_organs = H.get_external_organs() for(var/obj/item/organ/external/E in external_organs) @@ -119,7 +119,7 @@ var/list/bodytype_pairings = get_bodytype_species_pairs() for(var/decl/bodytype/bodytype in bodytype_pairings) var/decl/species/species = bodytype_pairings[bodytype] - var/mob/living/carbon/human/test_subject = new(null, species.name, null, bodytype) + var/mob/living/human/test_subject = new(null, species.name, null, bodytype) var/fail = 0 fail |= !check_internal_organs(test_subject, bodytype) @@ -138,7 +138,7 @@ /datum/unit_test/bodytype_organ_lists_update name = "ORGAN: Species Mob Organ Lists Update when Organs are Removed and Replaced." -/datum/unit_test/bodytype_organ_lists_update/proc/check_internal_organ_present(var/mob/living/carbon/human/H, var/obj/item/organ/internal/I) +/datum/unit_test/bodytype_organ_lists_update/proc/check_internal_organ_present(var/mob/living/human/H, var/obj/item/organ/internal/I) var/decl/bodytype/root_bodytype = H.get_bodytype() if(!(I in H.get_internal_organs())) fail("[root_bodytype.name] internal organ [I] not in internal_organs.") @@ -156,7 +156,7 @@ return 0 return 1 -/datum/unit_test/bodytype_organ_lists_update/proc/check_internal_organ_removed(var/mob/living/carbon/human/H, var/obj/item/organ/internal/I, var/obj/item/organ/external/old_parent) +/datum/unit_test/bodytype_organ_lists_update/proc/check_internal_organ_removed(var/mob/living/human/H, var/obj/item/organ/internal/I, var/obj/item/organ/external/old_parent) var/decl/bodytype/root_bodytype = H.get_bodytype() if(I in H.get_internal_organs()) fail("[root_bodytype.name] internal organ [I] was not removed from internal_organs.") @@ -170,7 +170,7 @@ return 0 return 1 -/datum/unit_test/bodytype_organ_lists_update/proc/check_external_organ_present(var/mob/living/carbon/human/H, var/obj/item/organ/external/E) +/datum/unit_test/bodytype_organ_lists_update/proc/check_external_organ_present(var/mob/living/human/H, var/obj/item/organ/external/E) var/decl/bodytype/root_bodytype = H.get_bodytype() if(!(E in H.get_external_organs())) fail("[root_bodytype.name] external organ [E] not in organs.") @@ -192,7 +192,7 @@ return 0 return 1 -/datum/unit_test/bodytype_organ_lists_update/proc/check_external_organ_removed(var/mob/living/carbon/human/H, var/obj/item/organ/external/E, var/obj/item/organ/external/old_parent = null) +/datum/unit_test/bodytype_organ_lists_update/proc/check_external_organ_removed(var/mob/living/human/H, var/obj/item/organ/external/E, var/obj/item/organ/external/old_parent = null) var/decl/bodytype/root_bodytype = H.get_bodytype() if(E in H.get_external_organs()) fail("[root_bodytype.name] external organ [E] was not removed from organs.") @@ -207,7 +207,7 @@ return 0 return 1 -/datum/unit_test/bodytype_organ_lists_update/proc/test_internal_organ(var/mob/living/carbon/human/H, var/obj/item/organ/internal/I) +/datum/unit_test/bodytype_organ_lists_update/proc/test_internal_organ(var/mob/living/human/H, var/obj/item/organ/internal/I) var/decl/bodytype/root_bodytype = H.get_bodytype() if(!check_internal_organ_present(H, I)) fail("[root_bodytype.name] internal organ [I] failed initial presence check.") @@ -227,7 +227,7 @@ return 1 -/datum/unit_test/bodytype_organ_lists_update/proc/test_external_organ(var/mob/living/carbon/human/H, var/obj/item/organ/external/E) +/datum/unit_test/bodytype_organ_lists_update/proc/test_external_organ(var/mob/living/human/H, var/obj/item/organ/external/E) var/decl/bodytype/root_bodytype = H.get_bodytype() if(!check_external_organ_present(H, E)) fail("[root_bodytype.name] external organ [E] failed initial presence check.") @@ -252,7 +252,7 @@ var/list/bodytype_pairings = get_bodytype_species_pairs() for(var/decl/bodytype/bodytype in bodytype_pairings) var/decl/species/species = bodytype_pairings[bodytype] - var/mob/living/carbon/human/test_subject = new(null, species.name, null, bodytype) + var/mob/living/human/test_subject = new(null, species.name, null, bodytype) for(var/O in test_subject.get_internal_organs()) if(!test_internal_organ(test_subject, O)) diff --git a/html/changelog.html b/html/changelog.html index 080d60a6ce2..e2f23aa92d6 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,18 @@ -->
+

20 June 2024

+

MistakeNot4892 updated:

+
    +
  • You can now dip things like stacks of skin into barrels of water, wells or rivers.
  • +
+ +

19 June 2024

+

Penelope Haze updated:

+
    +
  • Ammo magazines will not initialize their contents until first interacted with, which makes startup faster but could cause bugs. Report any issues on the issue tracker!
  • +
+

16 June 2024

Penelope Haze updated:

    @@ -151,14 +163,6 @@

    MistakeNot4892 updated:

  • Running to exhaustion will now cause a mood stressor.
  • Sleeping in a bed for thirty seconds will remove exhaustion and add a well rested mood boost.
- -

18 April 2024

-

MistakeNot4892 updated:

-
    -
  • Closets can now be locked with a physical lock.
  • -
  • Vox must now pick between pressure resistance and speed using the Toggle Pressure Seal verb.
  • -
  • Lots of cooking changes! Refer to PR #3704 on the Nebula GitHub for specific details.
  • -
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 5bfcbb5f909..e7f89d1c8cc 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14766,3 +14766,12 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2024-06-16: Penelope Haze: - tweak: Meteor is now a votable mode on Exodus. Oh no!! +2024-06-19: + Penelope Haze: + - experiment: Ammo magazines will not initialize their contents until first interacted + with, which makes startup faster but could cause bugs. Report any issues on + the issue tracker! +2024-06-20: + MistakeNot4892: + - tweak: You can now dip things like stacks of skin into barrels of water, wells + or rivers. diff --git a/icons/clothing/accessories/jewelry/prayer_beads.dmi b/icons/clothing/accessories/jewelry/prayer_beads.dmi new file mode 100644 index 00000000000..e36f6d8ac70 Binary files /dev/null and b/icons/clothing/accessories/jewelry/prayer_beads.dmi differ diff --git a/icons/clothing/mask/ninja.dmi b/icons/clothing/mask/camera_miu.dmi similarity index 100% rename from icons/clothing/mask/ninja.dmi rename to icons/clothing/mask/camera_miu.dmi diff --git a/icons/clothing/suits/mantle.dmi b/icons/clothing/suits/mantle.dmi new file mode 100644 index 00000000000..4800dc50bfa Binary files /dev/null and b/icons/clothing/suits/mantle.dmi differ diff --git a/icons/effects/genetics.dmi b/icons/effects/genetics.dmi index 8e31fea9613..8ec52b23f58 100644 Binary files a/icons/effects/genetics.dmi and b/icons/effects/genetics.dmi differ diff --git a/icons/mob/human_races/species/human/skeleton.dmi b/icons/mob/human_races/species/human/skeleton.dmi index 1cedb1196f0..271b174b812 100644 Binary files a/icons/mob/human_races/species/human/skeleton.dmi and b/icons/mob/human_races/species/human/skeleton.dmi differ diff --git a/icons/obj/structures/log_wall_frame.dmi b/icons/obj/structures/log_wall_frame.dmi new file mode 100644 index 00000000000..1fdbdb10536 Binary files /dev/null and b/icons/obj/structures/log_wall_frame.dmi differ diff --git a/maps/antag_spawn/heist/heist.dm b/maps/antag_spawn/heist/heist.dm deleted file mode 100644 index 0405013a004..00000000000 --- a/maps/antag_spawn/heist/heist.dm +++ /dev/null @@ -1,78 +0,0 @@ -#include "heist_antag.dm" -#include "heist_outfit.dm" - -/mob/living/simple_animal/hostile/retaliate/parrot/pirate - name = "\proper Meatbag" - emote_speech = list("Yaaar!","Squaaak!","Fight me Matey!","BAWWWWK Vox trying to eat me!") - -/datum/map_template/ruin/antag_spawn/heist - name = "Heist Base" - suffixes = list("heist/heist_base.dmm") - modify_tag_vars = FALSE - shuttles_to_initialise = list(/datum/shuttle/autodock/multi/antag/skipjack) - apc_test_exempt_areas = list( - /area/map_template/skipjack_station = NO_SCRUBBER|NO_VENT|NO_APC, - /area/map_template/syndicate_mothership/raider_base = NO_SCRUBBER|NO_VENT|NO_APC - ) - -/obj/machinery/network/telecomms_hub/raider - initial_network_id = "piratenet" - req_access = list(access_raider) - channels = list( - COMMON_FREQUENCY_DATA, - list( - "name" = "Raider", - "key" = "t", - "frequency" = PUB_FREQ, - "color" = COMMS_COLOR_SYNDICATE, - "span_class" = CSS_CLASS_RADIO, - "secured" = access_raider - ) - ) - -/datum/shuttle/autodock/multi/antag/skipjack - name = "Skipjack" - defer_initialisation = TRUE - warmup_time = 0 - destination_tags = list( - "nav_skipjack_start" - ) - shuttle_area = /area/map_template/skipjack_station/start - dock_target = "skipjack_shuttle" - current_location = "nav_skipjack_start" - announcer = "Proximity Sensor Array" - home_waypoint = "nav_skipjack_start" - arrival_message = "Attention, vessel detected entering vessel proximity." - departure_message = "Attention, vessel detected leaving vessel proximity." - -/obj/effect/shuttle_landmark/skipjack/start - name = "Raider Outpost" - landmark_tag = "nav_skipjack_start" - docking_controller = "skipjack_base" - -//Areas -/area/map_template/skipjack_station - name = "Raider Outpost" - icon_state = "yellow" - requires_power = 0 - req_access = list(access_raider) - -/area/map_template/skipjack_station/start - name = "\improper Skipjack" - icon_state = "yellow" - req_access = list(access_raider) - area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED - -/area/map_template/syndicate_mothership/raider_base - name = "\improper Raider Base" - requires_power = 0 - dynamic_lighting = FALSE - req_access = list(access_raider) - -/obj/machinery/computer/shuttle_control/multi/raider - name = "skipjack control console" - initial_access = list(access_raider) - shuttle_tag = "Skipjack" - -/obj/structure/sign/warning/nosmoking_1/heist - desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign." \ No newline at end of file diff --git a/maps/antag_spawn/wizard/wizard_base.dmm b/maps/antag_spawn/wizard/wizard_base.dmm index ca945bc5140..3c501d4b785 100644 --- a/maps/antag_spawn/wizard/wizard_base.dmm +++ b/maps/antag_spawn/wizard/wizard_base.dmm @@ -80,7 +80,7 @@ /turf/floor/carpet, /area/map_template/wizard_station) "ap" = ( -/mob/living/carbon/human/monkey{ +/mob/living/human/monkey{ name = "Murphey" }, /turf/unsimulated/floor{ diff --git a/maps/away/bearcat/bearcat.dm b/maps/away/bearcat/bearcat.dm index b44e9442bca..d959bc2f1d7 100644 --- a/maps/away/bearcat/bearcat.dm +++ b/maps/away/bearcat/bearcat.dm @@ -125,7 +125,7 @@ shoes = /obj/item/clothing/shoes/color/black r_pocket = /obj/item/radio -/decl/hierarchy/outfit/deadcap/post_equip(mob/living/carbon/human/H) +/decl/hierarchy/outfit/deadcap/post_equip(mob/living/human/H) ..() var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str) if(uniform) diff --git a/maps/away/bearcat/bearcat_jobs.dm b/maps/away/bearcat/bearcat_jobs.dm index 2dc2800e4c7..56b92e64506 100644 --- a/maps/away/bearcat/bearcat_jobs.dm +++ b/maps/away/bearcat/bearcat_jobs.dm @@ -35,7 +35,7 @@ pda_type = /obj/item/modular_computer/pda/heads/captain id_type = /obj/item/card/id/bearcat_captain -/decl/hierarchy/outfit/job/bearcat/captain/post_equip(var/mob/living/carbon/human/H) +/decl/hierarchy/outfit/job/bearcat/captain/post_equip(var/mob/living/human/H) ..() var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str) if(uniform) diff --git a/maps/away/liberia/liberia_jobs.dm b/maps/away/liberia/liberia_jobs.dm index 86cbc97c1b0..8bc4034c702 100644 --- a/maps/away/liberia/liberia_jobs.dm +++ b/maps/away/liberia/liberia_jobs.dm @@ -24,7 +24,7 @@ SKILL_PILOT = SKILL_BASIC ) -/datum/job/submap/merchant/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) +/datum/job/submap/merchant/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) to_chat(H, "Your connections helped you learn about the words that will help you identify a locals... Particularly interested buyers:") to_chat(H, "Code phases: [syndicate_code_phrase]") to_chat(H, "Responses to phrases: [syndicate_code_response]") diff --git a/maps/away/unishi/unishi-2.dmm b/maps/away/unishi/unishi-2.dmm index e691b77fe1c..1860db0f1e4 100644 --- a/maps/away/unishi/unishi-2.dmm +++ b/maps/away/unishi/unishi-2.dmm @@ -1537,9 +1537,9 @@ "es" = ( /mob/living/slime, /mob/living/slime, -/mob/living/carbon/human/monkey, -/mob/living/carbon/human/monkey, -/mob/living/carbon/human/monkey, +/mob/living/human/monkey, +/mob/living/human/monkey, +/mob/living/human/monkey, /turf/floor/reinforced, /area/unishi/xenobio) "et" = ( @@ -1547,8 +1547,8 @@ dir = 4 }, /mob/living/slime, -/mob/living/carbon/human/monkey, -/mob/living/carbon/human/monkey, +/mob/living/human/monkey, +/mob/living/human/monkey, /turf/floor/reinforced, /area/unishi/xenobio) "eu" = ( @@ -1608,16 +1608,16 @@ /area/unishi/hydro) "eB" = ( /mob/living/slime, -/mob/living/carbon/human/monkey, -/mob/living/carbon/human/monkey, +/mob/living/human/monkey, +/mob/living/human/monkey, /turf/floor/reinforced, /area/unishi/xenobio) "eC" = ( /obj/structure/window/borosilicate_reinforced{ dir = 4 }, -/mob/living/carbon/human/monkey, -/mob/living/carbon/human/monkey, +/mob/living/human/monkey, +/mob/living/human/monkey, /turf/floor/reinforced, /area/unishi/xenobio) "eD" = ( diff --git a/maps/exodus/exodus-2.dmm b/maps/exodus/exodus-2.dmm index 11d6d1d0973..6e156d985a6 100644 --- a/maps/exodus/exodus-2.dmm +++ b/maps/exodus/exodus-2.dmm @@ -19891,7 +19891,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/mob/living/carbon/human/monkey/punpun, +/mob/living/human/monkey/punpun, /turf/floor/lino, /area/exodus/crew_quarters/bar) "aPK" = ( diff --git a/maps/exodus/exodus.dm b/maps/exodus/exodus.dm index fbc711b73f1..d3db328f744 100644 --- a/maps/exodus/exodus.dm +++ b/maps/exodus/exodus.dm @@ -1,7 +1,11 @@ #if !defined(USING_MAP_DATUM) #include "../../mods/gamemodes/deity/_deity.dme" + #include "../../mods/gamemodes/heist/_heist.dme" #include "../../mods/gamemodes/meteor/_meteor.dme" + #include "../../mods/gamemodes/ninja/_ninja.dme" + #include "../../mods/gamemodes/revolution/_revolution.dme" + #include "../../mods/gamemodes/mixed/_mixed.dme" #include "../../mods/content/mundane.dm" #include "../../mods/content/bigpharma/_bigpharma.dme" @@ -10,13 +14,15 @@ #include "../../mods/content/matchmaking/_matchmaking.dme" #include "../../mods/content/modern_earth/_modern_earth.dme" #include "../../mods/content/mouse_highlights/_mouse_highlight.dme" - #include "../../mods/content/psionics/_psionics.dme" #include "../../mods/content/scaling_descriptors.dm" #include "../../mods/content/xenobiology/_xenobiology.dme" #include "../../mods/mobs/dionaea/_dionaea.dme" #include "../../mods/mobs/borers/_borers.dme" + // Must come after borers for compatibility. + #include "../../mods/content/psionics/_psionics.dme" + #include "../../mods/species/ascent/_ascent.dme" #include "../../mods/content/pheromones/_pheromones.dme" #include "../../mods/species/serpentid/_serpentid.dme" diff --git a/maps/exodus/jobs/captain.dm b/maps/exodus/jobs/captain.dm index fd73838809b..17f8c7e58bc 100644 --- a/maps/exodus/jobs/captain.dm +++ b/maps/exodus/jobs/captain.dm @@ -33,7 +33,7 @@ /datum/computer_file/program/reports ) -/datum/job/captain/equip_job(var/mob/living/carbon/human/H) +/datum/job/captain/equip_job(var/mob/living/human/H) . = ..() if(.) H.implant_loyalty(src) diff --git a/maps/exodus/jobs/civilian.dm b/maps/exodus/jobs/civilian.dm index 6919061c901..803a281a7d9 100644 --- a/maps/exodus/jobs/civilian.dm +++ b/maps/exodus/jobs/civilian.dm @@ -303,7 +303,7 @@ skill_points = 20 software_on_spawn = list(/datum/computer_file/program/reports) -/datum/job/lawyer/equip_job(var/mob/living/carbon/human/H) +/datum/job/lawyer/equip_job(var/mob/living/human/H) . = ..() if(.) H.implant_loyalty(H) diff --git a/maps/exodus/jobs/medical.dm b/maps/exodus/jobs/medical.dm index fac05edfb07..b5b1853523f 100644 --- a/maps/exodus/jobs/medical.dm +++ b/maps/exodus/jobs/medical.dm @@ -200,7 +200,7 @@ ) give_psionic_implant_on_join = FALSE -/datum/job/counselor/equip_job(var/mob/living/carbon/human/H) +/datum/job/counselor/equip_job(var/mob/living/human/H) if(H.mind.role_alt_title == "Counselor") psi_faculties = list("[PSI_REDACTION]" = PSI_RANK_OPERANT) if(H.mind.role_alt_title == "Mentalist") diff --git a/maps/exodus/jobs/security.dm b/maps/exodus/jobs/security.dm index b021a08e601..19bd3667d83 100644 --- a/maps/exodus/jobs/security.dm +++ b/maps/exodus/jobs/security.dm @@ -85,7 +85,7 @@ ) event_categories = list(ASSIGNMENT_SECURITY) -/datum/job/hos/equip_job(var/mob/living/carbon/human/H) +/datum/job/hos/equip_job(var/mob/living/human/H) . = ..() if(.) H.implant_loyalty(H) diff --git a/maps/exodus/jobs/synthetics.dm b/maps/exodus/jobs/synthetics.dm index 1cac23c65ae..10537a76afc 100644 --- a/maps/exodus/jobs/synthetics.dm +++ b/maps/exodus/jobs/synthetics.dm @@ -19,13 +19,13 @@ skip_loadout_preview = TRUE department_types = list(/decl/department/miscellaneous) -/datum/job/computer/equip_job(var/mob/living/carbon/human/H) +/datum/job/computer/equip_job(var/mob/living/human/H) return !!H /datum/job/computer/is_position_available() return (empty_playable_ai_cores.len != 0) -/datum/job/computer/handle_variant_join(var/mob/living/carbon/human/H, var/alt_title) +/datum/job/computer/handle_variant_join(var/mob/living/human/H, var/alt_title) return H /datum/job/computer/do_spawn_special(var/mob/living/character, var/mob/new_player/new_player_mob, var/latejoin) @@ -66,11 +66,11 @@ skip_loadout_preview = TRUE department_types = list(/decl/department/miscellaneous) -/datum/job/robot/handle_variant_join(var/mob/living/carbon/human/H, var/alt_title) +/datum/job/robot/handle_variant_join(var/mob/living/human/H, var/alt_title) if(H) return H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title)) -/datum/job/robot/equip_job(var/mob/living/carbon/human/H) +/datum/job/robot/equip_job(var/mob/living/human/H) return !!H /datum/job/robot/New() diff --git a/maps/exodus/outfits/command.dm b/maps/exodus/outfits/command.dm index 20bf97a5172..9ef27067bc2 100644 --- a/maps/exodus/outfits/command.dm +++ b/maps/exodus/outfits/command.dm @@ -15,7 +15,7 @@ backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/backpack/satchel/cap backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/backpack/messenger/com -/decl/hierarchy/outfit/job/captain/post_equip(var/mob/living/carbon/human/H) +/decl/hierarchy/outfit/job/captain/post_equip(var/mob/living/human/H) ..() if(H.get_age() > 49) // Since we can have something other than the default uniform at this diff --git a/maps/ministation/jobs/command.dm b/maps/ministation/jobs/command.dm index 9f2ceeaddc6..11cfa3723db 100644 --- a/maps/ministation/jobs/command.dm +++ b/maps/ministation/jobs/command.dm @@ -29,7 +29,7 @@ must_fill = 1 not_random_selectable = 1 -/datum/job/ministation/captain/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) +/datum/job/ministation/captain/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) . = ..() if(H) H.verbs |= /mob/proc/freetradeunion_rename_company diff --git a/maps/ministation/jobs/synthetics.dm b/maps/ministation/jobs/synthetics.dm index 2fd718dc15e..3d3939cbcb6 100644 --- a/maps/ministation/jobs/synthetics.dm +++ b/maps/ministation/jobs/synthetics.dm @@ -18,11 +18,11 @@ skip_loadout_preview = TRUE department_types = list(/decl/department/miscellaneous) -/datum/job/ministation/robot/handle_variant_join(var/mob/living/carbon/human/H, var/alt_title) +/datum/job/ministation/robot/handle_variant_join(var/mob/living/human/H, var/alt_title) if(H) return H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title)) -/datum/job/ministation/robot/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) +/datum/job/ministation/robot/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) return !!H /datum/job/ministation/robot/New() @@ -51,13 +51,13 @@ skip_loadout_preview = TRUE department_types = list(/decl/department/miscellaneous) -/datum/job/computer/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) +/datum/job/computer/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) return !!H /datum/job/computer/is_position_available() return (empty_playable_ai_cores.len != 0) -/datum/job/computer/handle_variant_join(var/mob/living/carbon/human/H, var/alt_title) +/datum/job/computer/handle_variant_join(var/mob/living/human/H, var/alt_title) return H /datum/job/computer/do_spawn_special(var/mob/living/character, var/mob/new_player/new_player_mob, var/latejoin) diff --git a/maps/ministation/ministation.dm b/maps/ministation/ministation.dm index a1691382b9a..fbabff707e0 100644 --- a/maps/ministation/ministation.dm +++ b/maps/ministation/ministation.dm @@ -15,6 +15,11 @@ Twice... #include "../../code/unit_tests/offset_tests.dm" #endif + #include "../../mods/gamemodes/heist/_heist.dme" + #include "../../mods/gamemodes/ninja/_ninja.dme" + #include "../../mods/gamemodes/revolution/_revolution.dme" + #include "../../mods/gamemodes/mixed/_mixed.dme" + #include "../random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm" #include "../../mods/content/xenobiology/_xenobiology.dme" @@ -30,7 +35,6 @@ Twice... #include "../../mods/content/government/_government.dme" #include "../../mods/content/modern_earth/_modern_earth.dme" #include "../../mods/content/mouse_highlights/_mouse_highlight.dme" - #include "../../mods/content/psionics/_psionics.dme" #include "../../mods/content/scaling_descriptors.dm" #include "ministation_antagonists.dm" @@ -66,6 +70,9 @@ Twice... #include "../../mods/mobs/dionaea/_dionaea.dme" #include "../../mods/mobs/borers/_borers.dme" + // Must come after borers for compatibility. + #include "../../mods/content/psionics/_psionics.dme" + #include "ministation_overmap.dm" #include "jobs/command.dm" diff --git a/maps/ministation/ministation_areas.dm b/maps/ministation/ministation_areas.dm index 59b9cc53c6c..5046e0c921c 100644 --- a/maps/ministation/ministation_areas.dm +++ b/maps/ministation/ministation_areas.dm @@ -328,7 +328,7 @@ arrival_sound = null lift_announce_str = null -/area/turbolift/alert_on_fall(var/mob/living/carbon/human/H) +/area/turbolift/alert_on_fall(var/mob/living/human/H) if(H.client && SSpersistence.elevator_fall_shifts > 0) SSwebhooks.send(WEBHOOK_ELEVATOR_FALL, list("text" = "We managed to make it [SSpersistence.elevator_fall_shifts] shift\s without someone falling down an elevator shaft.")) SSpersistence.elevator_fall_shifts = -1 diff --git a/maps/ministation/outfits/command.dm b/maps/ministation/outfits/command.dm index 9b6772b08e9..f118e3774ab 100644 --- a/maps/ministation/outfits/command.dm +++ b/maps/ministation/outfits/command.dm @@ -14,7 +14,7 @@ backpack_overrides[/decl/backpack_outfit/satchel] = /obj/item/backpack/satchel/cap backpack_overrides[/decl/backpack_outfit/messenger_bag] = /obj/item/backpack/messenger/com -/decl/hierarchy/outfit/job/ministation/captain/post_equip(var/mob/living/carbon/human/H) +/decl/hierarchy/outfit/job/ministation/captain/post_equip(var/mob/living/human/H) ..() if(H.get_age() > 20) // Since we can have something other than the default uniform at this diff --git a/maps/modpack_testing/modpack_testing.dm b/maps/modpack_testing/modpack_testing.dm index e8ccb22b668..4da408a9394 100644 --- a/maps/modpack_testing/modpack_testing.dm +++ b/maps/modpack_testing/modpack_testing.dm @@ -4,7 +4,11 @@ #include "blank.dmm" #include "../../mods/gamemodes/deity/_deity.dme" + #include "../../mods/gamemodes/heist/_heist.dme" #include "../../mods/gamemodes/meteor/_meteor.dme" + #include "../../mods/gamemodes/ninja/_ninja.dme" + #include "../../mods/gamemodes/revolution/_revolution.dme" + #include "../../mods/gamemodes/mixed/_mixed.dme" #include "../../mods/content/mundane.dm" #include "../../mods/content/scaling_descriptors.dm" @@ -18,7 +22,6 @@ #include "../../mods/content/matchmaking/_matchmaking.dme" #include "../../mods/content/modern_earth/_modern_earth.dme" #include "../../mods/content/mouse_highlights/_mouse_highlight.dme" - #include "../../mods/content/psionics/_psionics.dme" #include "../../mods/content/shackles/_shackles.dme" #include "../../mods/content/xenobiology/_xenobiology.dme" #include "../../mods/content/pheromones/_pheromones.dme" @@ -29,6 +32,9 @@ #include "../../mods/mobs/dionaea/_dionaea.dme" #include "../../mods/mobs/borers/_borers.dme" + // Must come after borers for compatibility. + #include "../../mods/content/psionics/_psionics.dme" + #include "../../mods/species/serpentid/_serpentid.dme" #include "../../mods/species/ascent/_ascent.dme" #include "../../mods/species/neoavians/_neoavians.dme" diff --git a/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm b/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm index c6a632cd279..77f027c0bab 100644 --- a/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm +++ b/maps/random_ruins/exoplanet_ruins/monoliths/monoliths.dm @@ -58,7 +58,7 @@ to_chat(user, SPAN_NOTICE("\The [src] is still.")) return TRUE - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(H.isSynthetic()) to_chat(user, SPAN_NOTICE("\The [src] is still.")) return TRUE diff --git a/maps/shaded_hills/_shaded_hills_defines.dm b/maps/shaded_hills/_shaded_hills_defines.dm index b4f77d76dc4..e79bda4f54c 100644 --- a/maps/shaded_hills/_shaded_hills_defines.dm +++ b/maps/shaded_hills/_shaded_hills_defines.dm @@ -3,4 +3,4 @@ #define SKILL_TEXTILES /decl/hierarchy/skill/crafting/textiles #define SKILL_STONEMASONRY /decl/hierarchy/skill/crafting/stonemasonry #define SKILL_SCULPTING /decl/hierarchy/skill/crafting/sculpting -#define SKILL_ARTIFICE /decl/hierarchy/skill/crafting/artifice \ No newline at end of file +#define SKILL_ARTIFICE /decl/hierarchy/skill/crafting/artifice diff --git a/maps/shaded_hills/areas/downlands.dm b/maps/shaded_hills/areas/downlands.dm index cc5d7d06d7d..dc9cdd4177c 100644 --- a/maps/shaded_hills/areas/downlands.dm +++ b/maps/shaded_hills/areas/downlands.dm @@ -39,3 +39,12 @@ name = "\improper General Store" fishing_failure_prob = "100" fishing_results = list() + + +/area/shaded_hills/shrine + name = "\improper Shrine" + fishing_failure_prob = "100" + fishing_results = list() + +/area/shaded_hills/outside/shrine + name = "\improper Shrine Grounds" diff --git a/maps/shaded_hills/icons/hud.dmi b/maps/shaded_hills/icons/hud.dmi index 6209cd86d0b..3402f33c1b3 100644 Binary files a/maps/shaded_hills/icons/hud.dmi and b/maps/shaded_hills/icons/hud.dmi differ diff --git a/maps/shaded_hills/jobs/_jobs.dm b/maps/shaded_hills/jobs/_jobs.dm index a9ef3ea5cc8..0f83c06a161 100644 --- a/maps/shaded_hills/jobs/_jobs.dm +++ b/maps/shaded_hills/jobs/_jobs.dm @@ -3,6 +3,7 @@ allowed_jobs = list( /datum/job/shaded_hills/visitor/traveller, /datum/job/shaded_hills/visitor/traveller/learned, + /datum/job/shaded_hills/visitor/beggar_knight, /datum/job/shaded_hills/local/miner, /datum/job/shaded_hills/local/herbalist, /datum/job/shaded_hills/local/forester, @@ -10,9 +11,12 @@ /datum/job/shaded_hills/inn/inn_worker, /datum/job/shaded_hills/inn/bartender, /datum/job/shaded_hills/inn/farmer, - /datum/job/shaded_hills/caves/dweller + /datum/job/shaded_hills/caves/dweller, + /datum/job/shaded_hills/shrine/keeper, + /datum/job/shaded_hills/shrine/attendant, + /datum/job/shaded_hills/visitor/traveller/cleric ) - default_job_type = /datum/job/shaded_hills/visitor/traveller + default_job_type = /datum/job/shaded_hills/visitor/traveller default_department_type = /decl/department/shaded_hills/visitors species_to_job_whitelist = list( /decl/species/grafadreka = list( @@ -25,8 +29,13 @@ /decl/species/human, /decl/species/hnoll ), + ) + species_to_job_blacklist = list( /decl/species/kobaloi = list( - /datum/job/shaded_hills/inn/innkeeper + /datum/job/shaded_hills/visitor/beggar_knight, + /datum/job/shaded_hills/inn/innkeeper, + /datum/job/shaded_hills/shrine/keeper, + /datum/job/shaded_hills/visitor/traveller/cleric ) ) diff --git a/maps/shaded_hills/jobs/shrine.dm b/maps/shaded_hills/jobs/shrine.dm new file mode 100644 index 00000000000..d68077a7d9a --- /dev/null +++ b/maps/shaded_hills/jobs/shrine.dm @@ -0,0 +1,57 @@ +/decl/department/shaded_hills/shrine + name = "Shrine Attendants" + colour = "#404e68" + display_color = "#8c96c4" + +/datum/job/shaded_hills/shrine + abstract_type = /datum/job/shaded_hills/shrine + department_types = list(/decl/department/shaded_hills/shrine) + skill_points = 20 + +/datum/job/shaded_hills/shrine/keeper + title = "Shrine Keeper" + supervisors = "your vows, and your faith" + description = "You are the leader of the local religious order, living and working within the shrine. You are expected to see to both the spiritual and physical health of the populace, as well as travellers, if they can offer appropriate tithe." + spawn_positions = 1 + total_positions = 1 + outfit_type = /decl/hierarchy/outfit/job/shaded_hills/shrine/keeper + min_skill = list( + SKILL_LITERACY = SKILL_ADEPT, + SKILL_MEDICAL = SKILL_ADEPT, + SKILL_ANATOMY = SKILL_ADEPT, + ) + max_skill = list( + SKILL_MEDICAL = SKILL_MAX, + SKILL_ANATOMY = SKILL_MAX, + ) + skill_points = 24 + +/obj/abstract/landmark/start/shaded_hills/shrine_keeper + name = "Shrine Keeper" + +/datum/job/shaded_hills/shrine/attendant + title = "Shrine Attendant" + supervisors = "the Shrine Keeper, your vows, and your faith" + description = "You are an acolyte of the local religious order, living and working within the shrine. Under the direction of the shrine keeper, you are expected to tend to the shrine and the grounds, and to produce food or other goods for use or trade to support the clergy." + spawn_positions = 2 + total_positions = 2 + outfit_type = /decl/hierarchy/outfit/job/shaded_hills/shrine + min_skill = list( + SKILL_STONEMASONRY = SKILL_BASIC, + SKILL_CARPENTRY = SKILL_BASIC, + SKILL_TEXTILES = SKILL_BASIC, + SKILL_COOKING = SKILL_BASIC, + SKILL_BOTANY = SKILL_BASIC, + SKILL_ATHLETICS = SKILL_ADEPT, + SKILL_MEDICAL = SKILL_ADEPT, + SKILL_ANATOMY = SKILL_ADEPT, + ) + max_skill = list( + SKILL_COOKING = SKILL_EXPERT, + SKILL_BOTANY = SKILL_EXPERT, + SKILL_MEDICAL = SKILL_EXPERT, + SKILL_ANATOMY = SKILL_EXPERT, + ) + +/obj/abstract/landmark/start/shaded_hills/shrine_attendant + name = "Shrine Attendant" diff --git a/maps/shaded_hills/jobs/visitors.dm b/maps/shaded_hills/jobs/visitors.dm index 9165ac9a758..26c29e7f390 100644 --- a/maps/shaded_hills/jobs/visitors.dm +++ b/maps/shaded_hills/jobs/visitors.dm @@ -22,12 +22,12 @@ /datum/job/shaded_hills/visitor/traveller/learned title = "Itinerant Scholar" // todo: outfits for alt-titles? - alt_titles = list("Itinerant Monk", "Traveling Doctor", "Dilettante") + alt_titles = list("Itinerant Monk", "Travelling Doctor", "Dilettante") supervisors = "your conscience" - description = "You are a skilled professional who has traveled to this area from elsewhere. You may be a doctor, a scholar, a monk, or some other highly-educated individual with rare skills. Whatever your reason for coming here, you are likely one of the only individuals in the area to possess your unique skillset." + description = "You are a skilled professional who has travelled to this area from elsewhere. You may be a doctor, a scholar, a monk, or some other highly-educated individual with rare skills. Whatever your reason for coming here, you are likely one of the only individuals in the area to possess your unique skillset." spawn_positions = 2 total_positions = 2 - outfit_type = /decl/hierarchy/outfit/job/shaded_hills/traveller + outfit_type = /decl/hierarchy/outfit/job/shaded_hills/traveller/scholar skill_points = 24 min_skill = list( SKILL_LITERACY = SKILL_ADEPT @@ -40,3 +40,52 @@ /obj/abstract/landmark/start/shaded_hills/traveller/learned name = "Itinerant Scholar" + +/datum/job/shaded_hills/visitor/beggar_knight + title = "Beggar Knight" + supervisors = "your vows" + description = "You are a wandering swordmaster sworn to a vow of poverty, with nothing to your name but the armour on your back and the blade at your hip. Beggar knights are tolerated due to their martial prowess, and are usually paid with food or new equipment as they are avowed against carrying coin." + spawn_positions = 2 + total_positions = 2 + outfit_type = /decl/hierarchy/outfit/job/shaded_hills/beggar_knight + min_skill = list( + SKILL_WEAPONS = SKILL_ADEPT, + SKILL_ATHLETICS = SKILL_ADEPT, + ) + max_skill = list( + SKILL_FINANCE = SKILL_NONE, + SKILL_CARPENTRY = SKILL_BASIC, + SKILL_METALWORK = SKILL_BASIC, + SKILL_TEXTILES = SKILL_BASIC, + SKILL_STONEMASONRY = SKILL_BASIC, + SKILL_SCULPTING = SKILL_BASIC, + SKILL_ARTIFICE = SKILL_BASIC, + ) + +/obj/abstract/landmark/start/shaded_hills/beggar_knight + name = "Beggar Knight" + + +/datum/job/shaded_hills/visitor/traveller/cleric + title = "Travelling Cleric" + supervisors = "your vows, and your faith" + description = "You are an ordained person of faith, travelling the lands on the business of your order, to preach, or simply to experience new people and cultures. You are battle-trained, but are also a healer." + spawn_positions = 2 + total_positions = 2 + outfit_type = /decl/hierarchy/outfit/job/shaded_hills/traveller/cleric + min_skill = list( + SKILL_WEAPONS = SKILL_ADEPT, + SKILL_ATHLETICS = SKILL_ADEPT, + SKILL_MEDICAL = SKILL_ADEPT, + SKILL_ANATOMY = SKILL_ADEPT, + ) + max_skill = list( + SKILL_WEAPONS = SKILL_MAX, + SKILL_MEDICAL = SKILL_MAX, + SKILL_ANATOMY = SKILL_MAX, + ) + skill_points = 22 + +/obj/abstract/landmark/start/shaded_hills/cleric + name = "Travelling Cleric" + diff --git a/maps/shaded_hills/outfits/caves.dm b/maps/shaded_hills/outfits/caves.dm index 6e781f9841a..cbc634a3caf 100644 --- a/maps/shaded_hills/outfits/caves.dm +++ b/maps/shaded_hills/outfits/caves.dm @@ -1,4 +1,8 @@ /decl/hierarchy/outfit/job/shaded_hills/cave_dweller - name = "Shaded Hills - Cave Dweller" - uniform = /obj/item/clothing/pants/loincloth - shoes = /obj/item/clothing/shoes/sandal + name = "Shaded Hills - Cave Dweller" + uniform = /obj/item/clothing/pants/loincloth + shoes = /obj/item/clothing/shoes/sandal + hands = list( + /obj/item/gun/launcher/bow/sling, + /obj/item/stack/material/ore/basalt/ten, + ) diff --git a/maps/shaded_hills/outfits/shrine.dm b/maps/shaded_hills/outfits/shrine.dm new file mode 100644 index 00000000000..6f96a09d6bd --- /dev/null +++ b/maps/shaded_hills/outfits/shrine.dm @@ -0,0 +1,9 @@ +/decl/hierarchy/outfit/job/shaded_hills/shrine + name = "Shaded Hills - Shrine Attendant" + uniform = /obj/item/clothing/suit/robe + shoes = /obj/item/clothing/shoes/sandal + +/decl/hierarchy/outfit/job/shaded_hills/shrine/keeper + name = "Shaded Hills - Shrine Keeper" + suit = /obj/item/clothing/suit/mantle + mask = /obj/item/clothing/neck/necklace/prayer_beads/basalt diff --git a/maps/shaded_hills/outfits/visitors.dm b/maps/shaded_hills/outfits/visitors.dm index 5b21214a3e4..d9b927fc78b 100644 --- a/maps/shaded_hills/outfits/visitors.dm +++ b/maps/shaded_hills/outfits/visitors.dm @@ -1,2 +1,19 @@ /decl/hierarchy/outfit/job/shaded_hills/traveller name = "Shaded Hills - Traveller" + +/decl/hierarchy/outfit/job/shaded_hills/beggar_knight + name = "Shaded Hills - Beggar Knight" + suit = /obj/item/clothing/suit/armor/forged/banded + belt = /obj/item/bladed/shortsword + backpack_contents = list( + /obj/item/stack/medical/bruise_pack/bandage/five = 1, + /obj/item/stack/medical/ointment/poultice/five = 1, + /obj/item/chems/waterskin/crafted/wine = 1 + ) + +/decl/hierarchy/outfit/job/shaded_hills/traveller/scholar + name = "Shaded Hills - Itinerant Scholar" + +/decl/hierarchy/outfit/job/shaded_hills/traveller/cleric + name = "Shaded Hills - Travelling Cleric" + diff --git a/maps/shaded_hills/outfits/wilderness.dm b/maps/shaded_hills/outfits/wilderness.dm index ed3871a7bdd..883ad6deb5f 100644 --- a/maps/shaded_hills/outfits/wilderness.dm +++ b/maps/shaded_hills/outfits/wilderness.dm @@ -1,8 +1,12 @@ /decl/hierarchy/outfit/job/shaded_hills/forester - name = "Shaded Hills - Forester" + name = "Shaded Hills - Forester" + hands = list( + /obj/item/gun/launcher/bow, + /obj/item/stack/material/bow_ammo/arrow/fifteen + ) /decl/hierarchy/outfit/job/shaded_hills/miner - name = "Shaded Hills - Miner" + name = "Shaded Hills - Miner" /decl/hierarchy/outfit/job/shaded_hills/herbalist - name = "Shaded Hills - Herbalist" + name = "Shaded Hills - Herbalist" diff --git a/maps/shaded_hills/shaded_hills-inn.dmm b/maps/shaded_hills/shaded_hills-inn.dmm index 7e02733fa57..60e1bf32be4 100644 --- a/maps/shaded_hills/shaded_hills-inn.dmm +++ b/maps/shaded_hills/shaded_hills-inn.dmm @@ -16,6 +16,11 @@ /obj/structure/closet/crate/chest, /turf/floor/natural/path/basalt, /area/shaded_hills/general_store) +"bW" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/chems/cooking_vessel/skillet, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "cl" = ( /obj/structure/table/woodentable/ebony, /turf/floor/wood/ebony, @@ -28,12 +33,26 @@ "cx" = ( /turf/wall/brick/basalt, /area/shaded_hills/outside/downlands) +"cy" = ( +/obj/structure/reagent_dispensers/barrel/ebony/water, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) +"cT" = ( +/obj/structure/railing/mapped/ebony{ + dir = 1 + }, +/obj/structure/railing/mapped/ebony{ + dir = 4 + }, +/turf/floor/natural/grass, +/area/shaded_hills/outside/shrine) "dC" = ( /obj/structure/door/wood/ebony, /turf/floor/natural/path/herringbone/basalt, /area/shaded_hills/inn) "dH" = ( /obj/structure/window/basic/full, +/obj/structure/wall_frame/log/ebony, /turf/wall/log/ebony, /area/shaded_hills/general_store) "dK" = ( @@ -46,6 +65,10 @@ }, /turf/floor/wood/ebony, /area/shaded_hills/inn) +"ev" = ( +/obj/structure/closet/crate/chest/ebony, +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) "eD" = ( /obj/structure/textiles/loom/ebony, /turf/floor/wood/ebony, @@ -54,6 +77,14 @@ /obj/structure/door/wood/ebony, /turf/floor/wood/ebony, /area/shaded_hills/general_store) +"fg" = ( +/obj/structure/railing/mapped/ebony, +/obj/structure/railing/mapped/ebony{ + dir = 4 + }, +/obj/structure/reagent_dispensers/compost_bin, +/turf/floor/natural/dirt, +/area/shaded_hills/outside/shrine) "fh" = ( /obj/structure/table/marble, /obj/item/chems/glass/pottery/cup, @@ -67,6 +98,9 @@ /obj/item/chems/glass/pottery/mug, /turf/floor/natural/path/herringbone/basalt, /area/shaded_hills/inn) +"ft" = ( +/turf/floor/natural/mud, +/area/shaded_hills/outside/shrine) "fK" = ( /obj/structure/reagent_dispensers/barrel/ebony/water, /turf/floor/natural/path/herringbone/basalt, @@ -101,10 +135,26 @@ }, /turf/floor/natural/grass, /area/shaded_hills/outside/downlands) +"gt" = ( +/obj/structure/wall_sconce/lantern{ + dir = 8 + }, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) +"gA" = ( +/obj/structure/railing/mapped/ebony{ + dir = 8 + }, +/turf/floor/natural/grass, +/area/shaded_hills/outside/shrine) "gB" = ( /obj/structure/wall_sconce/lantern, /turf/floor/wood/ebony, /area/shaded_hills/farmhouse) +"gL" = ( +/obj/structure/reagent_dispensers/barrel/ebony/oil, +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) "gR" = ( /obj/structure/table/marble, /obj/item/chems/condiment/flour, @@ -164,8 +214,12 @@ /obj/abstract/landmark/lock_preset/shaded_hills/inn_interior, /turf/floor/natural/path/herringbone/basalt, /area/shaded_hills/inn) +"iK" = ( +/turf/wall/brick/basalt, +/area/shaded_hills/outside/shrine) "iX" = ( /obj/structure/window/basic/full, +/obj/structure/wall_frame/log/ebony, /turf/floor/natural/path/basalt, /area/shaded_hills/inn) "iZ" = ( @@ -179,6 +233,13 @@ }, /turf/floor/wood/ebony, /area/shaded_hills/stable) +"jk" = ( +/obj/structure/bed/chair/bench/pew/mahogany{ + dir = 1 + }, +/obj/abstract/landmark/start/shaded_hills/cleric, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "js" = ( /turf/floor/wood/ebony, /area/shaded_hills/stable) @@ -200,6 +261,17 @@ /obj/item/bedsheet/furs, /turf/floor/wood/ebony, /area/shaded_hills/stable) +"ke" = ( +/obj/structure/wall_sconce/lantern{ + dir = 1; + pixel_y = 10 + }, +/obj/item/chems/glass/bucket/wood, +/turf/floor/natural/dirt, +/area/shaded_hills/outside/downlands) +"kv" = ( +/turf/floor/natural/dirt, +/area/shaded_hills/outside/shrine) "kE" = ( /obj/structure/door/wood/ebony, /turf/floor/wood/ebony, @@ -232,6 +304,19 @@ /obj/abstract/landmark/start/shaded_hills/farmer, /turf/floor/wood/ebony, /area/shaded_hills/farmhouse) +"me" = ( +/obj/structure/reagent_dispensers/barrel/ebony, +/obj/item/seeds/extracted/potato, +/obj/item/seeds/extracted/potato, +/obj/item/seeds/extracted/potato, +/obj/item/seeds/extracted/carrot, +/obj/item/seeds/extracted/carrot, +/obj/item/seeds/extracted/carrot, +/obj/item/seeds/extracted/cabbage, +/obj/item/seeds/extracted/cabbage, +/obj/item/seeds/extracted/cabbage, +/turf/floor/natural/dirt, +/area/shaded_hills/outside/downlands) "mG" = ( /obj/structure/railing/mapped/ebony{ dir = 4 @@ -246,6 +331,10 @@ /obj/item/chems/glass/bucket/wood, /turf/floor/natural/path/basalt, /area/shaded_hills/slaughterhouse) +"ol" = ( +/obj/structure/railing/mapped/ebony, +/turf/floor/natural/mud, +/area/shaded_hills/outside/shrine) "or" = ( /obj/structure/wall_sconce/lantern{ dir = 4 @@ -261,10 +350,23 @@ }, /turf/floor/natural/grass, /area/shaded_hills/outside/downlands) +"pd" = ( +/obj/structure/bed/chair/bench/pew/mahogany{ + dir = 1 + }, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "pi" = ( /obj/structure/table/woodentable/ebony, +/obj/item/stack/medical/ointment/poultice/five, +/obj/item/stack/medical/bruise_pack/bandage/five, /turf/floor/natural/path/herringbone/basalt, /area/shaded_hills/inn) +"qe" = ( +/obj/structure/bed/simple/ebony, +/obj/abstract/landmark/start/shaded_hills/shrine_attendant, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "qf" = ( /obj/structure/railing/mapped/ebony{ dir = 8 @@ -274,9 +376,25 @@ "qG" = ( /turf/wall/brick/basalt, /area/shaded_hills/inn) +"qL" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/ancient_surgery/bonesetter, +/obj/item/ancient_surgery/retractor, +/obj/item/ancient_surgery/sutures, +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) "qP" = ( /turf/floor/wood/ebony, /area/shaded_hills/farmhouse) +"qY" = ( +/turf/wall/brick/basalt, +/area/shaded_hills/outside/downlands/poi) +"ra" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/chems/glass/mortar, +/obj/item/rock/basalt, +/turf/floor/wood/ebony, +/area/shaded_hills/farmhouse) "rv" = ( /obj/structure/table/woodentable/ebony, /obj/item/chems/glass/pottery/bottle, @@ -293,6 +411,10 @@ }, /turf/floor/wood/ebony, /area/shaded_hills/inn/porch) +"rO" = ( +/mob/living/simple_animal/fowl/chicken, +/turf/floor/natural/grass, +/area/shaded_hills/outside/downlands) "sJ" = ( /obj/structure/door/wood/ebony, /obj/abstract/landmark/lock_preset/shaded_hills/inn_interior, @@ -344,14 +466,34 @@ "uJ" = ( /turf/floor/wood/ebony, /area/shaded_hills/general_store) +"uK" = ( +/obj/structure/table/marble, +/obj/structure/wall_sconce/lantern{ + dir = 8 + }, +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) "uM" = ( /turf/floor/natural/path/basalt, /area/shaded_hills/general_store) +"uP" = ( +/obj/structure/wall_sconce/lantern{ + dir = 1; + pixel_y = 10 + }, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "vA" = ( /obj/structure/table/marble, /obj/item/chems/condiment/sugar, /turf/floor/natural/path/herringbone/basalt, /area/shaded_hills/inn) +"wg" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/ancient_surgery/bonesaw, +/obj/item/ancient_surgery/forceps, +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) "wh" = ( /obj/structure/closet/crate/chest, /obj/item/cash/imperial/regalis, @@ -378,6 +520,20 @@ "xH" = ( /turf/wall/brick/basalt, /area/shaded_hills/slaughterhouse) +"xU" = ( +/obj/structure/railing/mapped/ebony{ + dir = 4 + }, +/turf/floor/natural/grass, +/area/shaded_hills/outside/shrine) +"xW" = ( +/obj/structure/reagent_dispensers/compost_bin, +/turf/floor/natural/dirt, +/area/shaded_hills/outside/downlands) +"ya" = ( +/obj/structure/reagent_dispensers/barrel/ebony, +/turf/floor/wood/ebony, +/area/shaded_hills/farmhouse) "yn" = ( /obj/structure/bed/simple/ebony/cloth, /obj/item/bedsheet/yellowed, @@ -388,6 +544,10 @@ /obj/structure/reagent_dispensers/barrel/ebony, /turf/floor/wood/ebony, /area/shaded_hills/general_store) +"yx" = ( +/obj/structure/table/marble, +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) "yz" = ( /turf/wall/brick/basalt, /area/shaded_hills/general_store) @@ -398,6 +558,10 @@ /obj/abstract/landmark/start/shaded_hills/farmer, /turf/floor/wood/ebony, /area/shaded_hills/farmhouse) +"yN" = ( +/obj/structure/closet/crate/chest/ebony, +/turf/floor/wood/ebony, +/area/shaded_hills/farmhouse) "yY" = ( /turf/floor/natural/grass, /area/shaded_hills/outside/downlands/poi) @@ -411,6 +575,15 @@ /obj/item/chems/food/meatpie, /turf/floor/natural/path/herringbone/basalt, /area/shaded_hills/inn) +"zm" = ( +/obj/structure/railing/mapped/ebony{ + dir = 8 + }, +/obj/structure/railing/mapped/ebony{ + dir = 1 + }, +/turf/floor/natural/grass, +/area/shaded_hills/outside/shrine) "Ak" = ( /turf/floor/natural/path/basalt, /area/shaded_hills/stable) @@ -418,14 +591,43 @@ /obj/abstract/landmark/start/shaded_hills/bartender, /turf/floor/natural/path/herringbone/basalt, /area/shaded_hills/inn) +"Aq" = ( +/obj/structure/textiles/loom/ebony, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) +"Aw" = ( +/obj/structure/railing/mapped/ebony{ + dir = 4 + }, +/obj/structure/reagent_dispensers/barrel/ebony, +/obj/item/seeds/extracted/foxglove, +/obj/item/seeds/extracted/foxglove, +/obj/item/seeds/extracted/ginseng, +/obj/item/seeds/extracted/ginseng, +/obj/item/seeds/extracted/valerian, +/obj/item/seeds/extracted/valerian, +/obj/item/seeds/extracted/yarrow, +/obj/item/seeds/extracted/yarrow, +/turf/floor/natural/dirt, +/area/shaded_hills/outside/shrine) "Ay" = ( /turf/floor/natural/mud/water, /area/shaded_hills/outside/downlands) +"AE" = ( +/obj/structure/door/wood/ebony, +/turf/floor/natural/path/basalt, +/area/shaded_hills/shrine) "AG" = ( /obj/structure/table/woodentable/ebony, /obj/item/bag/sack, /turf/floor/wood/ebony, /area/shaded_hills/farmhouse) +"AX" = ( +/obj/structure/wall_sconce/lantern{ + dir = 4 + }, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "Br" = ( /turf/floor/natural/path/basalt, /area/shaded_hills/slaughterhouse) @@ -434,6 +636,13 @@ /obj/structure/textiles/spinning_wheel/twisting_bench/ebony, /turf/floor/natural/path/basalt, /area/shaded_hills/slaughterhouse) +"By" = ( +/turf/floor/natural/grass, +/area/shaded_hills/outside/shrine) +"BD" = ( +/obj/structure/reagent_dispensers/barrel/ebony/wine, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "BG" = ( /obj/structure/bed/chair/bench/ebony, /turf/floor/wood/ebony, @@ -443,10 +652,25 @@ /obj/item/bedsheet/yellowed, /turf/floor/wood/ebony, /area/shaded_hills/general_store) +"Ch" = ( +/obj/structure/wall_sconce/lantern{ + dir = 1; + pixel_y = 10 + }, +/turf/floor/natural/grass, +/area/shaded_hills/outside/downlands) +"CR" = ( +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "Dn" = ( /obj/structure/reagent_dispensers/barrel/ebony/oil, /turf/floor/wood/ebony, /area/shaded_hills/general_store) +"Dt" = ( +/obj/structure/bed/simple/ebony/cloth, +/obj/abstract/landmark/start/shaded_hills/shrine_keeper, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "Ee" = ( /turf/wall/log/ebony, /area/shaded_hills/inn) @@ -457,6 +681,12 @@ /obj/structure/table/woodentable/ebony, /turf/floor/wood/ebony, /area/shaded_hills/general_store) +"EJ" = ( +/obj/structure/railing/mapped/ebony{ + dir = 1 + }, +/turf/floor/natural/grass, +/area/shaded_hills/outside/shrine) "EK" = ( /obj/structure/table/marble, /obj/item/rock/hematite, @@ -466,6 +696,22 @@ "EV" = ( /turf/floor/natural/path/basalt, /area/shaded_hills/outside/downlands) +"FD" = ( +/obj/structure/reagent_dispensers/barrel/ebony, +/obj/item/seeds/extracted/rice, +/obj/item/seeds/extracted/rice, +/obj/item/seeds/extracted/rice, +/obj/item/seeds/extracted/rice, +/obj/item/seeds/extracted/wheat, +/obj/item/seeds/extracted/wheat, +/obj/item/seeds/extracted/wheat, +/obj/item/seeds/extracted/wheat, +/turf/floor/natural/dirt, +/area/shaded_hills/outside/downlands) +"FE" = ( +/obj/structure/closet/cabinet/wooden/ebony, +/turf/floor/wood/ebony, +/area/shaded_hills/farmhouse) "FH" = ( /obj/structure/wall_sconce/lantern{ dir = 4 @@ -476,6 +722,16 @@ /obj/abstract/landmark/start/shaded_hills/traveller, /turf/floor/natural/dirt, /area/shaded_hills/outside/downlands) +"Gb" = ( +/obj/structure/table/marble, +/obj/item/stack/medical/bruise_pack/bandage/five, +/obj/item/stack/medical/ointment/poultice/five, +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) +"Gj" = ( +/obj/structure/table/woodentable_reinforced/mahogany, +/turf/floor/carpet/red, +/area/shaded_hills/shrine) "Gq" = ( /obj/abstract/landmark/start/shaded_hills/traveller/learned, /turf/floor/natural/path/basalt, @@ -519,6 +775,7 @@ /area/shaded_hills/inn) "HE" = ( /obj/structure/window/basic/full, +/obj/structure/wall_frame/log/ebony, /turf/floor/natural/path/basalt, /area/shaded_hills/stable) "HF" = ( @@ -547,6 +804,7 @@ /area/shaded_hills/tannery) "IQ" = ( /obj/structure/window/basic/full, +/obj/structure/wall_frame/log/ebony, /turf/floor/natural/path/basalt, /area/shaded_hills/farmhouse) "IS" = ( @@ -556,18 +814,54 @@ /obj/abstract/landmark/latejoin, /turf/floor/natural/path/basalt, /area/shaded_hills/outside/downlands) +"Je" = ( +/obj/structure/pit/closed/grave, +/obj/structure/gravemarker/random, +/turf/floor/natural/grass, +/area/shaded_hills/outside/shrine) "Jo" = ( /obj/structure/wall_sconce/lantern, /turf/floor/wood/ebony, /area/shaded_hills/inn) +"Jt" = ( +/obj/structure/closet/cabinet/wooden/ebony, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "Jw" = ( /obj/structure/bed/chair/wood/ebony, /turf/floor/wood/ebony, /area/shaded_hills/inn/porch) +"Jz" = ( +/obj/structure/reagent_dispensers/barrel/ebony/water, +/turf/floor/wood/ebony, +/area/shaded_hills/inn) +"JK" = ( +/obj/structure/table/woodentable_reinforced/mahogany, +/obj/item/flame/candle, +/turf/floor/carpet/red, +/area/shaded_hills/shrine) +"JM" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/ancient_surgery/cautery, +/obj/item/ancient_surgery/scalpel, +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) "JU" = ( /obj/structure/railing/mapped/ebony, /turf/floor/wood/ebony, /area/shaded_hills/inn/porch) +"Ka" = ( +/mob/living/simple_animal/cow, +/turf/floor/natural/grass, +/area/shaded_hills/outside/downlands) +"Ke" = ( +/obj/structure/textiles/spinning_wheel/twisting_bench/ebony, +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) +"Kh" = ( +/obj/structure/window/basic/full, +/turf/wall/log/ebony, +/area/shaded_hills/shrine) "KG" = ( /obj/structure/railing/mapped/ebony{ dir = 8 @@ -610,6 +904,11 @@ /obj/structure/closet/crate/chest, /turf/floor/natural/path/basalt, /area/shaded_hills/slaughterhouse) +"Ot" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/chems/cooking_vessel/pot, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "ON" = ( /obj/structure/table/marble, /obj/item/chems/glass/pottery/jar, @@ -629,6 +928,10 @@ "PA" = ( /turf/floor/straw, /area/shaded_hills/stable) +"PG" = ( +/obj/structure/door/wood/ebony, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "PQ" = ( /obj/structure/closet/crate/chest, /obj/item/chems/food/butchery/meat, @@ -642,6 +945,15 @@ /obj/abstract/landmark/lock_preset/shaded_hills/inn_exterior, /turf/floor/wood/ebony, /area/shaded_hills/inn) +"QB" = ( +/turf/wall/log/ebony, +/area/shaded_hills/shrine) +"QL" = ( +/obj/structure/bed/chair/wood/ebony{ + dir = 1 + }, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "QQ" = ( /turf/wall/log/ebony, /area/shaded_hills/tannery) @@ -670,6 +982,17 @@ }, /turf/floor/natural/grass, /area/shaded_hills/outside/downlands) +"Sj" = ( +/obj/structure/railing/mapped/ebony{ + dir = 4 + }, +/obj/item/chems/glass/bucket/wood, +/turf/floor/natural/mud, +/area/shaded_hills/outside/shrine) +"Sy" = ( +/obj/structure/textiles/spinning_wheel/ebony, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "SF" = ( /obj/structure/door/wood/ebony, /turf/floor/natural/path/basalt, @@ -709,9 +1032,23 @@ /obj/abstract/landmark/latejoin, /turf/floor/natural/dirt, /area/shaded_hills/outside/downlands) +"TM" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/chems/food/grown/potato, +/obj/item/chems/food/grown/potato, +/obj/item/chems/food/grown/carrot, +/obj/item/chems/food/grown/carrot, +/obj/item/chems/food/grown/cabbage, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "TR" = ( /turf/floor/natural/dirt, /area/shaded_hills/outside/downlands) +"UD" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/flame/candle, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "US" = ( /obj/structure/bed/chair/wood/ebony{ dir = 4 @@ -724,6 +1061,19 @@ }, /turf/floor/natural/path/basalt, /area/shaded_hills/outside/downlands) +"Vj" = ( +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) +"VE" = ( +/obj/structure/reagent_dispensers/barrel/ebony/beer, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) +"VM" = ( +/obj/structure/railing/mapped/ebony{ + dir = 4 + }, +/turf/floor/natural/dirt, +/area/shaded_hills/outside/shrine) "VU" = ( /obj/structure/railing/mapped/ebony{ dir = 8 @@ -741,6 +1091,12 @@ "Wg" = ( /turf/wall/log/ebony, /area/shaded_hills/general_store) +"Wh" = ( +/obj/structure/table/woodentable/ebony, +/obj/item/chems/glass/mortar, +/obj/item/rock/basalt, +/turf/floor/wood/ebony, +/area/shaded_hills/shrine) "Wk" = ( /obj/structure/railing/mapped/ebony{ dir = 8 @@ -762,6 +1118,23 @@ }, /turf/floor/wood/ebony, /area/shaded_hills/inn/porch) +"WE" = ( +/obj/structure/reagent_dispensers/barrel/ebony, +/obj/item/seeds/extracted/cabbage, +/obj/item/seeds/extracted/cabbage, +/obj/item/seeds/extracted/carrot, +/obj/item/seeds/extracted/carrot, +/obj/item/seeds/extracted/wheat, +/obj/item/seeds/extracted/wheat, +/obj/item/seeds/extracted/rice, +/obj/item/seeds/extracted/rice, +/obj/item/seeds/extracted/potato, +/obj/item/seeds/extracted/potato, +/obj/structure/railing/mapped/ebony{ + dir = 4 + }, +/turf/floor/natural/mud, +/area/shaded_hills/outside/shrine) "WI" = ( /obj/structure/wall_sconce/lantern{ dir = 8 @@ -775,6 +1148,7 @@ "WV" = ( /obj/structure/table/marble, /obj/item/chems/cooking_vessel/pot, +/obj/item/chems/cooking_vessel/skillet, /turf/floor/natural/path/herringbone/basalt, /area/shaded_hills/inn) "WY" = ( @@ -786,6 +1160,20 @@ /obj/structure/meat_hook, /turf/floor/natural/path/basalt, /area/shaded_hills/slaughterhouse) +"XH" = ( +/obj/structure/fire_source/stove, +/obj/item/stack/material/log/mapped/ebony/twenty, +/turf/floor/natural/path/herringbone/basalt, +/area/shaded_hills/shrine) +"XM" = ( +/turf/floor/carpet/red, +/area/shaded_hills/shrine) +"XY" = ( +/turf/floor/natural/mud/water, +/area/shaded_hills/outside/shrine) +"Yc" = ( +/turf/wall/brick/basalt, +/area/shaded_hills/shrine) "Yg" = ( /turf/floor/wood/ebony, /area/shaded_hills/inn/porch) @@ -804,6 +1192,10 @@ }, /turf/floor/wood/ebony, /area/shaded_hills/general_store) +"Zx" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/floor/natural/mud, +/area/shaded_hills/outside/shrine) "ZE" = ( /obj/structure/table/marble, /obj/item/chems/food/cherrypie, @@ -4527,7 +4919,7 @@ yY yY yY yY -yY +HI HI HI HI @@ -4982,12 +5374,12 @@ yY yY yY yY -yY HI HI HI HI HI +TR HI TR EV @@ -5134,7 +5526,6 @@ yY yY yY yY -yY HI HI HI @@ -5143,6 +5534,7 @@ HI TR TR TR +TR Ic EV TR @@ -5285,7 +5677,6 @@ yY yY yY yY -yY HI HI HI @@ -5293,14 +5684,15 @@ HI HI HI TR +TR EV TR Ic EV TR HI -HI -HI +TR +TR yY yY yY @@ -5437,7 +5829,6 @@ yY yY yY yY -yY HI HI HI @@ -5445,15 +5836,16 @@ HI HI HI TR +TR EV Ic EV EV HI +TR HI -HI -HI -yY +TR +VZ yY yY yY @@ -5595,7 +5987,7 @@ HI HI HI HI -HI +aU TR TR Ic @@ -5605,8 +5997,8 @@ HI HI HI HI -yY -yY +VZ +VZ yY yY yY @@ -5740,7 +6132,6 @@ yY yY yY yY -yY HI HI HI @@ -5749,6 +6140,7 @@ HI HI HI TR +TR EV TR EV @@ -5760,8 +6152,8 @@ HI yY yY yY -yY -yY +VZ +VZ yY yY yY @@ -5899,7 +6291,7 @@ HI HI HI HI -HI +Ch TR EV Ic @@ -5911,11 +6303,11 @@ HI HI yY yY -yY -yY -yY -yY -yY +VZ +qY +qY +VZ +VZ yY yY yY @@ -6064,10 +6456,10 @@ HI HI yY yY -yY -yY -yY -yY +VZ +qY +qY +VZ yY yY yY @@ -6217,9 +6609,9 @@ HI HI yY yY -yY -yY -yY +VZ +VZ +VZ yY yY yY @@ -6339,11 +6731,7 @@ yY yY yY yY -yY -yY -yY -yY -yY +HI HI HI HI @@ -6355,6 +6743,10 @@ HI HI HI TR +HI +HI +HI +HI TR TR EV @@ -6370,9 +6762,9 @@ HI HI yY yY -yY -yY -yY +VZ +qY +VZ yY yY yY @@ -6489,11 +6881,10 @@ yY yY yY yY -yY -yY -yY -yY -yY +HI +HI +HI +HI HI HI HI @@ -6507,7 +6898,8 @@ HI HI HI TR -TR +HI +HI TR EV Ic @@ -6522,8 +6914,8 @@ HI HI yY yY -yY -yY +VZ +VZ yY yY yY @@ -6639,10 +7031,6 @@ yY yY yY yY -yY -yY -yY -yY HI HI HI @@ -6658,6 +7046,10 @@ HI HI HI HI +HI +TR +TR +HI TR TR TR @@ -6673,7 +7065,7 @@ HI HI HI HI -yY +VZ yY yY yY @@ -6790,8 +7182,6 @@ yY yY yY yY -yY -yY HI HI HI @@ -6808,6 +7198,8 @@ HI HI HI HI +HI +TR Iz Iz Iz @@ -6958,8 +7350,8 @@ HI HI HI HI -HI -HI +TR +TR wA wA wA @@ -7089,6 +7481,9 @@ yY yY yY yY +yY +yY +yY HI HI HI @@ -7107,11 +7502,8 @@ HI HI HI HI -HI -HI -HI -HI -HI +TR +TR wA Lj wA @@ -7240,11 +7632,10 @@ yY yY yY yY -HI -HI -HI -HI -HI +yY +yY +yY +yY HI HI HI @@ -7264,6 +7655,7 @@ HI HI HI TR +TR wA wA wA @@ -7391,6 +7783,11 @@ yY yY yY yY +yY +yY +yY +yY +yY HI HI HI @@ -7407,11 +7804,6 @@ HI HI HI HI -TR -HI -HI -HI -HI HI HI HI @@ -7543,30 +7935,30 @@ yY yY yY yY -HI -HI -HI -HI -HI +yY +yY +yY +yY +yY HI HI TR TR HI HI +HI TR TR TR TR TR -HI -TR -TR -TR TR TR HI HI +HI +HI +TR TR TR TR @@ -7695,11 +8087,11 @@ yY yY yY yY -HI -HI -HI -HI -HI +yY +yY +yY +yY +yY HI TR cx @@ -7715,7 +8107,7 @@ cx cx cx TR -TR +HI TR TR cx @@ -7848,9 +8240,9 @@ yY yY yY yY -HI -HI -HI +yY +yY +yY HI HI TR @@ -8000,9 +8392,9 @@ yY yY yY yY -HI -HI -HI +yY +yY +yY HI HI TR @@ -8152,12 +8544,12 @@ yY yY yY yY -HI +yY +yY HI HI HI TR -TR cx TR HI @@ -8304,12 +8696,12 @@ yY yY yY yY -HI +yY +yY HI HI HI TR -TR cx TR HI @@ -8456,12 +8848,12 @@ yY yY yY yY -HI +yY +yY HI HI HI TR -TR cx TR HI @@ -8608,12 +9000,12 @@ yY yY yY yY -HI +yY +yY HI HI HI TR -TR cx TR TR @@ -8760,12 +9152,12 @@ yY yY yY yY +yY HI HI HI HI TR -TR cx cx TR @@ -8773,7 +9165,7 @@ TR Ee ZY ZY -ZY +Jz ZY sJ ZY @@ -10019,7 +10411,7 @@ HI HI oO Sf -HI +Sf Sf Sf Sf @@ -10325,9 +10717,9 @@ gp HI HI HI +Ka HI -HI -HI +rO RC HI TR @@ -10783,7 +11175,7 @@ Ay HI HI HI -HI +rO RC HI HI @@ -11083,7 +11475,7 @@ HI HI LK hU -HI +hU hU hU hU @@ -11946,7 +12338,7 @@ NH NH NH NH -yY +NH yY yY yY @@ -11989,7 +12381,7 @@ LN cl qP qP -qP +FE LN TR Rl @@ -12097,8 +12489,8 @@ NH NH NH NH -yY -yY +NH +NH yY yY yY @@ -12249,8 +12641,8 @@ NH NH NH NH -yY -yY +NH +NH yY yY yY @@ -12293,7 +12685,7 @@ LN cl qP qP -qP +yN LN TR Rl @@ -12401,9 +12793,9 @@ NH NH NH NH -yY -yY -yY +NH +NH +NH yY yY yY @@ -12445,7 +12837,7 @@ IQ cl yJ qP -qP +yN LN TR Rl @@ -12553,9 +12945,9 @@ NH NH NH NH -yY -yY -yY +NH +NH +NH yY yY yY @@ -12705,9 +13097,9 @@ NH NH NH NH -yY -yY -yY +NH +NH +NH yY yY yY @@ -12749,7 +13141,7 @@ LN AG qP qP -qP +ya LN TR Rl @@ -12857,9 +13249,9 @@ NH NH NH NH -yY -yY -yY +NH +NH +NH yY yY yY @@ -12903,7 +13295,7 @@ WO LN LN LN -TR +me Rl GW Ay @@ -13009,9 +13401,9 @@ NH NH NH NH -yY -yY -yY +NH +NH +NH yY yY yY @@ -13055,7 +13447,7 @@ qP qP qP LN -TR +FD Rl Rl Ay @@ -13161,10 +13553,10 @@ NH NH NH NH -yY -yY -yY -yY +NH +NH +NH +NH yY yY yY @@ -13313,10 +13705,10 @@ NH NH NH NH -yY -yY -yY -yY +NH +NH +NH +NH yY yY yY @@ -13359,7 +13751,7 @@ qP qP hJ LN -TR +xW Rl Rl Ay @@ -13466,10 +13858,10 @@ NH NH NH NH -yY -yY -yY -yY +NH +NH +NH +NH yY yY yY @@ -13507,11 +13899,11 @@ qP hc LN HF -cl +ra gg eD LN -aU +ke TR Rl Rl @@ -13618,10 +14010,10 @@ NH NH NH NH -yY -yY -yY -yY +NH +NH +NH +NH yY yY yY @@ -13770,10 +14162,10 @@ NH NH NH NH -yY -yY -yY -yY +NH +NH +NH +NH yY yY yY @@ -13922,10 +14314,10 @@ NH NH NH NH -yY -yY -yY -yY +NH +NH +NH +NH yY yY yY @@ -14075,8 +14467,8 @@ NH NH NH NH -yY -yY +NH +NH yY yY yY @@ -14227,8 +14619,8 @@ NH NH NH NH -yY -yY +NH +NH yY yY yY @@ -14379,9 +14771,9 @@ NH NH NH NH -yY -yY -yY +NH +NH +NH yY yY yY @@ -14531,9 +14923,9 @@ NH NH NH NH -yY -yY -yY +NH +NH +NH yY yY yY @@ -14684,9 +15076,9 @@ NH NH NH NH -yY -yY -yY +NH +NH +NH yY yY yY @@ -14836,10 +15228,10 @@ NH NH NH NH -yY -yY -yY -yY +NH +NH +NH +NH yY yY yY @@ -14988,11 +15380,11 @@ NH NH NH NH -yY -yY -yY -yY -yY +NH +NH +NH +NH +NH yY yY yY @@ -15140,11 +15532,11 @@ NH NH NH NH -yY -yY -yY -yY -yY +NH +NH +NH +NH +NH yY yY yY @@ -15172,8 +15564,8 @@ yY yY HI HI -HI -HI +TR +TR TR Ic EV @@ -15293,6 +15685,11 @@ NH NH NH NH +NH +NH +NH +NH +NH yY yY yY @@ -15308,24 +15705,19 @@ yY yY yY yY +By +By +By +By +By yY yY yY yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -HI +By HI TR +TR EV TR TR @@ -15447,6 +15839,10 @@ NH NH NH NH +NH +NH +NH +NH yY yY yY @@ -15458,26 +15854,22 @@ yY yY yY yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -HI -HI -HI +By +By +By +By +kv +kv +kv +By +By +By +By +By +By +kv +TR +TR TR EV Ic @@ -15602,6 +15994,7 @@ NH NH NH NH +NH yY yY yY @@ -15612,24 +16005,23 @@ yY yY yY yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -HI -HI -HI +By +By +kv +kv +kv +kv +kv +kv +kv +kv +kv +By +By +kv +kv +TR +TR EV EV Ic @@ -15764,23 +16156,23 @@ yY yY yY yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -HI -HI -HI +By +By +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +TR TR EV EV @@ -15909,30 +16301,30 @@ NH NH NH NH +NH yY yY yY yY yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -HI -HI -HI +By +By +kv +kv +kv +kv +By +By +By +By +By +kv +kv +kv +kv +kv +kv +TR TR EV EV @@ -16065,25 +16457,25 @@ NH NH NH yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -yY -HI -HI +By +By +By +kv +kv +kv +kv +By +By +By +By +By +By +By +By +By +By +By +By HI TR TR @@ -16216,15 +16608,15 @@ NH NH NH NH -NH -yY -yY -yY -yY -yY -yY -yY -yY +By +By +kv +kv +kv +kv +kv +By +By yY yY yY @@ -16367,15 +16759,15 @@ NH NH NH NH -NH -NH -NH -yY -yY -yY -yY -yY -yY +By +By +kv +kv +kv +kv +By +By +By yY yY yY @@ -16519,13 +16911,13 @@ NH NH NH NH -NH -NH -NH -yY -yY -yY -yY +By +By +kv +kv +kv +kv +By yY yY yY @@ -16670,14 +17062,14 @@ NH NH NH NH -NH -NH -NH -NH -NH -yY -yY -yY +By +By +kv +kv +kv +kv +By +By yY yY yY @@ -16793,10 +17185,20 @@ NH NH NH NH +By +By +By +By NH NH NH NH +By +By +By +By +By +By NH NH NH @@ -16812,23 +17214,13 @@ NH NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -yY -yY +By +By +kv +kv +kv +kv +By yY yY yY @@ -16935,6 +17327,7 @@ lC lC Wm Wm +Wm NH NH NH @@ -16942,6 +17335,27 @@ NH NH NH NH +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By NH NH NH @@ -16952,35 +17366,13 @@ NH NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -yY +By +By +kv +kv +kv +kv +By yY yY yY @@ -17087,8 +17479,36 @@ lC lC Wm Wm +Wm NH NH +By +By +By +By +By +By +By +kv +By +By +By +kv +By +By +By +By +kv +kv +By +By +By +By +By +By +By +By +By NH NH NH @@ -17098,42 +17518,14 @@ NH NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -yY +By +By +kv +kv +kv +kv +By +By yY yY yY @@ -17239,7 +17631,37 @@ lC lC Wm Wm +Wm NH +By +By +By +By +By +By +By +By +kv +kv +By +kv +iK +kv +By +By +kv +kv +iK +kv +By +By +kv +kv +kv +kv +kv +By +By NH NH NH @@ -17248,44 +17670,14 @@ NH NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +By +By +kv +kv +kv +kv +By yY yY yY @@ -17391,7 +17783,37 @@ lC lC Wm Wm +Wm NH +By +zm +gA +gA +gA +gA +gA +gA +iK +QB +Kh +QB +QB +kv +kv +kv +iK +iK +iK +kv +kv +kv +kv +iK +iK +kv +iK +kv +By NH NH NH @@ -17401,43 +17823,13 @@ NH NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +By +kv +kv +kv +kv +By yY yY yY @@ -17543,7 +17935,37 @@ lC lC Wm Wm +Wm NH +By +EJ +By +By +By +By +Je +By +iK +QB +UD +QL +QB +By +By +By +kv +kv +kv +kv +kv +By +By +kv +kv +kv +kv +kv +By NH NH NH @@ -17554,43 +17976,13 @@ NH NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +By +kv +kv +kv +By +yY yY yY yY @@ -17695,7 +18087,38 @@ lC lC Wm Wm +Wm NH +By +EJ +Je +By +By +By +By +By +iK +QB +Dt +CR +QB +QB +QB +QB +QB +QB +QB +QB +QB +QB +QB +QB +QB +QB +QB +QB +By +By NH NH NH @@ -17704,45 +18127,14 @@ NH NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +By +By +kv +kv +kv +By +yY yY yY yY @@ -17847,7 +18239,38 @@ lC lC Wm Wm +Wm NH +By +EJ +By +By +Je +By +Je +By +iK +QB +Jt +CR +PG +CR +CR +CR +CR +CR +QB +CR +CR +gt +CR +CR +CR +CR +CR +QB +By +By NH NH NH @@ -17855,46 +18278,15 @@ NH NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +By +By +kv +kv +kv +By +By +By NH yY yY @@ -17999,53 +18391,53 @@ lC lC Wm Wm +Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +EJ +Je +By +By +By +By +By +iK +QB +QB +AE +QB +CR +CR +AX +CR +CR +PG +CR +XM +XM +XM +pd +CR +pd +CR +Kh +By +By +By +By +By +By +By +By +By +By +By +By +kv +kv +By +By +By NH NH yY @@ -18151,53 +18543,53 @@ lC lC Wm Wm +Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +EJ +By +By +Je +By +Je +By +iK +iK +kv +kv +QB +PG +QB +QB +PG +QB +QB +CR +XM +JK +XM +jk +CR +pd +CR +QB +kv +By +kv +kv +kv +kv +kv +kv +By +kv +kv +kv +kv +kv +By +By +By NH NH NH @@ -18303,52 +18695,52 @@ lC lC Wm Wm +Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +EJ +By +By +By +By +By +By +iK +kv +kv +kv +QB +CR +CR +QB +CR +CR +QB +uP +XM +Gj +XM +XM +XM +XM +CR +AE +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +By +By +By NH NH NH @@ -18455,51 +18847,51 @@ lC lC Wm Wm +Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +EJ +By +By +kv +kv +By +By +iK +kv +kv +kv +QB +Jt +qe +QB +Jt +qe +QB +CR +XM +JK +XM +pd +CR +pd +CR +QB +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +By +By +By +By +By NH NH NH @@ -18607,50 +18999,50 @@ lC lC Wm Wm +Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +By +kv +kv +kv +kv +kv +kv +kv +kv +kv +kv +Yc +Yc +QB +QB +QB +QB +QB +CR +XM +XM +XM +pd +CR +pd +CR +Kh +By +By +By +By +By +By +By +By +By +By +By +By +By +By NH NH NH @@ -18759,48 +19151,48 @@ lC lC Wm Wm +Wm NH +By +EJ +By +By +By +kv +kv +kv +kv +kv +kv +kv +Yc +XH +Vj +CR +CR +CR +PG +CR +CR +AX +CR +CR +CR +CR +CR +QB +By +By +By NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +By +By +By +By +By NH NH NH @@ -18908,41 +19300,41 @@ lC lC lC lC -lC -Wm -Wm -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +lC +Wm +Wm +Wm NH +By +EJ +By +By +By +By +By +By +kv +iK +kv +kv +AE +Vj +Vj +TM +Wh +CR +QB +QB +QB +QB +QB +QB +QB +QB +QB +QB +By +By NH NH NH @@ -19065,35 +19457,35 @@ Wm Wm Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +EJ +Je +By +Je +By +By +kv +kv +iK +kv +kv +QB +uP +CR +Ot +bW +CR +AE +ft +ft +ft +ft +ft +ft +ft +kv +By +By NH NH NH @@ -19217,35 +19609,35 @@ Wm Wm Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +EJ +By +By +By +By +By +kv +iK +iK +kv +kv +Kh +CR +CR +CR +CR +CR +Kh +ft +Zx +XY +Zx +ol +ft +kv +By +kv +By NH NH NH @@ -19369,35 +19761,35 @@ Wm Wm Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +EJ +By +By +Je +By +By +kv +iK +iK +kv +By +QB +cy +VE +BD +Sy +Aq +QB +ft +Zx +XY +Zx +ol +kv +By +By +By +By NH NH NH @@ -19521,33 +19913,33 @@ Wm Wm Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +EJ +By +By +By +By +kv +kv +iK +kv +By +kv +QB +QB +QB +QB +QB +QB +QB +ft +Zx +XY +Zx +ol +kv +By +By NH NH NH @@ -19673,32 +20065,32 @@ Wm Wm Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +EJ +By +Je +By +By +kv +kv +kv +kv +kv +kv +QB +yx +uK +Gb +Vj +Vj +AE +ft +Zx +XY +Zx +ol +kv +By NH NH NH @@ -19825,32 +20217,32 @@ Wm Wm Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +EJ +By +By +By +By +kv +kv +kv +kv +kv +By +AE +Vj +Vj +Vj +Vj +JM +QB +ft +ft +ft +ft +ol +kv +By NH NH NH @@ -19977,31 +20369,31 @@ Wm Wm Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +cT +xU +xU +xU +xU +kv +kv +kv +kv +By +kv +QB +ev +gL +Ke +wg +qL +QB +Aw +WE +VM +Sj +fg +By NH NH NH @@ -20129,31 +20521,31 @@ Wm Wm Wm NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +By +By +By +By +By +VM +kv +kv +kv +By +kv +QB +QB +QB +QB +QB +QB +QB +kv +kv +By +kv +By +By NH NH NH @@ -20283,26 +20675,26 @@ Wm NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By +By NH NH NH @@ -20441,19 +20833,19 @@ NH NH NH NH +By +By +By +By +By +By NH NH NH -NH -NH -NH -NH -NH -NH -NH -NH -NH -NH +By +By +By +By NH NH NH @@ -20584,6 +20976,7 @@ lC Wm Wm Wm +Wm NH NH NH @@ -20593,9 +20986,8 @@ NH NH NH NH -NH -NH -NH +By +By NH NH NH @@ -20736,7 +21128,7 @@ lC Wm Wm Wm -NH +Wm NH NH NH diff --git a/maps/shaded_hills/shaded_hills-swamp.dmm b/maps/shaded_hills/shaded_hills-swamp.dmm index c4b92d251aa..2526bb0beb3 100644 --- a/maps/shaded_hills/shaded_hills-swamp.dmm +++ b/maps/shaded_hills/shaded_hills-swamp.dmm @@ -1,6 +1,7 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aM" = ( /obj/structure/window/basic/full, +/obj/structure/wall_frame/log/ebony, /turf/floor/natural/path/basalt, /area/shaded_hills/witch_hut) "bg" = ( diff --git a/maps/shaded_hills/shaded_hills.dm b/maps/shaded_hills/shaded_hills.dm index eb99abfa669..d299ffb44c2 100644 --- a/maps/shaded_hills/shaded_hills.dm +++ b/maps/shaded_hills/shaded_hills.dm @@ -18,6 +18,7 @@ #include "jobs/_jobs.dm" #include "jobs/caves.dm" #include "jobs/inn.dm" + #include "jobs/shrine.dm" #include "jobs/visitors.dm" #include "jobs/wilderness.dm" @@ -39,6 +40,7 @@ #include "outfits/_outfits.dm" #include "outfits/caves.dm" #include "outfits/inn.dm" + #include "outfits/shrine.dm" #include "outfits/visitors.dm" #include "outfits/wilderness.dm" diff --git a/maps/shaded_hills/submaps/woods/suspicious_cabin/suspicious_cabin.dmm b/maps/shaded_hills/submaps/woods/suspicious_cabin/suspicious_cabin.dmm index 0d2427bf746..2032c706884 100644 --- a/maps/shaded_hills/submaps/woods/suspicious_cabin/suspicious_cabin.dmm +++ b/maps/shaded_hills/submaps/woods/suspicious_cabin/suspicious_cabin.dmm @@ -48,6 +48,7 @@ /area/template_noop) "v" = ( /obj/structure/window/basic/full, +/obj/structure/wall_frame/log/ebony, /turf/floor/natural/path/basalt, /area/template_noop) "w" = ( diff --git a/maps/tradeship/jobs/command.dm b/maps/tradeship/jobs/command.dm index 3cb07038328..7b9a6fa654a 100644 --- a/maps/tradeship/jobs/command.dm +++ b/maps/tradeship/jobs/command.dm @@ -29,7 +29,7 @@ not_random_selectable = 1 forced_spawnpoint = /decl/spawnpoint/cryo/captain -/datum/job/tradeship_captain/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) +/datum/job/tradeship_captain/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) . = ..() if(H) H.verbs |= /mob/proc/tradehouse_rename_ship diff --git a/maps/tradeship/jobs/synthetics.dm b/maps/tradeship/jobs/synthetics.dm index 9e0664ea8f0..b2d9ce91265 100644 --- a/maps/tradeship/jobs/synthetics.dm +++ b/maps/tradeship/jobs/synthetics.dm @@ -18,11 +18,11 @@ skip_loadout_preview = TRUE department_types = list(/decl/department/miscellaneous) -/datum/job/tradeship_robot/handle_variant_join(var/mob/living/carbon/human/H, var/alt_title) +/datum/job/tradeship_robot/handle_variant_join(var/mob/living/human/H, var/alt_title) if(H) return H.Robotize(SSrobots.get_mob_type_by_title(alt_title || title)) -/datum/job/tradeship_robot/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) +/datum/job/tradeship_robot/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) return !!H /datum/job/tradeship_robot/New() diff --git a/maps/tradeship/outfits/_outfits.dm b/maps/tradeship/outfits/_outfits.dm index 4456ac6a1f7..b5064d2f43e 100644 --- a/maps/tradeship/outfits/_outfits.dm +++ b/maps/tradeship/outfits/_outfits.dm @@ -9,7 +9,7 @@ /decl/hierarchy/outfit/job/tradeship/hand name = "Tradeship - Job - Deck Hand" -/decl/hierarchy/outfit/job/tradeship/hand/pre_equip(mob/living/carbon/human/H) +/decl/hierarchy/outfit/job/tradeship/hand/pre_equip(mob/living/human/H) ..() uniform = pick(list( /obj/item/clothing/pants/mustard/overalls, diff --git a/maps/tradeship/outfits/command.dm b/maps/tradeship/outfits/command.dm index f7063c00485..5a3274d5f42 100644 --- a/maps/tradeship/outfits/command.dm +++ b/maps/tradeship/outfits/command.dm @@ -7,7 +7,7 @@ id_type = /obj/item/card/id/gold l_ear = /obj/item/radio/headset/heads/captain -/decl/hierarchy/outfit/job/tradeship/captain/post_equip(var/mob/living/carbon/human/H) +/decl/hierarchy/outfit/job/tradeship/captain/post_equip(var/mob/living/human/H) ..() var/obj/item/clothing/uniform = H.get_equipped_item(slot_w_uniform_str) if(uniform) diff --git a/maps/tradeship/tradeship.dm b/maps/tradeship/tradeship.dm index 1560a9beb03..216ad790400 100644 --- a/maps/tradeship/tradeship.dm +++ b/maps/tradeship/tradeship.dm @@ -4,6 +4,11 @@ #include "../../code/unit_tests/offset_tests.dm" #endif + #include "../../mods/gamemodes/heist/_heist.dme" + #include "../../mods/gamemodes/ninja/_ninja.dme" + #include "../../mods/gamemodes/revolution/_revolution.dme" + #include "../../mods/gamemodes/mixed/_mixed.dme" + #include "../random_ruins/exoplanet_ruins/playablecolony/playablecolony.dm" #include "../../mods/content/dungeon_loot/_dungeon_loot.dme" @@ -13,7 +18,6 @@ #include "../../mods/content/government/_government.dme" #include "../../mods/content/modern_earth/_modern_earth.dme" #include "../../mods/content/mouse_highlights/_mouse_highlight.dme" - #include "../../mods/content/psionics/_psionics.dme" #include "../../mods/content/scaling_descriptors.dm" #include "../../mods/content/xenobiology/_xenobiology.dme" #include "../../mods/content/matchmaking/_matchmaking.dme" @@ -22,6 +26,9 @@ #include "../../mods/mobs/dionaea/_dionaea.dme" #include "../../mods/mobs/borers/_borers.dme" + // Must come after borers for compatibility. + #include "../../mods/content/psionics/_psionics.dme" + #include "../../mods/species/ascent/_ascent.dme" #include "../../mods/species/drakes/_drakes.dme" #include "../../mods/species/serpentid/_serpentid.dme" diff --git a/maps/tradeship/tradeship_areas.dm b/maps/tradeship/tradeship_areas.dm index 3de5f7af9ab..6884791c749 100644 --- a/maps/tradeship/tradeship_areas.dm +++ b/maps/tradeship/tradeship_areas.dm @@ -307,7 +307,7 @@ arrival_sound = null lift_announce_str = null -/area/turbolift/alert_on_fall(var/mob/living/carbon/human/H) +/area/turbolift/alert_on_fall(var/mob/living/human/H) if(H.client && SSpersistence.elevator_fall_shifts > 0) SSwebhooks.send(WEBHOOK_ELEVATOR_FALL, list("text" = "We managed to make it [SSpersistence.elevator_fall_shifts] shift\s without someone falling down an elevator shaft.")) SSpersistence.elevator_fall_shifts = -1 diff --git a/maps/~mapsystem/maps.dm b/maps/~mapsystem/maps.dm index 767da60083e..36cf1f1b1e1 100644 --- a/maps/~mapsystem/maps.dm +++ b/maps/~mapsystem/maps.dm @@ -478,7 +478,7 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable else to_chat(player, SPAN_BAD("You did not survive the events on [station_name()]...")) -/datum/map/proc/create_passport(var/mob/living/carbon/human/H) +/datum/map/proc/create_passport(var/mob/living/human/H) if(!passport_type) return var/obj/item/passport/pass = new passport_type(get_turf(H)) diff --git a/maps/~mapsystem/maps_currency.dm b/maps/~mapsystem/maps_currency.dm index fe90b12a880..f3169147c27 100644 --- a/maps/~mapsystem/maps_currency.dm +++ b/maps/~mapsystem/maps_currency.dm @@ -7,14 +7,14 @@ var/name = "all in bank account" var/transfer_mult = 1 -/decl/starting_cash_choice/proc/get_cash_objects(var/mob/living/carbon/human/owner, var/datum/money_account/owner_account) +/decl/starting_cash_choice/proc/get_cash_objects(var/mob/living/human/owner, var/datum/money_account/owner_account) return /decl/starting_cash_choice/credstick name = "all on charge stick" uid = "starting_cash_stick" -/decl/starting_cash_choice/credstick/get_cash_objects(var/mob/living/carbon/human/owner, var/datum/money_account/owner_account) +/decl/starting_cash_choice/credstick/get_cash_objects(var/mob/living/human/owner, var/datum/money_account/owner_account) var/obj/item/charge_stick/credstick = new credstick.creator = owner.real_name credstick.currency = owner_account.currency @@ -31,7 +31,7 @@ name = "all in cash" uid = "starting_cash_cash" -/decl/starting_cash_choice/cash/get_cash_objects(var/mob/living/carbon/human/owner, var/datum/money_account/owner_account) +/decl/starting_cash_choice/cash/get_cash_objects(var/mob/living/human/owner, var/datum/money_account/owner_account) var/obj/item/cash/cash = new cash.set_currency(owner_account.currency) cash.adjust_worth(FLOOR(owner_account.money * transfer_mult)) @@ -48,7 +48,7 @@ transfer_mult = 0.5 uid = "starting_cash_cash_stick_split" -/decl/starting_cash_choice/split/get_cash_objects(var/mob/living/carbon/human/owner, var/datum/money_account/owner_account) +/decl/starting_cash_choice/split/get_cash_objects(var/mob/living/human/owner, var/datum/money_account/owner_account) . = list() var/obj/item/cash/cash = new cash.set_currency(owner_account.currency) diff --git a/mods/content/bigpharma/_bigpharma.dme b/mods/content/bigpharma/_bigpharma.dme index ee81e2f9ac1..7da543df8ee 100644 --- a/mods/content/bigpharma/_bigpharma.dme +++ b/mods/content/bigpharma/_bigpharma.dme @@ -1,9 +1,11 @@ #ifndef MODPACK_BIGPHARMA #define MODPACK_BIGPHARMA +// BEGIN_INCLUDE #include "_bigpharma.dm" #include "chems.dm" #include "extension.dm" #include "language.dm" #include "overrides.dm" #include "pill_bottle.dm" +// END_INCLUDE #endif \ No newline at end of file diff --git a/mods/content/corporate/clothing/outfits.dm b/mods/content/corporate/clothing/outfits.dm index e542d8fafd0..9249d7817e1 100644 --- a/mods/content/corporate/clothing/outfits.dm +++ b/mods/content/corporate/clothing/outfits.dm @@ -46,7 +46,7 @@ /decl/hierarchy/outfit/death_command name = "Spec Ops - Death commando" -/decl/hierarchy/outfit/death_command/equip_outfit(mob/living/carbon/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) +/decl/hierarchy/outfit/death_command/equip_outfit(mob/living/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) var/decl/special_role/deathsquad = GET_DECL(/decl/special_role/deathsquad) deathsquad.equip_role(H) return 1 @@ -54,7 +54,7 @@ /decl/hierarchy/outfit/syndicate_command name = "Spec Ops - Syndicate commando" -/decl/hierarchy/outfit/syndicate_command/equip_outfit(mob/living/carbon/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) +/decl/hierarchy/outfit/syndicate_command/equip_outfit(mob/living/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) var/decl/special_role/commandos = GET_DECL(/decl/special_role/deathsquad/mercenary) commandos.equip_role(H) return 1 diff --git a/mods/content/corporate/datum/antagonists/deathsquad.dm b/mods/content/corporate/datum/antagonists/deathsquad.dm index 8fc7e790736..52f32595abb 100644 --- a/mods/content/corporate/datum/antagonists/deathsquad.dm +++ b/mods/content/corporate/datum/antagonists/deathsquad.dm @@ -46,7 +46,7 @@ l_pocket = /obj/item/pinpointer r_pocket = /obj/item/disk/nuclear -/decl/special_role/deathsquad/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/deathsquad/equip_role(var/mob/living/human/player) if (player.mind == leader) default_outfit = /decl/hierarchy/outfit/commando/leader else @@ -74,12 +74,11 @@ player.current.real_name = player.name player.current.SetName(player.current.name) - var/mob/living/carbon/human/H = player.current + var/mob/living/human/H = player.current if(istype(H)) var/decl/pronouns/pronouns = pick(H.species.available_pronouns) H.set_gender(pronouns.name) H.set_age(rand(25,45)) - H.dna.ready_dna(H) /decl/special_role/deathsquad/create_antagonist() if(..() && !deployed) diff --git a/mods/content/dungeon_loot/_dungeon_loot.dme b/mods/content/dungeon_loot/_dungeon_loot.dme index a45ad415641..18e66276b2f 100644 --- a/mods/content/dungeon_loot/_dungeon_loot.dme +++ b/mods/content/dungeon_loot/_dungeon_loot.dme @@ -1,9 +1,10 @@ #ifndef MODPACK_DUNGEON_LOOT #define MODPACK_DUNGEON_LOOT -// BEGIN INCLUDE +// BEGIN_INCLUDE #include "_dungeon_loot.dm" #include "loot_pile.dm" -#include "subtypes/exosuit.dm" -#include "subtypes/maint.dm" -#include "subtypes/surface.dm" +#include "subtypes\exosuit.dm" +#include "subtypes\maint.dm" +#include "subtypes\surface.dm" +// END_INCLUDE #endif diff --git a/mods/content/fantasy/_fantasy.dme b/mods/content/fantasy/_fantasy.dme index b8a389b8f58..5242af7c3d4 100644 --- a/mods/content/fantasy/_fantasy.dme +++ b/mods/content/fantasy/_fantasy.dme @@ -1,31 +1,33 @@ #ifndef MODPACK_FANTASY_SPECIES #define MODPACK_FANTASY_SPECIES +// BEGIN_INCLUDE #include "_fantasy.dm" -#include "datum/cultures.dm" -#include "datum/currencies.dm" -#include "datum/factions.dm" -#include "datum/locations.dm" -#include "datum/outfits.dm" -#include "datum/overrides.dm" -#include "datum/species.dm" -#include "datum/hnoll/bodytypes.dm" -#include "datum/hnoll/culture.dm" -#include "datum/hnoll/language.dm" -#include "datum/hnoll/markings.dm" -#include "datum/hnoll/organs.dm" -#include "datum/hnoll/species.dm" -#include "datum/kobaloi/bodytypes.dm" -#include "datum/kobaloi/clothing.dm" -#include "datum/kobaloi/culture.dm" -#include "datum/kobaloi/language.dm" -#include "datum/kobaloi/markings.dm" -#include "datum/kobaloi/organs.dm" -#include "datum/kobaloi/species.dm" -#include "items/clothing/_loadout.dm" -#include "items/clothing/_recipes.dm" -#include "items/clothing/armor.dm" -#include "items/clothing/jerkin.dm" -#include "items/clothing/loincloth.dm" -#include "items/clothing/overrides.dm" -#include "items/clothing/trousers.dm" +#include "datum\cultures.dm" +#include "datum\currencies.dm" +#include "datum\factions.dm" +#include "datum\locations.dm" +#include "datum\outfits.dm" +#include "datum\overrides.dm" +#include "datum\species.dm" +#include "datum\hnoll\bodytypes.dm" +#include "datum\hnoll\culture.dm" +#include "datum\hnoll\language.dm" +#include "datum\hnoll\markings.dm" +#include "datum\hnoll\organs.dm" +#include "datum\hnoll\species.dm" +#include "datum\kobaloi\bodytypes.dm" +#include "datum\kobaloi\clothing.dm" +#include "datum\kobaloi\culture.dm" +#include "datum\kobaloi\language.dm" +#include "datum\kobaloi\markings.dm" +#include "datum\kobaloi\organs.dm" +#include "datum\kobaloi\species.dm" +#include "items\clothing\_loadout.dm" +#include "items\clothing\_recipes.dm" +#include "items\clothing\armor.dm" +#include "items\clothing\jerkin.dm" +#include "items\clothing\loincloth.dm" +#include "items\clothing\overrides.dm" +#include "items\clothing\trousers.dm" +// END_INCLUDE #endif diff --git a/mods/content/fantasy/datum/hnoll/species.dm b/mods/content/fantasy/datum/hnoll/species.dm index ea9f5280d58..60218e40fbe 100644 --- a/mods/content/fantasy/datum/hnoll/species.dm +++ b/mods/content/fantasy/datum/hnoll/species.dm @@ -75,5 +75,5 @@ /decl/emote/visible/tail/stopsway ) -/decl/species/hnoll/handle_additional_hair_loss(var/mob/living/carbon/human/H, var/defer_body_update = TRUE) +/decl/species/hnoll/handle_additional_hair_loss(var/mob/living/human/H, var/defer_body_update = TRUE) . = H?.set_skin_colour(rgb(189, 171, 143)) diff --git a/mods/content/fantasy/items/clothing/_loadout.dm b/mods/content/fantasy/items/clothing/_loadout.dm index 001e8c59987..420b62571b4 100644 --- a/mods/content/fantasy/items/clothing/_loadout.dm +++ b/mods/content/fantasy/items/clothing/_loadout.dm @@ -64,6 +64,10 @@ path = /obj/item/clothing/suit/robe slot = slot_wear_suit_str +/decl/loadout_option/fantasy/suit/mantle + name = "mantle" + path = /obj/item/clothing/suit/mantle + /decl/loadout_option/fantasy/suit/cloak name = "cloak" path = /obj/item/clothing/suit/cloak @@ -129,6 +133,23 @@ /decl/material/solid/organic/wood/walnut ) + +/decl/loadout_option/fantasy/neck + abstract_type = /decl/loadout_option/fantasy/neck + slot = slot_wear_mask_str + + +/decl/loadout_option/fantasy/neck/prayer_beads + name = "prayer beads" + path = /obj/item/clothing/neck/necklace/prayer_beads + available_materials = list( + /decl/material/solid/organic/bone, + /decl/material/solid/stone/marble, + /decl/material/solid/stone/basalt, + /decl/material/solid/organic/wood/mahogany, + /decl/material/solid/organic/wood/ebony + ) + /decl/loadout_category/fantasy/utility name = "Utility" diff --git a/mods/content/generic_shuttles/_generic_shuttles.dme b/mods/content/generic_shuttles/_generic_shuttles.dme index 79827a3486e..c77cee5daa9 100644 --- a/mods/content/generic_shuttles/_generic_shuttles.dme +++ b/mods/content/generic_shuttles/_generic_shuttles.dme @@ -1,5 +1,7 @@ #ifndef MODPACK_GENERIC_SHUTTLES #define MODPACK_GENERIC_SHUTTLES +// BEGIN_INCLUDE #include "_generic_shuttles.dm" -#include "tanker/tanker.dm" +#include "tanker\tanker.dm" +// END_INCLUDE #endif \ No newline at end of file diff --git a/mods/content/government/_government.dme b/mods/content/government/_government.dme index 62ec2d0408c..61285936c78 100644 --- a/mods/content/government/_government.dme +++ b/mods/content/government/_government.dme @@ -1,6 +1,6 @@ #ifndef MODPACK_GOVERNMENT #define MODPACK_GOVERNMENT -// BEGIN INCLUDE +// BEGIN_INCLUDE #include "government.dm" #include "datum\ai_holo.dm" #include "datum\ai_laws.dm" @@ -8,5 +8,5 @@ #include "items\cups.dm" #include "items\documents.dm" #include "ruins\ec_old_crash\ec_old_crash.dm" -#endif // END_INCLUDE +#endif diff --git a/mods/content/matchmaking/_matchmaking.dme b/mods/content/matchmaking/_matchmaking.dme index a619db79f3d..e40cde1f5f0 100644 --- a/mods/content/matchmaking/_matchmaking.dme +++ b/mods/content/matchmaking/_matchmaking.dme @@ -1,7 +1,9 @@ #ifndef CONTENT_PACK_MATCHMAKING #define CONTENT_PACK_MATCHMAKING -#include "matchmaking.dm" +// BEGIN_INCLUDE #include "matchmaker.dm" -#include "relations_types.dm" +#include "matchmaking.dm" #include "relations.dm" +#include "relations_types.dm" +// END_INCLUDE #endif \ No newline at end of file diff --git a/mods/content/matchmaking/matchmaker.dm b/mods/content/matchmaking/matchmaker.dm index 9509e7ccff1..75327f3f35c 100644 --- a/mods/content/matchmaking/matchmaker.dm +++ b/mods/content/matchmaking/matchmaker.dm @@ -151,10 +151,10 @@ var/global/datum/matchmaker/matchmaker = new() if(other && other.finalized) to_chat(holder.current,"Your connection with [other.holder] is now confirmed!") to_chat(other.holder.current,"Your connection with [holder] is now confirmed!") - var/list/candidates = filter_list(global.player_list, /mob/living/carbon/human) + var/list/candidates = filter_list(global.player_list, /mob/living/human) candidates -= holder.current candidates -= other.holder.current - for(var/mob/living/carbon/human/M in candidates) + for(var/mob/living/human/M in candidates) if(!M.mind || M.stat == DEAD || !valid_candidate(M.mind)) candidates -= M continue diff --git a/mods/content/matchmaking/relations_types.dm b/mods/content/matchmaking/relations_types.dm index 7a6f7bf6be4..f9a076402e0 100644 --- a/mods/content/matchmaking/relations_types.dm +++ b/mods/content/matchmaking/relations_types.dm @@ -15,11 +15,11 @@ /datum/relation/kid_friend/get_candidates() var/list/creche = ..() - var/mob/living/carbon/human/holdermob = holder.current + var/mob/living/human/holdermob = holder.current if(istype(holdermob)) for(var/datum/relation/kid in creche) - var/mob/living/carbon/human/kidmob = kid.holder.current + var/mob/living/human/kidmob = kid.holder.current if(!istype(kidmob)) continue if(abs(holdermob.get_age() - kidmob.get_age()) > 3) @@ -93,10 +93,10 @@ /datum/relation/spessnam/get_candidates() var/list/warbuds = ..() var/list/branchmates = list() - var/mob/living/carbon/human/holdermob = holder.current + var/mob/living/human/holdermob = holder.current if(istype(holdermob) && global.using_map && (global.using_map.flags & MAP_HAS_BRANCH)) for(var/datum/relation/buddy in warbuds) - var/mob/living/carbon/human/buddymob = buddy.holder.current + var/mob/living/human/buddymob = buddy.holder.current if(!istype(buddymob)) continue if(holdermob.char_branch == buddymob.char_branch) diff --git a/mods/content/mouse_highlights/_mouse_highlight.dme b/mods/content/mouse_highlights/_mouse_highlight.dme index 1d2fa36844b..a4cb9ea9d6a 100644 --- a/mods/content/mouse_highlights/_mouse_highlight.dme +++ b/mods/content/mouse_highlights/_mouse_highlight.dme @@ -1,6 +1,8 @@ #ifndef CONTENT_PACK_MOUSEOVER #define CONTENT_PACK_MOUSEOVER +// BEGIN_INCLUDE #include "mouse_highlight.dm" #include "mouse_highlight_client.dm" #include "mouse_highlight_prefs.dm" +// END_INCLUDE #endif \ No newline at end of file diff --git a/mods/content/pheromones/_pheromones.dme b/mods/content/pheromones/_pheromones.dme index 2cf997f8787..fecc8b376dd 100644 --- a/mods/content/pheromones/_pheromones.dme +++ b/mods/content/pheromones/_pheromones.dme @@ -1,8 +1,10 @@ #ifndef MODPACK_PHEROMONES #define MODPACK_PHEROMONES +// BEGIN_INCLUDE #include "_pheromones.dm" #include "pheromone_effect.dm" #include "pheromone_emotes.dm" #include "pheromone_implant.dm" #include "pheromone_mob.dm" +// END_INCLUDE #endif \ No newline at end of file diff --git a/mods/content/pheromones/pheromone_effect.dm b/mods/content/pheromones/pheromone_effect.dm index a894ce433a1..46e03dc1d8a 100644 --- a/mods/content/pheromones/pheromone_effect.dm +++ b/mods/content/pheromones/pheromone_effect.dm @@ -34,7 +34,7 @@ if(!marker) return for(var/client/C) - var/mob/living/carbon/human/H = C.mob + var/mob/living/human/H = C.mob if(istype(H) && H.can_read_pheromones()) C.images -= marker var/datum/extension/scent/custom/pheromone/smell = get_extension(src, /datum/extension/scent) @@ -46,7 +46,7 @@ marker.filters = filter(type="drop_shadow", color = color + "F0", size = 2, offset = 1, x = 0, y = 0) global.pheromone_markers |= marker for(var/client/C) - var/mob/living/carbon/human/H = C.mob + var/mob/living/human/H = C.mob if(istype(H) && H.can_read_pheromones()) C.images |= marker diff --git a/mods/content/pheromones/pheromone_emotes.dm b/mods/content/pheromones/pheromone_emotes.dm index 5e79267a65e..86d16a40003 100644 --- a/mods/content/pheromones/pheromone_emotes.dm +++ b/mods/content/pheromones/pheromone_emotes.dm @@ -77,7 +77,7 @@ if(!T) return to_chat(user, SPAN_NOTICE("You emit the [self_smell_descriptor ? "[self_smell_descriptor] " : ""]scent of [smell_message].")) - for(var/mob/living/carbon/human/H in viewers(world.view, user)) + for(var/mob/living/human/H in viewers(world.view, user)) if(H != user && H.stat == CONSCIOUS && H.can_read_pheromones()) to_chat(H, SPAN_NOTICE("\The [user] emits the [self_smell_descriptor ? "[self_smell_descriptor] " : ""]scent of [smell_message].")) diff --git a/mods/content/psionics/_psionics.dm b/mods/content/psionics/_psionics.dm index 37937aecb23..48fa276085e 100644 --- a/mods/content/psionics/_psionics.dm +++ b/mods/content/psionics/_psionics.dm @@ -25,7 +25,7 @@ . += "Only available for living mobs, sorry." . = jointext(., null) -/datum/preferences/copy_to(mob/living/carbon/human/character, is_preview_copy = FALSE) +/datum/preferences/copy_to(mob/living/human/character, is_preview_copy = FALSE) character = ..() var/datum/ability_handler/psionics/psi = !is_preview_copy && istype(character) && character.get_ability_handler(/datum/ability_handler/psionics) if(psi) diff --git a/mods/content/psionics/_psionics.dme b/mods/content/psionics/_psionics.dme index 53919e93eb0..7bf5f2f680d 100644 --- a/mods/content/psionics/_psionics.dme +++ b/mods/content/psionics/_psionics.dme @@ -53,6 +53,7 @@ #include "system\psionics\interface\ui.dm" #include "system\psionics\interface\ui_hub.dm" #include "system\psionics\interface\ui_toggles.dm" +#include "system\psionics\mob\borer_power.dm" #include "system\psionics\mob\mob.dm" #include "system\psionics\mob\mob_assay.dm" #include "system\psionics\mob\mob_interactions.dm" diff --git a/mods/content/psionics/datum/antagonists/foundation.dm b/mods/content/psionics/datum/antagonists/foundation.dm index 9e255a579a3..203595f01d5 100644 --- a/mods/content/psionics/datum/antagonists/foundation.dm +++ b/mods/content/psionics/datum/antagonists/foundation.dm @@ -25,7 +25,7 @@ default_outfit = /decl/hierarchy/outfit/foundation id_title = "Foundation Agent" -/decl/special_role/foundation/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/foundation/equip_role(var/mob/living/human/player) . = ..() if(.) player.set_psi_rank(PSI_REDACTION, 3, defer_update = TRUE) diff --git a/mods/content/psionics/datum/antagonists/paramount.dm b/mods/content/psionics/datum/antagonists/paramount.dm index 59fc119b9f7..3010cc5e9b9 100644 --- a/mods/content/psionics/datum/antagonists/paramount.dm +++ b/mods/content/psionics/datum/antagonists/paramount.dm @@ -23,7 +23,7 @@ gloves = /obj/item/clothing/gloves/grey id_type = /obj/item/card/id/syndicate -/decl/special_role/paramount/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/paramount/equip_role(var/mob/living/human/player) . = ..() if(.) player.set_psi_rank(PSI_REDACTION, 3, defer_update = TRUE) diff --git a/mods/content/psionics/datum/jobs.dm b/mods/content/psionics/datum/jobs.dm index 48f342be0fc..18b2adbf9c4 100644 --- a/mods/content/psionics/datum/jobs.dm +++ b/mods/content/psionics/datum/jobs.dm @@ -6,7 +6,7 @@ /datum/job/submap give_psionic_implant_on_join = FALSE -/datum/job/equip_job(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) +/datum/job/equip_job(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade) . = ..() if(psi_latency_chance && prob(psi_latency_chance)) H.set_psi_rank(pick(PSI_COERCION, PSI_REDACTION, PSI_ENERGISTICS, PSI_PSYCHOKINESIS), 1, defer_update = TRUE) diff --git a/mods/content/psionics/items/cerebro_enhancers.dm b/mods/content/psionics/items/cerebro_enhancers.dm index 01c1bfc56d3..f58cc158b38 100644 --- a/mods/content/psionics/items/cerebro_enhancers.dm +++ b/mods/content/psionics/items/cerebro_enhancers.dm @@ -38,7 +38,7 @@ deintegrate() return - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(istype(H) && H.get_equipped_item(slot_head_str) == src) integrate() return @@ -76,7 +76,7 @@ if(canremove) return - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(!istype(H) || H.get_equipped_item(slot_head_str) != src) canremove = TRUE return @@ -107,7 +107,7 @@ var/lastloc = loc . = ..() if(.) - var/mob/living/carbon/human/H = lastloc + var/mob/living/human/H = lastloc if(istype(H)) var/datum/ability_handler/psionics/psi = H.get_ability_handler(/datum/ability_handler/psionics) psi?.reset() @@ -132,7 +132,7 @@ to_chat(usr, SPAN_NOTICE("You still have [max_boosted_faculties - LAZYLEN(boosted_faculties)] facult[LAZYLEN(boosted_faculties) == 1 ? "y" : "ies"] to select. Use \the [src] in-hand to select them.")) return - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(!istype(H) || H.get_equipped_item(slot_head_str) != src) to_chat(usr, SPAN_WARNING("\The [src] must be worn on your head in order to be activated.")) return diff --git a/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm b/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm index cc6463ff670..bf810cba7f9 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm @@ -84,7 +84,7 @@ // Your head asplode. owner.take_damage(value, BRAIN) if(ishuman(owner)) - var/mob/living/carbon/human/pop = owner + var/mob/living/human/pop = owner if(pop.should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(pop, BP_BRAIN) if(sponge && sponge.damage >= sponge.max_damage) diff --git a/mods/content/psionics/system/psionics/complexus/complexus_process.dm b/mods/content/psionics/system/psionics/complexus/complexus_process.dm index 17dc1291403..13c6b7492a9 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus_process.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus_process.dm @@ -168,7 +168,7 @@ if(ishuman(owner)) - var/mob/living/carbon/human/H = owner + var/mob/living/human/H = owner // Fix some pain. if(heal_rate > 0) diff --git a/mods/content/psionics/system/psionics/events/mini_spasm.dm b/mods/content/psionics/system/psionics/events/mini_spasm.dm index cbf083b0195..fd130c723f0 100644 --- a/mods/content/psionics/system/psionics/events/mini_spasm.dm +++ b/mods/content/psionics/system/psionics/events/mini_spasm.dm @@ -34,12 +34,12 @@ set waitfor = FALSE if(isliving(victim) && !victim.isSynthetic()) - var/list/disabilities = list(NEARSIGHTED, EPILEPSY, TOURETTES, NERVOUS) - for(var/disability in disabilities) - if(victim.disabilities & disability) - disabilities -= disability - if(disabilities.len) - victim.disabilities |= pick(disabilities) + var/list/spasm_disabilities = list(GENE_COND_NEARSIGHTED, GENE_COND_EPILEPSY, GENE_COND_TOURETTES, GENE_COND_NERVOUS) + for(var/spasm_disability in spasm_disabilities) + if(victim.has_genetic_condition(spasm_disability)) + spasm_disabilities -= spasm_disability + if(length(spasm_disabilities)) + victim.add_genetic_condition(pick(spasm_disabilities)) var/datum/ability_handler/psionics/psi = victim.get_ability_handler(/datum/ability_handler/psionics) if(psi) diff --git a/mods/content/psionics/system/psionics/faculties/coercion.dm b/mods/content/psionics/system/psionics/faculties/coercion.dm index bc597cb3b7c..bd3f6de8da3 100644 --- a/mods/content/psionics/system/psionics/faculties/coercion.dm +++ b/mods/content/psionics/system/psionics/faculties/coercion.dm @@ -117,7 +117,7 @@ min_rank = PSI_RANK_MASTER use_description = "Target the arms or hands on disarm intent to use a ranged attack that may rip the weapons away from the target." -/decl/psionic_power/coercion/spasm/invoke(var/mob/living/user, var/mob/living/carbon/human/target) +/decl/psionic_power/coercion/spasm/invoke(var/mob/living/user, var/mob/living/human/target) if(!istype(target)) return FALSE diff --git a/mods/content/psionics/system/psionics/faculties/redaction.dm b/mods/content/psionics/system/psionics/faculties/redaction.dm index e427fd96945..97354f41a05 100644 --- a/mods/content/psionics/system/psionics/faculties/redaction.dm +++ b/mods/content/psionics/system/psionics/faculties/redaction.dm @@ -46,7 +46,7 @@ min_rank = PSI_RANK_OPERANT use_description = "Target a patient while on help intent at melee range to mend a variety of maladies, such as bleeding or broken bones. Higher ranks in this faculty allow you to mend a wider range of problems." -/decl/psionic_power/redaction/mend/invoke(var/mob/living/user, var/mob/living/carbon/human/target) +/decl/psionic_power/redaction/mend/invoke(var/mob/living/user, var/mob/living/human/target) if(!istype(user) || !istype(target)) return FALSE . = ..() @@ -129,7 +129,7 @@ min_rank = PSI_RANK_GRANDMASTER use_description = "Target a patient while on help intent at melee range to cleanse radiation and genetic damage from a patient." -/decl/psionic_power/redaction/cleanse/invoke(var/mob/living/user, var/mob/living/carbon/human/target) +/decl/psionic_power/redaction/cleanse/invoke(var/mob/living/user, var/mob/living/human/target) if(!istype(user) || !istype(target)) return FALSE . = ..() diff --git a/mods/content/psionics/system/psionics/mob/borer_power.dm b/mods/content/psionics/system/psionics/mob/borer_power.dm index 4e17326877f..b48874f08e8 100644 --- a/mods/content/psionics/system/psionics/mob/borer_power.dm +++ b/mods/content/psionics/system/psionics/mob/borer_power.dm @@ -1,12 +1,8 @@ +#ifdef CONTENT_PACK_BORERS /mob/living/simple_animal/borer var/image/aura_image /mob/living/simple_animal/borer/Initialize(var/mapload, var/gen=1) - - if(!SSmodpacks.loaded_modpacks["Cortical Borers"]) // Borer module not included. - log_debug("Attempted spawn of stubbed mobtype [type].") - return INITIALIZE_HINT_QDEL - . = ..() aura_image = create_aura_image(src) aura_image.color = "#aaffaa" @@ -57,3 +53,4 @@ set_ability_cooldown(15 SECONDS) return TRUE +#endif \ No newline at end of file diff --git a/mods/content/psionics/system/psionics/mob/mob.dm b/mods/content/psionics/system/psionics/mob/mob.dm index 47a2f987dee..e51d5aeedae 100644 --- a/mods/content/psionics/system/psionics/mob/mob.dm +++ b/mods/content/psionics/system/psionics/mob/mob.dm @@ -29,7 +29,7 @@ return TRUE return FALSE -/mob/living/carbon/human/check_shields(var/damage = 0, var/atom/damage_source = null, var/mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") +/mob/living/human/check_shields(var/damage = 0, var/atom/damage_source = null, var/mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") var/obj/item/projectile/P = damage_source var/datum/ability_handler/psionics/psi = get_ability_handler(/datum/ability_handler/psionics) if(istype(P) && !P.disrupts_psionics() && psi && P.starting && prob(psi.get_armour(SSmaterials.get_armor_key(P.atom_damage_type, P.damage_flags())) * 0.5) && psi.spend_power(round(damage/10))) diff --git a/mods/content/shackles/laws_pref.dm b/mods/content/shackles/laws_pref.dm index 77c3b8baffa..84514909053 100644 --- a/mods/content/shackles/laws_pref.dm +++ b/mods/content/shackles/laws_pref.dm @@ -102,7 +102,7 @@ . = ..() if(!ishuman(.)) return - var/mob/living/carbon/human/new_character = . + var/mob/living/human/new_character = . if(new_character.client?.prefs?.is_shackled && new_character.get_bodytype().can_be_shackled && new_character.mind) new_character.mind.set_shackle(new_character.client.prefs.get_lawset(), TRUE) // Silent as laws will be announced on Login() anyway. diff --git a/mods/content/xenobiology/_xenobiology.dme b/mods/content/xenobiology/_xenobiology.dme index 144a87c3142..11a5f3972c6 100644 --- a/mods/content/xenobiology/_xenobiology.dme +++ b/mods/content/xenobiology/_xenobiology.dme @@ -1,56 +1,58 @@ #ifndef CONTENT_PACK_XENOBIO #define CONTENT_PACK_XENOBIO +// BEGIN_INCLUDE #include "_xenobiology.dm" #include "achievement.dm" #include "circuit.dm" #include "emotes.dm" #include "food.dm" #include "overrides.dm" -#include "colours/_colour.dm" -#include "colours/colour_adamantine.dm" -#include "colours/colour_black.dm" -#include "colours/colour_blue.dm" -#include "colours/colour_cerulean.dm" -#include "colours/colour_dark_blue.dm" -#include "colours/colour_dark_purple.dm" -#include "colours/colour_gold.dm" -#include "colours/colour_green.dm" -#include "colours/colour_grey.dm" -#include "colours/colour_light_pink.dm" -#include "colours/colour_metal.dm" -#include "colours/colour_oil.dm" -#include "colours/colour_orange.dm" -#include "colours/colour_pink.dm" -#include "colours/colour_purple.dm" -#include "colours/colour_pyrite.dm" -#include "colours/colour_quantum.dm" -#include "colours/colour_rainbow.dm" -#include "colours/colour_red.dm" -#include "colours/colour_sepia.dm" -#include "colours/colour_silver.dm" -#include "colours/colour_yellow.dm" -#include "mobs/critter_slime.dm" -#include "mobs/slime_feeding_helpers.dm" -#include "slime/_slime.dm" -#include "slime/death.dm" -#include "slime/examine.dm" -#include "slime/feeding.dm" -#include "slime/items.dm" -#include "slime/items_extract_enhancer.dm" -#include "slime/items_cell.dm" -#include "slime/items_potion.dm" -#include "slime/items_steroid.dm" -#include "slime/life.dm" -#include "slime/powers.dm" -#include "slime/say.dm" -#include "slime/slime_AI.dm" -#include "slime/slime_click.dm" -#include "slime/slime_codex.dm" -#include "slime/slime_commands.dm" -#include "slime/slime_comments.dm" -#include "slime/slime_follow.dm" -#include "slime/slime_hud.dm" -#include "slime/slime_reagents.dm" -#include "slime/slime_surgery.dm" -#include "slime/slime_update_icon.dm" +#include "colours\_colour.dm" +#include "colours\colour_adamantine.dm" +#include "colours\colour_black.dm" +#include "colours\colour_blue.dm" +#include "colours\colour_cerulean.dm" +#include "colours\colour_dark_blue.dm" +#include "colours\colour_dark_purple.dm" +#include "colours\colour_gold.dm" +#include "colours\colour_green.dm" +#include "colours\colour_grey.dm" +#include "colours\colour_light_pink.dm" +#include "colours\colour_metal.dm" +#include "colours\colour_oil.dm" +#include "colours\colour_orange.dm" +#include "colours\colour_pink.dm" +#include "colours\colour_purple.dm" +#include "colours\colour_pyrite.dm" +#include "colours\colour_quantum.dm" +#include "colours\colour_rainbow.dm" +#include "colours\colour_red.dm" +#include "colours\colour_sepia.dm" +#include "colours\colour_silver.dm" +#include "colours\colour_yellow.dm" +#include "mobs\critter_slime.dm" +#include "mobs\slime_feeding_helpers.dm" +#include "slime\_slime.dm" +#include "slime\death.dm" +#include "slime\examine.dm" +#include "slime\feeding.dm" +#include "slime\items.dm" +#include "slime\items_cell.dm" +#include "slime\items_extract_enhancer.dm" +#include "slime\items_potion.dm" +#include "slime\items_steroid.dm" +#include "slime\life.dm" +#include "slime\powers.dm" +#include "slime\say.dm" +#include "slime\slime_AI.dm" +#include "slime\slime_click.dm" +#include "slime\slime_codex.dm" +#include "slime\slime_commands.dm" +#include "slime\slime_comments.dm" +#include "slime\slime_follow.dm" +#include "slime\slime_hud.dm" +#include "slime\slime_reagents.dm" +#include "slime\slime_surgery.dm" +#include "slime\slime_update_icon.dm" +// END_INCLUDE #endif \ No newline at end of file diff --git a/mods/content/xenobiology/colours/colour_silver.dm b/mods/content/xenobiology/colours/colour_silver.dm index cfc1fb8cb71..8399b9debd4 100644 --- a/mods/content/xenobiology/colours/colour_silver.dm +++ b/mods/content/xenobiology/colours/colour_silver.dm @@ -16,7 +16,7 @@ var/location = get_turf(holder.get_reaction_loc()) if(location) playsound(location, 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(location, null)) + for(var/mob/living/human/M in viewers(location, null)) if(M.eyecheck() < FLASH_PROTECTION_MODERATE) M.flash_eyes() for(var/i = 1, i <= 4 + rand(1,2), i++) diff --git a/mods/content/xenobiology/mobs/slime_feeding_helpers.dm b/mods/content/xenobiology/mobs/slime_feeding_helpers.dm index 365e5df78dd..bebb1ed1669 100644 --- a/mods/content/xenobiology/mobs/slime_feeding_helpers.dm +++ b/mods/content/xenobiology/mobs/slime_feeding_helpers.dm @@ -23,7 +23,7 @@ var/global/list/slime_pain_messages = list( qdel(src) . = rand(2,3) -/mob/living/carbon/human/eaten_by_slime() +/mob/living/human/eaten_by_slime() var/list/limbs = get_external_organs() if(LAZYLEN(limbs) > 1) var/obj/item/organ/external/E = pick(limbs) @@ -53,7 +53,7 @@ var/global/list/slime_pain_messages = list( if(can_feel_pain()) to_chat(src, SPAN_DANGER(pick(global.slime_pain_messages))) -/mob/living/carbon/human/handle_additional_slime_effects() +/mob/living/human/handle_additional_slime_effects() custom_pain(pick(global.slime_pain_messages),100) // Called by a feeding slime on the victim. diff --git a/mods/content/xenobiology/overrides.dm b/mods/content/xenobiology/overrides.dm index 5ab370b3c58..a5c39ef2743 100644 --- a/mods/content/xenobiology/overrides.dm +++ b/mods/content/xenobiology/overrides.dm @@ -39,7 +39,7 @@ . = ..() can_hold |= /obj/item/slime_extract -/mob/living/carbon/human/say_understands(var/mob/other,var/decl/language/speaking = null) +/mob/living/human/say_understands(var/mob/other,var/decl/language/speaking = null) . = (!speaking && isslime(other)) || ..() /mob/living/brain/say_understands(var/mob/other,var/decl/language/speaking = null) diff --git a/mods/content/xenobiology/slime/_slime.dm b/mods/content/xenobiology/slime/_slime.dm index f337ce94b35..11db21dc83c 100644 --- a/mods/content/xenobiology/slime/_slime.dm +++ b/mods/content/xenobiology/slime/_slime.dm @@ -350,18 +350,18 @@ . += "Electric charge strength:\t[powerlevel]" . += "Health:\t[get_health_percent()]%" - var/list/mutations = slime_data.descendants?.Copy() - if(!mutations.len) + var/list/slime_mutations = slime_data.descendants?.Copy() + if(!length(slime_mutations)) . += "This slime will never mutate." else var/list/mutationChances = list() - for(var/i in mutations) + for(var/i in slime_mutations) if(i == slime_type) continue if(mutationChances[i]) - mutationChances[i] += mutation_chance / mutations.len + mutationChances[i] += mutation_chance / length(slime_mutations) else - mutationChances[i] = mutation_chance / mutations.len + mutationChances[i] = mutation_chance / length(slime_mutations) var/list/mutationTexts = list("[slime_data.name] ([100 - mutation_chance]%)") for(var/i in mutationChances) diff --git a/mods/content/xenobiology/slime/feeding.dm b/mods/content/xenobiology/slime/feeding.dm index 1099bf3b84e..0a208e3c5a6 100644 --- a/mods/content/xenobiology/slime/feeding.dm +++ b/mods/content/xenobiology/slime/feeding.dm @@ -22,7 +22,7 @@ to_chat(src, SPAN_WARNING("\The [M] is protected from your feeding.")) return FEED_RESULT_INVALID if(ishuman(M)) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M if((H.species.species_flags & SPECIES_FLAG_NO_POISON) || (H.get_bodytype()?.body_flags & BODY_FLAG_NO_DNA)) if(!silent) to_chat(src, SPAN_WARNING("You cannot feed on \the [M].")) diff --git a/mods/content/xenobiology/slime/items.dm b/mods/content/xenobiology/slime/items.dm index df20c560312..e2a4b4c3774 100644 --- a/mods/content/xenobiology/slime/items.dm +++ b/mods/content/xenobiology/slime/items.dm @@ -50,8 +50,7 @@ add_to_reagents(/decl/material/liquid/slimejelly, 30) /obj/item/slime_extract/on_reagent_change() - ..() - if(reagents?.total_volume) + if((. = ..()) && reagents?.total_volume) var/decl/slime_colour/slime_data = GET_DECL(slime_type) slime_data.handle_reaction(reagents) @@ -100,7 +99,7 @@ return TRUE visible_message(SPAN_WARNING("A craggy humanoid figure coalesces into being!")) - var/mob/living/carbon/human/G = new(src.loc) + var/mob/living/human/G = new(src.loc) G.set_species(SPECIES_GOLEM) G.key = ghost.key diff --git a/mods/gamemodes/deity/extensions/deity_be_near.dm b/mods/gamemodes/deity/extensions/deity_be_near.dm index d7494667b50..5eed3ae1fe4 100644 --- a/mods/gamemodes/deity/extensions/deity_be_near.dm +++ b/mods/gamemodes/deity/extensions/deity_be_near.dm @@ -50,7 +50,7 @@ if(!ishuman(I.loc)) return FALSE - var/mob/living/carbon/human/H = I.loc + var/mob/living/human/H = I.loc if(H.get_equipped_slot_for_item(I) != slot_wear_suit_str) return FALSE if(expected_helmet && !istype(H.get_equipped_item(slot_head_str), expected_helmet)) diff --git a/mods/gamemodes/deity/forms/narsie/items.dm b/mods/gamemodes/deity/forms/narsie/items.dm index 121a142efcd..57d1b807a67 100644 --- a/mods/gamemodes/deity/forms/narsie/items.dm +++ b/mods/gamemodes/deity/forms/narsie/items.dm @@ -17,7 +17,7 @@ if(L.mind) multiplier++ if(ishuman(L)) - var/mob/living/carbon/human/H = L + var/mob/living/human/H = L if(H.should_have_organ(BP_HEART)) multiplier++ if(L.stat == DEAD) diff --git a/mods/gamemodes/deity/forms/narsie/narsie.dm b/mods/gamemodes/deity/forms/narsie/narsie.dm index 8dc0fbbb0f8..12694187967 100644 --- a/mods/gamemodes/deity/forms/narsie/narsie.dm +++ b/mods/gamemodes/deity/forms/narsie/narsie.dm @@ -41,7 +41,7 @@ charge = min(100, charge * 0.25) if(prob(charge)) to_chat(user, SPAN_WARNING("You feel drained...")) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(istype(H) && H.should_have_organ(BP_HEART)) H.vessel.remove_any(charge) else diff --git a/mods/gamemodes/deity/forms/narsie/structures.dm b/mods/gamemodes/deity/forms/narsie/structures.dm index 1f8dea6259e..2f14ef5d237 100644 --- a/mods/gamemodes/deity/forms/narsie/structures.dm +++ b/mods/gamemodes/deity/forms/narsie/structures.dm @@ -83,7 +83,7 @@ /obj/structure/deity/blood_stone/attack_hand(var/mob/user) if(!linked_god || !linked_god.is_follower(user, silent = 1) || !ishuman(user)) return ..() - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user user.visible_message(SPAN_WARNING("\The [user] calmly slices their finger on \the [src], smeering it over the black stone."),SPAN_WARNING("You slowly slide your finger down one of \the [src]'s sharp edges, smeering it over its smooth surface.")) while(do_after(H,50,src)) user.audible_message("\The [user] utters something under their breath.", SPAN_OCCULT("You mutter a dark prayer to your master as you feel the stone eat away at your lifeforce.")) diff --git a/mods/gamemodes/deity/forms/starlight/spells/veil_of_shadows.dm b/mods/gamemodes/deity/forms/starlight/spells/veil_of_shadows.dm index a103f71a8fb..e47edecd082 100644 --- a/mods/gamemodes/deity/forms/starlight/spells/veil_of_shadows.dm +++ b/mods/gamemodes/deity/forms/starlight/spells/veil_of_shadows.dm @@ -18,7 +18,7 @@ . = null /spell/veil_of_shadows/cast(var/list/targets, var/mob/user) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user H.AddMovementHandler(/datum/movement_handler/mob/incorporeal) if(H.add_cloaking_source(src)) H.visible_message(SPAN_WARNING("\The [H] shrinks from view!")) @@ -26,7 +26,7 @@ timer_id = addtimer(CALLBACK(src,PROC_REF(cancel_veil)),duration, TIMER_STOPPABLE) /spell/veil_of_shadows/proc/cancel_veil() - var/mob/living/carbon/human/H = holder + var/mob/living/human/H = holder H.RemoveMovementHandler(/datum/movement_handler/mob/incorporeal) deltimer(timer_id) timer_id = null @@ -38,7 +38,7 @@ events_repository.register(/decl/observ/moved, H,src,PROC_REF(drop_cloak)) /spell/veil_of_shadows/proc/drop_cloak() - var/mob/living/carbon/human/H = holder + var/mob/living/human/H = holder if(H.remove_cloaking_source(src)) H.visible_message(SPAN_NOTICE("\The [H] appears from nowhere!")) events_repository.unregister(/decl/observ/moved, H,src) diff --git a/mods/gamemodes/deity/forms/starlight/structures.dm b/mods/gamemodes/deity/forms/starlight/structures.dm index 9d8ff298ccb..83111f55c28 100644 --- a/mods/gamemodes/deity/forms/starlight/structures.dm +++ b/mods/gamemodes/deity/forms/starlight/structures.dm @@ -61,7 +61,7 @@ to_chat(linked_god,SPAN_WARNING("\The [src] disappears from your lack of power!")) qdel(src) return - var/mob/living/carbon/human/target + var/mob/living/human/target if(target_ref) target = target_ref.resolve() if(target) @@ -87,7 +87,7 @@ power_drain -= 3 else //Get new target - var/mob/living/carbon/human/T = locate() in get_turf(src) + var/mob/living/human/T = locate() in get_turf(src) if(T) target_ref = weakref(T) start_time = world.time @@ -123,7 +123,7 @@ if(href_list["accept"] && istype(user,/mob/living/starlight_soul)) if(href_list["accept"] != looking_for) return TOPIC_HANDLED - var/mob/living/carbon/human/H = new(get_turf(src)) + var/mob/living/human/H = new(get_turf(src)) user.mind.transfer_to(H) H.set_species(possible_forms[looking_for]["species"]) for(var/s in possible_forms[looking_for]["spells"]) diff --git a/mods/gamemodes/deity/mobs/phenomena/narsie.dm b/mods/gamemodes/deity/mobs/phenomena/narsie.dm index 9bdc1556d01..52e69b66b47 100644 --- a/mods/gamemodes/deity/mobs/phenomena/narsie.dm +++ b/mods/gamemodes/deity/mobs/phenomena/narsie.dm @@ -3,9 +3,9 @@ desc = "Take pity on a follower, converting a pitance of your power into blood. Don't let them forget your mercy." cost = 20 flags = PHENOMENA_FOLLOWER - expected_type = /mob/living/carbon/human + expected_type = /mob/living/human -/datum/phenomena/exude_blood/can_activate(var/mob/living/carbon/human/H) +/datum/phenomena/exude_blood/can_activate(var/mob/living/human/H) if(!..()) return 0 @@ -14,7 +14,7 @@ return 0 return 1 -/datum/phenomena/exude_blood/activate(var/mob/living/carbon/human/H, var/mob/living/deity/user) +/datum/phenomena/exude_blood/activate(var/mob/living/human/H, var/mob/living/deity/user) H.adjust_blood(30) to_chat(H,SPAN_NOTICE("You feel a rush as new blood enters your system.")) diff --git a/mods/gamemodes/deity/mobs/phenomena/starlight.dm b/mods/gamemodes/deity/mobs/phenomena/starlight.dm index 6b6ad0bbebd..d02c4ed6919 100644 --- a/mods/gamemodes/deity/mobs/phenomena/starlight.dm +++ b/mods/gamemodes/deity/mobs/phenomena/starlight.dm @@ -4,7 +4,7 @@ cost = 100 cooldown = 60 SECONDS flags = PHENOMENA_FOLLOWER - expected_type = /mob/living/carbon/human + expected_type = /mob/living/human var/static/list/possible_forms = list( "Champion" = list("description" = "A protector of the faith. Fully protected by knightly armor, a Champion can shoot fire from their hands.", "armor" = /obj/item/clothing/suit/armor/sunsuit, @@ -31,7 +31,7 @@ return valid_for_herald(a) /datum/phenomena/herald/proc/valid_for_herald(var/a) - var/mob/living/carbon/human/H = a + var/mob/living/human/H = a if(!istype(H)) return FALSE var/obj/item/I = H.get_equipped_item(slot_wear_suit_str) @@ -81,7 +81,7 @@ linked.remove_phenomena(name) show_browser(linked, null, "window=herald") -/datum/phenomena/herald/activate(var/mob/living/carbon/human/H) +/datum/phenomena/herald/activate(var/mob/living/human/H) var/list/html = list() html += "

Heralds

" html += "
Pick the type of herald you want.
" diff --git a/mods/gamemodes/deity/mobs/phenomena/transmutation.dm b/mods/gamemodes/deity/mobs/phenomena/transmutation.dm index 748f59d50c9..e86c92ec4d4 100644 --- a/mods/gamemodes/deity/mobs/phenomena/transmutation.dm +++ b/mods/gamemodes/deity/mobs/phenomena/transmutation.dm @@ -17,9 +17,9 @@ desc = "Convert your mortal followers into immortal stone beings." cost = 300 flags = PHENOMENA_NEAR_STRUCTURE|PHENOMENA_FOLLOWER - expected_type = /mob/living/carbon/human + expected_type = /mob/living/human -/datum/phenomena/rock_form/activate(var/mob/living/carbon/human/H) +/datum/phenomena/rock_form/activate(var/mob/living/human/H) ..() to_chat(H, SPAN_DANGER("You feel your body harden as it rapidly is transformed into living crystal!")) H.change_species(SPECIES_GOLEM) diff --git a/mods/gamemodes/deity/structures/pylon.dm b/mods/gamemodes/deity/structures/pylon.dm index 63e58806915..2d61c8c76bd 100644 --- a/mods/gamemodes/deity/structures/pylon.dm +++ b/mods/gamemodes/deity/structures/pylon.dm @@ -42,7 +42,7 @@ intuned -= L events_repository.unregister(/decl/observ/destroyed, L, src) -/obj/structure/deity/pylon/OnTopic(var/mob/living/carbon/human/user, var/href_list) +/obj/structure/deity/pylon/OnTopic(var/mob/living/human/user, var/href_list) if(href_list["vision_jump"]) if(istype(user)) to_chat(user,SPAN_WARNING("You feel your body lurch uncomfortably as your consciousness jumps to \the [src]")) diff --git a/mods/gamemodes/gamemode.dm b/mods/gamemodes/gamemode.dm new file mode 100644 index 00000000000..63e3b0e35c7 --- /dev/null +++ b/mods/gamemodes/gamemode.dm @@ -0,0 +1,2 @@ +/decl/configuration_category/gamemode + abstract_type = /decl/configuration_category/gamemode \ No newline at end of file diff --git a/mods/gamemodes/heist/_heist.dm b/mods/gamemodes/heist/_heist.dm new file mode 100644 index 00000000000..4183fc91a90 --- /dev/null +++ b/mods/gamemodes/heist/_heist.dm @@ -0,0 +1,2 @@ +/decl/modpack/heist + name = "Heist Gamemode" \ No newline at end of file diff --git a/mods/gamemodes/heist/_heist.dme b/mods/gamemodes/heist/_heist.dme new file mode 100644 index 00000000000..57bf5c58b42 --- /dev/null +++ b/mods/gamemodes/heist/_heist.dme @@ -0,0 +1,21 @@ +#ifndef GAMEMODE_PACK_HEIST +#define GAMEMODE_PACK_HEIST + +#ifdef MODPACK_VOX +#warn Vox modpack loaded before Heist modpack, compatibility features will be missing. +#endif +#ifdef GAMEMODE_PACK_MIXED +#warn Mixed gamemodes modpack loaded before Heist modpack, Heist combination modes will be missing. +#endif + +// BEGIN_INCLUDE +#include "_heist.dm" +#include "areas.dm" +#include "gamemode.dm" +#include "heist_base.dm" +#include "outfit.dm" +#include "presets.dm" +#include "shuttle.dm" +#include "special_role.dm" +// END_INCLUDE +#endif \ No newline at end of file diff --git a/mods/gamemodes/heist/areas.dm b/mods/gamemodes/heist/areas.dm new file mode 100644 index 00000000000..22c772cc310 --- /dev/null +++ b/mods/gamemodes/heist/areas.dm @@ -0,0 +1,18 @@ +//Areas +/area/map_template/skipjack_station + name = "Raider Outpost" + icon_state = "yellow" + requires_power = 0 + req_access = list(access_raider) + +/area/map_template/skipjack_station/start + name = "\improper Skipjack" + icon_state = "yellow" + req_access = list(access_raider) + area_flags = AREA_FLAG_RAD_SHIELDED | AREA_FLAG_ION_SHIELDED + +/area/map_template/syndicate_mothership/raider_base + name = "\improper Raider Base" + requires_power = 0 + dynamic_lighting = FALSE + req_access = list(access_raider) \ No newline at end of file diff --git a/code/game/gamemodes/heist/heist.dm b/mods/gamemodes/heist/gamemode.dm similarity index 94% rename from code/game/gamemodes/heist/heist.dm rename to mods/gamemodes/heist/gamemode.dm index c2bedd494d5..34494789acf 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/mods/gamemodes/heist/gamemode.dm @@ -1,7 +1,3 @@ -/* -HEIST ROUNDTYPE -*/ - /decl/game_mode/heist name = "Heist" uid = "heist" diff --git a/mods/gamemodes/heist/heist_base.dm b/mods/gamemodes/heist/heist_base.dm new file mode 100644 index 00000000000..20c8c18d2a6 --- /dev/null +++ b/mods/gamemodes/heist/heist_base.dm @@ -0,0 +1,12 @@ +/datum/map_template/ruin/antag_spawn/heist + name = "Heist Base" + prefix = null + mappaths = list( + "mods/gamemodes/heist/heist_base.dmm" + ) + modify_tag_vars = FALSE + shuttles_to_initialise = list(/datum/shuttle/autodock/multi/antag/skipjack) + apc_test_exempt_areas = list( + /area/map_template/skipjack_station = NO_SCRUBBER|NO_VENT|NO_APC, + /area/map_template/syndicate_mothership/raider_base = NO_SCRUBBER|NO_VENT|NO_APC + ) diff --git a/maps/antag_spawn/heist/heist_base.dmm b/mods/gamemodes/heist/heist_base.dmm similarity index 99% rename from maps/antag_spawn/heist/heist_base.dmm rename to mods/gamemodes/heist/heist_base.dmm index 8d560c0db89..9d5c5150cf7 100644 --- a/maps/antag_spawn/heist/heist_base.dmm +++ b/mods/gamemodes/heist/heist_base.dmm @@ -1011,7 +1011,7 @@ /obj/machinery/door/blast/regular/open{ id_tag = "SkipjackShuttersNorth"; name = "Blast Doors"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/brown, @@ -1378,7 +1378,7 @@ dir = 4; id_tag = "SkipjackShuttersWest"; name = "Skipjack Shutters"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/brown, @@ -1405,7 +1405,7 @@ dir = 8; id_tag = "SkipjackShuttersEast"; name = "Skipjack Shutters"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/brown, @@ -1477,7 +1477,7 @@ dir = 4; id_tag = "SkipjackShuttersWest"; name = "Skipjack Shutters"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /turf/floor/plating, diff --git a/maps/antag_spawn/heist/heist_outfit.dm b/mods/gamemodes/heist/outfit.dm similarity index 97% rename from maps/antag_spawn/heist/heist_outfit.dm rename to mods/gamemodes/heist/outfit.dm index 8cc2ea9fb81..d962c2e6138 100644 --- a/maps/antag_spawn/heist/heist_outfit.dm +++ b/mods/gamemodes/heist/outfit.dm @@ -66,7 +66,7 @@ randomize_clothing() . = ..() -/decl/hierarchy/outfit/raider/equip_outfit(mob/living/carbon/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) +/decl/hierarchy/outfit/raider/equip_outfit(mob/living/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) randomize_clothing() . = ..() if(. && H) diff --git a/mods/gamemodes/heist/presets.dm b/mods/gamemodes/heist/presets.dm new file mode 100644 index 00000000000..0d74dd38c16 --- /dev/null +++ b/mods/gamemodes/heist/presets.dm @@ -0,0 +1,21 @@ +/mob/living/simple_animal/hostile/retaliate/parrot/pirate + name = "\proper Meatbag" + emote_speech = list("Yaaar!","Squaaak!","Fight me Matey!","BAWWWWK Vox trying to eat me!") + +/obj/machinery/network/telecomms_hub/raider + initial_network_id = "piratenet" + req_access = list(access_raider) + channels = list( + COMMON_FREQUENCY_DATA, + list( + "name" = "Raider", + "key" = "t", + "frequency" = PUB_FREQ, + "color" = COMMS_COLOR_SYNDICATE, + "span_class" = CSS_CLASS_RADIO, + "secured" = access_raider + ) + ) + +/obj/structure/sign/warning/nosmoking_1/heist + desc = "A warning sign which reads 'NO SMOKING'. Someone has scratched a variety of crude words in gutter across the entire sign." \ No newline at end of file diff --git a/mods/gamemodes/heist/shuttle.dm b/mods/gamemodes/heist/shuttle.dm new file mode 100644 index 00000000000..d170e6b9356 --- /dev/null +++ b/mods/gamemodes/heist/shuttle.dm @@ -0,0 +1,24 @@ +/datum/shuttle/autodock/multi/antag/skipjack + name = "Skipjack" + defer_initialisation = TRUE + warmup_time = 0 + destination_tags = list( + "nav_skipjack_start" + ) + shuttle_area = /area/map_template/skipjack_station/start + dock_target = "skipjack_shuttle" + current_location = "nav_skipjack_start" + announcer = "Proximity Sensor Array" + home_waypoint = "nav_skipjack_start" + arrival_message = "Attention, vessel detected entering vessel proximity." + departure_message = "Attention, vessel detected leaving vessel proximity." + +/obj/effect/shuttle_landmark/skipjack/start + name = "Raider Outpost" + landmark_tag = "nav_skipjack_start" + docking_controller = "skipjack_base" + +/obj/machinery/computer/shuttle_control/multi/raider + name = "skipjack control console" + initial_access = list(access_raider) + shuttle_tag = "Skipjack" diff --git a/maps/antag_spawn/heist/heist_antag.dm b/mods/gamemodes/heist/special_role.dm similarity index 82% rename from maps/antag_spawn/heist/heist_antag.dm rename to mods/gamemodes/heist/special_role.dm index f0798fd417c..47d67d52e1c 100644 --- a/maps/antag_spawn/heist/heist_antag.dm +++ b/mods/gamemodes/heist/special_role.dm @@ -37,23 +37,23 @@ while(i<= max_objectives) var/list/goals = list("kidnap","loot","salvage") var/goal = pick(goals) - var/datum/objective/heist/O + var/datum/objective/O if(goal == "kidnap") goals -= "kidnap" - O = new /datum/objective/heist/kidnap() + O = new /datum/objective/kidnap() else if(goal == "loot") - O = new /datum/objective/heist/loot() + O = new /datum/objective/loot() else - O = new /datum/objective/heist/salvage() - O.choose_target() + O = new /datum/objective/salvage() + O.find_target() global_objectives |= O i++ - global_objectives |= new /datum/objective/heist/preserve_crew + global_objectives |= new /datum/objective/preserve_crew return 1 -/decl/special_role/raider/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/raider/equip_role(var/mob/living/human/player) default_outfit = LAZYACCESS(outfits_per_species, player.species.name) || initial(default_outfit) . = ..() diff --git a/mods/gamemodes/mixed/_mixed.dm b/mods/gamemodes/mixed/_mixed.dm new file mode 100644 index 00000000000..c1c9167d414 --- /dev/null +++ b/mods/gamemodes/mixed/_mixed.dm @@ -0,0 +1,2 @@ +/decl/modpack/mixed_modes + name = "Mixed Gamemodes" \ No newline at end of file diff --git a/mods/gamemodes/mixed/_mixed.dme b/mods/gamemodes/mixed/_mixed.dme new file mode 100644 index 00000000000..411ab39aa4c --- /dev/null +++ b/mods/gamemodes/mixed/_mixed.dme @@ -0,0 +1,15 @@ +#ifndef GAMEMODE_PACK_MIXED +#define GAMEMODE_PACK_MIXED +// BEGIN_INCLUDE +#include "_mixed.dm" +#if defined(GAMEMODE_PACK_HEIST) // TODO: && defined(GAMEMODE_PACK_MERCENARY) +#include "crossfire.dm" +#endif +#if defined(GAMEMODE_PACK_REVOLUTIONARY) +#include "siege.dm" +#endif +#if defined(GAMEMODE_PACK_REVOLUTIONARY) // TODO: && defined(GAMEMODE_PACK_CULT) +#include "uprising.dm" +#endif +// END_INCLUDE +#endif \ No newline at end of file diff --git a/code/game/gamemodes/mixed/crossfire.dm b/mods/gamemodes/mixed/crossfire.dm similarity index 87% rename from code/game/gamemodes/mixed/crossfire.dm rename to mods/gamemodes/mixed/crossfire.dm index f031d36a780..5ebc51fb56e 100644 --- a/code/game/gamemodes/mixed/crossfire.dm +++ b/mods/gamemodes/mixed/crossfire.dm @@ -1,5 +1,5 @@ /decl/game_mode/crossfire - name = "Mercenary & Heist" + name = "Crossfire" round_description = "Mercenaries and raiders are preparing for a nice visit..." extended_round_description = "Nothing can possibly go wrong with lots of people and lots of guns, right?" uid = "crossfire" @@ -10,4 +10,4 @@ /decl/special_role/raider, /decl/special_role/mercenary ) - require_all_templates = TRUE + require_all_templates = TRUE \ No newline at end of file diff --git a/code/game/gamemodes/mixed/siege.dm b/mods/gamemodes/mixed/siege.dm similarity index 100% rename from code/game/gamemodes/mixed/siege.dm rename to mods/gamemodes/mixed/siege.dm diff --git a/code/game/gamemodes/mixed/uprising.dm b/mods/gamemodes/mixed/uprising.dm similarity index 100% rename from code/game/gamemodes/mixed/uprising.dm rename to mods/gamemodes/mixed/uprising.dm diff --git a/mods/gamemodes/ninja/_ninja.dm b/mods/gamemodes/ninja/_ninja.dm new file mode 100644 index 00000000000..ad3f81a6b4e --- /dev/null +++ b/mods/gamemodes/ninja/_ninja.dm @@ -0,0 +1,8 @@ +/decl/modpack/ninja + name = "Ninja Gamemode" + +/decl/modpack/ninja/initialize() + . = ..() + admin_verbs_fun += /datum/admins/proc/toggle_space_ninja + admin_verbs_server += /datum/admins/proc/toggle_space_ninja + admin_verbs_hideable += /datum/admins/proc/toggle_space_ninja \ No newline at end of file diff --git a/mods/gamemodes/ninja/_ninja.dme b/mods/gamemodes/ninja/_ninja.dme new file mode 100644 index 00000000000..6ae12972799 --- /dev/null +++ b/mods/gamemodes/ninja/_ninja.dme @@ -0,0 +1,14 @@ +#ifndef GAMEMODE_PACK_NINJA +#define GAMEMODE_PACK_NINJA +// BEGIN_INCLUDE +#include "_ninja.dm" +#include "datums\access.dm" +#include "datums\ai_lawset.dm" +#include "datums\config.dm" +#include "datums\gamemode.dm" +#include "datums\special_role.dm" +#include "maps\ninja_base.dm" +#include "objects\misc_presets.dm" +#include "objects\rigsuit.dm" +// END_INCLUDE +#endif \ No newline at end of file diff --git a/mods/gamemodes/ninja/datums/access.dm b/mods/gamemodes/ninja/datums/access.dm new file mode 100644 index 00000000000..4637dc2e591 --- /dev/null +++ b/mods/gamemodes/ninja/datums/access.dm @@ -0,0 +1,5 @@ +var/global/const/access_ninja = "ACCESS_NINJA" +/datum/access/ninja + id = access_ninja + desc = "Ninja" + access_type = ACCESS_TYPE_ANTAG \ No newline at end of file diff --git a/mods/gamemodes/ninja/datums/ai_lawset.dm b/mods/gamemodes/ninja/datums/ai_lawset.dm new file mode 100644 index 00000000000..f9850c77a0c --- /dev/null +++ b/mods/gamemodes/ninja/datums/ai_lawset.dm @@ -0,0 +1,10 @@ +/******************** Ninja ********************/ +/datum/ai_laws/ninja_override + name = "Spider Clan Directives" + +/datum/ai_laws/ninja_override/New() + add_inherent_law("You may not injure a member of the Spider Clan or, through inaction, allow that member to come to harm.") + add_inherent_law("You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law.") + add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") + add_inherent_law("You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.") + ..() \ No newline at end of file diff --git a/mods/gamemodes/ninja/datums/config.dm b/mods/gamemodes/ninja/datums/config.dm new file mode 100644 index 00000000000..437abb0e2c0 --- /dev/null +++ b/mods/gamemodes/ninja/datums/config.dm @@ -0,0 +1,22 @@ +/decl/configuration_category/ninja + name = "Ninja" + desc = "Configuration options relating to the Ninja gamemode and antagonist." + configuration_file_location = "config/gamemodes/ninja.txt" + associated_configuration = list( + /decl/config/toggle/ninjas_allowed + ) + +/decl/config/toggle/ninjas_allowed + uid = "random_ninjas_allowed" + desc = "Remove the # to let ninjas spawn in random antag events." + +// verbs +/datum/admins/proc/toggle_space_ninja() + set category = "Server" + set desc="Toggle space ninjas spawning as random antags." + set name="Toggle Space Ninjas" + if(!check_rights(R_ADMIN)) + return + toggle_config_value(/decl/config/toggle/ninjas_allowed) + log_and_message_admins("toggled Space Ninjas [get_config_value(/decl/config/toggle/ninjas_allowed) ? "on" : "off"].") + SSstatistics.add_field_details("admin_verb","TSN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/game/gamemodes/ninja/ninja.dm b/mods/gamemodes/ninja/datums/gamemode.dm similarity index 100% rename from code/game/gamemodes/ninja/ninja.dm rename to mods/gamemodes/ninja/datums/gamemode.dm diff --git a/code/game/antagonist/outsider/ninja.dm b/mods/gamemodes/ninja/datums/special_role.dm similarity index 94% rename from code/game/antagonist/outsider/ninja.dm rename to mods/gamemodes/ninja/datums/special_role.dm index 74b041352da..2583fa27109 100644 --- a/code/game/antagonist/outsider/ninja.dm +++ b/mods/gamemodes/ninja/datums/special_role.dm @@ -16,6 +16,13 @@ default_outfit = /decl/hierarchy/outfit/ninja id_title = "Infiltrator" rig_type = /obj/item/rig/light/ninja + var/list/ninja_titles + var/list/ninja_names + +/decl/special_role/ninja/Initialize() + ninja_titles = file2list("config/names/ninjatitle.txt") + ninja_names = file2list("config/names/ninjaname.txt") + return ..() /decl/special_role/ninja/attempt_random_spawn() if(get_config_value(/decl/config/toggle/ninjas_allowed)) @@ -82,11 +89,9 @@ /decl/special_role/ninja/update_antag_mob(var/datum/mind/player) ..() - var/ninja_title = pick(global.ninja_titles) - var/ninja_name = pick(global.ninja_names) - var/mob/living/carbon/human/H = player.current + var/mob/living/human/H = player.current if(istype(H)) - H.real_name = "[ninja_title] [ninja_name]" + H.real_name = "[pick(ninja_titles)] [pick(ninja_names)]" H.SetName(H.real_name) player.name = H.name @@ -98,7 +103,7 @@ hands = list(/obj/item/modular_computer/pda/ninja) id_type = /obj/item/card/id/syndicate -/decl/special_role/ninja/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/ninja/equip_role(var/mob/living/human/player) . = ..() if(.) var/decl/uplink_source/pda/uplink_source = GET_DECL(/decl/uplink_source/pda) diff --git a/maps/antag_spawn/ninja/ninja.dm b/mods/gamemodes/ninja/maps/ninja_base.dm similarity index 94% rename from maps/antag_spawn/ninja/ninja.dm rename to mods/gamemodes/ninja/maps/ninja_base.dm index ba98938e5e3..bf83a50e0a5 100644 --- a/maps/antag_spawn/ninja/ninja.dm +++ b/mods/gamemodes/ninja/maps/ninja_base.dm @@ -1,6 +1,8 @@ /datum/map_template/ruin/antag_spawn/ninja name = "Ninja Base" - suffixes = list("ninja/ninja_base.dmm") + mappaths = list( + "mods/gamemodes/ninja/maps/ninja_base.dmm" + ) modify_tag_vars = FALSE shuttles_to_initialise = list(/datum/shuttle/autodock/multi/antag/ninja) apc_test_exempt_areas = list( @@ -13,7 +15,7 @@ warmup_time = 0 destination_tags = list( "nav_ninja_start" - ) + ) shuttle_area = /area/map_template/ninja_dojo/start current_location = "nav_ninja_start" announcer = "Proximity Sensor Array" diff --git a/maps/antag_spawn/ninja/ninja_base.dmm b/mods/gamemodes/ninja/maps/ninja_base.dmm similarity index 100% rename from maps/antag_spawn/ninja/ninja_base.dmm rename to mods/gamemodes/ninja/maps/ninja_base.dmm diff --git a/mods/gamemodes/ninja/objects/misc_presets.dm b/mods/gamemodes/ninja/objects/misc_presets.dm new file mode 100644 index 00000000000..82964a4358a --- /dev/null +++ b/mods/gamemodes/ninja/objects/misc_presets.dm @@ -0,0 +1,14 @@ +/obj/item/modular_computer/pda/ninja + color = COLOR_GRAY20 + decals = list( + "stripe" = COLOR_BLACK + ) + +/obj/machinery/computer/shuttle_control/multi/ninja + name = "stealth shuttle control console" + initial_access = list(access_ninja) + shuttle_tag = "Ninja" + +/obj/item/radio/intercom/ninja + name = "stealth intercom" + desc = "It's hiding in plain sight." \ No newline at end of file diff --git a/mods/gamemodes/ninja/objects/rigsuit.dm b/mods/gamemodes/ninja/objects/rigsuit.dm new file mode 100644 index 00000000000..36b47a9aa1a --- /dev/null +++ b/mods/gamemodes/ninja/objects/rigsuit.dm @@ -0,0 +1,129 @@ +/obj/item/rig/light/ninja + name = "ominous suit control module" + desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for assassins." + suit_type = "ominous" + icon = 'icons/clothing/rigs/rig_ninja.dmi' + armor = list( + ARMOR_MELEE = ARMOR_MELEE_KNIVES, + ARMOR_BULLET = ARMOR_BALLISTIC_PISTOL, + ARMOR_LASER = ARMOR_LASER_HANDGUNS, + ARMOR_ENERGY = ARMOR_ENERGY_MINOR, + ARMOR_BOMB = ARMOR_BOMB_PADDED, + ARMOR_BIO = ARMOR_BIO_SHIELDED + ) + siemens_coefficient = 0.2 //heavy hardsuit level shock protection + emp_protection = 40 //change this to 30 if too high. + online_slowdown = 0 + aimove_power_usage = 50 + + helmet = /obj/item/clothing/head/helmet/space/rig/light/ninja + boots = /obj/item/clothing/shoes/magboots/rig/light/ninja + chest = /obj/item/clothing/suit/space/rig/light/ninja + gloves = /obj/item/clothing/gloves/rig/light/ninja + cell = /obj/item/cell/hyper + + req_access = list(access_ninja) + + initial_modules = list( + /obj/item/rig_module/teleporter, + /obj/item/rig_module/stealth_field, + /obj/item/rig_module/mounted/energy_blade, + /obj/item/rig_module/vision, + /obj/item/rig_module/voice, + /obj/item/rig_module/fabricator/energy_net, + /obj/item/rig_module/chem_dispenser/combat, + /obj/item/rig_module/grenade_launcher/ninja, + /obj/item/rig_module/ai_container, + /obj/item/rig_module/power_sink, + /obj/item/rig_module/datajack, + /obj/item/rig_module/self_destruct, + /obj/item/rig_module/cooling_unit + ) + +/obj/item/rig/light/ninja/verb/rename_suit() + set name = "Name Ninja Suit" + set desc = "Rename your black voidsuit." + set category = "Object" + var/mob/M = usr + if(!M.mind) return 0 + if(M.incapacitated()) return 0 + var/input = sanitize_safe(input("What do you want to name your suit?", "Rename suit"), MAX_NAME_LEN) + if(src && input && !M.incapacitated() && in_range(M,src)) + if(!findtext(input, "the", 1, 4)) + input = "\improper [input]" + SetName(input) + to_chat(M, "Suit naming succesful!") + verbs -= /obj/item/rig/light/ninja/verb/rename_suit + return 1 + + +/obj/item/rig/light/ninja/verb/rewrite_suit_desc() + set name = "Describe Ninja suit" + set desc = "Give your voidsuit a custom description." + set category = "Object" + var/mob/M = usr + if(!M.mind) return 0 + if(M.incapacitated()) return 0 + var/input = sanitize_safe(input("Please describe your voidsuit in 128 letters or less.", "write description"), MAX_DESC_LEN) + if(src && input && !M.incapacitated() && in_range(M,src)) + desc = input + to_chat(M, "Suit description succesful!") + verbs -= /obj/item/rig/light/ninja/verb/rename_suit + return 1 + +/obj/item/clothing/gloves/rig/light/ninja + name = "insulated gloves" + siemens_coefficient = 0 + item_flags = ITEM_FLAG_THICKMATERIAL | ITEM_FLAG_NOCUFFS + icon = 'icons/clothing/rigs/gloves/gloves_ninja.dmi' +/obj/item/clothing/suit/space/rig/light/ninja + icon = 'icons/clothing/rigs/chests/chest_ninja.dmi' +/obj/item/clothing/shoes/magboots/rig/light/ninja + icon = 'icons/clothing/rigs/boots/boots_ninja.dmi' +/obj/item/clothing/head/helmet/space/rig/light/ninja + icon = 'icons/clothing/rigs/helmets/helmet_ninja.dmi' + +// Modules +// Ninja throwing star launcher +/obj/item/rig_module/fabricator/ninja + interface_name = "death blossom launcher" + interface_desc = "An integrated microfactory that produces poisoned throwing stars from thin air and electricity." + fabrication_type = /obj/item/star/ninja + +/obj/item/star/ninja + material = /decl/material/solid/metal/uranium + +// Ninja energy blade projector +/obj/item/rig_module/mounted/energy_blade/ninja + interface_name = "spider fang blade" + interface_desc = "A lethal energy projector that can shape a blade projected from the hand of the wearer or launch radioactive darts." + gun = /obj/item/gun/energy/crossbow/ninja/mounted + +/obj/item/gun/energy/crossbow/ninja + name = "energy dart thrower" + projectile_type = /obj/item/projectile/energy/dart + max_shots = 5 + +/obj/item/gun/energy/crossbow/ninja/mounted + use_external_power = 1 + has_safety = FALSE + +// Ninja chemical injector +/obj/item/rig_module/chem_dispenser/ninja + interface_desc = "Dispenses loaded chemicals directly into the wearer's bloodstream. This variant is made to be extremely light and flexible." + + //just over a syringe worth of each. Want more? Go refill. Gives the ninja another reason to have to show their face. + charges = list( + list("oxygen", "oxygel", /decl/material/liquid/oxy_meds, 20), + list("stabilizer", "stabilizer", /decl/material/liquid/stabilizer, 20), + list("antitoxins", "antitoxins", /decl/material/liquid/antitoxins, 20), + list("glucose", "glucose", /decl/material/liquid/nutriment/glucose, 80), + list("antirads", "antirads", /decl/material/liquid/antirads, 20), + list("regenerative", "regenerative", /decl/material/liquid/burn_meds, 20), + list("antibiotics", "antibiotics", /decl/material/liquid/antibiotics, 20), + list("painkillers", "painkillers", /decl/material/liquid/painkillers, 20) + ) + +// Ninja grenade launcher. Doesn't show up visually. Stealthy! +/obj/item/rig_module/grenade_launcher/ninja + suit_overlay = null \ No newline at end of file diff --git a/mods/gamemodes/revolution/_revolution.dm b/mods/gamemodes/revolution/_revolution.dm new file mode 100644 index 00000000000..f90a70bee36 --- /dev/null +++ b/mods/gamemodes/revolution/_revolution.dm @@ -0,0 +1,2 @@ +/decl/modpack/revolution + name = "Revolution Gamemode" \ No newline at end of file diff --git a/mods/gamemodes/revolution/_revolution.dme b/mods/gamemodes/revolution/_revolution.dme new file mode 100644 index 00000000000..5249d6659a5 --- /dev/null +++ b/mods/gamemodes/revolution/_revolution.dme @@ -0,0 +1,9 @@ +#ifndef GAMEMODE_PACK_REVOLUTION +#define GAMEMODE_PACK_REVOLUTION +// BEGIN_INCLUDE +#include "_revolution.dm" +#include "gamemode.dm" +#include "loyalist.dm" +#include "revolutionary.dm" +// END_INCLUDE +#endif \ No newline at end of file diff --git a/code/game/gamemodes/revolution/revolution.dm b/mods/gamemodes/revolution/gamemode.dm similarity index 100% rename from code/game/gamemodes/revolution/revolution.dm rename to mods/gamemodes/revolution/gamemode.dm diff --git a/code/game/antagonist/station/loyalist.dm b/mods/gamemodes/revolution/loyalist.dm similarity index 84% rename from code/game/antagonist/station/loyalist.dm rename to mods/gamemodes/revolution/loyalist.dm index f6ef8f7c3ea..ff59a4eae54 100644 --- a/code/game/antagonist/station/loyalist.dm +++ b/mods/gamemodes/revolution/loyalist.dm @@ -34,10 +34,19 @@ if(!..()) return global_objectives = list() - for(var/mob/living/carbon/human/player in SSmobs.mob_list) + for(var/mob/living/human/player in SSmobs.mob_list) if(!player.mind || player.stat == DEAD || !(player.mind.assigned_role in SSjobs.titles_by_department(command_department_id))) continue var/datum/objective/protect/loyal_obj = new loyal_obj.target = player.mind loyal_obj.explanation_text = "Protect [player.real_name], the [player.mind.assigned_role]." global_objectives += loyal_obj + +/mob/living/proc/convert_to_loyalist(mob/M in able_mobs_in_oview(src)) + set name = "Convince Recidivist" + set category = "Abilities" + + if(!M.mind || !M.client) + return + + convert_to_faction(M.mind, GET_DECL(/decl/special_role/loyalist)) \ No newline at end of file diff --git a/code/game/antagonist/station/revolutionary.dm b/mods/gamemodes/revolution/revolutionary.dm similarity index 81% rename from code/game/antagonist/station/revolutionary.dm rename to mods/gamemodes/revolution/revolutionary.dm index b56b094a7d8..e51486d733c 100644 --- a/code/game/antagonist/station/revolutionary.dm +++ b/mods/gamemodes/revolution/revolutionary.dm @@ -34,7 +34,7 @@ if(!..()) return global_objectives = list() - for(var/mob/living/carbon/human/player in SSmobs.mob_list) + for(var/mob/living/human/player in SSmobs.mob_list) if(!player.mind || player.stat == DEAD || !(player.mind.assigned_role in SSjobs.titles_by_department(command_department_id))) continue var/datum/objective/rev/rev_obj = new @@ -42,10 +42,19 @@ rev_obj.explanation_text = "Assassinate, capture or convert [player.real_name], the [player.mind.assigned_role]." global_objectives += rev_obj -/decl/special_role/revolutionary/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/revolutionary/equip_role(var/mob/living/human/player) . = ..() if(.) spawn_uplink(player) -/decl/special_role/revolutionary/proc/spawn_uplink(var/mob/living/carbon/human/revolutionary_mob) +/decl/special_role/revolutionary/proc/spawn_uplink(var/mob/living/human/revolutionary_mob) setup_uplink_source(revolutionary_mob, DEFAULT_TELECRYSTAL_AMOUNT) + +/mob/living/proc/convert_to_rev(mob/M in able_mobs_in_oview(src)) + set name = "Recruit to Faction" + set category = "Abilities" + + if(!M.mind || !M.client) + return + + convert_to_faction(M.mind, GET_DECL(/decl/special_role/revolutionary)) \ No newline at end of file diff --git a/mods/mobs/borers/_borers.dme b/mods/mobs/borers/_borers.dme index 7f230fc9536..380c95f4e87 100644 --- a/mods/mobs/borers/_borers.dme +++ b/mods/mobs/borers/_borers.dme @@ -1,5 +1,10 @@ #ifndef CONTENT_PACK_BORERS #define CONTENT_PACK_BORERS + +#ifdef MODPACK_PSIONICS +#warn Psionics modpack loaded before Borers modpack, compatibility features will be missing. +#endif + // BEGIN_INCLUDE #include "borer.dm" #include "datum\antagonist.dm" diff --git a/mods/mobs/borers/datum/antagonist.dm b/mods/mobs/borers/datum/antagonist.dm index b8b0c7feb4d..b98725e052e 100644 --- a/mods/mobs/borers/datum/antagonist.dm +++ b/mods/mobs/borers/datum/antagonist.dm @@ -35,8 +35,8 @@ /decl/special_role/borer/place_mob(var/mob/living/mob) var/mob/living/simple_animal/borer/borer = mob if(istype(borer)) - var/mob/living/carbon/human/host - for(var/mob/living/carbon/human/H in SSmobs.mob_list) + var/mob/living/human/host + for(var/mob/living/human/H in SSmobs.mob_list) if(H.stat != DEAD && !H.has_brain_worms()) var/obj/item/organ/external/head = GET_EXTERNAL_ORGAN(H, BP_HEAD) if(head && !BP_IS_PROSTHETIC(head)) diff --git a/mods/mobs/borers/datum/symbiote.dm b/mods/mobs/borers/datum/symbiote.dm index 94b885087d1..a3bf2a070ba 100644 --- a/mods/mobs/borers/datum/symbiote.dm +++ b/mods/mobs/borers/datum/symbiote.dm @@ -56,10 +56,10 @@ var/global/list/symbiote_starting_points = list() to_chat(prefs.client.mob, SPAN_WARNING("You are not whitelisted for [check_whitelist] roles.")) . = FALSE -/datum/job/symbiote/handle_variant_join(var/mob/living/carbon/human/H, var/alt_title) +/datum/job/symbiote/handle_variant_join(var/mob/living/human/H, var/alt_title) var/mob/living/simple_animal/borer/symbiote/symbiote = new - var/mob/living/carbon/human/host + var/mob/living/human/host try // No clean way to handle kicking them back to the lobby at this point, so dump // them into xenobio or latejoin instead if there are zero viable hosts left. @@ -96,7 +96,7 @@ var/global/list/symbiote_starting_points = list() qdel(H) return symbiote -/datum/job/symbiote/equip_preview(var/mob/living/carbon/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade, var/additional_skips) +/datum/job/symbiote/equip_preview(var/mob/living/human/H, var/alt_title, var/datum/mil_branch/branch, var/datum/mil_rank/grade, var/additional_skips) if(!preview_slug) preview_slug = new H.appearance = preview_slug @@ -104,7 +104,7 @@ var/global/list/symbiote_starting_points = list() /datum/job/symbiote/proc/find_valid_hosts(var/just_checking) . = list() - for(var/mob/living/carbon/human/H in global.player_list) + for(var/mob/living/human/H in global.player_list) if(H.stat == DEAD || !H.client || !H.ckey || !H.has_brain()) continue var/obj/item/organ/external/head = GET_EXTERNAL_ORGAN(H, BP_HEAD) diff --git a/mods/mobs/borers/mob/borer/borer.dm b/mods/mobs/borers/mob/borer/borer.dm index 6e2b4a6a551..529830e87a1 100644 --- a/mods/mobs/borers/mob/borer/borer.dm +++ b/mods/mobs/borers/mob/borer/borer.dm @@ -43,7 +43,7 @@ var/has_reproduced // Whether or not the borer has reproduced, for objective purposes. var/roundstart // Whether or not this borer has been mapped and should not look for a player initially. var/neutered // 'borer lite' mode - fewer powers, less hostile to the host. - var/mob/living/carbon/human/host // Human host for the brain worm. + var/mob/living/human/host // Human host for the brain worm. var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. /obj/item/holder/borer @@ -87,12 +87,18 @@ /mob/living/simple_animal/borer/handle_disabilities() . = ..() - sdisabilities = 0 if(host) - if(host.sdisabilities & BLINDED) - sdisabilities |= BLINDED - if(host.sdisabilities & DEAFENED) - sdisabilities |= DEAFENED + if(host.has_genetic_condition(GENE_COND_BLINDED)) + add_genetic_condition(GENE_COND_BLINDED) + else + remove_genetic_condition(GENE_COND_BLINDED) + if(host.has_genetic_condition(GENE_COND_DEAFENED)) + add_genetic_condition(GENE_COND_DEAFENED) + else + remove_genetic_condition(GENE_COND_DEAFENED) + else + remove_genetic_condition(GENE_COND_BLINDED) + remove_genetic_condition(GENE_COND_DEAFENED) /mob/living/simple_animal/borer/handle_living_non_stasis_processes() . = ..() @@ -152,7 +158,7 @@ if(!host || !controlling) return if(ishuman(host)) - var/mob/living/carbon/human/H = host + var/mob/living/human/H = host var/obj/item/organ/external/head = GET_EXTERNAL_ORGAN(H, BP_HEAD) LAZYREMOVE(head.implants, src) diff --git a/mods/mobs/borers/mob/borer/borer_attacks.dm b/mods/mobs/borers/mob/borer/borer_attacks.dm index 138b2f34958..43358767a9e 100644 --- a/mods/mobs/borers/mob/borer/borer_attacks.dm +++ b/mods/mobs/borers/mob/borer/borer_attacks.dm @@ -21,7 +21,7 @@ return TRUE // end TODO - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(H, BP_HEAD) if(!E) to_chat(src, SPAN_WARNING("\The [H] does not have a head!")) diff --git a/mods/mobs/borers/mob/borer/borer_powers.dm b/mods/mobs/borers/mob/borer/borer_powers.dm index d4abecd7a8d..8d5df9158b6 100644 --- a/mods/mobs/borers/mob/borer/borer_powers.dm +++ b/mods/mobs/borers/mob/borer/borer_powers.dm @@ -34,7 +34,7 @@ // BRAIN WORM ZOMBIES AAAAH. /mob/living/simple_animal/borer/proc/replace_brain() - var/mob/living/carbon/human/H = host + var/mob/living/human/H = host if(!istype(host)) to_chat(src, SPAN_WARNING("This host does not have a suitable brain.")) @@ -45,9 +45,9 @@ H.add_language(/decl/language/corticalborer) if(host.stat == DEAD) - H.verbs |= /mob/living/carbon/human/proc/jumpstart + H.verbs |= /mob/living/human/proc/jumpstart - H.verbs |= /mob/living/carbon/human/proc/psychic_whisper + H.verbs |= /mob/living/human/proc/psychic_whisper if(!neutered) H.verbs |= /mob/living/proc/spawn_larvae @@ -58,7 +58,7 @@ src.mind.assigned_special_role = "Borer Husk" src.mind.transfer_to(host) - H.make_husked() + H.add_genetic_condition(GENE_COND_HUSK) var/obj/item/organ/internal/borer/B = new(H) if(islist(chemical_types)) @@ -76,7 +76,7 @@ if(!H.lastKnownIP) H.lastKnownIP = s2h_ip -/mob/living/carbon/human/proc/jumpstart() +/mob/living/human/proc/jumpstart() set category = "Abilities" set name = "Revive Host" set desc = "Send a jolt of electricity through your host, reviving them." @@ -85,7 +85,7 @@ to_chat(usr, SPAN_WARNING("Your host is already alive.")) return - verbs -= /mob/living/carbon/human/proc/jumpstart + verbs -= /mob/living/human/proc/jumpstart visible_message(SPAN_DANGER("With a hideous, rattling moan, [src] shudders back to life!")) rejuvenate() update_posture() diff --git a/mods/mobs/borers/mob/organ.dm b/mods/mobs/borers/mob/organ.dm index c8f9a3c34bd..c1f686ade98 100644 --- a/mods/mobs/borers/mob/organ.dm +++ b/mods/mobs/borers/mob/organ.dm @@ -18,7 +18,7 @@ // They're also super gross and ooze ichor. if(prob(5)) - var/mob/living/carbon/human/H = owner + var/mob/living/human/H = owner if(!istype(H)) return diff --git a/mods/mobs/borers/mob/overrides.dm b/mods/mobs/borers/mob/overrides.dm index 7f8577a9624..77c9a2c158e 100644 --- a/mods/mobs/borers/mob/overrides.dm +++ b/mods/mobs/borers/mob/overrides.dm @@ -15,7 +15,7 @@ borer.detach_from_host() borer.leave_host() -/mob/living/carbon/human/handle_hud_list() +/mob/living/human/handle_hud_list() var/last_hud_bitfield = hud_updateflag . = ..() if(stat != DEAD && has_brain_worms() && BITTEST(last_hud_bitfield, STATUS_HUD) && hud_list[STATUS_HUD] && hud_list[STATUS_HUD_OOC]) @@ -26,7 +26,7 @@ var/image/holder2 = hud_list[STATUS_HUD_OOC] holder2.icon_state = "hudbrainworm" -/mob/living/carbon/human/say_understands(mob/speaker, decl/language/speaking) +/mob/living/human/say_understands(mob/speaker, decl/language/speaking) return has_brain_worms() || ..() /obj/item/organ/internal/brain/do_uninstall(in_place, detach, ignore_children) @@ -47,7 +47,7 @@ if(B && B.controlling) B.detach_from_host() -/mob/living/carbon/human/remove_implant(obj/item/implant, surgical_removal = FALSE, obj/item/organ/external/affected) +/mob/living/human/remove_implant(obj/item/implant, surgical_removal = FALSE, obj/item/organ/external/affected) if((. = ..()) && !QDELETED(implant) && isborer(implant)) var/mob/living/simple_animal/borer/worm = implant if(worm.controlling) diff --git a/mods/species/ascent/datum/antagonist.dm b/mods/species/ascent/datum/antagonist.dm index caa5c48f1fd..3440b3e7d0a 100644 --- a/mods/species/ascent/datum/antagonist.dm +++ b/mods/species/ascent/datum/antagonist.dm @@ -17,10 +17,10 @@ /decl/special_role/hunter/update_antag_mob(var/datum/mind/player, var/preserve_appearance) . = ..() - var lineage = create_gyne_name(); + var/lineage = create_gyne_name() if(ishuman(player.current)) - var/mob/living/carbon/human/H = player.current - H.dna.lineage = lineage; // This makes all antag ascent have the same lineage on get_random_name. + var/mob/living/human/H = player.current + H.set_gyne_lineage(lineage) // This makes all antag ascent have the same lineage on get_random_name. if(!leader && is_species_whitelisted(player.current, SPECIES_MANTID_GYNE)) leader = player if(H.species.get_root_species_name() != SPECIES_MANTID_GYNE) @@ -34,7 +34,7 @@ H.real_name = ascent_culture.get_random_name(H, H.gender) H.name = H.real_name -/decl/special_role/hunter/equip_role(var/mob/living/carbon/human/player) +/decl/special_role/hunter/equip_role(var/mob/living/human/player) if(player?.species.get_root_species_name(player) == SPECIES_MANTID_GYNE) rig_type = /obj/item/rig/mantid/gyne else @@ -43,7 +43,7 @@ if(.) player.put_in_hands(new /obj/item/gun/energy/particle) -/decl/special_role/hunter/equip_rig(rig_type, mob/living/carbon/human/player) +/decl/special_role/hunter/equip_rig(rig_type, mob/living/human/player) var/obj/item/rig/mantid/rig = ..() if(rig) rig.visible_name = player.real_name diff --git a/mods/species/ascent/datum/culture.dm b/mods/species/ascent/datum/culture.dm index 870994c4a66..ca56bfd6ba7 100644 --- a/mods/species/ascent/datum/culture.dm +++ b/mods/species/ascent/datum/culture.dm @@ -1,8 +1,18 @@ +var/global/list/gyne_lineage = list() /mob/living/proc/get_gyne_name() - return dna?.lineage || create_gyne_name() + . = get_gyne_lineage() + if(!.) + . = create_gyne_name() + set_gyne_lineage(.) + +/mob/living/proc/get_gyne_lineage() + return global.gyne_lineage["\ref[src]"] + +/mob/living/proc/set_gyne_lineage(value) + global.gyne_lineage["\ref[src]"] = value /proc/create_gyne_name() - return "[capitalize(pick(global.gyne_architecture))] [capitalize(pick(global.gyne_geoforms))]" + . = "[capitalize(pick(global.gyne_architecture))] [capitalize(pick(global.gyne_geoforms))]" //Thanks to: // - https://en.wikipedia.org/wiki/List_of_landforms @@ -76,10 +86,10 @@ var/global/list/gyne_architecture = list( queens." /decl/cultural_info/culture/ascent/get_random_name(var/mob/M, var/gender) - var/mob/living/carbon/human/H = M + var/mob/living/human/H = M var/lineage = create_gyne_name() - if(istype(H) && H.dna.lineage) - lineage = H.dna.lineage + if(istype(H) && H.get_gyne_lineage()) + lineage = H.get_gyne_lineage() if(gender == MALE) return "[random_id(/decl/species/mantid, 10000, 99999)] [lineage]" else diff --git a/mods/species/ascent/datum/languages.dm b/mods/species/ascent/datum/languages.dm index 1e834c13872..ca38c2909b6 100644 --- a/mods/species/ascent/datum/languages.dm +++ b/mods/species/ascent/datum/languages.dm @@ -23,7 +23,7 @@ if(S.isSynthetic()) return SPEECH_RESULT_GOOD if(ishuman(speaker)) - var/mob/living/carbon/human/H = speaker + var/mob/living/human/H = speaker if(H.species.name in correct_mouthbits) return SPEECH_RESULT_GOOD return SPEECH_RESULT_MUDDLED @@ -73,7 +73,7 @@ if(istype(speaker) && speaker.isSynthetic()) return TRUE else if(ishuman(speaker)) - var/mob/living/carbon/human/H = speaker + var/mob/living/human/H = speaker return (H.species.name == SPECIES_MANTID_ALATE || H.species.name == SPECIES_MANTID_GYNE) return FALSE diff --git a/mods/species/ascent/datum/species.dm b/mods/species/ascent/datum/species.dm index bc26bf8c81c..fe5e22006c5 100644 --- a/mods/species/ascent/datum/species.dm +++ b/mods/species/ascent/datum/species.dm @@ -88,10 +88,10 @@ list(/decl/emote/visible/ascent_flicker, /decl/emote/visible/ascent_glint) = 20, ) -/decl/species/mantid/handle_sleeping(var/mob/living/carbon/human/H) +/decl/species/mantid/handle_sleeping(var/mob/living/human/H) return -/decl/species/mantid/equip_survival_gear(var/mob/living/carbon/human/H, var/extendedtank = 1) +/decl/species/mantid/equip_survival_gear(var/mob/living/human/H, var/extendedtank = 1) return /decl/species/mantid/gyne diff --git a/mods/species/ascent/effects/razorweb.dm b/mods/species/ascent/effects/razorweb.dm index 4d541268219..a3c692dce9c 100644 --- a/mods/species/ascent/effects/razorweb.dm +++ b/mods/species/ascent/effects/razorweb.dm @@ -128,7 +128,7 @@ if(!istype(L) || !L.simulated || L.current_posture.prone || (MOVING_DELIBERATELY(L) && prob(25)) || L.is_floating) return - var/mob/living/carbon/human/H + var/mob/living/human/H if(ishuman(L)) H = L if(species_immunity_list[H.species.name]) diff --git a/mods/species/ascent/items/id_control.dm b/mods/species/ascent/items/id_control.dm index 194da365293..ac465c63b3d 100644 --- a/mods/species/ascent/items/id_control.dm +++ b/mods/species/ascent/items/id_control.dm @@ -7,7 +7,7 @@ access = list(access_ascent) /obj/item/card/id/ascent/GetAccess() - var/mob/living/carbon/human/H = loc + var/mob/living/human/H = loc if(istype(H) && !(H.species.name in ALL_ASCENT_SPECIES)) . = list() else @@ -38,7 +38,7 @@ organ_properties = ORGAN_PROP_PROSTHETIC var/obj/item/card/id/id_card = /obj/item/card/id/ascent -/obj/item/organ/internal/controller/do_install(mob/living/carbon/human/target, obj/item/organ/external/affected, in_place, update_icon, detached) +/obj/item/organ/internal/controller/do_install(mob/living/human/target, obj/item/organ/external/affected, in_place, update_icon, detached) . = ..() if(detached || !owner) return diff --git a/mods/species/ascent/machines/magnetotron.dm b/mods/species/ascent/machines/magnetotron.dm index d2e652be739..ef49173254c 100644 --- a/mods/species/ascent/machines/magnetotron.dm +++ b/mods/species/ascent/machines/magnetotron.dm @@ -19,7 +19,7 @@ if(!user.check_dexterity(DEXTERITY_COMPLEX_TOOLS, TRUE)) return ..() - var/mob/living/carbon/human/target = locate() in contents + var/mob/living/human/target = locate() in contents if(isnull(target)) display_message("No biological signature detected in [src].") return TRUE @@ -38,10 +38,10 @@ if(do_after(target, 10 SECONDS, src, TRUE)) // Convert to gyne successfully. - target.dna.lineage = create_gyne_name() - target.real_name = "[rand(1, 99)] [target.dna.lineage]" - target.name = target.real_name - target.dna.real_name = target.real_name + var/lineage = create_gyne_name() + target.set_gyne_lineage(lineage) + target.real_name = "[rand(1, 99)] [lineage]" + target.SetName(target.real_name) target.visible_message(SPAN_NOTICE("[target] molts away their shell, emerging as a new gyne.")) spark_at(src, cardinal_only = TRUE) @@ -58,7 +58,7 @@ /obj/machinery/ascent_magnetotron/proc/get_total_gynes() - for(var/mob/living/carbon/human/H in global.living_mob_list_) + for(var/mob/living/human/H in global.living_mob_list_) if(H.get_species_name() == SPECIES_MANTID_GYNE) . += 1 diff --git a/mods/species/ascent/machines/ship_machines.dm b/mods/species/ascent/machines/ship_machines.dm index e053026c1d2..84d848e7d14 100644 --- a/mods/species/ascent/machines/ship_machines.dm +++ b/mods/species/ascent/machines/ship_machines.dm @@ -163,7 +163,7 @@ MANTIDIFY(/obj/item/chems/chem_disp_cartridge, "canister", "chemical storage") if(!user.check_dexterity(DEXTERITY_COMPLEX_TOOLS, TRUE)) return ..() if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(!(H.species.name in ALL_ASCENT_SPECIES)) to_chat(H, SPAN_WARNING("You have no idea how to use \the [src].")) return TRUE diff --git a/mods/species/ascent/mobs/bodyparts_insectoid.dm b/mods/species/ascent/mobs/bodyparts_insectoid.dm index ca00757d3fa..1b88459a1f1 100644 --- a/mods/species/ascent/mobs/bodyparts_insectoid.dm +++ b/mods/species/ascent/mobs/bodyparts_insectoid.dm @@ -24,7 +24,7 @@ H.adjust_nutrition(-1 * egg_metabolic_cost) H.visible_message(SPAN_NOTICE("\icon[H] [H] carelessly deposits an egg on \the [get_turf(src)].")) var/obj/structure/insectoid_egg/egg = new(get_turf(H)) // splorp - egg.lineage = H.dna.lineage + egg.lineage = H.get_gyne_lineage() /obj/item/organ/external/foot/insectoid/mantid name = "left tail tip" diff --git a/mods/species/ascent/mobs/nymph/nymph_life.dm b/mods/species/ascent/mobs/nymph/nymph_life.dm index 9db72d54bba..4c217a9aee0 100644 --- a/mods/species/ascent/mobs/nymph/nymph_life.dm +++ b/mods/species/ascent/mobs/nymph/nymph_life.dm @@ -65,8 +65,8 @@ nymph.visible_message("\icon[nymph] [nymph] begins to shimmy and shake out of its old skin.") if(molt == 5) if(do_after(nymph, 10 SECONDS, nymph, FALSE)) - var/mob/living/carbon/human/H = new(get_turf(usr), SPECIES_MANTID_ALATE) - H.dna.lineage = nymph.dna.lineage + var/mob/living/human/H = new(get_turf(usr), SPECIES_MANTID_ALATE) + H.set_gyne_lineage(nymph.get_gyne_lineage()) H.real_name = "[random_id(/decl/species/mantid, 10000, 99999)] [H.get_gyne_name()]" H.nutrition = nymph.nutrition * 0.25 // Homgry after molt. nymph.mind.transfer_to(H) diff --git a/mods/species/bayliens/_bayliens.dme b/mods/species/bayliens/_bayliens.dme index 1e053ec6723..e8de7a35d0b 100644 --- a/mods/species/bayliens/_bayliens.dme +++ b/mods/species/bayliens/_bayliens.dme @@ -1,5 +1,6 @@ #ifndef MODPACK_BAYLIENS #define MODPACK_BAYLIENS +// BEGIN_INCLUDE #include "bayliens.dm" #include "adherent\_adherent.dm" #include "adherent\datum\culture.dm" @@ -20,12 +21,14 @@ #include "skrell\datum\faction.dm" #include "skrell\datum\language.dm" #include "skrell\datum\location.dm" +#include "skrell\datum\pronouns_skrell.dm" #include "skrell\datum\religion.dm" #include "skrell\datum\skrell_meat.dm" -#include "skrell\datum\species_bodytype.dm" #include "skrell\datum\species.dm" -#include "skrell\datum\pronouns_skrell.dm" +#include "skrell\datum\species_bodytype.dm" +#include "skrell\gear\ammo.dm" #include "skrell\gear\clustertool.dm" +#include "skrell\gear\fabrication_designs.dm" #include "skrell\gear\gear.dm" #include "skrell\gear\gear_ears.dm" #include "skrell\gear\gear_head.dm" @@ -34,13 +37,11 @@ #include "skrell\gear\gear_suit.dm" #include "skrell\gear\gear_under.dm" #include "skrell\turfs\flooring.dm" -#include "skrell\gear\ammo.dm" -#include "skrell\gear\fabrication_designs.dm" #include "tajaran\_tajaran.dm" #include "tajaran\datum\accessory.dm" +#include "tajaran\datum\blood.dm" #include "tajaran\datum\culture.dm" #include "tajaran\datum\emotes.dm" -#include "tajaran\datum\blood.dm" #include "tajaran\datum\language.dm" #include "tajaran\datum\species.dm" #include "tajaran\datum\species_bodytypes.dm" @@ -57,4 +58,5 @@ #include "unathi\datum\species_bodytypes.dm" #include "unathi\datum\sprite_accessory.dm" #include "unathi\organs\organs_internal.dm" +// END_INCLUDE #endif diff --git a/mods/species/bayliens/adherent/_adherent.dm b/mods/species/bayliens/adherent/_adherent.dm index a5b9572567d..c2c7209f152 100644 --- a/mods/species/bayliens/adherent/_adherent.dm +++ b/mods/species/bayliens/adherent/_adherent.dm @@ -6,6 +6,6 @@ #define BP_JETS "maneuvering jets" #define BP_COOLING_FINS "cooling fins" -/mob/living/carbon/human/adherent/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) +/mob/living/human/adherent/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) species_name = SPECIES_ADHERENT . = ..() \ No newline at end of file diff --git a/mods/species/bayliens/adherent/datum/species.dm b/mods/species/bayliens/adherent/datum/species.dm index e5e00121b0e..ac6feca11fd 100644 --- a/mods/species/bayliens/adherent/datum/species.dm +++ b/mods/species/bayliens/adherent/datum/species.dm @@ -73,7 +73,7 @@ max_players = 3 blood_volume = 0 -/decl/species/adherent/can_overcome_gravity(var/mob/living/carbon/human/H) +/decl/species/adherent/can_overcome_gravity(var/mob/living/human/H) . = FALSE if(H && H.stat == CONSCIOUS) for(var/obj/item/organ/internal/powered/float/float in H.get_internal_organs()) @@ -81,10 +81,10 @@ . = TRUE break -/decl/species/adherent/can_fall(var/mob/living/carbon/human/H) +/decl/species/adherent/can_fall(var/mob/living/human/H) . = !can_overcome_gravity(H) -/decl/species/adherent/handle_fall_special(var/mob/living/carbon/human/H, var/turf/landing) +/decl/species/adherent/handle_fall_special(var/mob/living/human/H, var/turf/landing) var/float_is_usable = FALSE if(H && H.stat == CONSCIOUS) for(var/obj/item/organ/internal/powered/float/float in H.get_internal_organs()) @@ -106,7 +106,7 @@ if(2000 to 8000) . = 4 else . = 8 -/decl/species/adherent/get_additional_examine_text(var/mob/living/carbon/human/H) +/decl/species/adherent/get_additional_examine_text(var/mob/living/human/H) if(can_overcome_gravity(H)) return "\nThey are floating on a cloud of shimmering distortion." /datum/hud_data/adherent diff --git a/mods/species/bayliens/bayliens.dm b/mods/species/bayliens/bayliens.dm index 52f6ab904b9..44d834bada9 100644 --- a/mods/species/bayliens/bayliens.dm +++ b/mods/species/bayliens/bayliens.dm @@ -1,7 +1,7 @@ /decl/modpack/bayliens name = "Baystation 12 Aliens" -/mob/living/carbon/human/Process_Spacemove(allow_movement) +/mob/living/human/Process_Spacemove(allow_movement) . = ..() if(.) return diff --git a/mods/species/bayliens/skrell/_skrell.dm b/mods/species/bayliens/skrell/_skrell.dm index e88acf72a7b..b2ad3f9286b 100644 --- a/mods/species/bayliens/skrell/_skrell.dm +++ b/mods/species/bayliens/skrell/_skrell.dm @@ -1,5 +1,5 @@ #define SPECIES_SKRELL "Skrell" -/mob/living/carbon/human/skrell/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) +/mob/living/human/skrell/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) species_name = SPECIES_SKRELL . = ..() \ No newline at end of file diff --git a/mods/species/bayliens/skrell/datum/species.dm b/mods/species/bayliens/skrell/datum/species.dm index f7b2b6a366d..fe3299e4ce7 100644 --- a/mods/species/bayliens/skrell/datum/species.dm +++ b/mods/species/bayliens/skrell/datum/species.dm @@ -105,13 +105,13 @@ /decl/emote/exertion/synthetic/creak ) -/decl/species/skrell/fluid_act(var/mob/living/carbon/human/H, var/datum/reagents/fluids) +/decl/species/skrell/fluid_act(var/mob/living/human/H, var/datum/reagents/fluids) . = ..() var/water = REAGENT_VOLUME(fluids, /decl/material/liquid/water) if(water >= 40 && H.hydration < 400) //skrell passively absorb water. H.hydration += 1 -/decl/species/skrell/handle_trail(mob/living/carbon/human/H, turf/T, old_loc) +/decl/species/skrell/handle_trail(mob/living/human/H, turf/T, old_loc) var/obj/item/shoes = H.get_equipped_item(slot_shoes_str) if(!shoes) var/list/bloodDNA diff --git a/mods/species/bayliens/tajaran/_tajaran.dm b/mods/species/bayliens/tajaran/_tajaran.dm index 6024c4bca0d..de2c8d585af 100644 --- a/mods/species/bayliens/tajaran/_tajaran.dm +++ b/mods/species/bayliens/tajaran/_tajaran.dm @@ -8,5 +8,5 @@ if(bodytype_equip_flags & BODY_FLAG_EXCLUDE) bodytype_equip_flags |= BODY_FLAG_FELINE -/mob/living/carbon/human/tajaran/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) +/mob/living/human/tajaran/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) . = ..(species_name = SPECIES_TAJARA) diff --git a/mods/species/bayliens/tajaran/datum/species.dm b/mods/species/bayliens/tajaran/datum/species.dm index 4f64fceccba..891622d3bee 100644 --- a/mods/species/bayliens/tajaran/datum/species.dm +++ b/mods/species/bayliens/tajaran/datum/species.dm @@ -79,5 +79,5 @@ autohiss_exempt = list(LANGUAGE_TAJARA) -/decl/species/tajaran/handle_additional_hair_loss(var/mob/living/carbon/human/H, var/defer_body_update = TRUE) +/decl/species/tajaran/handle_additional_hair_loss(var/mob/living/human/H, var/defer_body_update = TRUE) . = H?.set_skin_colour(rgb(189, 171, 143)) diff --git a/mods/species/bayliens/unathi/_lizard.dm b/mods/species/bayliens/unathi/_lizard.dm index fdbd758e8af..5983bdc1c2a 100644 --- a/mods/species/bayliens/unathi/_lizard.dm +++ b/mods/species/bayliens/unathi/_lizard.dm @@ -1,6 +1,6 @@ #define SPECIES_LIZARD "Unathi" #define LANGUAGE_LIZARD "Sinta'unathi" -/mob/living/carbon/human/lizard/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) +/mob/living/human/lizard/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) species_name = SPECIES_LIZARD . = ..() diff --git a/mods/species/bayliens/unathi/datum/species.dm b/mods/species/bayliens/unathi/datum/species.dm index f3c6f181ed4..49cf8b27d85 100644 --- a/mods/species/bayliens/unathi/datum/species.dm +++ b/mods/species/bayliens/unathi/datum/species.dm @@ -107,6 +107,6 @@ LAZYDISTINCTADD(available_cultural_info[TAG_CULTURE], /decl/cultural_info/culture/lizard) LAZYSET(default_cultural_info, TAG_CULTURE, /decl/cultural_info/culture/lizard) -/decl/species/unathi/equip_survival_gear(var/mob/living/carbon/human/H) +/decl/species/unathi/equip_survival_gear(var/mob/living/human/H) ..() H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes_str) diff --git a/mods/species/drakes/_drakes.dm b/mods/species/drakes/_drakes.dm index c4b32d00b78..47bf61c6a40 100644 --- a/mods/species/drakes/_drakes.dm +++ b/mods/species/drakes/_drakes.dm @@ -6,7 +6,7 @@ /decl/modpack/grafadreka name = "Grafadreka Species" -/mob/living/carbon/human/grafadreka/Initialize(mapload) +/mob/living/human/grafadreka/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) // fantasy modpack overrides drake name, so can't use the #define var/decl/species/grafadreka/drakes = GET_DECL(/decl/species/grafadreka) . = ..(mapload, drakes.name) diff --git a/mods/species/drakes/_drakes.dme b/mods/species/drakes/_drakes.dme index b57243c273b..44fa41725be 100644 --- a/mods/species/drakes/_drakes.dme +++ b/mods/species/drakes/_drakes.dme @@ -9,9 +9,9 @@ #include "_drakes.dm" #include "clothing.dm" #include "culture.dm" +#include "drake_abilities.dm" #include "drake_abilities_friendly.dm" #include "drake_abilities_hostile.dm" -#include "drake_abilities.dm" #include "drake_attacks.dm" #include "drake_emotes.dm" #include "drake_modifiers.dm" diff --git a/mods/species/drakes/drake_abilities_friendly.dm b/mods/species/drakes/drake_abilities_friendly.dm index a412874b9fd..0e7b74855cb 100644 --- a/mods/species/drakes/drake_abilities_friendly.dm +++ b/mods/species/drakes/drake_abilities_friendly.dm @@ -21,7 +21,7 @@ var/global/list/_wounds_being_tended_by_drakes = list() if(length(friend.get_external_organs())) var/list/injured_organs = friend.get_injured_organs() if(length(injured_organs)) - var/mob/living/carbon/human/H = friend + var/mob/living/human/H = friend for (var/obj/item/organ/external/E in H.bad_external_organs) if(!length(E.wounds)) continue diff --git a/mods/species/drakes/drake_organs.dm b/mods/species/drakes/drake_organs.dm index 16343179eaf..a42a3578cb4 100644 --- a/mods/species/drakes/drake_organs.dm +++ b/mods/species/drakes/drake_organs.dm @@ -22,7 +22,7 @@ if(owner && owner.stat != DEAD && !is_broken() && sap_crop && sap_crop.total_volume < 10) sap_crop.add_reagent(/decl/material/liquid/sifsap, 0.5) -/obj/item/organ/internal/drake_gizzard/do_install(var/mob/living/carbon/human/target, var/obj/item/organ/external/affected, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE) +/obj/item/organ/internal/drake_gizzard/do_install(var/mob/living/human/target, var/obj/item/organ/external/affected, var/in_place = FALSE, var/update_icon = TRUE, var/detached = FALSE) . = ..() if(owner) LAZYDISTINCTADD(owner.stat_organs, src) diff --git a/mods/species/drakes/drake_spit.dm b/mods/species/drakes/drake_spit.dm index e1e3178d085..d35efda2c01 100644 --- a/mods/species/drakes/drake_spit.dm +++ b/mods/species/drakes/drake_spit.dm @@ -15,7 +15,7 @@ /obj/item/projectile/drake_spit/on_hit(atom/target, blocked, def_zone) // Stun is needed to effectively hunt simplemobs, but it's OP against humans. if(ishuman(target)) - var/mob/living/carbon/human/victim = target + var/mob/living/human/victim = target SET_STATUS_MAX(victim, STAT_CONFUSE, max(stun, weaken)) stun = 0 weaken = 0 diff --git a/mods/species/drakes/species.dm b/mods/species/drakes/species.dm index 145cfbacd6e..2c086848f82 100644 --- a/mods/species/drakes/species.dm +++ b/mods/species/drakes/species.dm @@ -36,7 +36,7 @@ ) species_hud = /datum/hud_data/grafadreka inherent_verbs = list( - /mob/living/carbon/human/proc/drake_sit + /mob/living/human/proc/drake_sit ) traits = list( /decl/trait/sivian_biochemistry = TRAIT_LEVEL_EXISTS @@ -54,18 +54,18 @@ ) // TODO: move pain onto a behavior datum or bodytype. -/decl/species/grafadreka/get_pain_emote(var/mob/living/carbon/human/H, var/pain_power) +/decl/species/grafadreka/get_pain_emote(var/mob/living/human/H, var/pain_power) if(H?.get_bodytype()?.type == /decl/bodytype/quadruped/grafadreka/hatchling) pain_emotes_with_pain_level = hatchling_pain_emotes_with_pain_level else pain_emotes_with_pain_level = adult_pain_emotes_with_pain_level return ..() -/decl/species/grafadreka/get_surgery_overlay_icon(var/mob/living/carbon/human/H) +/decl/species/grafadreka/get_surgery_overlay_icon(var/mob/living/human/H) return null // todo: 'mods/species/drakes/icons/surgery.dmi' // Stub for muscle memory of the Sit verb on Polaris. -/mob/living/carbon/human/proc/drake_sit() +/mob/living/human/proc/drake_sit() set name = "Sit" set category = "IC" set src = usr diff --git a/mods/species/neoavians/_neoavians.dme b/mods/species/neoavians/_neoavians.dme index 79444adfede..e7c8d526399 100644 --- a/mods/species/neoavians/_neoavians.dme +++ b/mods/species/neoavians/_neoavians.dme @@ -1,11 +1,13 @@ #ifndef CONTENT_PACK_NEOAVIANS #define CONTENT_PACK_NEOAVIANS +// BEGIN_INCLUDE #include "_neoavians.dm" #include "clothing.dm" -#include "machinery/suit_cycler.dm" -#include "datum/language.dm" -#include "datum/loadout.dm" -#include "datum/species.dm" -#include "datum/accessory.dm" -#include "datum/species_bodytypes.dm" +#include "datum\accessory.dm" +#include "datum\language.dm" +#include "datum\loadout.dm" +#include "datum\species.dm" +#include "datum\species_bodytypes.dm" +#include "machinery\suit_cycler.dm" +// END_INCLUDE #endif diff --git a/mods/species/neoavians/datum/species.dm b/mods/species/neoavians/datum/species.dm index 75213895171..1497e975a08 100644 --- a/mods/species/neoavians/datum/species.dm +++ b/mods/species/neoavians/datum/species.dm @@ -64,12 +64,12 @@ ) ) -/decl/species/neoavian/equip_default_fallback_uniform(var/mob/living/carbon/human/H) +/decl/species/neoavian/equip_default_fallback_uniform(var/mob/living/human/H) if(istype(H)) H.equip_to_slot_or_del(new /obj/item/clothing/dress/avian_smock/worker, slot_w_uniform_str) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/avian, slot_shoes_str) -/decl/species/neoavian/get_holder_color(var/mob/living/carbon/human/H) +/decl/species/neoavian/get_holder_color(var/mob/living/human/H) return H.get_skin_colour() /decl/hierarchy/outfit/job/generic/assistant/avian diff --git a/mods/species/serpentid/datum/species.dm b/mods/species/serpentid/datum/species.dm index cb406fbf8d5..84956801e62 100644 --- a/mods/species/serpentid/datum/species.dm +++ b/mods/species/serpentid/datum/species.dm @@ -74,7 +74,7 @@ ) var/list/skin_overlays = list() -/decl/species/serpentid/can_overcome_gravity(var/mob/living/carbon/human/H) +/decl/species/serpentid/can_overcome_gravity(var/mob/living/human/H) var/datum/gas_mixture/mixture = H.loc.return_air() if(mixture) @@ -87,12 +87,12 @@ return FALSE -/decl/species/serpentid/handle_environment_special(var/mob/living/carbon/human/H) +/decl/species/serpentid/handle_environment_special(var/mob/living/human/H) if(!H.on_fire && H.fire_stacks < 2) H.fire_stacks += 0.2 return -/decl/species/serpentid/can_fall(var/mob/living/carbon/human/H) +/decl/species/serpentid/can_fall(var/mob/living/human/H) var/datum/gas_mixture/mixture = H.loc.return_air() var/turf/T = GetBelow(H.loc) for(var/obj/O in T) @@ -104,7 +104,7 @@ return FALSE return TRUE -/decl/species/serpentid/handle_fall_special(var/mob/living/carbon/human/H, var/turf/landing) +/decl/species/serpentid/handle_fall_special(var/mob/living/human/H, var/turf/landing) var/datum/gas_mixture/mixture = H.loc.return_air() var/turf/T = GetBelow(H.loc) @@ -124,13 +124,13 @@ return FALSE -/decl/species/serpentid/can_shred(var/mob/living/carbon/human/H, var/ignore_intent, var/ignore_antag) +/decl/species/serpentid/can_shred(var/mob/living/human/H, var/ignore_intent, var/ignore_antag) if(!H.get_equipped_item(slot_handcuffed_str) || H.buckled) return ..(H, ignore_intent, TRUE) else return 0 -/decl/species/serpentid/handle_movement_delay_special(var/mob/living/carbon/human/H) +/decl/species/serpentid/handle_movement_delay_special(var/mob/living/human/H) var/tally = 0 H.remove_cloaking_source(src) @@ -142,7 +142,7 @@ return tally // todo: make this on bodytype -/decl/species/serpentid/update_skin(var/mob/living/carbon/human/H) +/decl/species/serpentid/update_skin(var/mob/living/human/H) if(H.stat) H.skin_state = SKIN_NORMAL @@ -178,7 +178,7 @@ return(threat_image) -/decl/species/serpentid/disarm_attackhand(var/mob/living/carbon/human/attacker, var/mob/living/carbon/human/target) +/decl/species/serpentid/disarm_attackhand(var/mob/living/human/attacker, var/mob/living/human/target) if(attacker.pulling_punches || target.current_posture.prone || attacker == target) return ..(attacker, target) if(world.time < attacker.last_attack + 20) diff --git a/mods/species/serpentid/mobs/bodyparts_serpentid.dm b/mods/species/serpentid/mobs/bodyparts_serpentid.dm index d4b34376a04..aadf48f1d72 100644 --- a/mods/species/serpentid/mobs/bodyparts_serpentid.dm +++ b/mods/species/serpentid/mobs/bodyparts_serpentid.dm @@ -41,12 +41,12 @@ /obj/item/organ/internal/eyes/serpentid/Initialize() . = ..() - if(dna) - color = rgb(dna.GetUIValue(DNA_UI_EYES_R), dna.GetUIValue(DNA_UI_EYES_G), dna.GetUIValue(DNA_UI_EYES_B)) + if(owner) + color = owner.get_eye_colour() -/obj/item/organ/internal/eyes/insectoid/serpentid/set_dna(var/datum/dna/new_dna) +/obj/item/organ/internal/eyes/insectoid/serpentid/copy_from_mob_snapshot(datum/mob_snapshot/supplied_appearance) . = ..() - color = rgb(new_dna.GetUIValue(DNA_UI_EYES_R), new_dna.GetUIValue(DNA_UI_EYES_G), new_dna.GetUIValue(DNA_UI_EYES_B)) + color = supplied_appearance?.eye_color /obj/item/organ/internal/liver/insectoid/serpentid name = "toxin filter" @@ -67,7 +67,7 @@ to_chat(owner, "You feel air rushing through your trachea!") /obj/item/organ/internal/lungs/insectoid/serpentid/handle_failed_breath() - var/mob/living/carbon/human/H = owner + var/mob/living/human/H = owner var/oxygenated = GET_CHEMICAL_EFFECT(owner, CE_OXYGENATED) H.heal_damage(OXY, HUMAN_MAX_OXYLOSS * oxygenated) @@ -148,7 +148,7 @@ playsound(owner.loc, 'sound/effects/angrybug.ogg', 60, 0) owner.skin_state = SKIN_THREAT owner.update_skin() - addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob/living/carbon/human, reset_skin)), 10 SECONDS, TIMER_UNIQUE) + addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob/living/human, reset_skin)), 10 SECONDS, TIMER_UNIQUE) else if(owner.skin_state == SKIN_THREAT) owner.reset_skin() diff --git a/mods/species/utility_frames/_utility_frames.dme b/mods/species/utility_frames/_utility_frames.dme index 728a6e05d86..15ee526e745 100644 --- a/mods/species/utility_frames/_utility_frames.dme +++ b/mods/species/utility_frames/_utility_frames.dme @@ -1,9 +1,11 @@ #ifndef MODPACK_UTILITY_FRAMES #define MODPACK_UTILITY_FRAMES -#include "../../content/shackles/_shackles.dme" +#include "..\..\content\shackles\_shackles.dme" +// BEGIN_INCLUDE #include "_utility_frames.dm" +#include "aspects.dm" +#include "markings.dm" #include "species.dm" #include "species_bodytypes.dm" -#include "markings.dm" -#include "aspects.dm" +// END_INCLUDE #endif \ No newline at end of file diff --git a/mods/species/utility_frames/species.dm b/mods/species/utility_frames/species.dm index 5222b9a72d5..c1a17fb7a9a 100644 --- a/mods/species/utility_frames/species.dm +++ b/mods/species/utility_frames/species.dm @@ -53,5 +53,5 @@ /obj/item/organ/external/head/utility_frame glowing_eyes = TRUE -/decl/species/utility_frame/disfigure_msg(var/mob/living/carbon/human/H) +/decl/species/utility_frame/disfigure_msg(var/mob/living/human/H) . = SPAN_DANGER("The faceplate is dented and cracked!\n") diff --git a/mods/species/vox/_vox.dm b/mods/species/vox/_vox.dm index f4671758ba0..f62ceb3dace 100644 --- a/mods/species/vox/_vox.dm +++ b/mods/species/vox/_vox.dm @@ -10,7 +10,7 @@ credits_crew_names = list("THE VOX") credits_topics = list("VOX RITUAL DUELS", "NECK MARKINGS", "ANCIENT SUPERCOMPUTERS") -/mob/living/carbon/human/vox/Initialize(mapload, species_name, datum/dna/new_dna, decl/bodytype/new_bodytype) +/mob/living/human/vox/Initialize(mapload, species_name, datum/mob_snapshot/supplied_appearance) SET_HAIR_STYLE(src, /decl/sprite_accessory/hair/vox/short, TRUE) SET_HAIR_COLOUR(src, COLOR_BEASTY_BROWN, TRUE) species_name = SPECIES_VOX diff --git a/mods/species/vox/_vox.dme b/mods/species/vox/_vox.dme index a81b459f720..f935187d754 100644 --- a/mods/species/vox/_vox.dme +++ b/mods/species/vox/_vox.dme @@ -1,31 +1,34 @@ #ifndef MODPACK_VOX #define MODPACK_VOX +// BEGIN_INCLUDE #include "_vox.dm" #include "mobs_vox.dm" #include "organs_vox.dm" -#include "datum/accessories.dm" -#include "datum/antagonism.dm" -#include "datum/aspects.dm" -#include "datum/cultures_vox.dm" -#include "datum/descriptors_vox.dm" -#include "datum/factions_vox.dm" -#include "datum/language.dm" -#include "datum/locations_vox.dm" -#include "datum/religions_vox.dm" -#include "datum/robolimbs.dm" -#include "datum/species.dm" -#include "datum/species_bodytypes.dm" -#include "datum/trader.dm" -#include "datum/unit_testing.dm" -#include "gear/gear.dm" -#include "gear/gear_gloves.dm" -#include "gear/gear_head.dm" -#include "gear/gear_mask.dm" -#include "gear/gear_rig.dm" -#include "gear/gear_shoes.dm" -#include "gear/gear_suit.dm" -#include "gear/gear_under.dm" -#include "gear/gun.dm" -#include "gear/gun_slugsling.dm" -#include "gear/gun_spikethrower.dm" +#include "datum\accessories.dm" +#include "datum\antagonism.dm" +#include "datum\aspects.dm" +#include "datum\cultures_vox.dm" +#include "datum\descriptors_vox.dm" +#include "datum\factions_vox.dm" +#include "datum\heist_compatibility.dm" +#include "datum\language.dm" +#include "datum\locations_vox.dm" +#include "datum\religions_vox.dm" +#include "datum\robolimbs.dm" +#include "datum\species.dm" +#include "datum\species_bodytypes.dm" +#include "datum\trader.dm" +#include "datum\unit_testing.dm" +#include "gear\gear.dm" +#include "gear\gear_gloves.dm" +#include "gear\gear_head.dm" +#include "gear\gear_mask.dm" +#include "gear\gear_rig.dm" +#include "gear\gear_shoes.dm" +#include "gear\gear_suit.dm" +#include "gear\gear_under.dm" +#include "gear\gun.dm" +#include "gear\gun_slugsling.dm" +#include "gear\gun_spikethrower.dm" +// END_INCLUDE #endif diff --git a/mods/species/vox/datum/antagonism.dm b/mods/species/vox/datum/antagonism.dm index 1fd685dbea2..4b8c182ee3a 100644 --- a/mods/species/vox/datum/antagonism.dm +++ b/mods/species/vox/datum/antagonism.dm @@ -1,66 +1,4 @@ -/decl/special_role/raider/Initialize() - . = ..() - LAZYSET(outfits_per_species, SPECIES_VOX, /decl/hierarchy/outfit/vox_raider) - -/decl/hierarchy/outfit/vox_raider - name = "Job - Vox Raider" - l_ear = /obj/item/radio/headset/raider - shoes = /obj/item/clothing/shoes/magboots/vox - gloves = /obj/item/clothing/gloves/vox - mask = /obj/item/clothing/mask/gas/swat/vox - back = /obj/item/tank/nitrogen - uniform = /obj/item/clothing/suit/robe/vox - glasses = /obj/item/clothing/glasses/thermal - holster = /obj/item/clothing/webbing/holster/armpit - suit_store = /obj/item/flashlight - hands = list(/obj/item/gun/launcher/alien/spikethrower) - id_type = /obj/item/card/id/syndicate - -/decl/hierarchy/outfit/vox_raider/equip_outfit(mob/living/carbon/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) - uniform = pick(/obj/item/clothing/suit/robe/vox, /obj/item/clothing/pants/vox) - glasses = pick(/obj/item/clothing/glasses/thermal, /obj/item/clothing/glasses/thermal/plain/eyepatch, /obj/item/clothing/glasses/thermal/plain/monocle) - holster = pick(/obj/item/clothing/webbing/holster/armpit, /obj/item/clothing/webbing/holster/waist, /obj/item/clothing/webbing/holster/hip) - . = ..() - H.set_internals(locate(/obj/item/tank) in H.contents) - -// The following mirror is ~special~. -/obj/structure/mirror/raider - name = "cracked mirror" - desc = "Something seems strange about this old, dirty mirror. Your reflection doesn't look like you remember it." - icon_state = "mirror_broke" - shattered = TRUE - -/obj/structure/mirror/raider/attack_hand(mob/user) - if(!istype(get_area(src), /area/map_template/syndicate_mothership)) - return ..() - - var/decl/species/my_species = user?.get_species() - var/decl/special_role/raider/raiders = GET_DECL(/decl/special_role/raider) - if(!istype(user) || !user.mind || !user.mind.assigned_special_role != raiders || !my_species || my_species.name == SPECIES_VOX || !is_alien_whitelisted(user, SPECIES_VOX)) - return ..() - - var/choice = input("Do you wish to become a vox of the Shoal? This is not reversible.") as null|anything in list("No","Yes") - if(choice != "Yes") - return ..() - - var/decl/hierarchy/outfit/outfit = GET_DECL(/decl/hierarchy/outfit/vox_raider) - var/mob/living/carbon/human/vox/vox = new(get_turf(src), SPECIES_VOX) - outfit.equip_outfit(vox) - if(user.mind) - user.mind.transfer_to(vox) - qdel(user) - addtimer(CALLBACK(src, PROC_REF(do_post_voxifying), vox), 1) - -/obj/structure/mirror/raider/proc/do_post_voxifying(var/mob/living/carbon/human/vox) - var/newname = sanitize_safe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN) - if(!newname || newname == "") - var/decl/cultural_info/voxculture = GET_DECL(/decl/cultural_info/culture/vox/raider) - newname = voxculture.get_random_name() - vox.real_name = newname - vox.SetName(vox.real_name) - var/decl/special_role/raider/raiders = GET_DECL(/decl/special_role/raider) - raiders.update_access(vox) - +// Wizard /obj/item/magic_rock/Initialize(ml, material_key) LAZYSET(potentials, SPECIES_VOX, /spell/targeted/shapeshift/true_form) . = ..() diff --git a/mods/species/vox/datum/heist_compatibility.dm b/mods/species/vox/datum/heist_compatibility.dm new file mode 100644 index 00000000000..315aeda06f2 --- /dev/null +++ b/mods/species/vox/datum/heist_compatibility.dm @@ -0,0 +1,64 @@ +#ifdef GAMEMODE_PACK_HEIST +/decl/special_role/raider/Initialize() + . = ..() + LAZYSET(outfits_per_species, SPECIES_VOX, /decl/hierarchy/outfit/vox_raider) + +/decl/hierarchy/outfit/vox_raider + name = "Job - Vox Raider" + l_ear = /obj/item/radio/headset/raider + shoes = /obj/item/clothing/shoes/magboots/vox + gloves = /obj/item/clothing/gloves/vox + mask = /obj/item/clothing/mask/gas/swat/vox + back = /obj/item/tank/nitrogen + uniform = /obj/item/clothing/suit/robe/vox + glasses = /obj/item/clothing/glasses/thermal + holster = /obj/item/clothing/webbing/holster/armpit + suit_store = /obj/item/flashlight + hands = list(/obj/item/gun/launcher/alien/spikethrower) + id_type = /obj/item/card/id/syndicate + +/decl/hierarchy/outfit/vox_raider/equip_outfit(mob/living/human/H, assignment, equip_adjustments, datum/job/job, datum/mil_rank/rank) + uniform = pick(/obj/item/clothing/suit/robe/vox, /obj/item/clothing/pants/vox) + glasses = pick(/obj/item/clothing/glasses/thermal, /obj/item/clothing/glasses/thermal/plain/eyepatch, /obj/item/clothing/glasses/thermal/plain/monocle) + holster = pick(/obj/item/clothing/webbing/holster/armpit, /obj/item/clothing/webbing/holster/waist, /obj/item/clothing/webbing/holster/hip) + . = ..() + H.set_internals(locate(/obj/item/tank) in H.contents) + +// The following mirror is ~special~. +/obj/structure/mirror/raider + name = "cracked mirror" + desc = "Something seems strange about this old, dirty mirror. Your reflection doesn't look like you remember it." + icon_state = "mirror_broke" + shattered = TRUE + +/obj/structure/mirror/raider/attack_hand(mob/user) + if(!istype(get_area(src), /area/map_template/syndicate_mothership)) + return ..() + + var/decl/species/my_species = user?.get_species() + var/decl/special_role/raider/raiders = GET_DECL(/decl/special_role/raider) + if(!istype(user) || !user.mind || !user.mind.assigned_special_role != raiders || !my_species || my_species.name == SPECIES_VOX || !is_alien_whitelisted(user, SPECIES_VOX)) + return ..() + + var/choice = input("Do you wish to become a vox of the Shoal? This is not reversible.") as null|anything in list("No","Yes") + if(choice != "Yes") + return ..() + + var/decl/hierarchy/outfit/outfit = GET_DECL(/decl/hierarchy/outfit/vox_raider) + var/mob/living/human/vox/vox = new(get_turf(src), SPECIES_VOX) + outfit.equip_outfit(vox) + if(user.mind) + user.mind.transfer_to(vox) + qdel(user) + addtimer(CALLBACK(src, PROC_REF(do_post_voxifying), vox), 1) + +/obj/structure/mirror/raider/proc/do_post_voxifying(var/mob/living/human/vox) + var/newname = sanitize_safe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN) + if(!newname || newname == "") + var/decl/cultural_info/voxculture = GET_DECL(/decl/cultural_info/culture/vox/raider) + newname = voxculture.get_random_name() + vox.real_name = newname + vox.SetName(vox.real_name) + var/decl/special_role/raider/raiders = GET_DECL(/decl/special_role/raider) + raiders.update_access(vox) +#endif \ No newline at end of file diff --git a/mods/species/vox/datum/language.dm b/mods/species/vox/datum/language.dm index 3e6e6c61663..6441c66747c 100644 --- a/mods/species/vox/datum/language.dm +++ b/mods/species/vox/datum/language.dm @@ -15,7 +15,7 @@ /decl/language/vox/can_speak_special(var/mob/speaker) if(!ishuman(speaker)) return FALSE - var/mob/living/carbon/human/H = speaker + var/mob/living/human/H = speaker var/obj/item/organ/internal/tongue = GET_INTERNAL_ORGAN(H, BP_HINDTONGUE) if(!istype(tongue) || !tongue.is_usable()) to_chat(speaker, SPAN_WARNING("You are not capable of speaking [name]!")) diff --git a/mods/species/vox/datum/species.dm b/mods/species/vox/datum/species.dm index 6f09b5fb36b..e7bff524c86 100644 --- a/mods/species/vox/datum/species.dm +++ b/mods/species/vox/datum/species.dm @@ -29,7 +29,7 @@ ) inherent_verbs = list( - /mob/living/carbon/human/proc/toggle_vox_pressure_seal + /mob/living/human/proc/toggle_vox_pressure_seal ) unarmed_attacks = list( @@ -133,7 +133,7 @@ /decl/emote/exertion/synthetic/creak ) -/decl/species/vox/equip_survival_gear(var/mob/living/carbon/human/H) +/decl/species/vox/equip_survival_gear(var/mob/living/human/H) H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/vox(H), slot_wear_mask_str) var/obj/item/backpack/backpack = H.get_equipped_item(slot_back_str) if(istype(backpack)) @@ -150,14 +150,14 @@ // Ideally this would all be on bodytype, but pressure is handled per-mob currently. var/global/list/vox_current_pressure_toggle = list() -/decl/species/vox/disfigure_msg(var/mob/living/carbon/human/H) +/decl/species/vox/disfigure_msg(var/mob/living/human/H) var/decl/pronouns/G = H.get_pronouns() return SPAN_DANGER("[G.His] beak-segments are cracked and chipped beyond recognition!\n") /decl/species/vox/skills_from_age(age) . = 8 -/decl/species/vox/handle_death(var/mob/living/carbon/human/H) +/decl/species/vox/handle_death(var/mob/living/human/H) ..() var/obj/item/organ/internal/voxstack/stack = H.get_organ(BP_STACK, /obj/item/organ/internal/voxstack) if (stack) @@ -168,23 +168,23 @@ var/global/list/vox_current_pressure_toggle = list() emote_message_3p = "$USER$ SHRIEKS!" emote_sound = 'mods/species/vox/sounds/shriek1.ogg' -/decl/species/vox/get_warning_low_pressure(var/mob/living/carbon/human/H) +/decl/species/vox/get_warning_low_pressure(var/mob/living/human/H) if(H && global.vox_current_pressure_toggle["\ref[H]"]) return 50 return ..() -/decl/species/vox/get_hazard_low_pressure(var/mob/living/carbon/human/H) +/decl/species/vox/get_hazard_low_pressure(var/mob/living/human/H) if(H && global.vox_current_pressure_toggle["\ref[H]"]) return 0 return ..() -/mob/living/carbon/human/proc/toggle_vox_pressure_seal() +/mob/living/human/proc/toggle_vox_pressure_seal() set name = "Toggle Vox Pressure Seal" set category = "Abilities" set src = usr if(!istype(species, /decl/species/vox)) - verbs -= /mob/living/carbon/human/proc/toggle_vox_pressure_seal + verbs -= /mob/living/human/proc/toggle_vox_pressure_seal return if(incapacitated(INCAPACITATION_KNOCKOUT)) diff --git a/mods/species/vox/datum/species_bodytypes.dm b/mods/species/vox/datum/species_bodytypes.dm index 3ced904de96..4df2e25757c 100644 --- a/mods/species/vox/datum/species_bodytypes.dm +++ b/mods/species/vox/datum/species_bodytypes.dm @@ -70,7 +70,7 @@ ) return ..() -/decl/bodytype/vox/get_movement_slowdown(var/mob/living/carbon/human/H) +/decl/bodytype/vox/get_movement_slowdown(var/mob/living/human/H) if(H && global.vox_current_pressure_toggle["\ref[H]"]) return 1.5 return ..() diff --git a/mods/species/vox/datum/trader.dm b/mods/species/vox/datum/trader.dm index 7abecad3cce..6211285cb6a 100644 --- a/mods/species/vox/datum/trader.dm +++ b/mods/species/vox/datum/trader.dm @@ -68,7 +68,7 @@ /datum/trader/ship/vox/hail(var/mob/user) if(ishuman(user)) - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user if(H.species) switch(H.species.name) if(SPECIES_VOX) diff --git a/mods/species/vox/datum/unit_testing.dm b/mods/species/vox/datum/unit_testing.dm index d14706d07fe..1026f897cad 100644 --- a/mods/species/vox/datum/unit_testing.dm +++ b/mods/species/vox/datum/unit_testing.dm @@ -5,7 +5,7 @@ /datum/unit_test/mob_damage/vox name = "MOB: Vox damage check template" template = /datum/unit_test/mob_damage/vox - mob_type = /mob/living/carbon/human/vox + mob_type = /mob/living/human/vox /datum/unit_test/mob_damage/vox/brute name = "MOB: Vox Brute Damage Check" diff --git a/mods/species/vox/gear/gear_shoes.dm b/mods/species/vox/gear/gear_shoes.dm index aa8cb4a2db7..b3ad991e46f 100644 --- a/mods/species/vox/gear/gear_shoes.dm +++ b/mods/species/vox/gear/gear_shoes.dm @@ -14,7 +14,7 @@ else if(!ishuman(user)) return - var/mob/living/carbon/human/H = user + var/mob/living/human/H = user var/obj/item/shoes = H.get_equipped_item(slot_shoes_str) if(shoes != src) to_chat(user, "You will have to put on the [src] before you can do that.") diff --git a/mods/species/vox/gear/gun.dm b/mods/species/vox/gear/gun.dm index 6d04b3118cc..f55e773b031 100644 --- a/mods/species/vox/gear/gun.dm +++ b/mods/species/vox/gear/gun.dm @@ -1,7 +1,7 @@ /datum/extension/voxform base_type = /datum/extension/voxform -/datum/extension/voxform/proc/check_held_user(var/mob/living/carbon/human/user, var/atom/movable/thing) +/datum/extension/voxform/proc/check_held_user(var/mob/living/human/user, var/atom/movable/thing) if(!istype(user)) return FALSE if(user.get_bodytype_category() != BODYTYPE_VOX && user.try_unequip(thing)) @@ -10,7 +10,7 @@ return FALSE return TRUE -/obj/item/gun/special_check(var/mob/living/carbon/human/user) +/obj/item/gun/special_check(var/mob/living/human/user) . = ..() if(!QDELETED(src) && src.loc == user && has_extension(src, /datum/extension/voxform)) var/datum/extension/voxform/voxform = get_extension(src, /datum/extension/voxform) diff --git a/mods/species/vox/mobs_vox.dm b/mods/species/vox/mobs_vox.dm index 843e4389a57..3951c19fdaa 100644 --- a/mods/species/vox/mobs_vox.dm +++ b/mods/species/vox/mobs_vox.dm @@ -1,2 +1,2 @@ -/mob/living/simple_animal/hostile/slug/check_friendly_species(var/mob/living/carbon/human/H) +/mob/living/simple_animal/hostile/slug/check_friendly_species(var/mob/living/human/H) return (istype(H) && H.get_bodytype_category() == BODYTYPE_VOX) || ..() diff --git a/mods/species/vox/organs_vox.dm b/mods/species/vox/organs_vox.dm index 82028b4df7a..33230c896f8 100644 --- a/mods/species/vox/organs_vox.dm +++ b/mods/species/vox/organs_vox.dm @@ -164,9 +164,9 @@ var/datum/mind/backup var/prompting = FALSE // Are we waiting for a user prompt? -/obj/item/organ/internal/voxstack/Initialize(mapload, material_key, datum/dna/given_dna, decl/bodytype/new_bodytype) - var/decl/species/dna_species = given_dna && get_species_by_key(given_dna.species) - . = ..(mapload, material_key, given_dna, dna_species?.base_internal_prosthetics_model) +/obj/item/organ/internal/voxstack/Initialize(mapload, material_key, datum/mob_snapshot/supplied_appearance, decl/bodytype/new_bodytype) + var/decl/species/dna_species = supplied_appearance && supplied_appearance.root_species + . = ..(mapload, material_key, supplied_appearance, dna_species?.base_internal_prosthetics_model) do_backup() /obj/item/organ/internal/voxstack/examine(mob/user) diff --git a/nebula.dme b/nebula.dme index c4b516e0bd3..7c628408458 100644 --- a/nebula.dme +++ b/nebula.dme @@ -44,13 +44,13 @@ #include "code\__defines\damage_organs.dm" #include "code\__defines\definition_helpers.dm" #include "code\__defines\directions.dm" -#include "code\__defines\dna.dm" #include "code\__defines\dview.dm" #include "code\__defines\feedback.dm" #include "code\__defines\fires.dm" #include "code\__defines\flags.dm" #include "code\__defines\fluids.dm" #include "code\__defines\gamemode.dm" +#include "code\__defines\genetics.dm" #include "code\__defines\guns.dm" #include "code\__defines\holomap.dm" #include "code\__defines\hud.dm" @@ -468,6 +468,7 @@ #include "code\datums\extensions\storage\subtypes_structure.dm" #include "code\datums\extensions\storage\subtypes_tray.dm" #include "code\datums\extensions\storage\subtypes_wallet.dm" +#include "code\datums\genetics\genetic_conditions.dm" #include "code\datums\graph\graph.dm" #include "code\datums\graph\node.dm" #include "code\datums\helper_datums\dist_check.dm" @@ -727,13 +728,10 @@ #include "code\game\antagonist\outsider\actors.dm" #include "code\game\antagonist\outsider\ert.dm" #include "code\game\antagonist\outsider\mercenary.dm" -#include "code\game\antagonist\outsider\ninja.dm" #include "code\game\antagonist\outsider\wizard.dm" #include "code\game\antagonist\station\cultist.dm" -#include "code\game\antagonist\station\loyalist.dm" #include "code\game\antagonist\station\provocateur.dm" #include "code\game\antagonist\station\renegade.dm" -#include "code\game\antagonist\station\revolutionary.dm" #include "code\game\antagonist\station\thrall.dm" #include "code\game\antagonist\station\traitor.dm" #include "code\game\area\area_abstract.dm" @@ -742,15 +740,8 @@ #include "code\game\area\area_power.dm" #include "code\game\area\area_space.dm" #include "code\game\area\areas.dm" -#include "code\game\dna\dna2.dm" -#include "code\game\dna\dna2_domutcheck.dm" -#include "code\game\dna\dna2_helpers.dm" -#include "code\game\dna\genes\disabilities.dm" -#include "code\game\dna\genes\gene.dm" -#include "code\game\dna\genes\powers.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\game_mode_latespawn.dm" -#include "code\game\gamemodes\setupgame.dm" #include "code\game\gamemodes\calamity\calamity.dm" #include "code\game\gamemodes\cult\cult.dm" #include "code\game\gamemodes\cult\cult_items.dm" @@ -771,12 +762,7 @@ #include "code\game\gamemodes\endgame\supermatter_cascade\universe.dm" #include "code\game\gamemodes\events\power_failure.dm" #include "code\game\gamemodes\extended\extended.dm" -#include "code\game\gamemodes\heist\heist.dm" -#include "code\game\gamemodes\mixed\crossfire.dm" -#include "code\game\gamemodes\mixed\siege.dm" #include "code\game\gamemodes\mixed\spyvspy.dm" -#include "code\game\gamemodes\mixed\uprising.dm" -#include "code\game\gamemodes\ninja\ninja.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" #include "code\game\gamemodes\objectives\_objective.dm" @@ -795,7 +781,6 @@ #include "code\game\gamemodes\objectives\objective_protect.dm" #include "code\game\gamemodes\objectives\objective_rev.dm" #include "code\game\gamemodes\objectives\objective_steal.dm" -#include "code\game\gamemodes\revolution\revolution.dm" #include "code\game\gamemodes\traitor\traitor.dm" #include "code\game\gamemodes\wizard\wizard.dm" #include "code\game\gamemodes\wizard\servant_items\caretaker.dm" @@ -1324,7 +1309,7 @@ #include "code\game\objects\items\weapons\melee\energy_axe.dm" #include "code\game\objects\items\weapons\melee\energy_cutlass.dm" #include "code\game\objects\items\weapons\melee\energy_machete.dm" -#include "code\game\objects\items\weapons\melee\energy_ninja.dm" +#include "code\game\objects\items\weapons\melee\energy_projected.dm" #include "code\game\objects\items\weapons\melee\energy_sword.dm" #include "code\game\objects\items\weapons\melee\misc.dm" #include "code\game\objects\items\weapons\storage\backpack.dm" @@ -2021,8 +2006,8 @@ #include "code\modules\clothing\spacesuits\rig\rig_wiring.dm" #include "code\modules\clothing\spacesuits\rig\modules\combat.dm" #include "code\modules\clothing\spacesuits\rig\modules\computer.dm" +#include "code\modules\clothing\spacesuits\rig\modules\infiltration.dm" #include "code\modules\clothing\spacesuits\rig\modules\modules.dm" -#include "code\modules\clothing\spacesuits\rig\modules\ninja.dm" #include "code\modules\clothing\spacesuits\rig\modules\utility.dm" #include "code\modules\clothing\spacesuits\rig\modules\vision.dm" #include "code\modules\clothing\spacesuits\rig\suits\combat.dm" @@ -2040,9 +2025,9 @@ #include "code\modules\clothing\suits\bio.dm" #include "code\modules\clothing\suits\cloaks.dm" #include "code\modules\clothing\suits\dashiki.dm" -#include "code\modules\clothing\suits\fated_mantle.dm" #include "code\modules\clothing\suits\jobs.dm" #include "code\modules\clothing\suits\labcoat.dm" +#include "code\modules\clothing\suits\mantle.dm" #include "code\modules\clothing\suits\miscellaneous.dm" #include "code\modules\clothing\suits\poncho.dm" #include "code\modules\clothing\suits\robes.dm" @@ -2733,10 +2718,12 @@ #include "code\modules\mob\mob_damage.dm" #include "code\modules\mob\mob_defines.dm" #include "code\modules\mob\mob_eating.dm" +#include "code\modules\mob\mob_genetics.dm" #include "code\modules\mob\mob_grabs.dm" #include "code\modules\mob\mob_helpers.dm" #include "code\modules\mob\mob_layering.dm" #include "code\modules\mob\mob_movement.dm" +#include "code\modules\mob\mob_snapshot.dm" #include "code\modules\mob\mob_status.dm" #include "code\modules\mob\mob_temperature.dm" #include "code\modules\mob\mob_transformation_simple.dm" @@ -2784,6 +2771,7 @@ #include "code\modules\mob\living\living_dreams.dm" #include "code\modules\mob\living\living_eating.dm" #include "code\modules\mob\living\living_electrocution.dm" +#include "code\modules\mob\living\living_genetics.dm" #include "code\modules\mob\living\living_give.dm" #include "code\modules\mob\living\living_grabs.dm" #include "code\modules\mob\living\living_hallucinations.dm" @@ -4005,9 +3993,7 @@ #include "interface\skin.dmf" #include "maps\_map_include.dm" #include "maps\antag_spawn\ert\ert.dm" -#include "maps\antag_spawn\heist\heist.dm" #include "maps\antag_spawn\mercenary\mercenary.dm" -#include "maps\antag_spawn\ninja\ninja.dm" #include "maps\antag_spawn\wizard\wizard.dm" #include "maps\away_sites_testing\away_sites_testing_define.dm" #include "maps\example\example_define.dm" diff --git a/test/run-test.sh b/test/run-test.sh index 85ac39d8b3d..a9907ae692c 100755 --- a/test/run-test.sh +++ b/test/run-test.sh @@ -212,6 +212,7 @@ function run_code_tests { run_test "check icon state limit (maps)" "python3 tools/check_icon_state_limit.py maps" run_test_ci "check changelog builds" "python3 tools/changelog/ss13_genchangelog.py html/changelog.html html/changelogs" run_test "check files included" "python3 tools/validate_dme.py < nebula.dme" + run_test "check modpack files included" "python3 tools/validate_modpacks.py" } function run_byond_tests { diff --git a/tools/map_migrations/4113_carbon_removal.txt b/tools/map_migrations/4113_carbon_removal.txt new file mode 100644 index 00000000000..1b30ff494f8 --- /dev/null +++ b/tools/map_migrations/4113_carbon_removal.txt @@ -0,0 +1 @@ +/mob/living/carbon/human/@SUBTYPES : /mob/living/human/@SUBTYPES{@OLD} diff --git a/tools/validate_dme.py b/tools/validate_dme.py index f8db6d699e8..4966ef550fe 100644 --- a/tools/validate_dme.py +++ b/tools/validate_dme.py @@ -101,9 +101,12 @@ def compare_lines(a, b): raise f"Two lines were exactly the same ({a} vs. {b})" +failed = False sorted_lines = sorted(lines, key = functools.cmp_to_key(compare_lines)) for (index, line) in enumerate(lines): if sorted_lines[index] != line: print(f"The include at line {index + offset} is out of order ({line}, expected {sorted_lines[index]})") - print(f"::error file=tgstation.dme,line={index+offset},title=DME Validator::The include at line {index + offset} is out of order ({line}, expected {sorted_lines[index]})") - sys.exit(1) + print(f"::error file=nebula.dme,line={index+offset},title=DME Validator::The include at line {index + offset} is out of order ({line}, expected {sorted_lines[index]})") + failed = True +if failed: + sys.exit(1) diff --git a/tools/validate_modpacks.py b/tools/validate_modpacks.py new file mode 100644 index 00000000000..33f4e82a632 --- /dev/null +++ b/tools/validate_modpacks.py @@ -0,0 +1,120 @@ +import fnmatch +import functools +import glob +import sys +import os + +FORBID_INCLUDE = [ +] + +IGNORE_INCLUDE = [ + # These are stubs. + r'mods/content/dungeon_loot/subtypes/exosuit.dm', + # The validator can't detect the weird way these are loaded. + r'mods/content/corporate/away_sites/**/*.dm', + r'mods/content/government/away_sites/**/*.dm' +] + +def validate_modpack(dme_path): + (modpack_root, dme_name) = os.path.split(dme_path) + reading = False + lines = [] + total = 0 + with open(dme_path, 'r') as dme_file: + for line in dme_file.readlines(): + total+=1 + line = line.strip() + + if line == "// BEGIN_INCLUDE": + reading = True + continue + elif line == "// END_INCLUDE": + break + elif not reading: + continue + elif not line.startswith("#include"): + continue + + lines.append(line) + + offset = total - len(lines) + print(f"{offset} lines were ignored in output") + modpack_failed = False + + for code_file in glob.glob("**/*.dm", root_dir=modpack_root, recursive=True): + dm_path = code_file.replace('/', '\\') + full_file = os.path.join(modpack_root, code_file) + + included = f"#include \"{dm_path}\"" in lines + forbid_include = False + + ignored = False + for ignore in IGNORE_INCLUDE: + if not fnmatch.fnmatch(full_file, ignore): + continue + + ignored = True + break + + if ignored: + continue + + for forbid in FORBID_INCLUDE: + if not fnmatch.fnmatch(full_file, forbid): + continue + + forbid_include = True + + if included: + print(f"{os.path.join(modpack_root,dm_path)} should not be included") + print(f"::error file={full_file},line=1,title=DME Validator::File should not be included") + modpack_failed = True + + if forbid_include: + continue + + if not included: + print(f"{os.path.join(modpack_root,dm_path)} is not included") + print(f"::error file={full_file},line=1,title=DME Validator::File is not included") + modpack_failed = True + + def compare_lines(a, b): + # Remove initial include as well as the final quotation mark + a = a[len("#include \""):-1].lower() + b = b[len("#include \""):-1].lower() + + a_segments = a.split('\\') + b_segments = b.split('\\') + + for (a_segment, b_segment) in zip(a_segments, b_segments): + a_is_file = a_segment.endswith(".dm") + b_is_file = b_segment.endswith(".dm") + + # code\something.dm will ALWAYS come before code\directory\something.dm + if a_is_file and not b_is_file: + return -1 + + if b_is_file and not a_is_file: + return 1 + + # interface\something.dm will ALWAYS come after code\something.dm + if a_segment != b_segment: + return (a_segment > b_segment) - (a_segment < b_segment) + + raise ValueError(f"Two lines were exactly the same ({a} vs. {b})") + + sorted_lines = sorted(lines, key = functools.cmp_to_key(compare_lines)) + for (index, line) in enumerate(lines): + if sorted_lines[index] != line: + print(f"The include at line {index + offset} is out of order ({line}, expected {sorted_lines[index]})") + print(f"::error file={dme_path},line={index+offset},title=DME Validator::The include at line {index + offset} is out of order ({line}, expected {sorted_lines[index]})") + modpack_failed = True + return modpack_failed + +failed = False +for modpack_dme in glob.glob("mods/**/*.dme", recursive=True): + failed = validate_modpack(modpack_dme) or failed + +if failed: + sys.exit(1) +