Chủ Nhật, 28 tháng 1, 2018

[Bloodborne]Miyazaki Hidetaka interview 1

Bài phỏng vấn Miyazaki Hidetaka, (hiện) giám đốc From Software về tựa game "Bloodborne" trước thềm sự kiện PlayStation E3 2014 tại Los Angeles, Mỹ quốc. Bài này được đăng trên trang Dengeki Online, tuy đã cũ nhưng cũng có vài thông tin thú vị về việc phát triển Bloodborne.

Bài gốc:
http://dengekionline.com/elem/000/000/865/865467/

■Bloodborne là tác phẩm khác hệ với series Souls

Hỏi: đầu tiên xin ông cho biết đầu đuôi quá trình chế tác tác phẩm này, bắt đầu từ khi nào.
Đáp: kế hoạch bắt đầu từ năm 2012. Tôi nghĩ đó là trước khi PS4 được công bố, nhưng ban đầu, tất cả xuất phát từ sau khi tôi nhận được tin từ SCE (Sony Computer Entertainment) rằng "anh làm game mới cho phần cứng mới không". Với cá nhân tôi thì có phần đi xuống trong việc phát triển "Dark Souls 2" (chỉ là Supervisor), rất có hứng với chuyện hợp tác lần nữa với SCE nên đã trả lời họ rằng "hãy để tôi làm".

Hỏi: vậy là ngay từ đầu đã quyết định làm cho PS4 nhỉ.
Đáp: đúng vậy. Mọi thứ bắt đầu từ đó.

Hỏi: khi SCE và anh (Miyazaki) hợp tác với nhau thì đầu tiên tôi nghĩ đến "Demon's Souls", vậy liệu có phải tác phẩm lần này cùng hệ với dòng Souls không?
Đáp: là tác phẩm khác. Lúc nãy tôi có nói, SCE đề nghị làm một game mới, chứ không có xem xét làm một hậu bản của "Demon's Souls". Cả tác phẩm lần này (Bloodborn) với Demon's Souls đều do tôi đạo diễn. Xét về ý nghĩa đó thì có phần giống nhau nhưng thật ra là hai tác phẩm riêng biệt.


Hỏi: khi định làm một tác phẩm hoàn toàn mới, thì ngay từ lúc đầu anh có nghĩ là sẽ nhắm đến tác phẩm như thế nào không?
Đáp: đầu tiên là gameplay, nhất là phần chiến đấu và Online xem có làm được điều gì mới mẻ không. Sau đó là một thế giới quan mới phù hợp với gameplay. Từ giai đoạn kế hoạch ban đầu thì tôi được SCE tin tưởng phó thác nên cứ thế mà tiến hành. May mắn là không có mâu thuẫn nào ở giai đoạn ý tưởng (concept) (cười).

Hỏi: anh hãy cho biết Key word về tác phẩm lần này.
Đáp: có rất nhiều Key word, nhưng nếu kể một vài trong số đó... Thì đầu tiên là, "thú khám phá những thứ chưa biết". Đương nhiên, đây là thú khám phá Map, và tôi cũng muốn biến thế giới quan cũng như câu chuyện thành những thứ đầy những bí ẩn. Về gameplay, nhiều yếu tố game mới cũng như tính chiến thuật cũng bao gồm "thú khám phá". Vì đây là tác phẩm mới nên tôi muốn chú trọng đến phần này.
Còn một Key word nữa, đó là "cảm giác tử chiến". Key word này tập trung vào hệ thống chiến đấu, cũng bao gồm vai trò từ gameplay. Tôi muốn miêu tả yếu tố chiến đấu khốc liệt hơn, muốn người chơi cảm nhận được điều đó. Nhờ yếu tố khốc liệt này nên hẳn là người chơi sẽ thấy khoái chí hơn sau khi vượt qua trận tử chiến. Key word cuối cùng là Online. Chúng tôi gọi đó là "chia sẻ tự do khám phá" nhưng hiện giờ không thể bàn chi tiết về nội dung này được. Tuy nhiên tôi muốn làm gì đó mới mẻ với chức năng Online nên cũng mong các anh tiếp tục chờ thông tin.


Hỏi: cảm giác căng thẳng và cảm giác tử chiến trong những trận đấu Boss, PVP của những tác phẩm từ trước đến giờ khác hay, vậy tác phẩm lần này có thừa hưởng những cảm giác đó không?
Đáp: đúng vậy. Tôi ý thức rằng đó là chủ đề lần này nên cũng muốn nhấn mạnh hơn. Về thế giới trong game, tôi muốn người chơi cảm nhận được sự tối tăm, đáng sợ hơn từ kẻ địch. Về yếu tố chiến đấu thì muốn họ cảm nhận được sự khốc liệt hơn trong những trận tử chiến. Không hẳn tôi muốn biến thành game kinh dị, nhưng tôi nghĩ rằng tác phẩm lần này sẽ mang lại những cảm xúc tương tự vậy. Chẳng hạn như "tháp Latria" trong Demon's Souls.


Hỏi: xin hãy cho biết ý nghĩa bao hàm trong tựa đề "Bloodborne".
Đáp: về tựa đề thì đó là một Key word quan trọng định nghĩa cho thế giới quan của tác phẩm. Nhưng tôi nghĩ đó là yếu tố thám hiểm dành cho người chơi, để họ tự tìm hiểu trong quá trình chơi nên không muốn giải thích chi tiết ở đây.

■Chiến đấu năng động hơn, được định nghĩa bởi vũ khí cận chiến và súng
Hỏi: anh hãy cho biết ý đồ vì sao quyết định chọn bối cảnh là thời Victoria thế kỷ 19.
Đáp: tôi chọn thế giới quan phù hợp nhất với gameplay đã vạch sẵn. Trong "Demon's Souls" thì trận đấu được định nghĩa bằng kiếm và khiên, mang tính thụ động. Trái lại, tôi muốn trận đấu trong tác phẩm lần này mang tính năng động hơn, mặt khác tôi cũng không hề nghĩ đến game bắn súng. Và tôi chọn thế giới quan (bối cảnh) thỏa mãn với những điều kiện quan trọng đó. Trong điều kiện đó, tôi nghĩ đến hình ảnh những khẩu súng cũ nên đã xây dựng thế giới quan dựa trên thời Victoria. Ấn tượng về những bộ giáp kim loại trong thời Victoria rất mờ nhạt, trang bị cơ bản bằng vải nên tôi nghĩ rất phù hợp với những trận chiến năng động, phù hợp với những trận tử chiến đẫm máu.
Còn một ý đồ nữa, thời Victoria rất hợp với thế giới quan mà chúng tôi muốn xây dựng dựa trên sức mạnh của PS4. Bối cảnh chính của tác phẩm lần này là "cổ đô Yharnam" có những dãy phố cổ với kiến trúc Gothic, trùng với motif thời Victoria. Kiến trúc Gothic hay khối lượng dữ liệu về những vật trang trí (trong kiến trú) là những thứ mà từ trước đến nay chúng tôi có muốn thể hiện cũng không làm được, nay nhờ có PS4 mà khâu thiết kế hay chế tác đồ họa trở nên dễ dàng hơn rất nhiều.




Hỏi: đó là thế giới quan rộng lớn, được phát triển theo hướng hoàn toàn khác với thể loại High Fantasy. Vậy đó là cảm giác như thời đại của Jack the Ripper chứ nhỉ.
Đáp: đúng vậy. Nói cho dễ hiểu thì nó mang bầu không khí giống vậy. Dù là kiến trúc Gothic hay yếu tố Victoria, nó có sự tối tăm khác với thế giới Fantasy và tôi muốn thể hiện phần đó.


 
Kiến trúc Gothic trong Bloodborne

Hỏi: về thời đại đó thì hình ảnh ở hải ngoại và Nhật Bản có điểm chung không?
Đáp: trả lời sao nhỉ? Nói thẳng là tôi không rõ, nhưng tôi nghĩ rằng cả hai đều có những khái niệm Fantasy hay Dark Fantasy như nhau. Rốt cuộc thì vấn đề là có tạo được thế giới quan mang nét độc đáo của chúng tôi hay không, và đã tạo được nên chúng tôi không để ý nữa. Chúng tôi nghĩ nếu tình hình khó quá thì chắc SCE cũng can thiệp vào. (cười)

Hỏi: lúc nãy có nhắc đến khả năng thể hiện độc đáo của PS4, vậy phải chăng đó là độ rộng lớn tổng thể các khu phố, đường xá?
Đáp: đúng vậy. Tôi nghĩ đường phố sẽ có cảm giác rộng lớn.

Hỏi: so với thế giới quan Fantasy thời trung cổ, yếu tố chuẩn mực trong các game RPG thì đâu là nét hấp dẫn của riêng tác phẩm lần này do chính thế giới quan mang lại?
Đáp: tôi lặp lại, đầu tiên là sự xuất hiện của súng. Gameplay năng động hơn được định nghĩa bằng vũ khí cận chiến và súng, tôi nghĩ là nó hấp dẫn bằng những yếu tố chiến thuật mới. Ngoài ra còn có yếu tố "tối tăm" như đã đề cập, nhất là trong thể loại Dark Fantasy thì thế giới rất tối tăm, đáng sợ. Tuy nhiên thế giới quan của tác phẩm lần này mang hình ảnh "giữa con người" nhiều hơn. Thời đại càng tiến lên thì trung tâm của thế giới càng gần với con người. Với ý nghĩa đó, tôi nghĩ một chủ đề lần này đó là sự tối tăm và khủng khiếp, bí mật đều xuất phát từ con người. Dĩ nhiên là không phải chỉ có vậy, chính vì con người là trung tâm của thế giới nên càng tối tăm, đáng sợ hơn những thứ bên ngoài.
Ngoài ra còn một yếu tố khác khá nhỏ nhoi. Đó là cảm giác "gimmick". Tôi nghĩ thế giới quan của tác phẩm này rất phù hợp với cơ khí máy móc nên muốn tận dụng tích cực. Trong đoạn phim CG được công khai có hình ảnh nhân vật cầm vũ khí biến hình. Vũ khí biến hình đó cũng là một trong những yếu tố cơ khí, máy móc.


Hỏi: tôi nghĩ sau này sẽ công khai nhiều phiên bản vũ khí khác nữa, vậy có phải chúng được thiết kế từ ý tưởng khá tự do phải không?
Đáp: đúng. Mọi vũ khí đều mang tính Gimmick độc đáo của nó, và tôi nghĩ chúng sẽ là những vũ khí đặc trưng.


■Nhân vật chính là "người xứ lạ" tìm kiếm hành vi trị liệu kỳ quái

Hỏi: bối cảnh chính của game là khu phố ở cổ đô Yharnam. Tại đây, ngoài địch ra thì còn có người sinh sống trong phố không?
Đáp: tôi nghĩ trong game sẽ không xuất hiện nhiều những con người "thực thụ". Căn "bệnh địa phương" của Yharnam là "bệnh hóa thú" lan tràn, những cuộc săn thú diễn ra trong phố nên những con người thực thụ sẽ đóng cửa giam mình trong nhà. Đó là tình hình ban đầu. Mà bản thân người sống ở Yharnam cũng không thực sự là người.

Hỏi: ngoài phố xá ra thì còn có môi trường khác không?
Đáp: bối cảnh chính trong game là Yharnam và vùng lân cận, nhưng ngoài phố xá ra thì chúng tôi cũng chuẩn bị nhiều môi trường khác. Vì có liên quan tới câu chuyện nên không thể nói rõ, nhưng có nhiều môi trường độc đáo.


Hỏi: tôi quan tâm đến cụm từ "bệnh hóa thú" và "thợ săn" trong đoạn mở đầu...
Đáp: đó là những Key word để hiểu được thế giới quan. "Bệnh hóa thú" là căn "bệnh địa phương" ở Yharnam. Người ta mất trí vì căn bệnh đó mà trở thành thú vật. Và còn có những "thợ săn" đêm đêm lại đi săn những con thú đó. Súng và vũ khí biến hình thỉnh thoảng được giới thiệu trước giờ cũng là những vũ khí chuyên dụng để "săn thú".

Hỏi: trong bối cảnh đó thì nhân vật của người chơi không can dự gì?
Đáp: nhân vật của người chơi là "người xứ lạ". Đó là lữ khách từ phương xa đến nơi biên thùy Yharnam. Nếu nói theo hiện thực thì vùng trung tâm trong thời đại này mang hình ảnh của khu vực London. Ở Yharnam có cơ sở trị liệu đặc biệt, và nhân vật đến đây để tìm kiếm hành vi trị liệu kỳ quái.

Hỏi: "hành vi trị liệu kỳ quái" liệu mang tính khấn vái, hay mang tính kỹ thuật?
Đáp: tôi không thể nói chi tiết, nhưng ít ra là không hề có việc khấn vái.

Hỏi: lúc nãy anh có nhắc tới London của xứ England trong ví dụ, vậy bối cảnh giả định có mang hình ảnh một đất nước không?
Đáp: tuy có mang hình ảnh của khu vực Đông Âu nhưng không rõ ràng. Tôi nghĩ trong game cũng không nói rõ. Dù gì đi nữa thì Yharnam cũng là vùng biên thùy cách xa khu trung tâm. Đó là nơi cũ kỹ, đầm âm khí, tràn ngập những định kiến và bí mật.

Hỏi: thực tế là các anh đã đi Đông Âu để quay phim?
Đáp: không phải là quay phim nhưng có đi Rumania và Česká. Đó là chuyến du lịch tốc hành đến kinh khủng nhưng chúng tôi nhận được nhiều cảm hứng kích thích, thu được nhiều thứ. Và đương nhiên là không chỉ có vậy. Tôi nghĩ chuyến đi cùn giúp tạo ra bầu không khí đặc biệt của tác phẩm lần này.


■Có nhiều vũ khí độc đáo mang tính Gimmick


Hỏi: nhìn bề ngoài của nhân vật chính được vẽ trong Key Art thì thấy không phải là mũ trụ hay giáp nặng, mà là mũ vải trang phục nhẹ, cầm vũ khí có hình dạng kỳ dị. Và tôi thấy ấn tượng với khẩu "súng". Tôi nghĩ có lẽ nó ảnh hưởng đến gameplay, xin anh cho biết về những yếu tố này trong phạm vi có thể được.
Đáp: về gameplay thì đã được lặp lại nhiều lần rồi. Đó là tính chiến thuật chú trọng đến từng chuyển động trong cận chiến, và cảm giác tử chiến có được nhờ súng trong trận đấu năng động. Tôi nghĩ những yếu tố này đều được thực hiện trong game.

Hỏi: liệu có phải là kiểu chơi tấn công liên miên để đột phá vòng vây không.
Đáp: uhm, nhưng hơi khác một tí. Hơn nửa kẻ địch đều rất mạnh và đáng sợ. Nếu cứ thụ động thì sẽ sớm bị chúng nuốt chửng, bị giết mất. Vì vậy, lối chơi cơ bản là cần phải tấn công năng động, liều chết mở đường sống. Nhưng hoàn toàn không phải là cứ tấn công bừa bãi là được.

Hỏi: nghe nói lần này vũ khí có thể biến hình được. Liệu mặt này có tác động đến vũ khí không?
Đáp: về vũ khí biết hình thì nó sẽ có cảm giác Gimmick như đã nhắc lúc nãy, vừa mang hình ảnh "vũ khí chuyên dụng của thợ săn thú". Đây là một khía cạnh trong gameplay. Khi sử dụng thành thạo một vũ khí thì hướng chọn lựa, tính chiến thuật rất khác với vũ khí thông thường. Sẽ có nhiều vũ khí mang Gimmick độc đáo, nhưng người chơi sẽ sử dụng chúng ra sao? Tôi muốn để yếu tố này cho người chơi khám phá.

Hỏi: khi vũ khí gấp lại thì đánh nhanh, khi bung ra thì đánh chậm nhưng mạnh hơn có phải không?
Đáp: đúng vậy. Ngoài tốc độ và sức mạnh của một đòn đánh thì còn có sự khác biệt trong phạm vi tấn công và xung lực nữa. Ngoài ra còn có thể biến hình trong khi tấn công để ra đòn đánh khác. Ngoài cái rựa răng cưa đã công khai thì còn có nhiều vũ khí khác. Tôi mong người chơi cảm nhận được sự thú vị khi sử dụng thành thạo những vũ khí này.

Hỏi: súng khá ấn tượng trong số các vũ khí. Xin anh cho biết thêm chút chi tiết về nó.
Đáp: nói về súng thì nó hữu dụng khi cận chiến. Hiện trạng thì nó như Shotgun. Tuy có thể bắn được từ khoảng cách xa nhưng không mấy hiệu quả. Nó phát huy giá trị thật của nó khi được sử dụng trong cận chiến để tạo sơ hở cho địch, dùng khi phản công, để phân tán đám đông địch thủ đang áp sát. Tôi muốn điều chỉnh súng đi theo hướng như vậy.

Hỏi: tôi hình dung súng là để tấn công đối thủ mà vũ khí cận chiến không với tới được, nhưng về căn bản là sai nhỉ.
Đáp: dĩ nhiên là đó cũng là một hướng lựa chọn sử dụng, nhưng tôi không nghĩ đó là hướng chính. Tôi cũng đã đề cập đến trong phần chọn lựa thế giới quan, là tôi không định biến đây thành game bắn súng. Vì tôi muốn tác phẩm này có được hình ảnh chiến đấu độc đáo.

Hỏi: hẳn là các anh cũng chuẩn bị nhiều chuyển động (motion) phong phú cho hình ảnh chứ nhỉ?
Đáp: đúng. Đó là một điểm thuận lợi của PS4. So với phần cứng trước thì lần này Memory nhiều hơn nên tôi muốn làm cẩn thận hơn.

Hỏi: tôi muốn hỏi một chút về hệ thống trong game. Chẳng hạn như Item hao phí.
Đáp: vẫn còn ít điều tôi có thể nói được, nhưng yếu tố lớn nhất là tôi đang xem xét để hồi phục HP chỉ bằng 1 nút. Đây cũng là ý đồ để hồi phục HP dễ dàng hơn trong những trận đánh năng động. Đối với nhiều người thì việc hồi phục HP rất quan trọng, họ thường cố định Item mặc định là món hồi HP, khó lựa chọn Item sử dụng cho chiến thuật nên tôi nghĩ việc này (hồi phục bằng 1 nút) sẽ giải quyết được.



■Điều chỉnh cân bằng để duy trì động lực

Hỏi: bất lợi của "chết" trong tác phẩm lần này là gì?
Đáp: chúng tôi đang xem xét về phạt khi người chơi chết. Tuy nhiên, phương châm là không nặng nề. Tôi nghĩ tác phẩm lần này là game mà người chơi sẽ chết thường xuyên, nhưng điều quan trọng là không gây cảm giác ức chế khi chết, mà là "nếu chết thì thử lại lần nữa" nên tôi muốn điều chỉnh hình phạt theo hướng đó.
Hơi lệch đề một chút, nhưng để có thể nghĩ rằng "nếu chết thì thử lại lần nữa" thì việc chọn hướng chiến đấu rất quan trọng. Tôi muốn chăm chút nhiều cho vũ khí biến hình và súng trong mặt này. Tôi có nói "chết nhiều", nhưng nói chính xác thì "suýt chết", "suýt tí nữa thì chết" cũng là yếu tố quan trọng, tôi cũng ý thức được điều này khi điều chỉnh cân bằng.

Hỏi: có nhiều chọn lựa khi phát triển nhân vật không?
Đáp: có. Nhất là khi nâng cấp vũ khí. Đó là điểm độc đáo của tác phẩm và xin phép được giữ bí mật.

Hỏi: theo ảnh minh họa thì nhân vật chính là nam, liệu có thể chọn nhân vật nữ được không? Và xin anh cho biết về việc tạo nhân vật.
Đáp: có thể chọn lựa nhân vật chính là nam hay nữ, cũng có thể tạo khuôn mặt. Cá nhân tôi thấy tạo nhân vật là một trong những phần thú vị nhất không chỉ riêng thể loại RPG mà còn trong TRPG cũng vậy nữa. Tôi nghĩ sẽ không bỏ qua yếu tố đó.

Hỏi: người chơi có thể làm được gì khi tạo nhân vật?
Đáp: anh hãy nghĩ là có thể tạo được khuôn mặt như trong Demon's Souls. Tôi đang xem xét thêm nhiều yếu tố khác, nhưng giờ chưa phải lúc để kể.

Hỏi: chủ đề trải nghiệm Online mới mẻ lần này là "chia sẻ tự do khám phá", vậy nó là như thế nào?
Đáp: về cơ bản thì anh cứ đợi thông tin sau... Nhưng tôi cũng muốn nói là không cần thiết phải dồn hết mọi thứ vào Online.

Hỏi: phần cứng của PS4 có chức năng SHARE, anh có thể nói về việc "chia sẻ" nhờ chức năng này được không?
Đáp: tôi nghĩ SHARE là chức năng rất thú vị. Tôi nghĩ sự mới mẻ của PS4 cũng là một yếu tố liên quan đến sự mới mẻ trong trải nghiệm gameplay. Vì thế cho nên chúng tôi đang bàn bạc với SCE làm sao để vận dụng chức năng này.

Hỏi: về phần cứng PS4 thì tôi có ấn tượng rằng Network sẽ kết nối được nhiều người hơn PS4 với tiền đề Online, vậy có thể chơi Offline được không?
Đáp: được chứ. Chúng tôi tạo game có thể chơi được Offline. Dĩ nhiên là tuy không thể thưởng thức các tính năng Online nhưng chúng tôi không hề nghĩ đến chuyện bỏ rơi người chơi Offline. Tuy nhiên, tôi nghĩ xu thế của thời đại là tỷ lệ tính năng Online, bao gồm cả DLC, sẽ dần tăng lên. Mong rằng khi đó việc chúng tôi ít dồn gánh nặng vào Online sẽ trở thành lối tiếp cận tốt hơn.

Hỏi: về thời điểm phát hành tác phẩm thì có triển khai cùng lúc trên Thế giới không?
Đáp: có chứ. Ít ra thì dự định cho tới hiện giờ là vậy.

Hỏi: câu hỏi cuối cùng. Tác phẩm mới lần này được công bố là "Bloodborne", anh có thể cho biết chỗ nào mà anh muốn fan mong đợi trong tác phẩm này, những fan mới cũng như những fan từ trước qua dòng Souls mà anh từng làm.
Đáp: đây là tác phẩm nhiều thử thách đối với chúng tôi vì phần cứng mới của PS4, cũng như là một game hoàn toàn mới. Nhưng mặt khác nó cũng không thay đổi so với Demon's Souls ở khía cạnh nó là "game thực thụ dành cho người mê game". Chúng tôi dành mọi thứ cho thế giới mới mẻ của Bloodborne, chuẩn bị chu đáo để mang lại trải nghiệm thú vị, độc đáo của riêng tác phẩm, từ việc khám phá những điều chưa biết, để người chơi suy nghĩ, vượt qua nỗi sợ hãi mà sinh tồn qua những trận tử chiến. Vì vậy nên tôi mong rằng những người yêu game sẽ chơi và thưởng thức tác phẩm. Nhất định tôi sẽ không phụ lòng mong đợi của fan dòng Dark Souls và Demon's Souls. Mong quý vị tin tưởng.

Chủ Nhật, 7 tháng 1, 2018

[Nioh]Cách kiếm tiền vô tận

1. Nhu cầu

Một số người mới bắt đầu chơi Nioh có thể thấy tiền chẳng để làm gì, nhưng đối với người chơi lâu năm thì tiền là yếu tố hàng đầu. Một số màn chơi ở cấp Nioh (cấp độ khó nhất game) có thể cho bạn từ vài trăm triệu đến hàng tỷ Amrita, nhưng số tiền bạn nhận được thường chỉ là vài chục nghìn đến vài trăm nghìn.
Kiếm tiền trong Nioh khó khăn như vậy nhưng nhu cầu dùng tiền rất lớn:
- Để tạo vũ khí, giáp, các Item khác...
- Để rèn lại các tính năng của vũ khí, giáp
- Để kết hợp linh hồn nhằm nâng level cho vũ khí, giáp
- Thay đổi ngoại hình vũ khí, giáp, nhân vật,....

Trong đó, phần lớn nhu cầu sử dụng tiền là để nâng level cho vũ khí, giáp hoặc để rèn lại các đặc tính của chúng. Ở level cao, mỗi lần nâng hoặc rèn lại có thể tốn vài chục đến vài trăm nghìn. Do vậy, chẳng mấy chốc mà người chơi hết tiền.

2. Một số cách kiếm tiền

- Ở cấp độ Nioh (cấp khó nhất game), nhiệm vụ phụ đánh cặp yêu quái Ōtani Yoshitsugu và  Ishida Mitsunari ở vùng Ōmi cho bạn 2.5 triệu sau khi hoàn thành nhiệm vụ. Ở các cấp độ thấp hơn thì số tiền nhận được ít hơn. Đây là số tiền cao nhất mà bạn nhận được từ một nhiệm vụ trong game. Đối với một số người chơi lão luyện, họ có thể kết thúc nhiệm vụ này trong vòng trên dưới 1 phút. Thời gian ngắn nhất có thể đạt được (tính cả thời gian thoát nhiệm vụ) là khoảng 40 giây. Tuy nhiên 2 boss này thuộc dạng khó đánh đối với rất nhiều người, không phải ai cũng có đủ khả năng hạ trong vòng 1 phút. Nếu bạn có khả năng hạ Ōtani và Ishida nhanh chóng thì cứ lặp đi lặp lại nhiệm vụ này và nhận được 2.5 triệu/phút.
- Có thể đổi chủ tướng sang tộc Ashikaga để được thêm 8% tiền sau khi kết thúc nhiệm vụ. Như vậy, nếu theo Ashikaga, đánh Ōtani và Ishida ở cấp Nioh thì bạn nhận được 2.7 triệu sau khi kết thúc nhiệm vụ.
- Có thể dùng bùa Âm dương "chiêu tài phù" (bùa gọi tiền) để tăng số tiền từ địch thủ rơi ra sau khi hạ chúng. Tuy nhiên tiền từ địch văng ra thường không đáng kể.
- Có thể kết hợp với một số Thủ hộ linh như Shasha hay Mizuchi để nhận thêm % tiền từ địch thủ rơi ra. Nhưng cũng không đáng kể lắm.
- Cày Item và bán lại. Bạn biết, khi chơi ở những cấp độ cao thì Item (vũ khí, giáp,...) rơi rất nhiều nhưng phần lớn là thứ bạn không cần. Nếu bán hết kho chứa 500 món đồ có Level 300, (+30) thì trung bình bạn nhận được 3~4 triệu. Nhưng để có được số Item đó cũng tốn thời gian.
- Cách như phần dưới.

3. Cách kiếm tiền nhàn hạ

 - Đối với người chơi lâu năm thì hẳn không xa lạ với "Vô gián ngục" (Mukengoku, địa ngục Vô gián trong quan niệm Phật giáo) mà bản tiếng Anh dịch là "Abyss" (vực thẳm). "Vô gián ngục" là địa ngục với 999 tầng, mỗi tầng gồm phần địa ngục chính gọi là "thử ngạn" (bờ bên này) gồm có boss và 4 map phụ gọi là "bỉ ngạn" (bờ bên kia). 
- Mỗi tầng địa ngục có 4 hiệu ứng bất lợi cho người chơi, tương ứng với 4 map phụ "bỉ ngạn". Bạn có thể đi thẳng đến địa ngục để đấu boss, bỏ qua các map phụ nếu đủ sức.
- Trên đường đến các map phụ "bỉ ngạn", có thể bạn sẽ lọt vào kho báu gọi là "vô cực bỉ ngạn" (bờ bên kia vô cực, nghĩa là "không cùng tận"). Kho báu này là một "cung điện" bằng vàng, chứa toàn vàng và báu vật. Đặc biệt là không có boss, không có địch nên không có giao đấu. Bạn có thể trở về "thử ngạn" (bờ bên này của địa ngục) sau khi nhặt hết vàng và Item ở đây.
- Cung điện "vô cực bỉ ngạn" được xây dựng dựa trên hình mẫu của Kim sắc đường (Konjiki-dō), một ngôi đường bằng vàng bên trong khuôn viên chùa Trung Tôn (Chūsōn) ở Nhật. Tìm hiểu thêm về Kim sắc đường tại đây (click). Ngôi đường này được xây dựng dựa trên ý niệm về cõi Tịnh độ Cực Lạc của Phật A Di Đà (nơi mọi thứ đều bằng vàng, châu báu).
- Cung điện vàng "vô cực bỉ ngạn" xuất hiện ngẫu nhiên khi bạn đến 4 map phụ bỉ ngạn. Càng tiến qua nhiều tầng địa ngục thì bạn càng có cơ hội lọt vào đây.
- Cung điện vàng này chứa khoảng 4 triệu vàng và nhiều Item (vũ khí, giáp, mảnh thần khí, các nguyên liệu cao cấp để rèn Item). Như vậy, chỉ cần lọt vào đây thì bạn có được gần 4 triệu vàng mà không phải đánh đấm gì, chưa kể số Item nhặt được ở đây có thể bán lại.
- Vấn đề là bạn chỉ có thể lọt vào đây ngẫu nhiên, như vậy khó khăn lắm mới có được 4 triệu này......


"Vô cực bỉ ngạn", map này được xây dựng trên hình mẫu "Kim sắc đường". Bản thân "Kim sắc đường" cũng dựa trên mô tả về cõi Cực Lạc trong kinh A Di Đà.

4. Vòng lặp

-  Có một mẹo nhỏ là ở bất kỳ map nào, nếu bạn "chết" thì sẽ hồi sinh lại ở map đó trong trạng thái không có Thủ hộ linh. Vậy nếu bạn "chết" trong map Vô cực bỉ ngạn thì có thể bắt đầu lại map này và tiếp tục phá thùng vàng. Nhưng ở đây không có đánh nhau thì "chết" bằng cách nào?
- Câu trả lời là lá bùa Âm dương "Nhiên sinh phù". Nhiên: đốt, Sinh: sinh mạng, Phù: lá bùa.  Nhiên sinh phù: bùa đốt cháy sinh mạng (nếu dịch sang tiếng Anh: Life burning Amulet. Nhưng bản dịch tiếng Anh chính thức của Nioh lại dịch thành "Leeching"). Lá bùa này gia tăng sức mạnh của nhân vật nhưng đốt dần sinh mạng của nhân vật.
- Nếu bạn đang mặc bất kỳ loại giáp nào có tính năng: ngăn không cho mất mạng nếu bị mất máu dần, thì hãy bỏ nó ra. Nếu mặc giáp có tính năng này thì bạn không thể "chết" bằng "Nhiên sinh phù".
- Tới đây chắc bạn đã hiểu cách thức kiếm tiền rất đơn giản nếu như được lọt vào "Vô cực bỉ ngạn". Để phá hết hòm đựng vàng trong map này, cần khoảng 45 giây và số vàng nhận được gần 4 triệu. Bạn có thể "chết" và "hồi sinh" bao nhiêu lần cũng được trong map này, nghĩa là số tiền nhận được là vô tận, chừng nào bạn chưa thoát ra khỏi đây.
- Chú ý 1: đừng quên "nhặt" lại Thủ hộ linh sau mỗi lần "chết". Nếu "chết" lần thứ 2 trong trạng thái không có Thủ hộ linh thì bạn sẽ bị cưỡng chế thoát ra khỏi map. 
- Chú ý 2: những món đồ trong hòm là ngẫu nhiên và không phải vô hạn. Nếu bạn mở hòm và nhặt đồ thì lần sau không còn món nào xuất hiện nữa. Nếu mở hòm nhưng không nhặt thì lần sau sẽ xuất hiện, món đồ có thể thay đổi. Còn những món đồ trong những hòm vàng phá được luôn "hồi sinh" khi bạn hồi sinh. Tham khảo video dưới đây.

 

 

Thứ Sáu, 15 tháng 12, 2017

[Asm]Lập trình Snes bài 5



(Tham khảo video trên và xem phần hướng dẫn bên dưới)

Hướng dẫn lập trình cho máy Snes bằng ngôn ngữ Assembly 65816

Bài 5: Hello World kiểu 2

5.1. Lại nói về Hello World

Trong bài trước có nhắc đến việc có nhiều cách viết chữ ra màn hình, tùy từng mục đích mà cách hiển thị cũng khác nhau. Đa phần game Snes đều chọn cách hiển thị đồng loạt tất cả các chữ cái trong câu ra màn hình cùng một lúc, nhưng cũng có những game như dòng Fire Emblem dùng cách in từng chữ ra màn hình, lần lượt từng chữ từ trước đến sau. Cách viết này phức tạp hơn nhưng mang lại hiệu ứng thẩm mỹ cao hơn.
Trong cách viết từng chữ ra màn hình thì cũng có nhiều phương pháp để thực hiện, nhưng nhìn chung thì có những cách chính sau:
- Chuyển sẵn tileset (dữ liệu hình ảnh) font vào Vram, sau đó đọc chuỗi text rồi ghi tilemap vào Vram sau một chu kỳ.
- Đọc chuỗi text đến đâu thì chuyển tileset của font và tilemap vào Vram đến đấy.

Cách thứ 2 thường được dùng trong trường hợp render font chữ có độ rộng biến thiên (thuật ngữ gọi là "proportional font" hay "variable width font", viết tắt là "vwf") sẽ được đề cập đến trong những bài sau.
Bài này đề cập đến cách 1, cũng là cách đơn giản hơn.


https://i.imgur.com/4ePhU5u.gif




5.2.Ví dụ cụ thể


Cách viết từng chữ ra màn hình bằng cách chuyển tileset vào Vram trước rồi định kỳ in tilemap ra màn hình có ưu điểm là đơn giản, tiết kiệm được ram/vram cho tilemap nếu câu dài.
Trong phương pháp này cũng có nhiều cách khác nhau để thực hiện. Trước khi viết dữ liệu chữ vào Register $2118 hoặc DMA vào Vram, chỉ cần thêm 1 bước đợi.
Bước đợi này có thể là:
- Cho nhảy vào vòng lặp đến hết chu trình (1)
- Lợi dụng Nmi và Irq (2)

Đối với (1) thì phải thêm control code đợi (trong Video là XXFC, có thể gán bất kỳ code nào). Sau control code đợi là giá trị đợi. Chẳng hạn giá trị đợi là FFFF được ghi vào ram $0E thì chu trình đợi như sau:
PHP
REP #$20
PHA
wait:
LDA $0E
DEC  //giảm A
BNE wait
PLA
PLP

Với chu trình này thì A sẽ giảm lần lượt từ FFFF đến khi còn 0000 thì mới thực hiện bước tiếp theo. Thay các giá trị nhỏ hơn để thời gian đợi ngắn hơn.

Đối với (2) thì lợi dụng các Interrupt (bộ ngắt) như nmi hay irq. Nmi xảy ra vào đầu mỗi chu kỳ V-blank đã được giải thích ở những bài trước. Máy Snes có tần suất 60 nmi/giây, còn tần suất Irq xảy ra theo người dùng chỉ định tại các Register từ $4207~$420A.
Nếu bit 7 của Register $4200 được set giá trị 1 thì nmi sẽ xảy ra tự động vào đầu mỗi chu kỳ V-blank.
Các bit 5, 4 của Register này được dùng để bật/tắt Irq ngang và dọc.

+ 00: tắt Irq
+ 01: chỉ bật Irq dọc
+ 10: chỉ bật Irq ngang
+ 11: bật Irq ngang và dọc

Tần suất của Irq ngang được quản lý ở $4009 và $400A. Chẳng hạn bit 5 của $4200 được set giá trị 1 và $420A có giá trị 00, $4209 có giá trị 0E (14) thì Irq ngang sẽ được kích hoạt khi tia laser quét hết đường ngang thứ 14 trên màn hình.

  Ta có thể lợi dụng tính chu kỳ của Nmi và Irq để chuyển tilemap vào Vram định kỳ, tạo nên hiệu ứng từng chữ xuất hiện lần lượt.


Thứ Tư, 22 tháng 11, 2017

[Asm]Lập trình Snes bài 4



(Tham khảo video trên và xem phần hướng dẫn bên dưới)

Hướng dẫn lập trình cho máy Snes bằng ngôn ngữ Assembly 65816

Bài 4: Hello World

4.1. Khái quát Hello World

Hầu hết những bài đầu tiên trong các chương trình, sách dạy ngôn ngữ lập trình đều là bài hiển thị dòng chữ "Hello World" ra màn hình. Vì vậy mà cụm từ này còn mang nghĩa là "vở lòng", "căn bản". Cụm từ này được cho là có xuất sứ từ cuốn sách "A Tutorial to the Language B" của Brian Wilson Kernighan, được xuất bản từ năm 1973.
Tuy là bài mở đầu, vở lòng trong nhiều ngôn ngữ lập trình, nhưng viết một dòng chữ ra màn hình máy Snes không phải là bài đơn giản. Để hiển thị được một chữ cái ra màn hình Snes thì phải nắm được những kiến thức cơ bản về Register, chức năng của chúng và nắm được nhiều opcode của ngôn ngữ 65816. Chính vì vậy mà bài viết "Hello World" không thể xuất hiện đầu tiên trong loạt bài "Lập trình Snes" này.

Tuy nhiên "Hello World" cũng không phải quá khó. Nó là ứng dụng kiến thức từ các bài trước, hiển thị bối cảnh (Background) ra màn hình.







4.2.Nhiều cách viết chữ


Về cơ bản, có 2 cách chính để hiển thị chữ ra màn hình là dùng BG hoặc dùng sprite. Tuy nhiên số lượng sprite tối đa được phép hiển thị trên màn hình khá ít (128) nên người ta thường dùng BG để viết chữ ra màn hình.
Đối với cách dùng BG thì cũng có nhiều cách khác nhau. Thông thường, BG3 thường được chọn để viết chữ vì nó có chế độ hiển thị ưu tiên, cho phép đè lên trên các BG khác.

Nhiều game hiển thị tất cả chữ trong khung hội thoại ra màn hình cùng một lúc. Những ví dụ cho kiểu viết chữ này là Super Mario, dòng Final Fanatsy, Super Robot Taisen,.... Một số khác viết từng câu ra màn hình. Câu dưới được viết tiếp hàng bên dưới sau khi câu trên được viết một khoảng thời gian. Ví dụ cho trường hợp này là Der Langrisser. Một số game khác viết từng chữ ra màn hình, lần lượt từ chữ này đến chữ khác, chẳng hạn như dòng Fire Emblem.


4.3. Cách viết tất cả chữ ra màn hình cùng lúc

Đối với những kiểu viết chữ khác nhau thì cách thức cũng khác nhau. Video bài này đề cập đến cách viết tất cả các chữ ra màn hình cùng lúc. Nguyên tắc của cách viết này là:


- Chuyển dữ liệu đồ họa của bảng chữ cái (Font) vào Vram. 
- Ghi số thứ tự tương ứng của chữ trong bảng vào Tilemap. Chẳng hạn, nếu bảng chữ cái có thứ tự là A, B, C, D, E, F,... thì để hiển thị từ "DEADBEEF" thì cần ghi các giá trị 03, 04, 00, 03, 01, 04, 04, 05 vào Tilemap. Mọi thứ luôn được đếm từ số 0, không phải từ số 1. Có thể ghi vào Tilemap trực tiếp qua Register $2118 hoặc ghi vào Ram, sau đó chuyển vùng Ram này vào Vram bằng chức năng DMA.


Có thể đổi màu chữ, xoay dọc, xoay ngang chữ bằng cách thay đổi byte định nghĩa chữ trong Vram. Có thể xuống hàng, chuyển hàng bằng cách thay đổi vị trí bắt đầu viết (Register $2116) vào Tilemap.

Thứ Năm, 16 tháng 11, 2017

[Asm]Lập trình Snes bài 3



(Tham khảo video trên và xem phần hướng dẫn bên dưới)

Hướng dẫn lập trình cho máy Snes bằng ngôn ngữ Assembly 65816

Bài 3: Truyền dữ liệu đồ họa bằng DMA

3.1. Khái quát về DMA

Trong bài trước đã đề cập đến Register cho phép viết dữ liệu vào Vram là $2118. Tuy nhiên cách chuyển dữ liệu đồ họa vào Vram thông qua cổng $2118 có khuyết điểm:

- Mỗi lần chỉ ghi được 02 byte (16 bit)

- Chỉ có thể ghi trong khi tắt màn hình (Forced blank) hoặc trong thời gian V(ertical) blank 

Do vậy, đối với những khối đồ họa có dung lượng lớn thì cần nhiều thời gian để cập nhật trong màn hình vì phải viết rất nhiều lần, ảnh hưởng tới hiệu suất của game. Để chuyển khối dữ liệu $400 (1024) byte vào Vram thì phải ghi $200 (512) lần, nếu mỗi lần ghi 02 byte.

Để khắc phục nhược điểm này, người ta dùng đến cơ chế DMA để chuyển dữ liệu. DMA là viết tắt chữ "Direct Memory Access" (truy cập bộ nhớ trực tiếp). Đây là chức năng mà rất nhiều loại máy tính có, chứ không riêng gì máy Super Famicom. Chức năng này cho phép đọc dữ liệu trực tiếp từ bộ nhớ (Rom, Ram) thay vì cần CPU đọc, ghi nhiều lần.
DMA là một chức năng quan trọng trong lập trình máy SFC (Snes). Khối dữ liệu $400 byte được đề cập bên trên được ghi vào Vram thông qua chức năng này chắc chỉ chiếm 1% của cái tích tắc.

2.2.Vblank:


Ở trên có đề cập đến Vblank. Vậy đó là gì?
Giống như việc ghi qua cổng $2118, chức năng DMA chỉ hoạt động trong khi màn hình được tắt hẳn (Force blank) hoặc trong thời gian Vblank.

Hình ảnh ta thấy trên màn hình Tivi thực chất là không liên tục, mà rời rạc. Sở dĩ mắt người thấy hình liền khối, liền mạch là do tính chất lưu ảnh của mắt. Hình ảnh được tạo ra bằng cách quét tia laser lên màn hình, từ trái sang phải, từ trên xuống dưới.
Hình ảnh mà ta thấy là được "vẽ" trong thời gian tia laser đang quét.
Khi tia laser được quét hết một đường ngang, màn hình sẽ tắt và tia laser chuyển xuống hàng dưới, bắt đầu quét từ trái sang phải và màn hình sáng. Quãng thời gian tắt màn hình này được gọi là Horizontal blank hay Hblank.
Quá trình trên lặp lại cho đến khi tia laser quét hết hàng cuối cùng của màn hình. Lúc này màn hình sẽ tắt, tia laser lại nhảy trở về vị trí xuất phát đầu tiên ở góc trên, bên trái. Quãng thời gian tắt màn hình này gọi là Vertical blank hay Vblank.



Màn hình Snes có độ phân giải tiêu chuẩn là 255x224 điểm ảnh. Có nghĩa là khi quét hết 255 điểm ảnh theo đường ngang thì sẽ phát sinh 1 Hblank, và khi quét hết 224 đường như trên sẽ phát sinh 1 Vblank. Tức cứ 255 Hblank sẽ có 1 Vblank.
Vblank là quãng thời gian an toàn để cập nhật hình ảnh lên màn hình, vì lúc này màn hình được tắt nên không có hình ảnh nào hiển thị. Cứ 1 giây có 60 lần Vblank, tần suất quá nhanh nên mắt người không thể nhìn thấy màn hình tắt, mà thấy hình ảnh liên tục.
Nếu mỗi 1 Vblank, ta cập nhật 1 hình ảnh thì sẽ có được hình 60 khung hình trong 1 giây. Nói cách khác là về lý thuyết, máy SFC có thể dựng được hình ảnh 60 fps.




3.3. Các Register cho DMA

Trước khi có thể sử dụng chức năng DMA, ta phải bật cho phép NMI hoạt động. DMA là bộ ngắt NMI duy nhất của máy SFC. Việc bật/tắt NMI được quản lý ở Register $4200, bit 7. Nếu bit 7 của Register này = 1 thì NMI được cho phép, nếu bit 7 = 0 sẽ vô hiệu hóa NMI.


SEP #$20
LDA #$80
STA $4200

Khi 1 được ghi vào bit 7 của $4200 thì bit 7 của Register $4210 sẽ cho giá trị 1 nếu đang trong quãng thời gian Vblank, ngoài ra sẽ cho giá trị 0.

Máy SFC có tất cả 8 kênh chuyển DMA, được kích hoạt qua 8 bit của Register $420B. Nếu giá trị 01 được ghi vào $420B sẽ kích hoạt kênh số 0, nếu giá trị 02 được ghi vào đây sẽ kích hoạt kênh số 1,....
Ngoài ra còn có những Register sau xác định điều kiện của DMA:

- $43x0: bit 7 thiết lập chế độ đọc từ hay ghi vào Vram (0=ghi, 1=đọc); bit 6 chỉ dùng cho chức năng HDMA, sẽ đề cập trong bài sau; bit 5 không được dùng đến; bit 4~bit 3: tăng dần hoặc giảm dần địa chỉ dữ liệu khi đọc/ghi; bit 2~bit 0: chế độ chuyển. Đối với Vram thì dùng chế độ 01.
- $43x1: cổng giao tiếp. Ghi vào Vram qua cổng $2118 nên trong trường hợp này phải ghi giá trị $18 vào $43x1. Đối với trường hợp ghi palette màu (cổng $2122) thì ghi giá trị $22.
- $43x2, $43x3: địa chỉ dữ liệu nguồn (đọc từ Rom/Ram)
- $43x4: bank của dữ liệu nguồn.
- $43x5: kích thước khối dữ liệu.


Lưu ý: x chỉ kênh số tương ứng với giá trị được ghi ở $420B. Ngoài ra cũng cần xác định vị trí cần ghi ở Vram thông qua $2116 như đã đề cập trong bài trước. Khi giá trị được ghi vào $420B thì DMA sẽ bắt đầu, nếu như đang ở trong quãng thời gian Vblank. Nếu không đang ở trong Vblank thì cần phải đợi.

Ví dụ: cần chuyển khối dữ liệu có kích thước $800 byte ở địa chỉ $41:00FF trong Rom vào vị trí $6000 trong Vram.


SEP #$20   //Set Register A = 8 bit
REP #$10  //Reset Register X,Y= 16 bit
LDA #$01
STA $4310  //chế độ ghi vào Vram qua kênh Dma 1
LDA #$18 
STA $4311  //ghi cổng $2118 vào kênh Dma 1
LDX #$00FF
STX $4312    //ghi địa chỉ dữ liệu vào kênh 1
LDA #$41
STA $4314   //ghi bank dữ liệu vào kênh 1
LDX #$0800
STX $4315   //ghi kích thước dữ liệu vào kênh 1

LDX #$3000 
STX $2116
JSR đợi_vblank
LDA #$02
STA $420B  //chuyển DMA bằng kênh 1

đợi_vblank:
 LDA $4210
 BIT #$80  //kiểm tra bit 7 của $4210
 BEQ đợi_vblank   //nếu bit 7 =0 (không đang trong vblank) thì lặp lại quá trình trên
 RTS
 

Chủ Nhật, 12 tháng 11, 2017

Số ngẫu nhiên

I. Khái niệm

Số ngẫu nhiên, hay còn gọi là "loạn số" là một khái niệm phổ biến trong thống kê và khoa học máy tính. Khái niệm này được dùng để chỉ con số/dãy số biến thiên bất quy tắc, hay có vẻ là bất quy tắc, hay theo những quy tắc mà ở mức độ trí tuệ của loài người đương đại chưa nhận biết được.

Số ngẫu nhiên được ứng dụng nhiều trong việc mã hóa, ứng dụng trong cờ bạc và rất thường thấy trong xây dựng game. Các ứng dụng lâu đời nhất của số ngẫu nhiên thường thấy là đổ xí ngầu (xúc xắc) hay búng đồng xu để phân định thắng thua, quyết định ai được đi trước trong các trò cờ bạc. 

Trong từ điển ngôn ngữ của nhân loại có hai từ: "may mắn" và "xui xẻo". Đây là sản phẩm của số ngẫu nhiên.

Lấy ví dụ về số ngẫu nhiên trong các game RPG, khi nhân vật Level up thì sẽ tăng ngẫu nhiên các chỉ số: HP, sức mạnh, phòng thủ.... Hay hành động, phản ứng của đối phương trong game, chẳng hạn như chọn một hành động trong số những hành động có thể dùng trong tình huống lúc đó: tấn công vật lý, tấn công ma pháp, dùng Item, dùng kỹ năng đặc biệt...



Các chỉ số của nhân vật được tăng ngẫu nhiên

Lấy ví dụ chỉ số Hit biểu diễn khả năng đánh trúng mục tiêu của nhân vật. Khi chỉ số này bằng 0% hoặc 100% thì nó không còn là số ngẫu nhiên, nhưng khi nó nằm trong phạm vi ngoài hai con số này thì chỉ số này trở thành số ngẫu nhiên. Nhân vật có 90% cơ hội đánh trúng mục tiêu về bản chất cũng giống như nhân vật có 10% cơ hội đánh trúng mục tiêu, về bản chất chỉ là "trật" hoặc "trúng" và chỉ khác nhau ở cơ hội nhiều hay ít. Vậy khi Hit nằm trong khoảng 1% ~ 99% thì khi nào thì đánh trúng, khi nào thì đánh trật? Máy tính dựa vào cơ sở nào để phán đoán đòn đánh của nhân vật là trúng hay trật?

II. Hai loại loạn số

Người ta thường chia số ngẫu nhiên thành hai loại: số ngẫu nhiên thực (chân loạn số) và số ngẫu nhiên giả (nghĩ tự loạn số).
Số ngẫu nhiên thực là con số mà quy tắc biến đổi mỗi lần lấy của nó nằm ngoài khả năng dự báo của con người, chẳng hạn như các yếu tố trong tự nhiên: độ nhiễu khí quyển, nhiệt tạp âm, tia vũ trụ,... 
Còn số ngẫu nhiên giả là số được sinh thành từ các thuật toán chính xác.
Nếu như tính chất của số ngẫu nhiên thực là bất quy tắc và không thể tái hiện (khi đổ xí ngầu, ta không thể dựa vào mặt xí ngầu hiện tại để dự đoán lần đổ tiếp theo sẽ ra mặt nào) thì tính chất của số ngẫu nhiên giả là hoàn toàn có thể dự đoán được nếu như biết trước thuật toán sinh ra nó và nắm được các điều kiện sinh thành của nó, tuy rằng việc này cũng rất khó.
Trong điều kiện bình thường thì không thể phán đoán một con số/dãy số ngẫu nhiên là thực hay giả và cũng rất khó để nói tính chất về mặt thống kê của số ngẫu nhiên thực khác với số ngẫu nhiên giả. Do vậy, ở mức độ người dùng thông thường thì khó để phân biệt hai loại loạn số này.

III. Cách sinh thành

Ta có hai cách sinh thành nên số ngẫu nhiên, ứng với hai loại thực và giả.
Đối với số ngẫu nhiên thực, cách sinh thành cổ xưa nhất và vẫn được dùng đến ngày nay là đổ xí ngầu hay búng đồng xu, vòng quay roulette. Nhiều loại máy tính ngày nay cũng trang bị phần cứng có khả năng sinh thành số ngẫu nhiên như dùng cảm biến (sensor) đo lường các hiện tượng vật lý ngẫu nhiên như nhiệt tạp âm, vật chất phóng xạ do diod trong máy sinh ra và chuyển những tín hiệu đó thành con số.

Đối với số ngẫu nhiên giả, người ta dùng các thuật toán chính xác, các phương pháp luận lý như phép dời bit để tạo ra. Các phương pháp tính toán này cũng mang lại hiệu quả cao như phương pháp đo lường các hiện tượng vật lý kể trên, tuy nhiên nó có nhược điểm là sau một thời gian thì sẽ thấy con số được lặp lại (chu kỳ lặp lại).

IV. Ví dụ về cách sinh thành số ngẫu nhiên giả

Mọi con số ngẫu nhiên giả đều được sinh thành từ một số khởi đầu gọi là "chủng tử" (seed, hạt giống). Một ví dụ thường thấy trong game RPG: nhân vật A khi level up có 40% cơ hội tăng HP, 30% cơ hội tăng sức mạnh và ta có thuật toán đơn giản như sau:

1. Lập sẵn một bảng (table) gồm những con số từ 0 tới 100.
2. Lấy chủng tử là con số biểu diễn vị trí ngang/dọc của đường quét (scanline) trên màn hình. Đường quét của các thiết bị điện tử có chu kỳ lặp lại cố định nhưng tại một thời điểm, mắt người và não người gần như không thể phán đoán được nó đang ở vị trí nào.
3. Giới hạn chủng tử trong phạm vi 0 ~ 200. Màn hình các thiết bị ngày nay có độ phân giải cao, lượng điểm ảnh lớn nên vị trí ngang/dọc của đường quét sẽ vượt khỏi giới hạn 200.
4. Giá trị của chủng tử là chỉ số trong bảng trên. Chẳng hạn, đường quét ở vị trí điểm ảnh thứ 63 thì số ngẫu nhiên được tạo thành lúc này là 63.
5. Chia đôi giá trị của chủng tử, chỉ lấy phần nguyên, ta được 63/2=31.
6. Cộng giá trị của chủng tử với 1 nếu giá trị này khác zero. Kết quả ta được 31+1 = 32.
7. So sánh số ngẫu nhiên vừa tạo thành với cơ hội tăng các chỉ số của nhân vật:
Nếu số ngẫu nhiên lớn hơn cơ hội thì sẽ không tăng.
- Nếu số ngẫu nhiên nhỏ hơn hoặc bằng cơ hội thì nhân vật được tăng.

Trong ví dụ trên, nhân vật có 40% cơ hội tăng HP, 30% cơ hội tăng sức mạnh thì khi so sánh với số ngẫu nhiên 32 vừa được tạo thành, ta thấy chỉ số HP được tăng còn chỉ số sức mạnh thì không.

Đó cũng là cách mà máy tính đánh giá một cú đánh trong phạm vi 1% ~ 99% là trúng hay trật mục tiêu. Và rõ ràng phần trăm cơ hội càng cao thì càng dễ đánh trúng.

Trên đây chỉ là một ví dụ đơn giản về cách lấy số ngẫu nhiên. Có những phương pháp phức tạp hơn để tăng độ ngẫu nhiên, chẳng hạn như đem chủng tử thực hiện các phép toán luận lý, rồi cộng trừ nhân chia với giá trị của một vùng bộ nhớ biến thiên. Có những game dùng chủng tử là hằng số cho trước, lại có game dùng chủng tử là thời gian hiện tại và có game dùng chính giá trị nút bấm mà người chơi nhấn để làm điểm bắt đầu tính toán số ngẫu nhiên.


[​IMG]

Hình ảnh trên lấy từ game Darkwing Duck, đối phương sẽ rơi một món đồ ngẫu nhiên khi ta bắn trúng hắn. Game này sử dụng chủng tử là giá trị thời gian người chơi nhấn nút để tính toán số ngẫu nhiên, từ đó phán đoán cho kẻ địch rơi món đồ gì. Trong hình này, thời gian nhấn nút thay đổi thì món đồ rơi ra cũng thay đổi.

V. Quan điểm Phật giáo và góc nhìn nhất nguyên

Máy tính là một cỗ máy làm theo các mệnh lệnh một cách tuần tự, phân nhánh khi gặp các điều kiện nên nói một cách nghiêm mật thì khái niệm "ngẫu nhiên" không hề tồn tại đối với máy tính. Tất cả những gì nó làm là tuân theo các chỉ thị một cách trung thực. Nếu điều kiện như thế này thì sẽ cho kết quả thế kia. Tất cả mọi kết quả do máy tính xử lý đều có thể hiểu được một cách rõ ràng, rành mạch theo tinh thần nhân quả: vì có nguyên nhân thế này nên mới có kết quả thế kia.
Xét về điểm này thì nguyên tắc hoạt động của máy tính giống với quan điểm của Phật giáo. Theo góc nhìn của tôn giáo này thì cuộc đời là một siêu máy tính, nó cho ra mọi kết quả dựa vào luật nhân quả. Nhân là ăn mặn thì quả là khát nước, đây là một thuật toán hết sức đơn giản mà cỗ máy cuộc đời sử dụng. Nhưng lắm khi cỗ máy này lại sử dụng những thuật toán tinh vi hơn, cho ra kết quả ăn mặn nhưng không khát nước, hoặc không ăn mặn  vẫn khát nước. Điều này khiến con người hoài nghi về tính đúng sai của nhân quả khi người ta không hiểu rõ thuật toán mà cỗ máy cuộc đời đang áp dụng.

Bên trên có đề cập đến hai loại số ngẫu nhiên. Với con số được sinh thành từ những dữ kiện mà loài người chưa nắm được quy tắc thì được xem là số ngẫu nhiên thực. Nhưng đến khi con người hiểu biết đầy đủ về các dữ kiện này thì số ngẫu nhiên thực sẽ trở thành số ngẫu nhiên giả. Chẳng hạn, người xưa xem việc mưa nắng là chuyện trời đất không thể lường trước (số ngẫu nhiên thực) nhưng ngày nay con người đã hiểu biết gần như đầy đủ về cơ chế sinh ra mưa nắng, có thể dự đoán được trong tương lai gần nên chuyện mưa nắng đã trở thành số ngẫu nhiên giả (do thuật toán của thiên nhiên sinh thành). 

Xét trong một phạm vi không thời gian nhỏ hẹp thì cái ngẫu nhiên là có tồn tại, nhưng xét rộng khắp thì ngẫu nhiên không hề tồn tại. Với khả năng hiện nay, con người vẫn chưa đo lường được sự biến thiên của tia vũ trụ nhưng khi có trí tuệ đầy đủ thì dữ kiện này sẽ không còn được coi là ngẫu nhiên nữa. Khi tung đồng xu thì mặt rơi xuống đất là sấp hay ngửa? Kết quả này phụ thuộc vào quá nhiều yếu tố chung quanh tác động tới như lực tung, hướng tung, hướng gió,... và vô số yếu tố khác mà con người chưa nắm được hết. Trong tương lai, khi hiểu thấu được hết các yếu tố tác động này thì ta sẽ dự báo được mặt nào của đồng xu sẽ chạm đất, và cái ngẫu nhiên tuyệt đối sẽ không còn là ngẫu nhiên nữa.

Như vậy, có thể nói "ngẫu nhiên" là một từ đại diện cho sự vô tri của con người. Còn khi có trí tuệ soi chiếu thì người ta sẽ không còn nói đến ngẫu nhiên vì lúc đó đã thấu hiểu mọi hiện tượng được sinh thành ra sao, do đâu mà có. Không có may mắn, không có xui xẻo, tất cả đều do nguyên nhân mà tạo thành kết quả. Điều này có nghĩa là cuộc đời là một chuỗi kết quả của những nguyên nhân trong quá khứ, hay nói cách khác, mọi thể sống trong đời đều được lập trình theo những hướng đã định sẵn. Đó là thứ mà người ta gọi là "định mệnh".

Nhưng ai đã lập trình nên mọi thứ này? Phật giáo phủ nhận vai trò của một đấng tối cao trong việc lập trình này, tức phủ nhận vai trò của programmer. Và nếu là như vậy thì mọi sự nỗ lực hay sa đọa đều không có ý nghĩa, vì kết quả đã được định sẵn từ trước. Không phải như vậy, nếu đã chấp nhận nhân quả, chấp nhận hiện tại là kết quả của quá khứ thì sẽ hiểu được tương lai là kết quả của hiện tại, mọi sự nỗ lực hay sa đọa đều mang lại những kết quả khác nhau. Nói cách khác, mọi thể sống trên đời là kết quả của những nguyên nhân từ trước, và chính nó cũng là nguyên nhân cho chính nó ở ngay khoảnh khắc sau đó.
Thể sống là một đoạn code đặc biệt của cỗ siêu máy tính cuộc đời. Trong đó, đoạn code này được sinh thành từ những yếu tố điều kiện khác và chính nó cũng tạo ra những đoạn code có thể xem là "chính nó sau này". Đây cũng là một mục tiêu của con người trong việc xây dựng trí tuệ nhân tạo.

Và dù thuật toán có phức tạp đến đâu thì máy tính và cuộc đời cũng đều hoạt động trên một nguyên tắc đơn giản: nếu ABC thì XYZ.



Chủ Nhật, 8 tháng 10, 2017

[Asm]Lập trình Snes bài 2



(Tham khảo video trên và xem phần hướng dẫn bên dưới)

Hướng dẫn lập trình cho máy Snes bằng ngôn ngữ Assembly 65816

Bài 2: màu sắc, bối cảnh

2.1. Màu sắc

Máy Snes có khả năng hiển thị cao nhất là 256 màu, mỗi màu là 15 bit (2 byte). Do vậy, bảng palette màu của Snes chiếm 512 byte cho 256 slot (ngăn, ô chứa) chứa màu.
Định dạng màu của Snes là:
0BBBBBGG GGGRRRRR

(B: Blue, màu lam; G: Green, màu lục; R:Red, màu đỏ)
Bit thứ 15 luôn là 0. Như vậy có thể thấy mỗi màu cơ bản (lam, lục, đỏ) chỉ gồm 5 bit, có giá trị dao động từ thấp nhất (0 hay $00) là 0 đến cao nhất ( 11111 hay $1F) là 31. Màu RGB 24 bit (mỗi màu cơ bản chiếm 8 bit, hay 1 byte) thông thường có giá trị dao động từ 0 (0 hay $00) đến 255 (11111111 hay $FF).

Như vậy, để chuyển đổi từ màu RGB 24 bit sang định dạng màu BGR 15 bit của Snes thì áp dụng công thức:

R = R / 8 (vd: 17 / 8 = 2)
G = G / 8 (vd: 16 / 8 = 2)
B = B / 8 (vd: 14 / 8 = 1)
=========
Màu Snes = B x 1024 + G x 32 + R


Chẳng hạn, đổi màu trắng (255, 255, 255) 24 bit sang định dạng của Snes:

R = 255 / 8 = 31
G = 255 / 8 = 31
B = 255 / 8 = 31
================
Màu Snes = 31 x 1024 + 31 x 32 + 31 = 32767 


Tương đương với giá trị $07FF.
Đoạn code sau đổi màu nền thành màu trắng.

STZ $2121  //slot màu 0, tức màu nền
LDA #$FF
STA $2122
LDA #$07
STA $2122
 

2.2.Bối cảnh (Background - BG):



Một khung hình Snes hiển thị gồm tối đa 4 lớp (Layer), mỗi lớp thể hiện một bối cảnh (Background) và 1 lớp thể hiện sprite. Chẳng hạn như hình ảnh trong game Mario dưới đây gồm: 3 lớp Background + 1 lớp sprite.

 
Gồm

Background 1
 
và Background 2
 
và Background 3
 
và cuối cùng là lớp sprite

 

Snes có 7 cách thể hiện các lớp bối cảnh này, hay còn gọi là 7 mode thể hiện. Số lượng lớp Background, số lượng màu cho từng lớp khác nhau tùy thuộc vào mode hiển thị. Cụ thể:

Mode    # Màu BG
         1   2   3   4
======---=---=---=---=
0        4   4   4   4
1       16  16   4   -
2       16  16   -   -
3      256  16   -   -
4      256   4   -   -
5       16   4   -   -
6       16   -   -   -
7      256   -   -   -


(Mode 0 có thể hiển thị cùng lúc 4 BG + 1 lớp sprite, mỗi BG thể hiện được 4 màu, Mode 1 thể hiện được cùng lúc 3 BG + 1 lớp sprite, trong đó 2 BG hiển thị 16 màu và 1 BG hiển thị 4 màu,...)
Mode 7 là mode hiển thị "nổi tiếng" nhất của Snes, với khả năng cho hình ảnh 3D, xoay bối cảnh, phóng to, thu nhỏ...


Mode hiển thị được đăng ký qua Register $2105.
Đây là Register 8 bit với nội dung như sau:

Bit  7  Kích thước Tile  BG4  (0=8x8, 1=16x16)
Bit  6  Kích thước Tile  BG3  (0=8x8, 1=16x16)  ; (BgMode5: 8x8 thực chất là 16x8)
Bit  5  Kích thước Tile  BG2  (0=8x8, 1=16x16)  ; (BgMode6: cố định 16x8)
Bit  4  Kích thước Tile  BG1  (0=8x8, 1=16x16)  ; (BgMode7: cố định 8x8)
Bit  3  Mức độ ưu tiên của BG3 ở Mode 1 (0=thường, 1=ưu tiên)
Bit  2-0  Chế độ BG, cụ thể như bên dưới

Mode   BG1         BG2         BG3         BG4
  0      4 màu     4 màu     4 màu     4 màu  
  1      16 màu    16 màu    4 màu 
  2      16 màu    16 màu  
  3      256 màu   16 màu   
  4      256 màu   4 màu    
  5      16 màu    4 màu   
  6      16 màu   
  7      256 màu  


Chẳng hạn, muốn thể hiện màn hình ở Mode 1 với kích thước BG1 là 16x16 pixel cho mỗi Tile thì cần ghi giá trị 00010001 vào $2105

    LDA #$11   
    STA $2105

 

2.3. Video Ram:

Video Ram (gọi tắt là Vram) là vùng Ram chứa mọi dữ liệu để hiển thị lên màn hình. Địa chỉ Vram thuộc kiểu Word, tức tính bằng 2 byte một.
Vram được truy cập thông qua 2 Register:

- $2116, $2117: Register 16 bit này giữ địa chỉ của dữ liệu trong Vram.
- $2118, $2119: Register 16 bit này cho phép ghi dữ liệu vào Vram.

Chẳng hạn:

REP #$30   // đổi sang A, X, Y 16 bit
LDX #$0200
STX $2116
LDA #$DEAD
STX $2118

Sẽ ghi giá trị $ADDE vào địa chỉ Vram (200 x2) $400.

Ngoài ra, cách ghi dữ liệu vào Vram còn được định nghĩa qua giá trị của bit 7, bit 3~bit 0 ở Register $2115. (Bit 6~ bit 4 không sử dụng)

Bit 7:
- 0: địa chỉ Vram sẽ gia tăng sau khi dữ liệu được ghi vào $2118.
- 1: địa chỉ Vram sẽ gia tăng sau khi dữ liệu được ghi vào $2119.
Bit 3~bit 0:
     0  1  0  0 | gia tăng 8 trong 32 lần
     1  0  0  0 | gia tăng 8 trong 64 lần
     1  1  0  0 | gia tăng 8 trong 128 lần
     0  0  0  0 | gia tăng 1
     0  0  0  1 | gia tăng 32
     0  0  1  0 | gia tăng 64
     0  0  1  1 | gia tăng 128

 
Chẳng hạn, ta có chuỗi FF-03-2E-1A ghi vào địa chỉ $00 trong Vram:

- Nếu bit 7=1, bit 3~bit 0 đều là 0 thì FF và 03 lần lượt được ghi vào $00 và $01, 2E và 1A lần lượt được ghi vào $02 và $03
- Nếu bit 7=1, bit 3~ bit 1 là 0001 thì FF và 03 được ghi vào $00 và $01, đến lượt 2E và 1A được ghi vào địa chỉ cách đó 32 byte. 32 tức $20, nhưng vì địa chỉ Vram là kiểu Word nên phải nhân đôi, tức 2 byte tiếp theo trong chuỗi là 2E và 1A sẽ được ghi vào địa chỉ $40.
- Nết bit 7=0, bit 3~1 là 0000 thì đầu tiên, FF được ghi qua $2118 vào $00, sau đó địa chỉ Vram được tăng 1 ($01 x 2=$02) nên 2E, 03 được lần lượt được ghi vào $02, $03. 


Register $2118 chỉ có thể được truy cập (ghi) trong 2 khoảng thời gian duy nhất: Vblank và Forced blank. Khái niệm này sẽ được giải thích trong phần sau.
 
2.4. Tileset và Tilemap:

Có thể hình dung mọi thành phần đồ họa trên màn hình như các mảnh của trò ghép hình.
 
Bản thân "dữ liệu" các mảnh ghép được gọi là Tileset (hay còn gọi là Character data), còn "bản đồ" bố trí vị trí các mảnh này để tạo nên hình thù mong muốn được gọi là Tilemap.

Địa chỉ của Tileset của các BG được xác định qua Register $210B và $210C.
- Register $210B: bit 7~4: địa chỉ Vram của Tileset của BG2, bit 3~0: địa chỉ Vram của Tileset của BG1
- Register $210C:
bit 7~4: địa chỉ Vram của Tileset của BG4, bit 3~0: địa chỉ Vram của Tileset của BG3

Địa chỉ Vram của Tileset được tính bằng cách Left-shift (dời trái) 13 lần.
Chẳng hạn:

LDA #$03
STA $210B 

Sẽ cho địa chỉ Tileset của BG1 tại $6000 trong Vram. (03 <<13 = 24756, hay $6000). Địa chỉ byte của nó là $3000.

Địa chỉ Tilemap của các BG trong Vram được xác định qua 4 Register từ $2107 ~ $210A (lần lượt từ BG1~BG5) theo định dạng:

aaaaaass

Trong đó 6 bit aaaaaa xác định địa chỉ, 2 bit ss chỉ kích thước Tilemap (số lượng Tile trong Tilemap). Cụ thể:
00=32x32 01=64x32
10=32x64 11=64x64


Địa chỉ Vram qua 6 bit được tính bằng cách left-shift (dời trái) 11 lần.
Chẳng hạn:

LDA #$20
STA $2107

Xác định Tilemap của BG1 có các tính chất sau:

- $20 = 00100000, có 001000 = 08 << 11 = 16384 = $4000. Tức địa chỉ Tilemap của BG1 này bắt đầu tại $4000 trong Vram, hay $2000 tính theo địa chỉ byte.
- $20 = 00100000, có 00 cho kích thước Tilemap là 32x32 Tile. Kích thước của mỗi Tile là bao nhiêu pixel phụ thuộc vào giá trị từ bit 7 ~ bit 4 của Register $2105 như đã nói ở phần trước.

 

2.5. Cụ thể về Tilemap:

Như đã đề cập, Tilemap chính là sơ đồ bố trí các mảng (mảnh) đồ họa để tạo nên hình ảnh trên màn hình. Mỗi mảng gồm 16 bit (2 byte) nên vì thế địa chỉ Vram là kiểu Word (2 byte). Nội dung các bit này là

vhopppcc cccccccc

Trong đó:
- Bit v cho phép xoay mảng (mảnh) theo chiều đứng
- Bit h cho phép xoay mảng (mảnh) theo chiều ngang
- Bit o: mức độ ưu tiên hiển thị của mảng 
- 3 bit ppp: số thứ tự của slot (ngăn, ô chứa) màu. Tùy thuộc vào BG và Mode hiển thị, như đã đề cập ở phần trên.
- 10 bit cc cccccccc còn lại: số thứ tự của mảng


Chẳng hạn, nếu mảng có giá trị C002 (1100000000000010) trong Vram (do Snes dùng kiểu Little-endian nên hiển thị là 02C0) thì có các đặc tính:

- Xoay ngược chiều ngang và dọc
- Không được hiển thị ưu tiên (có thể bị Tile khác đè lên)
- Có palette màu như cách tính slot bên dưới
- Là Tile số 02 (0000000010)

Số thứ tự của palette của Tile thay đổi tùy thuộc vào chế độ hiển thị của BG. Cụ thể:

- Mode 0: vị trí của palette được tính bằng công thức ppp*4 + (BG#-1)*32
- Mode 1: vị trí của palette được tính: ppp*n màu
- Mode 2: vị trí của palette được tính: ppp*16
- Mode 3: BG1 cố định 256 màu, BG 2 có vị trí của palette được tính: ppp*16
- Mode 4: BG1 cố định 256 màu, BG 2 có vị trí của palette được tính: ppp*4
- Mode 5: vị trí của palette được tính: ppp*n màu
- Mode 6: duy nhất BG1 16 màu và vị trí của palette được tính: ppp*n màu
- Mode 7: 256 màu.



 Như vậy, Tile có giá trị C402 (1100010000000010) đối với Mode 1, BG1 sẽ có palette màu bắt đầu từ slot số: 0001 = 1 * 16 = $10. Palette của mảng (Tile) mang giá trị C402 sẽ có 16 màu bắt đầu từ slot $10 đến slot $20. Trong mảng (Tile) đó, pixel nào có màu số mấy phụ thuộc vào giá trị dữ liệu trong Tileset, do người dùng tự quy định.