feat(content): Phase 7 콘텐츠 확장
- 몬스터 데이터 65종 추가 (총 369종) - 레벨 54-100 엔드게임 몬스터 - 미니보스 10종, 보스 8종 - 아이템 데이터 확장 (총 440+종) - 무기, 방어구, 방패 고급 아이템 - 주문, 속성, 보링 아이템 추가 - ASCII 애니메이션 카테고리 테마 변경 - beast/insect/humanoid → bug/malware/network - undead/dragon/slime/demon → system/crypto/ai/boss - 테스트 기대값 업데이트 (Phase 7 확장 반영)
This commit is contained in:
@@ -23,6 +23,12 @@ const Map<String, List<String>> pqConfigData = {
|
||||
'Virtualization Mail|20',
|
||||
'Quantum Encryption|25',
|
||||
'Zero-Day Aegis|30',
|
||||
'Blockchain Platemail|35',
|
||||
'Neural Network Mesh|40',
|
||||
'AI Firewall|45',
|
||||
'Quantum Shield Matrix|50',
|
||||
'Singularity Barrier|55',
|
||||
'Multiverse Armor|60',
|
||||
],
|
||||
'BoringItems': [
|
||||
'semicolon',
|
||||
@@ -66,6 +72,31 @@ const Map<String, List<String>> pqConfigData = {
|
||||
'return value',
|
||||
'exit code',
|
||||
'errno',
|
||||
'pid file',
|
||||
'lock file',
|
||||
'temp file',
|
||||
'swap file',
|
||||
'cache entry',
|
||||
'cookie crumb',
|
||||
'session token',
|
||||
'nonce value',
|
||||
'salt grain',
|
||||
'pepper flake',
|
||||
'iv fragment',
|
||||
'padding byte',
|
||||
'magic number',
|
||||
'checksum bit',
|
||||
'parity bit',
|
||||
'stop bit',
|
||||
'start bit',
|
||||
'frame marker',
|
||||
'sync byte',
|
||||
'escape char',
|
||||
'control char',
|
||||
'printable char',
|
||||
'ascii art',
|
||||
'unicode glyph',
|
||||
'emoji fragment',
|
||||
],
|
||||
'DefenseAttrib': [
|
||||
'Patched|+1',
|
||||
@@ -143,6 +174,25 @@ const Map<String, List<String>> pqConfigData = {
|
||||
'Hashed',
|
||||
'Signed',
|
||||
'Verified',
|
||||
'Containerized',
|
||||
'Orchestrated',
|
||||
'Scalable',
|
||||
'Resilient',
|
||||
'Fault-Tolerant',
|
||||
'Self-Healing',
|
||||
'Auto-Scaling',
|
||||
'Load-Balanced',
|
||||
'Cached',
|
||||
'Indexed',
|
||||
'Sharded',
|
||||
'Replicated',
|
||||
'Partitioned',
|
||||
'Compressed',
|
||||
'Encrypted',
|
||||
'Tokenized',
|
||||
'Anonymized',
|
||||
'Sanitized',
|
||||
'Validated',
|
||||
],
|
||||
'ItemOfs': [
|
||||
'Compilation',
|
||||
@@ -194,6 +244,27 @@ const Map<String, List<String>> pqConfigData = {
|
||||
'the Runtime',
|
||||
'the Compiler',
|
||||
'the Kernel',
|
||||
'Microservices',
|
||||
'Serverless',
|
||||
'Edge Computing',
|
||||
'Fog Computing',
|
||||
'Cloud Native',
|
||||
'DevOps',
|
||||
'Site Reliability',
|
||||
'Platform Engineering',
|
||||
'Infrastructure',
|
||||
'Observability',
|
||||
'Telemetry',
|
||||
'Tracing',
|
||||
'Metrics',
|
||||
'Alerting',
|
||||
'Incident Response',
|
||||
'Chaos Engineering',
|
||||
'Resilience',
|
||||
'Availability',
|
||||
'Durability',
|
||||
'Consistency',
|
||||
'Partition Tolerance',
|
||||
],
|
||||
'Klasses': [
|
||||
'Bug Hunter|STR,INT',
|
||||
@@ -553,6 +624,83 @@ const Map<String, List<String>> pqConfigData = {
|
||||
'PwnKit|16|polkit priv',
|
||||
'Sudo Bug|14|privilege escape',
|
||||
'Baron Samedit|13|heap overflow',
|
||||
|
||||
// 레벨 54-65: 고급 시스템 위협 (Advanced System Threats)
|
||||
'Kernel Exploiter|54|privilege token',
|
||||
'Ring -1 Phantom|55|hypervisor breach',
|
||||
'TPM Bypasser|56|trusted module',
|
||||
'Secure Boot Breaker|57|boot chain',
|
||||
'IOMMU Escape|58|memory isolation',
|
||||
'SGX Enclave Bug|59|secure enclave',
|
||||
'TrustZone Breach|60|arm security',
|
||||
'Platform Security Bug|61|firmware key',
|
||||
'Hardware Backdoor|62|silicon implant',
|
||||
'Supply Chain Implant|63|factory malware',
|
||||
'BMC Rootkit|64|baseboard mgmt',
|
||||
'IPMI Ghost|65|remote mgmt',
|
||||
|
||||
// 레벨 66-80: 엔터프라이즈급 위협 (Enterprise Threats)
|
||||
'Active Directory Worm|66|domain token',
|
||||
'Kerberos Golden|67|ticket forgery',
|
||||
'NTLM Relay Beast|68|auth bypass',
|
||||
'DCSync Phantom|69|replication attack',
|
||||
'Exchange Exploit|70|mail server',
|
||||
'SharePoint Bug|71|collab breach',
|
||||
'Teams Vulnerability|72|comm exploit',
|
||||
'Azure AD Breach|73|cloud identity',
|
||||
'AWS IAM Bug|74|cloud permission',
|
||||
'GCP Exploit|75|google cloud',
|
||||
'Kubernetes Escape|76|container breach',
|
||||
'Docker Breakout|77|namespace escape',
|
||||
'Service Mesh Bug|78|istio envoy',
|
||||
'Terraform State Bug|79|infra code',
|
||||
'CI/CD Pipeline Poison|80|build compromise',
|
||||
|
||||
// 레벨 81-90: 엔드게임 몬스터 (Endgame Monsters)
|
||||
'Quantum Decoherence|81|qubit collapse',
|
||||
'Neural Network Poison|82|model corrupt',
|
||||
'AI Hallucination|83|false output',
|
||||
'Deep Fake Engine|84|synthetic media',
|
||||
'Adversarial Noise|85|ml attack',
|
||||
'Model Extraction|86|stolen weights',
|
||||
'Prompt Injection|87|llm exploit',
|
||||
'Training Data Poison|88|dataset corrupt',
|
||||
'Federated Learning Bug|89|distributed ml',
|
||||
'Differential Privacy Leak|90|anonymity breach',
|
||||
|
||||
// 레벨 91-100: 최종 엔드게임 (Final Endgame)
|
||||
'Post-Quantum Threat|91|lattice attack',
|
||||
'Homomorphic Crack|92|encrypted compute',
|
||||
'Zero Knowledge Flaw|93|proof bypass',
|
||||
'Blockchain Fork|94|consensus break',
|
||||
'Smart Contract Bug|95|solidity exploit',
|
||||
'MEV Extractor|96|transaction reorder',
|
||||
'Cross-Chain Bridge Bug|97|bridge exploit',
|
||||
'Oracle Manipulation|98|price feed',
|
||||
'Flash Loan Attack|99|defi exploit',
|
||||
'The Final Bug|100|ultimate error',
|
||||
|
||||
// 미니보스 (Mini Bosses) - 특수 접두사로 구분
|
||||
'Elite Syntax Overlord|25|syntax crown',
|
||||
'Champion Buffer Crusher|30|overflow gem',
|
||||
'Veteran Memory Lord|35|leak artifact',
|
||||
'Master Race Conductor|40|thread scepter',
|
||||
'Arch Kernel Breaker|45|ring zero',
|
||||
'High Protocol Corruptor|50|packet throne',
|
||||
'Grand Firmware Defiler|55|boot artifact',
|
||||
'Supreme Cloud Invader|60|cloud crown',
|
||||
'Legendary Container Escapist|65|namespace key',
|
||||
'Ancient Pipeline Poisoner|70|build shard',
|
||||
|
||||
// 보스 몬스터 (Boss Monsters) - 고유 보스
|
||||
'BOSS: Stack Overflow Dragon|35|legendary stack',
|
||||
'BOSS: Heap Corruption Hydra|45|multi-head leak',
|
||||
'BOSS: Kernel Panic Titan|55|system crash',
|
||||
'BOSS: Zero Day Leviathan|65|unknown vuln',
|
||||
'BOSS: APT Colossus|75|state actor',
|
||||
'BOSS: Ransomware Emperor|85|encrypted realm',
|
||||
'BOSS: AI Singularity|95|machine god',
|
||||
'BOSS: The Primordial Glitch|100|genesis bug',
|
||||
],
|
||||
'OffenseAttrib': [
|
||||
'Compiled|+1',
|
||||
@@ -618,6 +766,13 @@ const Map<String, List<String>> pqConfigData = {
|
||||
'Air Gap Shield|11',
|
||||
'Faraday Shield|12',
|
||||
'Quantum Firewall|18',
|
||||
'Neural Defense Grid|22',
|
||||
'Singularity Absorber|28',
|
||||
'Time Dilation Field|35',
|
||||
'Reality Anchor|42',
|
||||
'Multiverse Barrier|50',
|
||||
'Cosmic Dampener|58',
|
||||
'Entropy Shield|65',
|
||||
],
|
||||
'Specials': [
|
||||
'Algorithm',
|
||||
@@ -702,6 +857,31 @@ const Map<String, List<String>> pqConfigData = {
|
||||
'Deploy',
|
||||
'Scale Up',
|
||||
'Failover',
|
||||
'Containerize',
|
||||
'Orchestrate',
|
||||
'Auto Scale',
|
||||
'Load Balance',
|
||||
'Cache Invalidate',
|
||||
'Async Await',
|
||||
'Promise Resolve',
|
||||
'Thread Pool',
|
||||
'Connection Pool',
|
||||
'Circuit Break',
|
||||
'Rate Limit',
|
||||
'Retry Logic',
|
||||
'Backpressure',
|
||||
'Event Source',
|
||||
'State Machine',
|
||||
'Saga Pattern',
|
||||
'CQRS Split',
|
||||
'Event Store',
|
||||
'Snapshot Restore',
|
||||
'Blue Green Deploy',
|
||||
'Canary Release',
|
||||
'Feature Toggle',
|
||||
'A/B Test',
|
||||
'Chaos Monkey',
|
||||
'Dark Launch',
|
||||
],
|
||||
'Titles': [
|
||||
'Dev',
|
||||
@@ -753,5 +933,16 @@ const Map<String, List<String>> pqConfigData = {
|
||||
'Dyson Sphere Core|11',
|
||||
'Black Hole Computer|12',
|
||||
'Universe Simulator|15',
|
||||
'Dimensional Gateway|20',
|
||||
'Time Loop Device|25',
|
||||
'Reality Compiler|30',
|
||||
'Multiverse Bridge|35',
|
||||
'Cosmic Debugger|40',
|
||||
'Entropy Reverser|45',
|
||||
'Big Bang Trigger|50',
|
||||
'Heat Death Preventer|55',
|
||||
'Infinity Engine|60',
|
||||
'Omniscience Module|65',
|
||||
'God Mode Activator|70',
|
||||
],
|
||||
};
|
||||
|
||||
@@ -67,116 +67,133 @@ AsciiThemeColors getThemeColors(AsciiColorTheme theme, Brightness brightness) {
|
||||
};
|
||||
}
|
||||
|
||||
/// 몬스터 카테고리
|
||||
/// 몬스터 카테고리 (ASCII NEVER DIE 테마)
|
||||
enum MonsterCategory {
|
||||
/// 기본 (고양이 모양)
|
||||
beast,
|
||||
/// 기본 버그 (Syntax Error, Type Mismatch 등)
|
||||
bug,
|
||||
|
||||
/// 곤충/벌레류
|
||||
insect,
|
||||
/// 멀웨어 (Virus, Worm, Trojan 등)
|
||||
malware,
|
||||
|
||||
/// 인간형 (고블린, 오크 등)
|
||||
humanoid,
|
||||
/// 네트워크 위협 (Flood, DDoS, Injection 등)
|
||||
network,
|
||||
|
||||
/// 언데드 (스켈레톤, 좀비)
|
||||
undead,
|
||||
/// 시스템 위협 (Kernel, Memory, Buffer 등)
|
||||
system,
|
||||
|
||||
/// 드래곤/비행 생물
|
||||
dragon,
|
||||
/// 암호화/보안 (Encryption, Hash, Zero-Day 등)
|
||||
crypto,
|
||||
|
||||
/// 슬라임/젤리
|
||||
slime,
|
||||
/// AI/ML 위협 (Neural Network, Machine Learning 등)
|
||||
ai,
|
||||
|
||||
/// 악마/마법 생물
|
||||
demon,
|
||||
/// 보스 몬스터
|
||||
boss,
|
||||
}
|
||||
|
||||
/// 몬스터 이름으로 카테고리 결정
|
||||
/// 몬스터 이름으로 카테고리 결정 (ASCII NEVER DIE 테마)
|
||||
MonsterCategory getMonsterCategory(String? monsterBaseName) {
|
||||
if (monsterBaseName == null || monsterBaseName.isEmpty) {
|
||||
return MonsterCategory.beast;
|
||||
return MonsterCategory.bug;
|
||||
}
|
||||
|
||||
final name = monsterBaseName.toLowerCase();
|
||||
|
||||
// 곤충/벌레류
|
||||
if (name.contains('ant') ||
|
||||
name.contains('centipede') ||
|
||||
name.contains('spider') ||
|
||||
name.contains('beetle') ||
|
||||
name.contains('crawler') ||
|
||||
name.contains('crayfish') ||
|
||||
name.contains('anhkheg')) {
|
||||
return MonsterCategory.insect;
|
||||
// 보스 몬스터
|
||||
if (name.startsWith('boss:') ||
|
||||
name.contains('dragon') ||
|
||||
name.contains('hydra') ||
|
||||
name.contains('titan') ||
|
||||
name.contains('leviathan') ||
|
||||
name.contains('colossus') ||
|
||||
name.contains('emperor') ||
|
||||
name.contains('singularity') ||
|
||||
name.contains('primordial') ||
|
||||
name.contains('glitch god')) {
|
||||
return MonsterCategory.boss;
|
||||
}
|
||||
|
||||
// 인간형
|
||||
if (name.contains('goblin') ||
|
||||
name.contains('orc') ||
|
||||
name.contains('troll') ||
|
||||
name.contains('ogre') ||
|
||||
name.contains('giant') ||
|
||||
name.contains('scout') ||
|
||||
name.contains('bugbear') ||
|
||||
name.contains('gnoll') ||
|
||||
name.contains('kobold') ||
|
||||
name.contains('hobgoblin')) {
|
||||
return MonsterCategory.humanoid;
|
||||
// AI/ML 위협
|
||||
if (name.contains('neural') ||
|
||||
name.contains('ai ') ||
|
||||
name.contains('deep') ||
|
||||
name.contains('model') ||
|
||||
name.contains('adversarial') ||
|
||||
name.contains('training') ||
|
||||
name.contains('federated') ||
|
||||
name.contains('prompt') ||
|
||||
name.contains('hallucination')) {
|
||||
return MonsterCategory.ai;
|
||||
}
|
||||
|
||||
// 언데드
|
||||
if (name.contains('skeleton') ||
|
||||
name.contains('zombie') ||
|
||||
name.contains('ghoul') ||
|
||||
name.contains('ghost') ||
|
||||
name.contains('wight') ||
|
||||
name.contains('wraith') ||
|
||||
name.contains('vampire') ||
|
||||
name.contains('lich') ||
|
||||
name.contains('mummy')) {
|
||||
return MonsterCategory.undead;
|
||||
// 암호화/보안 위협
|
||||
if (name.contains('quantum') ||
|
||||
name.contains('zero day') ||
|
||||
name.contains('zero-day') ||
|
||||
name.contains('crypto') ||
|
||||
name.contains('hash') ||
|
||||
name.contains('blockchain') ||
|
||||
name.contains('homomorphic') ||
|
||||
name.contains('zero knowledge') ||
|
||||
name.contains('smart contract')) {
|
||||
return MonsterCategory.crypto;
|
||||
}
|
||||
|
||||
// 드래곤/비행
|
||||
if (name.contains('dragon') ||
|
||||
name.contains('wyvern') ||
|
||||
name.contains('cockatrice') ||
|
||||
name.contains('griffin') ||
|
||||
name.contains('roc') ||
|
||||
name.contains('harpy') ||
|
||||
name.contains('couatl')) {
|
||||
return MonsterCategory.dragon;
|
||||
// 네트워크 위협
|
||||
if (name.contains('flood') ||
|
||||
name.contains('ddos') ||
|
||||
name.contains('dos') ||
|
||||
name.contains('injection') ||
|
||||
name.contains('sql') ||
|
||||
name.contains('xss') ||
|
||||
name.contains('csrf') ||
|
||||
name.contains('amplification') ||
|
||||
name.contains('tunnel') ||
|
||||
name.contains('shell') ||
|
||||
name.contains('backdoor') ||
|
||||
name.contains('c2') ||
|
||||
name.contains('beacon')) {
|
||||
return MonsterCategory.network;
|
||||
}
|
||||
|
||||
// 슬라임/젤리
|
||||
if (name.contains('slime') ||
|
||||
name.contains('pudding') ||
|
||||
name.contains('ooze') ||
|
||||
name.contains('jelly') ||
|
||||
name.contains('boogie') ||
|
||||
name.contains('blob') ||
|
||||
name.contains('jubilex')) {
|
||||
return MonsterCategory.slime;
|
||||
// 시스템 위협
|
||||
if (name.contains('kernel') ||
|
||||
name.contains('memory') ||
|
||||
name.contains('buffer') ||
|
||||
name.contains('stack') ||
|
||||
name.contains('heap') ||
|
||||
name.contains('overflow') ||
|
||||
name.contains('corruption') ||
|
||||
name.contains('segfault') ||
|
||||
name.contains('panic') ||
|
||||
name.contains('rootkit') ||
|
||||
name.contains('firmware') ||
|
||||
name.contains('bootkit')) {
|
||||
return MonsterCategory.system;
|
||||
}
|
||||
|
||||
// 악마/마법 생물
|
||||
if (name.contains('demon') ||
|
||||
name.contains('devil') ||
|
||||
name.contains('succubus') ||
|
||||
name.contains('beholder') ||
|
||||
name.contains('demogorgon') ||
|
||||
name.contains('orcus') ||
|
||||
name.contains('vrock') ||
|
||||
name.contains('hezrou') ||
|
||||
name.contains('glabrezu')) {
|
||||
return MonsterCategory.demon;
|
||||
// 멀웨어
|
||||
if (name.contains('virus') ||
|
||||
name.contains('worm') ||
|
||||
name.contains('trojan') ||
|
||||
name.contains('ransomware') ||
|
||||
name.contains('malware') ||
|
||||
name.contains('botnet') ||
|
||||
name.contains('cryptominer') ||
|
||||
name.contains('keylogger') ||
|
||||
name.contains('spyware') ||
|
||||
name.contains('dropper') ||
|
||||
name.contains('loader') ||
|
||||
name.contains('payload')) {
|
||||
return MonsterCategory.malware;
|
||||
}
|
||||
|
||||
return MonsterCategory.beast;
|
||||
// 기본: 버그
|
||||
return MonsterCategory.bug;
|
||||
}
|
||||
|
||||
/// 기본 전투 애니메이션 (beast - 고양이 모양, 심플 3줄)
|
||||
const battleAnimationBeast = AsciiAnimationData(
|
||||
/// 버그 전투 애니메이션 (기본 버그 모양)
|
||||
const battleAnimationBug = AsciiAnimationData(
|
||||
frames: [
|
||||
// 프레임 1: 대치
|
||||
'''
|
||||
@@ -312,8 +329,8 @@ const walkingAnimation = AsciiAnimationData(
|
||||
frameIntervalMs: 180,
|
||||
);
|
||||
|
||||
/// 곤충 전투 애니메이션 (심플 3줄)
|
||||
const battleAnimationInsect = AsciiAnimationData(
|
||||
/// 멀웨어 전투 애니메이션 (바이러스 모양)
|
||||
const battleAnimationMalware = AsciiAnimationData(
|
||||
frames: [
|
||||
// 프레임 1: 대치
|
||||
'''
|
||||
@@ -344,8 +361,8 @@ const battleAnimationInsect = AsciiAnimationData(
|
||||
frameIntervalMs: 220,
|
||||
);
|
||||
|
||||
/// 인간형 전투 애니메이션 (심플 3줄)
|
||||
const battleAnimationHumanoid = AsciiAnimationData(
|
||||
/// 네트워크 전투 애니메이션 (패킷 모양)
|
||||
const battleAnimationNetwork = AsciiAnimationData(
|
||||
frames: [
|
||||
// 프레임 1: 대치
|
||||
'''
|
||||
@@ -376,8 +393,8 @@ const battleAnimationHumanoid = AsciiAnimationData(
|
||||
frameIntervalMs: 220,
|
||||
);
|
||||
|
||||
/// 언데드 전투 애니메이션 (심플 3줄)
|
||||
const battleAnimationUndead = AsciiAnimationData(
|
||||
/// 시스템 전투 애니메이션 (커널 모양)
|
||||
const battleAnimationSystem = AsciiAnimationData(
|
||||
frames: [
|
||||
// 프레임 1: 대치
|
||||
'''
|
||||
@@ -408,8 +425,8 @@ const battleAnimationUndead = AsciiAnimationData(
|
||||
frameIntervalMs: 250,
|
||||
);
|
||||
|
||||
/// 드래곤 전투 애니메이션 (심플 3줄)
|
||||
const battleAnimationDragon = AsciiAnimationData(
|
||||
/// 암호화 전투 애니메이션 (자물쇠 모양)
|
||||
const battleAnimationCrypto = AsciiAnimationData(
|
||||
frames: [
|
||||
// 프레임 1: 대치
|
||||
'''
|
||||
@@ -440,8 +457,8 @@ const battleAnimationDragon = AsciiAnimationData(
|
||||
frameIntervalMs: 200,
|
||||
);
|
||||
|
||||
/// 슬라임 전투 애니메이션 (심플 3줄)
|
||||
const battleAnimationSlime = AsciiAnimationData(
|
||||
/// AI 전투 애니메이션 (뉴럴넷 모양)
|
||||
const battleAnimationAI = AsciiAnimationData(
|
||||
frames: [
|
||||
// 프레임 1: 대치
|
||||
'''
|
||||
@@ -472,8 +489,8 @@ const battleAnimationSlime = AsciiAnimationData(
|
||||
frameIntervalMs: 280,
|
||||
);
|
||||
|
||||
/// 악마 전투 애니메이션 (심플 3줄)
|
||||
const battleAnimationDemon = AsciiAnimationData(
|
||||
/// 보스 전투 애니메이션 (드래곤/보스 모양)
|
||||
const battleAnimationBoss = AsciiAnimationData(
|
||||
frames: [
|
||||
// 프레임 1: 대치
|
||||
'''
|
||||
@@ -507,13 +524,13 @@ const battleAnimationDemon = AsciiAnimationData(
|
||||
/// 몬스터 카테고리별 전투 애니메이션 반환
|
||||
AsciiAnimationData getBattleAnimation(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => battleAnimationBeast,
|
||||
MonsterCategory.insect => battleAnimationInsect,
|
||||
MonsterCategory.humanoid => battleAnimationHumanoid,
|
||||
MonsterCategory.undead => battleAnimationUndead,
|
||||
MonsterCategory.dragon => battleAnimationDragon,
|
||||
MonsterCategory.slime => battleAnimationSlime,
|
||||
MonsterCategory.demon => battleAnimationDemon,
|
||||
MonsterCategory.bug => battleAnimationBug,
|
||||
MonsterCategory.malware => battleAnimationMalware,
|
||||
MonsterCategory.network => battleAnimationNetwork,
|
||||
MonsterCategory.system => battleAnimationSystem,
|
||||
MonsterCategory.crypto => battleAnimationCrypto,
|
||||
MonsterCategory.ai => battleAnimationAI,
|
||||
MonsterCategory.boss => battleAnimationBoss,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -676,10 +693,10 @@ const actCompleteAnimation = AsciiAnimationData(
|
||||
frameIntervalMs: 400,
|
||||
);
|
||||
|
||||
/// 타입별 애니메이션 데이터 반환 (기본 전투는 beast)
|
||||
/// 타입별 애니메이션 데이터 반환 (기본 전투는 bug)
|
||||
AsciiAnimationData getAnimationData(AsciiAnimationType type) {
|
||||
return switch (type) {
|
||||
AsciiAnimationType.battle => battleAnimationBeast,
|
||||
AsciiAnimationType.battle => battleAnimationBug,
|
||||
AsciiAnimationType.town => townAnimation,
|
||||
AsciiAnimationType.walking => walkingAnimation,
|
||||
AsciiAnimationType.levelUp => levelUpAnimation,
|
||||
|
||||
@@ -338,31 +338,31 @@ List<List<String>> _getMonsterAlertFrames(MonsterCategory category, MonsterSize
|
||||
|
||||
List<List<String>> _tinyIdleFrames(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => [
|
||||
MonsterCategory.bug => [
|
||||
[r'*', r'/\'],
|
||||
[r'o', r'\/'],
|
||||
],
|
||||
MonsterCategory.insect => [
|
||||
MonsterCategory.malware => [
|
||||
[r'><', r'\/'],
|
||||
[r'<>', r'/\'],
|
||||
],
|
||||
MonsterCategory.humanoid => [
|
||||
MonsterCategory.network => [
|
||||
[r'o', r'|'],
|
||||
[r'O', r'|'],
|
||||
],
|
||||
MonsterCategory.undead => [
|
||||
MonsterCategory.system => [
|
||||
[r'+', r'|'],
|
||||
[r'x', r'|'],
|
||||
],
|
||||
MonsterCategory.dragon => [
|
||||
MonsterCategory.crypto => [
|
||||
[r'~<', r'>>'],
|
||||
[r'<~', r'<<'],
|
||||
],
|
||||
MonsterCategory.slime => [
|
||||
MonsterCategory.ai => [
|
||||
[r'()', r''],
|
||||
[r'{}', r''],
|
||||
],
|
||||
MonsterCategory.demon => [
|
||||
MonsterCategory.boss => [
|
||||
[r'^v', r'\/'],
|
||||
[r'v^', r'/\'],
|
||||
],
|
||||
@@ -378,31 +378,31 @@ List<List<String>> _tinyHitFrames(MonsterCategory category) {
|
||||
|
||||
List<List<String>> _tinyAlertFrames(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => [
|
||||
MonsterCategory.bug => [
|
||||
[r'!!', r'/\'],
|
||||
[r'OO', r'><'],
|
||||
],
|
||||
MonsterCategory.insect => [
|
||||
MonsterCategory.malware => [
|
||||
[r'!!', r'\/'],
|
||||
[r'@@', r'/\'],
|
||||
],
|
||||
MonsterCategory.humanoid => [
|
||||
MonsterCategory.network => [
|
||||
[r'O!', r'|'],
|
||||
[r'!O', r'X'],
|
||||
],
|
||||
MonsterCategory.undead => [
|
||||
MonsterCategory.system => [
|
||||
[r'!!', r'X'],
|
||||
[r'@@', r'|'],
|
||||
],
|
||||
MonsterCategory.dragon => [
|
||||
MonsterCategory.crypto => [
|
||||
[r'!<', r'>>'],
|
||||
[r'>!', r'<<'],
|
||||
],
|
||||
MonsterCategory.slime => [
|
||||
MonsterCategory.ai => [
|
||||
[r'(!)', r''],
|
||||
[r'{!}', r''],
|
||||
],
|
||||
MonsterCategory.demon => [
|
||||
MonsterCategory.boss => [
|
||||
[r'^!', r'><'],
|
||||
[r'!^', r'<>'],
|
||||
],
|
||||
@@ -415,31 +415,31 @@ List<List<String>> _tinyAlertFrames(MonsterCategory category) {
|
||||
|
||||
List<List<String>> _smallIdleFrames(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => [
|
||||
MonsterCategory.bug => [
|
||||
[r' /\_/\', r'( o.o )', r' > ^ <', r' /| |\'],
|
||||
[r' /\_/\', r'( o o )', r' > v <', r' \| |/'],
|
||||
],
|
||||
MonsterCategory.insect => [
|
||||
MonsterCategory.malware => [
|
||||
[r' /\/\', r' (O O)', r' / \', r' \/ \/'],
|
||||
[r' \/\/\', r' (O O)', r' \ /', r' /\ /\'],
|
||||
],
|
||||
MonsterCategory.humanoid => [
|
||||
MonsterCategory.network => [
|
||||
[r' O', r' /|\', r' / \', r' _| |_'],
|
||||
[r' O', r' \|/', r' | |', r' _/ \_'],
|
||||
],
|
||||
MonsterCategory.undead => [
|
||||
MonsterCategory.system => [
|
||||
[r' _+_', r' (x_x)', r' /|\', r' _/ \_'],
|
||||
[r' _+_', r' (X_X)', r' \|/', r' _| |_'],
|
||||
],
|
||||
MonsterCategory.dragon => [
|
||||
MonsterCategory.crypto => [
|
||||
[r' __', r' <(oo)~', r' / \', r' <_ _>'],
|
||||
[r' __', r' (oo)>', r' \ /', r' <_ _>'],
|
||||
],
|
||||
MonsterCategory.slime => [
|
||||
MonsterCategory.ai => [
|
||||
[r' ___', r' ( )', r' ( )', r' \_/'],
|
||||
[r' _', r' / \', r' { }', r' \_/'],
|
||||
],
|
||||
MonsterCategory.demon => [
|
||||
MonsterCategory.boss => [
|
||||
[r' ^w^', r' (|o|)', r' /|\', r' V V'],
|
||||
[r' ^W^', r' (|O|)', r' \|/', r' v v'],
|
||||
],
|
||||
@@ -455,31 +455,31 @@ List<List<String>> _smallHitFrames(MonsterCategory category) {
|
||||
|
||||
List<List<String>> _smallAlertFrames(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => [
|
||||
MonsterCategory.bug => [
|
||||
[r' /\_/\', r'( O!O )', r' > ! <', r' /| |\'],
|
||||
[r' /\_/\', r'( !O! )', r' > ! <', r' \| |/'],
|
||||
],
|
||||
MonsterCategory.insect => [
|
||||
MonsterCategory.malware => [
|
||||
[r' /\/\', r' (! !)', r' / \', r' \/ \/'],
|
||||
[r' \/\/\', r' (! !)', r' \ /', r' /\ /\'],
|
||||
],
|
||||
MonsterCategory.humanoid => [
|
||||
MonsterCategory.network => [
|
||||
[r' O!', r' /|\', r' / \', r' _| |_'],
|
||||
[r' !O', r' \|/', r' | |', r' _/ \_'],
|
||||
],
|
||||
MonsterCategory.undead => [
|
||||
MonsterCategory.system => [
|
||||
[r' _!_', r' (!_!)', r' /|\', r' _/ \_'],
|
||||
[r' _!_', r' (!_!)', r' \|/', r' _| |_'],
|
||||
],
|
||||
MonsterCategory.dragon => [
|
||||
MonsterCategory.crypto => [
|
||||
[r' __', r' <(!!)~', r' / \', r' <_ _>'],
|
||||
[r' __', r' (!!)>', r' \ /', r' <_ _>'],
|
||||
],
|
||||
MonsterCategory.slime => [
|
||||
MonsterCategory.ai => [
|
||||
[r' ___', r' ( ! )', r' ( ! )', r' \_/'],
|
||||
[r' _', r' /!\', r' { ! }', r' \_/'],
|
||||
],
|
||||
MonsterCategory.demon => [
|
||||
MonsterCategory.boss => [
|
||||
[r' ^!^', r' (|!|)', r' /|\', r' V V'],
|
||||
[r' ^!^', r' (|!|)', r' \|/', r' v v'],
|
||||
],
|
||||
@@ -492,31 +492,31 @@ List<List<String>> _smallAlertFrames(MonsterCategory category) {
|
||||
|
||||
List<List<String>> _mediumIdleFrames(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => [
|
||||
MonsterCategory.bug => [
|
||||
[r' /\_/\', r' ( O.O )', r' > ^ <', r' /| |\', r' | | | |', r'_|_| |_|_'],
|
||||
[r' /\_/\', r' ( O O )', r' > v <', r' \| |/', r' | | | |', r'_|_| |_|_'],
|
||||
],
|
||||
MonsterCategory.insect => [
|
||||
MonsterCategory.malware => [
|
||||
[r' /\/\', r' /O O\', r' \ /', r' / \', r' \/ \/', r' _/ \_'],
|
||||
[r' \/\/\', r' \O O/', r' / \', r' \ /', r' /\ /\', r' _\ /_'],
|
||||
],
|
||||
MonsterCategory.humanoid => [
|
||||
MonsterCategory.network => [
|
||||
[r' O', r' /|\', r' / \', r' | |', r' | |', r' _| |_'],
|
||||
[r' O', r' \|/', r' | |', r' | |', r' | |', r' _/ \_'],
|
||||
],
|
||||
MonsterCategory.undead => [
|
||||
MonsterCategory.system => [
|
||||
[r' _+_', r' (X_X)', r' /|\', r' / | \', r' | | |', r'_/ | \_'],
|
||||
[r' _x_', r' (x_x)', r' \|/', r' \ | /', r' | | |', r'_\ | /_'],
|
||||
],
|
||||
MonsterCategory.dragon => [
|
||||
MonsterCategory.crypto => [
|
||||
[r' __', r' <(OO)~', r' / \', r' / \', r' | |', r'<__ __>'],
|
||||
[r' __', r' (OO)>', r' \ /', r' \ /', r' | |', r'<__ __>'],
|
||||
],
|
||||
MonsterCategory.slime => [
|
||||
MonsterCategory.ai => [
|
||||
[r' ____', r' / \', r' ( )', r' ( )', r' \ /', r' \__/'],
|
||||
[r' __', r' / \', r' / \', r' { }', r' \ /', r' \__/'],
|
||||
],
|
||||
MonsterCategory.demon => [
|
||||
MonsterCategory.boss => [
|
||||
[r' ^W^', r' (|O|)', r' /|\', r' / | \', r' V V', r' _/ \_'],
|
||||
[r' ^w^', r' (|o|)', r' \|/', r' \ | /', r' v v', r' _\ /_'],
|
||||
],
|
||||
@@ -532,31 +532,31 @@ List<List<String>> _mediumHitFrames(MonsterCategory category) {
|
||||
|
||||
List<List<String>> _mediumAlertFrames(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => [
|
||||
MonsterCategory.bug => [
|
||||
[r' /\_/\', r' ( O!O )', r' > ! <', r' /| |\', r' | | | |', r'_|_| |_|_'],
|
||||
[r' /\_/\', r' ( !O! )', r' > ! <', r' \| |/', r' | | | |', r'_|_| |_|_'],
|
||||
],
|
||||
MonsterCategory.insect => [
|
||||
MonsterCategory.malware => [
|
||||
[r' /\/\', r' /! !\', r' \ /', r' / \', r' \/ \/', r' _/ \_'],
|
||||
[r' \/\/\', r' \! !/', r' / \', r' \ /', r' /\ /\', r' _\ /_'],
|
||||
],
|
||||
MonsterCategory.humanoid => [
|
||||
MonsterCategory.network => [
|
||||
[r' O!', r' /|\', r' / \', r' | |', r' | |', r' _| |_'],
|
||||
[r' !O', r' \|/', r' | |', r' | |', r' | |', r' _/ \_'],
|
||||
],
|
||||
MonsterCategory.undead => [
|
||||
MonsterCategory.system => [
|
||||
[r' _!_', r' (!_!)', r' /|\', r' / | \', r' | | |', r'_/ | \_'],
|
||||
[r' _!_', r' (!_!)', r' \|/', r' \ | /', r' | | |', r'_\ | /_'],
|
||||
],
|
||||
MonsterCategory.dragon => [
|
||||
MonsterCategory.crypto => [
|
||||
[r' __', r' <(!!)~', r' / \', r' / \', r' | |', r'<__ __>'],
|
||||
[r' __', r' (!!)>', r' \ /', r' \ /', r' | |', r'<__ __>'],
|
||||
],
|
||||
MonsterCategory.slime => [
|
||||
MonsterCategory.ai => [
|
||||
[r' ____', r' / ! \', r' ( ! )', r' ( ! )', r' \ /', r' \__/'],
|
||||
[r' __', r' / !\', r' / ! \', r' { ! }', r' \ /', r' \__/'],
|
||||
],
|
||||
MonsterCategory.demon => [
|
||||
MonsterCategory.boss => [
|
||||
[r' ^!^', r' (|!|)', r' /|\', r' / | \', r' V V', r' _/ \_'],
|
||||
[r' ^!^', r' (|!|)', r' \|/', r' \ | /', r' v v', r' _\ /_'],
|
||||
],
|
||||
@@ -569,31 +569,31 @@ List<List<String>> _mediumAlertFrames(MonsterCategory category) {
|
||||
|
||||
List<List<String>> _largeIdleFrames(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => [
|
||||
MonsterCategory.bug => [
|
||||
[r' /\__/\', r' ( O O )', r' > ^^ <', r' /| |\', r' | | | |', r' | | | |', r'_| | | |_', r'|__|____|__|'],
|
||||
[r' /\__/\', r' ( O O )', r' > vv <', r' \| |/', r' | | | |', r' | | | |', r'_| | | |_', r'|__|____|__|'],
|
||||
],
|
||||
MonsterCategory.insect => [
|
||||
MonsterCategory.malware => [
|
||||
[r' /\/\/\', r' /O O\', r' \ /', r' / \', r' \/ \/', r' | \ / |', r' _| \/ |_', r'|___________|'],
|
||||
[r' \/\/\/\', r' \O O/', r' / \', r' \ /', r' /\ /\', r' | / \ |', r' _| /\ |_', r'|___________|'],
|
||||
],
|
||||
MonsterCategory.humanoid => [
|
||||
MonsterCategory.network => [
|
||||
[r' O', r' /|\', r' / \', r' | |', r' | |', r' | |', r' _| |_', r'|_________|'],
|
||||
[r' O', r' \|/', r' | |', r' | |', r' | |', r' | |', r' _/ \_', r'|_________|'],
|
||||
],
|
||||
MonsterCategory.undead => [
|
||||
MonsterCategory.system => [
|
||||
[r' _/+\_', r' (X___X)', r' /|||\', r' / ||| \', r' | ||| |', r' | / \ |', r' _|/ \|_', r'|_/ \_|'],
|
||||
[r' _\+/_', r' (x___x)', r' \|||/', r' \ ||| /', r' | ||| |', r' | \ / |', r' _|\ /|_', r'|_\ /_|'],
|
||||
],
|
||||
MonsterCategory.dragon => [
|
||||
MonsterCategory.crypto => [
|
||||
[r' ___', r' <<(O O)~~', r' / || \', r' / || \', r' | || |', r' | || |', r' _| || |_', r'<___________|>'],
|
||||
[r' ___', r' (O O)>>', r' \ || /', r' \ || /', r' | || |', r' | || |', r' _| || |_', r'<___________|>'],
|
||||
],
|
||||
MonsterCategory.slime => [
|
||||
MonsterCategory.ai => [
|
||||
[r' _____', r' / \', r' / \', r' ( )', r' ( )', r' \ /', r' \_____/', r' \___/'],
|
||||
[r' ___', r' / \', r' / \', r' { }', r' { }', r' \ /', r' \___/', r' \_/'],
|
||||
],
|
||||
MonsterCategory.demon => [
|
||||
MonsterCategory.boss => [
|
||||
[r' ^W^', r' /|O|\', r' /|\', r' / | \', r' | | |', r' V | V', r' _/ | \_', r'|____|____|'],
|
||||
[r' ^w^', r' \|o|/', r' \|/', r' \ | /', r' | | |', r' v | v', r' _\ | /_', r'|____|____|'],
|
||||
],
|
||||
@@ -609,31 +609,31 @@ List<List<String>> _largeHitFrames(MonsterCategory category) {
|
||||
|
||||
List<List<String>> _largeAlertFrames(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => [
|
||||
MonsterCategory.bug => [
|
||||
[r' /\__/\', r' ( O!!O )', r' > !! <', r' /| |\', r' | | | |', r' | | | |', r'_| | | |_', r'|__|____|__|'],
|
||||
[r' /\__/\', r' ( !!O! )', r' > !! <', r' \| |/', r' | | | |', r' | | | |', r'_| | | |_', r'|__|____|__|'],
|
||||
],
|
||||
MonsterCategory.insect => [
|
||||
MonsterCategory.malware => [
|
||||
[r' /\/\/\', r' /! !\', r' \ /', r' / \', r' \/ \/', r' | \ / |', r' _| \/ |_', r'|___________|'],
|
||||
[r' \/\/\/\', r' \! !/', r' / \', r' \ /', r' /\ /\', r' | / \ |', r' _| /\ |_', r'|___________|'],
|
||||
],
|
||||
MonsterCategory.humanoid => [
|
||||
MonsterCategory.network => [
|
||||
[r' O!', r' /|\', r' / \', r' | |', r' | |', r' | |', r' _| |_', r'|_________|'],
|
||||
[r' !O', r' \|/', r' | |', r' | |', r' | |', r' | |', r' _/ \_', r'|_________|'],
|
||||
],
|
||||
MonsterCategory.undead => [
|
||||
MonsterCategory.system => [
|
||||
[r' _/!\_', r' (!___!)', r' /|||\', r' / ||| \', r' | ||| |', r' | / \ |', r' _|/ \|_', r'|_/ \_|'],
|
||||
[r' _\!/_', r' (!___!)', r' \|||/', r' \ ||| /', r' | ||| |', r' | \ / |', r' _|\ /|_', r'|_\ /_|'],
|
||||
],
|
||||
MonsterCategory.dragon => [
|
||||
MonsterCategory.crypto => [
|
||||
[r' ___', r' <<(! !)~~', r' / || \', r' / || \', r' | || |', r' | || |', r' _| || |_', r'<___________|>'],
|
||||
[r' ___', r' (! !)>>', r' \ || /', r' \ || /', r' | || |', r' | || |', r' _| || |_', r'<___________|>'],
|
||||
],
|
||||
MonsterCategory.slime => [
|
||||
MonsterCategory.ai => [
|
||||
[r' _____', r' / ! \', r' / ! \', r' ( ! )', r' ( ! )', r' \ /', r' \_____/', r' \___/'],
|
||||
[r' ___', r' / ! \', r' / ! \', r' { ! }', r' { ! }', r' \ /', r' \___/', r' \_/'],
|
||||
],
|
||||
MonsterCategory.demon => [
|
||||
MonsterCategory.boss => [
|
||||
[r' ^!^', r' /|!|\', r' /|\', r' / | \', r' | | |', r' V | V', r' _/ | \_', r'|____|____|'],
|
||||
[r' ^!^', r' \|!|/', r' \|/', r' \ | /', r' | | |', r' v | v', r' _\ | /_', r'|____|____|'],
|
||||
],
|
||||
@@ -646,31 +646,31 @@ List<List<String>> _largeAlertFrames(MonsterCategory category) {
|
||||
|
||||
List<List<String>> _hugeIdleFrames(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => [
|
||||
MonsterCategory.bug => [
|
||||
[r' /\____/\', r' ( O O )', r' > ^^^^ <', r' /| |\', r' | | | |', r' | | | |', r' _| | | |_', r'|___|______|___|'],
|
||||
[r' /\____/\', r' ( O O )', r' > vvvv <', r' \| |/', r' | | | |', r' | | | |', r' _| | | |_', r'|___|______|___|'],
|
||||
],
|
||||
MonsterCategory.insect => [
|
||||
MonsterCategory.malware => [
|
||||
[r' /\/\/\/\', r' /O O\', r' \ /', r' / \', r' \/ \/', r' | \ / |', r' _| \ / |_', r'|_______________|'],
|
||||
[r' \/\/\/\/\', r' \O O/', r' / \', r' \ /', r' /\ /\', r' | / \ |', r' _| / \ |_', r'|_______________|'],
|
||||
],
|
||||
MonsterCategory.humanoid => [
|
||||
MonsterCategory.network => [
|
||||
[r' O', r' _/|\\_', r' / | \\', r' | |', r' | |', r' | |', r' _| |_', r'|___________|'],
|
||||
[r' O', r' \\_|_/', r' \\|/', r' | |', r' | |', r' | |', r' _/ \\_', r'|___________|'],
|
||||
],
|
||||
MonsterCategory.undead => [
|
||||
MonsterCategory.system => [
|
||||
[r' _/+\\_', r' (X_____X)', r' /|||||\', r' / ||||| \\', r' | ||||| |', r' | / \\ |', r' _|/ \\|_', r'|_/ \\_|'],
|
||||
[r' _\\+/_', r' (x_____x)', r' \\|||||/', r' \\ ||||| /', r' | ||||| |', r' | \\ / |', r' _|\\ /|_', r'|_\\ /_|'],
|
||||
],
|
||||
MonsterCategory.dragon => [
|
||||
MonsterCategory.crypto => [
|
||||
[r' ____', r' <<<(O O)~~~', r' / |||| \\', r' / |||| \\', r' | |||| |', r' | |||| |', r' _| |||| |_', r'<_______________|>'],
|
||||
[r' ____', r' (O O)>>>', r' \\ |||| /', r' \\ |||| /', r' | |||| |', r' | |||| |', r' _| |||| |_', r'<_______________|>'],
|
||||
],
|
||||
MonsterCategory.slime => [
|
||||
MonsterCategory.ai => [
|
||||
[r' ______', r' / \\', r' / \\', r' ( )', r' ( )', r' \\ /', r' \\______/', r' \\____/'],
|
||||
[r' ____', r' / \\', r' / \\', r' { }', r' { }', r' \\ /', r' \\____/', r' \\__/'],
|
||||
],
|
||||
MonsterCategory.demon => [
|
||||
MonsterCategory.boss => [
|
||||
[r' ^W^', r' /|O|\\ ', r' /|\\', r' / | \\', r' | | |', r' V | V', r' _/ | \\_', r'|_____|_____|'],
|
||||
[r' ^w^', r' \\|o|/', r' \\|/', r' \\ | /', r' | | |', r' v | v', r' _\\ | /_', r'|_____|_____|'],
|
||||
],
|
||||
@@ -686,31 +686,31 @@ List<List<String>> _hugeHitFrames(MonsterCategory category) {
|
||||
|
||||
List<List<String>> _hugeAlertFrames(MonsterCategory category) {
|
||||
return switch (category) {
|
||||
MonsterCategory.beast => [
|
||||
MonsterCategory.bug => [
|
||||
[r' /\____/\', r' ( ! ! )', r' > !!!! <', r' /| |\', r' | | | |', r' | | | |', r' _| | | |_', r'|___|______|___|'],
|
||||
[r' /\____/\', r' ( ! ! )', r' > !!!! <', r' \| |/', r' | | | |', r' | | | |', r' _| | | |_', r'|___|______|___|'],
|
||||
],
|
||||
MonsterCategory.insect => [
|
||||
MonsterCategory.malware => [
|
||||
[r' /\/\/\/\', r' /! !\', r' \ /', r' / \', r' \/ \/', r' | \ / |', r' _| \ / |_', r'|_______________|'],
|
||||
[r' \/\/\/\/\', r' \! !/', r' / \', r' \ /', r' /\ /\', r' | / \ |', r' _| / \ |_', r'|_______________|'],
|
||||
],
|
||||
MonsterCategory.humanoid => [
|
||||
MonsterCategory.network => [
|
||||
[r' O!', r' _/|\\__', r' / | \\', r' | |', r' | |', r' | |', r' _| |_', r'|___________|'],
|
||||
[r' !O', r' \\_|_/', r' \\|/', r' | |', r' | |', r' | |', r' _/ \\_', r'|___________|'],
|
||||
],
|
||||
MonsterCategory.undead => [
|
||||
MonsterCategory.system => [
|
||||
[r' _/!\\__', r' (!_____!)', r' /|||||\', r' / ||||| \\', r' | ||||| |', r' | / \\ |', r' _|/ \\|_', r'|_/ \\_|'],
|
||||
[r' _\\!/_', r' (!_____!)', r' \\|||||/', r' \\ ||||| /', r' | ||||| |', r' | \\ / |', r' _|\\ /|_', r'|_\\ /_|'],
|
||||
],
|
||||
MonsterCategory.dragon => [
|
||||
MonsterCategory.crypto => [
|
||||
[r' ____', r' <<<(! !)~~~', r' / |||| \\', r' / |||| \\', r' | |||| |', r' | |||| |', r' _| |||| |_', r'<_______________|>'],
|
||||
[r' ____', r' (! !)>>>', r' \\ |||| /', r' \\ |||| /', r' | |||| |', r' | |||| |', r' _| |||| |_', r'<_______________|>'],
|
||||
],
|
||||
MonsterCategory.slime => [
|
||||
MonsterCategory.ai => [
|
||||
[r' ______', r' / ! \\', r' / ! \\', r' ( ! )', r' ( ! )', r' \\ /', r' \\______/', r' \\____/'],
|
||||
[r' ____', r' / ! \\', r' / ! \\', r' { ! }', r' { ! }', r' \\ /', r' \\____/', r' \\__/'],
|
||||
],
|
||||
MonsterCategory.demon => [
|
||||
MonsterCategory.boss => [
|
||||
[r' ^!^', r' /|!|\\ ', r' /|\\', r' / | \\', r' | | |', r' V | V', r' _/ | \\_', r'|_____|_____|'],
|
||||
[r' ^!^', r' \\|!|/', r' \\|/', r' \\ | /', r' | | |', r' v | v', r' _\\ | /_', r'|_____|_____|'],
|
||||
],
|
||||
|
||||
@@ -108,9 +108,9 @@ void main() {
|
||||
});
|
||||
|
||||
test('completeQuest and completeAct return deterministic results', () {
|
||||
// 아스키나라(ASCII-Nara) 세계관 데이터로 업데이트
|
||||
// 아스키나라(ASCII-Nara) 세계관 데이터로 업데이트 (Phase 7 확장 반영)
|
||||
final quest = pq_logic.completeQuest(config, DeterministicRandom(33), 4);
|
||||
expect(quest.caption, 'Transfer this stack trace');
|
||||
expect(quest.caption, 'Transfer this session token');
|
||||
expect(quest.reward, pq_logic.RewardKind.item);
|
||||
expect(quest.monsterName, isNull);
|
||||
|
||||
|
||||
@@ -328,8 +328,8 @@ void main() {
|
||||
});
|
||||
|
||||
test('monsters list matches ASCII-Nara count', () {
|
||||
// 아스키나라(ASCII-Nara) 세계관 몬스터 개수: 304
|
||||
expect(config.monsters.length, 304);
|
||||
// Phase 7 확장 후 몬스터 개수: 369
|
||||
expect(config.monsters.length, 369);
|
||||
});
|
||||
|
||||
test('spells list is not empty', () {
|
||||
|
||||
Reference in New Issue
Block a user