From da05274bf41f275ada2cb7fa4ef35fa1b6b652a0 Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 25 Feb 2015 01:13:53 +0100 Subject: [PATCH] Mapfix, hivemind fix --- code/game/gamemodes/blob/overmind.dm | 2 +- code/modules/mob/language.dm | 22 ++++++++++++--------- code/modules/mob/living/carbon/alien/say.dm | 15 ++++++++++++-- maps/cyberiad.dmm | 2 +- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 39f6d7b6014..531f5f1897d 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -79,7 +79,7 @@ for (var/mob/M in dead_mob_list) if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain)) //No meta-evesdropping - rendered = "Blob Telepathy, [name] (Follow) [verb] \"[message]\"" + rendered = "Blob Telepathy, [name] (follow) [verb] \"[message]\"" M.show_message(rendered, 2) /mob/camera/blob/emote(var/act,var/m_type=1,var/message = null) diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 75ecbe0570d..172d52ac98c 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -18,6 +18,7 @@ var/native // If set, non-native speakers will have trouble speaking. var/list/syllables // Used when scrambling text for a non-speaker. var/list/space_chance = 55 // Likelihood of getting a space in the random scramble string. + var/follow = 0 // Applies to HIVEMIND languages - should a follow link be included for dead mobs? /datum/language/proc/get_random_name(var/gender, name_count=2, syllable_count=4) if(!syllables || !syllables.len) @@ -102,7 +103,12 @@ var/msg = "[name], [speaker_mask] [format_message(message, get_spoken_verb(message))]" for(var/mob/player in player_list) - if(istype(player,/mob/dead) || ((src in player.languages) && check_special_condition(player))) + if(istype(player,/mob/dead) && follow) + var/msg_dead = "[name], [speaker_mask] (follow) [format_message(message, get_spoken_verb(message))]" + player << msg_dead + continue + + else if(istype(player,/mob/dead) || ((src in player.languages) && check_special_condition(player))) player << msg /datum/language/proc/check_special_condition(var/mob/other) @@ -340,12 +346,7 @@ colour = "alien" key = "a" flags = RESTRICTED | HIVEMIND - -/datum/language/xenos/check_special_condition(var/mob/other) - var/mob/living/carbon/M = other - if(!istype(M)) - return 1 - return 0 + follow = 1 /datum/language/ling name = "Changeling" @@ -395,6 +396,7 @@ exclaim_verb = "declares" key = "b" flags = RESTRICTED | HIVEMIND + follow = 1 var/drone_only /datum/language/binary/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) @@ -409,8 +411,9 @@ var/message_body = "[speaker.say_quote(message)], \"[message]\"" for (var/mob/M in dead_mob_list) - if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain)) //No meta-evesdropping - M.show_message("[message_start] [message_body]", 2) + if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain)) + var/message_start_dead = "[name] (follow), [speaker.name]" + M.show_message("[message_start_dead] [message_body]", 2) for (var/mob/living/S in living_mob_list) @@ -447,6 +450,7 @@ key = "d" flags = RESTRICTED | HIVEMIND drone_only = 1 + follow = 1 // Language handling. /mob/proc/add_language(var/language) diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index 8b4177470a4..4aeace5be7b 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -16,9 +16,20 @@ return emote(copytext(message,2)) var/datum/language/speaking = parse_language(message) - if(speaking) - message = copytext(message, 2+length(speaking.key)) + message = copytext(message,2+length(speaking.key)) + else + speaking = all_languages["Xenomorph"] + + var/ending = copytext(message, length(message)) + if (speaking) + // This is broadcast to all mobs with the language, + // irrespective of distance or anything else. + if(speaking.flags & HIVEMIND) + speaking.broadcast(src,trim(message)) + return + //If we've gotten this far, keep going! + verb = speaking.get_spoken_verb(ending) message = trim(message) diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index 94578207e79..e7a7823100c 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -90,7 +90,7 @@ "abL" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/table,/obj/item/weapon/paper,/obj/machinery/light/small{dir = 1},/obj/item/weapon/pen,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/security/permabrig) "abM" = (/obj/structure/grille,/obj/structure/sign/securearea,/turf/simulated/floor/airless{icon_state = "circuit"},/area) "abN" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor/plating,/area/security/permabrig) -"abO" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/security/permabrig) +"abO" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/turf/simulated/floor/plating,/area/security/permabrig) "abP" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plating,/area/security/permabrig) "abQ" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/pipe/simple/visible{dir = 9},/turf/simulated/floor/plating,/area/security/permabrig) "abR" = (/turf/simulated/floor/plating,/area/security/permabrig)