프로그래밍 이야기/녹픽던 모딩

[녹픽던 모딩] 몬스터 만들기

mizq4482 2022. 3. 5. 13:19
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

몬스터 턴 처리시 발동

 

 

728x90