Tôi sẽ hướng dẫn các bạn làm trên bản Army239
Các bản army 2 khác làm tương tự nhé.
Muốn mod đường kẻ thẳng bạn phải nắm vững kiến thức về phương trình đường thẳng đã học ở lớp 10. Xin xem qua hình vẽ sau:
Điểm B thuộc đường thẳng d đi qua điểm A(xA ; yA) sẽ có dạng như hình trên. Ta thấy nêu t càng tăng thì điểm B càng rời xa điểm A
Và thêm nữa, tất nhiên là phải từng mod game cũng cần hiểu qua về lập trình java có thể tham khảo nhiều nơi, có thể làm quen tại:2tech.waplux.com
Trong game army thì ảnh hongTam.png quanh mắt nhân vật trên một qũy đạo tròn. Để đoạn thẳng AB quay quanh điểm A thì vectơ chỉ phương AB = (a ; b) thay đổi và thỏa mãn a² + b² không đổi.
Ta cần xác định con mắt nhân vật (điểm A nơi bắt đầu đoạn thẳng) tâm mà ảnh hongTam.png quay quanh. Tải game về đổ đuôi thành .zip và mở bytecode tìm từ khóa hongTam.png sẽ được 1 class tên là jg.class
Tải về Bytecode Editor tại đây
Tiếp theo xem ảnh hongtam được gán cho biến nào bạn cần tìm tiếp trong class vừa thấy sẽ có đoạn:
aload_0
ldc "hongTam.png"
invokevirtual gp/a(Ljava/lang/String;)Ljavax/microedition/lcdui/Image;
putstatic jg/O Ljavax/microedition/lcdui/Image;
hay dịch ngược (decomplie) mã của class đó ra bằng phần mềmJclazzmeFAN
Trước khi dịch ngược bạn cài đặt trước đã, hay đánh dấu vào ô deobfuscate. Decomplie xong save nó thành jg.java và mở jg.java bằng scripeditor bạn thấy
O_Image = gpastore_0.a_Image("hongTam.png");
Vậy là hongTam nó được gán cho biến O của class jg
Tải về phần mềm scripeditor tại đây
Tiếp theo là xem ảnh đó được vẽ ở đâu để tìm tọa độ mắt nhân vật và để tìm vectơ chỉ phương suy ra từ câu lệnh vẽ ảnh.
Tìm bằng bytecode từ khóc jg/O bạn sẽ tìm được class dh.class và dịch ngược tiếp thành dh.java xem câu lệnh vẽ ảnh.
Decom xong lại mở dh.java bằng scripeditor tiếp tục tìm jg.O (bytecode là dấu / thì mã nguồn là dấu chấm) sẽ thấy có biến ảnh b có giá trị như biến O của class jg
b_Image = jg.O_Image;
Vẫn là file jg.java đó bạn đọc xuống dưới để xem ảnh b được vẽ thế nào và khi nào. Bạn sẽ thấy lệnh:
if (!((dhastore_2 = this) instanceof cz)) {
Graphicsastore_3.drawImage(b_Image, dhastore_2.P_int + dhastore_2.bk_int, dhastore_2.Q_int - dhastore_2.bl_int - 11, 3);
Lệnh vẽ ảnh b tại điểm B(xB ; yB) dùng Graphics g là g.drawImage(imgname, xB, yB, align) lệnh này nằm trong method a(Graphics g) hay bytecode có tên a(Ljavax/microedition/lcdui/Graphics;) nhớ tên method này
Điều kiện if kia có nghĩa là nếu đang trong cảnh chiến đấu và đến lượt chúng ta thì mới vẽ ảnh b bạn không cần quan tâm không hiểu cũng chả sao chỉ cốt là ta đã tìm được lệnh vẽ ảnh để suy ra tọa độ nhân vật và vectơ chỉ phương từ mắt nhân vật đến vị trí ảnh hongTam
Quay lại với kiến thức lớp 10 điểm B(xB ; yB) nằm trong d nên tọa độ có dạng xB = xA + at và yB = yA + bt nhìn đoạn code trong dh.java vừa decom trên thì suy ra vectơ chỉ phướng của đoạn AB là (dh.bk ; dh.bl)
Vậy là xong phần xác định thứ cần xử lí để mod kẻ góc.
=============================================
Giờ thì vẽ đoạn thẳng thôi câu lệnh để vẽ đoạn thẳng từ điểm A(xA ; yA) đến điểm B(xB ; yB) với Graphic g là g.drawLine(xA, yA, xB, yB);
Lệnh nên để trong một phương thức static để gọi cho tiện đỡ mất công khởi tạo khó mod. Tên phương thức là gì cũng được veduongthang đi dài thế cho đỡ nhầm @@
Mở scripeditor tạo mới một file java tên là kegoc như sau:
import javax.microedition.lcdui.Graphics;
public class kegoc
{
public static void veduongthang(Graphics g, dh D)
{
int xA, yA, a, b, t;
xA = D.P;
yA = D.Q - 11;
a = D.bk;
b = (-1) * D.bl; /*sao lại nhân âm 1 mà làm gì? Vì trục tung Oy của màn hình điện thoại có chiều dương xuống dưới ngược lại trong toán học*/
t = 5;/*muốn kéo dài đoạn thẳng thì tăng số t này lên mình nghĩ tăng đến 60 là đc*/
g.setColor(0xff0000);/*set màu đỏ cho đoạn thẳng sẽ vẽ bên dưới*/
g.drawLine(xA, yA, xA + a * t,yA + b * t);
}
}
class dh
{
public int P, Q, bk, bl;
public void a(Graphics grp)
{
kegoc.veduongthang(grp, this);/*chữthis kia ở đây có nghĩa là đối tượng dhmà phương thức vẽ đường thẳng dùng đến là bản thân classdh này*/
}
}
Mở thẻ nhớ tạo 2 thư mục mới 1 có tên là src và thư mục còn lại tên là lib
Thả kegoc.java vào thư mục src vừa tạo mở mobile eclipse ấn complie chờ một tí complie xong sẽ có 2 class được tạo ra ở thư mục lib nhưng chúng ta chỉ dùng kegoc.class còn dh.class chỉ để copy 3 dòng code sang class dh gốc của team
Nếu bạn viết code sai có thể tải kegoc.java này xem thử
Tải phần mềm mobile eclipse tại đây
Gần xong rồi đó bây giờ là copy code và sửa code có method vẽ hồng tâm của team đó là class dh đã tìm được.
Mở class dh trong thư mục lib mà bạn vừa chế được xem có gì hot :D để còn copy nào @@ chỉ có 3 dòng trong method a thôi:
aload_1
aload_0
invokestatic kegoc/veduongthang(Ljavax/microedition/lcdui/Graphics;Ldh;)V
3 cái dòng đó là để gọi phương thức veduongthang trong class kegoc đã tạo kia.
Giờ thì chèn 3 cái dòng đó vào class dh gốc của team ngay dưới lệnh vẽ ảnh b. Nhớ là lệnh này nằm ở method a(Ljavax/microedition/lcdui/Graphics;) lúc nãy đã nói.
Chèn thế nào? Ở dưới lệnh vẽ ảnh b là ở đâu? Hãy mở method a(Ljavax/microedition/lcdui/Graphics;) trong class dh gốc trong game và tìm từ khóa instanceof cz sẽ thấy đoạn:
aload_0
aload_1
astore_3
dup
astore_2
instanceof cz
ifne Label344
aload_3
getstatic dh/b Ljavax/microedition/lcdui/Image;
aload_2
getfield dh/P I
aload_2
getfield dh/bk I
iadd
aload_2
getfield dh/Q I
aload_2
getfield dh/bl I
isub
bipush 11
isub
iconst_3
invokevirtual javax/microedition/lcdui/Graphics/drawImage(Ljavax/microedition/lcdui/Image;III)V
Chèn 3 dòng để gọi phương thức veduongthang vào dưới lệnh vẽ ảnh b nó thành:
aload_0
aload_1
astore_3
dup
astore_2
instanceof cz
ifne Label344
aload_3
getstatic dh/b Ljavax/microedition/lcdui/Image;
aload_2
getfield dh/P I
aload_2
getfield dh/bk I
iadd
aload_2
getfield dh/Q I
aload_2
getfield dh/bl I
isub
bipush 11
isub
iconst_3
invokevirtual javax/microedition/lcdui/Graphics/drawImage(Ljavax/microedition/lcdui/Image;III)V
aload_1
aload_0
invokestatic kegoc/veduongthang(Ljavax/microedition/lcdui/Graphics;Ldh;)V
Lưu lại và thoát khỏi method a. Mở lại class dh vừa chèn 3 dòng code lần này sửa field(biến) nếu biến nào bị giấu kín không cho dùng chung ta phải sửa lại. Ở đây là tọa độ nhân vật và vectơ chỉ phương gồm 4 biến P, Q, bk, bl kiểu số nguyên viết tắt là chữ I
Bấm vào nó nếu thấy đang được đánh dấu tích ở ô private thì bỏ đi và thay vào đó bạn phải đánh dấu vào ô public mới dùng được. Trở ra lưu lại một làn nữa.
Cuối cùng class dh ảo chúng ta tạo ra kia không cần nữa code đã copy rồi ta xóa nó đi thôi. Giữ lại 2 class là dh đã chèn code sửa biến và class kegoc. Hãy priverify 2 class này nén vào game và test thôi.
Priverify bằng phần mềm chenauditor các bạn tự tìm nha. Trên đây là một bài hướng dẫn modgame nâng cao ít có. Nhìn qua bạn thấy nó tuy dễ nhưng phức tạp đến thế nào và mod game vất vả thế nào, do vậy copy bài viết này và ngay cả game mod cũng vậy xin ghi lại giúp tôi cái nguồn vodanh9x.wapgem.com
Bạn nào chưa rõ lắm thì tải mấy file bên dưới về mở ra hiểu ngay:
Download army239ok
Download Code-ke-goc
=============================================
Mình chỉ hướng dẫn mod kẻ góc tâm thẳng đơn giản thôi. Còn vẽ qũy đạo đạn thực sự rất khó nhé các bạn tự mò lấy. Thực ra vẽ qũy đạo đạn là vẽ nhiều đoạn thẳng ngắn nối lại với nhau theo công thức vật lí qũy đạo chuyển động của vật bị ném xiên, mình nhớ hồi lớp 10 mình học sách Vật Lí nâng cao chả nhớ sách cơ bản có không. Rất khó nhé bạn phải dùng vòng lặp(lớp 11 mới được học dãy số và cấp số cộng ở môn toán và vòng lặp ở môn tin học) để thực hiện nối nhiều đoạn thẳng ngắn nó lại thành đường cong, còn ảnh hưởng gió nữa mà java không có sắn phương thức vẽ prabol đâu. May thay ThanBaiKS đã viết sẵn công thức này từ thời v4 army211 giờ ai lưu manh tí là biết copy thôi. Bạn nào học không thực sự tốt toán lí thì đành chịu mình không thể hướng dẫn rõ hơn được. Thân chào!