{
  "id": "tower",
  "title": {
    "zh": "摩天塔楼",
    "en": "Tower Building"
  },
  "description": {
    "zh": "抓准吊钩摆动时机，点击落下楼层，连续完美堆叠获得更高分。三次失误后挑战结束。",
    "en": "Time the swinging crane and drop each floor to build a skyscraper. Chain perfect landings for bonus points; three missed floors end the run."
  },
  "upstream": {
    "url": "https://github.com/iamkun/tower_game",
    "commit": "c6fa84afe179b661fa71cf7cc8788d0c47ca2875",
    "license": "MIT",
    "copyright": "Copyright (c) 2018 BMQB, Inc",
    "licenseConflict": "package.json says ISC; root LICENSE and README explicitly say MIT. The root LICENSE governs this port."
  },
  "entry": "index.html",
  "controls": {
    "zh": "点击开始；鼠标点击或触屏轻点游戏区域落下楼层；游戏结束后点击 REPLAY 重新开始。横竖屏自动适配。",
    "en": "Click Start; click or tap the game area to drop a floor. Click REPLAY after three misses to restart. Portrait and landscape supported."
  },
  "rules": {
    "lives": 3,
    "successScore": 25,
    "perfectBonus": 25,
    "consecutivePerfectBonus": "25 additional points per consecutive perfect landing; original code unchanged"
  },
  "runtimeDependencies": [
    {
      "name": "cooljs",
      "version": "1.0.4",
      "license": "ISC",
      "author": "iamkun",
      "source": "https://registry.npmjs.org/cooljs/-/cooljs-1.0.4.tgz",
      "licenseFile": "licenses/cooljs-ISC.txt",
      "note": "Original npm/Git contain only an ISC package declaration, no LICENSE. Standard full ISC text supplied with package author attribution; original package archived.",
      "integrity": "sha512-FOtDTP4ZBnvZaQLUYaeWbI5QvxSdMEhh01v/f+nydlcgz+WxDvew7lSjMXT5BsWCD04SmMSovNZIUQHdqJ84ZA==",
      "sha256": "54a44cac6746c594c4ecd6a3dd9ef9d0cfc7d2681e0b9100b4d05dc317755f38"
    },
    {
      "name": "Zepto",
      "version": "1.1.6",
      "license": "MIT",
      "licenseFile": "licenses/zepto-MIT.txt",
      "licenseSource": "https://github.com/madrobby/zepto/blob/v1.1.6/MIT-LICENSE"
    }
  ],
  "assetReview": {
    "scope": "All tracked original images, audio, fonts, source and notices checked. No separate image/audio license exclusions or specific commercial attribution found. Root MIT retained. Asset authorship not independently verified.",
    "excludedFonts": [
      "assets/wenxue.eot",
      "assets/wenxue.woff",
      "assets/wenxue.ttf",
      "assets/wenxue.svg"
    ],
    "fontReplacement": "System Arial/Liberation Sans; excluded fonts removed from runtime and published archive because independent permission could not be established."
  },
  "sourceArchive": {
    "path": "upstream/tower_game-c6fa84afe179b661fa71cf7cc8788d0c47ca2875.tar.gz",
    "note": "All tracked upstream files except the four explicitly excluded font files. Original src/ is complete and unmodified; original index.html and dist are preserved in the archive for historical rebuilding only. Archived index includes the original analytics and font references; it is not the served entry.",
    "sha256": "2e3d747995707535d2b7282b2e6d5cc577a7097ec545f5ef5b433d12268a2a21"
  },
  "localModifications": [
    "Removed Google Analytics scripts and all runtime remote dependencies.",
    "Added literal noindex, follow robots meta and visible SOURCE.json link.",
    "Fit original portrait canvas and menus into iframe and phone landscape; preserve a live game across viewport resizing.",
    "Trusted same-origin parent gamehub:setMuted bridge; mute all loaded engine audio, handle rejected audio.play promises, start background music on user gesture.",
    "Replaced four unaudited bundled fonts with system font and excluded them from published source archive.",
    "Pinned modern esbuild 0.25.11 build for original unmodified src and vendored cooljs 1.0.4; no gameplay modifications.",
    "Replaced cache-busting query-string restart with reload; local game does not depend on WeChat bridge."
  ],
  "rebuild": "See README.md. npm ci && npm run build in this directory; checked-in dist/main.js is playable without install or network.",
  "verification": {
    "script": "scripts/check-batch2-tower.mjs",
    "viewports": [
      "1000x750",
      "390x844 touch",
      "844x390 touch"
    ],
    "artifacts": "/tmp/gamehub-batch2-tower/",
    "result": "Passed: start, scoring, three failed drops, replay while muted, live resizing, trusted same-origin parent mute/unmute, wrong source/origin rejection. Zero external requests, browser errors or failed local resources in all viewports.",
    "bundleSha256": "a5f86b414bfd4625a02fc7427936cc5df1e5e1626f0e5e66f41a2790724839da",
    "rebuild": "Clean temporary directory npm ci + npm run build produced a byte-identical dist/main.js."
  },
  "repository": "https://github.com/iamkun/tower_game",
  "commit": "c6fa84afe179b661fa71cf7cc8788d0c47ca2875",
  "license": "MIT"
}
