[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:
SkyratBot
2023-03-10 04:47:03 +00:00
committed by GitHub
co-authored by Jacquerel lessthnthree Gandalf
parent 79a99ba516
commit 480745ce05
42 changed files with 606 additions and 577 deletions
+7 -7
View File
@@ -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"
},
+4 -4
View File
@@ -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" = (
+1
View File
@@ -5,3 +5,4 @@
#define FLIP_ON_DEATH (1<<1)
#define REMAIN_DENSE_WHILE_DEAD (1<<2)
#define FLAMMABLE_MOB (1<<3)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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)
+9 -9
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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)
+21 -2
View File
@@ -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,
+2 -2
View File
@@ -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
View File
@@ -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}