[녹픽던 모딩] 몬스터 만들기
public class Moob extends Mob {
{
spriteClass = MobSprite.class;
HP = HT = 110;
defenseSkill = 15;
EXP = 14;
maxLvl = 30;
}
@Override
protected boolean canAttack(Char enemy) {
return this.fieldOfView[enemy.pos] && Dungeon.level.distance(this.pos, enemy.pos) <= 3;
}
@Override
public int damageRoll() {
return Random.NormalIntRange(1,1);
}
@Override
protected float attackDelay() {
return super.attackDelay();
}
@Override
public int attackSkill( Char target ) {
return 1;
}
@Override
public int drRoll() {
return Random.NormalIntRange(0, 1); }
}
spriteClass : 몬스터의 이미지
HP = HT = (숫자) : 해당 몬스터의 체력.
(현재 체력) = (최대 체력) = (수치) 라는 뜻. 50을 기입하면 체력이 50이 된다.
defenseSkill : 회피율
일반적으로는 위처럼 몬스터 생성시 적용하지만, 함수를 사용하여 100% 회피 등을 구현할 수도 있다.
놀 수도승의 집중 버프 관련 코드를 참조하면 좋다.
EXP : 몬스터가 주는 경험치
maxLvl : 몬스터의 레벨 수치. 이 레벨에 따라서 플레이어가 아이템 획득 / 경험치 획득 가능 여부가 나뉜다. 그 외에도 타락 이라던가 몇몇 부분에서 작용하긴 한다.
loot : 몬스터가 드롭하는 아이템
lootChance : 몬스터가 아이템을 드롭할 확률
properties.add
몬스터의 속성을 추가한다.
이 몬스터는 보스몹이다! 이 몬스터는 정령 몹이다!.. 같은 걸 추가해준다.
이 속성값을 if문과 같이 사용해 [정령 몹에게 공격시 2배 피해] 등을 구현할 수도 있다.
immunities.Add()
특정 효과에 면역을 부여한다.
immunities.add(Hex.class);
이 경우, Hex(주술) 상태에 면역이 된다.
resistances.Add()
위의 immunities의 하위 버전. 특정 효과에 저항을 부여한다.
저항의 경우 해당 상태의 지속시간이 절반이 된다거나... 뭐 그런 효과가 있다.
canAttack (공격 가능 여부)
보통은 사거리를 따진다. 일반적인 몬스터(=사거리 1)의 경우 해당 몬스터의 스크립트에 Override할 필요가 없으며,
[사거리 2 이상의 몹] / [사거리 무한인 몹]을 구현할 때 사용된다.
@Override
protected boolean canAttack(Char enemy) {
return this.fieldOfView[enemy.pos] && Dungeon.level.distance(this.pos, enemy.pos) <= 3;
}
사거리 2 이상의 몹을 구현하는 코드. 맨 뒤의 숫자만 바꿔주면 된다. (3 = 사거리 3)
@Override
protected boolean canAttack(Char enemy) {
return this.fieldOfView[enemy.pos]}
조건 하나를 제거하면, 적이 자신의 시야에 있을 때 무조건 공격이 가능해진다.
즉, 사거리가 실질적으로 무한이 된다. [도달] 몬스터가 이와 같다.
damageRoll()
해당 몬스터의 공격력이다.
@Override
public int damageRoll() {
return Random.NormalIntRange(30,38);
}
이 경우, 해당 적의 공격력은 30~38이 된다.
이곳에 특정 버프와 관련된 if문을 넣어, Hex상태라면 공격력이 10~12로 감소.. 등을 구현할 수도 있다.
drRoll()
해당 몬스터의 방어력. 상세 사항은 위와 동일.
attackSkill
해당 몬스터의 명중률이다.
간단하게 return (숫자); 만 넣어주면 된다. 위와 마찬가지로 if문을 통해 특정 조건하에 명중률이 변동되게 만들 수 있다.
attackDelay
해당 몬스터의 공격 속도다.
@Override
protected float attackDelay() {
return super.attackDelay() * 0.5f;
}
... 이렇게 적용시, 공격 딜레이가 절반이 되어 턴당 2회 공격하게 된다.
턴당 1회 공격시에는 굳이 Override 하지 않아도 된다.
speed
이동속도다. 사소한건 위와 똑같다
attackProc
몬스터가 공격할 때 특정 효과를 발동시킨다.
defenseProc
몬스터가 피격시 특정 효과를 발동시킨다.
rollToDropLoot
일반적인 몬스터 loot와는 별개로, 특정 조건하에 몬스터가 아이템을 뱉는 효과.
보스 몬스터 등을 참조하면 더 자세하게 알 수 있다.
act
몬스터가 행동할 때마다 발동
spend
몬스터 턴 처리시 발동