Converts spiderlings to basic mobs (#30571)

* Converts spiderlings to basic mobs

* Address code reviews, add terror_spiderlings to isterrorspider()

* Update code/modules/mob/living/basic/hostile/spiderlings.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Update code/modules/mob/living/basic/hostile/spiderlings.dm

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Breaks up ancient spiderling life into something more modern

* Fixed the brimming station of spiders

---------

Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
This commit is contained in:
PollardTheDragon
2025-11-15 18:36:15 -05:00
committed by GitHub
parent 00cc58395d
commit c6875a50d0
21 changed files with 204 additions and 345 deletions
+1 -148
View File
@@ -76,160 +76,13 @@
if(amount_grown >= 100)
var/num = rand(3, 12)
for(var/i in 1 to num)
var/obj/structure/spider/spiderling/S = new /obj/structure/spider/spiderling(loc)
var/mob/living/basic/spiderling/S = new /mob/living/basic/spiderling(loc)
S.faction = faction.Copy()
S.master_commander = master_commander
if(player_spiders)
S.player_spiders = TRUE
qdel(src)
/obj/structure/spider/spiderling
name = "spiderling"
desc = "It never stays still for long."
icon_state = "spiderling"
anchored = FALSE
layer = 2.75
max_integrity = 3
var/amount_grown = 0
var/grow_as = null
var/obj/machinery/atmospherics/unary/vent_pump/entry_vent
var/travelling_in_vent = FALSE
var/player_spiders = FALSE
var/list/faction = list("spiders")
var/selecting_player = 0
/obj/structure/spider/spiderling/Initialize(mapload)
. = ..()
pixel_x = rand(6,-6)
pixel_y = rand(6,-6)
START_PROCESSING(SSobj, src)
AddComponent(/datum/component/swarming)
AddComponent(/datum/component/event_tracker, EVENT_TERROR_SPIDERS)
ADD_TRAIT(src, TRAIT_EDIBLE_BUG, "edible_bug") // Normally this is just used for mobs, but spiderlings are kind of that...
/obj/structure/spider/spiderling/Destroy()
STOP_PROCESSING(SSobj, src)
// Cancel our movement.
GLOB.move_manager.stop_looping(src)
entry_vent = null
if(amount_grown < 100)
new /obj/effect/decal/cleanable/spiderling_remains(get_turf(src))
return ..()
/obj/structure/spider/spiderling/Bump(atom/user)
if(istype(user, /obj/structure/table))
loc = user.loc
else
..()
/obj/structure/spider/spiderling/process()
if(travelling_in_vent)
if(isturf(loc))
travelling_in_vent = FALSE
entry_vent = null
else if(entry_vent)
if(get_dist(src, entry_vent) <= 1)
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.parent.other_atmosmch)
vents.Add(temp_vent)
if(!length(vents))
entry_vent = null
return
var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents)
if(prob(50))
visible_message("<B>[src] scrambles into the ventilation ducts!</B>", \
"<span class='notice'>You hear something squeezing through the ventilation ducts.</span>")
spawn(rand(20,60))
loc = exit_vent
var/travel_time = round(get_dist(loc, exit_vent.loc) / 2)
spawn(travel_time)
if(!exit_vent || exit_vent.welded)
loc = entry_vent
entry_vent = null
return
if(prob(50))
audible_message("<span class='notice'>You hear something squeezing through the ventilation ducts.</span>")
sleep(travel_time)
if(!exit_vent || exit_vent.welded)
loc = entry_vent
entry_vent = null
return
loc = exit_vent.loc
entry_vent = null
var/area/new_area = get_area(loc)
if(new_area)
new_area.Entered(src)
//=================
else if(prob(33))
if(random_skitter() && prob(40))
visible_message("<span class='notice'>[src] skitters[pick(" away"," around","")].</span>")
else if(prob(10))
//ventcrawl!
for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src))
if(!v.welded)
entry_vent = v
GLOB.move_manager.home_onto(src, entry_vent, 1, 10)
break
if(isturf(loc))
amount_grown += rand(0,2)
if(amount_grown >= 100)
if(SSmobs.xenobiology_mobs > MAX_GOLD_CORE_MOBS && HAS_TRAIT(src, TRAIT_XENOBIO_SPAWNED))
qdel(src)
return
if(!grow_as)
grow_as = pick(typesof(/mob/living/basic/giant_spider) - list(/mob/living/basic/giant_spider/hunter/infestation_spider, /mob/living/basic/giant_spider/araneus))
var/mob/living/basic/giant_spider/S = new grow_as(loc)
S.faction = faction.Copy()
S.master_commander = master_commander
if(HAS_TRAIT(src, TRAIT_XENOBIO_SPAWNED))
ADD_TRAIT(S, TRAIT_XENOBIO_SPAWNED, "xenobio")
SSmobs.xenobiology_mobs++
if(player_spiders && !selecting_player)
selecting_player = 1
spawn()
var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a giant spider?", ROLE_SENTIENT, TRUE, source = S)
if(length(candidates) && !QDELETED(S))
var/mob/C = pick(candidates)
if(C)
S.key = C.key
dust_if_respawnable(C)
if(S.master_commander)
to_chat(S, "<span class='biggerdanger'>You are a spider who is loyal to [S.master_commander], obey [S.master_commander]'s every order and assist [S.master_commander.p_them()] in completing [S.master_commander.p_their()] goals at any cost.</span>")
qdel(src)
/obj/structure/spider/spiderling/proc/random_skitter()
var/list/available_turfs = list()
for(var/turf/simulated/S in oview(10, src))
// no !isspaceturf check needed since /turf/simulated is not a subtype of /turf/space
if(S.density)
continue
available_turfs += S
if(!length(available_turfs))
return FALSE
GLOB.move_manager.home_onto(src, pick(available_turfs), 1, 10)
return TRUE
/obj/structure/spider/spiderling/decompile_act(obj/item/matter_decompiler/C, mob/user)
if(!isdrone(user))
user.visible_message("<span class='notice'>[user] sucks [src] into its decompiler. There's a horrible crunching noise.</span>", \
"<span class='warning'>It's a bit of a struggle, but you manage to suck [src] into your decompiler. It makes a series of visceral crunching noises.</span>")
C.stored_comms["metal"] += 2
C.stored_comms["glass"] += 1
qdel(src)
return TRUE
return ..()
/obj/effect/decal/cleanable/spiderling_remains
name = "spiderling remains"
desc = "Green squishy mess."
icon_state = "greenshatter"
/obj/structure/spider/cocoon
name = "cocoon"
desc = "Something wrapped in silky spider web."