Files
+3 77616e8b0e Add Proteans to the game. (#3449)
## About The Pull Request

Adds the funny nanite blob dudes from Vigro code into the game. It's
more of a port of the idea since they're coded from the ground up. They
will be more of a utility focused species then a combat focused species.
**They are fragile.**

- Eats metal. You need metal to live and you need metal to heal. 
- Healed by materials. You feed Proteans metal to heal them.
- Difficult to kill, but extremely fragile. They are considered a
deathless species but they are stuck in their suit if they die. **You
have to order a new refactory from cargo to revive them**

**Order Refactory > Screwdriver suit > Insert refactory > Wait 5
minutes.**

- Easily dismembered. They have 30 seconds to recover their limbs and
pop them on or they will melt into nothingness. Can do a lengthy heal
which replaces missing limbs and easy to replace organs.
- Without a refactory, you will wither away.
- Without an orchastrator, you will have a lot of issues moving.
- You can lock your suit on someone. (OOC escape will work)
- You can assimilate modsuits.

- [x] OOC escape
- [x] Suit Transformation fixes
- [x] Modsuit Assimilation
- [x] Ensure organs are working
- [x] Species info and lore
- [x] Antag Proteans
- [x] Custom damage. Disable various surgeries.
- [x] Testing, polish, feedback.
- [x] Runtime and CI fixing.
- [ ] Live testing and balance.

## Why It's Good For The Game

This was the second to top vote on species people wanted to see added
and this is more custom mechanics then what is just a human reskin.

## Proof Of Testing


![NVIDIA_Overlay_bC6M2FThJP](https://github.com/user-attachments/assets/cb8c8594-f82c-408b-a9a1-e86a61bf8a0f)


![NVIDIA_Overlay_dbhHrYltOH](https://github.com/user-attachments/assets/cb643365-5512-465f-8582-337e24211b9f)

## Changelog

🆑 StrangeWeirdKitten, Majkl-J
add: New species: Proteans
/🆑

---------

Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
Co-authored-by: Bubberbot <151680451+Bubberbot@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: aKromatopzia <94389683+aKromatopzia@users.noreply.github.com>
Co-authored-by: Jinshee <96621959+Jinshee@users.noreply.github.com>
Co-authored-by: Jinshee <manastra2536@gmail.com>
Co-authored-by: JustMeTheIInd <145101584+JustMeTheIInd@users.noreply.github.com>
Co-authored-by: nevimer <77420409+nevimer@users.noreply.github.com>
Co-authored-by: Odairu <39929315+Odairu@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
2025-05-13 15:05:46 -04:00

115 lines
3.5 KiB
Plaintext

/mob/living/carbon/human/verb/climax_verb()
set name = "Climax"
set category = "IC"
if(!has_status_effect(/datum/status_effect/climax_cooldown))
if(tgui_alert(usr, "Are you sure you want to cum?", "Climax", list("Yes", "No")) == "Yes")
if(stat != CONSCIOUS)
to_chat(usr, span_warning("You can't climax right now..."))
return
else
climax(TRUE)
else
to_chat(src, span_warning("You can't cum right now!"))
/mob/living/verb/reflexes_verb()
set name = "Toggle Reflexes"
set category = "IC"
if(!HAS_TRAIT_FROM(src, TRAIT_QUICKREFLEXES, REF(src)))
ADD_TRAIT(src, TRAIT_QUICKREFLEXES, REF(src))
to_chat(src, span_notice("[get_reflexes_gain_text()]"))
else
REMOVE_TRAIT(src, TRAIT_QUICKREFLEXES, REF(src))
to_chat(src, span_notice("[get_reflexes_lose_text()]"))
/mob/living/proc/get_reflexes_gain_text()
return "You don't feel like being touched right now."
/mob/living/proc/get_reflexes_lose_text()
return "You'll allow yourself to be touched now."
/mob/living/silicon/get_reflexes_gain_text()
return "Our systems will disallow platonic contact."
/mob/living/silicon/get_reflexes_lose_text()
return "Our systems will allow platonic contact."
/mob/living/carbon/human/Initialize(mapload)
. = ..()
if(CONFIG_GET(flag/disable_erp_preferences))
verbs -= /mob/living/carbon/human/verb/climax_verb
if(CONFIG_GET(flag/disable_lewd_items))
verbs -= /mob/living/carbon/human/verb/safeword
/mob/living/carbon/human/verb/remove_lewd_items()
set name = "Remove Lewd Items"
set category = "OOC"
set desc = "Removes any and all lewd items from you."
// literally just another way to safeword
safeword()
/mob/living/carbon/human/verb/safeword()
set name = "OOC Safe Word"
set category = "OOC"
set desc = "Removes any and all lewd items from you."
SEND_SIGNAL(src, COMSIG_OOC_ESCAPE)
log_message("[key_name(src)] used the OOC Safe Word verb.", LOG_ATTACK)
for(var/obj/item/equipped_item in get_equipped_items())
if(!(equipped_item.type in GLOB.pref_checked_clothes))
continue
log_message("[equipped_item] was removed from [key_name(src)].", LOG_ATTACK)
dropItemToGround(equipped_item, TRUE)
// Leashes are treated a smidge different than the rest of the clothing; and need their own handling here.
var/leash_check = src?.GetComponent(/datum/component/leash/erp)
if(leash_check)
qdel(leash_check)
// Vore Edit
if(istype(loc, /obj/vore_belly))
forceMove(get_turf(src))
return TRUE
/mob/living/carbon/human/verb/lick(mob/living/carbon/human/target in get_adjacent_humans())
set name = "Lick"
set category = "IC"
if(!istype(target))
return FALSE
var/taste = target?.dna?.features["taste"]
if(!taste)
to_chat(src, span_warning("[target] doesn't seem to have a taste."))
return FALSE
to_chat(src, span_notice("[target] tastes like [taste]."))
to_chat(target, span_notice("[src] licks you."))
/mob/living/carbon/human/verb/smell(mob/living/carbon/human/target in get_adjacent_humans())
set name = "Smell"
set category = "IC"
if(!istype(target))
return FALSE
var/smell = target?.dna?.features["smell"]
if(!smell)
to_chat(src, span_warning("[target] doesn't seem to have a smell."))
return FALSE
to_chat(src, span_notice("[target] smells like [smell]."))
/// Returns a list containing all of the humans adjacent to the user.
/mob/living/proc/get_adjacent_humans()
var/list/nearby_humans = orange(1, src)
for(var/mob/living/carbon/human/nearby_human as anything in nearby_humans)
if(ishuman(nearby_human))
continue
nearby_humans -= nearby_human
return nearby_humans