diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index b5ff49037e6..fdfd6e404ec 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -17,11 +17,13 @@ RegisterSignal(new_holder, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) RegisterSignal(new_holder, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(hit_by_projectile)) new_holder.faction |= FACTION_CARP //:D + new_holder.grant_language(/datum/language/carptongue, ALL, type) /datum/martial_art/the_sleeping_carp/on_remove(mob/living/remove_from) remove_from.remove_traits(scarp_traits, SLEEPING_CARP_TRAIT) UnregisterSignal(remove_from, list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_PRE_BULLET_ACT)) remove_from.faction -= FACTION_CARP //:( + remove_from.remove_language(/datum/language/carptongue, ALL, type) return ..() /datum/martial_art/the_sleeping_carp/proc/check_streak(mob/living/attacker, mob/living/defender) diff --git a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm index 221881c6ea5..263285769b2 100644 --- a/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/carp_organs.dm @@ -94,6 +94,10 @@ if(tooth_fairy) new /obj/item/knife/carp(tooth_fairy) +/obj/item/organ/tongue/carp/get_possible_languages() + . = ..() + . += /datum/language/carptongue + /obj/item/knife/carp name = "carp tooth" desc = "Looks sharp. Sharp enough to poke someone's eye out. Holy fuck it's big." diff --git a/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm b/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm index 69f5a23798f..9c885f38628 100644 --- a/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/fish_organs.dm @@ -47,6 +47,7 @@ if(HAS_TRAIT(owner, TRAIT_IS_WET) && istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/tail/fish)) add_speed_buff() owner.mind?.adjust_experience(/datum/skill/fishing, SKILL_EXP_JOURNEYMAN, silent = TRUE) + owner.grant_language(/datum/language/carptongue, ALL, type) /datum/status_effect/organ_set_bonus/fish/disable_bonus() . = ..() @@ -71,6 +72,7 @@ if(HAS_TRAIT(owner, TRAIT_IS_WET) && istype(owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL), /obj/item/organ/tail/fish)) remove_speed_buff() owner.mind?.adjust_experience(/datum/skill/fishing, -SKILL_EXP_JOURNEYMAN, silent = TRUE) + owner.remove_language(/datum/language/carptongue, ALL, type) /datum/status_effect/organ_set_bonus/fish/proc/get_perceived_food_quality(datum/source, datum/component/edible/edible, list/extra_quality) SIGNAL_HANDLER @@ -419,6 +421,10 @@ . = ..() AddElement(/datum/element/noticable_organ, "Slick black ink seldom rivulets from %PRONOUN_their mouth.", BODY_ZONE_PRECISE_MOUTH) +/obj/item/organ/tongue/inky/get_possible_languages() + . = ..() + . += /datum/language/carptongue + ///Organ from fish with the toxic trait. Allows the user to use tetrodotoxin as a healing chem instead of a toxin. /obj/item/organ/liver/fish name = "mutated fish-liver" diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm index e863f09ecde..21cc1922783 100644 --- a/code/game/objects/items/dehy_carp.dm +++ b/code/game/objects/items/dehy_carp.dm @@ -62,6 +62,7 @@ //Make carp non-hostile to user if(owner) spawned_mob.faction = list("[REF(owner)]") + spawned_mob.grant_language(/datum/language/common, UNDERSTOOD_LANGUAGE, LANGUAGE_ATOM) for(var/mob/living/viewer in viewers(5, get_turf(src))) to_chat(viewer, viewer == owner ? span_notice("The newly grown [spawned_mob.name] looks up at you with friendly eyes.") : span_warning("You have a bad feeling about this.")) qdel(src) diff --git a/code/modules/language/_language_holder.dm b/code/modules/language/_language_holder.dm index b48a1ab1530..8e970ddd17a 100644 --- a/code/modules/language/_language_holder.dm +++ b/code/modules/language/_language_holder.dm @@ -321,6 +321,16 @@ GLOBAL_LIST_INIT(prototype_language_holders, init_language_holder_prototypes()) ) selected_language = /datum/language/uncommon +/datum/language_holder/lizard/hear_common + selected_language = /datum/language/draconic + understood_languages = list( + /datum/language/common = list(LANGUAGE_ATOM), + /datum/language/draconic = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/draconic = list(LANGUAGE_ATOM), + ) + /datum/language_holder/monkey understood_languages = list( /datum/language/common = list(LANGUAGE_ATOM), @@ -503,6 +513,35 @@ GLOBAL_LIST_INIT(prototype_language_holders, init_language_holder_prototypes()) /datum/language/nekomimetic = list(LANGUAGE_ATOM), ) +/datum/language_holder/carp + selected_language = /datum/language/carptongue + understood_languages = list( + /datum/language/carptongue = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/carptongue = list(LANGUAGE_ATOM), + ) + +/datum/language_holder/carp/dragon + understood_languages = list( + /datum/language/carptongue = list(LANGUAGE_ATOM), + /datum/language/draconic = list(LANGUAGE_ATOM), + /datum/language/common = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/carptongue = list(LANGUAGE_ATOM), + /datum/language/draconic = list(LANGUAGE_ATOM), + ) + +/datum/language_holder/carp/hear_common + understood_languages = list( + /datum/language/carptongue = list(LANGUAGE_ATOM), + /datum/language/common = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/carptongue = list(LANGUAGE_ATOM), + ) + // Given to atoms by default /datum/language_holder/atom_basic understood_languages = list(/datum/language/common = list(LANGUAGE_ATOM)) diff --git a/code/modules/language/carptongue.dm b/code/modules/language/carptongue.dm new file mode 100644 index 00000000000..34ef4c4b5cd --- /dev/null +++ b/code/modules/language/carptongue.dm @@ -0,0 +1,12 @@ +/datum/language/carptongue + name = "Carptongue" + desc = "Various fishy sounds that might make sense to space carps." + key = "c" + icon_state = "fish" + flags = NO_STUTTER|TONGUELESS_SPEECH + sentence_chance = 0 + space_chance = 75 + syllables = list("glub", "blub", "bloop") + default_priority = 25 + default_name_syllable_min = 1 + default_name_syllable_max = 2 diff --git a/code/modules/mob/living/basic/heretic/fire_shark.dm b/code/modules/mob/living/basic/heretic/fire_shark.dm index 847584ae41a..e7375f4b33f 100644 --- a/code/modules/mob/living/basic/heretic/fire_shark.dm +++ b/code/modules/mob/living/basic/heretic/fire_shark.dm @@ -22,6 +22,7 @@ speak_emote = list("screams") basic_mob_flags = DEL_ON_DEATH ai_controller = /datum/ai_controller/basic_controller/simple_hostile_obstacles + initial_language_holder = /datum/language_holder/carp/hear_common /mob/living/basic/heretic_summon/fire_shark/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm index cc6bd1c900e..a270692991a 100644 --- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm +++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp.dm @@ -15,6 +15,7 @@ ) crusher_loot = /obj/item/crusher_trophy/tail_spike speed = 12 + initial_language_holder = /datum/language_holder/lizard/hear_common maxHealth = 300 health = 300 diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp.dm b/code/modules/mob/living/basic/space_fauna/carp/carp.dm index d62804f1ca1..bc70e6dc03a 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm @@ -40,6 +40,7 @@ butcher_results = list(/obj/item/food/fishmeat/carp = 2, /obj/item/stack/sheet/animalhide/carp = 1) greyscale_config = /datum/greyscale_config/carp ai_controller = /datum/ai_controller/basic_controller/carp + initial_language_holder = /datum/language_holder/carp habitable_atmos = null minimum_survivable_temperature = 0 maximum_survivable_temperature = 1500 @@ -197,6 +198,7 @@ gold_core_spawnable = NO_SPAWN gender = FEMALE // Both current existing pet carp are female but you can remove this if someone else gets a male one? ai_controller = /datum/ai_controller/basic_controller/carp/pet + initial_language_holder = /datum/language_holder/carp/hear_common /mob/living/basic/carp/pet/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm b/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm index 3b6d1e5e922..1eccb697b59 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm @@ -52,6 +52,7 @@ GLOBAL_LIST_INIT(magicarp_spell_colours, list( gold_core_spawnable = NO_SPAWN greyscale_config = /datum/greyscale_config/carp_magic ai_controller = /datum/ai_controller/basic_controller/carp/ranged + initial_language_holder = /datum/language_holder/carp/hear_common // its magic tamed_commands = list( /datum/pet_command/idle, /datum/pet_command/free, diff --git a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm index 662242ce60f..bbdb134190d 100644 --- a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm +++ b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm @@ -46,6 +46,7 @@ death_sound = 'sound/mobs/non-humanoids/space_dragon/space_dragon_roar.ogg' death_message = "screeches in agony as it collapses to the floor, its life extinguished." butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) + initial_language_holder = /datum/language_holder/carp/dragon can_buckle_to = FALSE lighting_cutoff_red = 12 lighting_cutoff_green = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index a5feaad351f..3189f261746 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -60,6 +60,7 @@ loot = list(/obj/structure/closet/crate/necropolis/dragon) butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/ashdrake = 10) + initial_language_holder = /datum/language_holder/lizard/hear_common var/swooping = NONE var/player_cooldown = 0 gps_name = "Fiery Signal" diff --git a/icons/ui/chat/language.dmi b/icons/ui/chat/language.dmi index 2c4da48352b..6ddd93530b6 100644 Binary files a/icons/ui/chat/language.dmi and b/icons/ui/chat/language.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 8f39003a2c3..31035ae171a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4531,6 +4531,7 @@ #include "code\modules\language\beachbum.dm" #include "code\modules\language\buzzwords.dm" #include "code\modules\language\calcic.dm" +#include "code\modules\language\carptongue.dm" #include "code\modules\language\codespeak.dm" #include "code\modules\language\common.dm" #include "code\modules\language\draconic.dm"