[SFC]Vọc Tsubasa III

Thảo luận trong 'Thảo luận chung' bắt đầu bởi asm65816, 24/3/16.

  1. ozone

    ozone Donkey Kong Lão Làng GVN

    Tham gia ngày:
    4/4/05
    Bài viết:
    406
    Nơi ở:
    Recycle Bin
    1.3.2. Fire Drive
    Cũng tương tự như trường hợp Drive Tiger, khi Schneider và Tsubasa cùng 1 team, và team sút fail 2 sút skill liên tiếp thì sẽ kích hoạt skill Fire Drive cho Schneider theo tỉ lệ. Ở đây không có hiện mặt Schneider mà game lẳng lặng add Fire Drive vào cho Schneider nên trong vòng 3 phút game sau khi sút fail 2 skill liên tiếp phải lấy lại bóng và chuyển cho Schneider để kiểm tra.
    Đầu tiên xác định giá trị của skill Fire Drive trong rom game, bắt đầu dãy skill sút là 2FEC2. Và offset của Fire Drive là 2 FEC5 : C0 01 (01 là value Ram Tsubasa- người kết hợp).
    Tương tự như Drive Tiger, ta cũng lấy 2 log, 1 log khi mở menu Shoot của Schneider khi chưa có Fire Drive và 1 log khi mở menu Shoot của Schneider khi đã có Fire Drive.
    Điểm cần lưu ý là trong skill này, Schneider dùng Neo Fire, không phải Fire nên ở giai đoạn đầu game sẽ không thể có skill này. Ở đây tạm thời tìm 1 file .srm đã đá xong trận cuối hoặc chỉnh trong rom để mở toàn bộ skill ngay từ đầu (sẽ đề cập sau này nếu có thể).

    Mở 2 log và tìm ":FEC5]" : tại đây cũng di chuyển xuống 1 chút cho tới đoạn khác nhau giữa 2 log (Log1 : không FireDrive ; Log2 : có FireDrive).
    Log1 :
    Mã:
    $02/EFC9 08  PHP  A:EFC8 X:005A Y:0006 D:1800 DB:04 S:1C2A P:envMXdIzC HC:0926 VC:057 FC:56 I:00
    $02/EFCA E2 30  SEP #$30  A:EFC8 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIzC HC:0956 VC:057 FC:56 I:00
    $02/EFCC A5 1E  LDA $1E  [$00:181E]  A:EFC8 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIzC HC:0986 VC:057 FC:56 I:00
    $02/EFCE CD 17 04  CMP $0417  [$04:0417]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:1018 VC:057 FC:56 I:00
    $02/EFD1 D0 1A  BNE $1A  [$EFED]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:1058 VC:057 FC:56 I:00
    $02/EFD3 AD 00 04  LDA $0400  [$04:0400]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:1082 VC:057 FC:56 I:00
    $02/EFD6 C9 15  CMP #$15  A:EF15 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIzC HC:1188 VC:057 FC:56 I:00
    $02/EFD8 90 13  BCC $13  [$EFED]  A:EF15 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:1212 VC:057 FC:56 I:00
    $02/EFDA AD 6E 04  LDA $046E  [$04:046E]  A:EF15 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:1236 VC:057 FC:56 I:00
    $02/EFDD C9 04  CMP #$04  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:1276 VC:057 FC:56 I:00
    $02/EFDF F0 0C  BEQ $0C  [$EFED]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:eNvMXdIzc HC:1300 VC:057 FC:56 I:00
    $02/EFE1 AD 8A 04  LDA $048A  [$04:048A]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:eNvMXdIzc HC:1324 VC:057 FC:56 I:00
    $02/EFE4 29 20  AND #$20  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZc HC:1364 VC:057 FC:56 I:00
    $02/EFE6 F0 05  BEQ $05  [$EFED]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZc HC:0024 VC:058 FC:56 I:00
    $02/EFED E6 1C  INC $1C  [$00:181C]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZc HC:0054 VC:058 FC:56 I:00
    $02/EFEF E6 1C  INC $1C  [$00:181C]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIzc HC:0100 VC:058 FC:56 I:00
    $02/EFF1 28  PLP  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIzc HC:0146 VC:058 FC:56 I:00
    $02/EFF2 60  RTS  A:EF00 X:005A Y:0006 D:1800
    

    Và Log2:
    Mã:
    $02/EFC9 08  PHP  A:EFC8 X:005A Y:0006 D:1800 DB:04 S:1C2A P:envMXdIzC HC:0274 VC:059 FC:41 I:00
    $02/EFCA E2 30  SEP #$30  A:EFC8 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIzC HC:0304 VC:059 FC:41 I:00
    $02/EFCC A5 1E  LDA $1E  [$00:181E]  A:EFC8 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIzC HC:0334 VC:059 FC:41 I:00
    $02/EFCE CD 17 04  CMP $0417  [$04:0417]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:0366 VC:059 FC:41 I:00
    $02/EFD1 D0 1A  BNE $1A  [$EFED]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:0406 VC:059 FC:41 I:00
    $02/EFD3 AD 00 04  LDA $0400  [$04:0400]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:0430 VC:059 FC:41 I:00
    $02/EFD6 C9 15  CMP #$15  A:EF15 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIzC HC:0470 VC:059 FC:41 I:00
    $02/EFD8 90 13  BCC $13  [$EFED]  A:EF15 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:0494 VC:059 FC:41 I:00
    $02/EFDA AD 6E 04  LDA $046E  [$04:046E]  A:EF15 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:0518 VC:059 FC:41 I:00
    $02/EFDD C9 04  CMP #$04  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIZC HC:0598 VC:059 FC:41 I:00
    $02/EFDF F0 0C  BEQ $0C  [$EFED]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:eNvMXdIzc HC:0622 VC:059 FC:41 I:00
    $02/EFE1 AD 8A 04  LDA $048A  [$04:048A]  A:EF00 X:005A Y:0006 D:1800 DB:04 S:1C29 P:eNvMXdIzc HC:0646 VC:059 FC:41 I:00
    $02/EFE4 29 20  AND #$20  A:EF20 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIzc HC:0686 VC:059 FC:41 I:00
    $02/EFE6 F0 05  BEQ $05  [$EFED]  A:EF20 X:005A Y:0006 D:1800 DB:04 S:1C29 P:envMXdIzc HC:0710 VC:059 FC:41 I:00
    $02/EFE8 20 5B EE  JSR $EE5B  [$02:EE5B]  A:EF20 X:005A Y:0006
    

    Ở $02EFE6 : Log1 thoả điều kiện và bị nhảy tới $02/EFED ; Log2 thì xử lý tiếp.
    Cũng như ở Drive Tiger : Goto : 1 6FE6 (2EFE6) : F0 05 => thay bằng EA EA

    Vào game và test : Schneider đã được thêm vào Fire Drive

    insta.gif

    Trường hợp muốn tìm tỉ lệ kích hoạt Fire Drive, cũng làm như ở Drive Tiger (không quan trọng)
    Cũng theo dõi vùng Ram 7E048A. Ở đoạn cuối khi đã có FireDrive thì vùng nhớ này mang giá trị 20. Đặt log tương tự như ở Drive Tiger. Ta có Fire Drive dùng chung địa chỉ qui định số cú sút fail là: 13D92 . Và đoạn kiểm tra tỉ lệ cũng xuất hiện ngay sau đoạn kiểm tra tỉ lệ Drive Tiger.
    Mã:
    $02/BD92 C9 02 CMP #$02 A:2A02 X:000D Y:0000 D:0A00 DB:02
    $02/BD94 90 28 BCC $28 [$BDBE] A:2A02 X:000D Y:0000 D:0A00 DB:02
    $02/BD96 AD 49 04 LDA $0449 [$02:0449] A:2A02 X:000D Y:0000 D:0A00 DB:02
    $02/BD99 C9 10 CMP #$10 A:2A07 X:000D Y:0000 D:0A00 DB:02
    $02/BD9B 90 06 BCC $06 [$BDA3] A:2A07 X:000D Y:0000 D:0A00 DB:02
    $02/BDA3 AD 4A 04 LDA $044A [$02:044A] A:2A07 X:000D Y:0000 D:0A00 DB:02
    $02/BDA6 C9 10 CMP #$10 A:2A2F X:000D Y:0000 D:0A00 DB:02
    $02/BDA8 90 06 BCC $06 [$BDB0] A:2A2F X:000D Y:0000 D:0A00 DB:02
    
    Có $02/BDA6 C9 10 là đoạn kiểm tra tỉ lệ Fire Drive (6%)
    Nên có một trường hợp là sau 2 skill sút fail, cả 2 điều kiện này đều kích hoạt thì sẽ có cả Drive Tiger và Fire Drive (Tsubasa, Hyuga, Schneider phải cùng team cùng thời điểm). Lúc này vùng nhớ 7E048A sẽ mang giá trị A0 ( = 80 + 20).
    Kết luận :
    - Tổng số skill sút fail qui định cho Fire Drive : 13D93 : 02
    - Tỉ lệ kích hoạt Fire Drive (phải unlock xong Neo Fire trước) : 13DA7 : 10 => FF (100%)

    Tổng kết : để add thêm Fire Drive cho Schnider (Tsubasa cùng team cùng thời điểm, và phải unlock xong Neo Fire) :
    Goto : 1 6FE6 : F0 05 => EA EA

    Mở rộng : bỏ điều kiện unlock Neo Fire của Schneider
    Hiện có 2 trường hợp : khi đã chỉnh add thêm Fire Drive như trên, nhưng với rom game mới bắt đầu chơi, không có Neo Fire nên game không thực hiện add Neo Fire và Fire Drive (menu Shoot chỉ có : Shoot, Fire Shoot) và rom game đã đá Kick Off tới cuối cùng unlock được Neo Fire thì menu Shoot có : Shoot, Fire Shoot, Neo Fire, Fire Drive.
    Lấy log cho cả 2 trường hợp : ghi log từ lúc chọn Shoot cho tới lúc menu Shoot hiện lên thì dừng log.
    So sánh 2 log ta có : TH1 là trường hợp đầu game chưa có Neo Fire, TH2 là đã unlock tới cuối game.
    Đầu tiên di chuyển tới vùng xử lý nạp giá trị tại offset cho biết vị trí kết thúc của chuỗi skill shoot của Schneider : search ":FEC7]" (vị trí kết thúc này sẽ mang giá trị "03" - xem lại chuỗi value skill shoot của Schneider bắt đầu từ 2 FEC2)
    Tại vị trí game thực hiện nạp value 03 tại 2 FEC7 (05:FEC7) nhìn lên trên một chút là phần xử lý thêm Fire Drive vào menu Shoot như sau :
    Mã:
    $02/EE0A 08  PHP  A:3509 X:0002 Y:0001 D:1800 DB:04 S:1C24 P:envMXdIzC HC:0068 VC:068 FC:37 I:00
    $02/EE0B E2 30  SEP #$30  A:3509 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:0098 VC:068 FC:37 I:00
    $02/EE0D A5 1E  LDA $1E  [$00:181E]  A:3509 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:0128 VC:068 FC:37 I:00
    $02/EE0F CD 17 04  CMP $0417  [$04:0417]  A:3500 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIZC HC:0160 VC:068 FC:37 I:00
    $02/EE12 D0 14  BNE $14  [$EE28]  A:3500 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIZC HC:0200 VC:068 FC:37 I:00
    $02/EE14 A5 1D  LDA $1D  [$00:181D]  A:3500 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIZC HC:0224 VC:068 FC:37 I:00
    $02/EE16 38  SEC  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:0256 VC:068 FC:37 I:00
    $02/EE17 E9 03  SBC #$03  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:0278 VC:068 FC:37 I:00
    $02/EE19 AA  TAX  A:352D X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:0302 VC:068 FC:37 I:00
    $02/EE1A AD 04 06  LDA $0604  [$04:0604]  A:352D X:002D Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:0324 VC:068 FC:37 I:00
    $02/EE1D DF 2C EE 02 CMP $02EE2C,x[$02:EE59] A:3500 X:002D Y:0001 D:1800 DB:04 S:1C23 P:envMXdIZC HC:0364 VC:068 FC:37 I:00
    $02/EE21 90 05  BCC $05  [$EE28]  A:3500 X:002D Y:0001 D:1800 DB:04 S:1C23 P:eNvMXdIzc HC:0412 VC:068 FC:37 I:00
    $02/EE28 E6 1C  INC $1C  [$00:181C]  A:3500 X:002D Y:0001 D:1800 DB:04 S:1C23 P:eNvMXdIzc HC:0442 VC:068 FC:37 I:00
    $02/EE2A 28  PLP  A:3500 X:002D Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzc HC:0488 VC:068 FC:37 I:00
    $02/EE2B 60  RTS  A:3500 X:002D Y:0001 D:1800 DB:04 S:1C24 P:envMXdIzC HC:0524 VC:068 FC:37 I:00
    
    $02/EE9B 28  PLP  A:3500 X:002D Y:0001 D:1800 DB:04 S:1C26 P:envMXdIzC HC:0614 VC:068 FC:37 I:00
    $02/EE9C 60  RTS  A:3500 X:002D Y:0001 D:1800 DB:04 S:1C27 P:envMXdIZc HC:0650 VC:068 FC:37 I:00
    
    $02/EFEB 28  PLP  A:3500 X:002D Y:0001 D:1800 DB:04 S:1C29 P:envMXdIZc HC:0700 VC:068 FC:37 I:00
    $02/EFEC 60  RTS  A:3500 X:002D Y:0001 D:1800 DB:04 S:1C2A P:envMXdIzC HC:0736 VC:068 FC:37 I:00
    
    $02/ED9C A4 1C  LDY $1C  [$00:181C]  A:3500 X:002D Y:0001 D:1800 DB:04 S:1C2C P:envMXdIzC HC:0786 VC:068 FC:37 I:00
    $02/ED9E B7 19  LDA [$19],y[$05:FEC7]  A:3500 X:002D Y:0005 D:1800 DB:04 S:1C2C P:envMXdIzC HC:0842 VC:068 FC:37 I:00
    
    và TH2 :
    Mã:
    $02/EE0A 08  PHP  A:3509 X:0002 Y:0001 D:1800 DB:04 S:1C24 P:envMXdIzC HC:0854 VC:076 FC:22 I:00
    $02/EE0B E2 30  SEP #$30  A:3509 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:0884 VC:076 FC:22 I:00
    $02/EE0D A5 1E  LDA $1E  [$00:181E]  A:3509 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:0914 VC:076 FC:22 I:00
    $02/EE0F CD 17 04  CMP $0417  [$04:0417]  A:3500 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIZC HC:0946 VC:076 FC:22 I:00
    $02/EE12 D0 14  BNE $14  [$EE28]  A:3500 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIZC HC:0986 VC:076 FC:22 I:00
    $02/EE14 A5 1D  LDA $1D  [$00:181D]  A:3500 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIZC HC:1010 VC:076 FC:22 I:00
    $02/EE16 38  SEC  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:1042 VC:076 FC:22 I:00
    $02/EE17 E9 03  SBC #$03  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:1064 VC:076 FC:22 I:00
    $02/EE19 AA  TAX  A:352D X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:1088 VC:076 FC:22 I:00
    $02/EE1A AD 04 06  LDA $0604  [$04:0604]  A:352D X:002D Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:1110 VC:076 FC:22 I:00
    $02/EE1D DF 2C EE 02 CMP $02EE2C,x[$02:EE59] A:3514 X:002D Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:1216 VC:076 FC:22 I:00
    $02/EE21 90 05  BCC $05  [$EE28]  A:3514 X:002D Y:0001 D:1800 DB:04 S:1C23 P:envMXdIZC HC:1264 VC:076 FC:22 I:00
    $02/EE23 A5 1D  LDA $1D  [$00:181D]  A:3514 X:002D Y:0001 D:1800 DB:04 S:1C23 P:envMXdIZC HC:1288 VC:076 FC:22 I:00
    $02/EE25 20 E4 F1  JSR $F1E4  [$02:F1E4]  A:3530 X:002D Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:1320 VC:076 FC:22 I:00
    
    $02/F1E4 08  PHP  A:3530 X:002D Y:0001 D:1800 DB:04 S:1C21 P:envMXdIzC HC:0010 VC:077 FC:22 I:00
    $02/F1E5 E2 30  SEP #$30  A:3530 X:002D Y:0001 D:1800 DB:04 S:1C20 P:envMXdIzC HC:0040 VC:077 FC:22 I:00
    $02/F1E7 AE 70 04  LDX $0470  [$04:0470]  A:3530 X:002D Y:0001 D:1800 DB:04 S:1C20 P:envMXdIzC HC:0070 VC:077 FC:22 I:00
    $02/F1EA 9D 71 04  STA $0471,x[$04:0473]  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C20 P:envMXdIzC HC:0110 VC:077 FC:22 I:00
    $02/F1ED EE 70 04  INC $0470  [$04:0470]  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C20 P:envMXdIzC HC:0156 VC:077 FC:22 I:00
    $02/F1F0 28  PLP  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C20 P:envMXdIzC HC:0210 VC:077 FC:22 I:00
    $02/F1F1 60  RTS  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C21 P:envMXdIzC HC:0246 VC:077 FC:22 I:00
    
    $02/EE28 E6 1C  INC $1C  [$00:181C]  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:0296 VC:077 FC:22 I:00
    $02/EE2A 28  PLP  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C23 P:envMXdIzC HC:0342 VC:077 FC:22 I:00
    $02/EE2B 60  RTS  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C24 P:envMXdIzC HC:0378 VC:077 FC:22 I:00
    
    $02/EE9B 28  PLP  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C26 P:envMXdIzC HC:0428 VC:077 FC:22 I:00
    $02/EE9C 60  RTS  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C27 P:envMXdIZc HC:0464 VC:077 FC:22 I:00
    
    $02/EFEB 28  PLP  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C29 P:envMXdIZc HC:0514 VC:077 FC:22 I:00
    $02/EFEC 60  RTS  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C2A P:envMXdIzC HC:0590 VC:077 FC:22 I:00
    
    $02/ED9C A4 1C  LDY $1C  [$00:181C]  A:3530 X:0002 Y:0001 D:1800 DB:04 S:1C2C P:envMXdIzC HC:0640 VC:077 FC:22 I:00
    $02/ED9E B7 19  LDA [$19],y[$05:FEC7]  A:3530 X:0002 Y:0005 D:1800 DB:04 S:1C2C P:envMXdIzC HC:0696 VC:077 FC:22 I:00
    

    Ở khối xử lý đầu tiên, 2 TH đều giống nhau cho tới đoạn :
    $02/EE21 90 05 BCC $05 [$EE28]
    TH1 thì bị nhảy tiếp tới $2/EE28, TH2 thì xử lý tiếp.
    Và ở TH2, khối xử lý tiếp theo là xử lý tại vùng nhớ 7E0470 và 7E0473. Các vùng nhớ này dùng để xử lý thêm dòng skill vào các menu tương ứng.
    Do đó, tại trường hợp 1, ta sửa đổi để không bị nhảy tới $02/EE28 :

    Goto 1 6E21 ($02/EE21) và sửa 90 05 thành EA EA.

    Vào game và test lại cả 2 trường hợp :
    TH1 :
    1.jpg

    TH2 :
    2.jpg

    Done.
     
    Chỉnh sửa cuối: 14/7/16
  2. ozone

    ozone Donkey Kong Lão Làng GVN

    Tham gia ngày:
    4/4/05
    Bài viết:
    406
    Nơi ở:
    Recycle Bin
    1.4. Kyou Retsuna Shoot / Heading / Volley - Surudoi Pass - Kyou Retsuna Tackle :
    1.4.1. Kyou Retsuna Shoot / Heading / Volley - Surudoi Pass :

    Khi thực hiện sút thường, đội đầu thường, volley thường hoặc chuyền thường. Sẽ có 1 tỉ lệ nhỏ xuất hiện các kỹ năng tương ứng mạnh hơn (và tốn guts hơn). Ở đây mình xét trường hợp Shoot thường. Khi đạt được tỉ lệ để kích hoạt thì thực hiện sút thường sẽ thành Kyou Retsuna Shoot với đặc điểm sút mạnh hơn (có khả năng sút từ phần sân nhà tới thủ môn đội bạn mà không rớt xuống đất, nếu sút vào thì có khả năng làm rách lưới, và tốn nhiều guts hơn so với Shoot thường. Tương tự là với Heading và Volley sẽ mạnh hơn, Pass mạnh hơn.
    insta.gif surudoi.gif

    Nhắc lại về cách tìm value Ram với cheat engine để kích hoạt trường hợp này (bỏ qua nếu cần)
    Đặt một số state của vài cầu thủ lúc thực hiện sút thường và lúc thực hiện được Kyou Retsuna Shoot. Bắt đầu search all value từ state đang thực hiện Kyou Retsuna Shoot, cứ thế đổi các state khác nhau và chọn = hoặc =! với Previous Value
    .
    Ta có vùng nhớ ram qui định cho Kyou Retsuna Shoot là 7E0407 : 80. Có thể ghi log trong khoảng thời gian tương tự như hình minh họa Kyou Retsuna Shoot phía trên. Mở log này và search chuỗi ":0407]", ta sẽ có đoạn code có dòng xử lý tương tự như đặt BreakPoint Write cho 7E0407 ở Save State lúc bắt đầu chọn sút thường.
    Mã:
    $02/C630 08  PHP  A:0F00 X:0000 Y:0000 D:0A00 DB:02 S:1C39 P:envmXdIZc HC:0942 VC:020 FC:01 I:00
    $02/C631 E2 30  SEP #$30  A:0F00 X:0000 Y:0000 D:0A00 DB:02 S:1C38 P:envmXdIZc HC:0972 VC:020 FC:01 I:00
    $02/C633 AD 48 04  LDA $0448  [$02:0448]  A:0F00 X:0000 Y:0000 D:0A00 DB:02 S:1C38 P:envMXdIZc HC:1002 VC:020 FC:01 I:00
    $02/C636 C9 08  CMP #$08  A:0FC7 X:0000 Y:0000 D:0A00 DB:02 S:1C38 P:eNvMXdIzc HC:1042 VC:020 FC:01 I:00
    $02/C638 B0 0F  BCS $0F  [$C649]  A:0FC7 X:0000 Y:0000 D:0A00 DB:02 S:1C38 P:eNvMXdIzc HC:1066 VC:020 FC:01 I:00
    $02/C63A AA  TAX  A:0FC7 X:0000 Y:0000 D:0A00 DB:02 S:1C38 P:eNvMXdIzc HC:1090 VC:020 FC:01 I:00
    $02/C63B AD 07 04  LDA $0407  [$02:0407]  A:0FC7 X:00C7 Y:0000 D:0A00 DB:02 S:1C38 P:eNvMXdIzc HC:1112 VC:020 FC:01 I:00
    $02/C63E 09 80  ORA #$80  A:0F00 X:00C7 Y:0000 D:0A00 DB:02 S:1C38 P:envMXdIZc HC:1218 VC:020 FC:01 I:00
    $02/C640 8D 07 04  STA $0407  [$02:0407]  A:0F80 X:00C7 Y:0000 D:0A00 DB:02 S:1C38 P:eNvMXdIzc HC:1242 VC:020 FC:01 I:00
    $02/C643 BF 00 B1 04 LDA $04B100,x[$04:B1C7] A:0F80 X:00C7 Y:0000 D:0A00 DB:02 S:1C38 P:eNvMXdIzc HC:1282 VC:020 FC:01 I:00
    
    Ở cuối đoạn xử lý này là lưu giá trị 80 trong A vào vùng nhới 7E 0407.
    Trước đó là "$02/C636 C9 08 CMP #$08" . Đây là đoạn code so sánh với tỉ lệ kích hoạt ra các kỹ năng này.
    So sánh giá trị trong A hiện tại với 08, nếu >= 08 thì nhảy tới xử lý tại $02/C649. Trường hợp ở đây không nhảy tới mà xử lý tiếp đoạn kích hoạt Kyou Retsuna Shoot. (Lưu ý đoạn code minh họa trên mình có thay đổi một chút các giá trị trong A, nhưng cấu trúc code xử lý thì vẫn như cũ).
    Để đoạn xử lý này không bị nhảy tới $02/C649 ($C649) thì thay 08 = FF.
    Goto 14636 ($2C636) : thay C9 08 thành C9 FF.
    Reload game và kiểm tra lại, tỉ lệ này áp dụng cho Kyou Retsuna Shoot/Heading/Volley và Surudoi Pass.
    Lỗi nhỏ phát sinh khi chỉnh tỉ lệ kích hoạt này lên 100% : khi thực hiện Breaking Dribble (lừa húc) sẽ không còn húc văng đối thủ nữa, thay vào đó là lừa qua.

    Kết luận : Kyou Retsuna Shoot / Heading / Volley - Surudoi Pass : chỉnh tỉ lệ 100%
    Goto 14636 : C9 08 => C9 FF

    ===========================================================

    1.4.2. Kyou Retsuna Tackle : chưa được hoàn chỉnh, cần nhờ người hướng dẫn chỉ giúp thêm :D
    Tương tự như trên, kỹ năng này thay thế cho Tackle thường khi được kích hoạt, có khả năng hất văng đối thủ.
    Tham khảo lại bài post về tỉ lện Angry 100% cho các thủ môn. Khi set value 80 cho vùng nhớ 7E040A lúc chọn Tackle thì Kyou Retsuna Tackle sẽ được kích hoạt.

    Chú ý: Mình đã thử các save state, reload state cho nhiều trường hợp khác nhau trong quá trình tìm kiếm tỉ lệ kích hoạt cho kỹ năng này. Tuy nhiên không thể làm cho Kyou Retsuna Tackle xuất hiện để ghi log lại (có thể là bug game ?). Nên hiện tại để kỹ năng này xuất hiện thì set vùng nhớ Ram 7E040A mang giá trị 80 khi chọn Tackle.

    Giải pháp để vùng nhớ 7E040A luôn giữ cố định 80 có thể tham khảo bài hướng dẫn của bác asm65816 tại http://forum.gamevn.com/threads/sfc-voc-tsubasa-iii.1247764/page-2#post-26606277
     
    Chỉnh sửa cuối: 15/7/16
    traitim_virus thích bài này.
  3. traitim_virus

    traitim_virus Mr & Ms Pac-Man

    Tham gia ngày:
    14/3/05
    Bài viết:
    165
    Cảm ơn ASM và Ozone , đọc các thread ve sẻrie Subasa cua 2 bạn ,tôi rất thích, mặc dù ko hiểu gì về quá trình thực hiện, thêm code bỏ code ettc.... ^_^
    Hy vọng sắp tơi sẽ co thêm thread vê Vọc TSUBASA 4 Pro no Rival Tachi
     
  4. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Nếu bạn chỉ quan tâm đến kết quả thì phần hướng dẫn của ozone rất dễ làm theo đấy.
    Chẳng hạn, nếu muốn có Fire drive thì mở rom bằng hex editor, đến địa chỉ $62E1, ta thấy 90 05. Sửa 2 con số này thành EA EA rồi save Rom. Xong.
     
    traitim_virus thích bài này.
  5. ozone

    ozone Donkey Kong Lão Làng GVN

    Tham gia ngày:
    4/4/05
    Bài viết:
    406
    Nơi ở:
    Recycle Bin
    Một người cũ, nick 2005. :d
    Bạn có thể đọc lại topic này của bác asm65816 :
    http://forum.gamevn.com/threads/huong-dan-dich-game-console.711506/
    Cố gắng đọc được ít nhất 2 bài post đầu, các thắc mắc của bạn sẽ được sáng tỏ.
    Mình chỉ nói thêm vài ý như sau :
    - Dữ liệu trong file game được đưa vào trong vùng nhớ Rom để thực thi. Tại đây các điều khiển, cảc chỉ thị, các lệnh sẽ đưa ra các kết quá hay các giá trị vào trong vùng nhớ tạm Ram. Từ đây bạn mới có được những thứ mà bạn nhìn thấy trên màn hình game. Do đó dữ liệu trong vùng nhớ Ram là giữ liệu có thể bị thay đổi, có thể ghi, xóa, đọc trên nó.
    - Sử dụng trình debugger, thông qua việc ghi Log để biết được ngay tại thời điểm đó của game, bên trong vùng Rom đang làm những gì, hay cụ thể là phần nào trong file game đang được sử dụng. Khi bạn can thiệp vào vùng này, tức là bạn đã chỉnh sửa trực tiếp trên file game.
    - Ví dụ bạn đang có file game snes .smc hoặc .sfc nào đó, bạn muốn chỉnh sửa trực tiếp trên file game. Mở file này bằng Notepad chẳng hạn, cái bạn thấy được chỉ là 1 mớ mã máy, không thể đọc hiểu. Lúc này bạn cần một chương trình Hex Editor để mở file game, dữ liệu trong file game sẽ được trình bày dưới các vùng địa chỉ và vùng dữ liệu Hexadecimal (số thập lục phân). Những con số này biểu diễn cho ngôn ngữ mà game được viết (trường hợp hợp này là ngôn ngữ Assembly 65816 - asm65816).
    ArtHexEditor.GIF

    Vùng địa chỉ / địa chỉ offset trong file game (cột bên trái) chứa các giá trị Hexadecimal tương ứng (vùng bên phải giữa.
    Ví dụ như trên : tại địa chỉ offset 0000 (hex) bạn có giá trị 4D (hex), bên phải nó (cùng dòng) là 0001 hex có giá trị 5A (hex), 0002 hex có giá trị 90 (hex) .... cho tới 0010 hex có giá trị B8 (hex) v.v... . 0010h nằm ở dòng 2 là do kích thước của cửa sổ hex editor nên nó hiển thị ở vị trí dòng 2.
    Hoặc khi nói offset 0050h : 69 73 thì có nghĩa là địa chỉ 0050 (hex) có giá trị 69 và 0051 (hex) có giá trị 73.

    Mình làm 1 ví dụ ngắn để bạn hiểu thêm : giả sử xem như bạn đã ghi được Log (dùng snes9x debugger) tại một thời điểm nào đó trong game. Bạn có file log và mở nó ra bằng Notepad++. File log này sẽ có nội dung trình bày toàn bộ các xử lý trong vùng Rom tại thời điểm bạn thực hiện ghi log. Đi từ trên xuống dưới trong file log là việc thực hiện tuần tự của game trong khoảng thời gian bạn thực hiện ghi Log.
    Ví dụ trong file log của bạn có 1 đoạn log như sau :
    Mã:
    $02/C633 AD 48 04 LDA $0448 [$02:0448] A:0F00 X:0000 Y:0000 D:0A00 DB:02 S:1C38 P:envMXdIZc HC:1002 VC:020 FC:01 I:00
    
    Tại địa chỉ Rom $02/C633 có mã câu lệnh là AD 48 04 (giá trị hex)
    AD 48 04 là mã lệnh Assembly 65816 : nó có nghĩa là LDA $0448 (nạp vào trong thanh ghi A giá trị của vùng nhớ 02/0448).
    Đây là thứ đang diễn ra trong vùng nhớ Rom. Vậy trong file game (rom game), đoạn này đang ở vị trí nào ? Dùng Hex Editor để mở file game (ở đây mình dùng HexWorkshop).
    Thử dùng Ctrl+F (Edit > Find) và tìm chuỗi Hex AD 48 04 : kết quả là có rất nhiều vị trí trong file game có chuỗi này.
    1.jpg

    Vậy phải tìm xem địa chỉ Rom (LoRom - Low Rom) $02/C633 nó nằm ở đâu trong file game. Dùng 1 công cụ chuyển đổi địa chỉ là Lunar Address.
    Đổi 2C633 (snes LoRom) thành ra 14633 (PC file address).
    Quay lại Hex Editor, gõ Cltr + G (Goto offset) : nhập 14633 để tới vùng địa chỉ offset 14633. Tại đây có value hex tương ứng Ad 48 04
    2.jpg
    Ví dụ ở đây muốn thay AD bằng số khác, cách đơn giản nhất là xóa AD rồi nhập số mới ở cùng vị trí. Hoặc là quét chọn AD rồi gõ giá trị mới vào.
    Đây gọi là ghi đè lên giá trị sẵn có để có giá trị mới. Không phải chèn thêm, vì khi chèn thêm nó sẽ làm sai địa chỉ offset phía sau nó => crash game
     
    Chỉnh sửa cuối: 16/7/16
  6. T0977999482

    T0977999482 Mega Man

    Tham gia ngày:
    8/7/09
    Bài viết:
    3,436
    Ko có khả năng làm và giờ vì mải lo kiếm bát cháo cho con nên cũng ko còn đam mê để vọc nên chỉ hóng bản hack thôi
     
    traitim_virus thích bài này.
  7. ozone

    ozone Donkey Kong Lão Làng GVN

    Tham gia ngày:
    4/4/05
    Bài viết:
    406
    Nơi ở:
    Recycle Bin
    1.5. Counter Shoot (Sút trả) : (phần này không tìm được nhiều) :
    Counter Shoot là 1 skill ẩn thuộc hàng những cú sút mạnh nhất. Tỉ lệ sút vào rất cao. Nhưng không dễ để đạt được điều kiện kích hoạt Counter Shoot.
    Cầu thủ có thể sử dụng : Tsubasa, Hyuga, Schneider.
    Điều kiện để kích hoạt tỉ lệ xuất hiện Counter Shoot : chỉ khi trong trạng thái đối đầu nhau. Tsubasa/Hyuga/Schneider phải trong danh sách bên đội chặn bóng, chọn động tác (Tackle/PassCut/Block) và các cầu thủ này phải ở vị trí từ thứ 2 - 3 - 4 trong danh sách. Đồng thời cầu thủ bên giữ bóng phải chọn sút skill ngay khi gặp cấu thủ thứ 1 trong danh sách chặn bóng.

    count1.gif
    Ở đây tiến hành tìm con số tỉ lệ kích hoạt Counter Shoot.
    Ở đây thay vì làm 2 đoạn log lúc có và lúc không có kích hoạt Counter Shot ta có thể dự đoán như sau : game sẽ xác định vị trí cầu thủ chặn bóng từ cú sút skill, sau đó kiểm tra xem có phải là một trong 3 cầu thủ Tsubasa/Hyuga/Schneider. Nếu đúng thì sẽ xử lý tính toán tiếp sao cho tới đoạn kiểm tra tỉ lệ kích hoạt Counter Shot. Nếu không đúng thì làm như bình thường.
    Vậy sẽ bắt đầu ghi Log từ đoạn bóng từ cú sút skill bay đi (lúc này đã vượt qua cầu thủ thứ 1 trong danh sách chặn (như hình trên là Diaz) và đang trong quá trình bay tới cầu thủ thứ 2 trong danh sách chặn (như hình trên là Tsubasa). Tiếp theo log sẽ chạy tiếp tới đoạn : 1 là hiện mặt Tsubasa khi kích hoạt Counter Shoot, 2 là hình ảnh Tsubasa đang chạy để thực hiện chặn bóng như bình thường.
    Giả sử chỉ có được trường hợp 2, không kích hoạt được Counter Shoot. Ta sẽ có đoạn Log cho Tsubasa.
    Trong log này, đầu tiên xác định vùng Ram qui định vị trí của Tsubasa : tra web phần Value ram vị trí (theo hình trên, Tsubasa đang ở vị trí số 10, đội P2 / Enemy) được vị trí này là 7E3681, theo kinh nghiệm như những post trước, game không load trực tiếp 7E3681 mà load 7E3680 + 7E3681 thông qua 7E36801.
    Vậy trong log ta tìm chuỗi ":3680" sẽ có :
    Mã:
    $02/9737 A0 00  LDY #$00  A:367E X:0002 Y:0010 D:0A00 DB:02 S:1C3D P:envMXdIzC HC:0078 VC:034 FC:14 I:00
    $02/9739 C2 20  REP #$20  A:367E X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIZC HC:0102 VC:034 FC:14 I:00
    $02/973B B7 C0  LDA [$C0],y[$7E:3680]  A:367E X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIZC HC:0156 VC:034 FC:14 I:00
    $02/973D C9 00 01  CMP #$0100  A:0100 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIzC HC:0220 VC:034 FC:14 I:00
    $02/9740 F0 0A  BEQ $0A  [$974C]  A:0100 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIZC HC:0252 VC:034 FC:14 I:00
    $02/974C E2 20  SEP #$20  A:0100 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIZC HC:0282 VC:034 FC:14 I:00
    $02/974E AD 48 04  LDA $0448  [$02:0448]  A:0100 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIZC HC:0312 VC:034 FC:14 I:00
    $02/9751 C9 20  CMP #$20  A:018A X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:eNvMXdIzC HC:0352 VC:034 FC:14 I:00
    $02/9753 B0 08  BCS $08  [$975D]  A:018A X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIzC HC:0376 VC:034 FC:14 I:00
    $02/975D E2 20  SEP #$20  A:018A X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIzC HC:0406 VC:034 FC:14 I:00
    $02/975F 60  RTS  A:018A X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIzC HC:0436 VC:034 FC:14 I:00
    
    Đoạn code trên : load vào A giá trị của vùng nhớ 7E3680, sau đó A có giá trị 00 01 (01 nằm trong 7E3681). Tiếp theo là so sánh với giá trị 0100 (đảo ngược), với 01 là value ram của Tsubasa. Thỏa điều kiện bằng nhau (Tsubasa) nên nhảy tới $02/974C.
    Tại đây, load giá trị ngẫu nhiên trong vùng nhới 7E0448 và so sánh với 20 (hex).
    Nếu >= 20 thì nhảy tới 2 975D. Tại đây là log của việc không kích hoạt Counter Shoot của Tsubasa nên đa số trường hợp sẽ mang giá trị > = 20 và nhảy tới 2 975D.
    Có thể kết luận 20 là tỉ lệ % xuất hiện Counter Shoot. Để tỉ lệ này đạt max, thay 20 = FF.
    Đoạn code trên giải thích lại như sau : so sánh với giá trị trong vùng nhớ 7E0448 với FF, nếu > = FF thì mới nhảy tới 2 975D. FF là giá trị max, nên chỉ khi nào đạt tới FF thì mới bị nhảy tới 2 975D.
    Thử ghi log tương tự cho Hyuga và Schneider (trường hợp chưa kích hoạt Counter Shoot), ta có đoạn code hoàn chỉnh sau :
    Mã:
    $02/9737 A0 00  LDY #$00  A:357E X:0002 Y:0010 D:0A00 DB:02 S:1C3D P:envMXdIzC HC:1312 VC:033 FC:15 I:00
    $02/9739 C2 20  REP #$20  A:357E X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIZC HC:1336 VC:033 FC:15 I:00
    $02/973B B7 C0  LDA [$C0],y[$7E:3520]  A:357E X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIZC HC:1390 VC:033 FC:15 I:00
    $02/973D C9 00 01  CMP #$0100  A:2A00 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIzC HC:0090 VC:034 FC:15 I:00
    $02/9740 F0 0A  BEQ $0A  [$974C]  A:2A00 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIzC HC:0122 VC:034 FC:15 I:00
    $02/9742 C9 00 19  CMP #$1900  A:2A00 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIzC HC:0146 VC:034 FC:15 I:00
    $02/9745 F0 05  BEQ $05  [$974C]  A:2A00 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIzC HC:0178 VC:034 FC:15 I:00
    $02/9747 C9 00 2A  CMP #$2A00  A:2A00 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIzC HC:0202 VC:034 FC:15 I:00
    $02/974A D0 11  BNE $11  [$975D]  A:2A00 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIZC HC:0234 VC:034 FC:15 I:00
    $02/974C E2 20  SEP #$20  A:2A00 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envmXdIZC HC:0258 VC:034 FC:15 I:00
    $02/974E AD 48 04  LDA $0448  [$02:0448]  A:2A00 X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIZC HC:0288 VC:034 FC:15 I:00
    $02/9751 C9 20  CMP #$20  A:2A3F X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIzC HC:0328 VC:034 FC:15 I:00
    $02/9753 B0 08  BCS $08  [$975D]  A:2A3F X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIzC HC:0352 VC:034 FC:15 I:00
    $02/975D E2 20  SEP #$20  A:2A3F X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIzC HC:0382 VC:034 FC:15 I:00
    $02/975F 60  RTS  A:2A3F X:0002 Y:0000 D:0A00 DB:02 S:1C3D P:envMXdIzC HC:0412 VC:034 FC:15 I:00
    
    Có : $02/9751 C9 20 => 11751 : C9 20 => đổi thành C9 FF. Vào game và kiểm tra lại. 3 cầu thủ này kích hoạt Counter Shoot 100% trong điều kiện đứng từ thứ 2-3-4 trong danh sách chặn và cầu thủ tấn công phải sút skill với cầu thủ đứng thứ 1)

    Kết luận : Chỉnh tỉ lệ kích hoạt Counter Shoot 100%
    Goto 11751 : C9 20 => C9 FF
    ---------------------------------------------------------------------------------
    Trường hợp muốn thêm Counter Shoot vào để sử dụng như sút bình thường.
    Một là dùng cách thêm vào vùng nhớ Ram như các phần trên đã đề cập : xem phần Web : value Ram cho Counter Shoot là : 2A. Điều kiện khi sử dụng là chỉ chọn được Counter Shoot khi đang đối đầu với cầu thủ khác.

    Hai là thêm vào rom game để có skill vĩnh viễn. Nhận xét tương tự như ở trường lấy value Ram của cầu thủ x2 và + với 2FB00 để có dãy địa chỉ offset cho pointer All Skills của cầu thủ đó. Trường các skill sút thì lấy value Ram x4 sẽ là value sút qui định trong Rom game.
    Ví dụ Counter Shoot có value ram 2A thì 2A x 4 (hex) = A8 là value trong rom game này qui định.
    Thử thay Counter Shoot vào chỗ của Drive Shoot của Tsubasa : dãy skill sút của Tsubasa bắt đầu từ 2FE80. Goto 2FE80 và thay 10 thành A8.
    Vào game và kiểm tra lại Tsubasa.
    Lưu ý : cũng chỉ có thể thực hiện Counter Shoot ở trong trạng thái đối đầu :
    count2.gif

    Done.
     
    Chỉnh sửa cuối: 19/7/16
    T0977999482 and traitim_virus like this.
  8. traitim_virus

    traitim_virus Mr & Ms Pac-Man

    Tham gia ngày:
    14/3/05
    Bài viết:
    165
    Ôi, diễn đàn không có nút thích * 10 ....
    Cảm ơn Asm va Ozone lan nua, vi su đam mê cua 2 bạn
    Dang cố gắng đọc lại từ đầu, từng chút 1 khi co thoi gian, không dám hy vọng sẽ hiểu, nhung hy vọng có thể dựa theo 1 ví dụ cụ thể để làm theo.
    Rõ ràng như ASM , OZONE đã huong dan, viec sua thẳng vao rom smc, gan nhu tao ra 1 game moi , them bot skill, chinh sua stats cho nhan vat yeu thich cua minh thi con gi bang, lai khong gay ra crash game.
    Thử điều khiển Misaki hoặc Ishizaki ( idol cua minh ) lừa qua Dias, Schneider,Pobulsen, ..rồi tung ra cú sút Hyper Dragon ( chiêu cuối cùa Kojiro ) ; hay thậm chi dùng thủ môn Mỏrisaki catch Neo Fire cũng thật thú vị ka ka ka. A quên, hinh như thủ môn Genzo, tuy ko có special catch, nhung có vẻ như trong game quy định anh ta sẽ chụp duoc tất cả cac cu sut tu ngoai vong 16m50, việc nay hack vào ram chac chac ko the lam dc, co le chi co hack vao smc

    sorry, lạc đề năng tí
    Minh chu yeu choi captain Tsubasa 4, do hình ảnh đẹp hơn bản 3, có thêm nhiều cú sút, các hiệu ứng khi 2 siêu sao đối đầu, va có thêm cả nhân vật king Kazu ( exhibition mode ) nữa.
    Bản này minh chỉ biết cheat bang PAr code, cung kha dầy dủ, chi có 1 yếu điểm là dùng tuyệt chiêu cua ai, thi sẽ hiện avatar cua nguoi đó, nên minh chi cheat full the luc va tang stats cho thu mon dự bị ----đây là điều quái lạ, khi hack vào Ram va save, ko the nào dieu chinh dc stats cho Tsubasa va Genzo....có lẽ chi co cach hack vao smc

    Asm va Ozone, hai bạn nêu co free time, co the huong dan ve Tsubasa 4 dc ?. Thanks a gain
     
  9. ozone

    ozone Donkey Kong Lão Làng GVN

    Tham gia ngày:
    4/4/05
    Bài viết:
    406
    Nơi ở:
    Recycle Bin
    @ traitim_virus : nếu bạn theo được hết các phần ở #45 và bài post phần 0 ở trên thì các vấn đề trong Tsubasa 4 bạn hỏi có lẽ không khó để giải quyết nếu bạn đã có trong tay bản g Cheat Par code đầy đủ (cũng là cheat trên giá trị của Ram).
    Nếu được bạn có thể pm cho mình bản PAR code Tsubasa 4, khoảng cuối tuần sẽ tìm hiểu thử và hỗ trợ trả lời các vấn đề của bạn trong Tsubasa 4 tùy theo khả năng mình tìm hiểu được.
     
    traitim_virus thích bài này.
  10. traitim_virus

    traitim_virus Mr & Ms Pac-Man

    Tham gia ngày:
    14/3/05
    Bài viết:
    165
    Thanks Ozone nhieu nhe
    Minh da gui pm bang PAr code,
    Tsubasa 4, khi cac nhan vat ngoi sao doi dau nhau, se hien avatar truoc khi ra skill
    Nhu trong hinh minh su dung Ishizaki, doi dau cung Sano, cheat skill drible Split cua Santana Carlos ( chieu nay chinh cai chieu Bushin drible ban noi o tren ).
    Ket qua, hien Avatar cua Carlos den thui truoc khi, Ishi lua bong Split, nhung stat qua thap, bi phá mat
    Tsu1.jpg Tsu02.jpg
    [​IMG]
    [​IMG]
     
  11. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Bản 4 đồ họa đẹp hơn bản 3, nhưng thần khí thì không bằng. Nhạc nhẽo cũng chán hơn.
    Cái avatar nhân vật khi ra chiêu, nếu muốn bỏ nó thì chỉ có cách can thiệp vào Rom bằng assembly.
     
    traitim_virus thích bài này.
  12. traitim_virus

    traitim_virus Mr & Ms Pac-Man

    Tham gia ngày:
    14/3/05
    Bài viết:
    165
    Thanks Asm
    Có lẽ chính vì sự sôi động, chất game mà bản 3 được chơi nhiều hon bản 4, mặc dù bản 4 co nhieu nhân vật và chapter hơn.
    Minh dang cố gắng mày mò thêm skill của 1 số nhân vật không có avatar vào , việc này sẽ không làm hiển thi cái avatar đen sì khi nhân vật chính copy skill. Nếu nhu can thiệp duoc bang assembly de add skill unique thi thật tuyệt vời
    Vẫn dang đọc trang 1 của thread này cho muc đích tìm hiểu địa chỉ quy định chỉ số (stats) , level của 1 nhân vật cụ thể, --giong mò kim đáy bể quá......
     
  13. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    ^ Nếu bạn có hứng thú thì nên tải các phần mềm mình đề cập ở trang đầu và bắt đầu làm theo, sẽ thấy dễ hiểu hơn.
    Table:
    00=
    01=あ
    02=い
    03=う
    04=え
    05=お
    06=か
    07=き
    08=く
    09=け
    0A=こ
    0B=さ
    0C=し
    0D=す
    0E=せ
    0F=そ
    10=た
    11=ち
    12=つ
    13=て
    14=と
    15=な
    16=に
    17=ぬ
    18=ね
    19=の
    1A=は
    1B=ひ
    1C=ふ
    1D=へ
    1E=ほ
    1F=ま
    20=み
    21=む
    22=め
    23=も
    24=や
    25=ゆ
    26=よ
    27=ら
    28=り
    29=る
    2A=れ
    2B=ろ
    2C=わ
    2D=を
    2E=ん
    2F=っ
    30=ゃ
    31=ゅ
    32=ょ
    33=0
    34=1
    35=2
    36=3
    37=4
    38=5
    39=6
    3A=7
    3B=8
    3C=9
    3D=+
    3E=-"
    3F=.
    40=「
    41=ア
    42=イ
    43=ウ
    44=エ
    45=オ
    46=カ
    47=キ
    48=ク
    49=ケ
    4A=コ
    4B=サ
    4C=シ
    4D=ス
    4E=セ
    4F=ソ
    50=タ
    51=チ
    52=ツ
    53=テ
    54=ト
    55=ナ
    56=ニ
    57=ヌ
    58=ネ
    59=ノ
    5A=ハ
    5B=ヒ
    5C=フ
    5D=ヘ
    5E=ホ
    5F=マ
    60=ミ
    61=ム
    62=メ
    63=モ
    64=ヤ
    65=ユ
    66=ヨ
    67=ラ
    68=リ
    69=ル
    6A=レ
    6B=ロ
    6C=ワ
    6D=ヲ
    6E=ン
    6F=ッ
    70=ャ
    71=ュ
    72=ョ
    73=ァ
    74=ィ
    75=ェ
    76=ォ
    77=(c)
    78=?
    79=!
    7A=<strange1>
    7B=<strange2>
    7C=~
    7D=ー
    7E=.
    7F='
    80=-゜
    81=A
    82=B
    83=C
    84=D
    85=E
    86=F
    87=G
    88=H
    89=I
    8A=J
    8B=K
    8C=L
    8D=M
    8E=N
    8F=O
    90=P
    91=/
    92=R
    93=S
    94=T
    95=U
    96=V
    97=W
    98=X
    99=Y
    9A=Z
    9B=゛
    9C=゜


    A0=が
    A1=ぎ
    A2=ぐ
    A3=げ
    A4=ご
    A5=ざ
    A6=じ
    A7=ず
    A8=ぜ
    A9=ぞ
    AA=だ
    AB=ぢ
    AC=づ
    AD=で
    AE=ど
    AF=ば
    B0=び
    B1=ぶ
    B2=べ
    B3=ぼ
    B4=ガ
    B5=ギ
    B6=グ
    B7=ゲ
    B8=ゴ
    B9=ザ
    BA=ジ
    BB=ズ
    BC=ゼ
    BD=ゾ
    BE=ダ
    BF=ヂ
    C0=ヅ
    C1=デ
    C2=ド
    C3=バ
    C4=ビ
    C5=ブ
    C6=ベ
    C7=ボ
    C8=ぱ
    C9=ぴ
    CA=ぷ
    CB=ぺ
    CC=ぽ
    CD=パ
    CE=ピ
    CF=プ
    D0=ペ
    D1=ポ

    F4=<page>
    FC=<line>
    FCF6=<end>
    FCF8=<end2>
    DC=<name2>
    DF=<name>
    E8=<waza>
    E0=<char>
    FB=<go>
    D8=<wazatype>
    D9=<wazatype2>
    F1=<spd>
    DA=<waza2>
    DB=<waza3>
    EC=<num>
     
  14. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Một trường hợp cụ thể.

    Như bạn ozone đã đề cập ở trang trước, địa chỉ Ram $7E040A quản lý chỉ số "angry". Khi giá trị tại địa chỉ này = $80 thì thủ môn sẽ bắt chắc hơn, cầu thủ chuồi mạnh hơn.

    Phần xử lý này tại:

    $03/B1F3 2C 0A 04 BIT $040A

    $03B1F3 trong địa chỉ Snes tương đương $01B1F3 trong địa chỉ PC (nghĩa là khi bạn mở rom bằng hex editor trên PC thì địa chỉ $01B1F3 tương ứng với $03B1F3 của Snes, nơi xử lý BIT $040A)

    Lưu trình xử lý như sau:

    1/ Kiểm tra giá trị tại $7E040A
    2/ Nếu giá trị = 0, nhảy đến routine 2
    3/ Nếu giá trị = 80, tiếp tục routine 1

    Trong đó

    routine 1: đọc text/ hiển thị text của "kyōretsu na" (mãnh liệt) "tackle" (chuồi)
    routine 2: đọc text/ hiển thị text của "tackle" (chuồi)


    [​IMG]

    Hình trên đây là khi 7E040A = 80
    Chuyển sang tiếng Việt

    [​IMG] [​IMG] [​IMG]

    Phần text có lưu trình như sau:

    - Hiển thị tên cầu thủ
    - Xuống hàng
    - Hiển thị "mãnh liệt"
    - Hiển thị "chuồi"

    Nếu 7E040A = 0 thì CPU sẽ nhảy tới phần chữ xanh, xử lý cho ra "chuồi".
    Nếu 7E040A = 80 thì CPU sẽ xử lý phần đỏ, cho ra "mãnh liệt", sau đó xử lý tiếp phần xanh, cho ra "chuồi".

    Như vậy ta được "mãnh liệt chuồi" (Kyoretsu na tackle). Trái với ngữ pháp tiếng Việt.
    Phải là "chuồi mãnh liệt" mới đúng. Việc này không thể sửa bằng cách thông thường.

    Log execution tại 03/B1F3 với trường hợp 7E040A = 80

    $03/B1F3 2C 0A 04 BIT $040A [$03:040A]
    $03/B1F6 10 10 BPL $10 [$B208]
    $03/B1F8 A9 16 LDA #$16
    $03/B1FA EB XBA
    $03/B1FB AE 09 04 LDX $0409
    $03/B1FE BD 17 B2 LDA $B217,x[$03:B218]
    $03/B201 C9 FF CMP #$FF
    $03/B203 F0 03 BEQ $03 [$B208]

    $03/B205 20 9A B7 JSR $B79A [$03:B79A] ; routine đọc/ghi chữ

    (Phần màu hồng là để đọc/ghi "mãnh liệt")

    $03/B208 LDA $0409
    $03/B20B 29 3F AND #$3F
    $03/B20D 0A ASL A
    $03/B20E AA TAX
    $03/B20F C2 20 REP #$20
    $03/B211 BD 66 B1 LDA $B166,x
    $03/B214 4C 9A B7 JMP $B79A


    (Phần màu nâu là để đọc/ ghi "chuồi")

    Do vậy, để hiển thị đúng ngữ pháp tiếng Việt thì cần chỉnh lại trật tự xử lý.

    org $03B1F1
    JML $608000 ; địa chỉ trống

    org $608000
    SEP #$30
    BIT $040A
    BMI tackle

    non_tackle:
    JML $03B208

    tackle:
    LDA $0409
    AND #$3F
    ASL A
    TAX
    REP #$20
    LDA $B166,x

    JSR emu_B79A

    kyoretsu:
    SEP #$30
    LDA #$16
    XBA
    LDX $0409
    LDA $B217,x
    CMP #$FF
    BEQ non_tackle
    JSR emu_B79A

    JML $03B7B5 ; return

    ;###########################
    ; emu B79A
    ; #########################

    emu_B79A:
    PHP
    JSL emu_FF2C
    SEP #$30
    LDY #$00
    STY $02
    emu_B7A5:
    LDY $02
    LDA [$C3],y
    CMP #$E0
    BCS end
    JSR emu_B78E

    INC $02
    BNE emu_B7A5

    end:
    PLP
    RTS

    emu_FF2C:
    JMP emu_85FD
    JML $008629

    ;####################
    ; EMU B5FD
    ;#####################

    emu_85FD:
    PHA
    PHX
    PHY
    PHB
    PHP
    SEP #$30
    XBA
    ASL A
    TAX
    LDA #$00
    XBA
    REP #$30
    ASL A
    TAY
    SEP #$20
    LDA #$00
    PHA
    PLB
    REP #$20
    LDA $8C01,x
    PHA
    LDA ($01,s),y
    STA $C3
    PLA
    SEP #$20
    STZ $C5
    PLP
    PLB
    PLY
    PLX
    PLA
    RTL

    ;##################
    ; EMU B78E
    ;################

    emu_B78E:
    PHP
    SEP #$30
    LDX $15
    STA $1116,x
    INC $15
    PLP
    RTS

    Kết quả

    [​IMG]

    Áp dụng tương tự cho bản tiếng Việt

    [​IMG]
     
  15. ozone

    ozone Donkey Kong Lão Làng GVN

    Tham gia ngày:
    4/4/05
    Bài viết:
    406
    Nơi ở:
    Recycle Bin
    @asm65816 : bác cho hỏi ví dụ như là hình ảnh đang hiện lên cảnh Tsubasa chuồi bóng "mãnh liệt" chẳng hạn. Thì ngay ở thời điểm đó, có cách nào để tìm được chính xác đoạn code nào trong rom đang xử lý để thực hiện toàn cảnh Tsubasa chuồi bóng đó không ? Bình thường khi không có tiêu chí nào để tìm (không biết vùng Ram nào để đặt breakpoint) thì mình sẽ lấy log trước đoạn hình ảnh chuồi bóng hiện ra một chút, sau đó loay hoay trong vài trăm ngàn dòng opcode để cố gắng tìm cho được đoạn xử lý cần tìm, mà làm vậy thì nghiệp dư quá :d

    @traitim_virus : yêu cầu của bạn như các hình post lên thuộc dạng khó (theo kiến thức mình biết) : trước hết là Ishizaki vốn không có skill dribble, xử lý việc này không khó nếu bạn đã theo kịp hết phần "0" mình post ở trên, thứ hai là Bunshin Dribble của Carlos là một trong các trường hợp đặc biệt có xuất hiện hình "avatar" khi thực hiện, không phải tất cả các skill dribble đều có hiện như vậy, nên phần xử lý của nó sẽ riêng biệt, nếu mình có thể "mò" ra, sẽ hướng dẫn cho bạn. Phần chỉnh các chỉ số Stats (có thể cả level) sắp tới mình sẽ post hướng dẫn với trường hợp Tsubasa 3, nếu bạn nắm được các kiến thức như đã nói ở trên thì có thể áp dụng vào cho Tsubasa 4 không quá khó.
     
  16. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Bạn hỏi về phần chữ hay về phần nào khác?
    Mà dù là xử lý gì đi nữa thì khi hình ảnh hiển thị thì phần xử lý đã kết thúc rồi.
    Thông thường, muốn tìm phần xử lý của chữ A thì phải nhấn Step Into trước khi chữ A xuất hiện.

    Bạn nên ghi lại log rồi kiểm tra các địa chỉ trong log, thử thay đổi nó trong Rom và quan sát kết quả. Vài lần là nắm được hết thôi.
    Chú ý là log của Snes9X có 2 kiểu: đầy đủ và trace once. Bỏ tích ô trace once thì có log đầy đủ, nhưng nặng.
     
    ozone thích bài này.
  17. ozone

    ozone Donkey Kong Lão Làng GVN

    Tham gia ngày:
    4/4/05
    Bài viết:
    406
    Nơi ở:
    Recycle Bin
    Cám ơn bác. Mình muốn hỏi là phần hỉnh ảnh khi nó hiện ra trên cửa sổ game, có cách nào tại thời điểm đó biết được chính xác đoạn đó đang được xử lý ở đâu trong file log, tức là rút ngắn được các thao tác "thử thay đổi" vì trong vài giây là có hàng trăm ngàn dòng opcode trong file log. Hoặc có thể nói là có mối liên hệ nào, hay cách chuyển đổi nào giữa Vram - Ram - Rom hay không ? Ví dụ Ram - Rom thì có thể đặt break point để ghi log và bắt đầu tìm xung quanh vị trí dừng break point trong file log. Còn nếu không biết giá trị Ram nào đang sử dụng, chỉ có phần hình ảnh đang có trên cửa sổ game thì không thể đặt Breakpoint :D
    Lúc trước có dùng thử check Trace Once, nhưng có lẽ (không chắc lắm) các dòng code xử lý cần tìm bị bỏ qua nên ít dùng tính năng này.
     
  18. ozone

    ozone Donkey Kong Lão Làng GVN

    Tham gia ngày:
    4/4/05
    Bài viết:
    406
    Nơi ở:
    Recycle Bin
    @traitim_virus : ở đây mình sẽ thực hiện một phần thắc mắc của bạn.
    Khi add PAR code (cheat giá trị trên Ram) của Bunshin Dribble. Nó sẽ ép game thực hiện phần hình ảnh của Bunshin Dribble. Khi đó nó sẽ lấy giá trị của cầu thủ đang giữ bóng ra so sánh, ở đây là Ishizaki, khi xuất ra hình ảnh, do không có dữ liệu của Ishizaki nên bị thành Avatar màu đen.
    Dựa trên Phần 0 mình post về Tsubasa 3 và bảng cheat giá trị Ram - Par code của bạn, sẽ trình bày ngắn các bước thực hiện :
    - Add Bunshin Dribble cho Ishizaki : value Ram của Carlos : 1F, lấy 1F x2 = 3E (hex) , value Ram của Ishizaki là 05, lấy 05 x2 = 0A (hex). Địa chỉ offset trong Rom qui định cho dãy Pointer all skill bắt đầu từ 9000 (hex). Do đó : all skill của Carlos là 9000 + 3E = 903E, all skill của Ishizaki là 9000 + 0A = 900A.
    Mở rom Tsubasa 4 = hex editor.
    Với Carlos : Goto 903E : CC 91. Trỏ tới 91 CC (đảo ngược). Goto tới 91 CC là dãy giá trị qui định skill cho các hành động của Carlos : ta có Dribble 91D0 : 1F 96. Trỏ tới 961F sẽ có value 04 (value ram của Bunshin Dribble). Vậy Pointer của Bunshin Dribble của Carlos là 1F 96 (961F).
    Với Ishizaki : Goto : 900A : 08 91 (9108). Goto 9108. Phần Dribble sẽ ở địa chỉ 910C : 00 00 vì Ishizaki chỉ có Dribble thường. Thay 00 00 tại 910C thành 1F96 như Carlos. Save lại.
    ishi1.jpg
    Reload game và test :
    ishi2.jpg
    - Tiếp theo : khi Ishizaki sử dụng Bunshin Dribble, game sẽ lấy dữ liệu của Carlos để hiển thị ra màn hình, nên kết quả sẽ hiện hình ảnh của Carlos mặc áo trắng (đội W all stars) nếu đang chọn chế đội 2 đội all stars CxW.
    ishi3.jpg
    Hoặc là hình nền đen khi lấy đội Sao Paulo như bạn post ở trên.
    Như đã nói trên, phần hiện Avatar của Bunshin Dribble là 1 trong các trường hợp đặc biệt và Ishizaki vốn không có vùng dữ liệu xử lý tương ứng (khi Dribble).
    Để ý : khi Ishizaki sút skill, có hình ảnh tương tự (ảnh nền) khác avatar, chỉ khác câu text hội thoại bên dưới. Tương tự với Carlos (cùng ảnh nền, cùng avata, khác câu text).
    ishi4.jpg
    Vậy giải pháp ở đây là thay thế hình ảnh avatar của Carlos khi dùng Bunshin Dribble bằng hình ảnh trên. Tuy nhiên một hình là xử lý của Shoot, 1 hình là xử lý của Dribble nên không có mối liên hệ với nhau trong rom game. Cho nên ta sẽ cố gắng tìm đoạn code thực hiện việc xuất hình ảnh lên màn hình game để thay đổi.
    - Đầu tiên mình sẽ tìm dãy value qui định hình avatar của Ishizaki khi sút skill (giả sử đang thuộc đội "Đỏ" của All Stars. Check CPU log ở thời điểm Ishizaki chọn skill sút và dừng ghi log ở giai đoạn như trên hình.
    Xem log bằng Notepad++. Ở các trường hợp này, phải thử nghiệm khá lâu để tìm được giá trị cần tìm. Mình bắt đầu bằng vị trí slot của Ishizaki (hiện tại đang ở vị trí số 7 đội P1) nên value Ram là 7E34C1. Bên trong log : search chuỗi :34C1]
    Mã:
    $03/AC4E A0 00  LDY #$00  A:347E X:0004 Y:0001 D:0F00 DB:03 S:1E16 P:envMXdizC HC:1030 VC:139 FC:48 I:00
    $03/AC50 B7 C0  LDA [$C0],y[$7E:34C0]  A:347E X:0004 Y:0000 D:0F00 DB:03 S:1E16 P:envMXdiZC HC:1078 VC:139 FC:48 I:00
    $03/AC52 D0 07  BNE $07  [$AC5B]  A:3400 X:0004 Y:0000 D:0F00 DB:03 S:1E16 P:envMXdiZC HC:1200 VC:139 FC:48 I:00
    $03/AC54 C8  INY  A:3400 X:0004 Y:0000 D:0F00 DB:03 S:1E16 P:envMXdiZC HC:1224 VC:139 FC:48 I:00
    $03/AC55 B7 C0  LDA [$C0],y[$7E:34C1]  A:3400 X:0004 Y:0001 D:0F00 DB:03 S:1E16 P:envMXdizC HC:1270 VC:139 FC:48 I:00
    $03/AC57 C5 10  CMP $10  [$00:0F10]  A:3405 X:0004 Y:0001
    
    Tại vị trí này, bắt đầu tìm kiếm tiếp :
    Trong Tsubasa 4, vùng địa chỉ qui định các thực hiện xử lý hình ảnh như trên thuộc vùng bank $14. Nên từ vị trí trên search chuỗi " $14: " và thay thế các giá trị để thử nghiệm, và tiếp tục tìm với "Find Next". Ở đây mình chọn chiều tìm kiếm là Up để tìm ngược lên trên. Bỏ qua các địa chỉ có dạng $14:0xxx vì đây là vùng địa chỉ Ram.
    Sau cùng, có được kết quả sau :
    Mã:
    $01/E9C9 C2 20  REP #$20  A:EF23 X:000F Y:0023 D:0C00 DB:14 S:1CF9 P:envMXdizc HC:1272 VC:092 FC:48 I:00
    $01/E9CB B1 08  LDA ($08),y[$14:C2F5]  A:EF23 X:000F Y:0023 D:0C00 DB:14 S:1CF9 P:envmXdizc HC:1318 VC:092 FC:48 I:00
    $01/E9CD 85 08  STA $08  [$00:0C08]  A:C525 X:000F Y:0023 D:0C00 DB:14 S:1CF9 P:eNvmXdizc HC:0010 VC:093 FC:48 I:00
    
    Địa chỉ $14:C2F5 chứa giá trị C525. Đây là Pointer để trỏ tới vùng dữ liệu hiển thị hình ảnh avatar của Ishizaki khi sút skill (quên tên). Nên ngay ở dưới đoạn này là đoạn :
    Mã:
    $01/E5EE B1 08  LDA ($08),y[$14:C525]  A:C500 X:000F Y:0000 D:0C00 DB:14 S:1CFB P:envMXdiZc HC:0294 VC:093 FC:48 I:00
    $01/E5F0 C9 DD  CMP #$DD  A:C560 X:000F Y:0000 D:0C00 DB:14 S:1CFB P:envMXdizc HC:0342 VC:093 FC:48 I:00
    
    Chuyển địa chỉ Rom 14C525 sang địa chỉ PC File dùng Luna Address, được 0A 4525.
    Mở rom game và goto A 4525 ta có dãy value :
    Mã:
    60 84 58 04 0B C5 0B F5 01 FB
    FB là qui định kết thúc đoạn xử lý.
    Thực hiện tương tự việc ghi log với trường hợp Carlos sút Mirage Shoot. Vì cùng là sút skill nên vùng dữ liệu sẽ được lưu gần nhau, với kinh nghiệm như với sút skill của Ishizaki, ta search nhanh hơn với chuỗi " $14:C5" hoặc "$14:C" và có được :
    $14:C30B với value pointer : C5 A3 và chuỗi value hiển thị avatar của Carlos khi sút Mirage là : $14:C5A3 (A45A3 trong rom game).
    Goto A45A3 và so sánh chuỗi value này với chuỗi value của Ishizaki :
    Mã:
    Carlos :
    60 96 58 15 0B D6 0B FC 01 FB
    
    Ishizaki :
    60 84 58 04 0B C5 0B F5 01 FB
    
    Trên đây chỉ là avatar khi sút skill của cả 2. Tiếp theo tìm chuỗi value avatar của Bunshin Dribble. Cũng thực hiện lấy log bắt đầu từ lúc chọn dòng Bunshin Dribble cho tới lúc thấy được hình avatar xuất hiện. Giả sử mình lấy log của Carlos đội "đỏ" và Carlos đang ở số 10 nên có ram 7E3521. Mở file log và tìm từ đầu (Down) chuỗi ":3521] "
    Sau khi có vị trí của chuỗi ":3521]" lặp lại quá trình tìm chuỗi " $14:" và thay thế thử nghiệm cho các chuỗi tìm được (bỏ qua chuỗi có dạng $14:0xxx).
    Ở đây có thể tận dụng kết quả trên để tìm nhanh hơn. Trở lại với đoạn so sánh 2 chuỗi giá trị ở trên, thay các giá trị tại vị trí khác nhau rồi reload game, sút lại vài thử nghiệm. Có kết luận : 15 qui định giá trị gương mặt của Carlos, và 04 qui định giá trị gương mặt của Ishizaki. Quay trở lại game, tạo 2 save state ở 2 cảnh hiện avatar của Carlos và Ishizaki rồi tiến hành dùng search engine (snes9x debugger) để tìm vùng ram mà 2 giá trị 15 và 04 được nạp vào.
    Ví dụ load state avatar Carlos trước, ta search dạng : Comparison Type : = (Equal To) - Compare To : Entered Value - Data Type : Hexa - Enter a Value : 15. Tiến hành searc, sau đó reload state của avatar Ishizaki và search tiếp, thay Enter a Value : 04.
    Kết quả có được vùng nhớ ram : 7E0609. Vùng này sẽ có giá trị 15 và 04 ngay khi chuyển state hiển thị avatar Carlos và Ishizaki.
    Quay lại với log của Carlos dùng Bunshin Dribble. Search chuỗi " :0609] " sẽ tìm được vùng nạp value 15 (Carlos) vào Ram 7E0609 :
    Mã:
    $01/E61E B1 08  LDA ($08),y[$14:AED0]  A:0080 X:0000 Y:0003 D:0C00 DB:14 S:1CFB P:envmXdizc HC:0048 VC:158 FC:42 I:00
    $01/E620 8D 09 06  STA $0609  [$14:0609]  A:0B15 X:0000 Y:0003 D:0C00 DB:14 S:1CFB P:envmXdizc HC:0104 VC:158 FC:42 I:00
    
    Từ đây, nhìn lên trên một chút là vùng dữ liệu chứa con trỏ tới vùng này :
    Mã:
    $01/E9CB B1 08  LDA ($08),y[$14:AE77]  A:EF0B X:0004 Y:000B D:0C00 DB:14 S:1CF9 P:envmXdizc HC:0244 VC:157 FC:42 I:00
    $01/E9CD 85 08  STA $08  [$00:0C08]  A:AECD X:0004 Y:000B D:0C00 DB:14 S:1CF9 P:eNvmXdizc HC:0300 VC:157 FC:42 I:00
    
    Với Pointer "AECD" ta có dãy value hiển thị avatar của Carlos khi dùng Bunshin Dribble bắt đầu từ : $14:AECD (A 2ECD).
    Lấy chuỗi value tại A 2ECD trong rom game (kết thúc bằng FB) và so sánh với chuỗi value avatar Ishizaki khi sút skill ở trên ta có :
    Mã:
    Ishizaki - sút skill
    60 84 58 04 0B C5 0B F5 01 FB
    Carlos - Bunshin Dribble :
    60 96 58 15 0B D6 0B D8 01 FB
    
    Thử thay 1 số value ở các vị trí khác nhau trong 2 dãy trên : 96, D6 qui định tóc, áo, v.., 15 qui định gương mặt, D8 qui định câu text bên dưới, 58 là hình nền đỏ phía sau .
    Bây giờ thay vào để đổi các value của Carlos sang thành Ishizaki : goto A 2ECD và bắt đầu thay : 96 -> 84 , 15 -> 04 , D6 -> C5 ; giữ nguyên D8 vì là câu text.
    ishi5.jpg
    Kết quả như sau - test bằng Ishizaki của Sao Paulo, đội "đỏ" all stars tương tự :
    bunshi.gif

    Kết luận : trên đây ta đã add thêm và thay hoàn toàn hình ảnh Bunshin Dribble cho Ishizaki. Tuy nhiên đã thay toàn bộ dữ liệu gốc của Carlos nên khi Carlos sử dụng Bunshin Dribble chỉ hiện ra hình của Ishizaki. Một là xóa luôn skill này của Carlos, hai là mở rộng file rom và tự code thêm phần xử lý rẽ nhánh cho 2 trường hợp Ishizaki và Carlos - dùng xkas. Có thể tham khảo các bài viết dùng xkas của bác asm65816 để tìm hiểu thêm.
     
    Chỉnh sửa cuối: 22/7/16
    traitim_virus thích bài này.
  19. traitim_virus

    traitim_virus Mr & Ms Pac-Man

    Tham gia ngày:
    14/3/05
    Bài viết:
    165
    Thanks Ozone va Asm
    @ozone : Minh đang đọc ngược từ #45, sau đó là #22 và # 58. lờ mờ hiểu kiểu mì ăn liền để add 1 skill drible thì trình tự như sau co đúng không ?

    1.Tra Ram Value của từng player
    2.*2 + 9000 để tìm Pointer all sKill
    3.Theo pointer all skill sẽ tìm ra pointer cho
    Shoot || Pass || Dribble ||Combi || Block || Tackle || PassCut||
    4.Tiếp tục theo pointer của Drible dể tới value cua nhân vật cần thay
    5.Tra bang Ram cua chiêu Drible và thay thế ? vào 4

    Phần thực hiện này nếu đúng thì tiếp theo để add 1 chiêu sút thì làm thế nào ?, vì nếu theo pointer shoot sẽ dẫn đến shoot thường/special/ head/volley....tới đây minh thua, ko thể hiểu tiếp.
     
  20. ozone

    ozone Donkey Kong Lão Làng GVN

    Tham gia ngày:
    4/4/05
    Bài viết:
    406
    Nơi ở:
    Recycle Bin
    Nếu bạn không quan tâm đến quá trình tìm kiếm hay tính toán thì chỉ cần sửa bên trong file rom game theo đúng 2 hình chụp hex editor thì sẽ được kết quả cuối cùng.
    Trình tự : offset all skill chứa Pointer all skill -> Pointer này chỉ đến vùng dữ liệu khác bao gồm 6 hành động cơ bản của cầu thủ (Shoot, Pass, Dribble, Combination , Block, Tackle, PassCut), trong đó, vị trí của mỗi hành động cơ bản này cũng là một Pointer chỉ đến 1 vùng dữ liệu tiếp theo ứng với skill của hành động đó, đây là vùng cuối cùng sẽ chứa các giá trị để lưu vào Ram và hiển thị lên cửa sổ game.
    Ở Tsubasa 4 : vùng cuối cùng này là các giá trị Ram (xem bảng PAR code), ở Tsubasa 3 là các giá trị Ram x 4 (hex). Và ở Tsubasa 4, cả động tác thường cũng được đưa vào.
    Vậy điều đầu tiên là xác định địa chỉ offset all skill : hoặc ghi log để tìm, hoặc tận dụng kết quả là lấy value ram (par code) của cầu thủ đó x2 và + 9000. Địa chỉ offset 9000 là địa chỉ bắt đầu cho vùng offset all skill do game qui định.
    Quay lại ví dụ với Ishizaki : offset all skill = 05 x 2 = 0A + 9000 = 900A
    Vậy offset all skill của Ishizaki là 900A. Tại offset này chứa Pointer 2 bytes (xx yy) trỏ đến vùng offset 6 động tác cơ bản : goto 900A : 08 91, đảo ngược lại để có 91 08. 91 08 là Pointer trỏ đến vùng offset 91 08.
    Goto 91 08 là dãy offset cho 6 hành động : mỗi hành động cũng đều là 2 byte (xx yy) vậy sẽ có :
    Mã:
    9108 :  3195   0000   0000   0000   3F96   4696
    Như vậy : con trỏ cho các skill sút của Ishizaki : là 9531 (đảo ngược của 3195) - của Dribble là 0000 vì mặc định Ishizaki không có skill Dribble.
    Tương tự với Carlos :
    Mã:
    91CC : 7C95  0000  1F96    0000  0000   0000
    Ở vị trí Dribble của Carlos là Pointer 961F -> goto 961F ta có : 961F : 04 (value ram Bunshin Dribble)
    Muốn Ishizaki có Bunshin Dribble : vì Pointer Dribble của Ishizaki là 0000 : tức là không trỏ tới vùng dữ liệu nào. Nên để được như Carlos thì không phải thay value ram mà là thay value Pointer Dribble của Carlos : 1F96 (đảo ngược 961F).
    Vậy sẽ sửa thành :
    Mã:
    9108 : 3195   0000   1F96  0000   3F96    4696
    Vậy là Ishizaki có Bunshin Dribble, chỉ bị vướng phần hiện avatar của Carlos như đã nói trên.

    Tương tự xét Shoot : con trỏ Shoot của Carlos là 957C (7C95) và của Ishizaki 9531 (3195) bởi vì cả 2 đều có sút skill.
    Nếu muốn thay toàn bộ sút skill của Carlos sang cho Ishizaki (Mirage, Overhead) thì đổi cả giá trị Pointer của sút. Lúc này với Ishizaki :
    9108 : 7C95 0000 0000 0000 3F96 4696
    Nếu chỉ muốn thay thế "Monkey" Shoot của Ishizaki thành Mirage Shoot của Carlos. Thì giữ nguyên Pointer Sút 3195 và goto 9531.
    Mã:
    9531 : 00  0F  03
    00 : có thể là value của Shoot (thường ) hoặc ý nghĩa khác, tạm thời không quan tâm, mình cũng không hiểu rõ :D
    0F : value ram của "Monkey" shoot (Par code)
    03 : có thể là overhead hoặc kết thúc chuỗi sút của Ishizaki (tùy game xử lý).
    Tại đây thay 0F thành 1A (value ram - par code) của Mirage Shoot.
    Vào game, cả 2 trường hợp Ishizaki có Mirage Shoot thay cho "monkey" shoot, với trường hợp 1 thì Ishizaki có thêm Overhead.
    Còn nếu muốn giữ nguyên "monkey" và thêm vào Mirage Shoot : nếu bạn nắm được tới đây thì có thể xem lại phần 0 mình post ở trên : trỏ Pointer Shoot của Ishizaki tới 1 vùng dữ liệu trống và viết lại chuỗi value ram các skill sút có thêm Mirage Shoot. Để không bị lỗi game thì vùng dữ liệu trống muốn tìm nên là vùng có ít nhất 5-6 value 00 hoặc FF liên tiếp trở lên hoặc mở rộng file rom ra.
     
    Chỉnh sửa cuối: 22/7/16
    traitim_virus thích bài này.

Chia sẻ trang này