From 0f3e6df66f9b0eb8c2f742b4f0f63c04a91d15ac Mon Sep 17 00:00:00 2001 From: "vageyenaman@gmail.com" Date: Tue, 2 Aug 2011 20:39:44 +0000 Subject: [PATCH] Added in speech bubbles. By default, they are off. You have to go to the character setup window and toggle them on in order to see them. Made it so the last exclamation mark when a silicon player exclaims something is not filtered out. Removed xenomicrobes and wizarditis from metroid core reactions. Replaced xenomicrobes with Retrovirus. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1967 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/client.dm | 1 + code/game/mecha/mecha.dm | 5 ++ code/game/objects/closets.dm | 8 +++ code/modules/chemical/Chemistry-Recipes.dm | 14 ++-- code/modules/mob/living/say.dm | 75 +++++++++++++++++++- code/modules/mob/living/silicon/ai/say.dm | 2 +- code/modules/mob/living/silicon/pai/say.dm | 2 +- code/modules/mob/living/silicon/robot/say.dm | 2 +- code/modules/mob/mob.dm | 4 ++ code/modules/mob/new_player/preferences.dm | 7 ++ code/modules/mob/new_player/savefile.dm | 4 +- icons/changelog.html | 10 +++ 12 files changed, 124 insertions(+), 10 deletions(-) diff --git a/code/defines/client.dm b/code/defines/client.dm index a3f0d25b21..c661927efa 100644 --- a/code/defines/client.dm +++ b/code/defines/client.dm @@ -26,6 +26,7 @@ var/karma_spent = 0 var/ooccolor = "#b82e00" //only used for admins of host level, default is equal to admin default var/midis = 1 //Check if midis should be played for someone -- Urist + var/bubbles = 1 //Check if bubbles should be displayed for someone -- Doohl var/be_alien = 0 //Check if that guy wants to be an alien -- Urist authenticate = 0 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 414be9f539..216a33837b 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -192,6 +192,10 @@ move_result = 1 else move_result = step(src,direction) + if(occupant) + for(var/obj/speech_bubble/B in range(1, src)) + if(B.parent == occupant) + B.loc = loc if(move_result) can_move = 0 use_power(step_energy_drain) @@ -201,6 +205,7 @@ src.log_message("Movement control lost. Inertial movement started.") if(do_after(step_in)) can_move = 1 + return 1 return 0 diff --git a/code/game/objects/closets.dm b/code/game/objects/closets.dm index e2ffe3849f..a2be6c3d27 100644 --- a/code/game/objects/closets.dm +++ b/code/game/objects/closets.dm @@ -212,6 +212,14 @@ for (var/mob/M in hearers(src, null)) M << text("BANG, bang!", max(0, 5 - get_dist(src, M))) +/obj/closet/Move() + ..() + for(var/mob/M in contents) + for(var/obj/speech_bubble/B in range(1, src)) + if(B.parent == M) + B.loc = loc + + /obj/closet/attack_paw(mob/user as mob) return src.attack_hand(user) diff --git a/code/modules/chemical/Chemistry-Recipes.dm b/code/modules/chemical/Chemistry-Recipes.dm index 789100780f..150c0586d4 100644 --- a/code/modules/chemical/Chemistry-Recipes.dm +++ b/code/modules/chemical/Chemistry-Recipes.dm @@ -572,8 +572,7 @@ datum var/virus = pick(/datum/disease/flu, /datum/disease/cold, \ /datum/disease/pierrot_throat, /datum/disease/fake_gbs, \ - /datum/disease/brainrot, /datum/disease/wizarditis, \ - /datum/disease/magnitis) + /datum/disease/brainrot, /datum/disease/magnitis) var/datum/disease/F = new virus(0) @@ -607,14 +606,19 @@ datum result_amount = 2 required_container = /obj/item/metroid_core required_other = 5 - metroidxeno - name = "Metroid Xeno" + metroidretro + name = "Metroid Retro" id = "m_xeno" - result = "xenomicrobes" + result = null required_reagents = list("sugar" = 1) result_amount = 1 required_container = /obj/item/metroid_core required_other = 5 + on_reaction(var/datum/reagents/holder, var/created_volume) + var/datum/disease/F = new /datum/disease/dna_retrovirus(0) + var/list/data = list("viruses"= list(F)) + holder.add_reagent("blood", 20, data) + metroidfoam name = "Metroid Foam" id = "m_foam" diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 67db434a61..9b0cc5ae56 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -305,6 +305,47 @@ for (var/mob/M in heard_a) M.show_message(rendered, 2) + if(M.client) + spawn() + var/isbot = "" + if(istype(src, /mob/living/silicon)) + isbot = "bot" + + var/speechtype = "say" + var/ending = copytext(message, length(message)) + if (ending == "?") + speechtype = "question" + else if (ending == "!") + speechtype = "exclamation" + + if(istype(M, /mob/living)) + if(M:ear_deaf && speechtype == "question") + speechtype = "say" + + var/obj/speech_bubble/B = new/obj/speech_bubble + B.icon = 'speechbubble.dmi' + B.parent = src + B.mouse_opacity = 0 + B.invisibility = invisibility + B.layer = 10 + + if(!M.client.bubbles || M == src) + var/image/I = image('speechbubble.dmi', B, "override") + I.override = 1 + M << I + + flick("[isbot][speechtype]", B) + + if(istype(loc, /turf)) + B.loc = loc + else + B.loc = loc.loc + + sleep(11) + del(B) + + + /* for(var/obj/O in M) // This is terribly costly for such a unique circumstance, should probably do this a different way in the future -- TLE if(istype(O, /obj/item/device/aicard)) @@ -329,5 +370,37 @@ for (var/mob/M in heard_b) M.show_message(rendered, 2) + if(M.client) + spawn() + var/isbot = "" + if(istype(src, /mob/living/silicon)) + isbot = "bot" - log_say("[name]/[key] : [message]") \ No newline at end of file + var/obj/speech_bubble/B = new/obj/speech_bubble + B.icon = 'speechbubble.dmi' + B.parent = src + B.mouse_opacity = 0 + B.invisibility = invisibility + B.layer = 10 + + if(!M.client.bubbles || M == src) + var/image/I = image('speechbubble.dmi', B, "override") + I.override = 1 + M << I + + flick("[isbot]say", B) + + if(istype(loc, /turf)) + B.loc = loc + else + B.loc = loc.loc + + sleep(11) + del(B) + + log_say("[name]/[key] : [message]") + + + +/obj/speech_bubble + var/mob/parent \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index ca1b1f6660..6c566918f8 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -13,6 +13,6 @@ if (ending == "?") return "queries, \"[text]\""; else if (ending == "!") - return "declares, \"[copytext(text, 1, length(text))]\""; + return "declares, \"[text]\""; return "states, \"[text]\""; diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm index b0d9857557..46ee324792 100644 --- a/code/modules/mob/living/silicon/pai/say.dm +++ b/code/modules/mob/living/silicon/pai/say.dm @@ -19,7 +19,7 @@ if (ending == "?") return "[src.speakQuery], \"[text]\""; else if (ending == "!") - return "[src.speakExclamation], \"[copytext(text, 1, length(text))]\""; + return "[src.speakExclamation], \"[text]\""; return "[src.speakStatement], \"[text]\""; diff --git a/code/modules/mob/living/silicon/robot/say.dm b/code/modules/mob/living/silicon/robot/say.dm index c8d42e6b4c..97172a9139 100644 --- a/code/modules/mob/living/silicon/robot/say.dm +++ b/code/modules/mob/living/silicon/robot/say.dm @@ -15,6 +15,6 @@ if (ending == "?") return "queries, \"[text]\""; else if (ending == "!") - return "declares, \"[copytext(text, 1, length(text))]\""; + return "declares, \"[text]\""; return "states, \"[text]\""; diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 35a0178e67..08171f9cc7 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1926,6 +1926,10 @@ It's fairly easy to fix if dealing with single letters but not so much with comp step(mob, pick(cardinal)) else . = ..() + for(var/obj/speech_bubble/S in range(1, mob)) + if(S.parent == mob) + S.loc = mob.loc + moving = null return . else diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm index 6436992a80..0fdec384dc 100644 --- a/code/modules/mob/new_player/preferences.dm +++ b/code/modules/mob/new_player/preferences.dm @@ -40,6 +40,7 @@ datum/preferences var/ooccolor = "#b82e00" var/be_random_name = 0 var/underwear = 1 + var/bubbles = 0 // 0 if the player doesn't want bubbles to appear var/occupation[] = list("No Preference", "No Preference", "No Preference") var/datum/jobs/wanted_jobs = list() @@ -391,6 +392,7 @@ datum/preferences dat += "
" dat += "UI Style: [UI == UI_NEW ? "New" : "Old"]
" dat += "Play admin midis: [midis == 1 ? "Yes" : "No"]
" + dat += "Show chat bubbles: [bubbles == 1 ? "Yes" : "No"]
" if(user.client.holder) if(user.client.holder.rank) @@ -793,6 +795,9 @@ datum/preferences if (link_tags["midis"]) midis = (midis+1)%2 + if (link_tags["bubbles"]) + bubbles = !bubbles + if (link_tags["underwear"]) if(!IsGuestKey(user.key)) switch(link_tags["underwear"]) @@ -848,6 +853,7 @@ datum/preferences b_type = "A+" UI = UI_OLD midis = 1 + bubbles = 1 ShowChoices(user) @@ -944,6 +950,7 @@ datum/preferences spawn(10) if(character&&character.client) character.client.midis = midis + character.client.bubbles = bubbles character.client.ooccolor = ooccolor character.client.be_alien = be_special&BE_ALIEN diff --git a/code/modules/mob/new_player/savefile.dm b/code/modules/mob/new_player/savefile.dm index 22e3fd957e..60698afe35 100644 --- a/code/modules/mob/new_player/savefile.dm +++ b/code/modules/mob/new_player/savefile.dm @@ -46,6 +46,7 @@ datum/preferences/proc/savefile_save(mob/user) //world << "DEBUG: saving UI as [UI]" //F["be_alien"] << src.be_alien // Urist F["midis"] << src.midis // Urist + F["bubbles"] << src.bubbles // Doohl F["ooccolor"] << src.ooccolor // Urist F["lastchangelog"] << src.lastchangelog // rastaf0 @@ -101,10 +102,11 @@ datum/preferences/proc/savefile_load(mob/user, var/silent = 1) F["name_is_always_random"] >> src.be_random_name //F["be_alien"] >> src.be_alien // Urist F["midis"] >> src.midis // Urist + F["bubbles"] >> src.bubbles // Doohl F["ooccolor"] >> src.ooccolor // Urist F["lastchangelog"] >> src.lastchangelog // rastaf0 - + if (version<=2) // migration from old preferences file format --rastaf0 src.UI = 0 // swithing from storing an image file to storing boolean value --rastaf0 //world << "DEBUG: loading legacy UI as [UI]" diff --git a/icons/changelog.html b/icons/changelog.html index 240adcc6f5..87b178a870 100644 --- a/icons/changelog.html +++ b/icons/changelog.html @@ -45,6 +45,16 @@ Stuff which is in development and not yet visible to players or just code relate (is. code improvements for expandability, etc.) should not be listed here. They should be listed in the changelog upon commit tho. Thanks. --> +2 August 2011. +
    +
  • Doohl updated: +
      +
    • Speech bubbles: you can toggle them on in the character setup window. Basically, whenever someone around you talks, you see a speech bubble appear above them.
    • +
    • You can no longer create wizarditis and xenomicrobes with metroid cores.
    • +
    • Tweak: Using an exclamation mark as an AI, pAI, or cyborg will not longer get rid of the last exclamation mark.
    • +
    +
+ 30 July 2011.
  • Superxpdude Updated: