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. + + 30 July 2011.
  • Superxpdude Updated: