//save wmb
#include <stdio.h>
STRING* temp_str ="#25";
STRING* temp_str2 ="#25";
STRING* temp_str3 ="#25";
var wmb_handle;
#define skipline file_asc_write (wmb_handle, 13);file_asc_write (wmb_handle, 10)
#define cbrackets file_str_write (wmb_handle,"}")
#define obrackets file_str_write (wmb_handle,"{")
void set_flags()
{
str_cpy(temp_str,"");
if(is(you,POLYGON)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,CAST)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,METAL)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,DECAL)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,BRIGHT)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,NOFOG)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,LIGHT)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,SHADOW)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,UNLIT)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,NOFILTER)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,ZNEAR)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,SPOTLIGHT)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,OVERLAY)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,TRANSLUCENT)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,PASSABLE)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,INVISIBLE)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,FLAG8)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,FLAG7)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,FLAG6)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,FLAG5)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,FLAG4)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,FLAG3)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,FLAG2)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
if(is(you,FLAG1)){str_cat(temp_str,"1");} else{str_cat(temp_str,"0");}
file_str_write (wmb_handle,temp_str); skipline;
}
//for $$w file
char buffer[12] = {0x57, 0x41, 0x44, 0x37, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00};
void save_wmb()
{
remove("export.$$M");
remove("export.$$w");
wait(-0.5);
//create $$w file
FILE *myfile = fopen("export.$$w", "wb");
int i=0;
for(i=0;i<12;i++)
{
putc(buffer[i], myfile);
}
fclose(myfile);
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,"palette.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 yourtype;
//entities
you = ent_next(NULL); // retrieve first entity
var startact;
var startmtl;
var cut;
while (you) // repeat until there are no more entities
{
yourtype=0;//for ent id
//parantez ac
obrackets;file_str_write (wmb_handle," //model"); skipline;
#ifndef entid
#define entid
/*
from sdk:
'wmpio_ModelEntity * model; // id == 3 (7, for model-ex)'
SO CHECK IF EX OR NOT (if has a material or string1-2 it's 7)
*/
//materyalin varsa tipi arttir
if(your.material!=mat_model&&your.material!=NULL&&your.material!=mat_terrain)
{
yourtype+=1;
}
if(str_len(your.string1)>0||str_len(your.string2)>0)
{
yourtype+=1;
}
if(yourtype>0){file_var_write (wmb_handle,7);skipline;}else{file_var_write (wmb_handle,3);skipline;}
#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;
str_for_entfile(temp_str,you);
file_str_write (wmb_handle,temp_str); skipline;
str_for_entname(temp_str,you);
file_str_write (wmb_handle,temp_str); skipline;
//find funcname from watch_str
watched = you;
wait(10);
if(str_stri(watch_str,"Act "))
{
//error(watch_str);
startact = str_stri(watch_str,"Act ");
str_cpy(temp_str,watch_str);
str_clip(temp_str,startact+3);
str_cpy(temp_str2,temp_str);
startmtl = str_stri(temp_str2,"Mtl ");
str_clip(temp_str2,startmtl+3);
cut=str_len(temp_str2);
str_trunc(temp_str,cut+4);
file_str_write (wmb_handle,temp_str); skipline;
}
else
{
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
set_flags();
//bu illaki olacak
file_var_write (wmb_handle,your.ambient);skipline;
//material
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;
file_var_write (wmb_handle,0);skipline;
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;
file_var_write (wmb_handle,0);skipline;
file_str_write (wmb_handle,"ndef"); skipline;
}
}
//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;
//wait(1);
you = ent_next(you);
wait(1);
}
file_close(wmb_handle);
watched=NULL;
wait(-1);
exec("%EXE_DIR%\\wwmp2wmb.exe","export.$$M -pal palette.pcx -close");
}
void on_enter_event()
{
save_wmb();
}