From 528df27780038702c0cb9792bd3d42ef9322dc70 Mon Sep 17 00:00:00 2001 From: MarcelineVQ Date: Sat, 7 Mar 2026 17:20:43 -0800 Subject: [PATCH] Add minimap tracking dropdown with Wrath-style NPC icons Take over native MiniMapTrackingFrame to show a tracking spell dropdown (Hunter Track X, Sense Undead/Demons, Find Herbs/Minerals) plus NPC tracking categories with icons extracted from the 3.3.5 client (Auctioneer, Flight Master, Mailbox, Repair, etc.). --- build.zig | 2 +- src/main.zig | 3 +- src/minimapicons/addon/MinimapIcons.lua | 246 ++++++++++++++++++ src/minimapicons/addon/MinimapIcons.toc | 6 + .../Interface/Minimap/Tracking/Ammunition.blp | Bin 0 -> 2564 bytes .../Interface/Minimap/Tracking/Auctioneer.blp | Bin 0 -> 2564 bytes .../Interface/Minimap/Tracking/Banker.blp | Bin 0 -> 2564 bytes .../Minimap/Tracking/BattleMaster.blp | Bin 0 -> 2564 bytes .../Interface/Minimap/Tracking/Class.blp | Bin 0 -> 2564 bytes .../Minimap/Tracking/FlightMaster.blp | Bin 0 -> 2564 bytes .../Interface/Minimap/Tracking/Food.blp | Bin 0 -> 2564 bytes .../Interface/Minimap/Tracking/Innkeeper.blp | Bin 0 -> 2564 bytes .../Interface/Minimap/Tracking/Mailbox.blp | Bin 0 -> 2564 bytes .../Interface/Minimap/Tracking/None.blp | Bin 0 -> 2564 bytes .../Minimap/Tracking/ObjectIcons.blp | Bin 0 -> 23060 bytes .../Interface/Minimap/Tracking/Profession.blp | Bin 0 -> 2564 bytes .../Interface/Minimap/Tracking/Reagents.blp | Bin 0 -> 2564 bytes .../Interface/Minimap/Tracking/Repair.blp | Bin 0 -> 2564 bytes .../Minimap/Tracking/StableMaster.blp | Bin 0 -> 2564 bytes 19 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 src/minimapicons/addon/MinimapIcons.lua create mode 100644 src/minimapicons/addon/MinimapIcons.toc create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/Ammunition.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/Auctioneer.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/Banker.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/BattleMaster.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/Class.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/FlightMaster.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/Food.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/Innkeeper.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/Mailbox.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/None.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/ObjectIcons.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/Profession.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/Reagents.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/Repair.blp create mode 100644 src/minimapicons/assets/Interface/Minimap/Tracking/StableMaster.blp diff --git a/build.zig b/build.zig index 076aeb3..8e1227e 100644 --- a/build.zig +++ b/build.zig @@ -19,7 +19,7 @@ const module_list = [_]ModuleDesc{ .{ .name = "worldmarkers", .desc = "Enable world markers module", .src_dir = "markers", .addon_name = "WorldMarkers" }, .{ .name = "framecrash", .desc = "Enable framecrash fix", .default = false }, .{ .name = "logsessions", .desc = "Enable log session rotation", .addon_name = "LogSessions" }, - .{ .name = "minimapicons", .desc = "Enable custom minimap icons" }, + .{ .name = "minimapicons", .desc = "Enable custom minimap icons", .addon_name = "MinimapIcons" }, .{ .name = "transmogfix", .desc = "Enable transmog update coalescing" }, .{ .name = "customassets", .desc = "Enable loose file loading & permissive patch glob" }, .{ .name = "healtextfix", .desc = "Enable SuperWoW heal text fix" }, diff --git a/src/main.zig b/src/main.zig index b0bf3f5..a4bca1c 100644 --- a/src/main.zig +++ b/src/main.zig @@ -146,6 +146,7 @@ const embed_modules = [_]EmbedModule{ .{ .option = "outline", .addon_name = "Outline", .addon_files_opt = "outline_addon_files" }, .{ .option = "worldmarkers", .addon_name = "WorldMarkers", .addon_files_opt = "worldmarkers_addon_files", .asset_files_opt = "worldmarkers_asset_files" }, .{ .option = "logsessions", .addon_name = "LogSessions", .addon_files_opt = "logsessions_addon_files" }, + .{ .option = "minimapicons", .addon_name = "MinimapIcons", .addon_files_opt = "minimapicons_addon_files", .asset_files_opt = "minimapicons_asset_files" }, }; /// Extract filename from a path like "markers/addon/Foo.lua" → "Foo.lua" @@ -202,7 +203,7 @@ fn embedFiles(comptime paths: []const []const u8) [paths.len]FileEntry { /// Build all AddonPrefix entries from embed_modules at comptime. fn buildAllPrefixes() []const AddonPrefix { - @setEvalBranchQuota(10000); + @setEvalBranchQuota(50000); comptime { // First pass: count total prefix entries var count: usize = 0; diff --git a/src/minimapicons/addon/MinimapIcons.lua b/src/minimapicons/addon/MinimapIcons.lua new file mode 100644 index 0000000..b9b66d9 --- /dev/null +++ b/src/minimapicons/addon/MinimapIcons.lua @@ -0,0 +1,246 @@ +-- MinimapIcons addon (embedded in DLL, loaded from memory) +-- Takes over the native MiniMapTrackingFrame to add a tracking spell dropdown +-- with Wrath-style NPC tracking categories. + +MINIMAPICONS_VERSION = 2 + +-- ============================================================================= +-- Tracking spell definitions grouped by category +-- ============================================================================= + +local SPELL_CATEGORIES = { + { name = "Hunter Tracking", spells = { + "Track Beasts", "Track Humanoids", "Track Undead", "Track Hidden", + "Track Elementals", "Track Demons", "Track Giants", "Track Dragonkin", + }}, + { name = "Class Abilities", spells = { + "Sense Undead", "Sense Demons", + }}, + { name = "Professions", spells = { + "Find Herbs", "Find Minerals", "Find Treasure", + }}, +} + +-- NPC tracking categories (icons embedded from Wrath client) +-- These don't filter minimap blips yet — future DLL hook work. +local NPC_CATEGORIES = { + { name = "Auctioneer", icon = "Interface\\Minimap\\Tracking\\Auctioneer" }, + { name = "Banker", icon = "Interface\\Minimap\\Tracking\\Banker" }, + { name = "Battle Master", icon = "Interface\\Minimap\\Tracking\\BattleMaster" }, + { name = "Class Trainer", icon = "Interface\\Minimap\\Tracking\\Class" }, + { name = "Flight Master", icon = "Interface\\Minimap\\Tracking\\FlightMaster" }, + { name = "Food & Drink", icon = "Interface\\Minimap\\Tracking\\Food" }, + { name = "Innkeeper", icon = "Interface\\Minimap\\Tracking\\Innkeeper" }, + { name = "Mailbox", icon = "Interface\\Minimap\\Tracking\\Mailbox" }, + { name = "Profession Trainer", icon = "Interface\\Minimap\\Tracking\\Profession" }, + { name = "Reagent Vendor", icon = "Interface\\Minimap\\Tracking\\Reagents" }, + { name = "Repair", icon = "Interface\\Minimap\\Tracking\\Repair" }, + { name = "Stable Master", icon = "Interface\\Minimap\\Tracking\\StableMaster" }, + { name = "Ammunition", icon = "Interface\\Minimap\\Tracking\\Ammunition" }, +} + +-- ============================================================================= +-- NPC tracking state (persists per session, no SavedVariables) +-- ============================================================================= + +local activeNpcCategories = {} -- name -> 1/nil + +-- ============================================================================= +-- Spellbook scanning +-- ============================================================================= + +local knownSpells = {} -- name -> spellbook index + +local function scanSpellbook() + knownSpells = {} + local trackable = {} + for _, cat in ipairs(SPELL_CATEGORIES) do + for _, s in ipairs(cat.spells) do + trackable[s] = 1 + end + end + local i = 1 + while GetSpellName(i, BOOKTYPE_SPELL) do + local name = GetSpellName(i, BOOKTYPE_SPELL) + if trackable[name] then + knownSpells[name] = i + end + i = i + 1 + end +end + +-- ============================================================================= +-- Active tracking detection +-- ============================================================================= + +local DEFAULT_ICON = "Interface\\Minimap\\Tracking\\None" + +local function isTrackingActive(spellId) + local active = GetTrackingTexture() + if not active then return nil end + if active == GetSpellTexture(spellId, BOOKTYPE_SPELL) then return 1 end + return nil +end + +-- ============================================================================= +-- Dropdown menu +-- ============================================================================= + +local dropdown = CreateFrame("Frame", "MinimapIconsDropDown", UIParent, "UIDropDownMenuTemplate") + +UIDropDownMenu_Initialize(dropdown, function() + -- Spell tracking section + local hasSpells = nil + for _, cat in ipairs(SPELL_CATEGORIES) do + local found = {} + for _, spell in ipairs(cat.spells) do + if knownSpells[spell] then + table.insert(found, spell) + end + end + if table.getn(found) > 0 then + local title = {} + title.text = cat.name + title.isTitle = 1 + title.notCheckable = 1 + UIDropDownMenu_AddButton(title) + + for _, spell in ipairs(found) do + local sid = knownSpells[spell] + local info = {} + info.text = spell + info.icon = GetSpellTexture(sid, BOOKTYPE_SPELL) + info.tCoordLeft = 0.0625 + info.tCoordRight = 0.9 + info.tCoordTop = 0.0625 + info.tCoordBottom = 0.9 + info.checked = isTrackingActive(sid) + info.func = function() CastSpell(sid, BOOKTYPE_SPELL) end + UIDropDownMenu_AddButton(info) + end + hasSpells = 1 + end + end + + -- NPC tracking section + local npcTitle = {} + npcTitle.text = "NPC Tracking" + npcTitle.isTitle = 1 + npcTitle.notCheckable = 1 + UIDropDownMenu_AddButton(npcTitle) + + for _, cat in ipairs(NPC_CATEGORIES) do + local catName = cat.name + local info = {} + info.text = catName + info.icon = cat.icon + info.checked = activeNpcCategories[catName] + info.keepShownOnClick = 1 + info.func = function() + if activeNpcCategories[catName] then + activeNpcCategories[catName] = nil + else + activeNpcCategories[catName] = 1 + end + end + UIDropDownMenu_AddButton(info) + end + + -- None option (cancel all tracking) + if hasSpells then + local none = {} + none.text = NONE or "None" + none.notCheckable = 1 + none.func = function() CancelTrackingBuff() end + UIDropDownMenu_AddButton(none) + end +end, "MENU") + +-- ============================================================================= +-- Take over native MiniMapTrackingFrame +-- ============================================================================= + +local function updateTrackingIcon() + local tex = GetTrackingTexture() + if tex then + MiniMapTrackingIcon:SetTexture(tex) + else + MiniMapTrackingIcon:SetTexture(DEFAULT_ICON) + end +end + +-- Resize to match other minimap button icons (EasyLoot etc.) +-- Native: frame 33x33 at TOPLEFT(-15,0), icon 26x26 at TOPLEFT(7,-6), border 64x64 at TOPLEFT +-- Shrink border 64->52 (diff 12), shift frame right 6 and down 6 to compensate +MiniMapTrackingFrame:SetWidth(32) +MiniMapTrackingFrame:SetHeight(32) +MiniMapTrackingFrame:ClearAllPoints() +MiniMapTrackingFrame:SetPoint("TOPLEFT", Minimap, "TOPLEFT", -9, -6) +MiniMapTrackingIcon:ClearAllPoints() +MiniMapTrackingIcon:SetWidth(18) +MiniMapTrackingIcon:SetHeight(18) +MiniMapTrackingIcon:SetPoint("CENTER", MiniMapTrackingFrame, "CENTER", -1, 1) +MiniMapTrackingBorder:ClearAllPoints() +MiniMapTrackingBorder:SetWidth(52) +MiniMapTrackingBorder:SetHeight(52) +MiniMapTrackingBorder:SetPoint("TOPLEFT", MiniMapTrackingFrame, "TOPLEFT", 0, 0) + +-- Always show the tracking frame (native hides it when no tracking active) +MiniMapTrackingFrame:Show() +updateTrackingIcon() + +-- Prevent the native OnEvent from hiding the frame +MiniMapTrackingFrame:SetScript("OnEvent", function() + if event == "PLAYER_AURAS_CHANGED" then + updateTrackingIcon() + end +end) + +-- Left-click opens dropdown, right-click cancels tracking (native behavior) +MiniMapTrackingFrame:SetScript("OnMouseUp", function() + if arg1 == "LeftButton" then + scanSpellbook() + ToggleDropDownMenu(1, nil, dropdown, MiniMapTrackingFrame, 0, 0) + elseif arg1 == "RightButton" then + CancelTrackingBuff() + end +end) + +-- Keep native tooltip but add hint text +MiniMapTrackingFrame:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMLEFT") + GameTooltip:SetTrackingSpell() + if not GetTrackingTexture() then + GameTooltip:AddLine("Tracking") + end + GameTooltip:AddLine("Click to select tracking", 0.5, 0.5, 0.5) + GameTooltip:AddLine("Right-click to cancel", 0.5, 0.5, 0.5) + GameTooltip:Show() +end) + +-- ============================================================================= +-- Events +-- ============================================================================= + +local events = CreateFrame("Frame") +events:RegisterEvent("PLAYER_LOGIN") +events:RegisterEvent("SPELLS_CHANGED") +events:RegisterEvent("PLAYER_AURAS_CHANGED") + +events:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" or event == "SPELLS_CHANGED" then + scanSpellbook() + end + MiniMapTrackingFrame:Show() + updateTrackingIcon() +end) + +-- ============================================================================= +-- Slash command +-- ============================================================================= + +SLASH_TRACKING1 = "/tracking" +SlashCmdList["TRACKING"] = function() + scanSpellbook() + ToggleDropDownMenu(1, nil, dropdown, MiniMapTrackingFrame, 0, 0) +end diff --git a/src/minimapicons/addon/MinimapIcons.toc b/src/minimapicons/addon/MinimapIcons.toc new file mode 100644 index 0000000..2e4cc19 --- /dev/null +++ b/src/minimapicons/addon/MinimapIcons.toc @@ -0,0 +1,6 @@ +## Interface: 11200 +## Title: MinimapIcons +## Notes: Minimap tracking spell dropdown +## Version: 1.0 + +MinimapIcons.lua \ No newline at end of file diff --git a/src/minimapicons/assets/Interface/Minimap/Tracking/Ammunition.blp b/src/minimapicons/assets/Interface/Minimap/Tracking/Ammunition.blp new file mode 100644 index 0000000000000000000000000000000000000000..7e4c84a3889c461a7d4cc6ececbee9c763fb17c6 GIT binary patch literal 2564 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 literal 0 HcmV?d00001 diff --git a/src/minimapicons/assets/Interface/Minimap/Tracking/Food.blp b/src/minimapicons/assets/Interface/Minimap/Tracking/Food.blp new file mode 100644 index 0000000000000000000000000000000000000000..94db74add63fce58eb7fd97dd79b19656a448a00 GIT binary patch literal 2564 zcmeHHZ%kWN6hH5^Y;Cky;u;{x`i9;7usNv;F*DHzelTw_S?7G%O{}aVA}q|=M3W7$ zP;p7!=J@N}Mv)aT46GxItr|cGFd_q$L>r;ZtuRI-3+Wi69i+VLdFXSM55_Nk<0L2d z{c`U;zu!6UoSXTQ;YkVrXvKPp!BzAcIl2N}3GfU06#8BC|7>_4FerK1RXwU5)+AZ&eYrmUB!(+Qk&+*Jb7R z#X|g?`D^6QGou2MWgz~+uih(->HoRTrhXu1v%4W&nLJjRJSy@3MvHu>6PQ2wG|O8P z4Prj_Sx|VJRc(Y|FtosIqtn;?gGIu_o#)@F`>eKJ!ruj7EO>d}4*JF&tDr?abzzpV z-U1kyvktu4e}|L=oocW5OQ;W(C687*#w7j-btLX#ePt|t6u|5CYNU91H_d1Fj>|Sn z`19G!vj(HzCgDJbEq~*6->8H;!}CotilXl0l3+tOd1Gdo%y*LoZCBXiX3^U3Ve%+J z;*Xm%y{#WGx1=Dyrk3Z4AZDwE#v%5Z9j$E_qf!MCje%6(gyUl z8?o%Ofn)j}zhHe~@{D8b%>DdV_uqqQ>E`h$J=f$LDmrikSnOvvHYACGo|B|nM`a+( zyND@Z58?hqDu5C9+Xu+?4N>=>3vrpTQ8>1^OcfoUS~c&oiT1+r^f$LDGFSRv^U)Gs zrbl#t;cOz#W0UOhWBQf-Jgs$5w~=k<%YHjV5)FBSkUccduX$4eV-3e@fA$s+Mx zV-h085%_-oWaP@GtHT~Qz@ELY8w8p5Fcq(+r-nfBp~~f!>e+m?F+Y-X@Ti0x!T13g zHrQn{Sa;>ZBfUuh00Y{3f7YQk&;IcVJN6IeuOz7Nz(KI#|0_Mdz!RJ$sIJjD!i<7$ ze-a3G0XXG%X&craMr-*KL>Gg^?^Sl>3xx6V7{ajzGs4AhF_`@;*jg zW_R)H7ObJXT^?0ZfB}{@^IU`;TnoRO=TB9L2w>+2 JJBwP;{s4X$_z?gA literal 0 HcmV?d00001 diff --git a/src/minimapicons/assets/Interface/Minimap/Tracking/Innkeeper.blp b/src/minimapicons/assets/Interface/Minimap/Tracking/Innkeeper.blp new file mode 100644 index 0000000000000000000000000000000000000000..be24d6946b194a2584776b24ebdbcaf8e11b7787 GIT binary patch literal 2564 zcmeHHk4sxu6h1GS_>yV+>S~SH4kL+KtSz%(n9i-SQdUz@#cXFk2i?cWfsE zI~mx?!1FV}eMs220b$#mJO}fX-j;yZSU}c)02OvA`#MGNB@VCcZX&pr!&TN*g16&O zjNifg@7;PLD#L#yKAvx#|KVv-5J%7KfE0FEMA8sW3Ob(_mnQ2 zze;d_Fh5uB9&~jsu`6S2BxPm5#4NRar0;>&n{xG^QldAN+~p8=^@>%PhO0jt<01gj z`AZ5RB@`0A_4(6#W?b+k!TUo;D)oQxECiP>J}5q9eLPEW|4jF(>GCuBDEySV`o-WI zlf?kFx*8;e6Lu+X38FudgvGmhYgJftQ$NnBGaw#4uAqkFal$8_uoVt?{>GK%;sB8! zZH1OFYxZw&)n-$E(OQ|qqVY2uFG8}bw(2O;iF>48g9I0{O8qxl0z@ydzXY9LQ-`uK zo5Z71cm-Z!c6XlwaPu8#F2d0}t5X|pi+LUoI=7CYS-VT!4B+Y3pv(tVnWDV~er~-E zUqJ9?Mrr^*5yF?Kw;krUGYzUO`+F(NyX=;H>41sLw_tukKDXoFF247!w-|frs{BiBBar!FMEw06Q=w7Lmc*H3`D1#T*eOE z`8ezTnClv;*Q?X5<^6rmZx5_pj{SN$Hr_uYp>?`?%?71lc#=ym-k%P7jn`^EiDmTQ`}vB5QNEe?GVGeO!ETBo2xrnXD%eE`*ZgfjoyH#Be|XZ-z6BQtC@)qQ@#*5k+ZyWZf@f&k#` Oxy^Qk>E<4-2iw1F?$2ld literal 0 HcmV?d00001 diff --git a/src/minimapicons/assets/Interface/Minimap/Tracking/Mailbox.blp b/src/minimapicons/assets/Interface/Minimap/Tracking/Mailbox.blp new file mode 100644 index 0000000000000000000000000000000000000000..4532cb5e5ec4a2f2047b6724b11504df62561759 GIT binary patch literal 2564 zcmeHJ|8G-O6hD0}?R#w}MSO@e#usTb7^`tg7tzeE8l#Ou3fXHHEc11KN&R6^N5sjh zlui7>WlF~84_ZUB1We4dgl+waGBzv;;?_jzvRSPaNHuEQa2>QzcRg>-ZAcR~|A3w3 zpU&7l5o!S#Si>+xZ@P4RU_ zRv1`eV1eu3>XLeSuzl*Qb}J577wQp$&7w@D>)AfDj-j?Ad2WX{d-^nC zJxuM{yMnVra=gQ(Tg=yCyi-41G~AM?d9{lA*JRb|YZnQrnUvSZ&E&f50pKS)3?{s% zX}u&_H(6Kvd7Rq(gstmRIDCT410%=B2CQtO7! z7VzlfmyZz?M^a$L;j&_WN7A!Xu1xa}Mm=4E%hyEhx09PXD@~?uY9EbWJo?4R*JaeM zj+g^&DbE371tth;X1DJ;Uiv8!(za4-&=K@{tyYXR{A0i^P zb7_6A1I`xhOq^|h|76vJN0{7^^`8*|__$caS3YxS zJ$|_l(R#V`uN(cT_ndcQy<;)^=k9M)}6V&XG7SX_!j%&v7xn782!!%qdB|}{H?o1NX6{(UPNsLzDn_G z=fduG^n}ie_vsQ?VJQF@bF;*tkqsV+(ZGa~n%Yb;kYANlxzl z<-GIpe&?K9@ksSn3Lzw6(kL~YL=V!S45$L3A3-mJUIYE#0{#esn&9A8DO}fNje#`= z))@G22FQa1LJkomaao0jD4|C)u3E>#8wKVdmJ2=j&SL7ojs#AR$c1_BV7C2l+<;oZ zS;Db5ikBKc6=z-vG~e%Kw$KHM_{y?{hOaKiFy=aV#`pTAD2_pVgw&P0c*cJno6jua z1&qr#9oWG$&XUexTzO1-)yX!UwSfQQ)mFMRkQw?|HF=|Yq`JWF{J>L3lJ@I)CmfR8 zYU+F|&nWetb9kPlqt#poUC?OO%i`Hc{(X2tkutOgS&D+IkwX{tKsgM*MQrgwy`G%HFC&mAgoMpC12=Xg`vu!xk%d zan^1hq#VQAwqb2Dek$M8`he}RKyxT*$DDGC(sH$LJkK*8y-&0)w@2Q^eVAZ#{ay+7 z3fo!umkb+17I8Dee-clGJ{;`l21?kwa0E#RK7R6|`lVUFGfpkIBcrV8=}xH6+-R4z zK|kC_zewgwt!E!Hc8|fxCGAnEbgJr;qZ(m5LJHtd6~=v<5QE6P`LQU*^^j}>mwp=N zuH=r9AjTv+$v-BzT3UA|@ypgR;j_7&=4JGo`@X|&<4g_IQ(sq?n*V08;up^Lis8w8 z(tjV+7cWI>r0m)wgZhwECgNvFHQNkh0y#}$jGpQ*Yn#`+!y{DpFY|D-`BT5AAF^7d zf!!d`24kSPkjyib<71<8=ZSCo$`kuD;*Mg4FkI%`)I|6f z>m6sQT=@PY)k^$)9I)!P+3q3zQ0j|{HpJSa8RxHgFPw65=0`txbtzZdMXlE*`ZX}% z885Sg^GN23KSm1JpI!~grwoeXqU<{w<#dGze)0COh&_ZijtakpkXw>|9HUm3aWrdo zqeTt-?bw_8|EV}0+o001>noO1>VR3QN#=?^dIWg2(40%Jg+egFUf literal 0 HcmV?d00001 diff --git a/src/minimapicons/assets/Interface/Minimap/Tracking/ObjectIcons.blp b/src/minimapicons/assets/Interface/Minimap/Tracking/ObjectIcons.blp new file mode 100644 index 0000000000000000000000000000000000000000..9ab41eb34d421989fce79d32eb9dd91d47423c4f GIT binary patch literal 23060 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 GaQ#2adb0Td literal 0 HcmV?d00001 diff --git a/src/minimapicons/assets/Interface/Minimap/Tracking/Profession.blp b/src/minimapicons/assets/Interface/Minimap/Tracking/Profession.blp new file mode 100644 index 0000000000000000000000000000000000000000..af55984097ef9c8aadade0ed2b745f9efb7df16e GIT binary patch literal 2564 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 literal 0 HcmV?d00001