No description
  • JavaScript 100%
Find a file
2026-08-07 22:50:28 +02:00
assets Keep genre and subgenre consistent when the genre changes 2026-08-07 22:45:27 +02:00
.gitattributes Extend gitattributes 2026-08-07 22:50:28 +02:00
index.html Keep genre and subgenre consistent when the genre changes 2026-08-07 22:45:27 +02:00
README.md Add a README covering the app and how to serve it 2026-08-07 22:45:31 +02:00

Mad Games Tycoon 2 — Genre Guide

A single-page, zero-dependency slider cheat sheet for Mad Games Tycoon 2.

Pick a main genre and a subgenre, and the page shows the exact Design Focus, Design Direction and Design Priority values that combination wants — plus the target groups it sells to and the list of topics that actually fit the genre. No more alt-tabbing into a Steam guide and scrolling through a 400-row table mid-development.

Everything is static: one HTML file, one stylesheet, one JavaScript bundle. No build step, no package manager, no backend, no database, no telemetry.


What it does

  • Genre + subgenre picker — 21 genres (19 base game + 2 RealismMod), every valid combination the game allows.
  • Design Focus — the 8 slider values for the combo: Game Length, Game Depth, Beginner Friendliness, Innovation, Story, Character Design, Level Design, Mission Design (010).
  • Design Direction — the 3 alignment sliders: Core/Casual, Nonviolent/Explicit, Easy/Hard (010).
  • Design Priority — the percentage split across Gameplay / Graphics / Sound / Technical (always sums to 100), taken from the main genre.
  • Possible Target Group — the audiences the genre sells to: Kid, Teen, Adult, Old, All.
  • Topic pickers — main topic and subtopic lists are filtered to the topics that suit the selected genre, sorted alphabetically in the active language.
  • 20 languages — click a flag in the top-right corner to switch; the choice is remembered in localStorage (latest_locale).

Selecting a genre with subgenre left at Nothing gives the solo-genre values.

Coverage

Data Count
Genres 21 (IDs 020; 19 base + MOBA and Battle Royale from RealismMod)
Slider sets 441 (21 solo + 420 genre/subgenre combinations)
Topics 303, translated into all 20 languages
Languages AR, CH, CT, CZ, EN, ES, FR, GE, HU, IT, JA, KO, LA, PB, PL, RO, RU, TH, TU, UA

Genre names exist in 18 of the 20 languages; Romanian (RO) and Latin American Spanish (LA) fall back to the English genre names. Topic names are complete in every language.


Running it

There is nothing to install and nothing to compile. You only need something that serves the directory over HTTP — a full webserver is entirely optional.

Quick start: Python's built-in server

From the repository root:

python -m http.server 8000

Then open http://localhost:8000.

On most Linux distributions and macOS the binary is python3:

python3 -m http.server 8000

Serve it to the rest of your LAN with --bind (default is all interfaces on older Python versions, localhost-only on newer ones):

python3 -m http.server 8000 --bind 0.0.0.0

http.server is a development server — single-threaded and not hardened. Perfect for a quick local look or a trusted LAN; put a real webserver in front of it if you expose it to the internet.

Other one-line servers

Any of these work equally well — run them from the repository root:

Tool Command
Node (no install) npx serve .
PHP php -S localhost:8000
Ruby ruby -run -e httpd . -p 8000
BusyBox busybox httpd -f -p 8000
Caddy caddy file-server --listen :8000
darkhttpd darkhttpd . --port 8000
Docker + nginx docker run --rm -p 8000:80 -v "$PWD:/usr/share/nginx/html:ro" nginx:alpine

Full webserver

Point the document root at the repository and you are done — no rewrite rules, no PHP, no proxying. nginx:

server {
    listen      80;
    server_name mgt2.example.com;
    root        /srv/mgt2-genre-guide;
    index       index.html;
}

Apache: drop the directory into your DocumentRoot or point an Alias at it — index.html is served by default, and no .htaccess is required.

Assets are versioned with ?id=… cache busters in index.html, so you can cache assets/ aggressively; bump the query string whenever you change a file.

Can I just double-click index.html?

Mostly, yes. All asset paths are relative, so opening the file straight off disk via file:// loads and renders fine in Chromium-based browsers. The catch is localStorage: the language choice is stored there, and browsers that restrict storage on file:// origins will at best forget your language and at worst leave you with a blank page. A local server avoids the whole question — hence python -m http.server.

Hosting under a subpath

Nothing to configure. Relative asset paths mean the page works at a domain root (https://mgt2.example.com/) and equally under a subdirectory, including a GitHub Pages project page at https://user.github.io/MadGamesTycoon2-GenreGuide/.

One thing worth knowing before you publish: index.html carries <meta name="robots" content="noindex,nofollow">, so search engines are asked to skip the page. Remove that line if you want a public deployment to be indexable.


Offline use

The app itself is fully offline-capable — genres, topics, translations and every slider value are baked into the bundle, and nothing is fetched at runtime. The only external request is the locale flag images, which come from flagpedia.net. Without internet access the flags render as broken images; the language switcher still works, and everything else is unaffected.


Project layout

.
├── index.html            # Page shell: mounts the app into #app
└── assets
    ├── css/style.css     # Tailwind build (unpurged)
    └── js/main.js        # Minified Vue 2 bundle — app logic *and* all data

How the data is stored

There is no build source in this repository. All content lives in three JSON.parse('…') string literals inside the minified bundle:

Blob Contents
As Genres, keyed by numeric-string ID — themes (suitable topic indices), NAME <LOCALE>, TGROUP, GAMEPLAY/GRAPHIC/SOUND/CONTROL, GENRE COMB (valid subgenres)
Ds Topic names per language: 20 locales × 303 index-aligned entries
Ms The slider matrix — Ms[mainGenre][subGenre] = { align, focus }, where subgenre key "-1" means no subgenre

Editing means parsing the blob, mutating it, re-serialising, and splicing it back into the bundle at the same offset — then bumping the ?id= cache buster in index.html. As and Ms round-trip cleanly through JSON.parse/JSON.stringify; Ds does not (BOM and escape differences), so patch it as text rather than re-serialising it.

Changes on top of the original build

The bundle is patched directly, since no build source exists:

  • Added the RealismMod genres MOBA (ID 19) and Battle Royale (ID 20), with their full slider sets.
  • Fixed the locale flags — Chinese, Japanese and Korean pointed at nothing, Arabic and Latin American Spanish pointed at the wrong countries, and all of them now render at a uniform size.
  • Made the bundle's <script src> relative, so the page works under any subpath.
  • Fixed two crashes in the genre watcher: switching the main genre while a now-invalid subgenre was still selected left the previous combination's numbers on screen, and Reset (or picking the "Select Genre" placeholder) threw a TypeError. The subgenre now falls back to Nothing, and clearing the genre clears the panels.

Credits

  • Slider, target-group and topic dataFenomeN's Guide - Sliders, Release dates [ENG] [UPDATED] on the Steam Community. Every number here comes from that guide.
  • Mad Games Tycoon 2 — by Eggcode. This is an unofficial fan-made reference and is not affiliated with or endorsed by the developer.
  • MOBA and Battle Royale genres — added by the RealismMod.
  • Flags — served by flagpedia.net.