mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 13:10:02 +01:00
Turns Holodeck Monkeys into actual Monkeys (#79068)
## About The Pull Request Old holodeck monkeys weren't even a subtype of simple animal monkeys, so this really just got swept under the floor in the sweeping monkey species refactors. Anyways, let's just spin up a quick species datum+mob subtype that will have all the traits we wanted from old holodeck monkeys (no meat, no organs, etc.) but reaping all of the benefits of modern monkeys (better AI, etc.) ## Why It's Good For The Game One more refactor done, very simple too. l'm not the greatest at carbon code so let me know if something is wack, but I'm fond of the way everything turned out (especially since I don't have to spam seven billion subtypes of every organ and bodypart). If you're concerned about the cost keep in mind people can spam monkeys through cubes, having a max of three more (that are virtually useless) via the holodeck will not kill us. Also the fact that slimes could eat holodeck monkeys irked me so I also touched that up. I swore there was something for it in the code but I was mistaken, it's codified now. ## Changelog 🆑 refactor: Holodeck monkeys have been moved to the same system as old monkeys, and should retain the similar "ephermeal" behavior, while being a whole lot smarter by leveraging new AI. Please report anything that is completely wack about this. balance: Slimes can't eat holodeck monkeys anymore, because apparently they could and that is wack. /🆑 again let me know if my carbon/bodyparts code sucks. it does the job fwiw
This commit is contained in:
@@ -120,6 +120,7 @@
|
||||
#define SPECIES_NIGHTMARE "nightmare"
|
||||
#define SPECIES_MONKEY "monkey"
|
||||
#define SPECIES_MONKEY_FREAK "monkey_freak"
|
||||
#define SPECIES_MONKEY_HOLODECK "monkey_holodeck"
|
||||
#define SPECIES_MONKEY_HUMAN_LEGGED "monkey_human_legged"
|
||||
#define SPECIES_MOTH "moth"
|
||||
#define SPECIES_MUSHROOM "mush"
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
mobtype = /mob/living/basic/bee/toxin
|
||||
|
||||
/obj/effect/holodeck_effect/mobspawner/monkey
|
||||
mobtype = /mob/living/simple_animal/holodeck_monkey
|
||||
mobtype = /mob/living/carbon/human/species/monkey/holodeck
|
||||
|
||||
/obj/effect/holodeck_effect/mobspawner/penguin
|
||||
mobtype = /mob/living/basic/pet/penguin/emperor/neuter
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
/*
|
||||
Mobs
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/holodeck_monkey
|
||||
name = "monkey"
|
||||
desc = "A holographic creature fond of bananas."
|
||||
icon = 'icons/mob/human/human.dmi'
|
||||
icon_state = "monkey"
|
||||
icon_living = "monkey"
|
||||
icon_dead = "monkey_dead"
|
||||
speak_emote = list("chimpers")
|
||||
emote_hear = list("chimpers.")
|
||||
emote_see = list("scratches.", "looks around.")
|
||||
speak_chance = 1
|
||||
turns_per_move = 2
|
||||
butcher_results = list()
|
||||
response_help_continuous = "pets"
|
||||
response_help_simple = "pet"
|
||||
response_disarm_continuous = "pushes aside"
|
||||
response_disarm_simple = "push aside"
|
||||
response_harm_continuous = "kicks"
|
||||
response_harm_simple = "kick"
|
||||
@@ -14,6 +14,10 @@
|
||||
to_chat(src, span_revenwarning("You are already siphoning the essence of a soul!"))
|
||||
return FALSE
|
||||
|
||||
if(target.flags_1 & HOLOGRAM_1)
|
||||
target.balloon_alert(src, "doesn't possess a soul!") // it's a machine generated visual
|
||||
return
|
||||
|
||||
draining = TRUE
|
||||
var/value_to_return = harvest_soul(target)
|
||||
if(!value_to_return)
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
///only used by humans.
|
||||
var/obj/item/clothing/ears = null
|
||||
|
||||
/// Carbon
|
||||
/// Carbon, you should really only be accessing this through has_dna() but it's your life
|
||||
var/datum/dna/dna = null
|
||||
///last mind to control this mob, for blood-based cloning
|
||||
var/datum/mind/last_mind = null
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
ai_controller = /datum/ai_controller/monkey
|
||||
faction = list(FACTION_NEUTRAL, FACTION_MONKEY)
|
||||
|
||||
/mob/living/carbon/human/species/monkey/Initialize(mapload, cubespawned=FALSE, mob/spawner)
|
||||
/mob/living/carbon/human/species/monkey/Initialize(mapload, cubespawned = FALSE, mob/spawner)
|
||||
if (cubespawned)
|
||||
var/cap = CONFIG_GET(number/monkeycap)
|
||||
if (LAZYLEN(SSmobs.cubemonkeys) > cap)
|
||||
@@ -21,7 +21,7 @@
|
||||
/mob/living/carbon/human/species/monkey/angry
|
||||
ai_controller = /datum/ai_controller/monkey/angry
|
||||
|
||||
/mob/living/carbon/human/species/monkey/angry/Initialize(mapload)
|
||||
/mob/living/carbon/human/species/monkey/angry/Initialize(mapload, cubespawned = FALSE, mob/spawner)
|
||||
. = ..()
|
||||
if(prob(10))
|
||||
INVOKE_ASYNC(src, PROC_REF(give_ape_escape_helmet))
|
||||
@@ -32,6 +32,20 @@
|
||||
equip_to_slot_or_del(helmet, ITEM_SLOT_HEAD)
|
||||
helmet.attack_self(src) // todo encapsulate toggle
|
||||
|
||||
/mob/living/carbon/human/species/monkey/holodeck
|
||||
race = /datum/species/monkey/holodeck
|
||||
|
||||
/mob/living/carbon/human/species/monkey/holodeck/spawn_gibs() // no blood and no gibs
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/species/monkey/holodeck/has_dna()
|
||||
return null
|
||||
|
||||
/mob/living/carbon/human/species/monkey/holodeck/create_bodyparts(list/overrides) // done like this in case people add more limbs to monkeys or something
|
||||
. = ..()
|
||||
for(var/obj/item/bodypart/limb as anything in bodyparts)
|
||||
limb.bodypart_flags |= BODYPART_UNREMOVABLE // no farming organs or limbs from these fellers. get a monkey cube
|
||||
|
||||
GLOBAL_DATUM(the_one_and_only_punpun, /mob/living/carbon/human/species/monkey/punpun)
|
||||
|
||||
/mob/living/carbon/human/species/monkey/punpun
|
||||
|
||||
@@ -192,4 +192,31 @@
|
||||
/obj/item/organ/internal/brain/primate/get_attacking_limb(mob/living/carbon/human/target)
|
||||
return owner.get_bodypart(BODY_ZONE_HEAD)
|
||||
|
||||
/// Virtual monkeys that crave virtual bananas. Everything about them is ephemeral (except that bite).
|
||||
/datum/species/monkey/holodeck
|
||||
id = SPECIES_MONKEY_HOLODECK
|
||||
knife_butcher_results = list()
|
||||
meat = null
|
||||
skinned_type = null
|
||||
inherent_traits = list(
|
||||
TRAIT_GENELESS,
|
||||
TRAIT_GUN_NATURAL,
|
||||
TRAIT_NO_AUGMENTS,
|
||||
TRAIT_NO_BLOOD_OVERLAY,
|
||||
TRAIT_NO_DNA_COPY,
|
||||
TRAIT_NO_UNDERWEAR,
|
||||
TRAIT_NO_ZOMBIFY,
|
||||
TRAIT_NOBLOOD,
|
||||
TRAIT_NOHUNGER,
|
||||
TRAIT_VENTCRAWLER_NUDE,
|
||||
)
|
||||
bodypart_overrides = list(
|
||||
BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/monkey,
|
||||
BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/monkey,
|
||||
BODY_ZONE_HEAD = /obj/item/bodypart/head/monkey,
|
||||
BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/monkey,
|
||||
BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/monkey,
|
||||
BODY_ZONE_CHEST = /obj/item/bodypart/chest/monkey,
|
||||
)
|
||||
|
||||
#undef MONKEY_SPEC_ATTACK_BITE_MISS_CHANCE
|
||||
|
||||
@@ -711,7 +711,7 @@
|
||||
///Check to see if we have the liver, if not automatically gives you last-stage effects of lacking a liver.
|
||||
|
||||
/mob/living/carbon/proc/handle_liver(seconds_per_tick, times_fired)
|
||||
if(!dna)
|
||||
if(isnull(has_dna()))
|
||||
return
|
||||
|
||||
var/obj/item/organ/internal/liver/liver = get_organ_slot(ORGAN_SLOT_LIVER)
|
||||
|
||||
@@ -64,6 +64,10 @@
|
||||
if(issilicon(meal) || meal.mob_biotypes & MOB_ROBOTIC)
|
||||
return FALSE
|
||||
|
||||
if(meal.flags_1 & HOLOGRAM_1)
|
||||
meal.balloon_alert(src, "no life energy!")
|
||||
return FALSE
|
||||
|
||||
if(isanimal(meal))
|
||||
var/mob/living/simple_animal/simple_meal = meal
|
||||
if(simple_meal.damage_coeff[TOX] <= 0 && simple_meal.damage_coeff[BRUTE] <= 0) //The creature wouldn't take any damage, it must be too weird even for us.
|
||||
|
||||
@@ -86,6 +86,8 @@
|
||||
. += cavity_item
|
||||
cavity_item = null
|
||||
|
||||
return .
|
||||
|
||||
///limb removal. The "special" argument is used for swapping a limb with a new one without the effects of losing a limb kicking in.
|
||||
/obj/item/bodypart/proc/drop_limb(special, dismembered)
|
||||
if(!owner)
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 778 B |
@@ -41,7 +41,6 @@
|
||||
/mob/living/simple_animal/drone/snowflake/bardrone,
|
||||
/mob/living/simple_animal/drone/syndrone,
|
||||
/mob/living/simple_animal/drone/syndrone/badass,
|
||||
/mob/living/simple_animal/holodeck_monkey,
|
||||
/mob/living/simple_animal/hostile,
|
||||
/mob/living/simple_animal/hostile/alien,
|
||||
/mob/living/simple_animal/hostile/alien/drone,
|
||||
|
||||
@@ -3924,7 +3924,6 @@
|
||||
#include "code\modules\holodeck\holo_effect.dm"
|
||||
#include "code\modules\holodeck\holodeck_map_templates.dm"
|
||||
#include "code\modules\holodeck\items.dm"
|
||||
#include "code\modules\holodeck\mobs.dm"
|
||||
#include "code\modules\holodeck\turfs.dm"
|
||||
#include "code\modules\hydroponics\biogenerator.dm"
|
||||
#include "code\modules\hydroponics\bouquets.dm"
|
||||
|
||||
Reference in New Issue
Block a user