RPG 손상 공식을 개발하는 방법?


117

나는 고전적인 2D RPG (파이널 판타지와 비슷한 맥락에서)를 개발 중이며 누군가 수식 / 리소스 / 예제 링크를 손상시키는 방법에 대한 조언이 있는지 궁금합니다. 현재 설정을 설명하겠습니다. 잘만되면 나는이 질문으로 그것을 과장하지 않고 내 질문이 너무 크거나 광범위하다면 사과드립니다.

내 캐릭터 통계는 다음과 같이 구성됩니다.

enum Stat
{
    HP = 0,
    MP = 1,
    SP = 2,
    Strength = 3,
    Vitality = 4,
    Magic = 5,
    Spirit = 6,
    Skill = 7,
    Speed = 8, //Speed/Agility are the same thing
    Agility = 8,
    Evasion = 9,
    MgEvasion = 10,
    Accuracy = 11,
    Luck = 12,
};

활력은 기본적으로 물리적 공격에 대한 방어이며 정신은 마법 공격에 대한 방어입니다.

모든 능력치에는 최대치가 고정되어 있습니다 (HP는 9999, MP / SP는 999, 나머지는 255). 능력을 사용하면 능력 + 장비 + 등의 전 / 후 + (100 레벨)에서 일반적인 값을 사용하여 최대 값을 높일 수 있습니다 (HP의 경우 99999, HP / SP의 경우 9999, 나머지는 999) .HP의 경우 8000 / 20,000, 800 / SP / MP의 경우 2000, 다른 통계의 경우 180/350

늦게 게임 적 HP는 일반적으로 더 낮은 수백만에 달합니다 (슈퍼 보스는 최대 ~ 1,200 만).

사람들이 실제로 올바르게 확장되는 적절한 손상 공식을 어떻게 개발하는지 궁금합니다. 예를 들어,이 데이터를 바탕으로 Final Fantasy X의 데미지 공식을 기본으로 사용하는 것은 매우 유망한 것으로 보였습니다. 전체 참조는 http://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381 이지만 빠른 예입니다. Str = 127, 'Attack'명령 사용, 적 Def = 34.

1. Physical Damage Calculation:
Step 1 ------------------------------------- [{(Stat^3 ÷ 32) + 32} x DmCon ÷16]
Step 2 ---------------------------------------- [{(127^3 ÷ 32) + 32} x 16 ÷ 16]
Step 3 -------------------------------------- [{(2048383 ÷ 32) + 32} x 16 ÷ 16]
Step 4 --------------------------------------------------- [{(64011) + 32} x 1]
Step 5 -------------------------------------------------------- [{(64043 x 1)}]
Step 6 ---------------------------------------------------- Base Damage = 64043
Step 7 ----------------------------------------- [{(Def - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------ [{(34 - 280.4)^2} ÷ 110] + 16
Step 9 ------------------------------------------------- [(-246)^2) ÷ 110] + 16
Step 10 ---------------------------------------------------- [60516 ÷ 110] + 16
Step 11 ------------------------------------------------------------ [550] + 16
Step 12 ---------------------------------------------------------- DefNum = 566
Step 13 ---------------------------------------------- [BaseDmg * DefNum ÷ 730]
Step 14 --------------------------------------------------- [64043 * 566 ÷ 730]
Step 15 ------------------------------------------------------ [36248338 ÷ 730]
Step 16 ------------------------------------------------- Base Damage 2 = 49655
Step 17 ------------ Base Damage 2 * {730 - (Def * 51 - Def^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ---------------------- 49655 * {730 - (34 * 51 - 34^2 ÷ 11) ÷ 10} ÷ 730
Step 19 ------------------------- 49655 * {730 - (1734 - 1156 ÷ 11) ÷ 10} ÷ 730
Step 20 ------------------------------- 49655 * {730 - (1734 - 105) ÷ 10} ÷ 730
Step 21 ------------------------------------- 49655 * {730 - (1629) ÷ 10} ÷ 730
Step 22 --------------------------------------------- 49655 * {730 - 162} ÷ 730
Step 23 ----------------------------------------------------- 49655 * 568 ÷ 730
Step 24 -------------------------------------------------- Final Damage = 38635

무기의 공격 등급과 갑옷의 갑옷 등급을 포함하도록 디바이더를 수정했습니다.

마법 데미지는 다음과 같이 계산됩니다 : Mag = 255, Ultima 사용, 적 MDef = 1

Step 1 ----------------------------------- [DmCon * ([Stat^2 ÷ 6] + DmCon) ÷ 4]
Step 2 ------------------------------------------ [70 * ([255^2 ÷ 6] + 70) ÷ 4]
Step 3 ------------------------------------------ [70 * ([65025 ÷ 6] + 70) ÷ 4]
Step 4 ------------------------------------------------ [70 * (10837 + 70) ÷ 4]
Step 5 ----------------------------------------------------- [70 * (10907) ÷ 4]
Step 6 ------------------------------------ Base Damage = 190872 [cut to 99999]
Step 7 ---------------------------------------- [{(MDef - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------- [{(1 - 280.4)^2} ÷ 110] + 16
Step 9 ---------------------------------------------- [{(-279.4)^2} ÷ 110] + 16
Step 10 -------------------------------------------------- [(78064) ÷ 110] + 16
Step 11 ------------------------------------------------------------ [709] + 16
Step 12 --------------------------------------------------------- MDefNum = 725
Step 13 --------------------------------------------- [BaseDmg * MDefNum ÷ 730]
Step 14 --------------------------------------------------- [99999 * 725 ÷ 730]
Step 15 ------------------------------------------------- Base Damage 2 = 99314
Step 16 ---------- Base Damage 2 * {730 - (MDef * 51 - MDef^2 ÷ 11) ÷ 10} ÷ 730
Step 17 ------------------------ 99314 * {730 - (1 * 51 - 1^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ------------------------------ 99314 * {730 - (51 - 1 ÷ 11) ÷ 10} ÷ 730
Step 19 --------------------------------------- 99314 * {730 - (49) ÷ 10} ÷ 730
Step 20 ----------------------------------------------------- 99314 * 725 ÷ 730
Step 21 -------------------------------------------------- Final Damage = 98633

문제는 통계가 255 이상으로 올라 가기 시작하면 공식이 완전히 분리된다는 것입니다. 특히 300 이상의 방어 값은 실제로 이상한 행동을 일으키기 시작합니다. 예를 들어 고강도 + 방어 통계는 막대한 음수 값으로 이어집니다. 사용 사례에서 올바르게 작동하도록 수식을 수정할 수는 있지만 완전히 새로운 수식을 사용하는 것이 더 쉬울 것입니다. 사람들은 실제로 피해 공식을 어떻게 개발합니까? 나는 엑셀을 열고 그 방법으로 수식을 작성하려고 시도했지만 (예를 들어 공격 통계 대 방어 통계 매핑) 더 쉬운 방법이 있는지 궁금합니다. 여기에 내 게임의 전체 게임 메커니즘을 전달할 수 없지만 누군가 손해 공식을 만들기위한 좋은 출발점을 제안 할 수 있습니까?

감사


1
나는 당신이 원하는 통계, HP 등의 종류를 먼저 설정하는 것이 옳은 일이라고 생각합니다. 이것은 플레이어 경험의 일부이며 수학은 이러한 값에 '적합'해야합니다. 하지만 이렇게 많은 통계로, 직관적으로 첫 번째 큰 문제는 전 PhDef은 방어를 위해 (통계 공격에 대응하고 어떤 통계이 통계에 대한 방어 것입니다 그래서 등 자신의 마법, 물리 공격에 영향을 미칠 무슨 통계 알아야 플레이어 에 PhAtk).
Jonathan Connell 2018 년

가장 큰 것은 균형입니다. 통계를 변경하고 어떤 종류의 결과를 얻을 수 있는지 대화식 프로그램 (예 : C # 또는 빠른 것)을 만드는 것이 좋습니다. 런타임에 수식을 변경할 수 있다면 도움이 될 것입니다.)
Jonathan Connell

4
이렇게하려면 Excel을 사용하십시오. 이 작업에 잘 어울리는 것처럼 보이므로 코드를 작성할 필요가 없습니다.
Alex Schearer 2016 년

2
가장 중요한 질문은 다음과 같습니다. 어떤 공식이 플레이어에게 가장 재미 있습니까? ( "재미"에 대한 페이지를 검색했으며 그에 대한 답변 중 하나가 언급되지 않았습니다. : P) 통계 나 데미지가 너무 높아지면 플레이어가 너무 빨리 반응하지 않으면 천천히 올라가면 지루해집니다. 플레이어는 레벨이 올라갈 때 행복해야하므로 작업을 마치고 게임 성능에 눈에 띄는 영향을 줄 수 있어야합니다. (나의 2 펜스)
Annan

3
"(Def-280.4) ^ 2"응? 글쎄, 나는 Def> 255 또는 Def> 300에서는 이상하게 보일 것이지만 Def> 280.4에서는 거의 정확하게 이상하게 될 것이라고 기대합니다. 다른 시점에서 예상됩니다. BTW, 당신은 Wolfram Alpha 등으로이 재료를 그릴 수 있습니다. 두 개만 유지하기에 충분한 변수를 수정하면 멋진 표면 플롯을 얻을 수 있습니다.
Christian

답변:


140

이와 같은 공식을 만들려면 대수 및 미적분 수업에서 배운 것들 인 초등 수학 함수에 대한 지식이 필요합니다 .

일단 숙달 된 후에는 스스로에게 물어보십시오 ( "값"을 "손상", "건강"또는 "속도"등으로 대체) .

  • 일정한 속도로 가치를 키우고 싶습니까? 선형 함수를 사용하십시오 .
  • 처음에는 가치가 느려지고 나중에 빨리 커지길 원하십니까? 다항식 또는 지수 함수를 사용하십시오 .
  • 처음에는 가치가 빠르게 증가하고 나중에 느려지기를 원하십니까? n 번째 루트 또는 로그 함수를 사용하십시오 .
  • 시작 / 종료시 느리게 성장하지만 중간에서 빠르게 성장하기를 원하십니까? 아니면 빠르게 성장하길 원하지만 여전히 상한이 있습니까? atan 또는 로지스틱 함수 와 같은 시그 모이 드 곡선을 사용하십시오 .
  • 값이 진동하길 원하십니까? 용도 또는 일부 다른 물결.

그런 다음 올바르게 느낄 때까지 조정하십시오 (물건 추가 / 곱하기, 기본 값 변경 등) . 그래프 계산기는 매개 변수 변경이 기능에 미치는 영향을 시각화하는 데 도움이됩니다.


그건 그렇고, 당신이 겪고있는 문제는 정수 오버플 로 때문 입니다.

작업중인 숫자를 담을 수있을만큼 큰 변수 유형을 사용하십시오. 크기는 C ++에서 플랫폼마다 다르지만 32 비트 Visual Studio 컴파일러 사용 unsigned int은 32 비트이며 unsigned __int64 (MS 별) 는 64 비트입니다. 또한을 사용해보십시오 double.

또한 처음에는 이러한 숫자가 너무 많지 않도록 작업을 재구성하십시오 (예 MDef * MDef / 110: do 대신 (int)((float)MDef / 110 * MDef)) .


3
정수 오버플로가 발생하면 24 비트의 정수 부분 만 안정적으로 지원하는 float로 변환하면 다른 정확도 문제가 발생합니다.

@Joe : 편집 내용을 롤백했습니다. Visual Studio 2008 이하에서는 사용할 수 없기 때문에 구체적으로 선택 __int64했으며 가난한 소년을 이미보다 더 혼란스럽게하고 싶지 않았습니다. uint64_tstdint.h
BlueRaja-대니 Pflughoeft

1
@BlueRaja : asker가 Visual Studio를 사용하고 있다는 증거는 없으며 다른 모든 표준 툴체인 (Visual Studio 2010 포함)에도 있습니다.

중요한 변형도 하나도 배제했습니다. 피해가 상한을 갖도록하고 싶지만 절대 도달 할 수 없다면 S 자형 함수를 사용할 수 있습니다.
Martin Sojka 2016 년

1
user127817 : 정말로 중요한 것은 함수가 어떻게 성장하는지입니다. 나머지는 균형이 느껴질 때까지 테스트하십시오. 캐릭터가 너무 강력하다고 생각되면 피해를 줄이십시오. 특정 보스 나 적을 죽이는 데 시간이 너무 오래 걸린다고 생각되면 적의 체력이나 갑옷을 낮추십시오. 등등.
BlueRaja-대니 Pflughoeft

31

내 캐릭터 통계는 다음과 같이 구성됩니다.

실제 문제가 있습니다. 통계가 실제로 무엇을 의미 하는지 정의 하기 전에 통계 정의했습니다 . 당신은 말 앞에 카트를 넣고 있습니다.

D & D (테이블 탑) 작동 방식을 살펴보십시오. "강도"자체가 의미하는 것은 아닙니다. "근접 공격에 체력 보너스를 추가하십시오"라는 규칙이 있기 때문입니다. 이 규칙은 D & D의 전투 규칙의 일부입니다. 전투 규칙이 없으면 "강도"는 일반적으로 의미가 없습니다.

당신이 스스로에게 물어봐야 할 첫 번째 질문은 이것입니다 : 캐릭터들 사이에 얼마나 많은 차별화가 필요합니까? 다시, D & D를보십시오. 거기에는 6 가지 기본 통계가 있습니다. 이 통계는 캐릭터에 대한 플레이의 다른 차원을 정의합니다. 민첩성이 높은 캐릭터는 민첩성이 낮은 캐릭터와 다른 옵션을 갖습니다.

그러나 그 차이조차도 규칙으로 돌아옵니다. 높은 민첩성은 원거리 공격에 대한 보너스를 의미합니다. 원거리 공격으로 더 자주 맞을 수 있습니다. 따라서 힘과 손재주 사이에는 원거리와 근접의 두 가지 차원이 있습니다.

지능과 지혜는 짝을 이루는 무언가를 형성하지만 특정 클래스와 더 상호 작용합니다. Int는 위저즈 (Wizard)와 다른 비전 주문 캐스터를 더 좋게 만들거나 (또는 일부 규칙 세트에서 가능 ) 지혜는 성직자와 다른 신성 주문 캐스터에게 매우 중요합니다. 신성 및 비전 주문은 주문 목록이 다르기 때문에이 두 통계는 다른 차원의 플레이와 관련됩니다.

성장 진행 함수 등을 정의 하기 전에 통계에 대한 기본 규칙을 정의해야합니다 . 구체적인 내용은 필요하지 않습니다. "근접 공격이 발생했는지 확인하기 위해 각 강도 포인트가 랜덤 롤에 추가됩니다"라고 말할 필요는 없습니다. 당신이 필요로하는 것은 "덱스 트리 티가 원거리 공격자를 더 좋게 만듭니다"와 같은 메타 규칙입니다. 나중에 어떻게 더 나아지 는지 정확히 알 수 있습니다 .

캐릭터를 진행시키는 방법에는 여러 가지가 있습니다. 일반적인 구식 Final Fantasy 트릭은 단순히 캐릭터의 레벨을 피해 계산의 일부로 사용하는 것입니다. 레벨에 적절한 스탯을 곱하거나 캐릭터 레벨에 함수를 적용하는 것을 의미 할 수 있습니다. 캐릭터의 데미지 비율이 레벨 당 증가하도록 2 차 진행이라고 가정 해 봅시다.

그러나 전투 기능을 작동 시키려면 진행 상황을 고려해야합니다. 함수에는 진행을위한 후크가 필요합니다.

D & D에는 재미있는 진행 방법이 있습니다. 부분 클래스 기반입니다. 레벨이 올라갈 때마다 캐릭터 클래스에 따라 새로운 클래스 기능과 명중률이 일정합니다. 그러나 일부 클래스 기능은 스스로 향상되었습니다. D & D의 철자법에는 진전이있을 것입니다. 주문은 첫 레벨 이상의 주문 시전자 2 레벨 당 1d4의 피해를줍니다. 다른 모든 마법사 레벨은 그 철자를 더 잘 만듭니다.

D & D는 또한 항목 기반 진행을 많이 사용했습니다. 4 판까지 아이템 기반 진행은 주로 캐릭터와의 싸움을위한 것이었지만, 구 버전에서도 스펠 캐스터는 스탯 버프 또는 기타 조정을 제공하는 아이템을 가졌습니다.

따라서 아이템은 전투 기능에서 고려해야 할 또 다른 것입니다. 장비가 장착 된 상태에서 하나 이상의 능력치를 버프합니까, 아니면 다른 일을합니까? 통계는 거의 변하지 않았다는 점에서 D & D는 약간 이상했다. 무기는 단순히 XdY에 피해를 입히며, 아마도 당신의 능력치 중 하나에 기초한 보너스로 가능합니다. 그게 다야 전투에서 더 많은 피해를 입힐 수있는 유일한 방법은 더 나은 무기를 찾는 것입니다. 많은 비디오 게임 RPG에서 무기 외에도 레벨을 고려합니다.


6
" 당신의 진짜 문제가 있습니다 : 당신은 그 통계가 실제로 무엇을 의미하는지 정의하기 전에 통계를 정의했습니다. 당신은 말 앞에 카트를 싣고 있습니다. ". 나는 매우 동의하지 않습니다. 자신의 번호가 자신의 힘의 플레이어 등이 통보 단지 방법 이다 게임 디자인의 일부를. 다른 방법으로 진행하면 147hp의 최종 보스가 생길 수 있습니다. 누가 정말로 원합니까?
Jonathan Connell

8
글쎄, Sarevok (Baldurs Gate)에는 HP가 135 명 밖에 없었습니다.
Martin Sojka

12
@ 3nixios : 엔드 보스에 147Hp가 있다면 무엇이 중요합니까? 중요한 것은 마지막 보스가 도전하고 흥미롭고 무엇보다도 패배에 대한 보상 인지 여부 입니다. HP가 많은 보스는 흥미롭지 않습니다. 시간 낭비 야. 할 수있는 순간 순간부터 변경 특별한 전략이 필요 파티, 엉망, 그건 당신이 최대 잠재력을 가지고있는 모든 능력을 사용하기로해야 함을 필요로하는 상사가, 위대한 최종 보스 만드는 것입니다. 나는 재미난 147Hp 보스를 Hp의 지루한 블록으로 데려 갈 것입니다.
Nicol Bolas

@Nicol Bolas 나는 당신에게 전적으로 동의합니다. 나는 출발점이 통계에서 나온다고 믿는 이유를지지하려고 노력했습니다. 플레이어가 시작하는 통계는 게임 중에 플레이어가 노는 기본 표시 및 게임 플레이입니다. 보스를위한 거대한 HP 바가 필요하지 않다는 것에 동의합니다. 플레이어에게 보스에 대한 최상의 설정이 무엇인지, 스탯 무기 등이 더 효과적인지 더 잘 알 수 있습니다. 물론 계산량은 계산 방법과 관련이 없습니다. 최종 계산을 상수 c로 나누거나 여러 번 수행하고 수행 할 수 있기 때문입니다.
Jonathan Connell

2
@ 3nixios : 그러나 그것은 내 요지의 일부입니다. D & D의 숙련도는 근접 전문가 캐릭터와 원거리 전문가간에 차별화를 허용하기 위해 존재합니다. 근접 공격과 원거리 공격에 대한 개념이 없다면 (그리고 예를 들어 많은 FF 게임에 존재하지 않는 경우),이 구별이 존재할 필요는 없습니다. 6 대신에 5의 능력치로 벗어날 수 있습니다. HP 범위를 정의하는 것이 중요하지만, 어떤 기본 능력치 를 정의하는 것은 또 다른 것입니다. 통계는 규칙을 이해하기 전에 규칙이 필요하며, 통계를 갖는 것이 좋은 생각이라고 말하기 전에 통계가 무엇을 하려는지 알아야합니다.
Nicol Bolas

22

수식이 꽤 복잡해 보입니다. 전문 RPG 개발자가 어떻게 처리하는지 잘 모르겠지만 단순성에 중점을 두는 것이 좋습니다. 여전히 사용하려는 통계 범위를 통합하는 가장 간단한 공식을 찾아보십시오. 예를 들어, 계산 중에 손상을 수정하지 않고 손상 계산 전에 통계가 서로 수정하도록 할 수 있습니까? 공식을 염두에두면 가능한 다양한 값을 그래프로 그려서 플레이어 레벨 업으로 어떻게 작동하는지 확인하려고합니다. 분명히 변수가 적을수록 이것이 더 실현 가능합니다.

또한 BlueRaja는 높은 통계 수준에서 예기치 않은 값이 표시되는 이유에 대한 중요한 설명을 제공했습니다. 부호없는 유형을 사용하고 오버플로를 확인하는 것이 중요합니다.


10
간단하게 +1. 누구나 엄청나게 복잡한 것을 만들 수는 있지만 좋은 게임은 아닙니다.
aaaaaaaaaaaa

8
@Randolf는 Apple 2 또는 다른 것을 실행하지 않는 한 여기에서 곱하기 또는 나누기를 제거하면 측정 가능한 방식으로 성능에 영향을 줄 것입니다.
Tetrad

8
@Randolf RPG에서의 큰 전투는 초당 10 건의 피해 계산과 같은 의미 일 수 있습니다. 현대 CPU는 초당 수십억 건의 작업을 수행 할 수 있습니다. 이러한 "보이는"수학의 성능 영향은 무시해도 좋다고 가정 할 수 있습니다. 이 경우 간단한 것은 우리 컴퓨터가 아니라 게임을 디자인하는 사람들과 게임을 즐기는 사람들을위한 것입니다.
aaaaaaaaaaaa

6
@ Randolf Richardson :이 경우 목표가 약간 누락 된 것 같습니다. MMO의 경우 지방이없는 빠른 빠른 프로토콜이 가장 중요하며, 물리와 같은 무거운 작업은 성능을 염두에두고 설계해야합니다. 그러나 데미지 계산은 핵심 게임 플레이입니다. 게임 플레이를 염두에두고 성능 문제를 제기하면 게임 플레이 부분을 손상시킬 위험이 있습니다. 중요한 경우 성능에 대해 이야기하고, 이것이 최적화해야 할 중요한 영역이라는 인상을 줄 위험이 있으므로 실제 성능 죄인의 관심을 끌지 마십시오.
aaaaaaaaaaaa

5
@ Randolf : 나는 아무것도 암시하지 않습니다; 난 병목없는 무언가를 최적화하는 것은 시간 낭비입니다.
Nicol Bolas

11

늦게 게임 적 HP는 일반적으로 더 낮은 수백만에 달합니다 (슈퍼 보스는 최대 ~ 1,200 만).

이것은 문제가 있습니다. 플레이어가 처리 할 수 ​​있다고 생각하는 부분에 보스를 배치해야합니다. 당신은 당신의 상사와 같은 당신의 선수를 만들고 공식을 싸우고 있습니다.

전투 역학과 역할을 구축 한 후에는 플레이어가 처리 / 흡수 할 수있는 피해와 보스가 처리 / 흡수 할 수있는 피해 간의 균형이 잘 맞아야 보스를 어떻게 설계 할 것인지 결정할 수 있습니다.


4
적의 체력 +1은 다른 방향이 아니라 그 시점에서 플레이어가 합리적으로 처리 할 수있는 것에 근거해야합니다.
BlueRaja-대니 Pflughoeft

7

인용 한 숫자는 수천 번에 걸친 시뮬레이션을 조정 한 것입니다.

따라서 시뮬레이션을 작성 해야 합니다 작성하여 레벨 20 캐릭터를 생성하고 그가 그 시점에서 싸우고 자하는 적 유형에 대해 200 번의 전투를 진행하는 방법을 확인해야합니다. 레벨 30 문자 (아마도 세계의 다음 섹션)에 대해 다시 수행하십시오.

제대로 되려면 시간이 다소 걸리지 만 자동화 된 시뮬레이션을 작성하면 추측하고 수동으로 재생하는 것보다 훨씬 쉽습니다.


5

적절한 디자인을 염두에 두지 않고 수식을 만들려는 실수를 저지른 것 같습니다.

먼저 디자인으로 시작한 다음 수식에서 디자인을 표현하는 것에 대해 생각하십시오. 디자인이 명확할수록 간단하고 정확한 공식을 쉽게 찾을 수 있습니다.

적의 "유형"을 구현하십시오 (예 : "armored"=> 물리적 유형 인 플레이어 공격이 50 % 감소 함). 추상화하기 위해 전투 흐름을 만들지 말고 무엇이 관련이 있고 무엇이 관련이 없는지 생각하십시오.

디자인에 "갑옷의 적"이 마법에는 약하지만 물리적 피해에는 강하다고 표시되어 있으면 코드로 표시하십시오. 그러나 코드를 처음 작성할 때 값이 마술처럼 작동하지 않기 때문에 많은 테스트를 수행했음을 기억하십시오. 디자인을 작성하고, 논리를 코드에 넣고, 이것이 당신이 생각한 것을 기술적으로 표현했는지, 그것이 될 때까지 값을 변경하지 않는지 항상 확인하십시오.


나는 이미 그런 종류의 일을 포괄하고있었습니다.-공격이 갑옷 관통으로 표시되거나 % 기반 피해 공식을 사용하지 않는 한 갑옷 등급은 물리적 공격 피해를 줄입니다
user127817

5

내 디자인이 스프레드 시트 단계를 벗어나지 않았지만 RPG 용 수학 디자인에 대한 결론을 얻었습니다.

최대한 간단하게 유지하십시오. 내가 작업하고있는 디자인에서 나는 세미 클래스가없는 시스템에 적합한 매우 간단한 공식을 사용했습니다. 즉. 불 덩어리 주문의 공격력은 30입니다.

BaseSpellDamage * Attribute (5 * 6)

다음과 같이 수정자를 추가 할 수도 있습니다.

Result = (BaseSpellDamage * Attribute) (5*6)
Result = Result + (Result * 50%) (30 = 30 + (30 * 50%))

최종 결과는 45 데미지입니다. precentage multipliers를 사용하는 것이 매우 쉽고 확장 가능한 솔루션이라는 것을 알았습니다. 복잡한 수학으로 홀수를 사용하는 대신 원하는 결과를 계산합니다.

이제 우리는 피해 유형을 계산할 수 있는데, 이는 설정된 유형의 피해에 대한 방어를 계산할뿐입니다. 두 가지 접근 방식이 있으며 어느 것이 더 적합한 지 정직하게 결정하지는 않았지만 간단하고 실행 가능합니다.

DamageResult = Resistance * Damage ( 50% * 45)

최종 결과는 22 데미지입니다 (단지 결과를 잘라 냈습니다).

다른 공식 :

DamageResult = Damage - Resistnace (45 - 22).

따라서 최종 결과는 23이됩니다. 저항이받는 피해보다 큰 경우 캐릭터는 피해를받지 않습니다. 물론 상황을 원할 때를 제외하고 그러한 상황이 없는지 확인하는 것은 귀하의 몫입니다.

precentage 스케일링은 균형과 스케일링이 다소 쉽다는 것을 인정해야합니다. 그러나 이것은 또한 기본 번호에 따라 다릅니다. 100부터 시작하면 백분율 비율 조정이 가장 효과적입니다. 소수 (정직하게 100 미만의 숫자)로 작업하는 경우 부동 소수점 결과를 얻기 시작할 때 어색해질 수 있습니다. 균형을 맞추기 어렵고 실제로 흥미로운 것을 할 수 있습니다.

이 경우 아마도 최적의 솔루션은 적합하다고 생각 될 때 두 가지 방법을 모두 사용하는 것입니다. 또는 큰 숫자의 팬이라면 1000부터 시작하십시오.

그리고 끝에서. 나는이 결론을 내 스스로 완수하지 않았다. 실제로 다양한 RPG 매뉴얼 (Hero, DnD)을 읽는 데 많은 시간을 보냈습니다. 특히 DnD는 비슷한 원리로 작동하기 때문에 도움이되었지만 수식 대신 레벨을 사용하는 속성 대신 언젠가 더 복잡 할 수 있습니다. 내가 여기에 제시 한 것보다.

어쨌든 최선의 조언은 가능한 한 간단하게 유지하는 것입니다. 87234 다른 것들을 동시에 처리해야 할 때 오류가 발생하기 쉽기 때문에 고급 수학이나 긴 방정식을 사용하지 마십시오.


3

다른 사람들이 언급했듯이 Final Fantasy X 공식은 매우 복잡합니다. 일반적으로 해당 시리즈의 경우 게임이 후반에 더 복잡해집니다. 다른 게임을 기반으로 피해 공식을 세우는 것이 더 쉬울 것입니다. 그러나 일반적으로 나는 세상에서 어떤 종류의 손해 공식을 찾을 수 있는지, 그리고 그것들을 기반으로 게임을 만드는 방법을 매우 일반적인 수준에서 논의 할 가치가 있다고 생각합니다. 가장 먼저 결정해야 할 것은 게임이 끝날 때 얼마나 많은 피해를 입히고 싶은지, 그리고 플레이어가 가질 수있는 통계는 무엇입니까? 그런 다음 공식 시스템을 선택한 다음 공식과 무기 값을 최적화하여 시간이 지남에 따라 해당 범위를 반영 할 수 있습니다.

순수 통계 기반

어떤 레벨의 적에게 도전 할 수 있는지에 대해 캐릭터를 유연하게하려면이 방법을 사용하는 것이 좋습니다. 이와 같은 공식은 플레이어의 통계, 장비 및 적의 통계에만 의존합니다. 이 공식은 일반적으로 매우 간단합니다. Final Fantasy Legend II ( 예를 들어 http://www.shenafu.com/ffl2/weapon.php 참조) 에는 간단한 공식에 따라 피해를주는 무기가 있습니다.

(Stat+StatBonus)*WeaponStrength - Defense*4

이와 같은 공식은 매우 간단한 손해 추정 방법을 원하거나 기술 및 원소 약점과 같은 다른 요소를 기반으로 손해를 수정하기위한 빠른 도약 지점을 원할 경우 유용합니다.

이러한 종류의 공식이 얼마나 광범위하게 적용되는지 보여 주려면 Android 및 IOS 게임 인플레이션 RPG의 피해 공식을 고려하십시오 ( http://inflation-rpg.wikia.com/wiki/Calculations 참조 ). 공식은 통계와 장비에 따라 크게 다릅니다. 각 장비에는 두 가지 통계가 있습니다. ATK 통계에 대한 보너스와 승수 값입니다. 일부 장비에는 멀티 플라이어가 낮지 만 보너스가 높으면 다른 장비에는 보너스가 적지 만 멀티 플라이어는 높습니다. 공격력이 10 인 캐릭터의 경우 공격력이 5000 공격력이지만 145 % 낮은 승수를 가진 전투 도끼가 좋습니다. 총 피해량은 (10+5000)*1.45 = 72640이지만 보너스가 0이고 승수가 300 % 인 Estoc은 좋지 않은 선택입니다 (10+0)*3 = 30. 게임 후반에 공격이 5000 인 캐릭터는 무기 전환을 선호합니다.

통계 및 레벨 기반 :

이에 대한 좋은 예는 Final Fantasy V, VI 및 Final Fantasy XII입니다 ( 예 : http://www.gamefaqs.com/ps2/459841-final-fantasy-xii/faqs/45900 참조 ). FFXII의 검 공식은 다음과 같습니다.

DMG = [ATK x RANDOM(1~1.125) - DEF] x [1 + STR x (Lv+STR)/256]

그리고 지팡이에 대한 피해 공식은 다음과 같습니다.

DMG = [ATK x RANDOM(1~1.125) - DEF] x [1 + STR x (Lv+MAG)/256]

그것들은 매우 비슷하지만 검 공식은 힘과 레벨에만 의존하고 직원 공식은 힘과 마법 에 의존합니다. 과 레벨 합니다. 이런 종류의 공식의 장점은 플레이어가 통계를 쌓거나 레벨을 구축하는 두 가지 성장의 길을 허용한다는 것입니다. 단점은 또한 문자를 두 가지 방식으로 모두 처벌한다는 것입니다. 이것이 실제로하는 일은 플레이어가 레벨 업을하여 데미지 출력을 증가시키는 것입니다 (FFXII의 경우 스탯 게인을 고려할 때 레벨 50 당 레벨 당 ~ 4 %의 데미지 출력 증가). 편안한 수준.

고정 데미지 :

고정 피해 공식은 캐릭터의 스탯이나 레벨에 의존하지 않으며 무기 자체의 내부 피해 공식에만 의존합니다. 그것들은 여전히 ​​범위에 따라 다를 수 있지만, 사용자에 관계없이 동일한 피해를 입습니다 (다른 특수 효과 또는 성격 특성 제외). 무기가 고정 피해를 입히고 무기를 장착하는 능력이 능력치 및 / 또는 레벨에 따라 달라지는 경우 가장 잘 사용됩니다. 예를 들어, 디아블로 2는 다이 롤에 의존하는 무기를 가진 많은 로그 라이크처럼이를 수행합니다. 즉, '고정 된 손해'는 "무작위"를 의미하지는 않으며 , 실제로 손해에 대한 임의의 요소가 있습니다.

캐릭터 간 이동이 쉬운 무기를 원하거나 게임에서 특정 지점의 캐릭터가 접근 할 수있는 장비 (드롭 테이블, 가슴을 통해)를 알고있는 경우 피해 출력을주의 깊게 제어하려면이 방법이 좋습니다. , 테이블을 훔칩니다).

파이널 판타지의 특정 유형의 장비 나 아이템이있는 또 다른 장소입니다. 예를 들어 1000 바늘은 항상 1000의 피해를줍니다. Final Fantasy Legend II에서 무술은 공식에 따라 피해를 입 힙니다.

Damage = WeaponStrength*(90-UsesLeft) - 4*Defense

Final Fantasy XII는 총에 약간의 피해를 입히고 공식에 따라 피해를 입 힙니다.

DMG = [ATK x RANDOM(1~1.125)]^2

피해는 다소 임의적이지만 전체 범위에 걸쳐 26.5 % 만 변하므로 시간이 지남에 따라 평균적으로 일정한 수준의 피해가 보장됩니다. 이러한 유형의 공격은 일반적으로 피해를 입히는 요인을 설명하는 게임에서 통계가 낮고 레벨이 낮은 캐릭터에게 유용합니다. 또한 목표의 방어를 무시합니다 (원하는 경우 수식을 방어에 맞게 쉽게 재 작업 할 수 있음).


2

파이널 판타지 시리즈의 모든 게임에는 발생한 문제로 인해 스탯 캡이 255입니다. 100 레벨 스탯은 255입니다.

당신은 능력과 장비로 스탯을 높이는 것에 대해 말하고 게임에서 이것을 보았지만 이것이 수행되는 방식은 공식에 있습니다. 능력과 장비 수정자를 확인하고 통계를 사용한 후에 적용하는 추가 단계가 있습니다.

귀하의 경우 21 단계 : 능력 수정 자 적용 22 단계 : 장비 수정 자 적용 23 단계 : 최종 피해.

파이널 판타지 공식에 대한 Google에 관심이 있다면 거기에 있습니다. 파이널 판타지 4, 6, 7 및 9에 대한 AI를 포함한 실제 전투 기술의 사본이 있습니다. 사람들은 에뮬레이터에 대한 롬을 만들 때 원래 게임에서 크랙했습니다. 당신이 충분히 열심히 보면 찾기가 어렵지 않습니다.

수식을 만드는 가장 큰 것은 테스트입니다. 양쪽에서 전투를 할 수있는 스크립트를 설정하고 수백 번의 전투를 진행하십시오. 몬스터와 스탯을 변경하고 작동하는지 또는 lv 40이 모든 것을 죽이면 보스가 실제로 lol을 죽일 수 없다는 것이 전적으로 가능합니다. 팁은 아무도보고 있지 않을 때 AI가 얼마나 빨리 싸울 수 있는지에 대해 인상적이기 때문에 모든 애니메이션을 끄는 것입니다.


2

사람들이 실제로 올바르게 확장되는 적절한 손상 공식을 어떻게 개발하는지 궁금합니다.

처음 두 가지는 :

  • '올바른'이라는 의미를 결정하십시오- '올바른 피해'에 대한 아이디어는 무엇입니까?
  • '규모'가 무엇을 의미하는지 결정하십시오. 어떤 값이 변경 될 것이며, 그러한 변경에 어떤 영향을 미치겠습니까?

그 사실을 알고 나면 BlueRaja가 그의 답변 에서 언급 한 수학 공식을 사용하기에 충분한 정보가 있습니다 . '적절한'손상 공식과 같은 것은 없다는 것을 기억하십시오. 플레이어가 원하는 경험의 유형에 맞게 디자인과 일치합니다.


이것은 매우 도움이되지 않는 의견입니다. 그것은 "모름"으로 요약되며 그 때문에 모든 사람의 시간 낭비입니다. 삭제 신고
Krythic

1

매우 간단한 공식을 찾고 있다면 다음을 수행하십시오.

(이것은 공식에 대한 아이디어입니다.)

먼저 간단한 공격 공식의 경우 몇 가지 통계 만 필요합니다. 플레이어의 공격 능력치 (이동 유형에 따라 힘 또는 마법 일 수 있음)

그런 다음 MovePower라는 변수를 만듭니다. 이것은 움직임에 따라 달라지며, 움직임이 좋을수록 MovePower가 더 좋습니다. 내 공식의 경우 일반적인 "공격"명령의 MovePower는 5입니다.

그런 다음 방어를 백분율 기반 통계로 만듭니다 (물론 피해를 100 % 방어 할 수는 없습니다)

그리고 공격 단계에서 공격 능력에 이동 능력을 곱하고 적 방어력에 따라 피해를 제거하십시오! 단순한!

또한 이동에 추가 효과 (바이오, 중독 독)가있는 경우 이동이 (정확도)에 도달하는 경우와 같이 다른 수정자를 갖도록 선택할 수 있으며, (정확도)에 대한 피해 업그레이드 / 다운 그레이드가 있습니다. 스탯을 바꾸는 움직임. 재미있게 보내세요!


갑옷을 백분위 수 문제로 피하는 다른 옵션 (따라서 그 값이 동일하게 보이도록 허용)은 승수가되는 비교로 갑옷 대 손상을 계산하는 것입니다. Ln (atk / def)과 같은 것이 기본입니다. 이를 통해 방어 장갑 통계는 시간이 같은 방식으로 진행되면서 확장 될 수 있습니다. 데미지와 아머 스탯이 동일하고 외삽 할 때 기본 원하는 데미지 범위를 얻는 방법을 알아 봅니다. 이로 인해 "방어력 회피"공격을하려면 속임수가 필요하지만 이는 창의성에 대한 부분입니다.
Aviose

1

본질적으로, 당신은 두 가지를 알아 내야합니다.

  1. 많은 수의 계산을 올바르게 수행하는 방법.
  2. 공격력이 약하고 강한 적에게 작용하는 방식

1

사용자 double또는 큰 라이브러리를 사용할 수 있습니다. 클릭 / 유휴 게임에서와 같이 많은 수의 계산을 수행하는 경우는 종종 그러한 큰 수의 라이브러리에 의존합니다. 귀하의 경우에는 숫자가 상대적으로 작으므로 64 비트 부동 소수점을 사용하면 필요한 유연성을 얻을 수 있습니다.

2

게임이 어떻게 동작하기를 원하십니까? 몇 가지 예 :

  • 한 가지 접근 방식은 ATK무기에 따라 알려진 피해 등급의 주사위를 명중하고 굴리는지를 결정하는 데 사용 하는 것입니다 (예 : 긴 칼 1d8, 양손 칼 1d10, 단검 1d4). HP가 계속 성장할 수 있다면 놀라운 확장 성을 갖지 못할 것입니다. 당신이 사용하는 경우 ATK문자가 되든 안되든 있는지 확인하려면, 당신은 성공적인 히트 후 다른 투사 할 수 있습니다 ATK* 치명타를 결정하는 80 %.
  • 피해 공식을 사용하려는 경우 피해 공식은 (ATK - DEF) +/- 20%World 's End (RPG 전략 게임)에서하는 것처럼 간단 할 수 있습니다 . 이것은 강한 상대에 대한 공격 DEF은 전혀 피해를 줄 수 없음을 의미합니다. instace를 들어 ATK = 10, ENEMY DEF = 12, (ATK - DEF) = -2그리고 그것은 또한 약간 낮은 데프 대 높은 수준의 공격은 더 이상 HP 증가와 함께 전투를하고 잠재적으로, 약간의 손상을 할 수 있다는 것을 의미한다. 로 예를 들어 ATK = 1010, ENEMY DEF = 1005피해는이 경우 피해는 지금 크게 증가 할 것이다 5. 것이다 ATK작은 비율로 증가한다. 예를 들어 ATK = 1055% 5 만 증가하면 900 % 더 많은 피해를 ATK줍니다.
  • 이를 피하기 위해 다음과 같은 작업을 수행 할 수 있습니다. ATK / DEF * WEAPON_DAMAGE이 기능은 ATK또는 확장 될 때 점진적으로 확장 DEF되며 약한 공격자가 강한 생물에게 피해를 줄 수 있습니다 DEF.

tl; dr 당신은 책임감있게 숫자를 다루고 게임이 다른 상황에서 어떻게 행동하기를 원하는지 알아 내야합니다. 자신에게 물어볼 몇 가지 질문 :

  1. 그 보스 / 미니언을 물리 치기 위해 얼마나 많은 공격 (턴)이 필요합니까?
  2. 다른 기술, 버프, 디버프가 x전투에 어떤 영향을 미칩니 까? 희망이 없다면, 승리가 y%적거나 더 가능성이 높아야 합니까?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.