mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-21 21:17:44 +01:00
[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:
@@ -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."
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user