mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-16 01:23:41 +01:00
Fixing Genetics
This commit is contained in:
@@ -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
|
||||
@@ -170,4 +170,3 @@
|
||||
// Used below, simple injection modifier.
|
||||
/proc/probinj(var/pr, var/inj)
|
||||
return prob(pr+inj*pr)
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user