Basic Programming กับระบบต่อสู้ใน Final Fantasy 12

final_fantasy_xii_box_art

Final Fantasy XII (12) นั้นมีระบบการต่อสู้ที่แตกต่างจากภาคอื่นๆอย่างสิ้นเชิง โดยส่วนตัวผมเพิ่งได้เล่นจริงๆจังๆจนจบก็ตอนที่ Remastered ลงบน PS4 นี่แหละครับในชื่อ Final Fantasy XII : The Zodiac Age ซึ่งแน่นอนวันนี้เราจะมาพูดถึงระบบต่อสู้ของเกมนี้กัน

Gambits เป็นชื่อของระบบต่อสู้ในเกม Final Fantasy 12 ซึ่งถ้าใครเป็น Programmer มาจะค่อนข้างคุ้นเคยมากเลยครับ เพราะนี่มันเป็น Basic Programming ชัดๆ

qhdvcpy0poow2saaenrr

จากรูปข้างบนนั้นระบบ Gambits นั้นจะเป็นการตั้ง programให้ตัวละครทำ action ต่างๆ ตามเงื่อนไข เช่น ถ้าศัตรูบินอยู่ให้โจมตี  ถ้าทีมเราพลังต่ำกว่า  30% ให้ใช้เวทย์มนต์ฟื้นหลัง ถ้าทีมเราติดพิษให้ใช้เวทย์แก้ผิด เป็นต้น หรือเราเรียกอีกอย่างนึงว่าการตั้งค่า AI (หรือ Bot?)

โดยที่ระบบนี้จะทำงานตามเงื่อนไขจาก บนลงล่าง หมายความว่าถ้าเหตุการณ์เข้าเงื่อนไขแรกก็ทำ action นั้นเลยโดยที่จะไม่ทำเงื่อนไข้ด้านล่างต่อ ซึ่งถือว่าเป็นการจบหนึ่งเทิร์นของตัวละครนั้นๆ

ที่นี้ถ้าเราลองเลือก 3 ตัวแรกมาลองแปลงเป็น Code ง่ายๆกัน มันก็น่าจะเป็นประมาณนี้ครับ

Screen Shot 2560-12-10 at 3.32.40 PM.png

 

if( enemy.IsFlying() ){
 me.Attack(enemy);
}
else if( team.IsHPbelow(30) ){
 let m = team.getIsHPbelow(30);
 me.Curaja(m);
}
else if(team.IsHPbelow(50) ){
 let m = team.getIsHPbelow(50);
 me.Curaga(m);
}

ซึ่งตีความลำดับของ Script ได้ว่า

  1. ถ้าศัตรูบินได้ ตีมันก่อนเลย
  2. ถ้าทีมเรามีคนพลังชีวิตต่ำกว่า 30% ให้ใช้เวทย์ Curaja
  3. ถ้าทีมเรามีคนพลังชีวิตต่ำกว่า 50% ให้ใช้เวทย์ Curaga (ซึ่งเป็นเวทย์ที่ฟื้นพลังชีวิตได้สูงกว่า Curaja)

ก็จะเห็นได้ว่าการเล่นเกม(บางเกม) ก็อาจจะช่วยให้เรารู้จัก Programming ได้นิดหน่อยนะครับสำหรับคนที่ไม่ได้มาสายนี้ แต่สำหรับคนที่เป็น Programmer/Developer ก็ยิ่งทำให้เข้าใจระบบของเกมได้ง่ายขึ้นทำให้เล่นได้ง่ายและสนุกไปกับมันมากขึ้น

 

Final Fantasy X/X-2 HD Remaster กับ Windows architecture

พอดีได้ข่าวว่า Final Fantasy X ได้ทำการ Port มาลง PC ก็เลยลองเล่นดูครับ เพราะภาคนี้ผมเล่นตอน PS2 ได้ประมาณ 30-40% แล้วก็ไม่ได้เล่นต่อเนื่องจากติดทำ Project จบสมัยเรียน เลยขายเครื่องทิ้งไปเพราะกลัวเรียนไม่จบ 🙂

แต่ที่เขียนถึงวันนี้คงพูดถึงเรื่อง Windows architecture กันนิดหน่อย

สืบเนื่องมาจากว่า ผมเล่นเกมนี้ไปได้ประมาณไม่นานเช่น 10-20นาที โปรแกรมก็ Crash ซึ่งมาจากขั้นตอนที่ไม่แน่นอน หรือเรียกว่า Random Crash นั่นเอง

ซึ่งการ Crash ของ Application นั้นก็หมายถึงการที่โปรแกรมหยุดทำงานด้วยสาเหตุใดสาเหตุหนึ่งแล้วโปรแกรมก็เด้งออกอัตโนมัติทิ้งให้เราอึ้งไปหลายวิ..

As User

จากการที่เราเป็น End User ของเกมนี้ก็ แน่นอนครับ ติดปัญหาเราก็ต้องลองหาใน Google ดูก็ก่อนเลย ซึ่งก็พบว่ามีหลายๆคนเจอปัญหาเดียวกัน

http://steamcommunity.com/app/359870/discussions/0/364042063114641626/
http://steamcommunity.com/app/359870/discussions/0/364042262885080038/
http://steamcommunity.com/app/359870/discussions/0/364042262879682906/

ซึ่งผมลองทำตาม workaround ต่างๆแต่ก็ยังไม่สำเร็จ เล่นไปสักแป๊บนึงเกมก็เด้งออกมาอีกเช่นเคย

As Developer

แต่ด้วยความที่เราก็ Developer ผมก็ตัดสินใจลอง Investigate ปัญหานี้ดูด้วยตัวเอง

สิ่งแรกที่ผมเห็นคือเวลามัน Crash ตัวไฟล์ CoreDump.dmp จะถูกสร้างขึ้นมา

coredump.png

ลองเปิดด้วย Visual Studio เพื่อทำการ Analyze Dump ไฟล์ได้ข้อมูลน่าสนใจตามนี้

dumpinfo

  1. Process นี้เป็น x86 ก็คือ 32 Bits
  2. Crash ที่เกิดขึ้นมี Exception เกี่ยวกับ Virtual Address หรือ Virtual Memory นั่นเอง

พอรู้แบบนี้ผมก็ลองเปิด Process Explorer ดูเลยครับว่าเวลาเล่นเกมนี้ มันใช้ Memory ขนาดไหน ปรากฎว่า…

ชัดเจนครับแค่เปิดเกมมา Virtual Memory ก็1.9GB แล้ว

screen

memreach

นี่คือสาเหตุของปัญหานี้ครับ..เนื่องจากว่า เกม(Process) นี้ถูก Compile ด้วย 32 Bits ทำให้สามารถใช้งาน Memory Space ได้ 2^32 bytes หรือประมาณคร่าวๆได้ 4GB (4,000,000KB โดยประมาณ)

แต่เนื่องจาก Windows Architect นั้นได้ทำการแบ่ง Memory ไว้เป็น 2 ส่วนคือ Kernel space กับ Application space (User space) อย่างละ 2GB

ซึ่งง่ายๆก็คือ Applicatoin จะใช้ได้ 2GB เท่านั้น ทำให้ถ้าใช้เกินโปรแกรมก็จะ Crash (ถ้าจัดการไม่ดี)

วิธีแก้ปัญหา

Windows นั้นได้มี Feature ที่เรียกว่า Large Address Aware ซึ่งทำให้ Application สามารถใช้งาน Memory ได้มากกว่า 2GB นั่นเอง

Tool ตัวนี้คือ Editbin.exe ซึ่งติดตั้งมากับ Microsoft Visual Studio อยู่แล้วครับ

พิมพ์ไปเลยครับตามนนี้

editbin /largeaddressaware “D:\Games\Final Fantasy X\FFX.exe”

editbin.png

เราก็จะได้ FFX.exe ตัวใหม่ที่ทำการเปิด Feature Large Address Aware แล้ว และเมื่อลองทดสอบดู Process ของเกมนี้ก็สามารถใช้ Memory ได้เกิน 2GB แล้ว

final_mem

และสุดท้ายตั้งแต่ผมแก้มาก็เล่นได้ 4-5 ชั่วโมงได้ไม่เจออาการ Crash/Freeze อีกเลยครับ 🙂

 

English:

For english guys (if any), I found one potential workaround to solve the random crash/freeze issues on FFX HD Remaster on PC. I think the issue is around memory reach limit of 32 Bits process which is 2GB for application space(from totally 4GB  – kernel and app/user space) which FFX has been built as 32 Bits app.

so once you configured the game with high graphic settings. it uses higher memory and might be able to trigger the issue more eaiser.

we can use the tool called “editbin.exe” which is the small utility to allow us to change the flag of the process which is “/largeaddressaware” that can help to incrase the app/user space of memory up to 3/4GB based on OS. but at least it will be higer than 2GB as system default.

you can find “editbin” from Visual Studio.

and after I applied this flag. I can play the game for 4-5 hours for 2 days without any crash. hope this can help for some.

 

HAPPY GAMING…

เพลงประกอบในเกม…สิ่งที่ทำให้เกมเป็นมากกว่าความสนุก

เนื่องจากผมเป็นคนที่ชอบเล่นเกมที่เน้นเนื้อเรื่องมากกว่าความสวยงามของภาค แต่อีกด้านหนึ่งของเกมที่ผมมองว่ามันมีอะไรที่มากกว่าความสนุก นั่นก็คือเพลงประกอบที่ใช้บรรเลงในเกมในช่วงเหตุการณ์ต่างๆ ซึ่งจะทำให้ผู้เล่นได้รู้สึกอินไปกับเรื่องราวนั้นๆ

มาดูกันว่าแต่ละเพลงที่ผมชอบมีอะไรบ้าง (ไม่ได้เรียบลำดับนะครับ) 🙂

1. Nier – Ashes of Dreams

เพลงจากเกม Nier ที่เนื้อหาของเกมก็ดูมืดหม่น ชื่อเพลงก็ฟังดูแล้วก็จะเศร้าแปลว่า “เถ้าถ่านของความฝัน” แค่อินโทรด้วยเสียงเปียโนและเนื้อเรื่องภาษาฝรั่งเศสที่ผมฟังไม่ออกแต่ก็รู้สึกว่าเพราะและเศร้า

2. Xenoblade Chronicles – Main Theme

เพลงเปิดเกมที่เริ่มบรรเลงตอน Title ที่ผมเปิดครั้งแรกตอนเล่นเกมนี้ครั้งแรกก็ทำให้ต้องเปิดค้างไว้แล้วฟังเพลงจนจบไป 3 รอบก่อนจะได้เข้าเกมครั้งแรก
แบบว่าฟังครั้งแรกก็ประทับใจกับความเพราะแบบไม่มีเงื่อนไขเลย…

เปียโนกับไวโอลิน ช่างเป็นอะไรที่เข้ากันได้จริงๆ

3. Granado Espada – Granado Espada theme

เพลงเปิดเกม Online ยอดฮิตอีกเกม ส่วนตัวแล้วผมไม่เคยเล่นเกมนี้เลย แต่เคยเห็นภาพตัวอย่างแล้วสนใจดีเลยเปิด youtube ไปดูแล้วก็พบว่า เพลงเค้าแต่งไม่ธรรมดาจริงๆ

เนื่องจากว่า Theme ของเกมนี้จะออกแนวยุโรปยุคเรเนซองค์และบารอค ทำให้เพลงจะมีกลิ่นอายของแนวคลาสสิค
และแน่นอนเพลงนี้ก็เปียโนมาซะหวานเลย

4. The Last Story – Main Theme

เพลงเปิดอีกแล้ว กับ 1 ในสุดยอดเกม RPG ส่งท้ายเครื่อง wii
เพลงเปิดเกมของเกม RPG ส่วนมากจะเน้นแนวๆ เศร้าๆและดู EPICๆ ซึ่งผมล่ะชอบจริงๆ

5. The Legend of Zelda: Skyward Sword – Ballad of the Goddess

บทเพลงแห่งเทพธิดา เพลงประจำเกม Zelda ของภาคนี้ ที่ฟังแล้วรู้สึกฮึกเฮิมและ EPIC มากๆ

Dragon Quest XI กับ Multi-Platforms

343f1b5d3e13fba55d649d7162728b13

เป็นอีก 1 วันของวงการเกมที่เป็นข่าวใหญ่ที่เดียวกับการที่เกมสุดเทพของ JRPG (Japanese Role Playing Game)  นั่นก็คือ Dragon Quest XI ประกาศลงทั้ง Sony PS4 และ Nintendo 3DS โดย SQUARE ENIX

ถ้าเรามาวิเคราะห์ดูแล้วนี่คือทางรอดของธุรกิจเกมทุกวันนี้ในญี่ปุ่นที่แนวโน้มการเล่นเกมของชาวญี่ปุ่นได้เปลี่ยนไปอย่างมากหลังจากที่ Smart Phone ได้เข้ามามีบทบาทให้วงการเกม

อย่างที่หลายๆคนคนรู้กันดีว่า เครื่องเล่นเกมแบบเฉพาะด้าน (Game Console) นั่นได้เข้าสู่ภาวะถดถอย เครื่องเกมรุ่นล่าสุดอย่าง PS4, Wii U  นั้นก็มียอดขายต่อสัปดาห์น้อยลงกว่ายุคก่อนหน้านั้นเป็นอย่างมาก

ซึ่งการที่เกมฟอร์มใหญ่อย่าง Dragon Quest XI นั้นประกาศลง 2 เครื่อง ของ 2  ค่ายเป็นทางเลือกที่ดูแปลก แต่ดูแล้วเป็นทางออกที่ดีทีเดียว

PS4 นั้นดูดีมีอนาคตเพราะมีเกมดังๆประกาศการสนับสนุนเยอะมาก
3DS  เครื่องเกมพกพาที่ยอด   users เยอะที่สุดในญี่ปุ่น

การทำเกมลง 2 เครื่องนี้แบบ Multi-platforms ย่อมมีโอกาสขายมากขึ้นนั่นเอง