Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MIRROR] Spider Infestation Balance Rebalance Expansion Part 2 #360

Merged
merged 1 commit into from
Oct 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/__DEFINES/span.dm
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@
#define span_smallnoticeital(str) ("<span class='smallnoticeital'>" + str + "</span>")
#define span_spiderbroodmother(str) ("<span class='spiderbroodmother'>" + str + "</span>")
#define span_spiderscout(str) ("<span class='spiderscout'>" + str + "</span>")
#define span_spiderbreacher(str) ("<span class='spiderbreacher'>" + str + "</span>")
#define span_suicide(str) ("<span class='suicide'>" + str + "</span>")
#define span_suppradio(str) ("<span class='suppradio'>" + str + "</span>")
#define span_syndradio(str) ("<span class='syndradio'>" + str + "</span>")
Expand Down
16 changes: 16 additions & 0 deletions code/game/objects/effects/spiderwebs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,22 @@
. = ..()
AddComponent(/datum/component/caltrop, min_damage = 20, max_damage = 30, flags = CALTROP_NOSTUN | CALTROP_BYPASS_SHOES)

/obj/structure/spider/reflector
name = "Reflective silk screen"
icon = 'icons/effects/effects.dmi'
desc = "Made up of an extremly reflective silk material looking at it hurts."
icon_state = "reflector"
max_integrity = 30
density = TRUE
opacity = TRUE
anchored = TRUE
flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD
receive_ricochet_chance_mod = INFINITY

/obj/structure/spider/reflector/Initialize(mapload)
. = ..()
air_update_turf(TRUE, TRUE)

/obj/structure/spider/effigy
name = "web effigy"
icon = 'icons/effects/effects.dmi'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,12 @@
maxHealth = 125
health = 125
obj_damage = 45

melee_damage_lower = 25
melee_damage_upper = 30
speed = 5
player_speed_modifier = -3.1
menu_description = "Slow spider variant specializing in stalking and ambushing prey, above avarage health and damage with a strong grip."
menu_description = "Slow spider, with a strong disarming pull and above avarage health and damage."

/mob/living/basic/spider/giant/ambush/Initialize(mapload)
. = ..()
Expand Down Expand Up @@ -72,7 +73,7 @@
obj_damage = 45
speed = 5
player_speed_modifier = -4
menu_description = "Tanky and strong for the defense of the nest and other spiders."
menu_description = "Tanky and strong able to shed a carcass for protection."

/mob/living/basic/spider/giant/guard/Initialize(mapload)
. = ..()
Expand Down Expand Up @@ -100,7 +101,7 @@
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."
menu_description = "Fast spider with toxin injection, but has less health and damage."

/mob/living/basic/spider/giant/hunter/Initialize(mapload)
. = ..()
Expand Down Expand Up @@ -129,7 +130,7 @@
speed = 2.8
player_speed_modifier = -3.1
sight = SEE_SELF|SEE_MOBS
menu_description = "Fast spider variant specializing in scouting and alerting of prey, with the ability to travel in vents."
menu_description = "Fast spider able to see enemies through walls, send messages to the nest and the ability to travel in vents."

/mob/living/basic/spider/giant/scout/Initialize(mapload)
. = ..()
Expand Down Expand Up @@ -162,7 +163,7 @@
player_speed_modifier = -3.1
web_speed = 0.25
web_type = /datum/action/cooldown/mob_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."
menu_description = "Avarage speed spider able to heal other spiders and itself together with a fast web laying capability, has low damage and health."
///The health HUD applied to the mob.
var/health_hud = DATA_HUD_MEDICAL_ADVANCED

Expand Down Expand Up @@ -209,7 +210,7 @@
speed = 4
player_speed_modifier = -3.1
web_type = /datum/action/cooldown/mob_cooldown/lay_web/sealer
menu_description = "Support spider variant specializing in contruction to protect their brethren, but has very low amount of health and deals low damage."
menu_description = "Avarage speed spider with self healing abilities and multiple web types to reinforce the nest with little to no damage and low health."

/mob/living/basic/spider/giant/tangle/Initialize(mapload)
. = ..()
Expand Down Expand Up @@ -246,6 +247,97 @@
return FALSE
return TRUE

/**
* ### Spider Tank
* A subtype of the giant spider, specialized in taking damage.
* This spider is only slightly slower than a human.
*/
/mob/living/basic/spider/giant/tank
name = "tank spider"
desc = "Furry and Purple with a white top, it makes you shudder to look at it. This one has bright yellow eyes."
icon_state = "tank"
icon_living = "tank"
icon_dead = "tank_dead"
maxHealth = 500
health = 500
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
melee_damage_lower = 5
melee_damage_upper = 5
obj_damage = 15
speed = 5
player_speed_modifier = -4
menu_description = "Extremly tanky with very poor offence. Able to self heal and lay reflective silk screens."

/mob/living/basic/spider/giant/tank/Initialize(mapload)
. = ..()
var/datum/action/cooldown/mob_cooldown/lay_web/web_reflector/reflector_web = new(src)
reflector_web.Grant(src)

var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src)
passage_web.Grant(src)

AddElement(/datum/element/web_walker, /datum/movespeed_modifier/below_average_web)

AddComponent(/datum/component/healing_touch,\
heal_brute = 50,\
heal_burn = 50,\
heal_time = 5 SECONDS,\
self_targetting = HEALING_TOUCH_SELF_ONLY,\
interaction_key = DOAFTER_SOURCE_SPIDER,\
valid_targets_typecache = typecacheof(list(/mob/living/basic/spider/growing/young/tank, /mob/living/basic/spider/giant/tank)),\
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 when on fire
/mob/living/basic/spider/giant/tank/proc/can_mend(mob/living/source, mob/living/target)
if (on_fire)
balloon_alert(src, "on fire!")
return FALSE
return TRUE

/**
* ### Spider Breacher
* A subtype of the giant spider, specialized in breaching and invasion.
* This spider is only slightly slower than a human.
*/
/mob/living/basic/spider/giant/breacher
name = "breacher spider"
desc = "Furry and light brown with dark brown and red highlights, it makes you shudder to look at it. This one has bright red eyes."
icon_state = "breacher"
icon_living = "breacher"
icon_dead = "breacher_dead"
maxHealth = 120
health = 120
melee_damage_lower = 5
melee_damage_upper = 10
unsuitable_atmos_damage = 0
minimum_survivable_temperature = 0
maximum_survivable_temperature = 700
unsuitable_cold_damage = 0
wound_bonus = 25
bare_wound_bonus = 50
sharpness = SHARP_EDGED
obj_damage = 60
web_speed = 0.25
limb_destroyer = 50
speed = 5
player_speed_modifier = -4
sight = SEE_TURFS
menu_description = "Atmospherically resistant with the ability to destroy walls and limbs, and to send warnings to the nest."

/mob/living/basic/spider/giant/breacher/Initialize(mapload)
. = ..()
var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src)
web_solid.Grant(src)

var/datum/action/cooldown/mob_cooldown/command_spiders/warning_spiders/spiders_warning = new(src)
spiders_warning.Grant(src)

AddElement(/datum/element/tear_wall)
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/below_average_web)

/**
* ### Tarantula
*
Expand All @@ -259,8 +351,8 @@
icon_state = "tarantula"
icon_living = "tarantula"
icon_dead = "tarantula_dead"
maxHealth = 360 // woah nelly
health = 360
maxHealth = 400 // woah nelly
health = 400
melee_damage_lower = 35
melee_damage_upper = 40
obj_damage = 100
Expand All @@ -277,16 +369,9 @@

/mob/living/basic/spider/giant/tarantula/Initialize(mapload)
. = ..()
var/datum/action/cooldown/mob_cooldown/lay_web/solid_web/web_solid = new(src)
web_solid.Grant(src)

var/datum/action/cooldown/mob_cooldown/lay_web/web_passage/passage_web = new(src)
passage_web.Grant(src)

charge = new /datum/action/cooldown/mob_cooldown/charge/basic_charge()
charge.Grant(src)

AddElement(/datum/element/tear_wall)
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/slow_web)

/mob/living/basic/spider/giant/tarantula/Destroy()
Expand Down Expand Up @@ -373,11 +458,14 @@
var/datum/action/cooldown/mob_cooldown/wrap/wrapping = new(src)
wrapping.Grant(src)

var/datum/action/cooldown/mob_cooldown/lay_eggs/make_eggs = new(src)
make_eggs.Grant(src)
var/datum/action/cooldown/mob_cooldown/lay_eggs/make_eggs_tier1 = new(src)
make_eggs_tier1.Grant(src)

var/datum/action/cooldown/mob_cooldown/lay_eggs/abnormal/make_eggs_tier2 = new(src)
make_eggs_tier2.Grant(src)

var/datum/action/cooldown/mob_cooldown/lay_eggs/enriched/make_better_eggs = new(src)
make_better_eggs.Grant(src)
var/datum/action/cooldown/mob_cooldown/lay_eggs/enriched/make_eggs_tier3 = new(src)
make_eggs_tier3.Grant(src)

var/datum/action/cooldown/mob_cooldown/set_spider_directive/give_orders = new(src)
give_orders.Grant(src)
Expand Down
1 change: 1 addition & 0 deletions code/modules/mob/living/basic/space_fauna/spider/spider.dm
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
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!")
AddElement(/datum/element/cliff_walking)
AddComponent(/datum/component/health_scaling_effects, min_health_slowdown = 1.5)

if(poison_per_bite)
AddElement(/datum/element/venomous, poison_type, poison_per_bite)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,16 @@

/datum/action/cooldown/mob_cooldown/command_spiders/communication_spiders/format_message(mob/living/user, message)
return span_spiderscout("<b>Report from [user]:</b> [message]")

/**
* Sends a smaller message to all currently living spiders.
*/
/datum/action/cooldown/mob_cooldown/command_spiders/warning_spiders
name = "Warning"
desc = "Send a warning to all living spiders."
button_icon = 'icons/mob/actions/actions_animal.dmi'
button_icon_state = "warning"

/datum/action/cooldown/mob_cooldown/command_spiders/warning_spiders/format_message(mob/living/user, message)
return span_spiderbreacher("<b>Warning from [user]:</b> [message]")

Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
button_icon_state = "lay_eggs"
background_icon_state = "bg_alien"
overlay_icon_state = "bg_alien_border"
cooldown_time = 0
melee_cooldown_time = 0
cooldown_time = 20 SECONDS
melee_cooldown_time = 5 SECONDS
shared_cooldown = NONE
click_to_activate = FALSE
///How long it takes for a broodmother to lay eggs.
Expand Down Expand Up @@ -60,10 +60,18 @@
if (spider_directive)
new_eggs.directive = spider_directive.current_directive

/datum/action/cooldown/mob_cooldown/lay_eggs/abnormal
name = "Lay Abnormal Eggs"
desc = "Lay a cluster of eggs, which will soon grow into a uncommon spider."
button_icon_state = "lay_abnormal_eggs"
cooldown_time = 180 SECONDS
egg_type = /obj/effect/mob_spawn/ghost_role/spider/abnormal

/datum/action/cooldown/mob_cooldown/lay_eggs/enriched
name = "Lay Enriched Eggs"
desc = "Lay a cluster of eggs, which will soon grow into a greater spider. Requires you drain a human per cluster of these eggs."
desc = "Lay a cluster of eggs, which will soon grow into a rare spider. Requires you drain a human per cluster of these eggs."
button_icon_state = "lay_enriched_eggs"
cooldown_time = 60 SECONDS
egg_type = /obj/effect/mob_spawn/ghost_role/spider/enriched
/// How many charges we have to make eggs
var/charges = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@
/datum/action/cooldown/mob_cooldown/lay_web/web_passage/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
new /obj/structure/spider/passage(target_turf)


/datum/action/cooldown/mob_cooldown/lay_web/sticky_web
name = "Spin Sticky Web"
desc = "Spin a sticky web to trap intruders."
Expand Down Expand Up @@ -171,3 +170,16 @@
/datum/action/cooldown/mob_cooldown/web_effigy/Activate()
new /obj/structure/spider/effigy(get_turf(owner))
return ..()

/datum/action/cooldown/mob_cooldown/lay_web/web_reflector
name = "Spin reflective silk screen"
desc = "Spin a web to reflect missiles from the nest."
button_icon_state = "lay_web_reflector"
cooldown_time = 30 SECONDS
webbing_time = 4 SECONDS

/datum/action/cooldown/mob_cooldown/lay_web/web_reflector/obstructed_by_other_web()
return !!(locate(/obj/structure/spider/reflector) in get_turf(owner))

/datum/action/cooldown/mob_cooldown/lay_web/web_reflector/plant_web(turf/target_turf, obj/structure/spider/stickyweb/existing_web)
new /obj/structure/spider/reflector(target_turf)
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW, volume = 0.2) // they're small but you can hear 'em
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/spiderling_web)
AddElement(/datum/element/ai_retaliate)
AddElement(/datum/element/web_walker, /datum/movespeed_modifier/fast_web)

// keep in mind we have infinite range (the entire pipenet is our playground, it's just a matter of random choice as to where we end up) so lower and upper both have their gives and takes.
// but, also remember the more time we aren't in a vent, the more susceptible we are to dying to anything and everything.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
// This whole file is just a container for the spiderling subtypes that actually differentiate into different young spiders. None of them are particularly special as of now.

/// This whole file is just a container for the spiderling subtypes that actually differentiate into different young spiders. None of them are particularly special as of now.
/// Will differentiate into the base young spider (known colloquially as the "guard" spider).
/mob/living/basic/spider/growing/spiderling/guard
grow_as = /mob/living/basic/spider/growing/young/guard
Expand Down Expand Up @@ -52,6 +51,24 @@
icon_state = "tangle_spiderling"
icon_dead = "tangle_spiderling_dead"

/// Will differentiate into the "tank" young spider.
/mob/living/basic/spider/growing/spiderling/tank
grow_as = /mob/living/basic/spider/growing/young/tank
name = "tank spiderling"
desc = "Furry and purple, it looks defenseless. This one has dim yellow eyes."
icon = 'icons/mob/simple/arachnoid.dmi'
icon_state = "tank_spiderling"
icon_dead = "tank_spiderling_dead"

/// Will differentiate into the "breacher" young spider.
/mob/living/basic/spider/growing/spiderling/breacher
grow_as = /mob/living/basic/spider/growing/young/breacher
name = "breacher spiderling"
desc = "Furry and baige, it looks defenseless. This one has dim red eyes."
icon = 'icons/mob/simple/arachnoid.dmi'
icon_state = "breacher_spiderling"
icon_dead = "breacher_spiderling_dead"

/// Will differentiate into the "midwife" young spider.
/mob/living/basic/spider/growing/spiderling/midwife
grow_as = /mob/living/basic/spider/growing/young/midwife
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,6 @@
/datum/ai_planning_subtree/find_unwebbed_turf,
/datum/ai_planning_subtree/spin_web,
)

/mob/living/basic/spider/growing/young/start_pulling(atom/movable/pulled_atom, state, force = move_force, supress_message = FALSE) // we're TOO FUCKING WEAK
return
Loading
Loading