턴제 JRPG 전투 시스템 아키텍처 리소스


9

지난 몇 달 동안 SDL 라이브러리를 사용하여 C ++로 2D JRPG (일본식 RPG)를 프로그래밍하는 데 바빴습니다. 탐사 모드는 다소 수행됩니다. 이제 전투 모드를 다루고 있습니다.

고전적인 턴제 JRPG 전투 시스템이 어떻게 구성되어 있는지에 대한 자료를 찾지 못했습니다. 내가 찾은 것은 피해 공식에 대한 토론입니다. 인터넷 익스플로러를 시도하고 gamedev.net의 게시판을 검색하고 Stack Exchange에서 C ++ 관련 질문을 크롤링했습니다. 또한 기존 오픈 소스 RPG의 소스 코드를 읽으려고 시도했지만 일종의 가이드가 없으면 건초 더미에서 바늘을 찾는 것과 같습니다.

D & D 또는 이와 유사한 규칙을 찾고 있지 않습니다. 코드와 객체 구조 디자인에 대해 순수하게 이야기하고 있습니다. 전투 시스템은 메뉴를 사용하여 플레이어에게 입력을 요청합니다. 다음으로 영웅과 적들이 그들의 행동을 수행함에 따라 전투 턴이 실행됩니다.

누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 미리 감사드립니다.


4
일반적으로 정해진 규칙은 없습니다. 우리가 던전과 드래곤에서 파생 된 규칙 세트에 대해 언급하지 않는 한 모든 게임에는 고유 한 방법이 있습니다. 나는 그것이 당신이 의도 한 것인지 확실하지 않습니다. 정교한.
Toni

JRPG가 정확히 무엇을 의미합니까?
ashes999

2
플레이어가 경험하고 싶은 것을 먼저 정의한 다음,이를 기반으로 구현 사양을 작성하지 않겠습니까?
Tetrad

1
@ ashes999 가장 영향력있는 고전적인 예는 아마도 Ultima 시리즈 일 것입니다. 다른 가장 최근의 인기있는 예 : Baldur 's Gate 시리즈 (BG2는 종종 모든 시간 동안 최고의 CRPG로 간주 됨) 또는 The Elder Scrolls 시리즈 (Morrowind, Oblivion, Skyrim).
David Gouveia

1
"전투 시스템은 플레이어에게 메뉴를 사용하여 입력을 요청합니다. 다음으로 영웅과 적들이 그들의 행동을 수행함에 따라 전투 턴이 실행됩니다." 알고리즘을 다루는 것 같습니다. 그래서 ... 정확히 무엇을 찾고 있습니까? 코드를 구성하는 방법에 대한 조언? 또한 " 고전적인 턴제 JRPG 전투 시스템 "이란 무엇입니까? 아시다시피, 고전적인 JRPG가 두 개 이상 있으며, 그 중 다수는 매우 다른 전투 시스템을 가지고 있습니다. 정확히 무엇 을 달성하려고합니까?
Nicol Bolas

답변:


9

나는이 주제에 대해 많은 리소스를 보지 못했지만 내가 찾은 최고의 것은 아마도 다음과 같습니다.

다음과 같이 적 AI에 대한 통찰력을 제공합니다.

AI: Setup
{
   TempVar:TurnsUntilGrenade = 3
   TempVar:GrenadeAmmo = 4
}
AI: Main
{
   If (Stage == 0) Then
   {
      If (TempVar:TurnsUntilGrenade == 0) Then
      {
         If (TempVar:GrenadeAmmo > 0) Then
         {
            Choose Random Opponent with Lowest HP
            Use Hand Grenade on Target
            TempVar:GrenadeAmmo = TempVar:GrenadeAmmo - 1
            TempVar:TurnsUntilGrenade = 3
         } Else {
            Choose Random Opponent with Lowest HP
            Use <Machine Gun> on Target
         }
      } Else {
         Choose Random Opponent
         Use <Machine Gun> on Target
         TempVar:TurnsUntilGrenade = TempVar:TurnsUntilGrenade - 1
      }
   } Else {
      If (TempVar:GrenadeAmmo > 0) Then
      {
         Choose Random Opponent with Lowest HP
         Use Hand Grenade on Target
         TempVar:GrenadeAmmo = TempVar:GrenadeAmmo - 1
      } Else {
         Choose Random Opponent
         Use <Machine Gun> on Target
      }
   }
}
AI: Counter - General
{
   If (Grenade Combatant's HP <= 3 * [Grenade Combatant's Max HP / 4]) Then
   {
      Stage = 1
   } Else {
      Stage = 0
   }
}

이를 통해 적들은 자신이 속한 여러 가지 상태를 관리하기 위해 상태 머신이 필요할 수 있으며 각 상태는 적에게 하드 코딩되거나 스크립팅으로 데이터 기반으로 각 턴을 실행하는 자체 동작을 갖습니다. 언어.

턴 기반 JRPG 간에도 많은 변형이 있으므로 모든 규칙에 대한 규칙 세트는 없습니다. 예를 들어, 모든 당사자 명령을 실행하기 전에 모든 당사자 명령을 발행 하거나 선택 후 즉시 실행할 수 있습니다. 공격 순서는 무작위이거나 속도 통계에 의해 더 자주 결정될 수 있습니다.

그러나 예를 들어, 순전히 턴 기반 전투 시스템을 가지고 있는데, 여기서 모든 파티 명령을 먼저 낸 다음 모든 행동이 턴이 끝날 때 발생합니다. 당신은 다음과 같이 접근 할 수 있습니다 :

  • 전투에 참여한 모든 개체 (플레이어 + 적)를 목록에 저장합니다.
  • 목록에있는 각 플레이어마다 입력을 받아 저장하십시오.
  • 속도 속성별로 엔티티 목록을 정렬하십시오.
  • 목록의 각 엔티티에 대해 플레이어 인 경우 저장된 조치를 실행하고, 그렇지 않으면 현재 상태에 대한 AI 스크립트를 실행하십시오.
  • 선회하고 반복하십시오.

그만큼 전투 역학 자주 묻는 질문은 또한 전투에서 시간 관리에 대한 특히 유용한 정보를 많이 가지고 있습니다. 그러나 불행히도이 시스템 (일명 ATB 또는 Active Time Battle)은 특허를 받았으므로 비슷한 것을 만들 수 없습니다.

편집 최근에는 FF7 구현에 대한 많은 기술 정보를 제공하는 이 웹 사이트 를 찾았습니다 . 불행히도 전투 모듈 섹션은 아직 완전히 작성되지 않은 것 같습니다.

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