i am hol horse

This commit is contained in:
ZeroMan
2020-03-27 18:23:18 -04:00
parent 268bcdcbfc
commit 54bce5ecc6
8 changed files with 92 additions and 228 deletions

View File

@@ -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 = "<span class='holoparasite bold'>You are a standard Guardian. You shouldn't exist!</span>"
var/magic_fluff_string = "<span class='holoparasite'>You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!</span>"
var/tech_fluff_string = "<span class='holoparasite'>BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!</span>"
@@ -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, "<span class='holoparasite bold'>For some reason, somehow, you have no summoner. Please report this bug immediately.</span>")
return
to_chat(src, "<span class='holoparasite'>You are <font color=\"[namedatum.colour]\"><b>[real_name]</b></font>, bound to serve [summoner.real_name].</span>")
to_chat(src, "<span class='holoparasite'>You are a <b>[real_name]</b>, bound to serve [summoner.real_name].</span>")
to_chat(src, "<span class='holoparasite'>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.</span>")
to_chat(src, "<span class='holoparasite'>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.</span>")
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, "<span class='warning'>Not a valid color, please try again.</span>")
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, "<span class='warning'>Not a valid name, please try again.</span>")
guardianrename()
return
visible_message("<span class='notice'>Your new name <span class='name'>[new_name]</span> anchors itself in your mind.</span>")
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 = "<span class='holoparasite bold'>[input]</span>" //apply basic color/bolding
var/my_message = "<font color=\"[namedatum.colour]\"><b><i>[src]:</i></b></font> [preliminary_message]" //add source, color source with the guardian's color
var/my_message = "<font color=\"[guardiancolor]\"><b><i>[src]:</i></b></font> [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, "<font color=\"[G.namedatum.colour]\"><b><i>[src]:</i></b></font> [preliminary_message]" )
to_chat(G, "<font color=\"[G.guardiancolor]\"><b><i>[src]:</i></b></font> [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, "<span class='holoparasite'>You attempt to reset <font color=\"[G.namedatum.colour]\"><b>[G.real_name]</b></font>'s personality...</span>")
to_chat(src, "<span class='holoparasite'>You attempt to reset <font color=\"[G.guardiancolor]\"><b>[G.real_name]</b></font>'s personality...</span>")
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, "<span class='holoparasite'>Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.</span>")
to_chat(src, "<span class='holoparasite bold'>Your <font color=\"[G.namedatum.colour]\">[G.real_name]</font> has been successfully reset.</span>")
to_chat(src, "<span class='holoparasite bold'>Your <font color=\"[G.guardiancolor]\">[G.real_name]</font> has been successfully reset.</span>")
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, "<span class='holoparasite'><font color=\"[G.namedatum.colour]\"><b>[G.real_name]</b></font> is now online!</span>")
to_chat(src, "<span class='holoparasite'><font color=\"[G.guardiancolor]\"><b>[G.real_name]</b></font> is now online!</span>")
if("magic")
to_chat(src, "<span class='holoparasite'><font color=\"[G.namedatum.colour]\"><b>[G.real_name]</b></font> has been summoned!</span>")
to_chat(src, "<span class='holoparasite'><font color=\"[G.guardiancolor]\"><b>[G.real_name]</b></font> has been summoned!</span>")
if("carp")
to_chat(src, "<span class='holoparasite'><font color=\"[G.guardiancolor]\"><b>[G.real_name]</b></font> has been caught!</span>")
guardians -= G
if(!guardians.len)
verbs -= /mob/living/proc/guardian_reset
else
to_chat(src, "<span class='holoparasite'>There were no ghosts willing to take control of <font color=\"[G.namedatum.colour]\"><b>[G.real_name]</b></font>. Looks like you're stuck with it for now.</span>")
to_chat(src, "<span class='holoparasite'>There were no ghosts willing to take control of <font color=\"[G.guardiancolor]\"><b>[G.real_name]</b></font>. Looks like you're stuck with it for now.</span>")
else
to_chat(src, "<span class='holoparasite'>You decide not to reset [guardians.len > 1 ? "any of your guardians":"your guardian"].</span>")
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, "<span class='holoparasite'><font color=\"[G.namedatum.colour]\"><b>[G.real_name]</b></font> is now online!</span>")
to_chat(user, "<span class='holoparasite'><b>[G.real_name]</b> is now online!</span>")
if("magic")
to_chat(user, "[G.magic_fluff_string]")
to_chat(user, "<span class='holoparasite'><font color=\"[G.namedatum.colour]\"><b>[G.real_name]</b></font> has been summoned!</span>")
to_chat(user, "<span class='holoparasite'><b>[G.real_name]</b> has been summoned!</span>")
if("carp")
to_chat(user, "[G.carp_fluff_string]")
to_chat(user, "<span class='holoparasite'><font color=\"[G.namedatum.colour]\"><b>[G.real_name]</b></font> has been caught!</span>")
to_chat(user, "<span class='holoparasite'><b>[G.real_name]</b> has been caught!</span>")
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 = "<span class='holoparasite bold'>You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up.</span>"
ling_failure = "<span class='holoparasite bold'>Carp'sie is fine with changelings, so you shouldn't be seeing this message.</span>"
allowmultiple = TRUE
allowling = TRUE
random = TRUE
/obj/item/guardiancreator/carp/choose
random = FALSE

View File

@@ -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"

View File

@@ -77,7 +77,7 @@
user.ex_act(EXPLODE_HEAVY)
qdel(src)
else
to_chat(user, "<span class='holoparasite'>[src] glows with a strange <font color=\"[spawner.namedatum.colour]\">light</font>, and you don't touch it.</span>")
to_chat(user, "<span class='holoparasite'>[src] glows with a strange <font color=\"[spawner.guardiancolor]\">light</font>, and you don't touch it.</span>")
/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)
. += "<span class='holoparasite'>It glows with a strange <font color=\"[spawner.namedatum.colour]\">light</font>!</span>"
. += "<span class='holoparasite'>It glows with a strange <font color=\"[spawner.guardiancolor]\">light</font>!</span>"

View File

@@ -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("<span class='danger'>\The [src] jumps back to its user.</span>")
Recall(TRUE)
else
to_chat(summoner, "<span class='holoparasite'>You moved out of range, and were pulled back! You can only move [range] meters from <font color=\"[namedatum.colour]\"><b>[real_name]</b></font>!</span>")
to_chat(summoner, "<span class='holoparasite'>You moved out of range, and were pulled back! You can only move [range] meters from <font color=\"[guardiancolor]\"><b>[real_name]</b></font>!</span>")
summoner.visible_message("<span class='danger'>\The [summoner] jumps back to [summoner.p_their()] protector.</span>")
new /obj/effect/temp_visual/guardian/phase/out(get_turf(summoner))
summoner.forceMove(get_turf(src))

View File

@@ -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

View File

@@ -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!")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -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"