diff --git a/code/game/gamemodes/changeling/powers/biodegrade.dm b/code/game/gamemodes/changeling/powers/biodegrade.dm new file mode 100644 index 00000000000..5e4b0e7fa12 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/biodegrade.dm @@ -0,0 +1,82 @@ +/obj/effect/proc_holder/changeling/biodegrade + name = "Biodegrade" + desc = "Dissolves restraints or other objects preventing free movement." + helptext = "This is obvious to nearby people, and can destroy standard restraints and closets." + chemical_cost = 30 //High cost to prevent spam + dna_cost = 2 + req_human = 1 + +/obj/effect/proc_holder/changeling/biodegrade/sting_action(mob/living/carbon/human/user) + var/used = FALSE // only one form of shackles removed per use + if(!user.restrained() && !istype(user.loc, /obj/structure/closet) && !istype(user.loc, /obj/structure/spider/cocoon)) + to_chat(user, "We are already free!") + return FALSE + + if(user.handcuffed) + var/obj/O = user.get_item_by_slot(slot_handcuffed) + if(!istype(O)) + return FALSE + user.visible_message("[user] vomits a glob of acid on \his [O]!", \ + "We vomit acidic ooze onto our restraints!") + addtimer(src, "dissolve_handcuffs", 30, FALSE, user, O) + used = TRUE + + if(user.wear_suit && user.wear_suit.breakouttime && !used) + var/obj/item/clothing/suit/S = user.get_item_by_slot(slot_wear_suit) + if(!istype(S)) + return FALSE + user.visible_message("[user] vomits a glob of acid across the front of \his [S]!", \ + "We vomit acidic ooze onto our straight jacket!") + addtimer(src, "dissolve_straightjacket", 30, FALSE, user, S) + used = TRUE + + + if(istype(user.loc, /obj/structure/closet) && !used) + var/obj/structure/closet/C = user.loc + if(!istype(C)) + return FALSE + C.visible_message("[C]'s hinges suddenly begin to melt and run!") + to_chat(user, "We vomit acidic goop onto the interior of [C]!") + addtimer(src, "open_closet", 70, FALSE, user, C) + used = TRUE + + if(istype(user.loc, /obj/structure/spider/cocoon) && !used) + var/obj/structure/spider/cocoon/C = user.loc + if(!istype(C)) + return FALSE + C.visible_message("[src] shifts and starts to fall apart!") + to_chat(user, "We secrete acidic enzymes from our skin and begin melting our cocoon...") + addtimer(src, "dissolve_cocoon", 25, FALSE, user, C) //Very short because it's just webs + used = TRUE + + if(used) + feedback_add_details("changeling_powers","BD") + return TRUE + +/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_handcuffs(mob/living/carbon/human/user, obj/O) + if(O && user.handcuffed == O) + user.unEquip(O) + O.visible_message("[O] dissolves into a puddle of sizzling goop.") + O.forceMove(get_turf(user)) + qdel(O) + +/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_straightjacket(mob/living/carbon/human/user, obj/S) + if(S && user.wear_suit == S) + user.unEquip(S) + S.visible_message("[S] dissolves into a puddle of sizzling goop.") + S.forceMove(get_turf(user)) + qdel(S) + +/obj/effect/proc_holder/changeling/biodegrade/proc/open_closet(mob/living/carbon/human/user, obj/structure/closet/C) + if(C && user.loc == C) + C.visible_message("[C]'s door breaks and opens!") + C.welded = FALSE + C.locked = FALSE + C.broken = TRUE + C.open() + to_chat(user, "We open the container restraining us!") + +/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_cocoon(mob/living/carbon/human/user, obj/structure/spider/cocoon/C) + if(C && user.loc == C) + qdel(C) //The cocoon's destroy will move the changeling outside of it without interference + to_chat(user, "We dissolve the cocoon!") diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index d5b966c7d98..e989cea7e85 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -8,6 +8,8 @@ var/icon_opened = "open" var/opened = 0 var/welded = 0 + var/locked = 0 + var/broken = 0 var/wall_mounted = 0 //never solid (You can always pass over it) var/health = 100 var/lastbang diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index aeb8101fc75..5baef28f262 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -11,7 +11,7 @@ var/localopened = 0 //Setting this to keep it from behaviouring like a normal closet and obstructing movement in the map. -Agouri opened = 1 var/hitstaken = 0 - var/locked = 1 + locked = 1 var/smashed = 0 attackby(var/obj/item/O as obj, var/mob/living/user as mob) //Marker -Agouri diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 19dc1622ffe..72ef10a5cde 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -5,8 +5,8 @@ icon_state = "secure1" density = 1 opened = 0 - var/locked = 1 - var/broken = 0 + locked = 1 + broken = 0 var/large = 1 icon_closed = "secure" var/icon_locked = "secure1" diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 5396ac46e6b..66132aa9b8b 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -242,8 +242,8 @@ var/greenlight = "securecrateg" var/sparks = "securecratesparks" var/emag = "securecrateemag" - var/broken = 0 - var/locked = 1 + broken = 0 + locked = 1 health = 1000 /obj/structure/closet/crate/secure/update_icon() diff --git a/paradise.dme b/paradise.dme index ca07f96d54f..96e55cfe1cd 100644 --- a/paradise.dme +++ b/paradise.dme @@ -408,6 +408,7 @@ #include "code\game\gamemodes\changeling\traitor_chan.dm" #include "code\game\gamemodes\changeling\powers\absorb.dm" #include "code\game\gamemodes\changeling\powers\augmented_eyesight.dm" +#include "code\game\gamemodes\changeling\powers\biodegrade.dm" #include "code\game\gamemodes\changeling\powers\chameleon_skin.dm" #include "code\game\gamemodes\changeling\powers\digitalcamo.dm" #include "code\game\gamemodes\changeling\powers\epinephrine.dm" @@ -417,6 +418,7 @@ #include "code\game\gamemodes\changeling\powers\hivemind.dm" #include "code\game\gamemodes\changeling\powers\humanform.dm" #include "code\game\gamemodes\changeling\powers\lesserform.dm" +#include "code\game\gamemodes\changeling\powers\linglink.dm" #include "code\game\gamemodes\changeling\powers\mimic_voice.dm" #include "code\game\gamemodes\changeling\powers\mutations.dm" #include "code\game\gamemodes\changeling\powers\panacea.dm"