สูตรคำนวนต่างๆ ที่ใช้ทำเกม RPG ตอนนี้

รู้สึกไม่ได้เขียนนาน เลยอยากเขียนอะไรหน่อย ตอนนี้ ทำระบบเกมของตัวเองอยู่ เป็นเกมแบบ ATB Turn base RPG ก็เลยเอาส่วนหนึ่งของเกมที่ทำไปมาเขียน คือเรื่องของสูตรคำนวนต่างๆ

ตอนแรก ผมก็เริ่มทำง่ายๆ โดยมีค่า Stats ทั่วไปคือ HP, ATK, DEF และ SPD วิธีการคำนวนก็ง่ายๆ คือ เมื่อตัวละครโจมตีใส่ศัตรู HP ก็จะลดเท่ากับ Damage ที่คำนวนโดยใช้ ATK -DEF ถ้า HP เหลือ 0 ตัวละครก็จะตาย ส่วน SPD ใช้ในฉากต่อสู้ ตัวตอนสู้ มันจะมีเกจเวลาวิ่ง ซึ่งความเร็วของเกจนี้ใช้ค่านี้ในการคำนวน ถ้าเกจเต็ม ตัวละครก็จะได้โจมตี ตัวละครที่มีค่านี้มากกว่าตัวละครอื่นจะได้โจมตีบ่อยกว่า

ต่อมาผมต้องการเพิ่มความหลากหลายให้กับตัวละคร โดยแบ่งประเภทของการโจมตีเป็นแบบกายภาพ (Physical) และเวทย์มนต์ (Magical) ก็เลยแบ่ง ATK, DEF เป็น PATK, PDEF, MATK และ MDEF เวลาคำนวน Damage ก็เปลี่ยนเป็น (PATK-PDEF)+(MATK-MDEF) ทีนี้เวลาทำตัวละครนักรบที่เน้น Stats กายภาพ เวลามันโจมตีนักเวทย์ที่เน้น Stats ทางเวทย์ Damage ก็จะสูงกว่า โจมตีนักรบด้วยกัน ขณะที่ถ้านักเวทย์โจมตีนักรบก็จะมี Damage สูงกว่า โจมตีนักเวทย์ด้วยกันนั่นแหละ

ผมออกแบบให้ตัวละครมีความสามารถในการหลบหลีก (Evasion) และความแม่นยำในการโจมตี (Accuracy) ต่างกันด้วย สูตรในการคำนวนอัตราการหลบการโจมตี (Evade Chance) เท่ากับ (ACC-EVA)/ACC ค่านี้คำนวนออกมาต้อง ≥ 0 และ ≤ 1 แต่โดยส่วนตัวผมกำหนด ค่านี้เป็น 0.05 ถ้าค่านี้ < 0 และ 1 ถ้า >1 แล้วสุ่มตัวเลข 0–1 ถ้าค่าที่สุ่มได้ ≤ Evade Chance แสดงว่าตัวละครสามารถหลับการโจมตีได้

นอกจากนี้ยังมีการ Critical Attack ก็จะมี Critical Chance และ Critical Damage Rate ค่าของ Critical Chance ต้อง ≥ 0 และ ≤ 1 ซึ่งค่านี้จะถูกกำหนดไว้เหมือนกันทุกตัวละคร แต่จะเพิ่มหรือลดตามอาวุธที่สวมใส่ เวลาใช้งานก็สุ่มตัวเลข 0–1 ถ้าค่าที่สุ่มได้ ≤ Critical Chance แสดงว่าตัวละครโจมตีแบบ Critical Attack ซึ่งจะมี Damage = Attack Damage * Critical Damage Rate

ส่วนการคำนวนค่า Stats ในแต่ละเลเวล ใช้วิธีกำหนด ค่าตอนเลเวล 1 และ เลเวลสุดท้ายเท่านั้น แล้วใช้สูตร Current = Min+{(Max-Min)*{[(Current Level-1)/(Max Level-1)]^Growth Factor}} Growth Factor คือค่าที่จะกำหนดลักษณะการเติบโตของ Stats ในแต่ละเลเวลของตัวละคร ค่ามันเป็น 1 รูปกราฟก็จะเป็นแบบ Linear คือแต่ละเลเวลมีอัตราเติบโตเท่าๆ กัน แต่ถ้าไม่ก็จะเป็นแบบ Exponential หรือ Cubic (https://en.wikipedia.org/wiki/Exponential_growth) ซึ่งแต่ละเลเวลมีอัตราเติบโตไม่เท่ากัน อาจจะค่อยๆ โตตอนเลเวลแรกๆ แล้วโตอย่างรวดเร็วตอนเลเวลท้ายๆ ก็ได้

ตอนที่ผมทำก็มีเท่านี้ แต่ตอนใช้จริงผมอาจตัดให้เหลือ Damage ประเภทเดียว ตัด Evasion / Accuracy ก็ได้ เพื่อลดปริมาณข้อมูลที่ต้องกำหนดให้แต่ละตัวละคร สูตรที่ผมใช้แต่ละเกมอาจมี Stats คล้ายๆ กันกับเกมอื่น แต่คงไม่ได้คำนวนเหมือนกันเป๊ะ ส่วนตัวผมสูตรพวกนี้มันเป็นการคำนวนอย่างง่ายๆ ผมเคยเปิด Wiki ของเกมอื่น สูตรคำนวนโคตรงง ไม่รู้ตัวเลขนู้น ตัวเลขนี้มายังไง มีพล็อตกราฟให้ดูแต่ผมก็ไม่ได้ศึกษามันจนเข้าใจ Wiki เกมที่ลงรายละเอียดของสูตรคำนวนพวกนี้แบบครบสุดๆ ก็มี DotA2, Path of Exile, Ragnarok Online ใครสนใจก็ลองศึกษาดู 😛