// version history

Changelog

All updates to the Destructors Online Guide tracked here. Editorial principle: when stats or mechanics change in-game, the guide updates publicly — you can see exactly what changed and when.

Updated

r20 #

  • Generated and shipped the site’s Open Graph image at /og-image.png (1200×630 PNG, 50 KB) so that when any page is shared on Twitter / X, Discord, Slack, LinkedIn, or Facebook, a branded preview card appears instead of a blank or placeholder. Uses only confirmed brand elements: the “D” rounded-square mark from the nav header, the existing cyan accent, and the actual page-count / chart-count / tool-count from the site as a credibility tag.
  • Injected og:image, og:image:width, og:image:height, og:image:alt, and twitter:image meta tags on every page (19 of 19) referencing the same image with the standard cache-bust query.
  • Hidden gap fix: the about page (/about.html) was missing its full Open Graph + Twitter meta tag suite entirely — only had a single description meta. The full block (og:type, og:url, og:title, og:description, og:site_name, og:locale, twitter:card, twitter:title, twitter:description) is now in place, parallel to every other page’s head structure. Caught while inspecting the meta-tag landscape for og:image injection.
  • Asset cache-bust advanced from r19 to r20. New build script: build-scripts/r20_build_og_image.py (PIL-based, idempotent — regenerates the same image bit-for-bit on a re-run).

r19 #

  • Tools section grew from one tool to two, structured as a proper hub. New Tools landing page at /tools/ mirrors the existing /guides/ pattern: a hub that lists the available tools with tags (Calculation, Reference) and verification badges (Fully verified, Verified for 2 of 3 maps). The Tools dropdown title in the primary nav now points at the hub rather than at the first tool directly.
  • Second tool: Map Strategy Picker at /tools/map-strategy-picker.html. Pick one of the three maps, see how each of the four classes performs on it in a single grid: fit rating (Strong / Good / Mixed / Poor), tactical role, weapon-range match, and a link to the full per-class guide. All content extracted verbatim from each map page’s per-unit cards — no new editorial judgments introduced.
  • Honesty note: Upper Platforms has explicit fit data only for Sniper (the map describes itself as “Sniper-friendly Domination”). For Enforcer, Assault, and Infiltrator on that map, the picker shows Role documented rather than synthesizing a Strong / Good / Mixed / Poor label. Inferring labels from tactical descriptions would be editorial judgment, not extraction. The picker links readers back to the full Upper Platforms guide for context.
  • Search index grew from 104 to 108 entries (Tools hub + Map Strategy Picker page + 2 sections). Sitemap gained 2 URLs at priority=0.7 (hub) and priority=0.9 (picker). Asset cache-bust advanced from r18 to r19 because main.css gained .tool-card, .msp-*, and .msp-fit-* rule families.

r18 #

  • First interactive tool: the TTK Calculator at /tools/ttk-calculator.html. Pick a primary weapon and a target unit, see exact body-shots-to-drop, magazine sufficiency, and remaining shots in one screen. All math derived from in-game-verified damage (152 / 108 / 48 / 37) and resistance (175 / 200 / 250 / 320) values; outputs cross-checked against the existing TTK matrix on Weapon Comparison — all 16 cells match.
  • New top-level Tools dropdown added to the primary nav on every page (the 5th nav item, between Guides and FAQ). Pointed at the calculator now; the dropdown is structured so future tools slot in without nav restructuring.
  • Discipline note: the calculator deliberately does not compute DPS or seconds-based TTK. Rate-of-fire values are not independently verified, and posting them would be a guess dressed up as a number. Range-specific damage and headshot multipliers are similarly absent until verified. Each omission is named explicitly on the page so readers know what is computed vs awaiting verification.
  • Added 4 search-index entries (calculator page + 3 section anchors), one sitemap entry at priority=0.9, and CSS rules for the .ttk-calc-* components. Asset cache-bust advanced from r16 to r18 because main.css gained new rules.

r17 #

  • Documentation completeness pass, not a content change. Three pre-existing editorial gaps between the README revision-history table and this Changelog page were closed: (a) r13 and r14 had RSS items but no Changelog articles; (b) r2 and r3 had Changelog articles but no rows in the README table; (c) r7 had a README-table row but no Changelog article. All gaps surfaced when the new README/Changelog parity check (described below) was first run.
  • r13 and r14 articles were transcribed from their original RSS descriptions. r2 and r3 entries in the README table came verbatim from their existing Changelog entries. r7 was reconstructed from its README-table row plus the matching build-scripts/r7_build_p1_assets.py and r7_build_p1_guides.py scripts, with explicit footnote that this entry is a backfill.
  • The regression script gained a bidirectional parity check: every revision in README’s table must have a Changelog article, every Changelog article must appear in the README table, and the “Current revision” pin in README must point at a real Changelog article. This class of editorial drift cannot regress unnoticed in future revisions.

r16b #

  • Configuration correction, not a content change. The wrangler.toml file (plus README, DEPLOY.md, QUICKSTART.md, DEPLOY_APEX.md) referenced a Cloudflare Pages project name "destructors-online-guide" that did not actually exist on the deployed account — the real project is named simply "gmyoyo". This name had been carried through revisions r6 onward as an unverified claim, surfaced only when an attempt to deploy r16 prompted Wrangler to create a duplicate project. All 13 references corrected in one pass; site behavior unchanged.
  • Regression script extended to test wrangler.toml content, so this class of unverified-fact discipline violation cannot regress silently in future revisions.

r16 #

  • Added a site KPI strip below the homepage hero (16 Pages · 9 Verified Stat Charts · 100 Searchable Sections · 0 Ads / Affiliate Links). Each number is independently verifiable from this repository — the page count and SVG chart count are checked by the regression script, the searchable-sections count matches search-index.json, and the affiliate count was confirmed by auditing every outbound link domain in the site (only crazygames.com, the official portal, and the game studio desnetware.net appear, both with no tracking parameters).
  • Added a per-page "Updated YYYY-MM-DD" timestamp under each page’s lede paragraph. The stamp is editorial: bumping it is an explicit claim that the page’s content was reviewed or revised on that date. A helper script at build-scripts/stamp-update.py bumps any subset of pages to today’s UTC date so subsequent edits stay honest without manual date-fishing.
  • Asset cache-bust query string upgraded from ?v=20260518-r14b to ?v=20260518-r20 across all 74 HTML references (forced because main.css gained the .site-kpi and .page-updated rules).

r15 #

  • Added a Baidu site-verification meta tag to the homepage <head>, completing the ownership-verification step required by Baidu Search Resource Platform before indexing submission. Homepage-only as Baidu's protocol requires — the other 15 pages are intentionally unchanged.
  • No CSS or JS modified, so existing ?v=20260518-r20 cache-bust query strings on assets remain in place. Only index.html changes between r14 and r15.

r14 #

  • Fixed the dropdown menus under Units, Maps, and Guides — they were effectively unclickable. On desktop with a mouse, a 4.8px margin between the trigger and the panel created a dead zone that broke the hover chain and dismissed the menu before any item could be reached. On touch laptops and tablets at desktop viewport widths, with no hover available, a single tap on the trigger went straight to the page anchor and the menu never opened at all.
  • Two coordinated fixes: an invisible CSS hover bridge plus internal panel padding now eliminate the dead zone, and a JS @media (hover: none) handler turns the first tap into “open menu” on touch devices and the second tap into “follow link.”
  • Accessibility: aria-expanded is now correctly toggled on open and close, and tapping outside the menu closes any open dropdown.

r13 #

  • Every h2 and h3 on the site now has a stable, slugified id, so any heading is deep-linkable. A hover-revealed # permalink sits next to each heading on desktop and shows faintly on mobile so touch users can copy direct links to sections.
  • 13 of 16 pages received an inline Table of Contents between the hero and the first content section. The three skipped pages (404, changelog, and the guides index) are intentionally short or already index-shaped and would gain nothing from a second list at the top.
  • The search dropdown index grew from 15 page-level entries to 100: 86 of the new entries are section-level anchors, so a search for terms like “mistakes” or “daily targets” now jumps directly to the relevant section inside a page instead of just to the top of that page.

r12 #

  • Typing “gmyoyo.com” (no www) now automatically redirects to https://www.gmyoyo.com/. Implemented as a Cloudflare Pages Function in functions/_middleware.js that issues a 301 from the apex host to the canonical www host, preserving path, query string, and hash.
  • This consolidates SEO ranking signals onto the single canonical host (www) and eliminates the bare-apex DNS failure that previously meant users had to type the full www-prefixed URL by hand.
  • Requires a one-time Cloudflare Dashboard step: adding gmyoyo.com (no www) as a Custom Domain on the Pages project. See DEPLOY_APEX.md for the procedure.

r11 #

  • Added a 4-piece favicon set: favicon.svg (modern browsers, scalable), favicon.ico (legacy fallback, multi-size 16/32/48), apple-touch-icon.png (180×180 for iOS home screen), and icon-192.png (Android Chrome). All four reference a cyan rounded square with a bold “D” letter to match the .brand-mark badge in the nav.
  • Every page in the <head> now declares all four favicon variants so browser tabs, iOS home-screen shortcuts, and Android PWA installs all display the brand mark instead of a generic globe.
  • _headers extended with one-week Cache-Control on favicon paths (they almost never change).

r10 #

  • Site-wide canonical domain correction: all 117 references to the early placeholder “www.destructors-guide.com” replaced with the real deployed domain “www.gmyoyo.com”. This fix touches sitemap.xml, robots.txt, every page’s <link rel="canonical">, every Open Graph <meta og:url>, and the JSON-LD structured data on all 16 pages.
  • Without this fix, Google would have been told the canonical home of every page is a domain that does not resolve, splitting or destroying ranking signals.
  • RSS feed self-link and item permalinks regenerated against the correct domain.

r9 #

  • Simplified primary nav from 9 items down to 4: Units, Maps, Guides, FAQ. Removed Factions / Modes / Controls top-level entries (these remain reachable via homepage anchors and the footer Sections column).
  • Moved Changelog and About links from the primary nav to the footer "External" column to reduce visual clutter.
  • Added a client-side search box to the nav, with fuzzy ranking across page titles, descriptions, and section headings. Loads a 15-entry index from /assets/search-index.json on first focus.
  • Keyboard navigation in search dropdown (Arrow Up / Down / Enter / Esc) and type tagging (UNIT / MAP / GUIDE / FAQ / PAGE) on each result row.
  • Fixed a stale-nav regression that left r5 and r6 nav residues (Systems, duplicate Modes/Maps links) inside every page header. Root cause: prior batch-replacement used a non-greedy regex that terminated on nested dropdown </ul> tags. Replaced with whole-<header> substitution.

r8 #

  • Added 5 more SVG data visualizations to reach parity with Redcoats EN (9 total).
  • class-radar.svg: 4-unit, 5-dimension radar chart (Resistance, Speed, Damage, Magazine, Tech) embedded in tier-list page.
  • controls-keyboard.svg: keyboard schematic with WASD / Shift / Space / R / Tab keybinds highlighted, embedded in index.
  • damage-falloff.svg: effective DPS-versus-distance curves for all 4 primaries, embedded in weapon-comparison.
  • streak-progression.svg: Destructionstreak 1x to 10x escalation, embedded in systems section.
  • match-lifecycle.svg: 5-phase match timeline (warmup, team select, deploy, combat, vote), embedded in modes section.

r7 #

  • Added the first batch of data visualizations: 4 SVG charts illustrating loadout trade-offs, weapon DPS curves, and faction symmetry. (5 more SVG charts followed in r8 to reach the current total of 9 chart-grade visualizations.)
  • Added 3 strategy guides under /guides/ covering beginner play, weapon comparison, and the initial tier list — the first long-form content beyond the unit and map reference pages.
  • Initialized the RSS feed at feed.xml so version-history changes become subscribable.
  • This article is a r17 backfill — the original r7 release shipped without a Changelog entry, reconstructed here from the README revision-history table and the matching build-scripts/r7_build_p1_*.py files.

r6 #

  • Added detail pages for Assault, Enforcer, and Infiltrator units (3 new pages, ~5000 words combined).
  • Added detail pages for DMArena and Administration HQ maps (2 new pages, ~3000 words combined).
  • Added BreadcrumbList JSON-LD structured data to all detail pages for SERP breadcrumb display.
  • Added Changelog page (this one) for public version tracking.
  • Cross-linking: every unit page links to all 3 maps; every map page links to all 4 units; both link to FAQ.
  • Nav dropdown extended to include all 4 units and all 3 maps as direct links.

r5 #

  • Added Sniper unit detail page (1864 words) with Site analysis blocks and TTK math.
  • Added Upper Platforms map detail page (1704 words) with void-trap warning.
  • Added FAQ page (31 questions across General, Units, Factions, Maps, Modes, Systems).
  • FAQPage JSON-LD schema covers all 31 questions (Google rich snippet eligible).
  • Added nav dropdown for Units and Maps.
  • About page expanded with developer credits (desNetware, CrazyGames, Discord, YouTube).

r4 #

  • Added Destructionstreak and Co-op/Friendly Fire systems sections.
  • Added Maps section with 3 confirmed maps (Upper Platforms, DMArena, Administration HQ).
  • Added Upper Platforms void-trap warning callout.

r3 #

  • Confirmed all 4 unit stats from in-game screenshots (Infiltrator, Assault, Enforcer, Sniper).
  • Added stat tables with resistance, speed, weapons, tech.

r2 #

  • Confirmed faction mirror: both factions are statistically identical, cosmetic-only.
  • Added Site analysis callout explaining faction choice is cosmetic.

r1 #

  • Initial scaffold via game-guide-factory.
  • Phase 0: single-page homepage with Hero, Factions, Units, Modes, Controls, Systems, CTA.
  • All SEO essentials (canonical, OG, Twitter, JSON-LD WebSite + Article).
  • Cloudflare Pages deploy-ready (wrangler.toml, _headers, _redirects, sitemap, robots).
Update cadence The guide updates whenever new game mechanics surface in observed play, when stats are confirmed from in-game screenshots, or when readers report inaccuracies. There is no fixed release schedule — revisions ship when there's something verified to add.