FF7 nhìn từ phương diện kỹ thuật

Thảo luận trong 'Tin tức - Giới thiệu - Thảo luận chung về game' bắt đầu bởi asm65816, 17/5/15.

  1. Rociel

    Rociel シェンムー Ryo Hazuki

    Tham gia ngày:
    7/8/03
    Bài viết:
    9,574
    Nơi ở:
    Hồ Chí Minh
    Hết trò rồi hay chán chường hay sao mà đi đâu cũng thấy post FF...
     
  2. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Cập nhật kernel ở trang 1.
     
  3. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Định dạng bản PSX và bản PC

    Các file và dữ liệu của FF7 trên bản PSX và bản PC đều như nhau, có cùng chức năng nhưng định dạng của chúng khác nhau khá nhiều. FF7 cho PSX đầu tiên được phát triển dựa trên nền tảng thư viện Psy-Q vốn "quen thuộc" với máy PSX. Người ta đã dùng nhiều công cụ để chuyển đổi các định dạng như TGA hay GIF sang định dạng TIM cố hữu của Psy-Q.
    Trong quá trình phát triển bản PC, một vài thiết kế ban đầu không còn phù hợp bởi nhiều file sử dụng Psy-Q tương thích với cấu trúc của PC rất kém nên phải chuyển đổi. Chẳng hạn, các file TIM (định dạng hình ảnh của PSX) được chuyển đổi sang định dạng TEX vốn được khai thác hiệu quả hơn trong Vram của PC.
    Tình hình còn phức tạp hơn khi cả bản PSX và PC đều lưu trữ archive theo những cách khác nhau, khiến việc giải nén và render file phức tạp hơn. Trong nhiều trường hợp thì dữ liệu trong các file này là như nhau.
    Phần lớn dữ liệu được lưu trữ theo các định dạng archieve để tiết kiệm dung lượng, truy cập nhanh hay tối ưu hóa cấu trúc file. Một số kiểu archieve thường thấy là kiểu BIN, BIN-GZIP, định dạng nén LZS vốn rất phổ biến trong các game console và định dạng LGP. BIN là định dạng không nén, với header 4 byte chỉ độ dài phần dữ liệu phía sau nó, không bao gồm 4 byte này. Định dạng LZS có header ở 0x00 chỉ định rõ dung lượng của file sau khi được giải nén, và phía sau đó là vùng dữ liệu nén. Mỗi block trong file bắt đầu bằng 1 byte chỉ định block đó có dung lượng thế nào sau khi giải nén (dữ liệu thật) và dung lượng khi nén (tham chiếu). Đọc từ phải qua trái, với 1=thật, 0=tham chiếu. Phần dữ liệu thật có ý nghĩa: đọc 1 byte từ "nguồn" (nén) và ghi thẳng ra output. Dữ liệu tham chiếu gồm 2 byte, là Pointer chỉ đến dữ liệu đã được viết ra và bao gồm 2 thông tin: Offset (tìm dữ liệu ở đâu, hay phần dữ liệu nào sẽ được lặp lại) và độ dài. Phần tham chiếu (16 bit) thường ở dạng

    OOOO OOOO LLLL

    Trong đó O là Offset, L là độ dài.

    Ở đây ta có 12 bit chỉ Offset và 4 bit chỉ độ dài. Cả 2 giá trị này cần được điều chỉnh tiếp để hoạt động. Chẳng hạn, phải +3 vào độ dài để tính toán. Tại sao? Vì nếu dữ liệu được lặp lại ít hơn 3 byte thì chẳng ai phí công làm giải thuật nén cho nó. Vì vậy nên mọi dữ liệu tham chiếu đều có độ dài ít nhất là 3 byte. Độ dài 0 có nghĩa là 3 byte được lặp lại, độ dài 1 có nghĩa là 4 byte được lặp lại... Vì ở đây ta có 4 bit nên độ dài cuối cùng dao động từ 3~18 byte (%1111=$0F=15, +3=18). Điều này có nghĩa rằng tỷ lệ nén tối đa với giải thuật LZS là 9:1
     
  4. Evil Spirits

    Evil Spirits Nam Vương Thư Giãn Lão Làng GVN

    Tham gia ngày:
    15/10/05
    Bài viết:
    19,054
    Nơi ở:
    Hải Phòng
    Phần 7 này dc đánh giá khá cao trong tất cả các phần , cũng nhiều phụ bản , thậm chí ra hẳn vài cái Anime .
    Thế mà nó không chịu Remake lại nhỉ ? 8-x
     
  5. holysage1987

    holysage1987 C O N T R A

    Tham gia ngày:
    28/7/06
    Bài viết:
    1,762
    Nơi ở:
    HCM,Q Phu Nhuan
    Ta vẫn còn giữ cái đĩa FF7 PC port cũ mèm ngày xưa! :v Giờ mà nhét vô ổ đĩa chắc toi lun cái máy wa'! :D

    Không phải ko chịu remake đâu mà hầu như các nhân viên của Square đều bị kẹt với rất nhìu dự án đã hoạch định trong tương lai rùi! Hồi trc có tin hành lang là phải 40 năm nữa mới remake FF7 lại được! OMG!!!!
     
  6. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Trong post 1 đã nói rõ vì sao không remake rồi mà.




    Texture​


    Thực chất, texture là một bức hình chứa trong Vram, sau đó nó được engine xử lý và thể hiện ra màn hình. Texture căn bản trên các game PSX là TIM (Texture Image Map) và file này có thể chứa nhiều CLUT và đây là lý do để cần một video card trên PC để có thể chứa dữ liệu pallet ngay cả ở độ sâu màu cao.
    Định dạng TIM có thể ở dạng raw hay nằm trong một vài kiểu archieve, như BIN, LZS hay MNU. Định dạng này được tạo ra vì PSX không thể trực tiếp truy cập vào Vram của nó và buộc phải đi qua GPU để truy cập bất kỳ hình ảnh nào. File TIM là cách đơn giản để tải texture và CLUT vào trong Vram.

    CLUT là viết tắt của chữ "Color Look Up Table". Trong Vram của PSX thì nó xác định vị trí của bảng độ sâu màu cao và sử dụng nó làm tham chiếu đến texture đã được đánh pallet. CLUT trong Vram có thể bị Vram thay đổi trực tiếp và dữ liệu màu được cập nhật xuất hiện tự động trên màn hình mà không cần phải re-render.
    Vị trí Vram là nơi TIM được tải vào bộ nhớ video. PSX sử dụng một "bề mặt" có thể thể hiện cửa sổ xem, texture và CLUT với tọa độ X/Y. Trong Vram có mấy khu vực cache cho phép đặt texture vào đấy.
    File TIM có định dạng hơi khác nhau một tí giữa các độ sâu màu khác nhau: 4 bpp, 8 bpp hay 16 bpp.
    Còn hình ảnh ở bản PC chứa header, pallet và dữ liệu bitmap. Thường thì dữ liệu được lưu trữ như bức ảnh đã được đánh pallet với các pixel tham chiếu đến pallet. Màu 0 (thường là đen trong pallet) luôn được sử dụng như màu trong suốt.

    Module Menu​



    Menu là module mạnh mẽ thứ hai trong FF7. Từ Menu có thể xem được dữ liệu liên quan đến nhân vật và dường như nó có thể kiểm soát mọi thứ chứ không đơn thuần chỉ để chọn lựa thứ gì đó (như chọn xem Item, trạng thái,...). Menu có vài chức năng phức tạp, và có thể được đặt trong "chế độ Tutorial". Khi chế độ này được gọi ra từ module Field, nó sẽ chơi tự động những lựa chọn Menu khác nhau để giúp người chơi hiểu rõ hơn về hệ thống Menu. Chức năng này còn thấy trên FF8.

    Một chức năng chính yếu khác trong hệ thống Menu là khả năng lưu game. Đây có lẽ là phần mạnh mẽ và quan trọng nhất vì Menu có quyền truy cập vào nhiều mảng khác nhau của hệ thống.
    Bản thân Menu là một tập hợp gồm 13 module nhỏ khác là Begin, Party, Item, Magic, Equip, Stat, Change, Limit, Config, Save, Name, Form và Shop. Trong đó có 4 module có thể gọi trực tiếp từ Field.

    Dưới đây là những file quan trọng trong module này.

    Bản PSX:

    + /MENU/*.MNU
    + /INIT/WINDOW.BIN

    Bản PC:

    + /DATA/MENU/MENU_US.LGP
    + /DATA/KERNEL/WINDOW.BIN


    Menu là module duy nhất giữ dữ liệu vĩnh viễn trong Vram để các module khác truy cập vào, chẳng hạn như font chữ. Ở bản PSX, đồ họa được nạp từ /INIT/WINDOW.BIN và định dạng này đã được mô tả ở phần Kernel. Cấu trúc của WINDOW.BIN như sau

    Offset: 0x0000 (6 byte): header
    Offset: 0x0006 (1062 byte): texture tĩnh cho Menu
    Offset: 0x2754 (3034 byte): texture của bộ font
    Offset: 0x332E (163 byte): không rõ

    "Begin" là module đầu tiên trong Menu được thực thi. Dưới đây là hình ảnh "Begin" trong Vram. Font chữ và texture cố định từ /INIT/WINDOW.BIN được khoanh vùng ở góc phải bên dưới.

    [​IMG]

    Tiếp theo là hình ảnh texture trong bản PC và mô tả các phân vùng. Bản PSX chỉ khác ở kích thước texture và hình ảnh các nút bấm.

    [​IMG]

    Các phân vùng nhỏ có thể bị ghi đè khi nạp Battle, nhưng khi nạp Menu thì chúng lại được ghi trở lại như cũ. Phần trống ở dưới bên trái là bộ chữ Kana trong tiếng Nhật vốn đã bị loại bỏ trong các phiên bản ngôn ngữ Tây Âu.
     
    ozone thích bài này.
  7. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Module Field

    Field là module hạch tâm trong FF7. Những vùng nhà cửa, thành phố ngoài World Map ra đều là Field. Module này quan hệ chặt chẽ với Kernel và có thể gọi Kernel từ cấp độ thấp. Module này có các chức năng:

    + Tải các file Field.
    + Thể hiện bối cảnh 2D và các hiệu ứng liên quan.
    + Thể hiện các yếu tố 3D trong Field như camera, góc nhìn.
    + Chạy Field script hiển thị các event, bao gồm hội thoại.
    + Tải các module khác khi được yêu cầu.

    Dưới đây là các file quan trọng ở bản PSX và bản PC

    Bản PSX:

    + /FIELD/*.DAT
    + /FIELD/*.MIM
    + /FIELD/*.BSX

    Bản PC:

    + /DATA/FIELD/FLEVEL.LGP
    + /DATA/FIELD/CHAR.LGP

    Khi hoạt động, module này tải các file Field. Trong bản PC thì Field là một file với 9 phần, trong khi ở bản PSX là 3 file nhưng có phần mở rộng khác nhau và có cùng chức năng, là MIM (bối cảnh), DAT (dữ liệu Script, event) và BSX (3D).
    Hình ảnh bên dưới là bối cảnh field qua các giai đoạn Assembly trong Vram của PSX.

    [​IMG]


    Bối cảnh (khung nền) của FF7 là các khối 16x16 được tải vào trong Vram rồi sau đó được lắp ghép vào video buffer từng khung hình. Ở bản PC, các file Field nằm trong FLEVEL.LGP và bị nén với giải thuật LZS. 2 byte đầu tiên của file (khi đã giải nén) luôn là zero, 4 byte tiếp theo chỉ định trong file hiện tại có bao nhiêu phần. Mọi file Field đều có 9 phần, trong đó phần đầu tiên là block Pointer chỉ đến vị trí các câu thoại. Block hội thoại đứng liền sau block Pointer, giống như đa phần ở các game console và kết thúc câu thoại bằng $FF.
     
    ozone thích bài này.

Chia sẻ trang này