diff --git a/IWantToHeal-Thor-v1.1.41.apk b/IWantToHeal-Thor-v1.1.41.apk new file mode 100644 index 0000000..a932612 Binary files /dev/null and b/IWantToHeal-Thor-v1.1.41.apk differ diff --git a/android/app/build.gradle b/android/app/build.gradle index b66650c..ade04b7 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "com.warren.iwanttoheal" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 121 - versionName "1.1.40" + versionCode 122 + versionName "1.1.41" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/src/App.css b/src/App.css index 2ef2685..1242297 100644 --- a/src/App.css +++ b/src/App.css @@ -1437,6 +1437,36 @@ } @media (max-width: 1000px) and (max-height: 620px) { + .pause-screen.iwt2-arena-overlay { + padding: 10px; + } + + .pause-screen.iwt2-arena-overlay > .iwt2-result-panel { + gap: 8px; + max-height: calc(100dvh - 20px); + max-width: 460px; + min-width: min(460px, calc(100vw - 20px)); + padding: 12px 14px; + } + + .iwt2-result-panel .iwt2-result-crest { + display: none; + } + + .iwt2-result-panel h1 { + font-size: 1.35rem; + } + + .iwt2-result-summary { + gap: 6px; + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + + .iwt2-result-summary span { + min-height: 42px; + padding: 6px; + } + .iwt2-arena-layout { grid-template-columns: 154px minmax(0, 1fr); } diff --git a/src/components/AuthScreen.tsx b/src/components/AuthScreen.tsx index efa6d76..f6166a8 100644 --- a/src/components/AuthScreen.tsx +++ b/src/components/AuthScreen.tsx @@ -84,7 +84,9 @@ export function AuthScreen({ onContinue }: Props) { const result = await loadIwt2OnlineSave() if (cancelled()) return setOnlineSave(result.save) - setMessage(result.save ? 'Online save ready. Choose its local destination slot.' : 'Account has no online IWT2 save yet.') + setMessage(result.save + ? 'Online save ready. Load it below, or continue a local slot and upload it from Cloud Backup.' + : 'No online save yet. Continue a local slot, then use Cloud Backup to upload it.') setMessageIsError(false) } catch (reason) { if (cancelled()) return @@ -127,7 +129,7 @@ export function AuthScreen({ onContinue }: Props) { if (!save) return selectActiveIwt2SaveSlot(slot) selectOfflineMode() - onContinue({ localSlot: slot, save, onlineBackupsAvailable: false }) + onContinue({ localSlot: slot, save, onlineBackupsAvailable: Boolean(account) }) } function openCharacterEditor(slot: Iwt2LocalSaveSlot) { @@ -151,7 +153,7 @@ export function AuthScreen({ onContinue }: Props) { replaceIwt2Save(save, slot) selectActiveIwt2SaveSlot(slot) selectOfflineMode() - onContinue({ localSlot: slot, save, onlineBackupsAvailable: false }) + onContinue({ localSlot: slot, save, onlineBackupsAvailable: Boolean(account) }) } async function signIn(event: React.FormEvent) { diff --git a/src/modes/iwt2/screens/BossArenaScreen.tsx b/src/modes/iwt2/screens/BossArenaScreen.tsx index af5178e..c560a06 100644 --- a/src/modes/iwt2/screens/BossArenaScreen.tsx +++ b/src/modes/iwt2/screens/BossArenaScreen.tsx @@ -59,10 +59,14 @@ type OverlayNavEntry = { column: number } -const DEFAULT_OVERLAY_NAV_ENTRIES: OverlayNavEntry[] = [ +const PAUSE_OVERLAY_NAV_ENTRIES: OverlayNavEntry[] = [ { action: 'primary', row: 0, column: 0 }, { action: 'menu', row: 1, column: 0 }, ] +const RESULT_OVERLAY_NAV_ENTRIES: OverlayNavEntry[] = [ + { action: 'primary', row: 0, column: 0 }, + { action: 'menu', row: 0, column: 1 }, +] const PVP_RESULT_OVERLAY_NAV_ENTRIES: OverlayNavEntry[] = [ { action: 'primary', row: 0, column: 0 }, { action: 'requeue', row: 0, column: 1 }, @@ -693,8 +697,9 @@ function rewardDifficultySlugForKill( } function overlayNavEntriesFor(status: ArenaStatus, pvpRoguelike: boolean): OverlayNavEntry[] { + if (status === 'paused') return PAUSE_OVERLAY_NAV_ENTRIES if (pvpRoguelike && (status === 'victory' || status === 'defeat')) return PVP_RESULT_OVERLAY_NAV_ENTRIES - return DEFAULT_OVERLAY_NAV_ENTRIES + return RESULT_OVERLAY_NAV_ENTRIES } function formatBossEncounterTitle(bosses: Iwt2ArenaState['bosses']): string { diff --git a/src/modes/iwt2/screens/Iwt2ShellScreens.tsx b/src/modes/iwt2/screens/Iwt2ShellScreens.tsx index b748bd7..eda0a0f 100644 --- a/src/modes/iwt2/screens/Iwt2ShellScreens.tsx +++ b/src/modes/iwt2/screens/Iwt2ShellScreens.tsx @@ -1886,7 +1886,9 @@ export function Iwt2CloudSaveScreen({ const [onlineSave, setOnlineSave] = useState(null) const [syncingOnlineSave, setSyncingOnlineSave] = useState(false) const [message, setMessage] = useState('') - const statusMessage = message || (!onlineBackupsAvailable ? 'Online save unavailable in offline mode.' : '') + const statusMessage = message || (!onlineBackupsAvailable + ? 'Sign in at character select to upload or download this local save.' + : '') const checkOnlineSave = useCallback(async (isCancelled: () => boolean) => { setSyncingOnlineSave(true) @@ -1923,7 +1925,7 @@ export function Iwt2CloudSaveScreen({ const handleUseLocalSave = useCallback(async () => { if (!onlineBackupsAvailable) { - setMessage('Using local save. Sign in online to update the server copy.') + setMessage('Using local save. Sign in at character select to update the server copy.') return } setSyncingOnlineSave(true)