fix(race-class): 원본 데이터 기준 종족/클래스 확장

- 종족: 7개 → 21개 (pq_config_data.dart 기준)
- 클래스: 6개 → 18개 (pq_config_data.dart 기준)
- 각 종족/클래스에 적절한 스탯 보정 및 패시브 추가
This commit is contained in:
JiWoong Sul
2025-12-17 17:26:50 +09:00
parent d158c11249
commit e451703161
2 changed files with 733 additions and 173 deletions

View File

@@ -2,131 +2,125 @@ import 'package:askiineverdie/src/core/model/race_traits.dart';
/// 종족 데이터 정의 (race data)
///
/// 프로그래밍 테마의 7가지 종족 정의
/// 프로그래밍 테마의 21가지 종족 정의
/// pq_config_data.dart의 Races 데이터 기반
class RaceData {
RaceData._();
/// Byte Human: 균형형, 경험치 보너스
// ==========================================================================
// 기본 종족 (HP/밸런스형)
// ==========================================================================
/// Byte Human: HP 보너스
static const byteHuman = RaceTraits(
raceId: 'byte_human',
name: 'Byte Human',
statModifiers: {
StatType.cha: 2,
},
statModifiers: {},
passives: [
PassiveAbility(
type: PassiveType.expBonus,
type: PassiveType.hpBonus,
value: 0.10,
description: '경험치 +10%',
),
],
expMultiplier: 1.10,
);
/// Null Elf: 민첩/지능형, 마법 데미지 보너스
static const nullElf = RaceTraits(
raceId: 'null_elf',
name: 'Null Elf',
statModifiers: {
StatType.str: -1,
StatType.con: -1,
StatType.dex: 2,
StatType.intelligence: 2,
},
passives: [
PassiveAbility(
type: PassiveType.magicDamageBonus,
value: 0.15,
description: '마법 데미지 +15%',
description: 'HP +10%',
),
],
);
/// Buffer Dwarf: 힘/체력형, 방어력 보너스
static const bufferDwarf = RaceTraits(
raceId: 'buffer_dwarf',
name: 'Buffer Dwarf',
statModifiers: {
StatType.str: 2,
StatType.con: 2,
StatType.dex: -1,
StatType.intelligence: -1,
},
passives: [
PassiveAbility(
type: PassiveType.defenseBonus,
value: 0.10,
description: '방어력 +10%',
),
],
);
/// Stack Goblin: 민첩형, 크리티컬 보너스
static const stackGoblin = RaceTraits(
raceId: 'stack_goblin',
name: 'Stack Goblin',
statModifiers: {
StatType.str: -1,
StatType.con: -1,
StatType.dex: 3,
StatType.cha: 1,
},
passives: [
PassiveAbility(
type: PassiveType.criticalBonus,
value: 0.05,
description: '크리티컬 확률 +5%',
),
],
);
/// Heap Troll: 체력형, HP 보너스
static const heapTroll = RaceTraits(
raceId: 'heap_troll',
name: 'Heap Troll',
/// Kernel Giant: STR + HP 보너스
static const kernelGiant = RaceTraits(
raceId: 'kernel_giant',
name: 'Kernel Giant',
statModifiers: {
StatType.str: 3,
StatType.con: 3,
StatType.dex: -2,
StatType.intelligence: -2,
},
passives: [
PassiveAbility(
type: PassiveType.hpBonus,
value: 0.20,
description: 'HP +20%',
value: 0.15,
description: 'HP +15%',
),
],
);
/// Pointer Fairy: 마법형, MP 보너스
static const pointerFairy = RaceTraits(
raceId: 'pointer_fairy',
name: 'Pointer Fairy',
// ==========================================================================
// 지혜 종족 (WIS 기반)
// ==========================================================================
/// Null Elf: WIS 보너스
static const nullElf = RaceTraits(
raceId: 'null_elf',
name: 'Null Elf',
statModifiers: {
StatType.str: -2,
StatType.con: -2,
StatType.dex: 2,
StatType.intelligence: 2,
StatType.wis: 2,
StatType.con: -1,
},
passives: [
PassiveAbility(
type: PassiveType.magicDamageBonus,
value: 0.10,
description: '마법 데미지 +10%',
),
],
);
/// Recursive Sage: WIS + INT 보너스
static const recursiveSage = RaceTraits(
raceId: 'recursive_sage',
name: 'Recursive Sage',
statModifiers: {
StatType.wis: 2,
StatType.intelligence: 2,
StatType.str: -2,
},
passives: [
PassiveAbility(
type: PassiveType.mpBonus,
value: 0.20,
description: 'MP +20%',
value: 0.10,
description: 'MP +10%',
),
],
);
/// Coredump Undead: 탱커형, 사망 시 장비 보존
/// Callback Priest: WIS + CHA 보너스
static const callbackPriest = RaceTraits(
raceId: 'callback_priest',
name: 'Callback Priest',
statModifiers: {
StatType.wis: 2,
StatType.cha: 2,
StatType.str: -1,
StatType.dex: -1,
},
passives: [],
);
// ==========================================================================
// 체력 종족 (CON 기반)
// ==========================================================================
/// Buffer Dwarf: CON 보너스
static const bufferDwarf = RaceTraits(
raceId: 'buffer_dwarf',
name: 'Buffer Dwarf',
statModifiers: {
StatType.con: 2,
StatType.dex: -1,
},
passives: [
PassiveAbility(
type: PassiveType.defenseBonus,
value: 0.05,
description: '방어력 +5%',
),
],
);
/// Coredump Undead: CON 보너스
static const coredumpUndead = RaceTraits(
raceId: 'coredump_undead',
name: 'Coredump Undead',
statModifiers: {
StatType.str: 1,
StatType.con: 2,
StatType.dex: -1,
StatType.cha: -2,
},
passives: [
@@ -138,15 +132,267 @@ class RaceData {
],
);
/// 모든 종족 목록
// ==========================================================================
// 민첩 종족 (DEX 기반)
// ==========================================================================
/// Bit Halfling: DEX 보너스
static const bitHalfling = RaceTraits(
raceId: 'bit_halfling',
name: 'Bit Halfling',
statModifiers: {
StatType.dex: 2,
StatType.str: -1,
},
passives: [
PassiveAbility(
type: PassiveType.criticalBonus,
value: 0.03,
description: '크리티컬 +3%',
),
],
);
/// Cache Imp: DEX 보너스
static const cacheImp = RaceTraits(
raceId: 'cache_imp',
name: 'Cache Imp',
statModifiers: {
StatType.dex: 2,
StatType.con: -1,
},
passives: [],
);
/// Iterator Rogue: DEX 보너스
static const iteratorRogue = RaceTraits(
raceId: 'iterator_rogue',
name: 'Iterator Rogue',
statModifiers: {
StatType.dex: 2,
StatType.wis: -1,
},
passives: [
PassiveAbility(
type: PassiveType.criticalBonus,
value: 0.05,
description: '크리티컬 +5%',
),
],
);
// ==========================================================================
// 힘 종족 (STR 기반)
// ==========================================================================
/// Array Orc: STR 보너스
static const arrayOrc = RaceTraits(
raceId: 'array_orc',
name: 'Array Orc',
statModifiers: {
StatType.str: 2,
StatType.intelligence: -1,
},
passives: [],
);
/// Flag Knight: CHA + STR 보너스
static const flagKnight = RaceTraits(
raceId: 'flag_knight',
name: 'Flag Knight',
statModifiers: {
StatType.cha: 2,
StatType.str: 2,
StatType.intelligence: -2,
},
passives: [],
);
/// Protocol Paladin: STR + CHA 보너스
static const protocolPaladin = RaceTraits(
raceId: 'protocol_paladin',
name: 'Protocol Paladin',
statModifiers: {
StatType.str: 2,
StatType.cha: 2,
StatType.dex: -2,
},
passives: [
PassiveAbility(
type: PassiveType.defenseBonus,
value: 0.05,
description: '방어력 +5%',
),
],
);
// ==========================================================================
// 복합 스탯 종족
// ==========================================================================
/// Stack Goblin: DEX + CON 보너스
static const stackGoblin = RaceTraits(
raceId: 'stack_goblin',
name: 'Stack Goblin',
statModifiers: {
StatType.dex: 2,
StatType.con: 1,
StatType.cha: -2,
},
passives: [],
);
/// Heap Troll: CON + STR 보너스
static const heapTroll = RaceTraits(
raceId: 'heap_troll',
name: 'Heap Troll',
statModifiers: {
StatType.con: 2,
StatType.str: 2,
StatType.intelligence: -2,
StatType.dex: -1,
},
passives: [
PassiveAbility(
type: PassiveType.hpBonus,
value: 0.10,
description: 'HP +10%',
),
],
);
/// Index Ranger: DEX + CON 보너스
static const indexRanger = RaceTraits(
raceId: 'index_ranger',
name: 'Index Ranger',
statModifiers: {
StatType.dex: 2,
StatType.con: 1,
StatType.intelligence: -1,
},
passives: [],
);
// ==========================================================================
// 마법 종족 (MP/INT 기반)
// ==========================================================================
/// Pointer Fairy: MP Max + WIS 보너스
static const pointerFairy = RaceTraits(
raceId: 'pointer_fairy',
name: 'Pointer Fairy',
statModifiers: {
StatType.wis: 2,
StatType.str: -2,
},
passives: [
PassiveAbility(
type: PassiveType.mpBonus,
value: 0.15,
description: 'MP +15%',
),
],
);
/// Register Gnome: INT 보너스
static const registerGnome = RaceTraits(
raceId: 'register_gnome',
name: 'Register Gnome',
statModifiers: {
StatType.intelligence: 2,
StatType.str: -1,
},
passives: [],
);
/// Thread Spirit: MP Max 보너스
static const threadSpirit = RaceTraits(
raceId: 'thread_spirit',
name: 'Thread Spirit',
statModifiers: {
StatType.con: -1,
},
passives: [
PassiveAbility(
type: PassiveType.mpBonus,
value: 0.20,
description: 'MP +20%',
),
],
);
/// Loop Wizard: INT + MP Max 보너스
static const loopWizard = RaceTraits(
raceId: 'loop_wizard',
name: 'Loop Wizard',
statModifiers: {
StatType.intelligence: 2,
StatType.str: -1,
StatType.con: -1,
},
passives: [
PassiveAbility(
type: PassiveType.mpBonus,
value: 0.10,
description: 'MP +10%',
),
PassiveAbility(
type: PassiveType.magicDamageBonus,
value: 0.05,
description: '마법 데미지 +5%',
),
],
);
/// Lambda Druid: INT + WIS 보너스
static const lambdaDruid = RaceTraits(
raceId: 'lambda_druid',
name: 'Lambda Druid',
statModifiers: {
StatType.intelligence: 2,
StatType.wis: 2,
StatType.str: -2,
StatType.con: -1,
},
passives: [
PassiveAbility(
type: PassiveType.magicDamageBonus,
value: 0.10,
description: '마법 데미지 +10%',
),
],
);
/// 모든 종족 목록 (21개)
static const List<RaceTraits> all = [
// 기본/HP형
byteHuman,
kernelGiant,
// 지혜형
nullElf,
recursiveSage,
callbackPriest,
// 체력형
bufferDwarf,
coredumpUndead,
// 민첩형
bitHalfling,
cacheImp,
iteratorRogue,
// 힘형
arrayOrc,
flagKnight,
protocolPaladin,
// 복합형
stackGoblin,
heapTroll,
indexRanger,
// 마법형
pointerFairy,
coredumpUndead,
registerGnome,
threadSpirit,
loopWizard,
lambdaDruid,
];
/// ID로 종족 찾기