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)
+1
View File
@@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(huds, alist(
DATA_HUD_HERETIC = new/datum/atom_hud/data/heretic(),
ANTAG_HUD_HERETIC = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_HERETIC_BEAST = new/datum/atom_hud/antag/hidden(),
ANTAG_HUD_UPLIFTED_TEAMLESS = new/datum/atom_hud/antag/hidden/secondary(),
))
/datum/atom_hud
+27
View File
@@ -502,6 +502,15 @@
else
. += "<b>NO</b>|<a href='byond://?src=[UID()];zombie=zombie'>zombie</a>|<a href='byond://?src=[UID()];zombie=zombievirus'>infect</a>"
/datum/mind/proc/memory_edit_uplifted(mob/living/H)
. = _memory_edit_header("uplifted", list())
if(has_antag_datum(/datum/antagonist/uplifted_primitive))
. += "<a href='byond://?src=[UID()];uplifted=clear'>no</a>|<b><font color='red'>UPLIFTED</font></b>"
else
. += "<b>NO</b>|<a href='byond://?src=[UID()];uplifted=uplifted'>uplifted</a>"
. += _memory_edit_role_enabled(ROLE_UPLIFTED_PRIMITIVE)
/datum/mind/proc/memory_edit_eventmisc(mob/living/H)
. = _memory_edit_header("event", list())
if(has_antag_datum(/datum/antagonist/eventmisc))
@@ -643,6 +652,8 @@
sections["abductor"] = memory_edit_abductor(H)
/** Zombies **/
sections["zombie"] = memory_edit_zombie(H)
/** Uplifted Primitives **/
sections["uplifted"] = memory_edit_uplifted(H)
sections["eventmisc"] = memory_edit_eventmisc(H)
/** TRAITOR ***/
sections["traitor"] = memory_edit_traitor()
@@ -1426,6 +1437,22 @@
log_admin("[key_name(usr)] has removed the zombie virus from [key_name(current)].")
current.create_log(MISC_LOG, "[key_name(current)] had their zombie virus admin-removed by [key_name_admin(usr)]")
else if(href_list["uplifted"])
switch(href_list["uplifted"])
if("clear")
if(!has_antag_datum(/datum/antagonist/uplifted_primitive))
return
remove_antag_datum(/datum/antagonist/uplifted_primitive)
message_admins("[key_name_admin(usr)] has de-uplifted'ed [key_name(current)].")
log_admin("[key_name(usr)] has de-uplifted'ed [key_name(current)].")
if("uplifted")
if(has_antag_datum(/datum/antagonist/uplifted_primitive))
return
add_antag_datum(/datum/antagonist/uplifted_primitive)
message_admins("[key_name_admin(usr)] has uplifted'ed [key_name(current)].")
log_admin("[key_name(usr)] has uplifted'ed [key_name(current)].")
current.create_log(MISC_LOG, "[key_name(current)] was made into an uplifted primitive by [key_name_admin(usr)]")
else if(href_list["traitor"])
switch(href_list["traitor"])
if("clear")