Multi Thần điện Ninh Tiền Đô 816 bit

  • Thread starter Thread starter SPC700
  • Ngày gửi Ngày gửi
Game dạng siêu phẩm đấy. Tui chơi đi chơi lại mấy lần. Giờ vẫn muốn chơi lại bản 3ds mà k có tiền mua nên cứ treo đó nè pepe-18
3ds giờ nhiu vậy fen.
 
3DS old tầm 1 củ. Nhưng mà trừ khi cực thích game của nó, chứ không thì đừng mua.
Màn hình của 3DS lẫn New 3DS đều chán lắm. Tất cả các hệ máy cầm tay của Nin từ trước giờ thì chỉ có mỗi con Switch là tạm được.
Máy Nin thì nên mua máy nào cắm TV chơi ngon hơn.
 
Công khai nguồn bản dịch Tear Ring Saga (PS1, 1999).



Tear Ring Saga, tên ban đầu là Emblem Saga, được rất nhiều tay chơi game Việt Nam biết đến với tên gọi "Mộc đế 6" hoặc "Mộc đế PS1".
Đơn giản là do game này có cùng cốt cách với dòng game "Mộc đế" (Fire Emblem) do hãng Ninh Tiền Đô phát hành.

Emblem Saga là sản phẩm của Kaga Shōzō sau khi ông này rời khỏi Intelligent Systems, công ty phát triển game cho Ninh Tiền Đô, và nổi tiếng nhất qua series Fire Emblem. Kaga Shōzō cũng là người sáng tạo nên dòng game Fire Emblem, nhưng Ninh Tiền Đô lại là bên chi tiền để phát triển cả dòng game này.
Vì thế, ngay sau khi Kaga Shōzō thành lập công ty riêng, tạo nên Emblem Saga thì giữa Ninh Tiền Đô và ông này đã diễn ra vụ kiện tụng kéo dài đến năm 2005, xoay quanh vấn đề tác quyền.
Cũng vì lẽ đó mà Emblem Saga được đổi tên thành Tear Ring Saga.
Bản dịch tiếng Việt này được hoàn thành (mức độ 100%) vào năm 2014. Sau 10 năm, tác giả bản dịch quyết định công khai code và script của bản dịch này để cộng đồng có thể chỉnh sửa lời thoại, xây dựng nên những câu chuyện mới.

Link:
https://www.mediafire.com/file/6f9wafsvd5r91jl/Emblem_Saga.rar

Cũng giống như các phiên bản Fire Emblem khác, đây là game có khối lượng thoại đồ sộ, không thua kém bất cứ trường thiên tiểu thuyết nào.
Ngoài ra, tác giả bản dịch này còn công khai mã nguồn + script bản dịch tiếng Việt cho nhiều game khác.
Xem chi tiết ở link bên dưới.

https://sites.google.com/view/sfc65816

C5TWNS6.jpg
 
Giải mã event trong FE4 và ứng dụng.

Event trong game này gồm 2 phần, map event và event chính.
Mỗi chương đều có cấu thành từ 2 khối event này.
Map event là một khối script chứa các event diễn ra trên map, chẳng hạn như nhân vật A nói chuyện với nhân vật B, hay A đánh B, hay khi chiếm thành, nhân vật nào đó tử trận,.... Map event chỉ được kích hoạt mỗi khi có hoạt động xảy ra trên map. Chẳng hạn như khi có nhân vật bất kỳ di chuyển/hành động.
Map event được kích hoạt qua routine
C6/839B: 8B PHB
C6/839C: 08 PHP
C6/839D: 4B PHK
C6/839E: AB PLB
C6/839F: DA PHX
C6/83A0: 5A PHY
C6/83A1: 22348386 JSR $868334
C6/83A5: AEAB0E LDX $0EAB
C6/83A8: E220 SEP #$20
C6/83AA: ADAD0E LDA $0EAD
C6/83AD: 48 PHA
C6/83AE: C220 REP #$20
C6/83B0: AB PLB
C6/83B1: BD0500 LDA $0005,X
C6/83B4: A8 TAY
C6/83B5: E220 SEP #$20
C6/83B7: BD0700 LDA $0007,X
C6/83BA: 48 PHA
C6/83BB: C220 REP #$20
C6/83BD: AB PLB
C6/83BE: 22D88386 JSR $8683D8
C6/83C2: 7A PLY
C6/83C3: FA PLX
C6/83C4: 28 PLP
C6/83C5: AB PLB
C6/83C6: 6B RTL
$0EAB ~ $0EAD là pointer dẫn tới khối map event. Khối script này được xử lý ở $8683D8. Chuỗi script này kết thúc bằng 0xFFFF.
C6/83D8: B90000 LDA $0000,Y
C6/83DB: C9FFFF CMP #$FFFF
C6/83DE: F005 BEQ $83E5
C6/83E0: 20E683 JSR $83E6
C6/83E3: 80F3 BRA $83D8
C6/83E5: 6B RTL
Khi lần đầu tiên CPU đọc từng event thì carry được clear, trong quá trình so sánh thì tùy tình huống mà carry được clear hay set. Trường hợp carry set thì bỏ qua event đó để đọc event tiếp theo.
C6/83E6: C8 INY
C6/83E7: 29FF00 AND #$00FF
C6/83EA: 0A ASL A
C6/83EB: AA TAX
C6/83EC: 18 CLC
C6/83ED: 7CFA83 JMP ($83FA,X)
C6/83F0: C8 INY
C6/83F1: 29FF00 AND #$00FF
C6/83F4: 0A ASL A
C6/83F5: AA TAX
C6/83F6: 38 SEC
C6/83F7: 7CFA83 JMP ($83FA,X)
83FA:
dw $84EC
dw $897C
dw $8983
dw $898A
dw $8991
$8683FA là table chứa các pointer dẫn tới các event. Tại đây, từng event được cấp cho một giá trị, sau đó giá trị này được so sánh với giá trị ở $0EBC, nếu bằng nhau thì map event mới xảy ra.
Chẳng hạn event kích hoạt hội thoại nhân vật A nói chuyện với nhân vật B có ID là 0x04, bắt đầu ở địa chỉ $868991.
Ví dụ: đoạn hội thoại khi Cuan (ID 06) bắt chuyện với Sigurd (ID 01) có cú pháp:
04 FF 06 00 01 00 FF FF
30 FF A7 01
Trong đó:
- Byte 1: 04 là ID kích hoạt map event hội thoại
- Byte 2: FF là mã số flag. FF là bỏ qua flag. Nếu là giá trị khác thì sẽ ảnh hưởng tới việc set/reset flag đó, và sẽ ảnh hưởng tới những event sau này. Với giá trị FF thì event hội thoại này không ảnh hưởng gì tới các event sau.
- Byte 3-4: 0006 là ID của Cuan. Nếu ID này là FFFF thì bất kỳ nhân vật nào bắt chuyện với nhân vật phía sau đều kích hoạt thoại.
- Byte 5-6: 0001 là ID của Sigurd. Nếu ID này là FFFF thì nhân vật phía trước bắt chuyện với bất kỳ nhân vật nào cũng đều kích hoạt thoại.
- Byte 7-8 báo kết thúc chuỗi event định nghĩa hội thoại, bắt đầu thực hiện event
- Byte 9: 30 là ID kích hoạt event chính
- Byte 10: là ID của flag, FF bỏ qua flag
- Byte 11-12: ID của event chính
* Nếu ID của 2 nhân vật đều là FFFF thì mọi nhân vật đều nói chuyện được với nhau, không phân biệt địch ta.
Đoạn trên có ý nghĩa: khi nhân vật Cuan (0006) bắt chuyện với Sigurd (0001) thì sẽ thi hành event chính có ID là 01A7.
Tại event chính này, CPU sẽ mở ra hộp thoại, thay đổi nhạc nền, hiển thị avatar nhân vật, text...
Đầu tiên, ID 04 kích hoạt thoại được $868991, rồi event này được cấp cho ID 000A.
C6/8991: A90A00 LDA #$000A
C6/8994: 5CA78686 JMP $8686A7
C6/86A7: 08 PHP
C6/86A8: A20700 LDX #$0007
C6/86AB: 8EB60E STX $0EB6
C6/86AE: A2B986 LDX #$86B9
C6/86B1: 8EAB0E STX $0EAB
C6/86B4: 28 PLP
C6/86B5: 5CED8486 JMP $8684ED
ID 000A của event hội thoại được so sánh với $0EBC.
Giá trị 0007 được ghi vào $0EB6 biểu thị độ dài của chuỗi trong cú pháp của ID hội thoại 04. Để sang event tiếp theo thì vị trí event hiện tại
LIKE.png
được cộng với giá trị ở $0EB6. Tức, với trường hợp của mã hội thoại 04 thì vị trí hiện tại được cộng thêm 7 byte để CPU đọc sang event tiếp sau đó.
Trường hợp ID 000A của event hội thoại không bằng với giá trị của $0EBC thì CPU bỏ qua event này để đọc event tiếp sau.
Trường hợp giá trị ở $0EBC bằng 000A thì CPU sẽ đọc byte tiếp theo của chuỗi, tức đọc byte biểu thị cho flag.
Nếu byte này khác FF thì CPU sẽ xử lý flag ở $869A50.
Nếu byte này là FF thì CPU bỏ qua việc xử lý flag, nhảy tới địa chỉ ở $0EAB.
C6/84ED: B064 BCS $8553
C6/84EF: E220 SEP #$20
C6/84F1: CDBC0E CMP $0EBC
C6/84F4: C220 REP #$20
C6/84F6: D050 BNE $8548
C6/84F8: B90000 LDA $0000,Y
C6/84FB: 29FF00 AND #$00FF
C6/84FE: C9FF00 CMP #$00FF
C6/8501: F016 BEQ $8519
C6/8503: 898000 BIT #$0080
C6/8506: D008 BNE $8510
C6/8508: 22509A86 JSR $869A50
C6/850C: B03A BCS $8548
C6/850E: 8009 BRA $8519
C6/8510: 297F00 AND #$007F
C6/8513: 22509A86 JSR $869A50
C6/8517: 902F BCC $8548
C6/8519: 205A85 JSR $855A
C6/851C: 902A BCC $8548
C6/851E: B90000 LDA $0000,Y
C6/8521: 29FF00 AND #$00FF
C6/8524: C9FF00 CMP #$00FF
C6/8527: F012 BEQ $853B
C6/8529: 898000 BIT #$0080
C6/852C: D006 BNE $8534
C6/852E: 22D69986 JSR $8699D6
C6/8532: 8007 BRA $853B
C6/8534: 297F00 AND #$007F
C6/8537: 22139A86 JSR $869A13
C6/853B: 205385 JSR $8553
C6/853E: B90000 LDA $0000,Y
C6/8541: 20E683 JSR $83E6
C6/8544: 5C378C86 JMP $868C37
C6/8548: 205385 JSR $8553
C6/854B: B90000 LDA $0000,Y
C6/854E: 20F083 JSR $83F0
C6/8551: 8006 BRA $8559
C6/8553: 98 TYA
C6/8554: 18 CLC
C6/8555: 6DB60E ADC $0EB6
C6/8558: A8 TAY
C6/8559: 60 RTS
Đối với event hội thoại, địa chỉ ở $0EAB là $85B6B9, được ghi ở đoạn bên trên.
C6/86AE: A2B986 LDX #$86B9
C6/86B1: 8EAB0E STX $0EAB
C6/855A: 6CAB0E JMP ($0EAB)
Tại $86B6B9, CPU đọc 2 byte tiếp theo của chuỗi, biểu thị cho ID của nhân vật được bắt chuyện rồi ghi vào $0EAE.
Sau đó, CPU tiếp tục đọc 2 byte tiếp biểu thị cho ID của nhân vật được bắt chuyện, rồi ghi vào $0EB0.
Tiếp đến, CPU đọc 2 byte cuối cùng trong chuỗi là FFFF rồi ghi vào
$0EB2 trước khi nhảy đến routine $869BF2 để check xem các ID nhân vật vừa rồi có đúng là ID cần kích hoạt thoại ở tình huống hiện tại hay không.
C6/86B9: B90100 LDA $0001,Y
C6/86BC: 8DAE0E STA $0EAE
C6/86BF: B90300 LDA $0003,Y
C6/86C2: 8DB00E STA $0EB0
C6/86C5: B90500 LDA $0005,Y
C6/86C8: 8DB20E STA $0EB2
C6/86CB: 20F29B JSR $9BF2
C6/86CE: 9021 BCC $86F1
C6/86D0: AE6F05 LDX $056F
C6/86D3: ADBD0E LDA $0EBD
C6/86D6: 22B48484 JSR $8484B4
C6/86DA: AD6F05 LDA $056F
C6/86DD: 8DA70E STA $0EA7
C6/86E0: ADBF0E LDA $0EBF
C6/86E3: 22B48484 JSR $8484B4
C6/86E7: AD6F05 LDA $056F
C6/86EA: 8DA90E STA $0EA9
C6/86ED: 8E6F05 STX $056F
C6/86F0: 38 SEC
C6/86F1: 60 RTS
Tại routine $869BF2, CPU check ID của nhân vật bắt chuyện được ở ghi ở $0EAE. Nếu ID này là FFFF thì bỏ qua bước check xem có đúng là ID cần thiết ở tình huống hiện tại hay không, rồi check ID của nhân vật được bắt chuyện. Nếu ID này không phải FFFF thì so sánh với ID ở $0EBD (chứa ID đúng của nhân vật bắt chuyện ở tình huống hiện tại). Nếu 2 ID này không khớp nhau thì thoát khỏi routine với carry clear. Nếu 2 ID này khớp nhau thì tiếp tục check ID của nhân vật được bắt chuyện.
Nếu ID của nhân vật được bắt chuyện là FFFF thì thoát khỏi routine với carry set. Nếu ID này không phải FFFF thì tiếp tục so sánh với ID đúng của nhân vật được bắt chuyện được chứa ở $0EBF. Tại đây, nếu 2 ID này không khớp nhau thì thoát khỏi routine với carry clear.
Nếu 2 ID này khớp nhau thì CPU tiếp tục check giá trị chứa ở $0EB2. Tại $0EB2 là 2 byte cuối cùng của chuỗi event hội thoại. Giá trị này được so sánh với $0EC1. Nếu bằng nhau, hoặc khi chuỗi kết thúc bằng FFFF thì sẽ thoát routine với carry set.
C6/9BF2: ADAE0E LDA $0EAE
C6/9BF5: 3008 BMI $9BFF
C6/9BF7: ADBD0E LDA $0EBD
C6/9BFA: CDAE0E CMP $0EAE
C6/9BFD: D01C BNE $9C1B
C6/9BFF: ADB00E LDA $0EB0
C6/9C02: 3008 BMI $9C0C
C6/9C04: ADBF0E LDA $0EBF
C6/9C07: CDB00E CMP $0EB0
C6/9C0A: D00F BNE $9C1B
C6/9C0C: ADB20E LDA $0EB2
C6/9C0F: 3008 BMI $9C19
C6/9C11: ADC10E LDA $0EC1
C6/9C14: CDB20E CMP $0EB2
C6/9C17: D002 BNE $9C1B
C6/9C19: 38 SEC
C6/9C1A: 60 RTS
C6/9C1B: 18 CLC
C6/9C1C: 60 RTS
Sau khi thoát khỏi routine $869BF2 thì CPU trở vì $8686CE. Trường hợp carry set thì CPU sẽ thi hành mệnh lệnh tiếp theo để gọi event chính.

 
Một số bạn hỏi sao bản dịch Tear Ring Saga không chơi được trên PS Vita.
Câu trả lời là: PS Vita không thể chơi được game PS1.
Tuy nhiên, nó có thể chơi được game của PSP, còn máy PSP thì lại chơi được game PS1.
Do đó, để chơi bản dịch Tear Ring Saga trên máy PS Vita thì cần phải:
1) Convert Rom Tear Ring Saga thành dạng Eboot để máy PSP có thể đọc được.
2) Chạy giả lập PSP trên máy PS Vita (giả lập Andreline)
Một số hệ máy cầm tay của Ninh Tiền Đô cũng có thể chạy được bản dịch này với giả lập PS1, nhưng không khuyến khích.
Bởi vì CPU của hệ PS nhà Sony là MIPS, trong khi CPU của các hệ máy cầm tay của nhà Ninh Tiền Đô thường là ARM, và thường yếu hơn nên độ tương thích không cao.
Mà bây giờ nhìn lại thì thấy bản dịch này (năm 2014) chỉ mới dừng ở mức thủ thuật chứ chưa phải kỹ thuật.
Còn link bên dưới bao gồm Rom tiếng Việt cho cả PS1 lẫn Eboot cho PSP, nhưng có thêm một số chỗ nghịch ngợm của năm 2024.

Link:
Super Easy Tear Ring Saga (mediafire.com)

a) Di chuyển không tốn lượt
b) Mua đồ không tốn tiền, nhưng bán thì tăng tiền
c) Level up với 1 EXP
d) Độ bền của vũ khí chỉ có tăng chứ không có giảm
Bản vọc này thích hợp cho người chỉ muốn thưởng thức nội dung của game, hoặc người lúc nào cũng muốn tiền vào mà không thích tiền ra....

 
Cập nhật bài viết về Dragon Quest XI.
Mặc dù biết loạt game này từ thập niên 1990 rồi, nhưng mãi tới khi nó xuất hiện trên PS4 năm 2017 thì mới bắt đầu chơi.
Và nhận thức cũng đã thay đổi.
Trước khi chơi DQ thì Final Fantasy là nhất.
Nhưng từ sau khi chơi Dragon Quest thì FF không còn là nhất.

80dhFKw.png


STONE BOAT - Nói về Dragon Quest XI (google.com)
 
Cập nhật bài viết về Dragon Quest XI.
Mặc dù biết loạt game này từ thập niên 1990 rồi, nhưng mãi tới khi nó xuất hiện trên PS4 năm 2017 thì mới bắt đầu chơi.
Và nhận thức cũng đã thay đổi.
Trước khi chơi DQ thì Final Fantasy là nhất.
Nhưng từ sau khi chơi Dragon Quest thì FF không còn là nhất.

80dhFKw.png


STONE BOAT - Nói về Dragon Quest XI (google.com)

Qúa hay bác ơi, bác có dự định làm bản dịch cho dòng Dragon Quest không.
 
Có đó bạn. Sẽ làm mấy con huyền thoại Famicom và Super Famicom.
Mấy lần nhìn ảnh cụ chụp ban công thấy cái tường đối diện quen quen mà không nhớ ra, rất muốn có 1 lần được diện kiến cụ =))
 
Có đó bạn. Sẽ làm mấy con huyền thoại Famicom và Super Famicom.
Tuyệt vời em có cái để thẩm trên giả lập với con dt và mấy con mấy chơi game cầm tay rồi. Khi tàng game của nintendo, ps1 chưa bso giờ khiến em hết chán bác ạ.
 
Dragon quest bản nào có cốt truyện hay nhất nhỉ :D
 
Nhiều người đánh giá bản 3, 5, 6 , 11 là hay nhất.
Cơ mà story của DQ không tới mức quá xuất sắc đâu. Cái độc của nó là cách dẫn dắt câu chuyện. Mảng này thì DQ cực kỳ đỉnh.
Hồi xưa đi thuê truyện có bộ nhìn nhân vật giống bản 6 lắm
 
Các bản kia có manga tiếng việt ko nhể
Ko đọc đc eng :v
Manga của 6 hay 7 thì mình chịu không biết có scanlate không, nhưng Dai và Roto 1, 2 có hết mà :))

Mà thôi trả lại thớt cho bác @SPC700 làm việc :D
 
Back
Top