242 lines
6.7 KiB
TypeScript
242 lines
6.7 KiB
TypeScript
export type PortraitKey = 'liuBei' | 'guanYu' | 'zhangFei';
|
|
|
|
export type StoryPage = {
|
|
id: string;
|
|
chapter: string;
|
|
background: string;
|
|
speaker?: string;
|
|
portrait?: PortraitKey;
|
|
bgm?: string;
|
|
text: string;
|
|
};
|
|
|
|
export type UnitData = {
|
|
id: string;
|
|
name: string;
|
|
faction: 'ally' | 'enemy';
|
|
className: string;
|
|
hp: number;
|
|
maxHp: number;
|
|
attack: number;
|
|
move: number;
|
|
stats: UnitStats;
|
|
x: number;
|
|
y: number;
|
|
};
|
|
|
|
export type UnitStats = {
|
|
might: number;
|
|
intelligence: number;
|
|
leadership: number;
|
|
agility: number;
|
|
luck: number;
|
|
};
|
|
|
|
export type TerrainType = 'plain' | 'forest' | 'hill' | 'fort';
|
|
|
|
export type BattleMap = {
|
|
width: number;
|
|
height: number;
|
|
terrain: TerrainType[][];
|
|
};
|
|
|
|
export const prologuePages: StoryPage[] = [
|
|
{
|
|
id: 'yellow-turban-chaos',
|
|
bgm: 'story-dark',
|
|
chapter: '난세의 시작',
|
|
background: 'story-chaos',
|
|
text: '중평 원년, 황건의 깃발이 각지에서 일어났다. 관군은 흩어지고, 마을마다 피난 행렬이 이어졌다.'
|
|
},
|
|
{
|
|
id: 'liu-bei-resolve',
|
|
bgm: 'story-dark',
|
|
chapter: '탁현의 방',
|
|
background: 'story-liu-bei',
|
|
speaker: '유비',
|
|
portrait: 'liuBei',
|
|
text: '한실의 백성이 이토록 고통받는데, 어찌 초가집 그늘에 숨어 있을 수 있겠는가.'
|
|
},
|
|
{
|
|
id: 'zhang-fei-joins',
|
|
bgm: 'story-dark',
|
|
chapter: '뜻이 모이다',
|
|
background: 'story-three-heroes',
|
|
speaker: '장비',
|
|
portrait: 'zhangFei',
|
|
text: '좋소! 나라를 바로잡고 백성을 구한다면, 내 재산도 이 목숨도 아깝지 않소.'
|
|
},
|
|
{
|
|
id: 'guan-yu-joins',
|
|
bgm: 'story-dark',
|
|
chapter: '뜻이 모이다',
|
|
background: 'story-three-heroes',
|
|
speaker: '관우',
|
|
portrait: 'guanYu',
|
|
text: '의로운 뜻을 품은 이와 길을 함께한다면, 천 리라도 멀다 하지 않겠습니다.'
|
|
},
|
|
{
|
|
id: 'oath-narration',
|
|
bgm: 'oath-theme',
|
|
chapter: '도원결의',
|
|
background: 'title-taoyuan',
|
|
text: '복숭아꽃이 흩날리는 동산에서 세 사람은 하늘과 땅에 고했다.'
|
|
},
|
|
{
|
|
id: 'oath-liu-bei',
|
|
bgm: 'oath-theme',
|
|
chapter: '도원결의',
|
|
background: 'title-taoyuan',
|
|
speaker: '유비',
|
|
portrait: 'liuBei',
|
|
text: '우리는 태어난 날은 달라도, 오늘부터 뜻을 함께한다. 백성을 구하고 한실을 돕는 길에서 물러서지 않겠다.'
|
|
},
|
|
{
|
|
id: 'oath-brothers',
|
|
bgm: 'oath-theme',
|
|
chapter: '도원결의',
|
|
background: 'title-taoyuan',
|
|
speaker: '관우',
|
|
portrait: 'guanYu',
|
|
text: '의를 저버리지 않고, 형제를 저버리지 않겠습니다.'
|
|
},
|
|
{
|
|
id: 'militia-rises',
|
|
bgm: 'militia-theme',
|
|
chapter: '의용군 모집',
|
|
background: 'story-militia',
|
|
speaker: '장비',
|
|
portrait: 'zhangFei',
|
|
text: '창을 들 사람은 앞으로 나오시오! 오늘 모인 이름 없는 무리가 내일의 방패가 될 것이오!'
|
|
},
|
|
{
|
|
id: 'first-sortie',
|
|
bgm: 'battle-prep',
|
|
chapter: '첫 출진',
|
|
background: 'story-sortie',
|
|
speaker: '유비',
|
|
portrait: 'liuBei',
|
|
text: '우리는 아직 작다. 그러나 오늘 한 마을을 지켜낸다면, 그 뜻은 천하로 번져갈 것이다.'
|
|
},
|
|
{
|
|
id: 'battle-briefing',
|
|
bgm: 'battle-prep',
|
|
chapter: '황건적 토벌',
|
|
background: 'story-sortie',
|
|
text: '의용군은 마을 어귀로 향했다. 첫 싸움은 곧 시작된다.'
|
|
}
|
|
];
|
|
|
|
export const firstBattleMap: BattleMap = {
|
|
width: 12,
|
|
height: 12,
|
|
terrain: [
|
|
['plain', 'plain', 'forest', 'forest', 'plain', 'plain', 'plain', 'hill', 'hill', 'plain', 'plain', 'plain'],
|
|
['plain', 'forest', 'forest', 'plain', 'plain', 'plain', 'plain', 'plain', 'hill', 'plain', 'plain', 'plain'],
|
|
['plain', 'forest', 'plain', 'plain', 'plain', 'plain', 'forest', 'plain', 'plain', 'plain', 'plain', 'plain'],
|
|
['plain', 'plain', 'plain', 'hill', 'hill', 'plain', 'forest', 'forest', 'plain', 'plain', 'plain', 'plain'],
|
|
['plain', 'plain', 'plain', 'hill', 'plain', 'plain', 'plain', 'forest', 'plain', 'plain', 'plain', 'plain'],
|
|
['plain', 'plain', 'plain', 'plain', 'plain', 'fort', 'plain', 'plain', 'plain', 'plain', 'forest', 'forest'],
|
|
['plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'forest', 'plain'],
|
|
['forest', 'forest', 'plain', 'plain', 'plain', 'plain', 'plain', 'hill', 'hill', 'plain', 'plain', 'plain'],
|
|
['forest', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'hill', 'plain', 'plain', 'plain', 'plain'],
|
|
['plain', 'plain', 'plain', 'forest', 'forest', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain'],
|
|
['plain', 'plain', 'plain', 'plain', 'forest', 'plain', 'plain', 'plain', 'plain', 'forest', 'forest', 'plain'],
|
|
['plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'plain', 'forest', 'plain']
|
|
]
|
|
};
|
|
|
|
export const firstBattleUnits: UnitData[] = [
|
|
{
|
|
id: 'liu-bei',
|
|
name: '유비',
|
|
faction: 'ally',
|
|
className: '의병장',
|
|
hp: 32,
|
|
maxHp: 32,
|
|
attack: 9,
|
|
move: 4,
|
|
stats: { might: 76, intelligence: 78, leadership: 84, agility: 70, luck: 88 },
|
|
x: 1,
|
|
y: 9
|
|
},
|
|
{
|
|
id: 'guan-yu',
|
|
name: '관우',
|
|
faction: 'ally',
|
|
className: '보병',
|
|
hp: 30,
|
|
maxHp: 30,
|
|
attack: 10,
|
|
move: 3,
|
|
stats: { might: 96, intelligence: 74, leadership: 91, agility: 72, luck: 68 },
|
|
x: 2,
|
|
y: 10
|
|
},
|
|
{
|
|
id: 'zhang-fei',
|
|
name: '장비',
|
|
faction: 'ally',
|
|
className: '창병',
|
|
hp: 30,
|
|
maxHp: 30,
|
|
attack: 10,
|
|
move: 3,
|
|
stats: { might: 95, intelligence: 42, leadership: 83, agility: 67, luck: 61 },
|
|
x: 1,
|
|
y: 10
|
|
},
|
|
{
|
|
id: 'rebel-a',
|
|
name: '황건병',
|
|
faction: 'enemy',
|
|
className: '도적',
|
|
hp: 20,
|
|
maxHp: 20,
|
|
attack: 6,
|
|
move: 3,
|
|
stats: { might: 49, intelligence: 34, leadership: 38, agility: 45, luck: 40 },
|
|
x: 8,
|
|
y: 2
|
|
},
|
|
{
|
|
id: 'rebel-b',
|
|
name: '황건병',
|
|
faction: 'enemy',
|
|
className: '도적',
|
|
hp: 20,
|
|
maxHp: 20,
|
|
attack: 6,
|
|
move: 3,
|
|
stats: { might: 47, intelligence: 32, leadership: 36, agility: 48, luck: 38 },
|
|
x: 9,
|
|
y: 3
|
|
},
|
|
{
|
|
id: 'rebel-c',
|
|
name: '황건궁병',
|
|
faction: 'enemy',
|
|
className: '궁병',
|
|
hp: 18,
|
|
maxHp: 18,
|
|
attack: 7,
|
|
move: 3,
|
|
stats: { might: 52, intelligence: 40, leadership: 43, agility: 56, luck: 42 },
|
|
x: 10,
|
|
y: 2
|
|
},
|
|
{
|
|
id: 'rebel-leader',
|
|
name: '두령 한석',
|
|
faction: 'enemy',
|
|
className: '두령',
|
|
hp: 30,
|
|
maxHp: 30,
|
|
attack: 9,
|
|
move: 3,
|
|
stats: { might: 64, intelligence: 46, leadership: 61, agility: 52, luck: 50 },
|
|
x: 10,
|
|
y: 4
|
|
}
|
|
];
|