diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 6724122a501..60eae92ba1d 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -25,6 +25,19 @@ * Text sanitization */ +//this proc strips html properly, but it's not lazy like the other procs. +//this means that it doesn't just remove < and > and call it a day. seriously, who the fuck thought that would be useful. +/proc/strip_html_properly(var/input) + var/opentag = 1 //These store the position of < and > respectively. + var/closetag = 1 + while(1) + opentag = findtext(input, "<") + closetag = findtext(input, ">") + if(!closetag || !opentag) + break + input = copytext(input, 1, opentag) + copytext(input, (closetag + 1)) + return input + //Simply removes < and > and limits the length of the message /proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN) var/list/strip_chars = list("<",">") @@ -363,16 +376,3 @@ var/list/binary = list("0","1") temp = findtextEx(haystack, ascii2text(text2ascii(needles,i)), start, end) //Note: ascii2text(text2ascii) is faster than copytext() if(temp) end = temp return end - -//this proc strips html properly, but it's not lazy like the other procs. -//this means that it doesn't just remove < and > and call it a day. seriously, who the fuck thought that would be useful. -/proc/strip_html_properly(var/input) - var/opentag = 1 //These store the position of < and > respectively. - var/closetag = 1 - while(1) - opentag = findtext(input, "<") - closetag = findtext(input, ">") - if(!closetag || !opentag) - break - input = copytext(input, 1, opentag) + copytext(input, (closetag + 1)) - return input diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm index ad6a82e04df..64a72a6a6bf 100644 --- a/code/modules/events/holiday/halloween.dm +++ b/code/modules/events/holiday/halloween.dm @@ -9,7 +9,10 @@ /datum/round_event/spooky/start() for(var/mob/living/carbon/human/H in mob_list) if(H.dna) - hardset_dna(H, null, null, null, null, /datum/species/skeleton) + if(prob(50)) + hardset_dna(H, null, null, null, null, /datum/species/skeleton) + else + hardset_dna(H, null, null, null, null, /datum/species/zombie) for(var/mob/living/simple_animal/corgi/Ian/Ian in mob_list) Ian.place_on_head(new /obj/item/weapon/bedsheet(Ian)) diff --git a/code/modules/food&drinks/food/snacks/meat.dm b/code/modules/food&drinks/food/snacks/meat.dm index 91b2c27b243..9397cd6b40f 100644 --- a/code/modules/food&drinks/food/snacks/meat.dm +++ b/code/modules/food&drinks/food/snacks/meat.dm @@ -61,6 +61,11 @@ icon_state = "skeletonmeat" desc = "There's a point where this needs to stop and clearly we have passed it" +/obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/zombie + name = "-meat (rotten)" + icon_state = "lizardmeat" //Close enough. + desc = "Halfway to becoming fertilizer for your garden." + /obj/item/weapon/reagent_containers/food/snacks/meat/monkey //same as plain meat diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index 37831db6f0a..c173f406e2f 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -18,29 +18,3 @@ /mob/dead/observer/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq) src << message - -/* - for (var/mob/M in hearers(null, null)) - if (!M.stat) - if(M.job == "Chaplain") - if (prob (49)) - M.show_message("You hear muffled speech... but nothing is there...", 2) - if(prob(20)) - playsound(src.loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1) - else - M.show_message("You hear muffled speech... you can almost make out some words...", 2) -// M.show_message("[stutter(message)]", 2) - if(prob(30)) - playsound(src.loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1) - else - if (prob(50)) - return - else if (prob (95)) - M.show_message("You hear muffled speech... but nothing is there...", 2) - if(prob(20)) - playsound(src.loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1) - else - M.show_message("You hear muffled speech... you can almost make out some words...", 2) -// M.show_message("[stutter(message)]", 2) - playsound(src.loc, pick('sound/effects/ghost.ogg','sound/effects/ghost2.ogg'), 10, 1) -*/ \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index e3e42effb46..99cb7f8eece 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -214,10 +214,7 @@ return 1 /datum/species/fly/handle_speech(message) - if(copytext(message, 1, 2) != "*") - message = replacetext(message, "z", stutter("zz")) - - return message + return replacetext(message, "z", stutter("zz")) /* SKELETONS @@ -229,3 +226,30 @@ id = "skeleton" sexes = 0 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/skeleton +/* + ZOMBIES +*/ + +/datum/species/zombie + // 1spooky + name = "Brain-Munching Zombie" + id = "zombie" + say_mod = "moans" + sexes = 0 + meat = /obj/item/weapon/reagent_containers/food/snacks/meat/human/mutant/zombie + +/datum/species/zombie/handle_speech(message) + var/list/message_list = text2list(message, " ") + var/maxchanges = max(round(message_list.len / 1.5), 2) + + for(var/i = rand(maxchanges / 2, maxchanges), i > 0, i--) + var/insertpos = rand(1, message_list.len - 1) + var/inserttext = message_list[insertpos] + + if(!(copytext(inserttext, length(inserttext) - 2) == "...")) + message_list[insertpos] = inserttext + "..." + + if(prob(20) && message_list.len > 3) + message_list.Insert(insertpos, "[pick("BRAINS", "Brains", "Braaaiinnnsss", "BRAAAIIINNSSS")]...") + + return list2text(message_list, " ") diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index 8b586b4fab9..ff3073b2ddd 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ