New ELU format Reversed (post-1.5 src)

Page 1 of 3 123 LastLast
Results 1 to 15 of 34
  1. #1
    Retired. Don't PM. SecretsOThePast is offline
    DeveloperRank
    Jan 2009 Join Date
    643Posts

    New ELU format Reversed (post-1.5 src)

    Hi RaGEZONE,

    Here's the new ELU format that I have been working on. It is compatible with all the new sets MAIET has made on ijji up to now.

    I've decided to release this because if I don't, no servers will have the new sets and I will forever be remembered as someone who withhold information from the community for personal gain. I have no ties to any specific gunz server, and thus, I am releasing this as an effort to advance our pseudo-society as a whole, not for a specific server. I only ask that in return, if you have any improvements, to post them in this thread. I am sure there are things wrong with it as some sets end up crashing.

    You can use the Challenge Quest NPCs with this, however, you will have to use the old quest format with them.

    No support for CQ will be added, as I do not have the time to add CQ into both the client and server. Other people do, though, and you can expect that in one certain server when they complete it. I do not have access to CQ nor am I going to be actively developing it, so don't ask.

    All of this was my work, except for the debugging ThePhailure772 did on determining whether or not the data itself was XOR'd. (which it ultimately was not, to my and his knowledge.)

    x1n also did the initial figuring out of the RMeshNode parts and the number count reading, even before the GunZ source was released. For that, I give him major props, and a lot of this was based on his 010 structure.

    And of course MAIET, for realizing that their old format was becoming a bit of a pain to maintain and coming up with a cool new solution for loading things more efficiently.

    Anyone looking to verify this information can look up the MCV (MAIET Character Viewer) tool with RealSpace2 compiled to support this new format. You can also get the same information by looking at the KGunZ Runnable, applying the structures to MZFile, RMeshNode, RMesh, and RMtrl in the current ELU loading function. Should they modify the ELU format again, it likely will always be in the same spot.

    Now that I have wasted your time reading that, here's the actual code behind it that makes it work:

    These are code sections, not the actual file:


    RMesh_Load.cpp (../RealSpace2/Source/RMeshLoad.cpp)
    Code:
    bool RMesh::ReadNewElu(MZFile* mzf, char* fname) {
    #define MZF_READ(x,y) { if(!mzf->Read((x),(y))) return false; }
    #define MZF_READ_XOR(x,y) { if(!mzf->Read((x),(y))) return false; }
    #define MZF_READ_XOR_SPECIAL(x,y) { if(!mzf->Read((x),(y))) return false; for (int i = 0; i < y; ++i) *(BYTE*)(x + i) ^= 0; }
      int i;
        unsigned short count_mesh = 0;
        MZF_READ_XOR(&count_mesh, 2);
    
      for(i=0; i < count_mesh; i++)
      {
    
        char Name[256];
        memset(Name, 0, sizeof(Name));
    
        unsigned short count_name = 0;
        unsigned short count_name_Parent = 0;
        MZF_READ_XOR(&count_name, 2);
        MZF_READ_XOR(Name  ,count_name );
        MZF_READ_XOR(&count_name_Parent, 2);
        RMeshNode* pMeshNode = new RMeshNode;
        D3DXMatrixIdentity(&pMeshNode->m_mat_base);
        pMeshNode->m_id = m_data_num;
        memset(pMeshNode->m_Parent, 0, sizeof(pMeshNode->m_Parent));
        pMeshNode->m_pParentMesh = this;
        pMeshNode->m_pBaseMesh = this;
        pMeshNode->SetName(Name);
        MZF_READ_XOR(pMeshNode->m_Parent, count_name_Parent );
        MZF_READ_XOR(pMeshNode->m_axis_scale,sizeof(D3DXVECTOR3) );
        MZF_READ_XOR(pMeshNode->m_mat_etc,sizeof(D3DXMATRIX) );
        MZF_READ_XOR(pMeshNode->m_mat_ref,sizeof(D3DXMATRIX) );
        MZF_READ_XOR(pMeshNode->m_mat_inv,sizeof(D3DXMATRIX) );
        MZF_READ_XOR(&pMeshNode->m_axis_rot_angle,sizeof(float) );
        MZF_READ_XOR(pMeshNode->m_mat_base,sizeof(D3DXMATRIX) );
        MZF_READ_XOR(pMeshNode->m_mat_ref_inv,sizeof(D3DXMATRIX) );
        MZF_READ_XOR(pMeshNode->m_axis_rot,sizeof(D3DXVECTOR3) );
        MZF_READ_XOR(&pMeshNode->m_axis_scale_angle,sizeof(float) );
        MZF_READ_XOR(pMeshNode->m_mat_local,sizeof(D3DXMATRIX) );
        MZF_READ_XOR(pMeshNode->m_mat_result,sizeof(D3DXMATRIX) );
        MZF_READ_XOR(pMeshNode->m_mat_scale,sizeof(D3DXMATRIX) );
        MZF_READ_XOR(pMeshNode->m_ap_scale,sizeof(D3DXVECTOR3) );
        MZF_READ_XOR(pMeshNode->m_mat_flip,sizeof(D3DXMATRIX) );
        
        CheckNameToType(pMeshNode);
        MZF_READ_XOR(&pMeshNode->m_point_num,4 );
    
        if(pMeshNode->m_point_num != 0) {
        
          pMeshNode->m_point_list = new D3DXVECTOR3[pMeshNode->m_point_num];
          memset(pMeshNode->m_point_list,0,pMeshNode->m_point_num * sizeof(D3DXVECTOR3));
          int p = 0;
          for (p = 0; p < pMeshNode->m_point_num; p++)
          {
          MZF_READ_XOR(pMeshNode->m_point_list[p],sizeof(D3DXVECTOR3));
          }
          pMeshNode->CalcLocalBBox();
        }
    
        //tex uv ±îÁö Æ÷ÇÔ
    
        MZF_READ_XOR(&pMeshNode->m_face_num,4 );
    
    
        if(pMeshNode->m_face_num) {
    
          pMeshNode->m_face_list = new RFaceInfo[pMeshNode->m_face_num];
          pMeshNode->m_face_normal_list = new RFaceNormalInfo[pMeshNode->m_face_num];
    
          memset(pMeshNode->m_face_list, 0, pMeshNode->m_face_num * sizeof(RFaceInfo));
    
            MZF_READ(pMeshNode->m_face_list,sizeof(RFaceInfo)*pMeshNode->m_face_num);
            MZF_READ(pMeshNode->m_face_normal_list,sizeof(RFaceNormalInfo)*pMeshNode->m_face_num);
    
        }
        /*
        if(pMeshNode->m_face_num) {
    
          pMeshNode->m_face_list = new RFaceInfo[pMeshNode->m_face_num];
          pMeshNode->m_face_normal_list = new RFaceNormalInfo[pMeshNode->m_face_num];
    
          memset(pMeshNode->m_face_list, 0, pMeshNode->m_face_num * sizeof(RFaceInfo));
    
          int p = 0;
          for (p = 0; p < pMeshNode->m_face_num; p++)
          {
          MZF_READ_XOR(&pMeshNode->m_face_list[p],sizeof(RFaceInfo));
          }
          int e = 0;
          for (e = 0; e < pMeshNode->m_face_num; e++)
          {
          MZF_READ_XOR(&pMeshNode->m_face_normal_list[e],sizeof(RFaceNormalInfo));
          }
          //MZF_READ_XOR(pMeshNode->m_face_list,sizeof(RFaceInfo)*pMeshNode->m_face_num);
          //MZF_READ_XOR(pMeshNode->m_face_normal_list,sizeof(RFaceNormalInfo)*pMeshNode->m_face_num);
        }*/
        
        MZF_READ_XOR(&pMeshNode->m_point_color_num,4 );
    
        if(pMeshNode->m_point_color_num) {
            pMeshNode->m_point_color_list = new D3DXVECTOR3 [pMeshNode->m_point_color_num];
            MZF_READ_XOR(pMeshNode->m_point_color_list,sizeof(D3DXVECTOR3)*pMeshNode->m_point_color_num);
        }
    
        if( (pMeshNode->m_point_num==0) || (pMeshNode->m_face_num==0) ) {
          pMeshNode->m_isDummyMesh = true;
        }
    
        MZF_READ_XOR(&pMeshNode->m_mtrl_id,4 );
    
        MZF_READ_XOR(&pMeshNode->m_physique_num,4 );
    
        if(pMeshNode->m_physique_num) {
          
          m_isPhysiqueMesh = true;
          pMeshNode->m_physique = new RPhysiqueInfo[pMeshNode->m_physique_num];
          ZeroMemory(pMeshNode->m_physique,pMeshNode->m_physique_num * sizeof(RPhysiqueInfo));
          
          for(int j=0;j<pMeshNode->m_physique_num;j++) {
            int infcount = 0;
            MZF_READ_XOR(&infcount,1 );
            pMeshNode->m_physique[j].m_num = infcount;
            for (int k=0; k<infcount;k++)
            {
              int countiname = 0;
              MZF_READ_XOR(&pMeshNode->m_physique[j].m_parent_id[k], 4);
              MZF_READ_XOR(&pMeshNode->m_physique[j].m_weight[k], 4);
              MZF_READ_XOR(&pMeshNode->m_physique[j].m_offset[k], 12);
              MZF_READ_XOR(&countiname,2 );  
              MZF_READ_XOR(&pMeshNode->m_physique[j].m_parent_name[k], countiname);
              
            }
          }
        }
        if(pMeshNode->m_point_color_num>0 && pMeshNode->m_PartsType == eq_parts_chest )
          pMeshNode->m_isClothMeshNode = true;
    
        m_list.PushBack(pMeshNode);
        
        m_data.push_back( pMeshNode );
        m_data_num++;
    
        if( MAX_MESH_NODE_TABLE != (int)m_data.capacity() )
        {
          mlog( "m_data number is not quite right..! (%d)\n", (int)m_data.capacity());
          return false;
        }
      }
      unsigned short count_mtrl;
      MZF_READ_XOR(&count_mtrl, 2);
      i = 0;
    
      if(count_mtrl)
      {
      for(i=0;i<count_mtrl;i++) {
    
        RMtrl* node = new RMtrl;
    
          MZF_READ_XOR(&node->m_mtrl_id    ,4 );
        MZF_READ_XOR(&node->m_sub_mtrl_id,4 );
    
        MZF_READ_XOR(&node->m_ambient ,sizeof(D3DXCOLOR) );
        MZF_READ_XOR(&node->m_diffuse ,sizeof(D3DXCOLOR) );
        MZF_READ_XOR(&node->m_specular,sizeof(D3DXCOLOR) );
    
        MZF_READ_XOR(&node->m_power,4 );
        MZF_READ_XOR(&node->m_sub_mtrl_num,4 );
        unsigned short count_name;
        unsigned short count_opa_name;
    
        MZF_READ_XOR(&count_name, 2 );
        memset(node->m_name, 0, sizeof(node->m_name));
        MZF_READ_XOR(node->m_name    , count_name  );
        memset(node->m_opa_name, 0, sizeof(node->m_opa_name));
        MZF_READ_XOR(&count_opa_name, 2 );
        MZF_READ_XOR(node->m_opa_name, count_opa_name );
        char twoside=0;
          MZF_READ_XOR(&twoside,sizeof(char) );
          node->m_bTwoSided = twoside ? false : true;
        char additive = 0;
          MZF_READ_XOR(&additive,sizeof(char) );
    	  node->m_bAdditive = additive ? false : true;
       int alpha_test = 0;
          MZF_READ_XOR(&alpha_test,sizeof(int) );
          node->m_nAlphaTestValue = alpha_test;
          node->m_bAlphaTestMap = alpha_test != 0;  
      char diffuse = 0;
          MZF_READ_XOR(&diffuse,sizeof(char) );
    	  node->m_bDiffuseMap = diffuse ? false : true;
      char alpha_map = 0;
          MZF_READ_XOR(&alpha_map,sizeof(char) );
          node->m_bAlphaMap = alpha_map ? false : true;
    
    
    
        node->CheckAniTexture();
    
        m_mtrl_list_ex.Add(node);
      }
      }
    
      return true;
    #undef MZF_READ
    
    }
    
    bool RMesh::ReadOldElu(MZFile* mzf, ex_hd_t* m_phd_t) {
    
    #define MZF_READ(x,y) { if(!mzf->Read((x),(y))) return false; }
    
    
    		int i,j,k;
    	// sub mtrl ±îÁö Æ÷ÇÔÇÑ °¹¼ö
    	for(i=0;i<m_phd_t->mtrl_num;i++) {
    
    		RMtrl* node = new RMtrl;
    
    		MZF_READ(&node->m_mtrl_id    ,4 );
    		MZF_READ(&node->m_sub_mtrl_id,4 );
    
    		MZF_READ(&node->m_ambient ,sizeof(D3DXCOLOR) );
    		MZF_READ(&node->m_diffuse ,sizeof(D3DXCOLOR) );
    		MZF_READ(&node->m_specular,sizeof(D3DXCOLOR) );
    
    		MZF_READ(&node->m_power,4 );
    
    		node->m_power *= 100.f;
    
    		if(m_phd_t->ver <= EXPORTER_MESH_VER3)
    			if(node->m_power == 2000.f)
    				node->m_power = 0.f;
    
    //		node->m_power = 80.f;
    
    		MZF_READ(&node->m_sub_mtrl_num,4 );
    
    		if(m_phd_t->ver < EXPORTER_MESH_VER7) {
    			MZF_READ(&node->m_name    ,MAX_NAME_LEN );
    			MZF_READ(&node->m_opa_name,MAX_NAME_LEN );
    		}
    		else {
    			MZF_READ(&node->m_name    ,MAX_PATH_NAME_LEN );
    			MZF_READ(&node->m_opa_name,MAX_PATH_NAME_LEN );
    		}
    
    		if(m_phd_t->ver > EXPORTER_MESH_VER2) {//ver3 ºÎÅÍ
    			int twoside=0;
    			MZF_READ(&twoside,sizeof(int) );
    			node->m_bTwoSided = twoside ? true : false;
    		}
    
    		if(m_phd_t->ver > EXPORTER_MESH_VER4) {
    			int additive = 0;
    			MZF_READ(&additive,sizeof(int) );
    			node->m_bAdditive = additive ? true : false;
    		}
    
    		if(m_phd_t->ver > EXPORTER_MESH_VER7 )//ver8 ºÎÅÍ
    		{
    			int alpha_test = 0;
    			MZF_READ(&alpha_test,sizeof(int) );
    			node->m_bAlphaTestMap = alpha_test ? true : false;
    			node->m_nAlphaTestValue = alpha_test;
    		}
    		
    		if( node->m_name[0] ) {
    
    			int	 len = strlen(node->m_name);
    			char _temp[5];
    
    			strncpy(_temp,&node->m_name[len-4],4);
    
    			_temp[4] = 0;
    
    			if( stricmp(_temp,".tga")==0 ) {
    				node->m_bDiffuseMap = true;
    			}
    
    			if( node->m_opa_name[0] ) {
    				node->m_bAlphaMap	= true;
    				node->m_bDiffuseMap = false;
    			}
    		}
    
    		if( node->m_bAlphaTestMap ) {
    			node->m_bAlphaMap	= false;
    			node->m_bDiffuseMap = false;
    		}
    
    		node->CheckAniTexture();
    
    		m_mtrl_list_ex.Add(node);
    	}
    
    	bool bNeedScaleMat = false;
    	D3DXMATRIX smat;
    
    	for(i=0;i<m_phd_t->mesh_num;i++) {
    
    		bNeedScaleMat = false;
    
    		RMeshNode* pMeshNode = new RMeshNode;
    
    //		memset( pMeshNode, 0, sizeof(RMeshNode));
    //		pMeshNode->m_mtrl_id = -1;
    		D3DXMatrixIdentity(&pMeshNode->m_mat_base);
    
    		pMeshNode->m_id = m_data_num;//last id
    		pMeshNode->m_pParentMesh = this;
    		pMeshNode->m_pBaseMesh = this;
    
    		char Name[256];
    		Name[0] = NULL;
    
    		MZF_READ(Name  ,MAX_NAME_LEN );
    //		MZF_READ(pMeshNode->m_Name  ,MAX_NAME_LEN );
    		MZF_READ(pMeshNode->m_Parent,MAX_NAME_LEN );
    		MZF_READ(&pMeshNode->m_mat_base,sizeof(D3DXMATRIX) );//mat
    
    #ifdef _DEBUG
    		char name[256];
    		sprintf(name, Name);
    		TrimStr(name, name);
    #endif
    		pMeshNode->SetName( Name );
    
    		pMeshNode->m_mat_ref = pMeshNode->m_mat_base;
    		D3DXMatrixInverse( &pMeshNode->m_mat_ref_inv , 0, &pMeshNode->m_mat_ref );
    		
    		if(m_phd_t->ver >= EXPORTER_MESH_VER2) {
    			MZF_READ(&pMeshNode->m_ap_scale,sizeof(D3DXVECTOR3) );//mat
    		}
    		else  {
    			pMeshNode->m_ap_scale.x = 1.f;
    			pMeshNode->m_ap_scale.y = 1.f;
    			pMeshNode->m_ap_scale.z = 1.f;
    		}
    
    		///////////////////////////////////////////////
    
    		if(m_phd_t->ver >= EXPORTER_MESH_VER4) {
    
    			MZF_READ(&pMeshNode->m_axis_rot,sizeof(D3DXVECTOR3) );
    			MZF_READ(&pMeshNode->m_axis_rot_angle,sizeof(float) );
    
    			MZF_READ(&pMeshNode->m_axis_scale,sizeof(D3DXVECTOR3) );
    			MZF_READ(&pMeshNode->m_axis_scale_angle,sizeof(float) );
    
    			MZF_READ(&pMeshNode->m_mat_etc,sizeof(D3DXMATRIX) );//mat
    
    			D3DXMATRIX scalemat;
    			D3DXMATRIX scalepivot;
    			D3DXMATRIX scalepivotinv;
    			D3DXMATRIX flipmat;
    
    			D3DXMatrixScaling( &scalemat, pMeshNode->m_ap_scale.x, pMeshNode->m_ap_scale.y, pMeshNode->m_ap_scale.z );
    			D3DXMatrixRotationAxis( &scalepivot, &pMeshNode->m_axis_scale, pMeshNode->m_axis_scale_angle );
    			D3DXMatrixInverse( &scalepivotinv, NULL, &scalepivot );
    
    			D3DXMatrixIdentity(&flipmat);
    
    			pMeshNode->m_mat_flip = flipmat;
    
    //			result_mat2 = scalepivotinv * scalemat * scalepivot;
    			pMeshNode->m_mat_etc = scalepivotinv * scalemat * scalepivot;
    
    		}
    		else {
    
    			D3DXMatrixIdentity(&pMeshNode->m_mat_etc);
    			D3DXMatrixIdentity(&pMeshNode->m_mat_flip);
    		}
    
    		memcpy(&pMeshNode->m_mat_local,&pMeshNode->m_mat_base,sizeof(D3DXMATRIX));
    
    		pMeshNode->m_mat_result = pMeshNode->m_mat_base;
    
    		D3DXMatrixScaling(&pMeshNode->m_mat_scale, pMeshNode->m_ap_scale.x, pMeshNode->m_ap_scale.y, pMeshNode->m_ap_scale.z);
    
    		RMatInv(pMeshNode->m_mat_inv,pMeshNode->m_mat_local);
    
    		CheckNameToType(pMeshNode);
    
    		MZF_READ(&pMeshNode->m_point_num,4 );
    
    		if(pMeshNode->m_point_num) {
    		
    			pMeshNode->m_point_list = new D3DXVECTOR3[pMeshNode->m_point_num];
    			memset(pMeshNode->m_point_list,0,pMeshNode->m_point_num * sizeof(D3DXVECTOR3));
    
    			MZF_READ(pMeshNode->m_point_list,sizeof(D3DXVECTOR3)*pMeshNode->m_point_num);
    
    			pMeshNode->CalcLocalBBox();
    		}
    
    		//tex uv ±îÁö Æ÷ÇÔ
    
    		MZF_READ(&pMeshNode->m_face_num,4 );
    
    		if(pMeshNode->m_face_num) {
    
    			pMeshNode->m_face_list = new RFaceInfo[pMeshNode->m_face_num];
    			pMeshNode->m_face_normal_list = new RFaceNormalInfo[pMeshNode->m_face_num];
    
    			memset(pMeshNode->m_face_list, 0, pMeshNode->m_face_num * sizeof(RFaceInfo));
    
    			if(m_phd_t->ver >= EXPORTER_MESH_VER6 ) {//ver 6
    
    				MZF_READ(pMeshNode->m_face_list,sizeof(RFaceInfo)*pMeshNode->m_face_num);
    				MZF_READ(pMeshNode->m_face_normal_list,sizeof(RFaceNormalInfo)*pMeshNode->m_face_num);
    
    			}
    			else if(m_phd_t->ver > EXPORTER_MESH_VER2) {//ver3 ºÎÅÍ
    
    				MZF_READ(pMeshNode->m_face_list,sizeof(RFaceInfo)*pMeshNode->m_face_num);
    			}
    			else {									//ver3 ÀÌÇÏ
    
    				RFaceInfoOld* pInfo = new RFaceInfoOld[pMeshNode->m_face_num];
    				MZF_READ(pInfo,sizeof(RFaceInfoOld)*pMeshNode->m_face_num);
    
    				ConvertOldFaceInfo(pMeshNode->m_face_list,pInfo,pMeshNode->m_face_num);
    
    				delete[] pInfo;
    			}
    		}
    
    		if( m_phd_t->ver >= EXPORTER_MESH_VER6 ) {
    		
    			MZF_READ(&pMeshNode->m_point_color_num,4 );
    
    			if(pMeshNode->m_point_color_num) {
    				pMeshNode->m_point_color_list = new D3DXVECTOR3 [pMeshNode->m_point_color_num];
    				MZF_READ(pMeshNode->m_point_color_list,sizeof(D3DXVECTOR3)*pMeshNode->m_point_color_num);
    			}
    		}
    
    		if( (pMeshNode->m_point_num==0) || (pMeshNode->m_face_num==0) ) {
    			pMeshNode->m_isDummyMesh = true;
    		}
    
    		//////////////////////////////////////////////
    		
    		MZF_READ(&pMeshNode->m_mtrl_id,4 );
    
    		MZF_READ(&pMeshNode->m_physique_num,4 );
    
    		if(pMeshNode->m_physique_num) {
    			
    			m_isPhysiqueMesh = true;
    
    			pMeshNode->m_physique = new RPhysiqueInfo[pMeshNode->m_physique_num];
    			ZeroMemory(pMeshNode->m_physique,pMeshNode->m_physique_num * sizeof(RPhysiqueInfo));
    
    			for(int j=0;j<pMeshNode->m_physique_num;j++) {
    
    				MZF_READ( &pMeshNode->m_physique[j],sizeof(RPhysiqueInfo) );
    			}
    		}
    
    		D3DXPLANE	plane;
    		D3DXVECTOR3	vv[3];
    
    		if( m_phd_t->ver < EXPORTER_MESH_VER6 ) {
    
    			if(pMeshNode->m_face_num) {
    			
    				for(int a=0;a<pMeshNode->m_face_num;a++) {
    
    					vv[0] = pMeshNode->m_point_list[pMeshNode->m_face_list[a].m_point_index[0]];
    					vv[1] = pMeshNode->m_point_list[pMeshNode->m_face_list[a].m_point_index[1]];
    					vv[2] = pMeshNode->m_point_list[pMeshNode->m_face_list[a].m_point_index[2]];
    
    					D3DXPlaneFromPoints(&plane,&vv[0],&vv[1],&vv[2]);
    					D3DXPlaneNormalize(&plane,&plane);
    
    					pMeshNode->m_face_normal_list[a].m_normal.x = plane.a;
    					pMeshNode->m_face_normal_list[a].m_normal.y = plane.b;
    					pMeshNode->m_face_normal_list[a].m_normal.z = plane.c;
    				}
    			}
    
    			if(pMeshNode->m_point_num&&pMeshNode->m_point_num) 
    			{
    				D3DXVECTOR3* pPointNormal = new D3DXVECTOR3 [pMeshNode->m_point_num];
    				memset(pPointNormal,0,sizeof(D3DXVECTOR3)*pMeshNode->m_point_num);
    			
    
    				for(k=0;k<pMeshNode->m_face_num;k++) {
    					for(j=0;j<3;j++) {
    						pPointNormal[ pMeshNode->m_face_list[k].m_point_index[j] ] =
    							pPointNormal[pMeshNode->m_face_list[k].m_point_index[j]] + pMeshNode->m_face_normal_list[k].m_normal;
    					}
    				}
    
    				for(k=0;k<pMeshNode->m_point_num;k++) {
    					pPointNormal[k] = pPointNormal[k]/3.f;
    					D3DXVec3Normalize(&pPointNormal[k],&pPointNormal[k]);
    				}
    
    				for(k=0;k<pMeshNode->m_face_num;k++) {
    					for(j=0;j<3;j++) {
    						pMeshNode->m_face_normal_list[k].m_pointnormal[j] = pPointNormal[ pMeshNode->m_face_list[k].m_point_index[j] ];
    					}
    				}
    
    				delete [] pPointNormal;
    
    			}
    		}
    
    		if(pMeshNode->m_point_color_num>0 && pMeshNode->m_PartsType == eq_parts_chest )
    			pMeshNode->m_isClothMeshNode = true;
    
    		m_list.PushBack(pMeshNode);
    		
    		m_data.push_back( pMeshNode );
    		m_data_num++;
    
    		if( MAX_MESH_NODE_TABLE != (int)m_data.capacity() )
    		{
    			mlog( "m_data number is not quite right..! (%d)\n", (int)m_data.capacity());
    		}
    	}
    
    return true;
    
    #undef MZF_READ
    
    }
    
    bool RMesh::ReadElu(char* fname)
    {
    
    #define MZF_READ(x,y) { if(!mzf.Read((x),(y))) return false; }
    	__BP(2009,"RMesh::ReadElu");
    
    	char Path[256];
    	char Name[256];
    
    	Path[0] = NULL;
    	Name[0] = NULL;
    
    	// ÀÌÆåÆ® ¸ðµ¨À̶ó¸é ÀÚµ¿À¸·Î ¿É¼ÇÄÒ´Ù.
    
    	GetPath(fname,Path);
    
    	int len = strlen(Path);
    
    	if(strncmp(&fname[len],"ef_",3)==0) {
    		m_bEffectSort = true;
    		m_LitVertexModel = true;
    	}
    	else {//ÀÌÆåÆ®°¡ ¾Æ´Ï¶ó¸é ÅØ½ºÃÄ ÇØ»óµµ ¿É¼ÇÀÇ ¿µÇâÀ» ¹ÞÀ½.
    		m_mtrl_list_ex.SetObjectTexture(true);
    	}
    
    	SetFileName(fname);
    
    	m_data_num = 0;
    
    //	char *buffer;
    	MZFile mzf;
    
    	if(g_pFileSystem) {
    		if(!mzf.Open(fname,g_pFileSystem)) {
    			if(!mzf.Open(fname)) {
    				mlog("----------> in zip ( %s ) file not found!! \n ", fname );
    				return false;
    			}
    		}
    	} else {
    		if(!mzf.Open(fname)) {
    			mlog("----------> %s file not found!! \n ", fname );
    			return false;
    		}
    	}
    
    //	buffer = new char[mzf.GetLength()+1];
    //	buffer[mzf.GetLength()] = 0;
    
    //	mzf.Read(buffer,mzf.GetLength());
    
    //	if(!XmlDoc.LoadFromMemory(buffer))
    //		return false;
    
    //	delete[] buffer;
    
    //	FILE *fp;
    //	fp  = fopen(fname, "rb");
    
    //	if(!fp) return false;
    
    	ex_hd_t t_hd;
    
    	MZF_READ(&t_hd,sizeof(ex_hd_t) );
    /*
    	if(t_hd.ver != EXPORTER_VER) {
    		mlog("%s elu file ¹öÁ¯ÀÌ Æ²¸².\n",fname);
    		return false;
    	}
    */
    	if(t_hd.sig != EXPORTER_SIG) {
    		mlog("%s elu file ÆÄÀÏ ½Äº° ½ÇÆÐ.\n",fname);
    		return false;
    	}
    
    
    	if(t_hd.mesh_num != -1 && t_hd.mtrl_num != -1) {
    		if(!ReadOldElu(&mzf, &t_hd))
    			return false;
    	}
    	else
    	{
    	ReadNewElu(&mzf, fname);
    	}
    	
    	// ¾È°æ(°¡¸é) - type µµ Ãß°¡µÇ¾î¾ß ÇÔ..ÆÄÃ÷¿ë ´õ¹Ì..
    	// °¡¹æ
    
    	// ´õ¹ÌÃß°¡ - ¸ðµ¨Àº ¹«±âó·³ ã¾Æ¼­ ºÙÀ̰í..
    
    	//--------------------------------------------------
    
    	if( m_isCharacterMesh ) {
    
    		rmatrix _pbm;
    
    		// ½ã±×¶ó½º ±âº»Àåºñ À§Ä¡..
    
    		_pbm._11 = 0.f;
    		_pbm._12 = 1.f;
    		_pbm._13 = 0.f;
    		_pbm._14 = 0.f;
    
    		_pbm._21 = 0.1504f;
    		_pbm._22 = -0.f;
    		_pbm._23 = 0.9886f;
    		_pbm._24 = 0.f;
    
    		_pbm._31 = 0.9886f;
    		_pbm._32 = 0.f;
    		_pbm._33 = -0.1504f;
    		_pbm._34 = 0.f;
    
    		_pbm._41 = 9.0528f;
    		_pbm._42 = 0.f;
    		_pbm._43 = 9.8982f;
    		_pbm._44 = 1.f;
    
    		AddNode("eq_sunglass","Bip01 Head",_pbm);
    
    	}
    
    	//<------------------------------------------------
    
    //	fclose (fp);
    	mzf.Close();
    
    	ConnectMatrix();
    
    	///////////////////////////////////////////
    	//mtrl list load
    
    //	char Path[256];
    //	GetPath(fname,Path);
    //	m_mtrl_list_ex.Restore(RGetDevice(),Path);
    	// map object ¶ó¸é ¸¶À½´ë·Î ¿Ã¸®¸é ¾ÈµÊ...±¸ºÐÇÊ¿ä...
    
    	if( m_is_map_object ) {
    		ClearVoidMtrl();//¿¬°á¾ÈµÈ ºó mtrl À» Áö¿î´Ù...
    	}
    
    	if( m_mtrl_auto_load ) {
    		m_mtrl_list_ex.Restore(RGetDevice(),Path);
    	}
    
    	ConnectMtrl();// Mtrl ¿¬°á..
    
    	if(m_bEffectSort) {
    
    		m_list.sort(e_sort_str);
    
    		RMeshNodeHashList_Iter it_obj =  m_list.begin();
    
    		int cnt = 0;
    
    		while (it_obj !=  m_list.end()) {
    
    			RMeshNode* pMeshNode = (*it_obj);
    
    			m_data[cnt] = pMeshNode;
    			pMeshNode->m_id = cnt;
    
    			cnt++;
    			it_obj++;
    		}
    	}
    
    	CheckNodeAlphaMtrl();// °¢³ëµå alpha mtrl Àΰ¡ üũ..
    
    	MakeAllNodeVertexBuffer();
    
    //	mlog("elu file ( %s ) load... \n",fname);
    
    	__EP(2009);
    
    	m_isMeshLoaded = true;
    
    	return true;
    }
    RMesh.h (../RealSpace2/Include/RMesh.h)
    Code:
    bool ReadElu(char* fname);
    bool ReadNewElu(MZFile* mzf, char* fname);
    bool ReadOldElu(MZFile* mzf, ex_hd_t* fname);
    Updated Feb 17, 2012, r2:

    -Fixed texture alpha channel loading.
    -Fixed point color numbers to no longer crash on loading.

    Updated Feb 17th 2012, r3:

    -Fixed material loading AGAIN. Ugh.
    Last edited by SecretsOThePast; 17-02-12 at 02:03 PM.


  2. #2
    I am THE DON Joe9099 is offline
    MemberRank
    Jan 2007 Join Date
    England, UkLocation
    3,655Posts

    Re: New ELU format Reversed (post-1.5 src)

    Why did u not read my latest post man, now im the one to blame for this release GG JOE!

  3. #3
    Account Upgraded | Title Enabled! ThunderZ is offline
    MemberRank
    Oct 2011 Join Date
    396Posts

    Re: New ELU format Reversed (post-1.5 src)

    i love you!

  4. #4
    Retired. Don't PM. SecretsOThePast is offline
    DeveloperRank
    Jan 2009 Join Date
    643Posts

    Re: New ELU format Reversed (post-1.5 src)

    Quote Originally Posted by Joe9099 View Post
    Why did u not read my latest post man, now im the one to blame for this release GG JOE!
    I snipped it, then. No one even saw the thread. This is why we can't have nice things.

  5. #5
    I am THE DON Joe9099 is offline
    MemberRank
    Jan 2007 Join Date
    England, UkLocation
    3,655Posts

    Re: New ELU format Reversed (post-1.5 src)

    Yes and i fully understand why u havn't released it openly, i completely agree too, but now ur saying u will send it via pm to ppl that is a great choice of you to make IMO. If people don't like that then tell them to stfu.

    But someone had to say something and it always seems to be me, im really wondering why i havn't been banned.

  6. #6
    Retired. Don't PM. SecretsOThePast is offline
    DeveloperRank
    Jan 2009 Join Date
    643Posts

    Re: New ELU format Reversed (post-1.5 src)

    Quote Originally Posted by Joe9099 View Post
    Yes and i fully understand why u havn't released it openly, i completely agree too, but now ur saying u will send it via pm to ppl that is a great choice of you to make IMO. If people don't like that then tell them to stfu.

    But someone had to say something and it always seems to be me, im really wondering why i havn't been banned.
    You made a decision on the benefit of human society.

    No matter how small, that little bit of effort does not go unnoticed.

    You shouldn't be shunned for that.

  7. #7
    Account Upgraded | Title Enabled! ThunderZ is offline
    MemberRank
    Oct 2011 Join Date
    396Posts

    Re: New ELU format Reversed (post-1.5 src)

    aww lol permission problems :|

  8. #8
    Retired. Don't PM. SecretsOThePast is offline
    DeveloperRank
    Jan 2009 Join Date
    643Posts

    Re: New ELU format Reversed (post-1.5 src)

    Quote Originally Posted by thunderz1337 View Post
    too late i already c/p it all :D
    That's fine. Use it for your own server, I don't think any of us care.

    Quote Originally Posted by thunderz1337 View Post
    aww lol permission problems :|
    Permission shouldn't be an issue, it's more of a respect ordeal than permission.

  9. #9
    Account Upgraded | Title Enabled! ThunderZ is offline
    MemberRank
    Oct 2011 Join Date
    396Posts

    Re: New ELU format Reversed (post-1.5 src)

    Btw works perfect.

    Thanks for the release.


  10. #10
    GunZ Developer dacharles is offline
    MemberRank
    Oct 2006 Join Date
    476Posts

    Re: New ELU format Reversed (post-1.5 src)

    Yay someone finally had mercy.

  11. #11
    Enthusiast gabrielranks is offline
    MemberRank
    Jul 2011 Join Date
    33Posts

    Re: New ELU format Reversed (post-1.5 src)

    finally had mercy.

  12. #12
    Retired. Don't PM. SecretsOThePast is offline
    DeveloperRank
    Jan 2009 Join Date
    643Posts

    Re: New ELU format Reversed (post-1.5 src)

    I have decided to re-add the source to it after a formal apology was made to me regarding comments about my work on it.

    You can find it on the main post.

  13. #13
    Member Aviatorr is offline
    MemberRank
    Aug 2011 Join Date
    72Posts

    Re: New ELU format Reversed (post-1.5 src)

    Quote Originally Posted by SecretsOThePast View Post
    I have decided to re-add the source to it after a formal apology was made to me regarding comments about my work on it.

    You can find it on the main post.
    Man enough to care about your respet level. +Respect.

    On Topic: Nice release.

  14. #14
    2D > 3D Wucas is offline
    MemberRank
    Dec 2008 Join Date
    In your bed :3Location
    2,523Posts

    Re: New ELU format Reversed (post-1.5 src)

    Dear Secrets

    You are my hero

    Wucas

  15. #15
    Retired. Don't PM. SecretsOThePast is offline
    DeveloperRank
    Jan 2009 Join Date
    643Posts

    Re: New ELU format Reversed (post-1.5 src)

    Just as an FYI, I updated the main post. Textures now load properly with their respective values.


    Code:
       MZF_READ_XOR(&node->m_mtrl_id    ,4 );
        MZF_READ_XOR(&node->m_sub_mtrl_id,4 );
    
        MZF_READ_XOR(&node->m_ambient ,sizeof(D3DXCOLOR) );
        MZF_READ_XOR(&node->m_diffuse ,sizeof(D3DXCOLOR) );
        MZF_READ_XOR(&node->m_specular,sizeof(D3DXCOLOR) );
    
        MZF_READ_XOR(&node->m_power,4 );
        MZF_READ_XOR(&node->m_sub_mtrl_num,4 );
        unsigned short count_name;
        unsigned short count_opa_name;
    
        MZF_READ_XOR(&count_name, 2 );
        memset(node->m_name, 0, sizeof(node->m_name));
        MZF_READ_XOR(node->m_name    , count_name  );
        memset(node->m_opa_name, 0, sizeof(node->m_opa_name));
        MZF_READ_XOR(&count_opa_name, 2 );
        MZF_READ_XOR(node->m_opa_name, count_opa_name );
        char twoside=0;
          MZF_READ_XOR(&twoside,sizeof(char) );
          node->m_bTwoSided = twoside ? false : true;
        char additive = 0;
          MZF_READ_XOR(&additive,sizeof(char) );
    	  node->m_bAdditive = additive ? false : true;
       int alpha_test = 0;
          MZF_READ_XOR(&alpha_test,sizeof(int) );
          node->m_nAlphaTestValue = alpha_test;
          node->m_bAlphaTestMap = alpha_test != 0;  
      char diffuse = 0;
          MZF_READ_XOR(&diffuse,sizeof(char) );
    	  node->m_bDiffuseMap = diffuse ? false : true;
      char alpha_map = 0;
          MZF_READ_XOR(&alpha_map,sizeof(char) );
          node->m_bAlphaMap = alpha_map ? false : true;
    This also had to be changed from:

    Code:
        if(pMeshNode->m_point_color_num) {
            pMeshNode->m_point_color_list = new D3DXVECTOR3 [pMeshNode->m_point_color_num];
            MZF_READ_XOR(&pMeshNode->m_point_color_list,sizeof(D3DXVECTOR3)*pMeshNode->m_point_color_num);
        }
    to

    Code:
      if(pMeshNode->m_point_color_num) {
            pMeshNode->m_point_color_list = new D3DXVECTOR3 [pMeshNode->m_point_color_num];
            MZF_READ_XOR(pMeshNode->m_point_color_list,sizeof(D3DXVECTOR3)*pMeshNode->m_point_color_num);
        }
    Last edited by SecretsOThePast; 17-02-12 at 02:04 PM.



Page 1 of 3 123 LastLast

Advertisement