Merge branch 'qt' into qtscript
commit
78e0153e1f
|
@ -121,6 +121,7 @@ static LONG WINAPI windowsExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo)
|
||||||
# include <sys/types.h>
|
# include <sys/types.h>
|
||||||
# include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
# include <sys/wait.h>
|
# include <sys/wait.h>
|
||||||
|
# include <sys/ucontext.h>
|
||||||
# include <sys/utsname.h>
|
# include <sys/utsname.h>
|
||||||
#ifdef WZ_OS_LINUX
|
#ifdef WZ_OS_LINUX
|
||||||
# include <sys/prctl.h>
|
# include <sys/prctl.h>
|
||||||
|
@ -465,7 +466,7 @@ static pid_t execGdb(int const dumpFile, int* gdbWritePipe)
|
||||||
strlen("execcv(\"gdb\") failed\n"));
|
strlen("execcv(\"gdb\") failed\n"));
|
||||||
|
|
||||||
// Terminate the child, indicating failure
|
// Terminate the child, indicating failure
|
||||||
exit(1);
|
_exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -476,8 +477,43 @@ static pid_t execGdb(int const dumpFile, int* gdbWritePipe)
|
||||||
* @return false if any failure occurred, preventing a full "extended"
|
* @return false if any failure occurred, preventing a full "extended"
|
||||||
* backtrace.
|
* backtrace.
|
||||||
*/
|
*/
|
||||||
|
#ifdef SA_SIGINFO
|
||||||
|
static bool gdbExtendedBacktrace(int const dumpFile, const ucontext_t* sigcontext)
|
||||||
|
#else
|
||||||
static bool gdbExtendedBacktrace(int const dumpFile)
|
static bool gdbExtendedBacktrace(int const dumpFile)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Pointer to the stackframe of the function containing faulting
|
||||||
|
* instruction (assuming
|
||||||
|
* -fomit-frame-pointer has *not* been used).
|
||||||
|
*
|
||||||
|
* The frame pointer register (x86: %ebp, x64: %rbp) point's to the
|
||||||
|
* local variables of the current function (which are preceded by the
|
||||||
|
* previous frame pointer and the return address). Hence the
|
||||||
|
* additions to the frame-pointer register's content.
|
||||||
|
*/
|
||||||
|
void const * const frame =
|
||||||
|
#if defined(SA_SIGINFO) && __WORDSIZE == 64
|
||||||
|
sigcontext ? (void*)(sigcontext->uc_mcontext.gregs[REG_RBP] + sizeof(greg_t) + sizeof(void (*)(void))) : NULL;
|
||||||
|
#elif defined(SA_SIGINFO) && __WORDSIZE == 32
|
||||||
|
sigcontext ? (void*)(sigcontext->uc_mcontext.gregs[REG_EBP] + sizeof(greg_t) + sizeof(void (*)(void))) : NULL;
|
||||||
|
#else
|
||||||
|
NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Faulting instruction.
|
||||||
|
*/
|
||||||
|
void (*instruction)(void) =
|
||||||
|
#if defined(SA_SIGINFO) && __WORDSIZE == 64
|
||||||
|
sigcontext ? (void (*)(void))sigcontext->uc_mcontext.gregs[REG_RIP] : NULL;
|
||||||
|
#elif defined(SA_SIGINFO) && __WORDSIZE == 32
|
||||||
|
sigcontext ? (void (*)(void))sigcontext->uc_mcontext.gregs[REG_EIP] : NULL;
|
||||||
|
#else
|
||||||
|
NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Spawn a GDB instance and retrieve a pipe to its stdin
|
// Spawn a GDB instance and retrieve a pipe to its stdin
|
||||||
int gdbPipe;
|
int gdbPipe;
|
||||||
int status;
|
int status;
|
||||||
|
@ -489,7 +525,7 @@ static bool gdbExtendedBacktrace(int const dumpFile)
|
||||||
"frame 4\n"
|
"frame 4\n"
|
||||||
|
|
||||||
// Show the assembly code associated with that stack frame
|
// Show the assembly code associated with that stack frame
|
||||||
"disassemble\n"
|
"disassemble /m\n"
|
||||||
|
|
||||||
// Show the content of all registers
|
// Show the content of all registers
|
||||||
"info registers\n"
|
"info registers\n"
|
||||||
|
@ -500,7 +536,20 @@ static bool gdbExtendedBacktrace(int const dumpFile)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
write(gdbPipe, gdbCommands, sizeof(gdbCommands));
|
// Disassemble the faulting instruction (if we know it)
|
||||||
|
if (instruction)
|
||||||
|
{
|
||||||
|
dprintf(gdbPipe, "x/i %p\n", (void*)instruction);
|
||||||
|
}
|
||||||
|
|
||||||
|
// We have an intelligent guess for the *correct* frame, disassemble *that* one.
|
||||||
|
if (frame)
|
||||||
|
{
|
||||||
|
dprintf(gdbPipe, "frame %p\n"
|
||||||
|
"disassemble /m\n", frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
write(gdbPipe, gdbCommands, strlen(gdbCommands));
|
||||||
|
|
||||||
/* Flush our end of the pipe to make sure that GDB has all commands
|
/* Flush our end of the pipe to make sure that GDB has all commands
|
||||||
* directly available to it.
|
* directly available to it.
|
||||||
|
@ -558,7 +607,7 @@ static bool gdbExtendedBacktrace(int const dumpFile)
|
||||||
* \param sigcontext Signal context
|
* \param sigcontext Signal context
|
||||||
*/
|
*/
|
||||||
#ifdef SA_SIGINFO
|
#ifdef SA_SIGINFO
|
||||||
static void posixExceptionHandler(int signum, siginfo_t * siginfo, WZ_DECL_UNUSED void * sigcontext)
|
static void posixExceptionHandler(int signum, siginfo_t * siginfo, void * sigcontext)
|
||||||
#else
|
#else
|
||||||
static void posixExceptionHandler(int signum)
|
static void posixExceptionHandler(int signum)
|
||||||
#endif
|
#endif
|
||||||
|
@ -616,7 +665,11 @@ static void posixExceptionHandler(int signum)
|
||||||
fsync(dumpFile);
|
fsync(dumpFile);
|
||||||
|
|
||||||
// Use 'gdb' to provide an "extended" backtrace
|
// Use 'gdb' to provide an "extended" backtrace
|
||||||
|
#ifdef SA_SIGINFO
|
||||||
|
gdbExtendedBacktrace(dumpFile, (ucontext_t*)sigcontext);
|
||||||
|
#else
|
||||||
gdbExtendedBacktrace(dumpFile);
|
gdbExtendedBacktrace(dumpFile);
|
||||||
|
#endif
|
||||||
|
|
||||||
printf("Saved dump file to '%s'\n"
|
printf("Saved dump file to '%s'\n"
|
||||||
"If you create a bugreport regarding this crash, please include this file.\n", dumpFilename);
|
"If you create a bugreport regarding this crash, please include this file.\n", dumpFilename);
|
||||||
|
|
|
@ -80,7 +80,7 @@ extern void res_set_debug(int bdebug);
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%option yylineno noyywrap nounput never-interactive
|
%option yylineno noyywrap nounput
|
||||||
%option prefix="res_"
|
%option prefix="res_"
|
||||||
|
|
||||||
%x COMMENT
|
%x COMMENT
|
||||||
|
|
|
@ -84,7 +84,7 @@ extern void strres_set_debug(int bdebug);
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%option yylineno noyywrap nounput never-interactive
|
%option yylineno noyywrap nounput
|
||||||
%option prefix="strres_"
|
%option prefix="strres_"
|
||||||
|
|
||||||
%x COMMENT
|
%x COMMENT
|
||||||
|
|
|
@ -0,0 +1,169 @@
|
||||||
|
/* GIMP RGBA C-Source image dump (wz2100icon.c) */
|
||||||
|
|
||||||
|
static const struct {
|
||||||
|
unsigned int width;
|
||||||
|
unsigned int height;
|
||||||
|
unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */
|
||||||
|
unsigned char pixel_data[32 * 32 * 4 + 1];
|
||||||
|
} wz2100icon = {
|
||||||
|
32, 32, 4,
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ikn\15\224"
|
||||||
|
"\240\246g\232\245\251l\234\245\252i\241\250\253i\243\250\253i\241\247\253"
|
||||||
|
"i\237\246\252i\237\246\252i\234\245\252i\240\247\253i\251\253\255i\253\254"
|
||||||
|
"\256i\253\254\255i\253\253\255i\253\253\255i\252\252\255i\251\252\255i\246"
|
||||||
|
"\251\254i\243\247\253i\235\244\251i\227\242\251i\225\240\250i\224\237\246"
|
||||||
|
"k\225\241\244jijk\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0VZ\\\14\247\271"
|
||||||
|
"\302\236\335\370\377\374\335\361\375\377\344\365\377\376\352\370\377\376"
|
||||||
|
"\350\366\377\376\340\362\375\376\337\361\374\376\344\364\376\376\345\365"
|
||||||
|
"\376\376\356\373\377\376\365\374\377\376\365\371\377\376\362\370\377\376"
|
||||||
|
"\353\364\376\376\346\361\374\376\346\362\375\376\345\361\374\376\342\356"
|
||||||
|
"\372\376\333\354\370\376\326\352\367\376\322\350\366\376\322\350\367\376"
|
||||||
|
"\322\351\370\377\332\365\377\377\263\306\321\262OQT\34\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0chjX\351\366\372\357\361\377\377\377\232\236\240\377\221\221\224\377"
|
||||||
|
"\237\237\242\377\253\256\262\377\247\255\261\377\236\243\250\377\231\235"
|
||||||
|
"\241\377\234\236\241\377\240\241\243\377\250\250\250\377\247\250\251\377"
|
||||||
|
"\251\252\257\377\232\234\244\377\220\223\235\377\234\244\253\377\240\251"
|
||||||
|
"\261\377\226\235\243\377\222\230\234\377\227\233\237\377\232\235\237\377"
|
||||||
|
"\234\234\236\377\231\231\232\377\213\214\215\377\206\211\215\377\272\325"
|
||||||
|
"\346\377\313\366\377\375Rbjm\0\0\0\0\0\0\0\0\300\333\362\367\322\337\350"
|
||||||
|
"\377USS\377_bh\377\264\277\303\377\265\276\305\377\207\212\221\377|}\205"
|
||||||
|
"\377\212\216\230\377\274\301\306\377\303\313\321\377\273\304\312\377\210"
|
||||||
|
"\213\230\377\201\205\231\377\212\220\240\377\247\264\300\377\266\307\316"
|
||||||
|
"\377\237\247\261\377}|\207\377\234\242\253\377\311\327\335\377\266\306\322"
|
||||||
|
"\377\251\300\316\377\241\273\311\377\227\262\301\377\222\264\304\377Xaj\377"
|
||||||
|
"///\377\231\256\267\377\340\377\377\377\7\6\6\21\0\0\0\0\234\312\347\344"
|
||||||
|
"Yq\203\377...\377\205\222\241\377\366\377\377\377\346\367\377\377\223\230"
|
||||||
|
"\244\377\207\213\241\377\244\255\277\377\350\366\377\377\370\377\377\377"
|
||||||
|
"\365\377\377\377\237\244\262\377\212\220\241\377\213\217\231\377\335\353"
|
||||||
|
"\360\377\377\377\377\377\262\271\277\377}}\201\377\267\302\314\377\341\367"
|
||||||
|
"\377\377\311\343\361\377\316\346\362\377\316\346\361\377\332\361\377\377"
|
||||||
|
"\361\377\377\377u\177\215\377\25\25\25\377SU]\377\323\335\351\377\10\11\12"
|
||||||
|
"\32\13\15\17\2\245\312\344\350cr\200\377%*9\377\207\230\255\377\337\363\375"
|
||||||
|
"\377\327\346\355\377\206\212\226\377y|\221\377\211\216\231\377\344\356\364"
|
||||||
|
"\377\363\375\377\377\353\364\370\377\214\221\226\377qt~\377~\203\215\377"
|
||||||
|
"\333\342\347\377\377\377\377\377\250\256\265\377sv\202\377\177\203\211\377"
|
||||||
|
"z|\177\377\203\205\211\377}}\177\377\273\271\274\377\377\377\377\377\356"
|
||||||
|
"\366\376\377co~\377\5\12\31\377MXg\377\252\276\323\377!%*\36\30\35!\11\305"
|
||||||
|
"\335\351\355dow\377\11\17\35\377[h{\377\353\374\377\377\326\343\355\377Z"
|
||||||
|
"^d\377:CS\377QXb\377\334\345\357\377\356\371\377\377\342\354\365\377\\cn"
|
||||||
|
"\37726C\377BJX\377\320\330\344\377\377\377\377\377\212\224\242\377AK[\377"
|
||||||
|
"Xbs\377V^q\377U]r\377S]o\377\266\306\332\377\336\367\377\377\235\265\317"
|
||||||
|
"\377\33&9\377\26\40""5\377HVd\377\236\265\314\377\40$)%\0\0\0\20\313\336"
|
||||||
|
"\351\365\\dm\377\0\0\0\377NZi\377\343\373\373\377\274\320\336\377.7F\377"
|
||||||
|
"\32(D\377*6H\377\251\303\334\377\271\327\367\377\264\315\350\377:EW\377)"
|
||||||
|
"7N\3773AV\377\246\271\321\377\337\366\377\377o\200\230\377,;R\377DUm\377"
|
||||||
|
"(2F\377\14\21\36\377Tbu\377\275\334\370\377\274\342\377\377Rdv\377\22\35"
|
||||||
|
"""2\377\34&:\377:FT\377}\242\277\377\15\23\27.\6\7\10\31\257\315\342\375"
|
||||||
|
"NZe\377\0\0\13\377[n\203\377\317\355\367\377\253\302\323\377/;L\3772C_\377"
|
||||||
|
"Sf\200\377\235\300\334\377\251\320\360\377\240\302\336\377GXo\3778E]\377"
|
||||||
|
"7E[\377q\233\277\377\227\323\375\377Oj\205\377\21\25%\377!,B\377#.C\377\12"
|
||||||
|
"\15\32\377X|\235\377\216\317\375\377l\234\300\377$0A\377(4G\377!):\3775B"
|
||||||
|
"Q\377k\232\270\377\26\37%6(-0\35\303\331\344\377NV^\377\16\32""2\377m\204"
|
||||||
|
"\232\377\323\356\366\377\260\301\314\377GTh\377Pf\206\377Ug\177\377\252\312"
|
||||||
|
"\343\377\272\334\367\377\244\307\341\3779Kb\377%1K\377.<U\377j\234\275\377"
|
||||||
|
"\231\335\375\377<Wm\377\4\4\22\377!+@\377#-B\377*9N\377u\261\327\377\223"
|
||||||
|
"\323\367\377]\202\235\377'/F\377DSm\377<Ld\377DN[\377\266\303\315\377:=@"
|
||||||
|
"<%'($\324\341\345\377RX_\377%4R\377r\210\237\377\314\356\367\377\246\300"
|
||||||
|
"\317\377#,8\377\32%=\3770?S\377\264\326\351\377\313\352\375\377\302\334\352"
|
||||||
|
"\3777EW\377\"1O\377\".E\377\245\277\315\377\370\377\377\377o~\215\377\27"
|
||||||
|
"!8\3777DX\377\17\31""4\377{\207\232\377\377\377\377\377\377\377\377\377\177"
|
||||||
|
"\210\230\377->a\3778E^\377>Nb\377>GS\377\251\271\314\377(.3E\33\32\31.\344"
|
||||||
|
"\344\344\377MQZ\377\4\15'\377ax\216\377\326\363\367\377\260\306\320\377\22"
|
||||||
|
"\27!\377\23!?\377AQg\377\325\351\363\377\344\367\377\377\325\344\356\377"
|
||||||
|
"CPe\377*;X\377=L`\377\313\322\334\377\377\377\377\377\253\270\303\377q\223"
|
||||||
|
"\262\377Tf\212\377\34%H\377\250\264\311\377\357\375\377\377\254\300\330\377"
|
||||||
|
"#/B\377\"+<\377\30\37.\377\30\40""4\377/:F\377\177\252\305\377\37+2O#&*5"
|
||||||
|
"\277\321\342\377:CQ\377\0\3\32\377m{\213\377\367\367\367\377\307\310\316"
|
||||||
|
"\377,8H\377/Eg\377DNa\377\361\363\373\377\371\374\377\377\315\323\343\377"
|
||||||
|
"h|\223\377u\220\257\377Uh\205\377\240\267\317\377\276\342\374\377\201\236"
|
||||||
|
"\267\377Vi\201\377%/G\377?Pb\377\247\320\353\377\276\356\377\377_z\215\377"
|
||||||
|
"\0\0\12\377\34%8\377\36(;\377\25\36""1\377,7B\377\221\264\311\3775?HU6FP"
|
||||||
|
"<\211\265\322\377,8F\377\24\34.\377l\200\226\377\317\350\367\377\230\256"
|
||||||
|
"\301\377;I]\377{\226\266\377q\210\240\377\234\276\334\377\231\311\352\377"
|
||||||
|
"~\257\320\377@Ri\3779D]\377>Pj\377\210\272\333\377\261\347\376\377Um\203"
|
||||||
|
"\377\17\26.\377\13\26-\377\201\223\242\377\340\373\377\377\300\337\370\377"
|
||||||
|
"0=L\377\7\13\25\377\20\26%\377\36(8\377\",>\377.8C\377\227\265\313\377<G"
|
||||||
|
"O]$18D\231\277\330\377.5?\377LXt\377s\227\262\377z\270\336\377v\260\322\377"
|
||||||
|
"7J^\377IWt\377l\205\232\377\246\324\352\377\263\340\375\377\305\342\362\377"
|
||||||
|
"JSf\377\0\0\13\377IP_\377\342\363\377\377\342\367\377\377Xfu\377\2\14%\377"
|
||||||
|
":Jb\377\305\333\361\377\322\356\377\377\216\253\302\377*8S\377EWy\377Yk\202"
|
||||||
|
"\377BPl\377-7]\3775?O\377\215\256\305\3771?Hh#,2O\221\270\323\3773@M\377"
|
||||||
|
"6BZ\3779H[\377\247\311\342\377\335\372\374\377^fo\377\0\0\0\377\255\272\316"
|
||||||
|
"\377\347\373\377\377\251\270\310\377\302\347\377\377k\220\253\377\0\0\10"
|
||||||
|
"\377]w\220\377\273\351\377\377\207\264\324\377@Uq\377GSp\377g\205\232\377"
|
||||||
|
"\230\315\353\377\220\311\357\377]}\224\3772:V\3776B`\377G[q\3774AV\3773>"
|
||||||
|
"U\377/9E\377w\243\274\3770CNp6IRU\215\265\314\377)0;\377\16\25(\377\7\14"
|
||||||
|
"\34\377\215\242\265\377\324\364\364\377\223\254\303\377e~\223\377\312\366"
|
||||||
|
"\377\377_{\223\377\1\7\30\377\\\211\246\377\247\344\377\377v\217\245\377"
|
||||||
|
"\242\305\340\377\302\357\377\377v\225\255\377Q`}\377\204\240\273\377\235"
|
||||||
|
"\274\320\377\305\347\377\377\271\331\361\377\262\315\343\377\246\303\327"
|
||||||
|
"\377\227\265\306\377\227\271\314\377Ret\377\1\4\20\377&/;\377\252\275\314"
|
||||||
|
"\377W`iwMV]]\266\302\316\377\34\36%\377\30$:\377#.H\377,8J\377z\234\263\377"
|
||||||
|
"\210\266\323\377\251\332\364\377k\215\243\377Re~\377j\201\242\377Qav\377"
|
||||||
|
"\262\304\320\377\334\363\377\377\272\326\356\377\224\263\312\377IYp\377I"
|
||||||
|
"\\|\3777Ia\377\177\225\250\377\304\337\362\377\260\305\331\377\263\313\343"
|
||||||
|
"\377\251\306\337\377\226\264\312\377\241\276\317\377n\203\221\377\0\5\21"
|
||||||
|
"\377\33!+\377\236\260\302\377Zgu\201<GQ\200\234\300\317\377\20\26\37\377"
|
||||||
|
"*7N\377K^x\3772=O\377=K\\\377DVg\377GVc\377DQd\377Ym\211\377e~\224\377I_"
|
||||||
|
"~\377<H]\377;FU\377#5F\377\14\33+\377#0F\377:D[\377+/B\377\40'6\377\35&2"
|
||||||
|
"\377\34(7\377\16\26%\377\34%4\377!+9\377!)0\377\36%1\377!):\377&(.\377\177"
|
||||||
|
"\245\300\377Xv\213\235\23\34\"G\200\266\313\377_\200\216\377\22\30\"\377"
|
||||||
|
"FUo\377Zn\206\377K]w\3772?X\377Uv\223\377\202\271\330\377\177\265\324\377"
|
||||||
|
"s\252\311\377\214\304\343\377\222\303\341\377\226\303\337\377\252\313\342"
|
||||||
|
"\377\264\321\350\377\246\307\337\377\235\276\325\377\211\270\326\377u\251"
|
||||||
|
"\311\377~\255\316\377\205\263\320\377g\210\241\377#-D\377:F`\377:Ge\377:"
|
||||||
|
"Fd\3776?T\377Ns\214\377n\253\315\377\37""1:o\0\0\0\0$*.l\304\317\317\377"
|
||||||
|
"n\203\212\377\14\21\36\377\23\36""6\377\26\34-\377x\221\235\377\241\313\317"
|
||||||
|
"\377t\226\250\377_}\222\377m\213\245\377\201\234\257\377\212\243\262\377"
|
||||||
|
"w\220\245\377\203\234\265\377m\216\250\377Y\200\234\377k\224\264\377\203"
|
||||||
|
"\252\303\377\207\242\265\377\206\236\264\377x\217\245\377\230\274\317\377"
|
||||||
|
"\213\257\307\377DTn\377'.H\377\27\31'\377Ahz\377\207\314\317\377+=D\243\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0?EJ\206\317\317\317\377eps\377\40&/\377\236\262\272"
|
||||||
|
"\377\300\317\317\377@GO\377\1\6\31\37748D\377IPW\377#,C\377EQg\377mu~\377"
|
||||||
|
"GZo\377Tfz\377bky\377^n\205\377Q^z\377JZn\377Pgz\377\33&5\377\33\40+\377"
|
||||||
|
"x\235\257\377\204\262\311\3775K]\377Vis\377\276\317\317\377NY`\270\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0KSX\236\317\317\317\377\317\317\317\377"
|
||||||
|
"\226\252\261\377,6F\377%5N\377>JY\377\325\347\353\377\325\347\353\377f\216"
|
||||||
|
"\251\3773;V\377\325\347\353\377Y\200\234\377f\216\251\377\325\347\353\377"
|
||||||
|
"f\216\251\377Sf}\377f\216\251\377\325\347\353\377f\216\251\377\13\20\"\377"
|
||||||
|
"\23\34/\377e|\214\377\257\317\317\377\317\317\317\377knt\322\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""269y\203\217\221\326\255\270"
|
||||||
|
"\274\377\33\40+\377Pc{\377n\203\231\3776CX\377o\204\227\377\325\347\353\377"
|
||||||
|
"\0\0\20\377\305\326\331\377N^u\377\305\326\331\3775@P\377\304\325\331\377"
|
||||||
|
"j{\213\377\304\325\331\377\34\40-\377\304\325\331\377!-B\377\26\37/\377\201"
|
||||||
|
"\224\236\377\241\274\313\3774<B\215\0\0\0\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\250\300\315\376x\215\231\377"
|
||||||
|
"\0\2\15\377'5P\377L[k\377\275\315\320\3776CX\377\0\0\6\377\275\315\320\377"
|
||||||
|
"7DU\377\275\315\320\3779CR\377\275\315\320\377Xes\377\275\315\320\377\32"
|
||||||
|
"\40.\377\275\315\320\377\23\31'\377Tds\377\306\317\317\377(.3\204\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0""29?m\317\317\317\3772=G\377\5\13\32\377\255\274\277\377\255\274"
|
||||||
|
"\277\377\255\274\277\377\2\6\23\377\275\315\320\3776CU\377f\216\251\377\275"
|
||||||
|
"\315\320\377f\216\251\3774AT\377f\216\251\377\275\315\320\377f\216\251\377"
|
||||||
|
"\40%/\377\257\311\317\377j\177\217\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\214"
|
||||||
|
"\233\244\334\264\303\310\377\17\20\26\377-3?\377ENT\377@JU\377\23\32)\377"
|
||||||
|
"+2<\377\11\11\23\377\16\21\34\377%)0\377\15\16\25\377\5\10\27\377#(2\377"
|
||||||
|
",17\377\2\2\10\377l\201\220\377\257\314\317\377\6\7\7""4\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\23\26\27""8\307\317\317\377\222\250\263\377_kw\377gu\204"
|
||||||
|
"\377p}\210\377{\211\223\377ix\207\377q\200\215\377q\177\214\377jv\203\377"
|
||||||
|
"n{\207\377o}\210\377ds\202\377^n|\377n\203\224\377\265\317\317\377BQ\\\265"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0CNW\240\246\272\277\377\232"
|
||||||
|
"\257\274\377\227\254\271\377\226\252\271\377\225\251\267\377\222\247\267"
|
||||||
|
"\377\222\250\267\377\223\250\270\377\220\247\267\377\217\246\267\377\213"
|
||||||
|
"\244\266\377\210\242\265\377\213\244\266\377\220\251\273\377dx\207\361\0"
|
||||||
|
"\0\0\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\16\17""8CGE\230"
|
||||||
|
"9?D\2258?C\2247?C\2248>C\2249?C\2248?C\2247?C\2243=B\2244=C\2243<C\2242;"
|
||||||
|
"B\2242;A\224:CG\230\37$(}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
|
||||||
|
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
|
||||||
|
};
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#define WZAPP_H
|
#define WZAPP_H
|
||||||
|
|
||||||
#include <QtGui/QApplication>
|
#include <QtGui/QApplication>
|
||||||
|
#include <QtGui/QImageReader>
|
||||||
#include <QtCore/QTimer>
|
#include <QtCore/QTimer>
|
||||||
#include <QtOpenGL/QGLWidget>
|
#include <QtOpenGL/QGLWidget>
|
||||||
#include <QtCore/QBuffer>
|
#include <QtCore/QBuffer>
|
||||||
|
|
|
@ -587,10 +587,6 @@
|
||||||
#define PATH_MAX 4096
|
#define PATH_MAX 4096
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Tell Flex not to include unistd when it is not present.
|
|
||||||
#if !defined(HAVE_UNISTD_H) && !defined(YY_NO_UNISTD_H)
|
|
||||||
# define YY_NO_UNISTD_H
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(WZ_C99) && !defined(va_copy)
|
#if !defined(WZ_C99) && !defined(va_copy)
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -84,7 +84,7 @@ extern void audp_set_extra(YY_EXTRA_TYPE user_defined);
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%option yylineno noyywrap nounput never-interactive
|
%option yylineno noyywrap nounput
|
||||||
%option prefix="audp_"
|
%option prefix="audp_"
|
||||||
|
|
||||||
%x COMMENT
|
%x COMMENT
|
||||||
|
|
|
@ -80,7 +80,6 @@ static SDWORD playerIndex;
|
||||||
%option prefix="chat_"
|
%option prefix="chat_"
|
||||||
%option nounput
|
%option nounput
|
||||||
%option case-insensitive
|
%option case-insensitive
|
||||||
%option never-interactive
|
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
|
|
|
@ -458,7 +458,6 @@ static void pushInclude(const char *pIncludePath)
|
||||||
%option prefix="scr_"
|
%option prefix="scr_"
|
||||||
%option nounput
|
%option nounput
|
||||||
%option yylineno
|
%option yylineno
|
||||||
%option never-interactive
|
|
||||||
|
|
||||||
%x COMMENT
|
%x COMMENT
|
||||||
%x SLCOMMENT
|
%x SLCOMMENT
|
||||||
|
|
|
@ -843,10 +843,15 @@ void actionUpdateDroid(DROID *psDroid)
|
||||||
psPropStats = asPropulsionStats + psDroid->asBits[COMP_PROPULSION].nStat;
|
psPropStats = asPropulsionStats + psDroid->asBits[COMP_PROPULSION].nStat;
|
||||||
ASSERT_OR_RETURN(, psPropStats != NULL, "Invalid propulsion stats pointer");
|
ASSERT_OR_RETURN(, psPropStats != NULL, "Invalid propulsion stats pointer");
|
||||||
|
|
||||||
|
// Don't waste ammo unless given a direct attack order.
|
||||||
|
bool avoidOverkill = psDroid->order != DORDER_ATTACK && psDroid->order != DORDER_ATTACK &&
|
||||||
|
(psDroid->action == DACTION_ATTACK || psDroid->action == DACTION_MOVEFIRE || psDroid->action == DACTION_MOVETOATTACK ||
|
||||||
|
psDroid->action == DACTION_ROTATETOATTACK || psDroid->action == DACTION_VTOLATTACK);
|
||||||
|
|
||||||
// clear the target if it has died
|
// clear the target if it has died
|
||||||
for (i = 0; i < DROID_MAXWEAPS; i++)
|
for (i = 0; i < DROID_MAXWEAPS; i++)
|
||||||
{
|
{
|
||||||
if (psDroid->psActionTarget[i] && psDroid->psActionTarget[i]->died)
|
if (psDroid->psActionTarget[i] && (avoidOverkill? aiObjectIsProbablyDoomed(psDroid->psActionTarget[i]) : psDroid->psActionTarget[i]->died))
|
||||||
{
|
{
|
||||||
setDroidActionTarget(psDroid, NULL, i);
|
setDroidActionTarget(psDroid, NULL, i);
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
|
@ -859,7 +864,7 @@ void actionUpdateDroid(DROID *psDroid)
|
||||||
// if VTOL - return to rearm pad if not patrolling
|
// if VTOL - return to rearm pad if not patrolling
|
||||||
if (isVtolDroid(psDroid))
|
if (isVtolDroid(psDroid))
|
||||||
{
|
{
|
||||||
if (psDroid->order == DORDER_PATROL)
|
if ((psDroid->order == DORDER_PATROL || psDroid->order == DORDER_CIRCLE) && !vtolEmpty(psDroid))
|
||||||
{
|
{
|
||||||
// Back to the patrol.
|
// Back to the patrol.
|
||||||
actionDroid(psDroid, DACTION_MOVE, psDroid->orderX,psDroid->orderY);
|
actionDroid(psDroid, DACTION_MOVE, psDroid->orderX,psDroid->orderY);
|
||||||
|
@ -925,7 +930,7 @@ void actionUpdateDroid(DROID *psDroid)
|
||||||
WEAPON_STATS* const psWeapStats = &asWeaponStats[psDroid->asWeaps[i].nStat];
|
WEAPON_STATS* const psWeapStats = &asWeaponStats[psDroid->asWeaps[i].nStat];
|
||||||
if (psDroid->asWeaps[i].nStat > 0
|
if (psDroid->asWeaps[i].nStat > 0
|
||||||
&& psWeapStats->rotate
|
&& psWeapStats->rotate
|
||||||
&& aiBestNearestTarget(psDroid, &psTemp, i, NULL) >= 0)
|
&& aiBestNearestTarget(psDroid, &psTemp, i) >= 0)
|
||||||
{
|
{
|
||||||
if (secondaryGetState(psDroid, DSO_ATTACK_LEVEL) == DSS_ALEV_ALWAYS)
|
if (secondaryGetState(psDroid, DSO_ATTACK_LEVEL) == DSS_ALEV_ALWAYS)
|
||||||
{
|
{
|
||||||
|
@ -1025,7 +1030,7 @@ void actionUpdateDroid(DROID *psDroid)
|
||||||
&& psDroid->asWeaps[i].nStat > 0
|
&& psDroid->asWeaps[i].nStat > 0
|
||||||
&& psWeapStats->rotate
|
&& psWeapStats->rotate
|
||||||
&& psWeapStats->fireOnMove != FOM_NO
|
&& psWeapStats->fireOnMove != FOM_NO
|
||||||
&& aiBestNearestTarget(psDroid, &psTemp, i, NULL) >= 0)
|
&& aiBestNearestTarget(psDroid, &psTemp, i) >= 0)
|
||||||
{
|
{
|
||||||
if (secondaryGetState(psDroid, DSO_ATTACK_LEVEL) == DSS_ALEV_ALWAYS)
|
if (secondaryGetState(psDroid, DSO_ATTACK_LEVEL) == DSS_ALEV_ALWAYS)
|
||||||
{
|
{
|
||||||
|
@ -1089,7 +1094,7 @@ void actionUpdateDroid(DROID *psDroid)
|
||||||
{
|
{
|
||||||
// Can we find a good target for the weapon?
|
// Can we find a good target for the weapon?
|
||||||
BASE_OBJECT *psTemp;
|
BASE_OBJECT *psTemp;
|
||||||
if (aiBestNearestTarget(psDroid, &psTemp, i, NULL) >= 0) // assuming aiBestNearestTarget checks for electronic warfare
|
if (aiBestNearestTarget(psDroid, &psTemp, i) >= 0) // assuming aiBestNearestTarget checks for electronic warfare
|
||||||
{
|
{
|
||||||
bHasTarget = true;
|
bHasTarget = true;
|
||||||
setDroidActionTarget(psDroid, psTemp, i); // this updates psDroid->psActionTarget[i] to != NULL
|
setDroidActionTarget(psDroid, psTemp, i); // this updates psDroid->psActionTarget[i] to != NULL
|
||||||
|
@ -1145,8 +1150,19 @@ void actionUpdateDroid(DROID *psDroid)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DACTION_ATTACK:
|
case DACTION_ATTACK:
|
||||||
|
case DACTION_ROTATETOATTACK:
|
||||||
ASSERT_OR_RETURN( , psDroid->psActionTarget[0] != NULL, "target is NULL while attacking");
|
ASSERT_OR_RETURN( , psDroid->psActionTarget[0] != NULL, "target is NULL while attacking");
|
||||||
|
|
||||||
|
if (psDroid->action == DACTION_ROTATETOATTACK)
|
||||||
|
{
|
||||||
|
if (psDroid->sMove.Status == MOVETURNTOTARGET)
|
||||||
|
{
|
||||||
|
moveTurnDroid(psDroid, psDroid->psActionTarget[0]->pos.x, psDroid->psActionTarget[0]->pos.y);
|
||||||
|
break; // Still turning.
|
||||||
|
}
|
||||||
|
psDroid->action = DACTION_ATTACK;
|
||||||
|
}
|
||||||
|
|
||||||
//check the target hasn't become one the same player ID - Electronic Warfare
|
//check the target hasn't become one the same player ID - Electronic Warfare
|
||||||
if ((electronicDroid(psDroid) && (psDroid->player == psDroid->psActionTarget[0]->player)))
|
if ((electronicDroid(psDroid) && (psDroid->player == psDroid->psActionTarget[0]->player)))
|
||||||
{
|
{
|
||||||
|
@ -1195,10 +1211,7 @@ void actionUpdateDroid(DROID *psDroid)
|
||||||
|
|
||||||
if (nonNullWeapon[i]
|
if (nonNullWeapon[i]
|
||||||
&& actionVisibleTarget(psDroid, psActionTarget, i)
|
&& actionVisibleTarget(psDroid, psActionTarget, i)
|
||||||
&& actionInRange(psDroid, psActionTarget, i)
|
&& actionInRange(psDroid, psActionTarget, i))
|
||||||
&& (psDroid->order == DORDER_ATTACK
|
|
||||||
|| psDroid->order == DORDER_ATTACKTARGET
|
|
||||||
|| !aiObjectIsProbablyDoomed(psActionTarget)))
|
|
||||||
{
|
{
|
||||||
WEAPON_STATS* const psWeapStats = &asWeaponStats[psDroid->asWeaps[i].nStat];
|
WEAPON_STATS* const psWeapStats = &asWeaponStats[psDroid->asWeaps[i].nStat];
|
||||||
bHasTarget = true;
|
bHasTarget = true;
|
||||||
|
@ -1522,13 +1535,6 @@ void actionUpdateDroid(DROID *psDroid)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DACTION_ROTATETOATTACK:
|
|
||||||
// if (DROID_STOPPED(psDroid))
|
|
||||||
if (psDroid->sMove.Status != MOVETURNTOTARGET)
|
|
||||||
{
|
|
||||||
psDroid->action = DACTION_ATTACK;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case DACTION_MOVETOBUILD:
|
case DACTION_MOVETOBUILD:
|
||||||
if (!psDroid->psTarStats)
|
if (!psDroid->psTarStats)
|
||||||
{
|
{
|
||||||
|
@ -2138,7 +2144,7 @@ void actionUpdateDroid(DROID *psDroid)
|
||||||
WEAPON_STATS* const psWeapStats = &asWeaponStats[psDroid->asWeaps[i].nStat];
|
WEAPON_STATS* const psWeapStats = &asWeaponStats[psDroid->asWeaps[i].nStat];
|
||||||
if (psDroid->asWeaps[i].nStat > 0 && psWeapStats->rotate
|
if (psDroid->asWeaps[i].nStat > 0 && psWeapStats->rotate
|
||||||
&& secondaryGetState(psDroid, DSO_ATTACK_LEVEL) == DSS_ALEV_ALWAYS
|
&& secondaryGetState(psDroid, DSO_ATTACK_LEVEL) == DSS_ALEV_ALWAYS
|
||||||
&& aiBestNearestTarget(psDroid, &psTemp, i, NULL) >= 0 && psTemp)
|
&& aiBestNearestTarget(psDroid, &psTemp, i) >= 0 && psTemp)
|
||||||
{
|
{
|
||||||
psDroid->action = DACTION_ATTACK;
|
psDroid->action = DACTION_ATTACK;
|
||||||
setDroidActionTarget(psDroid, psTemp, 0);
|
setDroidActionTarget(psDroid, psTemp, 0);
|
||||||
|
|
66
src/ai.cpp
66
src/ai.cpp
|
@ -74,6 +74,27 @@ PlayerMask alliancebits[MAX_PLAYER_SLOTS];
|
||||||
/// A bitfield for the satellite uplink
|
/// A bitfield for the satellite uplink
|
||||||
PlayerMask satuplinkbits;
|
PlayerMask satuplinkbits;
|
||||||
|
|
||||||
|
static int aiObjRange(DROID *psDroid, int weapon_slot)
|
||||||
|
{
|
||||||
|
int32_t longRange;
|
||||||
|
if (psDroid->droidType == DROID_SENSOR)
|
||||||
|
{
|
||||||
|
longRange = psDroid->sensorRange;
|
||||||
|
}
|
||||||
|
else if (psDroid->numWeaps == 0 || psDroid->asWeaps[0].nStat == 0)
|
||||||
|
{
|
||||||
|
// Can't attack without a weapon
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WEAPON_STATS *psWStats = psDroid->asWeaps[weapon_slot].nStat + asWeaponStats;
|
||||||
|
longRange = proj_GetLongRange(psWStats);
|
||||||
|
}
|
||||||
|
|
||||||
|
return longRange;
|
||||||
|
}
|
||||||
|
|
||||||
// see if a structure has the range to fire on a target
|
// see if a structure has the range to fire on a target
|
||||||
static bool aiStructHasRange(STRUCTURE *psStruct, BASE_OBJECT *psTarget, int weapon_slot)
|
static bool aiStructHasRange(STRUCTURE *psStruct, BASE_OBJECT *psTarget, int weapon_slot)
|
||||||
{
|
{
|
||||||
|
@ -85,32 +106,15 @@ static bool aiStructHasRange(STRUCTURE *psStruct, BASE_OBJECT *psTarget, int wea
|
||||||
|
|
||||||
WEAPON_STATS *psWStats = psStruct->asWeaps[weapon_slot].nStat + asWeaponStats;
|
WEAPON_STATS *psWStats = psStruct->asWeaps[weapon_slot].nStat + asWeaponStats;
|
||||||
|
|
||||||
Vector2i diff = removeZ(psStruct->pos - psTarget->pos);
|
|
||||||
int longRange = proj_GetLongRange(psWStats);
|
int longRange = proj_GetLongRange(psWStats);
|
||||||
return diff*diff < longRange*longRange && lineOfFire(psStruct, psTarget, weapon_slot, true);
|
return objPosDiffSq(psStruct, psTarget) < longRange*longRange && lineOfFire(psStruct, psTarget, weapon_slot, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool aiDroidHasRange(DROID *psDroid, BASE_OBJECT *psTarget, int weapon_slot)
|
static bool aiDroidHasRange(DROID *psDroid, BASE_OBJECT *psTarget, int weapon_slot)
|
||||||
{
|
{
|
||||||
int32_t longRange;
|
int32_t longRange = aiObjRange(psDroid, weapon_slot);
|
||||||
|
|
||||||
if (psDroid->droidType == DROID_SENSOR)
|
return objPosDiffSq(psDroid, psTarget) < longRange*longRange;
|
||||||
{
|
|
||||||
longRange = psDroid->sensorRange;
|
|
||||||
}
|
|
||||||
else if (psDroid->numWeaps == 0 || psDroid->asWeaps[0].nStat == 0)
|
|
||||||
{
|
|
||||||
// Can't attack without a weapon
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WEAPON_STATS *psWStats = psDroid->asWeaps[weapon_slot].nStat + asWeaponStats;
|
|
||||||
longRange = proj_GetLongRange(psWStats);
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector2i diff = removeZ(psDroid->pos - psTarget->pos);
|
|
||||||
return diff*diff < longRange*longRange;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool aiObjHasRange(BASE_OBJECT *psObj, BASE_OBJECT *psTarget, int weapon_slot)
|
static bool aiObjHasRange(BASE_OBJECT *psObj, BASE_OBJECT *psTarget, int weapon_slot)
|
||||||
|
@ -476,7 +480,7 @@ static SDWORD targetAttackWeight(BASE_OBJECT *psTarget, BASE_OBJECT *psAttacker,
|
||||||
|
|
||||||
// Find the best nearest target for a droid
|
// Find the best nearest target for a droid
|
||||||
// Returns integer representing target priority, -1 if failed
|
// Returns integer representing target priority, -1 if failed
|
||||||
SDWORD aiBestNearestTarget(DROID *psDroid, BASE_OBJECT **ppsObj, int weapon_slot, UWORD *targetOrigin)
|
int aiBestNearestTarget(DROID *psDroid, BASE_OBJECT **ppsObj, int weapon_slot, int extraRange)
|
||||||
{
|
{
|
||||||
SDWORD bestMod = 0,newMod, failure = -1;
|
SDWORD bestMod = 0,newMod, failure = -1;
|
||||||
BASE_OBJECT *psTarget = NULL, *friendlyObj, *bestTarget = NULL, *iter, *targetInQuestion, *tempTarget;
|
BASE_OBJECT *psTarget = NULL, *friendlyObj, *bestTarget = NULL, *iter, *targetInQuestion, *tempTarget;
|
||||||
|
@ -485,12 +489,6 @@ SDWORD aiBestNearestTarget(DROID *psDroid, BASE_OBJECT **ppsObj, int weapon_slot
|
||||||
WEAPON_EFFECT weaponEffect;
|
WEAPON_EFFECT weaponEffect;
|
||||||
UWORD tmpOrigin = ORIGIN_UNKNOWN;
|
UWORD tmpOrigin = ORIGIN_UNKNOWN;
|
||||||
|
|
||||||
// reset origin
|
|
||||||
if (targetOrigin)
|
|
||||||
{
|
|
||||||
*targetOrigin = ORIGIN_UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
//don't bother looking if empty vtol droid
|
//don't bother looking if empty vtol droid
|
||||||
if (vtolEmpty(psDroid))
|
if (vtolEmpty(psDroid))
|
||||||
{
|
{
|
||||||
|
@ -517,7 +515,9 @@ SDWORD aiBestNearestTarget(DROID *psDroid, BASE_OBJECT **ppsObj, int weapon_slot
|
||||||
electronic = electronicDroid(psDroid);
|
electronic = electronicDroid(psDroid);
|
||||||
|
|
||||||
// Range was previously 9*TILE_UNITS. Increasing this doesn't seem to help much, though. Not sure why.
|
// Range was previously 9*TILE_UNITS. Increasing this doesn't seem to help much, though. Not sure why.
|
||||||
gridStartIterate(psDroid->pos.x, psDroid->pos.y, psDroid->sensorRange + 6*TILE_UNITS);
|
int droidRange = std::min(aiObjRange(psDroid, weapon_slot) + extraRange, psDroid->sensorRange + 6*TILE_UNITS);
|
||||||
|
|
||||||
|
gridStartIterate(psDroid->pos.x, psDroid->pos.y, droidRange);
|
||||||
for (iter = gridIterate(); iter != NULL; iter = gridIterate())
|
for (iter = gridIterate(); iter != NULL; iter = gridIterate())
|
||||||
{
|
{
|
||||||
friendlyObj = NULL;
|
friendlyObj = NULL;
|
||||||
|
@ -568,7 +568,7 @@ SDWORD aiBestNearestTarget(DROID *psDroid, BASE_OBJECT **ppsObj, int weapon_slot
|
||||||
&& targetInQuestion->visible[psDroid->player] == UBYTE_MAX
|
&& targetInQuestion->visible[psDroid->player] == UBYTE_MAX
|
||||||
&& !aiCheckAlliances(targetInQuestion->player,psDroid->player)
|
&& !aiCheckAlliances(targetInQuestion->player,psDroid->player)
|
||||||
&& validTarget(psDroid, targetInQuestion, weapon_slot)
|
&& validTarget(psDroid, targetInQuestion, weapon_slot)
|
||||||
&& aiDroidHasRange(psDroid, targetInQuestion, weapon_slot))
|
&& objPosDiffSq(psDroid, targetInQuestion) < droidRange*droidRange)
|
||||||
{
|
{
|
||||||
if (targetInQuestion->type == OBJ_DROID)
|
if (targetInQuestion->type == OBJ_DROID)
|
||||||
{
|
{
|
||||||
|
@ -654,10 +654,6 @@ SDWORD aiBestNearestTarget(DROID *psDroid, BASE_OBJECT **ppsObj, int weapon_slot
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (targetOrigin)
|
|
||||||
{
|
|
||||||
*targetOrigin = tmpOrigin;
|
|
||||||
}
|
|
||||||
*ppsObj = bestTarget;
|
*ppsObj = bestTarget;
|
||||||
return bestMod;
|
return bestMod;
|
||||||
}
|
}
|
||||||
|
@ -781,7 +777,7 @@ BOOL aiChooseTarget(BASE_OBJECT *psObj, BASE_OBJECT **ppsTarget, int weapon_slot
|
||||||
BASE_OBJECT *psCurrTarget = ((DROID *)psObj)->psActionTarget[0];
|
BASE_OBJECT *psCurrTarget = ((DROID *)psObj)->psActionTarget[0];
|
||||||
|
|
||||||
/* find a new target */
|
/* find a new target */
|
||||||
int newTargetWeight = aiBestNearestTarget((DROID *)psObj, &psTarget, weapon_slot, NULL);
|
int newTargetWeight = aiBestNearestTarget((DROID *)psObj, &psTarget, weapon_slot);
|
||||||
|
|
||||||
/* Calculate weight of the current target if updating; but take care not to target
|
/* Calculate weight of the current target if updating; but take care not to target
|
||||||
* ourselves... */
|
* ourselves... */
|
||||||
|
@ -959,7 +955,7 @@ BOOL aiChooseSensorTarget(BASE_OBJECT *psObj, BASE_OBJECT **ppsTarget)
|
||||||
{
|
{
|
||||||
BASE_OBJECT *psTarget = NULL;
|
BASE_OBJECT *psTarget = NULL;
|
||||||
|
|
||||||
if (aiBestNearestTarget((DROID *)psObj, &psTarget, 0, NULL) >= 0)
|
if (aiBestNearestTarget((DROID *)psObj, &psTarget, 0) >= 0)
|
||||||
{
|
{
|
||||||
/* See if in sensor range */
|
/* See if in sensor range */
|
||||||
const int xdiff = psTarget->pos.x - psObj->pos.x;
|
const int xdiff = psTarget->pos.x - psObj->pos.x;
|
||||||
|
|
3
src/ai.h
3
src/ai.h
|
@ -58,7 +58,8 @@ void aiUpdateDroid(DROID *psDroid);
|
||||||
|
|
||||||
// Find the nearest best target for a droid
|
// Find the nearest best target for a droid
|
||||||
// returns integer representing quality of choice, -1 if failed
|
// returns integer representing quality of choice, -1 if failed
|
||||||
SDWORD aiBestNearestTarget(DROID *psDroid, BASE_OBJECT **ppsObj, int weapon_slot, UWORD *targetOrigin);
|
int aiBestNearestTarget(DROID *psDroid, BASE_OBJECT **ppsObj, int weapon_slot, int extraRange = 0);
|
||||||
|
int aiBestNearestTarget(DROID *psDroid, BASE_OBJECT **ppsObj, int weapon_slot, void const *extraRange);
|
||||||
|
|
||||||
// Are there a lot of bullets heading towards the structure?
|
// Are there a lot of bullets heading towards the structure?
|
||||||
BOOL aiObjectIsProbablyDoomed(BASE_OBJECT *psObject);
|
BOOL aiObjectIsProbablyDoomed(BASE_OBJECT *psObject);
|
||||||
|
|
|
@ -137,11 +137,14 @@ static inline bool isDead(const BASE_OBJECT* psObj)
|
||||||
|
|
||||||
static inline int objPosDiffSq(Position pos1, Position pos2)
|
static inline int objPosDiffSq(Position pos1, Position pos2)
|
||||||
{
|
{
|
||||||
const int xdiff = pos1.x - pos2.x;
|
const Vector2i diff = removeZ(pos1 - pos2);
|
||||||
const int ydiff = pos1.y - pos2.y;
|
return diff*diff;
|
||||||
return (xdiff * xdiff + ydiff * ydiff);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int objPosDiffSq(SIMPLE_OBJECT const *pos1, SIMPLE_OBJECT const *pos2)
|
||||||
|
{
|
||||||
|
return objPosDiffSq(pos1->pos, pos2->pos);
|
||||||
|
}
|
||||||
|
|
||||||
// True iff object is a droid, structure or feature (not a projectile). Will incorrectly return true if passed a nonsense object of type OBJ_TARGET or OBJ_NUM_TYPES.
|
// True iff object is a droid, structure or feature (not a projectile). Will incorrectly return true if passed a nonsense object of type OBJ_TARGET or OBJ_NUM_TYPES.
|
||||||
static inline bool isBaseObject(SIMPLE_OBJECT const *psObject) { return psObject->type != OBJ_PROJECTILE; }
|
static inline bool isBaseObject(SIMPLE_OBJECT const *psObject) { return psObject->type != OBJ_PROJECTILE; }
|
||||||
|
|
|
@ -2911,7 +2911,7 @@ bool calcDroidMuzzleLocation(DROID *psDroid, Vector3i *muzzle, int weapon_slot)
|
||||||
* \param aName Template aName
|
* \param aName Template aName
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
DROID_TEMPLATE *GetHumanDroidTemplate(char *aName)
|
DROID_TEMPLATE *GetHumanDroidTemplate(const char *aName)
|
||||||
{
|
{
|
||||||
DROID_TEMPLATE *templatelist, *found = NULL, *foundOtherPlayer = NULL;
|
DROID_TEMPLATE *templatelist, *found = NULL, *foundOtherPlayer = NULL;
|
||||||
int i, playerFound = 0;
|
int i, playerFound = 0;
|
||||||
|
@ -2959,7 +2959,7 @@ DROID_TEMPLATE *GetHumanDroidTemplate(char *aName)
|
||||||
* \param aName Template aName
|
* \param aName Template aName
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
DROID_TEMPLATE *GetAIDroidTemplate(char *aName)
|
DROID_TEMPLATE *GetAIDroidTemplate(const char *aName)
|
||||||
{
|
{
|
||||||
DROID_TEMPLATE *templatelist, *found = NULL;
|
DROID_TEMPLATE *templatelist, *found = NULL;
|
||||||
|
|
||||||
|
|
|
@ -218,8 +218,8 @@ bool calcDroidMuzzleLocation(DROID *psDroid, Vector3i *muzzle, int weapon_slot);
|
||||||
bool calcDroidMuzzleBaseLocation(DROID *psDroid, Vector3i *muzzle, int weapon_slot);
|
bool calcDroidMuzzleBaseLocation(DROID *psDroid, Vector3i *muzzle, int weapon_slot);
|
||||||
|
|
||||||
/* gets a template from its aName (when pName is unknown) */
|
/* gets a template from its aName (when pName is unknown) */
|
||||||
extern DROID_TEMPLATE *GetHumanDroidTemplate(char *aName);
|
extern DROID_TEMPLATE *GetHumanDroidTemplate(const char *aName);
|
||||||
extern DROID_TEMPLATE *GetAIDroidTemplate(char *aName);
|
extern DROID_TEMPLATE *GetAIDroidTemplate(const char *aName);
|
||||||
/* gets a template from its name - relies on the name being unique */
|
/* gets a template from its name - relies on the name being unique */
|
||||||
extern DROID_TEMPLATE * getTemplateFromUniqueName(const char *pName, unsigned int player);
|
extern DROID_TEMPLATE * getTemplateFromUniqueName(const char *pName, unsigned int player);
|
||||||
/* gets a template from its name - relies on the name being unique */
|
/* gets a template from its name - relies on the name being unique */
|
||||||
|
@ -241,9 +241,6 @@ extern const char *droidGetName(const DROID *psDroid);
|
||||||
// Set a droid's name.
|
// Set a droid's name.
|
||||||
extern void droidSetName(DROID *psDroid, const char *pName);
|
extern void droidSetName(DROID *psDroid, const char *pName);
|
||||||
|
|
||||||
// Set a templates name.
|
|
||||||
extern void templateSetName(DROID_TEMPLATE *psTemplate,char *pName);
|
|
||||||
|
|
||||||
// returns true when no droid on x,y square.
|
// returns true when no droid on x,y square.
|
||||||
extern BOOL noDroid (UDWORD x, UDWORD y); // true if no droid at x,y
|
extern BOOL noDroid (UDWORD x, UDWORD y); // true if no droid at x,y
|
||||||
// returns an x/y coord to place a droid
|
// returns an x/y coord to place a droid
|
||||||
|
|
|
@ -178,6 +178,7 @@ static BOOL addSlideOptions(void)
|
||||||
addFESlider(INTINGAMEOP_CDVOL_S, INTINGAMEOP, INTINGAMEOP_MID, INTINGAMEOP_3_Y-5,
|
addFESlider(INTINGAMEOP_CDVOL_S, INTINGAMEOP, INTINGAMEOP_MID, INTINGAMEOP_3_Y-5,
|
||||||
AUDIO_VOL_MAX, (int)(sound_GetMusicVolume() * 100));
|
AUDIO_VOL_MAX, (int)(sound_GetMusicVolume() * 100));
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
// Tactical UI: Target Origin
|
// Tactical UI: Target Origin
|
||||||
if(tuiTargetOrigin)
|
if(tuiTargetOrigin)
|
||||||
{
|
{
|
||||||
|
@ -189,6 +190,7 @@ static BOOL addSlideOptions(void)
|
||||||
addIGTextButton(INTINGAMEOP_TUI_TARGET_ORIGIN_SW, INTINGAMEOP_4_Y, INTINGAMEOP_SW_W,
|
addIGTextButton(INTINGAMEOP_TUI_TARGET_ORIGIN_SW, INTINGAMEOP_4_Y, INTINGAMEOP_SW_W,
|
||||||
_("Tactical UI (Target Origin Icon): Hide"), WBUT_PLAIN);
|
_("Tactical UI (Target Origin Icon): Hide"), WBUT_PLAIN);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
addIGTextButton(INTINGAMEOP_RESUME, INTINGAMEOP_5_Y, INTINGAMEOP_SW_W, _("Resume Game"), OPALIGN);
|
addIGTextButton(INTINGAMEOP_RESUME, INTINGAMEOP_5_Y, INTINGAMEOP_SW_W, _("Resume Game"), OPALIGN);
|
||||||
|
|
||||||
|
@ -261,10 +263,8 @@ static BOOL _intAddInGameOptions(void)
|
||||||
// add 'resume'
|
// add 'resume'
|
||||||
addIGTextButton(INTINGAMEOP_RESUME, INTINGAMEOP_1_Y, INTINGAMEOP_OP_W, _("Resume Game"), OPALIGN);
|
addIGTextButton(INTINGAMEOP_RESUME, INTINGAMEOP_1_Y, INTINGAMEOP_OP_W, _("Resume Game"), OPALIGN);
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
// add 'options'
|
// add 'options'
|
||||||
addIGTextButton(INTINGAMEOP_OPTIONS, INTINGAMEOP_2_Y, INTINGAMEOP_OP_W, _("Audio Options"), OPALIGN);
|
addIGTextButton(INTINGAMEOP_OPTIONS, INTINGAMEOP_2_Y, INTINGAMEOP_OP_W, _("Audio Options"), OPALIGN);
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((!bMultiPlayer || (NetPlay.bComms == 0)) && !bInTutorial)
|
if ((!bMultiPlayer || (NetPlay.bComms == 0)) && !bInTutorial)
|
||||||
{
|
{
|
||||||
|
|
|
@ -87,7 +87,7 @@ extern void lev_set_extra(YY_EXTRA_TYPE user_defined);
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%option yylineno noyywrap nounput never-interactive
|
%option yylineno noyywrap nounput
|
||||||
%option prefix="lev_"
|
%option prefix="lev_"
|
||||||
|
|
||||||
%x COMMENT
|
%x COMMENT
|
||||||
|
|
|
@ -79,7 +79,7 @@ extern void message_set_debug(int bdebug);
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%option yylineno noyywrap nounput never-interactive
|
%option yylineno noyywrap nounput
|
||||||
%option prefix="message_"
|
%option prefix="message_"
|
||||||
|
|
||||||
%x COMMENT
|
%x COMMENT
|
||||||
|
|
25
src/move.cpp
25
src/move.cpp
|
@ -2515,18 +2515,6 @@ void moveUpdateDroid(DROID *psDroid)
|
||||||
case MOVETURNTOTARGET:
|
case MOVETURNTOTARGET:
|
||||||
moveSpeed = 0;
|
moveSpeed = 0;
|
||||||
moveDir = iAtan2(psDroid->sMove.target - removeZ(psDroid->pos));
|
moveDir = iAtan2(psDroid->sMove.target - removeZ(psDroid->pos));
|
||||||
if (psDroid->rot.direction == moveDir)
|
|
||||||
{
|
|
||||||
if ( psPropStats->propulsionType == PROPULSION_TYPE_LIFT )
|
|
||||||
{
|
|
||||||
psDroid->sMove.Status = MOVEPOINTTOPOINT;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
psDroid->sMove.Status = MOVEINACTIVE;
|
|
||||||
}
|
|
||||||
objTrace(psDroid->id, "MOVETURNTOTARGET complete");
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case MOVEHOVER:
|
case MOVEHOVER:
|
||||||
moveDescending(psDroid);
|
moveDescending(psDroid);
|
||||||
|
@ -2599,6 +2587,19 @@ void moveUpdateDroid(DROID *psDroid)
|
||||||
updateDroidOrientation(psDroid);
|
updateDroidOrientation(psDroid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (psDroid->sMove.Status == MOVETURNTOTARGET && psDroid->rot.direction == moveDir)
|
||||||
|
{
|
||||||
|
if (psPropStats->propulsionType == PROPULSION_TYPE_LIFT)
|
||||||
|
{
|
||||||
|
psDroid->sMove.Status = MOVEPOINTTOPOINT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
psDroid->sMove.Status = MOVEINACTIVE;
|
||||||
|
}
|
||||||
|
objTrace(psDroid->id, "MOVETURNTOTARGET complete");
|
||||||
|
}
|
||||||
|
|
||||||
if( (psDroid->inFire && psDroid->droidType != DROID_PERSON) && psDroid->visible[selectedPlayer])
|
if( (psDroid->inFire && psDroid->droidType != DROID_PERSON) && psDroid->visible[selectedPlayer])
|
||||||
{
|
{
|
||||||
pos.x = psDroid->pos.x + (18-rand()%36);
|
pos.x = psDroid->pos.x + (18-rand()%36);
|
||||||
|
|
|
@ -159,7 +159,8 @@ BOOL recvDroidSecondary(NETQUEUE queue)
|
||||||
NETenum(&state);
|
NETenum(&state);
|
||||||
|
|
||||||
// If we can not find the droid should we not ask for it?
|
// If we can not find the droid should we not ask for it?
|
||||||
if (!IdToDroid(droid, player, &psDroid))
|
psDroid = IdToDroid(droid, player);
|
||||||
|
if (!psDroid)
|
||||||
{
|
{
|
||||||
NETend();
|
NETend();
|
||||||
return false;
|
return false;
|
||||||
|
@ -218,14 +219,16 @@ BOOL recvDroidEmbark(NETQUEUE queue)
|
||||||
NETuint32_t(&transporterID);
|
NETuint32_t(&transporterID);
|
||||||
|
|
||||||
// we have to find the droid on our (local) list first.
|
// we have to find the droid on our (local) list first.
|
||||||
if (!IdToDroid(droidID, player, &psDroid))
|
psDroid = IdToDroid(droidID, player);
|
||||||
|
if (!psDroid)
|
||||||
{
|
{
|
||||||
NETend();
|
NETend();
|
||||||
// Possible it already died? (sync error?)
|
// Possible it already died? (sync error?)
|
||||||
debug(LOG_WARNING, "player's %d droid %d wasn't found?", player,droidID);
|
debug(LOG_WARNING, "player's %d droid %d wasn't found?", player,droidID);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!IdToDroid(transporterID, player, &psTransporterDroid))
|
psTransporterDroid = IdToDroid(transporterID, player);
|
||||||
|
if (!psTransporterDroid)
|
||||||
{
|
{
|
||||||
NETend();
|
NETend();
|
||||||
// Possible it already died? (sync error?)
|
// Possible it already died? (sync error?)
|
||||||
|
@ -310,7 +313,8 @@ BOOL recvDroidDisEmbark(NETQUEUE queue)
|
||||||
NETend();
|
NETend();
|
||||||
|
|
||||||
// find the transporter first
|
// find the transporter first
|
||||||
if (!IdToDroid(transporterID, player, &psTransporterDroid))
|
psTransporterDroid = IdToDroid(transporterID, player);
|
||||||
|
if (!psTransporterDroid)
|
||||||
{
|
{
|
||||||
// Possible it already died? (sync error?)
|
// Possible it already died? (sync error?)
|
||||||
debug(LOG_WARNING, "player's %d transport droid %d wasn't found?", player, transporterID);
|
debug(LOG_WARNING, "player's %d transport droid %d wasn't found?", player, transporterID);
|
||||||
|
@ -676,8 +680,8 @@ BOOL recvDroidInfo(NETQUEUE queue)
|
||||||
NETuint32_t(&deltaDroidId);
|
NETuint32_t(&deltaDroidId);
|
||||||
info.droidId += deltaDroidId;
|
info.droidId += deltaDroidId;
|
||||||
|
|
||||||
DROID *psDroid = NULL;
|
DROID *psDroid = IdToDroid(info.droidId, ANYPLAYER);
|
||||||
if (!IdToDroid(info.droidId, ANYPLAYER, &psDroid))
|
if (!psDroid)
|
||||||
{
|
{
|
||||||
debug(LOG_NEVER, "Packet from %d refers to non-existent droid %u, [%s : p%d]",
|
debug(LOG_NEVER, "Packet from %d refers to non-existent droid %u, [%s : p%d]",
|
||||||
queue.index, info.droidId, isHumanPlayer(info.player) ? "Human" : "AI", info.player);
|
queue.index, info.droidId, isHumanPlayer(info.player) ? "Human" : "AI", info.player);
|
||||||
|
@ -734,21 +738,17 @@ static BASE_OBJECT *processDroidTarget(OBJECT_TYPE desttype, uint32_t destid)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BASE_OBJECT *psObj = NULL;
|
BASE_OBJECT *psObj = NULL;
|
||||||
DROID *pD;
|
|
||||||
|
|
||||||
switch (desttype)
|
switch (desttype)
|
||||||
{
|
{
|
||||||
case OBJ_DROID:
|
case OBJ_DROID:
|
||||||
if (IdToDroid(destid, ANYPLAYER, &pD))
|
psObj = IdToDroid(destid, ANYPLAYER);
|
||||||
{
|
|
||||||
psObj = (BASE_OBJECT*)pD;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case OBJ_STRUCTURE:
|
case OBJ_STRUCTURE:
|
||||||
psObj = (BASE_OBJECT*)IdToStruct(destid,ANYPLAYER);
|
psObj = IdToStruct(destid, ANYPLAYER);
|
||||||
break;
|
break;
|
||||||
case OBJ_FEATURE:
|
case OBJ_FEATURE:
|
||||||
psObj = (BASE_OBJECT*)IdToFeature(destid,ANYPLAYER);
|
psObj = IdToFeature(destid, ANYPLAYER);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// We should not get this!
|
// We should not get this!
|
||||||
|
@ -804,7 +804,8 @@ BOOL recvDestroyDroid(NETQUEUE queue)
|
||||||
|
|
||||||
// Retrieve the droid
|
// Retrieve the droid
|
||||||
NETuint32_t(&id);
|
NETuint32_t(&id);
|
||||||
if (!IdToDroid(id, ANYPLAYER, &psDroid))
|
psDroid = IdToDroid(id, ANYPLAYER);
|
||||||
|
if (!psDroid)
|
||||||
{
|
{
|
||||||
debug(LOG_DEATH, "droid %d on request from player %d can't be found? Must be dead already?",
|
debug(LOG_DEATH, "droid %d on request from player %d can't be found? Must be dead already?",
|
||||||
id, queue.index );
|
id, queue.index );
|
||||||
|
|
|
@ -182,9 +182,9 @@ void giftRadar(uint8_t from, uint8_t to, BOOL send)
|
||||||
// \param to :player that should be getting the droid
|
// \param to :player that should be getting the droid
|
||||||
static void recvGiftDroids(uint8_t from, uint8_t to, uint32_t droidID)
|
static void recvGiftDroids(uint8_t from, uint8_t to, uint32_t droidID)
|
||||||
{
|
{
|
||||||
DROID *psDroid;
|
DROID *psDroid = IdToDroid(droidID, from);
|
||||||
|
|
||||||
if (IdToDroid(droidID, from, &psDroid))
|
if (psDroid)
|
||||||
{
|
{
|
||||||
syncDebugDroid(psDroid, '<');
|
syncDebugDroid(psDroid, '<');
|
||||||
giftSingleDroid(psDroid, to);
|
giftSingleDroid(psDroid, to);
|
||||||
|
|
|
@ -243,7 +243,7 @@ BOOL MultiPlayerLeave(UDWORD playerIndex)
|
||||||
{
|
{
|
||||||
sendPlayerLeft(playerIndex);
|
sendPlayerLeft(playerIndex);
|
||||||
}
|
}
|
||||||
game.skDiff[playerIndex] = DIFF_SLIDER_STOPS / 2;
|
game.skDiff[playerIndex] = 0;
|
||||||
|
|
||||||
addConsoleMessage(buf, DEFAULT_JUSTIFY, SYSTEM_MESSAGE);
|
addConsoleMessage(buf, DEFAULT_JUSTIFY, SYSTEM_MESSAGE);
|
||||||
|
|
||||||
|
|
|
@ -290,110 +290,82 @@ BOOL multiPlayerLoop(void)
|
||||||
// quikie functions.
|
// quikie functions.
|
||||||
|
|
||||||
// to get droids ...
|
// to get droids ...
|
||||||
BOOL IdToDroid(UDWORD id, UDWORD player, DROID **psDroid)
|
DROID *IdToDroid(UDWORD id, UDWORD player)
|
||||||
{
|
{
|
||||||
UDWORD i;
|
if (player == ANYPLAYER)
|
||||||
DROID *d;
|
|
||||||
|
|
||||||
if(player == ANYPLAYER)
|
|
||||||
{
|
{
|
||||||
for(i=0;i<MAX_PLAYERS;i++) // find the droid to order form them all
|
for (int i = 0; i < MAX_PLAYERS; i++)
|
||||||
{
|
{
|
||||||
d = apsDroidLists[i];
|
for (DROID *d = apsDroidLists[i]; d; d = d->psNext)
|
||||||
while((d != NULL )&&(d->id !=id) )d=d->psNext;
|
|
||||||
if(d)
|
|
||||||
{
|
{
|
||||||
*psDroid = d;
|
if (d->id == id)
|
||||||
return true;
|
{
|
||||||
|
return d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
else // find the droid, given player
|
}
|
||||||
|
else if (player < MAX_PLAYERS)
|
||||||
{
|
{
|
||||||
if (player >= MAX_PLAYERS)
|
for (DROID *d = apsDroidLists[player]; d; d = d->psNext)
|
||||||
{
|
{
|
||||||
debug(LOG_FEATURE, "Feature detected");
|
if (d->id == id)
|
||||||
// feature hack, player = PLAYER_FEATURE are features
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
d = apsDroidLists[player];
|
|
||||||
while( (d != NULL ) && (d->id !=id))d=d->psNext;
|
|
||||||
if(d)
|
|
||||||
{
|
{
|
||||||
*psDroid = d;
|
return d;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ////////////////////////////////////////////////////////////////////////////
|
// ////////////////////////////////////////////////////////////////////////////
|
||||||
// find a structure
|
// find a structure
|
||||||
STRUCTURE *IdToStruct(UDWORD id,UDWORD player)
|
STRUCTURE *IdToStruct(UDWORD id, UDWORD player)
|
||||||
{
|
{
|
||||||
STRUCTURE *psStr = NULL;
|
if (player == ANYPLAYER)
|
||||||
UDWORD i;
|
|
||||||
|
|
||||||
if(player == ANYPLAYER)
|
|
||||||
{
|
{
|
||||||
for(i=0;i<MAX_PLAYERS;i++)
|
for (int i = 0; i < MAX_PLAYERS; i++)
|
||||||
{
|
{
|
||||||
for (psStr=apsStructLists[i];( (psStr != NULL) && (psStr->id != id)); psStr=psStr->psNext) {}
|
for (STRUCTURE *d = apsStructLists[i]; d; d = d->psNext)
|
||||||
if(psStr)
|
|
||||||
{
|
{
|
||||||
return psStr;
|
if (d->id == id)
|
||||||
|
{
|
||||||
|
return d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
|
else if (player < MAX_PLAYERS)
|
||||||
{
|
{
|
||||||
if (player >= MAX_PLAYERS)
|
for (STRUCTURE *d = apsStructLists[player]; d; d = d->psNext)
|
||||||
{
|
{
|
||||||
debug(LOG_FEATURE, "Feature detected");
|
if (d->id == id)
|
||||||
// feature hack, player = PLAYER_FEATURE are features
|
{
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
for (psStr=apsStructLists[player];((psStr != NULL )&&(psStr->id != id) );psStr=psStr->psNext) {}
|
|
||||||
}
|
|
||||||
return psStr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ////////////////////////////////////////////////////////////////////////////
|
// ////////////////////////////////////////////////////////////////////////////
|
||||||
// find a feature
|
// find a feature
|
||||||
FEATURE *IdToFeature(UDWORD id,UDWORD player)
|
FEATURE *IdToFeature(UDWORD id, UDWORD player)
|
||||||
{
|
{
|
||||||
FEATURE *psF =NULL;
|
(void)player; // unused, all features go into player 0
|
||||||
UDWORD i;
|
for (FEATURE *d = apsFeatureLists[0]; d; d = d->psNext)
|
||||||
|
|
||||||
STATIC_ASSERT(MAX_PLAYERS + 2 < ANYPLAYER);
|
|
||||||
if(player == ANYPLAYER)
|
|
||||||
{
|
{
|
||||||
for(i=0;i<MAX_PLAYERS;i++)
|
if (d->id == id)
|
||||||
{
|
{
|
||||||
for(psF=apsFeatureLists[i];( (psF != NULL) && (psF->id != id)); psF=psF->psNext) {}
|
return d;
|
||||||
if(psF)
|
|
||||||
{
|
|
||||||
return psF;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (player >= MAX_PLAYERS)
|
|
||||||
{
|
|
||||||
debug(LOG_FEATURE, "Feature detected");
|
|
||||||
// feature hack, player = PLAYER_FEATURE are features - but we're in a function called IdTo **Feature**...
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
for(psF=apsFeatureLists[player];((psF != NULL )&&(psF->id != id) );psF=psF->psNext) {}
|
|
||||||
}
|
|
||||||
return psF;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ////////////////////////////////////////////////////////////////////////////
|
// ////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
DROID_TEMPLATE *IdToTemplate(UDWORD tempId,UDWORD player)
|
DROID_TEMPLATE *IdToTemplate(UDWORD tempId, UDWORD player)
|
||||||
{
|
{
|
||||||
DROID_TEMPLATE *psTempl = NULL;
|
DROID_TEMPLATE *psTempl = NULL;
|
||||||
UDWORD i;
|
UDWORD i;
|
||||||
|
@ -428,7 +400,9 @@ BASE_OBJECT *IdToPointer(UDWORD id,UDWORD player)
|
||||||
STRUCTURE *pS;
|
STRUCTURE *pS;
|
||||||
FEATURE *pF;
|
FEATURE *pF;
|
||||||
// droids.
|
// droids.
|
||||||
if (IdToDroid(id,player,&pD))
|
|
||||||
|
pD = IdToDroid(id, player);
|
||||||
|
if (pD)
|
||||||
{
|
{
|
||||||
return (BASE_OBJECT*)pD;
|
return (BASE_OBJECT*)pD;
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,7 +149,7 @@ extern UBYTE bDisplayMultiJoiningStatus; // draw load progress?
|
||||||
|
|
||||||
extern WZ_DECL_WARN_UNUSED_RESULT BASE_OBJECT *IdToPointer(UDWORD id,UDWORD player);
|
extern WZ_DECL_WARN_UNUSED_RESULT BASE_OBJECT *IdToPointer(UDWORD id,UDWORD player);
|
||||||
extern WZ_DECL_WARN_UNUSED_RESULT STRUCTURE *IdToStruct(UDWORD id,UDWORD player);
|
extern WZ_DECL_WARN_UNUSED_RESULT STRUCTURE *IdToStruct(UDWORD id,UDWORD player);
|
||||||
extern WZ_DECL_WARN_UNUSED_RESULT BOOL IdToDroid(UDWORD id, UDWORD player, DROID **psDroid);
|
extern WZ_DECL_WARN_UNUSED_RESULT DROID *IdToDroid(UDWORD id, UDWORD player);
|
||||||
extern WZ_DECL_WARN_UNUSED_RESULT FEATURE *IdToFeature(UDWORD id,UDWORD player);
|
extern WZ_DECL_WARN_UNUSED_RESULT FEATURE *IdToFeature(UDWORD id,UDWORD player);
|
||||||
extern WZ_DECL_WARN_UNUSED_RESULT DROID_TEMPLATE *IdToTemplate(UDWORD tempId,UDWORD player);
|
extern WZ_DECL_WARN_UNUSED_RESULT DROID_TEMPLATE *IdToTemplate(UDWORD tempId,UDWORD player);
|
||||||
|
|
||||||
|
|
|
@ -173,12 +173,12 @@ BOOL recvDemolishFinished(NETQUEUE queue)
|
||||||
NETend();
|
NETend();
|
||||||
|
|
||||||
psStruct = IdToStruct(structID, ANYPLAYER);
|
psStruct = IdToStruct(structID, ANYPLAYER);
|
||||||
if (!IdToDroid(droidID, ANYPLAYER, &psDroid))
|
psDroid = IdToDroid(droidID, ANYPLAYER);
|
||||||
|
if (!psDroid)
|
||||||
{
|
{
|
||||||
debug(LOG_ERROR, "recvDemolishFinished: Packet with bad droid ID received. Discarding!");
|
debug(LOG_ERROR, "recvDemolishFinished: Packet with bad droid ID received. Discarding!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (psStruct)
|
if (psStruct)
|
||||||
{
|
{
|
||||||
// Demolish it
|
// Demolish it
|
||||||
|
|
|
@ -347,7 +347,8 @@ BOOL recvDroidCheck(NETQUEUE queue)
|
||||||
NETauto(&pc);
|
NETauto(&pc);
|
||||||
|
|
||||||
// Find the droid in question
|
// Find the droid in question
|
||||||
if (!IdToDroid(pc.droidID, pc.player, &pD))
|
pD = IdToDroid(pc.droidID, pc.player);
|
||||||
|
if (!pD)
|
||||||
{
|
{
|
||||||
NETlogEntry("Recvd Unknown droid info. val=player", SYNC_FLAG, pc.player);
|
NETlogEntry("Recvd Unknown droid info. val=player", SYNC_FLAG, pc.player);
|
||||||
debug(LOG_SYNC, "Received checking info for an unknown (as yet) droid. player:%d ref:%d", pc.player, pc.droidID);
|
debug(LOG_SYNC, "Received checking info for an unknown (as yet) droid. player:%d ref:%d", pc.player, pc.droidID);
|
||||||
|
|
|
@ -97,9 +97,6 @@ static void orderCheckList(DROID *psDroid);
|
||||||
// Clear all the orders from the list, up to listSize (without clearing pending (not yet synchronised) orders, that is).
|
// Clear all the orders from the list, up to listSize (without clearing pending (not yet synchronised) orders, that is).
|
||||||
static void orderClearDroidList(DROID *psDroid);
|
static void orderClearDroidList(DROID *psDroid);
|
||||||
|
|
||||||
//Watermelon:add a timestamp to order circle
|
|
||||||
static UDWORD orderStarted;
|
|
||||||
|
|
||||||
// whether an order effect has been displayed
|
// whether an order effect has been displayed
|
||||||
static BOOL bOrderEffectDisplayed = false;
|
static BOOL bOrderEffectDisplayed = false;
|
||||||
// what the droid's action / order is currently
|
// what the droid's action / order is currently
|
||||||
|
@ -509,7 +506,7 @@ void orderUpdateDroid(DROID *psDroid)
|
||||||
{
|
{
|
||||||
// true if in condition to set actionDroid to attack/observe
|
// true if in condition to set actionDroid to attack/observe
|
||||||
bool attack = secondaryGetState(psDroid, DSO_ATTACK_LEVEL) == DSS_ALEV_ALWAYS &&
|
bool attack = secondaryGetState(psDroid, DSO_ATTACK_LEVEL) == DSS_ALEV_ALWAYS &&
|
||||||
aiBestNearestTarget(psDroid, &psObj, 0, NULL) >= 0;
|
aiBestNearestTarget(psDroid, &psObj, 0, SCOUT_ATTACK_DIST) >= 0;
|
||||||
switch (psDroid->droidType)
|
switch (psDroid->droidType)
|
||||||
{
|
{
|
||||||
case DROID_CONSTRUCT:
|
case DROID_CONSTRUCT:
|
||||||
|
@ -558,7 +555,6 @@ void orderUpdateDroid(DROID *psDroid)
|
||||||
{
|
{
|
||||||
if (psDroid->order == DORDER_PATROL)
|
if (psDroid->order == DORDER_PATROL)
|
||||||
{
|
{
|
||||||
UDWORD tempCoord;
|
|
||||||
// see if we have anything queued up
|
// see if we have anything queued up
|
||||||
if (orderDroidList(psDroid))
|
if (orderDroidList(psDroid))
|
||||||
{
|
{
|
||||||
|
@ -571,12 +567,8 @@ void orderUpdateDroid(DROID *psDroid)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// head back to the other point
|
// head back to the other point
|
||||||
tempCoord = psDroid->orderX;
|
std::swap(psDroid->orderX, psDroid->orderX2);
|
||||||
psDroid->orderX = psDroid->orderX2;
|
std::swap(psDroid->orderY, psDroid->orderY2);
|
||||||
psDroid->orderX2 = tempCoord;
|
|
||||||
tempCoord = psDroid->orderY;
|
|
||||||
psDroid->orderY = psDroid->orderY2;
|
|
||||||
psDroid->orderY2 = tempCoord;
|
|
||||||
actionDroid(psDroid, DACTION_MOVE, psDroid->orderX,psDroid->orderY);
|
actionDroid(psDroid, DACTION_MOVE, psDroid->orderX,psDroid->orderY);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -595,10 +587,8 @@ void orderUpdateDroid(DROID *psDroid)
|
||||||
(psDroid->action == DACTION_OBSERVE) ||
|
(psDroid->action == DACTION_OBSERVE) ||
|
||||||
(psDroid->action == DACTION_MOVETOOBSERVE))
|
(psDroid->action == DACTION_MOVETOOBSERVE))
|
||||||
{
|
{
|
||||||
// attacking something - see if the droid has gone too far
|
// attacking something - see if the droid has gone too far, go up to twice the distance we want to go, so that we don't repeatedly turn back when the target is almost in range.
|
||||||
xdiff = (SDWORD)psDroid->pos.x - (SDWORD)psDroid->actionX;
|
if (objPosDiffSq(psDroid->pos, Vector3i(psDroid->actionX, psDroid->actionY, 0)) > (SCOUT_ATTACK_DIST*2 * SCOUT_ATTACK_DIST*2))
|
||||||
ydiff = (SDWORD)psDroid->pos.y - (SDWORD)psDroid->actionY;
|
|
||||||
if (xdiff*xdiff + ydiff*ydiff > SCOUT_ATTACK_DIST*SCOUT_ATTACK_DIST)
|
|
||||||
{
|
{
|
||||||
actionDroid(psDroid, DACTION_RETURNTOPOS, psDroid->actionX,psDroid->actionY);
|
actionDroid(psDroid, DACTION_RETURNTOPOS, psDroid->actionX,psDroid->actionY);
|
||||||
}
|
}
|
||||||
|
@ -608,7 +598,7 @@ void orderUpdateDroid(DROID *psDroid)
|
||||||
// if there is an enemy around, attack it
|
// if there is an enemy around, attack it
|
||||||
if (psDroid->action == DACTION_MOVE &&
|
if (psDroid->action == DACTION_MOVE &&
|
||||||
secondaryGetState(psDroid, DSO_ATTACK_LEVEL) == DSS_ALEV_ALWAYS &&
|
secondaryGetState(psDroid, DSO_ATTACK_LEVEL) == DSS_ALEV_ALWAYS &&
|
||||||
aiBestNearestTarget(psDroid, &psObj, 0, NULL) >= 0)
|
aiBestNearestTarget(psDroid, &psObj, 0, SCOUT_ATTACK_DIST) >= 0)
|
||||||
{
|
{
|
||||||
switch (psDroid->droidType)
|
switch (psDroid->droidType)
|
||||||
{
|
{
|
||||||
|
@ -631,46 +621,28 @@ void orderUpdateDroid(DROID *psDroid)
|
||||||
{
|
{
|
||||||
if (psDroid->action == DACTION_MOVE)
|
if (psDroid->action == DACTION_MOVE)
|
||||||
{
|
{
|
||||||
if ( orderStarted && ((orderStarted + 500) > gameTime) )
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// see if we have anything queued up
|
// see if we have anything queued up
|
||||||
if (orderDroidList(psDroid))
|
if (orderDroidList(psDroid))
|
||||||
{
|
{
|
||||||
// started a new order, quit
|
// started a new order, quit
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
orderStarted = gameTime;
|
|
||||||
}
|
}
|
||||||
psDroid->action = DACTION_NONE;
|
|
||||||
|
|
||||||
xdiff = (SDWORD)psDroid->pos.x - (SDWORD)psDroid->orderX;
|
Vector2i edgeDiff = removeZ(psDroid->pos) - Vector2i(psDroid->actionX, psDroid->actionY);
|
||||||
ydiff = (SDWORD)psDroid->pos.y - (SDWORD)psDroid->orderY;
|
if (psDroid->action != DACTION_MOVE || edgeDiff*edgeDiff <= TILE_UNITS*4 * TILE_UNITS*4)
|
||||||
if (xdiff*xdiff + ydiff*ydiff <= 2000 * 2000)
|
|
||||||
{
|
|
||||||
if (psDroid->order == DORDER_CIRCLE)
|
|
||||||
{
|
{
|
||||||
//Watermelon:use orderX,orderY as local space origin and calculate droid direction in local space
|
//Watermelon:use orderX,orderY as local space origin and calculate droid direction in local space
|
||||||
uint16_t angle = iAtan2(xdiff, ydiff);
|
Vector2i diff = removeZ(psDroid->pos) - Vector2i(psDroid->orderX, psDroid->orderY);
|
||||||
xoffset = iSinR(angle, 1500);
|
uint16_t angle = iAtan2(diff) - DEG(30);
|
||||||
yoffset = iCosR(angle, 1500);
|
do
|
||||||
xdiff = psDroid->pos.x - (psDroid->orderX + xoffset);
|
|
||||||
ydiff = psDroid->pos.y - (psDroid->orderY + yoffset);
|
|
||||||
if (xdiff*xdiff + ydiff*ydiff < TILE_UNITS * TILE_UNITS)
|
|
||||||
{
|
{
|
||||||
//Watermelon:conter-clockwise 30 degree's per action
|
|
||||||
angle -= DEG(30);
|
|
||||||
xoffset = iSinR(angle, 1500);
|
xoffset = iSinR(angle, 1500);
|
||||||
yoffset = iCosR(angle, 1500);
|
yoffset = iCosR(angle, 1500);
|
||||||
}
|
angle -= DEG(10);
|
||||||
|
} while (!worldOnMap(psDroid->orderX + xoffset, psDroid->orderY + yoffset)); // Don't try to fly off map.
|
||||||
actionDroid(psDroid, DACTION_MOVE, psDroid->orderX + xoffset, psDroid->orderY + yoffset);
|
actionDroid(psDroid, DACTION_MOVE, psDroid->orderX + xoffset, psDroid->orderY + yoffset);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
psDroid->order = DORDER_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if ((psDroid->action == DACTION_ATTACK) ||
|
else if ((psDroid->action == DACTION_ATTACK) ||
|
||||||
(psDroid->action == DACTION_MOVETOATTACK) ||
|
(psDroid->action == DACTION_MOVETOATTACK) ||
|
||||||
|
|
|
@ -92,7 +92,7 @@ extern void scrv_set_extra(YY_EXTRA_TYPE user_defined);
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%option yylineno noyywrap nounput never-interactive
|
%option yylineno noyywrap nounput
|
||||||
%option warn nodefault
|
%option warn nodefault
|
||||||
%option prefix="scrv_"
|
%option prefix="scrv_"
|
||||||
|
|
||||||
|
|
|
@ -759,11 +759,12 @@ bool lineOfFire(const SIMPLE_OBJECT* psViewer, const BASE_OBJECT* psTarget, int
|
||||||
{
|
{
|
||||||
psStats = asWeaponStats + ((STRUCTURE*)psViewer)->asWeaps[weapon_slot].nStat;
|
psStats = asWeaponStats + ((STRUCTURE*)psViewer)->asWeaps[weapon_slot].nStat;
|
||||||
}
|
}
|
||||||
|
// 2d distance
|
||||||
|
int distance = iHypot(removeZ(psTarget->pos - psViewer->pos));
|
||||||
|
int range = proj_GetLongRange(psStats);
|
||||||
if (proj_Direct(psStats))
|
if (proj_Direct(psStats))
|
||||||
{
|
{
|
||||||
/** direct shots could collide with ground **/
|
/** direct shots could collide with ground **/
|
||||||
int distance = iHypot(psTarget->pos - psViewer->pos);
|
|
||||||
int range = proj_GetLongRange(psStats);
|
|
||||||
return range >= distance && LINE_OF_FIRE_MINIMUM <= checkFireLine(psViewer, psTarget, weapon_slot, wallsBlock, true);
|
return range >= distance && LINE_OF_FIRE_MINIMUM <= checkFireLine(psViewer, psTarget, weapon_slot, wallsBlock, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -773,10 +774,6 @@ bool lineOfFire(const SIMPLE_OBJECT* psViewer, const BASE_OBJECT* psTarget, int
|
||||||
* minimum angle doesn't move it out of range
|
* minimum angle doesn't move it out of range
|
||||||
**/
|
**/
|
||||||
int min_angle = checkFireLine(psViewer, psTarget, weapon_slot, wallsBlock, false);
|
int min_angle = checkFireLine(psViewer, psTarget, weapon_slot, wallsBlock, false);
|
||||||
/** 2d distance **/
|
|
||||||
Vector3i diff = psTarget->pos - psViewer->pos;
|
|
||||||
int distance = iHypot3(diff.x, diff.y, std::max(diff.z, 0));
|
|
||||||
int range = proj_GetLongRange(psStats);
|
|
||||||
// NOTE This code seems similar to the code in combFire in combat.cpp.
|
// NOTE This code seems similar to the code in combFire in combat.cpp.
|
||||||
if (min_angle > DEG(PROJ_MAX_PITCH))
|
if (min_angle > DEG(PROJ_MAX_PITCH))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,107 +0,0 @@
|
||||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
|
||||||
# Visual Studio 2008
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Warzone2100", "Warzone2100.vs2k8.vcproj", "{BDDCCB7B-F4F7-4768-A1C3-AE20E9F5FDFC}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{8136A1F0-463E-44F6-B0B2-64B12F4C27BA} = {8136A1F0-463E-44F6-B0B2-64B12F4C27BA}
|
|
||||||
{C7698ECE-9255-4A60-8091-A9A76E8BE911} = {C7698ECE-9255-4A60-8091-A9A76E8BE911}
|
|
||||||
{EFE011B6-4C0B-40AA-9F18-5AD599E70D28} = {EFE011B6-4C0B-40AA-9F18-5AD599E70D28}
|
|
||||||
{E538D7A9-0660-4979-95F4-80B0C5C11DA7} = {E538D7A9-0660-4979-95F4-80B0C5C11DA7}
|
|
||||||
{F580F567-CE2A-4C58-A036-C1B71664BF2D} = {F580F567-CE2A-4C58-A036-C1B71664BF2D}
|
|
||||||
{30F5FC4A-31F5-42F5-9581-45309559382F} = {30F5FC4A-31F5-42F5-9581-45309559382F}
|
|
||||||
{4D637147-73F9-4A51-944B-34BF78E6C6DC} = {4D637147-73F9-4A51-944B-34BF78E6C6DC}
|
|
||||||
{32FC4941-5ADF-483F-BD90-CDEBC50BA4AE} = {32FC4941-5ADF-483F-BD90-CDEBC50BA4AE}
|
|
||||||
{33979915-684A-4885-BFEA-2A4CCC5A5FD6} = {33979915-684A-4885-BFEA-2A4CCC5A5FD6}
|
|
||||||
{2D0B0F06-3CA2-46C7-908D-5C7098645021} = {2D0B0F06-3CA2-46C7-908D-5C7098645021}
|
|
||||||
{0A5A8B49-7072-4196-AA26-DD767760C6B5} = {0A5A8B49-7072-4196-AA26-DD767760C6B5}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "autorevision", "..\build_tools\autorevision\autorevision.vcproj", "{32FC4941-5ADF-483F-BD90-CDEBC50BA4AE}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "widget", "..\lib\widget\widget.vcproj", "{E538D7A9-0660-4979-95F4-80B0C5C11DA7}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sound", "..\lib\sound\sound.vcproj", "{8136A1F0-463E-44F6-B0B2-64B12F4C27BA}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sequence", "..\lib\sequence\sequence.vcproj", "{30F5FC4A-31F5-42F5-9581-45309559382F}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "script", "..\lib\script\script.vcproj", "{2D0B0F06-3CA2-46C7-908D-5C7098645021}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netplay", "..\lib\netplay\netplay.vcproj", "{C7698ECE-9255-4A60-8091-A9A76E8BE911}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ivis_opengl", "..\lib\ivis_opengl\ivis_opengl.vcproj", "{4D637147-73F9-4A51-944B-34BF78E6C6DC}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ivis_common", "..\lib\ivis_common\ivis_common.vcproj", "{F580F567-CE2A-4C58-A036-C1B71664BF2D}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gamelib", "..\lib\gamelib\gamelib.vcproj", "{EFE011B6-4C0B-40AA-9F18-5AD599E70D28}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "framework", "..\lib\framework\framework.vcproj", "{33979915-684A-4885-BFEA-2A4CCC5A5FD6}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{9DC871E4-D58D-4AF6-85A6-7DF7A39B8C18} = {9DC871E4-D58D-4AF6-85A6-7DF7A39B8C18}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "exceptionhandler", "..\lib\exceptionhandler\exceptionhandler.vcproj", "{9DC871E4-D58D-4AF6-85A6-7DF7A39B8C18}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iniparser", "..\lib\iniparser\iniparser.vcproj", "{0A5A8B49-7072-4196-AA26-DD767760C6B5}"
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{BDDCCB7B-F4F7-4768-A1C3-AE20E9F5FDFC}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{BDDCCB7B-F4F7-4768-A1C3-AE20E9F5FDFC}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{BDDCCB7B-F4F7-4768-A1C3-AE20E9F5FDFC}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{BDDCCB7B-F4F7-4768-A1C3-AE20E9F5FDFC}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{32FC4941-5ADF-483F-BD90-CDEBC50BA4AE}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{32FC4941-5ADF-483F-BD90-CDEBC50BA4AE}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{32FC4941-5ADF-483F-BD90-CDEBC50BA4AE}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{32FC4941-5ADF-483F-BD90-CDEBC50BA4AE}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{E538D7A9-0660-4979-95F4-80B0C5C11DA7}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{E538D7A9-0660-4979-95F4-80B0C5C11DA7}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{E538D7A9-0660-4979-95F4-80B0C5C11DA7}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{E538D7A9-0660-4979-95F4-80B0C5C11DA7}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{8136A1F0-463E-44F6-B0B2-64B12F4C27BA}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{8136A1F0-463E-44F6-B0B2-64B12F4C27BA}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{8136A1F0-463E-44F6-B0B2-64B12F4C27BA}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{8136A1F0-463E-44F6-B0B2-64B12F4C27BA}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{30F5FC4A-31F5-42F5-9581-45309559382F}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{30F5FC4A-31F5-42F5-9581-45309559382F}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{30F5FC4A-31F5-42F5-9581-45309559382F}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{30F5FC4A-31F5-42F5-9581-45309559382F}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{2D0B0F06-3CA2-46C7-908D-5C7098645021}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{2D0B0F06-3CA2-46C7-908D-5C7098645021}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{2D0B0F06-3CA2-46C7-908D-5C7098645021}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{2D0B0F06-3CA2-46C7-908D-5C7098645021}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{C7698ECE-9255-4A60-8091-A9A76E8BE911}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{C7698ECE-9255-4A60-8091-A9A76E8BE911}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{C7698ECE-9255-4A60-8091-A9A76E8BE911}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{C7698ECE-9255-4A60-8091-A9A76E8BE911}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{4D637147-73F9-4A51-944B-34BF78E6C6DC}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{4D637147-73F9-4A51-944B-34BF78E6C6DC}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{4D637147-73F9-4A51-944B-34BF78E6C6DC}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{4D637147-73F9-4A51-944B-34BF78E6C6DC}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{F580F567-CE2A-4C58-A036-C1B71664BF2D}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{F580F567-CE2A-4C58-A036-C1B71664BF2D}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{F580F567-CE2A-4C58-A036-C1B71664BF2D}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{F580F567-CE2A-4C58-A036-C1B71664BF2D}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{EFE011B6-4C0B-40AA-9F18-5AD599E70D28}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{EFE011B6-4C0B-40AA-9F18-5AD599E70D28}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{EFE011B6-4C0B-40AA-9F18-5AD599E70D28}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{EFE011B6-4C0B-40AA-9F18-5AD599E70D28}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{33979915-684A-4885-BFEA-2A4CCC5A5FD6}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{33979915-684A-4885-BFEA-2A4CCC5A5FD6}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{33979915-684A-4885-BFEA-2A4CCC5A5FD6}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{33979915-684A-4885-BFEA-2A4CCC5A5FD6}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{9DC871E4-D58D-4AF6-85A6-7DF7A39B8C18}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{9DC871E4-D58D-4AF6-85A6-7DF7A39B8C18}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{9DC871E4-D58D-4AF6-85A6-7DF7A39B8C18}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{9DC871E4-D58D-4AF6-85A6-7DF7A39B8C18}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{0A5A8B49-7072-4196-AA26-DD767760C6B5}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{0A5A8B49-7072-4196-AA26-DD767760C6B5}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{0A5A8B49-7072-4196-AA26-DD767760C6B5}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{0A5A8B49-7072-4196-AA26-DD767760C6B5}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
File diff suppressed because it is too large
Load Diff
|
@ -19,6 +19,7 @@ execute()
|
||||||
|
|
||||||
# Some default configuration settings
|
# Some default configuration settings
|
||||||
HOST_TRIPLET=i586-mingw32msvc
|
HOST_TRIPLET=i586-mingw32msvc
|
||||||
|
DOWNLOADS="$(pwd)/downloads"
|
||||||
INSTALLER_VERSION="2.2.0.999"
|
INSTALLER_VERSION="2.2.0.999"
|
||||||
DEBUGFLAG="--disable-debug"
|
DEBUGFLAG="--disable-debug"
|
||||||
CC_FOR_BUILD="gcc"
|
CC_FOR_BUILD="gcc"
|
||||||
|
@ -99,7 +100,7 @@ fi
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
# Make sure that the dependencies have been built
|
# Make sure that the dependencies have been built
|
||||||
make $MAKE_FLAGS -C libs "HOST_TRIPLET=$HOST_TRIPLET"
|
make $MAKE_FLAGS -C libs "HOST_TRIPLET=$HOST_TRIPLET" "DOWNLOADS=$DOWNLOADS"
|
||||||
|
|
||||||
cd build
|
cd build
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ TARGETS:= \
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xjf $^
|
tar xjf $^
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ PKG_MD5SUM:=6a3a37022ffc3c0a573ad2d6c4766b6d
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
@test -d $(TOPDIR)/build/libs || { \
|
@test -d $(TOPDIR)/build/libs || { \
|
||||||
echo mkdir -p $(TOPDIR)/build/libs ; \
|
echo mkdir -p $(TOPDIR)/build/libs ; \
|
||||||
mkdir -p $(TOPDIR)/build/libs || exit ; \
|
mkdir -p $(TOPDIR)/build/libs || exit ; \
|
||||||
|
|
|
@ -12,7 +12,7 @@ TARGET:=$(TOPDIR)/builds/libs/lib/libexpat.la
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xzf $^
|
tar xzf $^
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ TARGETS:= \
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
$(PKG_SOURCEBASE) extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
$(PKG_SOURCEBASE) extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xzf $^
|
tar xzf $^
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ TARGET:=$(TOPDIR)/build/libs/lib/libfreetype.la
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xjf $^
|
tar xjf $^
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ SHELL:=$(shell which bash)
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
$(PKG_SOURCEBASE) extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
$(PKG_SOURCEBASE) extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xzf $^
|
tar xzf $^
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ TARGET:=$(TOPDIR)/build/libs/lib/libiconv.la
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
$(PKG_SOURCEBASE) extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
$(PKG_SOURCEBASE) extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xzf $^
|
tar xzf $^
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ TARGETS:= \
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
$(PKG_SOURCEBASE) extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
$(PKG_SOURCEBASE) extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xzf $^
|
tar xzf $^
|
||||||
@echo autoconf ; \
|
@echo autoconf ; \
|
||||||
cd $(PKG_SOURCEBASE) && autoconf || $(RM) -r $(PKG_SOURCEBASE)
|
cd $(PKG_SOURCEBASE) && autoconf || $(RM) -r $(PKG_SOURCEBASE)
|
||||||
|
|
|
@ -12,7 +12,7 @@ TARGET:=$(TOPDIR)/build/libs/lib/libpng14.la
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xjf $^
|
tar xjf $^
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ TARGETS:= \
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
$(PKG_SOURCEBASE) extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
$(PKG_SOURCEBASE) extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xzf $^
|
tar xzf $^
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ TARGETS:= \
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
$(PKG_SOURCEBASE) extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
$(PKG_SOURCEBASE) extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xjf $^
|
tar xjf $^
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ TARGETS:= \
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
$(PKG_SOURCEBASE) extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
$(PKG_SOURCEBASE) extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xzf $^
|
tar xzf $^
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ TARGETS:=$(TOPDIR)/build/libs/lib/libz.a $(TOPDIR)/build/libs/include/zconf.h $(
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
extract-stamp: $(TOPDIR)/downloads/$(PKG_SOURCE)
|
extract-stamp: $(DOWNLOADS)/$(PKG_SOURCE)
|
||||||
tar xzf $^
|
tar xzf $^
|
||||||
rm $(PKG_SOURCEBASE)/Makefile
|
rm $(PKG_SOURCEBASE)/Makefile
|
||||||
touch extract-stamp
|
touch extract-stamp
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
all: build
|
all: build
|
||||||
|
|
||||||
$(TOPDIR)/downloads/$(PKG_SOURCE):
|
$(DOWNLOADS)/$(PKG_SOURCE):
|
||||||
@if [ ! -d "$(TOPDIR)/downloads" ] ; then \
|
@if [ ! -d "$(DOWNLOADS)" ] ; then \
|
||||||
echo mkdir -p $(TOPDIR)/downloads ; \
|
echo mkdir -p $(DOWNLOADS) ; \
|
||||||
mkdir -p $(TOPDIR)/downloads || exit ; \
|
mkdir -p $(DOWNLOADS) || exit ; \
|
||||||
fi
|
fi
|
||||||
$(TOPDIR)/download.pl $(TOPDIR)/downloads "$(PKG_SOURCE)" "$(PKG_MD5SUM)" $(PKG_SOURCE_URL)
|
$(TOPDIR)/download.pl $(DOWNLOADS) "$(PKG_SOURCE)" "$(PKG_MD5SUM)" $(PKG_SOURCE_URL)
|
||||||
|
|
||||||
.PHONY: all build clean
|
.PHONY: all build clean
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Version
|
|
||||||
//
|
|
||||||
|
|
||||||
1 VERSIONINFO
|
|
||||||
FILEVERSION 9,9,9,9
|
|
||||||
PRODUCTVERSION 9,9,9,9
|
|
||||||
FILEFLAGSMASK 0x0L
|
|
||||||
#ifdef _DEBUG
|
|
||||||
FILEFLAGS 0x1L
|
|
||||||
#else
|
|
||||||
FILEFLAGS 0x0L
|
|
||||||
#endif
|
|
||||||
FILEOS 0x40004L
|
|
||||||
FILETYPE 0x1L
|
|
||||||
FILESUBTYPE 0x0L
|
|
||||||
BEGIN
|
|
||||||
BLOCK "StringFileInfo"
|
|
||||||
BEGIN
|
|
||||||
BLOCK "040904b0"
|
|
||||||
BEGIN
|
|
||||||
VALUE "CompanyName", "Warzone 2100 Project"
|
|
||||||
VALUE "FileDescription", "Warzone 2100"
|
|
||||||
VALUE "FileVersion", "master"
|
|
||||||
VALUE "InternalName", "Warzone 2100"
|
|
||||||
VALUE "LegalCopyright", "Copyright © 2005-2010 Warzone 2100 Project"
|
|
||||||
VALUE "OriginalFilename", "warzone2100.exe"
|
|
||||||
VALUE "ProductName", "Warzone 2100"
|
|
||||||
VALUE "ProductVersion", "master"
|
|
||||||
END
|
|
||||||
END
|
|
||||||
BLOCK "VarFileInfo"
|
|
||||||
BEGIN
|
|
||||||
VALUE "Translation", 0x0409, 0x04b0
|
|
||||||
END
|
|
||||||
END
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// Icon
|
|
||||||
//
|
|
||||||
|
|
||||||
// Icon with lowest ID value placed first to ensure application icon
|
|
||||||
// remains consistent on all systems.
|
|
||||||
2 ICON "../icons/warzone2100.ico"
|
|
Loading…
Reference in New Issue