diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm
index 64458a74709..11c149844b5 100644
--- a/code/__DEFINES/genetics.dm
+++ b/code/__DEFINES/genetics.dm
@@ -42,17 +42,12 @@
#define ELECTRICITY 20 // ability to shoot electric attacks (15%)
//disabilities
-#define NEARSIGHTED 1
+#define NEARSIGHT 1
#define EPILEPSY 2
#define COUGHING 4
#define TOURETTES 8
#define NERVOUS 16
-//sdisabilities
-#define BLIND 1
-#define MUTE 2
-#define DEAF 4
-
//DNA - Because fuck you and your magic numbers being all over the codebase.
#define DNA_BLOCK_SIZE 3
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 4af1675b4e7..a4abcbcfe4a 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -1,5 +1,32 @@
#define MIDNIGHT_ROLLOVER 864000 //number of deciseconds in a day
+
+//Human Overlays Indexes/////////
+#define SPECIES_LAYER 23 // mutantrace colors... these are on a seperate layer in order to prvent
+#define BODY_LAYER 22 //underwear, undershirts, eyes, lips(makeup)
+#define MUTATIONS_LAYER 21 //Tk headglows etc.
+#define AUGMENTS_LAYER 20
+#define DAMAGE_LAYER 19 //damage indicators (cuts and burns)
+#define UNIFORM_LAYER 18
+#define ID_LAYER 17
+#define SHOES_LAYER 16
+#define GLOVES_LAYER 15
+#define EARS_LAYER 14
+#define SUIT_LAYER 13
+#define GLASSES_LAYER 12
+#define BELT_LAYER 11 //Possible make this an overlay of somethign required to wear a belt?
+#define SUIT_STORE_LAYER 10
+#define BACK_LAYER 9
+#define HAIR_LAYER 8 //TODO: make part of head layer?
+#define FACEMASK_LAYER 7
+#define HEAD_LAYER 6
+#define HANDCUFF_LAYER 5
+#define LEGCUFF_LAYER 4
+#define L_HAND_LAYER 3
+#define R_HAND_LAYER 2 //Having the two hands seperate seems rather silly, merge them together? It'll allow for code to be reused on mobs with arbitarily many hands
+#define FIRE_LAYER 1 //If you're on fire
+#define TOTAL_LAYERS 23 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
+
//Security levels
#define SEC_LEVEL_GREEN 0
#define SEC_LEVEL_BLUE 1
diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm
index 816da605d36..43e8fd35500 100644
--- a/code/__DEFINES/stat.dm
+++ b/code/__DEFINES/stat.dm
@@ -7,6 +7,14 @@
#define UNCONSCIOUS 1
#define DEAD 2
+//mob disabilities stat
+
+#define BLIND 1
+#define MUTE 2
+#define DEAF 4
+#define NEARSIGHT 8
+#define VISIONBLOCK 16
+
// bitflags for machine stat variable
#define BROKEN 1
#define NOPOWER 2
diff --git a/code/_globalvars/genetics.dm b/code/_globalvars/genetics.dm
index 7ff714de5f9..0944554d63e 100644
--- a/code/_globalvars/genetics.dm
+++ b/code/_globalvars/genetics.dm
@@ -1,5 +1,5 @@
//////////////
-var/NEARSIGHTEDBLOCK = 0
+var/NEARSIGHTBLOCK = 0
var/EPILEPSYBLOCK = 0
var/COUGHBLOCK = 0
var/TOURETTESBLOCK = 0
@@ -23,3 +23,6 @@ var/NULLED_UI
var/list/global_mutations = list() // list of hidden mutation things
+var/list/bad_mutations = list()
+var/list/good_mutations = list()
+var/list/not_good_mutations = list()
\ No newline at end of file
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index 06e2fed0368..e3b23502dcf 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -13,7 +13,15 @@
if(proximity && istype(G) && G.Touch(A,1))
return
+ var/override = 0
+
+ for(var/datum/mutation/human/HM in dna.mutations)
+ override += HM.on_attack_hand(src, A)
+
+ if(override) return
+
A.attack_hand(src)
+
/atom/proc/attack_hand(mob/user as mob)
return
@@ -26,7 +34,16 @@
return 0
/mob/living/carbon/human/RangedAttack(var/atom/A)
- if(!gloves && !mutations.len) return
+ if(gloves)
+ var/obj/item/clothing/gloves/G = gloves
+ if(istype(G) && G.Touch(A,0)) // for magic gloves
+ return
+
+ for(var/datum/mutation/human/HM in dna.mutations)
+ HM.on_ranged_attack(src, A)
+
+
+/* if(!gloves && !mutations.len) return
var/obj/item/clothing/gloves/G = gloves
if((LASER in mutations) && a_intent == "harm")
LaserEyes(A) // moved into a proc below
@@ -36,7 +53,7 @@
else if(TK in mutations)
A.attack_tk(src)
-
+*/
/*
Animals & All Unspecified
*/
diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm
index a4e8a119365..bbb21d49c4e 100644
--- a/code/_onclick/telekinesis.dm
+++ b/code/_onclick/telekinesis.dm
@@ -38,14 +38,11 @@ var/const/tk_maxrange = 15
return
/obj/item/attack_tk(mob/user)
- if(user.stat || !isturf(loc)) return
- if((TK in user.mutations) && !user.get_active_hand()) // both should already be true to get here
- var/obj/item/tk_grab/O = new(src)
- user.put_in_active_hand(O)
- O.host = user
- O.focus_object(src)
- else
- WARNING("Strange attack_tk(): TK([TK in user.mutations]) empty hand([!user.get_active_hand()])")
+ if(user.stat) return
+ var/obj/item/tk_grab/O = new(src)
+ user.put_in_active_hand(O)
+ O.host = user
+ O.focus_object(src)
return
@@ -95,13 +92,13 @@ var/const/tk_maxrange = 15
if(focus)
focus.attack_self_tk(user)
-/obj/item/tk_grab/afterattack(atom/target, mob/living/user, proximity)//TODO: go over this
+/obj/item/tk_grab/afterattack(atom/target, mob/living/carbon/user, proximity)//TODO: go over this
if(!target || !user) return
if(last_throw+3 > world.time) return
if(!host || host != user)
qdel(src)
return
- if(!(TK in host.mutations))
+ if(!(user.dna.check_mutation("Telekinesis", user)))
qdel(src)
return
if(isobj(target) && !isturf(target.loc))
diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm
index a5394222876..90345160262 100644
--- a/code/datums/diseases/advance/symptoms/deafness.dm
+++ b/code/datums/diseases/advance/symptoms/deafness.dm
@@ -33,10 +33,11 @@ Bonus
if(3, 4)
M << "[pick("You hear a ringing in your ear.", "Your ears pop.")]"
if(5)
- if(!(M.sdisabilities & DEAF))
+ if(!(M.ear_deaf))
M << "Your ears pop and begin ringing loudly!"
- M.sdisabilities |= DEAF
+ M.disabilities |= DEAF
+ M.ear_deaf = 1
spawn(200)
if(M)
- M.sdisabilities &= ~DEAF
+ M.ear_deaf = 0
return
\ No newline at end of file
diff --git a/code/datums/diseases/advance/symptoms/visionloss.dm b/code/datums/diseases/advance/symptoms/visionloss.dm
index 47303b9643a..c80b5a35d6c 100644
--- a/code/datums/diseases/advance/symptoms/visionloss.dm
+++ b/code/datums/diseases/advance/symptoms/visionloss.dm
@@ -41,8 +41,9 @@ Bonus
M.eye_blurry = 20
M.eye_stat += 5
if (M.eye_stat >= 10)
- M.disabilities |= NEARSIGHTED
- if (prob(M.eye_stat - 10 + 1) && !(M.sdisabilities & BLIND))
+ M.disabilities |= NEARSIGHT
+ if (prob(M.eye_stat - 10 + 1) && !(M.eye_blind))
M << "You go blind!"
- M.sdisabilities |= BLIND
+ M.disabilities |= BLIND
+ M.eye_blind = 1
return
\ No newline at end of file
diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm
new file mode 100644
index 00000000000..abc6dc65ab4
--- /dev/null
+++ b/code/datums/mutations.dm
@@ -0,0 +1,308 @@
+/var/global/list/mutations_list = list()
+
+#define POSITIVE 1
+#define NEGATIVE 2
+#define MINOR_NEGATIVE 3
+#define NON_SCANNABLE
+
+/datum/mutation/
+
+ var/name
+
+/datum/mutation/New()
+
+ mutations_list[name] = src
+
+/datum/mutation/human
+
+ var/dna_block
+ var/quality
+ var/get_chance = 100
+ var/lowest_value = 256 * 9
+ var/text_indication = ""
+ var/list/visual_indicators = list()
+
+/datum/mutation/human/proc/force_on(mob/living/carbon/human/owner)
+ set_block(owner)
+ owner.dna.mutations |= src
+
+/datum/mutation/human/proc/set_block(mob/living/carbon/human/owner)
+ var/before = copytext(owner.dna.struc_enzymes, 1, (dna_block * 3) + 1)
+ var/injection = num2hex(lowest_value + rand(1, 256))
+// var/injection = copytext(owner.dna.struc_enzymes, (dna_bloc * 3) + 1, (dna_bloc * 3) + 4)
+ var/after = copytext(owner.dna.struc_enzymes, (dna_block * 3) + 4)
+ owner.dna.struc_enzymes = before + injection + after
+
+/datum/mutation/human/proc/check_block(mob/living/carbon/human/owner)
+ if(hex2num(getblock(owner.dna.struc_enzymes, dna_block)) >= lowest_value)
+ if(prob(get_chance))
+ on_aquairing(owner)
+ else
+ on_loosing(owner)
+
+/datum/mutation/human/proc/on_aquairing(mob/living/carbon/human/owner)
+ if(src in owner.dna.mutations)
+ return 1
+ owner.dna.mutations.Add(src)
+ gain_indication(owner)
+ owner << text_indication
+
+/datum/mutation/human/proc/gain_indication(mob/living/carbon/human/owner)
+ owner.overlays.Add(visual_indicators)
+/*
+ owner.apply_overlay(MUTATIONS_LAYER)
+ return
+*/
+/datum/mutation/human/proc/loose_indication(mob/living/carbon/human/owner)
+ owner.overlays.Remove(visual_indicators)
+/*
+ owner.remove_overlay(MUTATIONS_LAYER)
+ for(var/datum/mutation/human/H in owner.dna.mutations)
+ H.gain_indication(owner)
+*/
+/datum/mutation/human/proc/on_attack_hand(mob/living/carbon/human/owner, atom/target)
+ return
+
+/datum/mutation/human/proc/on_ranged_attack(mob/living/carbon/human/owner, atom/target)
+ return
+
+/datum/mutation/human/proc/on_life(mob/living/carbon/human/owner)
+ return
+
+/datum/mutation/human/proc/on_loosing(mob/living/carbon/human/owner)
+ if(owner.dna.mutations.Remove(src))
+ loose_indication(owner)
+ return 0
+ return 1
+
+/datum/mutation/human/hulk
+
+ name = "Hulk"
+ quality = POSITIVE
+ get_chance = 100
+ lowest_value = 256 * 9
+ text_indication = "Your muscules hurt!"
+
+/datum/mutation/human/hulk/New()
+ ..()
+ visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="hulk_f_s", "layer"=-MUTATIONS_LAYER)
+ visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="hulk_m_s", "layer"=-MUTATIONS_LAYER)
+
+/datum/mutation/human/hulk/on_aquairing(mob/living/carbon/human/owner)
+ if(..()) return
+ var/status = CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH
+ owner.status_flags &= ~status
+
+/datum/mutation/human/hulk/on_attack_hand(mob/living/carbon/human/owner, atom/target)
+ return target.attack_hulk(owner)
+
+/datum/mutation/human/hulk/gain_indication(mob/living/carbon/human/owner)
+ var/g = (owner.gender == FEMALE) ? 1 : 2
+ owner.overlays += visual_indicators[g]
+
+/datum/mutation/human/hulk/on_life(mob/living/carbon/human/owner)
+ if(owner.health < 25)
+ on_loosing(owner)
+ owner << "You suddenly feel very weak."
+ owner.Weaken(3)
+ owner.emote("collapse")
+
+/datum/mutation/human/hulk/on_loosing(mob/living/carbon/human/owner)
+ ..()
+ owner.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH
+
+/datum/mutation/human/telekinesis
+
+ name = "Telekinesis"
+ quality = POSITIVE
+ get_chance = 100
+ lowest_value = 256 * 9
+ text_indication = "You feel smarter!"
+
+/datum/mutation/human/telekinesis/New()
+ ..()
+ visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead_s", "layer"=-MUTATIONS_LAYER)
+
+//datum/mutation/human/telekinesis/gain_indication(mob/living/carbon/human/owner)
+/* var/list/L = list()
+ if(owner.overlays_standing[MUTATIONS_LAYER])
+ L.Add(owner.overlays_standing[MUTATIONS_LAYER])
+ L |= image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead_s", "layer"=-MUTATIONS_LAYER)
+ owner.overlays_standing[MUTATIONS_LAYER] = L
+ ..()
+*/
+/datum/mutation/human/telekinesis/on_ranged_attack(mob/living/carbon/human/owner, atom/target)
+ target.attack_tk(owner)
+
+/datum/mutation/human/cold_resistance
+
+ name = "Cold Resistance"
+ quality = POSITIVE
+ text_indication = "Your body feels farm!"
+
+/datum/mutation/human/cold_resistance/New()
+ ..()
+ visual_indicators |= image("icon"='icons/effects/genetics.dmi', "icon_state"="fire_s", "layer"=-MUTATIONS_LAYER)
+
+//datum/mutation/human/cold_resistance/gain_indication(mob/living/carbon/human/owner)
+/* var/list/L = list()
+ if(owner.overlays_standing[MUTATIONS_LAYER])
+ L.Add(owner.overlays_standing[MUTATIONS_LAYER])
+ L |= image("icon"='icons/effects/genetics.dmi', "icon_state"="fire_s", "layer"=-MUTATIONS_LAYER)
+ owner.overlays_standing[MUTATIONS_LAYER] = L
+ ..()
+*/
+/datum/mutation/human/cold_resistance/on_life(mob/living/carbon/human/owner)
+ if(owner.getFireLoss())
+ if(prob(1))
+ owner.heal_organ_damage(0,1) //Is this really needed?
+
+/datum/mutation/human/x_ray
+
+ name = "X Ray Vision"
+ quality = POSITIVE
+ text_indication = "The walls suddenly disappear!"
+
+/datum/mutation/human/x_ray/on_aquairing(mob/living/carbon/human/owner)
+ if(..()) return
+ on_life(owner)
+
+/datum/mutation/human/x_ray/on_life(mob/living/carbon/human/owner)
+ owner.sight |= SEE_MOBS|SEE_OBJS|SEE_TURFS
+ owner.see_in_dark = 8
+ owner.see_invisible = SEE_INVISIBLE_LEVEL_TWO
+
+/datum/mutation/human/x_ray/on_loosing(mob/living/carbon/human/owner)
+ if(..()) return
+ owner.see_in_dark = initial(owner.see_in_dark)
+ owner.see_invisible = initial(owner.see_invisible)
+ owner.sight = initial(owner.sight)
+
+/datum/mutation/human/nearsight
+
+ name = "Near Sightness"
+ quality = MINOR_NEGATIVE
+ text_indication = "You cant see very well."
+
+/datum/mutation/human/nearsight/on_aquairing(mob/living/carbon/human/owner)
+ if(..()) return
+ owner.disabilities |= NEARSIGHT
+
+/datum/mutation/human/nearsight/on_loosing(mob/living/carbon/human/owner)
+ if(..()) return
+ owner.disabilities &= ~NEARSIGHT
+
+/datum/mutation/human/epilepcy
+
+ name = "Epilepcy"
+ quality = NEGATIVE
+
+/datum/mutation/human/epilepcy/on_life(mob/living/carbon/human/owner)
+ if ((prob(1) && owner.paralysis < 1))
+ owner << "You have a seizure!"
+ for(var/mob/O in viewers(owner, null) - owner)
+ O.show_message(text("[src] starts having a seizure!"), 1)
+ owner.Paralyse(10)
+ owner.Jitter(1000)
+
+/datum/mutation/human/bad_dna
+
+ name = "Unstable DNA"
+ quality = NEGATIVE
+
+/datum/mutation/human/bad_dna/on_aquairing(mob/living/carbon/human/owner)
+ if(prob(95))
+ if(prob(50))
+ randmutb(owner)
+ else
+ randmuti(owner)
+ else
+ randmutg(owner)
+ on_loosing(owner)
+
+/datum/mutation/human/cough
+
+ name = "Cough"
+ quality = MINOR_NEGATIVE
+
+/datum/mutation/human/cough/on_life(mob/living/carbon/human/owner)
+ if((prob(5) && owner.paralysis <= 1))
+ owner.drop_item()
+ owner.emote("cough")
+
+/datum/mutation/human/clumsy
+
+ name = "Clumsiness"
+ quality = MINOR_NEGATIVE
+
+/datum/mutation/human/tourettes
+
+ name = "Tourettes Syndrome"
+ quality = NEGATIVE
+
+/datum/mutation/human/tourettes/on_life(mob/living/carbon/human/owner)
+ if((prob(10) && owner.paralysis <= 1))
+ owner.Stun(10)
+ switch(rand(1, 3))
+ if(1)
+ owner.emote("twitch")
+ if(2 to 3)
+ owner.say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]")
+ var/x_offset = owner.pixel_x + rand(-2,2) //Should probably be moved into the twitch emote at some point.
+ var/y_offset = owner.pixel_y + rand(-1,1)
+ animate(owner, owner.pixel_x = owner.pixel_x + x_offset, owner.pixel_y = owner.pixel_y + y_offset, time = 1)
+ animate(owner.pixel_x = initial(owner.pixel_x) , owner.pixel_y = initial(owner.pixel_y), time = 1)
+
+/datum/mutation/human/nervousness
+
+ name = "Nervousness"
+ quality = MINOR_NEGATIVE
+
+/datum/mutation/human/nervousness/on_life(mob/living/carbon/human/owner)
+ if(prob(10))
+ owner.stuttering = max(10, owner.stuttering)
+
+/datum/mutation/human/deaf
+
+ name = "Deafness"
+ quality = NEGATIVE
+
+/datum/mutation/human/deaf/on_aquairing(mob/living/carbon/human/owner)
+ ..()
+ owner.disabilities |= DEAF
+
+/datum/mutation/human/deaf/on_loosing(mob/living/carbon/human/owner)
+ ..()
+ owner.disabilities &= ~DEAF
+
+/datum/mutation/human/blind
+
+ name = "Blindness"
+ quality = NEGATIVE
+
+/datum/mutation/human/blind/on_aquairing(mob/living/carbon/human/owner)
+ ..()
+ owner.disabilities |= BLIND
+
+/datum/mutation/human/blind/on_loosing(mob/living/carbon/human/owner)
+ ..()
+ owner.disabilities &= ~BLIND
+
+/datum/mutation/human/race
+
+ name = "Monkified"
+ quality = NEGATIVE
+
+/datum/mutation/human/race/on_aquairing(mob/living/carbon/human/owner)
+ if(..()) return
+ owner.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
+
+/datum/mutation/human/race/gain_indication(mob/living/carbon/human/owner)
+ return
+
+/datum/mutation/human/race/loose_indication(mob/living/carbon/monkey/owner)
+ return
+
+/datum/mutation/human/race/on_loosing(mob/living/carbon/monkey/owner)
+ if(..()) return
+ owner.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
\ No newline at end of file
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index e5ec1e07753..bd2c4b9758c 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -41,6 +41,13 @@
var/mob/living/M = src
M.take_organ_damage(20)
+/atom/proc/attack_hulk(mob/living/carbon/human/hulk, do_attack_animation = 0)
+ if(do_attack_animation)
+ hulk.changeNext_move(CLICK_CD_MELEE)
+ add_logs(hulk, src, "punched", "hulk powers")
+ hulk.do_attack_animation(src)
+ return
+
/atom/proc/CheckParts()
return
diff --git a/code/game/dna.dm b/code/game/dna.dm
index 98586486e0c..3aabea5c4b5 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -23,6 +23,22 @@
var/datum/species/species = new /datum/species/human() //The type of mutant race the player is if applicable (i.e. potato-man)
var/mutant_color = "FFF" // What color you are if you have certain speciess
var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings,
+ var/list/mutations = list() //All mutations are from now on here
+
+/datum/dna/proc/add_mutation(mutation_name, mob/living/carbon/human/target)
+ if(!istype(target)) return
+ var/datum/mutation/human/HM = mutations_list[mutation_name]
+ HM.on_aquairing(target)
+
+/datum/dna/proc/remove_mutation(mutation_name, mob/living/carbon/human/target)
+ if(!istype(target)) return
+ var/datum/mutation/human/HM = mutations_list[mutation_name]
+ HM.on_loosing(target)
+
+/datum/dna/proc/check_mutation(mutation_name, mob/living/carbon/human/target)
+ if(!istype(target)) return
+ var/datum/mutation/human/HM = mutations_list[mutation_name]
+ return mutations.Find(HM)
/datum/dna/proc/generate_uni_identity(mob/living/carbon/character)
. = ""
@@ -51,13 +67,20 @@
/datum/dna/proc/generate_struc_enzymes(mob/living/carbon/character)
var/list/L = list("0","1","2","3","4","5","6")
- . = ""
- for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++)
- if(i == RACEBLOCK)
- . += construct_block(istype(character,/mob/living/carbon/monkey)+1, 2)
+ var/list/sorting = list()
+ sorting.len = 14
+ var/result
+ for(var/A in mutations_list)
+ var/datum/mutation/human/M = mutations_list[A]//, i<=DNA_STRUC_ENZYMES_BLOCKS, i++)
+ if(A == "Monkified" && istype(character,/mob/living/carbon/monkey))
+ sorting[M.dna_block] = num2hex(M.lowest_value + rand(0, 256 * 6), DNA_BLOCK_SIZE)
+ character.dna.mutations.Add(mutations_list["Monkified"])
else
- . += random_string(DNA_BLOCK_SIZE, L)
- return .
+ sorting[M.dna_block] = random_string(DNA_BLOCK_SIZE, L)
+
+ for(var/B in sorting)
+ result += B
+ return result
/datum/dna/proc/generate_unique_enzymes(mob/living/carbon/character)
. = ""
@@ -172,9 +195,13 @@
return
/proc/randmutb(mob/living/carbon/M)
+ var/datum/mutation/human/HM = pick(bad_mutations | not_good_mutations)
+ HM.on_aquairing(M)
return randmut(M, bad_se_blocks)
/proc/randmutg(mob/living/carbon/M)
+ var/datum/mutation/human/HM = pick(good_mutations)
+ HM.on_aquairing(M)
return randmut(M, good_se_blocks | op_se_blocks)
/proc/randmuti(mob/living/carbon/M)
@@ -234,8 +261,11 @@
if(!check_dna_integrity(M))
return 0
- M.disabilities = 0
- M.sdisabilities = 0
+ for(var/A in mutations_list)
+ var/datum/mutation/human/HM = mutations_list[A]
+ HM.check_block(M)
+
+/* M.disabilities = 0
M.mutations.Cut()
M.see_in_dark = initial(M.see_in_dark)
@@ -250,8 +280,8 @@
for(var/i in op_se_blocks) //Overpowered mutations...extra difficult to obtain
blocks[i] = (deconstruct_block(getblock(M.dna.struc_enzymes, i), OP_MUTATION_DIFFICULTY) == OP_MUTATION_DIFFICULTY)
- if(blocks[NEARSIGHTEDBLOCK])
- M.disabilities |= NEARSIGHTED
+ if(blocks[NEARSIGHTBLOCK])
+ M.disabilities |= NEARSIGHT
M << "Your eyes feel strange."
if(blocks[EPILEPSYBLOCK])
M.disabilities |= EPILEPSY
@@ -275,11 +305,11 @@
M.disabilities |= NERVOUS
M << "You feel nervous."
if(blocks[DEAFBLOCK])
- M.sdisabilities |= DEAF
+ M.disabilities |= DEAF
M.ear_deaf = 1
M << "You can't seem to hear anything."
if(blocks[BLINDBLOCK])
- M.sdisabilities |= BLIND
+ M.disabilities |= BLIND
M << "You can't seem to see anything."
if(blocks[HULKBLOCK])
if(inj || prob(10))
@@ -326,7 +356,7 @@
O.loc = C
C.occupant = O
connected = null
- return 1
+ return 1*/
//////////////////////////////////////////////////////////// Monkey Block
if(M)
M.update_icon = 1 //queue a full icon update at next life() call
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index eff9b4e843a..ebcb3d83e20 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -157,9 +157,10 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
changeling.current << "You must complete the following tasks:"
if (changeling.current.mind)
- if (changeling.current.mind.assigned_role == "Clown")
- changeling.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself."
- changeling.current.mutations.Remove(CLUMSY)
+ var/mob/living/carbon/human/H = changeling.current
+ if(H.mind.assigned_role == "Clown")
+ H << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself."
+ H.dna.remove_mutation("Clumsiness", changeling.current)
var/obj_count = 1
for(var/datum/objective/objective in changeling.objectives)
@@ -285,7 +286,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
return
if(!target)
return
- if((NOCLONE in target.mutations) || (HUSK in target.mutations))
+ if((NOCLONE in target.disabilities) || (HUSK in target.disabilities))
user << "DNA of [target] is ruined beyond usability!"
return
if(!ishuman(target))//Absorbing monkeys is entirely possible, but it can cause issues with transforming. That's what lesser form is for anyway!
diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm
index f25022ce6f3..b62407e0e81 100644
--- a/code/game/gamemodes/changeling/powers/tiny_prick.dm
+++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm
@@ -140,7 +140,7 @@ obj/effect/proc_holder/changeling/sting/blind
/obj/effect/proc_holder/changeling/sting/blind/sting_action(var/mob/user, var/mob/target)
add_logs(user, target, "stung", object="blind sting")
target << "Your eyes burn horrifically!"
- target.disabilities |= NEARSIGHTED
+ target.disabilities |= NEARSIGHT
target.eye_blind = 20
target.eye_blurry = 40
feedback_add_details("changeling_powers","BS")
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index a8394f6235f..fdb3adce369 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -139,7 +139,7 @@
if (mob.mind)
if (mob.mind.assigned_role == "Clown")
mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
- mob.mutations.Remove(CLUMSY)
+ mob.dna.remove_mutation("Clumsiness", mob)
var/obj/item/weapon/paper/talisman/supply/T = new(mob)
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index c4eede9feff..ef0675edbe3 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -886,8 +886,8 @@ var/list/sacrificed = list()
C.ear_deaf += 50
C.show_message("The world around you suddenly becomes quiet.", 3)
affected++
- if(prob(1))
- C.sdisabilities |= DEAF
+ if(prob(1) && ishuman(C))
+ C.dna.add_mutation("Deafness")
if(affected)
usr.say("Sti[pick("'","`")] kaliedir!")
usr << "The world becomes quiet as the deafening rune dissipates into fine dust."
@@ -926,9 +926,9 @@ var/list/sacrificed = list()
C.eye_blurry += 50
C.eye_blind += 20
if(prob(5))
- C.disabilities |= NEARSIGHTED
+ C.disabilities |= NEARSIGHT
if(prob(10))
- C.sdisabilities |= BLIND
+ C.disabilities |= BLIND
C.show_message("Suddenly you see red flash that blinds you.", 3)
affected++
if(affected)
@@ -1030,8 +1030,7 @@ var/list/sacrificed = list()
if(iscarbon(L))
var/mob/living/carbon/C = L
flick("e_flash", C.flash)
- if(C.stuttering < 1 && (!(HULK in C.mutations)))
- C.stuttering = 1
+ C.stuttering = 1
C.Weaken(1)
C.Stun(1)
C.show_message("The rune explodes in a bright flash.", 3)
@@ -1057,10 +1056,9 @@ var/list/sacrificed = list()
else if(iscarbon(T))
var/mob/living/carbon/C = T
flick("e_flash", C.flash)
- if (!(HULK in C.mutations))
- C.silent += 15
- C.Weaken(10)
- C.Stun(10)
+ C.silent += 15
+ C.Weaken(10)
+ C.Stun(10)
return
/////////////////////////////////////////TWENTY-FIFTH RUNE
diff --git a/code/game/gamemodes/gang/gang.dm b/code/game/gamemodes/gang/gang.dm
index 718f9ad8d65..5d1c5664c0e 100644
--- a/code/game/gamemodes/gang/gang.dm
+++ b/code/game/gamemodes/gang/gang.dm
@@ -117,7 +117,7 @@
if (mob.mind)
if (mob.mind.assigned_role == "Clown")
mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
- mob.mutations.Remove(CLUMSY)
+ mob.dna.remove_mutation("Clumsiness", mob)
var/obj/item/device/flash/T = new(mob)
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index 3dc96cba6fb..80594636eb1 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -133,7 +133,7 @@
if (mob.mind)
if (mob.mind.assigned_role == "Clown")
mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
- mob.mutations.Remove(CLUMSY)
+ mob.dna.remove_mutation("Clumsiness", mob)
var/obj/item/device/flash/T = new(mob)
diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm
index 9840315d2ae..cb3c848649d 100644
--- a/code/game/gamemodes/setupgame.dm
+++ b/code/game/gamemodes/setupgame.dm
@@ -8,7 +8,18 @@
for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++)
avnums[i] = i
- HULKBLOCK = pick_n_take(avnums)
+ for(var/A in typesof(/datum/mutation/human) - /datum/mutation/human)
+ var/datum/mutation/human/B = new A()
+ B.dna_block = pick_n_take(avnums)
+ world << "[A] is block [B.dna_block]"
+ if(B.quality == POSITIVE)
+ good_mutations |= B
+ else if(B.quality == NEGATIVE)
+ bad_mutations |= B
+ else if(B.quality == MINOR_NEGATIVE)
+ not_good_mutations |= B
+
+/* HULKBLOCK = pick_n_take(avnums)
TELEBLOCK = pick_n_take(avnums)
FIREBLOCK = pick_n_take(avnums)
@@ -18,19 +29,21 @@
STRANGEBLOCK = pick_n_take(avnums)
DEAFBLOCK = pick_n_take(avnums)
BLINDBLOCK = pick_n_take(avnums)
- NEARSIGHTEDBLOCK = pick_n_take(avnums)
+ NEARSIGHTBLOCK = pick_n_take(avnums)
EPILEPSYBLOCK = pick_n_take(avnums)
COUGHBLOCK = pick_n_take(avnums)
TOURETTESBLOCK = pick_n_take(avnums)
NERVOUSBLOCK = pick_n_take(avnums)
RACEBLOCK = pick_n_take(avnums)
- bad_se_blocks = list(NEARSIGHTEDBLOCK,EPILEPSYBLOCK,STRANGEBLOCK,COUGHBLOCK,CLUMSYBLOCK,TOURETTESBLOCK,NERVOUSBLOCK,DEAFBLOCK,BLINDBLOCK)
+ bad_se_blocks = list(NEARSIGHTBLOCK,EPILEPSYBLOCK,STRANGEBLOCK,COUGHBLOCK,CLUMSYBLOCK,TOURETTESBLOCK,NERVOUSBLOCK,DEAFBLOCK,BLINDBLOCK)
good_se_blocks = list(FIREBLOCK,XRAYBLOCK)
op_se_blocks = list(HULKBLOCK,TELEBLOCK)
NULLED_SE = repeat_string(DNA_STRUC_ENZYMES_BLOCKS, repeat_string(DNA_BLOCK_SIZE, "_"))
NULLED_UI = repeat_string(DNA_UNI_IDENTITY_BLOCKS, repeat_string(DNA_BLOCK_SIZE, "_"))
+*/
+
// HIDDEN MUTATIONS / SUPERPOWERS INITIALIZTION
/*
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index 13b89560a57..ed64287f7a8 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -266,7 +266,7 @@
if (traitor_mob.mind)
if (traitor_mob.mind.assigned_role == "Clown")
traitor_mob << "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself."
- traitor_mob.mutations.Remove(CLUMSY)
+ traitor_mob.dna.remove_mutation("Clumsiness", traitor_mob)
// find a radio! toolbox(es), backpack, belt, headset
var/loc = ""
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index c476753d82b..48a6211b39d 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -227,7 +227,7 @@ Clown
H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store)
H.equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(H), slot_r_store)
- H.mutations.Add(CLUMSY)
+ H.dna.add_mutation("Clumsiness", H)
H.rename_self("clown")
/*
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index b5de2fb95a7..1645a5d9e7e 100644
--- a/code/game/machinery/bots/ed209bot.dm
+++ b/code/game/machinery/bots/ed209bot.dm
@@ -255,8 +255,7 @@ Auto Patrol[]"},
icon_state = "[lasercolor]ed209[on]"
var/mob/living/carbon/M = target
if(istype(M, /mob/living/carbon/human))
- if( M.stuttering < 5 && !(HULK in M.mutations) )
- M.stuttering = 5
+ M.stuttering = 5
M.Stun(5)
M.Weaken(5)
else
diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm
index 51f7faec68e..6f8b0624360 100644
--- a/code/game/machinery/bots/secbot.dm
+++ b/code/game/machinery/bots/secbot.dm
@@ -218,8 +218,7 @@ Auto Patrol: []"},
icon_state = "secbot[on]"
var/mob/living/carbon/M = target
if(istype(M, /mob/living/carbon/human))
- if( M.stuttering < 5 && !(HULK in M.mutations) )
- M.stuttering = 5
+ M.stuttering = 5
M.Stun(5)
M.Weaken(5)
else
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 0aa6ed942bc..37453e8ea44 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -9,7 +9,7 @@
var/mapping = 0//For the overview file, interesting bit of code.
/obj/machinery/computer/security/check_eye(var/mob/user as mob)
- if ((get_dist(user, src) > 1 || user.blinded || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon)))
+ if ((get_dist(user, src) > 1 || user.eye_blind || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon)))
return null
var/list/viewing = viewers(src)
if((istype(user,/mob/living/silicon/robot)) && (!(viewing.Find(user))))
@@ -64,7 +64,7 @@
return 0
if(C)
- if ((get_dist(user, src) > 1 || user.machine != src || user.blinded || !( C.can_use() )) && (!istype(user, /mob/living/silicon/ai)))
+ if ((get_dist(user, src) > 1 || user.machine != src || user.eye_blind || !( C.can_use() )) && (!istype(user, /mob/living/silicon/ai)))
if(!C.can_use() && !isAI(user))
src.current = null
return 0
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 5e52de0bb9a..787057f6fae 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -95,7 +95,7 @@
flick("e_flash", O:flash)
O.eye_stat += rand(1, 2)
else
- if(!O.blinded)
+ if(!O.eye_blind)
flick("flash", O:flash)
O.eye_stat += rand(0, 2)
return 1
diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm
index c6e676a9c97..c310a462ce8 100644
--- a/code/game/machinery/wishgranter.dm
+++ b/code/game/machinery/wishgranter.dm
@@ -11,7 +11,8 @@
var/charges = 1
var/insisting = 0
-/obj/machinery/wish_granter/attack_hand(var/mob/user as mob)
+/obj/machinery/wish_granter/attack_hand(var/mob/living/carbon/user)
+ if(istype(user)) return
usr.set_machine(src)
if(charges <= 0)
@@ -36,28 +37,18 @@
charges--
insisting = 0
- if (!(HULK in user.mutations))
- user.mutations.Add(HULK)
+ user.dna.add_mutation("Hulk", user)
- if (!(LASER in user.mutations))
+/* if (!(LASER in user.mutations))
user.mutations.Add(LASER)
+*/
+ user.dna.add_mutation("X Ray Vision", user)
+ user.dna.add_mutation("Cold Resistance", user)
+ user.dna.add_mutation("Telekinesis", user)
- if (!(XRAY in user.mutations))
- user.mutations.Add(XRAY)
- user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
- user.see_in_dark = 8
- user.see_invisible = SEE_INVISIBLE_LEVEL_TWO
-
- if (!(COLD_RESISTANCE in user.mutations))
- user.mutations.Add(COLD_RESISTANCE)
-
- if (!(TK in user.mutations))
- user.mutations.Add(TK)
-
- if(!(HEAL in user.mutations))
+/* if(!(HEAL in user.mutations))
user.mutations.Add(HEAL)
-
- user.update_mutations()
+*/
ticker.mode.traitors += user.mind
user.mind.special_role = "Avatar of the Wish Granter"
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 6bd0982060b..75abab684ba 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -490,19 +490,20 @@ obj/mecha/proc/can_use(mob/user)
else
qdel(src)
+/obj/mecha/attack_hulk(mob/living/carbon/human/user)
+ ..(user, 1)
+ take_damage(15)
+ check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
+ user.visible_message("[user] hits [src.name], doing some damage.", "You hit [src.name] with all your might. The metal creaks and bends.")
+ occupant_message("[user] hits [src.name], doing some damage.")
+ return 1
+
/obj/mecha/attack_hand(mob/living/user as mob)
user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code.
user.do_attack_animation(src)
src.log_message("Attack by hand/paw. Attacker - [user].",1)
-
- if ((HULK in user.mutations) && !prob(src.deflect_chance))
- src.take_damage(15)
- src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
- user.visible_message("[user] hits [src.name], doing some damage.", "You hit [src.name] with all your might. The metal creaks and bends.")
- src.occupant_message("[user] hits [src.name], doing some damage.")
- else
- user.visible_message("[user] hits [src.name]. Nothing happens","You hit [src.name] with no visible effect.")
- src.log_append_to_last("Armor saved.")
+ user.visible_message("[user] hits [src.name]. Nothing happens","You hit [src.name] with no visible effect.")
+ src.log_append_to_last("Armor saved.")
return
/obj/mecha/attack_paw(mob/user as mob)
@@ -629,28 +630,6 @@ obj/mecha/proc/can_use(mob/user)
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1)
return
-/*Will fix later -Sieve
-/obj/mecha/attack_blob(mob/user as mob)
- src.log_message("Attack by blob. Attacker - [user].",1)
- if(!prob(src.deflect_chance))
- src.take_damage(6)
- src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
- playsound(src.loc, 'sound/effects/blobattack.ogg', 50, 1, -1)
- user << "\red You smash at the armored suit!"
- for (var/mob/V in viewers(src))
- if(V.client && !(V.blinded))
- V.show_message("\red The [user] smashes against [src.name]'s armor!", 1)
- else
- src.log_append_to_last("Armor saved.")
- playsound(src.loc, 'sound/effects/blobattack.ogg', 50, 1, -1)
- user << "\green Your attack had no effect!"
- src.occupant_message("\blue The [user]'s attack is stopped by the armor.")
- for (var/mob/V in viewers(src))
- if(V.client && !(V.blinded))
- V.show_message("\blue The [user] rebounds off the [src.name] armor!", 1)
- return
-*/
-
/obj/mecha/blob_act()
take_damage(30, "brute")
return
@@ -677,11 +656,6 @@ obj/mecha/proc/can_use(mob/user)
if(prob(src.deflect_chance))
user << "The [W] bounces off [src.name] armor."
src.log_append_to_last("Armor saved.")
-/*
- for (var/mob/V in viewers(src))
- if(V.client && !(V.blinded))
- V.show_message("The [W] bounces off [src.name] armor.", 1)
-*/
return 0
else
src.occupant_message("[user] hits [src] with [W].")
@@ -810,22 +784,6 @@ obj/mecha/proc/can_use(mob/user)
else if(!(W.flags&NOBLUDGEON))
call((proc_res["dynattackby"]||src), "dynattackby")(W,user)
-/*
- src.log_message("Attacked by [W]. Attacker - [user]")
- if(prob(src.deflect_chance))
- user << "\red The [W] bounces off [src.name] armor."
- src.log_append_to_last("Armor saved.")
-/*
- for (var/mob/V in viewers(src))
- if(V.client && !(V.blinded))
- V.show_message("The [W] bounces off [src.name] armor.", 1)
-*/
- else
- src.occupant_message("[user] hits [src] with [W].")
- user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].")
- src.take_damage(W.force,W.damtype)
- src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
-*/
return
/*
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index 55f7dd17261..5bf1b4746c1 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -108,14 +108,12 @@
health -= tforce
healthcheck()
-
-/obj/structure/alien/resin/attack_hand(mob/living/user)
- if(HULK in user.mutations)
- user.do_attack_animation(src)
- user.visible_message("[user] destroys [src]!")
- health = 0
- healthcheck()
-
+/obj/structure/alien/resin/attack_hulk(mob/living/carbon/human/user)
+ ..(user, 1)
+ user.do_attack_animation(src)
+ user.visible_message("[user] destroys [src]!")
+ health = 0
+ healthcheck()
/obj/structure/alien/resin/attack_paw(mob/user)
return attack_hand(user)
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 3dd5fdf823c..c3b2250a35f 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -966,16 +966,15 @@ steam.start() -- spawns the effect
qdel(src)
return
-/obj/structure/foamedmetal/attack_hand(var/mob/user)
- if ((HULK in user.mutations) || (prob(75 - metal*25)))
- user.visible_message("[user] smashes through the foamed metal.", \
+/obj/structure/foamedmetal/attack_hulk(mob/living/carbon/human/user)
+ ..(user, 1)
+ user.visible_message("[user] smashes through the foamed metal.", \
"You smash through the metal foam wall.")
+ qdel(src)
+ return 1
- qdel(src)
- else
- user << "You hit the metal foam but bounce off it."
- return
-
+/obj/structure/foamedmetal/attack_hand(var/mob/user)
+ user << "You hit the metal foam but bounce off it."
/obj/structure/foamedmetal/attackby(var/obj/item/I, var/mob/user)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index df3c30675bd..12bb5ad2f9e 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -317,7 +317,7 @@
// M = user
/*
M << "\red You stab yourself in the eye."
- M.sdisabilities |= BLIND
+ M.disabilities |= BLIND
M.weakened += 4
M.adjustBruteLoss(10)
*/
@@ -341,7 +341,7 @@
M.eye_stat += rand(2,4)
if (M.eye_stat >= 10)
M.eye_blurry += 15+(0.1*M.eye_blurry)
- M.disabilities |= NEARSIGHTED
+ M.disabilities |= NEARSIGHT
if(M.stat != 2)
M << "Your eyes start to bleed profusely!"
if(prob(50))
@@ -354,7 +354,7 @@
if (prob(M.eye_stat - 10 + 1))
if(M.stat != 2)
M << "You go blind!"
- M.sdisabilities |= BLIND
+ M.disabilities |= BLIND
return
/obj/item/clean_blood()
diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm
index da1bcf84de8..ab24b6cfa6b 100644
--- a/code/game/objects/items/devices/camera_bug.dm
+++ b/code/game/objects/items/devices/camera_bug.dm
@@ -71,7 +71,7 @@
interact(user)
/obj/item/device/camera_bug/check_eye(var/mob/user as mob)
- if (user.stat || loc != user || !user.canmove || user.blinded || !current)
+ if (user.stat || loc != user || !user.canmove || user.eye_blind || !current)
user.reset_view(null)
user.unset_machine()
return null
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index a88cde90254..bbf8040c78f 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -15,8 +15,8 @@
var/last_used = 0 //last world.time it was used.
-/obj/item/device/flash/proc/clown_check(mob/user)
- if(user && (CLUMSY in user.mutations) && prob(50))
+/obj/item/device/flash/proc/clown_check(mob/living/carbon/human/user)
+ if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
flash_carbon(user, user, 15, 0)
user.visible_message("[user] blinds [user] with the flash!")
return 0
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index ae3fe04ec0e..5d01db6b891 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -45,11 +45,11 @@
return 1
-/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
+/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/carbon/human/user as mob)
add_fingerprint(user)
if(on && user.zone_sel.selecting == "eyes")
- if(((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
+ if(((istype(user) && user.dna.check_mutation("Clumsiness", user)) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
return ..() //just hit them in the head
if(!user.IsAdvancedToolUser())
@@ -62,7 +62,7 @@
return
if(M == user) //they're using it on themselves
- if(!M.blinded)
+ if(!M.eye_blind)
flick("flash", M.flash)
M.visible_message("[M] directs [src] to \his eyes.", \
"You wave the light in front of your eyes! Trippy!")
@@ -75,12 +75,12 @@
"You direct [src] to [M]'s eyes.")
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) //robots and aliens are unaffected
- if(M.stat == DEAD || M.sdisabilities & BLIND) //mob is dead or fully blind
+ if(M.stat == DEAD || M.disabilities & BLIND) //mob is dead or fully blind
user << "[M] pupils does not react to the light!"
else if(XRAY in M.mutations) //mob has X-RAY vision
user << "[M] pupils give an eerie glow!"
else //they're okay!
- if(!M.blinded)
+ if(!M.eye_blind)
flick("flash", M.flash) //flash the affected mob
user << "[M]'s pupils narrow."
else
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index 4e0804e76cf..5eb381cf1dc 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -109,7 +109,7 @@
//eye target check
outmsg = "You blind [C] by shining [src] in their eyes."
var/eye_prot = C.eyecheck()
- if(C.blinded || eye_prot >= 2)
+ if(C.eye_blind || eye_prot >= 2)
eye_prot = 4
var/severity = 3 - eye_prot
if(prob(33))
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 7eef024ef0e..0a473316417 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -77,10 +77,10 @@ MASS SPECTROMETER
origin_tech = "magnets=1;biotech=1"
var/mode = 1;
-/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
+/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/carbon/human/user as mob)
// Clumsiness/brain damage check
- if ((CLUMSY in user.mutations || user.getBrainLoss() >= 60) && prob(50))
+ if ((istype(user) && user.dna.check_mutation("Clumsiness", user) || user.getBrainLoss() >= 60) && prob(50))
user << "You stupidly try to analyze the floor's vitals!"
user.visible_message("[user] has analyzed the floor's vitals!")
user.show_message("Analyzing Results for The floor:\n\t Overall Status: Healthy", 1)
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index 2c7b48d2897..fe80b658e68 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -67,28 +67,32 @@
desc = "Cures green skin."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, HULKBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Hulk"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/hulkmut
name = "\improper DNA injector (Hulk)"
desc = "This will make you big and strong, but give you a bad skin condition."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, HULKBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["Hulk"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/xraymut
name = "\improper DNA injector (Xray)"
desc = "Finally you can see what the Captain does."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, XRAYBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["X Ray Vision"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/antixray
name = "\improper DNA injector (Anti-Xray)"
desc = "It will make you see harder."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, XRAYBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["X Ray Vision"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/////////////////////////////////////
/obj/item/weapon/dnainjector/antiglasses
@@ -96,42 +100,48 @@
desc = "Toss away those glasses!"
New()
..()
- fields = list("SE"=setblock(NULLED_SE, NEARSIGHTEDBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Nearsight"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/glassesmut
name = "\improper DNA injector (Glasses)"
desc = "Will make you need dorkish glasses."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, NEARSIGHTEDBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["Nearsight"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/epimut
name = "\improper DNA injector (Epi.)"
desc = "Shake shake shake the room!"
New()
..()
- fields = list("SE"=setblock(NULLED_SE, EPILEPSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["Epilepcy"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/antiepi
name = "\improper DNA injector (Anti-Epi.)"
desc = "Will fix you up from shaking the room."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, EPILEPSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Epilepcy"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
////////////////////////////////////
/obj/item/weapon/dnainjector/anticough
name = "\improper DNA injector (Anti-Cough)"
desc = "Will stop that aweful noise."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, COUGHBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Cough"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/coughmut
name = "\improper DNA injector (Cough)"
desc = "Will bring forth a sound of horror from your throat."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, COUGHBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["Cough"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/clumsymut
@@ -139,7 +149,8 @@
desc = "Makes clown minions."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, CLUMSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["Clumsiness"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/anticlumsy
@@ -147,77 +158,88 @@
desc = "Apply this for Security Clown."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, CLUMSYBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Clumsiness"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/antitour
name = "\improper DNA injector (Anti-Tour.)"
desc = "Will cure tourrets."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, TOURETTESBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Tourettes"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/tourmut
name = "\improper DNA injector (Tour.)"
desc = "Gives you a nasty case off tourrets."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, TOURETTESBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["Tourettes"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/stuttmut
name = "\improper DNA injector (Stutt.)"
desc = "Makes you s-s-stuttterrr"
New()
..()
- fields = list("SE"=setblock(NULLED_SE, NERVOUSBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["Nervousness"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/antistutt
name = "\improper DNA injector (Anti-Stutt.)"
desc = "Fixes that speaking impairment."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, NERVOUSBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Nervousness"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/antifire
name = "\improper DNA injector (Anti-Fire)"
desc = "Cures fire."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, FIREBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Cold Resistance"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/firemut
name = "\improper DNA injector (Fire)"
desc = "Gives you fire."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, FIREBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Cold Resistance"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/blindmut
name = "\improper DNA injector (Blind)"
desc = "Makes you not see anything."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, BLINDBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["Blindness"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/antiblind
name = "\improper DNA injector (Anti-Blind)"
desc = "ITS A MIRACLE!!!"
New()
..()
- fields = list("SE"=setblock(NULLED_SE, BLINDBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Blindness"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/antitele
name = "\improper DNA injector (Anti-Tele.)"
desc = "Will make you not able to control your mind."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, TELEBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Telekinesis"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/telemut
name = "\improper DNA injector (Tele.)"
desc = "Super brain man!"
New()
..()
- fields = list("SE"=setblock(NULLED_SE, TELEBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["Telekinesis"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/telemut/darkbundle
name = "\improper DNA injector"
@@ -228,14 +250,16 @@
desc = "Sorry, what did you say?"
New()
..()
- fields = list("SE"=setblock(NULLED_SE, DEAFBLOCK, repeat_string(DNA_BLOCK_SIZE,"f")))
+ var/datum/mutation/human/HM = mutations_list["Deafness"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"f")))
/obj/item/weapon/dnainjector/antideaf
name = "\improper DNA injector (Anti-Deaf)"
desc = "Will make you hear once more."
New()
..()
- fields = list("SE"=setblock(NULLED_SE, DEAFBLOCK, repeat_string(DNA_BLOCK_SIZE,"0")))
+ var/datum/mutation/human/HM = mutations_list["Deafness"]
+ fields = list("SE"=setblock(NULLED_SE, HM.dna_block, repeat_string(DNA_BLOCK_SIZE,"0")))
/obj/item/weapon/dnainjector/h2m
name = "\improper DNA injector (Human > Monkey)"
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 81880012ee9..214448b8911 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -45,11 +45,11 @@
M.Weaken(max(10/distance, 3))
if (M.eye_stat >= 20 && takes_eye_damage)
M << "Your eyes start to burn badly!"
- M.disabilities |= NEARSIGHTED
+ M.disabilities |= NEARSIGHT
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
if (prob(M.eye_stat - 20 + 1))
M << "You can't see anything!"
- M.sdisabilities |= BLIND
+ M.disabilities |= BLIND
//Bang
if((src.loc == M) || src.loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
@@ -63,9 +63,9 @@
if (M.ear_damage >= 15)
M << "Your ears start to ring badly!"
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
- if (prob(M.ear_damage - 10 + 5))
+ if(prob(M.ear_damage - 10 + 5))
M << "You can't hear anything!"
- M.sdisabilities |= DEAF
+ M.disabilities |= DEAF
else
if (M.ear_damage >= 5)
M << "Your ears start to ring!"
diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index a049f4e795a..be4a824bdc6 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -13,8 +13,8 @@
var/det_time = 50
var/display_timer = 1
-/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user)
- if((CLUMSY in user.mutations) && prob(50))
+/obj/item/weapon/grenade/proc/clown_check(var/mob/living/carbon/human/user)
+ if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
user << "Huh? How does this thing work?"
active = 1
icon_state = initial(icon_state) + "_active"
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index bed73f30890..a49c35e914f 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -18,8 +18,8 @@
var/cuffsound = 'sound/weapons/handcuffs.ogg'
var/trashtype = null //for disposable cuffs
-/obj/item/weapon/restraints/handcuffs/attack(mob/living/carbon/C, mob/user)
- if(CLUMSY in user.mutations && prob(50))
+/obj/item/weapon/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user)
+ if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
user << "Uh... how do those things work?!"
apply_cuffs(user,user)
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index 32acca5e4b4..6fc541cce87 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -66,7 +66,7 @@
src.icon_state = "fork"
return
else
- if((CLUMSY in user.mutations) && prob(50))
+ if(ishuman(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
M = user
return eyestab(M,user)
@@ -86,8 +86,8 @@
"[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku."))
return (BRUTELOSS)
-/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob)
- if ((CLUMSY in user.mutations) && prob(50))
+/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/carbon/human/user)
+ if (istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
user << " You accidentally cut yourself with the [src]."
user.take_organ_damage(20)
return
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index d6b446dea03..ce4b1a4c1b2 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -67,8 +67,8 @@
return 1
return 0
-/obj/item/weapon/melee/energy/sword/attack_self(mob/living/user)
- if ((CLUMSY in user.mutations) && prob(50))
+/obj/item/weapon/melee/energy/sword/attack_self(mob/living/carbon/human/user)
+ if (istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
user << "You accidentally cut yourself with [src], like a doofus!"
user.take_organ_damage(5,5)
active = !active
diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm
index 0fbfa179960..1abc877974e 100644
--- a/code/game/objects/items/weapons/melee/misc.dm
+++ b/code/game/objects/items/weapons/melee/misc.dm
@@ -27,9 +27,9 @@
slot_flags = SLOT_BELT
force = 10
-/obj/item/weapon/melee/classic_baton/attack(mob/M, mob/living/user)
+/obj/item/weapon/melee/classic_baton/attack(mob/M, mob/living/carbon/human/user)
add_fingerprint(user)
- if((CLUMSY in user.mutations) && prob(50))
+ if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
user << "You club yourself over the head!"
user.Weaken(3 * force)
if(ishuman(user))
@@ -49,8 +49,7 @@
if(user.a_intent == "harm")
if(!..()) return
- if(M.stuttering < 7 && !(HULK in M.mutations))
- M.stuttering = 7
+ M.stuttering = 7
M.Stun(7)
M.Weaken(7)
M.visible_message("[user] has beaten [M] with [src]!", \
@@ -101,10 +100,10 @@
playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1)
add_fingerprint(user)
-/obj/item/weapon/melee/telebaton/attack(mob/target as mob, mob/living/user as mob)
+/obj/item/weapon/melee/telebaton/attack(mob/target, mob/living/carbon/human/user)
if(on)
add_fingerprint(user)
- if((CLUMSY in user.mutations) && prob(50))
+ if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
user << "You club yourself over the head."
user.Weaken(3 * force)
if(ishuman(user))
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index aa2cb519a56..370dabb90ab 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -56,8 +56,8 @@
/obj/item/weapon/shield/energy/IsReflect()
return (active)
-/obj/item/weapon/shield/energy/attack_self(mob/living/user)
- if((CLUMSY in user.mutations) && prob(50))
+/obj/item/weapon/shield/energy/attack_self(mob/living/carbon/human/user)
+ if(istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
user << "You beat yourself in the head with [src]."
user.take_organ_damage(5)
active = !active
diff --git a/code/game/objects/items/weapons/storage/book.dm b/code/game/objects/items/weapons/storage/book.dm
index 6168bb200b8..25fce9f4b68 100644
--- a/code/game/objects/items/weapons/storage/book.dm
+++ b/code/game/objects/items/weapons/storage/book.dm
@@ -44,7 +44,7 @@
H.update_damage_overlays(0)
return
-/obj/item/weapon/storage/book/bible/attack(mob/living/M as mob, mob/living/user as mob)
+/obj/item/weapon/storage/book/bible/attack(mob/living/M as mob, mob/living/carbon/human/user as mob)
var/chaplain = 0
if(user.mind && (user.mind.assigned_role == "Chaplain"))
@@ -60,7 +60,7 @@
user.take_organ_damage(0,10)
return
- if ((CLUMSY in user.mutations) && prob(50))
+ if (istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
user << "The [src] slips out of your hand and hits your head."
user.take_organ_damage(10)
user.Paralyse(20)
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index c21bb64f252..e6dd1c91ff3 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -100,8 +100,8 @@
update_icon()
add_fingerprint(user)
-/obj/item/weapon/melee/baton/attack(mob/M, mob/living/user)
- if(status && (CLUMSY in user.mutations) && prob(50))
+/obj/item/weapon/melee/baton/attack(mob/M, mob/living/carbon/human/user)
+ if(status && istype(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
user.visible_message("[user] accidentally hits themself with [src]!", \
"You accidentally hit yourself with [src]!")
user.Weaken(stunforce*3)
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index fc4b26368f2..97b92f15666 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -86,7 +86,7 @@
if(!istype(M)) return ..()
if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head")
return ..()
- if((CLUMSY in user.mutations) && prob(50))
+ if(ishuman(user) && user.dna.check_mutation("Clumsiness", user) && prob(50))
M = user
return eyestab(M,user)
@@ -351,14 +351,14 @@
user << "Your eyes are really starting to hurt. This can't be good for you!"
if (prob(user.eye_stat - 25 + 1))
user << "You go blind!"
- user.sdisabilities |= BLIND
+ user.disabilities |= BLIND
else if(prob(user.eye_stat - 15 + 1))
user << "You go blind!"
user.eye_blind = 5
user.eye_blurry = 5
- user.disabilities |= NEARSIGHTED
+ user.disabilities |= NEARSIGHT
spawn(100)
- user.disabilities &= ~NEARSIGHTED
+ user.disabilities &= ~NEARSIGHT
/obj/item/weapon/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user)
if(welding)
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 3b0ba69ed11..43f04ea8cd8 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -212,9 +212,9 @@ obj/item/weapon/twohanded/
clean_blood()//blood overlays get weird otherwise, because the sprite changes.
return
-/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/user as mob)
+/obj/item/weapon/twohanded/dualsaber/attack(target as mob, mob/living/carbon/human/user as mob)
..()
- if((CLUMSY in user.mutations) && (wielded) && prob(40))
+ if(istype(user) && user.dna.check_mutation("Clumsiness", user) && (wielded) && prob(40))
impale(user)
return
if((wielded) && prob(50))
@@ -236,13 +236,18 @@ obj/item/weapon/twohanded/
else
return 0
+/obj/item/weapon/twohanded/dualsaber/attack_hulk(mob/living/carbon/human/user)
+ if(wielded)
+ user << "You cant pick up such dangerous item with your meaty hands without loosing fingers, better not to."
+ return 1
+
/obj/item/weapon/twohanded/dualsaber/wield() //Specific wield () hulk checks due to reflect_chance var for balance issues and switches hitsounds.
..()
- var/mob/living/M = loc
+ var/mob/living/carbon/M = loc
if(istype(loc, /mob/living))
- if (HULK in M.mutations)
+ if(M.dna.check_mutation("HULK", M))
loc << "You lack the grace to wield this to its full extent."
- hitsound = 'sound/weapons/blade1.ogg'
+ hitsound = 'sound/weapons/blade1.ogg'
/obj/item/weapon/twohanded/dualsaber/unwield() //Specific unwield () to switch hitsounds.
@@ -251,11 +256,7 @@ obj/item/weapon/twohanded/
/obj/item/weapon/twohanded/dualsaber/IsReflect()
if(wielded)
- var/mob/living/M = loc
- if(istype(loc, /mob/living))
- if (HULK in M.mutations)
- return
- return 1
+ return 1
/obj/item/weapon/twohanded/dualsaber/green
New()
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 68bcbe41c49..84fbbbeabfb 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
@@ -45,7 +45,7 @@
src.locked = !src.locked
add_fingerprint(user)
for(var/mob/O in viewers(user, 3))
- if((O.client && !( O.blinded )))
+ if((O.client && !( O.eye_blind )))
O << "[user] has [locked ? null : "un"]locked the locker."
if(src.locked)
src.icon_state = src.icon_locked
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index 986a918ffb4..85817a719df 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -22,7 +22,7 @@
L.client.perspective = EYE_PERSPECTIVE
L.client.eye = src
L.loc = src
- L.sdisabilities += MUTE
+ L.disabilities += MUTE
L.faction += "mimic" //Stops mimics from instaqdeling people in statues
health = L.health + 100 //stoning damaged mobs will result in easier to shatter statues
@@ -79,7 +79,7 @@
for(var/mob/living/M in src)
M.loc = src.loc
- M.sdisabilities -= MUTE
+ M.disabilities -= MUTE
M.take_overall_damage((M.health - health - 100),0) //any new damage the statue incurred is transfered to the mob
M.faction -= "mimic"
if(M.client)
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 25128f564a9..9de4cb597ba 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -29,6 +29,12 @@
/obj/structure/grille/attack_paw(mob/user as mob)
attack_hand(user)
+/obj/structure/grille/attack_hulk(mob/living/carbon/human/user)
+ ..(user, 1)
+ shock(user, 70)
+ health -= 5
+ healthcheck()
+
/obj/structure/grille/attack_hand(mob/living/user as mob)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
@@ -39,8 +45,6 @@
if(shock(user, 70))
return
- if(HULK in user.mutations)
- health -= 5
else
health -= rand(1,2)
healthcheck()
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 3b7ab8924b7..eac2dcc710a 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -208,15 +208,16 @@
/obj/structure/table/attack_paw(mob/user)
attack_hand(user)
+/obj/structure/table/attack_hulk(mob/living/carbon/human/user)
+ ..(user, 1)
+ visible_message("[user] smashes [src] apart!")
+ playsound(src.loc, 'sound/effects/bang.ogg', 50, 1)
+ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
+ table_destroy(1)
+ return 1
+
/obj/structure/table/attack_hand(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
- if(HULK in user.mutations)
- user.do_attack_animation(src)
- visible_message("[user] smashes [src] apart!")
- playsound(src.loc, 'sound/effects/bang.ogg', 50, 1)
- user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- table_destroy(1)
- return
/obj/structure/table/attack_tk() // no telehulk sorry
return
@@ -462,19 +463,17 @@
/obj/structure/table/reinforced/attack_paw(mob/user)
attack_hand(user)
-/obj/structure/table/reinforced/attack_hand(mob/user as mob)
- user.changeNext_move(CLICK_CD_MELEE)
- if ((HULK in user.mutations))
- if (prob(75))
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
- usr << text("You kick [src] into pieces.")
- usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- table_destroy(1)
- return
- else
- playsound(src, 'sound/effects/bang.ogg', 50, 1)
- usr << text("You kick [src].")
- return
+/obj/structure/table/reinforced/attack_hulk(mob/living/carbon/human/user)
+ ..(user, 1)
+ if(prob(75))
+ playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
+ user << text("You kick [src] into pieces.")
+ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
+ table_destroy(1)
+ else
+ playsound(src, 'sound/effects/bang.ogg', 50, 1)
+ user << text("You kick [src].")
+ return 1
/*
* Racks
@@ -551,20 +550,21 @@
/obj/structure/rack/attack_paw(mob/living/user)
attack_hand(user)
+/obj/structure/rack/attack_hulk(mob/living/carbon/human/user)
+ ..(user, 1)
+ health -= 5
+ healthcheck()
+ return 1
+
/obj/structure/rack/attack_hand(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
playsound(loc, 'sound/items/dodgeball.ogg', 80, 1)
user.visible_message("[user] kicks [src].", \
"You kick [src].")
-
- if(HULK in user.mutations)
- health -= 5
- else
- health -= rand(1,2)
+ health -= rand(1,2)
healthcheck()
-
/obj/structure/rack/attack_alien(mob/living/user)
user.do_attack_animation(src)
visible_message("[user] slices [src] apart!")
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index d748bdd960d..34e299fdf9a 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -123,22 +123,25 @@
add_fingerprint(user)
playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1)
+/obj/structure/window/attack_hulk(mob/living/carbon/human/user)
+ if(!can_be_reached(user))
+ return
+ ..(user, 1)
+ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
+ user.visible_message("[user] smashes through [src]!")
+ storedshard.add_fingerprint(user)
+ if(storedrods)
+ storedrods.add_fingerprint(user)
+ hit(50)
+ return 1
+
/obj/structure/window/attack_hand(mob/user as mob)
if(!can_be_reached(user))
return
- if(HULK in user.mutations)
- user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
- user.visible_message("[user] smashes through [src]!")
- storedshard.add_fingerprint(user)
- if(storedrods)
- storedrods.add_fingerprint(user)
- spawnfragments()
- else
- user.changeNext_move(CLICK_CD_MELEE)
- user.visible_message("[user] knocks on [src].")
- add_fingerprint(user)
- playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1)
-
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.visible_message("[user] knocks on [src].")
+ add_fingerprint(user)
+ playsound(loc, 'sound/effects/Glassknock.ogg', 50, 1)
/obj/structure/window/attack_paw(mob/user as mob)
return attack_hand(user)
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 3b40db1a39c..34bb213ce3c 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -86,19 +86,6 @@
/turf/simulated/wall/attack_paw(mob/living/user as mob)
user.changeNext_move(CLICK_CD_MELEE)
- if ((HULK in user.mutations))
- user.do_attack_animation(src)
- if (prob(hardness))
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
- user << "You smash through the wall."
- user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- dismantle_wall(1)
- return
- else
- playsound(src, 'sound/effects/bang.ogg', 50, 1)
- usr << text("You punch the wall.")
- return
-
return src.attack_hand(user)
@@ -111,21 +98,21 @@
dismantle_wall(1)
return
+/turf/simulated/wall/attack_hulk(mob/user)
+ ..(user, 1)
+ if(prob(hardness))
+ playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
+ user << text("You smash through the wall.")
+ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
+ dismantle_wall(1)
+
+ else
+ playsound(src, 'sound/effects/bang.ogg', 50, 1)
+ user << text("You punch the wall.")
+ return 1
/turf/simulated/wall/attack_hand(mob/user as mob)
user.changeNext_move(CLICK_CD_MELEE)
- if (HULK in user.mutations)
- if (prob(hardness))
- playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1)
- usr << text("You smash through the wall.")
- usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- dismantle_wall(1)
- return
- else
- playsound(src, 'sound/effects/bang.ogg', 50, 1)
- usr << text("You punch the wall.")
- return
-
user << "You push the wall but nothing happens!"
playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
src.add_fingerprint(user)
diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm
index 3957af514c0..3463b8d65cb 100644
--- a/code/game/turfs/simulated/walls_reinforced.dm
+++ b/code/game/turfs/simulated/walls_reinforced.dm
@@ -28,11 +28,6 @@
else
M << "This wall is far too strong for you to destroy."
-/turf/simulated/wall/r_wall/attack_hand(mob/user as mob)
- //this is ugly
- if ((HULK in user.mutations) || !d_state)
- ..()
-
/turf/simulated/wall/r_wall/try_destroy(obj/item/weapon/W as obj, mob/user as mob, turf/T as turf)
if(istype(W, /obj/item/weapon/melee/energy/blade))
user << "This wall is too thick to slice through. You will need to find a different path."
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index 2e951f9f539..acd005c4aec 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -18,7 +18,7 @@
if(!armed)
if(ishuman(usr))
var/mob/living/carbon/human/user = usr
- if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
+ if((user.getBrainLoss() >= 60) || (ishuman(user) && user.dna.check_mutation("Clumsiness", user)) && prob(50))
user << "Your hand slips, setting off the trigger."
pulse(0)
update_icon()
@@ -65,11 +65,11 @@
pulse(0)
-/obj/item/device/assembly/mousetrap/attack_self(mob/living/user as mob)
+/obj/item/device/assembly/mousetrap/attack_self(mob/living/carbon/human/user as mob)
if(!armed)
user << "You arm [src]."
else
- if(((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
+ if(((user.getBrainLoss() >= 60) || (istype(user) && user.dna.check_mutation("Clumsiness", user))) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
@@ -83,9 +83,9 @@
playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
-/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user as mob)
+/obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user as mob)
if(armed)
- if(((user.getBrainLoss() >= 60 || CLUMSY in user.mutations)) && prob(50))
+ if(((user.getBrainLoss() >= 60) || (istype(user) && user.dna.check_mutation("Clumsiness", user))) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 16e36636c14..16add9a8e5f 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -126,9 +126,9 @@
if(M.glasses == src)
M.eye_blind = 3
M.eye_blurry = 5
- M.disabilities |= NEARSIGHTED
+ M.disabilities |= NEARSIGHT
spawn(100)
- M.disabilities &= ~NEARSIGHTED
+ M.disabilities &= ~NEARSIGHT
..()
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index 7ff6b0ead14..bf704135455 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -35,7 +35,7 @@
var/datum/disease/D
if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work.
- if(!H.dna || (H.sdisabilities & BLIND)) //A blindness disease would be the worst.
+ if(!H.dna || (H.disabilities & BLIND)) //A blindness disease would be the worst.
continue
D = new virus_type()
var/datum/disease/dnaspread/DS = D
diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm
index 961a2d771d9..7d3f065118c 100644
--- a/code/modules/events/ninja.dm
+++ b/code/modules/events/ninja.dm
@@ -2710,13 +2710,12 @@ It is possible to destroy the net by the occupant or someone else.
..()
return
-/obj/effect/energy_net/attack_hand(mob/user)
- if (HULK in user.mutations)
- user.visible_message("[user] rips the energy net apart!", \
+/obj/effect/energy_net/attack_hulk(mob/living/carbon/human/user)
+ ..(user, 1)
+ user.visible_message("[user] rips the energy net apart!", \
"You easily destroy the energy net.")
- health-=50
+ health-=50
healthcheck()
- return
/obj/effect/energy_net/attack_paw(mob/user)
return attack_hand()
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index d8aac764edd..d1178339a95 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -7,7 +7,6 @@
stat = DEAD
density = 0
canmove = 0
- blinded = 0
anchored = 1 // don't get pushed around
invisibility = INVISIBILITY_OBSERVER
languages = ALL
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 587114bd587..6b833d1daae 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -85,19 +85,24 @@
updatehealth()
return
+/mob/living/carbon/alien/humanoid/attack_hulk(mob/living/carbon/human/user)
+ if(user.a_intent == "harm")
+ ..(user, 1)
+ adjustBruteLoss(14 + rand(1,9))
+ Paralyse(1)
+ step_away(src,user,15)
+ sleep(1)
+ step_away(src,user,15)
+ return 1
+ else
+ return
+
/mob/living/carbon/alien/humanoid/attack_hand(mob/living/carbon/human/M as mob)
if(..())
switch(M.a_intent)
if ("harm")
var/damage = rand(1, 9)
if (prob(90))
- if (HULK in M.mutations)//HULK SMASH
- damage += 14
- spawn(0)
- Paralyse(1)
- step_away(src,M,15)
- sleep(3)
- step_away(src,M,15)
playsound(loc, "punch", 25, 1, -1)
visible_message("[M] has punched [src]!", \
"[M] has punched [src]!")
diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm
index 7b44fdbe47d..7101627b3a9 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/life.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm
@@ -45,7 +45,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
- blinded = null
//Handle temperature/pressure differences between body and environment
handle_environment(environment)
@@ -69,10 +68,6 @@
/mob/living/carbon/alien/humanoid/proc/handle_disabilities()
- if (disabilities & EPILEPSY)
- if ((prob(1) && paralysis < 10))
- src << "You have a seizure!"
- Paralyse(10)
if (disabilities & COUGHING)
if ((prob(5) && paralysis <= 1))
drop_item()
@@ -110,12 +105,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
- blinded = 1
+ eye_blind = 1
silent = 0
else //ALIVE. LIGHTS ARE ON
if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
death()
- blinded = 1
+ eye_blind = 1
stat = DEAD
silent = 0
return 1
@@ -131,11 +126,11 @@
if(paralysis)
AdjustParalysis(-1)
- blinded = 1
+ eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
- blinded = 1
+ eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health )
spawn(0)
@@ -149,16 +144,15 @@
move_delay_add = max(0, move_delay_add - rand(1, 2))
//Eyes
- if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
- blinded = 1
+ if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
+ eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
- blinded = 1
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
- if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
+ if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(ear_deaf) //deafness, heals slowly over time
ear_deaf = max(ear_deaf-1, 0)
@@ -242,12 +236,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((blind && stat != 2))
- if ((blinded))
+ if ((eye_blind))
blind.layer = 18
else
blind.layer = 0
- if (disabilities & NEARSIGHTED)
+ if (disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if (eye_blurry)
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 7288651a2cc..68aeae28cd2 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -104,17 +104,22 @@
updatehealth()
return
+/mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user)
+ if(user.a_intent == "harm")
+ ..(user, 1)
+ adjustBruteLoss(5 + rand(1,9))
+ Paralyse(1)
+ step_away(src,user,15)
+ sleep(1)
+ step_away(src,user,15)
+ return 1
+ else
+ return
+
/mob/living/carbon/alien/larva/attack_hand(mob/living/carbon/human/M as mob)
if(..())
var/damage = rand(1, 9)
if (prob(90))
- if (HULK in M.mutations)
- damage += 5
- spawn(0)
- Paralyse(1)
- step_away(src,M,15)
- sleep(3)
- step_away(src,M,15)
playsound(loc, "punch", 25, 1, -1)
add_logs(M, src, "attacked", admin=0)
visible_message("[M] has kicked [src]!", \
diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm
index f98557fb45f..18dbc7376c3 100644
--- a/code/modules/mob/living/carbon/alien/larva/life.dm
+++ b/code/modules/mob/living/carbon/alien/larva/life.dm
@@ -38,7 +38,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
- blinded = null
//Handle temperature/pressure differences between body and environment
handle_environment(enviroment)
@@ -64,12 +63,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
- blinded = 1
+ eye_blind = max(1, eye_blind)
silent = 0
else //ALIVE. LIGHTS ARE ON
if(health < -25 || !getorgan(/obj/item/organ/brain))
death()
- blinded = 1
+ eye_blind = max(1, eye_blind)
silent = 0
return 1
@@ -84,11 +83,11 @@
if(paralysis)
AdjustParalysis(-2)
- blinded = 1
+ eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
- blinded = 1
+ eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health )
spawn(0)
@@ -102,16 +101,15 @@
move_delay_add = max(0, move_delay_add - rand(1, 2))
//Eyes
- if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
- blinded = 1
+ if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
+ eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
- blinded = 1
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
- if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
+ if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(ear_deaf) //deafness, heals slowly over time
ear_deaf = max(ear_deaf-1, 0)
@@ -191,12 +189,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((blind && stat != 2))
- if ((blinded))
+ if ((eye_blind))
blind.layer = 18
else
blind.layer = 0
- if (disabilities & NEARSIGHTED)
+ if (disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if (eye_blurry)
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
index f7a40978a0e..901a93c553e 100644
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ b/code/modules/mob/living/carbon/brain/life.dm
@@ -18,7 +18,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
- blinded = null
//Handle temperature/pressure differences between body and environment
if(environment) // More error checking
@@ -125,12 +124,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
- blinded = 1
+ eye_blind = max(eye_blind, 1)
silent = 0
else //ALIVE. LIGHTS ARE ON
if( !container && (health < config.health_threshold_dead || ((world.time - timeofhostdeath) > config.revival_brain_life)) )
death()
- blinded = 1
+ eye_blind = max(eye_blind, 1)
silent = 0
return 1
@@ -144,8 +143,7 @@
if(31 to INFINITY)
emp_damage = 30//Let's not overdo it
if(21 to 30)//High level of EMP damage, unable to see, hear, or speak
- eye_blind = 1
- blinded = 1
+ eye_blind = max(eye_blind, 1)
ear_deaf = 1
silent = 1
if(!alert)//Sounds an alarm, but only once per 'level'
@@ -156,7 +154,6 @@
emp_damage -= 1
if(20)
alert = 0
- blinded = 0
eye_blind = 0
ear_deaf = 0
silent = 0
@@ -249,12 +246,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((blind && stat != 2))
- if ((blinded))
+ if (eye_blind)
blind.layer = 18
else
blind.layer = 0
- if (disabilities & NEARSIGHTED)
+ if (disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if (eye_blurry)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 482079d7d61..aa7368723e0 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -1,3 +1,8 @@
+/mob/living/carbon/UnarmedAttack(var/atom/A, var/proximity_flag)
+ ..()
+ for(var/datum/mutation/human/HM in dna.mutations)
+ . += HM.on_attack_hand(A, src)
+
/mob/living/carbon/prepare_huds()
..()
prepare_data_huds()
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index d703a7ab610..be47a15b67f 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -1,3 +1,7 @@
+/mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user)
+ adjustBruteLoss(5)
+ Weaken(4)
+
/mob/living/carbon/human/attack_hand(mob/living/carbon/human/M)
if(..()) //to allow surgery to return properly.
return
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index ab55bba100e..b13f76395c3 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -44,18 +44,6 @@
else
heal_overall_damage(0, -amount)
-/mob/living/carbon/human/Stun(amount)
- if(HULK in mutations) return
- ..()
-
-/mob/living/carbon/human/Weaken(amount)
- if(HULK in mutations) return
- ..()
-
-/mob/living/carbon/human/Paralyse(amount)
- if(HULK in mutations) return
- ..()
-
mob/living/carbon/human/proc/hat_fall_prob()
var/multiplier = 1
var/obj/item/clothing/head/H = head
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 6985cf97e93..0edd08972d5 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -49,7 +49,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
- blinded = null
fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it.
tinttotal = tintcheck() //here as both hud updates and status updates call it
@@ -58,6 +57,9 @@
//No need to update all of these procs if the guy is dead.
if(stat != DEAD)
+ for(var/datum/mutation/human/HM in dna.mutations)
+ HM.on_life(src)
+
if(air_master.current_cycle%4==2 || failed_last_breath) //First, resolve location and get a breath
breathe() //Only try to take a breath every 4 ticks, unless suffocating
@@ -138,18 +140,6 @@
if ((prob(5) && paralysis <= 1))
drop_item()
emote("cough")
- if (disabilities & TOURETTES)
- if ((prob(10) && paralysis <= 1))
- Stun(10)
- switch(rand(1, 3))
- if(1)
- emote("twitch")
- if(2 to 3)
- say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]")
- var/x_offset = pixel_x + rand(-2,2) //Should probably be moved into the twitch emote at some point.
- var/y_offset = pixel_y + rand(-1,1)
- animate(src, pixel_x = pixel_x + x_offset, pixel_y = pixel_y + y_offset, time = 1)
- animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y), time = 1)
if (disabilities & NERVOUS)
if (prob(10))
stuttering = max(10, stuttering)
@@ -437,13 +427,13 @@
/mob/living/carbon/human/proc/handle_regular_status_updates()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
- blinded = 1
+ eye_blind = max(eye_blind, 1)
silent = 0
else //ALIVE. LIGHTS ARE ON
updatehealth() //TODO
if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
death()
- blinded = 1
+ eye_blind = max(eye_blind, 1)
silent = 0
return 1
@@ -477,13 +467,13 @@
if(paralysis)
AdjustParalysis(-1)
- blinded = 1
+ eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
handle_dreams()
adjustStaminaLoss(-10)
sleeping = max(sleeping-1, 0)
- blinded = 1
+ eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health && !hal_crit )
spawn(0)
@@ -493,19 +483,17 @@
stat = CONSCIOUS
//Eyes
- if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
- blinded = 1
+ if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
+ eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
- blinded = 1
else if(tinttotal >= TINT_BLIND) //covering your eyes heals blurry eyes faster
eye_blurry = max(eye_blurry-3, 0)
- // blinded = 1 //now handled under /handle_regular_hud_updates()
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
- if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
+ if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(istype(ears, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster, and slowly heals deafness
ear_damage = max(ear_damage-0.15, 0)
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 2981a2374da..b061904c605 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -22,7 +22,7 @@
if(dna)
message = dna.species.handle_speech(message,src)
- if ((HULK in mutations) && health >= 25 && length(message))
+ if (dna.check_mutation("Hulk", src))
message = "[uppertext(replacetext(message, ".", "!"))]!!" //because I don't know how to code properly in getting vars from other files -Bro
if(viruses.len)
@@ -103,7 +103,7 @@
if (ears)
ears.talk_into(src, message, message_mode)
return ITALICS | REDUCE_RANGE
-
+
if(message_mode in radiochannels)
if(ears)
ears.talk_into(src, message, message_mode)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index f0eb93ee6c2..ca0b0e35a76 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -442,11 +442,6 @@
H.see_invisible = invis_sight
H.see_in_dark = darksight
- if(XRAY in H.mutations)
- H.sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
- H.see_in_dark = 8
- H.see_invisible = SEE_INVISIBLE_LEVEL_TWO
-
if(H.seer)
H.see_invisible = SEE_INVISIBLE_OBSERVER
@@ -472,16 +467,16 @@
if(H.tinttotal >= TINT_IMPAIR)
if(tinted_weldhelh)
if(H.tinttotal >= TINT_BLIND)
- H.blinded = 1 // You get the sudden urge to learn to play keyboard
+ H.eye_blind = max(H.eye_blind, 1) // You get the sudden urge to learn to play keyboard
H.client.screen += global_hud.darkMask
else
H.client.screen += global_hud.darkMask
if(H.blind)
- if(H.blinded) H.blind.layer = 18
+ if(H.eye_blind) H.blind.layer = 18
else H.blind.layer = 0
- if( H.disabilities & NEARSIGHTED && !istype(H.glasses, /obj/item/clothing/glasses/regular) )
+ if( H.disabilities & NEARSIGHT && !istype(H.glasses, /obj/item/clothing/glasses/regular) )
H.client.screen += global_hud.vimpaired
if(H.eye_blurry) H.client.screen += global_hud.blurry
if(H.druggy) H.client.screen += global_hud.druggy
@@ -557,16 +552,6 @@
return 1
/datum/species/proc/handle_mutations_and_radiation(var/mob/living/carbon/human/H)
- if(H.getFireLoss())
- if((COLD_RESISTANCE in H.mutations) || (prob(1)))
- H.heal_organ_damage(0,1)
-
- if ((HULK in H.mutations) && H.health <= 25)
- H.mutations.Remove(HULK)
- H.update_mutations() //update our mutation overlays
- H << "You suddenly feel very weak."
- H.Weaken(3)
- H.emote("collapse")
if (H.radiation && !(RADIMMUNE in specflags))
if (H.radiation > 100)
@@ -628,7 +613,7 @@
if(J.allow_thrust(0.01, H))
hasjetpack = 1
var/grav = has_gravity(H)
-
+
if(!grav && !hasjetpack)
mspeed += 1 //Slower space without jetpack
@@ -727,9 +712,6 @@
var/obj/item/organ/limb/affecting = H.get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = H.run_armor_check(affecting, "melee")
- if(HULK in M.mutations)
- damage += 5
-
if(M.dna)
playsound(H.loc, M.dna.species.attack_sound, 25, 1, -1)
else
@@ -1131,7 +1113,7 @@
return 1
/datum/species/proc/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures
- if( (abs(310.15 - breath.temperature) > 50) && !(COLD_RESISTANCE in H.mutations) && !(COLDRES in specflags)) // Hot air hurts :(
+ if( (abs(310.15 - breath.temperature) > 50) && !(mutations_list["Cold Resistance"] in H.dna.mutations) && !(COLDRES in specflags)) // Hot air hurts :(
if(breath.temperature < 260.15)
if(prob(20))
H << "You feel your face freezing and an icicle forming in your lungs!"
@@ -1139,7 +1121,7 @@
if(prob(20))
H << "You feel your face burning and a searing heat in your lungs!"
- if(!(COLDRES in specflags)) // COLD DAMAGE
+ if(!(mutations_list["Cold Resistance"] in H.dna.mutations)) // COLD DAMAGE
switch(breath.temperature)
if(-INFINITY to 120)
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head")
@@ -1208,7 +1190,7 @@
H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN)
H.fire_alert = max(H.fire_alert, 2)
- else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(COLDRES in specflags))
+ else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(mutations_list["Cold Resistance"] in H.dna.mutations))
H.fire_alert = max(H.fire_alert, 1)
if(!istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell))
switch(H.bodytemperature)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 8bd2edd73a9..52ed2acedc0 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -11,4 +11,4 @@
else
if (internals)
internals.icon_state = "internal0"
- return
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index 0853a049540..16568c0fafa 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -46,7 +46,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
- blinded = null
//Handle temperature/pressure differences between body and environment
if(environment) // More error checking -- TLE
@@ -77,11 +76,6 @@
return pressure
/mob/living/carbon/monkey/proc/handle_disabilities()
-
- if (disabilities & EPILEPSY)
- if ((prob(1) && paralysis < 10))
- src << "You have a seizure!"
- Paralyse(10)
if (disabilities & COUGHING)
if ((prob(5) && paralysis <= 1))
drop_item()
@@ -100,20 +94,6 @@
/mob/living/carbon/monkey/proc/handle_mutations_and_radiation()
- if(getFireLoss())
- if((COLD_RESISTANCE in mutations) && prob(50))
- switch(getFireLoss())
- if(1 to 50)
- adjustFireLoss(-1)
- if(51 to 100)
- adjustFireLoss(-5)
-
- if ((HULK in mutations) && health <= 25)
- mutations.Remove(HULK)
- src << "You suddenly feel very weak."
- Weaken(3)
- emote("collapse")
-
if (radiation)
if (radiation > 100)
radiation = 100
@@ -384,12 +364,12 @@
updatehealth()
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
- blinded = 1
+ eye_blind = max(eye_blind, 1)
silent = 0
else //ALIVE. LIGHTS ARE ON
if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
death()
- blinded = 1
+ eye_blind = max(eye_blind, 1)
stat = DEAD
silent = 0
return 1
@@ -405,11 +385,11 @@
if(paralysis)
AdjustParalysis(-1)
- blinded = 1
+ eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
- blinded = 1
+ eye_blind = max(eye_blind, 1)
stat = UNCONSCIOUS
if( prob(10) && health )
spawn(0)
@@ -419,16 +399,16 @@
stat = CONSCIOUS
//Eyes
- if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
- blinded = 1
+ if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
+ eye_blind = max(eye_blind, 1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
- blinded = 1
+ eye_blind = max(eye_blind, 1)
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
//Ears
- if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
+ if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
ear_deaf = max(ear_deaf, 1)
else if(ear_deaf) //deafness, heals slowly over time
ear_deaf = max(ear_deaf-1, 0)
@@ -532,12 +512,12 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if(blind && stat != DEAD)
- if(blinded)
+ if(eye_blind)
blind.layer = 18
else
blind.layer = 0
- if(disabilities & NEARSIGHTED)
+ if(disabilities & NEARSIGHT)
client.screen += global_hud.vimpaired
if(eye_blurry)
diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm
index 46136f4ecf9..1a6fd83b0f4 100644
--- a/code/modules/mob/living/carbon/slime/life.dm
+++ b/code/modules/mob/living/carbon/slime/life.dm
@@ -33,7 +33,6 @@
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
//to find it.
- src.blinded = null
if(environment)
handle_environment(environment) // Handle temperature/pressure differences between body and environment
@@ -210,7 +209,7 @@
if (src.stat == DEAD)
src.lying = 1
- src.blinded = 1
+ src.eye_blind = max(eye_blind, 1)
else
if (src.paralysis || src.stunned || src.weakened || (status_flags && FAKEDEATH)) //Stunned etc.
if (src.stunned > 0)
@@ -222,7 +221,7 @@
src.stat = 0
if (src.paralysis > 0)
AdjustParalysis(-1)
- src.blinded = 0
+ src.eye_blind = 0
src.lying = 0
src.stat = 0
@@ -234,7 +233,7 @@
if (src.eye_blind)
src.eye_blind = 0
- src.blinded = 1
+ src.eye_blind = max(eye_blind, 1)
if (src.ear_deaf > 0) src.ear_deaf = 0
if (src.ear_damage < 25)
@@ -242,9 +241,9 @@
src.density = !( src.lying )
- if (src.sdisabilities & BLIND)
- src.blinded = 1
- if (src.sdisabilities & DEAF)
+ if (src.disabilities & BLIND)
+ src.eye_blind = max(eye_blind, 1)
+ if (src.disabilities & DEAF)
src.ear_deaf = 1
if (src.eye_blurry > 0)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index f9d4fe588e5..04970ab3dc6 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -136,7 +136,7 @@
/mob/living/ex_act(severity, target)
..()
- if(client && !blinded)
+ if(client && !eye_blind)
flick("flash", src.flash)
/mob/living/proc/updatehealth()
@@ -380,9 +380,7 @@
radiation = 0
nutrition = 400
bodytemperature = 310
- sdisabilities = 0
disabilities = 0
- blinded = 0
eye_blind = 0
eye_blurry = 0
ear_deaf = 0
@@ -530,7 +528,7 @@
/mob/living/proc/cuff_break(obj/item/weapon/restraints/I, mob/living/carbon/C)
- if(HULK in usr.mutations)
+ if(C.dna.check_mutation("Hulk", C))
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
C.visible_message("[C] manages to break [I]!")
@@ -556,7 +554,7 @@
breakouttime = LC.breakouttime
displaytime = breakouttime / 600
- if(isalienadult(C) || HULK in usr.mutations)
+ if(isalienadult(C) || C.dna.check_mutation("Hulk", C))
C.visible_message("[C] is trying to break [I]!")
C << "You attempt to break [I]. (This will take around 5 seconds and you need to stand still.)"
spawn(0)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index c6ed851bece..8e136c91b10 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -196,7 +196,7 @@ var/list/department_radio_keys = list(
if(!message)
return 0
- if(sdisabilities & MUTE)
+ if(disabilities & MUTE)
return 0
if(is_muzzled())
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index e2848be3439..3420cbfd540 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -5,9 +5,6 @@
if (src.notransform)
return
-
- src.blinded = null
-
//Status updates, death etc.
clamp_values()
handle_regular_status_updates()
@@ -50,7 +47,7 @@
if(src.module_state_3)
src.cell.use(5)
src.cell.use(1)
- src.blinded = 0
+ src.eye_blind = 0
src.stat = 0
else
uneq_all()
@@ -98,22 +95,20 @@
AdjustWeakened(-1)
if (src.paralysis > 0)
AdjustParalysis(-1)
- src.blinded = 1
+ src.eye_blind = max(eye_blind, 1)
else
- src.blinded = 0
+ src.eye_blind = 0
else //Not stunned.
src.stat = 0
else //Dead.
- src.blinded = 1
- src.stat = 2
+ src.eye_blind = 1
if (src.stuttering) src.stuttering--
if (src.eye_blind)
src.eye_blind--
- src.blinded = 1
if (src.ear_deaf > 0) src.ear_deaf--
if (src.ear_damage < 25)
@@ -122,9 +117,9 @@
src.density = !( src.lying )
- if ((src.sdisabilities & BLIND))
- src.blinded = 1
- if ((src.sdisabilities & DEAF))
+ if (src.disabilities & BLIND)
+ src.eye_blind = max(1, eye_blind)
+ if (src.disabilities & DEAF)
src.ear_deaf = 1
if (src.eye_blurry > 0)
@@ -241,11 +236,11 @@
client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
if ((src.blind && src.stat != 2))
- if(src.blinded)
+ if(src.eye_blind)
src.blind.layer = 18
else
src.blind.layer = 0
- if (src.disabilities & NEARSIGHTED)
+ if (src.disabilities & NEARSIGHT)
src.client.screen += global_hud.vimpaired
if (src.eye_blurry)
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index 0ac3781a406..e4a1f52301c 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -41,64 +41,4 @@
desc = "It's Coffee, the other pet!"
response_help = "pets"
response_disarm = "gently pushes aside"
- response_harm = "stomps"
-
-//LOOK AT THIS - ..()??
-/*/mob/living/simple_animal/crab/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(istype(O, /obj/item/weapon/wirecutters))
- if(prob(50))
- user << "\red \b This kills the crab."
- health -= 20
- Die()
- else
- GetMad()
- get
- if(istype(O, /obj/item/stack/medical))
- if(stat != DEAD)
- var/obj/item/stack/medical/MED = O
- if(health < maxHealth)
- if(MED.amount >= 1)
- health = min(maxHealth, health + MED.heal_brute)
- MED.amount -= 1
- if(MED.amount <= 0)
- qdel(MED)
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\blue [user] applies [MED] on [src]")
- else
- user << "\blue this crab is dead, medical items won't bring it back to life."
- else
- if(O.force)
- health -= O.force
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\red \b [src] has been attacked with [O] by [user]. ")
- else
- usr << "\red This weapon is ineffective, it does no damage."
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\red [user] gently taps [src] with [O]. ")
-
-/mob/living/simple_animal/crab/GetMad()
- name = "MEGAMADCRAB"
- real_name = "MEGAMADCRAB"
- desc = "OH NO YOU DUN IT NOW."
- icon = 'icons/mob/mob.dmi'
- icon_state = "madcrab"
- icon_living = "madcrab"
- icon_dead = "madcrab_dead"
- speak_emote = list("clicks")
- emote_hear = list("clicks with fury", "clicks angrily")
- emote_see = list("clacks")
- speak_chance = 1
- turns_per_move = 15//Gotta go fast
- maxHealth = 100//So they don't die as quickly
- health = 100
- melee_damage_lower = 3
- melee_damage_upper = 10//Kill them. Kill them all
- if(inventory_head)//Drops inventory so it doesn't have to be dealt with
- inventory_head.loc = src.loc
- inventory_head = null
- if(inventory_mask)
- inventory_mask.loc = src.loc
- inventory_mask = null*/
\ No newline at end of file
+ response_harm = "stomps"
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm
index 93ad66bd444..d834d5482a8 100644
--- a/code/modules/mob/living/simple_animal/hostile/statue.dm
+++ b/code/modules/mob/living/simple_animal/hostile/statue.dm
@@ -127,7 +127,7 @@
for(var/atom/check in check_list)
for(var/mob/living/M in viewers(world.view + 1, check) - src)
if(M.client && CanAttack(M) && !issilicon(M))
- if(!M.blinded && !(sdisabilities & BLIND))
+ if(!M.eye_blind)
return M
return null
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index e26a681c46a..7b2ace49b29 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -54,19 +54,19 @@ var/next_mob_id = 0
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
if (type)
- if(type & 1 && (sdisabilities & BLIND || blinded || paralysis) )//Vision related
+ if(type & 1 && (disabilities & BLIND || paralysis) )//Vision related
if (!( alt ))
return
else
msg = alt
type = alt_type
- if (type & 2 && (sdisabilities & DEAF || ear_deaf))//Hearing related
+ if (type & 2 && ear_deaf)//Hearing related
if (!( alt ))
return
else
msg = alt
type = alt_type
- if ((type & 1 && sdisabilities & BLIND))
+ if ((type & 1 && disabilities & BLIND))
return
// Added voice muffling for Issue 41.
if(stat == UNCONSCIOUS || sleeping > 0)
@@ -289,7 +289,6 @@ var/list/slot_equipment_priority = list( \
set name = "Examine"
set category = "IC"
-// if( (sdisabilities & BLIND || blinded || stat) && !istype(src,/mob/dead/observer) )
if(is_blind(src))
src << "Something is there but you can't see it."
return
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 6b66ca59f6e..3fc28c4f96a 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -41,7 +41,6 @@
var/obj/machinery/machine = null
var/other_mobs = null
var/memory = ""
- var/sdisabilities = 0 //Carbon
var/disabilities = 0 //Carbon
var/atom/movable/pulling = null
var/next_move = null
@@ -53,7 +52,6 @@
var/ear_damage = null //Carbon
var/stuttering = null //Carbon
var/real_name = null
- var/blinded = null
var/bhunger = 0 //Carbon
var/ajourn = 0
var/druggy = 0 //Carbon
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index ed782e6daaf..4c74063c68e 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -371,10 +371,9 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
hud_used.action_intent.icon_state = "help"
proc/is_blind(A)
- if(istype(A, /mob/living/carbon))
- var/mob/living/carbon/C = A
- if(C.blinded != null)
- return 1
+ if(ismob(A))
+ var/mob/B = A
+ return B.eye_blind
return 0
proc/is_special_character(mob/M) // returns 1 for special characters and 2 for heroes of gamemode //moved out of admins.dm because things other than admin procs were calling this.
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 0f7b55673dd..ca0d4c866d3 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -68,9 +68,13 @@
if(usr.stat || !usr.canmove || usr.restrained())
return
- if((CLUMSY in usr.mutations) && prob(25))
- usr << "You cut yourself on the paper! Ahhhh! Ahhhhh!"
- usr.damageoverlaytemp = 9001
+
+ if(!ishuman(usr))
+ return
+ var/mob/living/carbon/human/H = usr
+ if(H.dna.check_mutation("Clumsiness", H) && prob(25))
+ H << "You cut yourself on the paper! Ahhhh! Ahhhhh!"
+ H.damageoverlaytemp = 9001
return
var/n_name = copytext(sanitize(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text), 1, MAX_NAME_LEN)
if((loc == usr && usr.stat == 0))
@@ -263,14 +267,14 @@
update_icon()
-/obj/item/weapon/paper/attackby(obj/item/weapon/P, mob/user)
+/obj/item/weapon/paper/attackby(obj/item/weapon/P, mob/living/carbon/human/user)
..()
if(is_blind(user))
return
var/clown = 0
- if(user && (CLUMSY in user.mutations))
+ if(istype(user) && user.dna.check_mutation("Clumsiness", user))
clown = 1
if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index c42644b2999..439c07fd13b 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -52,7 +52,7 @@
for(var/obj/O in contents)
O.emp_act(severity)
-/obj/item/weapon/gun/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)//TODO: go over this
+/obj/item/weapon/gun/afterattack(atom/target as mob|obj|turf, mob/living/carbon/human/user as mob|obj, flag, params)//TODO: go over this
if(flag) //It's adjacent, is the user, or is on the user's person
if(istype(target, /mob/) && target != user && !(target in user.contents)) //We make sure that it is a mob, it's not us or part of us.
if(user.a_intent == "harm") //Flogging action
@@ -62,27 +62,22 @@
//Exclude lasertag guns from the CLUMSY check.
if(clumsy_check)
- if(istype(user, /mob/living))
- var/mob/living/M = user
- if ((CLUMSY in M.mutations) && prob(40))
- M << "You shoot yourself in the foot with \the [src]!"
- afterattack(user, user)
- M.drop_item()
- return
+ if((istype(user) && user.dna.check_mutation("Clumsiness", user)) && prob(40))
+ user << "You shoot yourself in the foot with \the [src]!"
+ afterattack(user, user)
+ user.drop_item()
+ return
if (!user.IsAdvancedToolUser())
user << "You don't have the dexterity to do this!"
return
if(trigger_guard)
- if(istype(user, /mob/living))
- var/mob/living/M = user
- if (HULK in M.mutations)
- M << "Your meaty finger is much too large for the trigger guard!"
+ if(istype(user))
+ if(user.dna.check_mutation("Hulk"))
+ user << "Your meaty finger is much too large for the trigger guard!"
return
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.dna && NOGUNS in H.dna.species.specflags)
+ if(NOGUNS in user.dna.species.specflags)
user << "Your fingers don't fit in the trigger guard!"
return
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 4a278afbdbe..2422177c07b 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -611,7 +611,6 @@ datum/reagent/ryetalyn/on_mob_life(var/mob/living/M as mob)
M.mutations = list()
M.disabilities = 0
- M.sdisabilities = 0
M.jitteriness = 0
// Might need to update appearance for hulk etc.
@@ -978,7 +977,6 @@ datum/reagent/adminordrazine/on_mob_life(var/mob/living/carbon/M as mob)
M.hallucination = 0
M.setBrainLoss(0)
M.disabilities = 0
- M.sdisabilities = 0
M.eye_blurry = 0
M.eye_blind = 0
M.SetWeakened(0)
@@ -1092,9 +1090,8 @@ datum/reagent/imidazoline/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.eye_blurry = max(M.eye_blurry-5 , 0)
M.eye_blind = max(M.eye_blind-5 , 0)
- M.disabilities &= ~NEARSIGHTED
+ M.disabilities &= ~NEARSIGHT
M.eye_stat = max(M.eye_stat-5, 0)
-// M.sdisabilities &= ~1 Replaced by eye surgery
..()
return
@@ -2263,7 +2260,7 @@ datum/reagent/carrotjuice/on_mob_life(var/mob/living/M as mob)
//nothing
if(21 to INFINITY)
if (prob(data-10))
- M.disabilities &= ~NEARSIGHTED
+ M.disabilities &= ~NEARSIGHT
data++
..()
return
diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm
index 9d3afe3e1b9..0fb7f2413cb 100644
--- a/code/modules/surgery/eye_surgery.dm
+++ b/code/modules/surgery/eye_surgery.dm
@@ -15,8 +15,8 @@
/datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] successfully fixes [target]'s eyes!")
- target.sdisabilities &= ~BLIND
- target.disabilities &= ~NEARSIGHTED
+ target.disabilities &= ~BLIND
+ target.disabilities &= ~NEARSIGHT
target.eye_blurry = 35 //this will fix itself slowly.
target.eye_stat = 0
return 1
diff --git a/tgstation.dme b/tgstation.dme
index 17ef9c54309..02a2fb742ec 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -136,6 +136,7 @@
#include "code\datums\mind.dm"
#include "code\datums\mixed.dm"
#include "code\datums\modules.dm"
+#include "code\datums\mutations.dm"
#include "code\datums\recipe.dm"
#include "code\datums\spell.dm"
#include "code\datums\sun.dm"