diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index f7ebde4758..4d2f85c951 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -17,9 +17,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians response_disarm = "flails at" response_harm = "punches" icon = 'icons/mob/guardian.dmi' - icon_state = "magicOrange" - icon_living = "magicOrange" - icon_dead = "magicOrange" + icon_state = "magicbase" + icon_living = "magicbase" + icon_dead = "magicbase" speed = 0 blood_volume = 0 a_intent = INTENT_HARM @@ -42,13 +42,16 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians AIStatus = AI_OFF hud_type = /datum/hud/guardian dextrous_hud_type = /datum/hud/dextrous/guardian //if we're set to dextrous, account for it. + var/mutable_appearance/cooloverlay + var/guardiancolor = "#ffffff" + var/recolorentiresprite + var/theme var/list/guardian_overlays[GUARDIAN_TOTAL_LAYERS] var/reset = 0 //if the summoner has reset the guardian already var/cooldown = 0 var/mob/living/carbon/summoner var/range = 13 //how far from the user the spirit can be var/toggle_button_type = /obj/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses - var/datum/guardianname/namedatum = new/datum/guardianname() var/playstyle_string = "You are a standard Guardian. You shouldn't exist!" var/magic_fluff_string = "You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!" var/tech_fluff_string = "BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!" @@ -56,7 +59,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians /mob/living/simple_animal/hostile/guardian/Initialize(mapload, theme) GLOB.parasites += src - setthemename(theme) + updatetheme(theme) . = ..() @@ -79,42 +82,36 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians GLOB.parasites -= src return ..() -/mob/living/simple_animal/hostile/guardian/proc/setthemename(pickedtheme) //set the guardian's theme to something cool! - if(!pickedtheme) - pickedtheme = pick("magic", "tech", "carp") - var/list/possible_names = list() - switch(pickedtheme) +/mob/living/simple_animal/hostile/guardian/proc/updatetheme(theme) //update the guardian's theme + if(!theme) + theme = pick("magic", "tech", "carp", "hive") + switch(theme)//should make it easier to create new stand designs in the future if anyone likes that if("magic") - for(var/type in (subtypesof(/datum/guardianname/magic) - namedatum.type)) - possible_names += new type + name = "Guardian Spirit" + real_name = "Guardian Spirit" + bubble_icon = "guardian" + icon_state = "magicbase" + icon_living = "magicbase" + icon_dead = "magicbase" if("tech") - for(var/type in (subtypesof(/datum/guardianname/tech) - namedatum.type)) - possible_names += new type + name = "Holoparasite" + real_name = "Holoparasite" + bubble_icon = "holo" + icon_state = "techbase" + icon_living = "techbase" + icon_dead = "techbase" if("carp") - for(var/type in (subtypesof(/datum/guardianname/carp) - namedatum.type)) - possible_names += new type - namedatum = pick(possible_names) - updatetheme(pickedtheme) - -/mob/living/simple_animal/hostile/guardian/proc/updatetheme(theme) //update the guardian's theme to whatever its datum is; proc for adminfuckery - name = "[namedatum.prefixname] [namedatum.suffixcolour]" - real_name = "[name]" - icon_living = "[namedatum.parasiteicon]" - icon_state = "[namedatum.parasiteicon]" - icon_dead = "[namedatum.parasiteicon]" - bubble_icon = "[namedatum.bubbleicon]" - - if (namedatum.stainself) - add_atom_colour(namedatum.colour, FIXED_COLOUR_PRIORITY) - - //Special case holocarp, because #snowflake code - if(theme == "carp") - speak_emote = list("gnashes") - desc = "A mysterious fish that stands by its charge, ever vigilant." - - attacktext = "bites" - attack_sound = 'sound/weapons/bite.ogg' - + name = "Holocarp" + real_name = "Holocarp" + bubble_icon = "holo" + icon_state = "holocarp" + icon_living = "holocarp" + icon_dead = "holocarp" + speak_emote = list("gnashes") + desc = "A mysterious fish that stands by its charge, ever vigilant." + attacktext = "bites" + attack_sound = 'sound/weapons/bite.ogg' + recolorentiresprite = TRUE /mob/living/simple_animal/hostile/guardian/Login() //if we have a mind, set its name to ours when it logs in ..() @@ -123,10 +120,37 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(!summoner) to_chat(src, "For some reason, somehow, you have no summoner. Please report this bug immediately.") return - to_chat(src, "You are [real_name], bound to serve [summoner.real_name].") + to_chat(src, "You are a [real_name], bound to serve [summoner.real_name].") to_chat(src, "You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with [summoner.p_them()] privately there.") to_chat(src, "While personally invincible, you will die if [summoner.real_name] does, and any damage dealt to you will have a portion passed on to [summoner.p_them()] as you feed upon [summoner.p_them()] to sustain yourself.") to_chat(src, playstyle_string) + guardiancustomize() + +/mob/living/simple_animal/hostile/guardian/proc/guardiancustomize() + guardianrecolor() + guardianrename() + +/mob/living/simple_animal/hostile/guardian/proc/guardianrecolor() + guardiancolor = input(src,"What would you like your color to be?","Choose Your Color","#ffffff") as color|null + if(!guardiancolor) //redo proc until we get a color + to_chat(src, "Not a valid color, please try again.") + guardianrecolor() + return + if(!recolorentiresprite) + cooloverlay.color = guardiancolor + cut_overlay(cooloverlay) //we need to get our new color + add_overlay(cooloverlay) + else + add_atom_colour(guardiancolor, FIXED_COLOUR_PRIORITY) + +/mob/living/simple_animal/hostile/guardian/proc/guardianrename() + var/new_name = sanitize_name(reject_bad_text(stripped_input(src, "What would you like your name to be?", "Choose Your Name", real_name, MAX_NAME_LEN))) + if(!new_name) //redo proc until we get a good name + to_chat(src, "Not a valid name, please try again.") + guardianrename() + return + visible_message("Your new name [new_name] anchors itself in your mind.") + fully_replace_character_name(null, new_name) /mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies . = ..() @@ -366,7 +390,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians return var/preliminary_message = "[input]" //apply basic color/bolding - var/my_message = "[src]: [preliminary_message]" //add source, color source with the guardian's color + var/my_message = "[src]: [preliminary_message]" //add source, color source with the guardian's color to_chat(summoner, my_message) var/list/guardians = summoner.hasparasites() @@ -393,7 +417,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/list/guardians = hasparasites() for(var/para in guardians) var/mob/living/simple_animal/hostile/guardian/G = para - to_chat(G, "[src]: [preliminary_message]" ) + to_chat(G, "[src]: [preliminary_message]" ) for(var/M in GLOB.dead_mob_list) var/link = FOLLOW_LINK(M, src) to_chat(M, "[link] [my_message]") @@ -424,27 +448,29 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(guardians.len) var/mob/living/simple_animal/hostile/guardian/G = input(src, "Pick the guardian you wish to reset", "Guardian Reset") as null|anything in guardians if(G) - to_chat(src, "You attempt to reset [G.real_name]'s personality...") + to_chat(src, "You attempt to reset [G.real_name]'s personality...") var/list/mob/candidates = pollGhostCandidates("Do you want to play as [src.real_name]'s [G.real_name]?", ROLE_PAI, null, FALSE, 100) if(LAZYLEN(candidates)) var/mob/C = pick(candidates) to_chat(G, "Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.") - to_chat(src, "Your [G.real_name] has been successfully reset.") + to_chat(src, "Your [G.real_name] has been successfully reset.") message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(G)])") G.ghostize(FALSE) - G.setthemename(G.namedatum.theme) //give it a new color, to show it's a new person + G.guardiancustomize() //give it a new color, to show it's a new person C.transfer_ckey(G) G.reset = 1 - switch(G.namedatum.theme) + switch(G.theme) if("tech") - to_chat(src, "[G.real_name] is now online!") + to_chat(src, "[G.real_name] is now online!") if("magic") - to_chat(src, "[G.real_name] has been summoned!") + to_chat(src, "[G.real_name] has been summoned!") + if("carp") + to_chat(src, "[G.real_name] has been caught!") guardians -= G if(!guardians.len) verbs -= /mob/living/proc/guardian_reset else - to_chat(src, "There were no ghosts willing to take control of [G.real_name]. Looks like you're stuck with it for now.") + to_chat(src, "There were no ghosts willing to take control of [G.real_name]. Looks like you're stuck with it for now.") else to_chat(src, "You decide not to reset [guardians.len > 1 ? "any of your guardians":"your guardian"].") else @@ -558,6 +584,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians used = FALSE return var/mob/living/simple_animal/hostile/guardian/G = new pickedtype(user, theme) + G.name = mob_name G.summoner = user G.key = key G.mind.enslave_mind_to_creator(user) @@ -565,13 +592,13 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians switch(theme) if("tech") to_chat(user, "[G.tech_fluff_string]") - to_chat(user, "[G.real_name] is now online!") + to_chat(user, "[G.real_name] is now online!") if("magic") to_chat(user, "[G.magic_fluff_string]") - to_chat(user, "[G.real_name] has been summoned!") + to_chat(user, "[G.real_name] has been summoned!") if("carp") to_chat(user, "[G.carp_fluff_string]") - to_chat(user, "[G.real_name] has been caught!") + to_chat(user, "[G.real_name] has been caught!") user.verbs += /mob/living/proc/guardian_comm user.verbs += /mob/living/proc/guardian_recall user.verbs += /mob/living/proc/guardian_reset @@ -600,6 +627,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians /obj/item/guardiancreator/tech/choose/traitor possible_guardians = list("Assassin", "Chaos", "Charger", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support") + allowling = FALSE /obj/item/guardiancreator/tech/choose/traitor/check_uplink_validity() return !used @@ -683,8 +711,6 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians failure_message = "You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up." ling_failure = "Carp'sie is fine with changelings, so you shouldn't be seeing this message." allowmultiple = TRUE - allowling = TRUE - random = TRUE /obj/item/guardiancreator/carp/choose random = FALSE diff --git a/code/modules/mob/living/simple_animal/guardian/guardiannaming.dm b/code/modules/mob/living/simple_animal/guardian/guardiannaming.dm deleted file mode 100644 index f2e1b57255..0000000000 --- a/code/modules/mob/living/simple_animal/guardian/guardiannaming.dm +++ /dev/null @@ -1,161 +0,0 @@ - -/datum/guardianname - var/prefixname = "Default" //the prefix the guardian uses for its name - var/suffixcolour = "Name" //the suffix the guardian uses for its name - var/parasiteicon = "techbase" //the icon of the guardian - var/bubbleicon = "holo" //the speechbubble icon of the guardian - var/theme = "tech" //what the actual theme of the guardian is - var/colour = "#C3C3C3" //what color the guardian's name is in chat and what color is used for effects from the guardian - var/stainself = 0 //whether to use the color var to literally dye ourself our chosen colour, for lazy spriting - -/datum/guardianname/carp - bubbleicon = "guardian" - theme = "carp" - parasiteicon = "holocarp" - stainself = 1 - -/datum/guardianname/carp/New() - prefixname = pick(GLOB.carp_names) - -/datum/guardianname/carp/sand - suffixcolour = "Sand" - colour = "#C2B280" - -/datum/guardianname/carp/seashell - suffixcolour = "Seashell" - colour = "#FFF5EE" - -/datum/guardianname/carp/coral - suffixcolour = "Coral" - colour = "#FF7F50" - -/datum/guardianname/carp/salmon - suffixcolour = "Salmon" - colour = "#FA8072" - -/datum/guardianname/carp/sunset - suffixcolour = "Sunset" - colour = "#FAD6A5" - -/datum/guardianname/carp/riptide - suffixcolour = "Riptide" - colour = "#89D9C8" - -/datum/guardianname/carp/seagreen - suffixcolour = "Sea Green" - colour = "#2E8B57" - -/datum/guardianname/carp/ultramarine - suffixcolour = "Ultramarine" - colour = "#3F00FF" - -/datum/guardianname/carp/cerulean - suffixcolour = "Cerulean" - colour = "#007BA7" - -/datum/guardianname/carp/aqua - suffixcolour = "Aqua" - colour = "#00FFFF" - -/datum/guardianname/carp/paleaqua - suffixcolour = "Pale Aqua" - colour = "#BCD4E6" - -/datum/guardianname/carp/hookergreen - suffixcolour = "Hooker Green" - colour = "#49796B" - -/datum/guardianname/magic - bubbleicon = "guardian" - theme = "magic" - -/datum/guardianname/magic/New() - prefixname = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces", "Ophiuchus") - -/datum/guardianname/magic/red - suffixcolour = "Red" - parasiteicon = "magicRed" - colour = "#E32114" - -/datum/guardianname/magic/pink - suffixcolour = "Pink" - parasiteicon = "magicPink" - colour = "#FB5F9B" - -/datum/guardianname/magic/orange - suffixcolour = "Orange" - parasiteicon = "magicOrange" - colour = "#F3CF24" - -/datum/guardianname/magic/green - suffixcolour = "Green" - parasiteicon = "magicGreen" - colour = "#A4E836" - -/datum/guardianname/magic/blue - suffixcolour = "Blue" - parasiteicon = "magicBlue" - colour = "#78C4DB" - -/datum/guardianname/tech/New() - prefixname = pick("Gallium", "Indium", "Thallium", "Bismuth", "Aluminium", "Mercury", "Iron", "Silver", "Zinc", "Titanium", "Chromium", "Nickel", "Platinum", "Tellurium", "Palladium", "Rhodium", "Cobalt", "Osmium", "Tungsten", "Iridium") - -/datum/guardianname/tech/rose - suffixcolour = "Rose" - parasiteicon = "techRose" - colour = "#F62C6B" - -/datum/guardianname/tech/peony - suffixcolour = "Peony" - parasiteicon = "techPeony" - colour = "#E54750" - -/datum/guardianname/tech/lily - suffixcolour = "Lily" - parasiteicon = "techLily" - colour = "#F6562C" - -/datum/guardianname/tech/daisy - suffixcolour = "Daisy" - parasiteicon = "techDaisy" - colour = "#ECCD39" - -/datum/guardianname/tech/zinnia - suffixcolour = "Zinnia" - parasiteicon = "techZinnia" - colour = "#89F62C" - -/datum/guardianname/tech/ivy - suffixcolour = "Ivy" - parasiteicon = "techIvy" - colour = "#5DF62C" - -/datum/guardianname/tech/iris - suffixcolour = "Iris" - parasiteicon = "techIris" - colour = "#2CF6B8" - -/datum/guardianname/tech/petunia - suffixcolour = "Petunia" - parasiteicon = "techPetunia" - colour = "#51A9D4" - -/datum/guardianname/tech/violet - suffixcolour = "Violet" - parasiteicon = "techViolet" - colour = "#8A347C" - -/datum/guardianname/tech/lotus - suffixcolour = "Lotus" - parasiteicon = "techLotus" - colour = "#463546" - -/datum/guardianname/tech/lilac - suffixcolour = "Lilac" - parasiteicon = "techLilac" - colour = "#C7A0F6" - -/datum/guardianname/tech/orchid - suffixcolour = "Orchid" - parasiteicon = "techOrchid" - colour = "#F62CF5" diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm index e9f767376a..f1916b412a 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm @@ -77,7 +77,7 @@ user.ex_act(EXPLODE_HEAVY) qdel(src) else - to_chat(user, "[src] glows with a strange light, and you don't touch it.") + to_chat(user, "[src] glows with a strange light, and you don't touch it.") /obj/guardian_bomb/Bump(atom/A) detonate(A) @@ -93,4 +93,4 @@ /obj/guardian_bomb/examine(mob/user) . = stored_obj.examine(user) if(get_dist(user,src)<=2) - . += "It glows with a strange light!" + . += "It glows with a strange light!" diff --git a/code/modules/mob/living/simple_animal/guardian/types/protector.dm b/code/modules/mob/living/simple_animal/guardian/types/protector.dm index 53964254cd..cf6bd3cdb5 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/protector.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/protector.dm @@ -21,8 +21,8 @@ . = ..() if(. > 0 && toggle) var/image/I = new('icons/effects/effects.dmi', src, "shield-flash", MOB_LAYER+0.01, dir = pick(GLOB.cardinals)) - if(namedatum) - I.color = namedatum.colour + if(guardiancolor) + I.color = guardiancolor flick_overlay_view(I, src, 5) /mob/living/simple_animal/hostile/guardian/protector/ToggleMode() @@ -39,8 +39,8 @@ toggle = FALSE else var/mutable_appearance/shield_overlay = mutable_appearance('icons/effects/effects.dmi', "shield-grey") - if(namedatum) - shield_overlay.color = namedatum.colour + if(guardiancolor) + shield_overlay.color = guardiancolor add_overlay(shield_overlay) melee_damage_lower = 5 melee_damage_upper = 5 @@ -59,7 +59,7 @@ visible_message("\The [src] jumps back to its user.") Recall(TRUE) else - to_chat(summoner, "You moved out of range, and were pulled back! You can only move [range] meters from [real_name]!") + to_chat(summoner, "You moved out of range, and were pulled back! You can only move [range] meters from [real_name]!") summoner.visible_message("\The [summoner] jumps back to [summoner.p_their()] protector.") new /obj/effect/temp_visual/guardian/phase/out(get_turf(summoner)) summoner.forceMove(get_turf(src)) diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm index 0e8f632dbd..539ee9081b 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm @@ -55,8 +55,8 @@ . = ..() if(istype(., /obj/item/projectile)) var/obj/item/projectile/P = . - if(namedatum) - P.color = namedatum.colour + if(guardiancolor) + P.color = guardiancolor /mob/living/simple_animal/hostile/guardian/ranged/ToggleLight() var/msg diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index b9783ed116..7b519e1ca1 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -32,8 +32,8 @@ C.adjustOxyLoss(-5) C.adjustToxLoss(-5, forced = TRUE) var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(C)) - if(namedatum) - H.color = namedatum.colour + if(guardiancolor) + H.color = guardiancolor if(C == summoner) update_health_hud() med_hud_set_health() @@ -96,8 +96,8 @@ /obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G) . = ..() - if(G.namedatum) - add_atom_colour(G.namedatum.colour, FIXED_COLOUR_PRIORITY) + if(G.guardiancolor) + add_atom_colour(G.guardiancolor, FIXED_COLOUR_PRIORITY) /obj/structure/receiving_pad/proc/disappear() visible_message("[src] vanishes!") diff --git a/icons/mob/guardian.dmi b/icons/mob/guardian.dmi index 984beee867..bc4d4e30a3 100644 Binary files a/icons/mob/guardian.dmi and b/icons/mob/guardian.dmi differ diff --git a/tgstation.dme b/tgstation.dme index fb82a38385..b212fd39d0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2420,7 +2420,6 @@ #include "code\modules\mob\living\simple_animal\friendly\drone\verbs.dm" #include "code\modules\mob\living\simple_animal\friendly\drone\visuals_icons.dm" #include "code\modules\mob\living\simple_animal\guardian\guardian.dm" -#include "code\modules\mob\living\simple_animal\guardian\guardiannaming.dm" #include "code\modules\mob\living\simple_animal\guardian\types\assassin.dm" #include "code\modules\mob\living\simple_animal\guardian\types\charger.dm" #include "code\modules\mob\living\simple_animal\guardian\types\dextrous.dm"