From b7f29ca03ef4a1d0bf5e42762b6e1db76a1b2f90 Mon Sep 17 00:00:00 2001 From: "petethegoat@gmail.com" Date: Sat, 12 Jan 2013 22:52:49 +0000 Subject: [PATCH] Committing a new wizard spell, by S0ldi3rKr4s0, and a fix for jetpack mining borgs not having their eye overlays, also by him. In totally unrelated news, added a horse mask. Improved say.dm, so that adding more mask voicechanging snowflake code shouldn't have quite such a big impact. Updated the changelog. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5534 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/spells/horsemask.dm | 39 ++++++ code/game/gamemodes/events/space_ninja.dm | 31 ++++- code/game/gamemodes/wizard/spellbook.dm | 29 +++-- code/modules/clothing/masks/miscellaneous.dm | 12 +- code/modules/mob/living/carbon/human/say.dm | 123 ++++++++---------- .../modules/mob/living/silicon/robot/robot.dm | 2 +- html/changelog.html | 9 ++ icons/obj/clothing/masks.dmi | Bin 10868 -> 11957 bytes tgstation.dme | 1 + 9 files changed, 159 insertions(+), 87 deletions(-) create mode 100644 code/datums/spells/horsemask.dm diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm new file mode 100644 index 00000000000..f3ecc121516 --- /dev/null +++ b/code/datums/spells/horsemask.dm @@ -0,0 +1,39 @@ +/obj/effect/proc_holder/spell/targeted/horsemask + name = "Curse of the Horseman" + desc = "This spell triggers a curse on a target, causing them to wield an unremovable horse head mask. They will speak like a horse! Any masks they are wearing will be disintegrated. This spell does not require robes." + school = "transmutation" + charge_type = "recharge" + charge_max = 150 + charge_counter = 0 + clothes_req = 0 + stat_allowed = 0 + invocation = "KN'A FTAGHU, PUCK 'BTHNK!" + invocation_type = "shout" + range = 7 + selection_type = "range" + var/list/compatible_mobs = list(/mob/living/carbon/human, /mob/living/carbon/monkey) + +/obj/effect/proc_holder/spell/targeted/horsemask/cast(list/targets, mob/user = usr) + if(!targets.len) + user << "No target found in range." + return + + var/mob/living/carbon/target = targets[1] + + if(!(target.type in compatible_mobs)) + user << "It'd be stupid to curse [target] with a horse's head!" + return + + if(!(target in oview(range)))//If they are not in overview after selection. + user << "They are too far away!" + return + + var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead + magichead.canremove = 0 //curses! + magichead.flags_inv = null //so you can still see their face + magichead.voicechange = 1 //NEEEEIIGHH + target.visible_message( "[target]'s face lights up in fire, and after the event a horse's head takes its place!", \ + "Your face burns up, and shortly after the fire you realise you have the face of a horse!") + target.equip_to_slot(magichead, slot_wear_mask) + + flick("e_flash", target.flash) diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 8e085be5d94..6abc55d2fb1 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -1022,4 +1022,33 @@ That is why you attached them to objects. step_to(current_clone,src,1) sleep(5) if(safety<=0) break - return */ \ No newline at end of file + return */ + +//Alternate ninja speech replacement. +/*This text is hilarious but also absolutely retarded. +message = replacetext(message, "l", "r") +message = replacetext(message, "rr", "ru") +message = replacetext(message, "v", "b") +message = replacetext(message, "f", "hu") +message = replacetext(message, "'t", "") +message = replacetext(message, "t ", "to ") +message = replacetext(message, " I ", " ai ") +message = replacetext(message, "th", "z") +message = replacetext(message, "ish", "isu") +message = replacetext(message, "is", "izu") +message = replacetext(message, "ziz", "zis") +message = replacetext(message, "se", "su") +message = replacetext(message, "br", "bur") +message = replacetext(message, "ry", "ri") +message = replacetext(message, "you", "yuu") +message = replacetext(message, "ck", "cku") +message = replacetext(message, "eu", "uu") +message = replacetext(message, "ow", "au") +message = replacetext(message, "are", "aa") +message = replacetext(message, "ay", "ayu") +message = replacetext(message, "ea", "ii") +message = replacetext(message, "ch", "chi") +message = replacetext(message, "than", "sen") +message = replacetext(message, ".", "") +message = lowertext(message) +*/ \ No newline at end of file diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 531e3f558d4..59c8b1e3155 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -25,23 +25,24 @@ dat += "Mutate (60)
" dat += "Ethereal Jaunt (60)
" dat += "Knock (10)
" + dat += "Curse of the Horseman (15)
" if(op) - dat += "Summon Guns (One time use, global spell)
" + dat += "Summon Guns (One time use, global spell)
" dat += "
" dat += "Artefacts:
" dat += "Powerful items imbued with eldritch magics. Summoning one will count towards your maximum number of spells.
" dat += "It is recommended that only experienced wizards attempt to wield such artefacts.
" dat += "
" - dat += "Staff of Change
" + dat += "Staff of Change
" dat += "
" - dat += "Six Soul Stone Shards and the spell Artificer
" + dat += "Six Soul Stone Shards and the spell Artificer
" dat += "
" - dat += "Mastercrafted Armor Set
" + dat += "Mastercrafted Armor Set
" dat += "
" - dat += "Staff of Animation
" + dat += "Staff of Animation
" dat += "
" if(op) - dat += "Re-memorize Spells
" + dat += "Re-memorize Spells
" user << browse(dat, "window=radio") onclose(user, "radio") return @@ -58,7 +59,7 @@ if(href_list["spell_choice"]) if(src.uses >= 1 && src.max_uses >=1 && text2num(href_list["spell_choice"]) < 19) src.uses-- - var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock","Summon Guns","Staff of Change","Six Soul Stone Shards and the spell Artificer","Mastercrafted Armor Set", "Staff of Animation") + var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock","Curse of the Horseman","Summon Guns","Staff of Change","Six Soul Stone Shards and the spell Artificer","Mastercrafted Armor Set", "Staff of Animation") var/already_knows = 0 for(var/obj/effect/proc_holder/spell/aspell in usr.spell_list) if(available_spells[text2num(href_list["spell_choice"])] == aspell.name) @@ -121,22 +122,26 @@ usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/knock(usr) src.temp = "This spell opens nearby doors and does not require wizard garb." if ("14") + feedback_add_details("wizard_spell_learned","HH") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + usr.spell_list += new /obj/effect/proc_holder/spell/targeted/horsemask(usr) + src.temp = "This spell will curse a person to wear an unremovable horse mask (it has glue on the inside) and speak like a horse. It does not require a wizard garb. Do note the curse will disintegrate the target's current mask if they are wearing one." + if ("15") feedback_add_details("wizard_spell_learned","SG") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.rightandwrong() src.max_uses-- src.temp = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill eachother. Just be careful not to get hit in the crossfire!" - if ("15") + if ("16") feedback_add_details("wizard_spell_learned","ST") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/gun/energy/staff(get_turf(usr)) src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" src.max_uses-- - if ("16") + if ("17") feedback_add_details("wizard_spell_learned","SS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr)) usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(usr) src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." src.max_uses-- - if ("17") + if ("18") feedback_add_details("wizard_spell_learned","HS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/clothing/shoes/sandal(get_turf(usr)) //In case they've lost them. new /obj/item/clothing/gloves/purple(get_turf(usr))//To complete the outfit @@ -144,13 +149,13 @@ new /obj/item/clothing/head/helmet/space/rig/wizard(get_turf(usr)) src.temp = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." src.max_uses-- - if("18") + if("19") feedback_add_details("wizard_spell_learned","SA") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/gun/energy/staff/animate(get_turf(usr)) src.temp = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." src.max_uses-- - if (href_list["spell_choice"] == "19") + if (href_list["spell_choice"] == "20") var/area/wizard_station/A = locate() if(usr in A.contents) src.uses = src.max_uses diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 873ba06dcbf..3b8d96f190a 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -41,4 +41,14 @@ item_state = "pig" flags = FPRINT|TABLEPASS|BLOCKHAIR flags_inv = HIDEFACE - w_class = 2 \ No newline at end of file + w_class = 2 + +/obj/item/clothing/mask/horsehead + name = "horse head mask" + desc = "A mask made of soft vinyl and latex, representing the head of a horse." + icon_state = "horsehead" + item_state = "horsehead" + flags = FPRINT|TABLEPASS|BLOCKHAIR + flags_inv = HIDEFACE + w_class = 2 + var/voicechange = 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 86383847d80..c8ba8c0f366 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -1,6 +1,6 @@ /mob/living/carbon/human/say(var/message) - if (silent) + if(silent) return //Mimes dont speak! Changeling hivemind and emotes are allowed. @@ -18,12 +18,12 @@ if (copytext(message, 1, 2) != "*") return - if(src.dna) - if(src.dna.mutantrace == "lizard") + if(dna) + if(dna.mutantrace == "lizard") if(copytext(message, 1, 2) != "*") message = replacetext(message, "s", stutter("ss")) - /*if(src.dna.mutantrace == "slime" && prob(5)) + /*if(dna.mutantrace == "slime" && prob(5)) if(copytext(message, 1, 2) != "*") if(copytext(message, 1, 2) == ";") message = ";" @@ -48,79 +48,58 @@ pick_list -= H //Make sure that you dont HONK the same word twice message = dd_list2text(temp_message, " ") - if(istype(src.wear_mask, /obj/item/clothing/mask/luchador)) - if(copytext(message, 1, 2) != "*") - message = replacetext(message, "captain", "CAPITÁN") - message = replacetext(message, "station", "ESTACIÓN") - message = replacetext(message, "sir", "SEÑOR") - message = replacetext(message, "the ", "el ") - message = replacetext(message, "my ", "mi ") - message = replacetext(message, "is ", "es ") - message = replacetext(message, "it's", "es") - message = replacetext(message, "friend", "amigo") - message = replacetext(message, "buddy", "amigo") - message = replacetext(message, "hello", "hola") - message = replacetext(message, " hot", " caliente") - message = replacetext(message, " very ", " muy ") - message = replacetext(message, "sword", "espada") - message = replacetext(message, "library", "biblioteca") - message = replacetext(message, "traitor", "traidor") - message = replacetext(message, "wizard", "mago") - message = uppertext(message) //Things end up looking better this way (no mixed cases), and it fits the macho wrestler image. - if(prob(25)) - message += " OLE!" + if(wear_mask) + if(istype(wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja) && wear_mask:voice == "Unknown") + if(copytext(message, 1, 2) != "*") + var/list/temp_message = text2list(message, " ") + var/list/pick_list = list() + for(var/i = 1, i <= temp_message.len, i++) + pick_list += i + for(var/i=1, i <= abs(temp_message.len/3), i++) + var/H = pick(pick_list) + if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue + temp_message[H] = ninjaspeak(temp_message[H]) + pick_list -= H + message = dd_list2text(temp_message, " ") + message = replacetext(message, "o", "¤") + message = replacetext(message, "p", "þ") + message = replacetext(message, "l", "£") + message = replacetext(message, "s", "§") + message = replacetext(message, "u", "µ") + message = replacetext(message, "b", "ß") + + else if(istype(wear_mask, /obj/item/clothing/mask/luchador)) + if(copytext(message, 1, 2) != "*") + message = replacetext(message, "captain", "CAPITÁN") + message = replacetext(message, "station", "ESTACIÓN") + message = replacetext(message, "sir", "SEÑOR") + message = replacetext(message, "the ", "el ") + message = replacetext(message, "my ", "mi ") + message = replacetext(message, "is ", "es ") + message = replacetext(message, "it's", "es") + message = replacetext(message, "friend", "amigo") + message = replacetext(message, "buddy", "amigo") + message = replacetext(message, "hello", "hola") + message = replacetext(message, " hot", " caliente") + message = replacetext(message, " very ", " muy ") + message = replacetext(message, "sword", "espada") + message = replacetext(message, "library", "biblioteca") + message = replacetext(message, "traitor", "traidor") + message = replacetext(message, "wizard", "mago") + message = uppertext(message) //Things end up looking better this way (no mixed cases), and it fits the macho wrestler image. + if(prob(25)) + message += " OLE!" + + else if(istype(wear_mask, /obj/item/clothing/mask/horsehead)) + var/obj/item/clothing/mask/horsehead/hoers = wear_mask + if(hoers.voicechange) + if(!(copytext(message, 1, 2) == "*" || (mind && mind.changeling && (copytext(message, 1, 3) == ":g" || copytext(message, 1, 3) == ":G" || copytext(message, 1, 3) == ":ï")))) + message = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") if ((HULK in mutations) && health >= 25 && length(message)) if(copytext(message, 1, 2) != "*") message = "[uppertext(message)]!!" //because I don't know how to code properly in getting vars from other files -Bro - //Ninja mask obscures text and voice if set to do so. - //Would make it more global but it's sort of ninja specific. - if(istype(src.wear_mask, /obj/item/clothing/mask/gas/voice/space_ninja)&&src.wear_mask:voice=="Unknown") - if(copytext(message, 1, 2) != "*") - var/list/temp_message = text2list(message, " ") - var/list/pick_list = list() - for(var/i = 1, i <= temp_message.len, i++) - pick_list += i - for(var/i=1, i <= abs(temp_message.len/3), i++) - var/H = pick(pick_list) - if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue - temp_message[H] = ninjaspeak(temp_message[H]) - pick_list -= H - message = dd_list2text(temp_message, " ") - message = replacetext(message, "o", "¤") - message = replacetext(message, "p", "þ") - message = replacetext(message, "l", "£") - message = replacetext(message, "s", "§") - message = replacetext(message, "u", "µ") - message = replacetext(message, "b", "ß") - /*This text is hilarious but also absolutely retarded. - message = replacetext(message, "l", "r") - message = replacetext(message, "rr", "ru") - message = replacetext(message, "v", "b") - message = replacetext(message, "f", "hu") - message = replacetext(message, "'t", "") - message = replacetext(message, "t ", "to ") - message = replacetext(message, " I ", " ai ") - message = replacetext(message, "th", "z") - message = replacetext(message, "ish", "isu") - message = replacetext(message, "is", "izu") - message = replacetext(message, "ziz", "zis") - message = replacetext(message, "se", "su") - message = replacetext(message, "br", "bur") - message = replacetext(message, "ry", "ri") - message = replacetext(message, "you", "yuu") - message = replacetext(message, "ck", "cku") - message = replacetext(message, "eu", "uu") - message = replacetext(message, "ow", "au") - message = replacetext(message, "are", "aa") - message = replacetext(message, "ay", "ayu") - message = replacetext(message, "ea", "ii") - message = replacetext(message, "ch", "chi") - message = replacetext(message, "than", "sen") - message = replacetext(message, ".", "") - message = lowertext(message) - */ ..(message) /mob/living/carbon/human/say_understands(var/other) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 29cf43eba40..24d0ecdb1f7 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -779,7 +779,7 @@ if(icon_state =="mopgearrex") overlays.Cut() overlays += "eyes-mopgearrex" - if(icon_state =="Miner") + if(icon_state =="Miner" || icon_state =="Miner+j") overlays.Cut() overlays += "eyes-Miner" else diff --git a/html/changelog.html b/html/changelog.html index 2795abb860e..94d4b3c7069 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -48,6 +48,15 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit tho. Thanks. --> +
+

/tg/station 13 Presents

+

Directed by S0ldi3rKr4s0

+

& produced by Petethegoat

+ +
+

12 January 2013

Cael Aislinn updated:

diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 220eaced3857db8872735c5c175638a4905ae83a..61354f77ceb3f9e892d09693093452e5ce47f2d6 100644 GIT binary patch literal 11957 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 I#WM7N0cQlmg8%>k diff --git a/tgstation.dme b/tgstation.dme index 366c73e4ac8..56c4841a2b0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -164,6 +164,7 @@ #include "code\datums\spells\ethereal_jaunt.dm" #include "code\datums\spells\explosion.dm" #include "code\datums\spells\genetic.dm" +#include "code\datums\spells\horsemask.dm" #include "code\datums\spells\inflict_handler.dm" #include "code\datums\spells\knock.dm" #include "code\datums\spells\mind_transfer.dm"