diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index c9f585e..ab169b2 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -1,149 +1,149 @@ -name: Rust - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - workflow_dispatch: - -jobs: - checker: - name: Check, Clippy, Tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Install minimal nightly rust - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly - components: rustfmt, clippy - default: true - target: x86_64-unknown-linux-gnu - - uses: Swatinem/rust-cache@v2 - name: Rust Cache - with: - prefix-key: "checker" - - name: Clippy - uses: actions-rs/cargo@v1 - continue-on-error: false - with: - command: clippy - args: --all-targets --all-features --target=x86_64-unknown-linux-gnu -- -D warnings - - name: TUI Test - uses: actions-rs/cargo@v1 - continue-on-error: false - with: - working-directory: training_mod_tui - plugin: - name: Plugin NRO - runs-on: ubuntu-latest - container: - image: jugeeya/cargo-skyline:3.2.0-no-dkp - steps: - - uses: actions/checkout@v2 - - uses: Swatinem/rust-cache@v2 - name: Rust Cache - with: - prefix-key: "plugin" - - name: Build release NRO - id: build_release - run: cargo-skyline skyline build --release - env: - HOME: /root - - name: Upload plugin artifact - uses: actions/upload-artifact@v2 - with: - name: plugin - path: target/aarch64-skyline-switch/release/libtraining_modpack.nro - plugin_outside_training_mode: - name: Plugin NRO (Outside Training Mode) - if: github.ref == 'refs/heads/main' - runs-on: ubuntu-latest - container: - image: jugeeya/cargo-skyline:3.2.0-no-dkp - steps: - - uses: actions/checkout@v2 - - uses: Swatinem/rust-cache@v2 - name: Rust Cache - with: - prefix-key: "plugin" - - name: Build outside_training_mode NRO - run: | - cargo-skyline skyline build --release --features outside_training_mode - env: - HOME: /root - - name: Upload plugin (outside training mode) artifact - uses: actions/upload-artifact@v2 - with: - name: plugin_outside_training_mode - path: target/aarch64-skyline-switch/release/libtraining_modpack.nro - upload: - name: Upload Beta Release - runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' - needs: - - plugin - steps: - - name: Download all artifacts - uses: actions/download-artifact@v2 - - name: Prepare zip - id: prepare_zip - env: - SMASH_PLUGIN_DIR: atmosphere/contents/01006A800016E000/romfs/skyline/plugins - run: | - mkdir -p ${{env.SMASH_PLUGIN_DIR}} - cp plugin/libtraining_modpack.nro ${{env.SMASH_PLUGIN_DIR}}/libtraining_modpack.nro - wget https://github.com/ultimate-research/params-hook-plugin/releases/download/v13.0.1/libparam_hook.nro - wget https://github.com/ultimate-research/nro-hook-plugin/releases/download/v0.4.0/libnro_hook.nro - wget https://github.com/jugeeya/nn-hid-hook/releases/download/beta/libnn_hid_hook.nro - cp libparam_hook.nro ${{env.SMASH_PLUGIN_DIR}}/libparam_hook.nro - cp libnro_hook.nro ${{env.SMASH_PLUGIN_DIR}}/libnro_hook.nro - cp libnn_hid_hook.nro ${{env.SMASH_PLUGIN_DIR}}/libnn_hid_hook.nro - zip -r training_modpack_beta.zip atmosphere - - name: Delete Release - uses: dev-drprasad/delete-tag-and-release@v0.2.0 - with: - tag_name: beta - delete_release: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Update Release - uses: meeDamian/github-release@2.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - prerelease: true - allow_override: true - gzip: false - tag: beta - commitish: main - name: beta - body: > - Beta built off of the latest code in the repository. - - # Changelog - - You can find the changelog here: https://github.com/jugeeya/UltimateTrainingModpack#beta-changelog - - - ## Installation - - *For fuller instructions, please join the [Discord](https://discord.gg/xUZWJ5BWe7) and visit the #setup-and-download channel.* - - - (*Console only*) Install Atmosphere to your hacked Switch. One great guide can be found at https://switch.homebrew.guide/ - - - Place the **contents** of the `training_modpack_beta.zip` on the root of your SD card. This means that you first unzip the file, then place its folder on the SD card root. The `atmosphere` folder should be **merged** onto the root of your SD card. - - - *For Ryujinx*: Paste the `contents` folder inside `atmosphere` into `%AppData%/Ryujinx/mods/` - - - Download Skyline: https://github.com/skyline-dev/skyline/releases. Place the `exefs` folder from the zip into `atmosphere/contents/01006A800016E000` on your SD card. - - - *For Ryujinx*: Paste these files in `%AppData%/Ryujinx/mods/contents/01006a800016e000` - files: > - training_modpack_beta.zip - - name: Upload zip as artifact - uses: actions/upload-artifact@v1 - with: - name: full_build - path: training_modpack_beta.zip +name: Rust + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + +jobs: + checker: + name: Check, Clippy, Tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install minimal nightly rust + uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly + components: rustfmt, clippy + default: true + target: x86_64-unknown-linux-gnu + - uses: Swatinem/rust-cache@v2 + name: Rust Cache + with: + prefix-key: "checker-2" + - name: Clippy + uses: actions-rs/cargo@v1 + continue-on-error: false + with: + command: clippy + args: --all-targets --all-features --target=x86_64-unknown-linux-gnu -- -D warnings + - name: TUI Test + uses: actions-rs/cargo@v1 + continue-on-error: false + with: + working-directory: training_mod_tui + plugin: + name: Plugin NRO + runs-on: ubuntu-latest + container: + image: jugeeya/cargo-skyline:3.2.0-no-dkp + steps: + - uses: actions/checkout@v2 + - uses: Swatinem/rust-cache@v2 + name: Rust Cache + with: + prefix-key: "plugin" + - name: Build release NRO + id: build_release + run: cargo-skyline skyline build --release + env: + HOME: /root + - name: Upload plugin artifact + uses: actions/upload-artifact@v2 + with: + name: plugin + path: target/aarch64-skyline-switch/release/libtraining_modpack.nro + plugin_outside_training_mode: + name: Plugin NRO (Outside Training Mode) + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + container: + image: jugeeya/cargo-skyline:3.2.0-no-dkp + steps: + - uses: actions/checkout@v2 + - uses: Swatinem/rust-cache@v2 + name: Rust Cache + with: + prefix-key: "plugin" + - name: Build outside_training_mode NRO + run: | + cargo-skyline skyline build --release --features outside_training_mode + env: + HOME: /root + - name: Upload plugin (outside training mode) artifact + uses: actions/upload-artifact@v2 + with: + name: plugin_outside_training_mode + path: target/aarch64-skyline-switch/release/libtraining_modpack.nro + upload: + name: Upload Beta Release + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/main' + needs: + - plugin + steps: + - name: Download all artifacts + uses: actions/download-artifact@v2 + - name: Prepare zip + id: prepare_zip + env: + SMASH_PLUGIN_DIR: atmosphere/contents/01006A800016E000/romfs/skyline/plugins + run: | + mkdir -p ${{env.SMASH_PLUGIN_DIR}} + cp plugin/libtraining_modpack.nro ${{env.SMASH_PLUGIN_DIR}}/libtraining_modpack.nro + wget https://github.com/ultimate-research/params-hook-plugin/releases/download/v13.0.1/libparam_hook.nro + wget https://github.com/ultimate-research/nro-hook-plugin/releases/download/v0.4.0/libnro_hook.nro + wget https://github.com/jugeeya/nn-hid-hook/releases/download/beta/libnn_hid_hook.nro + cp libparam_hook.nro ${{env.SMASH_PLUGIN_DIR}}/libparam_hook.nro + cp libnro_hook.nro ${{env.SMASH_PLUGIN_DIR}}/libnro_hook.nro + cp libnn_hid_hook.nro ${{env.SMASH_PLUGIN_DIR}}/libnn_hid_hook.nro + zip -r training_modpack_beta.zip atmosphere + - name: Delete Release + uses: dev-drprasad/delete-tag-and-release@v0.2.0 + with: + tag_name: beta + delete_release: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Update Release + uses: meeDamian/github-release@2.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + prerelease: true + allow_override: true + gzip: false + tag: beta + commitish: main + name: beta + body: > + Beta built off of the latest code in the repository. + + # Changelog + + You can find the changelog here: https://github.com/jugeeya/UltimateTrainingModpack#beta-changelog + + + ## Installation + + *For fuller instructions, please join the [Discord](https://discord.gg/xUZWJ5BWe7) and visit the #setup-and-download channel.* + + - (*Console only*) Install Atmosphere to your hacked Switch. One great guide can be found at https://switch.homebrew.guide/ + + - Place the **contents** of the `training_modpack_beta.zip` on the root of your SD card. This means that you first unzip the file, then place its folder on the SD card root. The `atmosphere` folder should be **merged** onto the root of your SD card. + + - *For Ryujinx*: Paste the `contents` folder inside `atmosphere` into `%AppData%/Ryujinx/mods/` + + - Download Skyline: https://github.com/skyline-dev/skyline/releases. Place the `exefs` folder from the zip into `atmosphere/contents/01006A800016E000` on your SD card. + + - *For Ryujinx*: Paste these files in `%AppData%/Ryujinx/mods/contents/01006a800016e000` + files: > + training_modpack_beta.zip + - name: Upload zip as artifact + uses: actions/upload-artifact@v1 + with: + name: full_build + path: training_modpack_beta.zip diff --git a/src/common/menu.rs b/src/common/menu.rs index b12e313..d4cc525 100644 --- a/src/common/menu.rs +++ b/src/common/menu.rs @@ -181,7 +181,7 @@ pub static mut BUTTON_PRESSES: ButtonPresses = ButtonPresses { }, }; -pub fn handle_get_npad_state(state: *mut NpadGcState, _controller_id: *const u32) { +pub fn handle_get_npad_state(state: *mut NpadGcState, controller_id: *const u32) { unsafe { let update_count = (*state).updateCount; let flags = (*state).Flags; @@ -227,6 +227,17 @@ pub fn handle_get_npad_state(state: *mut NpadGcState, _controller_id: *const u32 BUTTON_PRESSES.up.is_pressed = true; } + // For digital triggers: these at TRIGGER_MAX means we should consider a press + if controller_is_gcc(*controller_id) { + if (*state).LTrigger == 0x7FFF { + BUTTON_PRESSES.l.is_pressed = true; + } + + if (*state).RTrigger == 0x7FFF { + BUTTON_PRESSES.r.is_pressed = true; + } + } + // If we're here, remove all other Npad presses... // Should we exclude the home button? (*state) = NpadGcState::default(); @@ -247,10 +258,14 @@ lazy_static! { ); } +pub unsafe fn controller_is_gcc(controller_id: u32) -> bool { + let style_set = GetNpadStyleSet(&controller_id as *const _); + (style_set.flags & (1 << 5)) > 0 +} + pub unsafe fn p1_controller_is_gcc() -> bool { let p1_controller_id = crate::training::input_delay::p1_controller_id(); - let p1_style_set = GetNpadStyleSet(&p1_controller_id as *const _); - (p1_style_set.flags & (1 << 5)) > 0 + controller_is_gcc(p1_controller_id) } pub unsafe fn quick_menu_loop() {