7/3 - 링 ID 22~24번
어제 코드 싹 정리하고 난 뒤, 오늘은 링 ID 22~24번을 구현했다. 짤의 첫 세 개 링이 순서대로 22(폭격), 23(증폭), 24(처형)번 링이고, 마지막은 사령관 링으로 24번 링의 타겟이 랜덤이기 때문에 테스트를 위해 넣었다.
1) 22번 링은 배치한 위치에서 공격 범위 내에 있는 모든 링에 데미지를 입히고 사라진다. 그래서 SetTarget()함수로 타겟들을 모두 잡은 뒤 targets 리스트에 저장된 모든 몬스터들에 피해를 주도록 했다.
2) 23번 링은 공격 범위 내에 있는 모든 몬스터들이 받는 최종피해를 20% 증가시킨다. 따라서 11(눈보라)번 링과 비슷한 방식으로 직접 공격을 하지 않는 대신, Amplifier라는 컴포넌트를 가지는 오브젝트를 풀에서 가져오도록 했다. Amplifier 함수는 Blizzard와 비슷하게 작동한다. 대신 피해를 입히는 부분이 파티클을 재생하는 것으로 대체되었으며, 몬스터들은 isInAmplify 변수가 true인 경우 Monster.AE_DecreaseHP(dmg)함수에서 피해를 1.2배로 받도록 했다. (AE_DecreaseHP(dmg)는 몬스터의 HP가 감소하는 모든 상황에서 불리는 함수이고 오직 이 함수를 통해서만 HP가 변화할 수 있다. 인수로 dmg를 넣으면 dmg만큼 감소시키고, -1을 넣으면 즉사시킨다.)
3) 24번 링은 공격 후 HP가 10%미만이면 몬스터를 처형한다(보스 몬스터는 기준이 절반이다). 이 값은 근처에 다른 24번 링이 있으면 2%p씩 늘어날 수 있다(12/14/16...%로). 처형을 처리하기 위해 Monster.AE_Execute()함수를 새로 만들어서 curHP - dmg < baseHP * rate인 경우 AE_Decreate(-1)로 즉사시켰다. 몬스터의 baseMonster.type이 3 이상인 경우에는 rate를 절반으로 줄였다.
다음 할 일은 링 ID 25~27번 구현하기! 다만 이번주는 친구들이랑 신나게 놀 계획이(ㅎ) 잡혀있는 터라 목요일에 대전 내려가고부터 할 수 있을 것 같다. 25, 26, 27번 은 구현 난이도가 꽤 있는 링들이다. 부활하고 랜덤 링 생성하고 스탯 계속 성장하고 등등... 그래도 이제 남은 링은 전체의 1/4개 정도밖에 되지 않는다. 어서 링 전부 만들고 그다음엔 뭘 구현할지 생각해보고 싶다.
- 링 ID 25~27번 구현