Advertisement
Guest User

RenderBug Decompiled 75% (1.03.08)

a guest
May 4th, 2021
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.19 KB | None | 0 0
  1. //----- (004AC8A2) --------------------------------------------------------
  2. char cPets::RenderBug(int pObject,char GetFlag)
  3. {
  4. char SetObjFlag;
  5. // ----
  6. float ObjectPosY;
  7. float ObjectPosX;
  8. int MaxPetCount;
  9. float Formula;
  10. vec3_t Light;
  11. Vector(0.f,0.f,0.f,Light); // Initializamos 1 nuevo vector luz o color para crear el Sprite del angelito, o bien podemos usar: /*+156*/, /*+160*/, /*+164*/ del vec3_t Light o Luz original de la estructura del personaje -> Character_Struct (llamada originalmente en el primer argumento de la funcion como puntero).
  12. // ----
  13. LPOBJ lpObj = &*(OBJSTRUCT*)pObject; // esto solo funciona porque el main fué compilado para 32 bits :D, pero de cualquier manera el argumento 1 -> Arg1 de esta funcion es: Character_Struct *Hero, tambien puede ser: OBJECT *o
  14. // ----
  15. if(lpObj->IsRender) // Sí el main esta en algun caso de Viewport
  16. {
  17. if(GetFlag) // Checkea la bandera seteada por el: "Momento" del main, sí coincide entonces setea la bandera en 1 para usar el Viewport para dibujar sprites
  18. {
  19. SetObjFlag = 1; // Esta variable le pasa 1 resultado a: lpObj->IsObjAngle o "CreatedViewport del Objeto".
  20. }
  21. else
  22. {
  23. ObjectPosY = lpObj->Position[1] * 0.0099999998; // -> este valor el main lo usa varias veces, no estoy seguro de que sea pero podria ser 1 constante de algo como fuerza gravitatoria o algo por el estilo, por eso (creo yo) multiplica la posicion Y del objeto por esa constante
  24. ObjectPosX = lpObj->Position[0] * 0.0099999998; // -> lo raro es que tambien lo hace con la posicion en X jaja pero supongo que tiene sentido ya que ambas forman parte del vector posicion.
  25. SetObjFlag = pTestFrustrum2D(ObjectPosX,ObjectPosY,-20.f); // -> esto es raro :D -20.0 no se porqué lo usará en el vector del angulo Z, pero puede tener que ver con las perspectivas
  26. }
  27. // ----
  28. lpObj->IsObjAngle = SetObjFlag; // -> aca setea el viewport en 1
  29. // ----
  30. if(lpObj->IsObjAngle) // tambien se podría haber hecho aca, pero supongo que alguna otra funcion le pasa como parametro las banderas al argumento 2 de esta funcion, y en base a eso decide sí setea el viewport en 1 o sí crea la posicion del sprite para el angelito en base al calculo del frustrum2D
  31. {
  32. if ( lpObj->ObjModel472->ObjectModelID != 812
  33. && lpObj->ObjectID != GET_OBJECT_INDEX(13,0) ) // Checkea sí el ID de Objetos es distinto del Player o el Angelito, sí es así regresa 1 o true
  34. return 1;
  35. // ----
  36. MaxPetCount=0; // esta variable setea el numero maximo de pets por mapa en el Viewport de los Personajes a: 10
  37. // ----
  38. if(pIsBuff((char*)(*(DWORD*)(pObject + 472) + 484),18)) // -> Checkea el Buff State del Personaje, para buscar Invisibilidad activa
  39. MaxPetCount=10; // -> Sí la Invisibilidad esta activa entonces 0 pets visibles (por causa de los bucles creados por CreateBug y CreateBugSub que cuentan de 0 a 10 porque tambien crean las mariposas en Noria/los Peces de lorencia y algunos otros: "Bichos" del viewport X_X! mal Webzen muy mal :D).
  40. // ----
  41. pRenderObject((LPOBJ)pObject,0,0,MaxPetCount); // -> pasa parametros a RenderObject para crear o no el Viewport
  42. // ----
  43. Formula = (double)(rand() % 30 + 70) * 0.009999999776482582;
  44. // ----
  45. if ( lpObj->ObjectID == GET_OBJECT_INDEX(13,0) ) // -> Sí el ID del objeto en el Viewport actual es el Guardian Angel, crea el Sprite
  46. {
  47. Vector(Formula*0.5f,Formula*0.8f,Formula*0.6f,Light);
  48. pCreateSprite(32002,lpObj->Position,1.f,Light,lpObj,0.f,0);
  49. }
  50. }
  51. // ----
  52. if(gPets.PlayerMap(lpObj)==TRUE) // -> Sí el personaje NO esta en alguno de los Chaos Castle
  53. {
  54. switch(lpObj->ObjectID) // -> Cambia los ID de los Objetos en el Viewport actual
  55. {
  56. case GET_OBJECT_INDEX(13,0): // -> Para el caso de Angelito Blanco Setea Tamaño en: 0.7f de: 1.0f (Maximo)
  57. {
  58. lpObj->Scale = 0.7f;
  59. break;
  60. }
  61. // ----
  62. default:
  63. {
  64. if(lpObj->ObjectID!=383 && lpObj->ObjectID!=384
  65. && lpObj->ObjectID!=385 && lpObj->ObjectID!=386
  66. && !gPets.IsNewPet(lpObj->ObjectID)) // -> Por defecto sí el ID del Objeto no es Fenrir o Custom Pet entonces setea el tamaño en 1.0f
  67. {
  68. lpObj->Scale = 1.f;
  69. }
  70. else
  71. {
  72. for(int i=NULL;i<MAX_CUSTOM_ITEMS;i++)
  73. {
  74. if(lpObj->ObjectID == GET_OBJECT_INDEX(gPets.m_Pet[i].Type,gPets.m_Pet[i].Index)) // -> Sí algun ID de Objeto coincide con alguno de los ID de los Custom Pets, entonces toma el ID del Objeto y crea el objeto del tamaño seteado.
  75. {
  76. lpObj->Scale = gPets.m_Pet[i].PetSize; // -> Acá setea el tamaño para cada objeto
  77. break; // -> Sí ya encontró cada caso de coincidencia entre los objetos del viewport (pets) y los objetos definidos en mi estructura, le digo que pare para que no siga.
  78. }
  79. }
  80. }
  81. break; // -> Acá le vuelvo a decir que pare, para que no siga buscando entre todos los objetos del viewport, ya que los objetos del mapa (algunos) tambien son utilizados para renderizar sprites/particulas y otros efectos de posicion.
  82. }
  83. }
  84. }
  85. return 1; // -> esto podria ser sencillamente: true, es decir return true; ya que la funcion bien puede ser tipo: bool en lugar de char, pero da igual sí lo que devolvemos es: 1 o 0,
  86. }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement