blacktrigram 0.7.18 → 0.7.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/lib/components/screens/combat/CombatScreen3D.d.ts.map +1 -1
  2. package/lib/components/screens/combat/CombatScreen3D.js +64 -28
  3. package/lib/components/screens/combat/CombatScreen3D.js.map +1 -1
  4. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.d.ts +9 -0
  5. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.d.ts.map +1 -1
  6. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js +8 -4
  7. package/lib/components/screens/combat/components/effects/BloodLossOverlayHtml.js.map +1 -1
  8. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.d.ts +9 -0
  9. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.d.ts.map +1 -1
  10. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js +9 -4
  11. package/lib/components/screens/combat/components/effects/ConsciousnessBlur.js.map +1 -1
  12. package/lib/components/screens/combat/components/effects/PainVignette.d.ts +10 -0
  13. package/lib/components/screens/combat/components/effects/PainVignette.d.ts.map +1 -1
  14. package/lib/components/screens/combat/components/effects/PainVignette.js +7 -3
  15. package/lib/components/screens/combat/components/effects/PainVignette.js.map +1 -1
  16. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.d.ts +43 -0
  17. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.d.ts.map +1 -0
  18. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js +166 -0
  19. package/lib/components/screens/combat/components/hud/CombatPortraitStatusStrip.js.map +1 -0
  20. package/lib/components/screens/combat/components/hud/MobileControlsWrapper.d.ts +8 -0
  21. package/lib/components/screens/combat/components/hud/MobileControlsWrapper.d.ts.map +1 -1
  22. package/lib/components/screens/combat/components/hud/MobileControlsWrapper.js +5 -4
  23. package/lib/components/screens/combat/components/hud/MobileControlsWrapper.js.map +1 -1
  24. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.d.ts +15 -0
  25. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.d.ts.map +1 -1
  26. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js +10 -6
  27. package/lib/components/screens/combat/components/hud/PlayerStateOverlayHtml.js.map +1 -1
  28. package/lib/components/screens/combat/components/hud/index.d.ts +2 -0
  29. package/lib/components/screens/combat/components/hud/index.d.ts.map +1 -1
  30. package/lib/components/screens/combat/components/indicators/StaminaWarning.d.ts +9 -0
  31. package/lib/components/screens/combat/components/indicators/StaminaWarning.d.ts.map +1 -1
  32. package/lib/components/screens/combat/components/indicators/StaminaWarning.js +7 -4
  33. package/lib/components/screens/combat/components/indicators/StaminaWarning.js.map +1 -1
  34. package/lib/components/screens/combat/hooks/useCombatLayout.d.ts +1 -0
  35. package/lib/components/screens/combat/hooks/useCombatLayout.d.ts.map +1 -1
  36. package/lib/components/screens/combat/hooks/useCombatLayout.js +11 -5
  37. package/lib/components/screens/combat/hooks/useCombatLayout.js.map +1 -1
  38. package/lib/components/screens/intro/IntroScreen3D.js +1 -1
  39. package/lib/components/screens/training/TrainingScreen3D.d.ts.map +1 -1
  40. package/lib/components/screens/training/TrainingScreen3D.js +20 -8
  41. package/lib/components/screens/training/TrainingScreen3D.js.map +1 -1
  42. package/lib/components/screens/training/hooks/useTrainingLayout.d.ts +1 -0
  43. package/lib/components/screens/training/hooks/useTrainingLayout.d.ts.map +1 -1
  44. package/lib/components/screens/training/hooks/useTrainingLayout.js +10 -3
  45. package/lib/components/screens/training/hooks/useTrainingLayout.js.map +1 -1
  46. package/lib/components/shared/ui/SplashScreen.js +2 -2
  47. package/lib/systems/animation/core/AnimationRegistry.d.ts +31 -0
  48. package/lib/systems/animation/core/AnimationRegistry.d.ts.map +1 -1
  49. package/lib/systems/animation/core/AnimationRegistry.js +59 -1
  50. package/lib/systems/animation/core/AnimationRegistry.js.map +1 -1
  51. package/lib/systems/animation/core/index.d.ts +1 -1
  52. package/lib/systems/animation/core/index.d.ts.map +1 -1
  53. package/lib/types/constants/layout.d.ts +11 -3
  54. package/lib/types/constants/layout.d.ts.map +1 -1
  55. package/lib/types/constants/layout.js +13 -4
  56. package/lib/types/constants/layout.js.map +1 -1
  57. package/lib/utils/deviceDetection.d.ts.map +1 -1
  58. package/lib/utils/deviceDetection.js +1 -1
  59. package/lib/utils/deviceDetection.js.map +1 -1
  60. package/lib/utils/mobileLayoutHelpers.d.ts +28 -10
  61. package/lib/utils/mobileLayoutHelpers.d.ts.map +1 -1
  62. package/lib/utils/mobileLayoutHelpers.js +24 -14
  63. package/lib/utils/mobileLayoutHelpers.js.map +1 -1
  64. package/lib/utils/responsiveOrientationConstants.d.ts +71 -0
  65. package/lib/utils/responsiveOrientationConstants.d.ts.map +1 -0
  66. package/lib/utils/responsiveOrientationConstants.js +74 -0
  67. package/lib/utils/responsiveOrientationConstants.js.map +1 -0
  68. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"CombatScreen3D.d.ts","sourceRoot":"","sources":["../../../../src/components/screens/combat/CombatScreen3D.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAMN,MAAM,OAAO,CAAC;AAUf,OAAO,EAAa,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAqB1D,OAAO,EAEL,QAAQ,EAIT,MAAM,gBAAgB,CAAC;AAgFxB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAC1B,IAAI,CAAC;IACV;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC;;OAEG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAq8FxD,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"CombatScreen3D.d.ts","sourceRoot":"","sources":["../../../../src/components/screens/combat/CombatScreen3D.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAMN,MAAM,OAAO,CAAC;AAUf,OAAO,EAAa,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAsB1D,OAAO,EAEL,QAAQ,EAIT,MAAM,gBAAgB,CAAC;AAkFxB;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAC1B,IAAI,CAAC;IACV;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC;;OAEG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAsgGxD,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -11,10 +11,11 @@ import { Z_INDEX } from "../../../types/LayoutTypes.js";
11
11
  import { InjuryType } from "../../../types/injury.js";
12
12
  import { TRIGRAM_STANCES_ORDER } from "../../../systems/trigram/types.js";
13
13
  import { useKeyboardControls } from "../../../hooks/useKeyboardControls.js";
14
- import { getAnimation, getAnimationForTechnique } from "../../../systems/animation/core/AnimationRegistry.js";
14
+ import { getAnimation, resolveTechniqueAnimation } from "../../../systems/animation/core/AnimationRegistry.js";
15
15
  import { determineRecoveryType, getRecoveryAnimationState } from "../../../systems/animation/catalogs/RecoveryAnimations.js";
16
16
  import { usePlayerAnimation } from "../../../hooks/usePlayerAnimation.js";
17
17
  import useRoundTransition from "../../../hooks/useRoundTransition.js";
18
+ import { TRIGRAM_TECHNIQUES } from "../../../systems/trigram/techniques/index.js";
18
19
  import useTechniqueSelection from "../../../hooks/useTechniqueSelection.js";
19
20
  import { useWebGLContextLossHandler } from "../../../hooks/useWebGLContextLossHandler.js";
20
21
  import { injuryMovementModifier } from "../../../systems/movement/InjuryMovementModifier.js";
@@ -24,6 +25,7 @@ import BalanceSystem from "../../../systems/combat/BalanceSystem.js";
24
25
  import CombatSystem from "../../../systems/CombatSystem.js";
25
26
  import { getPersonalityByArchetype } from "../../../systems/ai/AIPersonality.js";
26
27
  import { AdaptiveDifficulty } from "../../../systems/ai/AdaptiveDifficulty.js";
28
+ import { getMobileControlsBottom } from "../../../types/constants/layout.js";
27
29
  import { getAnimationTypeForTechnique } from "../../../data/techniqueMappings.js";
28
30
  import { toHexColor } from "../../../utils/colorHelpers.js";
29
31
  import { usePlayerMovement } from "../../../utils/inputSystem.js";
@@ -59,6 +61,7 @@ import CombatTopHUD from "./components/hud/CombatTopHUD.js";
59
61
  import CombatBottomHUD from "./components/hud/CombatBottomHUD.js";
60
62
  import CombatLeftHUD from "./components/hud/CombatLeftHUD.js";
61
63
  import CombatRightHUD from "./components/hud/CombatRightHUD.js";
64
+ import CombatPortraitStatusStrip from "./components/hud/CombatPortraitStatusStrip.js";
62
65
  import FPSMonitor from "./components/hud/FPSMonitor.js";
63
66
  import { PlayerStateOverlayHtml } from "./components/hud/PlayerStateOverlayHtml.js";
64
67
  import { BalanceIndicatorOverlayHtml } from "../../ui/combat/BalanceIndicatorOverlayHtml.js";
@@ -107,7 +110,7 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
107
110
  }, []);
108
111
  const audio = useAudio();
109
112
  useEffect(() => {}, []);
110
- const { arenaBounds, isMobile, screenSize, layoutConstants } = useCombatLayout(width, height);
113
+ const { arenaBounds, isMobile, isPortrait, screenSize, layoutConstants } = useCombatLayout(width, height);
111
114
  const theme = useKoreanTheme({
112
115
  variant: "primary",
113
116
  size: "md",
@@ -123,7 +126,19 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
123
126
  default: return 1;
124
127
  }
125
128
  }, [screenSize]);
126
- const cameraConfig = useMemo(() => createCameraConfig(isMobile), [isMobile]);
129
+ const cameraConfig = useMemo(() => {
130
+ const base = createCameraConfig(isMobile);
131
+ if (!isPortrait) return base;
132
+ return {
133
+ ...base,
134
+ fov: Math.min(80, base.fov + 15),
135
+ position: [
136
+ base.position[0],
137
+ base.position[1],
138
+ base.position[2] + 4
139
+ ]
140
+ };
141
+ }, [isMobile, isPortrait]);
127
142
  const renderConfig = useMemo(() => {
128
143
  const performanceSettings = getPerformanceSettings(width, isMobile);
129
144
  return {
@@ -796,7 +811,7 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
796
811
  enabled: !isPaused && combatState.roundStarted && !combatState.roundEnded && matchCountdownComplete && !showRoundStart,
797
812
  onTechniqueExecute: useCallback((technique) => {
798
813
  feedbackActions.showTechnique(technique.name.korean, technique.name.english);
799
- const animationName = getAnimationForTechnique(technique.name.english || technique.id);
814
+ const animationName = resolveTechniqueAnimation(technique);
800
815
  setPlayer1AttackAnimation(animationName);
801
816
  setPlayer1TechniqueId(technique.id);
802
817
  const attackDuration = getAnimation(animationName)?.duration ?? .55;
@@ -892,7 +907,9 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
892
907
  combatState.roundEnded
893
908
  ]);
894
909
  const handleAttackWithFeedback = useCallback(() => {
895
- setPlayer1AttackAnimation("jab");
910
+ const basicTechnique = techniqueSelection.availableTechniques[0];
911
+ setPlayer1AttackAnimation(basicTechnique ? resolveTechniqueAnimation(basicTechnique) : "jab");
912
+ if (basicTechnique?.id) setPlayer1TechniqueId(basicTechnique.id);
896
913
  if (player1Animation.transitionTo(AnimationState.ATTACK)) combatActions.setExecutingTechnique(true);
897
914
  else {
898
915
  console.warn("Attack animation transition failed; executing attack logic directly.");
@@ -901,7 +918,8 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
901
918
  }, [
902
919
  player1Animation,
903
920
  combatActions,
904
- handleAttack
921
+ handleAttack,
922
+ techniqueSelection.availableTechniques
905
923
  ]);
906
924
  const handleDefendWithFeedback = useCallback(() => {
907
925
  const defenderPos = playerPositions[0];
@@ -1166,19 +1184,23 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
1166
1184
  updateDifficultyTarget
1167
1185
  ]);
1168
1186
  const executeAIActionCallback = useCallback((action, targetPos, selectedTechnique, targetVitalPoint) => {
1187
+ const aiFallbackTechnique = TRIGRAM_TECHNIQUES[validPlayers[1]?.currentStance ?? TrigramStance.GEON]?.[0];
1188
+ const aiFallbackAnim = aiFallbackTechnique ? resolveTechniqueAnimation(aiFallbackTechnique) : "jab";
1169
1189
  switch (action) {
1170
1190
  case "attack":
1171
- if (selectedTechnique?.name?.english || selectedTechnique?.englishName) {
1172
- const p2AttackAnimName = getAnimationForTechnique(selectedTechnique.name?.english ?? selectedTechnique.englishName ?? "jab");
1191
+ if (selectedTechnique) {
1192
+ const p2AttackAnimName = resolveTechniqueAnimation(selectedTechnique);
1173
1193
  setPlayer2AttackAnimation(p2AttackAnimName);
1174
- if (selectedTechnique?.id) setPlayer2TechniqueId(selectedTechnique.id);
1194
+ if (selectedTechnique.id) setPlayer2TechniqueId(selectedTechnique.id);
1175
1195
  const p2AttackDur = getAnimation(p2AttackAnimName)?.duration ?? .55;
1176
1196
  player2AttackDurationRef.current = p2AttackDur;
1177
1197
  player2Animation.transitionToAttack(p2AttackDur);
1178
1198
  } else {
1179
- setPlayer2AttackAnimation("jab");
1180
- player2AttackDurationRef.current = .55;
1181
- player2Animation.transitionToAttack(.55);
1199
+ setPlayer2AttackAnimation(aiFallbackAnim);
1200
+ if (aiFallbackTechnique?.id) setPlayer2TechniqueId(aiFallbackTechnique.id);
1201
+ const p2FallbackDur = getAnimation(aiFallbackAnim)?.duration ?? .55;
1202
+ player2AttackDurationRef.current = p2FallbackDur;
1203
+ player2Animation.transitionToAttack(p2FallbackDur);
1182
1204
  }
1183
1205
  handleAIAttack(selectedTechnique, targetVitalPoint);
1184
1206
  break;
@@ -1188,17 +1210,19 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
1188
1210
  break;
1189
1211
  case "technique":
1190
1212
  case "combo":
1191
- if (selectedTechnique?.name?.english || selectedTechnique?.englishName) {
1192
- const p2TechAnimName = getAnimationForTechnique(selectedTechnique.name?.english ?? selectedTechnique.englishName ?? "cross");
1213
+ if (selectedTechnique) {
1214
+ const p2TechAnimName = resolveTechniqueAnimation(selectedTechnique);
1193
1215
  setPlayer2AttackAnimation(p2TechAnimName);
1194
- if (selectedTechnique?.id) setPlayer2TechniqueId(selectedTechnique.id);
1216
+ if (selectedTechnique.id) setPlayer2TechniqueId(selectedTechnique.id);
1195
1217
  const p2TechDur = getAnimation(p2TechAnimName)?.duration ?? .6;
1196
1218
  player2AttackDurationRef.current = p2TechDur;
1197
1219
  player2Animation.transitionToAttack(p2TechDur);
1198
1220
  } else {
1199
- setPlayer2AttackAnimation("cross");
1200
- player2AttackDurationRef.current = .6;
1201
- player2Animation.transitionToAttack(.6);
1221
+ setPlayer2AttackAnimation(aiFallbackAnim);
1222
+ if (aiFallbackTechnique?.id) setPlayer2TechniqueId(aiFallbackTechnique.id);
1223
+ const p2FallbackDur = getAnimation(aiFallbackAnim)?.duration ?? .6;
1224
+ player2AttackDurationRef.current = p2FallbackDur;
1225
+ player2Animation.transitionToAttack(p2FallbackDur);
1202
1226
  }
1203
1227
  handleAITechnique(selectedTechnique, targetVitalPoint);
1204
1228
  break;
@@ -1235,17 +1259,19 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
1235
1259
  }
1236
1260
  break;
1237
1261
  case "counter":
1238
- if (selectedTechnique?.name?.english || selectedTechnique?.englishName) {
1239
- const p2CounterAnimName = getAnimationForTechnique(selectedTechnique.name?.english ?? selectedTechnique.englishName ?? "cross");
1262
+ if (selectedTechnique) {
1263
+ const p2CounterAnimName = resolveTechniqueAnimation(selectedTechnique);
1240
1264
  setPlayer2AttackAnimation(p2CounterAnimName);
1241
- if (selectedTechnique?.id) setPlayer2TechniqueId(selectedTechnique.id);
1265
+ if (selectedTechnique.id) setPlayer2TechniqueId(selectedTechnique.id);
1242
1266
  const p2CounterDur = getAnimation(p2CounterAnimName)?.duration ?? .6;
1243
1267
  player2AttackDurationRef.current = p2CounterDur;
1244
1268
  player2Animation.transitionToAttack(p2CounterDur);
1245
1269
  } else {
1246
- setPlayer2AttackAnimation("cross");
1247
- player2AttackDurationRef.current = .6;
1248
- player2Animation.transitionToAttack(.6);
1270
+ setPlayer2AttackAnimation(aiFallbackAnim);
1271
+ if (aiFallbackTechnique?.id) setPlayer2TechniqueId(aiFallbackTechnique.id);
1272
+ const p2FallbackDur = getAnimation(aiFallbackAnim)?.duration ?? .6;
1273
+ player2AttackDurationRef.current = p2FallbackDur;
1274
+ player2Animation.transitionToAttack(p2FallbackDur);
1249
1275
  }
1250
1276
  handleAIAttack(selectedTechnique, targetVitalPoint);
1251
1277
  addCombatMessage("AI 반격!", "AI Counter!");
@@ -1752,7 +1778,7 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
1752
1778
  onReturnToMenu,
1753
1779
  isPaused: isPaused || showPauseMenu
1754
1780
  }),
1755
- /* @__PURE__ */ jsx(CombatLeftHUD, {
1781
+ !(isMobile && isPortrait) && /* @__PURE__ */ jsx(CombatLeftHUD, {
1756
1782
  width,
1757
1783
  height,
1758
1784
  isMobile,
@@ -1762,7 +1788,7 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
1762
1788
  isInGuard: player1Animation.isInStanceGuard(),
1763
1789
  speedModifiers: player1SpeedModifiers
1764
1790
  }),
1765
- /* @__PURE__ */ jsx(CombatRightHUD, {
1791
+ !(isMobile && isPortrait) && /* @__PURE__ */ jsx(CombatRightHUD, {
1766
1792
  width,
1767
1793
  height,
1768
1794
  isMobile,
@@ -1772,6 +1798,14 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
1772
1798
  speedModifiers: player2SpeedModifiers,
1773
1799
  difficultyTier: currentDifficultyTier
1774
1800
  }),
1801
+ isMobile && isPortrait && /* @__PURE__ */ jsx(CombatPortraitStatusStrip, {
1802
+ width,
1803
+ height,
1804
+ player1: validPlayers[0],
1805
+ player2: validPlayers[1],
1806
+ positionScale,
1807
+ topOffset: layoutConstants.hudHeight
1808
+ }),
1775
1809
  /* @__PURE__ */ jsx(CombatBottomHUD, {
1776
1810
  width,
1777
1811
  height,
@@ -1792,7 +1826,8 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
1792
1826
  consciousness: validPlayers[0].consciousness,
1793
1827
  bloodLoss: 0,
1794
1828
  stamina: validPlayers[0].stamina,
1795
- isMobile
1829
+ isMobile,
1830
+ intensityScale: isMobile && isPortrait ? .5 : 1
1796
1831
  }),
1797
1832
  /* @__PURE__ */ jsx("div", {
1798
1833
  style: {
@@ -1878,7 +1913,8 @@ var CombatScreen3D = ({ players, onPlayerUpdate, currentRound, timeRemaining, is
1878
1913
  /* @__PURE__ */ jsx(MobileControlsOverlay, {
1879
1914
  onMove: handleMobileMove,
1880
1915
  onAttack: handleMobileAttack,
1881
- onBlock: handleMobileBlock
1916
+ onBlock: handleMobileBlock,
1917
+ bottom: getMobileControlsBottom(height)
1882
1918
  }),
1883
1919
  /* @__PURE__ */ jsx(StanceWheelPure, {
1884
1920
  currentStance: currentStanceIndex,