Welcome to the RaGEZONE - MMORPG development forums.

New ELU format Reversed (post-1.5 src)

This is a discussion on New ELU format Reversed (post-1.5 src) within the Gunz Releases forums, part of the Gunz Online category; Hi RaGEZONE, Here's the new ELU format that I have been working on. It is compatible with all the new ...

Page 1 of 3 123 LastLast
Results 1 to 15 of 34
  1. #1
    GunZ Community Dev
    Rank
    Subscriber
    Join Date
    Jan 2009
    Posts
    356
    Liked
    443

    New ELU format Reversed (post-1.5 src)

    Click
    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 01:03 PM.

  2. #2
    I am THE DON
    Rank
    Gamma
    Join Date
    Jan 2007
    Location
    ENGLAND!, Uk
    Posts
    3,808
    Liked
    416
    Gamertag: LolJoeMad PSN ID: LolJoeMad Steam ID: joe9099

    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!
    Quit, moved on, having a cool life, fuck you all... Except a few

  3. #3
    Account Upgraded | Title Enabled!
    Rank
    Member +
    Join Date
    Oct 2011
    Posts
    402
    Liked
    113
    Gamertag: ThunderZ1337

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

    i love you!

  4. #4
    GunZ Community Dev
    Rank
    Subscriber
    Join Date
    Jan 2009
    Posts
    356
    Liked
    443

    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
    Rank
    Gamma
    Join Date
    Jan 2007
    Location
    ENGLAND!, Uk
    Posts
    3,808
    Liked
    416
    Gamertag: LolJoeMad PSN ID: LolJoeMad Steam ID: joe9099

    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.
    Quit, moved on, having a cool life, fuck you all... Except a few

  6. #6
    GunZ Community Dev
    Rank
    Subscriber
    Join Date
    Jan 2009
    Posts
    356
    Liked
    443

    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!
    Rank
    Member +
    Join Date
    Oct 2011
    Posts
    402
    Liked
    113
    Gamertag: ThunderZ1337

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

    aww lol permission problems :|

  8. #8
    GunZ Community Dev
    Rank
    Subscriber
    Join Date
    Jan 2009
    Posts
    356
    Liked
    443

    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.
    Wucas likes this.

  9. #9
    Account Upgraded | Title Enabled!
    Rank
    Member +
    Join Date
    Oct 2011
    Posts
    402
    Liked
    113
    Gamertag: ThunderZ1337

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

    Btw works perfect.

    Thanks for the release.


  10. #10
    GunZ Developer
    Rank
    Member +
    Join Date
    Oct 2006
    Posts
    469
    Liked
    27

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

    Yay someone finally had mercy.

  11. #11
    Member
    Rank
    Member
    Join Date
    Jul 2011
    Posts
    29
    Liked
    0

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

    finally had mercy.

  12. #12
    GunZ Community Dev
    Rank
    Subscriber
    Join Date
    Jan 2009
    Posts
    356
    Liked
    443

    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
    Rank
    Member
    Join Date
    Aug 2011
    Posts
    65
    Liked
    28

    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
    Rank
    Alpha Member
    Join Date
    Dec 2008
    Location
    In your bed :3
    Posts
    2,200
    Liked
    881
    Gamertag: WucasPengu

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

    Dear Secrets

    You are my hero

    Wucas

  15. #15
    GunZ Community Dev
    Rank
    Subscriber
    Join Date
    Jan 2009
    Posts
    356
    Liked
    443

    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 01:04 PM.

 

 
Page 1 of 3 123 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •