├── .github ├── ISSUE_TEMPLATE │ └── bug_report.md ├── linux │ ├── Zelda64Recompiled.desktop │ └── appimage.sh └── workflows │ ├── update-pr-artifacts.yml │ ├── validate-external.yml │ ├── validate-internal.yml │ └── validate.yml ├── .gitignore ├── .gitmodules ├── BUILDING.md ├── CMakeLists.txt ├── CMakeSettings.json ├── COPYING ├── N64ModernRuntime.patch ├── README.md ├── assets ├── ChiaroBold.otf ├── ChiaroNormal.otf ├── LatoLatin-Bold.ttf ├── LatoLatin-BoldItalic.ttf ├── LatoLatin-Italic.ttf ├── LatoLatin-Regular.ttf ├── NotoEmoji-Regular.ttf ├── components │ └── prompt.rml ├── config_menu.rml ├── config_menu │ ├── controls.rml │ ├── debug.rml │ ├── general.rml │ ├── graphics.rml │ └── sound.rml ├── icons │ ├── Arrow.svg │ ├── Plus.svg │ ├── Quit.svg │ ├── RecordBorder.svg │ ├── Reset.svg │ ├── Trash.svg │ ├── VizMap │ │ ├── ButtonLarge.svg │ │ ├── ButtonMedium.svg │ │ ├── ButtonSmall.svg │ │ ├── DPad.svg │ │ ├── DPadArrow.svg │ │ ├── Map.svg │ │ ├── Shield.svg │ │ └── Target.svg │ └── X.svg ├── launcher.rml ├── mm-clipped.svg ├── promptfont │ ├── LICENSE.txt │ ├── README.md │ ├── promptfont.css │ └── promptfont.ttf ├── recomp.rcss ├── rml.rcss └── scss │ ├── .nvmrc │ ├── .stylelintrc │ ├── main.scss │ ├── package-lock.json │ ├── package.json │ └── styles │ ├── base.scss │ ├── components │ ├── BottomLeft.scss │ ├── Button.scss │ ├── CenteredPage.scss │ ├── Config.scss │ ├── ControlOption.scss │ ├── IconButton.scss │ ├── InputConfig.scss │ ├── Launcher.scss │ ├── MenuListItem.scss │ ├── Prompt.scss │ ├── SubtitleTitle.scss │ ├── Tabs.scss │ ├── Toggle.scss │ └── _components.scss │ ├── functions │ └── _spacing.scss │ ├── global.scss │ ├── globals │ ├── _old.scss │ └── _scrollbars.scss │ ├── mixins │ ├── _helpers.scss │ ├── _transitions.scss │ └── _typography.scss │ ├── pages │ ├── _pages.scss │ └── config │ │ ├── _config.scss │ │ └── debug.scss │ └── vars │ ├── _animations.scss │ ├── _borders.scss │ ├── _colors.scss │ ├── _gradients.scss │ ├── _spacing.scss │ └── _transitions.scss ├── docs └── deck_gyro_1.jpg ├── icons ├── 128.ico ├── 16.ico ├── 256.ico ├── 32.ico ├── 512.ico ├── 512.png ├── 64.ico └── app.rc ├── include ├── ovl_patches.hpp ├── promptfont.h ├── recomp_files.h ├── recomp_input.h ├── recomp_ui.h ├── zelda_config.h ├── zelda_debug.h ├── zelda_game.h ├── zelda_render.h └── zelda_sound.h ├── launch.vs.json ├── lib ├── FindFreetype.cmake ├── GamepadMotionHelpers │ ├── .gitignore │ ├── CMakeLists.txt │ ├── GamepadMotion.hpp │ ├── LICENSE │ └── README.md └── concurrentqueue │ ├── blockingconcurrentqueue.h │ ├── concurrentqueue.h │ └── lightweightsemaphore.h ├── n_aspMain.toml ├── patches.toml ├── patches ├── .gitignore ├── Makefile ├── dummy_headers │ ├── assets │ │ └── objects │ │ │ └── object_fall2 │ │ │ └── object_fall2.h │ ├── code │ │ └── sub_s │ │ │ └── sub_s.h │ └── objects │ │ ├── gameplay_keep │ │ └── gameplay_keep.h │ │ ├── object_boss03 │ │ └── object_boss03.h │ │ ├── object_boss04 │ │ └── object_boss04.h │ │ └── object_ha │ │ └── object_ha.h ├── graphics.h ├── misc_funcs.h ├── patch_helpers.h ├── patches.h ├── patches.ld ├── print.c ├── sounds.h ├── syms.ld ├── temp.c ├── xldtob.c ├── xlitob.c ├── xprintf.c └── xstdio.h ├── rsp └── .gitignore ├── shadercache └── .gitkeep ├── shaders ├── InterfacePS.hlsl └── InterfaceVS.hlsl ├── src ├── game │ ├── config.cpp │ ├── controls.cpp │ ├── debug.cpp │ ├── input.cpp │ ├── quicksaving.cpp │ ├── recomp_api.cpp │ └── scene_table.cpp ├── main │ ├── main.cpp │ ├── register_overlays.cpp │ ├── register_patches.cpp │ └── rt64_render_context.cpp └── ui │ ├── ui_color_hack.cpp │ ├── ui_config.cpp │ ├── ui_launcher.cpp │ ├── ui_renderer.cpp │ ├── ui_rml_hacks.cpp │ └── ui_rml_hacks.hpp └── us.toml /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Report a bug in the project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## If you have a crash on startup, please make sure your graphics drivers are up to date before submitting a bug report. 11 | 12 | **What is your GPU driver version? Old drivers, particularly on Nvidia, are known to cause crashes on boot on 1.1.0. If you are on Nvidia and the game is crashing on boot, please update to driver version 555.85 or newer before opening an issue.** 13 | 14 | **Have you checked whether this issue is vanilla behavior? In other words, does it occur on original hardware?** 15 | 16 | **Were you playing with intended mechanics, or using glitches? If it's the latter, which glitches?** 17 | 18 | **Describe the bug** 19 | A clear and concise description of what the bug is. 20 | 21 | **To Reproduce** 22 | Steps to reproduce the behavior: 23 | 1. Go to '...' 24 | 2. etc. 25 | 26 | **Expected behavior** 27 | A clear and concise description of what you expected to happen. 28 | 29 | **Screenshots** 30 | Please attach a screenshot of the bug. 31 | 32 | **Desktop (please complete the following information):** 33 | - OS: [Windows 10, Windows 11, Linux distro] 34 | - Version: [e.g. 1.0.0] 35 | - CPU: [e.g. Intel Core ..., AMD Ryzen ..., etc.] 36 | - GPU: [e.g. NVIDIA GeForce .../Radeon RX .../Intel UHD .../etc.] 37 | - GPU driver: [e.g Nvidia driver 545.XX, AMD driver 24.X.X, etc] 38 | 39 | **Additional context** 40 | Add any other context about the problem here. 41 | -------------------------------------------------------------------------------- /.github/linux/Zelda64Recompiled.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Zelda64Recompiled 3 | Type=Application 4 | Terminal=false 5 | Icon=Zelda64Recompiled 6 | Exec=Zelda64Recompiled 7 | GenericName=Zelda64Recompiled 8 | Categories=Game; 9 | 10 | -------------------------------------------------------------------------------- /.github/linux/appimage.sh: -------------------------------------------------------------------------------- 1 | ARCH=$(uname -m) 2 | LINUX_DEPLOY_ARCH=$(uname -m) 3 | 4 | if [ "$ARCH" = "x86_64" ]; then 5 | ARCH="x86_64" 6 | LINUX_DEPLOY_ARCH="x86_64" 7 | elif [ "$ARCH" = "aarch64" ]; then 8 | ARCH="arm_aarch64" 9 | LINUX_DEPLOY_ARCH="aarch64" 10 | else 11 | echo "Unsupported architecture: $ARCH" 12 | exit 1 13 | fi 14 | 15 | curl -sSfLO "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-$LINUX_DEPLOY_ARCH.AppImage" 16 | curl -sSfLO "https://github.com/linuxdeploy/linuxdeploy-plugin-gtk/raw/master/linuxdeploy-plugin-gtk.sh" 17 | 18 | chmod a+x linuxdeploy* 19 | 20 | mkdir -p AppDir/usr/bin 21 | cp Zelda64Recompiled AppDir/usr/bin/ 22 | cp -r assets/ AppDir/usr/bin/ 23 | cp gamecontrollerdb.txt AppDir/usr/bin/ 24 | cp icons/512.png AppDir/Zelda64Recompiled.png 25 | cp .github/linux/Zelda64Recompiled.desktop AppDir/ 26 | 27 | "./linuxdeploy-$LINUX_DEPLOY_ARCH.AppImage" --appimage-extract 28 | mv squashfs-root/ deploy 29 | ./deploy/AppRun --appdir=AppDir/ -d AppDir/Zelda64Recompiled.desktop -i AppDir/Zelda64Recompiled.png -e AppDir/usr/bin/Zelda64Recompiled --plugin gtk 30 | sed -i 's/exec/#exec/g' AppDir/AppRun 31 | echo 'if [ -f "portable.txt" ]; then' >> AppDir/AppRun 32 | echo ' APP_FOLDER_PATH=$PWD' >> AppDir/AppRun 33 | echo ' cd "$this_dir"/usr/bin/' >> AppDir/AppRun 34 | echo ' APP_FOLDER_PATH=$APP_FOLDER_PATH ./Zelda64Recompiled' >> AppDir/AppRun 35 | echo 'else' >> AppDir/AppRun 36 | echo ' cd "$this_dir"/usr/bin/' >> AppDir/AppRun 37 | echo ' ./Zelda64Recompiled' >> AppDir/AppRun 38 | echo 'fi' >> AppDir/AppRun 39 | 40 | # Remove conflicting libraries 41 | rm -rf AppDir/usr/lib/libgmodule* 42 | rm -rf AppDir/usr/lib/gio/modules/*.so 43 | rm -rf AppDir/usr/lib/libwayland* 44 | 45 | ./deploy/usr/bin/linuxdeploy-plugin-appimage --appdir=AppDir 46 | -------------------------------------------------------------------------------- /.github/workflows/update-pr-artifacts.yml: -------------------------------------------------------------------------------- 1 | name: update-pr-artifacts 2 | on: 3 | workflow_run: 4 | workflows: [validate-external, validate-internal] 5 | types: 6 | - completed 7 | jobs: 8 | update-pr-artifacts: 9 | runs-on: ubuntu-latest 10 | if: (github.event.workflow_run.event == 'pull_request' || github.event.workflow_run.event == 'pull_request_target') && github.event.workflow_run.conclusion == 'success' 11 | name: Update PR Artifacts 12 | steps: 13 | - name: Get PR Number 14 | id: pr-number 15 | uses: actions/github-script@v6 16 | with: 17 | result-encoding: string 18 | script: | 19 | const { owner, repo } = context.repo; 20 | 21 | const findPRNumber = async () => { 22 | const pulls = await github.rest.pulls.list({ owner, repo }); 23 | for await (const { data } of github.paginate.iterator(pulls)) { 24 | for (const pull of data) { 25 | if (pull.head.sha === '${{ github.event.workflow_run.head_sha }}' && pull.user.id === ${{ github.event.sender.id }}) { 26 | return pull.number; 27 | } 28 | } 29 | } 30 | 31 | return null; 32 | }; 33 | 34 | const prNumber = await findPRNumber(); 35 | if (!prNumber) { 36 | core.error(`No matching pull request found`); 37 | } else { 38 | return prNumber; 39 | } 40 | - name: Create Artifacts Content 41 | id: artifacts-content 42 | uses: actions/github-script@v6 43 | with: 44 | result-encoding: string 45 | script: | 46 | const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ 47 | owner: context.repo.owner, 48 | repo: context.repo.repo, 49 | run_id: context.payload.workflow_run.id, 50 | }); 51 | 52 | const nightlyLinks = artifacts.data.artifacts.reduce((acc, item) => { 53 | acc += `- [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip)\n`; 54 | return acc; 55 | }, '### Build Artifacts\n'); 56 | 57 | return nightlyLinks; 58 | - name: Update PR Description 59 | uses: garrettjoecox/pr-section@3.1.0 60 | with: 61 | section-name: 'artifacts' 62 | repo-token: '${{ secrets.GITHUB_TOKEN }}' 63 | pr-number: ${{ steps.pr-number.outputs.result }} 64 | section-value: '${{ steps.artifacts-content.outputs.result }}' 65 | -------------------------------------------------------------------------------- /.github/workflows/validate-external.yml: -------------------------------------------------------------------------------- 1 | name: validate-external 2 | on: 3 | pull_request_target: 4 | types: [opened, synchronize] 5 | jobs: 6 | authorize: 7 | if: github.repository != github.event.pull_request.head.repo.full_name 8 | environment: 9 | ${{ github.event_name == 'pull_request_target' && 10 | github.event.pull_request.head.repo.full_name != github.repository && 11 | 'external' || 'internal' }} 12 | runs-on: ubuntu-latest 13 | steps: 14 | - run: echo ✓ 15 | build: 16 | needs: authorize 17 | uses: ./.github/workflows/validate.yml 18 | secrets: 19 | ZRE_REPO_WITH_PAT: ${{ secrets.ZRE_REPO_WITH_PAT }} 20 | -------------------------------------------------------------------------------- /.github/workflows/validate-internal.yml: -------------------------------------------------------------------------------- 1 | name: validate-internal 2 | on: 3 | push: 4 | branches: 5 | - dev 6 | pull_request: 7 | types: [opened, synchronize] 8 | jobs: 9 | build: 10 | if: github.event_name == 'push' || github.repository == github.event.pull_request.head.repo.full_name 11 | uses: ./.github/workflows/validate.yml 12 | secrets: inherit 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # VSCode file settings 2 | .vscode/settings.json 3 | .vscode/c_cpp_properties.json 4 | .vscode/launch.json 5 | 6 | # Input elf and rom files 7 | *.elf 8 | *.z64 9 | 10 | # Output C files 11 | RecompiledFuncs/ 12 | RecompiledPatches/ 13 | 14 | # Linux build output 15 | build/ 16 | *.o 17 | 18 | # Windows build output 19 | *.exe 20 | *.dll 21 | *.lib 22 | *.pdb 23 | 24 | # User-specific files 25 | *.rsuser 26 | *.suo 27 | *.user 28 | *.userosscache 29 | *.sln.docstates 30 | 31 | # Build results 32 | [Dd]ebug/ 33 | [Dd]ebugPublic/ 34 | [Rr]elease/ 35 | [Rr]eleases/ 36 | x64/ 37 | x86/ 38 | [Ww][Ii][Nn]32/ 39 | [Aa][Rr][Mm]/ 40 | [Aa][Rr][Mm]64/ 41 | bld/ 42 | [Bb]in/ 43 | [Oo]bj/ 44 | [Ll]og/ 45 | [Ll]ogs/ 46 | out/ 47 | 48 | # Visual Studio 2015/2017 cache/options directory 49 | .vs/ 50 | vcpkg_installed/ 51 | 52 | # Runtime files 53 | imgui.ini 54 | rt64.log 55 | 56 | node_modules/ 57 | 58 | # Recompiler Linux binary 59 | N64Recomp 60 | RSPRecomp 61 | .DS_Store 62 | 63 | # Controller mappings file 64 | gamecontrollerdb.txt 65 | 66 | # Temp files 67 | src/main/*TMP -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/RmlUi"] 2 | path = lib/RmlUi 3 | url = https://github.com/mikke89/RmlUi/ 4 | [submodule "lib/rt64"] 5 | path = lib/rt64 6 | url = https://github.com/rt64/rt64 7 | [submodule "lib/freetype-windows-binaries"] 8 | path = lib/freetype-windows-binaries 9 | url = https://github.com/ubawurinna/freetype-windows-binaries 10 | [submodule "lib/lunasvg"] 11 | path = lib/lunasvg 12 | url = https://github.com/sammycage/lunasvg 13 | [submodule "lib/sse2neon"] 14 | path = lib/sse2neon 15 | url = https://github.com/DLTcollab/sse2neon.git 16 | [submodule "lib/N64ModernRuntime"] 17 | path = lib/N64ModernRuntime 18 | url = https://github.com/N64Recomp/N64ModernRuntime.git 19 | [submodule "Dk64Syms"] 20 | path = Dk64Syms 21 | url = https://github.com/Rainchus/Dk64Syms.git 22 | [submodule "lib/dk64_decomp"] 23 | path = lib/dk64_decomp 24 | url = https://gitlab.com/Rainchus/dk64 25 | branch = recomp 26 | -------------------------------------------------------------------------------- /BUILDING.md: -------------------------------------------------------------------------------- 1 | # Building Guide 2 | 3 | This guide will help you build the project on your local machine. The process will require you to provide a ROM of the JP version of the game. 4 | 5 | These steps cover: running the recompiler and building the project. 6 | 7 | ## 1. Clone the ChameleonTwist1-JP-Recomp Repository 8 | This project makes use of submodules so you will need to clone the repository with the `--recurse-submodules` flag. 9 | 10 | ```bash 11 | git clone --recurse-submodules 12 | # if you forgot to clone with --recurse-submodules 13 | # cd /path/to/cloned/repo && git submodule update --init --recursive 14 | ``` 15 | 16 | ## 2. Install Dependencies 17 | 18 | ### Linux 19 | For Linux the instructions for Ubuntu are provided, but you can find the equivalent packages for your preferred distro. 20 | 21 | ```bash 22 | # For Ubuntu, simply run: 23 | sudo apt-get install cmake ninja-build libsdl2-dev libgtk-3-dev lld llvm clang 24 | ``` 25 | 26 | ### Windows 27 | You will need to install [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/). 28 | In the setup process you'll need to select the following options and tools for installation: 29 | - Desktop development with C++ 30 | - C++ Clang Compiler for Windows 31 | - C++ CMake tools for Windows 32 | 33 | The other tool necessary will be `make` which can be installe via [Chocolatey](https://chocolatey.org/): 34 | ```bash 35 | choco install make 36 | ``` 37 | 38 | ## 3. Generating the C code 39 | 40 | You will need to place a Japanese ROM with the name `chameleontwist.jp.z64` in the root of the project 41 | Now that you have the required files, you must build the live-recomp branch of [N64Recomp](https://github.com/N64Recomp/N64Recomp/tree/live-recomp) and run it to generate the C code to be compiled. The building instructions can be found [here](https://github.com/Mr-Wiseguy/N64Recomp?tab=readme-ov-file#building). That will build the executables: `N64Recomp` and `RSPRecomp` which you should copy to the root of the Zelda64Recomp repository. 42 | 43 | After that, go back to the repository root, and run the following commands: 44 | ```bash 45 | ./N64Recomp jp.rev0.toml 46 | ./RSPRecomp aspMain.us.rev1.toml 47 | ``` 48 | 49 | ## 4. Temporary Step 50 | Copy [this version](https://github.com/N64Recomp/N64Recomp/blob/live-recomp/include/recomp.h) of `recomp.h` to `lib/N64ModernRuntime/librecomp/include/librecomp/recomp.h`
51 | Soon this will not be required 52 | 53 | 54 | ## 5. Building the Project 55 | 56 | Finally, you can build the project! :rocket: 57 | 58 | On Windows, you can open the repository folder with Visual Studio, and you'll be able to `[build / run / debug]` the project from there. 59 | 60 | If you prefer the command line or you're on a Unix platform you can build the project using CMake: 61 | 62 | ```bash 63 | cmake -S . -B build-cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -G Ninja -DCMAKE_BUILD_TYPE=Release # or Debug if you want to debug 64 | cmake --build build-cmake --target Zelda64Recompiled -j$(nproc) --config Release # or Debug 65 | ``` 66 | 67 | ## 6. Success 68 | 69 | Voilà! You should now have a `ChameleonTwistJPRecompiled` executable in the build directory! If you used Visual Studio this will be `out/build/x64-[Configuration]` and if you used the provided CMake commands then this will be `build-cmake`. You will need to run the executable out of the root folder of this project or copy the assets folder to the build folder to run it. 70 | -------------------------------------------------------------------------------- /CMakeSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "x64-Debug", 5 | "generator": "Ninja", 6 | "configurationType": "Debug", 7 | "inheritEnvironments": [ "clang_cl_x64" ], 8 | "buildRoot": "${projectDir}\\out\\build\\${name}", 9 | "installRoot": "${projectDir}\\out\\install\\${name}", 10 | "cmakeCommandArgs": "", 11 | "buildCommandArgs": "", 12 | "ctestCommandArgs": "" 13 | }, 14 | { 15 | "name": "x64-Release", 16 | "generator": "Ninja", 17 | "configurationType": "Release", 18 | "buildRoot": "${projectDir}\\out\\build\\${name}", 19 | "installRoot": "${projectDir}\\out\\install\\${name}", 20 | "cmakeCommandArgs": "", 21 | "buildCommandArgs": "", 22 | "ctestCommandArgs": "", 23 | "inheritEnvironments": [ "clang_cl_x64" ] 24 | }, 25 | { 26 | "name": "x64-ReleaseWithDebInfo", 27 | "generator": "Ninja", 28 | "configurationType": "RelWithDebInfo", 29 | "buildRoot": "${projectDir}\\out\\build\\${name}", 30 | "installRoot": "${projectDir}\\out\\install\\${name}", 31 | "cmakeCommandArgs": "", 32 | "buildCommandArgs": "", 33 | "ctestCommandArgs": "", 34 | "inheritEnvironments": [ "clang_cl_x64" ], 35 | "variables": [] 36 | } 37 | ] 38 | } -------------------------------------------------------------------------------- /N64ModernRuntime.patch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rainchus/Dk64-Recompiled/7d24f9bbd7f8b0931695f04a1ebb0309fd0eec75/N64ModernRuntime.patch -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Chameleon Twist: Recompiled 2 | Chameleon Twist: Recompiled is a project that uses [N64: Recompiled](https://github.com/Mr-Wiseguy/N64Recomp) to **statically recompile** Chameleon Twist into a native port with many new features and enhancements. This project uses [RT64](https://github.com/rt64/rt64) as the rendering engine to provide some of these enhancements. 3 | 4 | ### [Check out the latest release here](https://github.com/Rainchus/ChameleonTwist1-JP-Recomp/releases). 5 | 6 | ### **This repository and its releases do not contain game assets. The original game is required to build or run this project.** 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | _Thank you [Blaze](https://runblaze.dev) for supporting this project by providing Linux ARM64 and Apple Silicon macOS Github Action Runners!_ 19 | 20 |
21 | 22 | ## Table of Contents 23 | * [System Requirements](#system-requirements) 24 | * [Features](#features) 25 | * [Plug and Play](#plug-and-play) 26 | * [Fully Intact N64 Effects](#fully-intact-n64-effects) 27 | * [Easy-to-Use Menus](#easy-to-use-menus) 28 | * [High Framerate Support](#high-framerate-support) 29 | * [Low Input Lag](#low-input-lag) 30 | * [Instant Load Times](#instant-load-times) 31 | * [Linux and Steam Deck Support](#linux-and-steam-deck-support) 32 | * [Planned Features](#planned-features) 33 | * [FAQ](#faq) 34 | * [Known Issues](#known-issues) 35 | * [Building](#building) 36 | * [Libraries Used and Projects Referenced](#libraries-used-and-projects-referenced) 37 | 38 | ## System Requirements 39 | A GPU supporting Direct3D 12.0 (Shader Model 6) or Vulkan 1.2 is required to run this project. The oldest GPUs that should be supported for each vendor are: 40 | * GeForce GT 630 41 | * Radeon HD 7750 (the one from 2012, not to be confused with the RX 7000 series) and newer 42 | * Intel HD 510 (Skylake) 43 | 44 | A CPU supporting the AVX instruction set is also required (Intel Core 2000 series or AMD Bulldozer and newer). 45 | 46 | If you have issues with crashes on startup, make sure your graphics drivers are fully up to date. 47 | 48 | ## Features 49 | 50 | #### Fully Intact N64 Effects 51 | A lot of care was put into RT64 to make sure all graphical effects were rendered exactly as they did originally on the N64. No workarounds or "hacks" were made to replicate these effects, with the only modifications to them being made for enhancement purposes such as widescreen support. 52 | 53 | #### Easy-to-Use Menus 54 | Gameplay settings, graphics settings, input mappings, and audio settings can all be configured with the in-game config menu. The menus can all be used with mouse, controller, or keyboard for maximum convenience. 55 | 56 | #### High Framerate Support 57 | Play at any framerate you want thanks to functionality provided by RT64! Game objects and terrain, texture scrolling, screen effects, and most HUD elements are all rendered at high framerates. By default, this project is configured to run at your monitor's refresh rate. You can also play at the original framerate of the game if you prefer. **Changing framerate has no effect on gameplay.** 58 | 59 | **Note**: External framerate limiters (such as the NVIDIA Control Panel) are known to potentially cause problems, so if you notice any stuttering then turn them off and use the manual framerate slider in the in-game graphics menu instead. 60 | 61 | #### Widescreen and Ultrawide Support 62 | Any aspect ratio is supported, with most effects modded to work correctly in widescreen. The HUD can also be positioned at 16:9 when using ultrawide aspect ratios if preferred. 63 | 64 | **Note**: Some animation quirks can be seen at the edges of the screen in certain cutscenes when using very wide aspect ratios. 65 | 66 | #### Additional Control Options 67 | Customize your experience by setting your stick deadzone to your liking, as well as adjusting the X and Y axis inversion for both aiming and the optional dual analog camera. 68 | 69 | #### Low Input Lag 70 | This project has been optimized to have as little input lag as possible, making the game feel more responsive than ever! 71 | 72 | #### Instant Load Times 73 | Saving and loading files, going from place to place, and pausing all happen in the blink of an eye thanks to the game running natively on modern hardware. 74 | 75 | #### Linux and Steam Deck Support 76 | A Linux binary is available for playing on most up-to-date distros, including on the Steam Deck. 77 | 78 | To play on Steam Deck, extract the Linux build onto your deck. Then, in desktop mode, right click the Zelda64Recompiled executable file and select "Add to Steam". From there, you can return to Gaming mode and configure the controls as needed. See the [Steam Deck gyro aim FAQ section](#how-do-i-set-up-gyro-aiming-on-steam-deck) for more detailed instructions. 79 | 80 | ## FAQ 81 | 82 | #### What is static recompilation? 83 | Static recompilation is the process of automatically translating an application from one platform to another. For more details, check out the full description of how this project's recompilation works here: [N64: Recompiled](https://github.com/Mr-Wiseguy/N64Recomp). 84 | 85 | #### How is this related to the decompilation project? 86 | Unlike N64 ports in the past, this project is not based on the source code provided by a decompilation of the game. This is because static recompilation bypasses the need for decompiled source code when making a port, allowing ports to be made **without source code**. However, the reverse engineering work done by the decompilation team was invaluable for providing some of the enhancements featured in this project. For this reason, the project uses headers and some functions from the decompilation project in order to make modifications to the game. Many thanks to the decompilation team for all of the hard work they've done. 87 | 88 | #### Where is the savefile stored? 89 | - Windows: `%LOCALAPPDATA%\ChameleonTwistRecompiled\saves` 90 | - Linux: `~/.config/ChameleonTwistRecompiled/saves` 91 | 92 | #### How do I choose a different ROM? 93 | **You don't.** This project is **only** a port of Chameleon Twist and it will only accept one specific ROM: the JP version of the N64 release of Chameleon Twist. ROMs in formats other than .z64 will be automatically converted, as long as it is the correct ROM. **It is not an emulator and it cannot run any arbitrary ROM.** 94 | 95 | If you want to play a modded ROM or in another language, note that support for modding and other languages will be added to the project itself in the future and will not rely on you supplying a different ROM. 96 | 97 | ## Known Issues 98 | * Intel GPUs on Linux may not currently work. If you have experience with Vulkan development on Linux, help here would be greatly appreciated! 99 | * The prebuilt Linux binary may not work correctly on some distributions of Linux. If you encounter such an issue, building the project locally yourself is recommended. A Flatpak or AppImage may be provided in the future to solve this issue. Adding the Linux version to Steam and setting "Steam Linux Runtime" as the compatibility tool or launching it via Gamescope may work around the issue. Alternatively, running the Windows version with Proton is known to work well and may also work around this issue. 100 | * Overlays such as MSI Afterburner and other software such as Wallpaper Engine can cause performance issues with this project that prevent the game from rendering correctly. Disabling such software is recommended. 101 | 102 | ## Building 103 | Building is not required to play this project, as prebuilt binaries (which do not contain game assets) can be found in the [Releases](https://github.com/Rainchus/ChameleonTwist1-JP-Recomp/releases) section. Instructions on how to build this project can be found in the [BUILDING.md](BUILDING.md) file. 104 | 105 | ## Libraries Used and Projects Referenced 106 | * [RT64](https://github.com/rt64/rt64) for the project's rendering engine 107 | * [RmlUi](https://github.com/mikke89/RmlUi) for building the menus and launcher 108 | * [lunasvg](https://github.com/sammycage/lunasvg) for SVG rendering, used by RmlUi 109 | * [FreeType](https://freetype.org/) for font rendering, used by RmlUi 110 | * [moodycamel::ConcurrentQueue](https://github.com/cameron314/concurrentqueue) for semaphores and fast, lock-free MPMC queues 111 | * [Gamepad Motion Helpers](https://github.com/JibbSmart/GamepadMotionHelpers) for sensor fusion and calibration algorithms to implement gyro aiming 112 | * [Chameleon Twist Decompilation](https://github.com/chameleonTwistRet/chameleonTwistv1.0-JP) for headers and some function definitions, used for making patches or some enhancements 113 | * [Ares emulator](https://github.com/ares-emulator/ares) for RSP vector instruction reference implementations, used in RSP recompilation 114 | 115 | Special thanks to [thecozies](https://github.com/thecozies) for designing and helping implement the launcher and config menus! 116 | -------------------------------------------------------------------------------- /assets/ChiaroBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rainchus/Dk64-Recompiled/7d24f9bbd7f8b0931695f04a1ebb0309fd0eec75/assets/ChiaroBold.otf -------------------------------------------------------------------------------- /assets/ChiaroNormal.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rainchus/Dk64-Recompiled/7d24f9bbd7f8b0931695f04a1ebb0309fd0eec75/assets/ChiaroNormal.otf -------------------------------------------------------------------------------- /assets/LatoLatin-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rainchus/Dk64-Recompiled/7d24f9bbd7f8b0931695f04a1ebb0309fd0eec75/assets/LatoLatin-Bold.ttf -------------------------------------------------------------------------------- /assets/LatoLatin-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rainchus/Dk64-Recompiled/7d24f9bbd7f8b0931695f04a1ebb0309fd0eec75/assets/LatoLatin-BoldItalic.ttf -------------------------------------------------------------------------------- /assets/LatoLatin-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rainchus/Dk64-Recompiled/7d24f9bbd7f8b0931695f04a1ebb0309fd0eec75/assets/LatoLatin-Italic.ttf -------------------------------------------------------------------------------- /assets/LatoLatin-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rainchus/Dk64-Recompiled/7d24f9bbd7f8b0931695f04a1ebb0309fd0eec75/assets/LatoLatin-Regular.ttf -------------------------------------------------------------------------------- /assets/NotoEmoji-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rainchus/Dk64-Recompiled/7d24f9bbd7f8b0931695f04a1ebb0309fd0eec75/assets/NotoEmoji-Regular.ttf -------------------------------------------------------------------------------- /assets/components/prompt.rml: -------------------------------------------------------------------------------- 1 | 31 | -------------------------------------------------------------------------------- /assets/config_menu.rml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Inventory 6 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
36 |
37 |
38 | 39 | 40 |
General
41 |
42 |
43 | 44 |