Commit Graph
4883 Commits
Author SHA1 Message Date
TrèsAbhi de03a2ab95 Merge branch 'main' into tier-eleven-compatibility 2026-10-07 16:23:11 -05:00
tresabhi d4e649804e add astro cleaning script 2026-10-07 16:15:07 -05:00
TrèsAbhi c31d5705eb Merge pull request #367 from Hitjack007/tank-model-auto-load 2026-10-07 16:11:04 -05:00
tresabhi 16be5faae6 use UpdateIcon 2026-10-07 16:08:56 -05:00
tresabhi e1b079ca02 high contrast button 2026-10-07 16:06:52 -05:00
tresabhi 00149a3d9d simplify strings 2026-10-07 16:03:41 -05:00
TrèsAbhi e3e94e2b49 Merge branch 'main' into tank-model-auto-load 2026-10-07 15:59:34 -05:00
tresabhi 5ce927be4e force bun even with node installed 2026-10-07 10:14:44 -05:00
tresabhi c70fae8162 game strings 2026-10-05 11:24:29 -05:00
tresabhi d79e0ddb5d caching for strings 2026-10-05 11:24:01 -05:00
Mark Greene 541da65bfc Feature: option to turn off automatic tank model loading
Lets people on limited data stop the Tankopedia from downloading 3D models automatically.

- Added an Automatically load 3D models switch to the settings page, on by default
- When off, the tank page hero shows a Load 3D model button where the loading bar sits
- Held back every model download on the tank page until requested, including the dynamic armor switcher and the gun flexibility visualizer
- Wrapped the tank sandbox in its own suspense boundary so the loading bar shows real progress instead of the whole page waiting on the model
- Measured loading progress from when each loading bar appears so it always starts empty
- Added the English strings; other languages fall back until translated

Fixes #311
2026-10-05 19:52:46 +13:00
Mark Greene e4e92d76b4 Feature: tier XI compatibility
Prepares BlitzKit for tier XI tanks ahead of their release. Tier X was hardcoded as the maximum in the tank search filters, the guesser and the tech tree, and had no roman numeral beyond X.

- Added `XI` to `TIER_ROMAN_NUMERALS`
- Added an awaitable tier list derived from the highest tier in the tank definitions, so nothing changes until tier XI tanks exist
- Used it for the tank search tier filters and the guesser tier picker and defaults
- Made the tech tree check for successors instead of assuming tier X is the last tier

Fixes #302
2026-10-05 18:18:19 +13:00
Mark Greene 273881c460 Fix: keep tank order stable on select
Tanks sharing the same tier, nation, class and type were shown in an arbitrary order that changed after selecting a tank. The meta sort had no tiebreaker, and the filtered list was sorted and reversed in place, so each re-sort started from the previous reversed order and flipped tied tanks around.

- Added tank ID as the first sort key in `metaSortTank` so tied tanks always come out in the same order
- Sorted a copy of the tank search results, pre-sorted by ID, instead of the cached list
- Added an `exclude` option to tank search and used it in Compare so tanks already being compared can't be added again, including through select all or by swapping another slot

Fixes #313
2026-10-05 18:00:43 +13:00
Mark Greene 3aefe7d985 Fix: await the ID discovery loop so it runs to completion
The ID discovery script exited about a second after starting. Since the switch to `atMaxRate`, neither the discovery loop nor the request loop was awaited, and `atMaxRate` didn't await its callback, so the script went straight to `save()`, committed and exited while overlapping duplicate requests failed in the background.

- Awaited both `atMaxRate` loops and the callback inside `atMaxRate`
- Moved the ID range exhaustion check out of the retry loop so retries can't remove extra regions
- Treated network and JSON errors as failed API calls so a long run retries instead of crashing without saving

Fixes #306
2026-10-05 17:33:01 +13:00
Mark Greene bfe31053a9 Fix: keep contact shadows visible at low camera angles
Contact shadows under the tank disappeared when the camera orbited low enough to look up at it. The shadow plane and the ground disc are both transparent and centred on the origin, so three.js sorts them by camera depth. Looking upward flips that order, and because the shadow doesn't write depth, the ground disc was drawn over it.

- Gave `ContactShadows` a `renderOrder` of 1 so it always renders after the ground disc

Fixes #299
2026-10-05 17:28:01 +13:00
Mark Greene a5eac5572e Fix: remove background sliver under equalizer toggle gradient
On some browsers a thin sliver of the Insanity banner showed through along the rounded edges of the equalizer toggle, most visibly on the right where the gradient is opaque. The banner and the gradient were painted on two separately clipped elements, so their anti-aliased edges didn't line up.

- Moved the gradient onto the outer box as the top layer of its `backgroundImage`, above the banner
- Removed the separate gradient layer from the inner flex

Fixes #297
2026-10-05 17:20:52 +13:00
tresabhi 116c30be88 logs 2026-10-04 14:22:04 -05:00
TrèsAbhi e0ba100e91 Merge pull request #281 from Hitjack007/translate-margin 2026-10-04 14:14:06 -05:00
tresabhi 60a92fbfdf pixel perfect fix 2026-10-04 14:13:55 -05:00
Mark Greene 643e1dd352 Fix: crop transparent padding from fade flags
The fade flag images are 2:1 but the flag only fills the left part, with the rest transparent. That made `cover` + `center` in the tech tree node crop and offset the visible flag.

- Trim the transparent border from the fade flag in the `/flags/fade/[id].webp` route using `sharp`
- Revert the tech tree node back to `cover` + `center`, since the image is now just the flag
2026-10-05 08:10:52 +13:00
TrèsAbhi 5ba62d2952 Merge branch 'main' into translate-margin 2026-10-04 14:09:20 -05:00
TrèsAbhi 91f2b7afd0 Merge pull request #280 from Hitjack007/filter-defaults 2026-10-04 14:08:54 -05:00
TrèsAbhi 1bdd8bab9e Merge branch 'main' into filter-defaults 2026-10-04 14:07:27 -05:00
TrèsAbhi bded8a4da5 Merge pull request #279 from Hitjack007/stale-info 2026-10-04 14:07:10 -05:00
TrèsAbhi 95d6d8a1ae Merge branch 'main' into stale-info 2026-10-04 14:06:06 -05:00
TrèsAbhi 5f61bac375 Merge pull request #278 from Hitjack007/reload-visualiser 2026-10-04 14:05:41 -05:00
TrèsAbhi c310e8475e Merge branch 'main' into reload-visualiser 2026-10-04 14:04:17 -05:00
TrèsAbhi e090aee984 Merge pull request #277 from Hitjack007/search-issues 2026-10-04 14:03:54 -05:00
tresabhi f3a8f2faab only supply full name if it's different 2026-10-04 14:03:32 -05:00
TrèsAbhi 0539d69c7f Merge pull request #276 from Hitjack007/tank-title-and-loading-bars-difference 2026-10-04 13:57:50 -05:00
TrèsAbhi ccbb572999 Merge pull request #264 from Hitjack007/gun-depression-visualiser 2026-10-04 13:54:10 -05:00
TrèsAbhi 89b8f25918 Merge branch 'main' into gun-depression-visualiser 2026-10-04 13:52:37 -05:00
TrèsAbhi fee2c8212d Merge pull request #262 from Hitjack007/spall-liner-in-tankopdiea-model-viewer 2026-10-04 13:52:01 -05:00
tresabhi 9a659845f5 make spall icon not a button 2026-10-04 13:51:53 -05:00
tresabhi ebdb8577da Merge branch 'spall-liner-in-tankopdiea-model-viewer' of https://github.com/hitjack007/blitzkit into pr/Hitjack007/262 2026-10-04 13:48:28 -05:00
TrèsAbhi b880b8cdbd Merge branch 'main' into spall-liner-in-tankopdiea-model-viewer 2026-10-04 13:47:04 -05:00
tresabhi dd11efd481 running 2026-10-04 13:37:21 -05:00
tresabhi 6be4ff97f3 env 2026-10-04 13:36:33 -05:00
tresabhi 784c3e58c1 protos 2026-10-04 13:27:46 -05:00
tresabhi 8b03784be5 clis 2026-10-04 13:21:21 -05:00
tresabhi d9f29cd0c9 start of docs 2026-10-04 13:11:36 -05:00
TrèsAbhi 86e7ace3f0 Remove misleading text
Removed contribution note regarding sensitive submodules.
2026-10-04 12:22:36 -05:00
Mark Greene fbba0bf13b Fix: constrain playlist filter width
The filters on the playlist page stretched into one long strip beside the tank pool, squeezing the pool into the remaining space.

**Changes**
- Place the filters and the generate button in a fixed-width column (`22rem`) on medium screens and up so the filter buttons wrap compactly
- Stretch the generate button to the column width
- Let the tank pool take the remaining width
- Tighten the gap between the two columns
- Keep the existing stacked layout on small screens
2026-10-04 20:07:52 +13:00
Mark Greene c2c586c2e7 Fix: scroll track textures at the same rate
Dragging a tank's track scrolled its roughness/metalness texture at twice the speed of the base color and normal textures, so highlights drifted off the track links.

**Cause**
- `translateTexture` added the scroll offset to `roughnessMap` and `metalnessMap` separately
- glTF has a single metallic-roughness texture, and the loader assigns that same texture object to both slots, so it received the offset twice

**Changes**
- Collect the track's maps in a `Set` before scrolling so a texture shared between slots is offset exactly once
2026-10-04 20:00:51 +13:00
Mark Greene aaf0e52be4 Fix: restore redirect to the user's preferred locale
Users were no longer sent to their preferred locale. `LocaleRedirector` was emptied in `115fa5aca` after its previous versions caused repeated redirects, and nothing replaced it.

**Cause**
- The earlier logic compared the best locale (a string) against the current locale entry (an object), so the check was always true on non-default locale pages
- That made the redirect fire repeatedly, which led to the logic being removed entirely

**Changes**
- Derive the current locale from the URL, treating the default locale as unprefixed to match how pages are generated
- Redirect only when the best locale differs from the current locale, so it stops after one hop
- Redirect users with a saved `preferred-locale` from any page
- Redirect users without a saved preference from default-locale URLs only, using their browser language, so shared locale links are respected
- Preserve the rest of the path when swapping the locale prefix
- Skip `/api` paths
2026-10-04 19:47:20 +13:00
tresabhi 067c9cb267 simpler bug forms 2026-10-03 22:10:10 -05:00
tresabhi 8d5ef29771 feature 2026-10-03 22:05:07 -05:00
tresabhi a5637c9f07 format 2026-10-03 22:01:26 -05:00
tresabhi d7e06a2b46 email link 2026-10-03 21:52:39 -05:00
tresabhi 551183a65b yml 2026-10-03 21:51:50 -05:00