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:
JiWoong Sul
2025-12-17 18:21:13 +09:00
parent a6ba3d5d2e
commit bfcec44ac7
5 changed files with 384 additions and 176 deletions

View File

@@ -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',
],
};

View File

@@ -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,

View File

@@ -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'|_____|_____|'],
],