드롭 테이블 디자인


18

나는이 질문이 MMO 나 디아블로와 같은 게임과 더 관련이 있다고 생각합니다.

몬스터가 백분율에 따라 다른 유형의 아이템을 떨어 뜨릴 수있는 드롭 테이블을 구현하기위한 일반적인 디자인은 무엇입니까? 항목 유형에 '백분율 가중치'사전을 갖는 가장 간단한 방법이 있지만 새 항목 유형을 도입하려는 경우 확장하기가 어렵습니다 (예 : D2 확장에 룬 및 새 클래스 항목이 포함 된 경우).


4
새 항목을 추가 할 때 백분율 사전을 확장하기 어려운 이유는 무엇입니까? 나는 당신이 100 %의 합계를 만들기 위해 모든 백분율을 가질 필요가 없다면 (그리고 당신이 괴물이 항상 하나의 아이템을 떨어 뜨릴 것을 원할 경우에만 가능합니다. 문제.
n0rd

1
Orc => { 'dagger', 'sword' 'armor'}라고 말하면 새로운 아이템 유형이 있습니다. 각 몬스터 유형과 관련된 모든 사전을 직접 업데이트해야합니다. 물론 이것은 다른 간접적 인 레이어가 해결할 수없는 것은 아닙니다. 문제는 그 층이 어떻게 생겼는가하는 것입니다.
Extrakun

왜 사전 업데이트가 어렵다고 생각하는지 잘 모르겠습니다. 파이썬에서 새로운 값으로 하나의 사전을 확장하는 것은 예를 들어 단일 방법으로 수행됩니다. 어려움이 있다고 생각되는 부분을 분명히 설명해 주시겠습니까?
Kylotan

2
Extrakun, 아래의 답변을 살펴보면 "또 다른 간접 계층"질문에 대한 답변이 있습니다. 방울을 평평한 테이블로 취급하는 대신 중첩 된 표현식으로 방울을 작성할 수 있습니다. 명명 된 매크로 (예 : 함수)를 허용하면 다른 엔터티에서 드롭 테이블 청크를 재사용 할 수 있습니다.
munificent

2
당신은 게임 개발의 '캐치'를 우연히 발견했습니다. 물론 이틀 만에 게임을 만들 수 있지만 5 년 동안 콘텐츠를 추가해야합니다. 그리고 내용을 추가하는 것은 갈고 있습니다. 연마.
Tor Valamo

답변:


22

내가 작업하고 있던 불량한 경우 드롭을 생성하기 위해 매우 유연한 데이터 중심 시스템을 구현했습니다. 나는 그것을 여기에 문서화했다 . 본질적으로 무작위로 선택된 여러 항목을 선택하기위한 작은 DSL입니다.

간단한 드롭은 다음과 같습니다.

1-10 copper coin

1에서 10 사이의 임의의 수의 구리 동전을 떨어 뜨린다 고 말합니다. 분기를 추가하면 상황이 더 유연 해집니다.

one of
    turquoise stone (50%)
    onyx stone (25%)
    malachite stone (15%)
    jade stone (10%)

"중 하나"는 주어진 확률을 기반으로 하위 분기 중 하나를 선택한 다음이를 평가합니다. 방울은 하나 이상의 아이템을 떨어 뜨릴 수 있습니다 :

any of
    turquoise stone (50%)
    onyx stone (25%)
    malachite stone (15%)
    jade stone (10%)

그러면 모든 하위 분기 를 평가 하여 확률에 대한 롤이 통과하면 해당 분기를 삭제합니다. 던전 및 플레이어 레벨에 따라 아이템을 선택하기위한 다른 지점도 있습니다.

이것들은 복잡해질 수 있기 때문에 명명 된 매크로를 정의 할 수 있습니다. 기본적으로 분기 식을 확장하고 여러 방울에서 재사용 할 수있는 함수입니다. 예를 들어, 모든 드워프가 같은 종류의 전리품을 떨어 뜨린 경우, 하나의 매크로를 만들어 거대한 드롭 테이블을 복사하여 붙여 넣는 대신 모든 종류의 몬스터에 사용할 수 있습니다.

몬스터 드롭 예 :

:: ancient dragon
    glyph   = D
    groups  = dragon
    drops
        (coins)
        2-3(1:8) one of
            (any-weapon)
            (any-armor)

여기에서 (coins), (any-weapon)그리고 (any-armor)모든 매크로 호출은 다음과 같습니다 :

(any-armor)
    one of
        (shield)
        (helm)
        (boots)
        (gloves)
        (cloak)
        (robe)
        (soft-armor)
        (hard-armor)

차례로 다음과 같은 것을 호출합니다.

(cloak)
    one near level
        cloak (10)
        velvet cloak (20)
        fur-lined cloak (50)

실제 프로그래밍 언어와 마찬가지로 드롭 표현식을 임의로 중첩 할 수 있습니다. 이것은 간단한 테이블 기반 접근 방식이 제공하지 않는 구성 가능성을 제공합니다.

모든 데이터 중심 시스템과 마찬가지로 복잡한 드롭을 구축하여 자신을 압도 할 수는 있지만 내 목표를 달성합니다.

  1. 코드 외부에서 완전히 삭제되는 항목을 지정할 수 있습니다.
  2. 코드에서 핵심 시스템을 간단하게 구현할 수 있습니다.
  3. 플레이어가 목표 지향 탐색을 수행 할 수 있도록 특정 몬스터가 떨어지는 것을 조정할 수 있습니다. ( "목걸이가 필요합니다. 드워프가 떨어 뜨리는 경향이 있기 때문에 찾아 볼 것입니다.")

이를 구현하는 C # 코드는 here 입니다.


이것은 내가 전에 보지 못한 하나의 구현입니다. 감사!
Extrakun

12

Stendhal에서 전리품 테이블은 목록입니다. 각 항목에는 품목 이름, 최소 및 최대 수량 및 확률이 포함됩니다. 내부 구조는 우리가 생물체의 웹 페이지 에 표시하는 것과 매우 유사합니다 .

세계에 대해 잘 알고있는 게임 디자이너가 그러한 것들을 정의 할 수있는 것이 중요합니다. 즉, 프로그램 코드 수준에서 복잡한 논리를 이해하지 못하는 것입니다. 따라서 프로그램 코드에는 생물체와 아이템에 대한 정의가 없지만 elves.xml 또는 club.xml 과 같은 .xml 파일로 이동했습니다 . GUI 편집기가 있지만 대부분의 게임 디자이너는 .xml 파일을 직접 수정합니다.

생물과 아이템을 쉽게 확장 할 수 있도록 빌딩 블록 시스템을 사용합니다. "elf"또는 "archer elf"에는 프로그램 클래스가 없습니다. 그러나 "겁쟁이", "순찰대", "공격적", "아처", "치유 자"와 같은 행동 관련 클래스가 많이 있습니다. 디자이너는 프로그램 코드를 작성하지 않고 새로운 피조물이 해당 행동을 선택하도록 정의 할 수 있습니다. 예를 들어 "아처 엘프"를 만들려면 활로 엘프 스프라이트를 그리고 "공격적", "아처"로 정의하십시오. 그런 다음 레벨 및 유사한 속성을 정의하고 전리품 테이블에 멋진 아이템을 추가하십시오.

아이템의 경우 비슷한 접근 방식이 있지만 현재는 한 가지 동작으로 제한됩니다. 디자이너는 새 아이템을 추가하고 "ConsumableItem", "KeyItem"또는 "AttackItem", "Spell", "Scroll"과 같은 동작을 정의 할 수 있습니다. 로직을 프로그래밍해야합니다.


8

D & D 테이블 탑 게임에는 전리품 유형이라는 개념이 있습니다. 대부분의 몬스터는 하나 이상의 테이블에서 떨어지며이 테이블은 확장에서 업데이트 할 것입니다. 몬스터들은 여전히 ​​"일반 65 %, 보석 10 %, 예술 15 %, 도구 10 %"를 떨어 뜨릴 것입니다.

예를 들어 보석에는 "1 보석 (25 %) 2 보석 (50 %) 5 보석 (75 %) 100 보석"을 반환하는 임의 범위의 슬롯이 있습니다. 특별한 룬 보석을 추가하려면 표를 "1 보석 (25 %) 2 보석 (50 %) 5 보석 (75 %) 100 보석 (95 %) 1 runegem"으로 업데이트하십시오.

그러나 다른 한편으로, 이미 가중치 가중치를 받았다면 확장에서 모든 몬스터 테이블을 업데이트하지 않는 이유는 무엇입니까? 이와 같은 테이블은 텍스처와 메시에 비해 페이로드가 적습니다. 또한 백분율을 100까지 늘릴 필요가 없습니다. 이는 단지 가정으로 가정 한 것이며 임의의 값을 생성하기 전에 실제 총계를 계산할 수 있습니다. 가중치가 120을 더하면 1-100 대신 1-120에서 값을 생성하십시오.


3

표면적으로 이것은 "가중 랜덤 선택"문제와 동일하게 보입니다.

랜덤 이벤트를 결정하기위한 알고리즘

각 이벤트에 상대 확률을 할당하고 추가 한 다음 해당 범위 내에서 임의의 숫자를 선택하여 원하는 이벤트를 결정하십시오.

동일한 시스템 인 100을 사용하여 백분율을 사용하는 것을 선호하더라도 물건을 추가하는 것이 얼마나 어려운지를 과대 평가하고 있습니다. 확장에 100 %가 있고 20 %를 더한 경우 모든 값을 (120/100)으로 나누면 총 100 %로 돌아갑니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.