diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 9dc2e47db3b..7f989b82c03 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -173,11 +173,12 @@ if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that return + var/mob/living/simple_animal/simple_mob = istype(src, /mob/living/simple_animal) ? src : null //Atoms on turfs (not on your person) // A is a turf or is on a turf, or in something on a turf (pen in a box); but not something in something on a turf (pen in a box in a backpack) sdepth = A.storage_depth_turf() if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1)) - if(A.Adjacent(src) || (W && W.attack_can_reach(src, A, W.reach)) ) // see adjacent.dm + if(A.Adjacent(src) || (W && W.attack_can_reach(src, A, W.reach)) || (simple_mob && simple_mob.attack_can_reach(src, A, simple_mob.melee_reach))) // see adjacent.dm if(W) // Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example) var/resolved = W.resolve_attackby(A,src, params) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 384f0507e1c..533c33f3a3b 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -74,7 +74,7 @@ return TRUE if(mover?.movement_type & PHASING) return TRUE - if(istype(mover, /mob/living/simple_animal/hostile/giant_spider)) + if(istype(mover, /mob/living/simple_animal/hostile/giant_spider) || (mover.pulledby && istype(mover.pulledby, /mob/living/simple_animal/hostile/giant_spider))) return TRUE else if(istype(mover, /mob/living)) if(prob(50)) diff --git a/code/modules/mob/abstract/ghost/observer/observer.dm b/code/modules/mob/abstract/ghost/observer/observer.dm index a360afa2762..ab84dec686f 100644 --- a/code/modules/mob/abstract/ghost/observer/observer.dm +++ b/code/modules/mob/abstract/ghost/observer/observer.dm @@ -188,7 +188,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to play this round for another [GLOB.config.respawn_delay] minutes! You can't change your mind so choose wisely!)", "Are you sure you want to ghost?", "Ghost", "Stay in body") if(response != "Ghost") return - resting = 1 + if(!istype(usr, /mob/living/simple_animal/hostile/giant_spider/nurse/spider_queen)) + resting = 1 var/turf/location = get_turf(src) message_admins("[key_name_admin(usr)] has ghosted. (JMP)") log_game("[key_name_admin(usr)] has ghosted.") 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 d21ac777071..67e18c6dd58 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -86,6 +86,7 @@ speed = -2 venom_type = /singleton/reagent/toxin/greimorian_eggs fed = 1 + lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE var/playable = TRUE sample_data = list("Genetic markers identified as being linked with stem cell differentiaton", "Cellular structures indicative of high offspring production", "Tissue sample contains high neural cell content") @@ -165,6 +166,8 @@ get_light_and_color(parent) add_language(LANGUAGE_GREIMORIAN) add_language(LANGUAGE_GREIMORIAN_HIVEMIND) + remove_language(LANGUAGE_TCB) + default_language = GLOB.all_languages[LANGUAGE_GREIMORIAN] /mob/living/simple_animal/hostile/giant_spider/nurse/servant/Initialize() . = ..() @@ -418,6 +421,10 @@ set desc = "Lay a clutch of eggs to make new spiderlings. This will cost one food point." set category = "Greimorian" + if(fed <= 0) + to_chat(src, SPAN_WARNING("You do not have the nutrients to do this. Try cocooning a corpse!")) + return + var/obj/effect/spider/eggcluster/E = locate() in get_turf(src) if(!E && fed > 0) src.visible_message("\The [src] begins to lay a cluster of eggs.") @@ -433,6 +440,9 @@ set desc = "Lay a greimorian servant, which can be player-controlled. This will cost one food point." set category = "Greimorian" + if(fed <= 0) + to_chat(src, SPAN_WARNING("You do not have the nutrients to do this. Try cocooning a corpse!")) + return var/obj/effect/spider/eggcluster/E = locate() in get_turf(src) if(!E && fed > 0) diff --git a/code/modules/mob/living/simple_animal/hostile/spider_queen.dm b/code/modules/mob/living/simple_animal/hostile/spider_queen.dm index ecad360d847..a7732fdaa5c 100644 --- a/code/modules/mob/living/simple_animal/hostile/spider_queen.dm +++ b/code/modules/mob/living/simple_animal/hostile/spider_queen.dm @@ -26,6 +26,7 @@ health = 1000 melee_damage_lower = 35 melee_damage_upper = 40 + melee_reach = 2 armor_penetration = 30 resist_mod = 15 // LOL good luck pal heat_damage_per_tick = 20 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 61227d41fbe..0f92e9e049a 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -118,6 +118,7 @@ //LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly var/melee_damage_lower = 0 var/melee_damage_upper = 0 + var/melee_reach = 1 var/armor_penetration = 0 var/attack_flags = 0 var/attacktext = "attacked" @@ -1121,6 +1122,16 @@ visible_message(SPAN_NOTICE("\The [src] fades away!")) qdel(src) +//Taken from /obj/item/proc/attack_can_reach +/mob/living/simple_animal/proc/attack_can_reach(var/atom/us, var/atom/them, var/range) + if(us.Adjacent(them)) + return TRUE // Already adjacent. + else if(range <= 1) + return FALSE + if(AStar(get_turf(us), get_turf(them), /turf/proc/AdjacentTurfsRanged, /turf/proc/Distance, max_nodes=25, max_node_depth=range)) + return TRUE + return FALSE + #undef BLOOD_NONE #undef BLOOD_LIGHT #undef BLOOD_MEDIUM diff --git a/html/changelogs/AlaunusLux-various-greimorian-fixes.yml b/html/changelogs/AlaunusLux-various-greimorian-fixes.yml new file mode 100644 index 00000000000..8bf5f6ea5d1 --- /dev/null +++ b/html/changelogs/AlaunusLux-various-greimorian-fixes.yml @@ -0,0 +1,63 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: AlaunusLux + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - balance: "Greimorian servants can now see in the dark." + - balance: "Things pulled by greimorians will always pass through webs." + - qol: "Greimorians attempting to lay eggs or a servant now get feedback if it fails." + - experiment: "Gives Greimorian Queens a melee attack reach of two tiles." + - bugfix: "Greimorian servants can no longer speak Tau Ceti Basic." + - bugfix: "Fixes Greimorian Queen icon state being set to resting if the controlling player ghosts."