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

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