Administrator
Posty: 294
Dołączył(a): 9 sty 2015, o 15:19
Lokalizacja: Trzebież
Płeć: Mężczyzna
[1.13c] Jak użyć pSpell 10 i pSpell 11
Wykorzystanie pSpell 10 oraz pSpell 11!
Domyślnie w grze pSpell 10 oraz 11 mają ustawione użycie skila Fire Ball. Możemy to wykorzystać i zrobić zwój lub miksturę która po użyciu wystrzeli ognistą kulę. Dlaczego by nie wykorzystać tego i zrobić sobie dzięki temu przedmioty dające użyć wybranego przez nas skila. Żeby nie podmieniać wpisów w pliku Skills.txt i wykorzystać pSpell 10 oraz dodatkowo też 11 trzeba wprowadzić sobie zmiany w kodzie.
W kodzie szukamy ID skila czyli 47, po zamianie na kod binarny jest to 2F. Ponieważ w kodzie nie ma miejsca na to żeby wpisać tam większą liczbę (np biorąc sobie skila z samego dołu pliku Skills.txt) musimy zrobić jump gdzieś na dół pliku dll i wpisać tam brakujący kod, inaczej będziemy ograniczeni jedynie do skili z przedziału od 0 do 79. Reszta nie będzie działać lub będzie powodować błędy gry.
Zmiany dotyczą pliku D2Game.dll.
Kod pSpell 11:
Kod pSpell 10:
2F jest widoczne jak na dłoni. W pSpell 10, 2F mamy w dwóch miejscach. Sądzę iż jest to użycie przedmiotu w mieście i poza miastem dając inne efekty. Najlepiej zmienić obydwa argumenty na takie same.
Oto przykład jump'u. Bierzemy kod pSpell 11:
Wprowadzamy w tym miejscu jump:
W miejscu do którego prowadzi natomiast, wprowadzamy nasze ID skila oraz dalszą częśc kodu i jump powrót:
W ten sposób zrobiliśmy więcej miejsca żeby móc wpisać większe wartości ID. W tym przypadku jest to 167 czyli ID skila 359.
Domyślnie w grze pSpell 10 oraz 11 mają ustawione użycie skila Fire Ball. Możemy to wykorzystać i zrobić zwój lub miksturę która po użyciu wystrzeli ognistą kulę. Dlaczego by nie wykorzystać tego i zrobić sobie dzięki temu przedmioty dające użyć wybranego przez nas skila. Żeby nie podmieniać wpisów w pliku Skills.txt i wykorzystać pSpell 10 oraz dodatkowo też 11 trzeba wprowadzić sobie zmiany w kodzie.
W kodzie szukamy ID skila czyli 47, po zamianie na kod binarny jest to 2F. Ponieważ w kodzie nie ma miejsca na to żeby wpisać tam większą liczbę (np biorąc sobie skila z samego dołu pliku Skills.txt) musimy zrobić jump gdzieś na dół pliku dll i wpisać tam brakujący kod, inaczej będziemy ograniczeni jedynie do skili z przedziału od 0 do 79. Reszta nie będzie działać lub będzie powodować błędy gry.
Zmiany dotyczą pliku D2Game.dll.
Kod pSpell 11:
- Kod:
Address Hex dump Command Comments
6FCCDEE0 /. 8B4424 04 MOV EAX,DWORD PTR SS:[ARG.1]
6FCCDEE4 |. 85C0 TEST EAX,EAX
6FCCDEE6 |. 56 PUSH ESI
6FCCDEE7 |. 8BF2 MOV ESI,EDX
6FCCDEE9 |. 75 05 JNZ SHORT 6FCCDEF0
6FCCDEEB |. 83C8 FF OR EAX,FFFFFFFF
6FCCDEEE |. EB 03 JMP SHORT 6FCCDEF3
6FCCDEF0 |> 8B40 04 MOV EAX,DWORD PTR DS:[EAX+4]
6FCCDEF3 |> 50 PUSH EAX ; /Arg1
6FCCDEF4 |. E8 45C6F5FF CALL <JMP.&D2Common.#10695> ; \D2Common.#10695
6FCCDEF9 |. 85C0 TEST EAX,EAX
6FCCDEFB |. 75 04 JNZ SHORT 6FCCDF01
6FCCDEFD |. 5E POP ESI
6FCCDEFE |. C2 1400 RETN 14
6FCCDF01 |> 0FB74424 10 MOVZX EAX,WORD PTR SS:[ARG.3]
6FCCDF06 |. 53 PUSH EBX
6FCCDF07 |. 0FB75C24 18 MOVZX EBX,WORD PTR SS:[ARG.4]
6FCCDF0C |. 6A 00 PUSH 0 ; /Arg4 = 0
6FCCDF0E |. 50 PUSH EAX ; |Arg3
6FCCDF0F |. 6A 01 PUSH 1 ; |Arg2 = 1
6FCCDF11 |. 6A 2F PUSH 2F ; |Arg1 = 2F
6FCCDF13 |. 8BC6 MOV EAX,ESI ; |
6FCCDF15 |. E8 16380400 CALL 6FD11730 ; \D2Game.6FD11730
6FCCDF1A |. 5B POP EBX
6FCCDF1B |. 5E POP ESI
6FCCDF1C \. C2 1400 RETN 14
Kod pSpell 10:
- Kod:
Address Hex dump Command Comments
6FCCDF20 /. 8B4424 04 MOV EAX,DWORD PTR SS:[ARG.1]
6FCCDF24 |. 85C0 TEST EAX,EAX
6FCCDF26 |. 56 PUSH ESI
6FCCDF27 |. 57 PUSH EDI
6FCCDF28 |. 8BF2 MOV ESI,EDX
6FCCDF2A |. 8BF9 MOV EDI,ECX
6FCCDF2C |. 75 05 JNZ SHORT 6FCCDF33
6FCCDF2E |. 83C8 FF OR EAX,FFFFFFFF
6FCCDF31 |. EB 03 JMP SHORT 6FCCDF36
6FCCDF33 |> 8B40 04 MOV EAX,DWORD PTR DS:[EAX+4]
6FCCDF36 |> 50 PUSH EAX ; /Arg1
6FCCDF37 |. E8 02C6F5FF CALL <JMP.&D2Common.#10695> ; \D2Common.#10695
6FCCDF3C |. 85C0 TEST EAX,EAX
6FCCDF3E |. 75 05 JNZ SHORT 6FCCDF45
6FCCDF40 |. 5F POP EDI
6FCCDF41 |. 5E POP ESI
6FCCDF42 |. C2 1400 RETN 14
6FCCDF45 |> 8BC6 MOV EAX,ESI
6FCCDF47 |. 8BCF MOV ECX,EDI
6FCCDF49 |. E8 52280300 CALL 6FD007A0
6FCCDF4E |. 8B46 2C MOV EAX,DWORD PTR DS:[ESI+2C]
6FCCDF51 |. 50 PUSH EAX ; /Arg1
6FCCDF52 |. E8 41C6F5FF CALL <JMP.&D2Common.#10392> ; \D2Common.#10392
6FCCDF57 |. 3BC6 CMP EAX,ESI
6FCCDF59 |. 74 16 JE SHORT 6FCCDF71
6FCCDF5B |. 85C0 TEST EAX,EAX
6FCCDF5D |. 74 12 JZ SHORT 6FCCDF71
6FCCDF5F |. 6A 00 PUSH 0 ; /Arg3 = 0
6FCCDF61 |. 6A 01 PUSH 1 ; |Arg2 = 1
6FCCDF63 |. 6A 2F PUSH 2F ; |Arg1 = 2F
6FCCDF65 |. 8BCE MOV ECX,ESI ; |
6FCCDF67 |. E8 74380400 CALL 6FD117E0 ; \D2Game.6FD117E0
6FCCDF6C |. 5F POP EDI
6FCCDF6D |. 5E POP ESI
6FCCDF6E |. C2 1400 RETN 14
6FCCDF71 |> 8B46 2C MOV EAX,DWORD PTR DS:[ESI+2C]
6FCCDF74 |. 53 PUSH EBX
6FCCDF75 |. 6A 00 PUSH 0 ; /Arg4 = 0
6FCCDF77 |. 50 PUSH EAX ; |/Arg1
6FCCDF78 |. E8 5BCBF5FF CALL <JMP.&D2Common.#10764> ; |\D2Common.#10764
6FCCDF7D |. 8B4E 2C MOV ECX,DWORD PTR DS:[ESI+2C] ; |
6FCCDF80 |. 51 PUSH ECX ; |/Arg1
6FCCDF81 |. 8BD8 MOV EBX,EAX ; ||
6FCCDF83 |. E8 3ECBF5FF CALL <JMP.&D2Common.#10983> ; |\D2Common.#10983
6FCCDF88 |. 50 PUSH EAX ; |Arg3
6FCCDF89 |. 6A 01 PUSH 1 ; |Arg2 = 1
6FCCDF8B |. 6A 2F PUSH 2F ; |Arg1 = 2F
6FCCDF8D |. 8BC6 MOV EAX,ESI ; |
6FCCDF8F |. E8 9C370400 CALL 6FD11730 ; \D2Game.6FD11730
6FCCDF94 |. 5B POP EBX
6FCCDF95 |. 5F POP EDI
6FCCDF96 |. 5E POP ESI
6FCCDF97 \. C2 1400 RETN 14
2F jest widoczne jak na dłoni. W pSpell 10, 2F mamy w dwóch miejscach. Sądzę iż jest to użycie przedmiotu w mieście i poza miastem dając inne efekty. Najlepiej zmienić obydwa argumenty na takie same.
Oto przykład jump'u. Bierzemy kod pSpell 11:
Wprowadzamy w tym miejscu jump:
W miejscu do którego prowadzi natomiast, wprowadzamy nasze ID skila oraz dalszą częśc kodu i jump powrót:
W ten sposób zrobiliśmy więcej miejsca żeby móc wpisać większe wartości ID. W tym przypadku jest to 167 czyli ID skila 359.