Ape Uprising (#31609)

* Allow monkey-like species to craft

* Add signal for mobs entering vents

* Implement basic uplifted antag datum & nest

* Make phrasing nicer

* Allow primitive species to vary & add time requirements

* Add spawning functionality to nest

* Make primitives unable to be humanised a little less violently

* Fix linter complaints

* Fix typo which made the linter mad

* Add objectives and antag teams

* Make nests consider other nests for spawn limit

* Add greeting text

* Add guaranteed early spawns

* Allow deconstruction of nests & recovery of scrap

* Allow uplifted mobs to ventcrawl with small items

* Clarify nest spawning conditions on examine

* Tweak NPC numbers & AI

* Add obtain objective and give an extra objective

* Give thanks to the linter

* Change team objective & make the alert nicer

* Make event only spawn monkeys by default

* Add examine text explaining deconstruction

* Allow ghosts to see nest materials

* Handle stacks properly in nest deconstruction

* Add on-demand ghost spawn to reduce roll spam

* Add nest crafting

* Allow lesser mobs to use medical stacks

I don't believe this should affect anything else, as every other mob capable of holding these items is an advanced tool user.

* Add hint about crafting on examine

* Ensure only nest monkeys retaliate to nest damage

* Add uplifted primitive nests to the spawners menu
This commit is contained in:
unknownuser782
2026-05-07 05:03:30 +00:00
committed by GitHub
parent 85002cca6c
commit 13c3cc803c
30 changed files with 942 additions and 16 deletions
@@ -64,6 +64,24 @@ have ways of interacting with a specific mob and control it.
)
idle_behavior = /datum/idle_behavior/idle_monkey/pun_pun
/datum/ai_controller/monkey/uplifted_npc
movement_delay = 7 DECISECONDS // uplifted npcs move slower so that they're less annoying
planning_subtrees = list(
/datum/ai_planning_subtree/generic_resist,
/datum/ai_planning_subtree/monkey_combat,
)
/datum/ai_controller/monkey/uplifted_npc/retaliate(mob/living/living_mob)
var/mob/living/carbon/human/me = pawn
var/mob/living/carbon/human/target = living_mob
if(istype(me) && istype(target) \
&& target.mind && target.mind.has_antag_datum(/datum/antagonist/uplifted_primitive) \
&& target.dna.species.type == me.dna.species.type)
return
return ..()
/datum/ai_controller/monkey/angry
/datum/ai_controller/monkey/angry/try_possess_pawn(atom/new_pawn)