Posted By: Emre
Save as .wmb - 01/18/12 21:43
Hello all,
I got some help from here and I've completed it. if you have an editor like Sivan's Map Builder and if you want to save your level as .wmb while engine is open, you can use this code.
Note: That code works with only models&terrain. Map entities, path, attached etc. are not supported.
I got some help from here and I've completed it. if you have an editor like Sivan's Map Builder and if you want to save your level as .wmb while engine is open, you can use this code.
Note: That code works with only models&terrain. Map entities, path, attached etc. are not supported.
Code:
////////////////////////////// // save as wmb (18/01/2012) ////////////////////////////// // Created by Emre SASMAZ // pantharay@gmail.com // blog.pantharay.com // sayha.pantharay.com ////////////////////////////// #include <stdio.h> //$$w hex code char bufferforwad[12] = {0x57, 0x41, 0x44, 0x37, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00}; //expalette.pcx hexcode char bufferforpalette[954] = { 0x0A, 0x05, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x12, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0xCF, 0xD3, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 0x2F, 0x2F, 0x2F, 0x3F, 0x3F, 0x3F, 0x4B, 0x4B, 0x4B, 0x5B, 0x5B, 0x5B, 0x6B, 0x6B, 0x6B, 0x7B, 0x7B, 0x7B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x9B, 0xAB, 0xAB, 0xAB, 0xBB, 0xBB, 0xBB, 0xCB, 0xCB, 0xCB, 0xDB, 0xDB, 0xDB, 0xEB, 0xEB, 0xEB, 0x0F, 0x0B, 0x07, 0x17, 0x0F, 0x0B, 0x1F, 0x17, 0x0B, 0x27, 0x1B, 0x0F, 0x2F, 0x23, 0x13, 0x37, 0x2B, 0x17, 0x3F, 0x2F, 0x17, 0x4B, 0x37, 0x1B, 0x53, 0x3B, 0x1B, 0x5B, 0x43, 0x1F, 0x63, 0x4B, 0x1F, 0x6B, 0x53, 0x1F, 0x73, 0x57, 0x1F, 0x7B, 0x5F, 0x23, 0x83, 0x67, 0x23, 0x8F, 0x6F, 0x23, 0x0B, 0x0B, 0x0F, 0x13, 0x13, 0x1B, 0x1B, 0x1B, 0x27, 0x27, 0x27, 0x33, 0x2F, 0x2F, 0x3F, 0x37, 0x37, 0x4B, 0x3F, 0x3F, 0x57, 0x47, 0x47, 0x67, 0x4F, 0x4F, 0x73, 0x5B, 0x5B, 0x7F, 0x63, 0x63, 0x8B, 0x6B, 0x6B, 0x97, 0x73, 0x73, 0xA3, 0x7B, 0x7B, 0xAF, 0x83, 0x83, 0xBB, 0x8B, 0x8B, 0xCB, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x0B, 0x0B, 0x00, 0x13, 0x13, 0x00, 0x1B, 0x1B, 0x00, 0x23, 0x23, 0x00, 0x2B, 0x2B, 0x07, 0x2F, 0x2F, 0x07, 0x37, 0x37, 0x07, 0x3F, 0x3F, 0x07, 0x47, 0x47, 0x07, 0x4B, 0x4B, 0x0B, 0x53, 0x53, 0x0B, 0x5B, 0x5B, 0x0B, 0x63, 0x63, 0x0B, 0x6B, 0x6B, 0x0F, 0x07, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x17, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x27, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x37, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x47, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x57, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x67, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x77, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x13, 0x13, 0x00, 0x1B, 0x1B, 0x00, 0x23, 0x23, 0x00, 0x2F, 0x2B, 0x00, 0x37, 0x2F, 0x00, 0x43, 0x37, 0x00, 0x4B, 0x3B, 0x07, 0x57, 0x43, 0x07, 0x5F, 0x47, 0x07, 0x6B, 0x4B, 0x0B, 0x77, 0x53, 0x0F, 0x83, 0x57, 0x13, 0x8B, 0x5B, 0x13, 0x97, 0x5F, 0x1B, 0xA3, 0x63, 0x1F, 0xAF, 0x67, 0x23, 0x23, 0x13, 0x07, 0x2F, 0x17, 0x0B, 0x3B, 0x1F, 0x0F, 0x4B, 0x23, 0x13, 0x57, 0x2B, 0x17, 0x63, 0x2F, 0x1F, 0x73, 0x37, 0x23, 0x7F, 0x3B, 0x2B, 0x8F, 0x43, 0x33, 0x9F, 0x4F, 0x33, 0xAF, 0x63, 0x2F, 0xBF, 0x77, 0x2F, 0xCF, 0x8F, 0x2B, 0xDF, 0xAB, 0x27, 0xEF, 0xCB, 0x1F, 0xFF, 0xF3, 0x1B, 0x0B, 0x07, 0x00, 0x1B, 0x13, 0x00, 0x2B, 0x23, 0x0F, 0x37, 0x2B, 0x13, 0x47, 0x33, 0x1B, 0x53, 0x37, 0x23, 0x63, 0x3F, 0x2B, 0x6F, 0x47, 0x33, 0x7F, 0x53, 0x3F, 0x8B, 0x5F, 0x47, 0x9B, 0x6B, 0x53, 0xA7, 0x7B, 0x5F, 0xB7, 0x87, 0x6B, 0xC3, 0x93, 0x7B, 0xD3, 0xA3, 0x8B, 0xE3, 0xB3, 0x97, 0xAB, 0x8B, 0xA3, 0x9F, 0x7F, 0x97, 0x93, 0x73, 0x87, 0x8B, 0x67, 0x7B, 0x7F, 0x5B, 0x6F, 0x77, 0x53, 0x63, 0x6B, 0x4B, 0x57, 0x5F, 0x3F, 0x4B, 0x57, 0x37, 0x43, 0x4B, 0x2F, 0x37, 0x43, 0x27, 0x2F, 0x37, 0x1F, 0x23, 0x2B, 0x17, 0x1B, 0x23, 0x13, 0x13, 0x17, 0x0B, 0x0B, 0x0F, 0x07, 0x07, 0xBB, 0x73, 0x9F, 0xAF, 0x6B, 0x8F, 0xA3, 0x5F, 0x83, 0x97, 0x57, 0x77, 0x8B, 0x4F, 0x6B, 0x7F, 0x4B, 0x5F, 0x73, 0x43, 0x53, 0x6B, 0x3B, 0x4B, 0x5F, 0x33, 0x3F, 0x53, 0x2B, 0x37, 0x47, 0x23, 0x2B, 0x3B, 0x1F, 0x23, 0x2F, 0x17, 0x1B, 0x23, 0x13, 0x13, 0x17, 0x0B, 0x0B, 0x0F, 0x07, 0x07, 0xDB, 0xC3, 0xBB, 0xCB, 0xB3, 0xA7, 0xBF, 0xA3, 0x9B, 0xAF, 0x97, 0x8B, 0xA3, 0x87, 0x7B, 0x97, 0x7B, 0x6F, 0x87, 0x6F, 0x5F, 0x7B, 0x63, 0x53, 0x6B, 0x57, 0x47, 0x5F, 0x4B, 0x3B, 0x53, 0x3F, 0x33, 0x43, 0x33, 0x27, 0x37, 0x2B, 0x1F, 0x27, 0x1F, 0x17, 0x1B, 0x13, 0x0F, 0x0F, 0x0B, 0x07, 0x6F, 0x83, 0x7B, 0x67, 0x7B, 0x6F, 0x5F, 0x73, 0x67, 0x57, 0x6B, 0x5F, 0x4F, 0x63, 0x57, 0x47, 0x5B, 0x4F, 0x3F, 0x53, 0x47, 0x37, 0x4B, 0x3F, 0x2F, 0x43, 0x37, 0x2B, 0x3B, 0x2F, 0x23, 0x33, 0x27, 0x1F, 0x2B, 0x1F, 0x17, 0x23, 0x17, 0x0F, 0x1B, 0x13, 0x0B, 0x13, 0x0B, 0x07, 0x0B, 0x07, 0xFF, 0xF3, 0x1B, 0xEF, 0xDF, 0x17, 0xDB, 0xCB, 0x13, 0xCB, 0xB7, 0x0F, 0xBB, 0xA7, 0x0F, 0xAB, 0x97, 0x0B, 0x9B, 0x83, 0x07, 0x8B, 0x73, 0x07, 0x7B, 0x63, 0x07, 0x6B, 0x53, 0x00, 0x5B, 0x47, 0x00, 0x4B, 0x37, 0x00, 0x3B, 0x2B, 0x00, 0x2B, 0x1F, 0x00, 0x1B, 0x0F, 0x00, 0x0B, 0x07, 0x00, 0x00, 0x00, 0xFF, 0x0B, 0x0B, 0xEF, 0x13, 0x13, 0xDF, 0x1B, 0x1B, 0xCF, 0x23, 0x23, 0xBF, 0x2B, 0x2B, 0xAF, 0x2F, 0x2F, 0x9F, 0x2F, 0x2F, 0x8F, 0x2F, 0x2F, 0x7F, 0x2F, 0x2F, 0x6F, 0x2F, 0x2F, 0x5F, 0x2B, 0x2B, 0x4F, 0x23, 0x23, 0x3F, 0x1B, 0x1B, 0x2F, 0x13, 0x13, 0x1F, 0x0B, 0x0B, 0x0F, 0x2B, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x4B, 0x07, 0x00, 0x5F, 0x07, 0x00, 0x6F, 0x0F, 0x00, 0x7F, 0x17, 0x07, 0x93, 0x1F, 0x07, 0xA3, 0x27, 0x0B, 0xB7, 0x33, 0x0F, 0xC3, 0x4B, 0x1B, 0xCF, 0x63, 0x2B, 0xDB, 0x7F, 0x3B, 0xE3, 0x97, 0x4F, 0xE7, 0xAB, 0x5F, 0xEF, 0xBF, 0x77, 0xF7, 0xD3, 0x8B, 0xA7, 0x7B, 0x3B, 0xB7, 0x9B, 0x37, 0xC7, 0xC3, 0x37, 0xE7, 0xE3, 0x57, 0x7F, 0xBF, 0xFF, 0xAB, 0xE7, 0xFF, 0xD7, 0xFF, 0xFF, 0x67, 0x00, 0x00, 0x8B, 0x00, 0x00, 0xB3, 0x00, 0x00, 0xD7, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xF3, 0x93, 0xFF, 0xF7, 0xC7, 0xFF, 0xFF, 0xFF, 0x9F, 0x5B, 0x53 } ; STRING* temp_str="#25"; var wmb_handle; #define ifiselse(var) if(is(you,var)){str_cat(temp_str,"1");}else{str_cat(temp_str,"0");} #define skipline file_asc_write (wmb_handle, 13);file_asc_write (wmb_handle, 10) #define obrackets file_str_write (wmb_handle,"{") #define cbrackets file_str_write (wmb_handle,"}") long entflags[32]; void flags_startup() { entflags[1]=0; entflags[2]=0; entflags[3]=0; entflags[4]=0; entflags[5]=0; entflags[6]=POLYGON; entflags[7]=0;//Local entflags[8]=0; entflags[9]=CAST; entflags[10]=METAL; entflags[11]=BRIGHT; entflags[12]=NOFOG; entflags[13]=0; entflags[14]=SHADOW; entflags[15]=UNLIT; entflags[16]=NOFILTER; entflags[17]=0;//Flare entflags[18]=ZNEAR; entflags[19]=SPOTLIGHT; entflags[20]=OVERLAY; entflags[21]=0; entflags[22]=TRANSLUCENT; entflags[23]=PASSABLE; entflags[24]=INVISIBLE; entflags[25]=FLAG8; entflags[26]=FLAG7; entflags[27]=FLAG6; entflags[28]=FLAG5; entflags[29]=FLAG4; entflags[30]=FLAG3; entflags[31]=FLAG2; entflags[32]=FLAG1; } void set_flags(var flag16) { str_cpy(temp_str,""); if(flag16>0) { str_cat(temp_str,"0");//-? str_cat(temp_str,"0");//-? str_cat(temp_str,"0"); str_cat(temp_str,"0");//-? str_cat(temp_str,"0");//-? ifiselse(POLYGON)//6 str_cat(temp_str,"0");//LOCAL//7 str_cat(temp_str,"0");//8 ifiselse(CAST)//9 ifiselse(METAL)//10 ifiselse(BRIGHT)//11 ifiselse(NOFOG)//12 str_cat(temp_str,"0");//13 ifiselse(SHADOW) ifiselse(UNLIT) ifiselse(NOFILTER) } str_cat(temp_str,"0");//17 ifiselse(ZNEAR)//18 ifiselse(SPOTLIGHT)//-?//19 ifiselse(OVERLAY)//20 str_cat(temp_str,"0");//17 ifiselse(TRANSLUCENT)//21 ifiselse(PASSABLE)//22 ifiselse(INVISIBLE)//23 ifiselse(FLAG8)//24 ifiselse(FLAG7)//25 ifiselse(FLAG6)//26 ifiselse(FLAG5)//28 ifiselse(FLAG4)//29 ifiselse(FLAG3)//30 ifiselse(FLAG2)//31 ifiselse(FLAG1)//32 file_str_write (wmb_handle,temp_str); skipline; } void save_wmb() { //variables var num = 0; ENTITY* ent; char* funcname; var yourtype; var say=0; int i; //Remove $$m & $$w & expalette.pcx remove("export.$$M"); remove("export.$$w"); remove("expalette.pcx"); wait(-0.5); //Create $$w file (wad7) FILE *myfile = fopen("export.$$w", "wb"); int i=0; for(i=0;i<12;i++) { putc(bufferforwad[i], myfile); } fclose(myfile); //Create expalette.pcx file (wad7) FILE *myfile = fopen("expalette.pcx", "wb"); int i=0; for(i=0;i<954;i++) { putc(bufferforpalette[i], myfile); } fclose(myfile); //Create $$m wmb_handle = file_open_append("export.$$M"); file_str_write (wmb_handle,"version 711"); skipline; //level obrackets;file_str_write (wmb_handle," //level"); skipline; file_var_write (wmb_handle,0);skipline; file_str_write (wmb_handle,"export.$$w"); skipline; file_str_write (wmb_handle,"expalette.pcx"); skipline; cbrackets;skipline; //sun obrackets;file_str_write (wmb_handle," //sun"); skipline; file_var_write (wmb_handle,5);skipline; file_var_write (wmb_handle,sun_angle.tilt);skipline; file_var_write (wmb_handle,sun_angle.pan);skipline; cbrackets;skipline; var myflag16=0; //entities you = ent_next(NULL); while (you) { draw_text("PLEASE WAIT",10,10,COLOR_RED); obrackets;file_str_write (wmb_handle," //model"); skipline; #ifndef ent_id #define ent_id yourtype=0; /* from sdk: 'wmpio_ModelEntity * model; // id == 3 (7, for model-ex)' SO CHECK IF EX OR NOT (if has a material or string1-2 or has a action it's 7 else it's 3) */ //if(your.materialtype!=NULL) if(your.material!=mat_model&&your.material!=NULL&&your.material!=mat_terrain) { yourtype+=1; } //if(your.string1||string2!=NULL) if(str_len(your.string1)>0||str_len(your.string2)>0) { yourtype+=1; } num = 0; say=0; //Check Entity has an action or not. for(num = 0; engine_gettaskinfo(num,&funcname,&ent); num++) { if(ent == you) { yourtype+=1; break; } } // if(yourtype>0) { file_var_write (wmb_handle,7);skipline;//model-ex } else { file_var_write (wmb_handle,3);skipline;//model } #endif //xyz file_var_write (wmb_handle,you.x); file_var_write (wmb_handle,you.y); file_var_write (wmb_handle,you.z);skipline; //pan-tilt-roll file_var_write (wmb_handle,you.pan); file_var_write (wmb_handle,you.tilt); file_var_write (wmb_handle,you.roll);skipline; //scale file_var_write (wmb_handle,you.scale_x); file_var_write (wmb_handle,you.scale_y); file_var_write (wmb_handle,you.scale_z);skipline; //Entitiy file name str_for_entfile(temp_str,you); file_str_write (wmb_handle,temp_str); skipline; //Ent name str_for_entname(temp_str,you); file_str_write (wmb_handle,temp_str); skipline; num = 0; say=0; //Get action name of Entity (Thanks to MasterQ32&JustSid for tip) for(num = 0; engine_gettaskinfo(num,&funcname,&ent); num++) { if(ent == you) { file_str_write (wmb_handle,_str(funcname)); skipline; say=1; break; } } //if entity has no action, put ndef if(say==0) { file_str_write (wmb_handle,"ndef"); skipline; } //skills file_var_write (wmb_handle,you.skill1); file_var_write (wmb_handle,you.skill2); file_var_write (wmb_handle,you.skill3); file_var_write (wmb_handle,you.skill4); file_var_write (wmb_handle,you.skill5); file_var_write (wmb_handle,you.skill6); file_var_write (wmb_handle,you.skill7); file_var_write (wmb_handle,you.skill8); if(yourtype>0)//type==7 { file_var_write (wmb_handle,you.skill9); file_var_write (wmb_handle,you.skill10); file_var_write (wmb_handle,you.skill11); file_var_write (wmb_handle,you.skill12); file_var_write (wmb_handle,you.skill13); file_var_write (wmb_handle,you.skill14); file_var_write (wmb_handle,you.skill15); file_var_write (wmb_handle,you.skill16); file_var_write (wmb_handle,you.skill17); file_var_write (wmb_handle,you.skill18); file_var_write (wmb_handle,you.skill19); file_var_write (wmb_handle,you.skill20); }skipline; //flags myflag16=0; i=0; for(i=1;i<17;i++) { if (is(you,entflags[i])) { myflag16=1; } } set_flags(myflag16); file_var_write (wmb_handle,your.ambient);skipline; //Get material name of Entity if(your.material!=mat_model&&your.material!=NULL&&your.material!=mat_terrain) { file_var_write (wmb_handle,your.albedo);skipline; file_var_write (wmb_handle,0);skipline; //path file_var_write (wmb_handle,0);skipline; //attach str_cpy(temp_str,_chr(your.material.link.name)); file_str_write (wmb_handle,temp_str); skipline; } else { if(yourtype>0) { file_var_write (wmb_handle,your.albedo);skipline; file_var_write (wmb_handle,0);skipline;//path file_var_write (wmb_handle,0);skipline;//attach file_str_write (wmb_handle,"ndef"); skipline; // if no material put ndef } } //string1 string2 if(str_len(your.string1)>0) { str_cpy(temp_str,_chr(your.string1)); file_str_write (wmb_handle,temp_str); skipline; } if(str_len(your.string2)>0) { str_cpy(temp_str,_chr(your.string2)); file_str_write (wmb_handle,temp_str); skipline; } cbrackets;skipline; you = ent_next(you); wait(1); } file_close(wmb_handle); wait(-1); //build it with default exec("%EXE_DIR%\\wwmp2wmb.exe","export.$$M -pal expalette.pcx -az 10 -el 60 -sunrgb 100 100 100 -ambrgb 100 100 100 -noportals -hiprec -writelog -close -nodetail -threads 2 -gamma 1.50 -phongangle 120 -lmambient 50 -sizeshaded 236 -litres 1.00 -litcomp 0.50 -litmax 196 -litscale 0.50 -radsubdiv 64 -radbounce 0 -bound 56000 -fat 64 48 8 -narrow 32 32 0 "); //exec("%EXE_DIR%\\wwmp2wmb.exe","export.$$M -pal palette.pcx -close"); } void on_enter_event() { save_wmb(); }