feat(animation): Act 기반 몬스터 사이즈 시스템 추가

- Act 진행에 따른 몬스터 사이즈 확률 조정
- 보스: Act별 고정 사이즈 (소/중/대)
- 일반/엘리트: Act별 확률 랜덤
- TaskInfo에 monsterSize 필드 추가
- 애니메이션 패널에서 Act 기반 사이즈 사용
This commit is contained in:
JiWoong Sul
2026-01-15 18:01:31 +09:00
parent 23f15f41d3
commit ac76060222
10 changed files with 118 additions and 8 deletions

View File

@@ -1,6 +1,7 @@
import 'dart:math' as math;
import 'package:asciineverdie/data/game_text_l10n.dart' as l10n;
import 'package:asciineverdie/src/core/animation/monster_size.dart';
import 'package:asciineverdie/src/core/engine/combat_calculator.dart';
import 'package:asciineverdie/src/core/model/combat_state.dart';
import 'package:asciineverdie/src/core/model/combat_stats.dart';
@@ -253,6 +254,7 @@ class ActProgressionService {
monsterPart: '*', // 특수 전리품
monsterLevel: glitchGod.level,
monsterGrade: MonsterGrade.boss, // 최종 보스는 항상 boss 등급
monsterSize: MonsterSize.large, // 최종 보스는 항상 대형
),
currentCombat: combatState,
);

View File

@@ -1,6 +1,7 @@
import 'dart:math' as math;
import 'package:asciineverdie/data/game_text_l10n.dart' as l10n;
import 'package:asciineverdie/src/core/animation/monster_size.dart';
import 'package:asciineverdie/src/core/engine/act_progression_service.dart';
import 'package:asciineverdie/src/core/engine/combat_calculator.dart';
import 'package:asciineverdie/src/core/engine/combat_tick_service.dart';
@@ -585,6 +586,7 @@ class ProgressService {
monsterPart: '*', // Boss는 WinItem 드랍
monsterLevel: actBoss.monsterStats.level,
monsterGrade: MonsterGrade.boss,
monsterSize: getBossSizeForAct(state.progress.plotStageCount),
),
currentCombat: actBoss,
);
@@ -673,6 +675,13 @@ class ProgressService {
durationMillis,
);
// 몬스터 사이즈 결정 (Act 기반, Phase 13)
final monsterSize = getMonsterSizeForAct(
plotStageCount: state.progress.plotStageCount,
grade: monsterResult.grade,
rng: state.rng,
);
progress = taskResult.progress.copyWith(
currentTask: TaskInfo(
caption: taskResult.caption,
@@ -681,6 +690,7 @@ class ProgressService {
monsterPart: monsterResult.part,
monsterLevel: effectiveMonsterLevel,
monsterGrade: monsterResult.grade,
monsterSize: monsterSize,
),
currentCombat: combatState,
);