Tài nguyên kiến ​​trúc hệ thống chiến đấu theo lượt của JRPG


9

Những tháng qua tôi đã bận rộn lập trình một 2DPGPG (RPG theo phong cách Nhật Bản) trong C ++ bằng thư viện SDL. Chế độ thăm dò ít nhiều được thực hiện. Bây giờ tôi đang giải quyết chế độ chiến đấu.

Tôi đã không thể tìm thấy bất kỳ tài nguyên nào về cách một hệ thống chiến đấu JRPG theo lượt cổ điển được cấu trúc. Tất cả tôi tìm thấy là các cuộc thảo luận về công thức thiệt hại. Tôi đã thử googling, tìm kiếm bảng tin của gamedev.net và thu thập thông tin qua các câu hỏi liên quan đến C ++ tại đây trên Stack Exchange. Tôi cũng đã thử đọc mã nguồn của các game nhập vai mã nguồn mở hiện có, nhưng không có hướng dẫn nào đó giống như cố gắng tìm kim trong đống cỏ khô.

Tôi không tìm kiếm một bộ quy tắc như D & D hay bất cứ thứ gì tương tự. Tôi đang nói hoàn toàn về thiết kế cấu trúc đối tượng và mã. Một hệ thống chiến đấu yêu cầu người chơi nhập liệu bằng menu. Tiếp theo lượt chiến đấu được thực hiện khi các anh hùng và kẻ thù thực hiện hành động của họ.

ai đó có thể chỉ cho tôi phương hướng đúng không? Cảm ơn trước.


4
không có quy tắc cứng đặt chung. Tất cả các trò chơi có cách riêng của họ, trừ khi chúng ta nói về ngục tối và quy tắc bắt nguồn từ rồng. Tôi phải nói rằng, tôi không chắc lắm nếu đó là ý bạn. Kỹ lưỡng.
Toni

Bạn có ý nghĩa gì bởi JRPG chính xác?
tro999

2
Tại sao trước tiên bạn không xác định những gì bạn muốn người chơi trải nghiệm, sau đó viết một thông số triển khai dựa trên điều đó?
Tết

1
@ as999999 Ví dụ cổ điển có ảnh hưởng nhất có lẽ là loạt Ultima. Các ví dụ gần đây và phổ biến khác: sê-ri Cổng hói (BG2 thường được coi là CRPG hay nhất mọi thời đại) hoặc sê-ri The Elder Scrolls (đặc biệt là Morrowind, Oblivion, Skyrim vì sự nổi tiếng của họ).
David Gouveia

1
"Một hệ thống chiến đấu yêu cầu người chơi nhập liệu bằng các menu. Tiếp theo, lượt chiến đấu được thực thi khi các anh hùng và kẻ thù thực hiện hành động của họ." Bạn dường như có một xử lý về thuật toán. Vậy ... chính xác thì bạn đang tìm kiếm điều gì? Tư vấn về cách cấu trúc mã của bạn? Ngoài ra, " hệ thống chiến đấu JRPG theo lượt cổ điển " là gì? Bạn biết đấy, có nhiều hơn một JRPG cổ điển, và nhiều trong số chúng có hệ thống chiến đấu rất khác nhau. Vì vậy, chính xác những gì bạn đang cố gắng để thực hiện?
Nicol Bolas

Câu trả lời:


9

Tôi chưa bao giờ thấy nhiều tài nguyên về chủ đề này, nhưng tài nguyên tốt nhất tôi tìm thấy có lẽ là:

Nó cung cấp cái nhìn sâu sắc về kẻ thù AI ​​như thế này:

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
   }
}

Với điều này, bạn có thể thấy rằng kẻ thù của bạn có thể sẽ cần một cỗ máy trạng thái để quản lý các trạng thái khác nhau mà chúng có thể ở và mỗi trạng thái sẽ có hành vi riêng để thực hiện mỗi lượt, được mã hóa thành kẻ thù hoặc điều khiển dữ liệu theo kịch bản ngôn ngữ.

Có rất nhiều biến thể ngay cả giữa các JRPG dựa theo lượt, vì vậy không có bộ quy tắc nào cho tất cả chúng. Chẳng hạn, bạn có thể đưa ra tất cả các lệnh của bên trước khi bất kỳ lệnh nào diễn ra hoặc chúng có thể diễn ra ngay sau khi chọn. Thứ tự tấn công có thể là ngẫu nhiên, hoặc thường được xác định bởi chỉ số Tốc độ.

Nhưng ví dụ, giả sử bạn có một hệ thống chiến đấu theo lượt hoàn toàn, trong đó bạn ban hành tất cả các lệnh của nhóm trước, và sau đó tất cả các hành động xảy ra vào cuối lượt. Bạn có thể tiếp cận nó như:

  • Lưu trữ tất cả các thực thể (người chơi + kẻ thù) tham gia vào trận chiến trong một danh sách.
  • Đối với mỗi người chơi trong danh sách nhận đầu vào và lưu trữ nó.
  • Sắp xếp danh sách thực thể theo thuộc tính Tốc độ.
  • Đối với mỗi thực thể trong danh sách, nếu đó là một người chơi thực hiện hành động được lưu trữ, nếu không thì chạy tập lệnh AI cho trạng thái hiện tại.
  • Lần lượt và lặp lại.

Câu hỏi thường gặp về Cơ học chiến đấu cũng có rất nhiều thông tin hữu ích, đặc biệt là về quản lý thời gian trong các trận chiến. Nhưng thật không may, hệ thống này (còn gọi là ATB hoặc Active Time Battle) được cấp bằng sáng chế để bạn không thể làm bất cứ điều gì tương tự.

EDIT Gần đây tôi cũng tìm thấy trang web này cung cấp nhiều thông tin kỹ thuật về việc triển khai FF7. Thật không may, các phần mô-đun chiến đấu dường như chưa được viết hoàn toàn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.