Guia para mudar a aparência de NPCs (que usam sets) e mobs (por exemplo, cursed wizard em LT3) sem fazer qualquer uso de dll ou
edição de texturas, apenas codificando hex no Main (em caracteres viewport)
Obs.: funciona para todas as versões.
O principal objetivo é a mudança do Set do NPC Crossbow Guard
Requisitos necessários:
1. Ollydbg.
2. Win Calculator
3. Brain.exe
4. Hands.dll
Para este tópico você deve saber como calcular o ObjectId dos itens no main.exe.
Exemplo: calculo do ObjectID de "Lightning Sword"
ObjectID = Offset (valor localizado) + ItemdID (0*512+14 = 14 (0x0E))
Para o Offset = 0x285, ObjectID = 0x293
Exemplo: calculo do ItemID com ObjectID=0x293 e Offset=0x285, com 512 max de itens por tipo:
ItemId = ObjectId - Offset = 0x293 - 0x285 = 0x0E (14)
ItemType = ItemId / MaxItems = 14 / 512 = 0 (divisão por inteiro)
ItemIndex = ItemId % MaxItems = 14 % 512 = 14 (remainder of the integer division)
Se olhar no arquivo items.txt ou .bmd encontrará o tipo do item: Type = 0 e Index = 14 é Lightning Sword
1º. Inicie o OllyDBG e abra o Main.exe por ele
Obs.: deve calcular o objectid dos itens, por exemplo, vamos calcular do plate helm com offset 0x286:
7*512 + 9 = 3 593 (0xE09)
0xE09 + 0x286 = 0x108F (este)
2º. Clique com o botão direito na janela do main no ollydbg, escolha "search for" ~> "all constants" e digite objectid do plate helm (0x108F)
Deverá aparecer isso:
Pressione a tecla Enter em um primeiro comando MOV. Você deve ver algo como um conjunto de MOVs
3º. Clique com o botão direto e escolha "go to" ~> "Next procedure" em seguida, suba um pouco até:
4º. Suba até o início da tabela de índice e lembre-se do endereço do início
IndexTable = 0x00531A14
5º. Clique com o botão direto e escolha "go to" ~> "expresion", digite o endereço do parâmetro da tabela e pressione OK
6º. Você terá o início da tabela de transição.
Não esqueça de lembrar o endereço da tabela de transição.
SwitchTable = 0x005317CC
Pressione CTRL+G, e digite o endereço da tabela e pressione Ok
7º. Agora você irá para a transição. Lembre-se do valor no círculo vermelho iremos precisar "comando SUB = 1"
8º. Agora localize o ID do Crossbow do Guarda-NPC no arquivo monster.txt... Este é o 247 ou 0xF7.
Subtraia o valor do ID do item do valor do comando SUB
0xF7 - 1 = 0xF6
Localize o índice da tabela de índices:
IndexTable + 0xF6 = 0x00531A14 + 0xF6 = 0x00531B0A
Pressione CTRL+G e digite o resultado e pressione OK, se calculou certo então você deve ir direto para o índice da tabela
Lembre-se do índice = 0x77
9º. Calcule o endereço da transição:
SwitchTable + index*4 = 0x005317CC + 0x77*4 = 0x005317CC + 0x1DC = 0x005319A8
Pressione CTRL+G e digite o resultado e pressione OK
10º. Pressione a tecla Enter sobre o valor, onde irá ser redirecionado para depois do ultimo comando go-to (CTRL+G), Set do Crossbow
Guard
Em EBP-10 parece ser o ponteiro para a estrutura viewport
Em todo o caso:
+0x250 offset para capacetes; 0x108F - plate helm
+0x270 offset para peitoral; 0x128F - plate armor
+0x290 offset para calças; 0x148F - plate pants
+0x2B0 offset para luvas; 0x168F - plate gloves
+0x2D0 offset para botas; 0x188F - plate boots
+0x2F0 offset para mão direita; 0x0A91 - light crossbow
+0x310 offset para mão esquerda; 0x0A8D - bolt
Você terá que mudar esses valores (não mude os offsets somente os objectIds), para que o Guarda-NPC seja vestido com os desejar
Em seguida salve o Main.exe, clique com o botão direito e escolha "Copy to executable" ~> "All modifications, then save it"
Outro exemplo:
1º. Vamos localizar o Set do Malron:
Nos temos os offsets adicionais:
+0x252 offset - nível do capacete; 7 - +7
+0x272 offset - nível do peitoral;
+0x292 offset - nível da calça;
+0x2B2 offset - nível das luvas;
+0x2D2 offset - nível das botas;
+0x2F2 offset - nível da arma da mão direita; 8 - +8
2º. E mais, localize o Set do Elf Soldier, aqui está, porém não temos o comando MOV mas veremos dentro deste processo
3º. Este é maior que o Marlon
+0x330 offset - Wings;
+0xC offset - Scale; (cool thing, you can make mobs and npcs small like bugs, or big like, don't know who )
+0x145 offset - Action; action that is played when you meet npc or mob, but it's played only once
Então, assim pode-se mudar a aparência de alguns NPC (que usam sets) e mobs (por exemplo, cursed wizard em LT3) sem fazer qualquer uso
de dll ou edição de texturas, apenas codificando o hex no Main
Elf Soldier in Guardian + Angel Wings:
Guard in RD + bronze shield + one of the added swords:
Forcing all mobs and npcs to 1 model:
Chaos goblin asses:
- Big NPCs:
0xC - é um offset na estrutura, por exemplo em C++
struct BLABLA
{
int blabla1; //+0x0
int blabla2; //+0x4
int blabla3; //+0x8
int blabla4; //+0xC
};
Onde pode-se mudar a escala de tamanho do NPC Elf Soldier somente. Para outros NPCs existe uma função, que preenche este campo, de acordo com o tipo de NPC.
Mov [dword ds:eax+c], 3F800000
0x3f800000 - it's float 1.0, so scale field is represented as float.
change this value - and u'll change elf soldier scale
Créditos: Gembrid (RZ Int)
Offsets para v.1.04J Main 3D:
Crossbow guard - 00530595
Elf Soldier - 0052BA8A
Download dos Programas utilizados
OllyDbg
WinCauculator = Cauculadora do Windows
Brain.exe
Hands.Dll
edição de texturas, apenas codificando hex no Main (em caracteres viewport)
Obs.: funciona para todas as versões.
O principal objetivo é a mudança do Set do NPC Crossbow Guard
Requisitos necessários:
1. Ollydbg.
2. Win Calculator
3. Brain.exe
4. Hands.dll
Para este tópico você deve saber como calcular o ObjectId dos itens no main.exe.
Exemplo: calculo do ObjectID de "Lightning Sword"
ObjectID = Offset (valor localizado) + ItemdID (0*512+14 = 14 (0x0E))
Para o Offset = 0x285, ObjectID = 0x293
Exemplo: calculo do ItemID com ObjectID=0x293 e Offset=0x285, com 512 max de itens por tipo:
ItemId = ObjectId - Offset = 0x293 - 0x285 = 0x0E (14)
ItemType = ItemId / MaxItems = 14 / 512 = 0 (divisão por inteiro)
ItemIndex = ItemId % MaxItems = 14 % 512 = 14 (remainder of the integer division)
Se olhar no arquivo items.txt ou .bmd encontrará o tipo do item: Type = 0 e Index = 14 é Lightning Sword
1º. Inicie o OllyDBG e abra o Main.exe por ele
Obs.: deve calcular o objectid dos itens, por exemplo, vamos calcular do plate helm com offset 0x286:
7*512 + 9 = 3 593 (0xE09)
0xE09 + 0x286 = 0x108F (este)
2º. Clique com o botão direito na janela do main no ollydbg, escolha "search for" ~> "all constants" e digite objectid do plate helm (0x108F)
Deverá aparecer isso:
Pressione a tecla Enter em um primeiro comando MOV. Você deve ver algo como um conjunto de MOVs
3º. Clique com o botão direto e escolha "go to" ~> "Next procedure" em seguida, suba um pouco até:
4º. Suba até o início da tabela de índice e lembre-se do endereço do início
IndexTable = 0x00531A14
5º. Clique com o botão direto e escolha "go to" ~> "expresion", digite o endereço do parâmetro da tabela e pressione OK
6º. Você terá o início da tabela de transição.
Não esqueça de lembrar o endereço da tabela de transição.
SwitchTable = 0x005317CC
Pressione CTRL+G, e digite o endereço da tabela e pressione Ok
7º. Agora você irá para a transição. Lembre-se do valor no círculo vermelho iremos precisar "comando SUB = 1"
8º. Agora localize o ID do Crossbow do Guarda-NPC no arquivo monster.txt... Este é o 247 ou 0xF7.
Subtraia o valor do ID do item do valor do comando SUB
0xF7 - 1 = 0xF6
Localize o índice da tabela de índices:
IndexTable + 0xF6 = 0x00531A14 + 0xF6 = 0x00531B0A
Pressione CTRL+G e digite o resultado e pressione OK, se calculou certo então você deve ir direto para o índice da tabela
Lembre-se do índice = 0x77
9º. Calcule o endereço da transição:
SwitchTable + index*4 = 0x005317CC + 0x77*4 = 0x005317CC + 0x1DC = 0x005319A8
Pressione CTRL+G e digite o resultado e pressione OK
10º. Pressione a tecla Enter sobre o valor, onde irá ser redirecionado para depois do ultimo comando go-to (CTRL+G), Set do Crossbow
Guard
Em EBP-10 parece ser o ponteiro para a estrutura viewport
Em todo o caso:
+0x250 offset para capacetes; 0x108F - plate helm
+0x270 offset para peitoral; 0x128F - plate armor
+0x290 offset para calças; 0x148F - plate pants
+0x2B0 offset para luvas; 0x168F - plate gloves
+0x2D0 offset para botas; 0x188F - plate boots
+0x2F0 offset para mão direita; 0x0A91 - light crossbow
+0x310 offset para mão esquerda; 0x0A8D - bolt
Você terá que mudar esses valores (não mude os offsets somente os objectIds), para que o Guarda-NPC seja vestido com os desejar
Em seguida salve o Main.exe, clique com o botão direito e escolha "Copy to executable" ~> "All modifications, then save it"
Outro exemplo:
1º. Vamos localizar o Set do Malron:
Nos temos os offsets adicionais:
+0x252 offset - nível do capacete; 7 - +7
+0x272 offset - nível do peitoral;
+0x292 offset - nível da calça;
+0x2B2 offset - nível das luvas;
+0x2D2 offset - nível das botas;
+0x2F2 offset - nível da arma da mão direita; 8 - +8
2º. E mais, localize o Set do Elf Soldier, aqui está, porém não temos o comando MOV mas veremos dentro deste processo
3º. Este é maior que o Marlon
+0x330 offset - Wings;
+0xC offset - Scale; (cool thing, you can make mobs and npcs small like bugs, or big like, don't know who )
+0x145 offset - Action; action that is played when you meet npc or mob, but it's played only once
Então, assim pode-se mudar a aparência de alguns NPC (que usam sets) e mobs (por exemplo, cursed wizard em LT3) sem fazer qualquer uso
de dll ou edição de texturas, apenas codificando o hex no Main
Elf Soldier in Guardian + Angel Wings:
Guard in RD + bronze shield + one of the added swords:
Forcing all mobs and npcs to 1 model:
Chaos goblin asses:
- Big NPCs:
0xC - é um offset na estrutura, por exemplo em C++
struct BLABLA
{
int blabla1; //+0x0
int blabla2; //+0x4
int blabla3; //+0x8
int blabla4; //+0xC
};
Onde pode-se mudar a escala de tamanho do NPC Elf Soldier somente. Para outros NPCs existe uma função, que preenche este campo, de acordo com o tipo de NPC.
Mov [dword ds:eax+c], 3F800000
0x3f800000 - it's float 1.0, so scale field is represented as float.
change this value - and u'll change elf soldier scale
Créditos: Gembrid (RZ Int)
Offsets para v.1.04J Main 3D:
Crossbow guard - 00530595
Elf Soldier - 0052BA8A
Download dos Programas utilizados
OllyDbg
WinCauculator = Cauculadora do Windows
Brain.exe
Hands.Dll
Editado por um moderador: