Fixing Genetics

This commit is contained in:
ZomgPonies
2014-01-20 03:31:25 -05:00
parent 1c8c96a9eb
commit fe0a3a2dcd
5 changed files with 103 additions and 44 deletions
+3 -3
View File
@@ -315,14 +315,14 @@ var/global/list/datum/dna/gene/dna_genes[0]
return add_zero2(num2hex(value,1), 3)
/datum/dna/proc/UpdateUI()
src.unique_enzymes=""
src.uni_identity=""
for(var/block in UI)
uni_identity += EncodeDNABlock(block)
//testing("New UI: [uni_identity]")
dirtyUI=0
/datum/dna/proc/UpdateSE()
// var/oldse=struc_enzymes
//var/oldse=struc_enzymes
struc_enzymes=""
for(var/block in SE)
struc_enzymes += EncodeDNABlock(block)
@@ -356,4 +356,4 @@ var/global/list/datum/dna/gene/dna_genes[0]
ResetSE()
unique_enzymes = md5(character.real_name)
reg_dna[unique_enzymes] = character.real_name
reg_dna[unique_enzymes] = character.real_name
-1
View File
@@ -170,4 +170,3 @@
// Used below, simple injection modifier.
/proc/probinj(var/pr, var/inj)
return prob(pr+inj*pr)
+79 -19
View File
@@ -122,8 +122,72 @@
src.add_fingerprint(usr)
return
/obj/machinery/dna_scannernew/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
if(O.loc == user) //no you can't pull things out of your ass
return
if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis || user.resting) //are you cuffed, dying, lying, stunned or other
return
if(O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)) // is the mob anchored, too far away from you, or are you too far away from the source
return
if(!ismob(O)) //humans only
return
if(istype(O, /mob/living/simple_animal) || istype(O, /mob/living/silicon)) //animals and robutts dont fit
return
if(!ishuman(user) && !isrobot(user)) //No ghosts or mice putting people into the sleeper
return
if(user.loc==null) // just in case someone manages to get a closet into the blue light dimension, as unlikely as that seems
return
if(!istype(user.loc, /turf) || !istype(O.loc, /turf)) // are you in a container/closet/pod/etc?
return
if(occupant)
user << "\blue <B>The DNA Scanner is already occupied!</B>"
return
if(isrobot(user))
if(!istype(user:module, /obj/item/weapon/robot_module/medical))
user << "<span class='warning'>You do not have the means to do this!</span>"
return
var/mob/living/L = O
if(!istype(L) || L.buckled)
return
if(L.abiotic())
user << "\red <B>Subject cannot have abiotic items on.</B>"
return
for(var/mob/living/carbon/slime/M in range(1,L))
if(M.Victim == L)
usr << "[L.name] will not fit into the DNA Scanner because they have a slime latched onto their head."
return
if(L == user)
return
visible_message("[user] puts [L.name] into the DNA Scanner.", 3)
put_in(L)
/obj/machinery/dna_scannernew/attackby(var/obj/item/weapon/item as obj, var/mob/user as mob)
if(istype(item, /obj/item/weapon/reagent_containers/glass))
if (istype(item, /obj/item/weapon/screwdriver))
if (!opened)
src.opened = 1
user << "You open the maintenance hatch of [src]."
//src.icon_state = "autolathe_t"
else
src.opened = 0
user << "You close the maintenance hatch of [src]."
//src.icon_state = "autolathe"
return 1
else if(istype(item, /obj/item/weapon/crowbar))
if (occupant)
user << "\red You cannot disassemble this [src], it's occupado."
return 1
if (opened)
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
if(I.reliability != 100 && crit_fail)
I.crit_fail = 1
I.loc = src.loc
del(src)
return
else if(istype(item, /obj/item/weapon/reagent_containers/glass))
if(beaker)
user << "\red A beaker is already loaded into the machine."
return
@@ -144,7 +208,12 @@
if (G.affecting.abiotic())
user << "\blue <B>Subject cannot have abiotic items on.</B>"
return
var/mob/M = G.affecting
put_in(G.affecting)
src.add_fingerprint(user)
del(G)
return
/obj/machinery/dna_scannernew/proc/put_in(var/mob/M)
if(M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
@@ -152,8 +221,6 @@
src.occupant = M
src.icon_state = "scanner_1"
src.add_fingerprint(user)
// search for ghosts, if the corpse is empty and the scanner is connected to a cloner
if(locate(/obj/machinery/computer/cloning, get_step(src, NORTH)) \
|| locate(/obj/machinery/computer/cloning, get_step(src, SOUTH)) \
@@ -161,18 +228,10 @@
|| locate(/obj/machinery/computer/cloning, get_step(src, WEST)))
if(!M.client && M.mind)
message_admins("No client found, searching for compatible mind")
for(var/mob/C in respawnable_list)
if(C.mind && C.mind.key == M.mind.key)
message_admins("Found mind, asking for respawn")
switch(alert(C,"Your corpse has been placed into a cloning scanner. Do you want to be resurrected/cloned? Please not if you select 'No', you will be able to be cloned or borged again this round.","Clone Alert","Yes","No"))
if("Yes")
M.key = C.key
return
if("No")
return
del(G)
for(var/mob/dead/observer/ghost in player_list)
if(ghost.mind == M.mind)
ghost << "<b><font color = #330033><font size = 3>Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned!</b> (Verbs -> Ghost -> Re-enter corpse)</font color>"
break
return
/obj/machinery/dna_scannernew/proc/go_out()
@@ -283,7 +342,7 @@
I.loc = src
src.disk = I
user << "You insert [I]."
nanomanager.update_uis(src) // update all UIs attached to src
nanomanager.update_uis(src) // update all UIs attached to src()
return
else
src.attack_hand(user)
@@ -355,7 +414,7 @@
W.loc = src
src.disk = W
user << "You insert [W]."
nanomanager.update_uis(src) // update all UIs attached to src
nanomanager.update_uis(src) // update all UIs attached to src()
/*
/obj/machinery/computer/scan_consolenew/process() //not really used right now
if(stat & (NOPOWER|BROKEN))
@@ -368,6 +427,7 @@
ui_interact(user)
/obj/machinery/computer/scan_consolenew/attack_ai(user as mob)
src.add_hiddenprint(user)
ui_interact(user)
/obj/machinery/computer/scan_consolenew/attack_hand(user as mob)
@@ -377,7 +437,7 @@
/**
* The ui_interact proc is used to open and update Nano UIs
* If ui_interact is not used then the UI will not update correctly
* ui_interact is currently defined for /atom/movable (which is inherited by /obj and /mob)
* ui_interact is currently defined for /atom/movable
*
* @param user /mob The mob who is interacting with this ui
* @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main")
+1 -4
View File
@@ -63,9 +63,6 @@
M.verbs += /mob/living/carbon/human/proc/morph
OnDrawUnderlays(var/mob/M,var/g,var/fat)
return "cold[fat]_s"
/datum/dna/gene/basic/cold_resist
name="Cold Resistance"
activation_messages=list("Your body is filled with warmth.")
@@ -165,4 +162,4 @@
block=TELEBLOCK
OnDrawUnderlays(var/mob/M,var/g,var/fat)
return "telekinesishead[fat]_s"
return "telekinesishead[fat]_s"
+20 -17
View File
@@ -57,9 +57,8 @@
..()
/mob/living/carbon/human/New()
if(!species)
set_species("Human")
set_species()
if(species.language)
var/datum/language/L = all_languages[species.language]
@@ -72,6 +71,7 @@
if(!dna)
dna = new /datum/dna(null)
dna.species=species.name
for(var/i=0;i<7;i++) // 2 for medHUDs and 5 for secHUDs
hud_list += image('icons/mob/hud.dmi', src, "hudunknown")
@@ -82,10 +82,10 @@
dna.real_name = real_name
prev_gender = gender // Debug for plural genders
make_organs()
make_blood()
/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes)
if ((!( yes ) || now_pushing))
return
@@ -1346,36 +1346,39 @@ mob/living/carbon/human/yank_out_object()
else
usr << "\blue [self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)]."
/mob/living/carbon/human/proc/set_species(var/new_species)
/mob/living/carbon/human/proc/set_species(var/new_species,var/on_spawn=0)
if(!new_species)
new_species = dna.species
if(!dna)
if(!new_species)
new_species = "Human"
else
dna.species = new_species
if(!new_species)
new_species = dna.species
else
dna.species = new_species
if(species && (species.name && species.name == new_species))
return 1
return
if(species && species.language)
remove_language(species.language)
species = all_species[new_species]
if(species.language)
add_language(species.language)
see_in_dark = species.darksight
if(see_in_dark > 2)
see_invisible = SEE_INVISIBLE_LEVEL_ONE
else
see_invisible = SEE_INVISIBLE_LIVING
if(species.name=="Slime People")
dna.mutantrace = "slime"
if(species.default_mutations.len>0)
var/needs_update=0
for(var/mutation in species.default_mutations)
if(!(mutation in mutations))
mutations.Add(mutation)
needs_update=1
if(needs_update)
check_mutations=1 // Can't check here or shit will happen. Bad shit.
if(species.default_mutations.len>0 || species.default_blocks.len>0)
do_deferred_species_setup=1
spawn(0)
update_icons()