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.
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.