How to remove the "BATTLE.NET" button.
Moderators: Nefarius, Havvoric
- Elliot_009
- Posts: 27
- Joined: Tue Oct 17, 2006 7:43 am
How to remove the "BATTLE.NET" button.
Blizzard did this one well. (It's at least easier than the panes in the game.)
See below.
/*
Always questions, am I...
I'm looking to remove the "BATTLE.NET" button from the opening menu.
Has anyone done this before? I have looked through the code and searched on the forums but cannot find anything related to removing the buttons (though there are plenty of requests related to adding them to the 1.10s ).
I could potentially find the LBUTTONCLICK event off the main page, but the drawing code really has me stumped.
*/
Thanks again,
Elliot_009
See below.
/*
Always questions, am I...
I'm looking to remove the "BATTLE.NET" button from the opening menu.
Has anyone done this before? I have looked through the code and searched on the forums but cannot find anything related to removing the buttons (though there are plenty of requests related to adding them to the 1.10s ).
I could potentially find the LBUTTONCLICK event off the main page, but the drawing code really has me stumped.
*/
Thanks again,
Elliot_009
Last edited by Elliot_009 on Thu Dec 21, 2006 7:15 am, edited 5 times in total.
Re: How could I remove the "BATTLE.NET" button?
I haven't done anything with disabling buttons, but that would be a useful trick! The menu button strings are towards the back of String.tbl: 0x13F3 for "BATTLE.NET" and 0x13FB for "OPEN BATTLE.NET" on the other multiplayer page. These index numbers would be called in d2launch.dll. The reason I suggest looking there is because the game already disables the CONVERT button (index 0x58CC) if you select an Expansion character (also in d2launch). If we knew how that was done, we should be able to do the same with either of these buttons.
These indexes are loaded into ECX and fed to d2lang.#10004 to get the actual string pointer.
These indexes are loaded into ECX and fed to d2lang.#10004 to get the actual string pointer.
Do the right thing. It will gratify some people and astonish the rest.
~ Mark Twain
Run Diablo II in any version for mods: tutorial
The Terms of Service!! Know them, abide by them, and enjoy the forums at peace.
The Beginner's Guide v1.4: (MS Word | PDF) || Mod Running Scripts || TFW: Awakening
~ Mark Twain
Run Diablo II in any version for mods: tutorial
The Terms of Service!! Know them, abide by them, and enjoy the forums at peace.
The Beginner's Guide v1.4: (MS Word | PDF) || Mod Running Scripts || TFW: Awakening
- Nefarius
- Cherub
- Posts: 11607
- Joined: Sat Jun 15, 2002 8:13 pm
- Location: Where the blood forever rains
- Contact:
Re: How could I remove the "BATTLE.NET" button?
I killed the button in 1.11b by tapping down the function that opens the closed-connection-dialog, and simply not calling it and returning false. Just removing the button doesnt prevent people from using -skiptobnet
The code is in D2Launch.dll in 1.11b
I dont want to post the offsets here, PM me, with the 1.11b layout you should be able to find it in 1.10 easily.
The code is in D2Launch.dll in 1.11b
I dont want to post the offsets here, PM me, with the 1.11b layout you should be able to find it in 1.10 easily.
Last edited by Nefarius on Thu Dec 21, 2006 4:45 am, edited 1 time in total.
''(...) The game can basically be considered unhackable. '' - Blizzard Entertainment (30th May 2000)
Black Omen Productions | MetalStorm: Progress Report | Screenshots
Black Omen Productions | MetalStorm: Progress Report | Screenshots
- Elliot_009
- Posts: 27
- Joined: Tue Oct 17, 2006 7:43 am
Altering and/or removing menu screen buttons
I'm definitely going to have to take you up on that offer, Nefarius. Even with the buttons gone, that parameter would be a problem.
Also, a big thanks to Myhrginoc - I'd still be digging through D2Win trying to figure out where the D2Gfx.#10072 calls were coming from if you hadn't mentioned looking in D2Launch.
For those interested, here's how blizzard put together the main menu(s).
__________________________________
The buttons are registered in hardcoded sequences in D2Launch using D2Win.#10017. D2Win.#10017 takes one parameter on the stack, a pointer to the following structure:
This function is used to register many things besides buttons, however the nature of the other types is unknown to me at this time.
Breaking on 10017 usually yields the menu registration routine that is being switched to (the routine is only called when the menu is being changed, namely on button clicks), however, here is the main menu registration code:
It should be noted that while changing the contents of the structures whose addresses are passed as the first arguement to 10017 is trivial, removing a button entirely is a little more complicated (but really not much more).
Note that after every button registration, we add one to [6FA3D0B8]. I believe this to be a button counter. If we remove a button and still increment, there will be an access violation somewhere down the line (D2Win code, where all this is used). If we don't increment and add a button, I can only assume that one will not be displayed, as I haven't tried it.
__________________
Originally, my intent was to remove the "battle.net" and "gateway: ..." buttons completely and shift the "other multiplayer" button up so that they didn't look disjoint. After some consideration, however, with the extra space one can put the "open battle.net" and "tcp/ip" buttons from the "other multiplayer" screen right on the main screen.
EDIT: /* Don't do this, yet. There's an assertion failure "pCel" when the TCP/IP button is clicked. If you want to just remove and reposition the buttons, that works, but changing screens could cause problems. Oddly enough, this only occurs after a game has been exited once (back to the menu screen), but still... */
Okay, it works now. The buttons are somewhat hardcoded in places I didn't anticipate, so (unless you can find them, and more power to you if so) don't use buttons on screens that they didn't originally belong on. I haven't tried making entirely new buttons, though.
Modifications to main screen registration routine:
{Removes "gateway: ..." button}
Modifications to the "battle.net" and "other multiplayer" buttons:
{Changes strings to "open battle.net" and "tcp/ip"
Changes callbacks to appropriate callbacks
Changes position of buttons and buttongraphics of "battle.net"}
Modification of callback used by cancel button (TCP/IP) screen:
{Returns to main menu instead of other multiplayer screen}
The missing part would now be the callback of any cancel button on the open battle.net screen, but I cannot look into that (long story, but yes, I do own a legal copy - it's in four pieces in a box in my room ).
__________________________________
I hope someone finds this useful and am looking forward to seeing new menu designs in the mods.
Thanks for all the help,
Elliot_009
Also, a big thanks to Myhrginoc - I'd still be digging through D2Win trying to figure out where the D2Gfx.#10072 calls were coming from if you hadn't mentioned looking in D2Launch.
For those interested, here's how blizzard put together the main menu(s).
__________________________________
The buttons are registered in hardcoded sequences in D2Launch using D2Win.#10017. D2Win.#10017 takes one parameter on the stack, a pointer to the following structure:
Code: Select all
ptBtnData (size:30)
+00 eType (6 = D2WIN_BUTTON)
+04 Left
+08 Top
+0C Width
+10 Height
+18 StringIndex
+1C graphics table
(not explored fully, but looks goofy if the width/height don't match this entry)
+20 Callback
Breaking on 10017 usually yields the menu registration routine that is being switched to (the routine is only called when the menu is being changed, namely on button clicks), however, here is the main menu registration code:
Code: Select all
6FA1934A |. 0F84 03010000 JE D2Launch.6FA19453 ; //- Begin Lod-specific (if no jump)
6FA19350 3BC3 CMP EAX,EBX ; /- Miniroutine - Registers Gateway: %s Button
6FA19352 7C 1E JL SHORT D2Launch.6FA19372 ; |
6FA19354 68 24060000 PUSH 624 ; |
6FA19359 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA1935E 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA19363 E8 C2F00000 CALL <JMP.&Fog.#10023> ; |
6FA19368 83C4 0C ADD ESP,0C ; |
6FA1936B 6A FF PUSH -1 ; |
6FA1936D E8 33F20000 CALL D2Launch.6FA285A5 ; |
6FA19372 68 003AA36F PUSH D2Launch.6FA33A00 ; |
6FA19377 E8 DCEF0000 CALL <JMP.&D2Win.#10017> ; |
6FA1937C 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8] ; |/- Text?
6FA19382 A3 08CDA36F MOV DWORD PTR DS:[6FA3CD08],EAX ; ||
6FA19387 89048D D8CAA36>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX ; ||
6FA1938E 41 INC ECX ; ||
6FA1938F 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX ; ||
6FA19395 E8 26940000 CALL D2Launch.6FA227C0 ; \\
6FA1939A 391D B8D0A36F CMP DWORD PTR DS:[6FA3D0B8],EBX ; /- Miniroutine - Registers Battle.net Button
6FA193A0 7C 1E JL SHORT D2Launch.6FA193C0 ; |
6FA193A2 68 24060000 PUSH 624 ; |
6FA193A7 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA193AC 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA193B1 E8 74F00000 CALL <JMP.&Fog.#10023> ; |
6FA193B6 83C4 0C ADD ESP,0C ; |
6FA193B9 6A FF PUSH -1 ; |
6FA193BB E8 E5F10000 CALL D2Launch.6FA285A5 ; |
6FA193C0 68 D039A36F PUSH D2Launch.6FA339D0 ; |
6FA193C5 E8 8EEF0000 CALL <JMP.&D2Win.#10017> ; \-
6FA193CA 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA193D0 8BF8 MOV EDI,EAX
6FA193D2 89048D D8CAA36>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA193D9 41 INC ECX
6FA193DA 3BCB CMP ECX,EBX
6FA193DC 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA193E2 7C 1E JL SHORT D2Launch.6FA19402 ; /- Miniroutine - Registers Other Multiplayer Button
6FA193E4 68 24060000 PUSH 624 ; |
6FA193E9 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA193EE 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA193F3 E8 32F00000 CALL <JMP.&Fog.#10023> ; |
6FA193F8 83C4 0C ADD ESP,0C ; |
6FA193FB 6A FF PUSH -1 ; |
6FA193FD E8 A3F10000 CALL D2Launch.6FA285A5 ; |
6FA19402 68 303AA36F PUSH D2Launch.6FA33A30 ; |
6FA19407 E8 4CEF0000 CALL <JMP.&D2Win.#10017> ; \-
6FA1940C |. 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA19412 |. 8BF0 MOV ESI,EAX
6FA19414 |. 89048D D8CAA36>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1941B |. 41 INC ECX
6FA1941C |. 3BCB CMP ECX,EBX
6FA1941E |. 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA19424 7C 1E JL SHORT D2Launch.6FA19444 ; /- Miniroutine - Registers Single Player Button
6FA19426 68 24060000 PUSH 624 ; |
6FA1942B 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA19430 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA19435 E8 F0EF0000 CALL <JMP.&Fog.#10023> ; |
6FA1943A 83C4 0C ADD ESP,0C ; |
6FA1943D 6A FF PUSH -1 ; |
6FA1943F E8 61F10000 CALL D2Launch.6FA285A5 ; |
6FA19444 68 A039A36F PUSH D2Launch.6FA339A0 ; |
6FA19449 E8 0AEF0000 CALL <JMP.&D2Win.#10017> ; \-
6FA1944E |. E9 FE000000 JMP D2Launch.6FA19551 ; \\- Miniroutine - END Lod-specific
6FA19453 |> 3BC3 CMP EAX,EBX ; //- Miniroutine - BEGIN non-Lod
6FA19455 7C 1E JL SHORT D2Launch.6FA19475
6FA19457 68 24060000 PUSH 624
6FA1945C 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA19461 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA19466 E8 BFEF0000 CALL <JMP.&Fog.#10023>
6FA1946B 83C4 0C ADD ESP,0C
6FA1946E 6A FF PUSH -1
6FA19470 E8 30F10000 CALL D2Launch.6FA285A5
6FA19475 68 8038A36F PUSH D2Launch.6FA33880
6FA1947A E8 D9EE0000 CALL <JMP.&D2Win.#10017>
6FA1947F |. 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA19485 |. 8BF8 MOV EDI,EAX
6FA19487 |. 89048D D8CAA36>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1948E |. 41 INC ECX
6FA1948F |. 3BCB CMP ECX,EBX
6FA19491 |. 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA19497 |. 7C 1E JL SHORT D2Launch.6FA194B7
6FA19499 |. 68 24060000 PUSH 624
6FA1949E |. 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA194A3 |. 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA194A8 |. E8 7DEF0000 CALL <JMP.&Fog.#10023>
6FA194AD |. 83C4 0C ADD ESP,0C
6FA194B0 |. 6A FF PUSH -1
6FA194B2 |. E8 EEF00000 CALL D2Launch.6FA285A5
6FA194B7 |> 68 B038A36F PUSH D2Launch.6FA338B0
6FA194BC |. E8 97EE0000 CALL <JMP.&D2Win.#10017>
6FA194C1 |. 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA194C7 |. A3 08CDA36F MOV DWORD PTR DS:[6FA3CD08],EAX
6FA194CC |. 89048D D8CAA36>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA194D3 |. 41 INC ECX
6FA194D4 |. 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA194DA |. E8 E1920000 CALL D2Launch.6FA227C0
6FA194DF |. 391D B8D0A36F CMP DWORD PTR DS:[6FA3D0B8],EBX
6FA194E5 |. 7C 1E JL SHORT D2Launch.6FA19505
6FA194E7 |. 68 24060000 PUSH 624
6FA194EC |. 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA194F1 |. 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA194F6 |. E8 2FEF0000 CALL <JMP.&Fog.#10023>
6FA194FB |. 83C4 0C ADD ESP,0C
6FA194FE |. 6A FF PUSH -1
6FA19500 |. E8 A0F00000 CALL D2Launch.6FA285A5
6FA19505 |> 68 5038A36F PUSH D2Launch.6FA33850
6FA1950A |. E8 49EE0000 CALL <JMP.&D2Win.#10017>
6FA1950F |. 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA19515 |. 89048D D8CAA36>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1951C |. 41 INC ECX
6FA1951D |. 3BCB CMP ECX,EBX
6FA1951F |. 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA19525 |. 7C 1E JL SHORT D2Launch.6FA19545
6FA19527 |. 68 24060000 PUSH 624
6FA1952C |. 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA19531 |. 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA19536 |. E8 EFEE0000 CALL <JMP.&Fog.#10023>
6FA1953B |. 83C4 0C ADD ESP,0C
6FA1953E |. 6A FF PUSH -1
6FA19540 |. E8 60F00000 CALL D2Launch.6FA285A5
6FA19545 |> 68 E038A36F PUSH D2Launch.6FA338E0
6FA1954A |. E8 09EE0000 CALL <JMP.&D2Win.#10017>
6FA1954F |. 8BF0 MOV ESI,EAX ; \\- END non-Lod
6FA19551 |> 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA19557 |. 89048D D8CAA36>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1955E |. 41 INC ECX
6FA1955F |. 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA19565 |. E8 12EE0000 CALL <JMP.&D2Win.#10185>
6FA1956A |. 85C0 TEST EAX,EAX
6FA1956C |. 74 1F JE SHORT D2Launch.6FA1958D
6FA1956E |. 33D2 XOR EDX,EDX
6FA19570 |. 8BCF MOV ECX,EDI
6FA19572 |. E8 03ED0000 CALL <JMP.&D2Win.#10025>
6FA19577 |. 33D2 XOR EDX,EDX
6FA19579 |. 8BCE MOV ECX,ESI
6FA1957B |. E8 FAEC0000 CALL <JMP.&D2Win.#10025>
6FA19580 |. 8B0D 08CDA36F MOV ECX,DWORD PTR DS:[6FA3CD08]
6FA19586 |. 33D2 XOR EDX,EDX
6FA19588 |. E8 EDEC0000 CALL <JMP.&D2Win.#10025>
6FA1958D |> 391D B8D0A36F CMP DWORD PTR DS:[6FA3D0B8],EBX
6FA19593 7C 1E JL SHORT D2Launch.6FA195B3 ; /- Miniroutine - Register Credits Button
6FA19595 68 24060000 PUSH 624 ; |
6FA1959A 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA1959F 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA195A4 E8 81EE0000 CALL <JMP.&Fog.#10023> ; |
6FA195A9 83C4 0C ADD ESP,0C ; |
6FA195AC 6A FF PUSH -1 ; |
6FA195AE E8 F2EF0000 CALL D2Launch.6FA285A5 ; |
6FA195B3 68 1039A36F PUSH D2Launch.6FA33910 ; |
6FA195B8 E8 9BED0000 CALL <JMP.&D2Win.#10017> ; \-
6FA195BD |. 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA195C3 |. 89048D D8CAA36>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA195CA |. 41 INC ECX
6FA195CB |. 3BCB CMP ECX,EBX
6FA195CD |. 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA195D3 7C 1E JL SHORT D2Launch.6FA195F3 ; /- Miniroutine - Registers Cinematics Button
6FA195D5 68 24060000 PUSH 624 ; |
6FA195DA 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA195DF 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA195E4 E8 41EE0000 CALL <JMP.&Fog.#10023> ; |
6FA195E9 83C4 0C ADD ESP,0C ; |
6FA195EC 6A FF PUSH -1 ; |
6FA195EE E8 B2EF0000 CALL D2Launch.6FA285A5 ; |
6FA195F3 68 4039A36F PUSH D2Launch.6FA33940 ; |
6FA195F8 E8 5BED0000 CALL <JMP.&D2Win.#10017> ; \-
6FA195FD |. 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA19603 |. 89048D D8CAA36>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1960A |. 41 INC ECX
6FA1960B |. 3BCB CMP ECX,EBX
6FA1960D |. 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA19613 7C 1E JL SHORT D2Launch.6FA19633 ; /- Miniroutine - Registers Exit Diablo II Button
6FA19615 68 24060000 PUSH 624 ; |
6FA1961A 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA1961F 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA19624 E8 01EE0000 CALL <JMP.&Fog.#10023> ; |
6FA19629 83C4 0C ADD ESP,0C ; |
6FA1962C 6A FF PUSH -1 ; |
6FA1962E E8 72EF0000 CALL D2Launch.6FA285A5 ; |
6FA19633 68 7039A36F PUSH D2Launch.6FA33970 ; |
6FA19638 E8 1BED0000 CALL <JMP.&D2Win.#10017> ; \-
6FA1963D |. 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA19643 |. 89048D D8CAA36>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1964A |. 41 INC ECX
6FA1964B |. 3BCB CMP ECX,EBX
6FA1964D |. 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA19653 7C 1E JL SHORT D2Launch.6FA19673
6FA19655 68 24060000 PUSH 624
6FA1965A 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA1965F 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA19664 E8 C1ED0000 CALL <JMP.&Fog.#10023>
6FA19669 83C4 0C ADD ESP,0C
6FA1966C 6A FF PUSH -1
6FA1966E E8 32EF0000 CALL D2Launch.6FA285A5
6FA19673 68 906AA36F PUSH D2Launch.6FA36A90
6FA19678 E8 DBEC0000 CALL <JMP.&D2Win.#10017>
6FA1967D |. 8BF8 MOV EDI,EAX
6FA1967F |. A1 B8D0A36F MOV EAX,DWORD PTR DS:[6FA3D0B8]
6FA19684 |. 893C85 D8CAA36>MOV DWORD PTR DS:[EAX*4+6FA3CAD8],EDI
6FA1968B |. 40 INC EAX
6FA1968C |. A3 B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],EAX
6FA19691 |. A1 F4B7A36F MOV EAX,DWORD PTR DS:[6FA3B7F4]
6FA19696 |. 85C0 TEST EAX,EAX
6FA19698 |. 75 1E JNZ SHORT D2Launch.6FA196B8
6FA1969A |. 68 FC090000 PUSH 9FC
6FA1969F |. 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA196A4 |. 68 7076A36F PUSH D2Launch.6FA37670 ; ASCII "gptComInt != NULL"
6FA196A9 |. E8 7CED0000 CALL <JMP.&Fog.#10023>
6FA196AE |. 83C4 0C ADD ESP,0C
6FA196B1 |. 6A FF PUSH -1
6FA196B3 |. E8 EDEE0000 CALL D2Launch.6FA285A5
6FA196B8 |> FF50 5C CALL DWORD PTR DS:[EAX+5C]
6FA196BB |. 8B0D 44CDA36F MOV ECX,DWORD PTR DS:[6FA3CD44]
6FA196C1 |. 8BF0 MOV ESI,EAX
6FA196C3 |. 8A81 1E020000 MOV AL,BYTE PTR DS:[ECX+21E]
6FA196C9 |. 84C0 TEST AL,AL
6FA196CB |. 74 33 JE SHORT D2Launch.6FA19700
6FA196CD |. 8B15 F4B7A36F MOV EDX,DWORD PTR DS:[6FA3B7F4] ; Bnclient.6FF19E70
6FA196D3 |. FF92 B0000000 CALL DWORD PTR DS:[EDX+B0]
6FA196D9 |. 0FBEC8 MOVSX ECX,AL
6FA196DC |. 8BC6 MOV EAX,ESI
6FA196DE |. BE 64000000 MOV ESI,64
6FA196E3 |. 99 CDQ
6FA196E4 |. F7FE IDIV ESI
6FA196E6 |. 51 PUSH ECX
6FA196E7 |. 40 INC EAX
6FA196E8 |. 52 PUSH EDX
6FA196E9 |. 50 PUSH EAX
6FA196EA |. 68 6076A36F PUSH D2Launch.6FA37660 ; ASCII "v %d.%02d %d"
6FA196EF |. 8D4424 1C LEA EAX,DWORD PTR SS:[ESP+1C]
6FA196F3 |. 6A 20 PUSH 20
6FA196F5 |. 50 PUSH EAX
6FA196F6 |. E8 07EE0000 CALL <JMP.&Storm.#578>
6FA196FB |. 83C4 18 ADD ESP,18
6FA196FE |. EB 21 JMP SHORT D2Launch.6FA19721
6FA19700 |> 8BC6 MOV EAX,ESI
6FA19702 |. B9 64000000 MOV ECX,64
6FA19707 |. 99 CDQ
6FA19708 |. F7F9 IDIV ECX
6FA1970A |. 40 INC EAX
6FA1970B |. 52 PUSH EDX
6FA1970C |. 50 PUSH EAX
6FA1970D |. 68 5476A36F PUSH D2Launch.6FA37654 ; ASCII "v %d.%02d"
6FA19712 |. 8D5424 18 LEA EDX,DWORD PTR SS:[ESP+18]
6FA19716 |. 6A 20 PUSH 20
6FA19718 |. 52 PUSH EDX
6FA19719 |. E8 E4ED0000 CALL <JMP.&Storm.#578>
6FA1971E |. 83C4 14 ADD ESP,14
6FA19721 |> 6A 00 PUSH 0
6FA19723 |. 8D5424 10 LEA EDX,DWORD PTR SS:[ESP+10]
6FA19727 |. 8BCF MOV ECX,EDI
6FA19729 |. E8 88EB0000 CALL <JMP.&D2Win.#10046>
6FA1972E |. E8 D5EA0000 CALL <JMP.&D2Sound.#10069>
6FA19733 |. 85C0 TEST EAX,EAX
6FA19735 |. 74 0A JE SHORT D2Launch.6FA19741
6FA19737 |. B9 01000000 MOV ECX,1
6FA1973C |. E8 C1EA0000 CALL <JMP.&D2Sound.#10034>
6FA19741 |> 5F POP EDI
6FA19742 |. 5E POP ESI
6FA19743 |. 5B POP EBX
6FA19744 |. 83C4 20 ADD ESP,20
6FA19747 \. C3 RETN
Note that after every button registration, we add one to [6FA3D0B8]. I believe this to be a button counter. If we remove a button and still increment, there will be an access violation somewhere down the line (D2Win code, where all this is used). If we don't increment and add a button, I can only assume that one will not be displayed, as I haven't tried it.
__________________
Originally, my intent was to remove the "battle.net" and "gateway: ..." buttons completely and shift the "other multiplayer" button up so that they didn't look disjoint. After some consideration, however, with the extra space one can put the "open battle.net" and "tcp/ip" buttons from the "other multiplayer" screen right on the main screen.
EDIT: /* Don't do this, yet. There's an assertion failure "pCel" when the TCP/IP button is clicked. If you want to just remove and reposition the buttons, that works, but changing screens could cause problems. Oddly enough, this only occurs after a game has been exited once (back to the menu screen), but still... */
Okay, it works now. The buttons are somewhat hardcoded in places I didn't anticipate, so (unless you can find them, and more power to you if so) don't use buttons on screens that they didn't originally belong on. I haven't tried making entirely new buttons, though.
Modifications to main screen registration routine:
{Removes "gateway: ..." button}
Code: Select all
6FA19300 A1 F4B7A36F MOV EAX,DWORD PTR DS:[6FA3B7F4]
6FA19305 FF50 70 CALL DWORD PTR DS:[EAX+70]
6FA19308 C705 D4CAA36F 01>MOV DWORD PTR DS:[6FA3CAD4],1
6FA19312 E8 09000000 CALL D2Launch.6FA19320
6FA19317 B8 01000000 MOV EAX,1
6FA1931C C2 0400 RETN 4
6FA1931F 90 NOP
6FA19320 83EC 20 SUB ESP,20
6FA19323 53 PUSH EBX
6FA19324 56 PUSH ESI
6FA19325 57 PUSH EDI
6FA19326 E8 C589FFFF CALL D2Launch.6FA11CF0
6FA1932B A1 44CDA36F MOV EAX,DWORD PTR DS:[6FA3CD44]
6FA19330 C640 32 00 MOV BYTE PTR DS:[EAX+32],0
6FA19334 E8 B7ED0000 CALL D2Launch.6FA280F0
6FA19339 E8 F8F00000 CALL <JMP.&Fog.#10227>
6FA1933E 85C0 TEST EAX,EAX
6FA19340 A1 B8D0A36F MOV EAX,DWORD PTR DS:[6FA3D0B8]
6FA19345 BB 40000000 MOV EBX,40
6FA1934A 0F84 03010000 JE D2Launch.6FA19453
6FA19350 EB 48 JMP SHORT D2Launch.6FA1939A
6FA19352 90 NOP
6FA19353 90 NOP
6FA19354 90 NOP
6FA19355 90 NOP
6FA19356 90 NOP
6FA19357 90 NOP
6FA19358 90 NOP
6FA19359 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA1935E 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA19363 E8 C2F00000 CALL <JMP.&Fog.#10023>
6FA19368 83C4 0C ADD ESP,0C
6FA1936B 6A FF PUSH -1
6FA1936D E8 33F20000 CALL D2Launch.6FA285A5
6FA19372 68 003AA36F PUSH D2Launch.6FA33A00
6FA19377 E8 DCEF0000 CALL <JMP.&D2Win.#10017>
6FA1937C 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA19382 A3 08CDA36F MOV DWORD PTR DS:[6FA3CD08],EAX
6FA19387 89048D D8CAA36F MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1938E 41 INC ECX
6FA1938F 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA19395 E8 26940000 CALL D2Launch.6FA227C0
6FA1939A 391D B8D0A36F CMP DWORD PTR DS:[6FA3D0B8],EBX
6FA193A0 7C 1E JL SHORT D2Launch.6FA193C0
6FA193A2 68 24060000 PUSH 624
6FA193A7 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA193AC 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA193B1 E8 74F00000 CALL <JMP.&Fog.#10023>
6FA193B6 83C4 0C ADD ESP,0C
6FA193B9 6A FF PUSH -1
6FA193BB E8 E5F10000 CALL D2Launch.6FA285A5
6FA193C0 68 D039A36F PUSH D2Launch.6FA339D0
6FA193C5 E8 8EEF0000 CALL <JMP.&D2Win.#10017>
6FA193CA 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA193D0 3E:89048D D8CAA3>MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA193D8 90 NOP
6FA193D9 41 INC ECX
6FA193DA 3BCB CMP ECX,EBX
6FA193DC 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA193E2 7C 1E JL SHORT D2Launch.6FA19402
6FA193E4 68 24060000 PUSH 624
6FA193E9 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA193EE 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA193F3 E8 32F00000 CALL <JMP.&Fog.#10023>
6FA193F8 83C4 0C ADD ESP,0C
6FA193FB 6A FF PUSH -1
6FA193FD E8 A3F10000 CALL D2Launch.6FA285A5
6FA19402 68 303AA36F PUSH D2Launch.6FA33A30
6FA19407 E8 4CEF0000 CALL <JMP.&D2Win.#10017>
6FA1940C 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA19412 8BF0 MOV ESI,EAX
6FA19414 89048D D8CAA36F MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1941B 41 INC ECX
6FA1941C 3BCB CMP ECX,EBX
6FA1941E 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
{Changes strings to "open battle.net" and "tcp/ip"
Changes callbacks to appropriate callbacks
Changes position of buttons and buttongraphics of "battle.net"}
Code: Select all
6FA339D0 06 00 00 00 08 01 00 00 6E 01 00 00 10 01 00 00 .....n....
6FA339E0 23 00 00 00 00 00 00 00 FB 13 00 00 AC CE A3 6F #.......û..¬Î£o
6FA339F0 C0 ED A1 6F 00 00 00 00 00 00 00 00 00 00 00 00 Àí¡o............
...
6FA33A30 06 00 00 00 08 01 00 00 98 01 00 00 10 01 00 00 .....˜....
6FA33A40 23 00 00 00 00 00 00 00 FC 13 00 00 AC CE A3 6F #.......ü..¬Î£o
6FA33A50 B0 1F A2 6F 00 00 00 00 00 00 00 00 00 00 00 00 °¢o............
{Returns to main menu instead of other multiplayer screen}
Code: Select all
6FA36880 06 00 00 00 27 00 00 00 3B 02 00 00 80 00 00 00 ...'...;..€...
6FA36890 23 00 00 00 1B 00 00 00 EF 13 00 00 B0 CE A3 6F #......ï..°Î£o
6FA368A0 90 60 A2 6F 00 00 00 00 00 00 00 00 00 00 00 00 �`¢o............
__________________________________
I hope someone finds this useful and am looking forward to seeing new menu designs in the mods.
Thanks for all the help,
Elliot_009
Last edited by Elliot_009 on Fri Dec 22, 2006 8:15 pm, edited 6 times in total.
Re: How to remove the "BATTLE.NET" button.
Nice work!
There might be a "page index" table in the dll that is checked by the button code. If you replaced the Battle.net button on the main page with a TCP/IP button, then you would have two paths: one from the main page and one from the "other multiplayer" page. Comparing the program flow through each route ought to find the code that checks the calling page index.
There might be a "page index" table in the dll that is checked by the button code. If you replaced the Battle.net button on the main page with a TCP/IP button, then you would have two paths: one from the main page and one from the "other multiplayer" page. Comparing the program flow through each route ought to find the code that checks the calling page index.
Do the right thing. It will gratify some people and astonish the rest.
~ Mark Twain
Run Diablo II in any version for mods: tutorial
The Terms of Service!! Know them, abide by them, and enjoy the forums at peace.
The Beginner's Guide v1.4: (MS Word | PDF) || Mod Running Scripts || TFW: Awakening
~ Mark Twain
Run Diablo II in any version for mods: tutorial
The Terms of Service!! Know them, abide by them, and enjoy the forums at peace.
The Beginner's Guide v1.4: (MS Word | PDF) || Mod Running Scripts || TFW: Awakening
- Necrolis
- Throne
- Posts: 9125
- Joined: Sat Mar 25, 2006 1:22 pm
- Location: The Land of the Dead
- Contact:
This resurrection was kindly sponsored by you friendly forum Necromancer (actually its here cause it the best place for it)
this code might be useful for anyone who's used this edit (so you can make the cancel buttons on the tcp/ip screen go the main menu, and open bnet if so chosen.
this code might be useful for anyone who's used this edit (so you can make the cancel buttons on the tcp/ip screen go the main menu, and open bnet if so chosen.
Code: Select all
TCP/IP Main
6FA1A358 68 8068A36F PUSH d2launch.6FA36880 ; cancel
6FA1A239 68 F067A36F PUSH d2launch.6FA367F0 ; join game
6FA1A1F4 68 C067A36F PUSH d2launch.6FA367C0 ; host game
MP Game Type Selection
6FA1EF30 E8 BB910000 CALL d2launch.6FA280F0
6FA1EF35 833D B8D0A36F 4>CMP DWORD PTR DS:[6FA3D0B8],40
6FA1EF3C 7C 1E JL SHORT d2launch.6FA1EF5C
6FA1EF3E 68 24060000 PUSH 624
6FA1EF43 68 AC75A36F PUSH d2launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA1EF48 68 EC75A36F PUSH d2launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA1EF4D E8 D8940000 CALL <JMP.&Fog.#10023>
6FA1EF52 83C4 0C ADD ESP,0C
6FA1EF55 6A FF PUSH -1
6FA1EF57 E8 49960000 CALL d2launch.6FA285A5
6FA1EF5C 68 7066A36F PUSH d2launch.6FA36670 ; open b.net
6FA1EF61 E8 F2930000 CALL <JMP.&D2Win.#10017>
6FA1EF66 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA1EF6C 89048D D8CAA36F MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1EF73 41 INC ECX
6FA1EF74 83F9 40 CMP ECX,40
6FA1EF77 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA1EF7D 7C 1E JL SHORT d2launch.6FA1EF9D
6FA1EF7F 68 24060000 PUSH 624
6FA1EF84 68 AC75A36F PUSH d2launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA1EF89 68 EC75A36F PUSH d2launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA1EF8E E8 97940000 CALL <JMP.&Fog.#10023>
6FA1EF93 83C4 0C ADD ESP,0C
6FA1EF96 6A FF PUSH -1
6FA1EF98 E8 08960000 CALL d2launch.6FA285A5
6FA1EF9D 68 A066A36F PUSH d2launch.6FA366A0 ; tcp/ip
6FA1EFA2 E8 B1930000 CALL <JMP.&D2Win.#10017>
6FA1EFA7 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA1EFAD 89048D D8CAA36F MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1EFB4 41 INC ECX
6FA1EFB5 83F9 40 CMP ECX,40
6FA1EFB8 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA1EFBE 7C 1E JL SHORT d2launch.6FA1EFDE
6FA1EFC0 68 24060000 PUSH 624
6FA1EFC5 68 AC75A36F PUSH d2launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA1EFCA 68 EC75A36F PUSH d2launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA1EFCF E8 56940000 CALL <JMP.&Fog.#10023>
6FA1EFD4 83C4 0C ADD ESP,0C
6FA1EFD7 6A FF PUSH -1
6FA1EFD9 E8 C7950000 CALL d2launch.6FA285A5
6FA1EFDE 68 D066A36F PUSH d2launch.6FA366D0 ; cancel
6FA1EFE3 E8 70930000 CALL <JMP.&D2Win.#10017>
6FA1EFE8 8B0D B8D0A36F MOV ECX,DWORD PTR DS:[6FA3D0B8]
6FA1EFEE 89048D D8CAA36F MOV DWORD PTR DS:[ECX*4+6FA3CAD8],EAX
6FA1EFF5 41 INC ECX
6FA1EFF6 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA1EFFC B8 01000000 MOV EAX,1
6FA1F001 C2 0400 RETN 4
these use the struct posted above
goto main menu cancel
6FA366D0 06 00 00 00 08 01 00 00 .....
6FA366D8 38 02 00 00 10 01 00 00 8....
6FA366E0 23 00 00 00 1B 00 00 00 #......
6FA366E8 EF 13 00 00 AC CE A3 6F ï..¬Î£o
6FA366F0 90 60 A2 6F 00 00 00 00
Netiquette, Do you USE it?!?! | Nefarius' Fixed TXT Files | Terms Of Service
Blackened | Day of Death | D2GFEx
"What was yours is mine. Your land, your people, and now your life." - Lim-Dul, the Necromancer
Judgement is Final, Death is Eternal
- HashCasper
- Posts: 263
- Joined: Mon Apr 28, 2003 6:46 am
- Location: Baton Rouge, LA
- Contact:
Could this be made into a d2mod plug in? (I know that it can, but I don't have access to the SDK)
"We have a point to work to, to make our nation huge; make our home stretch around the world, increase our army too. We must take over the world, make it our own, the Earth we must control, so you can't F#CK it anymore." --Mathew Chalk--
- Necrolis
- Throne
- Posts: 9125
- Joined: Sat Mar 25, 2006 1:22 pm
- Location: The Land of the Dead
- Contact:
This is abit more complicated to get into a plugin(like which menus, what parts of the buttons, new txt etc.) if you can make a good proposal i'll look into itHashCasper";p="386465" wrote:Could this be made into a d2mod plug in? (I know that it can, but I don't have access to the SDK)
Netiquette, Do you USE it?!?! | Nefarius' Fixed TXT Files | Terms Of Service
Blackened | Day of Death | D2GFEx
"What was yours is mine. Your land, your people, and now your life." - Lim-Dul, the Necromancer
Judgement is Final, Death is Eternal
- MagicMatze
- Champion of the Light
- Posts: 324
- Joined: Sun Jan 25, 2004 8:53 pm
- Location: Good old Germany
I have NOPt out the gateway button successfully but have no idea how to remove the battle.net button. Your codes went up to 6FA36xxxx but mine ends with 6FA30xxxx.
So I cannot look up the code to make changes for:
edit:
I am following the Code Editing Tutorial for changing/adding normal difficulty text to the screen - but to find the BATTLE.NET string key in D2Launch.dll. I have set a breakpoint as the tutorial says (ECX=13F3 for BATTLE.NET string) but it seems this breakpoint won't be triggered?
Anyone who can give me a hint for finding the correct button for disabling?
edit2:
Have found the button at 6FA19407:
But I have no idea how to remove 'em?
btw: all my code is v1.10
So I cannot look up the code to make changes for:
Modifications to the "battle.net" and "other multiplayer" buttons:
{Changes strings to "open battle.net" and "tcp/ip"
Changes callbacks to appropriate callbacks
Changes position of buttons and buttongraphics of "battle.net"}
edit:
I am following the Code Editing Tutorial for changing/adding normal difficulty text to the screen - but to find the BATTLE.NET string key in D2Launch.dll. I have set a breakpoint as the tutorial says (ECX=13F3 for BATTLE.NET string) but it seems this breakpoint won't be triggered?
Anyone who can give me a hint for finding the correct button for disabling?
edit2:
Have found the button at 6FA19407:
Code: Select all
6FA193E2 7C 1E JL SHORT D2Launch.6FA19402
6FA193E4 68 24060000 PUSH 624
6FA193E9 68 AC75A36F PUSH D2Launch.6FA375AC ; ASCII "C:\projects\D2\head\Diablo2\Source\D2Launch\Src\MainMenus.cpp"
6FA193EE 68 EC75A36F PUSH D2Launch.6FA375EC ; ASCII "sgnNumChildren < MAX_CHILDREN"
6FA193F3 E8 32F00000 CALL <JMP.&Fog.#10023>
6FA193F8 83C4 0C ADD ESP,0C
6FA193FB 6A FF PUSH -1
6FA193FD E8 A3F10000 CALL D2Launch.6FA285A5
6FA19402 68 303AA36F PUSH D2Launch.6FA33A30
6FA19407 E8 4CEF0000 CALL <JMP.&D2Win.#10017>
btw: all my code is v1.10
Last edited by MagicMatze on Sun Nov 23, 2008 8:36 pm, edited 2 times in total.
- Necrolis
- Throne
- Posts: 9125
- Joined: Sat Mar 25, 2006 1:22 pm
- Location: The Land of the Dead
- Contact:
remove the button like the others, make it jump over the code that adds it to the chain(it looks the same as the others)
Netiquette, Do you USE it?!?! | Nefarius' Fixed TXT Files | Terms Of Service
Blackened | Day of Death | D2GFEx
"What was yours is mine. Your land, your people, and now your life." - Lim-Dul, the Necromancer
Judgement is Final, Death is Eternal
- MagicMatze
- Champion of the Light
- Posts: 324
- Joined: Sun Jan 25, 2004 8:53 pm
- Location: Good old Germany
Have set a breakpoint to
then clicked the battle.net button and game paused. Then NOP the code out and then the Other Multiplayer button disappered?!
Will try it tomorrow again - too much code editing for today
edit:
Think the code above isn't the battle.net button. Found similar else:
Changed it to:
(long ranged jump to
but game crashed...
A little help for finding and solving this problem would be very nice.
Code: Select all
6FA19407 E8 4CEF0000 CALL <JMP.&D2Win.#10017>
Will try it tomorrow again - too much code editing for today
edit:
Think the code above isn't the battle.net button. Found similar else:
Code: Select all
6FA1964B 3BCB CMP ECX,EBX
6FA1964D 890D B8D0A36F MOV DWORD PTR DS:[6FA3D0B8],ECX
6FA19653 7C 1E JL SHORT D2Launch.6FA19673
6FA19655 68 24060000 PUSH 624
Code: Select all
6FA1964B E9 17010000 JMP D2Launch.6FA19767
6FA19650 90 NOP
6FA19651 90 NOP
6FA19652 90 NOP
6FA19653 90 NOP
6FA19654 90 NOP
6FA19655 90 NOP
6FA19656 90 NOP
6FA19657 90 NOP
6FA19658 90 NOP
6FA19659 90 NOP
Code: Select all
6FA19767 3BC3 CMP EAX,EBX
A little help for finding and solving this problem would be very nice.
Last edited by MagicMatze on Mon Nov 24, 2008 11:48 am, edited 1 time in total.
- MagicMatze
- Champion of the Light
- Posts: 324
- Joined: Sun Jan 25, 2004 8:53 pm
- Location: Good old Germany
Instead of removing this button I followed Elliot_009s post: Replacing the battle.net button with Open B.net and changing callback of cancel button from TCP/IP menu.
I edited D2Launch.dll and went to the button location with CTRL+G. The changed did work but I cannot save it. The whole dll file went to another structure and with other offsets. If I save it to a txt file, it has a greater size than the dll should have.
Any workaround?
I edited D2Launch.dll and went to the button location with CTRL+G. The changed did work but I cannot save it. The whole dll file went to another structure and with other offsets. If I save it to a txt file, it has a greater size than the dll should have.
Any workaround?
- Necrolis
- Throne
- Posts: 9125
- Joined: Sat Mar 25, 2006 1:22 pm
- Location: The Land of the Dead
- Contact:
do a static edit(though it should save as those aren't dynamic datatables that the buttons are read from). btw the window is only draw once, and D2Win.#10017 -> D2CreateWindow(D2WindowParamsStrc* pParams), is called when the NEXT window is draw, so you breakpoint BEFORE the window you want is drawn.
Netiquette, Do you USE it?!?! | Nefarius' Fixed TXT Files | Terms Of Service
Blackened | Day of Death | D2GFEx
"What was yours is mine. Your land, your people, and now your life." - Lim-Dul, the Necromancer
Judgement is Final, Death is Eternal
Re: How to remove the "BATTLE.NET" button.
No idea if this will help but looking over my old notes on main menu buttons I found this stuff to do with the button flags, or code bits that define how the buttons are aliened and work
Example of this here
If u need a copy of my d2launch.dll let me know, i remember this as one of most head scratching code edits I did as there was no pre-edited files to work back from and figure out how its all done
Code: Select all
How button signature/code is worked out
#1 00 00 00 #2 00 00 00 #3 00 00 00 #4 00 00 00
#5 00 00 00 #6 00 00 00 #7 00 00 00 #8 CE A3 6F
#9 #9 A1 6F 00 00 00 00 00 00 00 00 00 00 00 00
#1 06 : bit flag stating button?
#2 XX XX : pixels from left
#3 XX XX : pixels from TOP (i think)
#4 XX XX : Lenght of the button
#5 19 or 23 : Font size :)
#6 :S not sure
#7 XX XX : String referance... change this to existing string and not need to edit strings table
#8 B0 - CC : button border/style (dc6 table!?)
CE A3 6F denotes end of styling of button (i think)
#9 XX XX : button funcion code
A1 (not figured it out yet but its eather a1 or a2)
6F : end of button
Code: Select all
Modifications to the "battle.net" and "other multiplayer" buttons:
{Changes strings to "open battle.net" and "tcp/ip"
Changes callbacks to appropriate callbacks
Changes position of buttons and buttongraphics of "battle.net"}
0x239D0
6FA339D0 06 00 00 00 08 01 00 00 6E 01 00 00 10 01 00 00 .....n....
6FA339E0 23 00 00 00 00 00 00 00 FB 13 00 00 AC CE A3 6F #.......û..¬Î£o
6FA339F0 C0 ED A1 6F 00 00 00 00 00 00 00 00 00 00 00 00 Àí¡o............
...
6FA33A30 06 00 00 00 08 01 00 00 98 01 00 00 10 01 00 00 .....˜....
6FA33A40 23 00 00 00 00 00 00 00 FC 13 00 00 AC CE A3 6F #.......ü..¬Î£o
6FA33A50 B0 1F A2 6F 00 00 00 00 00 00 00 00 00 00 00 00 °¢o............
Wuff Quick edit
0x239E8 F3 to FC (width from left)
0x239Ec C8 to AC (hight from bottom)
0x239F0 D0 to B0 (function (SP button))
0x23A09 01 to 02
0x23A38 B1 01 to 98 02 (text code string number ( i tihnk)
0x23A48 F4 to FC
0x23A50 30 EF A1 to B0 1F A2 (function (TCP\IP button))
- Necrolis
- Throne
- Posts: 9125
- Joined: Sat Mar 25, 2006 1:22 pm
- Location: The Land of the Dead
- Contact:
Re: How to remove the "BATTLE.NET" button.
Wuffie";p="406773" wrote:No idea if this will help but looking over my old notes on main menu buttons I found this stuff to do with the button flags, or code bits that define how the buttons are aliened and work
[/qoute]Code: Select all
How button signature/code is worked out #1 00 00 00 #2 00 00 00 #3 00 00 00 #4 00 00 00 #5 00 00 00 #6 00 00 00 #7 00 00 00 #8 CE A3 6F #9 #9 A1 6F 00 00 00 00 00 00 00 00 00 00 00 00 #1 06 : bit flag stating button? #2 XX XX : pixels from left #3 XX XX : pixels from TOP (i think) #4 XX XX : Lenght of the button #5 19 or 23 : Font size :) #6 :S not sure #7 XX XX : String referance... change this to existing string and not need to edit strings table #8 B0 - CC : button border/style (dc6 table!?) CE A3 6F denotes end of styling of button (i think) #9 XX XX : button funcion code A1 (not figured it out yet but its eather a1 or a2) 6F : end of button
that struct is only partially correct, its incorrect for 2 reasons:
1) there are about 6 different unions to that struct[the window creation params]
2) certain members are just wrong anyway, eg: +00 is nType, of which there are 12 types(one includes smackers ), type 6 being WINDOW_BUTTON.
for these basic edits one only needs to edit the callbacks and strings(and maybe gfx). when i'm done recoding all the menu's I'll make something like sir_generals heavenstorm tutorial[these menus are actually very simple, it took about 5 min to recode the splash screen & main menu]
Netiquette, Do you USE it?!?! | Nefarius' Fixed TXT Files | Terms Of Service
Blackened | Day of Death | D2GFEx
"What was yours is mine. Your land, your people, and now your life." - Lim-Dul, the Necromancer
Judgement is Final, Death is Eternal
Re: How to remove the "BATTLE.NET" button.
I am watching this topic carefully and with more time and posts, it is more and more interesting.
At first, I want to thank for "workaround" tutorial from wuffie. I have followed his notes and sucesfully made it to menu without BATTLE.NET button. But still from TCP/IP screen I return to multiplayer page. With some more time, I will probably change position of mainmenu buttons (thanks for menu offsets topic, again). I have only few coding experience (hex editor + small amount of olly) so "jump over the code, EBX 1107, set breakpoint and expand it to own function (omg wtfneebs itz very easy TT newbs dye dye dye newbZ!!1), or just create your own function" unfortunatelly tells me only a few, only what could I read from posts on forum. I was sucessfull by making few easy changes by switching values, nopping things and doing jumps over the empty code, but primary by Following tutorials - not finding it by my own.
When I read, that something big is preparing from our forum necromancer I must confess that I am little excited, and have to say something while I can.
Now, when we have the menu buttons as "public" topic, the most interesting part of it is probably their XY position. But I believe, there is still some hidden stuff waiting. I would be very thankful, if the "menustorm " tutorial will be expanded as much as possible, not just "I am too lazy again, heres just scratch from my notes again" - no offense.
I like long readings, but I know most of writers dislike long writings. I believe that exist solution between both of us /neebs and their shan´do/
and will look forward that tutorial with passion. I will keep eye on this topic good luck, Nec.
At first, I want to thank for "workaround" tutorial from wuffie. I have followed his notes and sucesfully made it to menu without BATTLE.NET button. But still from TCP/IP screen I return to multiplayer page. With some more time, I will probably change position of mainmenu buttons (thanks for menu offsets topic, again). I have only few coding experience (hex editor + small amount of olly) so "jump over the code, EBX 1107, set breakpoint and expand it to own function (omg wtfneebs itz very easy TT newbs dye dye dye newbZ!!1), or just create your own function" unfortunatelly tells me only a few, only what could I read from posts on forum. I was sucessfull by making few easy changes by switching values, nopping things and doing jumps over the empty code, but primary by Following tutorials - not finding it by my own.
When I read, that something big is preparing from our forum necromancer I must confess that I am little excited, and have to say something while I can.
Now, when we have the menu buttons as "public" topic, the most interesting part of it is probably their XY position. But I believe, there is still some hidden stuff waiting. I would be very thankful, if the "menustorm " tutorial will be expanded as much as possible, not just "I am too lazy again, heres just scratch from my notes again" - no offense.
I like long readings, but I know most of writers dislike long writings. I believe that exist solution between both of us /neebs and their shan´do/
and will look forward that tutorial with passion. I will keep eye on this topic good luck, Nec.
"Each of those few chords separated by complete silence feels like a knife wound to the heart"
There is no greater sorrow than to recall happiness in times of misery. Draconian
There is no greater sorrow than to recall happiness in times of misery. Draconian
Re: How to remove the "BATTLE.NET" button.
Thanks for pointing that out wrong info is worse than none IMONecrolis";p="406808" wrote:...that struct is only partially correct, its incorrect for 2 reasons:
1) there are about 6 different unions to that struct[the window creation params]
2) certain members are just wrong anyway, eg: +00 is nType, of which there are 12 types(one includes smackers ), type 6 being WINDOW_BUTTON.
for these basic edits one only needs to edit the callbacks and strings(and maybe gfx). when i'm done recoding all the menu's I'll make something like sir_generals heavenstorm tutorial[these menus are actually very simple, it took about 5 min to recode the splash screen & main menu]...
and good luck with ur recoding, im sure alot of ppl will be happy when you finish
Re: How to remove the "BATTLE.NET" button.
I've been trying to disable the Battle.net button in 1.11b so the game doesnt respond to the onclick event. I've been loooking for days but I don't have the experience yet to know what to look for. I need a nudge in the right direction. I tried to set a break point with ecx==13f3 but it wont break.
Last edited by impendeo on Sat Mar 28, 2009 8:53 am, edited 2 times in total.
- Necrolis
- Throne
- Posts: 9125
- Joined: Sat Mar 25, 2006 1:22 pm
- Location: The Land of the Dead
- Contact:
The button data is stored in the .data section of the dll, so it'll be in reverse order(big endian), also 1.11b doesn't have the nice error strings to help you
Netiquette, Do you USE it?!?! | Nefarius' Fixed TXT Files | Terms Of Service
Blackened | Day of Death | D2GFEx
"What was yours is mine. Your land, your people, and now your life." - Lim-Dul, the Necromancer
Judgement is Final, Death is Eternal
I think I'm missing something vital, I cant find the button, i managd to get it to break when the button was clicked but i think that was because the break was set at the bnet call. really I have no idea what im doing and need an example to follow.
edit1:
I believe I have found the button, is there a way to disable the button without editing the orignal d2launch.dll?
edit1:
I believe I have found the button, is there a way to disable the button without editing the orignal d2launch.dll?
Last edited by impendeo on Mon Mar 30, 2009 2:29 am, edited 1 time in total.
[v1.13] Deactivate BNet Buttons / ignore "skiptobnet"
Ok...it is partly related to this topic and i made some changes which work so far, but
there are some code sequences i found, which also look BNet related, didn't trap while
testing so i don't know what it is doing. So i didn't manipulate anything thereand so
there's a bypass possible i'm not aware of.
I redirected the Callbackaddresses of Open, Closed and Gateway to a stand alone
sequence (mov eax,00000001 ret 0004) which does (nearly) nothing and made a
conditional jump unconditional.
At these 4 File Offsets the byte sequence have to changed to "10 f7 a4 6f":
00021120, 00021270, 000212a0 and 00023f10
For the jump change at 00019e99: 74 -> eb
(v1.13 D2Launch.DLL)
===========
Edit: it seems to exist a start param "-gametype". I don't know how(/if) it work(s), since it
needs a additional string, which i couldn't identify till now. In D2Launch is a code
sequence, which looks like that it uses this param.
there are some code sequences i found, which also look BNet related, didn't trap while
testing so i don't know what it is doing. So i didn't manipulate anything thereand so
there's a bypass possible i'm not aware of.
I redirected the Callbackaddresses of Open, Closed and Gateway to a stand alone
sequence (mov eax,00000001 ret 0004) which does (nearly) nothing and made a
conditional jump unconditional.
At these 4 File Offsets the byte sequence have to changed to "10 f7 a4 6f":
00021120, 00021270, 000212a0 and 00023f10
For the jump change at 00019e99: 74 -> eb
(v1.13 D2Launch.DLL)
===========
Edit: it seems to exist a start param "-gametype". I don't know how(/if) it work(s), since it
needs a additional string, which i couldn't identify till now. In D2Launch is a code
sequence, which looks like that it uses this param.
Last edited by Pangaea on Sun May 15, 2011 2:55 pm, edited 1 time in total.
I'm working with v1.13c
Re: How to remove the "BATTLE.NET" button.
I think this struct may be very useful for someone who wants to edit out of game menus.
Code: Select all
struct Control {
DWORD dwType; //0x00
CellFile *pCellFile; //0x04
DWORD dwState; //0x08 0x05 - enabled, 0x04 - disabled, 0x03-0x00 - not visible
DWORD dwPosX; //0x0C
DWORD dwPosY; //0x10
DWORD dwSizeX; //0x14
DWORD dwSizeY; //0x18
BOOL (__fastcall *Draw)(Control*); //0x1C
BOOL (__fastcall *DrawEx)(Control*); //0x20 used by timer/popup
BOOL (__stdcall *Push)(ControlMsg*); //0x24
BOOL (__stdcall *Mouse)(ControlMsg*); //0x28
BOOL (__stdcall *ListCheck)(ControlMsg*); //0x2C used only by list
BOOL (__stdcall *Key)(ControlMsg*); //0x30 WM_CHAR MSG
BOOL (__stdcall *OnPress)(Control*); //0x34 Our Callback
BOOL (__fastcall*DrawAnim)(Control*); //0x38 used by animimage
Control* pNext; //0x3C
};
struct Button : Control // (size 0x274) dwType==0x06
{
DWORD dwButtonFlags; //0x40 0x00 - normal 0x01 - radio 0x02 - switch 0x03 - clickable(?) 0x04 - play sound 0x20 - sth with disabled/enabled 0x40 - multi line
DWORD dwIsPushed; //0x44
BOOL dwIsSwitched; //0x48
BOOL _1; //0x4C
DWORD dwHotKey; //0x50
DWORD dwButtonType; //0x54 0x00 - Normal Button, 0x01 - Switch Button 0x02 - Long Button
DWORD _2; //0x58
DWORD dwCellFrame; //0x5C
DWORD dwFont; //0x60 hardcoded
wchar_t wText[256]; //0x64
DWORD dwColor; //0x264 hardcoded
BOOL (__stdcall *OnHover)(Button*); //0x268
BOOL bisHovered; //0x26C
DWORD dwStrTbl2ndLine; //0x270
};
My CE Tools:
D2 Offset Calculator
D2 Offset Calculator
- Stormy Fairweather
- Posts: 85
- Joined: Fri Jul 18, 2008 1:13 am
Re: How to remove the "BATTLE.NET" button.
Not much of one for necromancy, but this topic has all the information I think I need, but I seem to be applying it wrong. I seek to remove the Gateway and B.net buttons, and move the others together. So far I tried to remove the gateway following Elliot_009 second post, but all I get is a exception error after I mod the dll to match his code. Although one part of the code makes no sense to me;
6FA193D0 3E:89048D D8CAA3
The code in my dll at that address is 8BF8 89048D D8CAA3. Perhaps the 3E: means something I have not learned yet, or is a typo, but I tried skipping that part, moving the addresses over 2 spaces as seems called for, entering 3E as code and moving the rest over one. It always crashes. As the rest of that code now matches Elliot's I suspect this is the source of my crash.
Would someone please explain what is meant, and perhaps gimme a clue or two as to why I am having trouble removing this button. I am gonna take a break from the gateway, and try ot remove the battle.net button. Perhaps I will gain insight whilst doing that.
Wisdom is, as always, appreciated.
Edit - bad enough I necro'd a thread, but I even solved my problem before anyone got around to helping. Sorry all.
6FA193D0 3E:89048D D8CAA3
The code in my dll at that address is 8BF8 89048D D8CAA3. Perhaps the 3E: means something I have not learned yet, or is a typo, but I tried skipping that part, moving the addresses over 2 spaces as seems called for, entering 3E as code and moving the rest over one. It always crashes. As the rest of that code now matches Elliot's I suspect this is the source of my crash.
Would someone please explain what is meant, and perhaps gimme a clue or two as to why I am having trouble removing this button. I am gonna take a break from the gateway, and try ot remove the battle.net button. Perhaps I will gain insight whilst doing that.
Wisdom is, as always, appreciated.
Edit - bad enough I necro'd a thread, but I even solved my problem before anyone got around to helping. Sorry all.