example terrain generator for eukara.

some compile fixes too.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5111 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2017-05-28 17:14:23 +00:00
parent 025aeff8a4
commit 519350c635
8 changed files with 496 additions and 64 deletions

View file

@ -2189,7 +2189,7 @@ static void QCBUILTIN PF_R_RenderScene(pubprogfuncs_t *prinst, struct globalvars
{
SCR_TileClear (sb_lines);
Sbar_Draw (r_refdef.playerview);
Sbar_DrawScoreboard ();
Sbar_DrawScoreboard (r_refdef.playerview);
}
else
SCR_TileClear (0);

View file

@ -58,10 +58,10 @@ int Sbar_TranslateHudClick(void);
#define Sbar_Changed()
#define Sbar_Draw(pv)
#define Sbar_Flush()
#define Sbar_ShouldDraw() false
#define Sbar_ShouldDraw(pv) false
#define Sbar_DrawScoreboard()
#define Sbar_FinaleOverlay()
#define Sbar_IntermissionOverlay()
#define Sbar_IntermissionOverlay(pv)
#define Sbar_TranslateHudClick() 0
#endif

View file

@ -2252,11 +2252,11 @@ void V_RenderView (void)
#ifdef PLUGINS
Plug_SBar (r_refdef.playerview);
#else
if (Sbar_ShouldDraw())
if (Sbar_ShouldDraw(r_refdef.playerview))
{
SCR_TileClear (sb_lines);
Sbar_Draw (r_refdef.playerview);
Sbar_DrawScoreboard ();
Sbar_DrawScoreboard (r_refdef.playerview);
}
else
SCR_TileClear (0);

View file

@ -449,8 +449,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#undef Q2BSPS
#undef Q3BSPS
#undef RFBSPS
#undef WEBSERVER //http/ftp servers
#undef WEBCLIENT //http/ftp clients.
#undef WEBSERVER //http server
#undef FTPSERVER //ftp server
#undef WEBCLIENT //http client.
#undef FTPCLIENT //ftp client.
#endif
#ifdef __DJGPP__
@ -491,7 +493,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#undef VM_Q1 //no dlls
#undef MAP_PROC //meh
#undef HALFLIFEMODELS //blurgh
#undef WEBSERVER //hah, yeah, right
#undef SUPPORT_ICE //requires udp, so not usable. webrtc could be used instead, but that logic is out of our hands.
#undef HAVE_MIXER //depend upon openal instead.
@ -523,8 +524,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#undef AVAIL_DINPUT //nope, not supported.
#undef SV_MASTER //no socket interface
#undef CL_MASTER //no socket interface
#undef WEBSERVER //http/ftp servers
#undef WEBCLIENT //http/ftp clients.
#undef MULTITHREAD
#undef HEADLESSQUAKE
#endif
@ -545,7 +544,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#undef SUPPORT_ICE
#undef CL_MASTER //no sockets support
#undef SV_MASTER //noone uses this anyway
#undef WEBSERVER //no sockets support (certainly no servers)
#undef WEBSERVER //http server
#undef FTPSERVER //ftp server
#undef FTPCLIENT //ftp client.
#undef TCPCONNECT
#undef IRCCONNECT
#define GLSLONLY //pointless having the junk
@ -623,7 +624,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifdef NPFTE
#undef TEXTEDITOR
#undef WEBSERVER
#undef WEBSERVER //http server
#undef FTPSERVER //ftp server
#undef FTPCLIENT //ftp client.
#endif
#ifndef AVAIL_ZLIB
@ -633,7 +636,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef HAVE_TCP
#undef TCPCONNECT
#undef IRCCONNECT
#undef WEBSERVER
#undef WEBSERVER //http server
#undef FTPSERVER //ftp server
#undef FTPCLIENT //ftp client.
#if !defined(FTE_TARGET_WEB) && !defined(NACL)
#undef WEBCLIENT
#endif
@ -662,6 +667,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#undef Q3SERVER
#undef HLSERVER
#undef WEBSERVER
#undef FTPSERVER
#undef VM_Q1
#undef SQL
#endif

View file

@ -1899,6 +1899,7 @@ void FTENET_Loop_Close(ftenet_generic_connection_t *con)
int sock = con->thesocket;
sock &= 1;
loopbacks[sock].inited = false;
loopbacks[sock].get = loopbacks[sock^1].send = 0;
for (i = 0; i < MAX_LOOPBACK; i++)
{
BZ_Free(loopbacks[sock].msgs[i].data);
@ -1922,6 +1923,7 @@ static ftenet_generic_connection_t *FTENET_Loop_EstablishConnection(qboolean iss
if (newcon)
{
loopbacks[sock].inited = true;
loopbacks[sock].get = loopbacks[sock^1].send = 0;
newcon->GetLocalAddresses = FTENET_Loop_GetLocalAddresses;
newcon->GetPacket = FTENET_Loop_GetPacket;

View file

@ -3692,19 +3692,20 @@ void PF_stuffcmd_Internal(int entnum, const char *str, unsigned int flags)
if (flags & STUFFCMD_BROADCAST)
{
for (i = 0, cl = svs.clients; i < sv.allocated_client_slots; i++, cl++)
{
if (cl->state != cs_spawned || cl->controller == cl)
continue;
SV_StuffcmdToClient(cl, str);
}
if (!(flags & STUFFCMD_DEMOONLY))
for (i = 0, cl = svs.clients; i < sv.allocated_client_slots; i++, cl++)
{
if (cl->state != cs_spawned || cl->controller != cl)
continue;
SV_StuffcmdToClient(cl, str);
}
if (!(flags & STUFFCMD_IGNOREINDEMO))
if (sv.mvdrecording)
{
sizebuf_t *msg = MVDWrite_Begin (dem_all, 0, 2 + strlen(str));
MSG_WriteByte (msg, svc_stufftext);
MSG_WriteString (msg, str);
}
if (sv.mvdrecording)
{
sizebuf_t *msg = MVDWrite_Begin (dem_all, 0, 2 + strlen(str));
MSG_WriteByte (msg, svc_stufftext);
MSG_WriteString (msg, str);
}
return;
}
@ -6665,42 +6666,6 @@ static void QCBUILTIN PF_readcmd (pubprogfuncs_t *prinst, struct globalvars_s *p
SV_BeginRedirect(old, oldl);
}
/*
=================
PF_redirectcmd
void redirectcmd (entity to, string str)
the mvdsv implementation executes it now. we delay till the end of the frame, to avoid issues with map changes etc.
=================
*/
static void PF_Redirectcmdcallback(struct frameendtasks_s *task)
{ //called at the end of the frame when there's no qc running
host_client = svs.clients + task->ctxint;
if (host_client->state >= cs_connected)
{
SV_BeginRedirect(RD_CLIENT, host_client->language);
Cmd_ExecuteString(task->data, RESTRICT_INSECURE);
SV_EndRedirect();
}
}
static void QCBUILTIN PF_redirectcmd (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{
struct frameendtasks_s *task, **link;
int entnum = G_EDICTNUM(prinst, OFS_PARM0);
const char *s = PR_GetStringOfs(prinst, OFS_PARM1);
if (entnum < 1 || entnum > sv.allocated_client_slots)
PR_RunError (prinst, "Parm 0 not a client");
task = Z_Malloc(sizeof(*task)+strlen(s));
task->callback = PF_Redirectcmdcallback;
strcpy(task->data, s);
task->ctxint = entnum-1;
for(link = &svs.frameendtasks; *link; link = &(*link)->next)
; //add them on the end, so they're execed in order
*link = task;
}
/*
=================
PF_forcedemoframe
@ -6870,6 +6835,42 @@ static void QCBUILTIN PF_logtext(pubprogfuncs_t *prinst, struct globalvars_s *pr
}
#endif
/*
=================
PF_redirectcmd
void redirectcmd (entity to, string str)
the mvdsv implementation executes it now. we delay till the end of the frame, to avoid issues with map changes etc.
=================
*/
static void PF_Redirectcmdcallback(struct frameendtasks_s *task)
{ //called at the end of the frame when there's no qc running
host_client = svs.clients + task->ctxint;
if (host_client->state >= cs_connected)
{
SV_BeginRedirect(RD_CLIENT, host_client->language);
Cmd_ExecuteString(task->data, RESTRICT_INSECURE);
SV_EndRedirect();
}
}
static void QCBUILTIN PF_redirectcmd (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{
struct frameendtasks_s *task, **link;
int entnum = G_EDICTNUM(prinst, OFS_PARM0);
const char *s = PR_GetStringOfs(prinst, OFS_PARM1);
if (entnum < 1 || entnum > sv.allocated_client_slots)
PR_RunError (prinst, "Parm 0 not a client");
task = Z_Malloc(sizeof(*task)+strlen(s));
task->callback = PF_Redirectcmdcallback;
strcpy(task->data, s);
task->ctxint = entnum-1;
for(link = &svs.frameendtasks; *link; link = &(*link)->next)
; //add them on the end, so they're execed in order
*link = task;
}
static void QCBUILTIN PF_OpenPortal (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{
#ifdef Q2BSPS
@ -11790,10 +11791,11 @@ void PR_DumpPlatform_f(void)
{"SERVERKEY_PAUSESTATE","const string", CS, D("1 if the server claimed to be paused. 0 otherwise"), 0, "\"pausestate\""},
{"SERVERKEY_DLSTATE", "const string", CS, D("The progress of any current downloads. Empty string if no download is active, otherwise a tokenizable string containing this info:\nfiles-remaining, total-size, unknown-sizes-flag, file-localname, file-remotename, file-percent, file-rate, file-received-bytes, file-total-bytes\nIf the current file info is omitted, then we are waiting for a download to start."), 0, "\"dlstate\""},
{"SERVERKEY_PROTOCOL", "const string", CS, D("The protocol we are connected to the server with."), 0, "\"protocol\""},
{"SERVERKEY_MAXPLAYERS","const string", CS, D("The protocol we are connected to the server with."), 0, "\"maxplayers\""},
{"SERVERKEY_MAXPLAYERS","const string", CS, D("The number of player/spectator slots allocated on the server."), 0, "\"maxplayers\""},
{"STUFFCMD_IGNOREINDEMO","const float", QW|NQ, D("The protocol we are connected to the server with."), STUFFCMD_IGNOREINDEMO},
{"STUFFCMD_DEMOONLY", "const float", QW|NQ, D("The protocol we are connected to the server with."), STUFFCMD_DEMOONLY},
{"STUFFCMD_IGNOREINDEMO","const float", QW|NQ, D("This stuffcmd will NOT be written to mvds/qtv."), STUFFCMD_IGNOREINDEMO},
{"STUFFCMD_DEMOONLY", "const float", QW|NQ, D("This stuffcmd will ONLY be written into mvds/qtv streams."), STUFFCMD_DEMOONLY},
{"STUFFCMD_BROADCAST", "const float", QW|NQ, D("The stuffcmd will be broadcast server-wide (according to the mvd filters)."), STUFFCMD_BROADCAST},
/* {"SOUND_RELIABLE", "const float", QW|NQ, D("The sound will be sent reliably, and without regard to phs."), CF_RELIABLE},
{"SOUND_FORCELOOP", "const float", QW|NQ|CS,D("The sound will restart once it reaches the end of the sample."), CF_FORCELOOP},

View file

@ -0,0 +1,139 @@
/*
mod_terrain_create terrorgen; edit maps/terrorgen.hmp; map terrorgen
you can use mod_terrain_convert to generate+save the entire map for redistribution to people without this particular plugin version, ensuring longevity.
(this paticular command was meant to load+save the entire map, once mod_terrain_savever 2 is default...)
FIXME: no way to speciffy which gen plugin to use for a particular map
*/
#include "../plugin.h"
#include "glquake.h"
#include "com_mesh.h"
#include "gl_terrain.h"
static terrainfuncs_t *terr;
static modplugfuncs_t *modfuncs;
static void TerrorGen_GenerateOne(heightmap_t *hm, int sx, int sy, hmsection_t *s)
{
int x,y,i;
qbyte *lm;
s->flags |= TSF_RELIGHT;
//pick the textures to blend between. I'm just hardcoding shit here. this is meant to be some sort example.
Q_strlcpy(s->texname[0], "city4_2", sizeof(s->texname[0]));
Q_strlcpy(s->texname[1], "ground1_2", sizeof(s->texname[1]));
Q_strlcpy(s->texname[2], "ground1_8", sizeof(s->texname[2]));
Q_strlcpy(s->texname[3], "ground1_1", sizeof(s->texname[3]));
for (y = 0, i=0; y < SECTHEIGHTSIZE; y++)
for (x = 0; x < SECTHEIGHTSIZE; x++, i++)
{
//calculate where it is in worldspace, if that's useful to you.
float wx = hm->sectionsize*(sx + x/(float)(SECTHEIGHTSIZE-1));
float wy = hm->sectionsize*(sy + y/(float)(SECTHEIGHTSIZE-1));
//many shallow mounds, on a grid.
s->heights[i] = 128*sin(wx * (2*M_PI/1024)) * sin(wy * (2*M_PI/1024));
//calculate the RGBA tint. these are floats, so you can oversaturate.
s->colours[i][0] = 1;
s->colours[i][1] = 1;
s->colours[i][2] = 1;
s->colours[i][3] = 1;
}
//make sure there's lightmap storage available
terr->InitLightmap(s, /*fill with default values*/true);
lm = terr->GetLightmap(s, 0, /*flag as edited*/true);
if (lm)
{ //pleaseworkpleaseworkpleasework
for (y = 0; y < SECTTEXSIZE; y++, lm += (HMLMSTRIDE)*4)
for (x = 0; x < SECTTEXSIZE; x++)
{
//calculate where it is in worldspace, if that's useful to you.
float wx = hm->sectionsize*(sx + x/(float)(SECTTEXSIZE-1));
float wy = hm->sectionsize*(sy + y/(float)(SECTTEXSIZE-1));
//calc which texture to use
//adds to 1, with texture[3] taking the remainder.
lm[x*4+0] = max(0, 255 - 255*fabs(wx/1024));
lm[x*4+1] = max(0, 255 - 255*fabs(wy/1024));
lm[x*4+2] = min(lm[x*4+0],lm[x*4+1]);
lm[x*4+0] -= lm[x*4+2];
lm[x*4+1] -= lm[x*4+2];
//logically: lm[x*4+3] = 255-(lm[x*4+0]+lm[x*4+1]+lm[x*4+2]);
//however, the fourth channel is actually used as a lighting multiplier.
lm[x*4+3] = 255;
}
}
//insert the occasional mesh...
if ((sx&3) == 0 && (sy&3) == 0)
{
vec3_t ang, org, axis[3];
org[0] = hm->sectionsize*sx;
org[1] = hm->sectionsize*sy;
org[2] = 128;
VectorClear(ang);
ang[0] = sy*12.5; //lul
ang[1] = sx*12.5;
modfuncs->AngleVectors(ang, axis[0], axis[1], axis[2]);
VectorNegate(axis[1],axis[1]); //axis[1] needs to be left, not right. silly quakeisms.
//obviously you can insert mdls instead... preferably do that!
terr->AddMesh(hm, TGS_TRYLOAD, NULL, "maps/dm4.bsp", org, axis, 1);
}
}
#define GENBLOCKSIZE 1
static qboolean QDECL TerrorGen_GenerateBlock(heightmap_t *hm, int sx, int sy, unsigned int tgsflags)
{
hmsection_t *sect[GENBLOCKSIZE*GENBLOCKSIZE];
int mx = sx & ~(GENBLOCKSIZE-1);
int my = sy & ~(GENBLOCKSIZE-1);
if (!terr->GenerateSections(hm, mx, my, GENBLOCKSIZE, sect))
return false;
for (sy = 0; sy < GENBLOCKSIZE; sy++)
{
for (sx = 0; sx < GENBLOCKSIZE; sx++)
{
if (!sect[sx + sy*GENBLOCKSIZE])
continue; //already in memory.
TerrorGen_GenerateOne(hm, mx+sx-CHUNKBIAS, my+sy-CHUNKBIAS, sect[sx + sy*GENBLOCKSIZE]);
terr->FinishedSection(sect[sx + sy*GENBLOCKSIZE], true);
}
}
return true;
}
static qintptr_t TerrorGen_Shutdown(qintptr_t *args)
{ //if its still us, make sure there's no dangling pointers.
if (terr->AutogenerateSection == TerrorGen_GenerateBlock)
terr->AutogenerateSection = NULL;
return true;
}
qintptr_t Plug_Init(qintptr_t *args)
{
if (CHECKBUILTIN(Mod_GetPluginModelFuncs))
{
modfuncs = pMod_GetPluginModelFuncs(sizeof(modplugfuncs_t));
if (modfuncs && modfuncs->version < MODPLUGFUNCS_VERSION)
modfuncs = NULL;
}
if (modfuncs && modfuncs->GetTerrainFuncs)
terr = modfuncs->GetTerrainFuncs();
if (!terr)
return false;
if (!Plug_Export("Shutdown", TerrorGen_Shutdown))
return false;
terr->AutogenerateSection = TerrorGen_GenerateBlock;
return true;
}

View file

@ -0,0 +1,283 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="terrorgen"
ProjectGUID="{1E65A0D3-3371-4602-A69C-53BA389FFBD9}"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Debug/terrorgen.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../engine/server;../../engine/gl;../../engine/qclib;../../engine/client;../../engine/common"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FTEPLUGIN"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\Debug/terrorgen.pch"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="2057"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
IgnoreImportLibrary="true"
OutputFile="../../fteplug_$(ProjectName)_x86.dll"
LinkIncremental="2"
SuppressStartupBanner="true"
ModuleDefinitionFile="..\plugin.def"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/terrorgen_x86.pdb"
ImportLibrary=".\Debug/terrorgen_x86.lib"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile=".\Debug/terrorgen.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\Release"
IntermediateDirectory=".\Release"
ConfigurationType="2"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Release/terrorgen.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TERRORGEN_EXPORTS"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile=".\Release/terrorgen.pch"
AssemblerListingLocation=".\Release/"
ObjectFile=".\Release/"
ProgramDataBaseFileName=".\Release/"
BrowseInformation="1"
WarningLevel="3"
SuppressStartupBanner="true"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="2057"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="../../terrorgen_x86.dll"
LinkIncremental="1"
SuppressStartupBanner="true"
ModuleDefinitionFile="..\plugin.def"
ProgramDatabaseFile=".\Release/terrorgen_x86.pdb"
ImportLibrary=".\Release/terrorgen_x86.lib"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile=".\Release/terrorgen.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
>
<File
RelativePath="..\plugin.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath="..\qvm_api.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions=""
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions=""
/>
</FileConfiguration>
</File>
<File
RelativePath=".\terragen.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl"
>
<File
RelativePath="..\plugin.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
>
</Filter>
<File
RelativePath="..\plugin.def"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>