diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index da72abcdd5e..9e76a6af56a 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -164,7 +164,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H) preview_icon.Blend(temp, ICON_OVERLAY) //Tail - if(H.species.tail && H.species.flags & HAS_TAIL) + if(H.species.tail) temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.species.tail]_s") preview_icon.Blend(temp, ICON_OVERLAY) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 1e6d9790eb2..a51ac42ee25 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -779,12 +779,8 @@ client usr << "Mob doesn't exist anymore" return - // Clear out their species abilities. - H.species.remove_inherent_verbs(H) - if(H.set_species(new_species)) usr << "Set species of [H] to [H.species]." - H.regenerate_icons() else usr << "Failed! Something went wrong." diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 9983eff1ac0..0ee04f0230c 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -109,6 +109,17 @@ O.show_message("\red [usr] destroys the [name]!", 1) health = 0 else + + // Aliens can get straight through these. + if(istype(usr,/mob/living/carbon)) + var/mob/living/carbon/M = usr + if(locate(/datum/organ/internal/xenos/hivenode) in M.internal_organs) + for(var/mob/O in oviewers(src)) + O.show_message("\red [usr] strokes the [name] and it melts away!", 1) + health = 0 + healthcheck() + return + usr << "\blue You claw at the [name]." for(var/mob/O in oviewers(src)) O.show_message("\red [usr] claws at the [name]!", 1) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 80f1fcb8e51..5b41ba88b7b 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -260,8 +260,11 @@ if(ishuman(M)) //START HUMAN var/mob/living/carbon/human/H = M + var/list/mob_equip = list() + if(H.species.hud && H.species.hud.equip_slots) + mob_equip = H.species.hud.equip_slots - if(H.species && !(slot in H.species.hud.equip_slots)) + if(H.species && !(slot in mob_equip)) return 0 switch(slot) @@ -306,7 +309,7 @@ if(slot_belt) if(H.belt) return 0 - if(!H.w_uniform) + if(!H.w_uniform && (slot_w_uniform in mob_equip)) if(!disable_warning) H << "\red You need a jumpsuit before you can attach this [name]." return 0 @@ -354,7 +357,7 @@ if(slot_wear_id) if(H.wear_id) return 0 - if(!H.w_uniform) + if(!H.w_uniform && (slot_w_uniform in mob_equip)) if(!disable_warning) H << "\red You need a jumpsuit before you can attach this [name]." return 0 @@ -364,7 +367,7 @@ if(slot_l_store) if(H.l_store) return 0 - if(!H.w_uniform) + if(!H.w_uniform && (slot_w_uniform in mob_equip)) if(!disable_warning) H << "\red You need a jumpsuit before you can attach this [name]." return 0 @@ -375,7 +378,7 @@ if(slot_r_store) if(H.r_store) return 0 - if(!H.w_uniform) + if(!H.w_uniform && (slot_w_uniform in mob_equip)) if(!disable_warning) H << "\red You need a jumpsuit before you can attach this [name]." return 0 @@ -387,7 +390,7 @@ if(slot_s_store) if(H.s_store) return 0 - if(!H.wear_suit) + if(!H.wear_suit && (slot_wear_suit in mob_equip)) if(!disable_warning) H << "\red You need a suit before you can attach this [name]." return 0 diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 14c134dc083..820bcbe7e9d 100755 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -6,6 +6,8 @@ var/name = "an unknown language" // Fluff name of language if any. var/desc = "A language." // Short description for 'Check Languages'. var/speech_verb = "says" // 'says', 'hisses', 'farts'. + var/ask_verb = "asks" // Used when sentence ends in a ? + var/exclaim_verb = "exclaims" // Used when sentence ends in a ! var/signlang_verb = list() // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags var/colour = "body" // CSS style to use for strings in this language. var/key = "x" // Character used to speak in language eg. :o for Unathi. @@ -33,6 +35,14 @@ /datum/language/proc/check_special_condition(var/mob/other) return 1 +/datum/language/proc/get_spoken_verb(var/msg_end) + switch(msg_end) + if("!") + return exclaim_verb + if("?") + return ask_verb + return speech_verb + /datum/language/unathi name = "Sinta'unathi" desc = "The common language of Moghes, composed of sibilant hisses and rattles. Spoken natively by Unathi." diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 699dfe301fe..c529cc9154d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -522,4 +522,7 @@ step(AM, t) now_pushing = 0 return + return + +/mob/living/carbon/can_use_vents() return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/alien/alien_species.dm b/code/modules/mob/living/carbon/human/alien/alien_species.dm index b592c6292b7..908abe85e31 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_species.dm +++ b/code/modules/mob/living/carbon/human/alien/alien_species.dm @@ -126,6 +126,7 @@ ) inherent_verbs = list( + /mob/living/proc/ventcrawl, /mob/living/carbon/human/proc/regurgitate, /mob/living/carbon/human/proc/plant, /mob/living/carbon/human/proc/transfer_plasma, @@ -162,6 +163,7 @@ ) inherent_verbs = list( + /mob/living/proc/ventcrawl, /mob/living/carbon/human/proc/tackle, /mob/living/carbon/human/proc/gut, /mob/living/carbon/human/proc/leap, @@ -190,6 +192,7 @@ ) inherent_verbs = list( + /mob/living/proc/ventcrawl, /mob/living/carbon/human/proc/tackle, /mob/living/carbon/human/proc/regurgitate, /mob/living/carbon/human/proc/transfer_plasma, @@ -222,6 +225,7 @@ ) inherent_verbs = list( + /mob/living/proc/ventcrawl, /mob/living/carbon/human/proc/psychic_whisper, /mob/living/carbon/human/proc/regurgitate, /mob/living/carbon/human/proc/lay_egg, diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 3156e1fe7c4..275790fe5e6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1171,6 +1171,7 @@ dna.species = new_species if(species) + if(species.name && species.name == new_species) return if(species.language) @@ -1179,6 +1180,9 @@ if(species.default_language) remove_language(species.default_language) + // Clear out their species abilities. + species.remove_inherent_verbs(src) + species = all_species[new_species] species.create_organs(src) @@ -1202,7 +1206,7 @@ species.handle_post_spawn(src) spawn(0) - update_icons() + regenerate_icons() vessel.add_reagent("blood",560-vessel.total_volume) fixblood() @@ -1345,4 +1349,4 @@ var/datum/organ/internal/eyes = internal_organs_by_name["eyes"] if(eyes && istype(eyes) && !eyes.status & ORGAN_CUT_AWAY) return 1 - return 0 + return 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 0b7d601ca95..766dd94c256 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -232,16 +232,17 @@ /mob/living/carbon/human/say_quote(var/message, var/datum/language/speaking = null) var/verb = "says" var/ending = copytext(message, length(message)) - if(ending=="!") - verb=pick("exclaims","shouts","yells") - else if(ending=="?") - verb="asks" + + if(speaking) + verb = speaking.get_spoken_verb(ending) + else + if(ending == "!") + verb=pick("exclaims","shouts","yells") + else if(ending == "?") + verb="asks" return verb - - - /mob/living/carbon/human/proc/handle_speech_problems(var/message) var/list/returns[3] var/verb = "says" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 963a969658a..0ffe4645a1a 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -234,7 +234,7 @@ heat_level_2 = 480 //Default 400 heat_level_3 = 1100 //Default 1000 - flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_TAIL | HAS_SKIN_COLOR + flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR flesh_color = "#34AF10" @@ -261,7 +261,7 @@ primitive = /mob/living/carbon/monkey/tajara - flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_TAIL | HAS_SKIN_COLOR + flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR flesh_color = "#AFA59E" base_color = "#333333" @@ -353,7 +353,7 @@ breath_type = "nitrogen" poison_type = "oxygen" - flags = NO_SCAN | NO_BLOOD | HAS_TAIL | NO_PAIN + flags = NO_SCAN | NO_BLOOD | NO_PAIN blood_color = "#2299FC" flesh_color = "#808D11" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f3a13b60355..e4ce980456f 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -897,7 +897,7 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1) overlays_standing[TAIL_LAYER] = null - if(species.tail && species.flags & HAS_TAIL) + if(species.tail) if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space)) var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s") tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 5c5805bfaf3..c1adb74feee 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -806,10 +806,10 @@ var/area/new_area = get_area(loc) if(new_area) new_area.Entered(src) + /mob/living/proc/can_use_vents() return "You can't fit into that vent." - /mob/living/proc/has_brain() return 1 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 928ba4130a5..b24e995aecc 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -128,6 +128,8 @@ var/list/ai_verbs_default = list( add_ai_verbs(src) //Languages + add_language("Robot Talk", 1) + add_language("Galactic Common", 0) add_language("Sol Common", 0) add_language("Sinta'unathi", 0) add_language("Siik'tajr", 0) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 4f5eda2af94..f6200a3e7eb 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -114,5 +114,5 @@ response_disarm = "gently pushes aside" response_harm = "splats" -/mob/living/carbon/alien/can_use_vents() +/mob/living/simple_animal/mouse/can_use_vents() return \ No newline at end of file diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 110c505b317..48ba98ac291 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -208,7 +208,7 @@ datum/preferences preview_icon.Blend(temp, ICON_OVERLAY) //Tail - if(current_species && (current_species.flags & HAS_TAIL)) + if(current_species && (current_species.tail)) var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s") preview_icon.Blend(temp, ICON_OVERLAY) diff --git a/code/setup.dm b/code/setup.dm index f0530653527..4b64a0821ef 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -748,11 +748,9 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse #define HAS_SKIN_COLOR 128 #define HAS_LIPS 256 #define HAS_UNDERWEAR 512 -#define HAS_TAIL 1024 - -#define IS_PLANT 2048 -#define IS_WHITELISTED 4096 -#define IS_SYNTHETIC 8192 +#define IS_PLANT 1024 +#define IS_WHITELISTED 2048 +#define IS_SYNTHETIC 4096 //Language flags. #define WHITELISTED 1 // Language is available if the speaker is whitelisted. diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi index 4c1516b8581..defb526a7f8 100644 Binary files a/icons/effects/species.dmi and b/icons/effects/species.dmi differ