Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Autor Topic: RenderDarkHorseSkill Función Decompilada Main 1.03.16 (GMO)  (Visto 1813 veces)

0 Miembros and 1 Guest are viewing this topic.

Offline Nemesis Posteado: November 15, 2020, 07:01:26 AM | Modificado: November 16, 2020, 05:38:45 PM by Nemesis

  • C++ Coder
  • 0 puntos por ventas
  • *
  • *
  • Rank: Heroe
  • Posts: 170
  • Gracias recibida: 6737
  • ar
Buenas gente, hoy quiero Aportar formalmente mi decompilacion de la función: "RenderDarkHorseSkill" para main.exe version: 1.03.16 -> 1.03p (Protocolo: Global Mu Online), Es de publico conocimiento que esta decompilacion pero digamos lo así: "En Crudo", ya fué compartida por otros Usuarios anteriormente aquí en el foro: @emersonx13 y @kaiocnx en los siguientes 2 temas:

RenderDarkHorseSkill by emersonx13:
http://tuservermu.com.ve/index.php?topic=35655.0

RenderDarkHorseSkill by kaiocnx:
http://tuservermu.com.ve/index.php?topic=35919.0

Códigos de la misma función pero digamos pasada en limpio (lo mas exacto posible a como debería ser vista desde las fuentes originales del main):



PD: Como seguramente mas de 1 de ustedes habrá notado, quien estuvo realmente detrás de este desarrollo fui yo... tanto para main: 1.03.16 (GMO) como para main: 1.01.46 (KOR), pero en ningún caso compartí con estas 2 personas mi re-construcción parcial de la: "Character_Struct" del main o como a mi me gusta llamarla la: "ObjectStruct" del main (nombre totalmente valido si pensamos en los modelos 3D BMD que integran las partes del cuerpo de los personajes como simples objetos 3D del Juego no muy diferentes si se quiere a los demás objetos que son renderizados en pantalla por el main del cliente... es decir: Piedras,Casitas y demás mierda 3D del cliente, pero con una serie de funciones especificas cuando trabajan en conjunto por EJ: "Armar el Personaje como tal, para luego ser renderizado y actualizado conforme se actualizan los movimientos del Juego mismo"). Jajaja sepan disculpar si me explaye demás xD, en fin lo que busco con este Aporte es ver si mas personas se animan a compartir lo que tengan trabajado en términos de: "Renderizacion" de Personajes y/o Habilidades (Skills) de los mismos xD, bien podría decompilar completamente todas y cada una de las funciones pertinentes a estas 2 cosas en mi main yo mismo y luego venir y aportar para todos ese trabajo xD, pero considero interesante desafiar a toda la comunidad Mu Online Latino-Americana a que me muestren sus habilidades (que por lo que vi en varios temas distintos en esta misma sección, existen mas de 1 persona aquí en el foro que conoce los mecanismos para la re-construcción parcial de estructuras del cliente), algo que yo daba por hecho que eran muy pocos los que sabían hacerlo... Así que por este motivo decidí que no voy a hacer el tan esperado vídeo-tutorial para enseñar a hacer esto porque por lo visto no va a ser necesario xD. En fin si alguien tiene ganas de compartir sus desarrollos referentes a estos temas, voy a estar mas que encantado de añadir todo detallando Créditos y demás al post principal.

PD 2: Para serles completamente sincero... la verdad es que no encuentro en donde deje (en mi ordenador) la reconstrucción parcial de la estructura xD jajaja puede que la: "re-haga" y la agregue luego a este post para todos junto con mas info sobre este tema y mas detalles sobre como todas estas cosas funcionan y/o trabajan en el código del main.

PD 3: Aun que no encuentro la estructura parcialmente re-construida para main: 1.03.16 (GMO), jajaja si tengo la que re-construí parcialmente para main: 1.04J (Season 3 Episode 1) Korea, el otro día y que mostré en un: pastebin xD asique les dejo esa de guía para mains de versiones menores que: 1.04.10 o inclusive: 1.04.10 como tal. xD (posiblemente en mains de versiones realmente de la vieja escuela tales como: 0.97b/0.97c/0.97d y/o 0.99A+/0.99B+/0.99C+, etc que son los mas fáciles de conseguir comúnmente hoy en día estas posiciones varíen un poco xD).

Character_Struct parcialmente re-construida para main version: 1.04.10 (1.04J) Protocolo: KOR



Link del pastebin (en caso de que no se vea bien o centrada):



Para main.exe version: 1.04.05 (1.04e) Protocolo: Global Mu Online (Season 6.3) por @louis:

Code: [Select]
#define pAngleMatrix2			((int(__cdecl*)(vec3_t a1, vec34_t a2)) 0x959CE0)
#define pVectorRotate2 ((int(__cdecl*)(vec3_t a1, vec34_t a2, vec3_t a3)) 0x95A1E0)
#define pMoveSceneFrame *(int*)0x00E8CB20
#define pEarthQuake *(float*)0x08787D48

typedef struct //648? 848!!
{
/*+0*/ int Prev;
/*+4*/ BYTE IsSetted;
/*+5*/ BYTE Unknown5;
BYTE gap01[3];
/*+9*/ BYTE Unknown9;
/*+10*/ BYTE Unknown10;
/*+11*/ BYTE Unknown11;
/*+12*/ BYTE Unknown12;
/*+13*/ BYTE Unknown13;
/*+14*/ BYTE Unknown14;
/*+15*/ BYTE Unknown15;
/*+16*/ BYTE Unknown16;
/*+17*/ BYTE Unknown17;
/*+18*/ WORD AnimationID;
/*+20*/ WORD Unknown20;
/*+22*/ BYTE Unknown22;
/*+23*/ BYTE Unknown23;
/*+24*/ BYTE ObjectType;
/*+25*/ BYTE Unknown25;
/*+26*/ BYTE Unknown26;
/*+27*/ BYTE Unknown27;
/*+28*/ BYTE Unknown28;
/*+29*/ BYTE Unknown29;
/*+30*/ BYTE OnAttacking;
/*+31*/ BYTE Unknown31;
/*+32*/ BYTE Unknown32;
/*+33*/ BYTE Unknown33;
/*+34*/ BYTE Unknown34;
/*+35*/ BYTE Unknown35;
/*+36*/ WORD Unknown36;
/*+38*/ WORD Unknown38;
BYTE gap05[8];
/*+48*/ DWORD SkinID;
/*+52*/ DWORD ActionType; //Fireworks
/*+56*/ DWORD Unknown56;
/*+60*/ DWORD Unknown60;
/*+64*/ DWORD Unknown64; //Count ?
/*+68*/ DWORD Transparency;
/*+72*/ float Unknown72;
/*+76*/ float Unknown76;
/*+80*/ float Unknown80;
BYTE gap06[8];
/*+92*/ DWORD Time; //Tempo de duração ?
/*+96*/ float Scale;
/*+100*/ float Unknown100;
/*+104*/ float Unknown104;
/*+108*/ float Unknown108;
/*+112*/ float Unknown112;
/*+116*/ float Unknown116;
/*+120*/ float Unknown120;
/*+124*/ float Unknown124;
/*+128*/ float Unknown128;
/*+132*/ float Unknown132;
/*+136*/ float Unknown136;
/*+140*/ float CoordX;
/*+144*/ float CoordY;
/*+148*/ float Unknown148;
/*+152*/ float Unknown152;
/*+156*/ float ColorR;
/*+160*/ float ColorG;
/*+164*/ float ColorB;
/*+168*/ float Unknown168;
/*+172*/ float Unknown172;
/*+176*/ float Unknown176;
/*+180*/ float Unknown180;
/*+184*/ float Unknown184;
/*+188*/ float Unknown188;
/*+192*/ float Unknown192;
/*+196*/ float Unknown196;
/*+200*/ float Unknown200;
/*+204*/ VAngle Unknown204;
/*+216*/ VAngle Unknown216;
/*+228*/    VAngle  Unknown228;
/*+240*/    VAngle  SelectZone; //ou o de cima
/*+252*/ float VecPosX;
/*+256*/ float VecPosY;
/*+260*/ float VecPosZ;
/*+264*/ VAngle WorldPos;
BYTE gap11[148];
/*+424*/ ObjectModel_424 Unknown424;
/*+472*/ VAngle Unknown472;
BYTE gap12[164];
/*+484*/
} ObjectModel, * lpModelObj;

Code: [Select]
void RenderDarkHorseSkill(lpModelObj lpObjModel, lpViewObj lpObj)
{
if (lpObjModel && lpObj)
{
++lpObjModel->OnAttacking;

if ( !(pMoveSceneFrame % 10) )
pCreateEffect(32279, &lpObjModel->VecPosX, &lpObjModel->WorldPos.X, &lpObjModel->ColorR, 0, 0, -1, 0, 0, 0, 0.0, -1);

if ( lpObjModel->CoordX < 8.0 || lpObjModel->CoordX > 9.5 )
{
if ( lpObjModel->OnAttacking == 19 )
{
pCreateEffect(301, &lpObjModel->VecPosX, &lpObjModel->WorldPos.X, &lpObjModel->ColorR, 0, (int)lpObjModel, -1, 0, 2, 0, 0.0, -1);
lpObjModel->OnAttacking = -3;
}
}
else
{
if ( lpObjModel->OnAttacking % 2 == 1 )
{
vec3_t WorldPos;
vec3_t AnglePos;

Vector(0.0, (double)(lpObjModel->OnAttacking / 2) * 150.0, 0.0, WorldPos);
Vector(0.0, 0.0, (double)(rand() % 360), AnglePos);

vec34_t Matrix;
vec3_t ResultPosition;

for (int i = 0; i < 6; ++i )
{
AnglePos[2] += 60;

pAngleMatrix2(AnglePos,Matrix);
pVectorRotate2(WorldPos,Matrix,ResultPosition);

ResultPosition[0] += lpObjModel->VecPosX;
ResultPosition[1] += lpObjModel->VecPosY;
ResultPosition[2] += lpObjModel->VecPosZ;

pCreateEffect((rand() % 2) + 331, ResultPosition, &lpObjModel->WorldPos.X, &lpObjModel->ColorR, 0, 0, -1, 0, 0, 0, 0.0, -1);
}
}
pEarthQuake = (double)(rand() % 3 - 3) * 0.699999988079071;
}
}
}

Video-Test hecho por: @louis en Season 6.3 (modificando ID de efectos originales):



Cambiando este ID de Efecto:

Code: [Select]
pCreateEffect((rand() % 2) + 331, ResultPosition, &lpObjModel->WorldPos.X, &lpObjModel->ColorR, 0, 0, -1, 0, 0, 0, 0.0, -1);

Por este ID de Efecto:

Code: [Select]
pCreateEffect(229, ResultPosition, &lpObjModel->WorldPos.X, &lpObjModel->ColorR, 0, 0, -1, 0, 0, 0, 0.0, -1);

Otra modificación hecha por: @louis es la siguiente:

Code: [Select]
void RenderDarkHorseSkill(lpModelObj lpObjModel, lpViewObj lpObj)
{
if (lpObjModel && lpObj)
{
++lpObjModel->OnAttacking;

if ( !(pMoveSceneFrame % 10) )
{

vec3_t Color;

Color[0] = 1.0;
Color[1] = 0.0;
Color[2] = 0.0;

pCreateEffect(32279, &lpObjModel->VecPosX, &lpObjModel->WorldPos.X, Color, 6, 0, -1, 0, 0, 0, 0.0, -1);

pCreateEffect(223, &lpObjModel->VecPosX, &lpObjModel->WorldPos.X, &lpObjModel->ColorR, 1, 0, -1, 0, 0, 0, 0.0, -1);
}

if ( lpObjModel->CoordX < 8.0 || lpObjModel->CoordX > 9.5 )
{
if ( lpObjModel->OnAttacking == 19 )
{
//pCreateEffect(301, &lpObjModel->VecPosX, &lpObjModel->WorldPos.X, &lpObjModel->ColorR, 0, (int)lpObjModel, -1, 0, 2, 0, 0.0, -1);
lpObjModel->OnAttacking = -3;


}
}
else
{
if ( lpObjModel->OnAttacking % 2 == 1 )
{
vec3_t WorldPos;
vec3_t AnglePos;

Vector(0.0, (double)(lpObjModel->OnAttacking / 2) * 150.0, 0.0, WorldPos);
Vector(0.0, 0.0, (double)(rand() % 360), AnglePos);

vec34_t Matrix;
vec3_t ResultPosition;

for (int i = 0; i < 6; ++i )
{
AnglePos[2] += 60;

pAngleMatrix2(AnglePos,Matrix);
pVectorRotate2(WorldPos,Matrix,ResultPosition);

ResultPosition[0] += lpObjModel->VecPosX;
ResultPosition[1] += lpObjModel->VecPosY;
ResultPosition[2] += lpObjModel->VecPosZ;

pCreateEffect(229, ResultPosition, &lpObjModel->WorldPos.X, &lpObjModel->ColorR, 0, 0, -1, 0, 0, 0, 0.0, -1);
}
}
pEarthQuake = (double)(rand() % 3 - 3) * 0.699999988079071;
}
}
}

Resultado en Video de los Tests de: @louis con estas modificaciones hechas al código original:



Créditos:
Webzen
@Nemesis
@louis (por adaptar el source muy muy buen trabajo bro).


Offline emersonx13 #1 Posteado: November 15, 2020, 10:09:55 AM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • 3D Maker
  • 0 puntos por ventas
  • *
  • *
  • Rank: Puto amo
  • Posts: 523
  • Gracias recibida: 33542
  • br
Donate for my Work

BTC: 1HnXqN1wAh3EUC2Gi4WVH5Cj8fmihgeQze

Offline louis #2 Posteado: November 15, 2020, 01:11:25 PM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • C++ Coder
  • +11 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 844
  • Gracias recibida: 37150
  • br
Update 36 is ready!!!

Offline Nemesis #3 Posteado: November 15, 2020, 02:17:08 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • *
  • Rank: Heroe
  • Posts: 170
  • Gracias recibida: 6737
  • ar
For main 1.04E (Season 6) (tested)
 

Buen trabajo bro ! en adaptar el codigo para main 1.04E, en fin ya que hiciste algunos tests seria bueno si podes dejar 1 o 2 imagenes o quizas mejor 1 video :D modificando alguno de los efectos en este skill :D (mi pc es de bajos recursos asique por ello no lo hago yo).

Gracias:


Offline louis #4 Posteado: November 15, 2020, 06:30:52 PM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • C++ Coder
  • +11 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 844
  • Gracias recibida: 37150
  • br
For main 1.04E (Season 6) (tested)
 

Buen trabajo bro ! en adaptar el codigo para main 1.04E, en fin ya que hiciste algunos tests seria bueno si podes dejar 1 o 2 imagenes o quizas mejor 1 video :D modificando alguno de los efectos en este skill :D (mi pc es de bajos recursos asique por ello no lo hago yo).

Gracias xD

Changed to fire ball hahahaha




Update 36 is ready!!!

Offline louis #5 Posteado: November 16, 2020, 01:31:44 PM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • C++ Coder
  • +11 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 844
  • Gracias recibida: 37150
  • br
guia como crear nuevas skills , jajajaja




Update 36 is ready!!!

Offline Nemesis #6 Posteado: November 16, 2020, 05:41:13 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • *
  • Rank: Heroe
  • Posts: 170
  • Gracias recibida: 6737
  • ar
Tema principal actualizado, agregado el trabajo hecho por: @louis y tambien los video Tests y modificaciones explicadas a detalle.

Gracias:


Offline Denis Alves #7 Posteado: December 19, 2020, 04:34:24 PM

  • C++ Coder
  • +2 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 270
  • Gracias recibida: 6679
  • br

Offline showmax #8 Posteado: December 23, 2020, 06:05:23 AM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 206
  • Gracias recibida: 4640
  • vn

Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate


 

Related Topics

  Subject / Started by Replies Last post
1 Replies
922 Views
Last post November 17, 2016, 11:53:28 PM
by malon2k
0 Replies
1773 Views
Last post November 09, 2017, 08:20:47 AM
by Nemesis
11 Replies
1740 Views
Last post August 15, 2020, 08:26:26 PM
by ConejoMalo
1 Replies
1771 Views
Last post August 21, 2023, 04:12:42 PM
by wellwisher22
0 Replies
485 Views
Last post November 08, 2023, 11:14:24 PM
by Feche