mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 06:00:16 +01:00
Basic Mob Spiders III: Sgt. Araneus is no longer a bat (#73350)
## About The Pull Request This PR converts giant spiders into basic mobs and resultingly fixes #37793 They _should_ have the same behaviour as their simple mob versions although I can't verify that their movement speeds are _exactly_ the same. It should at least be pretty close. A quirk of spiders is that they had a pretty large `move_to_delay` which made them slow in the hands of AI (because it would just pause for ages between taking steps) and faster in the hands of players, and they often appear in both forms so I had to implement this as a speed modifier based on player control. Additionally this is the first basic mob which can be set on fire. This is currently implemented as a var on `mob/living/basic` but I know there was some annoyance at adding the environment tolerances as vars on there so if desired I can try and extract it out, I'm just not sure how easy it will be. Something else I noticed is that spiders seem to take stamina damage from bug spray... but stamina damage does nothing to either simple _or_ basic mobs. I have left it in for now in case I am missing something, and rebalancing it to do something else would be more like a balance change. Oh also I killed the `mob/basic/retaliate` folder because that isn't a classification that needs to exist or makes sense. ## Why It's Good For The Game We don't want to use simple mobs any more. Sergeant Araneus can finally actually be a spider, instead of being a bat. ## Changelog 🆑 refactor: Spider code has been refactored and AI-controlled spiders may have slightly different movement or reaction times. fix: Basic mobs can now be slowed when they take stamina damage, however currently only spiders actually _can_ take stamina damage. fix: Spiders should now more reliably disable their AI when controlled by a player. fix: Araneus is no longer considered to be a bat and so cannot fly. fix: Araneus is no longer considered to be a bat and so is no longer frightening to people who are scared of the supernatural. /🆑
This commit is contained in:
@@ -382,7 +382,7 @@
|
||||
"pP" = (
|
||||
/obj/machinery/porta_turret{
|
||||
dir = 8;
|
||||
installation = /obj/item/gun/energy/lasercannon;
|
||||
installation = /obj/item/gun/energy/lasercannon
|
||||
},
|
||||
/obj/effect/mapping_helpers/atom_injector/obj_flag{
|
||||
inject_flags = 1;
|
||||
|
||||
@@ -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"
|
||||
},
|
||||
|
||||
@@ -5517,7 +5517,7 @@
|
||||
/area/awaymission/snowdin/post/cavern2)
|
||||
"pc" = (
|
||||
/obj/structure/spider/stickyweb,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/ice,
|
||||
/mob/living/basic/giant_spider/hunter/ice,
|
||||
/turf/open/misc/asteroid/snow/ice,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"pd" = (
|
||||
@@ -11798,7 +11798,7 @@
|
||||
dir = 5
|
||||
},
|
||||
/obj/structure/spider/stickyweb,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/ice,
|
||||
/mob/living/basic/giant_spider/hunter/ice,
|
||||
/turf/open/floor/iron/freezer,
|
||||
/area/awaymission/snowdin/post/kitchen)
|
||||
"Ps" = (
|
||||
@@ -12052,7 +12052,7 @@
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/awaymission/snowdin/post/research)
|
||||
"QM" = (
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/ice,
|
||||
/mob/living/basic/giant_spider/nurse/ice,
|
||||
/turf/open/misc/asteroid/snow/ice,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"QN" = (
|
||||
@@ -12296,7 +12296,7 @@
|
||||
/turf/open/floor/iron/dark/snowdin,
|
||||
/area/awaymission/snowdin/cave)
|
||||
"Si" = (
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/ice,
|
||||
/mob/living/basic/giant_spider/hunter/ice,
|
||||
/turf/open/misc/asteroid/snow/ice,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"Sj" = (
|
||||
@@ -12879,7 +12879,7 @@
|
||||
},
|
||||
/area/awaymission/snowdin/outside)
|
||||
"Vo" = (
|
||||
/mob/living/simple_animal/hostile/giant_spider/ice,
|
||||
/mob/living/basic/giant_spider/ice,
|
||||
/turf/open/misc/asteroid/snow/ice,
|
||||
/area/awaymission/snowdin/cave/cavern)
|
||||
"Vp" = (
|
||||
|
||||
@@ -23475,7 +23475,7 @@
|
||||
"gLm" = (
|
||||
/obj/machinery/status_display/ai/directional/south,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny,
|
||||
/mob/living/basic/giant_spider/hunter/scrawny,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/department/electrical)
|
||||
"gLn" = (
|
||||
@@ -38930,7 +38930,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
|
||||
/mob/living/simple_animal/hostile/giant_spider/tarantula/scrawny,
|
||||
/mob/living/basic/giant_spider/tarantula/scrawny,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/maintenance/port/greater)
|
||||
"kZK" = (
|
||||
@@ -42963,7 +42963,7 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny,
|
||||
/mob/living/basic/giant_spider/hunter/scrawny,
|
||||
/turf/open/floor/iron/dark,
|
||||
/area/station/maintenance/port/greater)
|
||||
"mii" = (
|
||||
@@ -62741,7 +62741,7 @@
|
||||
"rSL" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/mob/living/simple_animal/hostile/giant_spider/hunter/scrawny,
|
||||
/mob/living/basic/giant_spider/hunter/scrawny,
|
||||
/turf/open/floor/plating,
|
||||
/area/station/maintenance/department/electrical)
|
||||
"rSN" = (
|
||||
|
||||
@@ -28751,7 +28751,7 @@
|
||||
"kms" = (
|
||||
/obj/structure/cable,
|
||||
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
|
||||
/mob/living/simple_animal/hostile/retaliate/bat/sgt_araneus,
|
||||
/mob/living/basic/giant_spider/sgt_araneus,
|
||||
/turf/open/floor/carpet,
|
||||
/area/station/command/heads_quarters/hos)
|
||||
"kmN" = (
|
||||
|
||||
@@ -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" = (
|
||||
|
||||
@@ -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,8 +27,10 @@
|
||||
. = ..()
|
||||
|
||||
if(isbasicmob(owner))
|
||||
qdel(src)
|
||||
return
|
||||
var/mob/living/basic/basic_owner = owner
|
||||
if(!basic_owner.flammable)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(isanimal(owner))
|
||||
var/mob/living/simple_animal/animal_owner = owner
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -880,7 +880,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
|
||||
|
||||
@@ -151,7 +151,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)
|
||||
|
||||
|
||||
@@ -97,6 +97,9 @@
|
||||
///This damage is taken when the body temp is too hot. Set both this and unsuitable_cold_damage to 0 to avoid adding the basic_body_temp_sensitive element.
|
||||
var/unsuitable_heat_damage = 1
|
||||
|
||||
///Whether or not this mob can catch on fire
|
||||
var/flammable = FALSE
|
||||
|
||||
/mob/living/basic/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -124,9 +127,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))
|
||||
@@ -205,3 +207,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,101 @@
|
||||
/**
|
||||
* # 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)
|
||||
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
|
||||
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
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
see_in_dark = NIGHTVISION_FOV_RANGE
|
||||
flammable = TRUE
|
||||
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)
|
||||
@@ -50,22 +50,22 @@
|
||||
/mob/living/basic/creature/proc/health_full_behaviour()
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 30
|
||||
set_varspeed(2)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = 0)
|
||||
|
||||
/mob/living/basic/creature/proc/health_high_behaviour()
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 40
|
||||
set_varspeed(1.5)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -0.5)
|
||||
|
||||
/mob/living/basic/creature/proc/health_medium_behaviour()
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 50
|
||||
set_varspeed(1)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -1)
|
||||
|
||||
/mob/living/basic/creature/proc/health_low_behaviour()
|
||||
melee_damage_lower = 35
|
||||
melee_damage_upper = 60
|
||||
set_varspeed(0.5)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -1.5)
|
||||
|
||||
/mob/living/basic/creature/proc/can_be_seen(turf/location)
|
||||
// Check for darkness
|
||||
|
||||
@@ -49,19 +49,19 @@
|
||||
health_full_behaviour()
|
||||
|
||||
/mob/living/basic/migo/proc/health_full_behaviour()
|
||||
set_varspeed(1)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = 0)
|
||||
dodge_prob = 10
|
||||
|
||||
/mob/living/basic/migo/proc/health_high_behaviour()
|
||||
set_varspeed(0.5)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -0.5)
|
||||
dodge_prob = 20
|
||||
|
||||
/mob/living/basic/migo/proc/health_medium_behaviour()
|
||||
set_varspeed(0)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -1)
|
||||
dodge_prob = 30
|
||||
|
||||
/mob/living/basic/migo/proc/health_low_behaviour()
|
||||
set_varspeed(-0.5)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/netherworld_enrage, multiplicative_slowdown = -1.5)
|
||||
dodge_prob = 50
|
||||
|
||||
/mob/living/basic/migo/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null, filterproof = null, message_range = 7, datum/saymode/saymode = null)
|
||||
|
||||
@@ -61,7 +61,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,
|
||||
)
|
||||
|
||||
@@ -94,7 +94,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,
|
||||
@@ -140,7 +140,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,
|
||||
@@ -155,7 +155,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,
|
||||
@@ -176,7 +176,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,
|
||||
|
||||
@@ -1349,8 +1349,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,
|
||||
|
||||
@@ -1,421 +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
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
|
||||
see_in_dark = NIGHTVISION_FOV_RANGE
|
||||
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)
|
||||
@@ -38,27 +38,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!")
|
||||
|
||||
@@ -59,9 +59,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 +102,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 +114,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 +127,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 +137,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 +153,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
|
||||
|
||||
@@ -131,3 +131,9 @@
|
||||
|
||||
/datum/movespeed_modifier/auto_wash
|
||||
multiplicative_slowdown = 3
|
||||
|
||||
/datum/movespeed_modifier/player_spider_modifier
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/netherworld_enrage
|
||||
variable = TRUE
|
||||
|
||||
@@ -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,
|
||||
|
||||
+6
-4
@@ -3764,9 +3764,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"
|
||||
@@ -3775,7 +3776,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"
|
||||
@@ -3996,7 +3999,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