diff --git a/docs/changelogs/1.29.8.md b/docs/changelogs/1.29.8.md
new file mode 100644
index 000000000..fa010e23f
--- /dev/null
+++ b/docs/changelogs/1.29.8.md
@@ -0,0 +1,19 @@
+# BlitzKit 1.29.8
+
+Thank you to [Mark Greene](https://github.com/Hitjack007) for your contributions this update.
+
+## Features
+
+- Added an option to clear provisions and consumables from all tanks in Compare
+- Added the ability to choose stock turrets and guns in Mixer if a tank has any
+- Added streaks to Guesser
+- Introduced an option to partially reveal tanks in Guesser
+ - This removes the darkness effect but keeps the name hidden
+ - This will reset your streak to 0
+ - Regardless of getting the right guess on the tank's name, your response will be counted as incorrect if partially revealed
+
+## Fixes
+
+- The Tankopedia now smoothly resizes when enlarging on interaction
+- [Mark Greene] Stock turrets now correctly mount the corresponding stock gun
+- The consumable and provision buttons in Compare are no longer tiny
diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json
index 2965b37e6..8ccbe5487 100644
--- a/packages/i18n/strings/en.json
+++ b/packages/i18n/strings/en.json
@@ -917,7 +917,13 @@
"next": "Next",
"no_results": "No results"
},
- "stats": "{correct} / {total} guessed correctly"
+ "stats": "{correct} / {total} correct, {streak} streak",
+ "help": {
+ "title": "Partially reveal tank?",
+ "description": "Reveals the tank without showing the name. This round will be considered incorrect and break your streak!",
+ "cancel": "Cancel",
+ "reveal": "Reveal"
+ }
},
"tankopedia": {
@@ -1267,10 +1273,12 @@
"upgrade": "Upgrade"
},
"provisions": {
- "clear": "Clear"
+ "clear": "Clear this tank",
+ "clear_all": "Clear all tanks"
},
"consumables": {
- "clear": "Clear"
+ "clear": "Clear this tank",
+ "clear_all": "Clear all tanks"
}
}
},
diff --git a/packages/website/src/components/Compare/CompareTable.tsx b/packages/website/src/components/Compare/CompareTable.tsx
index d34cb258d..62029fb73 100644
--- a/packages/website/src/components/Compare/CompareTable.tsx
+++ b/packages/website/src/components/Compare/CompareTable.tsx
@@ -277,14 +277,14 @@ export function CompareTable({ stats }: CompareTableProps) {
-
+
-
+
+
+
+
-
-
- {strings.website.common.tank_search.select_dialog_title}
-
+
+
+ {tankDefinition.turrets.length > 1 && (
+
+ {tankDefinition.turrets.map((turret) => (
+ {
+ onSelect?.(tankDefinition, turret);
+ }}
+ />
+ ))}
+
+ )}
- {
- onSelect?.(tank);
- setOpen(false);
- }}
- />
-
-
+ {turretDefinition && turretDefinition.guns.length > 1 && (
+
+ {turretDefinition.guns.map((gun) => (
+
+ {literals(strings.common.units.mm, {
+ value: gun.shells[0].caliber.toFixed(0),
+ })}
+
+ }
+ onClick={() => {
+ onSelect?.(tankDefinition, turretDefinition, gun);
+ }}
+ />
+ ))}
+
+ )}
+
+
+
+ )}
+
);
}
@@ -113,9 +212,12 @@ function ModuleSeparator() {
}
function Content({ skeleton }: MaybeSkeletonComponentProps) {
- const hull = Mixer.use((state) => state.hull);
- const turretId = Mixer.use((state) => state.turret.tank.id);
- const gunId = Mixer.use((state) => state.gun.tank.id);
+ const hullTankId = Mixer.use((state) => state.hull);
+ const turretTankId = Mixer.use((state) => state.turret.tank.id);
+ const turretTurretId = Mixer.use((state) => state.turret.turret.id);
+ const gunTankId = Mixer.use((state) => state.gun.tank.id);
+ const gunTurretId = Mixer.use((state) => state.gun.turret.id);
+ const gunGunId = Mixer.use((state) => state.gun.gun.id);
const canvas = useRef(null!);
const { strings } = useLocale();
@@ -136,7 +238,7 @@ function Content({ skeleton }: MaybeSkeletonComponentProps) {
>
- {
Mixer.mutate((draft) => {
draft.hull = tank;
@@ -170,28 +272,34 @@ function Content({ skeleton }: MaybeSkeletonComponentProps) {
}}
/>
- {
+ tank={turretTankId}
+ turret={turretTurretId}
+ onSelect={(tank, turret) => {
Mixer.mutate((draft) => {
draft.turret = {
tank,
- turret: tank.turrets.at(-1)!,
+ turret: turret ?? tank.turrets.at(-1)!,
};
});
}}
/>
- {
+ tank={gunTankId}
+ turret={gunTurretId}
+ gun={gunGunId}
+ onSelect={(tank, turret, gun) => {
Mixer.mutate((draft) => {
draft.gun = {
tank,
- turret: tank.turrets.at(-1)!,
- gun: tank.turrets.at(-1)!.guns.at(-1)!,
+ turret: turret ?? tank.turrets.at(-1)!,
+ gun:
+ gun ??
+ turret?.guns.at(-1) ??
+ tank.turrets.at(-1)!.guns.at(-1)!,
};
});
}}
diff --git a/packages/website/src/stores/guess.ts b/packages/website/src/stores/guess.ts
index d84847f79..22d6a10f0 100644
--- a/packages/website/src/stores/guess.ts
+++ b/packages/website/src/stores/guess.ts
@@ -12,6 +12,8 @@ export interface Guess {
guessState: GuessState;
totalGuesses: number;
correctGuesses: number;
+ streak: number;
+ helpingReveal: boolean;
}
export const Guess = new Varuna((tank) => ({
@@ -19,4 +21,6 @@ export const Guess = new Varuna((tank) => ({
guessState: GuessState.NotGuessed,
totalGuesses: 0,
correctGuesses: 0,
+ streak: 0,
+ helpingReveal: false,
}));