- 90s.dev là một API game maker kiểu mới hoạt động trên nền web, mang lại trải nghiệm tạo ứng dụng GUI theo phong cách thập niên 90
- Nền tảng này không phải game engine hay game maker trực tiếp, mà cung cấp API để tạo game, game engine và các công cụ làm game
- Nổi bật với nền tảng HTML Canvas, màn hình 320x180, hỗ trợ WebGL2, cùng bảo mật và hiệu năng được đảm bảo qua web worker
- Với SDK ưu tiên TypeScript và hỗ trợ import các mô-đun wasm từ nhiều ngôn ngữ, nền tảng cho phép tạo prototype nhanh và có khả năng mở rộng cao
- Người dùng có thể tự tạo ứng dụng của riêng mình rồi chia sẻ hoặc tải từ GitHub hoặc NPM, hướng tới hợp tác cộng đồng phát triển và khả năng mở rộng
Ý nghĩa của việc ra mắt 90s.dev
- 90s.dev là một nền tảng API game maker kiểu mới chạy trên web
- Nền tảng cung cấp môi trường tạo ứng dụng GUI theo phong cách thập niên 90, với API dành cho việc tạo game, game engine và các công cụ game maker
- Mục tiêu là hình thành một hệ sinh thái nơi bất kỳ ai cũng có thể dễ dàng tạo và chia sẻ pixel art, sprite, bản đồ và các công cụ, tài nguyên cho game ngay trên HTML Canvas
Các đặc điểm chính và tầm nhìn
Giới thiệu cơ bản về nền tảng
- 90s.dev chạy trong trình duyệt, với màn hình độ phân giải 320x180 (16:9) lấp đầy cửa sổ web
- Mọi ứng dụng đều chạy trong môi trường web worker để đạt bảo mật và hiệu năng tốt hơn
- Có thể chạy game tối đa 60fps nhờ WebGL2 offscreen canvas
- Có thể tự do tải và phát hành các mô-đun ứng dụng được host trên GitHub và NPM
- Hỗ trợ tạo prototype nhanh với TypeScript SDK thân thiện với VSCode
- Tương thích với nhiều mô-đun được build bằng WebAssembly (wasm) từ nhiều ngôn ngữ khác nhau
Ứng dụng được cung cấp sẵn
- Mặc định có các ứng dụng cơ bản để tạo tài nguyên game như công cụ pixel art, công cụ tạo sprite, trình chỉnh sửa bản đồ
- Chưa có công cụ chỉnh sửa âm thanh và nhạc, nhưng bất kỳ ai cũng có thể tự phát triển rồi công khai/chia sẻ
- Các ứng dụng và công cụ đã tạo có thể được chia sẻ tới mọi người dùng qua iframe hoặc liên kết
Nguồn cảm hứng và điểm khác biệt
Các công cụ phát triển game được tham khảo
- pico8: theo đuổi chủ nghĩa tối giản, chỉ hỗ trợ một ngôn ngữ
- tic80: gỡ bỏ nhiều giới hạn của pico8
- love2d: cần IDE bên ngoài
- picotron: đưa vào kiến trúc kiểu hệ điều hành
- 90s.dev là một pico8 mang tính meta, và gần với love2d có TypeScript hoặc tic80 tập trung vào mở rộng theo chiều dọc hơn
Đổi mới GUI và chi tiết kỹ thuật
Hệ thống layout
- Đã triển khai một hệ thống auto layout đơn giản nhưng mạnh mẽ để giảm bớt sự phiền toái của việc bố trí thủ công và thay đổi kích thước
- View (API) tự trực tiếp vẽ lên màn hình và tận dụng cấu trúc cây view con
Hệ thống Ref
- Thuộc tính của view (kích thước, phần tử con, màu nền, v.v.) được quản lý thông qua watchable pointer (ref)
- Mọi thuộc tính đều được gắn đối tượng tham chiếu (ref), từ đó tự động phát hiện và áp dụng thay đổi thuộc tính
- Được thiết kế hoàn toàn tách biệt với ref của React/Vue hiện có
Composites (khái niệm view tổng hợp)
- Trong JSX, đảo ngược giữa thẻ chuỗi (chữ thường) và thẻ giá trị (chữ hoa) để tăng cường sự tách biệt giữa triển khai và cách sử dụng
- Đăng ký các view trừu tượng vào bảng toàn cục và có thể tự do sử dụng ở những phần khác của hệ thống
- Ví dụ: view colorpicker có cung cấp triển khai mặc định, nhưng nhà phát triển có thể thay thế bằng phong cách mình muốn
- Mang lại độ linh hoạt và khả năng mở rộng cao trong phát triển ứng dụng GUI
Phát hành ứng dụng và cộng đồng hợp tác
Thay đổi cách phát hành ứng dụng
- Trước đây dùng ổ chia sẻ
net/ dựa trên cơ sở dữ liệu riêng
- Gần đây hỗ trợ host và import mô-đun trực tiếp từ NPM/GitHub qua CDN
- Ví dụ:
/os/fs/ghb/someuser/project@1.0.0/some/file.js
- Hoàn thiện cơ chế tải từ nhiều nguồn khác nhau nhờ service worker
Tham gia và hợp tác
- Với thiết kế mang tính hệ điều hành, nền tảng khuyến khích phát triển các ứng dụng cộng đồng ngoài những ứng dụng thiết yếu (ứng dụng mặc định)
- Hỗ trợ giao tiếp và hợp tác qua issue tracker, forum, wiki (đều là GitHub repo)
- Issue: yêu cầu tính năng và báo lỗi
- Forum: công bố dự án và thảo luận
- Wiki: tập hợp và tuyển chọn các dự án
Chia sẻ ứng dụng
- Có thể chia sẻ ứng dụng bằng liên kết dạng
/os/#app
- Hướng tới việc tự do tạo ra và lan tỏa ứng dụng, thư viện và tài nguyên theo định hướng cộng đồng
Kết luận và định hướng
- 90s.dev là một nền tảng API thiết kế và định nghĩa chính hệ sinh thái game maker
- Hướng tới một môi trường làm game trên web có khả năng mở rộng, nơi bất kỳ ai cũng có thể dễ dàng tự tạo, phát hành và sử dụng ứng dụng
- Đây là công cụ phát triển game hướng tới tương lai dựa trên tinh thần hợp tác cộng đồng và triết lý nền tảng mở
2 bình luận
Cũng khiến tôi tò mò không biết bản thân game engine sẽ ra sao.
Ý kiến trên Hacker News
Chia sẻ trải nghiệm một ngày nọ thức dậy lúc 2 giờ sáng vào tháng 2 rồi cứ thế bắt đầu code, khi đó đã quá chán việc tiếp tục chờ đợi, và cứ tiếp tục viết mã để tạo ra một công cụ làm game dựa trên API, một game engine và cả trò chơi, rồi nhận ra đam mê thật sự của bản thân nằm ở việc thiết kế API, đồng thời chia sẻ cảm giác thấy những người tìm ra đam mê và dốc toàn lực theo đuổi nó thật tuyệt vời
Bày tỏ lời cảm ơn vì lời khen, tiếc nuối vì bản chất của dự án chưa được giải thích rõ, thực ra API mới là phần thú vị nhất nhưng lại không lộ ra bên ngoài nên thấy khá bức bối, nghĩ rằng lẽ ra nên chờ đến khi có thêm nhiều ví dụ cho thấy tính tiện dụng mang tính đổi mới của API, và hối tiếc vì đã phát hành quá vội
Tự nhận mình là tác giả của dự án lần này và cảm ơn vì phản hồi, thừa nhận rất rõ rằng đây là một lần phát hành quá sớm, đang cải thiện nhiều điểm đã được chỉ ra và bày tỏ quyết tâm sẽ quay lại trong vài tháng tới
Cho rằng đây hoàn toàn không phải là một lần phát hành quá sớm, khen đây là một dự án cực kỳ ngầu và được thiết kế quá mức đến mức ấn tượng, đánh giá là đỉnh cao theo phép ẩn dụ bike shed nổi tiếng, và vô cùng kinh ngạc vì còn tự triển khai cả một hệ thống phản ứng riêng
Đánh giá đây là thời điểm hoàn hảo cho Show HN, xem qua Hello World tour là có thể trực quan hiểu ngay dự án là gì, nếu đã có kinh nghiệm với PICO-8 và React thì sẽ càng thấy thú vị hơn, cũng cho rằng việc chọn tỷ lệ 16:9 là sáng suốt, đồng thời nêu ý kiến rằng tỷ lệ vuông của PICO-8 khá kỳ
Cảm ơn vì đã phát hành sớm, mạnh mẽ khuyến nghị chiến lược phát hành thường xuyên, nhắc đến việc 10.000 lần lặp là con đường dẫn đến thành công và nhấn mạnh rằng một lần thử chỉ mới là khởi đầu
Gửi lời động viên rằng đây không hề là phát hành quá sớm, và cổ vũ rằng tác giả đang làm rất tốt
Dù chưa đào sâu, vẫn thú nhận rằng bản thân đang ngày càng bị sức hút retro này cuốn lấy, có lẽ vì cảm giác an ủi từ một thời kỳ cũ đơn giản và dễ chịu hơn đang sống lại mỗi khi nhìn thấy những dự án như thế này
Hỏi liệu ứng dụng paint có hoạt động hay không, đã thử trên Firefox và Chrome nhưng sau khi chọn màu rồi nhấp vẫn không vẽ được gì, console cũng không có lỗi nào, ngoài ra còn bày tỏ sự thán phục vì đã tái hiện thành công cảm giác thập niên 90, lúc đầu còn tưởng là phong cách terminal thập niên 70~80, nhưng nhìn kỹ mới nhận ra đúng là thập niên 90 thực sự trông như vậy, và bày tỏ kỳ vọng vào sự phát triển sau này
Nhắc rằng rất xin lỗi vì đã gây nhầm lẫn, mới chỉ phát triển đến phần bộ chọn màu và phần sau vẫn chưa được triển khai, có vẻ sẽ có thể hoàn thành trong vòng một giờ nữa, đồng thời cho biết ý định phát triển ngay từ đầu là tái hiện niềm vui và sức mạnh của việc phát triển ứng dụng GUI với cảm giác thập niên 90, muốn chỉ giữ lại sự ngạc nhiên chứ không giữ lại sự bất tiện nên mới đặt tên là 90s.dev
Đề cập khả năng tính năng đó vẫn chưa được triển khai, nếu nhấp nút “hash” ở góc trên bên trái cửa sổ rồi chọn “View Source” thì có thể thấy UI mới chỉ được mock, và trong vùng cuộn chỉ có đoạn mã vẽ hoa văn đơn giản
Với tôi cũng không hoạt động
Dù chưa hiểu hoàn toàn bản thân dự án, vẫn bị phần cảm xúc của nó cuốn hút mạnh mẽ, cảm thấy thật thú vị khi chỉ riêng bầu không khí cảm xúc và yếu tố thị giác cũng có thể ảnh hưởng lớn đến cảm xúc con người và kéo thêm nhiều sự chú ý
Tự mình suy nghĩ về cách giải thích, vì muốn tạo ra một pico8 dễ dùng hơn nên đã làm thiết kế 320x180 và prototype, đồng thời cũng muốn có mọi tiện ích của VS Code cùng hỗ trợ TypeScript, nên cuối cùng đã lên kế hoạch như một nền tảng có thể tạo và phân phối những gì vốn nằm trong các tab của pico8, và giờ nghĩ lại thì cũng thấy lần này đã phát hành quá sớm
Bản thân thích cảm giác này, nhưng cho rằng tỷ lệ 16:9 kết hợp với PC thập niên 90 thì không hợp, và thích hơn cảm giác đặc trưng của màn hình CRT gần vuông
Gửi lời cảm ơn và than rằng việc giải thích thật sự quá khó, thú nhận rằng bài viết lần này rốt cuộc chỉ là một nỗ lực để giải thích ngắn nhất có thể mình đã tạo ra cái gì, nhưng ngay cả khi phiên bản đã ngắn thì nội dung vẫn khó tránh khỏi mơ hồ nên đành buông xuôi một cách thành thật
Nghĩ rằng dự án rất ngầu nhưng lúc bắt đầu hơi khó tiếp cận, và đề xuất rằng sẽ rất tốt nếu có một walkthrough ngắn về cách tạo một mini game
Gửi lời cảm ơn và giải thích rằng hiện tại cách build game giống hệt tutorial build app, chỉ là tạo custom view rồi override phương thức
draw, để có hiệu năng tốt hơn thì nên tạo và dùngOffscreenCanvas, đồng thời hiện vẫn chưa cung cấp API giúp bọcWebGL2thuận tiện hơn, nhưng hứa rằng sau này nhất định sẽ làm một tutorial để cả người mới cũng có thể tự tạo trọn vẹn một trò chơi, còn hiện tại vì đang tập trung vào app nên trước hết sẽ ưu tiên phát triển các công cụ làm game như sprite, map, v.v., và chia sẻ liên kết tutorial Hello WorldCảm thấy dự án cực kỳ thú vị, như được lập tức quay về thời thơ ấu, cũng thích pico8 nhưng bản thân thuộc thế hệ lớn lên với desktop và GUI hơn nên pico8 có cảm giác như sớm hơn một thế hệ, còn dự án này gợi lên nỗi hoài niệm như thể đang mua lại CD
Cũng giới thiệu Picotron do nhà phát triển Pico8 tạo ra, giải thích rằng nó giống Pico8 nhưng là một desktop OS ít bị ràng buộc hơn một chút, bản thân chưa dùng thử mà chỉ mới xem GIF nhưng cảm thấy paradigm dự án tương tự, và thấy nó giống dự án của mình ở chỗ cùng hướng tới một “nền tảng” nơi có thể tạo ra pico8 bên trong, cho rằng hai bên đang theo đuổi cùng một lý tưởng theo những cách khác nhau
Bị mắc kẹt ngay ở bước đầu tiên của hướng dẫn Getting Started, đã tải
helloworld.zipvề máy, mởfiler.app.jstrên web rồi nhấn nút mount và nhậphelloworld/applàm drive name nhưng không có phản hồi gì, cảm thấy bối rối về cách upload file zip lên instance 90s.devCảm ơn vì phản hồi, rất có thể đang dùng Firefox, tính năng đó phụ thuộc vào
showDirectoryPickermà Firefox không hỗ trợ nên khuyến nghị dùng Chrome, ngoài ra ở drive name chỉ nên nhập tên không kèm đường dẫn, ví dụ“foo”, và hứa sẽ sớm sửa lại hướng dẫn, đồng thời giải thích rằng sau đófoo/helloworld.app.jssẽ được nối với đường dẫn local thực tếBày tỏ rằng rất thích cảm giác thập niên 90 này, đặc biệt là font rất ấn tượng, và nhận ra gu của mình là bị thu hút bởi thiết kế thập niên 90 hơn nhiều so với pixel art kiểu thập niên 80
Nêu phê bình về landing page, cảm thấy việc gọi dự án là ‘game maker’ nhưng đồng thời lại bảo ‘không phải game maker’ là một cách giải thích mâu thuẫn gây bối rối, và chỉ ra rằng cách dùng thuật ngữ thiếu nhất quán
Nhắc rằng đặt tên vốn dĩ là một vấn đề cực kỳ khó, xem đó là một trong những bài toán khó nhất trong khoa học máy tính, cùng với cache invalidation