54, skillquest DE FR Fix

His Dad [09-18-18 - 07:26]
54, skillquest DE FR Fix
Signed-off-by: His Dad <John@hisdad.org>
Filename
Doc/Changelog.txt
HistOfflineBeta.lua
data/Quest2.lua
data/WB2.lua
data/en/en.lua
data/keys.lua
data/utility.lua
diff --git a/Doc/Changelog.txt b/Doc/Changelog.txt
index 3b89409..396c9ab 100644
--- a/Doc/Changelog.txt
+++ b/Doc/Changelog.txt
@@ -1,8 +1,9 @@
 2018-09-15 version 53
+    Thanks Snakefish!
 	Added missing skillquests,
 	Some code has been refactored
 	In game part changed to cope with ZOS.
-	After installing  type  /histload  for the current char. Other wise it my take 1 day to get the historic achievements.
+	After installing  type  /histload  for the current char. Other wise it may take 1 day to get the historic achievements.


 2018-09-11 version 53-beta
diff --git a/HistOfflineBeta.lua b/HistOfflineBeta.lua
index 13573d1..c568aec 100644
--- a/HistOfflineBeta.lua
+++ b/HistOfflineBeta.lua
@@ -5,12 +5,12 @@

 -- Configuration ==========
 --local dateformat = "%Y-%m-%d, %H:%M"
-local dateformat_log = "%Y-%m-%d, %H:%M:%S"
-local FG_Colour_Not_Complete = "#FFB67D"
-local FG_Colour_Complete = "#000000"
-local BG_Colour_Not_Complete = "#FFB67D"
-local BG_Colour_Complete = "#A4FF5A"
-local Colour_Heading_Complete = "#58FA58"
+dateformat_log = "%Y-%m-%d, %H:%M:%S"
+FG_Colour_Not_Complete = "#FFB67D"
+FG_Colour_Complete = "#000000"
+BG_Colour_Not_Complete = "#FFB67D"
+BG_Colour_Complete = "#A4FF5A"
+Colour_Heading_Complete = "#58FA58"
 local dname, key, count, ccount, colour, bgcolour

 --force_lang = "fr"  --	or "de" or "fr"  for debugging
@@ -43,9 +43,9 @@ dofile "./data/DLC.lua"			--Achievement to Grid lookup, language independent
 dofile "./data/Group1.lua"		-- Grp Mode 1 data, N, V, VH
 dofile "./data/Group2.lua"		-- Grp Mode 2 data, N, V, VH
 dofile "./data/Public.lua"
-dofile "./data/Quest.lua"
+dofile "./data/Quest2.lua"
 dofile "./data/Veteran.lua"		-- Auxiliary Achievements for Vet Dungeons
-dofile "./data/WB.lua"
+dofile "./data/WB2.lua"
 dofile "./data/Trials.lua"
 dofile "./data/Special.lua"		-- Record of non standard Achievement ID's we need to keep.
 dofile "./data/utility.lua"		-- utility functions
@@ -89,39 +89,6 @@ load_lang = function (lang)
 end


-
-
---SQ_Dat loaded  from Quest.lua
-SQ_Info= {} -- keyed by "LC" string as the  ZONE Identifier
-for id,_ in pairs (SQ_dat) do  -- Load all Quest Data by Achievement ID
-		local L = SQ_dat[id].L
-		local C = SQ_dat[id].C
-		local key = tostring(L) .. tostring(C)	-- make name key
-
-		if SQ_Info[key] == nil then
-			SQ_Info[key] = {}
-			SQ_Info[key].ids = {}	--Array of Achievement ID's
-		end
-		table.insert(SQ_Info[key].ids,id)
-end
-
---WB_Dat loaded  from WB.lua
-WB_Info= {} -- keyed by "LC" string as the  ZONE Identifier
-for id,_ in pairs (WB_dat) do  -- Load all WB Data by Achievement ID
-		local L = WB_dat[id].L
-		local C = WB_dat[id].C
-		local key = tostring(L) .. tostring(C)	-- make name key
-
-		if WB_Info[key] == nil then
-			WB_Info[key] = {}
-			WB_Info[key].ids = {}	--Array of Achievement ID's
-		end
-		table.insert(WB_Info[key].ids,id)
-end
-
-
-
-
 accounts = {}
 accounts_list = {}		-- String list for selection dialog
 playerNames = {}		-- Get name from ID.
@@ -218,7 +185,7 @@ for acc,_ in pairs(History_SV["Default"]) do
 		end

 		-- a quick link to my Achievements
-		me.Ach = thischar.Ach
+		me.ach = thischar.ach
 	end

 	table.sort(accounts[acc].playerIDs,function(a,b)  return (playerNames[a] < playerNames[b]) end)
@@ -749,67 +716,17 @@ end
 		Line= Line +1
 		end
 -- Create WorldBoss Achievements Box==========================
-		me.WB_box= iup.matrix {numcol=4, numcol_visible=4,  numlin=5, widthdef=110}

-		for i=1, 4 do  -- Load headings, not Trials
-			me.WB_box:setcell(0,i, Area_names[i].long)
-		end
-		me.WB_box:setcell(0,0, L.Zone)
-		me.WB_box:setcell(1,0, "1")
-		me.WB_box:setcell(2,0, "2")
-		me.WB_box:setcell(3,0, "3")
-		me.WB_box:setcell(4,0, "4")
-		me.WB_box:setcell(5,0, "5")
-		iup.SetAttribute(me.WB_box, "READONLY", "YES")
-		iup.SetAttribute(me.WB_box, "ALIGNMENT0", "ACENTER")
-
-
-		-- Need to keep track of multiple achievements for WB in Zones. Index them by zone LineColumn.
-		WB_Area={}
-    local dname, key, count, ccount
--- Scan over all Slots, see what we have
-		for C=1, 4 do
-			ccount = 0		-- per column
-			for L = 1, 5 do
-				key = tostring(L) .. tostring(C)	-- make name key
-				dname = Locations[key]				-- Zone Locations
-				if dname == nil then
-					break	-- only 1 in Coldharbour,1 morrowind, not worry about empty slots
-				end
+		me.WB_box= Location_Box()
+		Populate_Dat(me.WB_box, WB_dat,me.ach)

-				count = 0
-				if WB_Info[key] == nil then
-					break	-- Some Locations not necessarily have WB
-				end
-				for _, id in ipairs (WB_Info[key].ids) do	-- get the WB of the zone

-					if  thischar.ach[id] ~= nil then	-- Have we got it?
-						count =count +1
-					end
-				end
-				ccount = ccount + count		-- Track the faction (Column)
-				me.WB_box:setcell(L,C,dname .. " (" .. tostring(count) .. ")")
-
-				colour = "FGCOLOR" .. L .. ":" .. C
-				bgcolour = "BGCOLOR" .. L .. ":" .. C
-				if count == #WB_Info[key].ids then		-- Got them all??
-					iup.SetAttribute(me.WB_box, colour   , FG_Colour_Complete)  -- Yup
-					iup.SetAttribute(me.WB_box, bgcolour , BG_Colour_Complete)
-				end
-			end   -- L
-
-			--Set Column Heading Colours
-			if ccount >= 15 then
-				iup.SetAttribute(me.WB_box, "BGCOLOR0:" .. tostring(C), Colour_Heading_Complete)
-			end
-		end		-- C
----
 -- Create WorldBoss Achievements Detail Boxes=======================

 		me.WB_Detail_box = {}
 		me.WB_Detail_Zbox = iup.zbox{}

-
+--[[
 		for key, dat  in pairs(WB_Info) do	-- for each zone
 			me.WB_Detail_box[key]= iup.matrix {numcol=2, numcol_visible=2,  numlin=#dat.ids}

@@ -851,56 +768,19 @@ end
 		function me.WB_box:enteritem_cb(L,C)
 			me.WB_Detail_Zbox.value = me.WB_Detail_box[tostring(L) .. tostring(C)]
 		end
-
+--]]


 -- Create SkillQuest Achievements Box==========================

-		me.SQ_box= Location_Box("name")
-
-		-- Need to keep track of multiple achievements for SQ in Zones. Index them by zone LineColumn.
-
-		for C=1, 5 do
-			ccount = 0		-- per column
-			for L = 1, 5 do
-				key = tostring(L) .. tostring(C)	-- make name key
-				dname = Locations[key]				-- Zone Locations
-				if dname == nil then
-					break	-- only 1 in Coldharbour,1 morrowind not worry about empty slots
-				end
+		me.SQ_box= Location_Box()
+		Populate_Dat(me.SQ_box, SQ_dat,me.ach)

-				count = 0
-				if SQ_Info[key] == nil then
-					break	-- Some Locations not necessarily have Skill Quests
-				end
-				for _, id in ipairs (SQ_Info[key].ids) do	-- get the quests of the zone
-
-					if  thischar.ach[id] ~= nil then	-- Have we got it?
-						count =count +1
-					end
-				end
-				ccount = ccount + count		-- Track the faction (Column)
-				me.SQ_box:setcell(L,C,dname .. " (" .. tostring(count) .. ")")
-
-				colour = "FGCOLOR" .. L .. ":" .. C
-				bgcolour = "BGCOLOR" .. L .. ":" .. C
-				if count == #SQ_Info[key].ids then		-- Got them all??
-					iup.SetAttribute(me.SQ_box, colour   , FG_Colour_Complete)  -- Yup
-					iup.SetAttribute(me.SQ_box, bgcolour , BG_Colour_Complete)
-				end
-			end   -- L
-
-			--Set Column Heading Colours
-			if ccount >= 15 then
-				iup.SetAttribute(me.SQ_box, "BGCOLOR0:" .. tostring(C), Colour_Heading_Complete)
-			end
-		end		-- C
----
 -- Create SkillQuest Achievements Detail Boxes=======================

 		me.SQ_Detail_box = {}
 		me.SQ_Detail_Zbox = iup.zbox{}
-
+--[[
 		local  link
 		for key, dat in pairs(SQ_Info) do	-- for each zone
 			me.SQ_Detail_box[key]= iup.matrix {numcol=2, numcol_visible=2,  numlin=#dat.ids}
@@ -951,6 +831,7 @@ end
 		function me.SQ_box:enteritem_cb(L,C)
 			me.SQ_Detail_Zbox.value = me.SQ_Detail_box[tostring(L) .. tostring(C)]
 		end
+	--]]
 --========== DLC

 		me.DLC_box= iup.matrix {numcol=6, numcol_visible=6,  numlin=4, widthdef=105}
diff --git a/data/Quest2.lua b/data/Quest2.lua
new file mode 100644
index 0000000..fb88b31
--- /dev/null
+++ b/data/Quest2.lua
@@ -0,0 +1,173 @@
+--[[  Taken from Locations2 (en)   for reference
+--EP
+{ name="Stonefalls",Grp="Fungal Grotto", Pub="Crow's Wood"},	--1
+{ name="Deshaan", Grp="Darkshade Caverns", Pub="Forgotten Crypts"},	--2
+{ name="Shadowfen", Grp="Arx Corinum", Pub="Sanguine's Demesne"},	--3
+{ name="Eastmarch", Grp="Direfrost Keep", Pub="Hall of the Dead"},	--4
+{ name="The Rift", Grp="Blessed Crucible", Pub="Lion's Den"},	--5
+--DC
+{ name="Glenumbra", Grp="Spindleclutch", Pub="Bad Man's Hallows"},	--6
+{ name="Stormhaven", Grp="Wayrest Sewers", Pub="Bonesnap Ruins"},	--7
+{ name="Rivenspire", Grp="Crypt of Hearts", Pub="Obsidian Scar"},	--8
+{ name="Alik'r Desert", Grp="Volenfell", Pub="Lost City"},	--9
+{ name="Bangkorai", Grp="Blackheart Haven", Pub="Razaks Wheel"},	--10
+--AD
+{ name="Auridon", Grp="Banished Cells", Pub="Toothmall Gully"},	--11
+{ name="Grahtwood", Grp="Elden Hollow", Pub="Root Sunder Ruins"},	--12
+{ name="Greenshade", Grp="City of Ash", Pub="Rulanyil's Fall"},	--13
+{ name="Malabal-Tor", Grp="Tempest Island", Pub="Crimson Cove"},	--14
+{ name="Reaper's March", Grp="Selene's Web", Pub="The Vile Manse"},	--15
+--Coldharbour
+{ name="Coldharbour", Grp="Vaults of Madness", Pub="Village of the Lost"},	--16
+{ name="Dark Brotherhood"},	--17
+{ name="Thieves Guild"},	--18
+{ name="Imperial City"},	--19
+{ name="VVardenfell"},	--20
+
+{ name="Orsinium"},--21
+{ name="Clockwork City"},	--22
+{ name="Summerset"},	--23
+
+}
+--]]
+
+--Quests that have skill points
+SQ_dat = {
+--["11"] = StoneFalls
+[201] = {Location=1, ["link1"] ="http://www.uesp.net/wiki/Online:The_Death_of_Balreth" },
+[204] = {Location=1, ["link1"] = "http://www.uesp.net/wiki/Online:The_General%27s_Demise"},
+[209] = {Location=1, ["link1"] = "http://www.uesp.net/wiki/Online:Sadal%27s_Final_Defeat"},
+
+--Deshaan
+[363] = {Location=2, ["link1"] = "http://www.uesp.net/wiki/Online:Plague_Bringer"},
+[365] = {Location=2, ["link1"] = "http://www.uesp.net/wiki/Online:The_Judgment_of_Veloth"},
+[364] = {Location=2, ["link1"] = "http://www.uesp.net/wiki/Online:The_Seal_of_Three"},
+
+--Shadowfen
+[950] = {Location=3, ["link1"] = "http://www.uesp.net/wiki/Online:The_Dream_of_the_Hist"},
+[185] = {Location=3, ["link1"] = "http://www.uesp.net/wiki/Online:Keepers_of_the_Shell" },
+[184] = {Location=3, ["link1"] ="http://www.uesp.net/wiki/Online:The_Skin-Stealer%27s_Lair"},
+
+--["41"] = "Eastmarch",
+[599] = {Location=4, ["link1"] = "http://www.uesp.net/wiki/Online:Songs_of_Sovngarde"},
+[597] = {Location=4, ["link1"] = "http://www.uesp.net/wiki/Online:The_Siege_of_Cradlecrush"},
+[598] = {Location=4, ["link1"] = "http://www.uesp.net/wiki/Online:One_Victor,_One_King" },
+
+--["51"] the Rift
+[336] = {Location=5, ["link1"] = "http://www.uesp.net/wiki/Online:Shattered_Hopes"},
+[337] = {Location=5, ["link1"] = "http://www.uesp.net/wiki/Online:Stomping_Sinmur" },
+[335] = {Location=5, ["link1"] = "http://www.uesp.net/wiki/Online:Through_the_Shroud"},
+
+--["12"]Glenumbra
+[31] = {Location=6, ["link1"] = "http://www.uesp.net/wiki/Online:Angof_the_Gravesinger_%28quest%29"},   --v
+[28] = {Location=6, ["link1"] = "http://www.uesp.net/wiki/Online:The_Fall_of_Faolchu"},
+[30] = {Location=6, ["link1"] = "http://www.uesp.net/wiki/Online:Purifying_the_Wyrd_Tree"},
+
+--["22"] = "Stormhaven"
+
+[155] = {Location=7,["link1"] = "http://www.uesp.net/wiki/Online:The_Return_of_the_Dream_Shard"};
+[154] = {Location=7,["link1"] = "http://www.uesp.net/wiki/Online:Sir_Hughes%27_Fate"},
+[156] = {Location=7,["link1"] = "http://www.uesp.net/wiki/Online:Vaermina%27s_Gambit"},
+
+--Rivenspire
+[589] = {Location=8, ["link1"] = "http://www.uesp.net/wiki/Online:The_Blood-Splattered_Shield" },
+[590] = {Location=8, ["link1"] = "http://www.uesp.net/wiki/Online:The_Liberation_of_Northpoint" },
+[591] = {Location=8, ["link1"] = "http://www.uesp.net/wiki/Online:The_Lightless_Remnant"},
+
+--Alik'r Desert
+[517]	={Location=9, ["link1"] = "http://www.uesp.net/wiki/Online:Alasan%27s_Plot" },
+[518]	={Location=9, ["link1"] = "http://www.uesp.net/wiki/Online:Amputating_the_Hand"},
+[516]	={Location=9, ["link1"] = "http://www.uesp.net/wiki/Online:A_Reckoning_with_Uwafa"},
+
+--["52"] = "Bangkorai",
+[145]	={Location=10,	["link1"] = "http://www.uesp.net/wiki/Online:The_Parley"},
+[146]	={Location=10,	["link1"] = "http://www.uesp.net/wiki/Online:Storming_the_Garrison" },
+[147]	={Location=10,	["link1"] = "http://www.uesp.net/wiki/Online:To_Walk_on_Far_Shores"},
+
+
+--["13"] = "Auridon",
+[360]	={Location=11, ["link1"] = "http://www.uesp.net/wiki/Online:Rites_of_the_Queen"},
+[362]	={Location=11, ["link1"] = "http://www.uesp.net/wiki/Online:Sever_All_Ties"},
+[361]	={Location=11, ["link1"] = "http://www.uesp.net/wiki/Online:The_Veil_Falls"},
+
+--["23"] = "Grahtwood",
+[605] = {Location=12, ["link1"] = "http://www.uesp.net/wiki/Online:The_Grip_of_Madness"},
+[606] = {Location=12, ["link1"] = "http://www.uesp.net/wiki/Online:Heart_of_the_Matter" },
+[607] = {Location=12, ["link1"] = "http://www.uesp.net/wiki/Online:A_Lasting_Winter" },
+
+--["33"] = "Greenshade",
+[511] = {Location=13, ["link1"] = "http://www.uesp.net/wiki/Online:Pelidil%27s_End"},
+--[945] = {Location=13, ["link1"] = "http://www.uesp.net/wiki/Online:Striking_at_the_Heart"},   -- Striking is a composite of 3 quests
+[512] = {Location=13, ["link1"] = "http://www.uesp.net/wiki/Online:Striking_at_the_Heart"},      -- Achievement granting skill pt is Valenwood Protector
+[510] = {Location=13, ["link1"] = "http://www.uesp.net/wiki/Online:Throne_of_the_Wilderking"},
+
+-- Malabal-Tor
+[284] = {Location=14, ["link1"] = "http://www.uesp.net/wiki/Online:The_Prisoner_of_Jathsogur"},
+[283] = {Location=14, ["link1"] = "http://www.uesp.net/wiki/Online:Reap_What_Is_Sown"},
+---- Has no Achievement
+[99999999] = {Location=14, ["link1"] = "http://www.uesp.net/wiki/Online:Buyer_Beware"},
+
+--Reapers march
+[538] = {Location=15, ["link1"] = "http://www.uesp.net/wiki/Online:The_Den_of_Lorkhaj"},
+[536] = {Location=15,["link1"] = "http://www.uesp.net/wiki/Online:Stonefire_Machinations"},
+[537] = {Location=15,["link1"] = "http://www.uesp.net/wiki/Online:Motes_in_the_Moonlight" },
+
+--Coldharbour
+[613] = {Location=16, ["link1"] = "http://www.uesp.net/wiki/Online:Breaking_the_Shackle"},
+[614] = {Location=16, ["link1"] = "http://www.uesp.net/wiki/Online:The_Final_Assault"},
+[612] = {Location=16, ["link1"] = "http://www.uesp.net/wiki/Online:Light_from_the_Darkness"},
+
+--Brotherhood
+[1436] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Dark_Initiate"},	-- Signed in Blood  "Dark Initiate", "Complete the \"Signed in Blood\" Dark Brotherhood quest in the Gold Coast.",
+[1438] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Sermonizer_Subduer"},	-- A Lesson in Silence	 "Sermonizer Subduer","Complete the \"A Lesson in Silence\" Dark Brotherhood quest in the Gold Coast.",
+[1439] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Brethren_Benefactor"},	-- Questions of Faith	"Brethren Benefactor", "Complete the \"Questions of Faith\" Dark Brotherhood quest in the Gold Coast.",
+[1440] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Assassin_(achievement)"},	-- A Special Request"Assassin", "Complete the \"A Special Request\" Dark Brotherhood quest in the Gold Coast.",
+[1441] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Dark_Discovery"},	--	Dark Revelations  "Dark Discovery", "Complete the \"Dark Revelations\" Dark Brotherhood quest in the Gold Coast.",
+[1442] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Dark_Investigator"},	-- A Ghost from the Past  "Dark Investigator","Complete the \"A Ghost from the Past\" Dark Brotherhood quest in the Gold Coast.",
+[1443] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Wrath_of_Sithis"},		-- The Wrath of Sithis "Wrath of Sithis", "Complete \"The Wrath of Sithis\" Dark Brotherhood quest in the Gold Coast.",
+[1444] = {Location=17, ["link1"] = "http://en.uesp.net/wiki/Online:Silencer"},	--	"Silencer", Filling the Void "Complete the \"Filling the Void\" Dark Brotherhood quest in the Gold Coast.",
+
+-- TG
+[1360] = {Location=18, ["link1"] =	 "http://en.uesp.net/wiki/Online:Always_Travel_Separately"}, 	--Cleaning House	 "Always Travel Separately",  "Complete quest \"Cleaning House\" in Hew's Bane.",
+[1370] = {Location=18, ["link1"] = "http://en.uesp.net/wiki/Online:Iron_Wheel_Infiltration"},	--The Long Game	 "Iron Wheel Infiltration", "Complete quest \"The Long Game\" in Hew's Bane.",
+[1361] = {Location=18, ["link1"] = "http://en.uesp.net/wiki/Online:Never,_Ever_Steal_From_the_Guild"},	--	"Never, Ever Steal From the Guild", "Complete quest \"A Flawless Plan\" in Hew's Bane.",
+[1362] = {Location=18, ["link1"] = "http://en.uesp.net/wiki/Online:Wedding_Crashers"},	--"Wedding Crashers", "Complete quest \"Forever Hold Your Peace\" in Hew's Bane.",
+[1363] = {Location=18, ["link1"] = "http://en.uesp.net/wiki/Online:Broken_Wheel"},	-- "Broken Wheel",  "Complete quest \"Prison Break\" in Hew's Bane.",
+
+
+
+
+-- IC
+[1175] = {Location=19, ["link1"] = "http://en.uesp.net/wiki/Online:The_Sublime_Brazier"},	--"The Sublime Protector",
+
+--Vvardenfell
+[1870] = {Location=20, ["link1"] = "http://en.uesp.net/wiki/Online:Naryu%27s_Confidant"},	--"Naryu's Confidant"  Family Reunion			http://en.uesp.net/wiki/Online:Family_Reunion
+[1869] = {Location=20, ["link1"] = "http://en.uesp.net/wiki/Online:Rising_Sun"},	-- The Heart of a Telvanni	http://en.uesp.net/wiki/Online:The_Heart_of_a_Telvanni
+[1852] = {Location=20, ["link1"] = "http://en.uesp.net/wiki/Online:Champion_of_Vivec"},	--Champion of Vivec
+
+
+--next Column
+-- Orsinium
+[1325] = {Location=21, ["link1"] = "http://en.uesp.net/wiki/Online:A_King-Sized_Problem"},	--	A King-Sized Problem  "Orc King's Councilor","Complete quest \"A King-Sized Problem\" in Wrothgar.",
+[1326] = {Location=21, ["link1"] = "http://en.uesp.net/wiki/Online:The_Anger_of_a_King"},	--	The Anger of a King "Orc King's Marshal","Complete quest \"The Anger of a King\" in Wrothgar.",
+[1327] = {Location=21, ["link1"] = "http://en.uesp.net/wiki/Online:Blood_on_a_King%27s_Hands"},	--Blood on a King's Hands	 "Orc King's Conqueror",  "Complete quest \"Blood on a King's Hands\" in Wrothgar.",
+
+--Clockwork
+[2050] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:To_The_Clockwork_City"},	--To The Clockwork City	 "Land of Gears and Cogs","Complete the \"To the Clockwork City\" quest.",
+[2058] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:In_Search_of_a_Sponsor"},	-- In Search of a Sponsor	"Clockwork Citizen","Complete the \"In Search of a Sponsor\" quest.",
+[2059] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:The_Strangeness_of_Seht"},	-- The Strangeness of Seht	"Smoke and Mirrors","Complete the \"The Strangeness of Seht\" quest.",
+[2060] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:Deepening_Shadows"},	-- Deepening Shadows "Middle-Man", "Complete the \"Deepening Shadows\" quest.",
+[2061] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:Lost_in_the_Gloam"},	-- Lost in the Gloam "Birds of a Feather","Complete the \"Lost in the Gloam\" quest.",
+[2062] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:Unto_the_Dark"},	-- Unto the Dark	"Shadow Boxing", "Complete the \"Unto the Dark\" quest.",
+[2063] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:Where_Shadows_Lie"},	--Where Shadows Lie		The Real Sotha Sil" "Complete the \"Where Shadows Lie\" quest.",
+[2064] = {Location=22, ["link1"] = "http://en.uesp.net/wiki/Online:The_Light_of_Knowledge"},	--  The Light of Knowledge "The Burden of Knowledge", "Complete the \"The Light of Knowledge\" quest.",
+
+--Summerset
+[2203] = {Location=23, ["link1"] = "http://en.uesp.net/wiki/Online:Buried_Memories"},	-- Buried Memories   "Mind Games", "Complete the \"Buried Memories\" quest.",
+[2206] = {Location=23, ["link1"] = "http://en.uesp.net/wiki/Online:Lost_in_Translation"},	-- Lost in Translation "Unreliable Narrator", "Complete the \"Lost in Translation\" quest.",
+[2208] = {Location=23, ["link1"] = "http://en.uesp.net/wiki/Online:The_Crystal_Tower"},	-- The Crystal Tower What Must Be Done", "Complete the \"The Crystal Tower\" quest.",
+--[[
+
+
+--]]
+}
diff --git a/data/WB2.lua b/data/WB2.lua
new file mode 100644
index 0000000..b1dc0d3
--- /dev/null
+++ b/data/WB2.lua
@@ -0,0 +1,199 @@
+--[[  Taken from Locations2 (en)   for reference
+--EP
+{ name="Stonefalls",Grp="Fungal Grotto", Pub="Crow's Wood"},	--1
+{ name="Deshaan", Grp="Darkshade Caverns", Pub="Forgotten Crypts"},	--2
+{ name="Shadowfen", Grp="Arx Corinum", Pub="Sanguine's Demesne"},	--3
+{ name="Eastmarch", Grp="Direfrost Keep", Pub="Hall of the Dead"},	--4
+{ name="The Rift", Grp="Blessed Crucible", Pub="Lion's Den"},	--5
+--DC
+{ name="Glenumbra", Grp="Spindleclutch", Pub="Bad Man's Hallows"},	--6
+{ name="Stormhaven", Grp="Wayrest Sewers", Pub="Bonesnap Ruins"},	--7
+{ name="Rivenspire", Grp="Crypt of Hearts", Pub="Obsidian Scar"},	--8
+{ name="Alik'r Desert", Grp="Volenfell", Pub="Lost City"},	--9
+{ name="Bangkorai", Grp="Blackheart Haven", Pub="Razaks Wheel"},	--10
+--AD
+{ name="Auridon", Grp="Banished Cells", Pub="Toothmall Gully"},	--11
+{ name="Grahtwood", Grp="Elden Hollow", Pub="Root Sunder Ruins"},	--12
+{ name="Greenshade", Grp="City of Ash", Pub="Rulanyil's Fall"},	--13
+{ name="Malabal-Tor", Grp="Tempest Island", Pub="Crimson Cove"},	--14
+{ name="Reaper's March", Grp="Selene's Web", Pub="The Vile Manse"},	--15
+--Coldharbour
+{ name="Coldharbour", Grp="Vaults of Madness", Pub="Village of the Lost"},	--16
+{ name="Dark Brotherhood"},	--17
+{ name="Thieves Guild"},	--18
+{ name="Imperial City"},	--19
+{ name="VVardenfell"},	--20
+
+{ name="Orsinium"},--21
+{ name="Clockwork City"},	--22
+{ name="Summerset"},	--23
+
+}
+--]]
+
+
+
+
+WB_dat = {		--World Boss Achievements
+--]These index Locations2  (en)  and Locations2key
+-- StoneFalls
+[197] = {Location=1},		--Shipwreck Strand
+[199] = {Location=1},		--Shivering Shrine
+[196] = {Location=1},		--Cave of Memories
+[200] = {Location=1},		--Brahma's Grove
+[198] = {Location=1},		--Matron's Clutch
+[195] = {Location=1},		--Strifeswarm Hive
+--Deshaan
+[277] = {Location=2},		--Sharpfang
+[276] = {Location=2},		--Grove of the Abomination
+[275] = {Location=2},		--Short-Tusk
+[278] = {Location=2},		--Mabrigash Burial Circle
+[280] = {Location=2},		--Caravan Crest
+[279] = {Location=2},		--Druitularg's Ritual Altar
+
+--Shadowfen
+[189] = {Location=3},		--Nen Ria
+[187] = {Location=3}, 	--Haynekhtnamet
+[192] = {Location=3},		--Slaver Camp
+[191] = {Location=3},		--Bitterroot Cave
+[188] = {Location=3},		--Xal Thak
+[190] = {Location=3},		--Captain Bones
+--Eastmarch
+[210] = {Location=4},		--RageClaw
+[211] = {Location=4},		--Dragon Mound
+[212] = {Location=4},		--Ratmaster
+[213] = {Location=4},		--Dragon's Hallow
+[257] = {Location=4},		--Swiftblade
+[214] = {Location=4},		--Ammabani's Pride
+--The Rift
+[345] = {Location=5},		--Hunter Camp
+[346] = {Location=5},		--Troll Cave
+[347] = {Location=5},		--Frozen Ruins
+[348] = {Location=5},		--Abandoned Camp
+[350] = {Location=5},		--Wisplight Glen
+[349] = {Location=5},		--Giant Camp
+--Glenumbra
+[387] = {Location=6},		--Balefire Island
+[382] = {Location=6},		--Seaview Point
+[385] = {Location=6},		--North Shore Point
+[384] = {Location=6},		--Wolf's Camp
+[383] = {Location=6},		--Western Overlook
+[386] = {Location=6},		--Trapjaw's Cove
+--Stormhaven
+[400] = {Location=7},		--Spider Nest
+[399] = {Location=7},		--Mudcrab Beach
+[401] = {Location=7},		--Dreugh Waters
+[402] = {Location=7},		--Abandoned Farm
+[403] = {Location=7},		--Scrag's Larder
+[404] = {Location=7},		--Ancient Altar
+--Rivenspire
+[158] = {Location=8},		--Aesar's Web
+[159] = {Location=8},		--Valeguard Tower
+[161] = {Location=8},		--Magdelena's Haunt
+[160] = {Location=8},		--Old Kalgon's Keep
+[162] = {Location=8},		--East-Rock Landing
+[163] = {Location=8},		--Siren's Cove
+--Alik'r Desert
+[500] = {Location=9},		--Lesser Circle
+[495] = {Location=9},		--Lost Caravan
+[498] = {Location=9},		--Forsaken Hearts Cave
+[496] = {Location=9},		--Giant Camp
+[497] = {Location=9},		--Hag Camp
+[499] = {Location=9},		--King's Rest
+--Bangkorai
+[151] = {Location=10},		--Telesubi Ruins
+[150] = {Location=10},		--Nilata Falls
+[152] = {Location=10},		--Summoner's Camp
+[149] = {Location=10},		--Arlimahera's Sanctum
+[153] = {Location=10},		--Lakewatch Tower
+[148] = {Location=10},		--Blighted Isle
+--Auridon
+[352] = {Location=11},		--Seaside Scarp
+[351] = {Location=11},		--Soulfire Plateau
+[353] = {Location=11},		--Wreck of the Raptor
+[354] = {Location=11},		--Heretic's Summons
+[355] = {Location=11},		--Nestmother's Den
+[356] = {Location=11},		--Heritance Proving Ground
+--Grahtwood
+[700] = {Location=12},		--Thugrub's Cave
+[699] = {Location=12},		--Poacher Camp
+[701] = {Location=12},		--Valanir's Rest
+[698] = {Location=12},		--Lady Solace's Fen
+[696] = {Location=12},		--Hircine's Henge
+[697] = {Location=12},		--Nindaeril's Perch
+--Greenshade
+[562] = {Location=13},		--Maormer Camp
+[561] = {Location=13},		--Thodundor's View
+[563] = {Location=13},		--Rootwater Spring
+[564] = {Location=13},		--Reconnaissance Camp
+[560] = {Location=13},		--Gathongor's Mire
+[565] = {Location=13},		--Pelda Tarn
+--Malabal-Tor
+[258] = {Location=14},		--Bitterpoint Strand
+[259] = {Location=14},		--Dugan
+[261] = {Location=14},		--Jagged Grotto
+[260] = {Location=14},		--Bone Grappler
+[263] = {Location=14},		--River Edge
+[262] = {Location=14},		--Windshriek Strand
+--Reaper's March
+[427] = {Location=15},		--Waterdancer Falls
+[425] = {Location=15},		--Deathsong Cleft
+[428] = {Location=15},		--Reaper's Henge
+[429] = {Location=15},		--Old S'ren-ja Docks
+[426] = {Location=15},		--Big Ozur's Valley
+[430] = {Location=15},		--Ushmal's Rest
+--Coldharbour
+[440] = {Location=16},		--Duriatundur's Killing Field
+[439] = {Location=16},		--Aba-Darre
+[443] = {Location=16},		--Risen Court
+[444] = {Location=16},		--Cynhamoth's Grove
+[442] = {Location=16},		--Daedroth Larder
+[441] = {Location=16},		--Zemarek's Hollow
+
+--Dark Brotherhood Gold Coast
+[1419] = {Location=17},	-- "Defeat Limenauruus" "Defeat Limenauruus the possessed minotaur and the shadow spirits at Tribune's Folly.",
+[1420] = {Location=17}, 	-- "Conquer the Kvatch Arena" "Enter the Kvatch Arena and defeat all challengers.",
+
+-- Thieves Guild. Hews Bane
+[1352] = {Location=18},	-- "Deepest Shallows" "Kill Syvarra of the Deep at Ko Estaran.",
+[1353] = {Location=18},	-- "Cutting the Keel" "Kill Captain Virindi Slave-Taker at Thrall Cove.",
+
+--No Wb in Imperial City 19
+
+
+
+--Vvardenfell
+[1847] = {Location=20},	--Loop Eradicator  ,"Save Dubdil Alar from the consequences of his temporal experiments.",
+[1802] = {Location=20},	--Songbird Silencer
+[1803] = {Location=20},	--Salothan's Cursebreaker
+[1805] = {Location=20},	--Breaker of the Unbroken, Defeat the nix-ox Nilthog the Unbroken at Nilthog's Hollow.
+[1807] = {Location=20},	--Cheater Defeater, Defeat the Skaafin, Mehz the Cozener, at Dubdil Alar Tower and seal the rift to Oblivion.
+[1804] = {Location=20},	-- "Consort Killer""Defeat the Queen's Consort at Missir-Dadalit Egg Mine.",
+
+
+
+--Orsinium
+[1286] = {Location=21},	-- Kill Zandadunoz the Reborn,  Defeat Zandadunoz the Reborn at the Unfinished Dolmen.
+[1285] = {Location=21},	-- Kill Old Snagara,  Kill Old Snagara the echatere in the Poacher's Encampment.
+[1290] = {Location=21},	-- Kill Nyzchaleft,  Kill Nyzchaleft the Dwarven Centurion at Nyzchaleft Falls.
+[1289] = {Location=21},	-- Kill Mad Urkazbur the Ogre,  Kill Mad Urkazbur at the Mad-Ogre's Altar.
+[1287] = {Location=21},	-- Kill King-Chief Edu,  Kill the Riekr regent King-Chief Edu at the King-Chief's Throne.
+[1288] = {Location=21},		-- Kill Corintthac the Abomination,  Kill the Winterborn Briarheart Warrior, Corintthac the Abomination, at the Accursed Nursery.
+
+
+--Clock
+[2046] = {Location=22},	-- "Murderer of Crows" "Defeat Ithoxis, Abathoth, and Ssatinot in Exarchs' Egress.",
+[2028] = {Location=22},	-- "Imperfection" "Defeat The Imperfect in the Sanctuary of Verification.",
+
+
+--Summerset
+[2036] = {Location=23},	-- "Reef Raider" "Defeat Queen of the Reef at The Queen's Hatchery.",
+[2037] = {Location=23},	-- "Bucking the Matriarchy" "Defeat Caanerin at Indrik Frolic.",
+[2038] = {Location=23},	-- "Sea Sload Slugger""Defeat the Sea Sload B'Korgen at Welenkin Cove.",
+[2039] = {Location=23},	-- "Talon Taker" "Defeat Haeliata and Nagravia at Gryphon Run.",
+[2040] = {Location=23},	-- "Amphibian Agitator""Defeat Graveld at Graveld's Hideaway.",
+[2041] = {Location=23},	-- "Keel Hauler" "Defeat Keelsplitter at Keelsplitter's Nest.",
+[2212] = {Location=23},	-- "Asp Awareness" "Defeat Keelsplitter without stepping on any of the snakes.",
+
+
+}
diff --git a/data/en/en.lua b/data/en/en.lua
index 8084aa4..1b53d1a 100644
--- a/data/en/en.lua
+++ b/data/en/en.lua
@@ -298,33 +298,33 @@ Locations = {   -- Used for WB and SQ
 Locations2 = {   -- Used for WB and SQ,

 --EP
-{ name="Stonefalls",Grp="Fungal Grotto", Pub="Crow's Wood"},
-{ name="Deshaan", Grp="Darkshade Caverns", Pub="Forgotten Crypts"},
-{ name="Shadowfen", Grp="Arx Corinum", Pub="Sanguine's Demesne"},
-{ name="Eastmarch", Grp="Direfrost Keep", Pub="Hall of the Dead"},
-{ name="The Rift", Grp="Blessed Crucible", Pub="Lion's Den"},
+{ name="Stonefalls",Grp="Fungal Grotto", Pub="Crow's Wood"},	--1
+{ name="Deshaan", Grp="Darkshade Caverns", Pub="Forgotten Crypts"},	--2
+{ name="Shadowfen", Grp="Arx Corinum", Pub="Sanguine's Demesne"},	--3
+{ name="Eastmarch", Grp="Direfrost Keep", Pub="Hall of the Dead"},	--4
+{ name="The Rift", Grp="Blessed Crucible", Pub="Lion's Den"},	--5
 --DC
-{ kname="Glenumbra", Grp="Spindleclutch", Pub="Bad Man's Hallows"},
-{ name="Stormhaven", Grp="Wayrest Sewers", Pub="Bonesnap Ruins"},
-{ name="Rivenspire", Grp="Crypt of Hearts", Pub="Obsidian Scar"},
-{ name="Alik'r Desert", Grp="Volenfell", Pub="Lost City"},
-{ name="Bangkorai", Grp="Blackheart Haven", Pub="Razaks Wheel"},
+{ name="Glenumbra", Grp="Spindleclutch", Pub="Bad Man's Hallows"},	--6
+{ name="Stormhaven", Grp="Wayrest Sewers", Pub="Bonesnap Ruins"},	--7
+{ name="Rivenspire", Grp="Crypt of Hearts", Pub="Obsidian Scar"},	--8
+{ name="Alik'r Desert", Grp="Volenfell", Pub="Lost City"},	--9
+{ name="Bangkorai", Grp="Blackheart Haven", Pub="Razaks Wheel"},	--10
 --AD
-{ name="Auridon", Grp="Banished Cells", Pub="Toothmall Gully"},
-{ name="Grahtwood", Grp="Elden Hollow", Pub="Root Sunder Ruins"},
-{ name="Greenshade", Grp="City of Ash", Pub="Rulanyil's Fall"},
-{ name="Malabal-Tor", Grp="Tempest Island", Pub="Crimson Cove"},
-{ name="Reaper's March", Grp="Selene's Web", Pub="The Vile Manse"},
+{ name="Auridon", Grp="Banished Cells", Pub="Toothmall Gully"},	--11
+{ name="Grahtwood", Grp="Elden Hollow", Pub="Root Sunder Ruins"},	--12
+{ name="Greenshade", Grp="City of Ash", Pub="Rulanyil's Fall"},	--13
+{ name="Malabal-Tor", Grp="Tempest Island", Pub="Crimson Cove"},	--14
+{ name="Reaper's March", Grp="Selene's Web", Pub="The Vile Manse"},	--15
 --Coldharbour
-{ name="Coldharbour", Grp="Vaults of Madness", Pub="Village of the Lost"},
-{ name="Dark Brotherhood"},
-{ name="Thieves Guild"},
-{ name="Imperial City"},
-{ name="VVardenfell"},
+{ name="Coldharbour", Grp="Vaults of Madness", Pub="Village of the Lost"},	--16
+{ name="Dark Brotherhood"},	--17
+{ name="Thieves Guild"},	--18
+{ name="Imperial City"},	--19
+{ name="VVardenfell"},	--20

-{ name="Orsinium"},
-{ name="Clockwork City"},
-{ name="Summerset"},
+{ name="Orsinium"},--21
+{ name="Clockwork City"},	--22
+{ name="Summerset"},	--23

 }

diff --git a/data/keys.lua b/data/keys.lua
index 527f8ac..112be8c 100644
--- a/data/keys.lua
+++ b/data/keys.lua
@@ -184,32 +184,32 @@ Locations2Key = {   -- Used for WB and SQ,
 --Area is the heading  L.Area_Names[Area]

 --EP
-{ key="11",L=1,C=1,Area=1},		--	name="Stonefalls"},
-{ key="21",L=2,C=1,Area=1},		--	name="Deshaan"},
-{ key="31",L=3,C=1,Area=1},		--	name="Shadowfen"},
-{ key="41",L=4,C=1,Area=1},		--	name="Eastmarch"},
-{ key="51",L=5,C=1,Area=1},		--	name="The Rift"},
+{ key="1:1",L=1,C=1,Area=1},		--	name="Stonefalls"},
+{ key="2:1",L=2,C=1,Area=1},		--	name="Deshaan"},
+{ key="3:1",L=3,C=1,Area=1},		--	name="Shadowfen"},
+{ key="4:1",L=4,C=1,Area=1},		--	name="Eastmarch"},
+{ key="5:1",L=5,C=1,Area=1},		--	name="The Rift"},	5
 --DC
-{ key="12",L=1,C=2,Area=2},		--	name="Glenumbra"},
-{ key="22",L=2,C=2,Area=2},		--	name="Stormhaven"},
-{ key="32",L=3,C=2,Area=2},		--	name="Rivenspire"},
-{ key="42",L=4,C=2,Area=2},		--	name="Alik'r Desert"},
-{ key="52",L=5,C=2,Area=2},		--	name="Bangkorai"},
+{ key="1:2",L=1,C=2,Area=2},		--	name="Glenumbra"},
+{ key="2:2",L=2,C=2,Area=2},		--	name="Stormhaven"},
+{ key="3:2",L=3,C=2,Area=2},		--	name="Rivenspire"},
+{ key="4:2",L=4,C=2,Area=2},		--	name="Alik'r Desert"},
+{ key="5:2",L=5,C=2,Area=2},		--	name="Bangkorai"},	10
 --AD
-{ key="13",L=1,C=3,Area=3},		--	name="Auridon"},
-{ key="23",L=2,C=3,Area=3},		--	name="Grahtwood"},
-{ key="33",L=3,C=3,Area=3},--	--	name="Greenshade"},
-{ key="43",L=4,C=3,Area=3},--	--	name="Malabal-Tor"},
-{ key="53",L=5,C=3,Area=3},--	--	name="Reaper's March"},
+{ key="1:3",L=1,C=3,Area=3},		--	name="Auridon"},
+{ key="2:3",L=2,C=3,Area=3},		--	name="Grahtwood"},
+{ key="3:3",L=3,C=3,Area=3},--	--	name="Greenshade"},
+{ key="4:3",L=4,C=3,Area=3},--	--	name="Malabal-Tor"},
+{ key="5:3",L=5,C=3,Area=3},--	--	name="Reaper's March"},	15
 --Coldharbour
-{ key="14",L=1,C=4,Area=4},		--	name="Reaper's March"},
-{ key="24",L=2,C=4,Area=4},		--	name="Dark Brotherhood"},
-{ key="34",L=3,C=4,Area=4},		--	name="Thieves Guild"},
-{ key="44",L=4,C=4,Area=4},		--	name="Imperial City"},
-{ key="54",L=5,C=4,Area=4},		--	name="VVardenfell"},
+{ key="1:4",L=1,C=4,Area=4},		--	name="Coldharbour}, --16
+{ key="2:4",L=2,C=4,Area=4},		--	name="Dark Brotherhood"},  17
+{ key="3:4",L=3,C=4,Area=4},		--	name="Thieves Guild"},	18
+{ key="4:4",L=4,C=4,Area=4},		--	name="Imperial City"},	19
+{ key="5:4",L=5,C=4,Area=4},		--	name="VVardenfell"},	20

-{ key="15",L=1,C=5,Area=4},		--	name="Orsinium"},
-{ key="25",L=2,C=5,Area=4},		--	name="Clockwork City"},
-{ key="35",L=3,C=5,Area=4},		--	name="Summerset"},
+{ key="1:5",L=1,C=5,Area=4},		--	name="Orsinium"},	21
+{ key="2:5",L=2,C=5,Area=4},		--	name="Clockwork City"},	22
+{ key="3:5",L=3,C=5,Area=4},		--	name="Summerset"},	23

 }
diff --git a/data/utility.lua b/data/utility.lua
index 0d170a6..4318619 100644
--- a/data/utility.lua
+++ b/data/utility.lua
@@ -1,3 +1,4 @@
+
 dump = function (o)
    if type(o) == 'table' then
       local s = '{ '
@@ -224,11 +225,6 @@ end

 --Run through Location data to get the info needed to dimension the WB and SQ boxes
 Location_Box = function (name)
-	if type(name) ~= "string" then
-		print ("Location_Box name is not string.")
-		return
-	end
-

 	local cols = {}
 	local lines = {}
@@ -263,11 +259,57 @@ Location_Box = function (name)
 	return_t:setcell(0,0, L.Zone)
 	for line,_ in ipairs(lines) do
 		return_t:setcell(line,0, tostring(line))
-		iup.SetAttribute(return_t,  "FGCOLOR*:".. tostring(line), FG_Colour_Not_Complete)
-		iup.SetAttribute(return_t,  "BGCOLOR*:".. tostring(line), BG_Colour_Not_Complete)
+	--	iup.SetAttribute(return_t,  "FGCOLOR*:".. tostring(line), FG_Colour_Not_Complete)
+	--	iup.SetAttribute(return_t,  "BGCOLOR*:".. tostring(line), BG_Colour_Not_Complete)
 	end

+	--optionally set Contents
+	if (type(name) ~= "string") then	return return_t end
+--	get

 	return return_t
 end

+
+-- take WB_Dat or SQ_Dat, which are indexed on id and return array
+-- lines_t = table[key]  of  {done,of ids{id=false, id=false}}    then we can scan and set id to true if found
+Reverse_Dat = function (dat_t,ids_t)
+
+	local lines_t = {}	-- accumulate as LC Key
+	for id, location_t in pairs (dat_t) do		--location is index into Locations2key and Locations2
+
+		local key = Locations2Key[location_t.Location].key
+		local gotid = (type(ids_t[id]) == "table")		-- do we have this achievement? nil is no. table is yes
+		if lines_t[key] == nil then	--	add new line
+			lines_t[key] = {}
+			lines_t[key].L = Locations2Key[location_t.Location].L
+			lines_t[key].C = Locations2Key[location_t.Location].C
+			lines_t[key].ids={}
+			lines_t[key].ids[id] = gotid
+			lines_t[key].of =1
+			if gotid then lines_t[key].done = 1 else lines_t[key].done = 0 end
+		else
+			lines_t[key].ids[id] = gotid	--	add id to existing line
+			lines_t[key].of = lines_t[key].of + 1
+			if gotid then lines_t[key].done = lines_t[key].done + 1  end
+		end
+	end
+	return lines_t
+end
+
+Populate_Dat = function(matrix, dat_t,ids_t)
+		local Rev = Reverse_Dat(dat_t,ids_t)
+		for i,key_t  in ipairs (Locations2Key) do		--	{ key="1:1",L=1,C=1,Area=1},		--	name="Stonefalls"}
+			local name = Locations2[i].name
+			local line =Rev[key_t.key]
+			if line == nil then 	-- this is ok. Location without a WB or SQ
+			else
+				matrix:setcell(line.L,line.C,name .. " (" .. line.done .. "/" .. line.of .. ")")
+				if line.done == line.of then
+					iup.SetAttribute(matrix, "FGCOLOR" .. key_t.key , FG_Colour_Complete)  -- Yup
+					iup.SetAttribute(matrix, "BGCOLOR" .. key_t.key , BG_Colour_Complete)
+				end
+			end
+		end
+end
+