diff --git a/PlayerTags/Configuration/PluginConfigurationUI.cs b/PlayerTags/Configuration/PluginConfigurationUI.cs index 37377e1..5bbf498 100644 --- a/PlayerTags/Configuration/PluginConfigurationUI.cs +++ b/PlayerTags/Configuration/PluginConfigurationUI.cs @@ -171,7 +171,7 @@ namespace PlayerTags.Configuration int rowIndex = 0; foreach (var player in orderedPlayerNameContexts) { - DrawPlayerAssignmentRow(player.Key, rowIndex); + DrawQuickAddRow(new Identity(player.Key), rowIndex); ++rowIndex; } } @@ -200,15 +200,15 @@ namespace PlayerTags.Configuration ImGui.TableHeadersRow(); int rowIndex = 0; - foreach (var gameObjectName in m_PluginData.CustomTags.SelectMany(customTag => customTag.SplitGameObjectNamesToApplyTo).Distinct().OrderBy(name => name).ToArray()) + foreach (var identity in m_PluginData.CustomTags.SelectMany(customTag => customTag.IdentitiesToAddTo).Distinct().OrderBy(name => name).ToArray()) { - DrawPlayerAssignmentRow(gameObjectName, rowIndex); + DrawQuickAddRow(identity, rowIndex); ++rowIndex; } if (PluginServices.ObjectTable.Length == 0 && PluginServices.ClientState.LocalPlayer != null) { - DrawPlayerAssignmentRow(PluginServices.ClientState.LocalPlayer.Name.TextValue, 0); + DrawQuickAddRow(new Identity(PluginServices.ClientState.LocalPlayer.Name.TextValue), 0); } ImGui.EndTable(); @@ -229,9 +229,9 @@ namespace PlayerTags.Configuration } } - void DrawPlayerAssignmentRow(string playerName, int rowIndex) + void DrawQuickAddRow(Identity identity, int rowIndex) { - ImGui.PushID(playerName); + ImGui.PushID(identity.ToString()); ImGui.TableNextRow(); @@ -244,7 +244,7 @@ namespace PlayerTags.Configuration ImGui.TableNextColumn(); ImGui.AlignTextToFramePadding(); - ImGui.Text(playerName); + ImGui.Text(identity.Name); foreach (Tag customTag in m_PluginData.CustomTags) { @@ -252,17 +252,17 @@ namespace PlayerTags.Configuration ImGui.TableNextColumn(); - bool isTagAssigned = customTag.IncludesGameObjectNameToApplyTo(playerName); + bool isTagAssigned = customTag.CanAddToIdentity(identity); - DrawSimpleCheckbox(string.Format(Strings.Loc_Static_Format_AddTagToPlayer, customTag.Text.InheritedValue, playerName), ref isTagAssigned, () => + DrawSimpleCheckbox(string.Format(Strings.Loc_Static_Format_AddTagToPlayer, customTag.Text.InheritedValue, identity.Name), ref isTagAssigned, () => { if (isTagAssigned) { - customTag.AddGameObjectNameToApplyTo(playerName); + customTag.AddIdentityToAddTo(identity); } else { - customTag.RemoveGameObjectNameToApplyTo(playerName); + customTag.RemoveIdentityToAddTo(identity); } m_PluginConfiguration.Save(m_PluginData); diff --git a/PlayerTags/Data/DefaultPluginData.cs b/PlayerTags/Data/DefaultPluginData.cs index 07bdee7..511a7e2 100644 --- a/PlayerTags/Data/DefaultPluginData.cs +++ b/PlayerTags/Data/DefaultPluginData.cs @@ -60,7 +60,9 @@ namespace PlayerTags.Data IsSelected = false, IsExpanded = true, IsIconVisibleInChat = true, + IsTextVisibleInChat = true, IsTextVisibleInNameplates = true, + IsTextColorAppliedToChatName = true }.GetChanges(); RoleTagsChanges = new Dictionary>(); diff --git a/PlayerTags/Data/Identity.cs b/PlayerTags/Data/Identity.cs new file mode 100644 index 0000000..4c66c10 --- /dev/null +++ b/PlayerTags/Data/Identity.cs @@ -0,0 +1,74 @@ +using System; + +namespace PlayerTags.Data +{ + // FirstName LastName + // FirstName LastName:Id + public struct Identity : IEquatable + { + public string Name; + public string? Id; + + public Identity(string name) + { + Name = name; + Id = null; + } + + public Identity(string name, string id) + { + Name = name; + Id = id; + } + + public override string ToString() + { + string str = Name; + + if (Id != null) + { + Name += $":{Id}"; + } + + return str; + + } + + public override bool Equals(object? obj) + { + return obj is Identity identity && Equals(identity); + } + + public bool Equals(Identity obj) + { + return this == obj; + } + + public static bool operator ==(Identity first, Identity second) + { + if (first.Id != null || second.Id != null) + { + return first.Id == second.Id; + } + + return first.Name.ToLower().Trim() == second.Name.ToLower().Trim(); + } + + public static bool operator !=(Identity first, Identity second) + { + return !(first == second); + } + + public override int GetHashCode() + { + var hashCode = Name.GetHashCode(); + + if (Id != null) + { + hashCode *= 17 ^ Id.GetHashCode(); + } + + return hashCode; + } + } +} diff --git a/PlayerTags/Data/Tag.cs b/PlayerTags/Data/Tag.cs index 28e16d1..1b99c65 100644 --- a/PlayerTags/Data/Tag.cs +++ b/PlayerTags/Data/Tag.cs @@ -81,8 +81,15 @@ namespace PlayerTags.Data } } - public InheritableValue IsSelected = new InheritableValue(false); - public InheritableValue IsExpanded = new InheritableValue(false); + public InheritableValue IsSelected = new InheritableValue(false) + { + Behavior = InheritableBehavior.Enabled + }; + + public InheritableValue IsExpanded = new InheritableValue(false) + { + Behavior = InheritableBehavior.Enabled + }; [InheritableCategory("GeneralCategory")] public InheritableReference GameObjectNamesToApplyTo = new InheritableReference(""); @@ -106,6 +113,14 @@ namespace PlayerTags.Data public InheritableValue IsTextVisibleInChat = new InheritableValue(false); [InheritableCategory("TextCategory")] public InheritableValue IsTextVisibleInNameplates = new InheritableValue(false); + [InheritableCategory("TextCategory")] + public InheritableValue IsTextColorAppliedToChatName = new InheritableValue(false); + [InheritableCategory("TextCategory")] + public InheritableValue IsTextColorAppliedToNameplateName = new InheritableValue(false); + [InheritableCategory("TextCategory")] + public InheritableValue IsTextColorAppliedToNameplateTitle = new InheritableValue(false); + [InheritableCategory("TextCategory")] + public InheritableValue IsTextColorAppliedToNameplateFreeCompany = new InheritableValue(false); [InheritableCategory("PositionCategory")] public InheritableValue TagPositionInChat = new InheritableValue(TagPosition.Before); @@ -134,7 +149,7 @@ namespace PlayerTags.Data [InheritableCategory("PlayerCategory")] public InheritableValue IsVisibleForOtherPlayers = new InheritableValue(false); - public string[] SplitGameObjectNamesToApplyTo + private string[] IdentityDatasToAddTo { get { @@ -147,11 +162,26 @@ namespace PlayerTags.Data } } - private string[] CleanGameObjectNamesToApplyTo + private Identity GetIdentity(string identityData) + { + var identity = new Identity(); + + var IdParts = identityData.Split(':'); + if (IdParts.Length > 1) + { + identity.Id = IdParts[1]; + } + + identity.Name = IdParts[0]; + + return identity; + } + + public Identity[] IdentitiesToAddTo { get { - return SplitGameObjectNamesToApplyTo.Select(gameObjectName => gameObjectName.ToLower().Trim()).ToArray(); + return IdentityDatasToAddTo.Select(identityData => GetIdentity(identityData)).ToArray(); } } @@ -160,38 +190,29 @@ namespace PlayerTags.Data Name = name; } - public bool IncludesGameObjectNameToApplyTo(string gameObjectName) + public bool CanAddToIdentity(Identity identity) { - return CleanGameObjectNamesToApplyTo.Contains(gameObjectName.ToLower()); + return IdentitiesToAddTo.Contains(identity); } - public void AddGameObjectNameToApplyTo(string gameObjectName) + public void AddIdentityToAddTo(Identity identity) { - if (IncludesGameObjectNameToApplyTo(gameObjectName)) + if (CanAddToIdentity(identity)) { return; } - List newSplitGameObjectNamesToApplyTo = SplitGameObjectNamesToApplyTo.ToList(); - - newSplitGameObjectNamesToApplyTo.Add(gameObjectName); - - GameObjectNamesToApplyTo.Value = string.Join(",", newSplitGameObjectNamesToApplyTo); + GameObjectNamesToApplyTo.Value = string.Join(", ", IdentitiesToAddTo.Append(identity)); } - public void RemoveGameObjectNameToApplyTo(string gameObjectName) + public void RemoveIdentityToAddTo(Identity identity) { - if (!IncludesGameObjectNameToApplyTo(gameObjectName)) + if (!CanAddToIdentity(identity)) { return; } - List newSplitGameObjectNamesToApplyTo = SplitGameObjectNamesToApplyTo.ToList(); - - var index = Array.IndexOf(CleanGameObjectNamesToApplyTo, gameObjectName.ToLower()); - newSplitGameObjectNamesToApplyTo.RemoveAt(index); - - GameObjectNamesToApplyTo = string.Join(",", newSplitGameObjectNamesToApplyTo); + GameObjectNamesToApplyTo.Value = string.Join(", ", IdentitiesToAddTo.Where(identityToAddTo => identityToAddTo != identity)); } public Dictionary GetChanges(Dictionary? defaultChanges = null) diff --git a/PlayerTags/Features/ChatTagTargetFeature.cs b/PlayerTags/Features/ChatTagTargetFeature.cs index 72155cc..a357c19 100644 --- a/PlayerTags/Features/ChatTagTargetFeature.cs +++ b/PlayerTags/Features/ChatTagTargetFeature.cs @@ -63,7 +63,6 @@ namespace PlayerTags.Features private PluginData m_PluginData; public ChatTagTargetFeature(PluginConfiguration pluginConfiguration, PluginData pluginData) - : base(pluginConfiguration) { m_PluginConfiguration = pluginConfiguration; m_PluginData = pluginData; @@ -160,7 +159,7 @@ namespace PlayerTags.Features { if (jobTag.TagPositionInChat.InheritedValue != null) { - var payloads = GetPayloads(stringMatch.GameObject, jobTag); + var payloads = GetPayloads(jobTag, stringMatch.GameObject); if (payloads.Any()) { AddPayloadChanges(jobTag.TagPositionInChat.InheritedValue.Value, payloads, stringChanges); @@ -181,15 +180,18 @@ namespace PlayerTags.Features } } } + } - // Add the custom tag payloads + if (stringMatch.PlayerPayload != null) + { + // Add all other tags foreach (var customTag in m_PluginData.CustomTags) { - if (customTag.TagPositionInChat.InheritedValue != null) + if (customTag.CanAddToIdentity(new Identity(stringMatch.PlayerPayload.PlayerName))) { - if (customTag.IncludesGameObjectNameToApplyTo(stringMatch.GetMatchText())) + if (customTag.TagPositionInChat.InheritedValue != null) { - var customTagPayloads = GetPayloads(stringMatch.GameObject, customTag); + var customTagPayloads = GetPayloads(customTag, stringMatch.GameObject); if (customTagPayloads.Any()) { AddPayloadChanges(customTag.TagPositionInChat.InheritedValue.Value, customTagPayloads, stringChanges); @@ -199,6 +201,48 @@ namespace PlayerTags.Features } } + // An additional step to apply text color to additional locations + if (stringMatch.GameObject is PlayerCharacter playerCharacter1) + { + if (m_PluginData.JobTags.TryGetValue(playerCharacter1.ClassJob.GameData.Abbreviation, out var jobTag)) + { + if (IsTagVisible(jobTag, stringMatch.GameObject)) + { + if (jobTag.TextColor.InheritedValue != null) + { + if (jobTag.IsTextColorAppliedToChatName.InheritedValue != null && jobTag.IsTextColorAppliedToChatName.InheritedValue.Value) + { + int payloadIndex = message.Payloads.IndexOf(stringMatch.TextPayload); + message.Payloads.Insert(payloadIndex + 1, new UIForegroundPayload(0)); + message.Payloads.Insert(payloadIndex, (new UIForegroundPayload(jobTag.TextColor.InheritedValue.Value))); + } + } + } + } + } + + if (stringMatch.PlayerPayload != null) + { + foreach (var customTag in m_PluginData.CustomTags) + { + if (customTag.CanAddToIdentity(new Identity(stringMatch.PlayerPayload.PlayerName))) + { + if (IsTagVisible(customTag, stringMatch.GameObject)) + { + if (customTag.TextColor.InheritedValue != null) + { + if (customTag.IsTextColorAppliedToChatName.InheritedValue != null && customTag.IsTextColorAppliedToChatName.InheritedValue.Value) + { + int payloadIndex = message.Payloads.IndexOf(stringMatch.TextPayload); + message.Payloads.Insert(payloadIndex + 1, new UIForegroundPayload(0)); + message.Payloads.Insert(payloadIndex, (new UIForegroundPayload(customTag.TextColor.InheritedValue.Value))); + } + } + } + } + } + } + ApplyStringChanges(message, stringChanges, stringMatch.TextPayload); } } diff --git a/PlayerTags/Features/CustomTagsContextMenuFeature.cs b/PlayerTags/Features/CustomTagsContextMenuFeature.cs index 515f3a6..c52edf1 100644 --- a/PlayerTags/Features/CustomTagsContextMenuFeature.cs +++ b/PlayerTags/Features/CustomTagsContextMenuFeature.cs @@ -53,7 +53,10 @@ namespace PlayerTags.Features string gameObjectName = args.Text!.TextValue; - var notAddedTags = m_PluginData.CustomTags.Where(tag => !tag.IncludesGameObjectNameToApplyTo(gameObjectName)); + var notAddedTags = m_PluginData.CustomTags.Where(tag => !tag.CanAddToIdentity(new Identity() + { + Name = gameObjectName + })); if (notAddedTags.Any()) { args.Items.Add(new NormalContextSubMenuItem(Strings.Loc_Static_ContextMenu_AddTag, (itemArgs => @@ -62,13 +65,21 @@ namespace PlayerTags.Features { itemArgs.Items.Add(new NormalContextMenuItem(notAddedTag.Text.Value, (args => { - notAddedTag.AddGameObjectNameToApplyTo(gameObjectName); + notAddedTag.AddIdentityToAddTo(new Identity() + { + Name = gameObjectName + }); + + m_PluginConfiguration.Save(m_PluginData); }))); } }))); } - var addedTags = m_PluginData.CustomTags.Where(tag => tag.IncludesGameObjectNameToApplyTo(gameObjectName)); + var addedTags = m_PluginData.CustomTags.Where(tag => tag.CanAddToIdentity(new Identity() + { + Name = gameObjectName + })); if (addedTags.Any()) { args.Items.Add(new NormalContextSubMenuItem(Strings.Loc_Static_ContextMenu_RemoveTag, (itemArgs => @@ -77,7 +88,12 @@ namespace PlayerTags.Features { itemArgs.Items.Add(new NormalContextMenuItem(addedTag.Text.Value, (args => { - addedTag.RemoveGameObjectNameToApplyTo(gameObjectName); + addedTag.RemoveIdentityToAddTo(new Identity() + { + Name = gameObjectName + }); + + m_PluginConfiguration.Save(m_PluginData); }))); } }))); diff --git a/PlayerTags/Features/NameplatesTagTargetFeature.cs b/PlayerTags/Features/NameplatesTagTargetFeature.cs index dab401e..05d2931 100644 --- a/PlayerTags/Features/NameplatesTagTargetFeature.cs +++ b/PlayerTags/Features/NameplatesTagTargetFeature.cs @@ -19,7 +19,6 @@ namespace PlayerTags.Features private NameplateHooks? m_NameplateHooks; public NameplatesTagTargetFeature(PluginConfiguration pluginConfiguration, PluginData pluginData) - : base(pluginConfiguration) { m_PluginConfiguration = pluginConfiguration; m_PluginData = pluginData; @@ -176,14 +175,14 @@ namespace PlayerTags.Features Dictionary>> nameplateChanges = new Dictionary>>(); - if (gameObject is Character character) + if (gameObject is PlayerCharacter playerCharacter) { // Add the job tags - if (m_PluginData.JobTags.TryGetValue(character.ClassJob.GameData.Abbreviation, out var jobTag)) + if (m_PluginData.JobTags.TryGetValue(playerCharacter.ClassJob.GameData.Abbreviation, out var jobTag)) { if (jobTag.TagTargetInNameplates.InheritedValue != null && jobTag.TagPositionInNameplates.InheritedValue != null) { - var payloads = GetPayloads(gameObject, jobTag); + var payloads = GetPayloads(jobTag, gameObject); if (payloads.Any()) { AddPayloadChanges(jobTag.TagTargetInNameplates.InheritedValue.Value, jobTag.TagPositionInNameplates.InheritedValue.Value, payloads, nameplateChanges); @@ -194,7 +193,7 @@ namespace PlayerTags.Features // Add the randomly generated name tag payload if (m_PluginConfiguration.IsPlayerNameRandomlyGenerated) { - var characterName = character.Name.TextValue; + var characterName = playerCharacter.Name.TextValue; if (characterName != null) { var generatedName = RandomNameGenerator.Generate(characterName); @@ -204,19 +203,19 @@ namespace PlayerTags.Features } } } - } - // Add all other tags - foreach (var customTag in m_PluginData.AllTags.Descendents) - { - if (customTag.TagTargetInNameplates.InheritedValue != null && customTag.TagPositionInNameplates.InheritedValue != null) + // Add all other tags + foreach (var customTag in m_PluginData.CustomTags) { - if (customTag.IncludesGameObjectNameToApplyTo(gameObject.Name.TextValue)) + if (customTag.CanAddToIdentity(new Identity(gameObject.Name.TextValue))) { - var payloads = GetPayloads(gameObject, customTag); - if (payloads.Any()) + if (customTag.TagTargetInNameplates.InheritedValue != null && customTag.TagPositionInNameplates.InheritedValue != null) { - AddPayloadChanges(customTag.TagTargetInNameplates.InheritedValue.Value, customTag.TagPositionInNameplates.InheritedValue.Value, payloads, nameplateChanges); + var payloads = GetPayloads(customTag, gameObject); + if (payloads.Any()) + { + AddPayloadChanges(customTag.TagTargetInNameplates.InheritedValue.Value, customTag.TagPositionInNameplates.InheritedValue.Value, payloads, nameplateChanges); + } } } } @@ -247,6 +246,73 @@ namespace PlayerTags.Features ApplyStringChanges(seString, stringChanges); } } + + // An additional step to apply text color to additional locations + if (gameObject is PlayerCharacter playerCharacter1) + { + if (m_PluginData.JobTags.TryGetValue(playerCharacter1.ClassJob.GameData.Abbreviation, out var jobTag)) + { + if (IsTagVisible(jobTag, gameObject)) + { + if (jobTag.TextColor.InheritedValue != null) + { + if (jobTag.IsTextColorAppliedToNameplateName.InheritedValue != null && jobTag.IsTextColorAppliedToNameplateName.InheritedValue.Value) + { + name.Payloads.Insert(0, (new UIForegroundPayload(jobTag.TextColor.InheritedValue.Value))); + name.Payloads.Add(new UIForegroundPayload(0)); + isNameChanged = true; + } + + if (jobTag.IsTextColorAppliedToNameplateTitle.InheritedValue != null && jobTag.IsTextColorAppliedToNameplateTitle.InheritedValue.Value) + { + title.Payloads.Insert(0, (new UIForegroundPayload(jobTag.TextColor.InheritedValue.Value))); + title.Payloads.Add(new UIForegroundPayload(0)); + isTitleChanged = true; + } + + if (jobTag.IsTextColorAppliedToNameplateFreeCompany.InheritedValue != null && jobTag.IsTextColorAppliedToNameplateFreeCompany.InheritedValue.Value) + { + freeCompany.Payloads.Insert(0, (new UIForegroundPayload(jobTag.TextColor.InheritedValue.Value))); + freeCompany.Payloads.Add(new UIForegroundPayload(0)); + isFreeCompanyChanged = true; + } + } + } + } + } + + foreach (var customTag in m_PluginData.CustomTags) + { + if (customTag.CanAddToIdentity(new Identity(gameObject.Name.TextValue))) + { + if (IsTagVisible(customTag, gameObject)) + { + if (customTag.TextColor.InheritedValue != null) + { + if (customTag.IsTextColorAppliedToNameplateName.InheritedValue != null && customTag.IsTextColorAppliedToNameplateName.InheritedValue.Value) + { + name.Payloads.Insert(0, (new UIForegroundPayload(customTag.TextColor.InheritedValue.Value))); + name.Payloads.Add(new UIForegroundPayload(0)); + isNameChanged = true; + } + + if (customTag.IsTextColorAppliedToNameplateTitle.InheritedValue != null && customTag.IsTextColorAppliedToNameplateTitle.InheritedValue.Value) + { + title.Payloads.Insert(0, (new UIForegroundPayload(customTag.TextColor.InheritedValue.Value))); + title.Payloads.Add(new UIForegroundPayload(0)); + isTitleChanged = true; + } + + if (customTag.IsTextColorAppliedToNameplateFreeCompany.InheritedValue != null && customTag.IsTextColorAppliedToNameplateFreeCompany.InheritedValue.Value) + { + freeCompany.Payloads.Insert(0, (new UIForegroundPayload(customTag.TextColor.InheritedValue.Value))); + freeCompany.Payloads.Add(new UIForegroundPayload(0)); + isFreeCompanyChanged = true; + } + } + } + } + } } } } diff --git a/PlayerTags/Features/TagTargetFeature.cs b/PlayerTags/Features/TagTargetFeature.cs index f15608e..f6833c2 100644 --- a/PlayerTags/Features/TagTargetFeature.cs +++ b/PlayerTags/Features/TagTargetFeature.cs @@ -17,13 +17,10 @@ namespace PlayerTags.Features { public abstract class TagTargetFeature : IDisposable { - private PluginConfiguration m_PluginConfiguration; - private ActivityContext m_CurrentActivityContext; - public TagTargetFeature(PluginConfiguration pluginConfiguration) + public TagTargetFeature() { - m_PluginConfiguration = pluginConfiguration; m_CurrentActivityContext = ActivityContext.None; @@ -61,13 +58,7 @@ namespace PlayerTags.Features } } - /// - /// Gets the payloads for the given game object tag. If the payloads don't yet exist then they will be created. - /// - /// The game object to get payloads for. - /// The tag config to get payloads for. - /// A list of payloads for the given tag. - protected IEnumerable GetPayloads(GameObject gameObject, Tag tag) + protected bool IsTagVisible(Tag tag, GameObject? gameObject) { bool isVisibleForActivity = ActivityContextHelper.GetIsVisible(m_CurrentActivityContext, tag.IsVisibleInPveDuties.InheritedValue ?? false, @@ -76,7 +67,7 @@ namespace PlayerTags.Features if (!isVisibleForActivity) { - return Enumerable.Empty(); + return false; } if (gameObject is PlayerCharacter playerCharacter) @@ -91,14 +82,30 @@ namespace PlayerTags.Features if (!isVisibleForPlayer) { - return Enumerable.Empty(); + return false; } } - return CreatePayloads(gameObject, tag); + return true; } - private Payload[] CreatePayloads(GameObject gameObject, Tag tag) + /// + /// Gets the payloads for the given game object tag. If the payloads don't yet exist then they will be created. + /// + /// The game object to get payloads for. + /// The tag config to get payloads for. + /// A list of payloads for the given tag. + protected IEnumerable GetPayloads(Tag tag, GameObject? gameObject) + { + if (!IsTagVisible(tag, gameObject)) + { + return Enumerable.Empty(); + } + + return CreatePayloads(tag); + } + + private Payload[] CreatePayloads(Tag tag) { List newPayloads = new List(); diff --git a/PlayerTags/PlayerTags.csproj b/PlayerTags/PlayerTags.csproj index bb02413..b0c9d74 100644 --- a/PlayerTags/PlayerTags.csproj +++ b/PlayerTags/PlayerTags.csproj @@ -1,7 +1,7 @@  r00telement - 1.1.3.0 + 1.1.4.0 diff --git a/PlayerTags/RandomNameGenerator.cs b/PlayerTags/RandomNameGenerator.cs index 1dd7423..1d32a3f 100644 --- a/PlayerTags/RandomNameGenerator.cs +++ b/PlayerTags/RandomNameGenerator.cs @@ -1,6 +1,5 @@ using Dalamud.Logging; using System; -using System.Collections.Generic; using System.Globalization; using System.IO; using System.Reflection; diff --git a/PlayerTags/Resources/Promo/PatchNote_1.png b/PlayerTags/Resources/Promo/PatchNote_1.png new file mode 100644 index 0000000..7afa70b Binary files /dev/null and b/PlayerTags/Resources/Promo/PatchNote_1.png differ diff --git a/PlayerTags/Resources/Promo/PatchNote_2.png b/PlayerTags/Resources/Promo/PatchNote_2.png new file mode 100644 index 0000000..0046bfa Binary files /dev/null and b/PlayerTags/Resources/Promo/PatchNote_2.png differ diff --git a/PlayerTags/Resources/Strings.Designer.cs b/PlayerTags/Resources/Strings.Designer.cs index 9d50aa4..74c5e37 100644 --- a/PlayerTags/Resources/Strings.Designer.cs +++ b/PlayerTags/Resources/Strings.Designer.cs @@ -411,6 +411,78 @@ namespace PlayerTags.Resources { } } + /// + /// Looks up a localized string similar to Apply color to chat name. + /// + public static string Loc_IsTextColorAppliedToChatName { + get { + return ResourceManager.GetString("Loc_IsTextColorAppliedToChatName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Whether the color will be applied to the name in chat.. + /// + public static string Loc_IsTextColorAppliedToChatName_Description { + get { + return ResourceManager.GetString("Loc_IsTextColorAppliedToChatName_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Apply color to nameplate free company. + /// + public static string Loc_IsTextColorAppliedToNameplateFreeCompany { + get { + return ResourceManager.GetString("Loc_IsTextColorAppliedToNameplateFreeCompany", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Whether the color will be applied to the free company in nameplates.. + /// + public static string Loc_IsTextColorAppliedToNameplateFreeCompany_Description { + get { + return ResourceManager.GetString("Loc_IsTextColorAppliedToNameplateFreeCompany_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Apply color to nameplate name. + /// + public static string Loc_IsTextColorAppliedToNameplateName { + get { + return ResourceManager.GetString("Loc_IsTextColorAppliedToNameplateName", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Whether the color will be applied to the name in nameplates.. + /// + public static string Loc_IsTextColorAppliedToNameplateName_Description { + get { + return ResourceManager.GetString("Loc_IsTextColorAppliedToNameplateName_Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Apply color to nameplate title. + /// + public static string Loc_IsTextColorAppliedToNameplateTitle { + get { + return ResourceManager.GetString("Loc_IsTextColorAppliedToNameplateTitle", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Whether the color will be applied to title in nameplates.. + /// + public static string Loc_IsTextColorAppliedToNameplateTitle_Description { + get { + return ResourceManager.GetString("Loc_IsTextColorAppliedToNameplateTitle_Description", resourceCulture); + } + } + /// /// Looks up a localized string similar to Italic. /// diff --git a/PlayerTags/Resources/Strings.resx b/PlayerTags/Resources/Strings.resx index 7a0aacf..02510cc 100644 --- a/PlayerTags/Resources/Strings.resx +++ b/PlayerTags/Resources/Strings.resx @@ -531,4 +531,32 @@ Show others in the players list. + + + Apply color to chat name + + + Whether the color will be applied to the name in chat. + + + + Apply color to nameplate name + + + Whether the color will be applied to the name in nameplates. + + + + Apply color to nameplate title + + + Whether the color will be applied to title in nameplates. + + + + Apply color to nameplate free company + + + Whether the color will be applied to the free company in nameplates. + \ No newline at end of file diff --git a/PlayerTags/Resources/Words/Adjectives.txt b/PlayerTags/Resources/Words/Adjectives.txt index 2956bb3..1c59c00 100644 --- a/PlayerTags/Resources/Words/Adjectives.txt +++ b/PlayerTags/Resources/Words/Adjectives.txt @@ -13,8 +13,10 @@ abysmal academic acceptable accessible +accomplished accurate accused +ace acidic acoustic acrobatic @@ -35,6 +37,7 @@ aerobic aerodynamic affectionate afflicted +affluent affordable afraid after @@ -51,8 +54,8 @@ aimless airborne airtight airy -alert algorithmic +alien alive alleged allied @@ -71,6 +74,7 @@ ambitious amusing anaemic anal +analogue ancestral ancient androgenous @@ -97,8 +101,10 @@ applicable appreciative apprehensive appropriate +apt arcane archaic +ardent argumentative arid aristocratic @@ -106,6 +112,8 @@ armed armless aromatic arrogant +artful +artisan artistic arty ascendant @@ -126,6 +134,7 @@ athletic atmospheric atomic atrocious +attached attentive attractive augmented @@ -151,15 +160,16 @@ banal barbaric bare barren +basement bashful basic batty +beastly beaten beautiful becoming bedridden beefy -beginning behavioral belated beloved @@ -182,6 +192,7 @@ bigoted binary biological bionic +bipartisan birdbrained bisexual bitter @@ -215,13 +226,13 @@ bony bored boring born -both bothersome bottom bouncy boundless boyish braided +braindead brainy brash bratty @@ -260,7 +271,6 @@ buttery caffeinated calm calorific -camouflage cancerous candid candied @@ -276,6 +286,7 @@ carefree careful careless caring +casual catastrophic catchy categorical @@ -294,14 +305,13 @@ certain certified chalky challenging -chance changeable chaotic -character characteristic characterless chargeable charismatic +charmed charming charred chatty @@ -324,7 +334,6 @@ chilled chilly chiselled chocolatey -choice choosey choppy chorded @@ -340,7 +349,6 @@ citric civil civilized claimable -classic classical classified classless @@ -356,6 +364,7 @@ clinical close cloudy clueless +clumsy cluttered coarse coastal @@ -368,9 +377,12 @@ cold collaborative collapsible collectable +colloquial colonial colorful +colorless colossal +comatose combative combustible comely @@ -394,6 +406,7 @@ complete complex compliant complicated +composite comprehensive compulsive compulsory @@ -415,6 +428,7 @@ confirmatory confounded confused connect +connected conscious consecutive consensual @@ -430,6 +444,7 @@ consumable contagious containable contaminated +contemptible content contentious contestable @@ -454,13 +469,14 @@ convincing cookable cool cooperative -corelative corner +corny coronary correct correctable correctional corrective +correlative corrosive corrupt corruptible @@ -484,6 +500,7 @@ creepy criminal cringeworthy critical +crowded crude crumbly crushing @@ -493,6 +510,7 @@ cuddly culinary cultish cultural +cultured cumbersome cumulative cunning @@ -509,6 +527,7 @@ cyberpunk cynical cystic daft +daily dainty damaged damaging @@ -519,7 +538,6 @@ daring dark dashing dastardly -daughter daughterly daydreamy dazzling @@ -541,6 +559,7 @@ decrepit dedicated deductible deep +defamatory defeated defective defenceless @@ -552,6 +571,7 @@ definite definitive deflated deformed +deft defunct degenerative degraded @@ -577,19 +597,20 @@ dependent depictive deportable depraved +depressed depressing -depressive deprived derelict derivable +derived derogatory descendible descriptive deserted deserving -designer desirable desired +desolate desperate despicable despisable @@ -627,6 +648,7 @@ direct dirty disabled disadvantaged +disadvantageous disagreeable disappointed disappointing @@ -634,6 +656,8 @@ disastrous discernible disciplinary discolored +disconnected +discouraged discreet discriminatory discussable @@ -649,6 +673,7 @@ dishonorable disillusioned disingenuous disinterested +disjointed dislikeable disloyal dismal @@ -656,9 +681,9 @@ dismissible dismissive disobedient disorganized +disparate displeased displeasing -displeasing disposable disproportional disprovable @@ -687,6 +712,7 @@ disturbed disturbing divergent diverse +diversified divine dizzy docile @@ -710,7 +736,6 @@ dramatic drastic dreadful dreamy -dress drinkable dripping droopy @@ -719,6 +744,7 @@ drunken dry dubious due +dull dumb durable dusty @@ -731,6 +757,7 @@ dysfunctional dystopian each eager +early earnest earthy eastern @@ -766,8 +793,10 @@ elevated eligible eliminable elite +elongated eloquent elusive +elven embarrassed embedded embracive @@ -775,10 +804,11 @@ emergency emotional emotionless emotive -emotive empathetic empty +enamored enchanted +encouraging endagered endangered endless @@ -793,6 +823,7 @@ enough enraged enslaved enthusiastic +enticing entire entitled environmental @@ -805,14 +836,17 @@ erectable erectile ergonomic erosive +erotic escapable esoteric essential established +esteemed eternal ethereal ethical ethnic +euphoric evadable evasive even @@ -870,7 +904,6 @@ express expressible exquisite extended -extended extendible extensible exterior @@ -880,6 +913,7 @@ extinct extinguishable extra extraordinary +extravagant extreme extroverted exuberant @@ -889,6 +923,7 @@ fabulous facial faded failed +failing faint fair faithful @@ -896,6 +931,7 @@ faithless fake false falsifiable +famed familiar famished famous @@ -911,13 +947,14 @@ fatal fatherly fathomable faulty +favorable +favored favorite fearless fearsome feasible federal feeble -feeling feisty fellow female @@ -925,6 +962,8 @@ feminine feral ferocious fertile +fervent +fervid festive fibrous fickle @@ -936,6 +975,7 @@ fiery fightable figurable fillable +filled filmable filthy final @@ -946,6 +986,7 @@ firebreathing fireproof firm first +fiscal fishy fit fizzy @@ -964,6 +1005,7 @@ flavorless flavorsome flawless fleeting +fleshly fleshy flexible flighty @@ -985,6 +1027,7 @@ fluid fluorescent flying foggy +fond foolish forbidden foreign @@ -1003,6 +1046,7 @@ forthcoming fortified fortunate forward +foul foulmouthed foxy fragile @@ -1059,6 +1103,7 @@ gainable gallant gangrenous gargantuan +garlicy garnishable gaseous gassy @@ -1125,6 +1170,8 @@ grandiose graphic grassy grateful +gratified +gratifying grave gray greased @@ -1155,6 +1202,7 @@ gullible gummy gushy gutsy +habitable habitual hairsplitting hairy @@ -1173,6 +1221,7 @@ happy hard harmful harmless +harmonic harsh hasty hated @@ -1181,13 +1230,13 @@ haughty haunted hazardous hazy -head headless headstrong healthy heartbreaking heartbroken heartless +hearty heated heavenly heavy @@ -1196,6 +1245,7 @@ heinous helpful helpless herbal +herby heroic hesitant hidden @@ -1212,6 +1262,7 @@ hollow holographic holy homeless +homely homemade homesick homicidal @@ -1220,9 +1271,12 @@ homosexual honest honorable honorary +honored hopeful +hopeless horizontal hormonal +horny horrendous horrible horrid @@ -1233,7 +1287,6 @@ horror hostile hot hotheaded -hour huge human humane @@ -1246,7 +1299,6 @@ hurried hurtful hydrated hygienic -hygienic hyperactive hyperbolic hypnotic @@ -1273,6 +1325,7 @@ illiterate illogical illtempered illustrious +imaginary imaginative immaculate immature @@ -1284,9 +1337,11 @@ immoral immortal immovable immune +impassioned impatient impeccable impending +imperfect imperialistic impertinent impolite @@ -1294,6 +1349,7 @@ important impossible impotent impoverished +impractical imprecise impressed impressive @@ -1303,6 +1359,7 @@ improved improvised impudent impulsive +impure inaccurate inadequate inadvertent @@ -1311,10 +1368,11 @@ inappropriate inartistic inattentive inbred +incapable incendiary incensed incestuous -incident +incidental incoherent incompatible incompetent @@ -1323,6 +1381,7 @@ incomprehensible inconclusive inconsequential inconsiderate +inconsistent inconspicuous inconvenient incorporated @@ -1348,6 +1407,7 @@ inedible ineffective inefficient inept +inert inevitable inexpensive inexperienced @@ -1362,9 +1422,11 @@ inflammable inflatable influential informal +infrequent ingenious ingenuous inglorious +inhabited inherent inherited inhuman @@ -1428,6 +1490,7 @@ invisible involuntary involved invulnerable +irksome ironic irrational irregular @@ -1437,6 +1500,7 @@ irresponsible irreversible irritable irritated +isolated itchy jagged jealous @@ -1444,9 +1508,12 @@ jellied jobless joint jolly +jovial +joyful joyous judgmental juicy +jumbled junior juvenile kamikaze @@ -1455,6 +1522,7 @@ keen kind kinetic kingly +kinky kitchen knitted knotted @@ -1464,17 +1532,20 @@ known knuckleheaded laborious lace +lacking lacklustre ladylike lagging lame large last +lasting late latter laughable lawful lawless +lax lazy leading leafy @@ -1482,12 +1553,14 @@ learned least leather leathery +lecherous leery left legal legendary legible legislative +legitimate leisurable leisureless lengthy @@ -1495,6 +1568,7 @@ lesbian less lethal lethargic +lewd lexical liable liberal @@ -1502,6 +1576,7 @@ liberated liberating lifeless light +lighthearted lightweight likable likely @@ -1551,6 +1626,7 @@ lunar luscious lush lustered +lustful lustrous luxurious mad @@ -1576,20 +1652,22 @@ manly marginal marital marked +marketable married marvellous +marvelous masculine masochistic massive master masterful -material maternal mathematical matriarchal matricidal matrimonial mature +maximal maximum meager meagre @@ -1603,6 +1681,7 @@ mechanical medical medicinal medicore +mediocre medium mega megalomaniacal @@ -1611,6 +1690,7 @@ mellow melodic melodramatic melting +memorable menial menstrual mental @@ -1633,10 +1713,10 @@ mindless mini miniature minimal -minimum minor miraculous misandrous +misborn miscellaneous mischievous miserable @@ -1644,15 +1724,16 @@ misleading misogynistic misogynous missing -mission mistrustful misty misunderstood +mixed mobile moderate modern modest moist +molecular monetary monogamous monotonous @@ -1663,10 +1744,11 @@ moral morbid moreish moronic +mosaic mossy motherly motionless -motor +motorized mountable mountain mountainous @@ -1682,6 +1764,7 @@ murderous murky mushy musical +musky mutated mutual muzzled @@ -1707,6 +1790,8 @@ necessary needless needy negative +neglected +neglectful negligent neither nerdy @@ -1717,10 +1802,13 @@ neutralizing new next nice +nifty nightmarish nihilistic nimble +noble nocturnal +noisy nominal nonchalant nonessential @@ -1731,6 +1819,7 @@ normal northern nosy notable +noted noteworthy notorious novel @@ -1745,7 +1834,6 @@ nutritious nylon obedient obese -objective oblivious obnoxious obscene @@ -1755,7 +1843,6 @@ obsessive obsidian obsolete obtuse -obtuse obvious occasional occupational @@ -1764,6 +1851,7 @@ odd odourless offbeat offended +offending offensive official oiled @@ -1781,10 +1869,11 @@ ongoing only oozy open -opening operable operational opinionated +opportune +opposed opposite oppressed oppressive @@ -1813,24 +1902,28 @@ outraged outrageous outside outstanding -over overall +overcharged overconfident overcooked +overdue overjoyed overpriced overrated overseas +overused overwhelming overzealous own oxymoronic pacified pacifist +paid painful painstaking painted pale +paltry panicky papery parallel @@ -1840,10 +1933,10 @@ paralyzing paranoid paranormal parasitic -parking partial particular -party +partisan +passable passionate passive past @@ -1864,7 +1957,6 @@ penal peppery perfect perilous -period permanent perpendicular perpetual @@ -1893,7 +1985,6 @@ picturesque piercing pitiful plain -plane planetary plastic platonic @@ -1904,7 +1995,7 @@ pleasant pleased pleasing pleasurable -plenty +plebeian plump plus poetic @@ -1917,6 +2008,8 @@ polluted pompous poor popular +populated +populous portable portrayable posh @@ -1951,6 +2044,7 @@ presumptuous pretend pretentious pretty +prevalent previous priceless pricey @@ -1966,7 +2060,6 @@ pristine private privatized privileged -prize probable problematic productive @@ -1975,12 +2068,10 @@ proficient profitable profound progressive -progressive prolific promethean prominent promising -proof proper proportional proposed @@ -1999,6 +2090,7 @@ pubic public publicized punctual +pungent puny pure purple @@ -2017,11 +2109,14 @@ radical radioactive ragged rainy +rambling +rancid random rapid rare rash rational +raunchy raw readied ready @@ -2054,6 +2149,7 @@ redeemable reduced redundant refillable +refined reflective reflexive reformable @@ -2094,6 +2190,7 @@ reliable reliant relievable relieved +relinquished relishable reluctant remaining @@ -2113,11 +2210,11 @@ repairable repayable repealable repeatable -reponsible +repetitious reportable +reported reprehensible representational -representative repressed repressible repressive @@ -2157,6 +2254,7 @@ retail retaliatory retired retiring +retold retouchable retrievable returnable @@ -2192,11 +2290,13 @@ roguish rollable romantic roomy +rosy rotatable rotten rotund rough round +roundabout rounded routine rowable @@ -2217,7 +2317,6 @@ sacrilegious sad saddened saddening -sadist sadistic safe saintly @@ -2234,14 +2333,15 @@ satiated satirical satisfactory satisfied +saturated savage -savings savoury savvy scabby scaled scaly scandalous +scarce scared scarred scary @@ -2249,7 +2349,6 @@ scathing scatterbrained scattered scholarly -scientifc scientific scratchy scrawny @@ -2257,7 +2356,6 @@ screaming scrummy scrumptious scummy -sea seaborne seafaring seagoing @@ -2271,7 +2369,9 @@ secret secretive secular secure +seductive seedy +segmented segregated seismic select @@ -2291,6 +2391,7 @@ sentient sentimental separate septic +sequential serene serious several @@ -2322,17 +2423,14 @@ shocked shoddy short shortsighted -shot shrewd shrinkable shy -sibling sick sickening sickly sightless sightly -signal significant silent silly @@ -2351,8 +2449,8 @@ skeletal skeptical sketched sketchy -skilful skilled +skillful skimpy skinny skipping @@ -2414,6 +2512,7 @@ soluble sonic sophisticated soppy +sorrowful sorrowless sorry soulful @@ -2421,6 +2520,7 @@ soulless sour southern spacious +spaghettified spare sparkling sparse @@ -2456,9 +2556,9 @@ sporty spotless spotted spotty +spurious square squeamish -squirrelish squirrelly squishy stable @@ -2466,13 +2566,12 @@ stagnant stale stampable standard -standardisable starry starved starving +stately static statistical -status statutory steadfast stealthy @@ -2480,6 +2579,7 @@ steamy steep stellar stereotyped +stereotypical sterile sterilized sticky @@ -2488,6 +2588,7 @@ stimulated stimulating stingy stinky +stodgy stoic stolen stoned @@ -2500,7 +2601,6 @@ strained strange strategic streaky -street streetsmart strengthened strenuous @@ -2516,12 +2616,14 @@ stripy strong stubborn stuffed +stuffy stumpy stupendous stupid stylish suave subatomic +subconscious subcultural subdued subjective @@ -2540,8 +2642,10 @@ succulent sudden sufficient sugary +suggestive suicidal suitable +sunless sunlit super superb @@ -2569,7 +2673,6 @@ sweaty sweet sweltering swift -swimming swirly symbiotic symbolic @@ -2633,13 +2736,14 @@ thorny thorough thoughtful thoughtless +threadbare threatening thriving tidal tight timeless timely -timely +timeworn timid tinned tinted @@ -2648,6 +2752,7 @@ tippable tired tireless tiresome +tiring tolerant top total @@ -2658,7 +2763,6 @@ towering toxic traditional tragic -training traitorous tranquil transcendent @@ -2677,6 +2781,8 @@ trick tricksy tricky trifling +trippy +trite triumphant trivial trophied @@ -2718,6 +2824,7 @@ unbeaten unbecoming unbelievable unbiased +unbroken uncanny uncertain unchanged @@ -2729,8 +2836,10 @@ uncommon unconscious unconstitutional uncontrollable +unconventional uncooked uncooperative +uncouth uncovered uncreative uncultured @@ -2755,7 +2864,9 @@ understood underweight undesirable undesired +undignified undiplomatic +undistinguished undramatic undrinkable uneasy @@ -2763,17 +2874,23 @@ uneconomic uneconomical uneducated unemployed +unending +unenjoyable unequal unethical +unexcited +unexciting unexpected unexplained unfair unfaithful +unfamiliar unfavorable unfit unforgivable unfortunate unfriended +unfriendly unhappy unhealthy unhelpful @@ -2781,15 +2898,21 @@ unholy unhygienic unidentifiable unidentified +uniform unimaginable unimaginative unimportant +unimpressive uninformed +uninhabitable +uninhabited uninspirable uninspired uninspiring uninsured +unintelligent uninterested +uninteresting unique unisex united @@ -2812,6 +2935,8 @@ unnecessary unneeded unnoticeable unnoticed +unoriginal +unorthodox unpaid unparalleled unplayable @@ -2819,6 +2944,7 @@ unpleasant unpleasurable unpopular unpredictable +unprofitable unpurified unqualified unread @@ -2842,6 +2968,7 @@ unshakable unshaken unsightly unsinkable +unskilled unsophisticated unspecific unspecified @@ -2864,6 +2991,7 @@ untiring untouchable untrusting unusual +unvaried unverifiable unverified unwanted @@ -2906,7 +3034,6 @@ varied various vast vegan -vegetable vegetarian vegetative veiny @@ -2982,6 +3109,7 @@ wheezy whimsical white whole +wholesale wholesome wicked wide @@ -2993,11 +3121,9 @@ wilful willing wily windy -wine winged wingless winning -winter wintry wired wise @@ -3020,7 +3146,6 @@ worrisome worrying worse worst -worth worthless worthwhile worthy @@ -3039,4 +3164,4 @@ younger youthful yummy zealous -zombified \ No newline at end of file +zombified diff --git a/PlayerTags/Resources/Words/Nouns.txt b/PlayerTags/Resources/Words/Nouns.txt index 94b8420..e9ddc26 100644 --- a/PlayerTags/Resources/Words/Nouns.txt +++ b/PlayerTags/Resources/Words/Nouns.txt @@ -2,15 +2,29 @@ abdomen ability abolition abortion +absence +absentee absolution +absorption +abundance abuse +accent access +accessory accident +acclaim +accolade accommodation +accomplice +accomplishment +accord account accountant +accusation +achievement acid acknowledgment +acquaintance acquisition act action @@ -25,16 +39,28 @@ address adhesive adjustment administration +administrator +admission +adoption +adoration adrenaline adult adulthood +advance advancement advantage adventure +adversary advertisement advertising advice +advocate affair +affection +affiliate +affiliation +affinity +affirmation aftermath afternoon aftershave @@ -45,8 +71,10 @@ agency agenda agent aggression +aggressor agreement aid +aide air airbag airforce @@ -58,11 +86,20 @@ alcohol alcove alert alien +alimony alley +alliance +allocation +allotment +allowance alloy +ally alternative altitude +amateur ambassador +ambiance +ambience ambition ambulance amendment @@ -73,23 +110,31 @@ amusement analysis analyst anatomy +ancestry anecdote anger angle anguish animal +animation anime ankle anklet -annual +annex +announcement annulment answer +antagonism +antagonist +anthem +anticlimax antidote antihero antler anus anxiety apartment +apathy ape apex aphrodisiac @@ -98,6 +143,7 @@ apparatus apparel appeal appearance +appeasement appendage appendix applause @@ -105,8 +151,16 @@ apple appliance application appointment +appraisal +appraiser +appreciation +apprehension +apprentice +appropriation approval +arachnid arbiter +arbitration archer architect architecture @@ -116,49 +170,78 @@ arithmetic arm armor army +arrangement +array arrival arrow art article +articulation artisan +artist +ascendancy ashtray +asker aspect +aspirant ass +assassin +assaulter +assent +assertion assessment +asset assignment assistance assistant associate association assumption +asteroid +astronaut astronomy athlete atmosphere +atrocity +atrophy attachment attack +attacker attempt attendant attention +attentiveness attic attitude attorney attraction +attribution audience audio +audit +auditor +aunt +aura author authoritarian authority authorization +autobiography automaton avalanche award awareness +awe +babble baboon baby backdrop +backer background +backlash backpack backside +bacon badge badger bafflement @@ -173,10 +256,13 @@ balance balcony ball ballet +ballgame balloon +ballot banana band bandana +bandit bangle banjo bank @@ -184,7 +270,9 @@ banker banter bar barbeque +bargain barn +barricade base baseball basement @@ -198,6 +286,7 @@ bathroom bathtub battery battle +battler battleship beach beam @@ -211,11 +300,13 @@ beat beauty beaver bed +bedrock bedroom bee beef beer beetle +beggar beginner beginning behavior @@ -232,11 +323,13 @@ benefit berry bestseller bet +betrayer beverage beyond bibliography bicycle bid +bidding bidet bike bikini @@ -246,27 +339,33 @@ bin binary binge bingo +biography biology +biopsy bird birth birthday bit +bitch bite bladder blade blame blanket blaster +blessing blight -blind +bliss blister blizzard block +blockade +blockage blood blossom blouse blow -blue +blurb board boat body @@ -274,6 +373,7 @@ bog boiler bomb bomber +bond bone bong bongo @@ -281,15 +381,17 @@ bonus book bookcase booklet +boon booster boot +booth booze border boss bother bottle -bottom boulder +bounty bowel bowl box @@ -301,11 +403,14 @@ brace bracelet bracket brain +brainchild +brainwork brake branch brand brandy brawl +brawler breach bread breadcrumb @@ -315,12 +420,15 @@ breakpoint breast breastplate breath +breed breeze +bribe bribery brick +bride bridge -brief brigade +brilliance brink broccoli brochure @@ -333,12 +441,18 @@ buddy budget buffet bug +builder building +bulge bulldozer bullet +bully +bum +bump bumper bunch bungalow +bureau burger burglar burn @@ -346,7 +460,9 @@ bus bush business butcher +butt butter +buttocks button buy buyer @@ -354,14 +470,19 @@ cabbage cabin cabinet cable +cactus +cadence cadet cafe +cage cake calculation calculator calendar +caliber call camera +camouflage camp campaign cancel @@ -369,11 +490,14 @@ cancer candidate candle candy +canine cannibal +cannibalism cannon canteen canvas cap +capacity cape capital captain @@ -383,8 +507,11 @@ caravan card care career +carelessness +caress cargo carnage +carnival carpenter carpet carriage @@ -392,12 +519,14 @@ carrier carrot carry cart +cartel cartoon cartridge case cash cashier casserole +castaway castle cat catacomb @@ -409,12 +538,17 @@ cattle cause caution cave +cavern +cavity ceiling celebration cell cellar cemetery +censorship center +ceremony +certainty certification cesspool chain @@ -422,6 +556,8 @@ chair chairman chalice challenge +challenger +chamber champion championship chance @@ -434,8 +570,14 @@ character charge charity chart +charter +chat +chatter check +checker +checkup cheek +cheer cheese chef chemical @@ -444,140 +586,212 @@ chest chicken child childhood +chimera chimp chin -chin chip chocolate chode choice +chore christening +chronicle +chum +chunk church cigarette cinema +circle circuit circulation circumference +circumstance +circus +citation citizenship city civility civilization claim +clan clap class classic +classification classroom +clause cleaner +clearance cleavage cleric clerk +cleverness click client cliff +cliffhanger climate climax +clique clock +cloister closet +closure cloth clothes clothing cloud +clout +clown club +clubber clue +cluster coach coast coat +coating cock code coffee coffin +cognition +cohort coil -cold +collaborator collar colleague collection college colony +color column +columnist comb combat +combatant combination combine +comeback +comedian comedy comet comfort -comfortable comic command +commemoration +commencement +commendation comment +commentary commerce -commercial commission +commitment committee commotion communication communist community +companion +companionship company comparison compartment compassion +compatibility +compensation competition competitor +complainer complaint -complex +completion +compliance compliment component composer composition compost +compound comprehension +compromise compulsion computer comrade +concealment +conceit +concentration concept +conception concern concert +concession conclusion concoction +condemnation condition +conduct conductor confectionery conference +confession +confidante confidence confirmation conflict +conformity confusion connection +connotation +conqueror +consciousness +consent consequence consideration consist +consistency console -constant constellation +constitution construction +constructor contact +contemplation +contender content +contentment contest +contestant +contester context continent +contingency +continuation contraceptive contract contraction +contractor +contradiction contraption contribution control controversy +convention conversation convert +conviction cook cookie cooking +cooler +cooperation +cooperator copy copyright corner corporation corpse +correlation +correspondence correspondent corridor corruption @@ -589,6 +803,9 @@ cougar council councilor counter +counteraction +counterbalance +counterclaim counterpart country county @@ -597,48 +814,68 @@ courage course court cousin +covenant cover cow crack cracker cradle craft +craftsman +craftsmanship cramp crap crash crate crayon -crazy cream creation -creative +creativity creator +credentials credit +creek crescendo +crevice crew crib crime criminal +crisis criteria criticism +crony cross +crossbreed +crossroad crotch crowd crown crumb +crusade +crush +crypt cube +cubicle cucumber cuddle +cull +culmination +culprit +cultivation culture cup cupboard cupcake +curiosity currency curse cursor curtain curve cushion +cusp +custom customer cut cycle @@ -651,12 +888,12 @@ dancer dandruff danger dare -dark dashboard data database date daughter +dawdler day deadline deal @@ -664,53 +901,92 @@ dealer death debate debt +debtor +decency decision +declaration declination decongestant +decoration +decorum +decrease decryption dedication +deed +defamation +defamer +defeat +defender defense deficit +defilement +defiler definition deformation degree delay +delegation +delicacy +delinquent +deliverable deliverance delivery demand +demeanor democracy demon +demonstration +den +denial +denomination dentist +denunciation deodorant department departure -dependent +dependency deployment deposit +depot +depreciation depression depth +depths +descendent deputy +derivative +descent description desert design +designation designer desire desk dessert +destination destiny destroyer destruction +detachment detail detainment detective detention determination +deterrent +detour +detractor developer development deviance device devil +dexterity +diagnosis +dialect diamond +diary dictionary diet difference @@ -718,6 +994,8 @@ difficulty digestion digger dignity +dilemma +diligence dimension diner dinner @@ -728,37 +1006,67 @@ dirt disability disadvantage disagreement +disappearance disapproval +disapprover disarmament +disassociation disaster +disbelief +discernment discipline +disclosure disco disconnection +discontent +discord discount +discouragement +discourse discovery +discredit discrepancy +discretion discrimination discussion +disdain disease disengagement disguise disgust dish +disharmony +dishonor disk +dislike +dismay +disobedience disorder +disparagement +disparager dispenser display -dispenser +displeasure disposer dispute +disputer +disregard +disrespect disruption +dissatisfaction +dissent distance +distinction +distraction distribution distributor district distrust disturbance +divergence +diversion divide +dividend divider divinity division @@ -768,6 +1076,8 @@ doctor document dog dolphin +domain +donation donkey door dot @@ -782,9 +1092,11 @@ drama draw drawer drawing +dread dream dress dresser +drifter drill drink drive @@ -799,29 +1111,38 @@ drum drummer drunk duckling +duelist dumbass +dummy dump dungeon dungeoneer +duplicate dust duty dwarf +dweller ear +earnings earplug earring earth earthquake +ease eat eavesdropper +echo eclipse economics economy +ecstacy edge editor editorial education effect efficiency +effigy effort egg ejection @@ -830,9 +1151,12 @@ elder election element elephant +elevation elevator +elf elixir elongation +eloquence embezzlement emergence emergency @@ -843,10 +1167,17 @@ employee employer employment empowerment +emulator emulsion encirclement encounter +encouragement +encourager end +endeavor +ending +endorser +endowment enema enemy energy @@ -858,10 +1189,15 @@ enigma enjoyment enquiry entanglement +enterprise +entertainer entertainment enthusiasm entity +entourage +entrails entrance +entrant entry environment envy @@ -869,27 +1205,40 @@ epitome equipment equivalent erection +erector error eruption escape +escort essay +essence establishment estate +esteem estimate +estimation estrogen +estuary ethics +etiquette +eulogy euphoria +evader +evaluation evaluator evening event +eventuality eviction evidence evocation evolution +exaggeration exam examination examiner example +excavation exchange excitement exclamation @@ -899,24 +1248,46 @@ executor exercise exertion exhaust +exhibit +exhibition exile existence exit +expanse expansion +expectation experience +experiment +experimentation expert +expertise explanation +exploit +exploitation +exploration explosion +expo +exponent exposition expression +expressivity extension extent +exterior extermination -external -extreme +extortion +extract +extraction +extravagance +extravaganza +extremity eye eyeball eyebrow +fabric +fabrication +fabricator +facade face facelift facility @@ -928,11 +1299,16 @@ failure fairy faith faker +falsifier fame +familiarity +familiarization family fan fang fanny +fantasy +farce farm farmer fart @@ -940,6 +1316,7 @@ father fatigue fault favor +favorite fear feast feather @@ -948,17 +1325,23 @@ feces fee feedback feeling +fellow +fellowship +felon felony female feminist +fence ferry fertilizer +festival fetish fetus feud fiction fidget field +fiend fight fighter figure @@ -967,22 +1350,22 @@ file fill film filth -final finance finger finish fire fireman firewall +fireworks fish fishing fisting -fix flake flame flange flap flash +flattery flatulence flavor fledgling @@ -990,31 +1373,43 @@ flesh flick flight fling +floater flock flood floor +flop flour flow flower flu +fluency fluid flurry flute fly foam focus +foe fold folder +folk +fondness font food foot football +footing force forecast forehead +foreigner forest +forgery +fork form format +formation +formulation fort fortnight fortune @@ -1027,9 +1422,12 @@ fracture fragment fragrance frame +framework +franchise frankenstein fraudster freedom +freeze freezer freighter frenzy @@ -1046,13 +1444,17 @@ fryer fuel fulfillment fumble +fumes fun function +funding funeral +funk fur furnace furniture future +gain gallery gambit game @@ -1069,24 +1471,38 @@ gauge gear gender gene -general +genealogy +generation +generator +genesis genius +genre +gentleman geology geometry +gerbal geyser ghost +ghoul giant +giblet gift gigantism girl girlfriend girth +gladiator gland glass glider +gloom +glorification glove goal +goat +goatee god +godsend gold golf gorilla @@ -1099,24 +1515,35 @@ grain grammar grandfather grandmother +grandparent graph graphic grass grassland +gratefulness gratitude +grave +graveyard +gravy grease -green +greed greenhouse grenade +grifter grill grocery +groom +grope +grotto ground group +grouping growth guarantee guard guardian guerilla +guerrilla guess guest guestbook @@ -1125,6 +1552,7 @@ guide guilt guitar gun +guru gutter guy guzzler @@ -1132,14 +1560,18 @@ gym gymnast gymnastics habit +habitat hair haircut half hall +hallucination +halt hammer hamster hand handicap +handiwork handle hang happiness @@ -1148,11 +1580,14 @@ hardware harlot harm harmony +harness hassle hat hate hatred +hazard head +heading healer health hearing @@ -1167,14 +1602,16 @@ helicopter hell helmet help +helper herb hero +heroine heyday hierarchy -high highlight highway hill +hindrance hire historian history @@ -1182,6 +1619,7 @@ hit hive hobbit hobby +hobo hold hole holiday @@ -1189,8 +1627,11 @@ home homework honesty honey +honor hood hook +hooker +hookup hope horror horse @@ -1201,23 +1642,31 @@ hospitality host hostel hostess +hostility hotel +hound hour house housework housing hovercraft +hub +huddle human humidity humor +hunch hunger hunt hunter +hurdle hurricane hurry husband +hybrid hydrant hyperbole +hypnosis hypothermia ice icebreaker @@ -1225,101 +1674,161 @@ icecream icicle icon idea -ideal idealist +identification +idiom igloo +ignorance +ilk +illusion +illustration image +imagery imagination +imaginativeness +immobility +immorality impact +impairment impeachment +impediment importance +impotence impression imprisonment improvement impudence impulse +inability +inaction +inactivity inbox +incapacity +inception incest incident income +incompatibility +incompetence +inconsistency increase +increment +indecency +indecision independence -independent index indication indifference individual +induction +indulgence industry +ineptitude +inertia +infamy infancy infatuation inflammation inflation influence information +informer +infrastructure infusion ingrate +inheritance +initiation initiative +initiator injection injury injustice ink +inkling +inlet inn +innards innocence input +inquirer inquiry +inquisition +inquisitor inscription insect insemination +insight insolence inspection inspector +inspiration +installation instance +institution instruction instrument instrumentalist instrumentation insulation +insult insurance insurgence intelligence +intensity intention interaction +interest interior interjection -internal -international internet +interpretation interpreter +interrogation +interrogator intervenor intervention interview interviewer intestine +intimacy intrigue +introducer introduction +intuition +invader invention inventor inventory +investigation +investigator investment invite invoice iron island +isolation issue item jacket jail jam jar +jargon jealousy +jester jet jewel job jockey join -joint joke +joker +journal +journalism +journalist journey +journeyman +jouster judge judgment juggernaut @@ -1327,16 +1836,23 @@ juice juicer jump jumper +jungle junk jury justice +justification kamikaze +keenness keep kerfuffle key +keynote kick +kickback kid +kidney killer +kin kind kindness king @@ -1363,6 +1879,7 @@ landscape language lantern lard +lash latency latex laugh @@ -1370,30 +1887,40 @@ laughter laundry lava law +lawbreaker lawn lawsuit lawyer layer +layoff +laziness leader leadership -leading leaf league +lease leash leather lecture leg +legacy legend +legwork leisure +lemming lemon length +lense +leper leprosy lesson +lethargy letter lettuce level lever liar +libel library license lie @@ -1402,9 +1929,12 @@ lift light lighting lightning +likeness limit line +lineage lingerie +lingo linguistics link lion @@ -1418,20 +1948,24 @@ litigation litter liver livestock -living +lizard load loan lobotomy local +locale location lock +locust log logic loneliness lord +loser loss lotion lounge +lounger love loyalty lubricant @@ -1440,11 +1974,16 @@ luggage lunch lung luttuce +luxury machine machinery +machinist magazine magic +magician magnet +magnifier +magnitude maid maiden mail @@ -1453,11 +1992,19 @@ mailman maintenance maker makeup +malevolence mall mallet man management manager +maneuver +manhandling +manhood +manifestation +manipulation +manliness +manner manufacturer map march @@ -1467,33 +2014,45 @@ marketing marksman marriage marsh +marvel mascara mask mass massage master +mastery match mate material mathematics matter mattress +mausoleum +maximum mayor meal meaning +measure measurement meat +mechanic +mechanism medallion media +mediation medicine -medium +meditation meet meeting +melancholy +melodrama melody melon member membership membrane +memoir +memorial memory mention menu @@ -1502,6 +2061,7 @@ mess message metal meteor +meter method microwave midget @@ -1509,12 +2069,13 @@ midnight midwife might military +militia milk +mimic mind minimum minion minister -minor minute miracle mirage @@ -1522,34 +2083,47 @@ mirror misandry miscarriage miscommunication +misconduct +misdeed +misery misfit +misfortune +mishandling misogyny misplacement misreading +misrepresentation miss missile mission mistake misunderstanding +misuse mix mixer mixture moan moat -mobile mode model modem moderator +modulation +module +mold mole +molecule moment monastery money mongrel monitor monkey +monologue +monstrosity month mood +moon morality morning mortgage @@ -1564,52 +2138,73 @@ mouse mousse mouth move +movement mover movie mower mud +mugger mule multimedia murderer muscle museum music +musk mustache mutant myth nail name napkin +narcotic +narrative nation native +nativity nature +navy nazi nebula neck necklace -negative +necropolis +need +neglect +negligence negotiation +neighborhood +nephew nerve net network news newspaper +niece night nightclub +nobility +nod noise +nomination nonbeliever nonconformist nondisclosure nonsense noodle +normality nose +nostalgia note nothing notice notification +notion notoriety nova novel +novice +nucleus nugget number nurse @@ -1626,44 +2221,65 @@ obligation obscurity observation observatory +obstacle +obstruction occasion occupation +occurrence ocean +odor +offender offense offer +offering office officer +offshoot ogre oil +omission onion onslaught opening opera operation +opiate opinion opponent opportunist opportunity +opposer opposite +opposition optimist option +opulence oral orange +oration orchestra order organ organization +organizer orgasm +origin original +originality +origination ornament +oscillation outburst +outcast outcome outfit +outgrowth +outlaw +outpost output -outside +outrage ovary oven -overcharge overclocking overexertion owner @@ -1672,6 +2288,7 @@ pacemaker pack package packet +pact pad paddle page @@ -1682,6 +2299,8 @@ painting paintwork pair pajama +palace +paladin pamphlet pan pancake @@ -1689,43 +2308,58 @@ panda panic pansy panther +panties pantry +pants paper parachute parade +paragraph paramedic parasite parcel parent +pariah park -parking part participant +participation +partisan partner +partnership party passage +passageway passenger passion passport past pasta paste +pastime pastry path patience patient patriot patrol +patron pattern pause pavement pay payment +payoff +payroll peace +peacemaker peak pearl peasant pedal +pedestal +pedigree +peer pen penalty pendant @@ -1736,26 +2370,33 @@ people percentage perception performance +performer perfume period +perk permission permit perpetrator +perseverance person personality perspective +persuasiveness +perversion pervert pessimist pest petal pharmacist phase +phenomenon philosopher philosophy phone photo photographer phrase +phrasing physics pianist piano @@ -1775,6 +2416,7 @@ pioneer pipe piracy pitch +pity pizza place plan @@ -1785,31 +2427,42 @@ plant plantation planter plaster -plastic plate platform player playground +playmate playroom +plea +pleasantry pleasure pleb -plenty +plug +plum plunger poem poet poetry point +pointer +poise poking police policy politics +poll pollution +pooch pool +poorness pop +popper population porn +port portal portfolio +portion position possession possibility @@ -1825,45 +2478,53 @@ potion potty pouch poultry -pound pounder pounding +poverty powder power practice practitioner +praise precedent +precinct +predicament preference +prefix prejudice prelude premeditation +premium preoccupation preparation presence present presentation +preservation president press pressure pressurisation +prestige pretense price pride priest -primary +primate principle print printer -prior priority prison -private privilege prize probation +probe +prober problem procedure process +procreation producer product production @@ -1875,44 +2536,70 @@ profit program programmer progress +progression project proliferation promise +promoter promotion prompt +prong pronunciation proof property +proponent proposal +proposition prosecution +prosecutor prospect +prosperity +prostitution protagonist protection +protector protest protocol +province +provision +provocation +psychiatrist psychology pube puberty -public +publicist publicity publisher +publishing pudding puddle +pulse punch punishment +punk +pup pupil +puppy purchase purpose +pursuit push pusher pyramid +quake quality quantity quarrel quarter queen +query quest question +questioner +questioning +quip +quiz +quota quote rabbit race @@ -1922,6 +2609,7 @@ radio raffle rage raider +rail railway rain rainbow @@ -1929,64 +2617,97 @@ raise randomization range rank +ransom +rant rate +rating ratio +ration +rattle +rave reach reaction reading reality +realization +rear reason +rebel +rebound +rebuttal receipt +receiver reception recipe +reciprocation +recital recognition +recoil +recollection recommendation +recompense +reconciliation record recorder recording recover +recovery recreation -recruit +redemption redesign rediscovery reduction reference +referendum +refinement reflection +reflex refrigerator refund +refusal +regard region register regression regret -regular regulation +reimbursement reject +rejection relation relationship -relative relaxation release +relevance reliability relief religion +remark +remembrance reminder removal rendition +renegade rent repair reparation repellent +repercussion replacement replication reply report +reporter +representation representative +reproduction republic reputation request requirement resale research +researcher reserve resident resistance @@ -1994,30 +2715,49 @@ resolution resolve resort resource +resourcefulness respect response responsibility restaurant +restraint +restriction result +resurgence retailer +retaliation +retort +retreat +retrieval +retriever return reveal revenant revenue review +reviewer +revival revolution +revolutionary reward rhetoric rhyme rhythm rice +riches riddle ride +rift ring rip +ripple risk +ritual +rival +rivalry river road +roadblock roast robe rock @@ -2034,13 +2774,17 @@ rope round route routine +royalty rub ruckus ruin rule rush +saboteur sack saddle +sadist +sadness safe safety sail @@ -2052,8 +2796,11 @@ salesman salt sample samurai +sanction sand sandwich +sardine +sass satellite satire satisfaction @@ -2062,6 +2809,7 @@ sausage save savings savior +scab scale scanner scarf @@ -2073,8 +2821,13 @@ schedule schematic scheme schizophrenic +scholar +scholarship school science +scientist +scolder +scoop score scramble scratch @@ -2085,40 +2838,59 @@ screw screwdriver script scrub +scrutinizer +scrutiny sculpture sea search season +seasoning seat +seating +seclusion second secret secretary +sect section sector security +seditionist seed selection selfie sensation sense +sensibility +sensitivity +sensor sentence +sentiment +separation series servant -serve server service +serviceman +servitude session +set setting +settlement sewer sex shack +shadow +shake shame shape share +sharpness shelter shield shift ship +shipwreck shirt shit shiver @@ -2131,12 +2903,14 @@ shopping shortage shot shoulder -shoulder show shower +shrinkage sibling side +sidekick sigh +sight sign signal signature @@ -2149,8 +2923,8 @@ simulator sin sing singer -single sink +sinner sister site sitting @@ -2163,6 +2937,12 @@ skirt skull sky skyscraper +slam +slander +slanderer +slang +slap +slash slave slayer sleep @@ -2172,13 +2952,17 @@ slime slip slope slum +slur slut smack +smash smasher smell smile smoke +snag snob +snooper snow snowflake snuggle @@ -2189,42 +2973,53 @@ software soil soldier solicitor -solid +solitude solution solvent somersault son song +sorrow +soul soulmate sound soup source space +spaceman +spaghetti spank spark spartan spasm speaker spear -special specialist species +specification spectacle +spectator +speculation speech speed spell spend sperm sphere +spice +spider +spire spirit spite spitroast splash spliff split +sponsor sport spot spotlight +spouse spray spread spring @@ -2237,12 +3032,17 @@ stack stadium staff stage +stagnation stair +stake +stall stamina stamp stance stand standard +standpoint +standstill star starlet start @@ -2250,13 +3050,22 @@ state statement station statistic +statue status stay steak steam steamer step +stepbrother +stepparent +stepsister stick +stillness +stimulant +stint +stipend +stipulation stock stomach stone @@ -2266,16 +3075,20 @@ storage store storm story +strain stranger strategy +stray stream street strength stress stretch +stride strife strike string +stripe stripper stroke structure @@ -2285,15 +3098,24 @@ student studio study stuff +stunt stupidity style +subdivision subject subordinate subroutine +subscription +subsection +subsidiary +subsidy substance +substitute +substructure subway success sucker +suffix suffocation sugar suggestion @@ -2301,6 +3123,7 @@ suit suitcase sultan summer +summit sun superhero supermarket @@ -2309,19 +3132,28 @@ support supporter suppression surface +surge surgeon surgery surprise +surrender +surroundings survey suspect +suspension +suspicion sustainment +swag +swagger +sweat +swell swim -swimming swimsuit swing switch sword symmetry +sympathizer sympathy syndicate synergy @@ -2330,11 +3162,15 @@ table tackle tail tale +talent talk +tally +tangibility tank tap target task +taste tattoo tavern tax @@ -2345,43 +3181,69 @@ teach teacher teaching team +tear +technician technology teenager telephone +telephony television +temperament temperature +temple tendency +tenderness tennis tension term +termination +terrain territory +terror +terrorist test +tester +testimonial +testimony text textbook texture theater +theatrics theme theory therapist thermometer +thesis thief thigh thing thirst thong thought +thoughtfulness +thoughtlessness thread +thrill throat +throb throne +thrust thumb +thump thunder tiara +tick ticket +tide +tier time timeout tip +tirade titan title +titleholder today toe toilet @@ -2391,12 +3253,11 @@ tone tongue tool tooth -top topic tornado +torrent total touch -tough tour tourist towel @@ -2411,7 +3272,11 @@ tragedy train trainer training +traitor +tramp +trance transaction +transference transition translation transmission @@ -2421,16 +3286,22 @@ trap trapdoor trash travel +treadmill +treasure treat treatment +treaty tree +tremble tremor trench trial +tribe tribunal tribute trick trip +tripod troll trooper trophy @@ -2445,59 +3316,99 @@ tsunami tube tumor tune +turf turn turnover twist type +ultimate uncle +underbelly +underside understanding +undertaking underwear unemployment +unfamiliarity +unhappiness +uniform +unimportance union -unique +unison unit universe university -upper -uproar -upstairs +urge urine usage +usefulness +uselessness user +utilization +utterance vacation vacuum +vagabond +vagrant +validation validity valley valuable value vanity +vanquisher +vapor variation variety -vast +vault vegetable vegetation vehicle vendetta vengeance +ventriloquist +venture verdict +verification version +vertex +veto +vexation +vibe vibration vibrator +vicinity victim +victor +victory video +view +vigor +vilifier village +villain +vindication +vindicator +violation violin virus vision +visit visitor visor visual +visualization vitality +vocabulary vodka voice volcano volume +volunteer +vote +voter voyage +wage wait waiter waitress @@ -2506,8 +3417,10 @@ wall wannabe war warlock +warlord warmth warning +warrior wash washer waste @@ -2516,6 +3429,7 @@ watcher watchman water wave +way weakness wealth weapon @@ -2531,6 +3445,7 @@ weight welcome welfare wench +whack whale wheel whimp @@ -2539,12 +3454,14 @@ whirlwind whisky wholesale wholesaler +whore wiener wife wilderness wildlife win wind +windfall window wine wing @@ -2553,31 +3470,42 @@ winner winter wisdom wish +wit witch witness +wizard +woe woman +womanhood +womanliness wonder wood word +wording work workbench worker +workmanship workshop world +worrier worry worth wound wrap +wrecker wrestle writer writing +wrongdoer +wrongdoing +wyvern yank yard yawn year yeast -yellow youth zombie zone -zoo \ No newline at end of file +zoo