diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm
index e5674a9b47b..f933105e13b 100644
--- a/code/_globalvars/misc.dm
+++ b/code/_globalvars/misc.dm
@@ -86,4 +86,6 @@ var/copier_max_items = 300
var/copier_items_printed_logged = FALSE
-GLOBAL_VAR(map_name) // Self explanatory
\ No newline at end of file
+GLOBAL_VAR(map_name) // Self explanatory
+
+var/global/datum/datacore/data_core = null // Station datacore, manifest, etc
\ No newline at end of file
diff --git a/code/_globalvars/station.dm b/code/_globalvars/station.dm
deleted file mode 100644
index ba8b70991c2..00000000000
--- a/code/_globalvars/station.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-// TODO: Move this to be not in its own fucking file all alone on its own
-var/global/datum/datacore/data_core = null
\ No newline at end of file
diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm
index 6fe3a781642..1e8f99814df 100644
--- a/code/_onclick/hud/blob_overmind.dm
+++ b/code/_onclick/hud/blob_overmind.dm
@@ -126,7 +126,7 @@
/obj/screen/blob/Split
icon_state = "ui_split"
name = "Split consciousness (100)"
- desc = "Creates another Blob Overmind at the nearest node. One use only.
Offsprings are be unable to use this ability."
+ desc = "Creates another Blob Overmind at the targeted node. One use only.
Offspring are unable to use this ability."
/obj/screen/blob/Split/Click()
if(isovermind(usr))
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 5652830d752..08c538c0462 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -906,9 +906,11 @@
if(src in SSticker.mode.changelings)
SSticker.mode.changelings -= src
special_role = null
- current.remove_changeling_powers()
+ if(changeling)
+ current.remove_changeling_powers()
+ qdel(changeling)
+ changeling = null
SSticker.mode.update_change_icons_removed(src)
- if(changeling) qdel(changeling)
to_chat(current, "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!")
log_admin("[key_name(usr)] has de-changelinged [key_name(current)]")
message_admins("[key_name_admin(usr)] has de-changelinged [key_name_admin(current)]")
diff --git a/code/datums/spell.dm b/code/datums/spell.dm
index 813604a1431..d8c7b26554c 100644
--- a/code/datums/spell.dm
+++ b/code/datums/spell.dm
@@ -62,6 +62,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
var/charge_type = "recharge" //can be recharge or charges, see charge_max and charge_counter descriptions; can also be based on the holder's vars now, use "holder_var" for that
var/charge_max = 100 //recharge time in deciseconds if charge_type = "recharge" or starting charges if charge_type = "charges"
+ var/starts_charged = TRUE //Does this spell start ready to go?
var/charge_counter = 0 //can only cast spells if it equals recharge, ++ each decisecond if charge_type = "recharge" or -- each cast if charge_type = "charges"
var/still_recharging_msg = "The spell is still recharging."
@@ -167,6 +168,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
if("holdervar")
adjust_var(user, holder_var_type, holder_var_amount)
+ if(action)
+ action.UpdateButtonIcon()
return 1
/obj/effect/proc_holder/spell/proc/invocation(mob/user = usr) //spelling the spell out and setting it on recharge/reducing charges amount
@@ -193,9 +196,11 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
/obj/effect/proc_holder/spell/New()
..()
action = new(src)
-
still_recharging_msg = "[name] is still recharging."
- charge_counter = charge_max
+ if(starts_charged)
+ charge_counter = charge_max
+ else
+ start_recharge()
/obj/effect/proc_holder/spell/Destroy()
QDEL_NULL(action)
@@ -212,9 +217,14 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
/obj/effect/proc_holder/spell/proc/start_recharge()
if(action)
action.UpdateButtonIcon()
- while(charge_counter < charge_max)
- sleep(1)
- charge_counter++
+ START_PROCESSING(SSfastprocess, src)
+
+/obj/effect/proc_holder/spell/process()
+ charge_counter += 2
+ if(charge_counter < charge_max)
+ return
+ STOP_PROCESSING(SSfastprocess, src)
+ charge_counter = charge_max
if(action)
action.UpdateButtonIcon()
@@ -235,6 +245,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
else
cast(targets, user = user)
after_cast(targets)
+ if(action)
+ action.UpdateButtonIcon()
/obj/effect/proc_holder/spell/proc/before_cast(list/targets)
if(overlay)
@@ -291,8 +303,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
charge_counter++
if("holdervar")
adjust_var(user, holder_var_type, -holder_var_amount)
-
- return
+ if(action)
+ action.UpdateButtonIcon()
/obj/effect/proc_holder/spell/proc/updateButtonIcon()
if(action)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 3430472b98b..32e6487ca57 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -343,6 +343,9 @@
if(AM && isturf(AM.loc))
step(AM, turn(AM.dir, 180))
+/atom/proc/get_spooked()
+ return
+
/atom/proc/add_hiddenprint(mob/living/M as mob)
if(isnull(M)) return
if(isnull(M.key)) return
@@ -661,7 +664,7 @@ var/list/blood_splatter_icons = list()
if(V.type == type)
V.reagents.add_reagent(vomit_reagent, 5)
return
-
+
var/obj/effect/decal/cleanable/vomit/this = new type(src)
// Make toxins vomit look different
diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm
index 0482a8e19ae..91c6df639e5 100644
--- a/code/game/gamemodes/blob/blobs/core.dm
+++ b/code/game/gamemodes/blob/blobs/core.dm
@@ -105,7 +105,11 @@
spawn()
if(!new_overmind)
- candidates = pollCandidates("Do you want to play as a blob?", ROLE_BLOB, 1)
+ if(is_offspring)
+ candidates = pollCandidates("Do you want to play as a blob offspring?", ROLE_BLOB, 1)
+ else
+ candidates = pollCandidates("Do you want to play as a blob?", ROLE_BLOB, 1)
+
if(candidates.len)
C = pick(candidates)
else
@@ -123,7 +127,6 @@
if(is_offspring)
B.is_offspring = TRUE
-
/obj/structure/blob/core/proc/lateblobtimer()
addtimer(CALLBACK(src, .proc/lateblobcheck), 50)
diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm
index 5eb15759d99..2743277edb7 100644
--- a/code/game/gamemodes/blob/powers.dm
+++ b/code/game/gamemodes/blob/powers.dm
@@ -350,31 +350,32 @@
BS.Goto(pick(surrounding_turfs), BS.move_to_delay)
return
-
/mob/camera/blob/verb/split_consciousness()
set category = "Blob"
set name = "Split consciousness (100) (One use)"
set desc = "Expend resources to attempt to produce another sentient overmind."
+ var/turf/T = get_turf(src)
+ if(!T)
+ return
if(split_used)
to_chat(src, "You have already produced an offspring.")
return
if(is_offspring)
to_chat(src, "You cannot split as an offspring of another Blob.")
return
- if(!blob_nodes || !blob_nodes.len)
- to_chat(src, "A node is required to birth your offspring...")
- return
- var/obj/structure/blob/node/N = locate(/obj/structure/blob) in blob_nodes
- if(!N)
- to_chat(src, "A node is required to birth your offspring...")
- return
+ var/obj/structure/blob/N = (locate(/obj/structure/blob) in T)
+ if(!N)
+ to_chat(src, "A node is required to birth your offspring.")
+ return
+ if(!istype(N, /obj/structure/blob/node))
+ to_chat(src, "A node is required to birth your offspring.")
+ return
if(!can_buy(100))
return
split_used = TRUE
-
new /obj/structure/blob/core/ (get_turf(N), 200, null, blob_core.point_rate, "offspring")
qdel(N)
@@ -382,7 +383,6 @@
var/datum/game_mode/blob/BL = SSticker.mode
BL.blobwincount += initial(BL.blobwincount)
-
/mob/camera/blob/verb/blob_broadcast()
set category = "Blob"
set name = "Blob Broadcast"
diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
index 1caba8b59d5..b0b77a456d5 100644
--- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
+++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm
@@ -8,18 +8,25 @@
button_icon_state = "augmented_eyesight"
chemical_cost = 0
dna_cost = 2 //Would be 1 without thermal vision
+ active = FALSE
-/datum/action/changeling/augmented_eyesight/sting_action(mob/living/carbon/human/user)
+/datum/action/changeling/augmented_eyesight/on_purchase(mob/user) //The ability starts inactive, so we should be protected from flashes.
+ ..()
+ var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/shield/ling()
+ O.insert(user)
+ active = FALSE
+
+/datum/action/changeling/augmented_eyesight/sting_action(mob/living/carbon/user)
if(!istype(user))
return
- if(user.get_int_organ(/obj/item/organ/internal/cyberimp/eyes/thermals/ling))
- var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/shield/ling()
- O.insert(user)
-
- else
+ if(!active)
var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/thermals/ling()
O.insert(user)
-
+ active = TRUE
+ else
+ var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/shield/ling()
+ O.insert(user)
+ active = FALSE
return 1
/datum/action/changeling/augmented_eyesight/Remove(mob/user)
@@ -50,7 +57,6 @@
S.reagents.add_reagent("oculine", 15)
return S
-
/obj/item/organ/internal/cyberimp/eyes/thermals/ling
name = "heat receptors"
desc = "These heat receptors dramatically increases eyes light sensing ability."
diff --git a/code/game/gamemodes/changeling/powers/swap_form.dm b/code/game/gamemodes/changeling/powers/swap_form.dm
index 18e7c85f1be..e0fc1107729 100644
--- a/code/game/gamemodes/changeling/powers/swap_form.dm
+++ b/code/game/gamemodes/changeling/powers/swap_form.dm
@@ -21,6 +21,9 @@
if(!istype(target) || issmall(target) || NO_DNA in target.dna.species.species_traits)
to_chat(user, "[target] is not compatible with this ability.")
return
+ if(target.mind.changeling)
+ to_chat(user, "We are unable to swap forms with another changeling!")
+ return
return 1
/datum/action/changeling/swap_form/sting_action(var/mob/living/carbon/user)
@@ -41,7 +44,7 @@
var/lingpowers = list()
for(var/power in changeling.purchasedpowers)
lingpowers += power
-
+
changeling.absorbed_dna -= changeling.find_dna(user.dna)
changeling.protected_dna -= changeling.find_dna(user.dna)
changeling.absorbedcount -= 1
@@ -63,6 +66,7 @@
for(var/power in lingpowers)
var/datum/action/changeling/S = power
+ target.mind.changeling.purchasedpowers += S
if(istype(S) && S.needs_button)
S.Grant(target)
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 679af70526e..b7e24014f1e 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -459,8 +459,8 @@
organData["germ_level"] = I.germ_level
organData["damage"] = I.damage
organData["maxHealth"] = I.max_damage
- organData["bruised"] = I.min_broken_damage
- organData["broken"] = I.min_bruised_damage
+ organData["bruised"] = I.min_bruised_damage
+ organData["broken"] = I.min_broken_damage
organData["robotic"] = I.is_robotic()
organData["dead"] = (I.status & ORGAN_DEAD)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 0ab3d01ddf1..17965c12f4c 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -231,9 +231,9 @@
/obj/item/reagent_containers/hypospray/CMO,
/obj/item/clothing/accessory/medal/gold/captain,
/obj/item/clothing/gloves/color/black/krav_maga/sec,
- /obj/item/storage/internal,
/obj/item/spacepod_key,
- /obj/item/nullrod
+ /obj/item/nullrod,
+ /obj/item/key
)
// These items will NOT be preserved
var/list/do_not_preserve_items = list (
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 05545e6a3d1..642676c6eff 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -78,6 +78,9 @@
set_picture("ai_bsod")
..(severity)
+/obj/machinery/status_display/get_spooked()
+ spookymode = TRUE
+
// set what is displayed
/obj/machinery/status_display/proc/update()
if(friendc && !ignore_friendc)
@@ -227,6 +230,9 @@
set_picture("ai_bsod")
..(severity)
+/obj/machinery/ai_status_display/get_spooked()
+ spookymode = TRUE
+
/obj/machinery/ai_status_display/proc/update()
if(mode==0) //Blank
overlays.Cut()
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 3973f49fdee..9ca42122410 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -306,6 +306,10 @@
/turf/proc/Bless()
flags |= NOJAUNT
+/turf/get_spooked()
+ for(var/atom/movable/AM in contents)
+ AM.get_spooked()
+
/turf/proc/burn_down()
return
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index 632c5053b48..4b24d267f29 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -436,9 +436,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
// LEFT SIDE OF THE PAGE
dat += "
"
dat += "General Settings" - dat += "Attack Animations: [(show_ghostitem_attack) ? "Yes" : "No"]" if(user.client.holder) dat += "Adminhelp sound: [(sound & SOUND_ADMINHELP)?"On":"Off"] " + dat += "Ambient Occlusion: [toggles & AMBIENT_OCCLUSION ? "Enabled" : "Disabled"] " + dat += "Attack Animations: [(show_ghostitem_attack) ? "Yes" : "No"] " if(unlock_content) dat += "BYOND Membership Publicity: [(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"] " dat += "Custom UI settings: " @@ -449,11 +450,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(user.client.donator_level > 0) dat += "Donator Publicity: [(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"] " dat += "Fancy NanoUI: [(nanoui_fancy) ? "Yes" : "No"] " - dat += "FPS: [clientfps] " - dat += "Ambient Occlusion: [toggles & AMBIENT_OCCLUSION ? "Enabled" : "Disabled"] " + dat += "FPS: [clientfps] " dat += "Ghost Ears: [(toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"] " - dat += "Ghost Sight: [(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"] " dat += "Ghost Radio: [(toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"] " + dat += "Ghost Sight: [(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"] " if(check_rights(R_ADMIN,0)) dat += "OOC Color: Change " if(config.allow_Metadata) diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 55c305cf449..401e3dd949a 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -10,14 +10,15 @@ permeability_coefficient = 0.50 actions_types = list(/datum/action/item_action/adjust) burn_state = FIRE_PROOF - species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin", "Grey" ) + species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin", "Grey", "Plasmaman" ) sprite_sheets = list( "Vox" = 'icons/mob/species/vox/mask.dmi', "Unathi" = 'icons/mob/species/unathi/mask.dmi', "Tajaran" = 'icons/mob/species/tajaran/mask.dmi', "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi', "Grey" = 'icons/mob/species/grey/mask.dmi', - "Drask" = 'icons/mob/species/drask/mask.dmi' + "Drask" = 'icons/mob/species/drask/mask.dmi', + "Plasmaman" = 'icons/mob/species/plasmaman/mask.dmi' ) /obj/item/clothing/mask/breath/attack_self(var/mob/user) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 61776bceef2..a195b81f7d3 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -10,14 +10,15 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 burn_state = FIRE_PROOF - species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin", "Grey") + species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin", "Grey", "Plasmaman" ) sprite_sheets = list( "Vox" = 'icons/mob/species/vox/mask.dmi', "Unathi" = 'icons/mob/species/unathi/mask.dmi', "Tajaran" = 'icons/mob/species/tajaran/mask.dmi', "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi', "Drask" = 'icons/mob/species/drask/mask.dmi', - "Grey" = 'icons/mob/species/grey/mask.dmi' + "Grey" = 'icons/mob/species/grey/mask.dmi', + "Plasmaman" = 'icons/mob/species/plasmaman/mask.dmi' ) // **** Welding gas mask **** diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index fd3fa7df29c..14ead863f53 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -720,7 +720,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/proc/updateghostimages() if(!client) return - if(!ghostvision) + if(seedarkness || !ghostvision) client.images -= ghost_images else //add images for the 60inv things ghosts can normally see when darkness is enabled so they can see them now diff --git a/code/modules/mob/dead/observer/spells.dm b/code/modules/mob/dead/observer/spells.dm index 620c1854e73..916ff9aa9b8 100644 --- a/code/modules/mob/dead/observer/spells.dm +++ b/code/modules/mob/dead/observer/spells.dm @@ -1,6 +1,4 @@ - - -var/global/list/boo_phrases=list( +GLOBAL_LIST_INIT(boo_phrases, list( "You feel a chill run down your spine.", "You think you see a figure in your peripheral vision.", "What was that?", @@ -9,16 +7,17 @@ var/global/list/boo_phrases=list( "Something doesn't feel right...", "You feel a presence in the room.", "It feels like someone's standing behind you.", -) +)) /obj/effect/proc_holder/spell/aoe_turf/boo name = "Boo!" desc = "Fuck with the living." - ghost = 1 + ghost = TRUE school = "transmutation" charge_max = 600 + starts_charged = FALSE clothes_req = 0 stat_allowed = 1 invocation = "" @@ -27,26 +26,4 @@ var/global/list/boo_phrases=list( /obj/effect/proc_holder/spell/aoe_turf/boo/cast(list/targets, mob/user = usr) for(var/turf/T in targets) - for(var/atom/A in T.contents) - - // Bug humans - if(ishuman(A)) - var/mob/living/carbon/human/H = A - if(H && H.client) - to_chat(H, "[pick(boo_phrases)]") - - // Flicker unblessed lights in range - if(istype(A,/obj/machinery/light)) - var/obj/machinery/light/L = A - if(L) - L.flicker() - - // OH GOD BLUE APC (single animation cycle) - if(istype(A, /obj/machinery/power/apc)) - A:spookify() - - if(istype(A, /obj/machinery/status_display)) - A:spookymode=1 - - if(istype(A, /obj/machinery/ai_status_display)) - A:spookymode=1 \ No newline at end of file + T.get_spooked() diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 416fd911777..52636efb896 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -206,9 +206,13 @@ if("hiss", "hisses") var/M = handle_emote_param(param) - message = "[src] hisses[M ? " at [M]" : ""]." - playsound(loc, 'sound/effects/unathihiss.ogg', 50, 0) //Credit to Jamius (freesound.org) for the sound. - m_type = 2 + if(!muzzled) + message = "[src] hisses[M ? " at [M]" : ""]." + playsound(loc, 'sound/effects/unathihiss.ogg', 50, 0) //Credit to Jamius (freesound.org) for the sound. + m_type = 2 + else + message = "[src] makes a weak hissing noise." + m_type = 2 if("quill", "quills") var/M = handle_emote_param(param) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e497fd04814..2cd524f8a15 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -2003,6 +2003,9 @@ Eyes need to have significantly high darksight to shine unless the mob has the X genemutcheck(src, block, null, MUTCHK_FORCED) dna.UpdateSE() +/mob/living/carbon/human/get_spooked() + to_chat(src, "[pick(GLOB.boo_phrases)]") + /mob/living/carbon/human/extinguish_light() // Parent function handles stuff the human may be holding ..() diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index e68f5652b01..47dd5622379 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -44,9 +44,9 @@ return has_organ("chest") if(slot_wear_id) // the only relevant check for this is the uniform check - return 1 + return TRUE if(slot_wear_pda) - return 1 + return TRUE if(slot_l_ear) return has_organ("head") if(slot_r_ear) @@ -70,9 +70,9 @@ if(slot_s_store) return has_organ("chest") if(slot_in_backpack) - return 1 + return TRUE if(slot_tie) - return 1 + return TRUE // The actual dropping happens at the mob level - checks to prevent drops should // come here @@ -421,56 +421,34 @@ /mob/living/carbon/human/can_equip(obj/item/I, slot, disable_warning = 0) switch(dna.species.handle_can_equip(I, slot, disable_warning, src)) - if(1) return 1 - if(2) return 0 //if it returns 2, it wants no normal handling - + if(1) return TRUE + if(2) return FALSE //if it returns 2, it wants no normal handling + if(!has_organ_for_slot(slot)) + return FALSE + if(istype(I, /obj/item/clothing/under) || istype(I, /obj/item/clothing/suit)) if(FAT in mutations) //testing("[M] TOO FAT TO WEAR [src]!") if(!(I.flags_size & ONESIZEFITSALL)) if(!disable_warning) to_chat(src, "You're too fat to wear the [I].") - return 0 + return FALSE switch(slot) if(slot_l_hand) - if(l_hand) - return 0 - return !incapacitated() + return !l_hand && !incapacitated() if(slot_r_hand) - if(r_hand) - return 0 - return !incapacitated() + return !r_hand && !incapacitated() if(slot_wear_mask) - if(wear_mask) - return 0 - if(!(I.slot_flags & SLOT_MASK)) - return 0 - return 1 + return !wear_mask && (I.slot_flags & SLOT_MASK) if(slot_back) - if(back) - return 0 - if(!(I.slot_flags & SLOT_BACK)) - return 0 - return 1 + return !back && (I.slot_flags & SLOT_BACK) if(slot_wear_suit) - if(wear_suit) - return 0 - if(!(I.slot_flags & SLOT_OCLOTHING)) - return 0 - return 1 + return !wear_suit && (I.slot_flags & SLOT_OCLOTHING) if(slot_gloves) - if(gloves) - return 0 - if(!(I.slot_flags & SLOT_GLOVES)) - return 0 - return 1 + return !gloves && (I.slot_flags & SLOT_GLOVES) if(slot_shoes) - if(shoes) - return 0 - if(!(I.slot_flags & SLOT_FEET)) - return 0 - return 1 + return !shoes && (I.slot_flags & SLOT_FEET) if(slot_belt) if(belt) return 0 @@ -482,39 +460,15 @@ return return 1 if(slot_glasses) - if(glasses) - return 0 - if(!(I.slot_flags & SLOT_EYES)) - return 0 - return 1 + return !glasses && (I.slot_flags & SLOT_EYES) if(slot_head) - if(head) - return 0 - if(!(I.slot_flags & SLOT_HEAD)) - return 0 - return 1 + return !head && (I.slot_flags & SLOT_HEAD) if(slot_l_ear) - if(l_ear) - return 0 - if(!(I.slot_flags & SLOT_EARS)) - return 0 - if((I.slot_flags & SLOT_TWOEARS) && r_ear ) - return 0 - return 1 + return !l_ear && (I.slot_flags & SLOT_EARS) && !((I.slot_flags & SLOT_TWOEARS) && r_ear) if(slot_r_ear) - if(r_ear) - return 0 - if(!(I.slot_flags & SLOT_EARS)) - return 0 - if((I.slot_flags & SLOT_TWOEARS) && l_ear) - return 0 - return 1 + return !r_ear && (I.slot_flags & SLOT_EARS) && !((I.slot_flags & SLOT_TWOEARS) && l_ear) if(slot_w_uniform) - if(w_uniform) - return 0 - if(!(I.slot_flags & SLOT_ICLOTHING)) - return 0 - return 1 + return !w_uniform && (I.slot_flags & SLOT_ICLOTHING) if(slot_wear_id) if(wear_id) return 0 @@ -583,17 +537,9 @@ return 1 return 0 if(slot_handcuffed) - if(handcuffed) - return 0 - if(!istype(I, /obj/item/restraints/handcuffs)) - return 0 - return 1 + return !handcuffed && istype(I, /obj/item/restraints/handcuffs) if(slot_legcuffed) - if(legcuffed) - return 0 - if(!istype(I, /obj/item/restraints/legcuffs)) - return 0 - return 1 + return !legcuffed && istype(I, /obj/item/restraints/legcuffs) if(slot_in_backpack) if(back && istype(back, /obj/item/storage/backpack)) var/obj/item/storage/backpack/B = back diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index cac42a29cd2..7eedf2520a3 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -59,6 +59,8 @@ genemutcheck(H, MONKEYBLOCK, null, MUTCHK_FORCED) /datum/species/monkey/handle_can_equip(obj/item/I, slot, disable_warning = 0, mob/living/carbon/human/user) + if(!user.has_organ_for_slot(slot)) + return 2 switch(slot) if(slot_l_hand) if(user.l_hand) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index f0b6c0a5d7a..436911d30fa 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -377,8 +377,9 @@ else data_core.manifest_inject(character) SSticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn - AnnounceArrival(character, rank, join_message) - AddEmploymentContract(character) + if(!IsAdminJob(rank)) + AnnounceArrival(character, rank, join_message) + AddEmploymentContract(character) if(!thisjob.is_position_available() && thisjob in SSjobs.prioritized_jobs) SSjobs.prioritized_jobs -= thisjob diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 0adec3f6baa..451687cd38c 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -403,8 +403,8 @@ /obj/item/paper/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) ..() - if(burn_state >= FLAMMABLE) //Only render paper that's burnable to be hard to read. - info = "[stars(info)]" + if(burn_state >= FLAMMABLE) //Renders paper that has been lit on fire to be illegible. + info = "Heat-curled corners and sooty words offer little insight. Whatever was once written on this page has been rendered illegible through fire." /obj/item/paper/proc/stamp(var/obj/item/stamp/S) stamps += (!stamps || stamps == "" ? " " : "") + " |