1. Một số chỉnh sửa linh tinh - tạm gọi là hack rom cũng được
1.1 Thủ môn angry (hú, hét, ....) : Ngày xưa lúc thời các game snes còn thịnh hành, có lưu truyền một bản rom game Tsubasa 3 các thủ môn chính "Angry" 100% khi chặn các cú sút. Dẫn đến sẽ khó hơn khi muốn ghi bàn.
Ở một số trướng hợp, khi thực hiện Catch / Punch, các thủ môn (không phải tất cả) sẽ thực hiện một hành động tạm gọi là angry. Sau đó có thể nhận thấy khả năng chặn bóng của thủ môn tăng lên (chỉ tính trong lần sút đó). Đặc biệt khi "angry", Ken sẽ có khả năng thực hiện skill ẩn "Shuto" , là skill có khả năng phá được mọi cú sút.
Nhận xét là việc thực hiện "Angry" này diễn ra theo tỉ lệ. Đầu tiên thử tìm giá trị trong Ram qui định việc này. Để chuẩn bị, ta tận dụng khả năng save state nhiều slot của snes9x.
Đầu tiên save vài slot state ở trạng thái chuẩn bị chọn Catch/Punch của một số thủ môn (chọn phần All Star cho đơn giản vì 5 thủ môn của All Star để có khả năng "Angry"). Tiếp đến cố gắng reload các save state này để các thủ môn đạt trạng thái kích hoạt "Angry" và Save các State này (trong tình trạng như hình bên trên). Ngoài ra là Save thêm một số State trong trường hợp không diễn ra "Angry" mà chuyển sang hình ảnh tiếp theo của trái bóng bay đi (save state cũng ngay thời điểm đó).
Thực hiện tìm value ram (cheat) bằng cách bắt đầu với load state tại thời điểm "Angry" giống hình trên.
Tiếp theo Alt+A để search all value. Quay lại game và thực hiện load 1 State khác và lại Alt+A để Search tiếp, tuỳ vào vừa rồi load state nào để chọn cách search cho phù hợp. Nếu state vừa load cũng là hình ảnh lúc "Angry" thì chọn : Comparison type : = (Equal To) ---- Compare To : Previous Value và chọn Search để Filter (lọc) bớt các vùng nhớ mang giá trị khác với trước đó. Nếu state vừa load là hình ảnh không có kích hoạt "Angry" mà chuyển sang hình ảnh bóng bay đi thì phần Comparison Type : =! (Not Equal To) và Search để Filter bớt các vùng nhớ không thoả điều kiện mang value khác với State trước đó.
Tiếp tục load các State khác nhau và chọn kiểu Comparison Type cho phù hợp rồi Search để lọc hết các vùng nhớ không liên quan.
Sau cùng, khi còn 1 vài vùng nhớ còn sót lại, ta có thể tiến hành "freeze" các vùng nhớ này rồi Load State về trạng thái chuẩn bị chọn Catch/Punch để thử nghiệm.
Cuối cùng tìm được vùng nhớ Ram sau : 7E040A , tại thời điểm kích hoạt "Angry" , vùng nhớ này có giá trị 80.
Thử giữ nguyên (freeze) vùng nhớ này với giá trị 80 và tiếp tục chơi. Sẽ có thêm hiệu ứng khác khi vùng nhớ 7E040A có giá trị 80 : Kyo Retsuna Tackle.
Quay trở lại với phần "Angry". Với vùng nhớ Ram 7E040A (lưu ý ở đây phải xóa hết các phần add cheat trước đó đi để không ảnh hưởng tới việc ghi log CPU) ta tiến hành ghi log.
Trước hết load State về lại trạng thái một thủ môn nào đó đang chuẩn bị chọn Catch/Punch. Đặt 1 Break Point : 7E040A - Write. Sau đó check CPU (Logging) và thực hiện thao tác chọn Catch/Punch (giả sử ở đây đang sử dụng thủ môn Muller). Break Point sẽ được kích hoạt, có 2 trường hợp :
- Không kích hoạt được trạng thái "Angry" - thường gặp, do tỉ lệ kích hoạt trạng thái này rất thấp. Khi đó sẽ có log :
Mã:
$01/D4E3 9C 0A 04 STZ $040A [$01:040A] A:0080 X:0000 Y:000B
Chưa đủ thông tin cần thiết để có thể tìm trạng thái "Angry" trong Rom game. Có thể vào folder Logs trong folder Snes9x để xóa bớt các file .log không cần thiết.
Tiếp tục reload và lặp lại thao tác này (ở đây cần sự kiên nhẫn 1 chút).
Ở đây, bản snes9x debugger mình dùng có 1 số nhược điểm : mỗi lần load State phải check lại mục Break Point ; Mục Break Point không cho nhập thêm phần value của vùng nhớ Ram ; Mỗi khi ghi log thì tạo 1 file log mới, không phù hợp trong điều kiện ta cần ghi log khi phải reload state liên tục để trạng thái "Angry" kích hoạt.
Các điểm trên nếu ai biết cách khắc phục hoặc biết phiên bản mới hơn của snes9x khắc phục được thì xin chỉ giúp
Tạm thời mình chuyển sang dùng bsnes debugger. Đầu tiên là thiết lập các nút bấm, các phím tắt cho việc Save State, Load State được thuận tiện. Sau đó cũng Save State tại vị trí thủ môn chuẩn bị chọn Catch/Punch. Ở đây cũng chọn Muller làm ví dụ.
Tiếp theo chọn Tools > Debugger. Trên cửa sổ Debugger tiếp tục chọn Tools > Break Point Editor và chọn như sau :

Có thể thấy ở đây cho phép tạo BreakPoint cho vùng nhớ 7E040A có giá trị 80 Write.
Tiếp theo, quay lại cửa sổ và check vào "Trace S-CPU opcode" để bắt đầu ghi log. Quay lại cửa sổ game và cho Muller thực hiện Catch hoặc Punch. Nếu không kích hoạt trạng thái "Angry" thì bỏ check "Trace S-CPU opcode" để kết thúc ghi log. Sau đó reload state để tiếp tục lại. Trình bsnes debugger chỉ lưu lại thành 1 file trace.log duy nhấtrong folder của bsnes debugger.
- Khi kích hoạt được trạng thái "Angry" : BreakPoint được kích hoạt và dừng game lại. Bỏ check Trace S-CPU opcode để kết thúc ghi log. Edit file trace.log trong folder của bsness debugger ta có : (file log của bsnes debugger trình bày không được rõ ràng như của snes9x nhưng nếu đã quen nhìn file log thì cũng phải là vấn đề lớn).
Đi tới cuối file trace.log này , cuối cùng sẽ là dòng opcode nơi break point được kích hoạt (7E0471 có giá trị 80 hex) :
Mã:
02c6c2 sta $040a [02040a] A:be80 X:0000 Y:0002
Lệnh thực hiện lưu giá trị trong A (80) vào vùng nhớ 02040A (7E040A).
Đi tiếp lên trên 1 chút trong file log là các xử lý sau :
Mã:
02c675 lda [$c0],y [7e3401] A:3400 X:0018 Y:0001 S:1c34 D:0a00 DB:02 nvMXdIzc V: 8 H:1218
02c677 cmp #$20 A:3448 X:0018 Y:0001 S:1c34 D:0a00 DB:02 nvMXdIzc V: 8 H:1266
02c679 bne $c67f [02c67f] A:3448 X:0018 Y:0001 S:1c34 D:0a00 DB:02 nvMXdIzC V: 8 H:1282
02c67f lda $050f [02050f] A:3448 X:0018 Y:0001 S:1c34 D:0a00 DB:02 nvMXdIzC V: 8 H:1304
Lệnh trên thực hiện load vùng nhớ 7E3401 (vị trí thủ môn đội mình) sẽ được giá trị 48 hex (Muller). Tiếp theo là so sánh với 20 hex (Genzo), nếu không phải là Genzo thì nhảy tới vùng 02C67F để xử lý tiếp. Tại đây có thể suy ra có 2 phần xử lý "Angry": 1 cho Wakabayashi (Genzo) và 1 cho các thủ môn còn lại (không phải tất cả thủ môn).
Di chuyển lên 1 chút nữa là phần xử lý Sub Routine. Lên trên nữa là 1 đoạn xử lý trước khi nhảy vào Sub Routine vừa rồi.
Mã:
02c661 sep #$30 A:1e00 X:0018 Y:0000 S:1c34 D:0a00 DB:02 nvmXdIZc V: 8 H: 390
02c663 lda #$08 A:1e00 X:0018 Y:0000 S:1c34 D:0a00 DB:02 nvMXdIZc V: 8 H: 412
02c665 sta $40 [000a40] A:1e08 X:0018 Y:0000 S:1c34 D:0a00 DB:02 nvMXdIzc V: 8 H: 428
02c667 lda $0408 [020408] A:1e08 X:0018 Y:0000 S:1c34 D:0a00 DB:02 nvMXdIzc V: 8 H: 452
02c66a jsl $00ff29 [00ff29] A:1e00 X:0018 Y:0000 S:1c34 D:0a00 DB:02 nvMXdIZc V: 8 H: 484
Ở đây ta có dòng xử lý :
Mã:
02c663 lda #$08 A:1e00 X:0018 Y:0000
Lệnh này thực hiện nạp giá trị 08 hex vào A. Đây là con số thể hiện tỉ lệ % để xuất hiện xử lý "Angry" của các thủ môn chủ yếu (ngoại trừ Genzo).
Tỉ lệ này = 08 hex / FF hex (8 / 255) = 0.03 = 3%. Vậy tỉ lệ để xuất hiện đoạn xử lý "Angry" cho các thủ môn là 3% khi thực hiện chặn bóng (catch/punch).
Để chỉnh tỉ lệ "Angry" này lên 100%. Đầu tiên chuyển địa chỉ LoRom 02C663 bằng Lunar Address ra địa chỉ Offset trong file rom là 1 4663.
Mở rom game bằng Hex Editor và Goto offset 1 4663 ta có :

A9 08 trong đó A9 là lệnh LDA và 08 là giá trị hex (lda #08). Để chuyển thành tỉ lệ 100% thì thay 08 = FF (max 1 byte). Code trên trở thành A9 FF.
Reload lại game và test lại với các thủ môn chính.
Với Wakabayashi (Genzo). Cũng thực hiện lấy log tương tự như trên với bsnes debugger (có thể dùng snes9x debugger). Khi Genzo thực hiện "Angry" và ghi lại log, ta có nội dung log như sau (di chuyển tới cuối file log).
Mã:
02c6c0 ora #$80 A:be00 X:0000 Y:0001 S:1c34 D:0a00 DB:02 nvMXdIZc V: 9 H: 648
02c6c2 sta $040a [02040a] A:be80 X:0000 Y:0001 S:1c34 D:0a00 DB:02 NvMXdIzc V: 9 H: 664
Lưu trữ giá trị 80 vào vùng nhớ 7E040A.
Đi lên tiếp ta có đoạn code xử lý :
Mã:
02c675 lda [$c0],y [7e3401] A:3400 X:000c Y:0001 // load giá trị từ 7E3401 để kiểm tra thủ môn đội mình
02c677 cmp #$20 A:3420 X:000c Y:0001 // so sánh với 20 xem có phải là Genzo
02c679 bne $c67f [02c67f] A:3420 X:000c Y:0001 //nếu không phải Genzo thì nhảy tới xử lý ở 02C67F ở dưới
02c67b lda #$10 A:3420 X:000c Y:0001 //nạp vào A giá trị tỉ lệ xuất hiện "Angry" của Genzo
02c67d sta $40 [000a40] A:3410 X:000c Y:0001 // lưu giá trị này vào vùng nhớ 7E0A40
02c67f lda $050f [02050f] A:3410 X:000c Y:0001
Ở đây ta có đoạn : 02C67B LDA #10 là đoạn nạp giá trị tỉ lệ ra "Angry" của Genzo. Cũng thực hiện như trên, Goto 1 467B (02C67B) : A9 10. Thay thành A9 FF. 10 hex = 16 , tỉ lệ của Genzo thực hiện "Angry" là 6% (16/255).
Reload lại file rom game và kiểm tra lại xem Genzo có thực hiện "Angry" 100% ở các lần Catch/Punch.
Kết luận : để chỉnh tỉ lệ "Angry" 100% cho các thủ môn thì thực hiện chỉnh trong filre rom game như sau :
Goto 14663 : thay thành A9 FF.
Goto 1467B : thay thành A9 FF.
Một số thủ môn đã test được có thực hiện xử lý "Angry" : Renato (Sao Paulo), Morisaki, Wakashimazu, Wakabayashi, Gertize, Muller, Hernandez.