Image default
Máy Tính

Cách Lưu Trữ Dữ Liệu Trong Pokémon Emerald: Hơn Cả Một Trò Chơi Cũ

Pokémon Emerald là một tựa game tuyệt vời, và chắc chắn nhiều người sẽ cảm thấy hoài niệm khi nghĩ về các trò chơi Pokémon cũ nói chung. Ngày nay, những tựa game Pokémon đời đầu này có một cộng đồng modding cực kỳ thú vị, với rất nhiều bản sửa đổi do người hâm mộ tạo ra, kéo dài tuổi thọ của chúng hàng thập kỷ sau. Tuy nhiên, cộng đồng modding đó cũng đã tạo ra một khả năng đặc biệt: lưu trữ một tệp tin bên trong Pokémon Emerald. Chính xác hơn là một tệp tin có kích thước lên đến 10.8 KB… và tôi đã thử nghiệm nó.

Hãy hình dung khi bạn mở một tệp tin trên máy tính của mình, chẳng hạn như một tài liệu văn bản, một hình ảnh, hoặc thậm chí là trang web này, bạn đang xem 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 diễn giải để hiển thị dữ liệu như bạn mong đợi. Trong trường hợp của một trang web, bạn có thể dễ dàng thấy ý tôi là gì bằng cách xem mã nguồn trang. Bạn có thể 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, theo cùng một cách mà máy tính của bạn biết cách đọc dữ liệu bên trong một tệp JPG để diễn giải và hiển thị một hình ảnh.

Khái quát hóa khái niệm đó có nghĩa là, thực sự, bất cứ thứ gì đều có thể hoạt động như một vùng chứa tệp, miễn là có một cách cấu trúc để dữ liệu có thể được lưu và sau đó 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 có thể… và tất cả là nhờ vào mon-fs, nơi dữ liệu của bạn sẽ được mã hóa dưới dạng các Pokémon. Quá trình này có thể chậm và mất công, nhưng đó là một cách thực sự độc đáo để giải thích cách dữ liệu được lưu trữ và làm thế nào hầu như bất cứ thứ gì cũng có thể được sử dụng để chứa dữ liệu.

Giao diện Red Star OS 3 chạy trong máy ảo, hiển thị danh sách ứng dụng và menu khởi động, minh họa hệ điều hành độc đáoGiao diện Red Star OS 3 chạy trong máy ảo, hiển thị danh sách ứng dụng và menu khởi động, minh họa hệ điều hành độc đáo

Hiểu Về Cấu Trúc Dữ Liệu Của Pokémon

68 Bit Dữ Liệu Cho Mỗi Pokémon

Hãy nhìn vào các hình ảnh trên, được chụp từ quá trình mã hóa một tệp tin vào tệp lưu của tôi trong Emerald. Bản thân Pokémon, biệt danh của nó, giới tính, OT (Original Trainer), ruy băng, quả cầu 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 có hai chế độ: “Full” (Toàn phần) và “Lite” (Rút gọn).

  • Lite: Một tệp tin có kích thước lên đến 3.2 KB có thể được lưu trữ trong game, nhưng 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ó kích thước lên đến 10.8 KB có thể được lưu trữ trong game, nhưng sẽ yêu cầu một trình chỉnh sửa tệp lưu (save editor) để hoạt động.

Sự khác biệt giữa hai chế độ này nằm ở dữ liệu dễ dàng tiếp cận với người dùng. Ví dụ, có 386 Pokémon trong Emerald, điều này sẽ 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à tính đến các Pokémon chỉ có thể bắt một lần hoặc nhận được thông qua trứng, con số này giảm xuống thêm. Sau khi tất cả các Pokémon đó được loại bỏ khỏi phương trình và tính thêm yếu tố tiện lợi, con số này chỉ 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ả chúng đều có tỷ lệ xuất hiện từ 20% trở lên. Chúng cũng có cơ hội ngang nhau để là đực hoặc cái khi bắt gặp, điều này cung cấp thêm một bit dữ liệu ngoài hai bit được cung cấp bởi bốn Pokémon này.

Cách tiếp cận này có thể có nghĩa là bạn không thể lưu trữ nhiều dữ liệu, nhưng nó có nghĩa là việc một người thực sự đi bắt các Pokémon này, đặt tên chúng đúng cách và cho chúng các vật phẩm phù hợp để đại diện cho dữ liệu thực sự trở nên dễ dàng hơn đáng kể. Về tên gọi, điều 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. Các dấu cách được loại trừ để việc nhập tên thủ công dễ dàng hơn. Cuối cùng, vật phẩm giữ cung cấp 5 bit dữ liệu, vì 32 vật phẩm có thể được mua rẻ trong game và đưa cho Pokémon giữ.

Tất cả những điều này đưa chúng ta đến 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

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

Quá Trình Mã Hóa Tệp Thành Các Pokémon

Thực Hiện Thủ Công Từng Bước

Giao diện website mon-fs hiển thị danh sách các Pokémon cần bắt, tên gọi và vật phẩm giữ để mã hóa dữ liệu ở chế độ LiteGiao diện website mon-fs hiển thị danh sách các Pokémon cần bắt, tên gọi và vật phẩm giữ để mã hóa dữ liệu ở chế độ Lite

Có một tiện ích web đi kèm với mon-fs sẽ lấy một tệp tin và cho bạn biết những Pokémon bạn cần, vật phẩm để cho chúng và tên cần đặt cho chúng. 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ại lên cùng trang web để nhận lại tệp đầu ra. Như bạn có thể thấy ở hình trên, nó đưa ra các yêu cầu sau:

  • Poochyena: Giới tính đực, không giữ vật phẩm, 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 giữ vật phẩm, tên “pRh/vBaCaa”
  • Poochyena: Giới tính đực, giữ Revive, tên “aaaaaaiwg6”
  • Whismur: Giới tính cái, không giữ vật phẩm, tên “qBcxefviaa”

Bây giờ, giả sử tôi bắt tất cả những Pokémon này, thì điều gì sẽ xảy ra tiếp theo? Làm thế nào một người có thể lấy thông tin, đưa cho người khác, và để họ giải mã nó? Họ có thể sử dụng công cụ mon-fs mà bạn cung cấp ảnh chụp màn hình, sử dụng công nghệ OCR, và trả về một 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, tự nhập chi tiết trên trang web và giải mã tại đó.

Giao diện website mon-fs cho phép giải mã dữ liệu từ các Pokémon đã nhập thủ công, hiển thị nội dung file được khôi phụcGiao diện website mon-fs cho phép giải mã dữ liệu từ các Pokémon đã nhập thủ công, hiển thị nội dung file được khôi phục

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

Có một số hạn chế được đặt ra ở đây để giúp một người “bình thường” thực hiện điều này trong game với các công cụ có sẵn, mặc dù chế độ “Full” tăng đáng kể khả năng lưu trữ. Ở chế độ này, bộ nhớ tăng lên 211 bit trên mỗi Pokémon, hoặc khoảng 11.05 KB. Tài liệu trên kho lưu trữ GitHub không nêu rõ lý do tại sao, 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ù tôi không chắc chắn.

Giá Trị Thú Vị Thay Vì Thực Tế

Pokémon Emerald Không Phải Cách Thức Chia Sẻ File Hiệu Quả

Hình ảnh một Pokémon được tạo hoặc chỉnh sửa theo hướng dẫn của mon-fs trong game Pokémon Emerald, minh họa dữ liệu được lưu trữHình ảnh một Pokémon được tạo hoặc chỉnh sửa theo hướng dẫn của mon-fs trong game Pokémon Emerald, minh họa dữ liệu được lưu trữ

Tôi đã thử nghiệm với một phiên bản mon-fs được xây dựng cục bộ để chèn Pokémon và đọc chúng trở lại từ tệp lưu của game, và trong khi quá trình chèn hoạt động, việc đọc lại thì không. Chương trình đã thất bại trong việc đọc luồng dữ liệu từ tệp lưu, và 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 được. Tuy nhiên, việc nhập thủ công trên trang web mon-fs hoạt động, và một người thực sự tận tâm với việc chuyển tệp tin qua Pokémon có thể làm điều đó một cách thủ công.

Mặc dù dự án đặc biệt 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 đều có thể được sử dụng theo cách này về mặt kỹ thuật, 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. Tất nhiên, những kỹ thuật 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 giới hạn của trò chơi.

Các khối len màu sắc trong Minecraft, minh họa khả năng sử dụng từng màu để đại diện cho các bit dữ liệu, tương tự kỹ thuật lưu trữ trong PokémonCác khối len màu sắc trong Minecraft, minh họa khả năng sử dụng từng màu để đại diện cho các bit dữ liệu, tương tự kỹ thuật lưu trữ trong Pokémon

Toàn bộ dự án này thật điên rồ, thú vị và nó có thể dạy cho bạn rất nhiều điều về các cấu trúc dữ liệu và cách bất cứ thứ gì có thể là 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 mỗi “khối” dữ liệu. Để kết thúc với 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 tới các màu đó, với log_2 của 16 có nghĩa là chúng ta sẽ nhận được 4 bit lưu trữ trên mỗi khối. Chỉ với 100 khối, bạn có thể đại diện cho 0.05 KB dữ liệu; đó không phải là nhiều, nhưng đó 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ể đại diện cho 0000, màu xám nhạt 0001, v.v.

Nếu bạn quan tâm đến việc thử nghiệm điều này, hãy xem kho lưu trữ GitHub của mon-fs và truy cập trang web mon-fs. Cả hai sẽ hướng dẫn bạn thiết lập và cấu hình nó, đồ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 mắt. Hãy chia sẻ suy nghĩ và khám phá của bạn về kỹ thuật lưu trữ độc đáo này trong phần bình luận bên dưới!

Related posts

Self-Hosting Là Gì? Tại Sao Bạn Nên Quan Tâm Đến Việc “Tự Host”

Administrator

5 Lợi Ích Vượt Trội Khi Tự Host Ứng Dụng Ghi Chú Cá Nhân

Administrator

6 Cài Đặt Router Quan Trọng Để Tăng Cường Bảo Mật Mạng Wi-Fi Gia Đình

Administrator