1 คะแนน โดย GN⁺ 1 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • OUO เป็นโปรเจกต์ที่ทำวิศวกรรมย้อนกลับเดโมเซิร์ฟเวอร์ Ultima Online ปี 1998 แบบสมบูรณ์ โดยถอดประกอบไบนารี MSVC x86 ราว 5,000 ฟังก์ชัน แล้วแปลงเป็น C99 ที่พกพาได้
  • UoDemo.exe เป็นเดโมแบบสแตนด์อโลนที่รวมอยู่ในรีลีสแรกของ Ultima Online: The Second Age และบรรจุทั้งไคลเอนต์กับโค้ดและข้อมูลเซิร์ฟเวอร์ทั้งหมดที่พอร์ตมาบน Windows ไว้ด้วย
  • แต่ละฟังก์ชันถูกเทียบกับไบนารีต้นฉบับในระดับคำสั่ง โดยมีการจัดชั้นคลาสและเลย์เอาต์ vtable ให้ตรงกัน ก่อนจะแปลงด้วยมือเพื่อคง control flow, เลย์เอาต์ struct และแขนงการทำงานให้เหมือนต้นฉบับ
  • ชุดที่กู้คืนมาใกล้เคียงกับโค้ดเซิร์ฟเวอร์ Ultima Online ที่เปิดใช้งานจริงในช่วงกลางปี 1998 แต่มีการแก้ ปัญหาด้านเสถียรภาพ เช่น crash, overflow และตัวแปรที่ไม่ได้ initialize รวมถึง ปัญหาด้านเกมเพลย์ เช่น การเพิ่มสกิลและความหนาแน่นของการเกิดมอนสเตอร์ พร้อมติดแท็กกำกับไว้
  • เดโมดั้งเดิมรองรับเฉพาะไคลเอนต์ 1.25.33 แต่ชุดที่กู้คืนมารองรับไคลเอนต์ ตั้งแต่ 1.25.30 ถึง 5.0.9.1 ไม่ว่าจะเข้ารหัสหรือไม่ก็ตาม และกำลังขอไฟล์ข้อมูลเซิร์ฟเวอร์ช่วงปี 1997~2003 เพิ่มเติม

ที่มาและขอบเขตของไฟล์เดโม

  • แต่ละฟังก์ชันถูกเทียบกับไบนารีต้นฉบับในระดับคำสั่ง และงานที่ทำแบบเป็นช่วง ๆ ตลอด 10 ปีก็สามารถปิดงานได้ในที่สุดด้วยความก้าวหน้าของ LLM ในช่วงหลัง
  • UoDemo.exe มีวันที่เป็น 1998-09-02 และข้อมูลเซิร์ฟเวอร์ถูกดึงมาจากเซิร์ฟเวอร์ที่เปิดให้บริการจริงเมื่อ 2 มิถุนายน 1998
  • มีบางฟีเจอร์ที่ถูกทำเป็น stub เพื่อใช้กับเดโม และแผนที่ที่เล่นได้ถูกย่อเหลือเพียงเกาะ Ocllo แต่ส่วนที่เหลือคือโค้ดเซิร์ฟเวอร์ปฏิบัติการจริงที่รันอยู่บน Ultima Online ช่วงกลางปี 1998
  • Ultima Online เป็น MMORPG ปี 1997 ที่พัฒนาโดย Origin Systems Inc. และเป็นหนึ่งใน MMORPG ยุคแรกที่ประสบความสำเร็จเชิงพาณิชย์
  • ไคลเอนต์รันบน Windows ส่วนเซิร์ฟเวอร์หรือ “shards” รันอยู่บนเครื่อง Solaris หลายเครื่อง และแผนที่ถูกแบ่งตามภูมิภาค
  • เดโมมีเควสต์ง่าย ๆ ให้ฆ่ามังกรบนเกาะ Ocllo และออกแบบมาเพื่อให้ได้ลองระบบหลักของเกม เช่น บทสนทนา การค้า และการต่อสู้
  • แม้จะมี UO server emulator หลายตัวนำบางส่วนของเดโมนี้ไปใช้ซ้ำ แต่จนถึงตอนนี้ยังไม่เคยมีใครทำวิศวกรรมย้อนกลับแบบสมบูรณ์
  • UoDemo.exe ถูกคอมไพล์ด้วย Microsoft Visual C++ 5.0 หรือ Visual Studio 97 และมุ่งเป้าไปที่ C++ สำเนียงก่อนยุค C++98

วิธีทำวิศวกรรมย้อนกลับ

  • การถอดประกอบและการคาดเดาสัญลักษณ์

    • ใช้ radare2 สำหรับการถอดประกอบ
    • ชื่อสัญลักษณ์อนุมานจากไคลเอนต์ UO เวอร์ชัน Linux แบบ experimental รุ่น 1.25.37 ที่มี C++ symbol รวมอยู่
  • การแปลงเป็น C99 ด้วยมือ

    • แต่ละฟังก์ชันถูกแปลเป็น C99 ด้วยมือ โดยคง control flow, เลย์เอาต์ struct และแขนงการทำงานให้เหมือนกับไบนารีต้นฉบับ
    • จุดที่แตกต่างกันคือการแก้บั๊กจริงของเดโมหรือการปรับให้เข้ากับแพลตฟอร์ม ซึ่งมีการระบุไว้ในซอร์ส
  • วิธีตรวจสอบความถูกต้อง

    • นำบิลด์ C ไปถอดประกอบด้วย r2 อีกครั้งแล้วเทียบกับต้นฉบับ
    • ฟังก์ชันจะถูกทำเครื่องหมายว่าเสร็จสมบูรณ์ก็ต่อเมื่อผลลัพธ์ทั้งสองตรงกัน
    • helper function ใช้เฉพาะกับแพตเทิร์น inline ที่ซ้ำ ๆ และจะใช้ก็ต่อเมื่อสามารถขยายกลับเป็นโค้ดเดียวกับเวอร์ชัน inline ได้เท่านั้น
  • การกู้คืนลำดับชั้นคลาส

    • งานที่สำคัญที่สุดในช่วงแรกคือการทำให้ลำดับชั้นคลาสตรงกันอย่างแม่นยำ
    • ลำดับชั้นหลักคือ CEntity (0x10) -> CResourceEntity (0x1C) -> CItem (0x50) -> CContainer (0x5C) -> CMobile (0x37C) -> CPlayer (0x458)
    • virtual dispatch ทำผ่านสล็อตใน vtable เช่น vtable[0x18] คือ IsPlayer, [0xD0] คือ IsMobile, [0xE4] คือ IsNPC
    • เมื่อเลย์เอาต์นี้ลงตัวแล้ว ไบนารีส่วนใหญ่ก็สามารถแปลได้ค่อนข้างตรงไปตรงมา

ผลลัพธ์การกู้คืนและความต่างจากต้นฉบับ

  • ผลลัพธ์ที่ได้เกือบจะเป็นสำเนาที่สมบูรณ์แบบของเซิร์ฟเวอร์ Ultima Online ปี 1998 แต่ยังมีความต่างบางส่วน
  • มีการแก้ ปัญหาด้านเสถียรภาพ เช่น crash, overflow และตัวแปรที่ไม่ได้ initialize เมื่อเทียบกับโค้ดต้นฉบับ
  • ปัญหาด้านเกมเพลย์ อย่างการเพิ่มสกิล ทิศทางของ fame/notoriety และความหนาแน่นของการเกิดมอนสเตอร์ก็ได้รับการแก้ไข
  • การแก้ไขแต่ละจุดมีแท็กกำกับในซอร์ส เพื่อให้ผู้ที่เทียบกับ UoDemo.exe ตรวจสอบได้ชัดเจนว่าอะไรเปลี่ยนไปและเพราะเหตุใด
  • ฟีเจอร์บางอย่างอย่างระบบ spawn และระบบ decay อยู่ในสภาพเสียหาย และอาจถูกปิดบางส่วนหรือทำเป็น stub เพื่อออกเดโม
  • โค้ดของฟีเจอร์เหล่านั้นยังคงอยู่ แต่จุดเรียกใช้งานจริงไม่สามารถเข้าถึงได้ และสามารถทำให้กลับมาทำงานได้เพียงแค่ decompile แยกต่างหากแล้วต่อ dispatch กลับเข้าไปใหม่
  • ข้อมูลบางส่วนหายไป เช่น แผนที่เกมมีเฉพาะเกาะ Ocllo
  • มีการสร้างชุดเครื่องมือเต็มรูปแบบสำหรับจัดการฟอร์แมตข้อมูลเซิร์ฟเวอร์ และประกอบโลกส่วนที่เหลือกลับขึ้นมาอย่างครบถ้วน ทั้งประตู ป้าย ของตกแต่ง teleporter กับดัก หีบ และตำแหน่งเกิดมอนสเตอร์

ระบบนิเวศที่ยังหลงเหลืออยู่

  • ecology system อันโด่งดังที่เลิกใช้ไปแล้วนั้นยังคงอยู่ในโค้ด แม้ว่าการเรียกฟังก์ชันจะถูกตัดขาด
  • มีการต่อระบบผู้ล่า เหยื่อ และสัตว์กินซากกลับเข้าด้วยกันอีกครั้ง ทำให้เห็นหมาป่าไล่กระต่ายหรืออีกากินไอเท็มได้
  • อย่างไรก็ตาม ยังไม่ได้ทำถึงระดับระบบทรัพยากรและการผลิตทั้งหมด เนื่องจากข้อมูลที่แม่นยำมีไม่เพียงพอ
  • วัสดุอ้างอิงที่เชื่อมไว้ประกอบด้วยบทความ UO เรื่อง ecology system ของ Raph Koster และบทความเรื่องระบบทรัพยากรของ UO 1, 2, 3

ฟีเจอร์เพิ่มเติมและความเข้ากันได้ของไคลเอนต์

  • เพิ่มสกิล Meditation, Stealth และ Remove Trap ที่ OSI เพิ่มเข้ามาในเดือนกุมภาพันธ์ 1999
  • ร่องรอยเริ่มต้นของฟีเจอร์เหล่านี้บางส่วนมีอยู่แล้วในโค้ด
  • ฟีเจอร์ใหม่ส่วนใหญ่สามารถเปิดหรือปิดได้ตอนเริ่มต้นผ่านพารามิเตอร์ -features
  • เนื่องจากเดโมเซิร์ฟเวอร์เดิมไม่มีระบบบัญชีเลย จึงมีการนำกลับมาสร้างใหม่ในรูปแบบที่ปรับให้ทันสมัยขึ้นเล็กน้อย โดยคาดเดาจากวิธีที่นักพัฒนาเดิมน่าจะทำไว้
  • เดโมเซิร์ฟเวอร์เดิมรองรับเพียงไคลเอนต์ 1.25.33 แต่ได้ถูกขยายให้รองรับไคลเอนต์ ทุกเวอร์ชันตั้งแต่ 1.25.30 ถึง 5.0.9.1 หรือถึงวันที่ 2007-03-27 ไม่ว่าจะเข้ารหัสหรือไม่ก็ตาม
  • เนื่องจากตลอดหลายปีมีรูปแบบการเข้ารหัสที่แตกต่างกันอย่างสิ้นเชิงถึงห้าแบบ จึงต้องทำวิศวกรรมย้อนกลับแต่ละแบบจากไบนารีของไคลเอนต์

ต้นฉบับ 32 บิตและบิลด์เริ่มต้น 64 บิต

  • ไบนารีต้นฉบับเป็น 32 บิต แต่บิลด์เริ่มต้นในปัจจุบันมุ่งเป้าไปที่ 64 บิต
  • ลำดับชั้นคลาสถูกจำลอง inheritance แบบ C++ ดั้งเดิมด้วยการฝัง struct ของภาษา C
  • วิธีนี้ทำให้สามารถส่ง CMobile* ไปยังจุดที่ต้องการ CContainer* ได้
  • เพราะความกว้างของ pointer ที่มากขึ้นบน 64 บิตอาจทำให้ตำแหน่ง field ที่สืบทอดมาขยับไป จึงมีการใส่ padding ให้บาง struct โดยตั้งใจ เพื่อให้ inheritance และเลย์เอาต์ vtable ตรงกับไบนารีทั้งบน 32 บิตและ 64 บิต

ทรัพยากรที่เผยแพร่สู่สาธารณะ

  • https://github.com/draxinar/ouo: โค้ด
  • https://github.com/draxinar/rundir: ข้อมูลที่อิง UoDemo.dat, การแก้ไข, ข้อมูลที่เติมเต็มแล้ว และฟีเจอร์ใหม่
  • https://uo.serpent-isle.com/: Test Center ไม่ใช่ shard จริง แต่เป็นสภาพแวดล้อมสำหรับทดลองการจำลองเซิร์ฟเวอร์ Ultima Online ปี 1998 ที่ซื่อสัตย์ต่อของจริงอย่างมาก
  • UO:98: โปรเจกต์ของ Batlin และ Derrick ซึ่งเป็นแรงบันดาลใจที่ทำให้เริ่มงานนี้ในปี 2016
  • OUO ยังอยู่ในช่วงเริ่มต้นและอาจยังมีปัญหาเหลืออยู่
  • ปัญหาที่พบสามารถรายงานเป็น issue ได้ และยินดีรับการมีส่วนร่วม

คำขอต่อชุมชน Ultima Online

  • หากใครมีไฟล์ dynamic0.mul, dynamic0.bkp, regions.txt, resbank.mul ของเซิร์ฟเวอร์ Ultima Online ดั้งเดิมช่วงประมาณปี 1997~2003 ขอความกรุณาส่งต่อ
  • dynamic0.mul และ dynamic0.bkp เป็นไฟล์บันทึกสถานะเซิร์ฟเวอร์ ส่วน regions.txt คือคำนิยามการเกิดมอนสเตอร์ และ resbank.mul คือไฟล์คำนิยามทรัพยากร
  • ดูแล้วมีโอกาสน้อยที่ไฟล์ dynamic0.mul หรือ dynamic0.bkp ต้นฉบับจะสูญหายไปทั้งหมด
  • มีเครื่องมือพร้อมอยู่แล้วสำหรับลบข้อมูลผู้เล่นออกจากไฟล์ dynamic0.mul เพื่อรักษาความเป็นส่วนตัวก่อนเผยแพร่
  • ไฟล์เหล่านี้มีคุณค่าอย่างมากต่อการจำลองเนื้อหาโลกของ Ultima Online ให้แม่นยำอย่างยิ่ง

1 ความคิดเห็น

 
GN⁺ 1 시간 전
ความคิดเห็นจาก Hacker News
  • ถ้าใครมีไฟล์ dynamic0.mul, dynamic0.bkp, regions.txt, resbank.mul ของ เซิร์ฟเวอร์ Ultima Online ต้นฉบับแล้วส่งมาให้ได้ จะขอบคุณมาก
    นี่คือไฟล์เซฟเกมฝั่งเซิร์ฟเวอร์, คำจำกัดความการเกิดของสิ่งต่าง ๆ และไฟล์นิยามทรัพยากรราวช่วงปี 1997~2003 โดยเฉพาะ dynamic0.mul หรือ dynamic0.bkp น่าจะถูกสำรองไว้ในที่ปลอดภัยหลายแห่ง เลยยากจะเชื่อว่ามันหายไปหมดแล้วจริง ๆ
    ไฟล์เหล่านี้มี คุณค่าอย่างมหาศาล สำหรับการสร้างคอนเทนต์โลกของ Ultima Online ขึ้นมาใหม่ได้อย่างแม่นยำมาก

  • เจ๋งมาก บังเอิญกำลังฟัง ซาวด์แทร็กเกม Ultima ภาคเก่า อยู่พอดีแล้วมาเจอโพสต์นี้ เลยรู้สึกแปลกดี
    สงสัยว่าเคยพิจารณาเขียนผลจากการ disassemble ด้วย สำเนียง C++ ยุคก่อน C++98 แล้วเล็งไปที่คอมไพเลอร์ดั้งเดิมที่ใช้หรือเปล่า
    ผมเคย disassemble ไบนารีที่รันบนระบบเก่า ๆ มาก่อน และถ้าทำได้ก็คงอยากเล็งไปที่ toolchain เดิม มันเป็นคำถามเชิงปรัชญาที่น่าสนใจทีเดียว

  • ในฐานะนักพัฒนาผู้รอดชีวิตคนสุดท้ายของ eqclassic อ่านแล้วน่าสนใจ แต่ก็แอบหวังว่าจะได้เห็น เรื่องเล่าที่ลึกกว่านี้ ว่าใช้เครื่องมืออย่างไรและกระบวนการทั้งหมดเป็นอย่างไร ถึงอย่างนั้นก็ยังเป็นบทความที่ดี
    ตอนนั้นยังไม่มี LLM แต่มี debug symbol บางส่วนจากไบนารี PowerPC ในอีก 3 ปีถัดมา เลยช่วยได้บ้าง
    ชื่อไฟล์อย่าง packet_handler หรือ entitylist ฟังดูคุ้น ๆ อย่างประหลาด :D
    ด่านสุดท้ายคือการต้องมี โค้ดเครือข่าย ที่แทบจะสมบูรณ์แบบก่อนจะไปเกลางานส่วนที่เหลือ ซึ่งผมก็เสียเวลาไปกับจุดนี้แล้วหลายร้อยชั่วโมง
    ผมแค่ลองไล่ดูซอร์สนิดหน่อย แต่ดูเหมือนทั้งหมดจะอิงกับ TCP และไม่น่าจะมีการซ้อนกลไกความเชื่อถือได้แยกต่างหากทับลงไปอีก ถ้าเป็นแบบนั้นก็น่าสนใจ เพราะสำหรับ MMO ยุคนั้นมันดูเป็นทางเลือกที่ค่อนข้าง “ช้า”

  • ถ้าใครอยากลองเล่น UO เกมนี้ยังมี ฐานผู้เล่นที่แอ็กทีฟ อยู่จนถึงตอนนี้ เซิร์ฟเวอร์ภายนอกอย่าง UO Outlands ให้ประสบการณ์ใกล้กับเกมต้นฉบับมากกว่า แต่ถ้าวัดตามมาตรฐานคนที่ชินกับ MMO สมัยใหม่ มันก็ค่อนข้างโหด
    ผู้เล่นคนอื่นอาจโผล่มา gank คุณได้ และคุณอาจเสียอุปกรณ์ไปเลย
    ตอนนี้ก็ยังมีคนออนไลน์บนเซิร์ฟเวอร์นั้น มากกว่า 2500 คน อยู่ จึงยังคึกคักมาก

    • UO Outlands ให้ความรู้สึกว่าบริหารจัดการได้ดีกว่า UO ดั้งเดิมเสียอีก Discord ก็ค่อนข้างคึกคัก และมีผู้ใช้ราว 20,000 คน
  • ความสำเร็จด้านการเขียนโปรแกรมจริง ๆ ครั้งแรกของผมคือการทำ เว็บไซต์ของชาร์ด Ultima Online
    ใช้ PHP กับ HTML ที่ห่วยมาก แต่หลังจากนั้นมันก็ยังทำงานมาได้อีกกว่า 20 ปี เป็นความทรงจำที่ดี
    ผมประหลาดใจที่รอบ ๆ UO ยังมีชุมชนที่คึกคักอยู่จนถึงตอนนี้ และไม่ว่ายังไงโปรเจ็กต์นี้ก็เจ๋งมาก

    • ของผมก็คล้ายกัน เริ่มจากช่วยทำเว็บไซต์และดูแลการติดตั้งฟอรัม แล้วต่อมาคนที่รันชาร์ดก็ให้ผมไปช่วยดูโค้ด emulator ด้วย
      ตอนนั้นผมอายุ 12~13 ปี เป็นช่วงปลายยุค 90 ถึงต้นยุค 2000 ตอนนี้จำชื่อ emulator ไม่ได้แล้ว แต่มีโอกาสสูงว่าเป็น POL
      เป้าหมายของชาร์ดคือทำให้ใกล้กับเซิร์ฟเวอร์ทางการก่อน UO:Renaissance มากที่สุด เลยต้องทำงานไปเยอะพอควรเพื่อให้มันดูและให้ความรู้สึกแบบ T2A
      ผมได้เรียนรู้อะไรมากมาย หลังจากนั้นพอ RunUO ออกมาและเริ่มนิ่งขึ้นราวปี 2003 ผมก็ช่วยย้ายสิ่งที่ทำไว้บน POL ไปเป็น โค้ด C# สำหรับ RunUO และต้องเรียนรู้อีกเยอะเพื่อให้ตามทัน
      คนที่ผมทำงานด้วยบนชาร์ดนั้นล้วนเรียนวิทยาการคอมพิวเตอร์ในมหาวิทยาลัยหรือไม่ก็ทำงานเป็นโปรแกรมเมอร์อยู่แล้ว ส่วนผมเป็นแค่เด็กที่พอเขียนสคริปต์ได้ไม่กี่ตัว
      ผมมองว่าประสบการณ์นี้มีส่วนชี้ขาดที่ทำให้ผมกลายเป็นมืออาชีพในภายหลัง แม้แต่งานแรกในบริษัทเทคจริง ๆ ก็ได้มาเพราะหนึ่งในนั้นแนะนำตอนมีตำแหน่งฝึกงานว่าง
      ในความหมายหนึ่ง UO กับชาร์ดเถื่อน นี่แหละที่สร้างเส้นทางอาชีพของผมในทุกวันนี้
    • ของผมเริ่มจากเครื่องมือเสริมชื่อ UOInject ที่ใช้ทำเหมืองแร่แบบอัตโนมัติ ภาษาที่ใช้เหมือนจะเป็น Visual Basic
      ผมเริ่มเขียนโปรแกรมเพราะความจำเป็นล้วน ๆ
    • ถ้าเป็น MMO หรือเกมออนไลน์ ชุมชนเซิร์ฟเวอร์เถื่อนจะเกิดขึ้นไม่รู้จบ
      จำชื่อเกมไม่ได้แล้ว แต่น่าจะเป็น City of Heroes ที่ปิดไปหลายปี ก่อนจะมีใครสักคนเอาเซิร์ฟเวอร์เถื่อนกลับมาเปิดใหม่วันหนึ่ง
      เกมออนไลน์ยุค Shockwave เก่า ๆ ก็มีชุมชนเฉพาะทางที่ช่วยกันสร้างเซิร์ฟเวอร์ใหม่ รวมถึงทำ runtime ของ Shockwave และ decompiler ด้วย
      เพราะแต่ละเกมต้องแก้ปัญหาคล้าย ๆ กัน ชุมชนข้ามเกมเลยทับซ้อนกันด้วย ;)
    • ความสำเร็จด้านการเขียนโปรแกรมจริง ๆ ครั้งแรกของผมก็เป็น เว็บไซต์ของชาร์ด Ultima Online เหมือนกัน
      อย่างที่สองคือการแก้แผนที่ ลบไอเท็มแบบ static แล้วเพิ่มเกาะกับอาคารใหม่
      อย่างที่สามคือการแก้ verdata.mul เพื่อเพิ่มแอนิเมชันใหม่และกราฟิกไอเท็มใหม่
      การเล่น Ultima Online บนเซิร์ฟเวอร์ POL ที่ไม่เป็นทางการนี่เองที่พาผมเข้าสู่วงการ IT แบบตรงตัว ก่อนหน้านั้นผมกำลังเรียนเพื่อจะเป็นนักบัญชี
    • เว็บไซต์แรกของผมทำให้กิลด์ของตัวเองใน Chesapeake และโปรเจ็กต์ “เขียนโปรแกรมจริง” ชิ้นแรกคือสคริปต์กาก ๆ สำหรับมาครออัปสกิลต่าง ๆ
      มันนี่แหละที่ทำให้ผมเข้า IRC เป็นครั้งแรก และต่อมาก็ไปถึง freenode
  • วงการ emulator ของ UO นี่แหละที่พาผมไปสู่การเขียนโปรแกรมเครือข่าย
    ผมไม่เคยเห็นเกมออนไลน์เกมไหนที่เก็บกลไกการเล่นแบบผลพลอยได้ การเกิดขึ้นเอง และความบังเอิญไว้ได้ดีเท่านี้
    หลังจากนั้น MMO แบบ 3D ดูเหมือนจะลดทอนองค์ประกอบด้านเศรษฐกิจ การก่อสร้าง และการสำรวจที่น่าสนใจแบบที่ UO เคยให้ไว้ไปมาก
    เรื่อง PvP หรือคอนเทนต์แนวเควสต์ เกมอื่นอาจทำได้ดีกว่า แต่ UO ยังมีเสน่ห์ตรงที่คุณจะเล่นคนเดียว เล่นเป็นกลุ่ม หรือแค่ปฏิสัมพันธ์เบา ๆ กับคนแปลกหน้า แล้วค่อยไหลไปมาได้ตามอารมณ์อย่างเป็นธรรมชาติ

    • น่าเสียดายที่มีอยู่สองอย่างที่พิสูจน์แล้วว่าเป็นจริง
      คนส่วนใหญ่ไม่ได้ต้องการอะไรแบบนี้ และชอบอยู่บน รางที่กำหนดไว้ มากกว่า
      และสองกลุ่มที่ถูกดึงดูดเข้าหาเกมแบบนี้มากที่สุดก็มักติดอยู่ในพลวัตที่ถ้ามีกลุ่มหนึ่งอยู่ อีกกลุ่มก็จะเลิกเล่นเกมไป แต่กลุ่มที่สองกลับต้องอาศัยให้กลุ่มแรกเล่นอยู่
    • 3D MMORPG รุ่นเก่าบางเกมก็พยายามใส่กลไกแบบนั้น
      อย่างเช่น Asheron's Call มีชุมชนม็อดที่คึกคักมาก และตอนนี้ก็มีวงการ emulator ด้วย เพียงแต่ความนิยมของเซิร์ฟเวอร์ดูจะไม่ถึงระดับ UO
      ส่วน Shadowbane เน้นกิลด์อย่างมาก แต่ก็สนุกในแบบเป็นพวกนอกกฎหมายหน่อย ๆ ที่ออกไป PvP กับคนหรือกิลด์ไหนก็ได้แบบสุ่ม
    • ตรงนั้นอาจยังมีโอกาสอยู่ก็ได้ พูดตามตรงตอนนี้ ตลาด MMO แทบไม่มีอะไรขยับเลย
      นอกจาก WoW, Old School RuneScape, Final Fantasy Online แล้ว ก็เหมือนไม่ค่อยมีอะไรใหญ่ ๆ ให้เล่นนัก
  • ช่วงที่เล่าว่าทำโปรเจ็กต์นี้แบบ ๆ หยุด ๆ มา 10 ปี แล้วสุดท้ายเพิ่งทำงานที่ดูไม่มีวันจบให้เสร็จได้เพราะ ความก้าวหน้าของ LLM ช่วงหลัง ทำให้ผมประทับใจมาก
    ผมเองก็กำลังทำโปรเจ็กต์ decompile MFC C++ อยู่ และ LLM มีประโยชน์แบบเหลือเชื่อกับงานแนวนี้

    • สงสัยว่าใช้ LLM กับงานนี้ใน รูปแบบอัตโนมัติ หรือเปล่า แล้วใช้แบบรันในเครื่องเองหรือบนคลาวด์ด้วย
  • เมื่อก่อนผมเล่น Ultima Online เยอะเหมือนกัน
    ช่วงหลังมานี้ผมสนุกกับการเขียนสคริปต์ Python ในเกมไคลเอนต์ TazUO มาก มันเป็น Python 3 เวอร์ชันค่อนข้างเก่า แต่ก็ยังดีกว่าการเขียนสคริปต์บน Razor หรือ SteamUO มาก
    ถ้าใครอยากลองทำอะไรเงียบ ๆ บนชาร์ดซิงเกิลเพลเยอร์ Memento ก็โอเคดี

  • ผมกำลังตามหา เวอร์ชันมือถือที่แปลเป็นสเปนหรือฝรั่งเศส ของ Ultima 4 ฉบับ NES รวมถึงภาคอื่น ๆ ด้วย
    อยากได้ในรูปแบบที่จัดการคล้าย Pixel Remaster ของซีรีส์ FF
    ตอนนี้ยังเล่นได้ผ่าน emulator เท่านั้น
    RPG ที่มีข้อความเยอะและผ่านการแปลแล้วเป็นวิธีที่ง่ายมากในการ “เรียนภาษาต่างประเทศผ่านการเล่น” และยังเหมาะกับการอ่านด้วย
    คงดีมากถ้ามีคนทำสิ่งนี้ขึ้นมา

  • อา UO… เป็นความทรงจำที่ดีจริง ๆ ผมยังจำได้ว่าตอนนั้นยังไม่ถึงวัยที่จะมีบัตร เลยปั่นจักรยานไปที่ Cybersmith ใน Palo Alto เพื่อซื้อ เวลาแบบเติมเงินล่วงหน้า
    สมัยก่อนผมเล่นจริงจังพอสมควรบนชาร์ด Napa Valley แต่ไม่กล้าพอจะไป Catskills
    ทุกวันนี้ยังคิดถึงประสบการณ์แบบ UO อยู่ แต่ก็ไม่มีเวลาทุ่มให้เกมแนวนั้นเลยจริง ๆ

    • สงสัยว่าทำไมถึงไม่ไป Catskills มันต่างกันเหรอ หรือจริง ๆ คุณกำลังนึกถึง Siege Perilous ที่มีกฎแบบโหดกว่าหรือเปล่า?