ทรัพยากรสถาปัตยกรรมระบบการต่อสู้ JRPG แบบเลี้ยวตาม


9

หลายเดือนที่ผ่านมาฉันกำลังยุ่งกับการเขียนโปรแกรม 2D JRPG (RPG สไตล์ญี่ปุ่น) ใน C ++ โดยใช้ห้องสมุด SDL โหมดการสำรวจทำมากหรือน้อย ตอนนี้ฉันจัดการกับโหมดการต่อสู้

ฉันไม่สามารถหาแหล่งข้อมูลเกี่ยวกับวิธีการจัดโครงสร้างระบบการต่อสู้ JRPG แบบคลาสสิกได้ ทั้งหมดที่ฉันพบคือการอภิปรายเกี่ยวกับสูตรความเสียหาย ฉันได้ลองใช้ Google ค้นหากระดานข้อความของ gamedev.net และรวบรวมข้อมูลผ่าน C ++ - คำถามที่เกี่ยวข้องที่นี่ใน Stack Exchange ฉันได้ลองอ่านซอร์สโค้ดของ RPG แบบโอเพ่นซอร์สที่มีอยู่แล้ว แต่หากไม่มีแนวทางบางอย่างมันก็เหมือนกับการพยายามหาเข็มในกองหญ้า

ฉันไม่ได้มองหาชุดของกฎอย่าง D&D หรืออะไรทำนองนั้น ฉันกำลังพูดถึงการออกแบบโค้ดและโครงสร้างวัตถุอย่างแท้จริง ระบบการต่อสู้ขอให้ผู้เล่นป้อนข้อมูลโดยใช้เมนู ถัดไปที่เทิร์นการต่อสู้จะถูกดำเนินการในฐานะวีรบุรุษและศัตรูดำเนินการกระทำของพวกเขา

ใครช่วยชี้ฉันในทิศทางที่ถูกต้องได้ไหม ขอบคุณล่วงหน้า.


4
ไม่มีกฎที่กำหนดยากทั่วไป เกมทุกเกมมีวิธีการของตนเองยกเว้นว่าเราพูดถึงดันเจี้ยนและมังกรที่ได้มาจากกฎ ฉันต้องบอกว่าฉันไม่แน่ใจว่านั่นคือสิ่งที่คุณหมายถึง ทำอย่างละเอียด
Toni

JRPG หมายถึงอะไร?
ashes999

2
ทำไมคุณไม่กำหนดสิ่งแรกที่คุณต้องการให้ผู้เล่นได้สัมผัสจากนั้นเขียนข้อกำหนดการใช้งานตามนั้น
Tetrad

1
@ ashes999 ตัวอย่างคลาสสิกที่มีอิทธิพลมากที่สุดน่าจะเป็นซีรี่ส์ Ultima ตัวอย่างล่าสุดและเป็นที่นิยมอื่น ๆ : ซีรี่ส์ประตู Baldur (BG2 ถือเป็น CRPG ที่ดีที่สุดตลอดกาล) หรือซีรี่ส์ 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.