diff --git a/IWantToHeal-Thor-v1.1.4.apk b/IWantToHeal-Thor-v1.1.4.apk new file mode 100644 index 0000000..4131da6 Binary files /dev/null and b/IWantToHeal-Thor-v1.1.4.apk differ diff --git a/android/app/build.gradle b/android/app/build.gradle index 9ded95c..57eb09e 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 82 - versionName "1.1.3" + versionCode 83 + versionName "1.1.4" 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 a87abdd..0e0a354 100644 --- a/src/App.css +++ b/src/App.css @@ -787,6 +787,10 @@ textarea:focus-visible, min-height: 0; } +.dual-top-main.pvp-roguelike-dual-top { + grid-template-rows: auto minmax(0, 1fr); +} + .dual-top-main.stadium-dual-top { grid-template-rows: auto auto minmax(0, 1fr) auto; } @@ -798,6 +802,12 @@ textarea:focus-visible, width: 100%; } +.dual-top-main.pvp-roguelike-dual-top .dual-top-enemy { + align-items: center; + display: grid; + grid-template-columns: 84px minmax(0, 1fr) minmax(96px, 108px); +} + .dual-top-main .dual-top-party-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } @@ -829,6 +839,14 @@ textarea:focus-visible, padding: 8px 10px; } +.dual-top-cooldowns { + align-content: center; + display: grid; + gap: 6px; + grid-template-columns: repeat(2, 48px); + justify-content: end; +} + .dual-top-spell { align-items: center; background: #20232c; @@ -843,6 +861,11 @@ textarea:focus-visible, position: relative; } +.dual-top-cooldowns .dual-top-spell { + height: 38px; + width: 48px; +} + .dual-top-spell:not(:disabled) { cursor: pointer; } @@ -858,6 +881,12 @@ textarea:focus-visible, width: 32px; } +.dual-top-cooldowns .dual-top-spell .spell-icon { + font-size: 16px; + height: 26px; + width: 26px; +} + .dual-top-spell > i { background: rgba(0, 0, 0, 0.58); bottom: 0; @@ -875,6 +904,10 @@ textarea:focus-visible, position: absolute; } +.dual-top-cooldowns .dual-top-spell > small { + font-size: 8px; +} + .dual-top-resource { align-self: center; color: #82bfff; diff --git a/src/components/PvpRoguelikeScreen.tsx b/src/components/PvpRoguelikeScreen.tsx index 3d95e0b..809ec77 100644 --- a/src/components/PvpRoguelikeScreen.tsx +++ b/src/components/PvpRoguelikeScreen.tsx @@ -1339,6 +1339,9 @@ export function PvPRoguelikeScreen({ opponentClassName: liveMatch?.opponentClassName ?? (cpuDifficulty ? `CPU ${cpuDifficulty}` : 'CPU'), opponentParty: cpuSide.party, opponentEnemyHealth: cpuSide.enemyHealth, + opponentResource: cpuSide.resource, + opponentMaxResource: maxResource, + opponentResourceName: gameClass.resourceName, opponentBuffSummary, opponentDebuffSummary, floatingTexts: dualScreenFloatingTexts, @@ -1362,6 +1365,7 @@ export function PvPRoguelikeScreen({ cpuDifficulty, cpuSide.enemyHealth, cpuSide.party, + cpuSide.resource, directPartyTargeting, encounter.description, encounter.enemyName, diff --git a/src/components/PvpStadiumScreen.tsx b/src/components/PvpStadiumScreen.tsx index 097fe7f..ffae003 100644 --- a/src/components/PvpStadiumScreen.tsx +++ b/src/components/PvpStadiumScreen.tsx @@ -1055,6 +1055,9 @@ export function PvpStadiumScreen({ opponentClassName: liveMatch?.opponentClassName ?? (cpuDifficulty ? `CPU ${cpuDifficulty}` : 'CPU'), opponentParty: cpuSide.party, opponentEnemyHealth: 0, + opponentResource: cpuSide.resource, + opponentMaxResource: MAX_RESOURCE, + opponentResourceName: gameClass.resourceName, opponentBuffSummary, opponentDebuffSummary, floatingTexts: dualScreenFloatingTexts, @@ -1083,6 +1086,7 @@ export function PvpStadiumScreen({ controllerIconStyle, cpuDifficulty, cpuSide.party, + cpuSide.resource, cpuSide.survivalSeconds, directPartyTargeting, dualScreenFloatingTexts, diff --git a/src/dualScreen.tsx b/src/dualScreen.tsx index ff0d251..735deea 100644 --- a/src/dualScreen.tsx +++ b/src/dualScreen.tsx @@ -47,6 +47,9 @@ export type DualScreenCombatState = { opponentClassName?: string opponentParty?: PartyMember[] opponentEnemyHealth?: number + opponentResource?: number + opponentMaxResource?: number + opponentResourceName?: string opponentBuffSummary?: string opponentDebuffSummary?: string floatingTexts: Array<{ @@ -479,6 +482,17 @@ export function DualScreenBottomDisplay() {
{state.opponentResourceName ?? state.resourceName}
+ {Math.floor(state.opponentResource)} / {state.opponentMaxResource} +{state.encounterDescription}