feat(nfc): NFC tags from the player's own dumps, with an NFC tab in the Insert menu #280

Open
airdamien wants to merge 4 commits from airdamien/Longshot:feat/nfc-tags into main
First-time contributor

Why

Where the game asks for a figure's NFC tag, nothing happens in Longshot: the console's NFC library (nn::nfp, 23 functions the game imports) is not there. This gives the game that library on tags of the player's own: dump files in a folder, chosen and "tapped" from a new NFC tab in the Insert menu, and real tags on a Switch 2 Pro Controller's reader.

What changed

  • runtime: host/nn_nfp.c (new): nn::nfp on a pretended reader. The tags are files in the player's NFC folder (hos_nfc_dir: %LOCALAPPDATA%\Longshot\nfc, $XDG_DATA_HOME/longshot/nfc, or LONGSHOT_NFC_DIR): an NTAG215's 540 bytes (.bin) or a Flipper Zero NFC file (.nfc), checked in load_tag. Only the tag's ID and the figure's model are read from one (both plain on a tag): no key is needed or used. What the game writes to a tag (its application area) is kept in a file beside the saves (area_load, area_save), and no tag is written. The device's states follow what the game polls (GetDeviceState: searching, found, mounted).
  • runtime: the Switch 2 Pro Controller's reader (reader_main, reader_read, scan_run, Windows, over the controller pull request's hos_switch2_command): while the game waits for a tag and none of the files is held to the reader, a real tag on the controller is read and, when it is a figure's, given to the game; a scan copies one into the folder. The reader's commands are in the file's comment as the controller answered them.
  • runtime: host/nn_os_sync.c hos_event_init (an event of the OS layer's own making); host/rx_backend.c and gpu/vk/vk_api.h: MkwVkHost gets nfc_count, nfc_name, nfc_tap, nfc_state, nfc_dir, nfc_scan, nfc_scan_name (MKWVK_API_VERSION 22).
  • menu: gpu/vk/vk_menu.cpp: an NFC tab: the NFC tag row (the folder's files by name, listed again each time the menu opens: refresh_nfc), Tap tag, Remove tag, Scan tag on controller (nfc_press, nfc_scan_says).
  • docs: docs/nfc.md (new), README (the tab's rows and a paragraph), docs/development.md (three switches).
  • tests: tests/test_readme_menu_rows.py covers the NFC tab's rows; tests/test_menu_keys.py gets a stub for refresh_nfc.

Flags and settings

Flag What it does Default now Recommendation Helps on Doesn't help on Untested on
Insert menu, NFC tab: NFC tag (nfc_tag), Tap tag, Remove tag, Scan tag on controller Choose one of the folder's tags, hold it to the game's reader, take it away; read one from a controller into the folder The first tag; nothing held As it is Any PC - Linux at run time
LONGSHOT_NFC_DIR=<folder> Another folder of tag files Unset: the user's own Unset Tests; a portable set-up - -
HOS_NFP_TRACE=1 The application area's calls in the log Off Off Debugging - -
HOS_NFP_SEARCH=1 A test's: the reader looks for a tag from the start Off Off Checking the controller's reader without the game's NFC screen - -

Measurements

main: fbd42024 (2026-11-13)
this PR: feat/nfc-tags @ 1dd5ec73 (the measured commit; b99145e0 after it added only the row in docs/tested-configurations.md)
Hardware: NVIDIA GeForce RTX 5080 (Vulkan driver 0x93cec000), Windows 11; a Switch 2 Pro Controller (firmware 1.1.5) plugged in over USB
Scene: the save's load point, Link standing still; 3840x2160 output, DLSS, frame generation 3x, the game's frame rate cap 60
Method: 150 s runs, the first 60 s left out, two interleaved runs each (main, this PR, ...). The numbers are RX_VK_FRAME_LOG's frame times, a line per present (made frames included); the game's own rate is longshot_log.txt's vi: line.
How to reproduce: the builds from the same dump with nx2/make_game.py, the same longshot_options.ini and save, HOS_INPUT_SCRIPT=12:A,15:A,...,42:A HOS_INPUT_SCRIPT_BACKGROUND=1 RX_VK_FRAME_LOG=<csv>.

main @ fbd42024 this PR @ 1dd5ec73
presents per second (run 1 / run 2) 179.18 / 179.81 179.92 / 180.00
median frame time (run 1 / run 2) 5.556 / 5.563 ms 5.551 / 5.548 ms
p99 frame time (run 1 / run 2) 6.676 / 5.708 ms 6.079 / 5.796 ms
the game's own rate 60.0 fps 60.0 fps
main1: 16085 frames in 89.8 s after 60 s warm-up: 179.18 fps, median 5.556 ms, p99 6.676 ms, max 67.70 ms
main2: 16115 frames in 89.6 s after 60 s warm-up: 179.81 fps, median 5.563 ms, p99 5.708 ms, max 67.95 ms
nfc1:  16146 frames in 89.7 s after 60 s warm-up: 179.92 fps, median 5.551 ms, p99 6.079 ms, max 82.08 ms
nfc2:  16157 frames in 89.8 s after 60 s warm-up: 180.00 fps, median 5.548 ms, p99 5.796 ms, max 22.22 ms
[hos Presentation Thread] vi: 8321 frames presented (60.0 fps over the last 5.0 s, interval 1)   (main)
[hos Presentation Thread] vi: 8412 frames presented (60.0 fps over the last 5.0 s, interval 1)   (this PR)

The measured build was made before the branch was put on the controller pull request's last commit (a docs row); its code is the same.

Rebased since onto main @ 514591a3 (the branch's head is now ea2cbd4b) and not measured again: main's ten commits since fbd42024 are the website, docs, the forge script, a Damage taken row, an HDR route for FSR 4 that is opt-in, occlusion query numbering, quick pipelines and two input fixes; none is in this change's path, and the rebase of this pull request's own commit had no conflict. The rebased branch was built whole (nx2/make_game.py) and its checks run.

Testing

Tested:

  • python -I -B tests/run_all.py on Windows 11 (llvm-mingw): 454 passed, 7 failed, at the rebased head. The same 7 fail on main @ 514591a3 on this PC (test_bake_portability, test_fpx_sticky, test_spawn_emit, test_nup_paths, test_check_third_party, test_release, test_menu_i18n): local tools and packages, and one text of main's without its translations, not this change.
  • Linux (WSL, Ubuntu 24.04, clang): RX_VK_ONLY=1 nx2/build.py --standalone compiles and links longshot_vk.so; host/nn_nfp.c, host/nn_os_sync.c, host/rx_backend.c compile (-fsyntax-only with the build's includes).
  • In the game (RTX 5080, Windows 11): the game starts its reader (nfp: the game uses NFC tags: ...); the NFC tab lists the folder's files; Tap tag holds one to the reader (nfp: the NFC tag "..." held to the reader (model ...); the game is not asking for one now), Remove tag takes it away.
  • The controller's reader, on a real controller (firmware 1.1.5) with a real, blank NTAG215 on it: found, read whole without the password after the password is refused, and turned down as no figure's tag, both while the game waits (HOS_NFP_SEARCH=1) and from the Scan row (nfp: scan: the tag (UID ...) was read, but it is not a figure's tag: not saved).
  • The game reading tags to the end, by the author in play (RTX 5080, Windows 11, a build of this code that also has the VR and controller pull requests' changes, 35c10356): at the game's NFC screen, six tags in one session, from the menu and from the controller. The log of that session: nfp: the game waits for an NFC tag six times, each followed by nfp: the game reads the NFC tag "..." and nfp: the game stopped waiting for an NFC tag; once nfp: a tag read on the controller (model 0105000003580902): given to the game, a figure's real tag on the Switch 2 Pro Controller; tags tapped both ahead (... the game is not asking for one now: it stays there until it does) and while it waited (... the game was waiting for one). No nn::nfp import was left unimplemented and nothing crashed.
  • Scan tag on controller saving a figure's tag, by the author (the same build and PC, a figure's real tag on the Switch 2 Pro Controller): nfp: scan: waiting ten seconds for a tag on the controller, then nfp: the tag on the controller was scanned into the folder as "Scanned <ID>" (model 0105000003580902); the 540-byte file is in the folder.

Not tested:

  • What the game writes to a tag over several days or saves (the application area's file beside the saves was not looked at across sessions).
  • Linux at run time.

Needs other testers:

  • Linux, any GPU: the NFC tab lists a folder's tags and the game takes a tapped one, expecting the same as on Windows (T-KZYU)

Screenshots

The NFC tab, this PR @ 1dd5ec73, on pretended tags (main has no such tab):

The NFC tab

Risk and rollback

  • The game called nn::nfp::Initialize and AttachAvailabilityChangeEvent at start before (logged as unimplemented imports, returning as they were); now they do something: a reader that is always there. A game path that waited on the reader's event now goes on.
  • MKWVK_API_VERSION goes to 22: the exe and the renderer must be of one build, as at every bump.
  • The NFC tag row's choice is written to the options file as nfc_tag=<its place in the list>, as any row's; it means nothing to another build.
  • No dump is in the repository, and the docs say none may be. The checks need none.
  • Reverting the commit is enough.

Reviewer notes

  • Sits on the controller pull request (#279): review that one first; this one's own commit is the second.
  • The launcher's NFC page (MagicBeanDev/LongshotLauncher#49) fills the same folder.
  • The word for the figures' tags is "NFC tag" everywhere a player or a reader of the code sees it.
  • Not claimed in #dev-work beforehand.

Issues

None.

Checklist

For everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description).
  • Rebased on current main.
  • python -I -B tests/run_all.py run and passing (any failure that also fails on main is named above).
  • Tested in the game, or what wasn't is named under Testing.
  • Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests).
  • Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported.
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

If applicable

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • Flags noted, and the switch reference updated (docs/development.md, the README).
  • Screenshots for a change that shows on screen.
  • A row in docs/tested-configurations.md for each measured run.
  • MKWVK_API_VERSION bumped (gpu/vk/vk_api.h's MkwVkHost or MkwVkRenderer changed).
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths.
  • Docs updated.

🤖 Generated with Claude Code

## Why Where the game asks for a figure's NFC tag, nothing happens in Longshot: the console's NFC library (`nn::nfp`, 23 functions the game imports) is not there. This gives the game that library on tags of the player's own: dump files in a folder, chosen and "tapped" from a new NFC tab in the Insert menu, and real tags on a Switch 2 Pro Controller's reader. ## What changed - runtime: `host/nn_nfp.c` (new): `nn::nfp` on a pretended reader. The tags are files in the player's NFC folder (`hos_nfc_dir`: `%LOCALAPPDATA%\Longshot\nfc`, `$XDG_DATA_HOME/longshot/nfc`, or `LONGSHOT_NFC_DIR`): an NTAG215's 540 bytes (`.bin`) or a Flipper Zero NFC file (`.nfc`), checked in `load_tag`. Only the tag's ID and the figure's model are read from one (both plain on a tag): no key is needed or used. What the game writes to a tag (its application area) is kept in a file beside the saves (`area_load`, `area_save`), and no tag is written. The device's states follow what the game polls (`GetDeviceState`: searching, found, mounted). - runtime: the Switch 2 Pro Controller's reader (`reader_main`, `reader_read`, `scan_run`, Windows, over the controller pull request's `hos_switch2_command`): while the game waits for a tag and none of the files is held to the reader, a real tag on the controller is read and, when it is a figure's, given to the game; a scan copies one into the folder. The reader's commands are in the file's comment as the controller answered them. - runtime: `host/nn_os_sync.c` `hos_event_init` (an event of the OS layer's own making); `host/rx_backend.c` and `gpu/vk/vk_api.h`: `MkwVkHost` gets `nfc_count`, `nfc_name`, `nfc_tap`, `nfc_state`, `nfc_dir`, `nfc_scan`, `nfc_scan_name` (`MKWVK_API_VERSION` 22). - menu: `gpu/vk/vk_menu.cpp`: an **NFC** tab: the NFC tag row (the folder's files by name, listed again each time the menu opens: `refresh_nfc`), Tap tag, Remove tag, Scan tag on controller (`nfc_press`, `nfc_scan_says`). - docs: `docs/nfc.md` (new), README (the tab's rows and a paragraph), `docs/development.md` (three switches). - tests: `tests/test_readme_menu_rows.py` covers the NFC tab's rows; `tests/test_menu_keys.py` gets a stub for `refresh_nfc`. ## Flags and settings | Flag | What it does | Default now | Recommendation | Helps on | Doesn't help on | Untested on | |---|---|---|---|---|---|---| | Insert menu, NFC tab: NFC tag (`nfc_tag`), Tap tag, Remove tag, Scan tag on controller | Choose one of the folder's tags, hold it to the game's reader, take it away; read one from a controller into the folder | The first tag; nothing held | As it is | Any PC | - | Linux at run time | | `LONGSHOT_NFC_DIR=<folder>` | Another folder of tag files | Unset: the user's own | Unset | Tests; a portable set-up | - | - | | `HOS_NFP_TRACE=1` | The application area's calls in the log | Off | Off | Debugging | - | - | | `HOS_NFP_SEARCH=1` | A test's: the reader looks for a tag from the start | Off | Off | Checking the controller's reader without the game's NFC screen | - | - | ## Measurements main: fbd42024 (2026-11-13) this PR: feat/nfc-tags @ 1dd5ec73 (the measured commit; b99145e0 after it added only the row in docs/tested-configurations.md) Hardware: NVIDIA GeForce RTX 5080 (Vulkan driver 0x93cec000), Windows 11; a Switch 2 Pro Controller (firmware 1.1.5) plugged in over USB Scene: the save's load point, Link standing still; 3840x2160 output, DLSS, frame generation 3x, the game's frame rate cap 60 Method: 150 s runs, the first 60 s left out, two interleaved runs each (main, this PR, ...). The numbers are `RX_VK_FRAME_LOG`'s frame times, a line per present (made frames included); the game's own rate is `longshot_log.txt`'s `vi:` line. How to reproduce: the builds from the same dump with `nx2/make_game.py`, the same `longshot_options.ini` and save, `HOS_INPUT_SCRIPT=12:A,15:A,...,42:A HOS_INPUT_SCRIPT_BACKGROUND=1 RX_VK_FRAME_LOG=<csv>`. | | main @ fbd42024 | this PR @ 1dd5ec73 | |---|---|---| | presents per second (run 1 / run 2) | 179.18 / 179.81 | 179.92 / 180.00 | | median frame time (run 1 / run 2) | 5.556 / 5.563 ms | 5.551 / 5.548 ms | | p99 frame time (run 1 / run 2) | 6.676 / 5.708 ms | 6.079 / 5.796 ms | | the game's own rate | 60.0 fps | 60.0 fps | ``` main1: 16085 frames in 89.8 s after 60 s warm-up: 179.18 fps, median 5.556 ms, p99 6.676 ms, max 67.70 ms main2: 16115 frames in 89.6 s after 60 s warm-up: 179.81 fps, median 5.563 ms, p99 5.708 ms, max 67.95 ms nfc1: 16146 frames in 89.7 s after 60 s warm-up: 179.92 fps, median 5.551 ms, p99 6.079 ms, max 82.08 ms nfc2: 16157 frames in 89.8 s after 60 s warm-up: 180.00 fps, median 5.548 ms, p99 5.796 ms, max 22.22 ms [hos Presentation Thread] vi: 8321 frames presented (60.0 fps over the last 5.0 s, interval 1) (main) [hos Presentation Thread] vi: 8412 frames presented (60.0 fps over the last 5.0 s, interval 1) (this PR) ``` The measured build was made before the branch was put on the controller pull request's last commit (a docs row); its code is the same. Rebased since onto main @ 514591a3 (the branch's head is now ea2cbd4b) and not measured again: main's ten commits since fbd42024 are the website, docs, the forge script, a Damage taken row, an HDR route for FSR 4 that is opt-in, occlusion query numbering, quick pipelines and two input fixes; none is in this change's path, and the rebase of this pull request's own commit had no conflict. The rebased branch was built whole (`nx2/make_game.py`) and its checks run. ## Testing **Tested:** - `python -I -B tests/run_all.py` on Windows 11 (llvm-mingw): 454 passed, 7 failed, at the rebased head. The same 7 fail on `main` @ 514591a3 on this PC (`test_bake_portability`, `test_fpx_sticky`, `test_spawn_emit`, `test_nup_paths`, `test_check_third_party`, `test_release`, `test_menu_i18n`): local tools and packages, and one text of main's without its translations, not this change. - Linux (WSL, Ubuntu 24.04, clang): `RX_VK_ONLY=1 nx2/build.py --standalone` compiles and links `longshot_vk.so`; `host/nn_nfp.c`, `host/nn_os_sync.c`, `host/rx_backend.c` compile (`-fsyntax-only` with the build's includes). - In the game (RTX 5080, Windows 11): the game starts its reader (`nfp: the game uses NFC tags: ...`); the NFC tab lists the folder's files; Tap tag holds one to the reader (`nfp: the NFC tag "..." held to the reader (model ...); the game is not asking for one now`), Remove tag takes it away. - The controller's reader, on a real controller (firmware 1.1.5) with a real, blank NTAG215 on it: found, read whole without the password after the password is refused, and turned down as no figure's tag, both while the game waits (`HOS_NFP_SEARCH=1`) and from the Scan row (`nfp: scan: the tag (UID ...) was read, but it is not a figure's tag: not saved`). - **The game reading tags to the end, by the author in play** (RTX 5080, Windows 11, a build of this code that also has the VR and controller pull requests' changes, 35c10356): at the game's NFC screen, six tags in one session, from the menu and from the controller. The log of that session: `nfp: the game waits for an NFC tag` six times, each followed by `nfp: the game reads the NFC tag "..."` and `nfp: the game stopped waiting for an NFC tag`; once `nfp: a tag read on the controller (model 0105000003580902): given to the game`, a figure's real tag on the Switch 2 Pro Controller; tags tapped both ahead (`... the game is not asking for one now: it stays there until it does`) and while it waited (`... the game was waiting for one`). No `nn::nfp` import was left unimplemented and nothing crashed. - **Scan tag on controller saving a figure's tag, by the author** (the same build and PC, a figure's real tag on the Switch 2 Pro Controller): `nfp: scan: waiting ten seconds for a tag on the controller`, then `nfp: the tag on the controller was scanned into the folder as "Scanned <ID>" (model 0105000003580902)`; the 540-byte file is in the folder. **Not tested:** - What the game writes to a tag over several days or saves (the application area's file beside the saves was not looked at across sessions). - Linux at run time. **Needs other testers:** - Linux, any GPU: the NFC tab lists a folder's tags and the game takes a tapped one, expecting the same as on Windows (T-KZYU) ## Screenshots The NFC tab, this PR @ 1dd5ec73, on pretended tags (`main` has no such tab): ![The NFC tab](https://git.magicbean.dev/attachments/d9d68e45-008b-479d-878a-b0f974fadc88) ## Risk and rollback - The game called `nn::nfp::Initialize` and `AttachAvailabilityChangeEvent` at start before (logged as unimplemented imports, returning as they were); now they do something: a reader that is always there. A game path that waited on the reader's event now goes on. - `MKWVK_API_VERSION` goes to 22: the exe and the renderer must be of one build, as at every bump. - The NFC tag row's choice is written to the options file as `nfc_tag=<its place in the list>`, as any row's; it means nothing to another build. - No dump is in the repository, and the docs say none may be. The checks need none. - Reverting the commit is enough. ## Reviewer notes - Sits on the controller pull request (https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/279): review that one first; this one's own commit is the second. - The launcher's NFC page (https://git.magicbean.dev/MagicBeanDev/LongshotLauncher/pulls/49) fills the same folder. - The word for the figures' tags is "NFC tag" everywhere a player or a reader of the code sees it. - Not claimed in `#dev-work` beforehand. ## Issues None. ## Checklist ### For everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`). - [x] Rebased on current `main`. - [x] `python -I -B tests/run_all.py` run and passing (any failure that also fails on `main` is named above). - [x] Tested in the game, or what wasn't is named under Testing. - [x] Testing filled in: what was tested, what wasn't, and what needs other testers (with test requests). - [x] Measured: main and this PR at named commits, on the same PC, scene and settings, at least 2 interleaved runs each, the median reported. - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### If applicable - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] Flags noted, and the switch reference updated (docs/development.md, the README). - [x] Screenshots for a change that shows on screen. - [x] A row in `docs/tested-configurations.md` for each measured run. - [x] `MKWVK_API_VERSION` bumped (`gpu/vk/vk_api.h`'s `MkwVkHost` or `MkwVkRenderer` changed). - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [x] Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths. - [x] Docs updated. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Windows has no driver a game can use for this controller and the SDL the game ships has none either, so players ran a
bridge program. host/pad_switch2.c opens the controller's vendor interface with WinUSB, starts it, reads its calibration
and its HID reports, and gives it to the game as an SDL virtual gamepad with its motion sensor and its rumble. A Switch 2
Pro layout preset, and the controller's button for the Insert menu is the player's choice.

Assisted-by: Claude Code
Co-Authored-By: Claude Fable 5.2 <[email protected]>
docs(input): the Switch 2 Pro Controller's measured runs in tested-configurations
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
00d333eb4d
Assisted-by: Claude Code
Co-Authored-By: Claude Fable 5.2 <[email protected]>
Assisted-by: Claude Code
Co-Authored-By: Claude Fable 5.2 <[email protected]>
docs(nfc): the NFC tags' measured runs in tested-configurations
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 3s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
b99145e0ba
Assisted-by: Claude Code
Co-Authored-By: Claude Fable 5.2 <[email protected]>
Author
First-time contributor

Tested in play by the author: at the game's NFC screen the game read six tags in one session, from the Insert menu's NFC tab and, once, a figure's real tag on the Switch 2 Pro Controller's reader (the log's lines are in the description). The two requests that asked for that (T-3UQZ, T-LHBX) are withdrawn; one for Linux is open (T-KZYU). Marking it ready.

Tested in play by the author: at the game's NFC screen the game read six tags in one session, from the Insert menu's NFC tab and, once, a figure's real tag on the Switch 2 Pro Controller's reader (the log's lines are in the description). The two requests that asked for that (T-3UQZ, T-LHBX) are withdrawn; one for Linux is open (T-KZYU). Marking it ready.
airdamien changed title from WIP: feat(nfc): NFC tags from the player's own dumps, with an NFC tab in the Insert menu to feat(nfc): NFC tags from the player's own dumps, with an NFC tab in the Insert menu 2026-11-13 19:24:15 +00:00
airdamien force-pushed feat/nfc-tags from b99145e0ba
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 3s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
to ea2cbd4bb9
Some checks are pending
CI / Conventional Commit title (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Blocked by required conditions
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Blocked by required conditions
CI / Workflow lint (actionlint) (pull_request) Blocked by required conditions
Third-party parts / As their notes say (pull_request) Blocked by required conditions
Third-party parts / The same as upstream (pull_request) Blocked by required conditions
Website / Website on Cloudflare (pull_request) Blocked by required conditions
PR description / Description follows the template (pull_request_target) Successful in 9s
2026-11-13 19:55:46 +00:00
Compare
Author
First-time contributor

Rebased with the controller pull request onto main @ 514591a3 (head ea2cbd4b), no conflict in this one's own commit. Built whole and the checks run. Also tested since, by the author: Scan tag on controller saved a figure's real tag into the folder (nfp: the tag on the controller was scanned into the folder as "Scanned <ID>").

Rebased with the controller pull request onto main @ 514591a3 (head ea2cbd4b), no conflict in this one's own commit. Built whole and the checks run. Also tested since, by the author: Scan tag on controller saved a figure's real tag into the folder (`nfp: the tag on the controller was scanned into the folder as "Scanned <ID>"`).
Some checks are pending
CI / Conventional Commit title (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Blocked by required conditions
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Blocked by required conditions
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Blocked by required conditions
CI / Workflow lint (actionlint) (pull_request) Blocked by required conditions
Third-party parts / As their notes say (pull_request) Blocked by required conditions
Third-party parts / The same as upstream (pull_request) Blocked by required conditions
Website / Website on Cloudflare (pull_request) Blocked by required conditions
PR description / Description follows the template (pull_request_target) Successful in 9s
This pull request doesn't have enough approvals yet. 0 of 1 approvals granted.
Some workflows are waiting to be reviewed.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'feat/nfc-tags:airdamien-feat/nfc-tags'
git switch 'airdamien-feat/nfc-tags'
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot!280
No description provided.