Merge pull request #4382 from Baystation12/master

master -> dev-freeze
PDA bombs are now more balanced and random.
Keeping the PDA sane.
DNA2 EPISODE 2: Revenge of the Bugs

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
DNA2 Bug Fixes - Part 2 (CHERRY PICK)

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
Missed the gene Life() call.
Fix earlier screwed commit
And now tested in game, with some fixes.
DNA2 rangebug, if any hair/beard/eye RGB values are 0 it won't encode it into the dna.

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.
pAI messenger bugfix.

pAI has to be a special little snowflake and have it's own messenger proc instead of letting a AI-PDA handle it.

So, updated it with the newest tnote variable functionality so it can participate.
Merge pull request #4410 from Ccomp5950/dna2-cherrypick

DNA2 Cherry-pick (Dev -> Master)
Code effeciency project: Sun datum

Because of the wrong direction of this sign, every single solar array was being checked for occlusion every tick.

This should fix that right up.

Trackers set to update their angle only when the sun does.

Solar panels set to calculate occlusion every minute (was every tick (though thought to be set to every 6 minutes (36 degrees)), now checks every 6 degrees of sun movement or so)
Merge pull request #4422 from Ccomp5950/sun_fix

Code effeciency project:  Sun datum
People in lobby won't see PDA messages.
Merge pull request #4424 from Ccomp5950/ghost-pda

People in lobby won't see PDA messages.
Merge pull request #4412 from Ccomp5950/pai-messenger

pAI messenger bugfix.
Chem grenade fix

Missed this in my last commit:
- Added a result amount for chemsmoke so it calculates the created_volume correctly
Code effeciency project: handle_embedded_objects

Before:  EVERYTIME someone moved their character this proc would be called and loop through every organ looking for implanted items to see if it needs to apply damage.

After:  We create a flag that is set when an item embeddes, only when that flag is set do we do that loop through organs upon movement.  Also every 10 ticks while that flag
is set we will check to see if we need to unset it.
Code effeciency project:  Canister icon updates

Before:  If a canister is hooked up to a connector port it's icons were being deleted and recreated every tick.

After:  We store an update_flag that is a bitfield of the current icon and overlay states, and created a proc to check if it should change.  If not, we don't mess with icons.  Real simple.
Merge pull request #4427 from Ccomp5950/handle_imbedded_fix

Code effeciency project: handle_embedded_objects