From 73fdf1fa209c5e454997d7fb76b99f616d88ca1d Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sun, 27 Jun 2021 17:01:04 +0200 Subject: [PATCH] [MIRROR] Integrates spider eggs into the mob spawners (#6502) * Integrates spider eggs into the mob spawners * Update corpse.dm Co-authored-by: Arkatos1 <43862960+Arkatos1@users.noreply.github.com> Co-authored-by: Gandalf --- code/datums/spawners_menu.dm | 49 +++-- code/game/objects/effects/spiders.dm | 180 ++++++++++++------ .../objects/structures/ghost_role_spawners.dm | 2 +- .../antagonists/changeling/powers/spiders.dm | 2 +- code/modules/awaymissions/corpse.dm | 28 ++- .../awaymissions/mission_code/snowdin.dm | 2 +- code/modules/events/pirates.dm | 8 +- code/modules/events/spider_infestation.dm | 2 +- .../simple_animal/hostile/giant_spider.dm | 26 +-- 9 files changed, 195 insertions(+), 104 deletions(-) diff --git a/code/datums/spawners_menu.dm b/code/datums/spawners_menu.dm index f197c96f3ee..0e7911e5ed4 100644 --- a/code/datums/spawners_menu.dm +++ b/code/datums/spawners_menu.dm @@ -10,7 +10,6 @@ owner = null return ..() - /datum/spawners_menu/ui_state(mob/user) return GLOB.observer_state @@ -29,24 +28,27 @@ this["short_desc"] = "" this["flavor_text"] = "" this["important_warning"] = "" + this["amount_left"] = 0 this["refs"] = list() for(var/spawner_obj in GLOB.mob_spawners[spawner]) - this["refs"] += "[REF(spawner_obj)]" if(!this["desc"]) if(istype(spawner_obj, /obj/effect/mob_spawn)) - var/obj/effect/mob_spawn/MS = spawner_obj - this["short_desc"] = MS.short_desc - this["flavor_text"] = MS.flavour_text - this["important_info"] = MS.important_info + var/obj/effect/mob_spawn/mob_spawner = spawner_obj + if(!mob_spawner.ready) + continue + this["short_desc"] = mob_spawner.short_desc + this["flavor_text"] = mob_spawner.flavour_text + this["important_info"] = mob_spawner.important_info else - var/obj/O = spawner_obj - this["desc"] = O.desc - this["amount_left"] = LAZYLEN(GLOB.mob_spawners[spawner]) - data["spawners"] += list(this) - + var/obj/object = spawner_obj + this["desc"] = object.desc + this["refs"] += "[REF(spawner_obj)]" + this["amount_left"] += 1 + if(this["amount_left"] > 0) + data["spawners"] += list(this) return data -/datum/spawners_menu/ui_act(action, params) +/datum/spawners_menu/ui_act(action, params, datum/tgui/ui) . = ..() if(.) return @@ -55,17 +57,24 @@ if(!group_name || !(group_name in GLOB.mob_spawners)) return var/list/spawnerlist = GLOB.mob_spawners[group_name] + for(var/obj/effect/mob_spawn/current_spawner as anything in spawnerlist) + if(!current_spawner.ready) + spawnerlist -= current_spawner if(!spawnerlist.len) return - var/obj/effect/mob_spawn/MS = pick(spawnerlist) - if(!istype(MS) || !(MS in GLOB.poi_list)) + var/obj/effect/mob_spawn/mob_spawner = pick(spawnerlist) + if(!istype(mob_spawner) || !(mob_spawner in GLOB.poi_list)) return + switch(action) if("jump") - if(MS) - owner.forceMove(get_turf(MS)) - . = TRUE + if(mob_spawner) + owner.forceMove(get_turf(mob_spawner)) + return TRUE if("spawn") - if(MS) - MS.attack_ghost(owner) - . = TRUE + if(mob_spawner) + if(mob_spawner.radial_based) + owner.ManualFollow(mob_spawner) + ui.close() + mob_spawner.attack_ghost(owner) + return TRUE diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 4dd350cf0e9..d6d76e8e943 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -92,33 +92,89 @@ name = "egg cluster" desc = "They seem to pulse slightly with an inner life." icon_state = "eggs" - ///The amount the egg cluster has grown. Is able to produce a spider when it hits 100. - var/amount_grown = 0 - ///The mother's directive at the time the egg was produced. Passed onto the child. - var/directive = "" //Message from the mother - ///Which factions to give to the produced spider, inherited from the mother. - var/list/faction = list("spiders") - ///Whether or not a ghost can use the cluster to become a spider. - var/ghost_ready = FALSE - ///The types of spiders the egg sac could produce. - var/list/mob/living/potentialspawns = list(/mob/living/simple_animal/hostile/giant_spider, - /mob/living/simple_animal/hostile/giant_spider/hunter, - /mob/living/simple_animal/hostile/giant_spider/nurse) + /// Mob spawner handling the actual spawn of the spider + var/obj/effect/mob_spawn/spider/spawner /obj/structure/spider/eggcluster/Initialize() pixel_x = base_pixel_x + rand(3,-3) pixel_y = base_pixel_y + rand(3,-3) - START_PROCESSING(SSobj, src) - AddElement(/datum/element/point_of_interest) return ..() -/obj/structure/spider/eggcluster/process(delta_time) - amount_grown += rand(0,1) * delta_time - if(amount_grown >= 100 && !ghost_ready) - notify_ghosts("[src] is ready to hatch!", null, enter_link="(Click to play)", source=src, action=NOTIFY_ORBIT, ignore_key = POLL_IGNORE_SPIDER) - ghost_ready = TRUE +/obj/structure/spider/eggcluster/Destroy() + if(spawner) + QDEL_NULL(spawner) + return ..() -/obj/structure/spider/eggcluster/Topic(href, href_list) +/obj/structure/spider/eggcluster/attack_ghost(mob/user) + if(spawner) + spawner.attack_ghost(user) + return ..() + +/obj/structure/spider/eggcluster/enriched + name = "enriched egg cluster" + color = rgb(148, 0, 211) + +/obj/structure/spider/eggcluster/bloody + name = "bloody egg cluster" + color = rgb(255, 0, 0) + +/obj/structure/spider/eggcluster/midwife + name = "midwife egg cluster" + +/obj/effect/mob_spawn/spider + name = "egg cluster" + desc = "They seem to pulse slightly with an inner life." + mob_name = "a spider" + icon = 'icons/effects/effects.dmi' + icon_state = "eggs" + roundstart = FALSE + death = FALSE + move_resist = MOVE_FORCE_NORMAL + density = FALSE + random = TRUE + show_flavour = FALSE + short_desc = "You are a spider." + important_info = "Follow your directives at all costs." + faction = list("spiders") + assignedrole = "Spider" + banType = ROLE_ALIEN + ready = FALSE + radial_based = TRUE + /// The amount the egg cluster has grown. Is able to produce a spider when it hits 100. + var/amount_grown = 0 + /// The mother's directive at the time the egg was produced. Passed onto the child. + var/directive = "" + /// Type of the cluster that the spawner spawns + var/cluster_type = /obj/structure/spider/eggcluster + /// Physical structure housing the spawner + var/obj/structure/spider/eggcluster/egg + /// The types of spiders that the spawner can produce + var/list/potentialspawns = list( + /mob/living/simple_animal/hostile/giant_spider, + /mob/living/simple_animal/hostile/giant_spider/hunter, + /mob/living/simple_animal/hostile/giant_spider/nurse, + ) + +/obj/effect/mob_spawn/spider/Initialize(mapload) + . = ..() + START_PROCESSING(SSobj, src) + potentialspawns = string_list(potentialspawns) + egg = new cluster_type(get_turf(loc)) + egg.spawner = src + forceMove(egg) + +/obj/effect/mob_spawn/spider/Destroy() + egg = null + return ..() + +/obj/effect/mob_spawn/spider/process(delta_time) + amount_grown += rand(0, 1) * delta_time + if(amount_grown >= 100 && !ready) + ready = TRUE + notify_ghosts("[src] is ready to hatch!", null, enter_link = "(Click to play)", source = src, action = NOTIFY_ORBIT, ignore_key = POLL_IGNORE_SPIDER) + STOP_PROCESSING(SSobj, src) + +/obj/effect/mob_spawn/spider/Topic(href, href_list) . = ..() if(.) return @@ -128,60 +184,78 @@ ghost.ManualFollow(src) attack_ghost(ghost) -/obj/structure/spider/eggcluster/attack_ghost(mob/user) +/obj/effect/mob_spawn/spider/allow_spawn(mob/user) . = ..() - if(ghost_ready) - make_spider(user) + if(!.) + return FALSE + if(!ready) + to_chat(user, span_warning("\The [src] is not ready to hatch yet!")) + return FALSE + +/obj/effect/mob_spawn/spider/equip(mob/living/simple_animal/hostile/giant_spider/spawned_spider) + if(spawned_spider) + spawned_spider.directive = directive + +/obj/effect/mob_spawn/spider/special(mob/user) + egg.spawner = null + QDEL_NULL(egg) + +/obj/effect/mob_spawn/spider/enriched + name = "enriched egg cluster" + color = rgb(148, 0, 211) + short_desc = "You are an enriched spider." + cluster_type = /obj/structure/spider/eggcluster/enriched + potentialspawns = list( + /mob/living/simple_animal/hostile/giant_spider/tarantula, + /mob/living/simple_animal/hostile/giant_spider/viper, + /mob/living/simple_animal/hostile/giant_spider/midwife, + ) + +/obj/effect/mob_spawn/spider/bloody + name = "bloody egg cluster" + color = rgb(255, 0, 0) + short_desc = "You are a bloody spider." + directive = "You are the spawn of a visicious changeling. You have no ambitions except to wreak havoc and ensure your own survival. You are aggressive to all living beings outside of your species, including changelings." + cluster_type = /obj/structure/spider/eggcluster/bloody + potentialspawns = list( + /mob/living/simple_animal/hostile/giant_spider/hunter/flesh, + ) + +/obj/effect/mob_spawn/spider/midwife + name = "midwife egg cluster" + short_desc = "You are a midwife spider." + directive = "Ensure the survival of the spider species and overtake whatever structure you find yourself in." + cluster_type = /obj/structure/spider/eggcluster/midwife + potentialspawns = list( + /mob/living/simple_animal/hostile/giant_spider/midwife, + ) /** * Makes a ghost into a spider based on the type of egg cluster. * * Allows a ghost to get a prompt to use the egg cluster to become a spider. + * * Arguments: - * * user - The ghost attempting to become a spider. + * * user - The ghost attempting to become a spider + * * newname - If set, renames the mob to this name */ -/obj/structure/spider/eggcluster/proc/make_spider(mob/user) +/obj/effect/mob_spawn/spider/create(mob/user, newname) var/list/spider_list = list() var/list/display_spiders = list() for(var/choice in potentialspawns) var/mob/living/simple_animal/hostile/giant_spider/spider = choice spider_list[initial(spider.name)] = choice - var/datum/radial_menu_choice/option = new option.image = image(icon = initial(spider.icon), icon_state = initial(spider.icon_state)) option.info = span_boldnotice("[initial(spider.menu_description)]") - display_spiders[initial(spider.name)] = option - sortList(display_spiders) - var/chosen_spider = show_radial_menu(user, src, display_spiders, radius = 38) + var/chosen_spider = show_radial_menu(user, egg, display_spiders, radius = 38) chosen_spider = spider_list[chosen_spider] if(QDELETED(src) || QDELETED(user) || !chosen_spider) return FALSE - var/mob/living/simple_animal/hostile/giant_spider/new_spider = new chosen_spider(src.loc) - new_spider.faction = faction.Copy() - new_spider.directive = directive - new_spider.key = user.key - QDEL_NULL(src) - return TRUE - -/obj/structure/spider/eggcluster/enriched - name = "enriched egg cluster" - color = rgb(148,0,211) - potentialspawns = list(/mob/living/simple_animal/hostile/giant_spider/tarantula, - /mob/living/simple_animal/hostile/giant_spider/viper, - /mob/living/simple_animal/hostile/giant_spider/midwife) - -/obj/structure/spider/eggcluster/bloody - name = "bloody egg cluster" - color = rgb(255,0,0) - directive = "You are the spawn of a visicious changeling. You have no ambitions except to wreak havoc and ensure your own survival. You are aggressive to all living beings outside of your species, including changelings." - potentialspawns = list(/mob/living/simple_animal/hostile/giant_spider/hunter/flesh) - -/obj/structure/spider/eggcluster/midwife - name = "midwife egg cluster" - potentialspawns = list(/mob/living/simple_animal/hostile/giant_spider/midwife) - directive = "Ensure the survival of the spider species and overtake whatever structure you find yourself in." + mob_type = chosen_spider + return ..() /obj/structure/spider/spiderling name = "spiderling" diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 1957b8216fa..6a5c04939b6 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -895,7 +895,7 @@ name = "sleeper" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" - faction = "nanotrasenprivate" + faction = list("nanotrasenprivate") short_desc = "You are a Nanotrasen Private Security Officer!" /obj/effect/mob_spawn/human/commander/alive diff --git a/code/modules/antagonists/changeling/powers/spiders.dm b/code/modules/antagonists/changeling/powers/spiders.dm index 40b8faa8ab2..fa64d5879d1 100644 --- a/code/modules/antagonists/changeling/powers/spiders.dm +++ b/code/modules/antagonists/changeling/powers/spiders.dm @@ -12,7 +12,7 @@ //Makes a spider egg cluster. Allows you enable further general havok by introducing spiders to the station. /datum/action/changeling/spiders/sting_action(mob/user) ..() - new /obj/structure/spider/eggcluster/bloody(user.loc) + new /obj/effect/mob_spawn/spider/bloody(user.loc) return TRUE */ //SKYRAT EDIT REMOVAL END diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 4a9d0bdff8f..1fddfcc3e6a 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -20,7 +20,8 @@ var/short_desc = "The mapper forgot to set this!" var/flavour_text = "" var/important_info = "" - var/faction = null + /// Lazy string list of factions that the spawned mob will be in upon spawn + var/list/faction var/permanent = FALSE //If true, the spawner will not disappear upon running out of uses. var/random = FALSE //Don't set a name or gender, just go random var/antagonist_type @@ -36,14 +37,19 @@ var/banType = ROLE_LAVALAND var/ghost_usable = TRUE var/list/excluded_gamemodes + // If the spawner is ready to function at the moment + var/ready = TRUE + /// If the spawner uses radials + var/radial_based = FALSE //ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/mob_spawn/attack_ghost(mob/user) if(!SSticker.HasRoundStarted() || !loc || !ghost_usable) return - var/ghost_role = tgui_alert(usr,"Become [mob_name]? (Warning, You can no longer be revived!)",,list("Yes","No")) - if(ghost_role == "No" || !loc || QDELETED(user)) - return + if(!radial_based) + var/ghost_role = tgui_alert(usr, "Become [mob_name]? (Warning, You can no longer be revived!)",, list("Yes", "No")) + if(ghost_role == "No" || !loc || QDELETED(user)) + return //SKYRAT EDIT ADDITION BEGIN if(!extra_prompts(user)) return @@ -76,6 +82,8 @@ /obj/effect/mob_spawn/Initialize(mapload) . = ..() + if(faction) + faction = string_list(faction) if(instant || (roundstart && (mapload || (SSticker && SSticker.current_state > GAME_STATE_SETTING_UP)))) INVOKE_ASYNC(src, .proc/create) else if(ghost_usable) @@ -115,7 +123,7 @@ /obj/effect/mob_spawn/proc/equip(mob/M) return -///obj/effect/mob_spawn/proc/create(ckey, newname) //ORIGINAL +///obj/effect/mob_spawn/proc/create(mob/user, newname) //ORIGINAL /obj/effect/mob_spawn/proc/create(ckey, newname, mob/user) //SKYRAT EDIT CHANGE //SKYRAT EDIT CHANGE BEGIN //var/mob/living/M = new mob_type(get_turf(src)) //ORIGINAL @@ -134,7 +142,7 @@ */ //SKYRAT EDIT CHANGE END if(faction) - M.faction = list(faction) + M.faction = faction if(disease) M.ForceContractDisease(new disease) if(death) @@ -146,8 +154,8 @@ M.color = mob_color equip(M) - if(ckey) - M.ckey = ckey + if(user?.ckey) + M.ckey = user.ckey if(show_flavour) var/output_message = "[short_desc]" if(flavour_text != "") @@ -403,7 +411,7 @@ //Non-human spawners -/obj/effect/mob_spawn/AICorpse/create(ckey) //Creates a corrupted AI +/obj/effect/mob_spawn/AICorpse/create(mob/user) //Creates a corrupted AI var/A = locate(/mob/living/silicon/ai) in loc if(A) return @@ -423,7 +431,7 @@ /obj/effect/mob_spawn/slime/equip(mob/living/simple_animal/slime/S) S.colour = mobcolour -/obj/effect/mob_spawn/facehugger/create(ckey) //Creates a squashed facehugger +/obj/effect/mob_spawn/facehugger/create(mob/user) //Creates a squashed facehugger var/obj/item/clothing/mask/facehugger/O = new(src.loc) //variable O is a new facehugger at the location of the landmark O.name = src.name O.Die() //call the facehugger's death proc diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 9ef2118cf3d..6f7f0357c0e 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -583,7 +583,7 @@ icon_state = "sleeper" roundstart = FALSE death = FALSE - faction = ROLE_SYNDICATE + faction = list(ROLE_SYNDICATE) outfit = /datum/outfit/snowsyndie short_desc = "You are a syndicate operative recently awoken from cryostasis in an underground outpost." flavour_text = "You are a syndicate operative recently awoken from cryostasis in an underground outpost. Monitor Nanotrasen communications and record information. All intruders should be \ diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index 712818b028d..563d1fd6914 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -155,10 +155,10 @@ for(var/turf/A in ship.get_affected_turfs(T)) for(var/obj/effect/mob_spawn/human/pirate/spawner in A) if(candidates.len > 0) - var/mob/M = candidates[1] - spawner.create(M.ckey) - candidates -= M - announce_to_ghosts(M) + var/mob/our_candidate = candidates[1] + spawner.create(our_candidate) + candidates -= our_candidate + announce_to_ghosts(our_candidate) else announce_to_ghosts(spawner) diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm index 56cb91f589e..7baea8385e5 100644 --- a/code/modules/events/spider_infestation.dm +++ b/code/modules/events/spider_infestation.dm @@ -31,7 +31,7 @@ message_admins("Not enough valid spawn locations found in GLOB.xeno_spawn, aborting spider spawning...") return MAP_ERROR while(amount > 0) - var/obj/structure/spider/eggcluster/midwife/new_eggs = new /obj/structure/spider/eggcluster/midwife(pick_n_take(spawn_locs)) + var/obj/effect/mob_spawn/spider/midwife/new_eggs = new /obj/effect/mob_spawn/spider/midwife(pick_n_take(spawn_locs)) new_eggs.amount_grown = 98 amount-- log_game("Midwife spider eggs were spawned via an event.") diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index f101b65f786..4cb4f6830e1 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -59,7 +59,7 @@ ///The message that the mother spider left for this spider when the egg was layed. var/directive = "" /// Short description of what this mob is capable of, for radial menu uses - var/menu_description = "Versatile spider variant for frontline combat. Jack of all trades, master of none. Does not inject toxin." + var/menu_description = "Versatile spider variant for frontline combat with high health and damage. Does not inject toxin." /mob/living/simple_animal/hostile/giant_spider/Initialize() . = ..() @@ -91,7 +91,7 @@ * * A subtype of the giant spider with purple eyes and toxin injection. * - * A subtype of the giant spider which is faster, has toxin injection, but less health. This spider is only slightly slower than a human. + * A subtype of the giant spider which is faster, has toxin injection, but less health and damage. This spider is only slightly slower than a human. */ /mob/living/simple_animal/hostile/giant_spider/hunter name = "hunter spider" @@ -106,7 +106,7 @@ poison_per_bite = 10 move_to_delay = 5 speed = -0.1 - menu_description = "Fast spider variant specializing in catching running prey, but has less health. Toxin injection of 10u per bite." + menu_description = "Fast spider variant specializing in catching running prey and toxin injection, but has less health and damage. Toxin injection of 10u per bite." /** * # Spider Nurse @@ -130,7 +130,7 @@ melee_damage_upper = 10 poison_per_bite = 3 web_speed = 0.25 - menu_description = "Support spider variant specializing in healing their brethren and placing webbings swiftly, but has very low amount of health and deals low damage. Toxin injection of 3u per bite." + menu_description = "Support spider variant specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage. Toxin injection of 3u per bite." ///The health HUD applied to the mob. var/health_hud = DATA_HUD_MEDICAL_ADVANCED @@ -506,10 +506,10 @@ if(spider.is_busy) eggs = locate() in get_turf(spider) if(!eggs || !isturf(spider.loc)) - var/egg_choice = enriched ? /obj/structure/spider/eggcluster/enriched : /obj/structure/spider/eggcluster - var/obj/structure/spider/eggcluster/new_eggs = new egg_choice(get_turf(spider)) + var/egg_choice = enriched ? /obj/effect/mob_spawn/spider/enriched : /obj/effect/mob_spawn/spider + var/obj/effect/mob_spawn/spider/new_eggs = new egg_choice(get_turf(spider)) new_eggs.directive = spider.directive - new_eggs.faction = spider.faction.Copy() + new_eggs.faction = spider.faction if(enriched) spider.fed-- UpdateButtonIcon(TRUE) @@ -595,7 +595,7 @@ poison_type = /datum/reagent/consumable/frostoil color = rgb(114,228,250) gold_core_spawnable = NO_SPAWN - menu_description = "Versatile ice spider variant for frontline combat. Jack of all trades, master of none. Immune to temperature damage. Does not inject frost oil." + menu_description = "Versatile ice spider variant for frontline combat with high health and damage. Immune to temperature damage. Does not inject frost oil." /** * # Ice Nurse Spider @@ -611,7 +611,7 @@ maxbodytemp = 1500 poison_type = /datum/reagent/consumable/frostoil color = rgb(114,228,250) - menu_description = "Support ice spider variant specializing in healing their brethren and placing webbings swiftly, but has very low amount of health and deals low damage. Immune to temperature damage. Frost oil injection of 3u per bite." + menu_description = "Support ice spider variant specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage. Immune to temperature damage. Frost oil injection of 3u per bite." /** * # Ice Hunter Spider @@ -628,7 +628,7 @@ poison_type = /datum/reagent/consumable/frostoil color = rgb(114,228,250) gold_core_spawnable = NO_SPAWN - menu_description = "Fast ice spider variant specializing in catching running prey, but has less health. Immune to temperature damage. Frost oil injection of 10u per bite." + menu_description = "Fast ice spider variant specializing in catching running prey and frost oil injection, but has less health and damage. Immune to temperature damage. Frost oil injection of 10u per bite." /** * # Scrawny Hunter Spider @@ -645,7 +645,7 @@ melee_damage_lower = 5 melee_damage_upper = 10 desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes, and looks abnormally thin and frail." - menu_description = "Fast spider variant specializing in catching running prey, but has less damage than a normal hunter spider at the cost of more health. Toxin injection of 10u per bite." + menu_description = "Fast spider variant specializing in catching running prey and toxin injection, but has less damage than a normal hunter spider at the cost of a little more health. Toxin injection of 10u per bite." /** * # Scrawny Tarantula @@ -677,7 +677,7 @@ health = 30 maxHealth = 30 desc = "Furry and black, it makes you shudder to look at it. This one has brilliant green eyes, and looks abnormally thin and frail." - menu_description = "Weaker version of the nurse spider, specializing in healing their brethren and placing webbings swiftly, but has very low amount of health and deals low damage. Toxin injection of 3u per bite." + menu_description = "Weaker version of the nurse spider, specializing in healing their brethren and placing webbings very swiftly, but has very low amount of health and deals low damage. Toxin injection of 3u per bite." /** * # Flesh Spider @@ -693,7 +693,7 @@ icon_living = "flesh_spider" icon_dead = "flesh_spider_dead" web_speed = 0.7 - menu_description = "Self-sufficient spider variant capable of healing themselves and producing webbbing fast, but has less health. Toxin injection of 10u per bite." + menu_description = "Self-sufficient spider variant capable of healing themselves and producing webbbing fast, but has less health and damage. Toxin injection of 10u per bite." /mob/living/simple_animal/hostile/giant_spider/hunter/flesh/Moved(atom/oldloc, dir) . = ..()