{"id":19592882,"url":"https://github.com/fauu/monmonde","last_synced_at":"2026-01-24T04:35:57.264Z","repository":{"id":72663358,"uuid":"98702662","full_name":"fauu/Monmonde","owner":"fauu","description":"An over-ambitious Pokémon(-like) game in research/design/early development stage","archived":false,"fork":false,"pushed_at":"2022-06-16T12:19:58.000Z","size":61864,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-05T00:51:16.086Z","etag":null,"topics":["game","game-design","game-development","pokemon","simulation","sports-simulation","world-simulation"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fauu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-29T02:25:44.000Z","updated_at":"2022-12-16T19:29:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"ecb13d67-8f7f-4d7a-9f62-3cc6b5605224","html_url":"https://github.com/fauu/Monmonde","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fauu%2FMonmonde","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fauu%2FMonmonde/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fauu%2FMonmonde/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fauu%2FMonmonde/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fauu","download_url":"https://codeload.github.com/fauu/Monmonde/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251154835,"owners_count":21544564,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["game","game-design","game-development","pokemon","simulation","sports-simulation","world-simulation"],"created_at":"2024-11-11T08:37:16.281Z","updated_at":"2026-01-24T04:35:57.212Z","avatar_url":"https://github.com/fauu.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Codename: Monmonde\n\nNotes on an idea for an open world exploration / monster collection / monster battling game.\n\n*[This document was initially created mid-2017. It has been substantively revised in March 2021 and again in April–May 2022.]*\n\n## Introduction\n\nThe idea: A single-player game involving exploration\u003csup\u003eG3\u003c/sup\u003e of a large world\u003csup\u003e\\* G2\u003c/sup\u003e, catching creatures\u003csup\u003eG1 G2 G3\u003c/sup\u003e, training them\u003csup\u003eG1\u003c/sup\u003e, and climbing the ladder of a deeply-simulated\u003csup\u003eG4\u003c/sup\u003e system of battling\u003csup\u003eG1 G2\u003c/sup\u003e competitions.\n\n\\*_The initial 2017 concept involved an alternative timeline of the real world. In the updated, simplified concept it’s a fictional world._\n\nInspirations:\n\n- [G1] **Pokémon Reborn/Blue/Silver/Sapphire…** ([screenshots](https://3.bp.blogspot.com/-PB6Eh2kJoYM/WBQjXjwhJyI/AAAAAAAACeo/iHk9PZogR04Udpl0tRp_kBwygEI4pVyYgCLcB/s1600/reborn1.jpg); [video](https://www.youtube.com/watch?v=5hwjki1EsK0))\n- [G2] **Pokémon Go**\n- [G3] **UnReal World** ([screenshot](http://cdn.akamai.steamstatic.com/steam/apps/351700/ss_e2ef9b4c7f6a39feaed3413655eb654f2f9b590e.1920x1080.jpg); [video](https://www.youtube.com/watch?v=nwJIYNoJ-44\u0026t=1m00s))\n- [G4] **Football Manager** ([screenshot](https://www.pcinvasion.com/wp-content/uploads/2016/11/football-manager-2017-5.png); [video](https://www.youtube.com/watch?v=hIPAPjCADKI\u0026t=5m00s))\n\nPlanned release date for the game: _December 2031_ (initial optimistic estimation; updated realistic estimation: somewhere between the time of Korean reunification and the world reaching climate neutrality).\n\nPlease feel very welcome to creatively appropriate any of the ideas below for your own projects that will never be finished.\n\n## What concrete has been made so far\n\n- Seven [“prototypes”](#prototypes).\n- The basis for the game’s core (see [`sim/`](sim)).\n- [Minor tool(s)](#utilities).\n\n## What’s in this repository\n\n[`battle-proto/`](battle-proto) contains the most recent prototype of the battle module (see [Battle system](#battle-system) and [Prototypes](#prototypes)). [`sim/`](sim) contains the basis for the simulation module, the game’s core.\n\n\n## Table of contents\n\n- [Introduction](#introduction)\n- [What’s in this repository](#whats-in-this-repository)\n- [Table of contents](#table-of-contents)\n- [Game design overview](#game-design-overview)\n- [Prototypes](#prototypes)\n- [Utilities](#utilities)\n- [Just like MAKE game](#just-like-make-game)\n- [Various design notes/ideas](#various-design-notesideas)\n- [License](#license)\n\n## Game design overview\n\nThe game takes place in fictional world filled with Pokémon or creatures similar to Pokémon (hereinafter _Mons_). The player is a competitor in Mon training/battling, or a Mon Trainer. This is the dominating competitive sport of the game world and it’s organized as a centralized hierarchy of tournaments going from local affairs up to World Championship. This organization is called _The League_.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"media/league-system-concept.png?raw=true\"\u003e\u003cimg width=\"700\" src=\"media/league-system-concept.png\"/\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003cem\u003eAn example concept diagram of The League system (click to see the full image)\u003c/em\u003e\n\u003c/p\u003e\n\n### The League\n\nAt the heart of The League is the **World Trainer Ranking**. All registered trainers (i.e. all trainers in the world — this is a monopoly) are ranked in a global ladder using an Elo-like system. The trainers are also assigned a **trainer class** (think “Bronze” in League of Legends). Every Mon battle is recorded by The League\\*, with its result affecting the competitors’ ratings.\n\n\\*_Except the underground battles, of course!_\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"media/mmp-c-2.png?raw=true\"\u003e\u003cimg width=\"390\" src=\"media/mmp-c-2.png\"/\u003e\u003c/a\u003e\n  \u003ca href=\"media/mmp-c-3.png?raw=true\"\u003e\u003cimg width=\"390\" src=\"media/mmp-c-3.png\"/\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003cem\u003ePrototype MP-C: Trainer profile (left), World Ranking (right)\u003c/em\u003e\n\u003c/p\u003e\n\nSee [notes on gyms, trainer classes, tournaments and more](#various-design-notesideas).\n\n### Inter-location travel\n\nThe player can travel between **locations** by using the world map interface. Travels costs time and other resources, depending on the means chosen (e.g. bus, train, plane, Mon).\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"media/mmp-c-1.png?raw=true\"\u003e\u003cimg width=\"800\" src=\"media/mmp-c-1.png\"\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003cem\u003ePrototype MP-C: The world map (Note, 2021: the current design no longer involves real-world locations.)\u003c/em\u003e\n\u003c/p\u003e\n\n### Locations\n\n[Note, 2021: the current design no longer involves real-world locations.]\n\n_Example location: “Catania / Mount Etna”_\n\nEach location is constituted by a **settlement** (ranging from a small village to a metropolis) and an optional **exploration zone**.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"media/location-screen-mockup.png?raw=true\"\u003e\u003cimg src=\"media/location-screen-mockup.png\"\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003cem\u003eLocation screen mockup\u003c/em\u003e\n\u003c/p\u003e\n\n#### Settlements\n\n_Example settlement: “Catania”._\n\nSettlements are collections of **places of interest** the player can visit (e.g., a shop, a **gym**, a park). Everything at this level and below is visually represented as simple UI elements. For example, a gym is represented as a list of trainers present whom the player can potentially challenge, a shop is a list of items available for purchase.\n\n#### Exploration zones\n\n_Example exploration zone: “Mount Etna”._\n\nThese are the hosts for the exploration mechanic, and the main places the player can encounter and catch wild Mons. Their actual bodies are generated procedurally according to the zone’s climate and other characteristics. For the player, the main goal of exploring the zones is to find promising mons that fit their team and catch them.\n\nAdditional points:\n\n- These expeditions are meant to be longer adventures lasting for (in-game) days. The deeper you go, the tougher it gets, but also the more rare Mons and items you can encounter.\n\n- Mechanics similar to animal hunting from UnReal World\u003csup\u003eG3\u003c/sup\u003e might be a good fit here.\n\n- You will not find a huge and menacing Tentacruel in a local lake, but in an ocean — you just might. Hence every exploration zone has a class assigned by The League. Only trainers of that class and above are permitted to enter the zone.\n\n- Visually, we will have to go for a text representation or simple 2D tile graphics.\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"media/mmp-a-1.png?raw=true\"\u003e\u003cimg width=\"390\" src=\"media/mmp-a-1.png\"/\u003e\u003c/a\u003e\n  \u003ca href=\"media/mmp-d-1.jpg?raw=true\"\u003e\u003cimg width=\"390\" src=\"media/mmp-d-1.jpg\"/\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003cem\u003e2D tile exploration interface (prototype MP-A, left), 3D exploration interface (prototype MP-D, right — forget about it)\u003c/em\u003e\n\u003c/p\u003e\n\n- Inspiration: [Vanilla Bagel: The Roguelike](https://store.steampowered.com/app/491510/Vanilla_Bagel_The_Roguelike/)\n\n### Mons\n\nSome remarks:\n\n- The Pokémon type system has got [quite out of hand](https://pro-rankedboost.netdna-ssl.com/wp-content/uploads/2016/11/sun-and-moon-type-chart-2.jpg) over the years. There is definitely something to be done there. See:\n\n  - [_Rock Paper Pokemon_ (charles.uno)](http://charles.uno/rock-paper-pokemon/),\n\n  - [_Q: What seven (types) would that be, and what would decide where an existing Pokemon would get placed?_ (pokemaniacal.tumblr.com)](http://pokemaniacal.tumblr.com/post/143978158221/what-seven-would-that-be-and-what-would-decide),\n\n  - [EvoCreo elemental chart](http://ilmfinity.com/assets/EvoCreo_elements.png), [EvoCreo class chart](http://ilmfinity.com/assets/EvoCreo_classifications.png).\n\n- When we consider the beloved original Pokémon designs, you cannot just make Dragonite a Normal type or even Butterfree a Grass type. This problem disappears with dedicated Mon designs.\n\n### Battle system\n\nI’d like to try something slightly different here. Current idea: real-time battles; your Mons have AI too — you can train them, prepare a battle plan, issue commands during the battle, but they aren’t going to execute what you want perfectly.\n\nhttps://user-images.githubusercontent.com/4130634/170080294-4d878148-f227-4cb9-a4bd-733f90cf6b24.mp4\n\n- Reference: [Pokémon Reborn: Field Effects](http://pokemon-reborn.wikia.com/wiki/Field_Effects).\n\n## Prototypes\n\n**MMP-A**\u003cbr\u003e\n_Themes_: map view, 2D exploration\u003cbr\u003e\n_Tech_: Kotlin, libGDX\u003cbr\u003e\n_Source code_: https://github.com/fauu/Monmonde-initial-prototypes/tree/master/MMP-A\n\n[**MMP-B**](https://github.com/fauu/Monmonde-initial-prototypes/tree/master/MMP-B) — 2D exploration, battle — Kotlin, libGDX, Artemis-odb\n\n[**MMP-C**](https://github.com/fauu/Monmonde-initial-prototypes/tree/master/MMP-C) — World Map, MonGear, The League, calendar — C#, Unity Engine, Zenject, MBTiles\n\n**MMP-D** — 3D exploration — C#, Unity Engine\n\n[**MMP-E**](https://github.com/fauu/Monmonde-initial-prototypes/tree/master/MMP-E) — Suitability of the tech stack in question — Electron, TypeScript, React, MobX, PixiJS\n\n[**MMP-F**](https://github.com/fauu/Monmonde-initial-prototypes/tree/master/MMP-F) — World simulation — Kotlin, libGDX\n\n[**MMP-G**](https://github.com/fauu/Monmonde/tree/master/battle-proto) — Battle module implementation on the Web stack, its design prototype — TypeScript, React, PixiJS\n\n## Utilities\n\n\u003cdl\u003e\n  \u003cdt\u003e\u003ca href=\"https://github.com/fauu/langmangler\"\u003elangmangler\u003c/a\u003e\u003c/dt\u003e\n  \u003cdd\u003eCreate words in a fictional language by transforming words from a real language. (Tech: Rust.)\u003c/dd\u003e\n\u003c/dl\u003e\n\n## Just like MAKE game\n\n### 1. Decide on the tech\n\n#### Frontend\n\n##### Requirements\n\n- Future-proof\n- Multiplatform\n- Suited for building complex UIs with short iteration times\n- For Battle Mode and Exploration Mode: either good GFX support (e.g. WebGL) or the ability to be integrated into a graphical application (e.g. [Ultralight](https://github.com/ultralight-ux/Ultralight)).\n\n##### Candidates\n\n###### 🟊🟊\n\n\u003cdl\u003e\n  \u003cdt\u003e\u003cu\u003eThe Web platform\u003c/u\u003e (TypeScript/…)\u003c/dt\u003e\n  \u003cdd\u003eCon: communication with the backend separated by a barrier (unless the backend also runs in the browser).\u003c/dd\u003e\n\u003c/dl\u003e\n\n###### 🟊\n\n\n\u003cdl\u003e\n  \u003cdt\u003e\u003cu\u003eJavaFX\u003c/u\u003e (Java/Kotlin)\u003c/dt\u003e\n  \u003cdd\u003e\n– Requires more effort and is less future-proof than with the Web tooling.\u003cbr\u003e\n– Apparently hard to integrate with custom GFX.\u003cbr\u003e\n– Apparently there are problems with performance.\u003cbr\u003e\n– The overall API design might be a bit cumbersome by today’s standards.\n  \u003c/dd\u003e\n\n  \u003cdt\u003e\u003cu\u003eJetpack Compose\u003c/u\u003e (Java/Kotlin)\u003c/dt\u003e\n  \u003cdd\u003eImmature but has good prospects.\u003c/dd\u003e\n\n  \u003cdt\u003e\u003cu\u003eUnity\u003c/u\u003e (C#)\u003c/dt\u003e\n  \u003cdd\u003eA lot of effort needed to reimplement what the Web tooling gives us for free.\u003c/dd\u003e\n\n  \u003cdt\u003e\u003cu\u003eGodot\u003c/u\u003e (GDScript/C#?/native?), \u003cu\u003elibGDX\u003c/u\u003e (Java/Kotlin), etc.\u003c/dt\u003e\n  \u003cdd\u003eCons roughly the same as Unity.\u003c/dd\u003e\n\u003c/dl\u003e\n\n###### No, but maybe\n\n\u003cdl\u003e\n  \u003cdt\u003e\u003cu\u003eHumbleUI\u003c/u\u003e (Clojure)\u003c/dt\u003e\n  \u003cdd\u003eNot nearly mature enough, but promising.\u003c/dd\u003e\n\n  \u003cdt\u003e\u003cu\u003eSlint\u003c/u\u003e (Rust)\u003c/dt\u003e\n  \u003cdd\u003eGreat prospects, would allow for going monolingual with a Rust backend.\u003c/dd\u003e\n\n  \u003cdt\u003e\u003cu\u003eAvalonia\u003c/u\u003e (C#)\u003c/dt\u003e\n  \u003cdd\u003eImmature. (2022: Bumped it back from “No” for now, since the last time I looked at it was a few years ago now.)\u003c/dd\u003e\n\u003c/dl\u003e\n\n###### No\n\n\u003cdl\u003e\n  \u003cdt\u003e\u003cu\u003eQt QML\u003c/u\u003e (C++, Python)\u003c/dt\u003e \n  \u003cdd\u003eBecomes overly complex if you stray from stock controls; the MOC makes having adequate bindings for sane compiled languages hard.\u003c/dd\u003e\n\n  \u003cdt\u003e\u003cu\u003eQt Widgets\u003c/u\u003e (C++, Python)\u003c/dt\u003e\n  \u003cdd\u003eNo GPU acceleration; inflexible styling; lack of bindings for preferred languages: see above.\u003c/dd\u003e\n\n  \u003cdt\u003e\u003cu\u003eQSkinny\u003c/u\u003e (C++)\u003c/dt\u003e\n  \u003cdd\u003eImmature, questionable prospects, lack of bindings.\n\n  \u003cdt\u003e\u003cu\u003eGTK\u003c/u\u003e (D, Nim, Rust)\u003c/dt\u003e\n  \u003cdd\u003eBindings could be more mature; less flexibility and slower iteration time than Web tooling.\u003c/dd\u003e\n\n  \u003cdt\u003e\u003cu\u003eNoesis\u003c/u\u003e (C#)\u003c/dt\u003e\n  \u003cdd\u003eProprietary, much less support than the Web tooling, (probably more to uncover).\u003c/dd\u003e\n\u003c/dl\u003e\n\n#### Backend\n\n##### Requirements\n\n- Future-proof\n- Enough throughput to handle a non-trivial simulation workload\n- Fast iteration:\n  - Short compilation times\n  - Good tooling\n  - Broad ecosystem\n\n##### Candidates\n\n- Nim (native target)\n  - Wait for: incremental compilation and improved tooling.\n  - Cons: the ecosystem.\n- Rust (native target)\n  - ~~Wait for: improved compilation times.~~\n    - This appears to have already been solved to an extent by the Cranelift backend and the mold linker.\n- D\n  - Cons: the ecosystem.\n- Java\n    - Can’t see real cons and it’s only set to get better throughout the decade.\n    - Should suffice performance-wise, especially considering Moores’ law and Project Valhalla (the main concern being memory usage for large numbers of simulated trainers).\n- Kotlin\n  - Need to see if the language server is good enough and if the compilation time penalty over Java isn’t too large for it to be worth it, given Java’s progress in terms of convenience featuers.\n- JS/WASM target (JS, TS, Nim, Kotlin, Rust, …)\n  - Can this handle the simulation workload properly? The problem is we don't know how demanding the simulation will get. But if we're assuming that the JVM or the CLR could handle it, then surely V8 could too, especially as time passes?\n  - Would WASM actually be a significant enough of an improvement in terms of integration compared with WebSocket communication with an out-of-browser backend?\n  - Currently, WASM supposedly doesn’t even have a performance advantage over JS (not that JS is especially slow).\n- C#\n  - From what I glanced, it seems they’re overloading the language with too many features for its own good.\n  - I’ve heard very mixed things about the Linux tooling.\n  - [“Despite best efforts .NET is still not an open platform”](https://isdotnetopen.com/).\n- Zig, Jai\n  - Would likely require the most effort with no relative payoff that I can think of.\n\n#### Stacks to particularly keep in mind for the future\n\n\u003cu\u003e**Ultralight** with an integrated backend\u003c/u\u003e (TypeScript + a backend language + bgfx etc.)\n\n- Proprietary and not fully future-proof, although the project seems to be gaining traction (March 2021).\n- Frontend/backend communication is more direct than with Electron.\n- Battle/Exploration gfx done with bgfx or something of the sort:\n  - High performance.\n  - Allows for going monolingual.\n  - Tight integration with the simulation.\n\n\u003cu\u003e**Jetpack Compose** with an integrated backend\u003c/u\u003e (Java/Kotlin)\n\n- Monolingual, very tight integration.\n- Seems it needs some serious hacking to get it rendering over OpenGL gfx.\n\n\u003cu\u003e**Slint** with an integrated backend\u003c/u\u003e (Rust)\n\n- Battle/Exploration would be done with Bevy.\n\n\u003cu\u003eKotlin/JS React + Kotlin on backend\u003c/u\u003e\n\n#### The tentative tech choices\n\nThe backend running the simulation and the game logic to be written in **Rust**.\n\nThe UI to be done on the Web Platform using **TypeScript** and **SolidJS**, **Svelte** or **React**.\n\nThe Battle engine to be: (1) done in **Rust**, so that it can share types with the core, (2) compiled to WASM, so that it can be embedded into the UI.\n\n- Should it talk to the UI directly (which I am presuming will be possible by just calling into the JS) or through the backend?\n\n  - (This doesn’t need to be answered now because of the next consideration.)\n\n- The whole WASM/WebGL/WebGPU situation isn’t yet mature enough (March 2021), but it’s a safe bet it will be in a few years. In the meantime, the engine needs to be developed as a native program with a temporary built-in UI. Its basis should be something that abstracts from the rendering backend and that will support WASM/WebGPU in the future. Bevy is a good candidate.\n\n### 2. Design and implement the Minimum Viable Product\n\n- Battle Mode\n\n  This must be very solid from the start.\n\n- Exploration Mode\n\n  Go with a very simple text-based mechanic for now (as in text descriptions, not as in roguelike ASCII graphics). Doing the full version of this will be very effort-consuming, and the battling and competition systems should be good enough to carry the game (mostly) on their own.\n\n- The World\n  - The MVP will be limited to a small region of the world, but the player needs to feel that the entire world to explore and conquer is alive. Design the world in very general outlines — just enough to do a very superficial simulation of its trainers and major competitions.\n  - Generated procedurally:\n    - Trainers\n  - Defined manually:\n    - The world map\n    - The names and defining characteristics of locations\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"media/wip-world-map.png?raw=true\"\u003e\u003cimg width=\"600\" src=\"media/wip-world-map.png\"\u003e\u003c/a\u003e\u003cbr\u003e\n  \u003cem\u003eWIP world map design\u003c/em\u003e\n\u003c/p\u003e\n\n## Various design notes/ideas\n\nNote: Some of those still reflect old assumptions (e.g. using the real world as the basis).\n\n### Classes\n\n- The class progression for trainers, exploration zones, competitions and gyms is the following: _Candidate (Green) ➡ Yellow ➡ Silver ➡ Sapphire ➡ Master_.\n  - Candidate trainers are trial trainers — after a set amount of time they enter a tournament in which they either win The League lifetime trainer license or lose and need to wait a few years to apply for a candidacy again.\n  - Candidate trainers aren’t ranked. Their sole task is to prepare for the tournament.\n  - Estimated trainer count for each class: Candidate (Green) — one million; Yellow — 100 thousand; Silver — 10 thousand; Sapphire — one thousand; Master — one hundred;\n    - Subject to change depending how the simulation will turn out in terms of performance.\n    - Battles of Candidate trainers aren’t simulated. The simulation of their tournaments only goes as far as: record that such and such tournament took place, simulate the top 4 and the winner.\n\n### Trainers\n\n- Each registered trainer has a rank, a rating (Elo-like) and a class.\n\n### Exploration zones\n\n- Each exploration zone has a class.\n- Trainer class determines the max. class of the exploration zones a trainer is allowed to access.\n\n### Gyms\n\n- Settlements have gyms.\n- Every gym has a class assigned.\n- A settlement has at most one gym of each class.\n- If a settlement has gyms of a certain class, it neccessarily has gyms of all the lower classes.\n- Def. _National prestige_ is the ranking power of the countrie’s top trainers.\n- Settlements are assigned gyms according to their size and the national prestige of the country they are situated in.\n- The highest gym class of a city designates its prestige.\n- A trainer is allowed access to a gym only if their trainer class is equal to that of the gym.\n- At a gym, trainers do training fights. Those fights affect their League ratings (with a low weight), just like every other fight.\n- Def. _Intraclass rank_ is trainer’s rank in relation to that of other trainers within the same class.\n- At a gym there can be trainers with low, medium or high intraclass rank.\n- At a gym, there is always one of gym leaders present on-duty.\n- Gym leaders are chosen amongst trainers with a high intraclass rank of the class gym’s class.\n- A trainer admitted to a gym can challenge its leader to a match once a certain period.\n- Defeating a gym leader yields the trainer the badge of the gym.\n\n### Trainer class\n\n- To advance to a higher class, the trainer has to collect 8 badges from any gyms of a given class.\n- If the rating of trainer falls below a threshold level equal to that of a high intraclass rating of the class below, he gets relegated.\n- After being relegated to a lower class, trainer loses the badges that allowed him to advance to the higher class in the first place and is then a subject to the standard promotion procedure described above.\n\n### Competitions\n\n#### World Championship\n\n- The _World Challenger Cup_ takes place once a year.\n- The World Challenger Cup has 128 participants.\n- The first phase of the cup follows the [swiss-system format](https://en.wikipedia.org/wiki/Swiss-system_tournament).\n- The second phrase of the cup follows the single-elimination format.\n- The winner of the World Challenger Cup takes part in a _World Championship Match_ where he faces the reigning world champion.\n- The winner of the World Championship Match becomes the World Champion for the following year.\n- Allocation scheme for the World Challenger Cup spots:\n  - 1 loser of the previous World Championship Match,\n  - 6 continental champions,\n  - remaining spots assigned according to the League ranking.\n\n#### Continental and National championships\n\n- The format of the six Continental Championships and the many National Championships is analogous to that of the World Championships.\n- Allocation scheme for the _Continental Challenger Cup_ spots:\n  - One loser of the previous _Continental Championship Match_,\n  - X _National Champions_ of the countries situated on a given continent (perhaps with a minimal requirement for national prestige or trainer class),\n  - remaining spots assigned according to the league ranking.\n- Allocation scheme for the _National Challenger Cup_ spots:\n  - One loser of the previous _National Championship Match_,\n  - remaining spots assigned according to the league ranking.\n\n#### Competition battles\n\n- Different field types.\n- Matches in a BO3/BO5 system with each round being played on a different type of field, chosen in a ban/pick system.\n\n#### Stat system\n\n##### Concepts\n\n- `StatType`\n  - `name: string`\n- `StaticStat`\n  - `type: StatType`\n  - `level: number [1–100]`\n- `Stat` extending `StaticStat`\n  - `progress: number [0.0–1.0]`\n    - Progress towards the next stat point\n  - `modifier: number [0–2]`\n    - Decreases full potential by `[0–2] * full potential`\n- `Species`\n  - `stats: Map\u003cStatType, StaticStat\u003e`\n- `Mon`\n  - `species: Species`\n  - `stats: Map\u003cStatType, Stat\u003e`\n- `BattleMon`\n  - `mon: Mon`\n- `Move`\n  - `requirements: Map\u003cStatType, Stat\u003e`\n\n###### `Stat` details\n\n- Possible values: `[10, 11, …, 100]`\n- Species genetic component\n  - Determines base stats and full potential\n  - Possible values (base): `[10, 20, 30, 40, 50]`\n    - Maximum potential value is double the base value.\n    - Represented as 1–5 stars.\n- Individual genetic component\n  - Modifies base stats and full potential\n  - Decreases full potential by `[0–2] * full potential`\n- Individual training component\n  - Determines actual stats taking base stats as an input\n  - Capped so that full potential is never surpassed\n\n##### Other Mon characteristics\n\n- `Fitness` (à la Football Manager; exhaustion could be combined into this perhaps)\n\n##### Evolution\n\n- Based on “experience”\n  - For a wild mon under regular conditions this accumulates slowly\n    - Ex: Wild Venusaurs might be extremely rare, although wild Butterflies will be common, as reaching that evolution requires much less experience\n  - For a wild mon under challenging conditions accumulates faster\n  - For a trained mon accumulates the fastest\n- Can have catalysts\n\n##### Moves\n\n- Specialities/Stats/Types are divided into Physical and Elemental.\n- Damage of offensive moves with Physical factor (“Contact” moves?) depend on Mon’s weight\n- Ideas:\n  - Have purely aesthetic subtypes of the different Specialities in order to have variants of moves, i.e. “Sting Attack” would be named “Horn Attack” for Horn-spiked mons and “Stinger Attack” for Stinger-spiked mons.\n  - Optional requirements that make attack stronger, e.g. “Spike” StatType for Poison Sting.\n\n##### Effective stats\n\n- HP dependent on … and on weight.\n  - Or make the yet unknown stat depend on weight…\n\n#### Lore\n\n- Inspiration: \u003chttps://www.reddit.com/r/AskScienceFiction/comments/d36grp/pokemon_what_is_the_common_factor_with_all/f00x8fa/\u003e\n\n## License\n\nSee [COPYING.md](COPYING.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffauu%2Fmonmonde","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffauu%2Fmonmonde","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffauu%2Fmonmonde/lists"}