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"