This commit is contained in:
BlackMajor
2022-04-20 22:49:11 +12:00
parent beb962eac3
commit 119b70776f
19 changed files with 532 additions and 42 deletions
@@ -0,0 +1,43 @@
/// Allow admin to add or remove traits of datum
/datum/admins/proc/modify_traits(datum/D)
if(!D)
return
var/add_or_remove = input("Remove/Add?", "Trait Remove/Add") as null|anything in list("Add","Remove")
if(!add_or_remove)
return
var/list/availible_traits = list()
switch(add_or_remove)
if("Add")
for(var/key in GLOB.traits_by_type)
if(istype(D,key))
availible_traits += GLOB.traits_by_type[key]
if("Remove")
if(!GLOB.trait_name_map)
GLOB.trait_name_map = generate_trait_name_map()
for(var/trait in D.status_traits)
var/name = GLOB.trait_name_map[trait] || trait
availible_traits[name] = trait
var/chosen_trait = input("Select trait to modify", "Trait") as null|anything in availible_traits
if(!chosen_trait)
return
chosen_trait = availible_traits[chosen_trait]
var/source = "adminabuse"
switch(add_or_remove)
if("Add") //Not doing source choosing here intentionally to make this bit faster to use, you can always vv it.
ADD_TRAIT(D,chosen_trait,source)
if("Remove")
var/specific = input("All or specific source ?", "Trait Remove/Add") as null|anything in list("All","Specific")
if(!specific)
return
switch(specific)
if("All")
source = null
if("Specific")
source = input("Source to be removed","Trait Remove/Add") as null|anything in D.status_traits[chosen_trait]
if(!source)
return
REMOVE_TRAIT(D,chosen_trait,source)
@@ -0,0 +1,3 @@
/obj/item/weapon/rig
var/protean = 0
var/obj/item/weapon/storage/backpack/rig_storage
@@ -84,7 +84,7 @@
/obj/item/organ/internal/nano/orchestrator
name = "orchestrator module"
desc = "A small computer, designed for highly parallel workloads."
icon = 'icons/mob/species/protean/protean.dmi'
icon = 'modular_chomp/icons/mob/species/protean/protean.dmi'
icon_state = "orchestrator"
organ_tag = O_ORCH
parent_organ = BP_TORSO
@@ -96,7 +96,7 @@
/obj/item/organ/internal/nano/refactory
name = "refactory module"
desc = "A miniature metal processing unit and nanite factory."
icon = 'icons/mob/species/protean/protean.dmi'
icon = 'modular_chomp/icons/mob/species/protean/protean.dmi'
icon_state = "refactory"
organ_tag = O_FACT
parent_organ = BP_TORSO
@@ -144,7 +144,7 @@
/obj/item/organ/internal/mmi_holder/posibrain/nano
name = "protean posibrain"
desc = "A more advanced version of the standard posibrain, typically found in protean bodies."
icon = 'icons/mob/species/protean/protean.dmi'
icon = 'modular_chomp/icons/mob/species/protean/protean.dmi'
icon_state = "posi"
parent_organ = BP_TORSO
@@ -171,7 +171,7 @@
/obj/item/device/mmi/digital/posibrain/nano
name = "protean posibrain"
desc = "A more advanced version of the standard posibrain, typically found in protean bodies."
icon = 'icons/mob/species/protean/protean.dmi'
icon = 'modular_chomp/icons/mob/species/protean/protean.dmi'
icon_state = "posi"
/obj/item/device/mmi/digital/posibrain/nano/Initialize()
@@ -90,7 +90,7 @@
set desc = "Allows you to regrow limbs and replace organs."
set category = "Abilities"
set hidden = TRUE
if(nutrition < 250)
to_chat(src, "<span class='warning'>You lack the energy to begin regeneration!</span>")
return
@@ -324,7 +324,7 @@
visible_message("<span class='notice'>[src] devours some of the [substance] right off the stack!</span>")
else
to_chat(src,"<span class='notice'>You're completely capped out on [substance]!</span>")
////
// Blob Form
////
@@ -338,7 +338,7 @@
if(!isturf(to_locate.loc))
to_chat(to_locate,"<span class='warning'>You need more space to perform this action!</span>")
return
//Blob form
if(temporary_form)
if(health < maxHealth*0.5)
@@ -478,13 +478,11 @@ CHOMP Removal end*/
icon_state = "blob"
to_call = /mob/living/carbon/human/proc/nano_blobform
/*CHOMP removal start - This doesn't do anything at all now. Normal resize proc is being used instead.
/obj/effect/protean_ability/change_volume //CHOMP Edit
/obj/effect/protean_ability/change_volume
ability_name = "Change Volume"
desc = "Alter your size between 25% and 200%." //CHOMP Edit - Removed talk about requiring metal
desc = "Alter your size between 25% and 200%."
icon_state = "volume"
to_call = /mob/living/carbon/human/proc/nano_set_size
CHOMP removal end*/
to_call = /mob/living/proc/set_size
/obj/effect/protean_ability/reform_limb
ability_name = "Ref - Single Limb"
@@ -497,11 +495,17 @@ CHOMP removal end*/
desc = "Rebuild your entire body into whatever design you want, assuming you have 10,000 metal."
icon_state = "body"
to_call = /mob/living/carbon/human/proc/nano_regenerate
/obj/effect/protean_ability/metal_nom
ability_name = "Ref - Store Metals"
desc = "Store the metal you're holding. Your refactory can only store steel, and all other metals will be converted into nanites ASAP for various effects."
icon_state = "metal"
to_call = /mob/living/carbon/human/proc/nano_metalnom
/obj/effect/protean_ability/metal_nom
ability_name = "Hardsuit Transform"
desc = "Coalesce your naniteswarm into their control module, allowing others to wear you."
icon_state = "rig"
to_call = /mob/living/carbon/human/proc/nano_metalnom
#undef PER_LIMB_STEEL_COST
@@ -19,6 +19,8 @@
boot_type = /obj/item/clothing/shoes/magboots/rig/protean
chest_type = /obj/item/clothing/suit/space/rig/protean
glove_type = /obj/item/clothing/gloves/gauntlets/rig/protean
canremove = 0
protean = 1
//I doooon't think I can get rig_back.dmi as a _ch file. That is part of /obj/item/weapon/rig/update_icon(var/update_mob_icon).
@@ -32,6 +34,35 @@
return TRUE
return ..()
/obj/item/weapon/rig/protean/New(var/newloc, var/mob/living/carbon/human/P)
if(P)
myprotean = P
if(P.back)
addtimer(CALLBACK(src, .proc/AssimilateBag, P), 5)
else
to_chat(P, "Couldn't find a backpack to assimilate.")
..(newloc)
/obj/item/weapon/rig/protean/proc/AssimilateBag(var/mob/living/carbon/human/P)
var/obj/B = P.back
P.unEquip(P.back)
B.forceMove(src)
rig_storage = B
to_chat(P, "Your equipped backpack has been integrated into your rigsuit. See the storage module in your rig interface.")
P.equip_to_slot_if_possible(src, slot_back)
/obj/item/weapon/rig/protean/attack_hand(mob/user as mob)
if (src.loc == user)
src.rig_storage.open(user)
else
..()
for(var/mob/M in range(1))
if (M.s_active == src)
src.rig_storage.close(M)
src.add_fingerprint(user)
return
/obj/item/clothing/head/helmet/space/rig/protean
name = "mass"
desc = "A helmet-shaped clump of nanomachines."
@@ -34,11 +34,8 @@
blood_volume = 0
min_age = 18
max_age = 200
brute_mod = 1
burn_mod = 1
oxy_mod = 0
radiation_mod = 0 //Can't be assed with fandangling rad protections while blob formed/suited
item_slowdown_mod = 1
hazard_low_pressure = -1 //Space doesn't bother them
hazard_high_pressure = INFINITY //consistency
@@ -53,7 +50,6 @@
body_temperature = 290
siemens_coefficient = 1
rarity_value = 5
genders = list(MALE, FEMALE, PLURAL, NEUTER)
@@ -96,12 +92,7 @@
/mob/living/carbon/human/proc/shapeshifter_select_wings,
/mob/living/carbon/human/proc/shapeshifter_select_tail,
/mob/living/carbon/human/proc/shapeshifter_select_ears,
/mob/living/carbon/human/proc/succubus_drain,
/mob/living/carbon/human/proc/slime_feed,
/mob/living/carbon/human/proc/succubus_drain_finalize,
/mob/living/carbon/human/proc/succubus_drain_lethal,
/mob/living/proc/eat_trash
) //CHOMP Edit - Added succ stuff that promies have too. Also changed nano_set_size to standard set_size so there is no metal cost.
) //removed fetish verbs, since non-customs can pick neutral traits now
var/global/list/abilities = list()
@@ -156,8 +147,7 @@
else
H.nif.durability = 25
var/obj/item/weapon/rig/protean/prig = new /obj/item/weapon/rig/protean(H)
prig.myprotean = H
new /obj/item/weapon/rig/protean(H,H)
/datum/species/protean/hug(var/mob/living/carbon/human/H, var/mob/living/target)
return ..() //Wut
@@ -179,10 +169,6 @@
to_chat(H, "<span class='warning'>You died as a Protean. Please sit out of the round for at least 5 or 10 minutes before respawning, to represent the time it would take to ship a new-you to the station, depending on how you died.</span>")
spawn(1)
if(H)
H.gib()
/datum/species/protean/handle_environment_special(var/mob/living/carbon/human/H)
if((H.getActualBruteLoss() + H.getActualFireLoss()) > H.maxHealth*0.5 && isturf(H.loc)) //So, only if we're not a blob (we're in nullspace) or in someone (or a locker, really, but whatever)
return ..() //Any instakill shot runtimes since there are no organs after this. No point to not skip these checks, going to nullspace anyway.
@@ -333,7 +319,7 @@ CHOMP Removal end*/
/obj/item/clothing/accessory/permit/nanotech
name = "\improper P.A.N. card"
desc = "This is a 'Permit for Advanced Nanotechnology' card. It allows the owner to possess and operate advanced nanotechnology on NanoTrasen property. It must be renewed on a monthly basis."
icon = 'icons/mob/species/protean/protean.dmi'
icon = 'modular_chomp/icons/mob/species/protean/protean.dmi'
icon_state = "permit_pan"
var/validstring = "VALID THROUGH END OF: "