- Mutantraces are no longer a variable tied to human mobs, but rather a variable tied to dna. As such, changelings who absorb people with a mutantrace will now transform back into the mutantrace when they transform into their DNA.

- Fixed issue 784.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4440 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
baloh.matevz
2012-08-16 17:13:28 +00:00
parent 27b56fd284
commit c0465614da
17 changed files with 74 additions and 62 deletions

View File

@@ -735,8 +735,9 @@ client
if(!H || !istype(H))
usr << "Mob doesn't exist anymore"
return
H.mutantrace = new_mutantrace
H.update_mutantrace()
if(H.dna)
H.dna.mutantrace = new_mutantrace
H.update_mutantrace()
else if (href_list["regenerateicons"])
var/mob/M = locate(href_list["regenerateicons"])
if(!istype(M))

View File

@@ -4,6 +4,7 @@
var/struc_enzymes = null
var/uni_identity = null
var/b_type = "A+"
var/mutantrace = null //The type of mutant race the player is if applicable (i.e. potato-man)
/datum/dna/proc/check_integrity(var/mob/living/carbon/human/character)
if(character)

View File

@@ -679,7 +679,7 @@ Auto Patrol: []"},
if(istype(perp:wear_suit, /obj/item/clothing/suit/wizrobe))
threatcount += 2
if(perp.mutantrace && perp.mutantrace != "none")
if(perp.dna && perp.dna.mutantrace && perp.dna.mutantrace != "none")
threatcount += 2
//Agent cards lower threatlevel when normal idchecking is off.

View File

@@ -611,7 +611,7 @@ Auto Patrol: []"},
if(istype(perp:wear_suit, /obj/item/clothing/suit/wizrobe))
threatcount += 2
if(perp.mutantrace && perp.mutantrace != "none")
if(perp.dna && perp.dna.mutantrace && perp.dna.mutantrace != "none")
threatcount += 2
//Agent cards lower threatlevel.

View File

@@ -191,8 +191,9 @@
H.f_style = "Shaved"
H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3")
H.mutantrace = mrace
H.update_mutantrace()
if(H.dna)
H.dna.mutantrace = mrace
H.update_mutantrace()
H.suiciding = 0
src.attempting = 0
return 1

View File

@@ -419,7 +419,10 @@
subject.dna.check_integrity()
var/datum/data/record/R = new /datum/data/record( )
R.fields["mrace"] = subject.mutantrace
if(subject.dna)
R.fields["mrace"] = subject.dna.mutantrace
else
R.fields["mrace"] = null
R.fields["ckey"] = subject.ckey
R.fields["name"] = subject.real_name
R.fields["id"] = copytext(md5(subject.real_name), 2, 6)

View File

@@ -916,7 +916,8 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(se)
podman.dna.struc_enzymes = se
if(!prob(potency)) //if it fails, plantman!
podman.mutantrace = "plant"
if(podman.dna)
podman.dna.mutantrace = "plant"
podman.update_mutantrace()
else //else, one packet of seeds. maybe two

View File

@@ -1053,8 +1053,9 @@ datum
C.adjustToxLoss(2) // 4 toxic damage per application, doubled for some reason
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.mutantrace == "plant") //plantmen take a LOT of damage
H.adjustToxLoss(10)
if(H.dna)
if(H.dna.mutantrace == "plant") //plantmen take a LOT of damage
H.adjustToxLoss(10)
plasma
name = "Plasma"

View File

@@ -127,13 +127,14 @@
var/attack_verb
switch(M.mutantrace)
if("lizard")
attack_verb = "scratch"
if("plant")
attack_verb = "slash"
else
attack_verb = "punch"
if(M.dna)
switch(M.dna.mutantrace)
if("lizard")
attack_verb = "scratch"
if("plant")
attack_verb = "slash"
else
attack_verb = "punch"
var/damage = rand(0, 9)

View File

@@ -43,8 +43,6 @@
var/icon/stand_icon = null
var/icon/lying_icon = null
var/mutantrace = null //The type of mutant race the player is if applicable (i.e. potato-man)
var/list/organs = list()
var/miming = null //Toggle for the mime's abilities.

View File

@@ -726,7 +726,7 @@
proc/handle_chemicals_in_body()
if(reagents) reagents.metabolize(src)
if(mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist
if(dna && dna.mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
if(istype(loc,/turf)) //else, there's considered to be no light
light_amount = min(10,loc:sd_lumcount) - 5 //hardcapped so it's not abused by having a ton of flashlights
@@ -768,7 +768,7 @@
if(overeatduration > 1)
overeatduration -= 2 //doubled the unfat rate
if(mutantrace == "plant")
if(dna && dna.mutantrace == "plant")
if(nutrition < 200)
take_overall_damage(2,0)
@@ -934,12 +934,13 @@
if(healths) healths.icon_state = "health7" //DEAD healthmeter
else
sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS)
switch(mutantrace)
if("lizard","metroid")
see_in_dark = 3
see_invisible = SEE_INVISIBLE_LEVEL_ONE
else
see_in_dark = 2
if(dna)
switch(dna.mutantrace)
if("lizard","metroid")
see_in_dark = 3
see_invisible = SEE_INVISIBLE_LEVEL_ONE
else
see_in_dark = 2
if(XRAY in mutations)
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS

View File

@@ -16,20 +16,21 @@
if (copytext(message, 1, 2) != "*")
return
if(src.mutantrace == "lizard")
if(copytext(message, 1, 2) != "*")
message = dd_replacetext(message, "s", stutter("ss"))
if(src.dna)
if(src.dna.mutantrace == "lizard")
if(copytext(message, 1, 2) != "*")
message = dd_replacetext(message, "s", stutter("ss"))
if(src.mutantrace == "metroid" && prob(5))
if(copytext(message, 1, 2) != "*")
if(copytext(message, 1, 2) == ";")
message = ";"
else
message = ""
message += "SKR"
var/imax = rand(5,20)
for(var/i = 0,i<imax,i++)
message += "E"
if(src.dna.mutantrace == "metroid" && prob(5))
if(copytext(message, 1, 2) != "*")
if(copytext(message, 1, 2) == ";")
message = ";"
else
message = ""
message += "SKR"
var/imax = rand(5,20)
for(var/i = 0,i<imax,i++)
message += "E"
if(stat != 2)
for(var/datum/disease/pierrot_throat/D in viruses)

View File

@@ -182,7 +182,7 @@ Please contact me on #coderbus IRC. ~Carn x
/mob/living/carbon/human/proc/update_body(var/update_icons=1)
if(stand_icon) del(stand_icon)
if(lying_icon) del(lying_icon)
if(mutantrace) return
if(dna && dna.mutantrace) return
var/husk = (HUSK in src.mutations)
var/fat = (FAT in src.mutations)
var/g = "m"
@@ -233,7 +233,7 @@ Please contact me on #coderbus IRC. ~Carn x
overlays_standing[HAIR_LAYER] = null
//mutants don't have hair. masks and helmets can obscure our hair too.
if( mutantrace || (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)) )
if( (dna && dna.mutantrace) || (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)) )
if(update_icons) update_icons()
return
@@ -306,19 +306,20 @@ Please contact me on #coderbus IRC. ~Carn x
if( FAT in mutations )
fat = "fat"
switch(mutantrace)
if("lizard","golem","metroid")
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[mutantrace][fat]_l")
overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[mutantrace][fat]_s")
if("plant")
if(stat == DEAD) //TODO
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[mutantrace]_d")
if(dna)
switch(dna.mutantrace)
if("lizard","golem","metroid")
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_l")
overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_s")
if("plant")
if(stat == DEAD) //TODO
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_d")
else
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_l")
overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s")
else
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[mutantrace][fat]_[gender]_l")
overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[mutantrace][fat]_[gender]_s")
else
overlays_lying[MUTANTRACE_LAYER] = null
overlays_standing[MUTANTRACE_LAYER] = null
overlays_lying[MUTANTRACE_LAYER] = null
overlays_standing[MUTANTRACE_LAYER] = null
update_body(0)
update_hair(0)
if(update_icons) update_icons()

View File

@@ -447,8 +447,9 @@
if(istype(L, /mob/living/carbon/human)) //Ignore metroid(wo)men
var/mob/living/carbon/human/H = L
if(H.mutantrace == "metroid")
continue
if(H.dna)
if(H.dna.mutantrace == "metroid")
continue
if(!istype(src, /mob/living/carbon/metroid/adult)) //Non-starving diciplined adult metroids wont eat things
if(!starving && Discipline > 0)

View File

@@ -401,12 +401,12 @@
L[A.name] = list(A, (C) ? C : O, list(alarmsource))
if (O)
if (C && C.status)
src << text("--- [] alarm detected in []! (<A HREF=?src=\ref[];switchcamera=\ref[]>[]</A>)", class, A.name, src, C, C.c_tag)
src << "--- [class] alarm detected in [A.name]! (<A HREF=?src=\ref[src];switchcamera=\ref[C]>[C.c_tag]</A>)"
else if (CL && CL.len)
var/foo = 0
var/dat2 = ""
for (var/obj/machinery/camera/I in CL)
dat2 += text("[]<A HREF=?src=\ref[];switchcamera=\ref[]>[]</A>", (!foo) ? "" : " | ", src, I, I.c_tag)
dat2 += text("[]<A HREF=?src=\ref[];switchcamera=\ref[]>[]</A>", (!foo) ? "" : " | ", src, I, I.c_tag) //I'm not fixing this shit...
foo = 1
src << text ("--- [] alarm detected in []! ([])", class, A.name, dat2)
else

View File

@@ -72,8 +72,9 @@
var/datum/preferences/A = new() //Randomize appearance for the human
A.randomize_appearance_for(new_mob)
var/mob/living/carbon/human/Human = new_mob
Human.mutantrace = pick("lizard","golem","metroid","plant",4;"")
var/mob/living/carbon/human/H = new_mob
if(H.dna)
H.dna.mutantrace = pick("lizard","golem","metroid","plant",4;"")
else
return

View File

@@ -49,7 +49,7 @@
on_hit(var/atom/target, var/blocked = 0)
var/mob/living/M = target
if(istype(target, /mob/living/carbon/human) && M:mutantrace == "plant") //Plantmen possibly get mutated and damaged by the rays.
if(ishuman(target) && M.dna && M.dna.mutantrace == "plant") //Plantmen possibly get mutated and damaged by the rays.
var/mob/living/L as mob
if(prob(15))
L.apply_effect((rand(30,80)),IRRADIATE)
@@ -87,7 +87,7 @@
on_hit(var/atom/target, var/blocked = 0)
var/mob/M = target
if(istype(target, /mob/living/carbon/human) && M:mutantrace == "plant") //These rays make plantmen fat.
if(ishuman(target) && M.dna && M.dna.mutantrace == "plant") //These rays make plantmen fat.
if(M.nutrition < 500) //sanity check
M.nutrition += 30
else if (istype(target, /mob/living/carbon/))