So you can customize your character with tattoos or fur colors for Taj or whatever. I'll let Anewbe work out what he wants to whitelist other than what I did already.
The icons are sliced up with the HumanScissors program I wrote, so they are per-organ. So, lop off a limb, put it on someone else, they have the tattoos and whatnot. It's part of DNA so it comes with when cloning.
They are defined in the normal sprite_accessories file and the icons are all in markings.dm in the format of "markingname-organtag" so if you have a marking that spans both arms and torso you need "thatone-torso", "thatone-l_arm", "thatone-r_arm" icon states.
This is a hacky fix and is temporary until I can sit down and figure out exactly why it's not encoding that block of DNA properly.
The result of it not encoding it into the dna is that if you clone the person they have a random value there that was assigned at round start.
We discovered that most of the problems were were having was because of BYOND passing lists (e.g. SE and UI) by-ref instead of the assumed by-val.
This commit adds dna.Clone() and (UI|SE).Copy() where needed. These should be used where DNA or SE/UI lists are COPIED, otherwise changes made in the reference will affect the real strand.
This change also messes with the gene activation logic.
Conflicts:
code/game/dna/dna2_domutcheck.dm
code/game/dna/genes/powers.dm
Made after DNA2 hit /vg/'s main server after no one tested anything.
* Gene activation/deactivation made modular, refactors domutcheck.
* Standardized genetics disks and injectors a bit in response to buffer corruption issues. (Untested)
* Lots of major bug fixes.
* Skin tones fixed.
Still needs further testing. All I did was mess around with monkeys.
Conflicts:
code/game/dna/dna2.dm
code/game/dna/dna2_domutcheck.dm
code/game/dna/dna2_helpers.dm
code/game/dna/genes/disabilities.dm
code/game/dna/genes/powers.dm
code/modules/mob/living/carbon/monkey/monkey.dm
Looks like a copy paste problem where the eye blocks were being set to facial blocks
and the math needed for s_tone wasn't being done.
Todo: Fix clones not having unique_enzymes, /list being displayed in cloning pod, etc.
DNA now stores blocks internally as numbers and only makes the uni_identity and struc_enzymes strings when something has changed. This is vastly more efficient.
In addition, the API for using it has been simplified. Common tasks, such as setting a sub-block, or getting a value from the block, are handled entirely by the DNA datum with simple, easy-to-use procs.
Tested on local server, but may need balancing and additional look-over since the code is from our server (/vg/) and I likely broke or forgot something.