Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //----- (004AC8A2) --------------------------------------------------------
- char cPets::RenderBug(int pObject,char GetFlag)
- {
- char SetObjFlag;
- // ----
- float ObjectPosY;
- float ObjectPosX;
- int MaxPetCount;
- float Formula;
- vec3_t Light;
- 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).
- // ----
- 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
- // ----
- if(lpObj->IsRender) // Sí el main esta en algun caso de Viewport
- {
- 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
- {
- SetObjFlag = 1; // Esta variable le pasa 1 resultado a: lpObj->IsObjAngle o "CreatedViewport del Objeto".
- }
- else
- {
- 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
- 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.
- 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
- }
- // ----
- lpObj->IsObjAngle = SetObjFlag; // -> aca setea el viewport en 1
- // ----
- 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
- {
- if ( lpObj->ObjModel472->ObjectModelID != 812
- && 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
- return 1;
- // ----
- MaxPetCount=0; // esta variable setea el numero maximo de pets por mapa en el Viewport de los Personajes a: 10
- // ----
- if(pIsBuff((char*)(*(DWORD*)(pObject + 472) + 484),18)) // -> Checkea el Buff State del Personaje, para buscar Invisibilidad activa
- 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).
- // ----
- pRenderObject((LPOBJ)pObject,0,0,MaxPetCount); // -> pasa parametros a RenderObject para crear o no el Viewport
- // ----
- Formula = (double)(rand() % 30 + 70) * 0.009999999776482582;
- // ----
- if ( lpObj->ObjectID == GET_OBJECT_INDEX(13,0) ) // -> Sí el ID del objeto en el Viewport actual es el Guardian Angel, crea el Sprite
- {
- Vector(Formula*0.5f,Formula*0.8f,Formula*0.6f,Light);
- pCreateSprite(32002,lpObj->Position,1.f,Light,lpObj,0.f,0);
- }
- }
- // ----
- if(gPets.PlayerMap(lpObj)==TRUE) // -> Sí el personaje NO esta en alguno de los Chaos Castle
- {
- switch(lpObj->ObjectID) // -> Cambia los ID de los Objetos en el Viewport actual
- {
- case GET_OBJECT_INDEX(13,0): // -> Para el caso de Angelito Blanco Setea Tamaño en: 0.7f de: 1.0f (Maximo)
- {
- lpObj->Scale = 0.7f;
- break;
- }
- // ----
- default:
- {
- if(lpObj->ObjectID!=383 && lpObj->ObjectID!=384
- && lpObj->ObjectID!=385 && lpObj->ObjectID!=386
- && !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
- {
- lpObj->Scale = 1.f;
- }
- else
- {
- for(int i=NULL;i<MAX_CUSTOM_ITEMS;i++)
- {
- 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.
- {
- lpObj->Scale = gPets.m_Pet[i].PetSize; // -> Acá setea el tamaño para cada objeto
- 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.
- }
- }
- }
- 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.
- }
- }
- }
- 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,
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement