diff --git a/docs/code/Achievements.md b/docs/code/Achievements.md
new file mode 100644
index 0000000..ea4aac8
--- /dev/null
+++ b/docs/code/Achievements.md
@@ -0,0 +1,56 @@
+# File: `Achievements.h`
+
+## Classes
+
+- `AchievementRewards`
+- `AchievementRequirements`
+- `AchievementUpdateItems`
+- `Achievement`
+- `AchievementUpdate`
+- `MasterAchievementList`
+- `PlayerAchievementList`
+- `PlayerAchievementUpdateList`
+
+## Functions
+
+- `void SetID(int32 id) {this->id = id;}`
+- `void SetTitle(const char *title) {strncpy(this->title, title, sizeof(this->title));}`
+- `void SetUncompletedText(const char *uncompleted_text) {strncpy(this->uncompleted_text, uncompleted_text, sizeof(this->uncompleted_text));}`
+- `void SetCompletedText(const char *completed_text) {strncpy(this->completed_text, completed_text, sizeof(this->completed_text));}`
+- `void SetCategory(const char *category) {strncpy(this->category, category, sizeof(this->category));}`
+- `void SetExpansion(const char *expansion) {strncpy(this->expansion, expansion, sizeof(this->expansion));}`
+- `void SetIcon(int16 icon) {this->icon = icon;}`
+- `void SetPointValue(int32 point_value) {this->point_value = point_value;}`
+- `void SetQtyReq(int32 qty_req) {this->qty_req = qty_req;}`
+- `void SetHide(bool hide) {this->hide = hide;}`
+- `void SetUnknown3a(int32 unknown3a) {this->unknown3a = unknown3a;}`
+- `void SetUnknown3b(int32 unknown3b) {this->unknown3b = unknown3b;}`
+- `void AddAchievementRequirement(struct AchievementRequirements *requirements);`
+- `void AddAchievementReward(struct AchievementRewards *reward);`
+- `int32 GetID() {return id;}`
+- `int16 GetIcon() {return icon;}`
+- `int32 GetPointValue() {return point_value;}`
+- `int32 GetQtyReq() {return qty_req;}`
+- `bool GetHide() {return hide;}`
+- `int32 GetUnknown3a() {return unknown3a;}`
+- `int32 GetUnknown3b() {return unknown3b;}`
+- `void SetID(int32 id) {this->id = id;}`
+- `void SetCompletedDate(int32 completed_date) {this->completed_date = completed_date;}`
+- `void AddAchievementUpdateItems(struct AchievementUpdateItems *update_items);`
+- `int32 GetID() {return id;}`
+- `int32 GetCompletedDate() {return completed_date;}`
+- `bool AddAchievement(Achievement *achievement);`
+- `void ClearAchievements();`
+- `int32 Size();`
+- `void CreateMasterAchievementListPacket();`
+- `bool AddAchievement(Achievement *achievement);`
+- `void ClearAchievements();`
+- `int32 Size();`
+- `bool AddAchievementUpdate(AchievementUpdate *achievement_update);`
+- `void ClearAchievementUpdates();`
+- `int32 Size();`
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/AchievementsDB.md b/docs/code/AchievementsDB.md
new file mode 100644
index 0000000..f0a4038
--- /dev/null
+++ b/docs/code/AchievementsDB.md
@@ -0,0 +1,19 @@
+# File: `AchievementsDB.cpp`
+
+## Classes
+
+_None detected_
+
+## Functions
+
+- `void WorldDatabase::LoadAchievements()`
+- `int32 WorldDatabase::LoadAchievementRequirements(Achievement *achievement)`
+- `int32 WorldDatabase::LoadAchievementRewards(Achievement *achievement)`
+- `void WorldDatabase::LoadPlayerAchievements(Player *player) {`
+- `int32 WorldDatabase::LoadPlayerAchievementsUpdates(Player *player) {`
+- `int32 WorldDatabase::LoadPlayerAchievementsUpdateItems(AchievementUpdate *update, int32 player_id) {`
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/AltAdvancement.md b/docs/code/AltAdvancement.md
new file mode 100644
index 0000000..55c12b2
--- /dev/null
+++ b/docs/code/AltAdvancement.md
@@ -0,0 +1,31 @@
+# File: `AltAdvancement.h`
+
+## Classes
+
+- `AltAdvanceData`
+- `MasterAAList`
+- `TreeNodeData`
+- `MasterAANodeList`
+
+## Functions
+
+- `void AddAltAdvancement(AltAdvanceData* data);`
+- `int Size();`
+- `void DestroyAltAdvancements();`
+- `void DisplayAA(Client* client,int8 newtemplate,int8 changemode);`
+- `void AddTreeNode(TreeNodeData* data);`
+- `int Size();`
+- `void DestroyTreeNodes();`
+
+## Notable Comments
+
+- /*
+- */
+- // defines for AA tabs based on group # from DB
+- /// Sorts the Alternate Advancements for the given client, creates and sends the OP_AdventureList packet.
+- /// The Client calling this function
+- /// EQ2Packet*
+- /// Add Alternate Advancement data to the global list.
+- /// The Alternate Advancement data to add.
+- /// Get the total number of Alternate Advancements in the global list.
+- /// Get the Alternate Advancement data for the given spell.
diff --git a/docs/code/AltAdvancementDB.md b/docs/code/AltAdvancementDB.md
new file mode 100644
index 0000000..2b1663c
--- /dev/null
+++ b/docs/code/AltAdvancementDB.md
@@ -0,0 +1,17 @@
+# File: `AltAdvancementDB.cpp`
+
+## Classes
+
+_None detected_
+
+## Functions
+
+- `void WorldDatabase::LoadAltAdvancements()`
+- `void WorldDatabase::LoadTreeNodes()`
+- `void WorldDatabase::LoadPlayerAA(Player *player)`
+
+## Notable Comments
+
+- /*
+- */
+- //MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT `spell_id`, `group`, `icon`, `icon2`, `col`, `row`, `rank_cost`, `max_cost`, `rank_prereq_id`, `rank_prereq`, `class_req`, `tier`, `class_name`, `subclass_name`, `line_title` FROM spell_aa");
diff --git a/docs/code/Appearances.md b/docs/code/Appearances.md
new file mode 100644
index 0000000..ec96aa0
--- /dev/null
+++ b/docs/code/Appearances.md
@@ -0,0 +1,26 @@
+# File: `Appearances.h`
+
+## Classes
+
+- `Appearance`
+- `Appearances`
+
+## Functions
+
+- `int32 GetID() { return id; }`
+- `int16 GetMinClientVersion() { return min_client; }`
+- `string GetNameString() { return name; }`
+- `void Reset(){`
+- `void ClearAppearances(){`
+- `void InsertAppearance(Appearance* a){`
+
+## Notable Comments
+
+- /*
+- */
+- // Appearances must use a hash table because of the large amount that exists and the large spacing
+- // between their ID's. String and character arrays could not be used for the first iterator because
+- // it would require the same pointer to access it from the hash table, which is obviously not possible
+- // since the text is from the client.
+- // maximum amount of iterations it will attempt to find a entree
+- // JA: someday add the min_client_version to the map to determine which appearance_id to set per client version
diff --git a/docs/code/Bot.md b/docs/code/Bot.md
new file mode 100644
index 0000000..ac80d7a
--- /dev/null
+++ b/docs/code/Bot.md
@@ -0,0 +1,35 @@
+# File: `Bot.h`
+
+## Classes
+
+- `TradeItemInfo`
+- `Bot`
+
+## Functions
+
+- `bool IsBot() { return true; }`
+- `void GiveItem(int32 item_id);`
+- `void GiveItem(Item* item);`
+- `void RemoveItem(Item* item);`
+- `void TradeItemAdded(Item* item);`
+- `void AddItemToTrade(int8 slot);`
+- `bool CheckTradeItems(map* list);`
+- `void FinishTrade();`
+- `void GetNewSpells();`
+- `void SetCombatTarget(int32 target) { combat_target = target; }`
+- `void MessageGroup(string msg);`
+- `void SetRecast(Spell* spell, int32 time);`
+- `bool ShouldMelee();`
+- `void SetMainTank(Entity* tank) { main_tank = tank; }`
+- `void Camp(bool immediate=false);`
+- `void ChangeLevel(int16 old_level, int16 new_level);`
+- `bool IsCamping() { return camping; }`
+- `bool IsImmediateCamp() { return immediate_camp; }`
+- `void Begin_Camp();`
+- `bool CanEquipItem(Item* item);`
+- `bool IsSpellReady(Spell* spell);`
+- `int8 GetHealThreshold();`
+
+## Notable Comments
+
+- // First int32 = spell id (change to timer id later), second int32 is time the spell is available to cast again
diff --git a/docs/code/BotBrain.md b/docs/code/BotBrain.md
new file mode 100644
index 0000000..92db14e
--- /dev/null
+++ b/docs/code/BotBrain.md
@@ -0,0 +1,17 @@
+# File: `BotBrain.h`
+
+## Classes
+
+- `BotBrain`
+
+## Functions
+
+- `void Think();`
+- `bool ProcessSpell(Entity* target, float distance);`
+- `bool ProcessOutOfCombatSpells();`
+- `bool ProcessCombat();`
+- `void SetTarget();`
+
+## Notable Comments
+
+_None detected_
diff --git a/docs/code/BotCommands.md b/docs/code/BotCommands.md
new file mode 100644
index 0000000..0626a1c
--- /dev/null
+++ b/docs/code/BotCommands.md
@@ -0,0 +1,52 @@
+# File: `BotCommands.cpp`
+
+## Classes
+
+_None detected_
+
+## Functions
+
+- `void Commands::Command_Bot(Client* client, Seperator* sep) {`
+- `else if (strncasecmp("attack", sep->arg[0], 6) == 0) {`
+- `else if (strncasecmp("spells", sep->arg[0], 6) == 0) {`
+- `else if (strncasecmp("maintank", sep->arg[0], 8) == 0) {`
+- `else if (strncasecmp("delete", sep->arg[0], 6) == 0) {`
+- `else if (strncasecmp("follow", sep->arg[0], 6) == 0) {`
+- `else if (strncasecmp("stopfollow", sep->arg[0], 10) == 0) {`
+- `else if (strncasecmp("summon", sep->arg[0], 6) == 0) {`
+- `else if (strncasecmp("test", sep->arg[0], 4) == 0) {`
+- `void Commands::Command_Bot_Create(Client* client, Seperator* sep) {`
+- `else if (result == NAMEINVALID_REPLY) {`
+- `else if (result == NAMETAKEN_REPLY) {`
+- `else if (result == NAMEFILTER_REPLY) {`
+- `else if (result == UNKNOWNERROR_REPLY) {`
+- `void Commands::Command_Bot_Customize(Client* client, Seperator* sep) {`
+- `void Commands::Command_Bot_Spawn(Client* client, Seperator* sep) {`
+- `else if (result == 1)`
+- `else if (result == 2)`
+- `else if (result == 3)`
+- `else if (result == 4)`
+- `else if (result == 5)`
+- `else if (result == 6)`
+- `void Commands::Command_Bot_List(Client* client, Seperator* sep) {`
+- `void Commands::Command_Bot_Inv(Client* client, Seperator* sep) {`
+- `else if (strncasecmp("list", sep->arg[0], 4) == 0) {`
+- `else if (strncasecmp("remove", sep->arg[0], 6) == 0) {`
+- `void Commands::Command_Bot_Settings(Client* client, Seperator* sep) {`
+- `else if (strncasecmp("cloak", sep->arg[0], 5) == 0) {`
+- `else if (strncasecmp("taunt", sep->arg[0], 5) == 0) {`
+- `else if (strncasecmp("hood", sep->arg[0], 4) == 0) {`
+- `void Commands::Command_Bot_Help(Client* client, Seperator* sep) {`
+- `else if (strncasecmp("class", sep->arg[0], 5) == 0) {`
+
+## Notable Comments
+
+- //devn00b compile says this is no good, commenting out for now.
+- //if(!member)
+- // continue;
+- // Check if bot is currently spawned and if so camp it out
+- // Check if bot is currently spawned and if so camp it out
+- // Check if bot is currently spawned and if so camp it out
+- // Add Items
+- /*if (bot && bot->GetOwner() == client->GetPlayer()) {
+- //\\aITEM %u %u:%s\\/a
diff --git a/docs/code/BotDB.md b/docs/code/BotDB.md
new file mode 100644
index 0000000..e3be665
--- /dev/null
+++ b/docs/code/BotDB.md
@@ -0,0 +1,28 @@
+# File: `BotDB.cpp`
+
+## Classes
+
+_None detected_
+
+## Functions
+
+- `int32 WorldDatabase::CreateNewBot(int32 char_id, string name, int8 race, int8 advClass, int8 gender, int16 model_id, int32& index) {`
+- `void WorldDatabase::SaveBotAppearance(Bot* bot) {`
+- `void WorldDatabase::SaveBotColors(int32 bot_id, const char* type, EQ2_Color color) {`
+- `void WorldDatabase::SaveBotFloats(int32 bot_id, const char* type, float float1, float float2, float float3) {`
+- `bool WorldDatabase::LoadBot(int32 char_id, int32 bot_index, Bot* bot) {`
+- `void WorldDatabase::LoadBotAppearance(Bot* bot) {`
+- `void WorldDatabase::SaveBotItem(int32 bot_id, int32 item_id, int8 slot) {`
+- `void WorldDatabase::LoadBotEquipment(Bot* bot) {`
+- `string WorldDatabase::GetBotList(int32 char_id) {`
+- `void WorldDatabase::DeleteBot(int32 char_id, int32 bot_index) {`
+- `void WorldDatabase::SetBotStartingItems(Bot* bot, int8 class_id, int8 race_id) {`
+
+## Notable Comments
+
+- //SaveBotColors(bot->BotID, "unknown_chest_color", );
+- //SaveBotColors(bot->BotID, "unknown_legs_color", );
+- //SaveBotColors(bot->BotID, "unknown9", );
+- //SaveBotColors(bot->BotID, "soga_unknown_chest_color", );
+- //SaveBotColors(bot->BotID, "soga_unknown_legs_color", );
+- //SaveBotColors(bot->BotID, "soga_unknown13", );
diff --git a/docs/code/CRC16.md b/docs/code/CRC16.md
new file mode 100644
index 0000000..881bfad
--- /dev/null
+++ b/docs/code/CRC16.md
@@ -0,0 +1,14 @@
+# File: `CRC16.h`
+
+## Classes
+
+_None detected_
+
+## Functions
+
+_None detected_
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/Character.md b/docs/code/Character.md
new file mode 100644
index 0000000..c74863d
--- /dev/null
+++ b/docs/code/Character.md
@@ -0,0 +1,14 @@
+# File: `Character.h`
+
+## Classes
+
+- `Character`
+
+## Functions
+
+_None detected_
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/Chat.md b/docs/code/Chat.md
new file mode 100644
index 0000000..1714fd2
--- /dev/null
+++ b/docs/code/Chat.md
@@ -0,0 +1,29 @@
+# File: `Chat.h`
+
+## Classes
+
+- `Chat`
+
+## Functions
+
+- `void AddChannel(ChatChannel *channel);`
+- `bool ChannelExists(const char *channel_name);`
+- `bool HasPassword(const char *channel_name);`
+- `bool PasswordMatches(const char *channel_name, const char *password);`
+- `bool CreateChannel(const char *channel_name);`
+- `bool CreateChannel(const char *channel_name, const char *password);`
+- `bool IsInChannel(Client *client, const char *channel_name);`
+- `bool JoinChannel(Client *client, const char *channel_name);`
+- `bool LeaveChannel(Client *client, const char *channel_name);`
+- `bool LeaveAllChannels(Client *client);`
+- `bool TellChannel(Client *client, const char *channel_name, const char *message, const char* name = 0);`
+- `bool SendChannelUserList(Client *client, const char *channel_name);`
+- `int PushDiscordMsg(const char*, const char*);`
+
+## Notable Comments
+
+- /*
+- */
+- /*
+- */
+- //devn00b
diff --git a/docs/code/ChatChannel.md b/docs/code/ChatChannel.md
new file mode 100644
index 0000000..dd01255
--- /dev/null
+++ b/docs/code/ChatChannel.md
@@ -0,0 +1,31 @@
+# File: `ChatChannel.h`
+
+## Classes
+
+- `ChatChannel`
+
+## Functions
+
+- `void SetName(const char *name) {strncpy(this->name, name, CHAT_CHANNEL_MAX_NAME);}`
+- `void SetPassword(const char *password) {strncpy(this->password, password, CHAT_CHANNEL_MAX_PASSWORD);}`
+- `void SetType(ChatChannelType type) {this->type = type;}`
+- `void SetLevelRestriction(int16 level_restriction) {this->level_restriction = level_restriction;}`
+- `void SetRacesAllowed(int64 races) {this->races = races;}`
+- `void SetClassesAllowed(int64 classes) {this->classes = classes;}`
+- `ChatChannelType GetType() {return type;}`
+- `bool HasPassword() {return password[0] != '\0';}`
+- `bool PasswordMatches(const char *password) {return strncmp(this->password, password, CHAT_CHANNEL_MAX_PASSWORD) == 0;}`
+- `bool CanJoinChannelByLevel(int16 level) {return level >= level_restriction;}`
+- `bool CanJoinChannelByRace(int8 race_id) {return races == 0 || (1 << race_id) & races;}`
+- `bool CanJoinChannelByClass(int8 class_id) {return classes == 0 || (1 << class_id) & classes;}`
+- `bool IsInChannel(int32 character_id);`
+- `bool JoinChannel(Client *client);`
+- `bool LeaveChannel(Client *client);`
+- `bool TellChannel(Client *client, const char *message, const char* name2 = 0);`
+- `bool TellChannelClient(Client* to_client, const char* message, const char* name2 = 0);`
+- `bool SendChannelUserList(Client *client);`
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/ChatDB.md b/docs/code/ChatDB.md
new file mode 100644
index 0000000..62f2ddd
--- /dev/null
+++ b/docs/code/ChatDB.md
@@ -0,0 +1,14 @@
+# File: `ChatDB.cpp`
+
+## Classes
+
+_None detected_
+
+## Functions
+
+- `void WorldDatabase::LoadChannels() {`
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/ChestTrap.md b/docs/code/ChestTrap.md
new file mode 100644
index 0000000..638b47e
--- /dev/null
+++ b/docs/code/ChestTrap.md
@@ -0,0 +1,38 @@
+# File: `ChestTrap.h`
+
+## Classes
+
+- `ChestTrap`
+- `ChestTrapInfo`
+- `ChestTrapList`
+
+## Functions
+
+- `int32 GetDBID() { return s_ChestTrapInfo.id; }`
+- `sint32 GetApplicableZoneID() { return s_ChestTrapInfo.applicable_zone_id; }`
+- `int32 GetMinChestDifficulty() { return s_ChestTrapInfo.min_chest_difficulty; }`
+- `int32 GetMaxChestDifficulty() { return s_ChestTrapInfo.max_chest_difficulty; }`
+- `int32 GetSpellID() { return s_ChestTrapInfo.spell_id; }`
+- `int32 GetSpellTier() { return s_ChestTrapInfo.spell_tier; }`
+- `int32 Size();`
+- `void AddChestTrap(ChestTrap* trap);`
+- `bool GetChestTrap(int32 id, ChestTrap::ChestTrapInfo* cti);`
+- `bool GetNextTrap(int32 zoneid, int32 chest_difficulty, ChestTrap::ChestTrapInfo* cti);`
+- `void Clear();`
+- `bool GetNextChestTrap(ChestTrap::ChestTrapInfo* cti);`
+- `bool IsListLoaded();`
+- `void SetListLoaded(bool val);`
+- `void AddChestTrapList(ChestTrapList* trap, int32 id);`
+- `void SetCycleIterator(map::iterator itr);`
+- `void ClearTraps();`
+- `void ClearTrapList();`
+- `void SetupMutexes();`
+- `void InstantiateLists(bool parent);`
+- `void shuffleMap(ChestTrapList* list);`
+
+## Notable Comments
+
+- //Constructors **must** always set all ChestTrapInfo as we don't memset so a data value will be wack if not set!
+- // instantiate the parent lists for zone/difficulty/etc, later on we will do the inverse of each map, zone->difficulty and difficulty->zone
+- // not to be called externally from ChestTrapList/ChestTrap
+- // randomized maps so we just iterate the map for our next 'random' result
diff --git a/docs/code/ClientPacketFunctions.md b/docs/code/ClientPacketFunctions.md
new file mode 100644
index 0000000..02a3cce
--- /dev/null
+++ b/docs/code/ClientPacketFunctions.md
@@ -0,0 +1,21 @@
+# File: `ClientPacketFunctions.h`
+
+## Classes
+
+- `HouseZone`
+- `PlayerHouse`
+- `HeroicOP`
+- `ClientPacketFunctions`
+
+## Functions
+
+_None detected_
+
+## Notable Comments
+
+- /*
+- */
+- /* Tradeskills (/Tradeskills/TradeskillsPackets.cpp) */
+- /* Housing (/Housing/HousingPackets.cpp) */
+- /* Heroic OP's (/HeroicOp/HeroicOpPackets.cpp) */
+- //UI updates for trigger count and damage remaining on maintained spells
diff --git a/docs/code/Collections.md b/docs/code/Collections.md
new file mode 100644
index 0000000..4550a36
--- /dev/null
+++ b/docs/code/Collections.md
@@ -0,0 +1,45 @@
+# File: `Collections.h`
+
+## Classes
+
+- `CollectionItem`
+- `CollectionRewardItem`
+- `Collection`
+- `CollectionItem`
+- `MasterCollectionList`
+- `PlayerCollectionList`
+
+## Functions
+
+- `void SetID(int32 id) {this->id = id;}`
+- `void SetName(const char *name) {strncpy(this->name, name, sizeof(this->name));}`
+- `void SetCategory(const char *category) {strncpy(this->category, category, sizeof(this->category));}`
+- `void SetLevel(int8 level) {this->level = level;}`
+- `void SetCompleted(bool completed) {this->completed = completed;}`
+- `void SetSaveNeeded(bool save_needed) {this->save_needed = save_needed;}`
+- `void AddCollectionItem(struct CollectionItem *collection_item);`
+- `void AddRewardItem(struct CollectionRewardItem *reward_item);`
+- `void AddSelectableRewardItem(struct CollectionRewardItem *reward_item);`
+- `void SetRewardCoin(int64 reward_coin) {this->reward_coin = reward_coin;}`
+- `void SetRewardXP(int64 reward_xp) {this->reward_xp = reward_xp;}`
+- `bool NeedsItem(Item *item);`
+- `int32 GetID() {return id;}`
+- `int8 GetLevel() {return level;}`
+- `bool GetIsReadyToTurnIn();`
+- `bool GetCompleted() {return completed;}`
+- `bool GetSaveNeeded() {return save_needed;}`
+- `int64 GetRewardCoin() {return reward_coin;}`
+- `int64 GetRewardXP() {return reward_xp;}`
+- `bool AddCollection(Collection *collection);`
+- `void ClearCollections();`
+- `int32 Size();`
+- `bool NeedsItem(Item *item);`
+- `bool AddCollection(Collection *collection);`
+- `void ClearCollections();`
+- `int32 Size();`
+- `bool NeedsItem(Item *item);`
+- `bool HasCollectionsToHandIn();`
+
+## Notable Comments
+
+_None detected_
diff --git a/docs/code/CollectionsDB.md b/docs/code/CollectionsDB.md
new file mode 100644
index 0000000..ce996c5
--- /dev/null
+++ b/docs/code/CollectionsDB.md
@@ -0,0 +1,29 @@
+# File: `CollectionsDB.cpp`
+
+## Classes
+
+- `CollectionItem`
+- `CollectionRewardItem`
+- `CollectionItem`
+- `CollectionItem`
+
+## Functions
+
+- `void WorldDatabase::LoadCollections()`
+- `int32 WorldDatabase::LoadCollectionItems(Collection *collection)`
+- `int32 WorldDatabase::LoadCollectionRewards(Collection *collection)`
+- `else if (!strcasecmp(row[0], "Selectable"))`
+- `else if (!strcasecmp(row[0], "Coin"))`
+- `else if (!strcasecmp(row[0], "XP"))`
+- `void WorldDatabase::LoadPlayerCollections(Player *player)`
+- `void WorldDatabase::LoadPlayerCollectionItems(Player *player, Collection *collection)`
+- `void WorldDatabase::SavePlayerCollections(Client *client)`
+- `void WorldDatabase::SavePlayerCollection(Client *client, Collection *collection)`
+- `void WorldDatabase::SavePlayerCollectionItems(Client *client, Collection *collection)`
+- `void WorldDatabase::SavePlayerCollectionItem(Client *client, Collection *collection, int32 item_id)`
+
+## Notable Comments
+
+- /*
+- */
+- //assert(item);
diff --git a/docs/code/Combat.md b/docs/code/Combat.md
new file mode 100644
index 0000000..46d0b08
--- /dev/null
+++ b/docs/code/Combat.md
@@ -0,0 +1,16 @@
+# File: `Combat.h`
+
+## Classes
+
+- `ZoneServer`
+- `SpellProcess`
+- `LuaSpell`
+
+## Functions
+
+_None detected_
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/Commands.md b/docs/code/Commands.md
new file mode 100644
index 0000000..c52300a
--- /dev/null
+++ b/docs/code/Commands.md
@@ -0,0 +1,215 @@
+# File: `Commands.h`
+
+## Classes
+
+- `Client`
+- `Spawn`
+- `ZoneServer`
+- `ZoneInfo`
+- `EQ2_CommandString`
+- `EQ2_RemoteCommandString`
+- `RemoteCommands`
+- `Commands`
+
+## Functions
+
+- `void addCommand(EQ2_RemoteCommandString add){ commands.push_back(add); num_commands++;}`
+- `void AddSubCommand(string command, EQ2_RemoteCommandString subcommand){`
+- `bool validSubCommand(string command, string subcommand){`
+- `void addZero(){`
+- `void CheckAddSubCommand(string command, EQ2_RemoteCommandString subcommand){`
+- `void AddDataCommand(EQ2_RemoteCommandString* command){`
+- `int32 GetCommandHandler(const char* name){`
+- `bool SetSpawnCommand(Client* client, Spawn* target, int8 type, const char* value, bool send_update = true, bool temporary = false, string* temp_value = 0, int8 index = 0);`
+- `void UpdateDatabaseAppearance(Client* client, Spawn* target, string fieldName, sint8 r, sint8 g, sint8 b);`
+- `bool SetZoneCommand(Client* client, int32 zone_id, ZoneServer* zone, int8 type, const char* value);`
+- `void Process(int32 index, EQ2_16BitString* command_parms, Client* client, Spawn* targetOverride=NULL);`
+- `int32 GetCommandHandler(const char* name){`
+- `int32 GetSpawnSetType(string val);`
+- `void Command_AcceptAdvancement(Client* client, Seperator* sep);`
+- `void Command_AFK(Client* client, Seperator* sep);`
+- `void Command_Appearance(Client* client, Seperator* sep, int handler);`
+- `void Command_CancelMaintained(Client* client, Seperator* sep);`
+- `void Command_Claim(Client* client, Seperator* sep);`
+- `void Command_ClearAllQueued(Client* client);`
+- `void Command_Create(Client* client, Seperator* sep);`
+- `void Command_CreateFromRecipe(Client* client, Seperator* sep);`
+- `void Command_Distance(Client* client);`
+- `void Command_Duel(Client* client, Seperator* sep);`
+- `void Command_DuelBet(Client* client, Seperator* sep);`
+- `void Command_DuelAccept(Client* client, Seperator* sep);`
+- `void Command_DuelDecline(Client* client, Seperator* sep);`
+- `void Command_DuelSurrender(Client* client, Seperator* sep);`
+- `void Command_DuelToggle(Client* client, Seperator* sep);`
+- `void Command_EntityCommand(Client* client, Seperator* sep, int handler);`
+- `void Command_Follow(Client* client, Seperator* sep);`
+- `void Command_StopFollow(Client* client, Seperator* sep);`
+- `void Command_Grid(Client* client, Seperator* sep);`
+- `void Command_Guild(Client* client, Seperator* sep);`
+- `void Command_CreateGuild(Client* client, Seperator* sep);`
+- `void Command_SetGuildOfficerNote(Client* client, Seperator* sep);`
+- `void Command_SetGuildMemberNote(Client* client, Seperator* sep);`
+- `void Command_OfficerSay(Client* client, Seperator* sep);`
+- `void Command_GuildSay(Client* client, Seperator* sep);`
+- `void Command_Guilds(Client* client);`
+- `void Command_GuildsAdd(Client* client, Seperator* sep);`
+- `void Command_GuildsCreate(Client* client, Seperator* sep, bool prompted_dialog = false);`
+- `void Command_GuildsDelete(Client* client, Seperator* sep);`
+- `void Command_GuildsList(Client* client);`
+- `void Command_GuildsRemove(Client* client, Seperator* sep);`
+- `void Command_InspectPlayer(Client* client, Seperator* sep);`
+- `void Command_Inventory(Client* client, Seperator* sep, EQ2_RemoteCommandString* command);`
+- `void Command_Languages(Client* client, Seperator* sep);`
+- `void Command_SetLanguage(Client* client, Seperator* sep);`
+- `void Command_LastName(Client* client, Seperator* sep);`
+- `void Command_ConfirmLastName(Client* client, Seperator* sep);`
+- `void Command_Location(Client* client);`
+- `void Command_LocationAdd(Client* client, Seperator* sep);`
+- `void Command_LocationCreate(Client* client, Seperator* sep);`
+- `void Command_LocationDelete(Client* client, Seperator* sep);`
+- `void Command_LocationList(Client* client, Seperator* sep);`
+- `void Command_LocationRemove(Client* client, Seperator* sep);`
+- `void Command_Merchant(Client* client, Seperator* sep, int handler);`
+- `void Command_Mood(Client* client, Seperator* sep);`
+- `void Command_Modify(Client* client); // usage function`
+- `void Command_ModifyCharacter(Client* client, Seperator* sep);`
+- `void Command_ModifyFaction(Client* client, Seperator* sep);`
+- `void Command_ModifyGuild(Client* client, Seperator* sep);`
+- `void Command_ModifyItem(Client* client, Seperator* sep);`
+- `void Command_ModifyQuest(Client* client, Seperator* sep);`
+- `void Command_ModifySkill(Client* client, Seperator* sep);`
+- `void Command_ModifySpawn(Client* client, Seperator* sep);`
+- `void Command_ModifySpell(Client* client, Seperator* sep);`
+- `void Command_ModifyZone(Client* client, Seperator* sep);`
+- `void Command_MOTD(Client* client);`
+- `void Command_Pet(Client* client, Seperator* sep);`
+- `void Command_PetName(Client* client, Seperator* sep);`
+- `void Command_NamePet(Client* client, Seperator* sep);`
+- `void Command_Rename(Client* client, Seperator* sep);`
+- `void Command_ConfirmRename(Client* client, Seperator* sep);`
+- `void Command_PetOptions(Client* client, Seperator* sep);`
+- `void Command_Random(Client* client, Seperator* sep);`
+- `void Command_Randomize(Client* client, Seperator* sep);`
+- `void Command_ReportBug(Client* client, Seperator* sep);`
+- `void Command_ShowCloak(Client* client, Seperator* sep);`
+- `void Command_ShowHelm(Client* client, Seperator* sep);`
+- `void Command_ShowHood(Client* client, Seperator* sep);`
+- `void Command_ShowHoodHelm(Client* client, Seperator* sep);`
+- `void Command_ShowRanged(Client* client, Seperator* sep);`
+- `void Command_Skills(Client* client, Seperator* sep, int handler);`
+- `void Command_SpawnTemplate(Client* client, Seperator* sep);`
+- `void Command_Speed(Client* client, Seperator* sep);`
+- `void Command_StationMarketPlace(Client* client, Seperator* sep);`
+- `void Command_StopEating(Client* client);`
+- `void Command_StopDrinking(Client* client);`
+- `void Command_Test(Client* client, EQ2_16BitString* command_parms);`
+- `void Command_Title(Client* client);`
+- `void Command_TitleList(Client* client);`
+- `void Command_TitleSetPrefix(Client* client, Seperator* sep);`
+- `void Command_TitleSetSuffix(Client* client, Seperator* sep);`
+- `void Command_TitleFix(Client* client, Seperator* sep);`
+- `void Command_Toggle_Anonymous(Client* client);`
+- `void Command_Toggle_AutoConsume(Client* client, Seperator* sep);`
+- `void Command_Toggle_BonusXP(Client* client);`
+- `void Command_Toggle_CombatXP(Client* client);`
+- `void Command_Toggle_GMHide(Client* client);`
+- `void Command_Toggle_GMVanish(Client* client);`
+- `void Command_Toggle_Illusions(Client* client, Seperator* sep);`
+- `void Command_Toggle_LFG(Client* client);`
+- `void Command_Toggle_LFW(Client* client);`
+- `void Command_Toggle_QuestXP(Client* client);`
+- `void Command_Toggle_Roleplaying(Client* client);`
+- `void Command_Toggle_Duels(Client* client);`
+- `void Command_Toggle_Trades(Client* client);`
+- `void Command_Toggle_Guilds(Client* client);`
+- `void Command_Toggle_Groups(Client* client);`
+- `void Command_Toggle_Raids(Client* client);`
+- `void Command_Toggle_LON(Client* client);`
+- `void Command_Toggle_VoiceChat(Client* client);`
+- `void Command_Track(Client* client);`
+- `void Command_TradeStart(Client* client, Seperator* sep);`
+- `void Command_TradeAccept(Client* client, Seperator* sep);`
+- `void Command_TradeReject(Client* client, Seperator* sep);`
+- `void Command_TradeCancel(Client* client, Seperator* sep);`
+- `void Command_TradeSetCoin(Client* client, Seperator* sep);`
+- `void Command_TradeAddCoin(Client* client, Seperator* sep, int handler);`
+- `void Command_TradeRemoveCoin(Client* client, Seperator* sep, int handler);`
+- `void Command_TradeAddItem(Client* client, Seperator* sep);`
+- `void Command_TradeRemoveItem(Client* client, Seperator* sep);`
+- `void Command_TryOn(Client* client, Seperator* sep);`
+- `void Command_JoinChannel(Client *client, Seperator *sep);`
+- `void Command_JoinChannelFromLoad(Client *client, Seperator *sep);`
+- `void Command_TellChannel(Client *client, Seperator *sep);`
+- `void Command_LeaveChannel(Client *client, Seperator *sep);`
+- `void Command_WeaponStats(Client *client);`
+- `void Command_WhoChannel(Client *client, Seperator *sep);`
+- `void Command_ZoneSafeCoords(Client *client, Seperator *sep);`
+- `void Command_ZoneDetails(Client *client, Seperator *sep);`
+- `void Command_ZoneSet(Client *client, Seperator *sep);`
+- `void Command_Rain(Client* client, Seperator* sep);`
+- `void Command_Wind(Client* client, Seperator* sep);`
+- `void Command_SendMerchantWindow(Client* client, Seperator* sep, bool sell = false);`
+- `void Command_Weather(Client* client, Seperator* sep);`
+- `void Command_Select(Client* client, Seperator* sep);`
+- `void Command_ConsumeFood(Client* client, Seperator* sep);`
+- `void Command_Aquaman(Client* client, Seperator* sep);`
+- `void Command_Attune_Inv(Client* client, Seperator* sep);`
+- `void Command_Player(Client* client, Seperator* sep);`
+- `void Command_Player_Coins(Client* client, Seperator* sep);`
+- `void Command_Reset_Zone_Timer(Client* client, Seperator* sep);`
+- `void Command_AchievementAdd(Client* client, Seperator* sep);`
+- `void Command_Editor(Client* client, Seperator* sep);`
+- `void Command_AcceptResurrection(Client* client, Seperator* sep);`
+- `void Command_DeclineResurrection(Client* client, Seperator* set);`
+- `void Command_TargetItem(Client* client, Seperator* set);`
+- `void Command_FindSpawn(Client* client, Seperator* set);`
+- `void Command_MoveCharacter(Client* client, Seperator* set);`
+- `void Command_Bot(Client* client, Seperator* sep);`
+- `void Command_Bot_Create(Client* client, Seperator* sep);`
+- `void Command_Bot_Customize(Client* client, Seperator* sep);`
+- `void Command_Bot_Spawn(Client* client, Seperator* sep);`
+- `void Command_Bot_List(Client* client, Seperator* sep);`
+- `void Command_Bot_Inv(Client* client, Seperator* sep);`
+- `void Command_Bot_Settings(Client* client, Seperator* sep);`
+- `void Command_Bot_Help(Client* client, Seperator* sep);`
+- `void Command_CancelEffect(Client* client, Seperator* sep);`
+- `void Command_CurePlayer(Client* client, Seperator* sep);`
+- `void Command_ShareQuest(Client* client, Seperator* sep);`
+- `void Command_Yell(Client* client, Seperator* sep);`
+- `void Command_SetAutoLootMode(Client* client, Seperator* sep);`
+- `void Command_AutoAttack(Client* client, Seperator* sep);`
+- `void Command_Assist(Client* client, Seperator* sep);`
+- `void Command_Target(Client* client, Seperator* sep);`
+- `void Command_Target_Pet(Client* client, Seperator* sep);`
+- `void Command_WhoGroup(Client* client, Seperator* sep);`
+- `void Command_WhoRaid(Client* client, Seperator* sep);`
+- `void Command_RaidInvite(Client* client, Seperator* sep);`
+- `void Command_Raid_Looter(Client* client, Seperator* sep);`
+- `void Command_KickFromGroup(Client* client, Seperator* sep);`
+- `void Command_KickFromRaid(Client* client, Seperator* sep);`
+- `void Command_LeaveRaid(Client* client, Seperator* sep);`
+- `void Command_Split(Client* client, Seperator* sep);`
+- `void Command_RaidSay(Client* client, Seperator* sep);`
+- `void Command_ReloadZoneInfo(Client* client, Seperator* sep);`
+- `void Get_AA_Xml(Client* client, Seperator* sep);`
+- `void Add_AA(Client* client, Seperator* sep);`
+- `void Commit_AA_Profile(Client* client, Seperator* sep);`
+- `void Begin_AA_Profile(Client* client, Seperator* sep);`
+- `void Back_AA(Client* client, Seperator* sep);`
+- `void Remove_AA(Client* client, Seperator* sep);`
+- `void Switch_AA_Profile(Client* client, Seperator* sep);`
+- `void Cancel_AA_Profile(Client* client, Seperator* sep);`
+- `void Save_AA_Profile(Client* client, Seperator* sep);`
+
+## Notable Comments
+
+- /*
+- */
+- // Combat related chat channels start here
+- // End of combat chat channels
+- // 106 is nothing, message sent with this channel won't display in the client
+- // 108+ will crash the client DO NOT USE
+- /* Using this in the /zone details command so that we do not have to store a whole zone in memory while changing zone attributes. Also,
+- // TODO: cannot seem to use LogWrite in this .h file!
+- // JA: New Command handlers
+- //devn00b
diff --git a/docs/code/CommandsDB.md b/docs/code/CommandsDB.md
new file mode 100644
index 0000000..b1e57db
--- /dev/null
+++ b/docs/code/CommandsDB.md
@@ -0,0 +1,27 @@
+# File: `CommandsDB.cpp`
+
+## Classes
+
+_None detected_
+
+## Functions
+
+- `int32 WorldDatabase::SaveSpawnTemplate(int32 placement_id, const char* template_name)`
+- `bool WorldDatabase::RemoveSpawnTemplate(int32 template_id)`
+- `int32 WorldDatabase::CreateSpawnFromTemplateByID(Client* client, int32 template_id)`
+- `int32 WorldDatabase::CreateSpawnFromTemplateByName(Client* client, const char* template_name)`
+- `bool WorldDatabase::SaveZoneSafeCoords(int32 zone_id, float x, float y, float z, float heading)`
+- `bool WorldDatabase::SaveSignZoneToCoords(int32 spawn_id, float x, float y, float z, float heading)`
+
+## Notable Comments
+
+- /*
+- */
+- // find the spawn_location_id in the template we plan to duplicate
+- // insert a new spawn_location_name record
+- // get all spawn_location_entries that match the templates spawn_location_id value and insert as new
+- // get all spawn_location_placements that match the templates spawn_location_id value and insert as new
+- // Note: /spawn templates within current zone_id only, because of spawn_id issues (cannot template an Antonic spawn in Commonlands)
+- // find the spawn_location_id in the template we plan to duplicate
+- // insert a new spawn_location_name record
+- // get all spawn_location_entries that match the templates spawn_location_id value and insert as new
diff --git a/docs/code/Common_Defines.md b/docs/code/Common_Defines.md
new file mode 100644
index 0000000..21a46d1
--- /dev/null
+++ b/docs/code/Common_Defines.md
@@ -0,0 +1,14 @@
+# File: `Common_Defines.h`
+
+## Classes
+
+_None detected_
+
+## Functions
+
+_None detected_
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/Common_Index.md b/docs/code/Common_Index.md
new file mode 100644
index 0000000..14c4b3b
--- /dev/null
+++ b/docs/code/Common_Index.md
@@ -0,0 +1,84 @@
+# Common Module
+
+Shared logic used by LoginServer and WorldServer, including networking, database access, and packet processing.
+
+## Files:
+
+- [Common_Defines.md](Common_Defines.md)
+- [Condition.md](Condition.md)
+- [Condition.md](Condition.md)
+- [ConfigReader.md](ConfigReader.md)
+- [ConfigReader.md](ConfigReader.md)
+- [CRC16.md](CRC16.md)
+- [CRC16.md](CRC16.md)
+- [Crypto.md](Crypto.md)
+- [Crypto.md](Crypto.md)
+- [database.md](database.md)
+- [database.md](database.md)
+- [DatabaseNew.md](DatabaseNew.md)
+- [DatabaseNew.md](DatabaseNew.md)
+- [DatabaseResult.md](DatabaseResult.md)
+- [DatabaseResult.md](DatabaseResult.md)
+- [DataBuffer.md](DataBuffer.md)
+- [dbcore.md](dbcore.md)
+- [dbcore.md](dbcore.md)
+- [debug.md](debug.md)
+- [debug.md](debug.md)
+- [emu_opcodes.md](emu_opcodes.md)
+- [emu_opcodes.md](emu_opcodes.md)
+- [emu_oplist.md](emu_oplist.md)
+- [EQ2_Common_Structs.md](EQ2_Common_Structs.md)
+- [EQEMuError.md](EQEMuError.md)
+- [EQEMuError.md](EQEMuError.md)
+- [EQPacket.md](EQPacket.md)
+- [EQPacket.md](EQPacket.md)
+- [EQStream.md](EQStream.md)
+- [EQStream.md](EQStream.md)
+- [EQStreamFactory.md](EQStreamFactory.md)
+- [EQStreamFactory.md](EQStreamFactory.md)
+- [GlobalHeaders.md](GlobalHeaders.md)
+- [JsonParser.md](JsonParser.md)
+- [JsonParser.md](JsonParser.md)
+- [linked_list.md](linked_list.md)
+- [Log.md](Log.md)
+- [Log.md](Log.md)
+- [login_oplist.md](login_oplist.md)
+- [LogTypes.md](LogTypes.md)
+- [md5.md](md5.md)
+- [md5.md](md5.md)
+- [misc.md](misc.md)
+- [misc.md](misc.md)
+- [MiscFunctions.md](MiscFunctions.md)
+- [MiscFunctions.md](MiscFunctions.md)
+- [Mutex.md](Mutex.md)
+- [Mutex.md](Mutex.md)
+- [opcodemgr.md](opcodemgr.md)
+- [opcodemgr.md](opcodemgr.md)
+- [op_codes.md](op_codes.md)
+- [PacketStruct.md](PacketStruct.md)
+- [PacketStruct.md](PacketStruct.md)
+- [packet_dump.md](packet_dump.md)
+- [packet_dump.md](packet_dump.md)
+- [packet_functions.md](packet_functions.md)
+- [packet_functions.md](packet_functions.md)
+- [queue.md](queue.md)
+- [RC4.md](RC4.md)
+- [RC4.md](RC4.md)
+- [seperator.md](seperator.md)
+- [servertalk.md](servertalk.md)
+- [sha512.md](sha512.md)
+- [sha512.md](sha512.md)
+- [string_util.md](string_util.md)
+- [string_util.md](string_util.md)
+- [TCPConnection.md](TCPConnection.md)
+- [TCPConnection.md](TCPConnection.md)
+- [timer.md](timer.md)
+- [timer.md](timer.md)
+- [types.md](types.md)
+- [unix.md](unix.md)
+- [unix.md](unix.md)
+- [version.md](version.md)
+- [xmlParser.md](xmlParser.md)
+- [xmlParser.md](xmlParser.md)
+- [WebServer.md](WebServer.md)
+- [WebServer.md](WebServer.md)
diff --git a/docs/code/Condition.md b/docs/code/Condition.md
new file mode 100644
index 0000000..189f728
--- /dev/null
+++ b/docs/code/Condition.md
@@ -0,0 +1,19 @@
+# File: `Condition.h`
+
+## Classes
+
+- `Condition`
+
+## Functions
+
+- `void Signal();`
+- `void SignalAll();`
+- `void Wait();`
+
+## Notable Comments
+
+- /*
+- */
+- //Sombody, someday needs to figure out how to implement a condition
+- //system on windows...
+- // bool TimedWait(unsigned long usec);
diff --git a/docs/code/ConfigReader.md b/docs/code/ConfigReader.md
new file mode 100644
index 0000000..8ed024e
--- /dev/null
+++ b/docs/code/ConfigReader.md
@@ -0,0 +1,21 @@
+# File: `ConfigReader.h`
+
+## Classes
+
+- `ConfigReader`
+
+## Functions
+
+- `void addStruct(const char* name, int16 version, PacketStruct* new_struct);`
+- `void loadDataStruct(PacketStruct* packet, XMLNode parentNode, bool array_packet = false);`
+- `bool processXML_Elements(const char* fileName);`
+- `int16 GetStructVersion(const char* name, int16 version);`
+- `void DestroyStructs();`
+- `void ReloadStructs();`
+- `bool LoadFile(const char* name);`
+
+## Notable Comments
+
+- /*
+- */
+- //vector structs;
diff --git a/docs/code/ConsoleCommands.md b/docs/code/ConsoleCommands.md
new file mode 100644
index 0000000..62da11a
--- /dev/null
+++ b/docs/code/ConsoleCommands.md
@@ -0,0 +1,36 @@
+# File: `ConsoleCommands.h`
+
+## Classes
+
+- `ConsoleCommand`
+
+## Functions
+
+- `void ProcessConsoleInput(const char * command);`
+- `bool ConsoleBanCommand(Seperator *sep);`
+- `bool ConsoleUnbanCommand(Seperator *sep);`
+- `bool ConsoleKickCommand(Seperator *sep);`
+- `bool ConsoleAnnounceCommand(Seperator *sep);`
+- `bool ConsoleBroadcastCommand(Seperator *sep);`
+- `bool ConsoleChannelCommand(Seperator *sep);`
+- `bool ConsoleTellCommand(Seperator *sep);`
+- `bool ConsoleGuildCommand(Seperator *sep);`
+- `bool ConsolePlayerCommand(Seperator *sep);`
+- `bool ConsoleSetAdminPlayer(Seperator *sep);`
+- `bool ConsoleWorldCommand(Seperator *sep);`
+- `bool ConsoleZoneCommand(Seperator *sep);`
+- `bool ConsoleGetMOTDCommand(Seperator *sep);`
+- `bool ConsoleSetMOTDCommand(Seperator *sep);`
+- `bool ConsoleWhoCommand(Seperator *sep);`
+- `bool ConsoleReloadCommand(Seperator *sep);`
+- `bool ConsoleShutdownCommand(Seperator *sep);`
+- `bool ConsoleCancelShutdownCommand(Seperator *sep);`
+- `bool ConsoleExitCommand(Seperator *sep);`
+- `bool ConsoleRulesCommand(Seperator *sep);`
+- `bool ConsoleTestCommand(Seperator *sep);`
+
+## Notable Comments
+
+- /*
+- */
+- // = 70 chars
diff --git a/docs/code/Crypto.md b/docs/code/Crypto.md
new file mode 100644
index 0000000..f340eee
--- /dev/null
+++ b/docs/code/Crypto.md
@@ -0,0 +1,19 @@
+# File: `Crypto.h`
+
+## Classes
+
+- `Crypto`
+
+## Functions
+
+- `void RC4Encrypt(uchar* text, int32 size);`
+- `void RC4Decrypt(uchar* text, int32 size);`
+- `int64 getRC4Key() { return rc4_key; }`
+- `void setRC4Key(int64 key) {`
+- `bool isEncrypted(){ return encrypted; }`
+- `void setEncrypted(bool in_val){ encrypted = in_val; }`
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/DataBuffer.md b/docs/code/DataBuffer.md
new file mode 100644
index 0000000..2cce6b1
--- /dev/null
+++ b/docs/code/DataBuffer.md
@@ -0,0 +1,29 @@
+# File: `DataBuffer.h`
+
+## Classes
+
+- `DataBuffer`
+
+## Functions
+
+- `int32 getDataSize(){ return buffer.length(); }`
+- `void CreateEQ2Color(EQ2_Color& color){`
+- `int32 GetLoadPos(){`
+- `int32 GetLoadLen(){`
+- `void SetLoadPos(int32 new_pos){`
+- `void CreateEQ2Color(EQ2_Color* color){`
+- `void InitializeGetData(){`
+- `void InitializeLoadData(uchar* input, int32 size){`
+- `void LoadSkip(int8 bytes){`
+- `void AddZeros(int16 num){`
+- `void AddCharArray(char* array, string* datastring = 0){`
+- `void AddCharArray(char* array, int16 size, string* datastring = 0){`
+- `void AddData(string data, string* datastring = 0){`
+- `void Clear() { buffer.clear(); }`
+
+## Notable Comments
+
+- /*
+- */
+- *tmp *= -1;
+- *output = (Type*)get_buffer;
diff --git a/docs/code/DatabaseNew.md b/docs/code/DatabaseNew.md
new file mode 100644
index 0000000..41eb111
--- /dev/null
+++ b/docs/code/DatabaseNew.md
@@ -0,0 +1,27 @@
+# File: `DatabaseNew.h`
+
+## Classes
+
+- `DatabaseNew`
+
+## Functions
+
+- `bool Connect();`
+- `bool Connect(const char *host, const char *user, const char *password, const char *database, unsigned int port = 3306);`
+- `bool Query(const char *query, ...);`
+- `bool Select(DatabaseResult *result, const char *query, ...);`
+- `int32 LastInsertID();`
+- `long AffectedRows();`
+- `string EscapeStr(const char *str, size_t len);`
+- `string EscapeStr(const char *str);`
+- `string EscapeStr(string str);`
+- `bool QueriesFromFile(const char *file);`
+- `void SetIgnoredErrno(unsigned int db_errno);`
+- `void RemoveIgnoredErrno(unsigned int db_errno);`
+- `bool IsIgnoredErrno(unsigned int db_errno);`
+- `void PingNewDB();`
+
+## Notable Comments
+
+- //these two must free() the return char* after it's used in a query
+- //does not need free()
diff --git a/docs/code/DatabaseResult.md b/docs/code/DatabaseResult.md
new file mode 100644
index 0000000..ddaa97f
--- /dev/null
+++ b/docs/code/DatabaseResult.md
@@ -0,0 +1,36 @@
+# File: `DatabaseResult.h`
+
+## Classes
+
+- `DatabaseResult`
+
+## Functions
+
+- `bool StoreResult(MYSQL_RES* result, uint8 field_count, uint8 row_count);`
+- `bool Next();`
+- `bool IsNull(unsigned int index);`
+- `bool IsNullStr(const char *field_name);`
+- `int8 GetInt8(unsigned int index);`
+- `int8 GetInt8Str(const char *field_name);`
+- `sint8 GetSInt8(unsigned int index);`
+- `sint8 GetSInt8Str(const char *field_name);`
+- `int16 GetInt16(unsigned int index);`
+- `int16 GetInt16Str(const char *field_name);`
+- `sint16 GetSInt16(unsigned int index);`
+- `sint16 GetSInt16Str(const char *field_name);`
+- `int32 GetInt32(unsigned int index);`
+- `int32 GetInt32Str(const char *field_name);`
+- `sint32 GetSInt32(unsigned int index);`
+- `sint32 GetSInt32Str(const char *field_name);`
+- `int64 GetInt64(unsigned int index);`
+- `int64 GetInt64Str(const char *field_name);`
+- `sint64 GetSInt64(unsigned int index);`
+- `sint64 GetSInt64Str(const char *field_name);`
+- `float GetFloat(unsigned int index);`
+- `float GetFloatStr(const char *field_name);`
+- `char GetChar(unsigned int index);`
+- `char GetCharStr(const char *field_name);`
+
+## Notable Comments
+
+_None detected_
diff --git a/docs/code/EQ2_Common_Structs.md b/docs/code/EQ2_Common_Structs.md
new file mode 100644
index 0000000..85f595c
--- /dev/null
+++ b/docs/code/EQ2_Common_Structs.md
@@ -0,0 +1,34 @@
+# File: `EQ2_Common_Structs.h`
+
+## Classes
+
+- `KeyGen_Struct`
+- `KeyGen_End_Struct`
+- `LoginByNumRequest_Struct`
+- `LS_LoginResponse`
+- `EQ2_EquipmentItem`
+- `EQ2_Equipment`
+- `CharFeatures`
+- `PositionData`
+- `AppearanceData`
+- `Player_Update`
+- `Player_Update283`
+- `Player_Update1096`
+- `Player_Update1144`
+
+## Functions
+
+_None detected_
+
+## Notable Comments
+
+- /*
+- */
+- /*0000*/ int32 activity;
+- /*0004*/ float unknown2; // 1
+- /*0008*/ float direction1;
+- /*0012*/ float unknown3[8];
+- /*0044*/ float speed;
+- /*0048*/ float side_speed;
+- /*0052*/ float vert_speed;
+- /*0056*/ float orig_x;
diff --git a/docs/code/EQEMuError.md b/docs/code/EQEMuError.md
new file mode 100644
index 0000000..b9c3a9a
--- /dev/null
+++ b/docs/code/EQEMuError.md
@@ -0,0 +1,17 @@
+# File: `EQEMuError.h`
+
+## Classes
+
+_None detected_
+
+## Functions
+
+- `void AddEQEMuError(eEQEMuError iError, bool iExitNow = false);`
+- `void AddEQEMuError(char* iError, bool iExitNow = false);`
+- `int32 CheckEQEMuError();`
+- `void CheckEQEMuErrorAndPause();`
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/EQPacket.md b/docs/code/EQPacket.md
new file mode 100644
index 0000000..2b31ad8
--- /dev/null
+++ b/docs/code/EQPacket.md
@@ -0,0 +1,50 @@
+# File: `EQPacket.h`
+
+## Classes
+
+- `OpcodeManager`
+- `EQStream`
+- `EQPacket`
+- `EQApplicationPacket`
+- `EQProtocolPacket`
+- `EQ2Packet`
+- `EQApplicationPacket`
+
+## Functions
+
+- `void DumpRawHeader(uint16 seq=0xffff, FILE *to = stdout) const;`
+- `void DumpRawHeaderNoTime(uint16 seq=0xffff, FILE *to = stdout) const;`
+- `void DumpRaw(FILE *to = stdout) const;`
+- `void setVersion(int16 new_version){ version = new_version; }`
+- `void setSrcInfo(uint32 sip, uint16 sport) { src_ip=sip; src_port=sport; }`
+- `void setDstInfo(uint32 dip, uint16 dport) { dst_ip=dip; dst_port=dport; }`
+- `void setTimeInfo(uint32 ts_sec, uint32 ts_usec) { timestamp.tv_sec=ts_sec; timestamp.tv_usec=ts_usec; }`
+- `void copyInfo(const EQPacket *p) { src_ip=p->src_ip; src_port=p->src_port; dst_ip=p->dst_ip; dst_port=p->dst_port; timestamp.tv_sec=p->timestamp.tv_sec; timestamp.tv_usec=p->timestamp.tv_usec; }`
+- `uint32 Size() const { return size+2; }`
+- `uint16 GetRawOpcode() const { return(opcode); }`
+- `void SetProtocolOpcode(int16 new_opcode){`
+- `bool combine(const EQProtocolPacket *rhs);`
+- `uint32 serialize (unsigned char *dest, int8 offset = 0) const;`
+- `bool AppCombine(EQ2Packet* rhs);`
+- `int8 PreparePacket(int16 MaxLen);`
+- `bool combine(const EQApplicationPacket *rhs);`
+- `uint32 serialize (unsigned char *dest) const;`
+- `uint32 Size() const { return size+app_opcode_size; }`
+- `void SetOpcodeSize(uint8 s) { app_opcode_size=s; }`
+- `void SetOpcode(EmuOpcode op);`
+- `void DumpPacketHex(const EQApplicationPacket* app);`
+- `void DumpPacket(const EQProtocolPacket* app);`
+- `void DumpPacketAscii(const EQApplicationPacket* app);`
+- `void DumpPacket(const EQApplicationPacket* app, bool iShowInfo = false);`
+- `void DumpPacketBin(const EQApplicationPacket* app);`
+
+## Notable Comments
+
+- /*
+- */
+- //no reason to have this method in zone or world
+- //bool dont_combine;
+- //caching version of get
+- //this is just a cache so we dont look it up several times on Get()
+- //this constructor should only be used by EQProtocolPacket, as it
+- //assumes the first two bytes of buf are the opcode.
diff --git a/docs/code/EQStream.md b/docs/code/EQStream.md
new file mode 100644
index 0000000..659aad8
--- /dev/null
+++ b/docs/code/EQStream.md
@@ -0,0 +1,94 @@
+# File: `EQStream.h`
+
+## Classes
+
+- `SessionRequest`
+- `SessionResponse`
+- `ClientSessionStats`
+- `ServerSessionStats`
+- `OpcodeManager`
+- `EQStreamFactory`
+- `EQStream`
+
+## Functions
+
+- `char GetChar(uchar in);`
+- `void WriteToFile(char* pFormat, ...);`
+- `void WritePackets(const char* opcodeName, uchar* data, int32 size, bool outgoing);`
+- `void WritePackets(EQ2Packet* app, bool outgoing);`
+- `void SetLastSeqSent(uint32);`
+- `long GetMaxAckReceived();`
+- `long GetNextAckToSend();`
+- `long GetLastAckSent();`
+- `void SetMaxAckReceived(uint32 seq);`
+- `void SetNextAckToSend(uint32);`
+- `void SetLastAckSent(uint32);`
+- `bool CheckCombineQueue();`
+- `int8 EQ2_Compress(EQ2Packet* app, int8 offset = 3);`
+- `int16 GetClientVersion(){ return client_version; }`
+- `void SetClientVersion(int16 version){ client_version = version; }`
+- `void ResetSessionAttempts() { reconnectAttempt = 0; }`
+- `bool HasSessionAttempts() { return reconnectAttempt>0; }`
+- `void init(bool resetSession = true);`
+- `void SetMaxLen(uint32 length) { MaxLen=length; }`
+- `int8 getTimeoutDelays(){ return timeout_delays; }`
+- `void addTimeoutDelay(){ timeout_delays++; }`
+- `void EQ2QueuePacket(EQ2Packet* app, bool attempted_combine = false);`
+- `void PreparePacket(EQ2Packet* app, int8 offset = 0);`
+- `void UnPreparePacket(EQ2Packet* app);`
+- `void EncryptPacket(EQ2Packet* app, int8 compress_offset, int8 offset);`
+- `void FlushCombinedPacket();`
+- `void SendPacket(EQApplicationPacket *p);`
+- `void QueuePacket(EQProtocolPacket *p);`
+- `void SendPacket(EQProtocolPacket *p);`
+- `void NonSequencedPush(EQProtocolPacket *p);`
+- `void SequencedPush(EQProtocolPacket *p);`
+- `void CheckResend(int eq_fd);`
+- `void AckPackets(uint16 seq);`
+- `void Write(int eq_fd);`
+- `void SetActive(bool val) { streamactive = val; }`
+- `void WritePacket(int fd,EQProtocolPacket *p);`
+- `void EncryptPacket(uchar* data, int16 size);`
+- `uint32 GetKey() { return Key; }`
+- `void SetKey(uint32 k) { Key=k; }`
+- `void SetSession(uint32 s) { Session=s; }`
+- `void SetLastPacketTime(uint32 t) {LastPacket=t;}`
+- `void Process(const unsigned char *data, const uint32 length);`
+- `void ProcessPacket(EQProtocolPacket *p, EQProtocolPacket* lastp=NULL);`
+- `bool ProcessEmbeddedPacket(uchar* pBuffer, uint16 length, int8 opcode = OP_Packet);`
+- `bool HandleEmbeddedPacket(EQProtocolPacket *p, int16 offset = 2, int16 length = 0);`
+- `void SendSessionResponse();`
+- `void SendSessionRequest();`
+- `void SendDisconnect(bool setstate = true);`
+- `void SendAck(uint16 seq);`
+- `void SendOutOfOrderAck(uint16 seq);`
+- `bool CheckTimeout(uint32 now, uint32 timeout=30) { return (LastPacket && (now-LastPacket) > timeout); }`
+- `bool Stale(uint32 now, uint32 timeout=30) { return (LastPacket && (now-LastPacket) > timeout); }`
+- `void InboundQueuePush(EQApplicationPacket *p);`
+- `void InboundQueueClear();`
+- `void OutboundQueueClear();`
+- `bool HasOutgoingData();`
+- `void SendKeyRequest();`
+- `int16 processRSAKey(EQProtocolPacket *p, uint16 subpacket_length = 0);`
+- `void RemoveData() { InboundQueueClear(); OutboundQueueClear(); if (CombinedAppPacket) delete CombinedAppPacket; }`
+- `void Close() { SendDisconnect(); }`
+- `bool CheckActive() { return (GetState()==ESTABLISHED); }`
+- `bool CheckClosed() { return GetState()==CLOSED; }`
+- `void SetOpcodeSize(uint8 s) { app_opcode_size = s; }`
+- `void SetStreamType(EQStreamType t);`
+- `void ProcessQueue();`
+- `void Decay();`
+- `void AdjustRates(uint32 average_delta);`
+
+## Notable Comments
+
+- /*
+- */
+- //Deltas are in ms, representing round trip times
+- /*000*/ uint16 RequestID;
+- /*002*/ uint32 last_local_delta;
+- /*006*/ uint32 average_delta;
+- /*010*/ uint32 low_delta;
+- /*014*/ uint32 high_delta;
+- /*018*/ uint32 last_remote_delta;
+- /*022*/ uint64 packets_sent;
diff --git a/docs/code/EQStreamFactory.md b/docs/code/EQStreamFactory.md
new file mode 100644
index 0000000..db0b98a
--- /dev/null
+++ b/docs/code/EQStreamFactory.md
@@ -0,0 +1,27 @@
+# File: `EQStreamFactory.h`
+
+## Classes
+
+- `EQStreamFactory`
+
+## Functions
+
+- `void CheckTimeout(bool remove_all = false);`
+- `void Push(EQStream *s);`
+- `bool loadPublicKey();`
+- `bool Open();`
+- `bool Open(unsigned long port) { Port=port; return Open(); }`
+- `void Close();`
+- `void ReaderLoop();`
+- `void WriterLoop();`
+- `void CombinePacketLoop();`
+- `void Stop() { StopReader(); StopWriter(); StopCombinePacket(); }`
+- `void StopReader() { MReaderRunning.lock(); ReaderRunning=false; MReaderRunning.unlock(); }`
+- `void StopWriter() { MWriterRunning.lock(); WriterRunning=false; MWriterRunning.unlock(); WriterWork.Signal(); }`
+- `void StopCombinePacket() { MCombinePacketRunning.lock(); CombinePacketRunning=false; MCombinePacketRunning.unlock(); }`
+- `void SignalWriter() { WriterWork.Signal(); }`
+
+## Notable Comments
+
+- /*
+- */
diff --git a/docs/code/Entity.md b/docs/code/Entity.md
new file mode 100644
index 0000000..81aa661
--- /dev/null
+++ b/docs/code/Entity.md
@@ -0,0 +1,792 @@
+# File: `Entity.h`
+
+## Classes
+
+- `Entity`
+- `NPC`
+- `Trade`
+- `LuaSpell`
+- `GroupMemberInfo`
+- `BonusValues`
+- `MaintainedEffects`
+- `SpellEffects`
+- `DetrimentalEffects`
+- `InfoStruct`
+- `WardInfo`
+- `Proc`
+- `ThreatTransfer`
+- `Entity`
+
+## Functions
+
+- `void SetInfoStruct(InfoStruct* oldStruct)`
+- `std::lock_guard lk(classMutex);`
+- `std::string get_name() { std::lock_guard lk(classMutex); return name_; }`
+- `int8 get_class1() { std::lock_guard lk(classMutex); return class1_; }`
+- `int8 get_class2() { std::lock_guard lk(classMutex); return class2_; }`
+- `int8 get_class3() { std::lock_guard lk(classMutex); return class3_; }`
+- `int8 get_race() { std::lock_guard lk(classMutex); return race_; }`
+- `int8 get_gender() { std::lock_guard lk(classMutex); return gender_; }`
+- `int16 get_level() { std::lock_guard lk(classMutex); return level_; }`
+- `int16 get_max_level() { std::lock_guard lk(classMutex); return max_level_; }`
+- `int16 get_effective_level() { std::lock_guard lk(classMutex); return effective_level_; }`
+- `int16 get_tradeskill_level() { std::lock_guard lk(classMutex); return tradeskill_level_; }`
+- `int16 get_tradeskill_max_level() { std::lock_guard lk(classMutex); return tradeskill_max_level_; }`
+- `int8 get_cur_concentration() { std::lock_guard lk(classMutex); return cur_concentration_; }`
+- `int8 get_max_concentration() { std::lock_guard lk(classMutex); return max_concentration_; }`
+- `int8 get_max_concentration_base() { std::lock_guard lk(classMutex); return max_concentration_base_; }`
+- `int16 get_cur_attack() { std::lock_guard lk(classMutex); return cur_attack_; }`
+- `int16 get_attack_base() { std::lock_guard lk(classMutex); return attack_base_; }`
+- `int16 get_cur_mitigation() { std::lock_guard lk(classMutex); return cur_mitigation_; }`
+- `int16 get_max_mitigation() { std::lock_guard lk(classMutex); return max_mitigation_; }`
+- `int16 get_mitigation_base() { std::lock_guard lk(classMutex); return mitigation_base_; }`
+- `sint16 get_mitigation_modifier() { std::lock_guard lk(classMutex); return mitigation_modifier_; }`
+- `int16 get_avoidance_display() { std::lock_guard lk(classMutex); return avoidance_display_; }`
+- `float get_cur_avoidance() { std::lock_guard lk(classMutex); return cur_avoidance_; }`
+- `int16 get_base_avoidance_pct() { std::lock_guard lk(classMutex); return base_avoidance_pct_; }`
+- `int16 get_avoidance_base() { std::lock_guard lk(classMutex); return avoidance_base_; }`
+- `float get_parry() { std::lock_guard lk(classMutex); return parry_; }`
+- `float get_parry_base() { std::lock_guard lk(classMutex); return parry_base_; }`
+- `int16 get_max_avoidance() { std::lock_guard lk(classMutex); return max_avoidance_; }`
+- `float get_deflection() { std::lock_guard lk(classMutex); return deflection_; }`
+- `int16 get_deflection_base() { std::lock_guard lk(classMutex); return deflection_base_; }`
+- `float get_block() { std::lock_guard lk(classMutex); return block_; }`
+- `int16 get_block_base() { std::lock_guard lk(classMutex); return block_base_; }`
+- `float get_str() { std::lock_guard lk(classMutex); return str_; }`
+- `float get_sta() { std::lock_guard lk(classMutex); return sta_; }`
+- `float get_agi() { std::lock_guard lk(classMutex); return agi_; }`
+- `float get_wis() { std::lock_guard lk(classMutex); return wis_; }`
+- `float get_intel() { std::lock_guard lk(classMutex); return intel_; }`
+- `float get_str_base() { std::lock_guard lk(classMutex); return str_base_; }`
+- `float get_sta_base() { std::lock_guard lk(classMutex); return sta_base_; }`
+- `float get_agi_base() { std::lock_guard lk(classMutex); return agi_base_; }`
+- `float get_wis_base() { std::lock_guard lk(classMutex); return wis_base_; }`
+- `float get_intel_base() { std::lock_guard lk(classMutex); return intel_base_; }`
+- `int16 get_heat() { std::lock_guard lk(classMutex); return heat_; }`
+- `int16 get_cold() { std::lock_guard lk(classMutex); return cold_; }`
+- `int16 get_magic() { std::lock_guard lk(classMutex); return magic_; }`
+- `int16 get_mental() { std::lock_guard lk(classMutex); return mental_; }`
+- `int16 get_divine() { std::lock_guard lk(classMutex); return divine_; }`
+- `int16 get_disease() { std::lock_guard lk(classMutex); return disease_; }`
+- `int16 get_poison() { std::lock_guard lk(classMutex); return poison_; }`
+- `int16 get_disease_base() { std::lock_guard lk(classMutex); return disease_base_; }`
+- `int16 get_cold_base() { std::lock_guard lk(classMutex); return cold_base_; }`
+- `int16 get_divine_base() { std::lock_guard lk(classMutex); return divine_base_; }`
+- `int16 get_magic_base() { std::lock_guard lk(classMutex); return magic_base_; }`
+- `int16 get_mental_base() { std::lock_guard lk(classMutex); return mental_base_; }`
+- `int16 get_heat_base() { std::lock_guard lk(classMutex); return heat_base_; }`
+- `int16 get_poison_base() { std::lock_guard lk(classMutex); return poison_base_; }`
+- `int16 get_elemental_base() { std::lock_guard lk(classMutex); return elemental_base_; }`
+- `int16 get_noxious_base() { std::lock_guard lk(classMutex); return noxious_base_; }`
+- `int16 get_arcane_base() { std::lock_guard lk(classMutex); return arcane_base_; }`
+- `int32 get_coin_copper() { std::lock_guard lk(classMutex); return coin_copper_; }`
+- `int32 get_coin_silver() { std::lock_guard lk(classMutex); return coin_silver_; }`
+- `int32 get_coin_gold() { std::lock_guard lk(classMutex); return coin_gold_; }`
+- `int32 get_coin_plat() { std::lock_guard lk(classMutex); return coin_plat_; }`
+- `int32 get_bank_coin_copper() { std::lock_guard lk(classMutex); return bank_coin_copper_; }`
+- `int32 get_bank_coin_silver() { std::lock_guard lk(classMutex); return bank_coin_silver_; }`
+- `int32 get_bank_coin_gold() { std::lock_guard lk(classMutex); return bank_coin_gold_; }`
+- `int32 get_bank_coin_plat() { std::lock_guard lk(classMutex); return bank_coin_plat_; }`
+- `int32 get_status_points() { std::lock_guard lk(classMutex); return status_points_; }`
+- `std::string get_deity() { std::lock_guard lk(classMutex); return deity_; }`
+- `int32 get_weight() { std::lock_guard lk(classMutex); return weight_; }`
+- `int32 get_max_weight() { std::lock_guard lk(classMutex); return max_weight_; }`
+- `int8 get_tradeskill_class1() { std::lock_guard lk(classMutex); return tradeskill_class1_; }`
+- `int8 get_tradeskill_class2() { std::lock_guard lk(classMutex); return tradeskill_class2_; }`
+- `int8 get_tradeskill_class3() { std::lock_guard lk(classMutex); return tradeskill_class3_; }`
+- `int32 get_account_age_base() { std::lock_guard lk(classMutex); return account_age_base_; }`
+- `int8 get_account_age_bonus(int8 field) { std::lock_guard lk(classMutex); return account_age_bonus_[field]; }`
+- `int16 get_absorb() { std::lock_guard lk(classMutex); return absorb_; }`
+- `int32 get_xp() { std::lock_guard lk(classMutex); return xp_; }`
+- `int32 get_xp_needed() { std::lock_guard lk(classMutex); return xp_needed_; }`
+- `float get_xp_debt() { std::lock_guard lk(classMutex); return xp_debt_; }`
+- `int16 get_xp_yellow() { std::lock_guard lk(classMutex); return xp_yellow_; }`
+- `int16 get_xp_yellow_vitality_bar() { std::lock_guard lk(classMutex); return xp_yellow_vitality_bar_; }`
+- `int16 get_xp_blue_vitality_bar() { std::lock_guard lk(classMutex); return xp_blue_vitality_bar_; }`
+- `int16 get_xp_blue() { std::lock_guard lk(classMutex); return xp_blue_; }`
+- `int32 get_ts_xp() { std::lock_guard lk(classMutex); return ts_xp_; }`
+- `int32 get_ts_xp_needed() { std::lock_guard lk(classMutex); return ts_xp_needed_; }`
+- `int16 get_tradeskill_exp_yellow() { std::lock_guard lk(classMutex); return tradeskill_exp_yellow_; }`
+- `int16 get_tradeskill_exp_blue() { std::lock_guard lk(classMutex); return tradeskill_exp_blue_; }`
+- `int32 get_flags() { std::lock_guard lk(classMutex); return flags_; }`
+- `int32 get_flags2() { std::lock_guard lk(classMutex); return flags2_; }`
+- `float get_xp_vitality() { std::lock_guard lk(classMutex); return xp_vitality_; }`
+- `float get_tradeskill_xp_vitality() { std::lock_guard lk(classMutex); return tradeskill_xp_vitality_; }`
+- `int16 get_mitigation_skill1() { std::lock_guard lk(classMutex); return mitigation_skill1_; }`
+- `int16 get_mitigation_skill2() { std::lock_guard lk(classMutex); return mitigation_skill2_; }`
+- `int16 get_mitigation_skill3() { std::lock_guard lk(classMutex); return mitigation_skill3_; }`
+- `int16 get_mitigation_pve() { std::lock_guard lk(classMutex); return mitigation_pve_; }`
+- `int16 get_mitigation_pvp() { std::lock_guard lk(classMutex); return mitigation_pvp_; }`
+- `float get_ability_modifier() { std::lock_guard lk(classMutex); return ability_modifier_; }`
+- `float get_critical_mitigation() { std::lock_guard lk(classMutex); return critical_mitigation_; }`
+- `float get_block_chance() { std::lock_guard lk(classMutex); return block_chance_; }`
+- `float get_uncontested_parry() { std::lock_guard lk(classMutex); return uncontested_parry_; }`
+- `float get_uncontested_block() { std::lock_guard lk(classMutex); return uncontested_block_; }`
+- `float get_uncontested_dodge() { std::lock_guard lk(classMutex); return uncontested_dodge_; }`
+- `float get_uncontested_riposte() { std::lock_guard lk(classMutex); return uncontested_riposte_; }`
+- `float get_crit_chance() { std::lock_guard lk(classMutex); return crit_chance_; }`
+- `float get_crit_bonus() { std::lock_guard lk(classMutex); return crit_bonus_; }`
+- `float get_potency() { std::lock_guard lk(classMutex); return potency_; }`
+- `float get_hate_mod() { std::lock_guard lk(classMutex); return hate_mod_; }`
+- `float get_reuse_speed() { std::lock_guard lk(classMutex); return reuse_speed_; }`
+- `float get_casting_speed() { std::lock_guard lk(classMutex); return casting_speed_; }`
+- `float get_recovery_speed() { std::lock_guard lk(classMutex); return recovery_speed_; }`
+- `float get_spell_reuse_speed() { std::lock_guard lk(classMutex); return spell_reuse_speed_; }`
+- `float get_spell_multi_attack() { std::lock_guard lk(classMutex); return spell_multi_attack_; }`
+- `float get_dps() { std::lock_guard lk(classMutex); return dps_; }`
+- `float get_dps_multiplier() { std::lock_guard lk(classMutex); return dps_multiplier_; }`
+- `float get_attackspeed() { std::lock_guard lk(classMutex); return attackspeed_; }`
+- `float get_haste() { std::lock_guard lk(classMutex); return haste_; }`
+- `float get_multi_attack() { std::lock_guard lk(classMutex); return multi_attack_; }`
+- `float get_flurry() { std::lock_guard lk(classMutex); return flurry_; }`
+- `float get_melee_ae() { std::lock_guard lk(classMutex); return melee_ae_; }`
+- `float get_strikethrough() { std::lock_guard lk(classMutex); return strikethrough_; }`
+- `float get_accuracy() { std::lock_guard lk(classMutex); return accuracy_; }`
+- `float get_offensivespeed() { std::lock_guard lk(classMutex); return offensivespeed_; }`
+- `float get_rain() { std::lock_guard lk(classMutex); return rain_; }`
+- `float get_wind() { std::lock_guard lk(classMutex); return wind_; }`
+- `sint8 get_alignment() { std::lock_guard lk(classMutex); return alignment_; }`
+- `int32 get_pet_id() { std::lock_guard lk(classMutex); return pet_id_; }`
+- `std::string get_pet_name() { std::lock_guard lk(classMutex); return pet_name_; }`
+- `float get_pet_health_pct() { std::lock_guard lk(classMutex); return pet_health_pct_; }`
+- `float get_pet_power_pct() { std::lock_guard lk(classMutex); return pet_power_pct_; }`
+- `int8 get_pet_movement() { std::lock_guard lk(classMutex); return pet_movement_; }`
+- `int8 get_pet_behavior() { std::lock_guard lk(classMutex); return pet_behavior_; }`
+- `int32 get_vision() { std::lock_guard lk(classMutex); return vision_; }`
+- `int8 get_breathe_underwater() { std::lock_guard lk(classMutex); return breathe_underwater_; }`
+- `std::string get_biography() { std::lock_guard lk(classMutex); return biography_; }`
+- `float get_drunk() { std::lock_guard lk(classMutex); return drunk_; }`
+- `sint16 get_power_regen() { std::lock_guard lk(classMutex); return power_regen_; }`
+- `sint16 get_hp_regen() { std::lock_guard lk(classMutex); return hp_regen_; }`
+- `int8 get_power_regen_override() { std::lock_guard lk(classMutex); return power_regen_override_; }`
+- `int8 get_hp_regen_override() { std::lock_guard lk(classMutex); return hp_regen_override_; }`
+- `int8 get_water_type() { std::lock_guard lk(classMutex); return water_type_; }`
+- `int8 get_flying_type() { std::lock_guard lk(classMutex); return flying_type_; }`
+- `int8 get_no_interrupt() { std::lock_guard lk(classMutex); return no_interrupt_; }`
+- `int8 get_interaction_flag() { std::lock_guard lk(classMutex); return interaction_flag_; }`
+- `int8 get_tag1() { std::lock_guard lk(classMutex); return tag1_; }`
+- `int16 get_mood() { std::lock_guard lk(classMutex); return mood_; }`
+- `int32 get_range_last_attack_time() { std::lock_guard lk(classMutex); return range_last_attack_time_; }`
+- `int32 get_primary_last_attack_time() { std::lock_guard lk(classMutex); return primary_last_attack_time_; }`
+- `int32 get_secondary_last_attack_time() { std::lock_guard lk(classMutex); return secondary_last_attack_time_; }`
+- `int16 get_primary_attack_delay() { std::lock_guard lk(classMutex); return primary_attack_delay_; }`
+- `int16 get_secondary_attack_delay() { std::lock_guard lk(classMutex); return secondary_attack_delay_; }`
+- `int16 get_ranged_attack_delay() { std::lock_guard lk(classMutex); return ranged_attack_delay_; }`
+- `int8 get_primary_weapon_type() { std::lock_guard lk(classMutex); return primary_weapon_type_; }`
+- `int8 get_secondary_weapon_type() { std::lock_guard lk(classMutex); return secondary_weapon_type_; }`
+- `int8 get_ranged_weapon_type() { std::lock_guard lk(classMutex); return ranged_weapon_type_; }`
+- `int32 get_primary_weapon_damage_low() { std::lock_guard lk(classMutex); return primary_weapon_damage_low_; }`
+- `int32 get_primary_weapon_damage_high() { std::lock_guard lk(classMutex); return primary_weapon_damage_high_; }`
+- `int32 get_secondary_weapon_damage_low() { std::lock_guard lk(classMutex); return secondary_weapon_damage_low_; }`
+- `int32 get_secondary_weapon_damage_high() { std::lock_guard lk(classMutex); return secondary_weapon_damage_high_; }`
+- `int32 get_ranged_weapon_damage_low() { std::lock_guard lk(classMutex); return ranged_weapon_damage_low_; }`
+- `int32 get_ranged_weapon_damage_high() { std::lock_guard lk(classMutex); return ranged_weapon_damage_high_; }`
+- `int8 get_wield_type() { std::lock_guard lk(classMutex); return wield_type_; }`
+- `int8 get_attack_type() { std::lock_guard lk(classMutex); return attack_type_; }`
+- `int16 get_primary_weapon_delay() { std::lock_guard lk(classMutex); return primary_weapon_delay_; }`
+- `int16 get_secondary_weapon_delay() { std::lock_guard lk(classMutex); return secondary_weapon_delay_; }`
+- `int16 get_ranged_weapon_delay() { std::lock_guard lk(classMutex); return ranged_weapon_delay_; }`
+- `int8 get_override_primary_weapon() { std::lock_guard lk(classMutex); return override_primary_weapon_; }`
+- `int8 get_override_secondary_weapon() { std::lock_guard lk(classMutex); return override_secondary_weapon_; }`
+- `int8 get_override_ranged_weapon() { std::lock_guard lk(classMutex); return override_ranged_weapon_; }`
+- `int8 get_friendly_target_npc() { std::lock_guard lk(classMutex); return friendly_target_npc_; }`
+- `int32 get_last_claim_time() { std::lock_guard lk(classMutex); return last_claim_time_; }`
+- `int8 get_engaged_encounter() { std::lock_guard lk(classMutex); return engaged_encounter_; }`
+- `int8 get_lockable_encounter() { std::lock_guard lk(classMutex); return lockable_encounter_; }`
+- `int8 get_first_world_login() { std::lock_guard lk(classMutex); return first_world_login_; }`
+- `int8 get_reload_player_spells() { std::lock_guard lk(classMutex); return reload_player_spells_; }`
+- `int8 get_group_loot_method() { std::lock_guard lk(classMutex); return group_loot_method_; }`
+- `int8 get_group_loot_items_rarity() { std::lock_guard lk(classMutex); return group_loot_items_rarity_; }`
+- `int8 get_group_auto_split() { std::lock_guard lk(classMutex); return group_auto_split_; }`
+- `int8 get_group_default_yell() { std::lock_guard lk(classMutex); return group_default_yell_; }`
+- `int8 get_group_autolock() { std::lock_guard lk(classMutex); return group_autolock_; }`
+- `int8 get_group_lock_method() { std::lock_guard lk(classMutex); return group_lock_method_; }`
+- `int8 get_group_solo_autolock() { std::lock_guard lk(classMutex); return group_solo_autolock_; }`
+- `int8 get_group_auto_loot_method() { std::lock_guard lk(classMutex); return group_auto_loot_method_; }`
+- `int8 get_assist_auto_attack() { std::lock_guard lk(classMutex); return assist_auto_attack_; }`
+- `std::string get_action_state() { std::lock_guard lk(classMutex); return action_state_; }`
+- `std::string get_combat_action_state() { std::lock_guard lk(classMutex); return combat_action_state_; }`
+- `float get_max_spell_reduction() { std::lock_guard lk(classMutex); return max_spell_reduction_; }`
+- `int8 get_max_spell_reduction_override() { std::lock_guard lk(classMutex); return max_spell_reduction_override_; }`
+- `void set_name(std::string value) { std::lock_guard lk(classMutex); name_ = value; }`
+- `void set_deity(std::string value) { std::lock_guard lk(classMutex); deity_ = value; }`
+- `void set_class1(int8 value) { std::lock_guard lk(classMutex); class1_ = value; }`
+- `void set_class2(int8 value) { std::lock_guard lk(classMutex); class2_ = value; }`
+- `void set_class3(int8 value) { std::lock_guard lk(classMutex); class3_ = value; }`
+- `void set_race(int8 value) { std::lock_guard lk(classMutex); race_ = value; }`
+- `void set_gender(int8 value) { std::lock_guard lk(classMutex); gender_ = value; }`
+- `void set_level(int16 value) { std::lock_guard lk(classMutex); level_ = value; }`
+- `void set_max_level(int16 value) { std::lock_guard lk(classMutex); max_level_ = value; }`
+- `void set_effective_level(int16 value) { std::lock_guard lk(classMutex); effective_level_ = value; }`
+- `void set_cur_concentration(int8 value) { std::lock_guard lk(classMutex); cur_concentration_ = value; }`
+- `void set_max_concentration(int8 value) { std::lock_guard lk(classMutex); max_concentration_ = value; }`
+- `void set_max_concentration_base(int8 value) { std::lock_guard lk(classMutex); max_concentration_base_ = value; }`
+- `void add_cur_concentration(int8 value) { std::lock_guard lk(classMutex); cur_concentration_ += value; }`
+- `void add_max_concentration(int8 value) { std::lock_guard lk(classMutex); max_concentration_ += value; }`
+- `void set_cur_attack(int16 value) { std::lock_guard lk(classMutex); cur_attack_ = value; }`
+- `void set_attack_base(int16 value) { std::lock_guard lk(classMutex); attack_base_ = value; }`
+- `void set_cur_mitigation(int16 value) { std::lock_guard lk(classMutex); cur_mitigation_ = value; }`
+- `void set_max_mitigation(int16 value) { std::lock_guard lk(classMutex); max_mitigation_ = value; }`
+- `void set_mitigation_base(int16 value) { std::lock_guard lk(classMutex); mitigation_base_ = value; }`
+- `void add_mitigation_base(int16 value) { std::lock_guard lk(classMutex); mitigation_base_ += value; }`
+- `void set_mitigation_modifier(sint16 value) { std::lock_guard lk(classMutex); mitigation_modifier_ = value; }`
+- `void set_avoidance_display(int16 value) { std::lock_guard lk(classMutex); avoidance_display_ = value; }`
+- `void set_cur_avoidance(float value) { std::lock_guard lk(classMutex); cur_avoidance_ = value; }`
+- `void set_base_avoidance_pct(int16 value) { std::lock_guard lk(classMutex); base_avoidance_pct_ = value; }`
+- `void set_avoidance_base(int16 value) { std::lock_guard lk(classMutex); avoidance_base_ = value; }`
+- `void set_max_avoidance(int16 value) { std::lock_guard lk(classMutex); max_avoidance_ = value; }`
+- `void set_parry(float value) { std::lock_guard lk(classMutex); parry_ = value; }`
+- `void set_parry_base(float value) { std::lock_guard lk(classMutex); parry_base_ = value; }`
+- `void set_deflection(int16 value) { std::lock_guard lk(classMutex); deflection_ = value; }`
+- `void set_deflection_base(float value) { std::lock_guard lk(classMutex); deflection_base_ = value; }`
+- `void set_block(float value) { std::lock_guard lk(classMutex); block_ = value; }`
+- `void set_block_base(int16 value) { std::lock_guard lk(classMutex); block_base_ = value; }`
+- `void set_str(float value) { std::lock_guard lk(classMutex); str_ = value; }`
+- `void set_sta(float value) { std::lock_guard lk(classMutex); sta_ = value; }`
+- `void set_agi(float value) { std::lock_guard lk(classMutex); agi_ = value; }`
+- `void set_wis(float value) { std::lock_guard lk(classMutex); wis_ = value; }`
+- `void set_intel(float value) { std::lock_guard lk(classMutex); intel_ = value; }`
+- `void add_str(float value) { std::lock_guard lk(classMutex); if(str_ + value < 0.0f) str_ = 0.0f; else str_ += value; }`
+- `void add_sta(float value) { std::lock_guard lk(classMutex); if(sta_ + value < 0.0f) sta_ = 0.0f; else sta_ += value; }`
+- `void add_agi(float value) { std::lock_guard lk(classMutex); if(agi_ + value < 0.0f) agi_ = 0.0f; else agi_ += value; }`
+- `void add_wis(float value) { std::lock_guard lk(classMutex); if(wis_ + value < 0.0f) wis_ = 0.0f; else wis_ += value; }`
+- `void add_intel(float value) { std::lock_guard lk(classMutex); if(intel_ + value < 0.0f) intel_ = 0.0f; else intel_ += value; }`
+- `void set_str_base(float value) { std::lock_guard lk(classMutex); str_base_ = value; }`
+- `void set_sta_base(float value) { std::lock_guard lk(classMutex); sta_base_ = value; }`
+- `void set_agi_base(float value) { std::lock_guard lk(classMutex); agi_base_ = value; }`
+- `void set_wis_base(float value) { std::lock_guard lk(classMutex); wis_base_ = value; }`
+- `void set_intel_base(float value) { std::lock_guard lk(classMutex); intel_base_ = value; }`
+- `void set_heat(int16 value) { std::lock_guard lk(classMutex); heat_ = value; }`
+- `void set_cold(int16 value) { std::lock_guard lk(classMutex); cold_ = value; }`
+- `void set_magic(int16 value) { std::lock_guard lk(classMutex); magic_ = value; }`
+- `void set_mental(int16 value) { std::lock_guard lk(classMutex); mental_ = value; }`
+- `void set_divine(int16 value) { std::lock_guard lk(classMutex); divine_ = value; }`
+- `void set_disease(int16 value) { std::lock_guard lk(classMutex); disease_ = value; }`
+- `void set_poison(int16 value) { std::lock_guard lk(classMutex); poison_ = value; }`
+- `void add_heat(sint16 value) { std::lock_guard lk(classMutex); if((sint32)heat_ + value < 0) heat_ = 0; else heat_ += value; }`
+- `void add_cold(sint16 value) { std::lock_guard lk(classMutex); if((sint32)cold_ + value < 0) cold_ = 0; else cold_ += value; }`
+- `void add_magic(sint16 value) { std::lock_guard lk(classMutex); if((sint32)magic_ + value < 0) magic_ = 0; else magic_ += value; }`
+- `void add_mental(sint16 value) { std::lock_guard lk(classMutex); if((sint32)mental_ + value < 0) mental_ = 0; else mental_ += value; }`
+- `void add_divine(sint16 value) { std::lock_guard lk(classMutex); if((sint32)divine_ + value < 0) divine_ = 0; else divine_ += value; }`
+- `void add_disease(sint16 value) { std::lock_guard lk(classMutex); if((sint32)disease_ + value < 0) disease_ = 0; else disease_ += value; }`
+- `void add_poison(sint16 value) { std::lock_guard lk(classMutex); if((sint32)poison_ + value < 0) poison_ = 0; else poison_ += value; }`
+- `void set_disease_base(int16 value) { std::lock_guard lk(classMutex); disease_base_ = value; }`
+- `void set_cold_base(int16 value) { std::lock_guard