diff --git a/public/data/honkai3rd/elysianRealm/supportBattlesuits/ae.json b/public/data/honkai3rd/elysianRealm/supportBattlesuits/ae.json
new file mode 100644
index 00000000..bc9f5ea4
--- /dev/null
+++ b/public/data/honkai3rd/elysianRealm/supportBattlesuits/ae.json
@@ -0,0 +1,6 @@
+{
+ "id": "ae",
+ "skillName": "Empyrean Sunder",
+ "cooldown": 50,
+ "description": "Summons Azure Empyrea, which gathers enemies and deals 1500% of ATK as Fire DMG to all enemies for 15s (this DMG decays below 85 difficulty), as well as increasing elemental DMG by 30% against all target enemies. Valkyries regain 1 SP every 1 second, have a large increase in Ignore Interrupt, and have a 16% increase in Elemental Breach."
+}
diff --git a/public/data/honkai3rd/elysianRealm/supportBattlesuits/bke.json b/public/data/honkai3rd/elysianRealm/supportBattlesuits/bke.json
new file mode 100644
index 00000000..dbea3fff
--- /dev/null
+++ b/public/data/honkai3rd/elysianRealm/supportBattlesuits/bke.json
@@ -0,0 +1,6 @@
+{
+ "id": "bke",
+ "skillName": "Knightly Bulwark",
+ "cooldown": 30,
+ "description": "Summons Bright Knight: Excelsis, who swings her lance and unleashes an Ultimate, dealing 930% of ATK as physical DMG (the DMG decays below 85 difficulty), and blocking all attacks against the Valkyrie for a short period."
+}
diff --git a/public/data/honkai3rd/elysianRealm/supportBattlesuits/br.json b/public/data/honkai3rd/elysianRealm/supportBattlesuits/br.json
new file mode 100644
index 00000000..3e8bd559
--- /dev/null
+++ b/public/data/honkai3rd/elysianRealm/supportBattlesuits/br.json
@@ -0,0 +1,6 @@
+{
+ "id": "br",
+ "skillName": "Blood Boost",
+ "cooldown": 40,
+ "description": "The Blood Rose reduces the HP of the deployed Valkyrie by 30%, and increases the Total DMG dealt by the Valkyrie by 60% for 10s."
+}
diff --git a/public/data/honkai3rd/elysianRealm/supportBattlesuits/dp.json b/public/data/honkai3rd/elysianRealm/supportBattlesuits/dp.json
new file mode 100644
index 00000000..c5c5b73a
--- /dev/null
+++ b/public/data/honkai3rd/elysianRealm/supportBattlesuits/dp.json
@@ -0,0 +1,6 @@
+{
+ "id": "dp",
+ "skillName": "Divine Retribution",
+ "cooldown": 40,
+ "description": "Triggers Time Fracture for 12s, during which, Falling Thunder is triggered every 2s, dealing 100% of ATK as Lightning DMG to all enemies and imparing them, and DEF is reduced by 80% for 5s."
+}
diff --git a/public/data/honkai3rd/elysianRealm/supportBattlesuits/le.json b/public/data/honkai3rd/elysianRealm/supportBattlesuits/le.json
new file mode 100644
index 00000000..9b9d067a
--- /dev/null
+++ b/public/data/honkai3rd/elysianRealm/supportBattlesuits/le.json
@@ -0,0 +1,6 @@
+{
+ "id": "le",
+ "skillName": "Lightning Charge",
+ "cooldown": 40,
+ "description": "Lightning Empress restores 50 SP for the deployed Valkyrie."
+}
diff --git a/public/data/honkai3rd/elysianRealm/supportBattlesuits/ss.json b/public/data/honkai3rd/elysianRealm/supportBattlesuits/ss.json
new file mode 100644
index 00000000..e4f00846
--- /dev/null
+++ b/public/data/honkai3rd/elysianRealm/supportBattlesuits/ss.json
@@ -0,0 +1,6 @@
+{
+ "id": "ss",
+ "skillName": "Arctic Snow",
+ "cooldown": 60,
+ "description": "Summons Snowy Sniper, freezing enemies across the battlefield and increasing their physical DMG taken by 35% for 12s. Deals 150% of ATK as Ice DMG after the freeze ends."
+}
diff --git a/public/data/honkai3rd/elysianRealm/supportBattlesuits/vc.json b/public/data/honkai3rd/elysianRealm/supportBattlesuits/vc.json
new file mode 100644
index 00000000..553940c2
--- /dev/null
+++ b/public/data/honkai3rd/elysianRealm/supportBattlesuits/vc.json
@@ -0,0 +1,6 @@
+{
+ "id": "vc",
+ "skillName": "Black Hole",
+ "cooldown": 30,
+ "description": "Summons Valkyrie Chariot, which unleashes a Black Hole that lasts 10s, sucking in enemies and causing Bleed. The ranged physical DMG taken by the sucked in enemies is increased by 27%, the total DMG dealt is reduced by 50%, the Ignore Interrupt is significantly reduced, and the enemies are Stunned for 6s after the Black Hole vanishes."
+}
diff --git a/public/data/honkai3rd/elysianRealm/supportBattlesuits/vke.json b/public/data/honkai3rd/elysianRealm/supportBattlesuits/vke.json
new file mode 100644
index 00000000..d43566b9
--- /dev/null
+++ b/public/data/honkai3rd/elysianRealm/supportBattlesuits/vke.json
@@ -0,0 +1,6 @@
+{
+ "id": "vke",
+ "skillName": "Ravaging Flame",
+ "cooldown": 60,
+ "description": "Summons Vermilion Knight: Eclipse, with a devastating ATK that deals a total of 2650% of ATK as Fire DMG + 350% of ATK as Physical DMG. After that, Might of An-Utu is unleashed, dealing a total of 2600% of ATK as Fire DMG and inflicting a 20% Fire Vulnerability on the target enemies for 10s (this support skill's DMG decays below 85 difficulty)."
+}
diff --git a/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/ae.md b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/ae.md
new file mode 100644
index 00000000..63904840
--- /dev/null
+++ b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/ae.md
@@ -0,0 +1,3 @@
+# 분천지
+
+단심의 먹구름을 소환해 적을 모아 모든 적에게 공격력 1500%의 화염 원소 대미지를 가하고(난이도 85 이하일 경우 대미지 감소), 15초간 적중한 적에게 가하는 모든 원소 대미지가 30% 증가한다. 전장의 캐릭터가 1초마다 SP를 1pt 회복하고, 경직 저항력이 대폭 증가하며, 16%의 원소 관통을 획득한다.
diff --git a/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/bke.md b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/bke.md
new file mode 100644
index 00000000..a5b96ea7
--- /dev/null
+++ b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/bke.md
@@ -0,0 +1,3 @@
+# 기사의 수호
+
+성휘의 기사 월백을 소환해 랜스를 휘두르고 필살기를 발동해 총 공격력 930%의 물리 대미지(난이도 85 이하일 경우 대미지 감소)를 가하고, 짧은 시간 출전 발키리가 받는 모든 공격을 막는다.
diff --git a/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/br.md b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/br.md
new file mode 100644
index 00000000..5ac87e8c
--- /dev/null
+++ b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/br.md
@@ -0,0 +1,3 @@
+# 선혈 폭발
+
+핏빛 장미의 힘을 빌려 출전 발키리의 HP가 30% 감소하고, 10초간 출전 발키리가 가하는 모든 대미지가 60% 증가한다.
diff --git a/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/dp.md b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/dp.md
new file mode 100644
index 00000000..08788650
--- /dev/null
+++ b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/dp.md
@@ -0,0 +1,3 @@
+# 신성한 빛의 심판
+
+12초간 시공을 발동한다. 발동 기간 2초마다 낙뢰를 발동해 모든 적에게 공격력 100%의 뇌전 원소 대미지를 가하고, 적을 취약 상태로 만들어 방어력을 80% 감소시킨다. 지속 시간: 5초
diff --git a/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/le.md b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/le.md
new file mode 100644
index 00000000..e2505a92
--- /dev/null
+++ b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/le.md
@@ -0,0 +1,3 @@
+# 뇌전 충전
+
+뇌전여왕의 귀신갑주의 힘을 빌려 즉시 출전 발키리의 SP를 50pt 회복한다.
diff --git a/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/ss.md b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/ss.md
new file mode 100644
index 00000000..7bba02dd
--- /dev/null
+++ b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/ss.md
@@ -0,0 +1,3 @@
+# 북극의 눈
+
+설원 저격수를 소환해 모든 적을 빙결시키고, 적이 받는 물리 대미지를 12초간 35% 증가시킨다. 빙결 종료 후 공격력 150%의 빙결 대미지를 가한다.
diff --git a/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/vc.md b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/vc.md
new file mode 100644
index 00000000..ecf805cf
--- /dev/null
+++ b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/vc.md
@@ -0,0 +1,3 @@
+# 인력의 블랙홀
+
+발키리 채리엇을 소환해 10초간 블랙홀을 발동하고 적을 끌어당기며, 출혈 효과를 부여한다. 끌어당겨진 적은 받는 원거리 물리 대미지가 27% 증가하고, 가하는 모든 대미지가 50% 감소하며, 경직 저항력이 대폭 감소한다. 블랙홀 종료 후 기절을 6초간 부여한다.
diff --git a/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/vke.md b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/vke.md
new file mode 100644
index 00000000..eb1d42cc
--- /dev/null
+++ b/public/data/honkai3rd/ko-KR/elysianRealm/supportBattlesuits/vke.md
@@ -0,0 +1,3 @@
+# 영원한 불꽃
+
+진홍의 기사·월식을 소환해 파멸 공격을 발동하고 총 공격력 2650%의 화염 원소 대미지+공격력 350%의 물리 대미지를 가한다. 그 후 겁멸을 발동해 총 공격력 2600%의 화염 원소 대미지를 가하고, 적중한 적에게 20%의 화염 피해 심화를 부여한다. 지속 시간: 10초(난이도 85 이하일 경우 해당 지원 스킬 대미지 감소).
diff --git a/src/lib/honkai3rd/elysianRealm.ts b/src/lib/honkai3rd/elysianRealm.ts
index e4621d12..362fe098 100644
--- a/src/lib/honkai3rd/elysianRealm.ts
+++ b/src/lib/honkai3rd/elysianRealm.ts
@@ -150,3 +150,11 @@ export interface PopulatedSignetGroup {
name: string
sets: SignetSet[]
}
+
+export interface SupportBattlesuit {
+ id: string
+ name: string
+ skillName: string
+ description: string
+ cooldown: number
+}
diff --git a/src/lib/theme.ts b/src/lib/theme.ts
index c37bae35..325e85da 100644
--- a/src/lib/theme.ts
+++ b/src/lib/theme.ts
@@ -240,4 +240,12 @@ export const theme: Theme = {
borderStyle: 'solid',
},
},
+ badges: {
+ primary: {
+ backgroundColor: 'primary',
+ },
+ secondary: {
+ backgroundColor: 'secondary',
+ },
+ },
}
diff --git a/src/pages/honkai3rd/elysian-realm/index.tsx b/src/pages/honkai3rd/elysian-realm/index.tsx
index 6ae004f2..b03ec62d 100644
--- a/src/pages/honkai3rd/elysian-realm/index.tsx
+++ b/src/pages/honkai3rd/elysian-realm/index.tsx
@@ -13,12 +13,12 @@ import Honkai3rdLayout from '../../../components/layouts/Honkai3rdLayout'
import {
erVersions,
rememberanceSigilIds,
- supportBattlesuitIds,
} from '../../../lib/honkai3rd/elysianRealm'
import SquareImageBox from '../../../components/atoms/SquareImageBox'
import { assetsBucketBaseUrl } from '../../../lib/consts'
import PageLink from '../../../components/atoms/PageLink'
import SignetGroupNavigator from '../../../components/organisms/SignetGroupNavigator'
+import { getSupportBattlesuits } from '../../../server/data/honkai3rd/elysianRealm'
type BattlesuitListItemData = Pick<
BattlesuitData,
@@ -27,9 +27,13 @@ type BattlesuitListItemData = Pick<
interface BattlesuitListPageProps {
battlesuitMap: { [id: string]: BattlesuitListItemData }
+ supportBattlesuits: { id: string; name: string }[]
}
-const ElysianRealmIndexPage = ({ battlesuitMap }: BattlesuitListPageProps) => {
+const ElysianRealmIndexPage = ({
+ battlesuitMap,
+ supportBattlesuits,
+}: BattlesuitListPageProps) => {
const { t } = useTranslation()
return (
@@ -90,15 +94,16 @@ const ElysianRealmIndexPage = ({ battlesuitMap }: BattlesuitListPageProps) => {
{t('elysian-realm.supports')}
- {supportBattlesuitIds.map((battlesuitId) => {
+ {supportBattlesuits.map(({ id, name }) => {
return (
-
+
@@ -139,9 +144,19 @@ export async function getStaticProps({ locale }: NextPageContext) {
list.push(...version.battlesuits)
return list
}, [])
+
+ const supportBattlesuits = getSupportBattlesuits(locale).map(
+ ({ id, name }) => {
+ return {
+ id,
+ name,
+ }
+ }
+ )
return {
props: {
battlesuitMap: getBattlesuitMapByIds(erBattlesuitIds),
+ supportBattlesuits,
...(await getI18NProps(locale)),
},
}
diff --git a/src/pages/honkai3rd/elysian-realm/support-battlesuits.tsx b/src/pages/honkai3rd/elysian-realm/support-battlesuits.tsx
new file mode 100644
index 00000000..a5a8e0f2
--- /dev/null
+++ b/src/pages/honkai3rd/elysian-realm/support-battlesuits.tsx
@@ -0,0 +1,101 @@
+/** @jsxImportSource theme-ui */
+import {
+ Box,
+ Heading,
+ Flex,
+ Card,
+ Paragraph,
+ Badge,
+} from '@theme-ui/components'
+import Breadcrumb from '../../../components/organisms/Breadcrumb'
+
+import { NextPageContext } from 'next'
+import { getI18NProps } from '../../../server/i18n'
+import { useTranslation } from '../../../lib/i18n'
+import Head from '../../../components/atoms/Head'
+import Honkai3rdLayout from '../../../components/layouts/Honkai3rdLayout'
+import { SupportBattlesuit } from '../../../lib/honkai3rd/elysianRealm'
+import SquareImageBox from '../../../components/atoms/SquareImageBox'
+import { assetsBucketBaseUrl } from '../../../lib/consts'
+import { getSupportBattlesuits } from '../../../server/data/honkai3rd/elysianRealm'
+
+interface BattlesuitListPageProps {
+ supportBattlesuits: SupportBattlesuit[]
+}
+
+const ElysianRealmIndexPage = ({
+ supportBattlesuits,
+}: BattlesuitListPageProps) => {
+ const { t } = useTranslation()
+
+ return (
+
+
+
+
+
+
+ {t('elysian-realm.supports')}
+
+
+ {supportBattlesuits.map(
+ ({ id, name, skillName, description, cooldown }) => {
+ return (
+
+
+
+
+
+
+ {name} - {skillName}
+
+ Cooldown: {cooldown}s
+ {description}
+
+
+
+ )
+ }
+ )}
+
+
+
+ )
+}
+
+export default ElysianRealmIndexPage
+
+export async function getStaticProps({ locale }: NextPageContext) {
+ const supportBattlesuits = getSupportBattlesuits(locale)
+
+ return {
+ props: {
+ supportBattlesuits,
+ ...(await getI18NProps(locale)),
+ },
+ }
+}
diff --git a/src/server/data/honkai3rd/elysianRealm.ts b/src/server/data/honkai3rd/elysianRealm.ts
index c4391b5c..4a72068f 100644
--- a/src/server/data/honkai3rd/elysianRealm.ts
+++ b/src/server/data/honkai3rd/elysianRealm.ts
@@ -1,9 +1,11 @@
-import { readFileSync } from '../fs'
+import { readFileSync, readJsonFileSync } from '../fs'
import {
PopulatedSignetGroup,
SignetData,
signetGroups,
SignetSet,
+ SupportBattlesuit,
+ supportBattlesuitIds,
} from '../../../lib/honkai3rd/elysianRealm'
import { getBattlesuitById } from './battlesuits'
@@ -106,6 +108,46 @@ export function getSignetGroupById(id: string, locale = 'en-US') {
return signetGroupMap[id]
}
+export function getSupportBattlesuits(locale?: string) {
+ return supportBattlesuitIds.map((battlesuitId) => {
+ const battlesuit = getBattlesuitById(battlesuitId)!
+ const {
+ skillName,
+ description,
+ cooldown,
+ }: { skillName: string; description: string; cooldown: number } =
+ readJsonFileSync(
+ `honkai3rd/elysianRealm/supportBattlesuits/${battlesuitId}.json`
+ )
+
+ let localizedName = battlesuit.name
+ let localizedSkillName = skillName
+ let localizedDescription = description
+
+ if (locale === 'ko-KR') {
+ const [krSkillName, ...krDescriptionLines] = readFileSync(
+ `honkai3rd/ko-KR/elysianRealm/supportBattlesuits/${battlesuitId}.md`
+ )
+ .toString()
+ .trim()
+ .slice(2)
+ .split('\n\n')
+
+ localizedName = battlesuit.krName!
+ localizedSkillName = krSkillName
+ localizedDescription = krDescriptionLines.join('\n').trim()
+ }
+
+ return {
+ id: battlesuitId,
+ name: localizedName,
+ skillName: localizedSkillName,
+ description: localizedDescription,
+ cooldown,
+ }
+ })
+}
+
function parseNormalSignetsRawData(setId: string, data: string) {
const signetSections = data.replace(/\\\*/g, '*').slice(2).split('\n# ')
const signets: SignetData[] = []