feat(animation): 레이어 투명도 및 이펙트 5줄 확장

- AsciiLayer에 opacity 필드 추가
- AsciiCanvasPainter에서 레이어 투명도 렌더링 지원
- 배경 레이어 50% 투명으로 캐릭터 부각
- 모든 무기 이펙트 3줄→5줄로 확장
- 몬스터 공격 이펙트 5줄로 확장
This commit is contained in:
JiWoong Sul
2025-12-27 21:58:45 +09:00
parent 5fa58695ec
commit bfeb58ff29
5 changed files with 83 additions and 72 deletions

View File

@@ -47,95 +47,95 @@ WeaponEffect getWeaponEffect(WeaponCategory category) {
}
// ============================================================================
// 둔기류 - 휘두르기 (3줄)
// 둔기류 - 휘두르기 (5줄)
// ============================================================================
const _bluntEffect = WeaponEffect(
prepareFrames: [
[r' _', r' /', r' /'],
[r' _/', r' / ', r' / '],
[r' ', r' _ ', r' / ', r' / ', r' / '],
[r' ', r' _/ ', r' / ', r' / ', r' / '],
],
attackFrames: [
[r' _/ ', r' / ', r'/ '],
[r' /__ ', r'/ ', r' '],
[r'/__ ', r' ', r' '],
[r'/__=>', r' ', r' '],
[r' ', r' _/ ', r' / ', r' / ', r' / '],
[r' ', r' _/ ', r' / ', r' /________', r'/ '],
[r' ', r' _/ ', r' /________', r'/ ', r' '],
[r' ', r' _/____=> ', r'/ ', r' ', r' '],
],
hitFrames: [
[r' *BASH* ', r'/__=> ', r' '],
[r'*SMASH!*', r' /__ ', r' '],
[r' *BASH* ', r' _/____=> ', r'/ ** ', r' ** ', r' '],
[r' *SMASH!* ', r' _/____ ', r' / ** ', r' ** ', r' '],
],
hitSound: '*BASH*',
effectHeight: 3,
effectYStart: 2,
effectHeight: 5,
effectYStart: 1,
);
// ============================================================================
// 케이블류 - 채찍질 (3줄)
// 케이블류 - 채찍질 (5줄)
// ============================================================================
const _cableEffect = WeaponEffect(
prepareFrames: [
[r' ', r'~ ', r' ~ '],
[r' ', r'~~ ', r' ~ '],
[r' ', r'~ ', r' ~ ', r' ~ ', r' ~ '],
[r' ', r'~~ ', r' ~~ ', r' ~ ', r' ~ '],
],
attackFrames: [
[r' ', r'~~~ ', r' ~~ '],
[r' ', r'~~~~ ', r' ~~ '],
[r' ', r'~~~~~> ', r' ~~ '],
[r' ', r'~~~~~~> ', r' ~~'],
[r' ', r'~~~ ', r' ~~~ ', r' ~~ ', r' ~ '],
[r' ', r'~~~~ ', r' ~~~~ ', r' ~~', r' '],
[r' ', r'~~~~~> ', r' ~~~~~', r' ', r' '],
[r' ', r'~~~~~~> ', r' ~~~~', r' ', r' '],
],
hitFrames: [
[r' *WHIP*', r'~~~~~~> ', r' ~~'],
[r' *CRACK*', r'~~~~~> ', r' ~~ '],
[r' *WHIP* ', r'~~~~~~> ', r' ~~~~', r' **', r' '],
[r' *CRACK!* ', r'~~~~~> ', r' ~~~~~', r' **', r' '],
],
hitSound: '*WHIP*',
effectHeight: 3,
effectYStart: 2,
effectHeight: 5,
effectYStart: 1,
);
// ============================================================================
// 투척류 - 발사 (3줄)
// 투척류 - 발사 (5줄)
// ============================================================================
const _projectileEffect = WeaponEffect(
prepareFrames: [
[r' ', r'[=] ', r' '],
[r' ', r'[==] ', r' '],
[r' ', r' ', r' [=] ', r' ', r' '],
[r' ', r' _ ', r' [==] ', r' - ', r' '],
],
attackFrames: [
[r' ', r' [> ', r' '],
[r' ', r' [>', r' '],
[r' ', r' [>', r' '],
[r' ', r' [>', r' '],
[r' ', r' . ', r' [> ', r" ' ", r' '],
[r' ', r' . ', r' [> ', r" ' ", r' '],
[r' ', r' . ', r' [>', r" ' ", r' '],
[r' ', r' ', r' [>', r' ', r' '],
],
hitFrames: [
[r' *CLANG*', r' [>', r' '],
[r' *CRASH* ', r' [> ', r' '],
[r' *CLANG!* ', r' ***', r' [>', r' ***', r' '],
[r' *CRASH!* ', r' *** ', r' [> ', r' *** ', r' '],
],
hitSound: '*CLANG*',
effectHeight: 3,
effectYStart: 2,
effectHeight: 5,
effectYStart: 1,
);
// ============================================================================
// 에너지류 - 빔 발사 (3줄)
// 에너지류 - 빔 발사 (5줄)
// ============================================================================
const _energyEffect = WeaponEffect(
prepareFrames: [
[r' ', r' <*> ', r' '],
[r' == ', r' <**> ', r' == '],
[r' ', r' == ', r' <**> ', r' == ', r' '],
[r' ==== ', r' ====== ', r' <****> ', r' ====== ', r' ==== '],
],
attackFrames: [
[r' ==== ', r'==<*>== ', r' ==== '],
[r' ====== ', r'===<*>==', r' ====== '],
[r'========', r'===<*>==', r'========'],
[r'========', r'====<*>=', r'========'],
[r' ====== ', r' ======== ', r'===<**>===', r' ======== ', r' ====== '],
[r' ======== ', r'==========', r'===<**>===', r'==========', r' ======== '],
[r'==========', r'==========', r'====<**>==', r'==========', r'=========='],
[r'==========', r'==========', r'=====<**>=', r'==========', r'=========='],
],
hitFrames: [
[r'==*ZAP*=', r'===<*>==', r'========'],
[r'*BZZT!*=', r'====<*>=', r'========'],
[r'===*ZAP*==', r'==========', r'====<**>==', r'==========', r'===*ZAP*=='],
[r'==*BZZT!*=', r'==========', r'=====<**>=', r'==========', r'==*BZZT!*='],
],
hitSound: '*ZAP*',
effectHeight: 3,
effectYStart: 2,
effectHeight: 5,
effectYStart: 1,
);
// ============================================================================
@@ -162,23 +162,23 @@ const _cosmicEffect = WeaponEffect(
);
// ============================================================================
// 맨손 - 기본 펀치 (3줄)
// 맨손 - 기본 펀치 (5줄)
// ============================================================================
const _unarmedEffect = WeaponEffect(
prepareFrames: [
[r' ', r' ', r' '],
[r' ', r' > ', r' '],
[r' ', r' ', r' > ', r' ', r' '],
[r' ', r' _ ', r' -> ', r' - ', r' '],
],
attackFrames: [
[r' ', r'-> ', r' '],
[r' ', r'---> ', r' '],
[r' ', r'-----> ', r' '],
[r' ', r' __ ', r' ---> ', r' -- ', r' '],
[r' ', r' ___ ', r' -----> ', r' --- ', r' '],
[r' ', r' ____', r' ======>', r' ----', r' '],
],
hitFrames: [
[r' *POW* ', r'-----> ', r' '],
[r'*PUNCH*', r'----> ', r' '],
[r' *POW!* ', r' ****', r' ======>', r' ****', r' '],
[r' *PUNCH!* ', r' **** ', r' =====> ', r' **** ', r' '],
],
hitSound: '*POW*',
effectHeight: 3,
effectYStart: 2,
effectHeight: 5,
effectYStart: 1,
);