From 7c2e0227e2009e879a6af731f7f76ec0fa07cff1 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 9 Jan 2023 15:10:43 +0100 Subject: [PATCH] [MIRROR] Converts ghosts mobs to a basic mob, slightly changes how ghosts are given their identities [MDB IGNORE] (#18550) * Converts ghosts mobs to a basic mob, slightly changes how ghosts are given their identities (#72196) ## About The Pull Request Performs a very simple conversion of ghosts to basic mobs. They're relatively lacking in unique behavior in their current state, but they didn't really have any when they were simple animals either. They retaliate, they float, they do everything they did before, but now as a basic mob. Kilostation and Derelict Station 6 have had their mapped-in ghosts converted to the new type as well. I'm unsure if there are any other mapped instances of ghosts that will need changing, but please let me know if there are. Also in this PR is a slight rework of how ghost's get their hair/name. As an ADDED BONUS, ghosts now get random hair to gow ith their randomly generated names, rather than hair only being only possible through varediting. (Thank you tattle for helping me figure this out). ## Why It's Good For The Game Strikes another simple_animal from existence. Gives ghost mobs a bit more _visual flair_. ## Changelog :cl: code: Ghosts are now basic mobs! You might not notice any difference, but... code: Ghost mobs now spawn with hair and sometimes facial hair. /:cl: Co-authored-by: Jeremiah <42397676+jlsnow301@ users.noreply.github.com> * Converts ghosts mobs to a basic mob, slightly changes how ghosts are given their identities Co-authored-by: Rhials Co-authored-by: Jeremiah <42397676+jlsnow301@ users.noreply.github.com> Co-authored-by: tastyfish --- _maps/RandomRuins/SpaceRuins/derelict6.dmm | 6 +- _maps/map_files/KiloStation/KiloStation.dmm | 206 +++++++++--------- code/_globalvars/phobias.dm | 2 +- .../mob/living/basic/retaliate/ghost.dm | 109 +++++++++ .../simple_animal/hostile/retaliate/ghost.dm | 66 ------ .../unit_tests/simple_animal_freeze.dm | 1 - tgstation.dme | 2 +- .../Scripts/72196_ghost_simple_to_basic.txt | 3 + 8 files changed, 220 insertions(+), 175 deletions(-) create mode 100644 code/modules/mob/living/basic/retaliate/ghost.dm delete mode 100644 code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm create mode 100644 tools/UpdatePaths/Scripts/72196_ghost_simple_to_basic.txt diff --git a/_maps/RandomRuins/SpaceRuins/derelict6.dmm b/_maps/RandomRuins/SpaceRuins/derelict6.dmm index f668ba03751..21992059183 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict6.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict6.dmm @@ -86,7 +86,7 @@ /turf/open/floor/iron/airless, /area/ruin/space/has_grav) "ax" = ( -/mob/living/simple_animal/hostile/retaliate/ghost, +/mob/living/basic/ghost, /turf/open/floor/iron/airless, /area/ruin/space/has_grav) "az" = ( @@ -251,7 +251,7 @@ /turf/template_noop, /area/template_noop) "ba" = ( -/mob/living/simple_animal/hostile/retaliate/ghost, +/mob/living/basic/ghost, /turf/open/floor/iron/cafeteria/airless, /area/ruin/space/has_grav) "bb" = ( @@ -678,8 +678,8 @@ ag ai aK aR -aR ba +aR bj bg ah diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 08baa9d8c8d..78fb6dcc769 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -4048,14 +4048,6 @@ /obj/structure/flora/rock/style_random, /turf/open/misc/asteroid, /area/space/nearstation) -"bjX" = ( -/mob/living/basic/carp{ - environment_smash = 0; - name = "Tuna"; - real_name = "Tuna" - }, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "bkn" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -5430,6 +5422,10 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"bFQ" = ( +/obj/docking_port/stationary/escape_pod, +/turf/open/space/basic, +/area/space) "bGx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /obj/effect/decal/cleanable/dirt, @@ -6455,12 +6451,6 @@ }, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/port) -"bZB" = ( -/obj/docking_port/stationary/escape_pod{ - dir = 8 - }, -/turf/open/space/basic, -/area/space) "bZE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6612,6 +6602,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"ccg" = ( +/obj/docking_port/stationary/escape_pod{ + dir = 4 + }, +/turf/open/space/basic, +/area/space) "ccr" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/turf_decal/stripes/line{ @@ -8262,6 +8258,14 @@ /obj/effect/decal/cleanable/dirt, /turf/closed/wall, /area/station/maintenance/port/fore) +"cvZ" = ( +/mob/living/basic/carp{ + environment_smash = 0; + name = "Tuna"; + real_name = "Tuna" + }, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "cwj" = ( /obj/machinery/modular_computer/console/preset/id, /obj/effect/turf_decal/bot, @@ -9160,6 +9164,12 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/lowpressure, /area/space/nearstation) +"cOd" = ( +/obj/docking_port/stationary/escape_pod{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) "cOf" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -16178,6 +16188,10 @@ "ePm" = ( /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"ePI" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/space/basic, +/area/space/nearstation) "ePU" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19414,12 +19428,6 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/floor/iron/dark, /area/station/commons/storage/art) -"fFY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/space/basic, -/area/space/nearstation) "fGu" = ( /turf/closed/wall, /area/station/security/checkpoint/engineering) @@ -22829,6 +22837,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"gCs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) "gCu" = ( /obj/structure/chair{ dir = 8 @@ -23033,15 +23047,6 @@ /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, /area/station/cargo/warehouse) -"gFu" = ( -/obj/machinery/computer/security/telescreen/entertainment/directional/south, -/obj/structure/reagent_dispensers/wall/peppertank/directional/east, -/obj/structure/bed/dogbed/cayenne{ - name = "Lia's bed" - }, -/mob/living/basic/carp/pet/lia, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hos) "gFA" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -23494,6 +23499,12 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"gKV" = ( +/obj/docking_port/stationary/escape_pod{ + dir = 2 + }, +/turf/open/space/basic, +/area/space) "gLm" = ( /obj/machinery/status_display/ai/directional/south, /obj/effect/decal/cleanable/dirt, @@ -27006,11 +27017,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/science/genetics) -"hIs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/simple_animal/hostile/retaliate/ghost, -/turf/open/floor/wood, -/area/station/maintenance/starboard/fore) "hIS" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/rnd_all, @@ -28217,12 +28223,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/solars/starboard/aft) -"hYT" = ( -/obj/docking_port/stationary/escape_pod{ - dir = 4 - }, -/turf/open/space/basic, -/area/space) "hYY" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/decal/cleanable/dirt, @@ -31681,6 +31681,10 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"iSY" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) "iTj" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters{ @@ -34720,10 +34724,6 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"jMQ" = ( -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space) "jMU" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -40586,10 +40586,6 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) -"lwY" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/space/basic, -/area/space/nearstation) "lxf" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -47025,12 +47021,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/service/chapel) -"nta" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/space/basic, -/area/space/nearstation) "ntb" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -54278,6 +54268,12 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"pzk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/space/basic, +/area/space/nearstation) "pzm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54866,10 +54862,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/drone_bay) -"pHK" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/space) "pIa" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -55594,10 +55586,6 @@ /obj/effect/landmark/start/geneticist, /turf/open/floor/iron/showroomfloor, /area/station/science/genetics) -"pSf" = ( -/obj/docking_port/stationary/escape_pod, -/turf/open/space/basic, -/area/space) "pSh" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -61188,6 +61176,11 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"rwY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/mob/living/basic/ghost, +/turf/open/floor/wood, +/area/station/maintenance/starboard/fore) "rxi" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64610,6 +64603,10 @@ /obj/structure/cable, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/aft) +"svA" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space) "svC" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -68364,6 +68361,15 @@ }, /turf/open/space/basic, /area/space/nearstation) +"tvS" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/basic/ghost, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/fore) "twc" = ( /obj/effect/turf_decal/plaque{ icon_state = "L13" @@ -69031,14 +69037,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"tEU" = ( -/obj/docking_port/stationary/random{ - dir = 4; - name = "lavaland"; - shuttle_id = "pod_4_lavaland" - }, -/turf/open/space, -/area/space/nearstation) "tEX" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -69378,12 +69376,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) -"tKZ" = ( -/obj/docking_port/stationary/escape_pod{ - dir = 2 - }, -/turf/open/space/basic, -/area/space) "tLh" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -79334,6 +79326,14 @@ luminosity = 2 }, /area/station/engineering/supermatter) +"wxy" = ( +/obj/docking_port/stationary/random{ + dir = 4; + name = "lavaland"; + shuttle_id = "pod_4_lavaland" + }, +/turf/open/space, +/area/space/nearstation) "wxF" = ( /obj/structure/table/wood, /obj/effect/spawner/random/maintenance, @@ -80296,6 +80296,15 @@ "wJo" = ( /turf/open/floor/plating, /area/station/maintenance/department/security) +"wJs" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/obj/structure/reagent_dispensers/wall/peppertank/directional/east, +/obj/structure/bed/dogbed/cayenne{ + name = "Lia's bed" + }, +/mob/living/basic/carp/pet/lia, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hos) "wJw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -85189,15 +85198,6 @@ /obj/machinery/recharger, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) -"yeH" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/retaliate/ghost, -/turf/open/floor/iron/dark, -/area/station/maintenance/starboard/fore) "yeK" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral{ @@ -96670,9 +96670,9 @@ wDI aeu aeu aDT -nta +gCs lHD -nta +gCs sRm aeu ycx @@ -97699,7 +97699,7 @@ ycx vjh vjh aaa -bZB +cOd aaa ycx vjh @@ -99982,7 +99982,7 @@ aeu aeU aeU coy -bjX +cvZ aDS tpp bFI @@ -102631,7 +102631,7 @@ aaa aaa aaa cry -lwY +ePI acK aaa aaa @@ -102884,7 +102884,7 @@ gDy hOU aHz kZK -tKZ +gKV aaa aaa cry @@ -103145,7 +103145,7 @@ aaa aaa aaa cry -lwY +ePI acK aaa aaa @@ -105967,7 +105967,7 @@ lZr jPG sYu mIR -gFu +wJs afL aeu aeU @@ -118230,7 +118230,7 @@ cIX cIX fvU plG -yeH +tvS yaY iBv wxI @@ -118489,7 +118489,7 @@ fvU nUi iVF elc -hIs +rwY jre rsZ qaI @@ -126178,7 +126178,7 @@ aaa aaa aaa acK -fFY +pzk cry aaa aaa @@ -126439,7 +126439,7 @@ iak cry aaa aaa -pSf +bFQ fRt oBf nxa @@ -126692,7 +126692,7 @@ aaB aaa aaa acK -fFY +pzk cry aaa aaa @@ -130066,7 +130066,7 @@ rZV vOX vOX aaa -hYT +ccg aaa rZV mtc @@ -131094,7 +131094,7 @@ aeU aof qJs cry -tEU +wxy cry qJs aeu @@ -131350,9 +131350,9 @@ cmU aeU aeU aaQ -jMQ -pHK -jMQ +svA +iSY +svA acm aeu aeu diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index 205e193c56e..2928bce9eaf 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -72,7 +72,7 @@ GLOBAL_LIST_INIT(phobia_mobs, list( /mob/living/simple_animal/hostile/heretic_summon, /mob/living/simple_animal/hostile/imp, /mob/living/simple_animal/hostile/retaliate/bat, - /mob/living/simple_animal/hostile/retaliate/ghost, + /mob/living/basic/ghost, /mob/living/simple_animal/hostile/skeleton, /mob/living/simple_animal/hostile/wizard, /mob/living/simple_animal/hostile/zombie, diff --git a/code/modules/mob/living/basic/retaliate/ghost.dm b/code/modules/mob/living/basic/retaliate/ghost.dm new file mode 100644 index 00000000000..f687fc373e0 --- /dev/null +++ b/code/modules/mob/living/basic/retaliate/ghost.dm @@ -0,0 +1,109 @@ +/mob/living/basic/ghost + name = "ghost" + desc = "A soul of the dead, spooky." + icon = 'icons/mob/simple/mob.dmi' + icon_state = "ghost" + icon_living = "ghost" + mob_biotypes = MOB_SPIRIT + speak_emote = list("wails", "weeps") + response_help_continuous = "passes through" + response_help_simple = "pass through" + combat_mode = TRUE + basic_mob_flags = DEL_ON_DEATH + maxHealth = 40 + health = 40 + melee_damage_lower = 15 + melee_damage_upper = 15 + attack_verb_continuous = "grips" + attack_verb_simple = "grip" + unsuitable_atmos_damage = 0 + attack_sound = 'sound/hallucinations/growl1.ogg' + death_message = "wails, disintegrating into a pile of ectoplasm!" + gold_core_spawnable = NO_SPAWN //too spooky for science + light_system = MOVABLE_LIGHT + light_range = 1 // same glowing as visible player ghosts + light_power = 2 + ai_controller = /datum/ai_controller/basic_controller/ghost + + ///What hairstyle will this ghost have + var/ghost_hairstyle + ///What color will this ghost's hair be + var/ghost_hair_color + ///The resulting hair to be displayed on the ghost + var/mutable_appearance/ghost_hair + ///What facial hairstyle will this ghost have + var/ghost_facial_hairstyle + ///What color will this ghost's facial hair be + var/ghost_facial_hair_color + ///The resulting facial hair to be displayed on the ghost + var/mutable_appearance/ghost_facial_hair + ///Will this ghost spawn with a randomly generated name and hair? + var/random_identity = TRUE + +/mob/living/basic/ghost/Initialize(mapload) + . = ..() + var/static/list/death_loot = list(/obj/item/ectoplasm) + AddElement(/datum/element/death_drops, death_loot) + AddElement(/datum/element/simple_flying) + AddElement(/datum/element/ai_retaliate) + + give_identity() + +/** + * Generates hair, facial hair, and a random name for ghosts if one is needed. + * + * Handles generating the mutable_appearance objects for a ghost's hair/facial hair, + * as well as assigning a random name if needed. If random_identity is false, it will only create and display + * the hair as defined by ghost_hairstyle/ghost_facial_hairstyle variables, without changing the name. + * If random_identity is true, hair/facial/name will all be randomly generated and displayed. + * When creating a ghost with a custom identity (for away missions, ruins, etc.) be sure random_identity is false. + */ + +/mob/living/basic/ghost/proc/give_identity() + if(random_identity) + ghost_hairstyle = random_hairstyle() //This only gives us the hairstyle name, not the icon_state (which we need). + ghost_hair_color = "#[random_color()]" + + if(prob(50)) //Only a chance at also getting facial hair + ghost_facial_hairstyle = random_facial_hairstyle() + ghost_facial_hair_color = ghost_hair_color + + if(!isnull(ghost_hairstyle)) + var/datum/sprite_accessory/hair_style = GLOB.hairstyles_list[ghost_hairstyle] //We use the hairstyle name to get the sprite accessory, which we copy the icon_state from. + ghost_hair = mutable_appearance('icons/mob/species/human/human_face.dmi', "[hair_style.icon_state]", -HAIR_LAYER) + ghost_hair.alpha = 200 + ghost_hair.color = ghost_hair_color + add_overlay(ghost_hair) + + if(!isnull(ghost_facial_hairstyle)) + var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hairstyles_list[ghost_facial_hairstyle] + ghost_facial_hair = mutable_appearance('icons/mob/species/human/human_face.dmi', "[facial_hair_style.icon_state]", -HAIR_LAYER) + ghost_facial_hair.alpha = 200 + ghost_facial_hair.color = ghost_facial_hair_color + add_overlay(ghost_facial_hair) + + if(random_identity) + switch(rand(0,1)) + if(0) + name = "ghost of [pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" + if(1) + name = "ghost of [pick(GLOB.first_names_female)] [pick(GLOB.last_names)]" + +/datum/ai_controller/basic_controller/ghost + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/ignore_faction(), + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/basic_melee_attack_subtree/ghost, + ) + +/datum/ai_planning_subtree/basic_melee_attack_subtree/ghost + melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/ghost + +/datum/ai_behavior/basic_melee_attack/ghost + action_cooldown = 2 SECONDS diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm deleted file mode 100644 index 153f3dc354d..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm +++ /dev/null @@ -1,66 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/ghost - name = "ghost" - desc = "A soul of the dead, spooky." - icon = 'icons/mob/simple/mob.dmi' - icon_state = "ghost" - icon_living = "ghost" - mob_biotypes = MOB_SPIRIT - speak_chance = 0 - turns_per_move = 5 - response_help_continuous = "passes through" - response_help_simple = "pass through" - combat_mode = TRUE - healable = 0 - speed = 0 - maxHealth = 40 - health = 40 - harm_intent_damage = 10 - melee_damage_lower = 15 - melee_damage_upper = 15 - del_on_death = 1 - emote_see = list("weeps silently", "groans", "mumbles") - attack_verb_continuous = "grips" - attack_verb_simple = "grip" - attack_sound = 'sound/hallucinations/growl1.ogg' - speak_emote = list("weeps") - death_message = "wails, disintegrating into a pile of ectoplasm!" - loot = list(/obj/item/ectoplasm) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - pressure_resistance = 300 - gold_core_spawnable = NO_SPAWN //too spooky for science - light_system = MOVABLE_LIGHT - light_range = 1 // same glowing as visible player ghosts - light_power = 2 - var/ghost_hairstyle - var/ghost_hair_color - var/mutable_appearance/ghost_hair - var/ghost_facial_hairstyle - var/ghost_facial_hair_color - var/mutable_appearance/ghost_facial_hair - var/random = TRUE //if you want random names for ghosts or not - -/mob/living/simple_animal/hostile/retaliate/ghost/Initialize(mapload) - . = ..() - AddElement(/datum/element/simple_flying) - give_hair() - if(random) - switch(rand(0,1)) - if(0) - name = "ghost of [pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" - if(1) - name = "ghost of [pick(GLOB.first_names_female)] [pick(GLOB.last_names)]" - - -/mob/living/simple_animal/hostile/retaliate/ghost/proc/give_hair() - if(ghost_hairstyle != null) - ghost_hair = mutable_appearance('icons/mob/species/human/human_face.dmi', "hair_[ghost_hairstyle]", -HAIR_LAYER) - ghost_hair.alpha = 200 - ghost_hair.color = ghost_hair_color - add_overlay(ghost_hair) - if(ghost_facial_hairstyle != null) - ghost_facial_hair = mutable_appearance('icons/mob/species/human/human_face.dmi', "facial_[ghost_facial_hairstyle]", -HAIR_LAYER) - ghost_facial_hair.alpha = 200 - ghost_facial_hair.color = ghost_facial_hair_color - add_overlay(ghost_facial_hair) diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index 37e917b58da..03a8371cbcf 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -275,7 +275,6 @@ /mob/living/simple_animal/hostile/retaliate/clown/mutant, /mob/living/simple_animal/hostile/retaliate/clown/mutant/glutton, /mob/living/simple_animal/hostile/retaliate/clown/mutant/slow, - /mob/living/simple_animal/hostile/retaliate/ghost, /mob/living/simple_animal/hostile/retaliate/goat, /mob/living/simple_animal/hostile/retaliate/goose, /mob/living/simple_animal/hostile/retaliate/goose/vomit, diff --git a/tgstation.dme b/tgstation.dme index 7717a8f0d67..69367d3c783 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3733,6 +3733,7 @@ #include "code\modules\mob\living\basic\lavaland\bileworm\bileworm_vileworm.dm" #include "code\modules\mob\living\basic\pets\dog.dm" #include "code\modules\mob\living\basic\pets\pet.dm" +#include "code\modules\mob\living\basic\retaliate\ghost.dm" #include "code\modules\mob\living\basic\ruin_defender\stickman.dm" #include "code\modules\mob\living\basic\space_fauna\carp\carp.dm" #include "code\modules\mob\living\basic\space_fauna\carp\carp_abilities.dm" @@ -4021,7 +4022,6 @@ #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\pandora.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\bat.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\ghost.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\spaceman.dm" #include "code\modules\mob\living\simple_animal\slime\death.dm" diff --git a/tools/UpdatePaths/Scripts/72196_ghost_simple_to_basic.txt b/tools/UpdatePaths/Scripts/72196_ghost_simple_to_basic.txt new file mode 100644 index 00000000000..94aa7de075a --- /dev/null +++ b/tools/UpdatePaths/Scripts/72196_ghost_simple_to_basic.txt @@ -0,0 +1,3 @@ +# modifies simple_animal ghosts into the new basic mob ghost type + +/mob/living/simple_animal/hostile/retaliate/ghost : /mob/living/basic/ghost{@OLD}