mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 02:09:41 +00:00
[MIRROR] Adds Trait Genetics (#10142)
Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
d81e145924
commit
7bfffc808d
@@ -139,6 +139,7 @@
|
||||
M.radiation += 50
|
||||
randmutb(M)
|
||||
domutcheck(M,null)
|
||||
M.UpdateAppearance()
|
||||
visible_message("\The [src.name] flashes violently before disintegrating!")
|
||||
spawn(0)
|
||||
qdel(s)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
GLOBAL_LIST_EMPTY(mapped_autostrips)
|
||||
GLOBAL_LIST_EMPTY(mapped_autostrips_mob)
|
||||
/* Simple object type, calls a proc when "stepped" on by something */
|
||||
|
||||
/obj/effect/step_trigger
|
||||
@@ -283,3 +285,95 @@ var/global/list/tele_landmarks = list() // Terrible, but the alternative is loop
|
||||
|
||||
/obj/effect/step_trigger/warning/train_edge
|
||||
warningmessage = "The wind billowing alongside the train is extremely strong here! Any movement could easily pull you down beneath the carriages, return to the train immediately!"
|
||||
|
||||
/*
|
||||
This should actually be refactored if it ever needs to be used again into just being
|
||||
an event controller with more graceful solutions.
|
||||
Creating lockers was not graceful, in practice, and creates clutter, for example.
|
||||
Repurpose this idea into a self contained machine in the future that stores and auto-equips someones gear.
|
||||
|
||||
But for now, for what it's been used for, it works.
|
||||
|
||||
*/
|
||||
|
||||
//Admin tool to automatically strip a human victim of all their equipment and genetics powers, and store them in a closet.
|
||||
//Equips Vox/Zaddat survival gear, and a few basic pieces of clothing
|
||||
/obj/effect/step_trigger/autostrip
|
||||
name = "Autostrip trigger. Set the targetid to match the effect/autostriptarget"
|
||||
var/targetid = "Default"
|
||||
var/obj/effect/autostriptarget/target
|
||||
var/obj/effect/autostriptarget/mob/Mtarget
|
||||
var/remove_implants = 0 //Havn't bothered to implement this yet
|
||||
var/remove_mutations = 0
|
||||
|
||||
/obj/effect/step_trigger/autostrip/Initialize(mapload)
|
||||
. = ..()
|
||||
initMappedLink()
|
||||
|
||||
/obj/effect/step_trigger/autostrip/Trigger(mob/living/carbon/human/H as mob)
|
||||
if(!istype(H))
|
||||
return
|
||||
if(!target)
|
||||
if(!initMappedLink())
|
||||
return
|
||||
if(Mtarget)
|
||||
H.forceMove(Mtarget.loc)
|
||||
var/obj/locker = new /obj/structure/closet/secure_closet/mind(target.loc, mind_target = H.mind)
|
||||
for(var/obj/item/W in H)
|
||||
if(istype(W, /obj/item/implant/backup || istype(W, /obj/item/nif)))
|
||||
continue
|
||||
if(H.drop_from_inventory(W))
|
||||
W.forceMove(locker)
|
||||
|
||||
// Traitgenes new remove genes code, didn't want to solve per-trait unique mutation shenanigans... So we just strip your entire genome. This is an admin anti-powergaming tool anyway.
|
||||
if(remove_mutations)
|
||||
for(var/datum/gene/gene in GLOB.dna_genes)
|
||||
if(gene.name in H.active_genes)
|
||||
// Setup injector
|
||||
var/obj/item/dnainjector/D = new /obj/item/dnainjector(locker)
|
||||
D.name = initial(D.name) + " - RESTORE: [gene.name]" //lazy, but we may as well support base genes... even if unused...
|
||||
D.block = gene.block
|
||||
D.buf.types = DNA2_BUF_SE
|
||||
D.SetValue( H.dna.GetSEValue(gene.block) ) // Get original block's value for the injector
|
||||
D.has_radiation = FALSE // safe to use these!
|
||||
// Turn off gene
|
||||
H.dna.SetSEState(gene.block,0)
|
||||
domutcheck(H,null,MUTCHK_FORCED)
|
||||
H.UpdateAppearance()
|
||||
if(H.species.name == SPECIES_VOX || SPECIES_ZADDAT) //Species that 'actually' require survival gear to live. The rest don't.
|
||||
H.species.equip_survival_gear(H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/chameleon(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/radio/headset(H),slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/permit(H), slot_l_hand)
|
||||
|
||||
|
||||
/obj/effect/step_trigger/autostrip/proc/initMappedLink()
|
||||
. = FALSE
|
||||
target = GLOB.mapped_autostrips[targetid]
|
||||
Mtarget = GLOB.mapped_autostrips_mob[targetid]
|
||||
if(target)
|
||||
. = TRUE
|
||||
|
||||
/obj/effect/autostriptarget
|
||||
name = "Autostrip target. Link me via targetid to an autostrip trigger."
|
||||
icon = 'icons/mob/screen1.dmi'
|
||||
icon_state = "no_item1"
|
||||
var/targetid = "Default"
|
||||
unacidable = 1
|
||||
layer = 99
|
||||
anchored = 1
|
||||
invisibility = 99
|
||||
|
||||
|
||||
/obj/effect/autostriptarget/Initialize(mapload)
|
||||
. = ..()
|
||||
if(targetid)
|
||||
GLOB.mapped_autostrips[targetid] = src
|
||||
|
||||
/obj/effect/autostriptarget/mob
|
||||
name = "Autostrip target to send mobs to."
|
||||
|
||||
/obj/effect/autostriptarget/mob/Initialize(mapload)
|
||||
if(targetid)
|
||||
GLOB.mapped_autostrips_mob[targetid] = src
|
||||
|
||||
@@ -1062,6 +1062,7 @@ closest to where the cursor has clicked on.
|
||||
Note: This proc can be overwritten to allow for different types of auto-alignment.
|
||||
*/
|
||||
|
||||
|
||||
/obj/item/var/center_of_mass_x = 16
|
||||
/obj/item/var/center_of_mass_y = 16
|
||||
|
||||
|
||||
@@ -171,13 +171,13 @@
|
||||
playsound(src, 'sound/weapons/flash.ogg', 100, 1)
|
||||
var/flashfail = 0
|
||||
|
||||
//VOREStation Add - NIF
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.nif && H.nif.flag_check(NIF_V_FLASHPROT,NIF_FLAGS_VISION))
|
||||
flashfail = 1
|
||||
H.nif.notify("High intensity light detected, and blocked!",TRUE)
|
||||
//VOREStation Add End
|
||||
if(FLASHPROOF in H.mutations)
|
||||
flashfail = 1
|
||||
|
||||
if(iscarbon(M) && !flashfail) //VOREStation Add - NIF
|
||||
var/mob/living/carbon/C = M
|
||||
|
||||
@@ -92,7 +92,6 @@
|
||||
if(!(M.status_flags & FAKEDEATH))
|
||||
analyzed_results = span_notice(analyzed_results)
|
||||
dat += analyzed_results
|
||||
//VOREStation edit/addition starts
|
||||
if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
|
||||
dat += span_notice("Time of Death: [worldtime2stationtime(M.timeofdeath)]")
|
||||
dat += "<br>"
|
||||
@@ -100,7 +99,6 @@
|
||||
if(tdelta < (DEFIB_TIME_LIMIT * 10))
|
||||
dat += span_boldnotice("Subject died [DisplayTimeText(tdelta)] ago - resuscitation may be possible!")
|
||||
dat += "<br>"
|
||||
//VOREStation edit/addition ends
|
||||
if(ishuman(M) && mode == 1)
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/list/damaged = H.get_damaged_organs(1,1)
|
||||
@@ -118,6 +116,17 @@
|
||||
else
|
||||
dat += span_notice(" Limbs are OK.")
|
||||
dat += "<br>"
|
||||
// This handles genetic side effects and tells you the treatment, if any.
|
||||
// These are handled in side_effects.dm
|
||||
if(H.genetic_side_effects)
|
||||
for(var/datum/genetics/side_effect/side_effect in H.genetic_side_effects)
|
||||
var/datum/reagent/Rd = SSchemistry.chemical_reagents[side_effect.antidote_reagent]
|
||||
dat += "<br>"
|
||||
dat += span_danger("Patient is suffering from [side_effect.name]. ")
|
||||
if(Rd)
|
||||
dat += span_danger("Treatment: [Rd]<br>")
|
||||
else
|
||||
dat += "There is no known treatment.<br>"
|
||||
|
||||
OX = M.getOxyLoss() > 50 ? "[span_cyan(span_bold("Severe oxygen deprivation detected"))]" : "Subject bloodstream oxygen level normal"
|
||||
TX = M.getToxLoss() > 50 ? "[span_green(span_bold("Dangerous amount of toxins detected"))]" : "Subject bloodstream toxin level minimal"
|
||||
|
||||
@@ -5,21 +5,22 @@
|
||||
icon_state = "dnainjector"
|
||||
var/block=0
|
||||
var/datum/dna2/record/buf=null
|
||||
var/s_time = 10.0
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_EARS
|
||||
var/uses = 1
|
||||
var/nofail
|
||||
var/is_bullet = 0
|
||||
var/inuse = 0
|
||||
|
||||
// USE ONLY IN PREMADE SYRINGES. WILL NOT WORK OTHERWISE.
|
||||
var/datatype=0
|
||||
var/value=0
|
||||
|
||||
/obj/item/dnainjector/New()
|
||||
// Traitgenes edit begin - Removed subtype, replaced with flag. Allows for safe injectors. Mostly for admin usage.
|
||||
var/has_radiation = TRUE
|
||||
// Traitgenes edit end
|
||||
|
||||
/obj/item/dnainjector/Initialize() // Traitgenes edit - Moved to init
|
||||
if(datatype && block)
|
||||
buf=new
|
||||
buf.dna=new
|
||||
@@ -28,6 +29,7 @@
|
||||
//testing("[name]: DNA2 SE blocks prior to SetValue: [english_list(buf.dna.SE)]")
|
||||
SetValue(src.value)
|
||||
//testing("[name]: DNA2 SE blocks after SetValue: [english_list(buf.dna.SE)]")
|
||||
. = ..() // Traitgenes edit - Moved to init
|
||||
|
||||
/obj/item/dnainjector/proc/GetRealBlock(var/selblock)
|
||||
if(selblock==0)
|
||||
@@ -64,38 +66,54 @@
|
||||
return buf.dna.SetUIValue(real_block,val)
|
||||
|
||||
/obj/item/dnainjector/proc/inject(mob/M as mob, mob/user as mob)
|
||||
if(isliving(M))
|
||||
if(isliving(M) && has_radiation)
|
||||
var/mob/living/L = M
|
||||
L.apply_effect(rand(5,20), IRRADIATE, check_protection = 0)
|
||||
L.apply_damage(max(2,L.getCloneLoss()), CLONE)
|
||||
|
||||
if (!(NOCLONE in M.mutations)) // prevents drained people from having their DNA changed
|
||||
if (buf.types & DNA2_BUF_UI)
|
||||
if (!block) //isolated block?
|
||||
M.UpdateAppearance(buf.dna.UI.Copy())
|
||||
if (buf.types & DNA2_BUF_UE) //unique enzymes? yes
|
||||
M.real_name = buf.dna.real_name
|
||||
M.name = buf.dna.real_name
|
||||
// Traitgenes edit begin - NO_SCAN and Synthetics cannot be mutated
|
||||
var/allow = TRUE
|
||||
if(M.isSynthetic())
|
||||
allow = FALSE
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.species || H.species.flags & NO_SCAN)
|
||||
allow = FALSE
|
||||
// Traitgenes edit end
|
||||
if (!(NOCLONE in M.mutations) && allow) // prevents drained people from having their DNA changed, Traitgenes edit - NO_SCAN and Synthetics cannot be mutated
|
||||
if(buf)
|
||||
if (buf.types & DNA2_BUF_UI)
|
||||
if (!block) //isolated block?
|
||||
M.UpdateAppearance(buf.dna.UI.Copy())
|
||||
if (buf.types & DNA2_BUF_UE) //unique enzymes? yes
|
||||
M.real_name = buf.dna.real_name
|
||||
M.name = buf.dna.real_name
|
||||
uses--
|
||||
else
|
||||
M.dna.SetUIValue(block,src.GetValue())
|
||||
M.UpdateAppearance()
|
||||
uses--
|
||||
if (buf.types & DNA2_BUF_SE)
|
||||
if (!block) //isolated block?
|
||||
M.dna.SE = buf.dna.SE.Copy()
|
||||
M.dna.UpdateSE()
|
||||
else
|
||||
M.dna.SetSEValue(block,src.GetValue())
|
||||
uses--
|
||||
else
|
||||
M.dna.SetUIValue(block,src.GetValue())
|
||||
M.UpdateAppearance()
|
||||
uses--
|
||||
if (buf.types & DNA2_BUF_SE)
|
||||
if (!block) //isolated block?
|
||||
M.dna.SE = buf.dna.SE.Copy()
|
||||
M.dna.UpdateSE()
|
||||
else
|
||||
M.dna.SetSEValue(block,src.GetValue())
|
||||
domutcheck(M, null, block!=null)
|
||||
uses--
|
||||
if(prob(5))
|
||||
trigger_side_effect(M)
|
||||
// Traitgenes edit - Moved gene checks to after side effects
|
||||
if(prob(5))
|
||||
trigger_side_effect(M)
|
||||
// Traitgenes edit begin - Do gene updates here, and more comprehensively
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.sync_dna_traits(FALSE,FALSE)
|
||||
H.sync_organ_dna()
|
||||
M.regenerate_icons()
|
||||
// Traitgenes edit end
|
||||
|
||||
spawn(0)//this prevents the collapse of space-time continuum
|
||||
if (user)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
if (user)
|
||||
user.drop_from_inventory(src)
|
||||
INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src)
|
||||
return uses
|
||||
|
||||
/obj/item/dnainjector/attack(mob/M as mob, mob/user as mob)
|
||||
@@ -103,18 +121,19 @@
|
||||
return
|
||||
if (!user.IsAdvancedToolUser())
|
||||
return
|
||||
if(inuse)
|
||||
return 0
|
||||
if (in_use)
|
||||
return
|
||||
|
||||
user.visible_message(span_danger("\The [user] is trying to inject \the [M] with \the [src]!"))
|
||||
inuse = 1
|
||||
s_time = world.time
|
||||
spawn(50)
|
||||
inuse = 0
|
||||
in_use = TRUE
|
||||
|
||||
//addtimer(VARSET_CALLBACK(src, in_use , FALSE), 5 SECONDS, TIMER_DELETE_ME) //Leaving this for reference of how to do the timer here if do_after wasn't present.
|
||||
|
||||
if(!do_after(user,50))
|
||||
in_use = FALSE
|
||||
return
|
||||
|
||||
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
user.do_attack_animation(M)
|
||||
|
||||
@@ -125,454 +144,209 @@
|
||||
to_chat(user, span_warning("Apparently it didn't work..."))
|
||||
return
|
||||
|
||||
// Used by admin log.
|
||||
var/injected_with_monkey = ""
|
||||
if((buf.types & DNA2_BUF_SE) && (block ? (GetState() && block == MONKEYBLOCK) : GetState(MONKEYBLOCK)))
|
||||
injected_with_monkey = span_danger("(MONKEY)")
|
||||
|
||||
add_attack_logs(user,M,"[injected_with_monkey] used the [name] on")
|
||||
|
||||
// Apply the DNA shit.
|
||||
inject(M, user)
|
||||
return
|
||||
|
||||
/obj/item/dnainjector/hulkmut
|
||||
name = "\improper DNA injector (Hulk)"
|
||||
desc = "This will make you big and strong, but give you a bad skin condition."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/hulkmut/New()
|
||||
block = HULKBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antihulk
|
||||
name = "\improper DNA injector (Anti-Hulk)"
|
||||
desc = "Cures green skin."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antihulk/New()
|
||||
block = HULKBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/xraymut
|
||||
name = "\improper DNA injector (Xray)"
|
||||
desc = "Finally you can see what the " + JOB_SITE_MANAGER + " does."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/xraymut/New()
|
||||
block = XRAYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antixray
|
||||
name = "\improper DNA injector (Anti-Xray)"
|
||||
desc = "It will make you see harder."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antixray/New()
|
||||
block = XRAYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/firemut
|
||||
name = "\improper DNA injector (Fire)"
|
||||
desc = "Gives you fire."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/firemut/New()
|
||||
block = FIREBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antifire
|
||||
name = "\improper DNA injector (Anti-Fire)"
|
||||
desc = "Cures fire."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antifire/New()
|
||||
block = FIREBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/telemut
|
||||
name = "\improper DNA injector (Tele.)"
|
||||
desc = "Super brain man!"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/telemut/New()
|
||||
block = TELEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antitele
|
||||
name = "\improper DNA injector (Anti-Tele.)"
|
||||
desc = "Will make you not able to control your mind."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antitele/New()
|
||||
block = TELEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/nobreath
|
||||
name = "\improper DNA injector (No Breath)"
|
||||
desc = "Hold your breath and count to infinity."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/nobreath/New()
|
||||
block = NOBREATHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antinobreath
|
||||
name = "\improper DNA injector (Anti-No Breath)"
|
||||
desc = "Hold your breath and count to 100."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antinobreath/New()
|
||||
block = NOBREATHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/remoteview
|
||||
name = "\improper DNA injector (Remote View)"
|
||||
desc = "Stare into the distance for a reason."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/remoteview/New()
|
||||
block = REMOTEVIEWBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antiremoteview
|
||||
name = "\improper DNA injector (Anti-Remote View)"
|
||||
desc = "Cures green skin."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antiremoteview/New()
|
||||
block = REMOTEVIEWBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/regenerate
|
||||
name = "\improper DNA injector (Regeneration)"
|
||||
desc = "Healthy but hungry."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/regenerate/New()
|
||||
block = REGENERATEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antiregenerate
|
||||
name = "\improper DNA injector (Anti-Regeneration)"
|
||||
desc = "Sickly but sated."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antiregenerate/New()
|
||||
block = REGENERATEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/runfast
|
||||
name = "\improper DNA injector (Increase Run)"
|
||||
desc = "Running Man."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/runfast/New()
|
||||
block = INCREASERUNBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antirunfast
|
||||
name = "\improper DNA injector (Anti-Increase Run)"
|
||||
desc = "Walking Man."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antirunfast/New()
|
||||
block = INCREASERUNBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/morph
|
||||
name = "\improper DNA injector (Morph)"
|
||||
desc = "A total makeover."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/morph/New()
|
||||
block = MORPHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antimorph
|
||||
name = "\improper DNA injector (Anti-Morph)"
|
||||
desc = "Cures identity crisis."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antimorph/New()
|
||||
block = MORPHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/noprints
|
||||
name = "\improper DNA injector (No Prints)"
|
||||
desc = "Better than a pair of budget insulated gloves."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/noprints/New()
|
||||
block = NOPRINTSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antinoprints
|
||||
name = "\improper DNA injector (Anti-No Prints)"
|
||||
desc = "Not quite as good as a pair of budget insulated gloves."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antinoprints/New()
|
||||
block = NOPRINTSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/insulation
|
||||
name = "\improper DNA injector (Shock Immunity)"
|
||||
desc = "Better than a pair of real insulated gloves."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/insulation/New()
|
||||
block = SHOCKIMMUNITYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antiinsulation
|
||||
name = "\improper DNA injector (Anti-Shock Immunity)"
|
||||
desc = "Not quite as good as a pair of real insulated gloves."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antiinsulation/New()
|
||||
block = SHOCKIMMUNITYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/midgit
|
||||
name = "\improper DNA injector (Small Size)"
|
||||
desc = "Makes you shrink."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/midgit/New()
|
||||
block = SMALLSIZEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antimidgit
|
||||
name = "\improper DNA injector (Anti-Small Size)"
|
||||
desc = "Makes you grow. But not too much."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antimidgit/New()
|
||||
block = SMALLSIZEBLOCK
|
||||
..()
|
||||
|
||||
/////////////////////////////////////
|
||||
/obj/item/dnainjector/antiglasses
|
||||
name = "\improper DNA injector (Anti-Glasses)"
|
||||
desc = "Toss away those glasses!"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antiglasses/New()
|
||||
block = GLASSESBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/glassesmut
|
||||
name = "\improper DNA injector (Glasses)"
|
||||
desc = "Will make you need dorkish glasses."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/glassesmut/New()
|
||||
block = GLASSESBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/epimut
|
||||
name = "\improper DNA injector (Epi.)"
|
||||
desc = "Shake shake shake the room!"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/epimut/New()
|
||||
block = HEADACHEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antiepi
|
||||
name = "\improper DNA injector (Anti-Epi.)"
|
||||
desc = "Will fix you up from shaking the room."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antiepi/New()
|
||||
block = HEADACHEBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/anticough
|
||||
name = "\improper DNA injector (Anti-Cough)"
|
||||
desc = "Will stop that awful noise."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/anticough/New()
|
||||
block = COUGHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/coughmut
|
||||
name = "\improper DNA injector (Cough)"
|
||||
desc = "Will bring forth a sound of horror from your throat."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/coughmut/New()
|
||||
block = COUGHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/clumsymut
|
||||
name = "\improper DNA injector (Clumsy)"
|
||||
desc = "Makes clumsy minions."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/clumsymut/New()
|
||||
block = CLUMSYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/anticlumsy
|
||||
name = "\improper DNA injector (Anti-Clumy)"
|
||||
desc = "Cleans up confusion."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/anticlumsy/New()
|
||||
block = CLUMSYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antitour
|
||||
name = "\improper DNA injector (Anti-Tour.)"
|
||||
desc = "Will cure tourrets."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antitour/New()
|
||||
block = TWITCHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/tourmut
|
||||
name = "\improper DNA injector (Tour.)"
|
||||
desc = "Gives you a nasty case off tourrets."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/tourmut/New()
|
||||
block = TWITCHBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/stuttmut
|
||||
name = "\improper DNA injector (Stutt.)"
|
||||
desc = "Makes you s-s-stuttterrr"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/stuttmut/New()
|
||||
block = NERVOUSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antistutt
|
||||
name = "\improper DNA injector (Anti-Stutt.)"
|
||||
desc = "Fixes that speaking impairment."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antistutt/New()
|
||||
block = NERVOUSBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/blindmut
|
||||
name = "\improper DNA injector (Blind)"
|
||||
desc = "Makes you not see anything."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/blindmut/New()
|
||||
block = BLINDBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antiblind
|
||||
name = "\improper DNA injector (Anti-Blind)"
|
||||
desc = "ITS A MIRACLE!!!"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antiblind/New()
|
||||
block = BLINDBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/deafmut
|
||||
name = "\improper DNA injector (Deaf)"
|
||||
desc = "Sorry, what did you say?"
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/deafmut/New()
|
||||
block = DEAFBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antideaf
|
||||
name = "\improper DNA injector (Anti-Deaf)"
|
||||
desc = "Will make you hear once more."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antideaf/New()
|
||||
block = DEAFBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/hallucination
|
||||
name = "\improper DNA injector (Halluctination)"
|
||||
desc = "What you see isn't always what you get."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/hallucination/New()
|
||||
block = HALLUCINATIONBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/antihallucination
|
||||
name = "\improper DNA injector (Anti-Hallucination)"
|
||||
desc = "What you see is what you get."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/antihallucination/New()
|
||||
block = HALLUCINATIONBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/h2m
|
||||
name = "\improper DNA injector (Human > Monkey)"
|
||||
desc = "Will make you a flea bag."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0xFFF
|
||||
|
||||
/obj/item/dnainjector/h2m/New()
|
||||
block = MONKEYBLOCK
|
||||
..()
|
||||
|
||||
/obj/item/dnainjector/m2h
|
||||
name = "\improper DNA injector (Monkey > Human)"
|
||||
desc = "Will make you...less hairy."
|
||||
datatype = DNA2_BUF_SE
|
||||
value = 0x001
|
||||
|
||||
/obj/item/dnainjector/m2h/New()
|
||||
block = MONKEYBLOCK
|
||||
..()
|
||||
|
||||
// Traitgenes Injectors are randomized now due to no hardcoded genes. Split into good or bad, and then versions that specify what they do on the label.
|
||||
// Otherwise scroll down further for how to make unique injectors
|
||||
/obj/item/dnainjector/proc/pick_block(var/datum/gene/trait/G, var/labeled, var/allow_disable, var/force_disable = FALSE)
|
||||
if(G)
|
||||
block = G.block
|
||||
datatype = DNA2_BUF_SE
|
||||
if(!force_disable)
|
||||
value = 0xFFF
|
||||
else
|
||||
value = 0x000
|
||||
if(allow_disable)
|
||||
value = pick(0x000,0xFFF)
|
||||
if(labeled)
|
||||
name = initial(name) + " - [value == 0x000 ? "Removes" : ""] [G.get_name()]"
|
||||
|
||||
/obj/item/dnainjector/random
|
||||
name = "\improper DNA injector"
|
||||
desc = "This injects the person with DNA."
|
||||
|
||||
// Purely rando
|
||||
/obj/item/dnainjector/random/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_good + GLOB.dna_genes_neutral + GLOB.dna_genes_bad), FALSE, TRUE)
|
||||
. = ..()
|
||||
|
||||
/obj/item/dnainjector/random_labeled/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_good + GLOB.dna_genes_neutral + GLOB.dna_genes_bad), TRUE, TRUE)
|
||||
. = ..()
|
||||
|
||||
// Good/bad but also neutral genes mixed in, less OP selection of genes
|
||||
/obj/item/dnainjector/random_good/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_good + GLOB.dna_genes_neutral ), FALSE, TRUE)
|
||||
. = ..()
|
||||
|
||||
/obj/item/dnainjector/random_good_labeled/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_good + GLOB.dna_genes_neutral ), TRUE, TRUE)
|
||||
. = ..()
|
||||
|
||||
/obj/item/dnainjector/random_bad/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_bad + GLOB.dna_genes_neutral ), FALSE, TRUE)
|
||||
. = ..()
|
||||
|
||||
/obj/item/dnainjector/random_bad_labeled/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_bad + GLOB.dna_genes_neutral ), TRUE, TRUE)
|
||||
. = ..()
|
||||
|
||||
// Purely good/bad genes, intended to be usually good rewards or punishments
|
||||
/obj/item/dnainjector/random_verygood/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_good), FALSE, FALSE)
|
||||
. = ..()
|
||||
|
||||
/obj/item/dnainjector/random_verygood_labeled/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_good), TRUE, FALSE)
|
||||
. = ..()
|
||||
|
||||
/obj/item/dnainjector/random_verybad/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_bad), FALSE, FALSE)
|
||||
. = ..()
|
||||
|
||||
/obj/item/dnainjector/random_verybad_labeled/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_bad), TRUE, FALSE)
|
||||
. = ..()
|
||||
|
||||
// Random neutral traits
|
||||
/obj/item/dnainjector/random_neutral/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_neutral ), FALSE, TRUE)
|
||||
. = ..()
|
||||
|
||||
/obj/item/dnainjector/random_neutral_labeled/Initialize()
|
||||
pick_block( pick(GLOB.dna_genes_neutral ), TRUE, TRUE)
|
||||
. = ..()
|
||||
|
||||
// If you want a unique injector, use a subtype of these
|
||||
/obj/item/dnainjector/set_trait
|
||||
var/trait_path
|
||||
var/disabling = FALSE
|
||||
|
||||
/obj/item/dnainjector/set_trait/Initialize()
|
||||
var/G = get_gene_from_trait(trait_path)
|
||||
if(trait_path && G)
|
||||
pick_block( G, TRUE, FALSE, disabling)
|
||||
else
|
||||
qdel(src)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
disabling = TRUE
|
||||
|
||||
// Injectors for all original genes and some new ones
|
||||
/obj/item/dnainjector/set_trait/anxiety // stutter
|
||||
trait_path = /datum/trait/negative/disability_anxiety
|
||||
/obj/item/dnainjector/set_trait/anxiety/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/noprints // noprints
|
||||
trait_path = /datum/trait/positive/superpower_noprints
|
||||
/obj/item/dnainjector/set_trait/noprints/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/tourettes // tour
|
||||
trait_path = /datum/trait/negative/disability_tourettes
|
||||
/obj/item/dnainjector/set_trait/tourettes/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/cough // cough
|
||||
trait_path = /datum/trait/negative/disability_cough
|
||||
/obj/item/dnainjector/set_trait/cough/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/nearsighted // glasses
|
||||
trait_path = /datum/trait/negative/disability_nearsighted
|
||||
/obj/item/dnainjector/set_trait/nearsighted/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/heatadapt // fire
|
||||
trait_path = /datum/trait/neutral/hotadapt
|
||||
/obj/item/dnainjector/set_trait/heatadapt/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/epilepsy // epi
|
||||
trait_path = /datum/trait/negative/disability_epilepsy
|
||||
/obj/item/dnainjector/set_trait/epilepsy/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/morph // morph
|
||||
trait_path = /datum/trait/positive/superpower_morph
|
||||
/obj/item/dnainjector/set_trait/morph/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/regenerate // regenerate
|
||||
trait_path = /datum/trait/positive/superpower_regenerate
|
||||
/obj/item/dnainjector/set_trait/regenerate/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/clumsy // clumsy
|
||||
trait_path = /datum/trait/negative/disability_clumsy
|
||||
/obj/item/dnainjector/set_trait/clumsy/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/coldadapt // insulated
|
||||
trait_path = /datum/trait/neutral/coldadapt
|
||||
/obj/item/dnainjector/set_trait/coldadapt/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/xray // xraymut
|
||||
trait_path = /datum/trait/positive/superpower_xray
|
||||
/obj/item/dnainjector/set_trait/xray/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/deaf // deafmut
|
||||
trait_path = /datum/trait/negative/disability_deaf
|
||||
/obj/item/dnainjector/set_trait/deaf/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/tk // telemut
|
||||
trait_path = /datum/trait/positive/superpower_tk
|
||||
/obj/item/dnainjector/set_trait/tk/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/haste // runfast
|
||||
trait_path = /datum/trait/positive/speed_fast
|
||||
/obj/item/dnainjector/set_trait/haste/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/blind // blindmut
|
||||
trait_path = /datum/trait/negative/blindness
|
||||
/obj/item/dnainjector/set_trait/blind/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/nobreathe // nobreath
|
||||
trait_path = /datum/trait/positive/superpower_nobreathe
|
||||
/obj/item/dnainjector/set_trait/nobreathe/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/remoteview // remoteview
|
||||
trait_path = /datum/trait/positive/superpower_remoteview
|
||||
/obj/item/dnainjector/set_trait/remoteview/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/flashproof // flashproof
|
||||
trait_path = /datum/trait/positive/superpower_flashproof
|
||||
/obj/item/dnainjector/set_trait/flashproof/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/hulk // hulk
|
||||
trait_path = /datum/trait/positive/superpower_hulk
|
||||
/obj/item/dnainjector/set_trait/hulk/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/table_passer // midgit
|
||||
trait_path = /datum/trait/positive/table_passer
|
||||
/obj/item/dnainjector/set_trait/table_passer/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/remotetalk // remotetalk
|
||||
trait_path = /datum/trait/positive/superpower_remotetalk
|
||||
/obj/item/dnainjector/set_trait/remotetalk/disable
|
||||
disabling = TRUE
|
||||
|
||||
/obj/item/dnainjector/set_trait/nonconduct // shock
|
||||
trait_path = /datum/trait/positive/nonconductive_plus
|
||||
/obj/item/dnainjector/set_trait/nonconduct/disable
|
||||
disabling = TRUE
|
||||
|
||||
@@ -98,12 +98,12 @@
|
||||
/obj/item/grenade/spawnergrenade/casino/zorgoia,
|
||||
/obj/item/grenade/spawnergrenade/casino/gygax,
|
||||
/obj/item/lego,
|
||||
/obj/item/dnainjector/nobreath,
|
||||
/obj/item/dnainjector/regenerate,
|
||||
/obj/item/dnainjector/remoteview,
|
||||
/obj/item/dnainjector/runfast,
|
||||
/obj/item/dnainjector/telemut,
|
||||
/obj/item/dnainjector/xraymut,
|
||||
/obj/item/dnainjector/set_trait/nobreathe,
|
||||
/obj/item/dnainjector/set_trait/regenerate,
|
||||
/obj/item/dnainjector/set_trait/remoteview,
|
||||
/obj/item/dnainjector/set_trait/haste,
|
||||
/obj/item/dnainjector/set_trait/tk,
|
||||
/obj/item/dnainjector/set_trait/xray,
|
||||
/obj/item/instrument/accordion,
|
||||
/obj/item/instrument/banjo,
|
||||
/obj/item/instrument/bikehorn,
|
||||
@@ -164,7 +164,7 @@
|
||||
|
||||
var/gift_type_chaos = pick(
|
||||
/obj/item/grenade/spawnergrenade/casino/gygax/gorilla,
|
||||
/obj/item/dnainjector/hulkmut,
|
||||
/obj/item/dnainjector/set_trait/hulk,
|
||||
/obj/item/grenade/spawnergrenade/casino/infinitycake,
|
||||
/obj/item/grenade/spawnergrenade/casino/universal_technomancer,
|
||||
/obj/item/spellbook,
|
||||
@@ -186,4 +186,4 @@
|
||||
I.add_fingerprint(M)
|
||||
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -150,9 +150,11 @@
|
||||
name = "box of DNA injectors"
|
||||
desc = "This box contains injectors it seems."
|
||||
icon_state = "dna"
|
||||
// Traitgenes New injector loot
|
||||
starts_with = list(
|
||||
/obj/item/dnainjector/h2m = 3,
|
||||
/obj/item/dnainjector/m2h = 3
|
||||
/obj/item/dnainjector/random_good_labeled = 2,
|
||||
/obj/item/dnainjector/random_neutral_labeled = 2,
|
||||
/obj/item/dnainjector/random_labeled = 2
|
||||
)
|
||||
|
||||
/obj/item/storage/box/flashbangs
|
||||
@@ -225,8 +227,8 @@
|
||||
|
||||
/obj/item/storage/box/flare
|
||||
name = "box of flares"
|
||||
desc = "A box containing 14 flares." // CHOMPedit: More flares.
|
||||
starts_with = list(/obj/item/flashlight/flare = 14) // CHOMPedit: More flares.
|
||||
desc = "A box containing 14 flares."
|
||||
starts_with = list(/obj/item/flashlight/flare = 14)
|
||||
|
||||
/obj/item/storage/box/trackimp
|
||||
name = "boxed tracking implant kit"
|
||||
|
||||
@@ -157,3 +157,46 @@
|
||||
broken = 1
|
||||
locked = 0
|
||||
..()
|
||||
|
||||
/obj/structure/closet/secure_closet/mind
|
||||
name = "mind secured locker"
|
||||
var/datum/mind/owner
|
||||
var/self_del = 1
|
||||
anchored = 0
|
||||
|
||||
/obj/structure/closet/secure_closet/mind/New(var/datum/mind/mind_target, var/del_self = 1)
|
||||
.=..()
|
||||
self_del = del_self
|
||||
if(mind_target)
|
||||
owner = mind_target
|
||||
name = "Owned by [owner.name]"
|
||||
if(owner.current)
|
||||
var/icon/I = get_flat_icon(owner.current, dir=SOUTH, no_anim=TRUE)
|
||||
var/image/IM = image(I, pixel_x = (32 - I.Width()))
|
||||
//icon2base64(get_flat_icon(owner.current,dir=SOUTH,no_anim=TRUE))
|
||||
/*
|
||||
I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE)
|
||||
I.plane = MOB_PLANE
|
||||
I.layer = MOB_LAYER
|
||||
*/
|
||||
add_overlay(IM)
|
||||
qdel(I)
|
||||
|
||||
/obj/structure/closet/secure_closet/mind/allowed(mob/user)
|
||||
if(user.mind == owner)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/obj/structure/closet/secure_closet/mind/open()
|
||||
.=..()
|
||||
if(self_del)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/mind/LateInitialize()
|
||||
if(ispath(closet_appearance))
|
||||
closet_appearance = GLOB.closet_appearances[closet_appearance]
|
||||
if(istype(closet_appearance))
|
||||
icon = closet_appearance.icon
|
||||
color = null
|
||||
update_icon()
|
||||
|
||||
Reference in New Issue
Block a user