(function () {
// 1) Basic bot filter (extend if you like)
function isBot() {
return /(bot|crawl|spider|google|bing|slurp|yandex|facebook|linkedin|pinterest|preview|whatsapp|discord|telegram|headless|puppeteer)/i
.test(navigator.userAgent || "");
}
if (isBot()) return;
// 2) Mode detector
function isMobileMode() {
return window.matchMedia("(max-width: 767px)").matches ||
/Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent || "");
}
// 3) Your ad configs (swap keys/sizes to match your network units)
const AD = {
mobile: { key: "aa6d52a6037d0558c2a19dc52b6aa824", width: 320, height: 50 }, // 320x50
desktop: { key: "a49752dcde88f4fde5987d25efbb7168", width: 468, height: 60 } // 468x60
};
// 4) Create container if it doesn't exist
function ensureContainer() {
let container = document.getElementById("ad-container");
if (!container) {
container = document.createElement("div");
container.id = "ad-container";
container.style.display = "none";
document.body.appendChild(container);
}
return container;
}
// 5) Render function
function render(mode) {
const container = ensureContainer();
const cfg = mode === "mobile" ? AD.mobile : AD.desktop;
// Set global atOptions for ad network
window.atOptions = {
key: cfg.key,
format: "iframe",
height: cfg.height,
width: cfg.width,
params: {}
};
// Clear previous ad/script then inject
container.innerHTML = "";
container.style.display = "block";
const s = document.createElement("script");
s.src = `//selfportraitproved.com/${cfg.key}/invoke.js`;
s.async = true;
container.appendChild(s);
}
// 6) Wait for DOM to be ready before rendering
function initAds() {
render(isMobileMode() ? "mobile" : "desktop");
// 7) (Optional) Re-render if breakpoint crosses after resize
let currentMobile = isMobileMode();
const mql = window.matchMedia("(max-width: 767px)");
if (mql.addEventListener) {
mql.addEventListener("change", (e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
} else if (mql.addListener) { // older browsers
mql.addListener((e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
}
}
// 8) Execute when DOM is ready
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initAds);
} else {
initAds();
}
})();
Prominent streamer and Team Liquid pro Mendo discussed the state of Overwatch 2’s tanks and their damage potential during one of his streams.
In the clip, Mendo was playing Roadhog on the New Queen Street map with a friend. While hooking two different enemies and effortlessly taking them out, Mendo said “I am the DPS.” The two went on to discuss how powerful tanks feel in the beta. When referring to an enemy he destroyed, Mendo said “it’s bizarre how I can do that as a tank with 700 HP.”
Despite his surprise, Mendo doesn’t think that tanks are overpowered. In an extended discussion outside of the clip, he showed off his high damage numbers after fighting a three-vs-five with his team as Roadhog. But Mendo mentioned that because each team now only has one tank per the required roles, he believes tanks are actually balanced correctly.
Significant changes were made to the tank category for the Overwatch 2 beta. All tanks now have 30 percent knockback resistance, but they also generate 30 percent less ultimate charge from damage and healing taken. Doomfist was moved from the damage role to the tank role, and Orisa was given a wide-ranging offense-based rework. These changes have made tanks a more popular pick than they’ve been in ages thanks to their increased offensive potential, which is exactly what Mendo demonstrated and discussed.
👉 For more insights, check out this resource.
While balance changes will almost certainly be made to most tanks come the final release of Overwatch 2’s PvP, it’s also likely that powerful tanks are here to stay.
👉 Discover more in this in-depth guide.