[MIRROR] Kills BOTH /poison paths by turning poisonous into an element. (+fantasty prefix, sanity on attackingtarget signal, and more) (#5586)

* Kills BOTH /poison paths by turning poisonous into an element. (+fantasty prefix, sanity on attackingtarget signal, and more) (#58882)

* Kills BOTH /poison paths by turning poisonous into an element. (+fantasty prefix, sanity on attackingtarget signal, and more)

* AAAAAAAA

* Update spellbook.dm

Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
This commit is contained in:
SkyratBot
2021-05-10 16:12:34 +02:00
committed by GitHub
parent c8c2931552
commit 01a2d62e9e
49 changed files with 333 additions and 252 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
/mob/living/Initialize()
/mob/living/Initialize(mapload)
. = ..()
register_init_signals()
if(unique_name)
@@ -1,16 +1,5 @@
/mob/living/simple_animal/hostile/retaliate/poison
var/poison_per_bite = 0
var/poison_type = /datum/reagent/toxin
/mob/living/simple_animal/hostile/retaliate/poison/AttackingTarget()
. = ..()
if(. && isliving(target))
var/mob/living/L = target
if(L.reagents && !poison_per_bite == 0)
L.reagents.add_reagent(poison_type, poison_per_bite)
return .
/mob/living/simple_animal/hostile/retaliate/poison/snake
/mob/living/simple_animal/hostile/retaliate/snake
name = "snake"
desc = "A slithery snake. These legless reptiles are the bane of mice and adventurers alike."
icon_state = "snake"
@@ -40,15 +29,18 @@
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
/mob/living/simple_animal/hostile/retaliate/poison/snake/Initialize()
/mob/living/simple_animal/hostile/retaliate/snake/Initialize(mapload, special_reagent)
. = ..()
add_cell_sample()
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
if(!special_reagent)
special_reagent = /datum/reagent/toxin
AddElement(/datum/element/venomous, special_reagent, 4)
/mob/living/simple_animal/hostile/retaliate/poison/snake/add_cell_sample()
/mob/living/simple_animal/hostile/retaliate/snake/add_cell_sample()
AddElement(/datum/element/swabable, CELL_LINE_TABLE_SNAKE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5)
/mob/living/simple_animal/hostile/retaliate/poison/snake/ListTargets(atom/the_target)
/mob/living/simple_animal/hostile/retaliate/snake/ListTargets(atom/the_target)
. = oview(vision_range, targets_from) //get list of things in vision range
var/list/living_mobs = list()
var/list/mice = list()
@@ -65,7 +57,7 @@
return living_mobs & enemies
return mice
/mob/living/simple_animal/hostile/retaliate/poison/snake/AttackingTarget()
/mob/living/simple_animal/hostile/retaliate/snake/AttackingTarget()
if(istype(target, /mob/living/simple_animal/mouse))
visible_message("<span class='notice'>[name] consumes [target] in a single gulp!</span>", "<span class='notice'>You consume [target] in a single gulp!</span>")
QDEL_NULL(target)
@@ -10,7 +10,7 @@
#define BEE_POLLINATE_PEST_CHANCE 33
#define BEE_POLLINATE_POTENCY_CHANCE 50
/mob/living/simple_animal/hostile/poison/bees
/mob/living/simple_animal/hostile/bee
name = "bee"
desc = "Buzzy buzzy bee, stingy sti- Ouch!"
icon_state = ""
@@ -58,7 +58,7 @@
var/static/beehometypecache = typecacheof(/obj/structure/beebox)
var/static/hydroponicstypecache = typecacheof(/obj/machinery/hydroponics)
/mob/living/simple_animal/hostile/poison/bees/Initialize()
/mob/living/simple_animal/hostile/bee/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
@@ -66,7 +66,7 @@
AddElement(/datum/element/simple_flying)
AddComponent(/datum/component/swarming)
/mob/living/simple_animal/hostile/poison/bees/mob_pickup(mob/living/L)
/mob/living/simple_animal/hostile/bee/mob_pickup(mob/living/L)
var/obj/item/clothing/head/mob_holder/destructible/holder = new(get_turf(src), src, held_state, head_icon, held_lh, held_rh, worn_slot_flags)
var/list/reee = list(/datum/reagent/consumable/nutriment/vitamin = 5)
if(beegent)
@@ -75,7 +75,7 @@
L.visible_message("<span class='warning'>[L] scoops up [src]!</span>")
L.put_in_hands(holder)
/mob/living/simple_animal/hostile/poison/bees/Destroy()
/mob/living/simple_animal/hostile/bee/Destroy()
if(beehome)
beehome.bees -= src
beehome = null
@@ -83,7 +83,7 @@
return ..()
/mob/living/simple_animal/hostile/poison/bees/death(gibbed)
/mob/living/simple_animal/hostile/bee/death(gibbed)
if(beehome)
beehome.bees -= src
beehome = null
@@ -98,13 +98,13 @@
..()
/mob/living/simple_animal/hostile/poison/bees/examine(mob/user)
/mob/living/simple_animal/hostile/bee/examine(mob/user)
. = ..()
if(!beehome)
. += "<span class='warning'>This bee is homeless!</span>"
/mob/living/simple_animal/hostile/poison/bees/ListTargets() // Bee processing is expessive, so we override them finding targets here.
/mob/living/simple_animal/hostile/bee/ListTargets() // Bee processing is expessive, so we override them finding targets here.
if(!search_objects) //In case we want to have purely hostile bees
return ..()
else
@@ -115,7 +115,7 @@
for(var/mob/A in searched_for)
. += A
/mob/living/simple_animal/hostile/poison/bees/proc/generate_bee_visuals()
/mob/living/simple_animal/hostile/bee/proc/generate_bee_visuals()
cut_overlays()
var/col = BEE_DEFAULT_COLOUR
@@ -135,7 +135,7 @@
//We don't attack beekeepers/people dressed as bees//Todo: bee costume
/mob/living/simple_animal/hostile/poison/bees/CanAttack(atom/the_target)
/mob/living/simple_animal/hostile/bee/CanAttack(atom/the_target)
. = ..()
if(!.)
return FALSE
@@ -144,7 +144,7 @@
return !H.bee_friendly()
/mob/living/simple_animal/hostile/poison/bees/Found(atom/A)
/mob/living/simple_animal/hostile/bee/Found(atom/A)
if(isliving(A))
var/mob/living/H = A
return !H.bee_friendly()
@@ -156,7 +156,7 @@
return FALSE
/mob/living/simple_animal/hostile/poison/bees/AttackingTarget()
/mob/living/simple_animal/hostile/bee/AttackingTarget()
//Pollinate
if(istype(target, /obj/machinery/hydroponics))
var/obj/machinery/hydroponics/Hydro = target
@@ -177,21 +177,17 @@
beegent.expose_mob(L, INJECT)
L.reagents.add_reagent(beegent.type, rand(1,5))
/mob/living/simple_animal/hostile/poison/bees/inject_poison(mob/living/L)
if(beegent && istype(L) && L.reagents)
beegent.expose_mob(L, INJECT)
L.reagents.add_reagent(beegent.type, rand(1,5))
/mob/living/simple_animal/hostile/poison/bees/proc/assign_reagent(datum/reagent/R)
/mob/living/simple_animal/hostile/bee/proc/assign_reagent(datum/reagent/R)
if(istype(R))
beegent = R
name = "[initial(name)] ([R.name])"
real_name = name
poison_type = null
//clear the old since this one is going to have some new value
RemoveElement(/datum/element/venomous)
AddElement(/datum/element/venomous, beegent.type, list(1, 5))
generate_bee_visuals()
/mob/living/simple_animal/hostile/poison/bees/proc/pollinate(obj/machinery/hydroponics/Hydro)
/mob/living/simple_animal/hostile/bee/proc/pollinate(obj/machinery/hydroponics/Hydro)
if(!istype(Hydro) || !Hydro.myseed || Hydro.dead || Hydro.recent_bee_visit)
LoseTarget()
return
@@ -216,7 +212,7 @@
beehome.bee_resources = min(beehome.bee_resources + growth, 100)
/mob/living/simple_animal/hostile/poison/bees/handle_automated_action()
/mob/living/simple_animal/hostile/bee/handle_automated_action()
. = ..()
if(!.)
return
@@ -241,15 +237,15 @@
beehome = BB
break // End loop after the first compatible find.
/mob/living/simple_animal/hostile/poison/bees/will_escape_storage()
/mob/living/simple_animal/hostile/bee/will_escape_storage()
return TRUE
/mob/living/simple_animal/hostile/poison/bees/toxin/Initialize()
/mob/living/simple_animal/hostile/bee/toxin/Initialize()
. = ..()
var/datum/reagent/R = pick(typesof(/datum/reagent/toxin))
assign_reagent(GLOB.chemical_reagents_list[R])
/mob/living/simple_animal/hostile/poison/bees/queen
/mob/living/simple_animal/hostile/bee/queen
name = "queen bee"
desc = "She's the queen of bees, BZZ BZZ!"
icon_base = "queen"
@@ -257,12 +253,12 @@
//the Queen doesn't leave the box on her own, and she CERTAINLY doesn't pollinate by herself
/mob/living/simple_animal/hostile/poison/bees/queen/Found(atom/A)
/mob/living/simple_animal/hostile/bee/queen/Found(atom/A)
return FALSE
//leave pollination for the peasent bees
/mob/living/simple_animal/hostile/poison/bees/queen/AttackingTarget()
/mob/living/simple_animal/hostile/bee/queen/AttackingTarget()
. = ..()
if(. && beegent && isliving(target))
var/mob/living/L = target
@@ -271,13 +267,13 @@
//PEASENT BEES
/mob/living/simple_animal/hostile/poison/bees/queen/pollinate()
/mob/living/simple_animal/hostile/bee/queen/pollinate()
return
/mob/living/simple_animal/hostile/poison/bees/queen/will_escape_storage()
/mob/living/simple_animal/hostile/bee/queen/will_escape_storage()
return FALSE
/mob/living/simple_animal/hostile/poison/bees/proc/reagent_incompatible(mob/living/simple_animal/hostile/poison/bees/B)
/mob/living/simple_animal/hostile/bee/proc/reagent_incompatible(mob/living/simple_animal/hostile/bee/B)
if(!B)
return FALSE
if(B.beegent && beegent && B.beegent.type != beegent.type || B.beegent && !beegent || !B.beegent && beegent)
@@ -291,7 +287,7 @@
icon_state = "queen_item"
inhand_icon_state = ""
icon = 'icons/mob/bees.dmi'
var/mob/living/simple_animal/hostile/poison/bees/queen/queen
var/mob/living/simple_animal/hostile/bee/queen/queen
/obj/item/queen_bee/attackby(obj/item/I, mob/user, params)
@@ -329,7 +325,7 @@
QDEL_NULL(queen)
return ..()
/mob/living/simple_animal/hostile/poison/bees/consider_wakeup()
/mob/living/simple_animal/hostile/bee/consider_wakeup()
if (beehome && loc == beehome) // If bees are chilling in their nest, they're not actively looking for targets
idle = min(100, ++idle)
if(idle >= BEE_IDLE_ROAMING && prob(BEE_PROB_GOROAM))
@@ -338,10 +334,10 @@
else
..()
/mob/living/simple_animal/hostile/poison/bees/short
/mob/living/simple_animal/hostile/bee/short
desc = "These bees seem unstable and won't survive for long."
/mob/living/simple_animal/hostile/poison/bees/short/Initialize(mapload, timetolive=50 SECONDS)
/mob/living/simple_animal/hostile/bee/short/Initialize(mapload, timetolive=50 SECONDS)
. = ..()
addtimer(CALLBACK(src, .proc/death), timetolive)
@@ -1,29 +1,3 @@
/**
* # Poison Hostile Simplemob
*
* A subtype of the hostile simplemob which injects reagents into its target on attack, assuming the target accepts reagents.
*/
/mob/living/simple_animal/hostile/poison
///How much of a reagent the mob injects on attack
var/poison_per_bite = 5
///What reagent the mob injects targets with
var/poison_type = /datum/reagent/toxin
/mob/living/simple_animal/hostile/poison/AttackingTarget()
. = ..()
if(.)
inject_poison(target)
/**
* Injects poison into a given target.
*
* Checks if a given target accepts reagents, and then injects a given reagent into them if so.
* Arguments:
* * living_target - The targeted mob
*/
/mob/living/simple_animal/hostile/poison/proc/inject_poison(mob/living/living_target)
if(poison_per_bite != 0 && living_target?.reagents)
living_target.reagents.add_reagent(poison_type, poison_per_bite)
/**
* # Giant Spider
@@ -33,7 +7,7 @@
* A mob which can be created by botany or xenobiology. The basic type is the guard, which is slower but sturdy and outputs good damage.
* All spiders can produce webbing. Currently does not inject toxin into its target.
*/
/mob/living/simple_animal/hostile/poison/giant_spider
/mob/living/simple_animal/hostile/giant_spider
name = "giant spider"
desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes."
icon_state = "guard"
@@ -72,7 +46,10 @@
gold_core_spawnable = HOSTILE_SPAWN
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
footstep_type = FOOTSTEP_MOB_CLAW
poison_per_bite = 0
///How much of a reagent the mob injects on attack
var/poison_per_bite = 0
///What reagent the mob injects targets with
var/poison_type = /datum/reagent/toxin
///Whether or not the spider is in the middle of an action.
var/is_busy = FALSE
///How quickly the spider can place down webbing. One is base speed, larger numbers are slower.
@@ -84,12 +61,14 @@
/// 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."
/mob/living/simple_animal/hostile/poison/giant_spider/Initialize()
/mob/living/simple_animal/hostile/giant_spider/Initialize()
. = ..()
lay_web = new
lay_web.Grant(src)
if(poison_per_bite)
AddElement(/datum/element/venomous, poison_type, poison_per_bite)
/mob/living/simple_animal/hostile/poison/giant_spider/Login()
/mob/living/simple_animal/hostile/giant_spider/Login()
. = ..()
if(!. || !client)
return FALSE
@@ -100,11 +79,11 @@
mind.store_memory("<span class='spider'><b>[directive]</b></span>")
GLOB.spidermobs[src] = TRUE
/mob/living/simple_animal/hostile/poison/giant_spider/Destroy()
/mob/living/simple_animal/hostile/giant_spider/Destroy()
GLOB.spidermobs -= src
return ..()
/mob/living/simple_animal/hostile/poison/giant_spider/mob_negates_gravity()
/mob/living/simple_animal/hostile/giant_spider/mob_negates_gravity()
return ..() || (locate(/obj/structure/spider/stickyweb) in loc)
/**
@@ -114,7 +93,7 @@
*
* A subtype of the giant spider which is faster, has toxin injection, but less health. This spider is only slightly slower than a human.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/hunter
/mob/living/simple_animal/hostile/giant_spider/hunter
name = "hunter spider"
desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes."
icon_state = "hunter"
@@ -137,7 +116,7 @@
* A subtype of the giant spider which specializes in support skills. Nurses can place down webbing in a quarter of the time
* that other species can and can wrap other spiders' wounds, healing them. Note that it cannot heal itself.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/nurse
/mob/living/simple_animal/hostile/giant_spider/nurse
name = "nurse spider"
desc = "Furry and black, it makes you shudder to look at it. This one has brilliant green eyes."
icon_state = "nurse"
@@ -155,17 +134,17 @@
///The health HUD applied to the mob.
var/health_hud = DATA_HUD_MEDICAL_ADVANCED
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/Initialize()
/mob/living/simple_animal/hostile/giant_spider/nurse/Initialize()
. = ..()
var/datum/atom_hud/datahud = GLOB.huds[health_hud]
datahud.add_hud_to(src)
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/AttackingTarget()
/mob/living/simple_animal/hostile/giant_spider/nurse/AttackingTarget()
if(is_busy)
return
if(!istype(target, /mob/living/simple_animal/hostile/poison/giant_spider))
if(!istype(target, /mob/living/simple_animal/hostile/giant_spider))
return ..()
var/mob/living/simple_animal/hostile/poison/giant_spider/hurt_spider = target
var/mob/living/simple_animal/hostile/giant_spider/hurt_spider = target
if(hurt_spider == src)
to_chat(src, "<span class='warning'>You don't have the dexerity to wrap your own wounds.</span>")
return
@@ -188,7 +167,7 @@
* A subtype of the giant spider which specializes in pure strength and staying power. Is slowed down greatly when not on webbing, but can lunge
* to throw off attackers and possibly to stun them, allowing the tarantula to net an easy kill.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/tarantula
/mob/living/simple_animal/hostile/giant_spider/tarantula
name = "tarantula"
desc = "Furry and black, it makes you shudder to look at it. This one has abyssal red eyes."
icon_state = "tarantula"
@@ -214,12 +193,12 @@
///The spider's charge ability
var/obj/effect/proc_holder/tarantula_charge/charge
/mob/living/simple_animal/hostile/poison/giant_spider/tarantula/Initialize()
/mob/living/simple_animal/hostile/giant_spider/tarantula/Initialize()
. = ..()
charge = new
AddAbility(charge)
/mob/living/simple_animal/hostile/poison/giant_spider/tarantula/Moved(atom/oldloc, dir)
/mob/living/simple_animal/hostile/giant_spider/tarantula/Moved(atom/oldloc, dir)
. = ..()
var/obj/structure/spider/stickyweb/web = locate() in loc
if(web && !silk_walking)
@@ -237,7 +216,7 @@
* A subtype of the giant spider which specializes in speed and poison. Injects a deadlier toxin than other spiders, moves extremely fast,
* but like the hunter has a limited amount of health.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/viper
/mob/living/simple_animal/hostile/giant_spider/viper
name = "viper spider"
desc = "Furry and black, it makes you shudder to look at it. This one has effervescent purple eyes."
icon_state = "viper"
@@ -264,7 +243,7 @@
* However, this spider subtype has no offensive capability and can be quickly dispatched without assistance from other spiders. They are also capable
* of sending messages to all living spiders, being a communication line for the rest of the horde.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/midwife
/mob/living/simple_animal/hostile/giant_spider/midwife
name = "broodmother spider"
desc = "Furry and black, it makes you shudder to look at it. This one has scintillating green eyes. Might also be hiding a real knife somewhere."
gender = FEMALE
@@ -295,7 +274,7 @@
///The ability for the spider to send a message to all currently living spiders.
var/datum/action/innate/spider/comm/letmetalkpls
/mob/living/simple_animal/hostile/poison/giant_spider/midwife/Initialize()
/mob/living/simple_animal/hostile/giant_spider/midwife/Initialize()
. = ..()
wrap = new
AddAbility(wrap)
@@ -314,13 +293,13 @@
* Attempts to coccon the spider's cocoon_target after a do_after.
* If the target is a human who hasn't been drained before, ups the spider's fed counter so it can lay enriched eggs.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/midwife/proc/cocoon()
/mob/living/simple_animal/hostile/giant_spider/midwife/proc/cocoon()
if(stat == DEAD || !cocoon_target || cocoon_target.anchored)
return
if(cocoon_target == src)
to_chat(src, "<span class='warning'>You can't wrap yourself!</span>")
return
if(istype(cocoon_target, /mob/living/simple_animal/hostile/poison/giant_spider))
if(istype(cocoon_target, /mob/living/simple_animal/hostile/giant_spider))
to_chat(src, "<span class='warning'>You can't wrap other spiders!</span>")
return
if(!Adjacent(cocoon_target))
@@ -363,9 +342,9 @@
button_icon_state = "lay_web"
/datum/action/innate/spider/lay_web/Activate()
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider))
if(!istype(owner, /mob/living/simple_animal/hostile/giant_spider))
return
var/mob/living/simple_animal/hostile/poison/giant_spider/spider = owner
var/mob/living/simple_animal/hostile/giant_spider/spider = owner
if(!isturf(spider.loc))
return
@@ -409,9 +388,9 @@
return ..()
/obj/effect/proc_holder/wrap/Click()
if(!istype(usr, /mob/living/simple_animal/hostile/poison/giant_spider/midwife))
if(!istype(usr, /mob/living/simple_animal/hostile/giant_spider/midwife))
return TRUE
var/mob/living/simple_animal/hostile/poison/giant_spider/midwife/user = usr
var/mob/living/simple_animal/hostile/giant_spider/midwife/user = usr
activate(user)
return TRUE
@@ -428,18 +407,18 @@
/obj/effect/proc_holder/wrap/InterceptClickOn(mob/living/caller, params, atom/target)
if(..())
return
if(ranged_ability_user.incapacitated() || !istype(ranged_ability_user, /mob/living/simple_animal/hostile/poison/giant_spider/midwife))
if(ranged_ability_user.incapacitated() || !istype(ranged_ability_user, /mob/living/simple_animal/hostile/giant_spider/midwife))
remove_ranged_ability()
return
var/mob/living/simple_animal/hostile/poison/giant_spider/midwife/user = ranged_ability_user
var/mob/living/simple_animal/hostile/giant_spider/midwife/user = ranged_ability_user
if(user.Adjacent(target) && (ismob(target) || isobj(target)))
var/atom/movable/target_atom = target
if(target_atom.anchored)
return
user.cocoon_target = target_atom
INVOKE_ASYNC(user, /mob/living/simple_animal/hostile/poison/giant_spider/midwife/.proc/cocoon)
INVOKE_ASYNC(user, /mob/living/simple_animal/hostile/giant_spider/midwife/.proc/cocoon)
remove_ranged_ability()
return TRUE
@@ -467,15 +446,15 @@
return ..()
/obj/effect/proc_holder/tarantula_charge/Click()
if(!istype(usr, /mob/living/simple_animal/hostile/poison/giant_spider/tarantula))
if(!istype(usr, /mob/living/simple_animal/hostile/giant_spider/tarantula))
return TRUE
var/mob/living/simple_animal/hostile/poison/giant_spider/tarantula/user = usr
var/mob/living/simple_animal/hostile/giant_spider/tarantula/user = usr
activate(user)
return TRUE
/obj/effect/proc_holder/tarantula_charge/proc/activate(mob/living/user)
var/message
var/mob/living/simple_animal/hostile/poison/giant_spider/tarantula/spider = user
var/mob/living/simple_animal/hostile/giant_spider/tarantula/spider = user
if(active)
message = "<span class='notice'>You stop preparing to charge.</span>"
remove_ranged_ability(message)
@@ -490,11 +469,11 @@
/obj/effect/proc_holder/tarantula_charge/InterceptClickOn(mob/living/caller, params, atom/target)
if(..())
return
if(ranged_ability_user.incapacitated() || !istype(ranged_ability_user, /mob/living/simple_animal/hostile/poison/giant_spider/tarantula))
if(ranged_ability_user.incapacitated() || !istype(ranged_ability_user, /mob/living/simple_animal/hostile/giant_spider/tarantula))
remove_ranged_ability()
return
var/mob/living/simple_animal/hostile/poison/giant_spider/tarantula/user = ranged_ability_user
var/mob/living/simple_animal/hostile/giant_spider/tarantula/user = ranged_ability_user
INVOKE_ASYNC(user, /mob/living/simple_animal/hostile/.proc/enter_charge, target)
remove_ranged_ability()
@@ -514,17 +493,17 @@
. = ..()
if(!.)
return
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/midwife))
if(!istype(owner, /mob/living/simple_animal/hostile/giant_spider/midwife))
return FALSE
var/mob/living/simple_animal/hostile/poison/giant_spider/midwife/S = owner
var/mob/living/simple_animal/hostile/giant_spider/midwife/S = owner
if(enriched && !S.fed)
return FALSE
return TRUE
/datum/action/innate/spider/lay_eggs/Activate()
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/midwife))
if(!istype(owner, /mob/living/simple_animal/hostile/giant_spider/midwife))
return
var/mob/living/simple_animal/hostile/poison/giant_spider/midwife/spider = owner
var/mob/living/simple_animal/hostile/giant_spider/midwife/spider = owner
var/obj/structure/spider/eggcluster/eggs = locate() in get_turf(spider)
if(eggs)
@@ -563,14 +542,14 @@
/datum/action/innate/spider/set_directive/IsAvailable()
if(..())
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider))
if(!istype(owner, /mob/living/simple_animal/hostile/giant_spider))
return FALSE
return TRUE
/datum/action/innate/spider/set_directive/Activate()
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/midwife))
if(!istype(owner, /mob/living/simple_animal/hostile/giant_spider/midwife))
return
var/mob/living/simple_animal/hostile/poison/giant_spider/midwife/spider = owner
var/mob/living/simple_animal/hostile/giant_spider/midwife/spider = owner
spider.directive = stripped_input(spider, "Enter the new directive", "Create directive", "[spider.directive]")
message_admins("[ADMIN_LOOKUPFLW(owner)] set its directive to: '[spider.directive]'.")
log_game("[key_name(owner)] set its directive to: '[spider.directive]'.")
@@ -581,7 +560,7 @@
button_icon_state = "command"
/datum/action/innate/spider/comm/IsAvailable()
if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/midwife))
if(!istype(owner, /mob/living/simple_animal/hostile/giant_spider/midwife))
return FALSE
return TRUE
@@ -605,7 +584,7 @@
return
var/my_message
my_message = "<span class='spider'><b>Command from [user]:</b> [message]</span>"
for(var/mob/living/simple_animal/hostile/poison/giant_spider/spider in GLOB.spidermobs)
for(var/mob/living/simple_animal/hostile/giant_spider/spider in GLOB.spidermobs)
to_chat(spider, my_message)
for(var/ghost in GLOB.dead_mob_list)
var/link = FOLLOW_LINK(ghost, user)
@@ -620,7 +599,7 @@
* A subtype of the giant spider which is immune to temperature damage, unlike its normal counterpart.
* Currently unused in the game unless spawned by admins.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/ice
/mob/living/simple_animal/hostile/giant_spider/ice
name = "giant ice spider"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
@@ -637,7 +616,7 @@
*
* Same thing as the giant ice spider but mirrors the nurse subtype. Also unused.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/ice
/mob/living/simple_animal/hostile/giant_spider/nurse/ice
name = "giant ice spider"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
@@ -653,7 +632,7 @@
*
* Same thing as the giant ice spider but mirrors the hunter subtype. Also unused.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/hunter/ice
/mob/living/simple_animal/hostile/giant_spider/hunter/ice
name = "giant ice spider"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
@@ -670,7 +649,7 @@
*
* Mainly used as a minor threat in abandoned places, such as areas in maintenance or a ruin.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/hunter/scrawny
/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny
name = "scrawny spider"
environment_smash = ENVIRONMENT_SMASH_NONE
health = 60
@@ -687,7 +666,7 @@
*
* Mainly used as a moderately strong but slow threat in abandoned places, such as areas in maintenance or a ruin.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/tarantula/scrawny
/mob/living/simple_animal/hostile/giant_spider/tarantula/scrawny
name = "scrawny tarantula"
environment_smash = ENVIRONMENT_SMASH_NONE
health = 150
@@ -704,7 +683,7 @@
*
* Mainly used as a weak threat in abandoned places, such as areas in maintenance or a ruin.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/nurse/scrawny
/mob/living/simple_animal/hostile/giant_spider/nurse/scrawny
name = "scrawny nurse spider"
environment_smash = ENVIRONMENT_SMASH_NONE
health = 30
@@ -720,7 +699,7 @@
* A subtype of giant spider which only occurs from changelings. Has the base stats of a hunter, but they can heal themselves.
* They also produce web in 70% of the time of the base spider. They also occasionally leave puddles of blood when they walk around. Flavorful!
*/
/mob/living/simple_animal/hostile/poison/giant_spider/hunter/flesh
/mob/living/simple_animal/hostile/giant_spider/hunter/flesh
desc = "A odd fleshy creature in the shape of a spider. Its eyes are pitch black and soulless."
icon_state = "flesh_spider"
icon_living = "flesh_spider"
@@ -728,12 +707,12 @@
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."
/mob/living/simple_animal/hostile/poison/giant_spider/hunter/flesh/Moved(atom/oldloc, dir)
/mob/living/simple_animal/hostile/giant_spider/hunter/flesh/Moved(atom/oldloc, dir)
. = ..()
if(prob(5))
new /obj/effect/decal/cleanable/blood/bubblegum(loc)
/mob/living/simple_animal/hostile/poison/giant_spider/hunter/flesh/AttackingTarget()
/mob/living/simple_animal/hostile/giant_spider/hunter/flesh/AttackingTarget()
if(is_busy)
return
if(src == target)
@@ -757,11 +736,11 @@
*
* A viper spider with buffed attributes. All I changed was its health value and gave it the ability to ventcrawl. The crux of the wizard meta.
*/
/mob/living/simple_animal/hostile/poison/giant_spider/viper/wizard
/mob/living/simple_animal/hostile/giant_spider/viper/wizard
maxHealth = 80
health = 80
menu_description = "Stronger assassin spider variant with an unmatched speed, high amount of health and very deadly poison, but deals very low amount of damage. It also has ability to ventcrawl. Venom injection of 6u per bite."
/mob/living/simple_animal/hostile/poison/giant_spider/viper/wizard/Initialize()
/mob/living/simple_animal/hostile/giant_spider/viper/wizard/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
@@ -66,7 +66,7 @@
///Declares a cooldown for potential charges right off the bat.
COOLDOWN_DECLARE(charge_cooldown)
/mob/living/simple_animal/hostile/Initialize()
/mob/living/simple_animal/hostile/Initialize(mapload)
. = ..()
if(!targets_from)
@@ -351,9 +351,11 @@
/mob/living/simple_animal/hostile/proc/AttackingTarget(atom/attacked_target)
SEND_SIGNAL(src, COMSIG_HOSTILE_ATTACKINGTARGET, target)
in_melee = TRUE
return target.attack_animal(src)
SEND_SIGNAL(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, target)
var/result = target.attack_animal(src)
SEND_SIGNAL(src, COMSIG_HOSTILE_POST_ATTACKINGTARGET, target, result)
return result
/mob/living/simple_animal/hostile/proc/Aggro()
vision_range = aggro_vision_range
@@ -39,6 +39,11 @@
var/banana_type = /obj/item/grown/bananapeel
var/attack_reagent
/mob/living/simple_animal/hostile/retaliate/clown/Initialize(mapload)
. = ..()
if(attack_reagent)
AddElement(/datum/element/venomous, attack_reagent, list(1, 5))
/mob/living/simple_animal/hostile/retaliate/clown/attack_hand(mob/living/carbon/human/user, list/modifiers)
..()
playsound(loc, 'sound/items/bikehorn.ogg', 50, TRUE)
@@ -51,13 +56,6 @@
new banana_type(pick(adjacent))
banana_time = world.time + rand(30,60)
/mob/living/simple_animal/hostile/retaliate/clown/AttackingTarget()
. = ..()
if(attack_reagent && . && isliving(target))
var/mob/living/L = target
if(L.reagents)
L.reagents.add_reagent(attack_reagent, rand(1,5))
/mob/living/simple_animal/hostile/retaliate/clown/lube
name = "Living Lube"
desc = "A puddle of lube brought to life by the honkmother."
+1 -1
View File
@@ -60,7 +60,7 @@
* * set a random nutrition level
* * Intialize the movespeed of the mob
*/
/mob/Initialize()
/mob/Initialize(mapload)
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MOB_CREATED, src)
add_to_mob_list()
if(stat == DEAD)