Image default
Máy Tính

Cách Lưu Trữ Dữ Liệu Vào Game Pokémon Emerald: Một Khám Phá Thú Vị Về Cấu Trúc Dữ Liệu

Pokémon Emerald là một tựa game kinh điển, và chắc hẳn nhiều người vẫn còn hoài niệm về những tựa game Pokémon đời đầu nói chung. Ngày nay, cộng đồng modding dành cho các trò chơi Pokémon cũ này vẫn vô cùng sôi động, với rất nhiều bản sửa đổi do người hâm mộ tạo ra, giúp kéo dài tuổi thọ của chúng hàng thập kỷ. Tuy nhiên, chính cộng đồng modding đó cũng đã tạo ra một cách thức độc đáo: lưu trữ một tệp tin bên trong Pokémon Emerald. Chính xác hơn, một tệp tin có dung lượng lên tới 10.8 KB… và chúng tôi đã thử nghiệm điều này.

Khi bạn mở một tệp trên máy tính, chẳng hạn như tài liệu văn bản, hình ảnh, hoặc thậm chí là trang web này, bạn đang nhìn vào một tập hợp các cấu trúc dữ liệu mà máy tính của bạn biết cách giải thích để biểu diễn dữ liệu mà bạn mong muốn. Với một trang web, bạn có thể dễ dàng nhận thấy điều này bằng cách xem mã nguồn. Bạn sẽ thấy mã HTML mà trình duyệt của bạn biết cách diễn giải và hiển thị cho bạn, tương tự như cách máy tính của bạn biết đọc dữ liệu bên trong một tệp JPG để hiển thị hình ảnh.

Khái quát hóa khái niệm này, thực chất bất cứ thứ gì cũng có thể đóng vai trò là một “hộp chứa file”, miễn là có một cách thức có cấu trúc để dữ liệu có thể được lưu trữ và sau đó được truy xuất trong tương lai. Vì vậy, việc lưu trữ dữ liệu trong Pokémon Emerald là hoàn toàn khả thi… và tất cả là nhờ công cụ mon-fs, nơi dữ liệu của bạn sẽ được mã hóa thành Pokémon. Nghe có vẻ phức tạp và chậm chạp, nhưng đây là một cách thực sự thú vị để giải thích cách dữ liệu được lưu trữ và làm thế nào mà hầu như mọi thứ đều có thể được sử dụng để lưu trữ dữ liệu.

Hiểu Về Cấu Trúc Dữ Liệu: Mọi Thứ Đều Có Thể Là “Hộp Chứa File”

Như đã đề cập, nguyên tắc cơ bản đằng sau việc lưu trữ dữ liệu trong Pokémon Emerald khá đơn giản khi được trừu tượng hóa. Mỗi tệp tin, từ một hình ảnh đơn giản đến một tài liệu phức tạp, đều là một chuỗi các bit (0 và 1) được sắp xếp theo một cấu trúc nhất định. Hệ điều hành và các ứng dụng sẽ đọc cấu trúc này để tái tạo lại thông tin gốc. Điều thú vị là, chúng ta có thể “giấu” những chuỗi bit này vào những nơi không ngờ tới, miễn là chúng ta có khả năng kiểm soát và ghi lại một cách có cấu trúc.

Công cụ mon-fs chính là cầu nối biến ý tưởng này thành hiện thực trong thế giới game. Nó không chỉ đơn thuần là một bản mod, mà là một ví dụ minh họa sống động về cách các thuộc tính của một vật thể ảo (trong trường hợp này là Pokémon) có thể được sử dụng để biểu diễn thông tin kỹ thuật số.

Pokémon Emerald: Một “Kho Lưu Trữ” Bất Ngờ Với 68 Bit Dữ Liệu Mỗi Pokémon

Mỗi Pokémon trong game Emerald không chỉ là một nhân vật đơn thuần mà còn sở hữu rất nhiều dữ liệu liên quan. Hãy nhìn vào những hình ảnh dưới đây, được chụp từ quá trình mã hóa một tệp vào bản lưu Emerald của chúng tôi. Bản thân Pokémon, biệt danh, giới tính, OT (Original Trainer), ruy băng, loại bóng dùng để bắt, và kinh nghiệm đều là những giá trị mà người chơi có thể tác động, và đó chính xác là cách mon-fs hoạt động.

Công cụ này đi kèm với hai chế độ: “Full” (Đầy đủ) và “Lite” (Tối giản).

  • Lite: Một tệp tin có dung lượng lên đến 3.2 KB có thể được lưu trữ trong game, và mỗi Pokémon có thể được bắt và đặt tên mà không cần bất kỳ công cụ bên ngoài nào.
  • Full: Một tệp tin có dung lượng lên đến 10.8 KB có thể được lưu trữ trong game, nhưng sẽ yêu cầu sử dụng trình chỉnh sửa dữ liệu lưu (save editor) để hoạt động.

Sự khác biệt giữa hai chế độ này nằm ở lượng dữ liệu dễ dàng truy cập bởi người dùng. Ví dụ, có 386 Pokémon trong Emerald, cho phép lưu trữ 8 bit dữ liệu. Tuy nhiên, chỉ có 202 Pokémon có thể bắt được, và nếu tính đến những Pokémon chỉ có thể bắt một lần hoặc nhận qua trứng, con số này sẽ giảm đi đáng kể. Sau khi loại bỏ những Pokémon đó và tính đến yếu tố tiện lợi, con số này được thu gọn xuống còn bốn Pokémon riêng biệt, cho phép lưu trữ hai bit dữ liệu. Bốn Pokémon này là:

  • Poochyena
  • Whismur
  • Taillow
  • Nincada

Cả bốn Pokémon này đều có thể bắt được trên Tuyến đường 116, và tất cả đều có tỷ lệ xuất hiện từ 20% trở lên. Chúng cũng có khả năng xuất hiện với giới tính đực hoặc cái như nhau khi bắt gặp, cung cấp thêm một bit dữ liệu ngoài hai bit mà bốn Pokémon này cung cấp.

Mặc dù cách tiếp cận này có thể không lưu trữ được nhiều dữ liệu, nhưng nó có nghĩa là một người bình thường sẽ dễ dàng hơn rất nhiều trong việc đi bắt những Pokémon này, đặt tên đúng cách và cho chúng những vật phẩm phù hợp để biểu diễn dữ liệu thực tế. Về tên, phần này cung cấp 60 bit dữ liệu và sử dụng mọi ký tự tiếng Anh cùng hầu hết các ký hiệu. Dấu cách bị loại trừ để dễ dàng nhập tên bằng tay. Cuối cùng, vật phẩm giữ (held items) cung cấp 5 bit dữ liệu, vì có 32 vật phẩm có thể mua rẻ trong game và đưa cho Pokémon giữ.

Tất cả những điều này mang lại cho chúng ta các điểm dữ liệu sau:

  • Loài (Species): 2 bit
  • Tên (Name): 60 bit
  • Giới tính (Gender): 1 bit
  • Vật phẩm giữ (Item Held): 5 bit

Điều này cung cấp tổng cộng 68 bit trên mỗi Pokémon, và với 419 vị trí trống có sẵn (vị trí cuối cùng sẽ cần được sử dụng cho phần đệm), chúng ta có tổng cộng 28488 bit khả dụng, tương đương 3.561 KB.

Quy Trình Mã Hóa File Thành Pokémon: Thử Nghiệm Thủ Công

Có một tiện ích web đi kèm với mon-fs sẽ lấy một tệp và hiển thị cho bạn những Pokémon cần thiết, vật phẩm cần đưa cho chúng và tên cần đặt. Bạn có thể lưu một tệp “pc.json” để phác thảo những yêu cầu này, và tệp này có thể được tải lên lại trang web tương tự để nhận lại tệp đầu ra.

Giao diện công cụ web mon-fs cho chế độ Lite, hiển thị các Pokémon cần thiết và thông tin mã hóaGiao diện công cụ web mon-fs cho chế độ Lite, hiển thị các Pokémon cần thiết và thông tin mã hóa

Như bạn có thể thấy ở trên, nó đưa ra các yêu cầu sau:

  • Poochyena: Giới tính đực, không có vật phẩm giữ, tên “baaaaaaaaa”
  • Nincada: Giới tính đực, giữ X Accuracy, tên “aaaaaaaaaa”
  • Poochyena: Giới tính đực, giữ Full Heal, tên “aaaaaaaaaa”
  • Nincada: Giới tính cái, giữ Awakening, tên “g6n?Gizsvr”
  • Whismur: Giới tính đực, không có vật phẩm giữ, tên “pRh/vBaCaa”
  • Poochyena: Giới tính đực, giữ Revive, tên “aaaaaaiwg6”
  • Whismur: Giới tính cái, không có vật phẩm giữ, tên “qBcxefviaa”

Vậy, giả sử bạn đã bắt được tất cả những Pokémon này, điều gì sẽ xảy ra tiếp theo? Làm thế nào để ai đó có thể lấy thông tin, chuyển cho người khác và nhờ họ giải mã? Họ có thể sử dụng công cụ mon-fs nhận ảnh chụp màn hình, dùng OCR (nhận dạng ký tự quang học), và xuất ra tệp pc.json… hoặc người dùng khác có thể tải tệp lưu của bạn lên, nhập thủ công các chi tiết vào trang web, và giải mã ngay tại đó.

Giao diện công cụ web mon-fs dùng để giải mã dữ liệu từ các Pokémon đã mã hóaGiao diện công cụ web mon-fs dùng để giải mã dữ liệu từ các Pokémon đã mã hóa

Dù bằng cách nào, bạn sẽ phải trải qua quá trình tái tạo tệp một cách tỉ mỉ. Chưa kể việc đi ra ngoài và bắt Pokémon cũng sẽ mất một khoảng thời gian, vì vậy đây không phải là một cách thực tế để truyền tệp cho người khác.

Có một số hạn chế được áp dụng ở đây để làm cho việc này dễ dàng hơn cho một người “bình thường” thực hiện trong game với các công cụ có sẵn. Tuy nhiên, chế độ “Full” nâng cao khả năng lưu trữ đáng kể. Ở chế độ này, dung lượng lưu trữ tăng lên 211 bit trên mỗi Pokémon, tương đương khoảng 11.05 KB. Tài liệu trên kho lưu trữ GitHub không nêu rõ lý do, nhưng chế độ “Full” trên trang web mon-fs cho biết các tệp dưới 10.8 KB được đảm bảo hoạt động. Điều này có thể liên quan đến các giá trị đệm một lần nữa, mặc dù chúng tôi không chắc chắn.

Ứng Dụng Thực Tế Dù Không Hiệu Quả: Bài Học Về Cấu Trúc Dữ Liệu

Chúng tôi đã thử nghiệm với mon-fs được xây dựng cục bộ để chèn Pokémon và đọc chúng ra khỏi tệp lưu game, và mặc dù quá trình chèn hoạt động, việc đọc lại dữ liệu lại không thành công. Chương trình đã thất bại trong việc đọc luồng dữ liệu từ tệp lưu, và chúng tôi cũng không thể làm cho công cụ đọc ảnh chụp màn hình bằng OCR và chuyển đổi chúng theo cách đó hoạt động. Tuy nhiên, việc nhập thủ công trên trang web mon-fs vẫn hoạt động, và bất kỳ ai thực sự tận tâm với việc truyền tệp qua Pokémon đều có thể làm như vậy bằng tay.

Hình ảnh các Pokémon đã được inject dữ liệu vào hộp PC trong game Pokémon Emerald qua mon-fsHình ảnh các Pokémon đã được inject dữ liệu vào hộp PC trong game Pokémon Emerald qua mon-fs

Mặc dù dự án cụ thể này chắc chắn không thực tế đối với hầu hết mọi người, nhưng nó vẫn là một dự án thú vị. Bất kỳ trò chơi nào cho phép bất kỳ loại dữ liệu do người dùng kiểm soát nào về mặt kỹ thuật đều có thể được sử dụng theo cách này, và chúng ta đã thấy các kỹ thuật tương tự cho phép thực thi mã tùy ý trong nhiều trò chơi trước đây, bao gồm cả Pokémon Diamond và Pearl. Đương nhiên, những trường hợp này phức tạp hơn đáng kể so với việc chỉ tạo ra một cấu trúc được nhận dạng từ dữ liệu người dùng và diễn giải nó từ bên ngoài ranh giới của trò chơi.

Toàn bộ dự án này vừa điên rồ, vừa thú vị, và nó có thể dạy bạn rất nhiều về cấu trúc dữ liệu và cách mọi thứ có thể trở thành một phần của cấu trúc dữ liệu nếu bạn có thể kiểm soát thứ tự và một số tham số của các mục được sử dụng để xây dựng từng “khối” dữ liệu. Để cung cấp một ví dụ khác dễ hình dung hơn, người ta có thể làm điều này trong một trò chơi như Minecraft. Có 16 màu len trong Minecraft, và bạn có thể ánh xạ 0-F vào những màu đó, nghĩa là log_2 của 16 sẽ cho chúng ta 4 bit lưu trữ trên mỗi khối đơn lẻ. Với chỉ 100 khối, bạn có thể biểu diễn 0.05 KB dữ liệu; con số này không nhiều, nhưng nó là một khái niệm tương tự như việc lưu trữ dữ liệu trong Pokémon Emerald. Một khối len trắng có thể biểu thị 0000, màu xám nhạt 0001, và cứ thế.

Các khối len với nhiều màu sắc khác nhau trong Minecraft, minh họa khả năng lưu trữ dữ liệu theo mã màuCác khối len với nhiều màu sắc khác nhau trong Minecraft, minh họa khả năng lưu trữ dữ liệu theo mã màu

Nếu bạn quan tâm đến việc thử nghiệm điều này, hãy truy cập kho lưu trữ GitHub của mon-fs và xem trang web mon-fs. Cả hai sẽ hướng dẫn bạn thiết lập và cấu hình, đồng thời có thể cung cấp cho bạn một số ý tưởng về những nơi kỳ lạ khác mà bạn có thể lưu trữ dữ liệu, ẩn mình trong tầm nhìn rõ ràng.


Related posts

Đánh Bại Sự Hỗn Loạn: Plugin Juggl Biến Graph View Của Obsidian Thành Công Cụ Mạnh Mẽ

Administrator

Mẹo Tối Ưu Tính Năng Audio Overviews Của Google NotebookLM Để Nâng Cao Năng Suất

Administrator

Windows Sắp Lột Xác Cho Game Thủ: Giao Diện Mới Trên ROG Xbox Ally Có Gì Đột Phá?

Administrator

Các Loại Vật Liệu In 3D Vượt Trội Thay Thế PLA: Nâng Cấp Dự Án Của Bạn

Administrator

5 Tác Vụ Bảo Trì PC Bạn Tuyệt Đối Không Nên Tự Thực Hiện

Administrator

Cách Mã Hóa Email trong Outlook: Bảo Vệ Thông Tin Nhạy Cảm Hiệu Quả

Administrator