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. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    [​IMG]

    Lịch sử

    Vào ngày 31 tháng 1 năm 1997, Final Fantasy VII được công bố trong cộng đồng gamer Nhật Bản. Bản game này là một cuộc cách mạng và nâng thể loại RPG Nhật lên một tầm cao mới. Thành công của nó đã giúp Square Soft bám rễ vững chắc vào thể loại RPG và thay thế vị trí hàng đầu của series Dragon Quest của công ty đối thủ là Enix.
    Câu chuyện đằng sau bản game này đồ sộ hơn cả nội dung của chính nó. Và như mọi bản game khác, nó có khởi đầu và cả hậu bản.

    Năm 1994, Square Soft phát hành Final Fantasy VI trong nước Nhật với một hợp đồng độc quyền với Nintendō. Phiên bản này được phát triển cho hệ máy Super Famicom (SFC) hay còn được biết đến rộng rãi trên toàn Thế giới với cái tên khác, Super Nintendō Entertainment System (SNES). FF6 trở thành tựa game bán chạy nhất lúc đó và có được sức mạnh khiến tác giả của nó nghĩ đến chuyện "vượt ra khỏi ao làng" để sang bên bờ Mỹ quốc. Nhưng đác tiếc là Nintendō nắm độc quyền phân phối mọi game ở Mỹ nên một quyết định được đưa ra để thay đổi game. Logo truyền thống của Final Fantasy đã bị thay đổi cho phù hợp với người Mỹ. Con số VI trong series cũng bị đổi thành III. Bởi vì Nintendō chỉ phát hành 2 phiên bản Final Fantasy ở Mỹ quốc trước đó, là FF1 cho hệ NES và FF4 cho hệ SNES (thực ra FF4 ban đầu được phát triển cho máy NES, nhưng giữa chừng được port sang SNES). Bản thân FF6 cũng bị biên tập nội dung, chẳng hạn như debug room và cuốn sách khiêu dâm trong game đều bị cắt bỏ. FF6 (FF3) là một thành công ở Mỹ, nhưng còn khuya mới sánh được với thành công của nó ở Nhật.
    Có nhiều ý kiến cho rằng thể loại J-RPG không thích hợp với thị trường Mỹ.

    Sau khi phát hành FF6 ở Mỹ, Nintendō bắt đầu phát triển một hệ máy chơi game khác, có tên mã là "Ultra 64" (N64). Hệ máy này sử dụng nhân xử lý đồ họa 3D và đĩa CD-ROM. Lúc đó, Nintendō và Sony đang bắt tay với nhay để sản xuất ra hệ máy CD-ROM tên là "PlayStation Expansion" (PSX) như một món add-on cho máy SFC. Giang hồ cũng đồn rằng công nghệ này cũng sẽ được dùng cho Ultra 64 luôn. Square Soft cũng nhận định rằng tương lai của mình sẽ là những bản game RPG như một bộ phim lợi dụng sức mạnh của nền tảng đa phương tiện này. Họ đầu tư hàng tỷ En vào các xưởng SGI khi biết máy Ultra 64 sẽ sử dụng cấu trúc R4300 MIPS của RISC với các thanh ghi (register) 64 bit. Một engine 3D mới được phát triển cho series Final Fantasy. Bản demo của công nghệ mới được tạo ra trên các hệ thống mới phát triển của họ. Đó là engine đơn giản sử dụng các nhân vật từ FF6 và được cho rằng đây sẽ là khởi đầu của FF7 trên máy Ultra 64.
    Nhưng rồi Nintendō kéo giò Square Soft khi quan hệ giữa Nintendō và Sony đổ vỡ. Vấn đề xuất hiện khi cả hai công ty đều không hài lòng về việc ai sẽ cấp quyền các game trên những hệ máy sử dụng CD-ROM này. Sony muốn kiểm soát nhưng Nintendō đâu có chịu. Nintendō cũng gặp nhiều vấn đề khi Sony đã đang sản xuất chip âm thanh cho máy SFC vốn rất khó lập trình. Nintendō lại muốn kiểm soát nhiều hơn.

    Nintendō lẻn ra sau lưng Sony và bắt tay với Phillips để nhờ giúp đỡ vì hãng này cũng có thể cấp quyền cho công nghệ CD-ROM. Khi biết Nintendō đi đêm với kẻ khác (hơn nữa lại là một thằng ngoại quốc!), Sony nổi khùng và rút công nghệ của mình ra khỏi hợp đồng. Sony còn thuyết phục Phillips, Matsushita, NEC và Pioneer không cấp quyền cho bất cứ công nghệ ổ đĩa quang nào của Nintendō.

    Còn lại một mình, Sony quyết định gắn thêm ổ CD-ROM vào board mạch của máy chơi arcade System 11 (do Namco phát triển, có cấu trúc tương tự
    PlayStation) và gọi đó là PlayStation.
    Mất đi ổ đĩa cho hệ máy của mình, Nintendō lặng lẽ cho các đối tác bên thứ 3 biết rằng máy Ultra 64 sẽ là nền tảng cartridge như các hệ máy trước đó của mình. Vì vậy nên giới hạn tối đa của các game sẽ là 32 Mb. Giờ đây Square Soft lâm vào tình huống dở ông dở thằng. Họ đã đầu tư hàng triệu En vào việc phát triển một game RPG hoành tráng như một bộ phim và giờ phải cắt bỏ bớt để đủ dung lượng chứa trong một cartridge. Khi hay tin PSX cũng sử dụng CPU với các tập lệnh cấu trúc MIPS (thực tế là PSX sử dụng ít lệnh hơn N64) thì Square Soft bỏ rơi Nintendō để ký hợp đồng phân phối độc quyền với Sony. Giờ đây nền tảng cho Final Fantasy VII đã được thiết lập và có thể tiến hành mà không gặp trở ngại gì.

    [​IMG]

    Máy Sony PSX và Nintendō 64 đều sử dụng cùng cấu trúc MIPS của hãng RISC

    Quá trình sản xuất

    Có 2 việc quan trọng trong quá trình sản xuất Final Fantasy 7. Đầu tiên là việc một nhóm thứ hai được thành lập để bắt đầu phát triển Final Fantasy 8. Việc này cho phép rút ngắn thời gian phát triển, khi một game đã xong thì game kia cũng được một nửa. Việc quan trọng thứ hai là trong quá trình sản xuất, mẹ của đạo diễn Sakaguchi Hironobu là Aki qua đời. Sakaguchi đã mang cái chết này vào game, thay đổi nội dung game đáng kể. Lúc này nội dung của FF7 xoay quanh sự sống, cái chết và Địa cầu.

    Phát hành

    FF7 được tung ra thị trường Nhật Bản vào ngày 31 tháng 1 năm 1997, và nó mắc phải vài vấn đề. Thứ nhất là bản game này chưa được hoàn thiện. Trong game có vài cảnh không chạy đúng và những con trùm phụ cũng chưa được thêm vào trong lần phát hành này. Ngoài ra còn vài lỗi nhỏ nữa, sau được khắc phục trong phiên bản US.
    Tại Mỹ, bản demo của FF7 được phát hành cùng game đấu võ "Tobal No.1". Bản demo này là , phiên bản cải biến của phần đầu game nhưng lại sử dụng các nhân vật trong phần sau của game. Và đây cũng là lần đầu tiên phát hành ở Mỹ mà một game Final Fantasy được đánh đúng số thứ tự của nó. Đây cũng là lần đầu tiên gamer Mỹ được nhìn thấy logo thật sự của Final Fantasy.
    FF7 được phát hành ở Mỹ vào ngày 3 tháng 9 năm 1997. Phiên bản này đã được fix bug, thêm vài con trùm, sửa những cảnh đơ. Sau đó, một phiên bản khác được phát hành lại tại Nhật dựa trên nền tảng bản US mở rộng, thêm một số nội dung bonus. Phiên bản này được gọi là "Final Fantasy 7 International".

    Phiên bản PC

    Với thành công rực rỡ của FF7, các cổ đông của Square bắt đầu thúc ép công ty phải đa dạng hóa sản phẩm của mình. Lúc đó Square chỉ làm game cho mỗi Sony, cho nên thị trường bị giới hạn. Và rõ ràng những game cũ của họ cũng không còn thích hợp với các hệ máy mới. Ngay cả Final Fantasy 6 cũng không dễ gì tương thích với các hệ máy khác. Square lựa chọn cập nhật các game cũ của họ sang các hệ máy và ngôn ngữ lập trình hiện đại. Họ cũng quyết định port FF7 lên PC.

    Square chọn Eidos làm nhà phát hành cho bản port PC này.
    Đương thời, Eidos đã thành công trong việc chuyển tựa game "Tomb Rider" nổi tiếng của hãng Core Design từ PSX lên PC. Với kinh nghiệm như vậy nên có vẻ như Eidos là một lựa chọn đúng.

    Tuy nhiên, ban đầu thì phiên bản PC gặp nhiều vấn đề. Khi các lập trình viên nhận mã nguồn của FF7 từ Square thì họ nhận ra đây là phiên bản ban đầu đầy lỗi. Công việc phải tạm dừng trong khi Square thu thập lại bản mới hơn. Ngoài ra, những con người và công cụ từng dùng để tạo ra bối cảnh cho FF7 giờ đang được dùng để phát triển FF8 và FF9. Không có cách nào để re-render lại bối cảnh nên nhóm thực hiện bản port buộc phải dùng bản code với màu sắc, độ phân giải kém của PSX. Những đoạn phim trong game mờ đi một cách tệ hại. Square Soft chưa bao giờ render video với độ phân giải cao, và định dạng video cũng không tương thích với DirectX của Microsoft. Vì vậy người ta đã quyết định convert các đoạn phim vốn dĩ đã bị nén của PSX sang định dạng phù hợp với PC. Kết quả là các đoạn phim thảm hại của bản port giờ đây là bản copy của bản copy của bản render với độ phân giải thấp.

    Square cũng từ chối không cho thêm vào bất cứ thứ gì. Cho nên bản port PC giống hệt như bản PSX từ giao diện tới mọi thứ. Chỉ khác là có sự nhân nhượng ở font chữ khi game cho phép chạy với "độ phân giải cao" 640x480, vốn chẳng là cái đinh gì đối với độ phân giải của PC. Sau này, bản port FF8 lên PC cũng cho phép thể hiện font chữ ở "độ phân giải cao" và độ phân giải mặc định của PSX. Màu sắc cũng bị giới hạn ở 15 bit.
    Ngoài ra còn nhiều vấn đề nữa. Máy PSX có khả năng sử dụng nhiều độ sâu màu trên màn hình cùng một thời điểm. Rất nhiều hiệu ứng đồ họa dựa vào đặc tính này. Trong khi đó thì nhiều card đồ họa trên PC không có khả năng sử dụng CLUT (color look up table) ở chế độ high color. Điều này khiến game phải ở chế độ software render với độ phân giải thấp. FF7 vốn được thiết kế cho đồ họa 15 bit nên dải màu trở nên cách biệt rõ ràng khi thể hiện trên màn hình PC. Kiến trúc âm thanh của PSX và PC cũng khác nhau rõ rệt khiến mảng âm thanh cũng chịu nhiều vấn đề. Đến bản port PC cho FF8 sau này cũng bị chê lên chê xuống là "âm thanh dở như hạch" so với bản PSX.

    Bản port PC được phát hành vào tháng 6 năm 1998. Lúc đó nó vẫn còn đầy bug và không phải là bản port hoàn hảo. Ban đầu, bản port không tương thích với CPU của Cyrix và AMD và Eidos cũng từ chối hỗ trợ kỹ thuật. Nhiều người dùng card đồ họa cao cấp buộc phải sử dụng chế độ software render vì thiếu tính năng CLUT. Các đoạn phim cũng bị chiếu lộn ngược hình ảnh hay khiến game bị crash. Giải pháp duy nhất mà Eidos đưa ra là cung cấp dữ liệu save để người chơi vượt qua đoạn bị crash. Nhưng việc này cũng hủy diệt hết công sức hàng giờ đồng hồ của người chơi.
    Nhiều card âm thanh không được thiết kế để chơi MIDI và phần mềm chơi nhạc được sử dụng nhiều, chiếm dụng tài nguyên và làm chậm cả hệ thống.
    Tùy chọn bàn phím ban đầu cũng hết sức điên khùng khi chỉ dùng mỗi bàn phím số. Rất nhiều laptop không thể chơi được game chỉ vì không có bàn phím số, muốn chơi phải gắn từ ngoài vào.

    Eidos bỏ luôn FF7 khi bản Final Fantasy 8 cho PC được phát hành.

    Bây giờ chúng ở đâu?

    Bản port cho PC giờ đã tuyệt bản và không thể chạy trên kiểu kernel của Windows NT bởi pointer đặt không đúng chỗ. Nhiều người chơi giờ đến với FF7 thông qua giả lập lập PSX với nhiều ưu điểm như đồ họa phân giải từ 1024x768 trở lên, màu sắc 32 bit và texture filter cho hình ảnh mịn hơn. Bản PSX cũng ổn định hơn, không có lỗi.
    Engine dùng cho FF7 trên PSX cũng được tiếp tục dùng cho một vài game không thuộc dòng Final Fantasy, chẳng hạn như "Parasite Eve". Đây là game đầu tiên hỗ trợ texture toàn thân nhân vật trước FF8.
    Tuy nhiên bản port PC của FF7 vẫn còn sống trong một số ít người chơi. Những bản vá lỗi không chính thức từng được tung ra và đạt được một số thành công nhất định.

    Rồi mọi chuyện cũng chấm hết khi một bản port mới lên PC được tung ra vào năm 2012. Nội dung, hình ảnh vẫn như trước nhưng bản port này tương thích với các nền tảng Windows mới và tỏ ra "đã sạch lỗi".


    (Kỳ sau: engine cơ bản)
     
    ozone, park munsu, bioidaika and 15 others like this.
  2. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Engine của FF7

    1. Các phần của engine

    Engine của FF7 được chia nhỏ thành nhiều module. Việc này cho phép các lập trình viên chia thành nhiều nhóm nhỏ, tạo ra nhiều kiểu môi trường đa dạng và cho phép họ những người thiết kế linh động tối đa khi chỉ làm việc trong module của riêng họ. Hệ thống module này cho phép truy cập từ một điểm và truy xuất ra nhiều điểm khác nhau của game. Máy PSX có tài nguyên hạn chế, chỉ có 1Mb cho VRam và 2Mb cho Ram hệ thống nên mọi thứ cần được sắp xếp sao cho có hiệu quả nhất. Và module là một cách dễ dàng để dump toàn bộ các phần của engine để giải phóng chỗ cho các phần khác.
    Hệ thống cốt lõi bao gồm 6 module là Kernel, Field, Menu, World Map, Battle và Mini game. Chúng được sắp xếp theo thứ tự như sau.

    [​IMG]

    Kernel là phần chứa text giải thích xuất hiện trên một số phần của Menu. Field là một khái niệm đặc trưng của dòng game Final Fantasy, chỉ những khu vực bên trong các tòa nhà, khu vực mà tại đó người chơi không đụng độ quái vật. Nói nôm na, nơi nào không phải World Map thì đó là Field. Module này là phần code liên quan đến Field, bao gồm cả hội thoại xuất hiện trong Field. World Map là tất cả mọi thứ, bao gồm cả hội thoại cho các event diễn ra ngoài bản đồ. Battle là module quản lý các trận chiến ngẫu nhiên, đấu trùm và cả text xuất hiện trong trận đấu.

    2. Tương quan giữa các module

    Không phải mọi module đều có thể truy cập vào module khác, mà có một lưu trình đặc biệt giữa chúng. Chẳng hạn ta có thể truy cập vào Menu từ World Map hay Field nhưng không thể truy cập từ Battle. Field là module bên cạnh kernel điều khiển gần như toàn bộ game. Nó được lập trình để có thể gọi bất kỳ module nào trong quá trình chơi. Chẳng hạn, từ Field có thể ra ngoài World Map, truy cập Menu, nhảy sang các trận đấu (trùm) hay chơi Mini game.

    Kernel

    1. Tổng quát về kernel

    Lịch sử kernel bắt đầu từ phiên bản đầu tiên của Final Fantasy cho hệ máy Famicom (NES) 8 bit của Nintendō. Famicom chỉ có thể đọc 32 kb chương trình trong Rom, nên để khắc phục hạn chế này thì Nintendō đã pháp triển hệ thống memory mapper cho phép các phần của chương trình được chuyển đổi, thay thế phần khác từ cartridge vào trong bộ nhớ.
    FF1 sử dụng "Memory Manager Controller #1" (MMC1) chia game thành 16 phần, mỗi phần 16kb (mỗi chương trình MMC1 tối đa có thể lên tới 256k), và nó cũng chia bộ nhớ có thể truy cập từ cartridge thành 2 phần 16k. Phần 16k đầu là nơi có thể để xếp dữ liệu, còn 16k sau không thể bị chuyển đổi, nó nằm cố định trong bộ nhớ cho tới khi cartridge bị rút khỏi máy. Kernel của FF1 nằm trong 16kb bộ nhớ sau này.
    Kernel là module chứa vòng lặp chính của game. Nó xử lý mọi chức năng cấp thấp của game như đưa dữ liệu từ các phần thích hợp của game vào bộ nhớ tạm thời, nhảy sang module khác, phát nhạc và các nhiệm vụ khác.
    Càng về sau, dòng Final Fantasy càng phát triển, tỷ lệ thuận với dung lượng của game nhưng vẫn giữ lại hệ thống kernel/module cho tới sau này. Khi port một phiên bản từ hệ máy này sang hệ máy khác thì điều này gây ra nhiều trở ngại. Chẳng hạn, FF6 được phát triển cho máy SFC. Khi dữ liệu của module Menu cần được xếp vào bộ nhớ tạm để hiển thị lên màn hình thì nó được chuyển đổi bằng hệ thống điện tử. Bản port lên PSX lại xếp dữ liệu từ CD-ROM, gây ra một khoảng thời gian lag đáng kể. Còn đối với FF7 trên PC thì hệ thống Menu được tích hợp luôn trong file exe.

    2. Chức năng của kernel

    Kernel là một chương trình đa nhiệm quản lý hết mọi nhiệm vụ trong hệ thống. Nó dùng một trình quản lý bộ nhớ đơn giản có thể xử lý cả Ram chính và VRam cho tất cả các module trong game. Hỗ trợ kernel còn có các thư viện Psy-Q (thư viện của PSX). Khi port lên PC thì thư viện Psy-Q được thay thế bằng thư viện PC tương ứng. Chẳng hạn, trình chơi nhạc SEQ của Psy-Q được thay bằng trình chơi Midi. Cả 2 kiểu thư viện này đều làm cùng nhiệm vụ, chỉ khác nhau ở định dạng và các thực thi. Hình ảnh bên dưới giới thiệu mối tương quan giữa kernel với các phần khác của chương trình.

    [​IMG]

    Bộ nhớ chính

    Dù module nào đang được xếp vào bộ nhớ đi nữa thì cũng luôn có một khu vực với dung lượng 4340 byte ($10F4) dành riêng cho các chức năng tổng thể trong toàn bộ game. Đây gọi là "Save Map" và khi người chơi lưu game thì phần bộ nhớ này được copy vào phần Ram bất biến như đĩa cứng hay Memory card đối với máy PSX.
    Trong Save Map có 5 bank bộ nhớ có thể truy cập trực tiếp thông qua các câu lệnh của module Field. 5 bank này có thể là 8 hay 16 bit tùy vào lệnh của phần Field.

    Bộ nhớ Video (Vram)

    Kernel là thứ chỉ định, cache và thể hiện mọi thứ trong Vram. Máy PSX chỉ có 1 Mb cho Vram và hệ thống cache cho Vram cũng giúp giảm tải bớt độ phức tạp khi thể hiện lên màn hình.
    Có thể xem Vram của PSX như một "bề mặt" hình chữ nhật với 2048x512 điểm ảnh. PSX có thể có nhiều độ sâu màu trong Vram cùng một thời điểm. Hình bên dưới là một trạng thái điển hình của Vram khi đang thể hiện game (một số giả lập cho phép xem Vram như F11 đối với PSX_fin).

    [​IMG]

    Hai màn hình game bên trái là vùng đệm video (đệm khung). Phần phía trên bên phải là đồ họa Field cho cảnh đó, còn phần bên dưới bao gồm độ họa cache và các hiệu ứng đặc biệt. Bên phải là texture cố định và bán cố định của game.
    PSX dùng 2 trang đệm tiêu chuẩn để làm hình ảnh chuyển động. Phần các đốm màu ở dưới, bên trái (dưới Barret và Cloud) chính là CLUT (Color Look Up Tables). Đây là nơi palette màu cho texture được lưu trữ. Nếu hack vào phần CLUT này thì ta có thể thay đổi màu sắc thể hiện của texture, có thể biến Cloud thành da đỏ, tóc đen, áo vàng... CLUT cũng cho phép PSX thể hiện nhiều độ sâu màu cùng thời điểm.

    CD-Rom

    Một trong những quy tắc lớn khi phát triển game PSX là cấm truy cập trực tiếp vào phần cứng. Mọi thứ phải đi qua Bios, nếu không sẽ dẫn đến nguy cơ không tương thích với các hệ thống sau này. Việc này gây nên một vấn đề cho module kernel. Khi chuyển đổi giữa các module (chẳng hạn, từ "Map" sang "Battle") thì engine phải load trước module kế tiếp trong khi module hiện tại vẫn đang còn trong bộ nhớ. Khi truy cập vào Bios thì phần còn lại của hệ thống sẽ dừng cho đến khi thoát ra.
    Vấn đề này được giải quyết trong FF7 bằng cách điều khiển truy cập CD-Rom. Kernel có thể load 8 kb cùng lúc trong chế độ này, và kernel chỉ tham chiếm các file dựa trên sector của CD-Rom mà dữ liệu nằm trên đó chứ không dựa trên tên file.
     
    Chỉnh sửa cuối: 21/5/15
    ozone thích bài này.
  3. asm65816

    asm65816 Mega Man

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


    Trên bản PSX, file này nằm ở vị trí /INIT/KERNEL.BIN, còn đối với bản PC thì có đến 2 file là /DATA/KERNEL/KERNEL.BIN và /DATA/KERNEL/KERNEL2.BIN

    File này bao gồm những thành phần và Offset của chúng như dưới đây

    1. Dữ liệu các Command (như Attack, Item...) 0x0006
    2. Dữ liệu liên quan đến tấn công 0x0086
    3. Savemap? 0x063A
    4. Chỉ số ban đầu của nhân vật 0x0F7F
    5. Dữ liệu Item 0x111B
    6. Dữ liệu vũ khí 0x137A
    7. Dữ liệu áo giáp 0x1A30
    8. Dữ liệu đồ trang bị Accessory 0x1B73
    9. Dữ liệu Materia 0x1C11
    10. Mô tả về các Command 0x1F32
    11. Mô tả về ma pháp 0x2119
    12. Mô tả về Item 0x28D4
    13. Mô tả về vũ khí 0x2EE2
    14. Mô tả về áo giáp 0x307B
    15. Mô tả về Accessory 0x315F
    16. Mô tả về Materia 0x3384
    17. Mô tả về Item quan trọng 0x3838
    18. Tên Command 0x3BE2
    19. Tên ma pháp 0x3CCA
    20. Tên Item 0x4293
    21. Tên vũ khí 0x4651
    22. Tên áo giáp 0x4B02
    23. Tên Accessory 0x4C4B
    24. Tên Materia 0x4D90
    25. Tên Item quan trọng 0x5040
    26. Chữ trong màn hình trận đấu 0x5217
    27. Tên đòn tấn công của thú chiêu hồi 0x5692


    Dữ liệu 9 vùng đầu tiên trong file Kernel (không liên quan đến text) có dạng format của file BIN chuẩn. Còn 18 vùng còn lại đều liên quan đến text mô tả hay thể hiện tên, không có 6 byte header như 9 vùng trước. Mở đầu mỗi vùng luôn là các Pointer chỉ đến vị trí của từng câu text trong vùng. Định dạng text của FF7 không theo chuẩn ASCII hay SHIFT-JIS mà ở định dạng riêng, như hầu hết game console ở các thế hệ ban đầu.

    Trong mỗi vùng lại có sự phân chia nhỏ ra nữa, chẳng hạn lấy ví dụ là vùng số 5, dữ liệu liên quan đến Item. Dưới đây là từng thuộc tính và Offset của chúng.

    0x00 độ dài 8 byte: không rõ chức năng
    0x08 độ dài 2 byte: không rõ chức năng
    0x0A độ dài 1 byte: quy định vùng cấm chỉ
    0xFF: chỉ xuất hiện ở Menu, không xuất hiện ở Battle
    0xFE: xuất hiện ở Battle và Menu (không dùng được)
    0xFD: xuất hiện ở Menu, không xuất hiện ở Battle (dùng được ở Battle)
    0xFC: xuất hiện ở Battle và Menu (dùng được ở Battle)
    0xFB: xuất hiện ở Menu, không xuất hiện ở Battle (dùng được ở Menu)
    0xFA: xuất hiện ở Battle và Menu (dùng được ở Menu)
    0xF9: xuất hiện ở Menu, không xuất hiện ở Battle (dùng được ở Menu)
    0xF8: xuất hiện ở cả Battle và Menu (dùng được cả 2)
    0xF7: xuất hiện ở Menu, không xuất hiện ở Battle (dùng được ở Battle)
    0xF6: xuất hiện ở Battle và Menu (dùng được ở Battle)

    0x0B độ dài 2 byte: đối tượng tấn công
    0x01: 1 đối tượng
    0x03: không rõ
    0x05: nhiều đối tượng
    0x07: không rõ
    0x10: chỉ tấn công cả nhóm

    0x0D độ dài 1 byte: số ID của Item
    0x0E độ dài 1 byte: hồi phục
    0x00: không rõ
    0x08: cũng áp dụng cho MP
    0x22: không rõ
    0x23: không rõ
    0x24: gây sát thương/hồi phục theo %
    0x26: gây sát thương/hồi phục x (con số)
    0x37: gây sát thương
    0x47: không rõ
    0x50: ảnh hưởng đến trạng thái

    0x0F độ dài 1 byte: số nhân để tính toán lượng sát thương/hồi phục
    0x10 độ dài 1 byte: kiểu hồi phục
    0x00: hồi phục HP
    0x01: hồi phục MP
    0x11 độ dài 3 byte: không rõ
    0x14 độ dài 4 byte: ảnh hưởng đến trạng thái
    0x18 độ dài 2 byte: thuộc tính
    0x1A độ dài 2 byte: không rõ

    Bản FF7 trên PC có tới 2 file là KERNEL.BIN và KERNEL2.BIN.
    File KERNEL.BIN chứa từ vùng 1~9 như trong KERNEL của PSX, và KERNEL2.BIN chứa text từ vùng 10~27 như trong KERNEL của PSX.
     
    Chỉnh sửa cuối: 2/6/15
    ozone thích bài này.
  4. akito1

    akito1 Donkey Kong

    Tham gia ngày:
    17/8/09
    Bài viết:
    429
    Rất thích các bài viết về quá trình làm game, thanks man
     
  5. lBatMan

    lBatMan Fire in the hole!

    Tham gia ngày:
    24/10/13
    Bài viết:
    2,843
    hình như cả đời Nintendo bị FA thì phải =))
     
  6. [N.K] Scorp

    [N.K] Scorp Fade to Black...

    Tham gia ngày:
    8/8/08
    Bài viết:
    3,983
    Nơi ở:
    Đè Lẹt City
    Đọc mấy cuốn sách ngày xưa (~ cuối thập niên 90 đầu 2000) thì khái niệm Video Games được gắn liền với Nintendo, vậy mà giờ... hơi hẻo :( Tuy nhiên hẻo thì hẻo chứ vẫn còn lượm tiền ngon chán chứ ko như thằng Nokia :))
     
  7. 13cm/s

    13cm/s Youtube Master Race

    Tham gia ngày:
    12/8/07
    Bài viết:
    45
    giờ game hay vẫn chủ yếu trên wii chứ, hội ps4/xbox giờ chủ yếu toàn bán cho hội tech idiot đến cài game còn coi là "rắc rối" chứ có mấy game hay.
     
  8. ThanatosII

    ThanatosII Crash Bandicoot GVN CHAMPION ✟ Grim Reaper ✟ Lão Làng GVN

    Tham gia ngày:
    17/8/08
    Bài viết:
    12,747
    Nơi ở:
    ...!!!
    Ai còn nhớ đoạn đua Chocobo huyền thoại ở Gold Saucer của FFVII PC hồi trc ko \m/
     
  9. Nhatcuong2014

    Nhatcuong2014 Youtube Master Race GameOver

    Tham gia ngày:
    11/2/15
    Bài viết:
    33
    cách xây dựng nhân vật, cốt truyện hấp dẫn. Những Aeris, Cloud, Tifa… từ trong game đã bước vào đời sống, trở thành "người trong mộng" của biết bao chàng trai cô gái. Nói chung Trong lịch sử dòng game Final Fantasy, phiên bản Final Fantasy VIIđược coi là thành công rực rỡ nhất
     
  10. Chronos

    Chronos Chrono Trigger/Cross Lão Làng GVN

    Tham gia ngày:
    12/10/08
    Bài viết:
    6,967
    Hóa ra Aerith chết là do mẹ của đạo diễn Sakaguchi qua đời nên ông giận cá chém thớt chứ không phải do lưỡi gươm của Stephiroth à :))
     
  11. asdert

    asdert Mario & Luigi Lão Làng GVN

    Tham gia ngày:
    30/6/08
    Bài viết:
    772
    Nơi ở:
    Đến từ
    làm game ko phải chuyện nhìn game này được như vậy thì game mình cũng phải được như vậy :))
     
  12. final_fantasy_X_

    final_fantasy_X_ Mega Man

    Tham gia ngày:
    20/12/07
    Bài viết:
    3,130
    Có những quãng thời gian mà " 1 năm" nó có nhiều sự thay đổi , tiến bộ và chạy đua mạnh mẽ hơn cả những năm dài trước đó mà bạn :D.
    Thấy game trên smartphone bây giờ nó tiến bộ về đồ họa nhanh không :D.
     
  13. TuDragon76

    TuDragon76 Samus Aran the Bounty Hunter

    Tham gia ngày:
    9/6/02
    Bài viết:
    6,144
    Nơi ở:
    HCMC
    VII hay thì có hay, nhưng vẫn dưới bợn VI. Tôi rất thích VII nhưng phải công tâm mà nói thế
     
  14. Hoursea

    Hoursea Mayor of SimCity Lão Làng GVN

    Tham gia ngày:
    31/12/09
    Bài viết:
    4,393
    Thôi xong. Vậy là 6 đúng là bị overrate mất rồi. :cuteonion36:
    6 hay theo cách cổ điển, không phá cách, mình không thích lắm.
    10 rất phá cách, 10 là FF đầu tiên lấy bối cảnh là thế giới Á Đông.
     
    Chỉnh sửa cuối: 18/5/15
  15. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Engine của FF7

    1. Các phần của engine

    Engine của FF7 được chia nhỏ thành nhiều module. Việc này cho phép các lập trình viên chia thành nhiều nhóm nhỏ, tạo ra nhiều kiểu môi trường đa dạng và cho phép họ những người thiết kế linh động tối đa khi chỉ làm việc trong module của riêng họ. Hệ thống module này cho phép truy cập từ một điểm và truy xuất ra nhiều điểm khác nhau của game. Máy PSX có tài nguyên hạn chế, chỉ có 1Mb cho VRam và 2Mb cho Ram hệ thống nên mọi thứ cần được sắp xếp sao cho có hiệu quả nhất. Và module là một cách dễ dàng để dump toàn bộ các phần của engine để giải phóng chỗ cho các phần khác.
    Hệ thống cốt lõi bao gồm 6 module là Kernel, Field, Menu, World Map, Battle và Mini game. Chúng được sắp xếp theo thứ tự như sau.

    [​IMG]

    Kernel là phần chứa text giải thích xuất hiện trên một số phần của Menu. Field là một khái niệm đặc trưng của dòng game Final Fantasy, chỉ những khu vực bên trong các tòa nhà, khu vực mà tại đó người chơi không đụng độ quái vật. Nói nôm na, nơi nào không phải World Map thì đó là Field. Module này là phần code liên quan đến Field, bao gồm cả hội thoại xuất hiện trong Field. World Map là tất cả mọi thứ, bao gồm cả hội thoại cho các event diễn ra ngoài bản đồ. Battle là module quản lý các trận chiến ngẫu nhiên, đấu trùm và cả text xuất hiện trong trận đấu.

    2. Tương quan giữa các module

    Không phải mọi module đều có thể truy cập vào module khác, mà có một lưu trình đặc biệt giữa chúng. Chẳng hạn ta có thể truy cập vào Menu từ World Map hay Field nhưng không thể truy cập từ Battle. Field là module bên cạnh kernel điều khiển gần như toàn bộ game. Nó được lập trình để có thể gọi bất kỳ module nào trong quá trình chơi. Chẳng hạn, từ Field có thể ra ngoài World Map, truy cập Menu, nhảy sang các trận đấu (trùm) hay chơi Mini game.

    Kernel

    1. Tổng quát về kernel

    Lịch sử kernel bắt đầu từ phiên bản đầu tiên của Final Fantasy cho hệ máy Famicom (NES) 8 bit của Nintendō. Famicom chỉ có thể đọc 32 kb chương trình trong Rom, nên để khắc phục hạn chế này thì Nintendō đã pháp triển hệ thống memory mapper cho phép các phần của chương trình được chuyển đổi, thay thế phần khác từ cartridge vào trong bộ nhớ.
    FF1 sử dụng "Memory Manager Controller #1" (MMC1) chia game thành 16 phần, mỗi phần 16kb (mỗi chương trình MMC1 tối đa có thể lên tới 256k), và nó cũng chia bộ nhớ có thể truy cập từ cartridge thành 2 phần 16k. Phần 16k đầu là nơi có thể để xếp dữ liệu, còn 16k sau không thể bị chuyển đổi, nó nằm cố định trong bộ nhớ cho tới khi cartridge bị rút khỏi máy. Kernel của FF1 nằm trong 16kb bộ nhớ sau này.
    Kernel là module chứa vòng lặp chính của game. Nó xử lý mọi chức năng cấp thấp của game như đưa dữ liệu từ các phần thích hợp của game vào bộ nhớ tạm thời, nhảy sang module khác, phát nhạc và các nhiệm vụ khác.
    Càng về sau, dòng Final Fantasy càng phát triển, tỷ lệ thuận với dung lượng của game nhưng vẫn giữ lại hệ thống kernel/module cho tới sau này. Khi port một phiên bản từ hệ máy này sang hệ máy khác thì điều này gây ra nhiều trở ngại. Chẳng hạn, FF6 được phát triển cho máy SFC. Khi dữ liệu của module Menu cần được xếp vào bộ nhớ tạm để hiển thị lên màn hình thì nó được chuyển đổi bằng hệ thống điện tử. Bản port lên PSX lại xếp dữ liệu từ CD-ROM, gây ra một khoảng thời gian lag đáng kể. Còn đối với FF7 trên PC thì hệ thống Menu được tích hợp luôn trong file exe.

    2. Chức năng của kernel

    Kernel là một chương trình đa nhiệm quản lý hết mọi nhiệm vụ trong hệ thống. Nó dùng một trình quản lý bộ nhớ đơn giản có thể xử lý cả Ram chính và VRam cho tất cả các module trong game. Hỗ trợ kernel còn có các thư viện Psy-Q (thư viện của PSX). Khi port lên PC thì thư viện Psy-Q được thay thế bằng thư viện PC tương ứng. Chẳng hạn, trình chơi nhạc SEQ của Psy-Q được thay bằng trình chơi Midi. Cả 2 kiểu thư viện này đều làm cùng nhiệm vụ, chỉ khác nhau ở định dạng và các thực thi. Hình ảnh bên dưới giới thiệu mối tương quan giữa kernel với các phần khác của chương trình.

    [​IMG]
     
  16. Silver_veno

    Silver_veno C O N T R A Lão Làng GVN

    Tham gia ngày:
    12/6/06
    Bài viết:
    1,666
    Một bài viết có rất nhiều thông tin thú vị, bởi vậy ... quý bạn và các vị, xin hãy dừng lại :-(||>
     
  17. Silver_veno

    Silver_veno C O N T R A Lão Làng GVN

    Tham gia ngày:
    12/6/06
    Bài viết:
    1,666
    :5cool_big_smile: luyện MH đi con hàng :6cool_beat_shot:.
     
  18. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Bộ nhớ chính

    Dù module nào đang được xếp vào bộ nhớ đi nữa thì cũng luôn có một khu vực với dung lượng 4340 byte ($10F4) dành riêng cho các chức năng tổng thể trong toàn bộ game. Đây gọi là "Save Map" và khi người chơi lưu game thì phần bộ nhớ này được copy vào phần Ram bất biến như đĩa cứng hay Memory card đối với máy PSX.
    Trong Save Map có 5 bank bộ nhớ có thể truy cập trực tiếp thông qua các câu lệnh của module Field. 5 bank này có thể là 8 hay 16 bit tùy vào lệnh của phần Field.

    Bộ nhớ Video (Vram)

    Kernel là thứ chỉ định, cache và thể hiện mọi thứ trong Vram. Máy PSX chỉ có 1 Mb cho Vram và hệ thống cache cho Vram cũng giúp giảm tải bớt độ phức tạp khi thể hiện lên màn hình.
    Có thể xem Vram của PSX như một "bề mặt" hình chữ nhật với 2048x512 điểm ảnh. PSX có thể có nhiều độ sâu màu trong Vram cùng một thời điểm. Hình bên dưới là một trạng thái điển hình của Vram khi đang thể hiện game (một số giả lập cho phép xem Vram như F11 đối với PSX_fin).

    [​IMG]

    Hai màn hình game bên trái là vùng đệm video (đệm khung). Phần phía trên bên phải là đồ họa Field cho cảnh đó, còn phần bên dưới bao gồm độ họa cache và các hiệu ứng đặc biệt. Bên phải là texture cố định và bán cố định của game.
    PSX dùng 2 trang đệm tiêu chuẩn để làm hình ảnh chuyển động. Phần các đốm màu ở dưới, bên trái (dưới Barret và Cloud) chính là CLUT (Color Look Up Tables). Đây là nơi palette màu cho texture được lưu trữ. Nếu hack vào phần CLUT này thì ta có thể thay đổi màu sắc thể hiện của texture, có thể biến Cloud thành da đỏ, tóc đen, áo vàng... CLUT cũng cho phép PSX thể hiện nhiều độ sâu màu cùng thời điểm.

    CD-Rom

    Một trong những quy tắc lớn khi phát triển game PSX là cấm truy cập trực tiếp vào phần cứng. Mọi thứ phải đi qua Bios, nếu không sẽ dẫn đến nguy cơ không tương thích với các hệ thống sau này. Việc này gây nên một vấn đề cho module kernel. Khi chuyển đổi giữa các module (chẳng hạn, từ "Map" sang "Battle") thì engine phải load trước module kế tiếp trong khi module hiện tại vẫn đang còn trong bộ nhớ. Khi truy cập vào Bios thì phần còn lại của hệ thống sẽ dừng cho đến khi thoát ra.
    Vấn đề này được giải quyết trong FF7 bằng cách điều khiển truy cập CD-Rom. Kernel có thể load 8 kb cùng lúc trong chế độ này, và kernel chỉ tham chiếm các file dựa trên sector của CD-Rom mà dữ liệu nằm trên đó chứ không dựa trên tên file.
     
    asdert, RyudoVN, Silver_veno and 3 others like this.
  19. Bergelmir

    Bergelmir The Lone Traveler from Vault 101

    Tham gia ngày:
    4/1/07
    Bài viết:
    17,559
    Nơi ở:
    BLACK LAMBS
    FF fan vs Zelda fan

    must get popcorn
     
  20. Kronpas1997

    Kronpas1997 Baldur's Gate Lão Làng GVN

    Tham gia ngày:
    5/9/02
    Bài viết:
    30,806
    OP copy các post sau lên đầu thread nhé, vừa clone ra 3 4 post kèm vào sau #1 rồi.
     

Chia sẻ trang này