//////////////////////////////
// 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();
}