mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-31 09:08:30 +01:00
[MIRROR] Basic Mob Spiders III: Sgt. Araneus is no longer a bat [MDB IGNORE] (#19315)
* Basic Mob Spiders III: Sgt. Araneus is no longer a bat * spooky scary spider * Revert "spooky scary spider" This reverts commit 7bcca7750390c7ba6aaa08760886eda524f600f8. * resolve conflicts * resolve conflicts * https://github.com/tgstation/tgstation/pull/73724 https://github.com/tgstation/tgstation/pull/73724 * https://github.com/Skyrat-SS13/Skyrat-tg/pull/19561 * fixes * wew --------- Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: lessthnthree <three@lessthanthree.dk> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
This commit is contained in:
co-authored by
Jacquerel
lessthnthree
Gandalf
parent
79a99ba516
commit
480745ce05
@@ -1310,7 +1310,7 @@
|
||||
},
|
||||
/area/awaymission/caves/bmp_asteroid/level_two)
|
||||
"kE" = (
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter,
|
||||
/mob/living/basic/giant_spider/hunter,
|
||||
/turf/open/floor/iron,
|
||||
/area/awaymission/caves/bmp_asteroid)
|
||||
"kL" = (
|
||||
@@ -1382,7 +1382,7 @@
|
||||
/area/awaymission/caves/northblock)
|
||||
"pC" = (
|
||||
/obj/item/mjollnir,
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse,
|
||||
/mob/living/basic/giant_spider/nurse,
|
||||
/turf/open/misc/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
|
||||
},
|
||||
@@ -1477,7 +1477,7 @@
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter,
|
||||
/mob/living/basic/giant_spider/hunter,
|
||||
/turf/open/floor/iron,
|
||||
/area/awaymission/caves/bmp_asteroid)
|
||||
"uO" = (
|
||||
@@ -1635,7 +1635,7 @@
|
||||
},
|
||||
/area/awaymission/caves/bmp_asteroid/level_two)
|
||||
"Bz" = (
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse,
|
||||
/mob/living/basic/giant_spider/nurse,
|
||||
/turf/open/misc/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
|
||||
},
|
||||
@@ -1726,7 +1726,7 @@
|
||||
"FS" = (
|
||||
/obj/machinery/light/small/built/directional/north,
|
||||
/obj/structure/spider/stickyweb,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter,
|
||||
/mob/living/basic/giant_spider/hunter,
|
||||
/turf/open/floor/iron,
|
||||
/area/awaymission/caves/bmp_asteroid)
|
||||
"FV" = (
|
||||
@@ -1982,7 +1982,7 @@
|
||||
/turf/open/floor/iron,
|
||||
/area/awaymission/caves/bmp_asteroid)
|
||||
"Xs" = (
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter,
|
||||
/mob/living/basic/giant_spider/hunter,
|
||||
/turf/open/misc/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
|
||||
},
|
||||
@@ -2004,7 +2004,7 @@
|
||||
/area/awaymission/caves/bmp_asteroid/level_two)
|
||||
"XR" = (
|
||||
/obj/structure/spider/stickyweb,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter,
|
||||
/mob/living/basic/giant_spider/hunter,
|
||||
/turf/open/misc/asteroid/basalt{
|
||||
initial_gas_mix = "n2=23;o2=14;TEMP=2.7"
|
||||
},
|
||||
|
||||
@@ -494,7 +494,7 @@
|
||||
/obj/effect/turf_decal/tile/bar{
|
||||
dir = 1
|
||||
},
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny,
|
||||
/mob/living/basic/giant_spider/hunter/scrawny,
|
||||
/turf/open/floor/iron,
|
||||
/area/shuttle/abandoned/bar)
|
||||
"bd" = (
|
||||
@@ -1026,7 +1026,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/mob/living/simple_animal/hostile/giant_spider/tarantula/scrawny,
|
||||
/mob/living/basic/giant_spider/tarantula/scrawny,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/shuttle/abandoned/bridge)
|
||||
"cg" = (
|
||||
@@ -1609,7 +1609,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/scrawny,
|
||||
/mob/living/basic/giant_spider/nurse/scrawny,
|
||||
/turf/open/floor/iron,
|
||||
/area/shuttle/abandoned/cargo)
|
||||
"dx" = (
|
||||
@@ -1685,7 +1685,7 @@
|
||||
"dG" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/cable,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny,
|
||||
/mob/living/basic/giant_spider/hunter/scrawny,
|
||||
/turf/open/floor/iron,
|
||||
/area/shuttle/abandoned/medbay)
|
||||
"dH" = (
|
||||
|
||||
@@ -5,3 +5,4 @@
|
||||
#define FLIP_ON_DEATH (1<<1)
|
||||
#define REMAIN_DENSE_WHILE_DEAD (1<<2)
|
||||
|
||||
#define FLAMMABLE_MOB (1<<3)
|
||||
|
||||
@@ -165,7 +165,7 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list(
|
||||
|
||||
#define isclown(A) (istype(A, /mob/living/simple_animal/hostile/retaliate/clown))
|
||||
|
||||
#define isspider(A) (istype(A, /mob/living/simple_animal/hostile/giant_spider))
|
||||
#define isspider(A) (istype(A, /mob/living/basic/giant_spider))
|
||||
|
||||
|
||||
//Misc mobs
|
||||
|
||||
@@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(phobia_regexes, list(
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(phobia_mobs, list(
|
||||
"spiders" = typecacheof(list(/mob/living/simple_animal/hostile/giant_spider)),
|
||||
"spiders" = typecacheof(list(/mob/living/basic/giant_spider)),
|
||||
"security" = typecacheof(list(/mob/living/simple_animal/bot/secbot)),
|
||||
"lizards" = typecacheof(list(/mob/living/simple_animal/hostile/lizard)),
|
||||
"skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/skeleton)),
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
else
|
||||
controller.queue_behavior(/datum/ai_behavior/perform_speech, pick(speak))
|
||||
|
||||
/datum/ai_planning_subtree/random_speech/cockroach
|
||||
/datum/ai_planning_subtree/random_speech/insect
|
||||
speech_chance = 5
|
||||
emote_hear = list("chitters.")
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
/datum/element/prevent_attacking_of_types/Attach(datum/target, list/typecache, alert_message)
|
||||
. = ..()
|
||||
|
||||
if (!ishostile(target))
|
||||
if (!isanimal_or_basicmob(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
|
||||
src.alert_message = alert_message
|
||||
|
||||
@@ -248,8 +248,8 @@
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast,
|
||||
/mob/living/simple_animal/hostile/bear,
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/independent,
|
||||
/mob/living/simple_animal/hostile/giant_spider,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter,
|
||||
/mob/living/basic/giant_spider,
|
||||
/mob/living/basic/giant_spider/hunter,
|
||||
/mob/living/simple_animal/hostile/gorilla,
|
||||
/mob/living/simple_animal/hostile/headcrab,
|
||||
/mob/living/simple_animal/hostile/killertomato,
|
||||
|
||||
@@ -27,12 +27,8 @@
|
||||
. = ..()
|
||||
|
||||
if(isbasicmob(owner))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(isanimal(owner))
|
||||
var/mob/living/simple_animal/animal_owner = owner
|
||||
if(!animal_owner.flammable)
|
||||
var/mob/living/basic/basic_owner = owner
|
||||
if(!(basic_owner.basic_mob_flags & FLAMMABLE_MOB))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -148,13 +144,7 @@
|
||||
if(!on_fire)
|
||||
return TRUE
|
||||
|
||||
if(isanimal(owner))
|
||||
var/mob/living/simple_animal/animal_owner = owner
|
||||
adjust_stacks(animal_owner.fire_stack_removal_speed * delta_time)
|
||||
else if(iscyborg(owner))
|
||||
adjust_stacks(-0.55 * delta_time)
|
||||
else
|
||||
adjust_stacks(-0.05 * delta_time)
|
||||
adjust_stacks(owner.fire_stack_decay_rate * delta_time)
|
||||
|
||||
if(stacks <= 0)
|
||||
qdel(src)
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
if(isspider(mover))
|
||||
return TRUE
|
||||
else if(isliving(mover))
|
||||
if(istype(mover.pulledby, /mob/living/simple_animal/hostile/giant_spider))
|
||||
if(istype(mover.pulledby, /mob/living/basic/giant_spider))
|
||||
return TRUE
|
||||
if(prob(50))
|
||||
balloon_alert(mover, "stuck in web!")
|
||||
@@ -127,19 +127,19 @@
|
||||
AddComponent(/datum/component/swarming)
|
||||
|
||||
/obj/structure/spider/spiderling/hunter
|
||||
grow_as = /mob/living/simple_animal/hostile/giant_spider/hunter
|
||||
grow_as = /mob/living/basic/giant_spider/hunter
|
||||
|
||||
/obj/structure/spider/spiderling/nurse
|
||||
grow_as = /mob/living/simple_animal/hostile/giant_spider/nurse
|
||||
grow_as = /mob/living/basic/giant_spider/nurse
|
||||
|
||||
/obj/structure/spider/spiderling/midwife
|
||||
grow_as = /mob/living/simple_animal/hostile/giant_spider/midwife
|
||||
grow_as = /mob/living/basic/giant_spider/midwife
|
||||
|
||||
/obj/structure/spider/spiderling/viper
|
||||
grow_as = /mob/living/simple_animal/hostile/giant_spider/viper
|
||||
grow_as = /mob/living/basic/giant_spider/viper
|
||||
|
||||
/obj/structure/spider/spiderling/tarantula
|
||||
grow_as = /mob/living/simple_animal/hostile/giant_spider/tarantula
|
||||
grow_as = /mob/living/basic/giant_spider/tarantula
|
||||
|
||||
/obj/structure/spider/spiderling/Bump(atom/user)
|
||||
if(istype(user, /obj/structure/table))
|
||||
@@ -219,10 +219,10 @@
|
||||
if(amount_grown >= 100)
|
||||
if(!grow_as)
|
||||
if(prob(3))
|
||||
grow_as = pick(/mob/living/simple_animal/hostile/giant_spider/tarantula, /mob/living/simple_animal/hostile/giant_spider/viper, /mob/living/simple_animal/hostile/giant_spider/midwife)
|
||||
grow_as = pick(/mob/living/basic/giant_spider/tarantula, /mob/living/basic/giant_spider/viper, /mob/living/basic/giant_spider/midwife)
|
||||
else
|
||||
grow_as = pick(/mob/living/simple_animal/hostile/giant_spider, /mob/living/simple_animal/hostile/giant_spider/hunter, /mob/living/simple_animal/hostile/giant_spider/nurse)
|
||||
var/mob/living/simple_animal/hostile/giant_spider/S = new grow_as(src.loc)
|
||||
grow_as = pick(/mob/living/basic/giant_spider, /mob/living/basic/giant_spider/hunter, /mob/living/basic/giant_spider/nurse)
|
||||
var/mob/living/basic/giant_spider/S = new grow_as(src.loc)
|
||||
S.faction = faction.Copy()
|
||||
S.directive = directive
|
||||
qdel(src)
|
||||
|
||||
@@ -886,7 +886,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
/obj/effect/decal/cleanable/ants,
|
||||
))
|
||||
strong_against = typecacheof(list(
|
||||
/mob/living/simple_animal/hostile/giant_spider,
|
||||
/mob/living/basic/giant_spider,
|
||||
))
|
||||
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
possible_heads = list(
|
||||
JOB_HEAD_OF_SECURITY = list(
|
||||
/mob/living/basic/carp/pet/lia,
|
||||
/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus
|
||||
/mob/living/basic/giant_spider/sgt_araneus,
|
||||
),
|
||||
JOB_WARDEN = list(
|
||||
/mob/living/basic/pet/dog/pug/mcgriff
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
var/static/list/mob_list = list(
|
||||
/mob/living/basic/mouse/rat,
|
||||
/mob/living/simple_animal/hostile/bee,
|
||||
/mob/living/simple_animal/hostile/giant_spider,
|
||||
/mob/living/basic/giant_spider,
|
||||
)
|
||||
return pick(mob_list)
|
||||
|
||||
|
||||
@@ -196,11 +196,11 @@
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/emergency/specialops]
|
||||
pack.generate(pick_n_take(empty_shuttle_turfs))
|
||||
|
||||
spawn_list.Add(/mob/living/simple_animal/hostile/giant_spider)
|
||||
spawn_list.Add(/mob/living/simple_animal/hostile/giant_spider)
|
||||
spawn_list.Add(/mob/living/simple_animal/hostile/giant_spider/nurse)
|
||||
spawn_list.Add(/mob/living/basic/giant_spider)
|
||||
spawn_list.Add(/mob/living/basic/giant_spider)
|
||||
spawn_list.Add(/mob/living/basic/giant_spider/nurse)
|
||||
if(prob(50))
|
||||
spawn_list.Add(/mob/living/simple_animal/hostile/giant_spider/hunter)
|
||||
spawn_list.Add(/mob/living/basic/giant_spider/hunter)
|
||||
|
||||
var/turf/victim_turf = pick_n_take(empty_shuttle_turfs)
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
gender = PLURAL
|
||||
living_flags = MOVES_ON_ITS_OWN
|
||||
status_flags = CANPUSH
|
||||
fire_stack_decay_rate = -5 // Reasonably fast as NPCs will not usually actively extinguish themselves
|
||||
|
||||
var/basic_mob_flags = NONE
|
||||
|
||||
@@ -124,9 +125,8 @@
|
||||
|
||||
/mob/living/basic/Life(delta_time = SSMOBS_DT, times_fired)
|
||||
. = ..()
|
||||
///Automatic stamina re-gain
|
||||
if(staminaloss > 0)
|
||||
adjustStaminaLoss(-stamina_recovery * delta_time, FALSE, TRUE)
|
||||
adjustStaminaLoss(-stamina_recovery * delta_time, forced = TRUE)
|
||||
|
||||
/mob/living/basic/say_mod(input, list/message_mods = list())
|
||||
if(length(speak_emote))
|
||||
@@ -209,3 +209,22 @@
|
||||
|
||||
/mob/living/basic/compare_sentience_type(compare_type)
|
||||
return sentience_type == compare_type
|
||||
|
||||
/// Updates movement speed based on stamina loss
|
||||
/mob/living/basic/update_stamina()
|
||||
set_varspeed(initial(speed) + (staminaloss * 0.06))
|
||||
|
||||
/mob/living/basic/on_fire_stack(delta_time, times_fired, datum/status_effect/fire_handler/fire_stacks/fire_handler)
|
||||
adjust_bodytemperature((maximum_survivable_temperature + (fire_handler.stacks * 12)) * 0.5 * delta_time)
|
||||
|
||||
/mob/living/basic/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "")
|
||||
var/mutable_appearance/fire_overlay = mutable_appearance('icons/mob/effects/onfire.dmi', "generic_fire")
|
||||
if(on_fire && isnull(last_icon_state))
|
||||
add_overlay(fire_overlay)
|
||||
return fire_overlay
|
||||
else if(!on_fire && !isnull(last_icon_state))
|
||||
cut_overlay(fire_overlay)
|
||||
return null
|
||||
else if(on_fire && !isnull(last_icon_state))
|
||||
return last_icon_state
|
||||
return null
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
/**
|
||||
* # Giant Spider
|
||||
*
|
||||
* A mob which can be created by dynamic event, botany, or xenobiology.
|
||||
* The basic type is the guard, which is slow but sturdy and outputs good damage.
|
||||
* All spiders can produce webbing.
|
||||
*/
|
||||
/mob/living/basic/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"
|
||||
icon_living = "guard"
|
||||
icon_dead = "guard_dead"
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BUG
|
||||
speak_emote = list("chitters")
|
||||
butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8)
|
||||
response_help_continuous = "pets"
|
||||
response_help_simple = "pet"
|
||||
response_disarm_continuous = "gently pushes aside"
|
||||
response_disarm_simple = "gently push aside"
|
||||
initial_language_holder = /datum/language_holder/spider
|
||||
speed = 4
|
||||
maxHealth = 80
|
||||
health = 80
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
|
||||
basic_mob_flags = FLAMMABLE_MOB
|
||||
status_flags = NONE
|
||||
unsuitable_cold_damage = 4
|
||||
unsuitable_heat_damage = 4
|
||||
obj_damage = 30
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 25
|
||||
combat_mode = TRUE
|
||||
faction = list("spider")
|
||||
pass_flags = PASSTABLE
|
||||
attack_verb_continuous = "bites"
|
||||
attack_verb_simple = "bite"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
attack_vis_effect = ATTACK_EFFECT_BITE
|
||||
unique_name = 1
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
// VERY red, to fit the eyes
|
||||
lighting_cutoff_red = 22
|
||||
lighting_cutoff_green = 5
|
||||
lighting_cutoff_blue = 5
|
||||
ai_controller = /datum/ai_controller/basic_controller/giant_spider
|
||||
/// Speed modifier to apply if controlled by a human player
|
||||
var/player_speed_modifier = -4
|
||||
/// What reagent the mob injects targets with
|
||||
var/poison_type = /datum/reagent/toxin/hunterspider
|
||||
/// How much of a reagent the mob injects on attack
|
||||
var/poison_per_bite = 0
|
||||
/// Multiplier to apply to web laying speed. Fractional numbers make it faster, because it's a multiplier.
|
||||
var/web_speed = 1
|
||||
/// Type of webbing ability to learn.
|
||||
var/web_type = /datum/action/cooldown/lay_web
|
||||
/// 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 with high health and damage."
|
||||
/// If true then you shouldn't be told that you're a spider antagonist as soon as you are placed into this mob
|
||||
var/apply_spider_antag = TRUE
|
||||
|
||||
/mob/living/basic/giant_spider/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW)
|
||||
AddElement(/datum/element/nerfed_pulling, GLOB.typecache_general_bad_things_to_easily_move)
|
||||
AddElement(/datum/element/prevent_attacking_of_types, GLOB.typecache_general_bad_hostile_attack_targets, "this tastes awful!")
|
||||
|
||||
if(poison_per_bite)
|
||||
AddElement(/datum/element/venomous, poison_type, poison_per_bite)
|
||||
|
||||
var/datum/action/cooldown/lay_web/webbing = new web_type(src)
|
||||
webbing.webbing_time *= web_speed
|
||||
webbing.Grant(src)
|
||||
|
||||
/mob/living/basic/giant_spider/Login()
|
||||
. = ..()
|
||||
if(!. || !client)
|
||||
return FALSE
|
||||
GLOB.spidermobs[src] = TRUE
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/player_spider_modifier, multiplicative_slowdown = player_speed_modifier)
|
||||
if (apply_spider_antag)
|
||||
var/datum/antagonist/spider/spider_antag = new(directive)
|
||||
mind.add_antag_datum(spider_antag)
|
||||
|
||||
/mob/living/basic/giant_spider/Logout()
|
||||
. = ..()
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/player_spider_modifier)
|
||||
|
||||
/mob/living/basic/giant_spider/Destroy()
|
||||
GLOB.spidermobs -= src
|
||||
return ..()
|
||||
|
||||
/mob/living/basic/giant_spider/mob_negates_gravity()
|
||||
if(locate(/obj/structure/spider/stickyweb) in loc)
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/mob/living/basic/giant_spider/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE)
|
||||
. = ..()
|
||||
for(var/datum/reagent/toxin/pestkiller/current_reagent in reagents)
|
||||
apply_damage(50 * volume_modifier, STAMINA, BODY_ZONE_CHEST)
|
||||
@@ -0,0 +1,46 @@
|
||||
#define SPIDER_ATTACK_COOLDOWN (2 SECONDS)
|
||||
|
||||
/// For now, essentially just a Simple Hostile but room for expansion
|
||||
/datum/ai_controller/basic_controller/giant_spider
|
||||
blackboard = list(
|
||||
BB_TARGETTING_DATUM = new /datum/targetting_datum/basic(),
|
||||
)
|
||||
|
||||
ai_traits = STOP_MOVING_WHEN_PULLED
|
||||
ai_movement = /datum/ai_movement/basic_avoidance
|
||||
idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking
|
||||
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/simple_find_target,
|
||||
/datum/ai_planning_subtree/attack_obstacle_in_path/giant_spider,
|
||||
/datum/ai_planning_subtree/basic_melee_attack_subtree/giant_spider,
|
||||
/datum/ai_planning_subtree/random_speech/insect, // Space spiders are taxonomically insects not arachnids, don't DM me
|
||||
)
|
||||
|
||||
|
||||
/// Used by Araneus, who only attacks those who attack first
|
||||
/datum/ai_controller/basic_controller/giant_spider/retaliate
|
||||
blackboard = list(
|
||||
BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/ignore_faction(),
|
||||
)
|
||||
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/target_retaliate,
|
||||
/datum/ai_planning_subtree/attack_obstacle_in_path/giant_spider,
|
||||
/datum/ai_planning_subtree/basic_melee_attack_subtree/giant_spider,
|
||||
/datum/ai_planning_subtree/random_speech/insect,
|
||||
)
|
||||
|
||||
/datum/ai_planning_subtree/attack_obstacle_in_path/giant_spider
|
||||
attack_behaviour = /datum/ai_behavior/attack_obstructions/giant_spider
|
||||
|
||||
/datum/ai_behavior/attack_obstructions/giant_spider
|
||||
action_cooldown = SPIDER_ATTACK_COOLDOWN
|
||||
|
||||
/datum/ai_planning_subtree/basic_melee_attack_subtree/giant_spider
|
||||
melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/giant_spider
|
||||
|
||||
/datum/ai_behavior/basic_melee_attack/giant_spider
|
||||
action_cooldown = SPIDER_ATTACK_COOLDOWN
|
||||
|
||||
#undef SPIDER_ATTACK_COOLDOWN
|
||||
@@ -62,7 +62,7 @@
|
||||
if(!message)
|
||||
return
|
||||
var/my_message = span_spider("<b>Command from [user]:</b> [message]")
|
||||
for(var/mob/living/simple_animal/hostile/giant_spider/spider as anything in GLOB.spidermobs)
|
||||
for(var/mob/living/basic/giant_spider/spider as anything in GLOB.spidermobs)
|
||||
to_chat(spider, my_message)
|
||||
for(var/ghost in GLOB.dead_mob_list)
|
||||
var/link = FOLLOW_LINK(ghost, user)
|
||||
|
||||
@@ -0,0 +1,329 @@
|
||||
/**
|
||||
* # Spider Hunter
|
||||
* 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/basic/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"
|
||||
icon_living = "hunter"
|
||||
icon_dead = "hunter_dead"
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 20
|
||||
poison_per_bite = 5
|
||||
speed = 3
|
||||
player_speed_modifier = -3.1
|
||||
menu_description = "Fast spider variant specializing in catching running prey and toxin injection, but has less health and damage."
|
||||
|
||||
/**
|
||||
* # Spider Nurse
|
||||
*
|
||||
* 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/basic/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"
|
||||
icon_living = "nurse"
|
||||
icon_dead = "nurse_dead"
|
||||
gender = FEMALE
|
||||
butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8, /obj/item/food/spidereggs = 4)
|
||||
maxHealth = 40
|
||||
health = 40
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 10
|
||||
web_speed = 0.25
|
||||
web_type = /datum/action/cooldown/lay_web/sealer
|
||||
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."
|
||||
///The health HUD applied to the mob.
|
||||
var/health_hud = DATA_HUD_MEDICAL_ADVANCED
|
||||
|
||||
/mob/living/basic/giant_spider/nurse/Initialize(mapload)
|
||||
. = ..()
|
||||
var/datum/atom_hud/datahud = GLOB.huds[health_hud]
|
||||
datahud.show_to(src)
|
||||
|
||||
AddComponent(/datum/component/healing_touch,\
|
||||
interaction_key = DOAFTER_SOURCE_SPIDER,\
|
||||
valid_targets_typecache = typecacheof(list(/mob/living/basic/giant_spider)),\
|
||||
action_text = "%SOURCE% begins wrapping the wounds of %TARGET%.",\
|
||||
complete_text = "%SOURCE% wraps the wounds of %TARGET%.",\
|
||||
)
|
||||
|
||||
/**
|
||||
* # Tarantula
|
||||
*
|
||||
* A subtype of the giant spider which specializes in pure strength and staying power.
|
||||
* Is slowed down when not on webbing, but can lunge to throw off attackers and possibly to stun them.
|
||||
*/
|
||||
/mob/living/basic/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"
|
||||
icon_living = "tarantula"
|
||||
icon_dead = "tarantula_dead"
|
||||
maxHealth = 300 // woah nelly
|
||||
health = 300
|
||||
melee_damage_lower = 35
|
||||
melee_damage_upper = 40
|
||||
obj_damage = 100
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
speed = 6
|
||||
player_speed_modifier = -5.5 // Doesn't seem that slow but it gets a debuff off web
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
menu_description = "Tank spider variant with an enormous amount of health and damage, but is very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup."
|
||||
/// Charging ability
|
||||
var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge
|
||||
|
||||
/mob/living/basic/giant_spider/tarantula/Initialize(mapload)
|
||||
. = ..()
|
||||
charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge()
|
||||
charge.Grant(src)
|
||||
|
||||
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/tarantula_web)
|
||||
|
||||
/mob/living/basic/giant_spider/tarantula/Destroy()
|
||||
QDEL_NULL(charge)
|
||||
return ..()
|
||||
|
||||
/// Lunge if you click something at range
|
||||
/mob/living/basic/giant_spider/tarantula/ranged_secondary_attack(atom/atom_target, modifiers)
|
||||
charge.Trigger(target = atom_target)
|
||||
|
||||
/**
|
||||
* # Spider Viper
|
||||
*
|
||||
* A subtype of the giant spider which specializes in speed and poison.
|
||||
* Injects a deadlier toxin than other spiders, moves extremely fast, but has a limited amount of health.
|
||||
*/
|
||||
/mob/living/basic/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"
|
||||
icon_living = "viper"
|
||||
icon_dead = "viper_dead"
|
||||
maxHealth = 40
|
||||
health = 40
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
poison_per_bite = 5
|
||||
poison_type = /datum/reagent/toxin/viperspider
|
||||
speed = 2
|
||||
player_speed_modifier = -2.5
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
menu_description = "Assassin spider variant with an unmatched speed and very deadly poison, but has very low amount of health and damage."
|
||||
|
||||
/**
|
||||
* # Spider Broodmother
|
||||
*
|
||||
* A subtype of the giant spider which is the crux of a spider horde, and the way which it grows.
|
||||
* Has very little offensive capabilities but can lay eggs at any time to create more basic spiders.
|
||||
* After consuming human bodies can lay specialised eggs including more broodmothers.
|
||||
* They are also capable of sending messages to all living spiders and setting directives for their children.
|
||||
*/
|
||||
/mob/living/basic/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
|
||||
icon_state = "midwife"
|
||||
icon_living = "midwife"
|
||||
icon_dead = "midwife_dead"
|
||||
maxHealth = 60
|
||||
health = 60
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 15
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
web_speed = 0.5
|
||||
web_type = /datum/action/cooldown/lay_web/sealer
|
||||
menu_description = "Royal spider variant specializing in reproduction and leadership, but has very low amount of health and deals low damage."
|
||||
|
||||
/mob/living/basic/giant_spider/midwife/Initialize(mapload)
|
||||
. = ..()
|
||||
var/datum/action/cooldown/wrap/wrapping = new(src)
|
||||
wrapping.Grant(src)
|
||||
|
||||
var/datum/action/lay_eggs/make_eggs = new(src)
|
||||
make_eggs.Grant(src)
|
||||
|
||||
var/datum/action/lay_eggs/enriched/make_better_eggs = new(src)
|
||||
make_better_eggs.Grant(src)
|
||||
|
||||
var/datum/action/set_spider_directive/give_orders = new(src)
|
||||
give_orders.Grant(src)
|
||||
|
||||
var/datum/action/command_spiders/not_hivemind_talk = new(src)
|
||||
not_hivemind_talk.Grant(src)
|
||||
|
||||
/**
|
||||
* # Giant Ice Spider
|
||||
*
|
||||
* 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/basic/giant_spider/ice
|
||||
name = "giant ice spider"
|
||||
habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minimum_survivable_temperature = 0
|
||||
maximum_survivable_temperature = 1500
|
||||
color = rgb(114,228,250)
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
menu_description = "Versatile ice spider variant for frontline combat with high health and damage. Immune to temperature damage."
|
||||
|
||||
/**
|
||||
* # Ice Nurse Spider
|
||||
*
|
||||
* A temperature-proof nurse spider. Also unused.
|
||||
*/
|
||||
/mob/living/basic/giant_spider/nurse/ice
|
||||
name = "giant ice spider"
|
||||
habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minimum_survivable_temperature = 0
|
||||
maximum_survivable_temperature = 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 very swiftly, but has very low amount of health and deals low damage. Immune to temperature damage."
|
||||
|
||||
/**
|
||||
* # Ice Hunter Spider
|
||||
*
|
||||
* A temperature-proof hunter with chilling venom. Also unused.
|
||||
*/
|
||||
/mob/living/basic/giant_spider/hunter/ice
|
||||
name = "giant ice spider"
|
||||
habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minimum_survivable_temperature = 0
|
||||
maximum_survivable_temperature = 1500
|
||||
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 and frost oil injection, but has less health and damage. Immune to temperature damage."
|
||||
|
||||
/**
|
||||
* # Scrawny Hunter Spider
|
||||
*
|
||||
* A hunter spider that trades damage for health, unable to smash enviroments.
|
||||
* Used as a minor threat in abandoned places, such as areas in maintenance or a ruin.
|
||||
*/
|
||||
/mob/living/basic/giant_spider/hunter/scrawny
|
||||
name = "scrawny spider"
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
health = 60
|
||||
maxHealth = 60
|
||||
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 and toxin injection, but has less damage than a normal hunter spider at the cost of a little more health."
|
||||
|
||||
/**
|
||||
* # Scrawny Tarantula
|
||||
*
|
||||
* A weaker version of the Tarantula, unable to smash enviroments.
|
||||
* Used as a moderately strong but slow threat in abandoned places, such as areas in maintenance or a ruin.
|
||||
*/
|
||||
/mob/living/basic/giant_spider/tarantula/scrawny
|
||||
name = "scrawny tarantula"
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
health = 150
|
||||
maxHealth = 150
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 25
|
||||
desc = "Furry and black, it makes you shudder to look at it. This one has abyssal red eyes, and looks abnormally thin and frail."
|
||||
menu_description = "A weaker variant of the tarantula with reduced amount of health and damage, very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup."
|
||||
|
||||
/**
|
||||
* # Scrawny Nurse Spider
|
||||
*
|
||||
* A weaker version of the nurse spider with reduced health, unable to smash enviroments.
|
||||
* Mainly used as a weak threat in abandoned places, such as areas in maintenance or a ruin.
|
||||
* In the future we should give this AI so that it actually heals its teammates.
|
||||
*/
|
||||
/mob/living/basic/giant_spider/nurse/scrawny
|
||||
name = "scrawny nurse spider"
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
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 very swiftly, but has very low amount of health and deals low damage."
|
||||
|
||||
/**
|
||||
* # Flesh Spider
|
||||
*
|
||||
* A subtype of giant spider which only occurs from changelings.
|
||||
* Has the base stats of a hunter, but they can heal themselves and spin webs faster.
|
||||
* They also occasionally leave puddles of blood when they walk around. Flavorful!
|
||||
*/
|
||||
/mob/living/basic/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"
|
||||
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 and damage."
|
||||
|
||||
/mob/living/basic/giant_spider/hunter/flesh/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/blood_walk, \
|
||||
blood_type = /obj/effect/decal/cleanable/blood/bubblegum, \
|
||||
blood_spawn_chance = 5)
|
||||
// It might be easier and more fitting to just replace this with Regenerator
|
||||
AddComponent(/datum/component/healing_touch,\
|
||||
heal_brute = maxHealth * 0.5,\
|
||||
heal_burn = maxHealth * 0.5,\
|
||||
self_targetting = HEALING_TOUCH_SELF_ONLY,\
|
||||
interaction_key = DOAFTER_SOURCE_SPIDER,\
|
||||
valid_targets_typecache = typecacheof(list(/mob/living/basic/giant_spider/hunter/flesh)),\
|
||||
extra_checks = CALLBACK(src, PROC_REF(can_mend)),\
|
||||
action_text = "%SOURCE% begins mending themselves...",\
|
||||
complete_text = "%SOURCE%'s wounds mend together.",\
|
||||
)
|
||||
|
||||
/// Prevent you from healing other flesh spiders, or healing when on fire
|
||||
/mob/living/basic/giant_spider/hunter/flesh/proc/can_mend(mob/living/source, mob/living/target)
|
||||
if (on_fire)
|
||||
balloon_alert(src, "on fire!")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* # Viper Spider (Wizard)
|
||||
*
|
||||
* A spider form for wizards. Has the viper spider's extreme speed and strong venom, with additional health and vent crawling abilities.
|
||||
*/
|
||||
/mob/living/basic/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."
|
||||
apply_spider_antag = FALSE
|
||||
|
||||
/mob/living/basic/giant_spider/viper/wizard/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
|
||||
|
||||
/**
|
||||
* # Sergeant Araneus
|
||||
*
|
||||
* This friendly arachnid hangs out in the HoS office on some space stations. Better trained than an average officer and does not attack except in self-defence.
|
||||
*/
|
||||
/mob/living/basic/giant_spider/sgt_araneus
|
||||
name = "Sergeant Araneus"
|
||||
real_name = "Sergeant Araneus"
|
||||
desc = "A fierce companion of the Head of Security, this spider has been carefully trained by Nanotrasen specialists. Its beady, staring eyes send shivers down your spine."
|
||||
faction = list("spiders")
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 20
|
||||
ai_controller = /datum/ai_controller/basic_controller/giant_spider/retaliate
|
||||
apply_spider_antag = FALSE
|
||||
|
||||
/mob/living/basic/giant_spider/sgt_araneus/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/pet_bonus, "chitters proudly!")
|
||||
AddElement(/datum/element/ai_retaliate)
|
||||
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
|
||||
@@ -20,6 +20,10 @@
|
||||
unsuitable_atmos_damage = 0
|
||||
unsuitable_cold_damage = 0
|
||||
unsuitable_heat_damage = 0
|
||||
// Pink, like their skin
|
||||
lighting_cutoff_red = 30
|
||||
lighting_cutoff_green = 15
|
||||
lighting_cutoff_blue = 40
|
||||
|
||||
ai_controller = /datum/ai_controller/basic_controller/blankbody
|
||||
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
unsuitable_atmos_damage = 0
|
||||
unsuitable_cold_damage = 0
|
||||
unsuitable_heat_damage = 0
|
||||
// Green and blue, bit dim cause yaknow morphlike
|
||||
lighting_cutoff_red = 5
|
||||
lighting_cutoff_green = 25
|
||||
lighting_cutoff_blue = 15
|
||||
|
||||
ai_controller = /datum/ai_controller/basic_controller/creature
|
||||
|
||||
|
||||
@@ -38,6 +38,11 @@
|
||||
animate_movement = NO_STEPS // Do not animate movement, you jump around as you're a scary statue.
|
||||
hud_possible = list(ANTAG_HUD)
|
||||
|
||||
// Dim purple, I want it to be possible to miss people in the dark but not easy to
|
||||
lighting_cutoff_red = 15
|
||||
lighting_cutoff_green = 10
|
||||
lighting_cutoff_blue = 25
|
||||
|
||||
sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS
|
||||
|
||||
move_force = MOVE_FORCE_EXTREMELY_STRONG
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
ai_movement = /datum/ai_movement/basic_avoidance
|
||||
idle_behavior = /datum/idle_behavior/idle_random_walk
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/random_speech/cockroach,
|
||||
/datum/ai_planning_subtree/random_speech/insect,
|
||||
/datum/ai_planning_subtree/find_and_hunt_target/roach,
|
||||
)
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
/datum/ai_controller/basic_controller/cockroach/glockroach
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/pet_planning,
|
||||
/datum/ai_planning_subtree/random_speech/cockroach,
|
||||
/datum/ai_planning_subtree/random_speech/insect,
|
||||
/datum/ai_planning_subtree/simple_find_target,
|
||||
/datum/ai_planning_subtree/basic_ranged_attack_subtree/glockroach, //If we are attacking someone, this will prevent us from hunting
|
||||
/datum/ai_planning_subtree/find_and_hunt_target/roach,
|
||||
@@ -139,7 +139,7 @@
|
||||
/datum/ai_controller/basic_controller/cockroach/hauberoach
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/pet_planning,
|
||||
/datum/ai_planning_subtree/random_speech/cockroach,
|
||||
/datum/ai_planning_subtree/random_speech/insect,
|
||||
/datum/ai_planning_subtree/simple_find_target,
|
||||
/datum/ai_planning_subtree/basic_melee_attack_subtree/hauberoach, //If we are attacking someone, this will prevent us from hunting
|
||||
/datum/ai_planning_subtree/find_and_hunt_target/roach,
|
||||
@@ -154,7 +154,7 @@
|
||||
/datum/ai_controller/basic_controller/cockroach/sewer
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/pet_planning,
|
||||
/datum/ai_planning_subtree/random_speech/cockroach,
|
||||
/datum/ai_planning_subtree/random_speech/insect,
|
||||
/datum/ai_planning_subtree/simple_find_target,
|
||||
/datum/ai_planning_subtree/basic_melee_attack_subtree/sewer,
|
||||
/datum/ai_planning_subtree/find_and_hunt_target/roach,
|
||||
@@ -175,7 +175,7 @@
|
||||
/datum/ai_controller/basic_controller/cockroach/mobroach
|
||||
planning_subtrees = list(
|
||||
/datum/ai_planning_subtree/pet_planning,
|
||||
/datum/ai_planning_subtree/random_speech/cockroach,
|
||||
/datum/ai_planning_subtree/random_speech/insect,
|
||||
/datum/ai_planning_subtree/simple_find_target,
|
||||
/datum/ai_planning_subtree/basic_ranged_attack_subtree/mobroach, //If we are attacking someone, this will prevent us from hunting
|
||||
/datum/ai_planning_subtree/find_and_hunt_target/roach,
|
||||
|
||||
@@ -1439,8 +1439,8 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/bat,
|
||||
/mob/living/simple_animal/hostile/retaliate/goat,
|
||||
/mob/living/simple_animal/hostile/killertomato,
|
||||
/mob/living/simple_animal/hostile/giant_spider,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter,
|
||||
/mob/living/basic/giant_spider,
|
||||
/mob/living/basic/giant_spider/hunter,
|
||||
/mob/living/simple_animal/hostile/blob/blobbernaut/independent,
|
||||
/mob/living/basic/carp/magic,
|
||||
/mob/living/basic/carp/magic/chaos,
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
///Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims
|
||||
var/cloneloss = 0
|
||||
|
||||
/// Rate at which fire stacks should decay from this mob
|
||||
var/fire_stack_decay_rate = -0.05
|
||||
|
||||
/// when the mob goes from "normal" to crit
|
||||
var/crit_threshold = HEALTH_THRESHOLD_CRIT
|
||||
///When the mob enters hard critical state and is fully incapacitated.
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
speech_span = SPAN_ROBOT
|
||||
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
|
||||
examine_cursor_icon = null
|
||||
fire_stack_decay_rate = -0.55
|
||||
var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS
|
||||
var/last_lawchange_announce = 0
|
||||
var/list/alarms_to_show = list()
|
||||
|
||||
@@ -1,423 +0,0 @@
|
||||
/**
|
||||
* # Giant Spider
|
||||
*
|
||||
* A versatile mob which can occur from a variety of sources.
|
||||
*
|
||||
* 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/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"
|
||||
icon_living = "guard"
|
||||
icon_dead = "guard_dead"
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BUG
|
||||
speak_emote = list("chitters")
|
||||
emote_hear = list("chitters")
|
||||
speak_chance = 5
|
||||
speed = 0
|
||||
turns_per_move = 5
|
||||
butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8)
|
||||
response_help_continuous = "pets"
|
||||
response_help_simple = "pet"
|
||||
response_disarm_continuous = "gently pushes aside"
|
||||
response_disarm_simple = "gently push aside"
|
||||
initial_language_holder = /datum/language_holder/spider
|
||||
maxHealth = 80
|
||||
health = 80
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
|
||||
flammable = TRUE
|
||||
status_flags = NONE
|
||||
unsuitable_cold_damage = 4
|
||||
unsuitable_heat_damage = 4
|
||||
obj_damage = 30
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 25
|
||||
combat_mode = TRUE
|
||||
faction = list("spiders")
|
||||
pass_flags = PASSTABLE
|
||||
move_to_delay = 6
|
||||
attack_verb_continuous = "bites"
|
||||
attack_verb_simple = "bite"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
attack_vis_effect = ATTACK_EFFECT_BITE
|
||||
unique_name = 1
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
// VERY red, to fit the eyes
|
||||
lighting_cutoff_red = 22
|
||||
lighting_cutoff_green = 5
|
||||
lighting_cutoff_blue = 5
|
||||
footstep_type = FOOTSTEP_MOB_CLAW
|
||||
///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/hunterspider
|
||||
///How quickly the spider can place down webbing. One is base speed, larger numbers are slower.
|
||||
var/web_speed = 1
|
||||
///What action is used to lay webs, some spiders have a version which can turn webs into walls.
|
||||
var/web_type = /datum/action/cooldown/lay_web
|
||||
///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 with high health and damage."
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/Initialize(mapload)
|
||||
. = ..()
|
||||
var/datum/action/cooldown/lay_web/webbing = new web_type(src)
|
||||
webbing.webbing_time *= web_speed
|
||||
webbing.Grant(src)
|
||||
|
||||
if(poison_per_bite)
|
||||
AddElement(/datum/element/venomous, poison_type, poison_per_bite)
|
||||
AddElement(/datum/element/nerfed_pulling, GLOB.typecache_general_bad_things_to_easily_move)
|
||||
AddElement(/datum/element/prevent_attacking_of_types, GLOB.typecache_general_bad_hostile_attack_targets, "this tastes awful!")
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/Login()
|
||||
. = ..()
|
||||
if(!. || !client)
|
||||
return FALSE
|
||||
var/datum/antagonist/spider/spider_antag = new(directive)
|
||||
mind.add_antag_datum(spider_antag)
|
||||
GLOB.spidermobs[src] = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/Destroy()
|
||||
GLOB.spidermobs -= src
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/mob_negates_gravity()
|
||||
if(locate(/obj/structure/spider/stickyweb) in loc)
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/expose_reagents(list/reagents, datum/reagents/source, methods=TOUCH, volume_modifier=1, show_message=TRUE)
|
||||
. = ..()
|
||||
for(var/datum/reagent/toxin/pestkiller/current_reagent in reagents)
|
||||
apply_damage(50 * volume_modifier, STAMINA, BODY_ZONE_CHEST)
|
||||
|
||||
/**
|
||||
* # Spider Hunter
|
||||
*
|
||||
* 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 and damage. This spider is only slightly slower than a human.
|
||||
*/
|
||||
/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"
|
||||
icon_living = "hunter"
|
||||
icon_dead = "hunter_dead"
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 20
|
||||
poison_per_bite = 5
|
||||
move_to_delay = 5
|
||||
speed = -0.1
|
||||
menu_description = "Fast spider variant specializing in catching running prey and toxin injection, but has less health and damage."
|
||||
|
||||
/**
|
||||
* # Spider Nurse
|
||||
*
|
||||
* A subtype of the giant spider with green eyes that specializes in support.
|
||||
*
|
||||
* 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/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"
|
||||
icon_living = "nurse"
|
||||
icon_dead = "nurse_dead"
|
||||
gender = FEMALE
|
||||
butcher_results = list(/obj/item/food/meat/slab/spider = 2, /obj/item/food/spiderleg = 8, /obj/item/food/spidereggs = 4)
|
||||
maxHealth = 40
|
||||
health = 40
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 10
|
||||
web_speed = 0.25
|
||||
web_type = /datum/action/cooldown/lay_web/sealer
|
||||
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."
|
||||
///The health HUD applied to the mob.
|
||||
var/health_hud = DATA_HUD_MEDICAL_ADVANCED
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/Initialize(mapload)
|
||||
. = ..()
|
||||
var/datum/atom_hud/datahud = GLOB.huds[health_hud]
|
||||
datahud.show_to(src)
|
||||
AddComponent(\
|
||||
/datum/component/healing_touch,\
|
||||
interaction_key = DOAFTER_SOURCE_SPIDER,\
|
||||
valid_targets_typecache = typecacheof(list(/mob/living/simple_animal/hostile/giant_spider)),\
|
||||
action_text = "%SOURCE% begins wrapping the wounds of %TARGET%.",\
|
||||
complete_text = "%SOURCE% wraps the wounds of %TARGET%.",\
|
||||
)
|
||||
|
||||
/**
|
||||
* # Tarantula
|
||||
*
|
||||
* The tank of spider subtypes. Is incredibly slow when not on webbing, but has a lunge and the highest health and damage of any spider type.
|
||||
*
|
||||
* 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/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"
|
||||
icon_living = "tarantula"
|
||||
icon_dead = "tarantula_dead"
|
||||
maxHealth = 300 // woah nelly
|
||||
health = 300
|
||||
melee_damage_lower = 35
|
||||
melee_damage_upper = 40
|
||||
obj_damage = 100
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
move_to_delay = 8
|
||||
speed = 1
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
menu_description = "Tank spider variant with an enormous amount of health and damage, but is very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup."
|
||||
/// Charging ability
|
||||
var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/tarantula/Initialize(mapload)
|
||||
. = ..()
|
||||
charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge()
|
||||
charge.Grant(src)
|
||||
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/tarantula_web)
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/tarantula/Destroy()
|
||||
QDEL_NULL(charge)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/tarantula/OpenFire()
|
||||
if(client)
|
||||
return
|
||||
charge.Trigger(target = target)
|
||||
|
||||
/**
|
||||
* # Spider Viper
|
||||
*
|
||||
* The assassin of spider subtypes. Essentially a juiced up version of the hunter.
|
||||
*
|
||||
* 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/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"
|
||||
icon_living = "viper"
|
||||
icon_dead = "viper_dead"
|
||||
maxHealth = 40
|
||||
health = 40
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
poison_per_bite = 5
|
||||
move_to_delay = 4
|
||||
poison_type = /datum/reagent/toxin/viperspider
|
||||
speed = -0.5
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
menu_description = "Assassin spider variant with an unmatched speed and very deadly poison, but has very low amount of health and damage."
|
||||
|
||||
/**
|
||||
* # Spider Broodmother
|
||||
*
|
||||
* The reproductive line of spider subtypes. Is the only subtype to lay eggs, which is the only way for spiders to reproduce.
|
||||
*
|
||||
* A subtype of the giant spider which is the crux of a spider horde. Can lay normal eggs at any time which become normal spider types,
|
||||
* but by consuming human bodies can lay special eggs which can become one of the more specialized subtypes, including possibly another broodmother.
|
||||
* 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/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
|
||||
icon_state = "midwife"
|
||||
icon_living = "midwife"
|
||||
icon_dead = "midwife_dead"
|
||||
maxHealth = 60
|
||||
health = 60
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 15
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
web_speed = 0.5
|
||||
web_type = /datum/action/cooldown/lay_web/sealer
|
||||
menu_description = "Royal spider variant specializing in reproduction and leadership, but has very low amount of health and deals low damage."
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/midwife/Initialize(mapload)
|
||||
. = ..()
|
||||
var/datum/action/cooldown/wrap/wrapping = new(src)
|
||||
wrapping.Grant(src)
|
||||
|
||||
var/datum/action/lay_eggs/make_eggs = new(src)
|
||||
make_eggs.Grant(src)
|
||||
|
||||
var/datum/action/lay_eggs/enriched/make_better_eggs = new(src)
|
||||
make_better_eggs.Grant(src)
|
||||
|
||||
var/datum/action/set_spider_directive/give_orders = new(src)
|
||||
give_orders.Grant(src)
|
||||
|
||||
var/datum/action/command_spiders/not_hivemind_talk = new(src)
|
||||
not_hivemind_talk.Grant(src)
|
||||
|
||||
/**
|
||||
* # Giant Ice Spider
|
||||
*
|
||||
* A giant spider immune to temperature damage. Injects frost oil.
|
||||
*
|
||||
* 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/giant_spider/ice
|
||||
name = "giant ice spider"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 1500
|
||||
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 with high health and damage. Immune to temperature damage."
|
||||
|
||||
/**
|
||||
* # Ice Nurse Spider
|
||||
*
|
||||
* A nurse spider immune to temperature damage. Injects frost oil.
|
||||
*
|
||||
* Same thing as the giant ice spider but mirrors the nurse subtype. Also unused.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/ice
|
||||
name = "giant ice spider"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 1500
|
||||
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 very swiftly, but has very low amount of health and deals low damage. Immune to temperature damage."
|
||||
|
||||
/**
|
||||
* # Ice Hunter Spider
|
||||
*
|
||||
* A hunter spider immune to temperature damage. Injects frost oil.
|
||||
*
|
||||
* Same thing as the giant ice spider but mirrors the hunter subtype. Also unused.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/ice
|
||||
name = "giant ice spider"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 1500
|
||||
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 and frost oil injection, but has less health and damage. Immune to temperature damage."
|
||||
|
||||
/**
|
||||
* # Scrawny Hunter Spider
|
||||
*
|
||||
* A hunter spider that trades damage for health, unable to smash enviroments.
|
||||
*
|
||||
* Mainly used as a minor threat in abandoned places, such as areas in maintenance or a ruin.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny
|
||||
name = "scrawny spider"
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
health = 60
|
||||
maxHealth = 60
|
||||
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 and toxin injection, but has less damage than a normal hunter spider at the cost of a little more health."
|
||||
|
||||
/**
|
||||
* # Scrawny Tarantula
|
||||
*
|
||||
* A weaker version of the Tarantula, unable to smash enviroments.
|
||||
*
|
||||
* 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/giant_spider/tarantula/scrawny
|
||||
name = "scrawny tarantula"
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
health = 150
|
||||
maxHealth = 150
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 25
|
||||
desc = "Furry and black, it makes you shudder to look at it. This one has abyssal red eyes, and looks abnormally thin and frail."
|
||||
menu_description = "A weaker variant of the tarantula with reduced amount of health and damage, very slow when not on webbing. It also has a charge ability to close distance with a target after a small windup."
|
||||
|
||||
/**
|
||||
* # Scrawny Nurse Spider
|
||||
*
|
||||
* A weaker version of the nurse spider with reduced health, unable to smash enviroments.
|
||||
*
|
||||
* Mainly used as a weak threat in abandoned places, such as areas in maintenance or a ruin.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/scrawny
|
||||
name = "scrawny nurse spider"
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
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 very swiftly, but has very low amount of health and deals low damage."
|
||||
|
||||
/**
|
||||
* # Flesh Spider
|
||||
*
|
||||
* A giant spider subtype specifically created by changelings. Built to be self-sufficient, unlike other spider types.
|
||||
*
|
||||
* 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/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"
|
||||
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 and damage."
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/flesh/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/blood_walk, \
|
||||
blood_type = /obj/effect/decal/cleanable/blood/bubblegum, \
|
||||
blood_spawn_chance = 5)
|
||||
AddComponent(\
|
||||
/datum/component/healing_touch,\
|
||||
heal_brute = maxHealth * 0.5,\
|
||||
heal_burn = maxHealth * 0.5,\
|
||||
self_targetting = HEALING_TOUCH_SELF_ONLY,\
|
||||
interaction_key = DOAFTER_SOURCE_SPIDER,\
|
||||
valid_targets_typecache = typecacheof(list(/mob/living/simple_animal/hostile/giant_spider/hunter/flesh)),\
|
||||
extra_checks = CALLBACK(src, PROC_REF(can_mend)),\
|
||||
action_text = "%SOURCE% begins mending themselves...",\
|
||||
complete_text = "%SOURCE%'s wounds mend together.",\
|
||||
)
|
||||
|
||||
/// Prevent you from healing other flesh spiders, or healing when on fire
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/flesh/proc/can_mend(mob/living/source, mob/living/target)
|
||||
if (on_fire)
|
||||
balloon_alert(src, "on fire!")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* # Viper Spider (Wizard)
|
||||
*
|
||||
* A viper spider buffed slightly so I don't need to hear anyone complain about me nerfing an already useless wizard ability.
|
||||
*
|
||||
* 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/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."
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/viper/wizard/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
|
||||
@@ -37,27 +37,3 @@
|
||||
AddElement(/datum/element/simple_flying)
|
||||
ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT)
|
||||
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus //Despite being a bat for... reasons, this is now a spider, and is one of the HoS' pets.
|
||||
name = "Sergeant Araneus"
|
||||
real_name = "Sergeant Araneus"
|
||||
desc = "A fierce companion of the Head of Security, this spider has been carefully trained by Nanotrasen specialists. Its beady, staring eyes send shivers down your spine."
|
||||
emote_hear = list("chitters")
|
||||
faction = list("spiders")
|
||||
harm_intent_damage = 3
|
||||
icon_dead = "guard_dead"
|
||||
icon_gib = "guard_dead"
|
||||
icon_living = "guard"
|
||||
icon_state = "guard"
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 20
|
||||
movement_type = GROUND
|
||||
response_help_continuous = "pets"
|
||||
response_help_simple = "pet"
|
||||
turns_per_move = 10
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/pet_bonus, "chitters proudly!")
|
||||
|
||||
@@ -79,10 +79,6 @@
|
||||
///This damage is taken when atmos doesn't fit all the requirements above.
|
||||
var/unsuitable_atmos_damage = 1
|
||||
|
||||
///Whether or not this mob is flammable
|
||||
var/flammable = FALSE
|
||||
///How quickly should fire stacks on this mob diminish?
|
||||
var/fire_stack_removal_speed = -5
|
||||
///How fast the mob's temperature normalizes. The greater the value, the slower their temperature normalizes. Should always be greater than 0.
|
||||
var/temperature_normalization_speed = 5
|
||||
|
||||
@@ -496,31 +492,6 @@
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/ignite_mob(silent)
|
||||
if(!flammable)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/on_fire_stack(delta_time, times_fired, datum/status_effect/fire_handler/fire_stacks/fire_handler)
|
||||
adjust_bodytemperature((maxbodytemp + (fire_handler.stacks * 12)) * 0.5 * delta_time)
|
||||
|
||||
/mob/living/simple_animal/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "")
|
||||
var/mutable_appearance/fire_overlay = mutable_appearance('icons/mob/effects/onfire.dmi', "generic_fire")
|
||||
if(on_fire && isnull(last_icon_state))
|
||||
add_overlay(fire_overlay)
|
||||
return fire_overlay
|
||||
else if(!on_fire && !isnull(last_icon_state))
|
||||
cut_overlay(fire_overlay)
|
||||
return null
|
||||
else if(on_fire && !isnull(last_icon_state))
|
||||
return last_icon_state
|
||||
return null
|
||||
|
||||
/mob/living/simple_animal/extinguish_mob()
|
||||
if(!flammable)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/revive(full_heal_flags = NONE, excess_healing = 0, force_grab_ghost = FALSE)
|
||||
. = ..()
|
||||
if(!.)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/structure/spider/eggcluster
|
||||
name = "egg cluster"
|
||||
desc = "They seem to pulse slightly with an inner life."
|
||||
desc = "There's something alive in there, and sooner or later it's going to find its way out."
|
||||
icon_state = "eggs"
|
||||
/// Mob spawner handling the actual spawn of the spider
|
||||
var/obj/effect/mob_spawn/ghost_role/spider/spawner
|
||||
@@ -20,6 +20,22 @@
|
||||
spawner.attack_ghost(user)
|
||||
return ..()
|
||||
|
||||
/obj/structure/spider/eggcluster/examine_more(mob/user)
|
||||
. = ..()
|
||||
|
||||
if(istype(user, /mob/living/basic/giant_spider/midwife))
|
||||
switch(spawner.amount_grown)
|
||||
if(0 to 24)
|
||||
. += span_info("These eggs look shrunken and dormant.")
|
||||
if(25 to 49)
|
||||
. += span_info("These eggs have begun to move, pulsating, gestating...")
|
||||
if(50 to 74)
|
||||
. += span_info("These eggs are rippling, unseen life stirring beneath its skin.")
|
||||
if(75 to 99)
|
||||
. += span_info("These eggs swell with unseen life. They are almost ready to burst.")
|
||||
if(100 to INFINITY)
|
||||
. += span_info("These eggs are plump, teeming with life. Any moment now...")
|
||||
|
||||
/obj/structure/spider/eggcluster/enriched
|
||||
name = "enriched egg cluster"
|
||||
color = rgb(148, 0, 211)
|
||||
@@ -43,7 +59,7 @@
|
||||
you_are_text = "You are a spider."
|
||||
flavour_text = "For the hive! Choose a spider and fulfill your role to take over the station... if that is within your directives, of course."
|
||||
important_text = "Follow your directives at all costs."
|
||||
faction = list("spiders")
|
||||
faction = list("spider")
|
||||
spawner_job_path = /datum/job/spider
|
||||
role_ban = ROLE_ALIEN
|
||||
prompt_ghost = FALSE
|
||||
@@ -59,9 +75,9 @@
|
||||
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,
|
||||
/mob/living/basic/giant_spider,
|
||||
/mob/living/basic/giant_spider/hunter,
|
||||
/mob/living/basic/giant_spider/nurse,
|
||||
)
|
||||
|
||||
/obj/effect/mob_spawn/ghost_role/spider/Initialize(mapload)
|
||||
@@ -102,7 +118,7 @@
|
||||
to_chat(user, span_warning("\The [src] is not ready to hatch yet!"))
|
||||
return FALSE
|
||||
|
||||
/obj/effect/mob_spawn/ghost_role/spider/special(mob/living/simple_animal/hostile/giant_spider/spawned_mob, mob/mob_possessor)
|
||||
/obj/effect/mob_spawn/ghost_role/spider/special(mob/living/basic/giant_spider/spawned_mob, mob/mob_possessor)
|
||||
spawned_mob.directive = directive
|
||||
egg.spawner = null
|
||||
QDEL_NULL(egg)
|
||||
@@ -114,9 +130,9 @@
|
||||
you_are_text = "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,
|
||||
/mob/living/basic/giant_spider/tarantula,
|
||||
/mob/living/basic/giant_spider/viper,
|
||||
/mob/living/basic/giant_spider/midwife,
|
||||
)
|
||||
|
||||
/obj/effect/mob_spawn/ghost_role/spider/bloody
|
||||
@@ -127,7 +143,7 @@
|
||||
directive = "You are the spawn of a vicious 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,
|
||||
/mob/living/basic/giant_spider/hunter/flesh,
|
||||
)
|
||||
|
||||
/obj/effect/mob_spawn/ghost_role/spider/midwife
|
||||
@@ -137,7 +153,7 @@
|
||||
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,
|
||||
/mob/living/basic/giant_spider/midwife,
|
||||
)
|
||||
|
||||
/**
|
||||
@@ -153,7 +169,7 @@
|
||||
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
|
||||
var/mob/living/basic/giant_spider/spider = choice
|
||||
spider_list[initial(spider.name)] = choice
|
||||
|
||||
var/datum/radial_menu_choice/option = new
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
/datum/chemical_reaction/slime/slimemobspawn/spider/summon_mobs(datum/reagents/holder, turf/T)
|
||||
T.visible_message(span_danger("The slime extract begins to vibrate crikey-ingly!"))
|
||||
addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 3, "Traitor Spider Slime", /mob/living/simple_animal/hostile/giant_spider/midwife, FACTION_NEUTRAL, FALSE), 50)
|
||||
addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 3, "Traitor Spider Slime", /mob/living/basic/giant_spider/midwife, FACTION_NEUTRAL, FALSE), 50)
|
||||
|
||||
|
||||
//Silver
|
||||
|
||||
@@ -15,6 +15,6 @@
|
||||
/mob/living/basic/pet/dog/corgi,
|
||||
/mob/living/basic/carp/magic/chaos,
|
||||
/mob/living/simple_animal/bot/secbot/ed209,
|
||||
/mob/living/simple_animal/hostile/giant_spider/viper/wizard,
|
||||
/mob/living/basic/giant_spider/viper/wizard,
|
||||
/mob/living/simple_animal/hostile/construct/juggernaut/mystic,
|
||||
)
|
||||
|
||||
@@ -149,20 +149,6 @@
|
||||
/mob/living/simple_animal/hostile/construct/wraith/noncult,
|
||||
/mob/living/simple_animal/hostile/dark_wizard,
|
||||
/mob/living/simple_animal/hostile/eyeball,
|
||||
/mob/living/simple_animal/hostile/giant_spider,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/flesh,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/ice,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny,
|
||||
/mob/living/simple_animal/hostile/giant_spider/ice,
|
||||
/mob/living/simple_animal/hostile/giant_spider/midwife,
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse,
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/ice,
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/scrawny,
|
||||
/mob/living/simple_animal/hostile/giant_spider/tarantula,
|
||||
/mob/living/simple_animal/hostile/giant_spider/tarantula/scrawny,
|
||||
/mob/living/simple_animal/hostile/giant_spider/viper,
|
||||
/mob/living/simple_animal/hostile/giant_spider/viper/wizard,
|
||||
/mob/living/simple_animal/hostile/gorilla,
|
||||
/mob/living/simple_animal/hostile/gorilla/cargo_domestic,
|
||||
/mob/living/simple_animal/hostile/guardian,
|
||||
@@ -256,7 +242,6 @@
|
||||
/mob/living/simple_animal/hostile/regalrat/controlled,
|
||||
/mob/living/simple_animal/hostile/retaliate,
|
||||
/mob/living/simple_animal/hostile/retaliate/bat,
|
||||
/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus,
|
||||
/mob/living/simple_animal/hostile/retaliate/clown,
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/banana,
|
||||
/mob/living/simple_animal/hostile/retaliate/clown/clownhulk,
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
. = ..()
|
||||
AddComponent(/datum/component/slippery, 20)
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/badnana_spider
|
||||
/mob/living/basic/giant_spider/badnana_spider
|
||||
name = "badnana spider"
|
||||
desc = "WHY WOULD GOD ALLOW THIS?!"
|
||||
icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi'
|
||||
@@ -60,13 +60,6 @@
|
||||
health = 40
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
move_to_delay = 4
|
||||
speed = -0.5
|
||||
faction = list("spiders")
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/badnana_spider/AttackingTarget()
|
||||
. = ..()
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/carbon_target = target
|
||||
carbon_target.reagents.add_reagent(/datum/reagent/consumable/laughter, 10)
|
||||
|
||||
|
||||
@@ -468,7 +468,7 @@
|
||||
monster_types = list(/mob/living/simple_animal/hostile/biohazard_blob/electric_mosquito)
|
||||
spawn_cooldown = 500
|
||||
if(BIO_BLOB_TYPE_TOXIC)
|
||||
monster_types = list(/mob/living/simple_animal/hostile/giant_spider)
|
||||
monster_types = list(/mob/living/basic/giant_spider)
|
||||
if(BIO_BLOB_TYPE_RADIOACTIVE)
|
||||
monster_types = list(/mob/living/simple_animal/hostile/biohazard_blob/centaur)
|
||||
AddComponent(/datum/component/spawner, monster_types, spawn_cooldown, list(MOLD_FACTION), "emerges from", max_spawns)
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
desc = "A mush of sticky cobwebs and nasty looking eggs..."
|
||||
icon_state = "nest_spider"
|
||||
light_color = LIGHT_COLOR_BLOOD_MAGIC
|
||||
monster_types = list(/mob/living/simple_animal/hostile/giant_spider/hunter, /mob/living/simple_animal/hostile/giant_spider)
|
||||
monster_types = list(/mob/living/basic/giant_spider/hunter, /mob/living/basic/giant_spider)
|
||||
loot = list(/obj/item/spider_egg = 4)
|
||||
|
||||
/obj/item/spider_egg
|
||||
@@ -155,7 +155,7 @@
|
||||
if(do_after(user, 3 SECONDS, src))
|
||||
to_chat(user, span_userdanger("You crack [src] open, something monsterous crawls out!"))
|
||||
playsound(src, 'sound/effects/blobattack.ogg', 100)
|
||||
new /mob/living/simple_animal/hostile/giant_spider (user.loc)
|
||||
new /mob/living/basic/giant_spider (user.loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/mob_spawner/bush
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//Custom Holoimages//
|
||||
/datum/preset_holoimage/spider
|
||||
nonhuman_mobtype = /mob/living/simple_animal/hostile/giant_spider
|
||||
nonhuman_mobtype = /mob/living/basic/giant_spider
|
||||
|
||||
//Custom Holodisks//
|
||||
/obj/item/disk/holodisk/woospider //No special markings on this disk, should be a fun maint loot surprise.
|
||||
|
||||
+6
-4
@@ -3840,9 +3840,10 @@
|
||||
#include "code\modules\mob\living\basic\lavaland\bileworm\bileworm_vileworm.dm"
|
||||
#include "code\modules\mob\living\basic\pets\dog.dm"
|
||||
#include "code\modules\mob\living\basic\pets\pet.dm"
|
||||
#include "code\modules\mob\living\basic\retaliate\garden_gnome.dm"
|
||||
#include "code\modules\mob\living\basic\retaliate\ghost.dm"
|
||||
#include "code\modules\mob\living\basic\ruin_defender\stickman.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\faithless.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\garden_gnome.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\ghost.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\carp\carp.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\carp\carp_abilities.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\carp\carp_ai_actions.dm"
|
||||
@@ -3851,7 +3852,9 @@
|
||||
#include "code\modules\mob\living\basic\space_fauna\carp\carp_controllers.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\carp\magicarp.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\carp\megacarp.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\faithless\faithless.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\giant_spider\giant_spider.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\giant_spider\giant_spider_ai.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\giant_spider\spider_variants.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\giant_spider\spider_abilities\hivemind.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\giant_spider\spider_abilities\lay_eggs.dm"
|
||||
#include "code\modules\mob\living\basic\space_fauna\giant_spider\spider_abilities\web.dm"
|
||||
@@ -4071,7 +4074,6 @@
|
||||
#include "code\modules\mob\living\simple_animal\hostile\cat_butcher.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\eyeballs.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\goose.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\headcrab.dm"
|
||||
#include "code\modules\mob\living\simple_animal\hostile\heretic_monsters.dm"
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
# transforms simple spiders to the new basic spiders
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/@SUBTYPES : /mob/living/basic/giant_spider/@SUBTYPES{@OLD}
|
||||
/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus : /mob/living/basic/giant_spider/sgt_araneus{@OLD}
|
||||
Reference in New Issue
Block a user