{"id":23282117,"url":"https://github.com/bitpatty/gct-generator","last_synced_at":"2026-03-20T01:06:03.236Z","repository":{"id":37413208,"uuid":"104959913","full_name":"BitPatty/gct-generator","owner":"BitPatty","description":"A gecko code practice file generator for everyone's favorite game: Super Mario Sunshine","archived":false,"fork":false,"pushed_at":"2026-01-01T21:51:21.000Z","size":14368,"stargazers_count":10,"open_issues_count":6,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-15T17:01:46.062Z","etag":null,"topics":["mario-sunshine"],"latest_commit_sha":null,"homepage":"https://gct.zint.ch","language":"XML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BitPatty.png","metadata":{"files":{"readme":"Readme.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-09-27T02:06:49.000Z","updated_at":"2025-12-03T16:34:04.000Z","dependencies_parsed_at":"2024-10-18T16:08:28.560Z","dependency_job_id":"92d7477d-815f-4d17-b81d-f52f8eb949bd","html_url":"https://github.com/BitPatty/gct-generator","commit_stats":null,"previous_names":["bitpatty/gct-generator"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BitPatty/gct-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitPatty%2Fgct-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitPatty%2Fgct-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitPatty%2Fgct-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitPatty%2Fgct-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BitPatty","download_url":"https://codeload.github.com/BitPatty/gct-generator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitPatty%2Fgct-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28562316,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T03:31:16.861Z","status":"ssl_error","status_checked_at":"2026-01-19T03:31:15.069Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["mario-sunshine"],"created_at":"2024-12-20T00:14:40.829Z","updated_at":"2026-01-19T06:11:49.171Z","avatar_url":"https://github.com/BitPatty.png","language":"XML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GCT Generator\r\n\r\n[![GitHub license](https://img.shields.io/github/license/bitpatty/gct-generator?color=blue\u0026label=License\u0026style=plastic)](https://github.com/BitPatty/gct-generator/blob/master/LICENSE)\r\n[![CD Pipeline](https://github.com/BitPatty/gct-generator/workflows/CD%20Pipeline/badge.svg)](https://github.com/BitPatty/gct-generator/actions?query=workflow%3A%22CD+Pipeline%22)\r\n\r\nThis repository contains the code behind the Super Mario Sunshine Cheatfile Generator at https://gct.zint.ch/\r\n\r\n---\r\n\r\n## Features\r\n\r\n- Custom cheat combination\r\n- Custom stage loader based on [QbeRoot's fastcodes](https://github.com/QbeRoot/fastcodes)\r\n- Creates cheatfiles ready for use with [Nintendont](https://github.com/FIX94/Nintendont), [Gecko Cheat Manager](https://wiibrew.org/wiki/CheatManager) and [Dolphin](https://github.com/dolphin-emu/dolphin)\r\n\r\n---\r\n\r\n## Contributing\r\n\r\n### Updating Practice Codes\r\n\r\nThe codes are stored in the `Codes.xml` file. If you want to add or change codes edit the XML file. Note that GMSJ0A refers to the NTSC-J 1.1 release of Super Mario Sunshine. (It's not actually called version A but that's what we've been calling it for years due to a misconception on what the A on the back of the box means).\r\n\r\nWhen adding new codes keep in mind that the English title/description are mandatory.\r\n\r\n#### Codes with configuration\r\nCodes with configuration are usually defined as vue components,\r\nwhich is defined in [site/.vuepress/components/codes/](site/.vuepress/components/codes/).\r\nWhen creating/updating those codes,\r\nin addition to editing the `Codes.xml` file,\r\nyou may also need to check the following files:\r\n- [site/.vuepress/components/codes/codegen.js](site/.vuepress/components/codes/codegen.js):\r\n  Specify the Gecko code generator function of the code.\r\n  The version string will be passed as the first argument.\r\n- [site/.vuepress/components/codes/ui.js](site/.vuepress/components/codes/ui.js):\r\n  Specify the vue component for the configuration of the code.\r\n  The version string will be passed as a property.\r\n- [site/.vuepress/components/codes/preview.js](site/.vuepress/components/codes/preview.js):\r\n  Specify the `id` and the `getConfig(version)` function of the code to make it shown in preview.\r\n\r\n#### Reserved Memory\r\n\r\nSome codes store some states in the games memory starting from address 0x817F0000 (up to 0x817FFFFF). To avoid collisions use a memory range in the unallocated ranges.\r\n\r\n\r\n| Status                      | Start   | End     | Description                                                               |\r\n| --------------------------- | ------- | ------- | ------------------------------------------------------------------------- |\r\n| ![](./docs/reserved.svg)    | `0x0`   | `0x7`   | Level Select: Stage Data                                                  |\r\n| ![](./docs/reserved.svg)    | `0x8`   | `0x13`  | DPad Functions: Stored Position (Mario)                                   |\r\n| ![](./docs/reserved.svg)    | `0x14`  | `0x15`  | DPad Functions: Stored Angle (Mario)                                      |\r\n| ![](./docs/reserved.svg)    | `0x16`  | `0x1B`  | DPad Functions: Stored Position (Camera)                                  |\r\n| ![](./docs/reserved.svg)    | `0x20`  | `0x23`  | Coin Count Savestate: Coin Count                                          |\r\n| ![](./docs/reserved.svg)    | `0x24`  | `0x26`  | Pattern Selector: Selected Pattern Numbers                                |\r\n| ![](./docs/reserved.svg)    | `0x27`  | `0x27`  | Pattern Selector: Cursor Position                                         |\r\n| ![](./docs/reserved.svg)    | `0x28`  | `0x29`  | Instant Level Select: Last Selected Area ID                               |\r\n| ![](./docs/reserved.svg)    | `0x2A`  | `0x2A`  | Instant Level Select: Last Selected Episode Number                        |\r\n| ![](./docs/reserved.svg)    | `0x2B`  | `0x2B`  | Instant Level Select: Area Lock Flag                                      |\r\n| ![](./docs/reserved.svg)    | `0x2C`  | `0x2C`  | Red Coin Savestate: Red Coin state                                        |\r\n| ![](./docs/reserved.svg)    | `0x2D`  | `0x2D`  | Red Coin Savestate: Red Coin Count                                        |\r\n| ![](./docs/unallocated.svg) | `0x2E`  | `0x2F`  | Not Allocated                                                             |\r\n| ![](./docs/reserved.svg)    | `0x30`  | `0x33`  | QF Time Savestate: Stored QF Time                                         |\r\n| ![](./docs/reserved.svg)    | `0x34`  | `0x3B`  | In-Game Time Savestate: Stored Elapsed Time                               |\r\n| ![](./docs/reserved.svg)    | `0x3C`  | `0x3F`  | Open World Shine Get: Last Touched Shine Game QF                          |\r\n| ![](./docs/reserved.svg)    | `0x40`  | `0x4F`  | Mario Savestate: Stored State (0x7C-0x8B)                                 |\r\n| ![](./docs/reserved.svg)    | `0x50`  | `0x57`  | Mario Savestate: Stored Flag (0x118-0x123)                                |\r\n| ![](./docs/reserved.svg)    | `0x58`  | `0x5B`  | Mario Savestate: Stored Horizontal Speed                                  |\r\n| ![](./docs/reserved.svg)    | `0x5C`  | `0x5F`  | Mario Savestate: Stored Vertical Speed                                    |\r\n| ![](./docs/reserved.svg)    | `0x60`  | `0x63`  | Mario Savestate: Stored Last Grab Target                                  |\r\n| ![](./docs/reserved.svg)    | `0x64`  | `0x67`  | Mario Savestate: Stored Water Amount                                      |\r\n| ![](./docs/unallocated.svg) | `0x68`  | `0x93`  | Not Allocated                                                             |\r\n| ![](./docs/reserved.svg)    | `0x94`  | `0xA3`  | QF Timer: Coordinates of the Text box (LTRB)                              |\r\n| ![](./docs/reserved.svg)    | `0xA4`  | `0xB0`  | QF Timer: Timer Format String                                             |\r\n| ![](./docs/reserved.svg)    | `0xB0`  | `0xB1`  | QF Timer: (Unused)                                                        |\r\n| ![](./docs/reserved.svg)    | `0xB2`  | `0xB2`  | QF Timer: Stop at QFT Offset                                              |\r\n| ![](./docs/reserved.svg)    | `0xB3`  | `0xB3`  | QF Timer: Restart Flag                                                    |\r\n| ![](./docs/reserved.svg)    | `0xB4`  | `0xB7`  | QF Timer: Cumulative time of previous areas since last reset (QFT Offset) |\r\n| ![](./docs/reserved.svg)    | `0xB8`  | `0xBB`  | QF Timer: Time to display if timer freeze \u003e 0                             |\r\n| ![](./docs/reserved.svg)    | `0xBC`  | `0xBF`  | QF Timer: Duration of timer freeze (in frames)                            |\r\n| ![](./docs/buffer.svg)      | `0xC0`  | `0xFF`  | Buffer (QF Timer)                                                         |\r\n| ![](./docs/reserved.svg)    | `0x100` | `0x100` | Ingame Timer: Reset Stopwatch Flag                                        |\r\n| ![](./docs/reserved.svg)    | `0x101` | `0x101` | Ingame Timer: Disable Custom IG Timer Flag                                |\r\n| ![](./docs/reserved.svg)    | `0x102` | `0x10B` | Ingame Timer: Stopwatch Backup                                            |\r\n| ![](./docs/reserved.svg)    | `0x10C` | `0x10C` | Ingame Timer: Stop Stopwatch Flag                                         |\r\n| ![](./docs/buffer.svg)      | `0x10D` | `0x10F` | Buffer (Ingame Timer)                                                     |\r\n| ![](./docs/reserved.svg)    | `0x110` | `0x11F` | QF Timer: Text Config                                                     |\r\n| ![](./docs/reserved.svg)    | `0x120` | `0x123` | QF Timer: Background Config                                               |\r\n| ![](./docs/reserved.svg)    | `0x124` | `0x133` | Streak Tracker: Text Config                                               |\r\n| ![](./docs/unallocated.svg) | `0x134` | `0x237` | Not Allocated                                                             |\r\n| ![](./docs/reserved.svg)    | `0x238` | `0x347` | General Function (`drawText`)                                             |\r\n| ![](./docs/buffer.svg)      | `0x348` | `0x39B` | Buffer (QF Timer)                                                         |\r\n| ![](./docs/reserved.svg)    | `0x39C` | `0x3AF` | QF Section Timer: Background Config                                       |\r\n| ![](./docs/reserved.svg)    | `0x3B0` | `0x3BF` | QF Section Timer: Text Config                                             |\r\n| ![](./docs/reserved.svg)    | `0x3C0` | `0x3C8` | QF Section Timer: Format String                                           |\r\n| ![](./docs/reserved.svg)    | `0x3C9` | `0x3C9` | QF Section Timer: (Unused)                                                |\r\n| ![](./docs/reserved.svg)    | `0x3CA` | `0x3CB` | QF Section Timer: Section Count                                           |\r\n| ![](./docs/reserved.svg)    | `0x3CC` | `0x3CF` | QF Section Timer: Last Freezed Time                                       |\r\n| ![](./docs/reserved.svg)    | `0x3D0` | `0x40F` | QF Section Timer: Section Time Array                                      |\r\n| ![](./docs/reserved.svg)    | `0x410` | `0x41F` | Pattern Selector: Background Config                                       |\r\n| ![](./docs/reserved.svg)    | `0x424` | `0x433` | Pattern Selector: Text Config                                             |\r\n| ![](./docs/reserved.svg)    | `0x434` | `0x440` | Pattern Selector: Format String                                           |\r\n| ![](./docs/reserved.svg)    | `0x441` | `0x475` | Pattern Selector: Pattern Data                                            |\r\n| ![](./docs/reserved.svg)    | `0x476` | `0x477` | Attempt Counter: Previous Area                                            |\r\n| ![](./docs/reserved.svg)    | `0x478` | `0x478` | Attempt Counter: Display Timer                                            |\r\n| ![](./docs/reserved.svg)    | `0x479` | `0x479` | Attempt Counter: Display Duration                                         |\r\n| ![](./docs/reserved.svg)    | `0x47A` | `0x47F` | Attempt Counter: Format String                                            |\r\n| ![](./docs/reserved.svg)    | `0x480` | `0x48F` | Attempt Counter: Text Config                                              |\r\n| ![](./docs/reserved.svg)    | `0x490` | `0x4A3` | Attempt Counter: Background Config                                        |\r\n| ![](./docs/reserved.svg)    | `0x4A4` | `0x4A5` | Attempt Counter: Success Count                                            |\r\n| ![](./docs/reserved.svg)    | `0x4A6` | `0x4A7` | Attempt Counter: Attempt Count                                            |\r\n| ![](./docs/reserved.svg)    | `0x4A8` | `0x4A8` | Attempt Counter: Got Shine Flag                                           |\r\n| ![](./docs/buffer.svg)      | `0x4A9` | `0x4AF` | Buffer (Attempt Counter)                                                  |\r\n| ![](./docs/unallocated.svg) | `0x4B0` | `0x4BF` | Not Allocated                                                             |\r\n| ![](./docs/buffer.svg)      | `0x4C0` | `0x4C2` | Buffer (Controller Input Display)                                         |\r\n| ![](./docs/reserved.svg)    | `0x4C3` | `0x4C3` | Controller Input Display: Line Width                                      |\r\n| ![](./docs/reserved.svg)    | `0x4C4` | `0x4C7` | Controller Input Display: Scale                                           |\r\n| ![](./docs/reserved.svg)    | `0x4C8` | `0x4CB` | Controller Input Display: (X, Y) Coordinate                               |\r\n| ![](./docs/reserved.svg)    | `0x4CC` | `0x4CF` | Controller Input Display: Background Color                                |\r\n| ![](./docs/reserved.svg)    | `0x4D0` | `0x53F` | Controller Input Display: Components Config                               |\r\n| ![](./docs/unallocated.svg) | `0x540` | `0x17F8` | Not Allocated                                                            |\r\n| ![](./docs/reserved.svg)   | `0x17F8` | `0xD800` | GCI Loader Codes (0x81780000 - 8)*                                       |\r\n| ![](./docs/reserved.svg)   | `0xD800` | `0xFFFF` | GCI Loader                                                               |\r\n\r\n\\* Additional gecko codes from the memory card are loaded into this space by the GCI loader. The loader is currently maintained on the fork at https://github.com/BitPatty/sms-gci-gecko-loader, original (archived) repo: https://github.com/sup39/SMS-GCI-Loader.\r\n\r\n\r\n### Adding translations\r\n\r\n1. Create a new file `\u003clang\u003e.json` in `site/.vuepress/i18n`, where `\u003clang\u003e` is the language code you want to add. Copy the contents of `en-US.json` into your file and translate each entry in the JSON file.\r\n2. Create a new folder with your language code in `site` (such as `site/de` for German). Create a new markdown file for each existing page (`guide.md`, `index.md`, `ios58.md`, ...) and translate its contents from the English version.\r\n3. Create a new entry in `site/.vuepress/i18n/locales.json` with the site metadata and navigation items for your language.\r\n4. Add your locale to the `translations` in `site/.vuepress/i18n/localeHelper.js`.\r\n5. Open `Codes.xml` and add a translation for each code (`\u003ctitle\u003e` and `\u003cdescription\u003e`).\r\n\r\n### Updating Guides\r\n\r\nYou can find the guides in the [site](https://github.com/BitPatty/gct-generator/tree/master/site) folder. Simply edit the corresponding markdown file (.md).\r\n\r\nNote that in the code reference files everything following the `\u003c!-- injectionpoint --\u003e` tag will be removed during the next build.\r\n\r\n### Site Development\r\n\r\nYou can either use dev containers or your own setup to develop new features.\r\n\r\n#### Using Dev-Containers\r\n\r\nIf you have access to codespaces simply open the repository in codespaces. Else you can set it up locally as follows:\r\n\r\n1. Install [Docker](https://www.docker.com/) and [docker-compose](https://docs.docker.com/compose/install/).\r\n2. Open the project in VSCode\r\n3. Click the `Reopen in Container` button or run the command with the same name.\r\n\r\n#### Using your own environment\r\n\r\nDue to formatting rules you should use VSCode for development with the following features/extensions:\r\n\r\n- NodeJS 16.x (LTS)\r\n- npm 8.x\r\n- `octref.vetur`\r\n- `esbenp.prettier-vscode`\r\n\r\n#### Development commands\r\n\r\n```sh\r\n# Install dependencies\r\nnpm i\r\n\r\n# Inject codes from the Codes.xml file\r\nnpm run codes:inject\r\n\r\n# Run project in watch mode\r\n# This will serve the page in development mode on http://localhost:8080\r\nnpm run dev\r\n\r\n# Remove injected codes\r\nnpm run codes:clean\r\n\r\n# Build project for production\r\nnpm run build\r\n\r\n# Serve the production build\r\nnpm run serve\r\n```\r\n\r\nThe XML codes will be written automatically to the json file and code reference during the following actions:\r\n\r\n- Starting the development server with `npm run dev`\r\n- Building the site with `npm run build`\r\n\r\nIf you want to inject the codes at any given point you can use `npm run codes:inject`.\r\n\r\n**!!! Note that if npm was used, `npm run codes:clean` is ran automatically as a pre-commit hook, removing all injected codes and staging ALL changes.** If you want to commit changes without cleaning codes first you have to commit through `git commit --no-verify`.\r\n\r\n### Build and preview the site (Docker)\r\n\r\nThe project root provides a [docker-compose](https://docs.docker.com/compose/) file, which creates a clean build (with the same configuration as the production build) and spins up a minimal Apache server on your local, serving the resulting build on port 8080.\r\n\r\n```sh\r\n# Build and serve the site on http://localhost:8080\r\n# Press CTRL+C to stop the container\r\ndocker-compose up --build\r\n```\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitpatty%2Fgct-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitpatty%2Fgct-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitpatty%2Fgct-generator/lists"}