- 90s.dev คือ API สำหรับเกมเมกเกอร์รูปแบบใหม่ที่ทำงานบน เว็บเบส โดยมอบประสบการณ์การสร้างแอป GUI สไตล์ยุค 90
- แพลตฟอร์มนี้ ไม่ใช่เอนจินเกมหรือเกมเมกเกอร์โดยตรง แต่เป็น API สำหรับสร้างเกม เอนจินเกม และเครื่องมือสร้างเกม
- จุดเด่นคือ ทำงานบน HTML Canvas, หน้าจอขนาด 320x180, รองรับ WebGL2 และรับประกันทั้งความปลอดภัยและประสิทธิภาพผ่าน Web Worker
- ด้วย SDK แบบ TypeScript-first และการรองรับการนำเข้าโมดูล wasm จากหลายภาษา ทำให้สร้างต้นแบบได้รวดเร็วและขยายต่อได้ง่าย
- ผู้ใช้สามารถสร้างแอปของตนเองแล้ว แชร์หรือโหลดผ่าน GitHub หรือ NPM ได้ โดยมีเป้าหมายเพื่อการทำงานร่วมกันและการขยายตัวของชุมชนนักพัฒนา
ความสำคัญของการเปิดตัว 90s.dev
- 90s.dev เป็นแพลตฟอร์ม API สำหรับเกมเมกเกอร์รูปแบบใหม่ที่ทำงานบนเว็บ
- มอบ สภาพแวดล้อมการสร้างแอป GUI สไตล์ยุค 90 และมี API สำหรับการสร้างเกม เอนจินเกม และเครื่องมือเกมเมกเกอร์
- เป้าหมายคือสร้างระบบนิเวศที่ทุกคนสามารถสร้างและแชร์ พิกเซลอาร์ต สไปรต์ แผนที่ และเครื่องมือ สำหรับเกมได้อย่างง่ายดายบน HTML Canvas
คุณสมบัติหลักและวิสัยทัศน์
แนะนำแพลตฟอร์มเบื้องต้น
- 90s.dev ทำงานในเบราว์เซอร์ และมีหน้าจอที่เติมเต็มหน้าต่างเว็บด้วยความละเอียด 320x180 (16:9)
- ทุกแอปทำงานใน สภาพแวดล้อม Web Worker เพื่อให้ได้ทั้งความปลอดภัยและประสิทธิภาพที่ดียิ่งขึ้น
- รองรับการรันเกมได้สูงสุด 60fps ผ่าน WebGL2 offscreen canvas
- สามารถเรียกใช้และเผยแพร่ โมดูลแอปที่โฮสต์บน GitHub และ NPM ได้อย่างอิสระ
- รองรับการสร้างต้นแบบอย่างรวดเร็วด้วย TypeScript SDK ที่เป็นมิตรกับ VSCode
- ใช้งานร่วมกับโมดูลจากหลายภาษาที่บิลด์เป็น WebAssembly (wasm) ได้
แอปที่มีมาให้พื้นฐาน
- มีแอปพื้นฐานสำหรับสร้างแอสเซ็ตเกม เช่น พิกเซลอาร์ต เครื่องมือสร้างสไปรต์ และแมปเอดิเตอร์ มาให้โดยค่าเริ่มต้น
- ยังไม่มีเครื่องมือแก้ไขเสียงและดนตรี แต่ ใครก็สามารถพัฒนาแล้วเผยแพร่/แชร์ได้เอง
- แอปและเครื่องมือที่สร้างขึ้นสามารถแชร์ให้ผู้ใช้ทุกคนได้ผ่าน iframe หรือลิงก์
แรงบันดาลใจและจุดแตกต่าง
เครื่องมือพัฒนาเกมที่ใช้อ้างอิง
- pico8: เน้นมินิมัลลิสม์ รองรับภาษาเดียว
- tic80: ปลดข้อจำกัดหลายอย่างของ pico8
- love2d: ต้องใช้ IDE ภายนอก
- picotron: นำสถาปัตยกรรมแบบระบบปฏิบัติการมาใช้
- 90s.dev เป็นเหมือน pico8 ในระดับเมตา และใกล้เคียงกับ love2d ที่นำ TypeScript มาใช้ หรือ tic80 ที่เน้นการขยายเชิงแนวตั้งมากกว่า
นวัตกรรมด้าน GUI และรายละเอียดทางเทคนิค
ระบบเลย์เอาต์
- มีระบบจัดเลย์เอาต์อัตโนมัติที่เรียบง่ายแต่ทรงพลัง เพื่อลด ความยุ่งยากของการจัดวางและปรับขนาดด้วยมือ
- วิว (API) วาดหน้าจอโดยตรงและใช้ โครงสร้าง tree ของ child view
ระบบ Ref
- จัดการคุณสมบัติของวิว (เช่น ขนาด ลูก สีพื้นหลัง ฯลฯ) ผ่าน watchable pointer (ref)
- ทุกคุณสมบัติจะมีอ็อบเจ็กต์อ้างอิง (ref) กำกับไว้ เพื่อ ตรวจจับและสะท้อนการเปลี่ยนแปลงของคุณสมบัติโดยอัตโนมัติ
- ออกแบบแยกจาก ref ของ React/Vue แบบสิ้นเชิง
Composites (แนวคิดของ composite view)
- ใน JSX มีการสลับการใช้ string tag (ตัวพิมพ์เล็ก) และ value tag (ตัวพิมพ์ใหญ่) เพื่อ แยกการใช้งานออกจากการติดตั้งใช้งานได้ชัดเจนยิ่งขึ้น
- ลงทะเบียน abstract view ไว้ใน global table และนำไปใช้อย่างอิสระในส่วนอื่นของระบบได้
- ตัวอย่าง: colorpicker view มี implementation เริ่มต้นมาให้ แต่ผู้พัฒนาสามารถแทนที่ด้วยสไตล์ที่ต้องการได้
- มอบ ความยืดหยุ่นและการขยายต่อสูง สำหรับการพัฒนาแอป GUI
การเผยแพร่แอปและการทำงานร่วมกันของชุมชน
การเปลี่ยนแปลงวิธีเผยแพร่แอป
- เดิมใช้ไดรฟ์แชร์
net/ ที่อิงกับฐานข้อมูลภายใน
- ล่าสุดรองรับการ โฮสต์และนำเข้าโมดูลโดยตรง จาก NPM/GitHub ผ่าน CDN
- ตัวอย่าง:
/os/fs/ghb/someuser/project@1.0.0/some/file.js
- ใช้ Service Worker เพื่อทำให้กลไกการโหลดจากหลายแหล่งสมบูรณ์
การมีส่วนร่วมและความร่วมมือ
- ด้วยการออกแบบแบบระบบปฏิบัติการ จึง ส่งเสริมการพัฒนาแอปของชุมชน นอกเหนือจากแอปหลักที่จำเป็น
- รองรับการสื่อสารและความร่วมมือผ่าน issue tracker, forum และ wiki (ทั้งหมดอยู่ใน GitHub repo)
- Issues: ขอฟีเจอร์และรายงานบั๊ก
- Forum: ประกาศโปรเจกต์และพูดคุย
- Wiki: รวมและคัดสรรโปรเจกต์
การแชร์แอป
- สามารถแชร์แอปได้ผ่านลิงก์รูปแบบ
/os/#app
- มุ่งสู่การสร้างและกระจาย แอป ไลบรารี และแอสเซ็ตอย่างเสรี โดยมีชุมชนเป็นศูนย์กลาง
บทสรุปและทิศทาง
- 90s.dev คือแพลตฟอร์ม API ที่ ออกแบบและนิยามระบบนิเวศของเกมเมกเกอร์ เอง
- มุ่งสู่ สภาพแวดล้อมสร้างเกมบนเว็บแบบขยายต่อได้ ที่ทุกคนสามารถสร้าง เผยแพร่ และใช้งานแอปได้อย่างง่ายดาย
- เป็น เครื่องมือพัฒนาเกมที่มองไปข้างหน้า บนพื้นฐานของความร่วมมือในชุมชนและปรัชญาแพลตฟอร์มแบบเปิด
2 ความคิดเห็น
ชวนให้สงสัยว่าเอนจินเกมตัวมันเองจะเป็นอย่างไร
ความคิดเห็นจาก Hacker News
แชร์ประสบการณ์ที่วันหนึ่งตื่นมาตอนตี 2 ในเดือนกุมภาพันธ์แล้วเริ่มเขียนโค้ดทันที เพราะเบื่อที่จะรอต่อไป เลยเขียนโค้ดต่อเนื่องจนสร้างทั้งเครื่องมือสร้างเกมบน API, เอนจินเกม และตัวเกมขึ้นมา พร้อมค้นพบว่าความหลงใหลที่แท้จริงของตัวเองคือการออกแบบ API และรู้สึกว่าคนที่ค้นพบความหลงใหลแล้วทุ่มเทแบบนั้นช่างยอดเยี่ยมมาก
ขอบคุณสำหรับคำชม และเสียดายที่ยังอธิบายแก่นของโปรเจกต์ได้ไม่ดีพอ ทั้งที่จริงแล้ว API คือส่วนที่น่าสนใจที่สุด แต่กลับไม่ค่อยแสดงออกมาให้เห็น เลยรู้สึกอึดอัด และคิดว่าน่าจะรอจนกว่าจะมีตัวอย่างที่แสดงการใช้งาน API แบบแปลกใหม่ได้มากกว่านี้ก่อนค่อยเปิดตัว จึงรู้สึกว่ารีบปล่อยเร็วเกินไป
ระบุว่าตัวเองคือผู้สร้างโปรเจกต์นี้ และขอบคุณสำหรับฟีดแบ็ก ยอมรับอย่างชัดเจนว่าปล่อยออกมาเร็วไป และกำลังปรับปรุงหลายจุดที่ถูกทักท้วง พร้อมตั้งใจว่าจะกลับมาอีกครั้งในอีกไม่กี่เดือน
มองว่าไม่ได้เปิดตัวเร็วเกินไปเลย เป็นโปรเจกต์ที่เจ๋งมากและออกแบบมาอย่างเกินพอดีในทางที่ดี ชื่นชมว่าเป็นตัวอย่างระดับสุดยอดตามอุปมาเรื่อง bike shed และทึ่งมากที่ทำระบบ reactive ของตัวเองขึ้นมาด้วย
มองว่าเป็นจังหวะที่เหมาะมากสำหรับ Show HN แค่ดูทัวร์ Hello World ก็เข้าใจได้ทันทีว่าเป็นโปรเจกต์แบบไหน และถ้ามีประสบการณ์กับ PICO-8 และ React มาก่อนก็จะยิ่งรู้สึกสนุกขึ้น อีกทั้งยังเห็นว่าการเลือกอัตราส่วน 16:9 เป็นการตัดสินใจที่ฉลาด เพราะอัตราส่วนสี่เหลี่ยมจัตุรัสของ PICO-8 ดูแปลก ๆ
ขอบคุณที่ปล่อยออกมาเร็ว และแนะนำอย่างหนักแน่นให้ปล่อยบ่อย ๆ โดยยกแนวคิดว่าเส้นทางสู่ความสำเร็จคือการทำซ้ำ 10,000 ครั้ง และการลองครั้งเดียวเป็นแค่จุดเริ่มต้น
ส่งข้อความให้กำลังใจว่าไม่ได้ปล่อยเร็วเกินไป และผู้สร้างกำลังทำได้ดีมาก
แม้จะไม่ได้ลงลึกนัก แต่ยอมรับว่าตัวเองแอบหลงใหลบรรยากาศย้อนยุคนี้มากขึ้นเรื่อย ๆ น่าจะเป็นเพราะความรู้สึกปลอบประโลมจากยุคเก่าที่เรียบง่ายและสบายใจกว่า ซึ่งกลับฟื้นขึ้นมาเมื่อเห็นโปรเจกต์แบบนี้
ถามว่าแอป paint ใช้งานได้หรือไม่ เพราะลองทั้งบน Firefox และ Chrome แล้ว เลือกสีกับคลิกก็ยังวาดอะไรไม่ได้เลย และในคอนโซลก็ไม่มี error ใด ๆ อีกเรื่องหนึ่งคือชื่นชมว่าถ่ายทอดบรรยากาศยุค 90s ได้ดีมาก ตอนแรกนึกว่าเป็นกลิ่นอายเทอร์มินัลยุค 70s-80s แต่พอมองดี ๆ ก็พบว่านี่แหละคือหน้าตาของยุค 90s อย่างแท้จริง และแสดงความคาดหวังต่อพัฒนาการในอนาคต
บอกว่าขออภัยที่ทำให้สับสน ตอนนี้พัฒนาไปถึงแค่ตัวเลือกสีเท่านั้น ส่วนที่เหลือยังไม่ได้ทำ แต่คิดว่าน่าจะทำเสร็จได้ภายในชั่วโมงเดียว พร้อมอธิบายว่าเจตนาของการพัฒนาคืออยากจำลองความสนุกและพลังของการสร้างแอป GUI ในบรรยากาศแบบยุค 90s โดยตัดความน่ารำคาญออกไป เหลือไว้แต่ความน่าทึ่ง จึงตั้งชื่อว่า 90s.dev
ระบุว่าน่าจะยังไม่ได้ implement โดยถ้าคลิกปุ่ม “hash” มุมซ้ายบนของหน้าต่างแล้วเลือก “View Source” จะเห็นว่ายังเป็นเพียง UI mock และในพื้นที่เลื่อนดูจะมีแค่โค้ดที่วาดลวดลายธรรมดา ๆ
ของตัวเองก็ใช้ไม่ได้เหมือนกัน
แม้จะยังไม่เข้าใจตัวโปรเจกต์ทั้งหมดดีพอ แต่ชอบบรรยากาศของมันมาก รู้สึกทึ่งที่เพียงแค่อารมณ์และองค์ประกอบทางภาพบางอย่างก็ส่งผลต่อความรู้สึกของคนได้มาก และทำให้เกิดความสนใจมากขึ้น
ลองคิดในแบบของตัวเองว่าจะอธิบายอย่างไร เดิมทีอยากสร้าง pico8 ที่ใช้งานสะดวกกว่า จึงทำดีไซน์และต้นแบบขนาด 320x180 ขึ้นมา แต่ขณะเดียวกันก็อยากได้ความสะดวกทั้งหมดของ VS Code รวมถึงการรองรับ TypeScript ด้วย สุดท้ายจึงวางแนวคิดให้เป็นแพลตฟอร์มที่มีสิ่งต่าง ๆ ซึ่งปกติจะอยู่ในแท็บของ pico8 ให้สร้างและแจกจ่ายได้ และพอมาคิดตอนนี้ก็ยังรู้สึกว่าเปิดตัวเร็วเกินไปอยู่ดี
ชอบบรรยากาศโดยรวม แต่เห็นว่าอัตราส่วน 16:9 กับพีซียุค 90s ไม่ค่อยเข้ากันนัก เพราะชอบอารมณ์เฉพาะตัวของจอ CRT ที่เกือบเป็นสี่เหลี่ยมจัตุรัสมากกว่า
ขอบคุณและบ่นว่าเรื่องการอธิบายนั้นยากมาก โพสต์ครั้งนี้ก็เป็นเพียงความพยายามที่จะอธิบายให้สั้นที่สุดว่าตัวเองสร้างอะไรขึ้นมา แต่ถึงจะเขียนสั้นแล้ว เนื้อหาก็ยังเลือนลางอยู่ดี จนรู้สึกอยากยอมแพ้อย่างตรงไปตรงมา
คิดว่าโปรเจกต์นี้เจ๋งมาก แต่เริ่มต้นใช้งานค่อนข้างยากเล็กน้อย จึงเสนอว่าอยากเห็น walkthrough สั้น ๆ สำหรับการสร้างมินิเกม
กล่าวขอบคุณ และอธิบายว่าปัจจุบันวิธี build เกมเหมือนกับ tutorial การ build แอป ต่างกันตรงที่สามารถสร้าง custom view และ override เมธอด
drawได้ ถ้าจะเน้นประสิทธิภาพก็แนะนำให้สร้างและใช้OffscreenCanvasเพิ่มเติม ส่วนตอนนี้ยังไม่มี API ที่ห่อWebGL2ให้ใช้งานง่ายขึ้น แต่สัญญาว่าในอนาคตจะทำ tutorial ที่แม้แต่มือใหม่ก็สร้างเกมทั้งเกมได้เองแน่นอน ขณะนี้ยังเน้นฝั่งแอปเป็นหลัก จึงให้ความสำคัญกับการพัฒนาเครื่องมือสร้างเกมก่อน เช่น สไปรต์และแผนที่ พร้อมแชร์ลิงก์ Hello World tutorialรู้สึกว่าโปรเจกต์นี้น่าสนใจมาก เหมือนถูกพากลับไปวัยเด็กทันที ชอบ pico8 เหมือนกัน แต่ตัวเองโตมากับเดสก์ท็อปและ GUI มากกว่า จึงรู้สึกว่า pico8 ย้อนยุคไปอีกหนึ่งเจเนอเรชัน ขณะที่โปรเจกต์นี้ปลุกความคิดถึงได้เหมือนการกลับไปซื้อ CD อีกครั้ง
ยังแนะนำ Picotron ที่สร้างโดยผู้พัฒนา Pico8 ด้วย โดยอธิบายว่าเป็นเดสก์ท็อป OS ที่คล้าย Pico8 แต่มีข้อจำกัดน้อยกว่าเล็กน้อย ตัวเองยังไม่เคยลองใช้จริง เห็นแค่ GIF เท่านั้น แต่รู้สึกว่าแนวคิดของโปรเจกต์คล้ายกัน คือมุ่งไปที่การเป็น “แพลตฟอร์ม” ที่สามารถสร้าง pico8 ขึ้นมาอยู่ภายในได้ และมองว่าทั้งสองโปรเจกต์กำลังไล่ตามอุดมคติเดียวกันด้วยคนละวิธี
ติดอยู่ตั้งแต่ขั้นตอนแรกของคู่มือ Getting Started โดยดาวน์โหลด
helloworld.zipมาไว้ในเครื่อง เปิดfiler.app.jsบนเว็บ แล้วกดปุ่ม mount พร้อมใส่ drive name เป็นhelloworld/appแต่ไม่มีอะไรเกิดขึ้นเลย จึงสับสนว่าต้องอัปโหลดไฟล์ zip เข้าไปในอินสแตนซ์ 90s.dev อย่างไรขอบคุณสำหรับฟีดแบ็ก และเดาว่าน่าจะใช้ Firefox อยู่ เพราะฟีเจอร์นี้พึ่งพา
showDirectoryPickerซึ่ง Firefox ยังไม่รองรับ จึงแนะนำให้ใช้ Chrome นอกจากนี้ในช่อง drive name ต้องใส่แค่ชื่อโดยไม่ต้องมีพาธ เช่น “foo” และสัญญาว่าจะรีบแก้คู่มือ โดยอธิบายต่อว่าหลังจากนั้นfoo/helloworld.app.jsจะเชื่อมกับพาธบนเครื่องจริงบอกว่าชอบบรรยากาศยุค 90s มาก โดยเฉพาะฟอนต์ที่โดดเด่น และเพิ่งตระหนักว่าตัวเองชอบดีไซน์ยุค 90s มากกว่าพิกเซลอาร์ตสไตล์ 80s มาก
วิจารณ์หน้า landing page ว่าทำให้สับสน เพราะเรียกโปรเจกต์ว่าเป็น ‘game maker’ แต่ขณะเดียวกันก็อธิบายว่า ‘ไม่ใช่ game maker’ จึงดูขัดแย้งกัน และชี้ว่าการใช้คำยังไม่สอดคล้องกัน
เตือนว่าเรื่องการตั้งชื่อนั้นยากมาก และถือเป็นหนึ่งในปัญหาที่ยากที่สุดของวิทยาการคอมพิวเตอร์ มักถูกยกคู่กับการทำ cache invalidation