造界 AI GAME STUDIO

Submission Guidelines

Version 1.0 · 13 November 2026

Read this before you upload a game. Items marked Required are checked automatically: if one fails, the upload cannot be submitted until you fix it and upload again.

At a glance

LevelWhat it covers
RequiredChinese + English that follows the site language; an index.html entry; no security violations; no prohibited content; allowed file types; up to 100MB; a cover; a specific version note
WarningEnglish-only games that ignore the site language; images over 2MB each or 40MB in total; over 150MB unpacked; files over 30MB; external resources; eval; save keys without a prefix
TipMissing viewport or <title>; no level events; description length

1. Package

2. Security (required)

These are rejected: obfuscated code, service workers, crypto miners, password fields, reading document.cookie, clipboard access, embedded keys or API keys, prompt injection, and access to parent. / top. / opener.. Use postMessage to talk to the platform.

3. Chinese / English, linked to the site (required)

ChannelValue
window.ZJ.lang"zh" or "en". It is injected at the top of <head>, so your first script can read it.
?lang= in the URLen for English; no parameter means Chinese. Use it to test the game on its own.

Put this at the top of your first script:

const LANG_EN = (() => {
  try {
    return (window.ZJ && ZJ.lang === "en") || new URLSearchParams(location.search).get("lang") === "en";
  } catch (e) { return false; }
})();
const TR = (zh, en) => (LANG_EN ? en : zh);
if (LANG_EN) document.documentElement.lang = "en";

// in code:   TR("游戏结束", "Game over")
// in HTML:   <span data-en="Start">开始</span>
if (LANG_EN) document.querySelectorAll("[data-en]").forEach((e) => { e.textContent = e.dataset.en; });

The check fails if the game has Chinese text and never reads ZJ.lang or ?lang=. After uploading, use Play in English mode on the check report to play the game in English before you submit.

4. Saves and storage

5. Platform API: window.ZJ

Always check that it exists first, so the game also runs on its own: if (window.ZJ && ZJ.event) …

APIUse
ZJ.langThe current language (section 3).
ZJ.event("level_clear", n) / ZJ.event("level_fail", n)Report a cleared or failed level. Recommended for games with levels.
await ZJ.gate({ level: n })Optional break between levels. Continue when the promise resolves.

6. Images and media

ItemRequirements
Cover (required)3:2 landscape, at least 1200×800 (1536×1024 recommended), PNG / JPG / WebP / GIF, up to 5MB. Keep the subject centered and use little text. Generate one with AI or upload and crop.
LogoSquare, at least 128×128 (512×512 for partners), PNG / JPG / WebP, up to 2MB. By default it is cut from the cover.
Intro video (optional)MP4 (H.264), up to 8MB and 10 seconds.
Images in the packageUp to 2MB each and 40MB in total is recommended. Use WebP for large images.

7. Text and version notes

8. Self-check before submitting

  1. I played it in English mode: menus, hints and results are all in English, and the game switches when the site language switches.
  2. Progress is saved with localStorage / IndexedDB under game-specific key names, and it survives a refresh.
  3. It plays on a phone in portrait, the first screen needs no scrolling, and no buttons are covered.
  4. Images are compressed (each ≤ 2MB), and nothing is loaded from other websites.
  5. The content is original or licensed, with no illegal, gambling, sexual or gory content.

9. Review

Upload, then the automatic check runs. You complete the details and the self-check, then submit. A reviewer then plays the game in both languages before it goes live. If it is not approved, the reason is shown on your game.