RyujinX - โอเพนซอร์สของอีมูเลเตอร์ Nintendo Switch
(ryujinx.org)- เป็น อีมูเลเตอร์ Nintendo Switch แบบโอเพนซอร์ส ที่เขียนด้วย C# โดยมีเป้าหมายด้านความแม่นยำสูง ประสิทธิภาพสูง และอินเทอร์เฟซที่เป็นมิตรกับผู้ใช้
- เริ่มต้นในปี 2017 โดยนักพัฒนาเพียงคนเดียว และปัจจุบันเป็น โปรเจกต์ที่เขียนขึ้นใหม่ทั้งหมดตั้งแต่ต้น โดยมีทีมหลักและผู้มีส่วนร่วมอีกหลายสิบคน
- รองรับการทำงานข้ามแพลตฟอร์มบนระบบ Windows 10/11, macOS, Linux
- ผ่านการทดสอบกับเกมมากกว่า 4,050 รายการ และในจำนวนนั้นราว 3,400 รายการได้รับการประเมินว่าอยู่ในระดับ เล่นได้
- ซอร์สโค้ดถูก เผยแพร่บน GitHub ทำให้ทุกคนสามารถเข้าถึงและมีส่วนร่วมได้
ภาพรวมโปรเจกต์
- อีมูเลเตอร์ Nintendo Switch แบบโอเพนซอร์ส ที่เขียนด้วย C# พัฒนาโดย gdkchan
- เป้าหมายคือ ความแม่นยำและประสิทธิภาพที่ยอดเยี่ยม อินเทอร์เฟซที่เป็นมิตรกับผู้ใช้ และการปล่อยบิลด์ที่สม่ำเสมอ
- เริ่มต้นในปี 2017 โดยนักพัฒนาเพียงคนเดียว ปัจจุบันกำลังพัฒนาโดยทีมหลักที่มีความสามารถและผู้มีส่วนร่วมอีกหลายสิบคน เป็น โปรเจกต์ที่เขียนขึ้นใหม่ทั้งหมดตั้งแต่ต้น (Written from scratch)
คุณสมบัติเด่น
-
โอเพนซอร์ส
- ซอร์สโค้ดของอีมูเลเตอร์ถูก เผยแพร่บน GitHub
-
ข้ามแพลตฟอร์ม
- ปัจจุบันใช้งานได้บนระบบ Windows 10/11, macOS, Linux
-
ความเข้ากันได้
- ผ่านการทดสอบกับเกมมากกว่า 4,050 รายการ และในจำนวนนั้นราว 3,400 รายการได้รับการประเมินว่าอยู่ในระดับ เล่นได้ (playable)
-
การสนับสนุน
- สามารถรับการสนับสนุนและพูดคุยกับผู้ใช้อีมูเลชัน Switch รวมถึงนักพัฒนาในทีมได้ผ่าน เซิร์ฟเวอร์ Ryujinx Discord
ที่มาของชื่อ
- ออกเสียงว่า Ree-You-Jinx โดยมาจาก "Ryujin" เทพแห่งท้องทะเลและมังกรในตำนาน
- ส่วน NX ของชื่อนำมาจากโค้ดเนมของเครื่อง Switch
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สงสัยว่าถ้าจะสร้างอะไรแบบนี้ ต้องผ่าน เส้นทางอาชีพ แบบไหนกัน
แค่แฮ็กตอนกลางคืนกับวันหยุดสุดสัปดาห์ตลอด 2 ปีหรือเปล่า? ไม่น่าจะมีคนที่ได้เงินจากการทำงานแบบนี้ และดูเหมือนเป็นสาขาที่ต้องใช้ความรู้ลึกมาก ๆ ซึ่งก็น่าจะมีเอกสารไม่ดีนักเพราะประเด็นทางกฎหมาย
ผมลาออกจากมหาวิทยาลัยกลางคันเพราะปัญหาสุขภาพ และมี “โอกาส” ได้รับเงินสวัสดิการผู้พิการไปตลอดชีวิต ก็เลยรับไว้แล้วเขียนโปรแกรมต่อเป็นงานอดิเรก ช่วงนั้นผมได้เจอนักเขียนโปรแกรมสมัครเล่นทางออนไลน์มากมายที่ไม่มีงานทำ หรือพักการเรียนไว้ชั่วคราวแล้วตั้งใจจะไปทำงานภายหลัง
ในชีวิตจริงผมไม่รู้จักคนที่สนใจการเขียนโปรแกรมเลย จนรู้สึกเหงา เลยไปหาเว็บ meetup แล้วเริ่มไปงานต่าง ๆ เพื่อน ๆ ที่เจอที่นั่นชวนให้ลองทำงานเป็นโปรแกรมเมอร์มืออาชีพ ผมก็เลยลองดู และตอนนี้ทำงานในสายนี้มา 5 ปีแล้วและก็สนุกกับมัน
มองย้อนกลับไป ผมรู้ว่ามีสายงานมืออาชีพอยู่ แต่คิดว่าเป็นที่สำหรับโปรแกรมเมอร์ที่ผ่านการศึกษาและมีประสบการณ์สูงเท่านั้น เลยไม่เคยนึกว่าตัวเองจะเข้าไปเป็นส่วนหนึ่งได้
สิ่งที่ยากตอนเริ่มเข้าสายงานคือผม เชี่ยวชาญเฉพาะด้านมากเกินไป ขณะที่อุตสาหกรรมต้องการทักษะที่กว้างกว่าและความเชี่ยวชาญแบบอื่น โชคดีที่ตั้งแต่แรกผมได้เจอคนที่มีความสนใจใกล้เคียงกัน เช่น การพัฒนาเกมเอนจินและกราฟิกเรนเดอริง ซึ่งช่วยให้เข้าใจภูมิทัศน์ของสายงานมืออาชีพ
ทุกวันนี้ผมยังพอใจที่ได้ทำโปรเจกต์งานอดิเรกในเวลาว่าง แม้งานและครอบครัวจะทำให้มีเวลาไม่มากเท่าเดิม แต่บางครั้งก็ยังหาเวลาได้
ผมเคยทำ reverse engineering คอนโซลและพัฒนาซอฟต์แวร์สำหรับอุปกรณ์คอนโซลมาพอสมควร ส่วนใหญ่เป็นการพัฒนา GBA กับ NDS และ reverse engineering SMS กับ Genesis บ้าง ซึ่งจัดว่าเป็นหนึ่งในงานที่สนุกมาก ๆ ในฐานะนักพัฒนา แต่ก็ต้องใช้ความอึดมหาศาลในการฝ่าด่านยากที่หลีกเลี่ยงไม่ได้
อาจฟังดูไม่น่าเชื่อ แต่ผู้เขียนหลักของ เอนจินแปลง ARM ที่ใช้ในอีมูเลเตอร์ Switch ตัวสำคัญอีกตัวเป็นแพทย์ เจ้าตัวบางครั้งเรียกตัวเองว่า “จอมเวทขาวในชีวิตจริง”
ต้องใช้ทักษะจากหลายสาขา และเป็นลักษณะที่วิศวกรฮาร์ดแวร์ ผู้เชี่ยวชาญ reverse engineering คนทำเอกสารอย่างละเอียด และวิศวกรซอฟต์แวร์เฉพาะทาง ต่างต่อยอดงานของกันและกัน
โปรเจกต์คนเดียวก็มีให้เห็น แต่โดยปกติจำกัดอยู่กับฮาร์ดแวร์เก่า ๆ และถึงอย่างนั้นก็ยังอาศัยเอกสารจากหลายแหล่ง แม้แต่วิกิ nesdev เองก็สร้างขึ้นบนกองความรู้เดิมจากนักวิจัย 6502, reverse engineering ของผู้ผลิตเครื่องโคลนจากไต้หวัน, งาน decap, อีมูเลเตอร์ NES รุ่นเก่า และเอกสารที่มีอยู่ก่อนหน้า
ตอนนั้นผมยังเป็นวัยรุ่น รู้ C กับโค้ด ARM นิดหน่อย แต่ไม่รู้อะไรเกี่ยวกับฮาร์ดแวร์หรือ x86 เลย เดิมที PC มีเอกสารค่อนข้างดีและมีอีมูเลเตอร์ตัวอื่นให้เทียบ แต่เวลาที่ไม่เข้าใจและหนังสือไม่กี่เล่มที่มีก็ช่วยไม่ได้ ก็ต้องทดลองเอาเอง เขียนโค้ดไปนิดหน่อยแล้วดูปฏิกิริยา ซึ่งปกติก็แครช และบางครั้งคอมพิวเตอร์ทั้งเครื่องก็ค้าง
ส่วนใหญ่เป็นการสร้างแบบจำลองทางความคิดของคู่ต่อสู้ ในกรณีของผมคือช่วงบูตแรกของ Windows NT และการเริ่มต้น DirectDraw แล้วเขียนโค้ดให้มันขยับจากขั้นหนึ่งไปอีกขั้นหนึ่ง งานมักจะช้าเสมอ แต่พอเจอเงื่อนงำก็ให้ความรู้สึกเหมือนได้บำบัด
ถ้าทำถูก รางวัลจะมาแบบฉับพลัน โลกแปลกหน้าจะทำงานขึ้นมาในที่ที่ไม่ควรมี ราวกับปลาว่ายน้ำอยู่บนต้นไม้ อยากลองทำงานแบบนี้อีก
อีมูเลเตอร์ยุคแรกต้องจำลองฮาร์ดแวร์ที่แปลกเฉพาะตัวมาก ๆ ของคอนโซลยุคแรก
คอนโซลสมัยนี้ดูค่อนข้างคล้ายคอมพิวเตอร์สำหรับผู้บริโภค และผมคิดว่า Switch โดยพื้นฐานก็เหมือน Nvidia Jetson
การทำอีมูเลชันในปัจจุบันใกล้เคียงกับ Wine คือ จัดเตรียม API ที่จำเป็นแล้วรันในเวอร์ชวลแมชชีนมากกว่า หรือยังต้องจำลองฮาร์ดแวร์จริงอยู่?
API กราฟิกที่เกมใช้มักเปิดเผยรายละเอียดของฮาร์ดแวร์หลายอย่าง เพื่อให้เกมปรับแต่งละเอียดจนดึงประสิทธิภาพสูงสุดจากฮาร์ดแวร์นั้นได้ การแปลการเรียก API เฉพาะฮาร์ดแวร์แบบนี้ไปเป็น OpenGL/Direct3D/Vulkan/Metal ต้องใช้แรงงานมาก
แต่บนระบบ ARM แบบเนทีฟ สามารถรันโค้ด CPU ได้แทบจะตรง ๆ อยู่แล้ว Skyline ที่เคยพัฒนาสำหรับ Android แล้วหยุดไปก็ทำแบบนั้น และดูเหมือน Yuzu ก็มีแผนจะทำฟีเจอร์นี้ในอนาคต
ปัญหาที่ใหญ่กว่าคือ GPU แม้จะเป็น Nvidia Maxwell GPU แต่เพราะใช้ API คัสตอมเฉพาะ Switch ที่เรียกภายในว่า NVN จึงยังต้องมีเลเยอร์แปลงทั้งหมด รวมถึงการคอมไพล์เชเดอร์ใหม่
ผมเล่น Breath of the Wild กับ Mario Kart ด้วยเจ้านี่บน Macbook Pro M1 โดยใช้คอนโทรลเลอร์ Xbox
ทั้งผมและลูก ๆ ชอบมาก
สำหรับผมมันโดดเด่นเป็นพิเศษในสองกรณีการใช้งาน อย่างแรกคือเมื่อทั้งครอบครัวเล่นเกม Nintendo ทุกเกมของ Nintendo ถูกออกแบบอย่างพิถีพิถันมากให้ผู้เล่น 4 คนถือคอนโทรลเลอร์เล็ก ๆ คนละอัน แล้วผ่านขั้นตอนอย่างเลือกตัวละคร ตั้งค่าตัวเลือก ก่อนเริ่มเกมไปได้
อย่างที่สองคือการเล่นแบบพกพา/ถอดแยกได้ มันมีความสนุกจากการถือเล่น และต่างจากแท็บเล็ตตรงที่มีปุ่มควบคุมจริง เกมส่วนใหญ่ดีกว่าเกม iPad ทั่วไปมาก หรือพูดให้ชัดกว่านั้น เกม match-3 หรือเกมคลิกเกอร์ไร้สาระไม่ได้ไต่อันดับขึ้นมาง่ายเหมือนบน iPad
ไม่เคยคิดว่า C# จะเหมาะกับงานแบบนี้ แต่ดูดีเลย
ผมมองว่าเป็นแนวทางที่ค่อนข้างล้ำสำหรับการทำ emulation
และบน Apple Silicon จะใช้ hypervisor เพื่อรันชุดคำสั่ง Arm64v8 ของ Switch แบบ native
https://blog.ryujinx.org/the-impossible-port-macos/
มีเครื่องมือที่ช่วยให้จัดการและปรับแต่ง memory ระดับต่ำมาก ๆ เพิ่มเข้ามาเรื่อย ๆ และยังน่าสนใจเพราะรันได้หลาย platform หรือสร้าง native code ได้ด้วย เขียนแล้วก็สนุกด้วย
C# ปฏิวัติ โลกของ UO เมื่อราว 20 ปีก่อน และมีสมดุลที่ดีระหว่างความเรียบง่าย ความชัดเจน และ performance
https://www.runuo.net/
https://github.com/ClassicUO/ClassicUO
ให้ตายเถอะ ไม่น่านึกถึง UO เลย ตอนนี้รู้สึกเศร้าและแก่ขึ้นมา
คร่าว ๆ คือ C/C++ มาก่อน และในกรณีนี้แยกสองภาษานี้ออกจากกันได้ยากจริง ๆ codebase ที่ใช้ฝ่ายใดฝ่ายหนึ่งล้วน ๆ นั้นหายาก ถัดมาคือ Rust ซึ่งใน emulator สายงานอดิเรกน่าจะอยู่ราวอันดับ 3–4 แต่ใน project จริงจังอาจอยู่สูงกว่านั้นได้ จากนั้นก็ประมาณ C# กับ Java
JavaScript และ Python พบได้บ่อยมากใน project งานอดิเรก แต่ใน codebase จริงจังมักเป็นตัวเลือกที่ค่อนข้างเป็นข้อยกเว้น อาจมองว่า WASM เป็นข้อยกเว้นได้
https://github.com/TASEmulators/BizHawk
ค่อนข้างน่าหงุดหงิดที่ Irdeto ผู้สร้าง Denuvo DRM อันฉาวโฉ่ ทำผลิตภัณฑ์ที่เล็งเป้าไปที่ emulator ของ Switch โดยเฉพาะ
ทั้งที่ตัว emulator เองนั้นถูกกฎหมาย
คนที่ dump เกมของตัวเองโดยตรงมีไม่มาก
เคยลองใช้ทั้งคู่แล้ว แต่ตอนเล่น Tears of the Kingdom ผมชอบ Yuzu มากกว่า: https://yuzu-emu.org/
ถึงอย่างนั้นทั้งสองตัวก็ยอดเยี่ยม และทั้งสอง project ก็พัฒนาเร็วมาก จนความประทับใจที่ผมมีเมื่อต้นปีอาจล้าสมัยไปแล้ว
มีคำแนะนำการใช้งานที่เป็นประโยชน์อยู่ที่นี่: https://github.com/Abd-007/Switch-Emulators-Guide/blob/main/...
https://yuzu-emu.org/entry/yuzu-android/
อย่างน้อยบน desktop ก็มี early access program ผ่าน Patreon แต่ก็รับได้จากที่นี่ด้วย: https://pineappleea.github.io/
Skyline รันบน Android ได้ แต่ผมยังไม่เคยทำให้มันรันได้ดีบนอุปกรณ์ไหนเลย ตอนนี้ไม่มีการพัฒนาต่อแล้ว
https://skyline-emu.one/
ผมกลับตรงกันข้าม จำได้ว่าถ้ามีเครื่องสเปกค่อนข้างใหม่ การตั้งค่า Ryujinx จะเร็วกว่าเยอะ
Ryujinx เป็นหนึ่งใน project C# ที่น่าประทับใจที่สุดเท่าที่ผมเคยเห็น
อีกตัวคือ Roslyn
มีวิธีเล่นเกมด้วยสิ่งนี้อย่าง ถูกกฎหมาย ไหม ถ้าไม่ได้ dump มาจาก Switch ของตัวเองโดยตรง?
ซื้อเกม Switch ผ่านเว็บเบราว์เซอร์ได้ไหม?
Switch ที่ซื้อใหม่แทบจะแน่นอนว่าเป็น V2 ที่ถูก patch แล้ว และ Switch Lite กับ OLED ก็ jailbreak ไม่ได้ถ้าไม่บัดกรี modchip
แต่ถ้าคุณเป็นเจ้าของเกมอยู่แล้ว วิธีที่ได้ ROM มาสำคัญแค่ไหน?
https://www.nintendo.com/store/games/nintendo-switch-games/#...
แต่ถ้าไม่มี Switch ก็จะดาวน์โหลดหรือ dump ไม่ได้
ผมชอบทั้ง Yuzu และ Ryujinx
น่าทึ่งที่มันให้ประสบการณ์ที่ดีกว่า console native ได้ด้วยซ้ำ แต่ก็รู้สึกเหมือนว่างานเลี้ยงนี้อาจใกล้จบลงในไม่ช้าเพราะ Denuvo
จนถึงตอนนี้ สิ่งที่ Denuvo บอกว่าจะขัดขวาง emulation ได้ยังเป็นแค่คำกล่าวอ้างเท่านั้น ต่อให้ขัดขวางได้จริง ผู้คนก็มีเวลาไม่จำกัดในการศึกษาวิธี bypass
ทำไม Nintendo ถึงไม่ออกเกมบนแพลตฟอร์มอื่นบ้างนะ?
อยากลองเล่น Zelda แต่คงไม่ซื้อคอนโซลเพราะเกมเดียว
ไม่ได้อยากปกป้องเป็นพิเศษ แต่ถ้าจะเข้าใจท่าทีปัจจุบัน ก็ต้องดูเหตุการณ์ตลาดวิดีโอเกมอเมริกาเหนือพังทลายในปี 1983 ตอนนั้นอะไรก็ไม่รู้ถูกออกขายเป็นเกมจนทำให้ตลาดวิดีโอเกมทั้งหมดล่ม และผู้บริโภคสูญเสียความเชื่อมั่นต่อแพลตฟอร์มอย่างเครื่องเกมเฉพาะทางไป แทนที่จะซื้อแบบนั้น ถ้าซื้อคอมพิวเตอร์ใช้ในบ้านก็มีเกมให้เล่นและยังใช้ทำอย่างอื่นได้ด้วย
NES เป็นสิ่งที่ตรงกันข้าม Nintendo มี ระบบนิเวศแบบปิด และพัฒนาเกม first-party จำนวนมาก แนวทางนี้ประสบความสำเร็จ ทำให้บริษัทมั่งคั่งและกลายเป็นผู้เล่นหลักในตลาดวิดีโอเกม ผ่านมาเกือบ 40 ปีแล้ว ทำไมจะต้องทิ้งวิธีที่ยังใช้ได้อยู่ด้วยล่ะ?
ถ้าเล่นบนแล็ปท็อปที่มีจอและลำโพงดีกว่าได้ ผมคงจ่ายแค่ 60 ดอลลาร์เท่านั้น แถมตอนนี้ผมยังมีแนวโน้มจะซื้อเกม Nintendo อื่น ๆ มากขึ้น เพื่อให้เครื่องใหม่คุ้มค่าขึ้นด้วย ถ้าเป็นคนทำธุรกิจ ผมก็คงเลือกทางที่ทำรายได้มากกว่า 7 เท่า
Nintendo Switch มีประสิทธิภาพต่ำมากเมื่อเทียบกับ PS4/5 และ Xbox Series X ในเจเนอเรชันเดียวกัน แต่มีข้อได้เปรียบสำคัญคือเป็นคอนโซลพกพา/สำหรับเดินทางที่ยอดเยี่ยม คอนโซลของ Sony และ Microsoft มักทำเฟรมเรตต่อวินาทีได้สูงกว่า หรือกราฟิกดีกว่า และโดยทั่วไปเอนเอียงไปทางกราฟิก แต่ Switch ถูกจำกัดมากเพราะต้องบาลานซ์ระหว่างฟอร์มแฟกเตอร์กับอายุแบตเตอรี่ ถ้าเป็นเครื่องพกพาแต่เล่นเกมได้แค่ 30 นาทีก็ไม่มีความหมาย
ผู้ใช้จำนวนมาก รวมถึงคนที่อยากใช้อีมูเลเตอร์แบบนี้อย่างถูกกฎหมาย น่าจะชอบคอนโซลอื่นหรือ PC/Mac มากกว่าเมื่อมองจากมุมประสิทธิภาพล้วน ๆ
อีกอย่าง ถ้าขายบนแพลตฟอร์มอื่น โดยเฉพาะเกมจากสตูดิโอภายใน รายได้ต่อชุดที่ขายได้น่าจะต่ำกว่าการขายบนแพลตฟอร์มของตัวเอง
เมื่อคำนึงถึงเรื่องเหล่านี้ การออกบนแพลตฟอร์มอื่นคงตัดกระแสรายได้ลงไปค่อนข้างมาก
ไม่อย่างนั้นก็คงไม่แพตช์ปิดบั๊กทำสำเนาไอเท็มที่แทบเป็นไปไม่ได้ที่จะเจอโดยบังเอิญ และคงอนุญาตให้เปลี่ยนปุ่มควบคุม ซึ่งเป็นฟังก์ชันพื้นฐานมาตั้งนานแล้วไปแล้ว แทนที่จะเป็นแบบนั้น ในเกมของ Nintendo คุณควบคุมได้เฉพาะวิธีที่ถูกตั้งใจและ playtest มาแล้วเท่านั้น พวกเขายังเคยทำตัวค่อนข้างน่ารำคาญมานานกับคอนเทนต์ที่มีการสตรีม รีวิว และวิดีโอ gameplay และบางส่วนก็ยังเป็นแบบนั้นอยู่ตอนนี้
อย่างไรก็ตาม สำหรับหลายคนมันไม่ใช่ปัญหาแค่เกมเดียว Nintendo มีเกม exclusive ที่ประสบความสำเร็จอยู่ไม่น้อย เช่น Zelda, Mario Kart, Smash, เกมแอ็กชันกระโดดตระกูล Mario หลายเกมที่แบ่งได้เป็นภาคหลัก 3D กับภาคเสริม 2D, Splatoon, Mario Party, Fire Emblem, Xenoblade, Kirby ฯลฯ
ในความเป็นจริง คนมักจะมีเกม exclusive คุณภาพสูง เล่นสนุก แต่ราคาแพง อย่างน้อยราว 10 เกม แม้จะไม่นับกรณีแปลก ๆ ที่เกิดจากความล้มเหลวของ Wii U เช่น Mario Kart 8 ถูกนำมาออกใหม่เป็นเวอร์ชันรวม DLC แล้วต่อมามี expansion pass ขนาดใหญ่เพิ่มเข้ามา
ถ้าอยากเล่น Zelda ก็ต้องจ่ายให้ Nintendo อย่างน้อย 260 ดอลลาร์ ถ้าจะเล่นบนเครื่องที่ดีกว่า Switch Lite ก็ต้องจ่ายเพิ่มอีก 100 ดอลลาร์
ต่างจาก Sony หรือ Microsoft ตรงที่ Nintendo ทำกำไรจริง ๆ จากการขายฮาร์ดแวร์ด้วย ไม่ใช่แค่จากการขายเกม