gctGenerator/Readme.md

7.6 KiB

GCT Generator

GitHub license CD Pipeline

This repository contains the code behind the Super Mario Sunshine Cheatfile Generator at https://gct.zint.ch/


Features


Contributing

Updating Practice Codes

The 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).

When adding new codes keep in mind that the English title/description are mandatory.

Reserved Memory

Some codes store some states in the games memory starting from address 0x817F0000. To avoid collisions use a memory range in the unallocated ranges:

Status Start End Description
0x0 0x7 Level Select: Stage Data
0x8 0x13 DPad Functions: Stored Position (Mario)
0x14 0x15 DPad Functions: Stored Angle (Mario)
0x16 0x1B DPad Functions: Stored Position (Camera)
0x20 0x23 Coin Count Savestate: Coin Count
0x24 0x93 Not Allocated
0x94 0xA3 QF Timer: Coordinates of the Text box (LTRB)
0xA4 0xB0 QF Timer: Timer Format String
0xB0 0xB1 QF Timer: (Unused)
0xB2 0xB2 QF Timer: Stop at QFT Offset
0xB3 0xB3 QF Timer: Restart Flag
0xB4 0xB7 QF Timer: Cumulative time of previous areas since last reset (QFT Offset)
0xB8 0xBB QF Timer: Time to display if timer freeze > 0
0xBC 0xBF QF Timer: Duration of timer freeze (in frames)
0xC0 0xFF Buffer (QF Timer)
0x100 0x100 Ingame Timer: Reset Stopwatch Flag
0x101 0x101 Ingame Timer: Disable Custom IG Timer Flag
0x102 0x10B Ingame Timer: Stopwatch Backup
0x10C 0x10C Ingame Timer: Stop Stopwatch Flag
0x10D 0x10F Buffer (Ingame Timer)
0x110 0x237 QF Timer: Timer Textbox
0x238 0x34B General Function (drawText)
0x34C 0xFFF Not Allocated

Adding translations

  1. Create a new file <lang>.json in site/.vuepress/i18n, where <lang> 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.
  2. 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.
  3. Create a new entry in site/.vuepress/i18n/locales.json with the site metadata and navigation items for your language.
  4. Add your locale to the translations in site/.vuepress/i18n/localeHelper.js.
  5. Open Codes.xml and add a translation for each code (<title> and <description>).

Updating Guides

You can find the guides in the site folder. Simply edit the corresponding markdown file (.md).

Note that in the code reference files everything following the <!-- injectionpoint --> tag will be removed during the next build.

Site Development

You can either use dev containers or your own setup to develop new features.

Using Dev-Containers

If you have access to codespaces simply open the repository in codespaces. Else you can set it up locally as follows:

  1. Install Docker and docker-compose.
  2. Open the project in VSCode
  3. Click the Reopen in Container button or run the command with the same name.

Using your own environment

Due to formatting rules you should use VSCode for development with the following features/extensions:

  • NodeJS 16.x (LTS)
  • npm 8.x
  • octref.vetur
  • esbenp.prettier-vscode

Development commands

# Install dependencies
npm i

# Inject codes from the Codes.xml file
npm run codes:inject

# Run project in watch mode
# This will serve the page in development mode on http://localhost:8080
npm run dev

# Remove injected codes
npm run codes:clean

# Build project for production
npm run build

# Serve the production build
npm run serve

The XML codes will be written automatically to the json file and code reference during the following actions:

  • Starting the development server with npm run dev
  • Building the site with npm run build

If you want to inject the codes at any given point you can use npm run codes:inject.

!!! 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.

Build and preview the site (Docker)

The project root provides a docker-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.

# Build and serve the site on http://localhost:8080
# Press CTRL+C to stop the container
docker-compose up --build