/* =============== = = ParseBack = =============== */ void ParseBack ( eventtype * event ) { char name[10]; char name2[10]; int duration; int yoffset; int width; int startx; int endx; GetToken (false); strcpy(&(name[0]),token); if (event->effecttype==background_multi_event) { GetToken (false); strcpy(&(name2[0]),token); } GetToken (false); duration=ParseNum(token); GetToken (false); yoffset=ParseNum(token); if ( (event->effecttype==background_noscrolling_event) || (event->effecttype==background_scrolling_event) ) { lpic_t * lpic; lpic = (lpic_t *)W_CacheLumpName(name,PU_CACHE, Cvt_lpic_t, 1); width = lpic->width; } else if (event->effecttype!=background_multi_event) { patch_t * patch; patch = (patch_t *)W_CacheLumpName(name,PU_CACHE, Cvt_lpic_t, 1); width = patch->width; } startx=0; endx=0; if ( (event->effecttype==backdrop_scrolling_event) || (event->effecttype==background_scrolling_event) || (event->effecttype==background_multi_event) ) { GetToken (false); startx=ParseNum(token); GetToken (false); endx=ParseNum(token); } if (event->effecttype==background_multi_event) event->effect = SpawnCinematicMultiBack ( name, name2, duration, startx, endx, yoffset); else event->effect = SpawnCinematicBack ( name, duration, width, startx, endx, yoffset); }
/* =============== = = ParseSprite = =============== */ void ParseSprite ( eventtype * event ) { char name[10]; int duration; int numframes; int framedelay; int x,y,scale; int endx,endy,endscale; GetToken (false); strcpy(&(name[0]),token); GetToken (false); duration=ParseNum(token); GetToken (false); numframes=ParseNum(token); GetToken (false); framedelay=ParseNum(token); GetToken (false); x=ParseNum(token); GetToken (false); y=ParseNum(token); GetToken (false); scale=ParseNum(token); GetToken (false); endx=ParseNum(token); GetToken (false); endy=ParseNum(token); GetToken (false); endscale=ParseNum(token); event->effect = SpawnCinematicSprite ( name, duration, numframes, framedelay, x, y, scale, endx, endy, endscale ); }
gboolean ParseCmdLine(int argc, char *argv[], struct CmdLineOptions *opts) { int argNo = 1; gboolean isXAltSet = FALSE, isYAltSet = FALSE, isWidthSet = FALSE; /* place on the left bottom */ opts->x = 0; opts->isXNeg = FALSE; opts->isXPercent = FALSE; opts->y = 0; opts->isYNeg = TRUE; opts->isYPercent = FALSE; /* height as 25% of keyboard width */ opts->height = 25; opts->isHeightPercent = TRUE; opts->isDecorated = FALSE; opts->hasResizeGrip = FALSE; opts->isOnTaskBar = FALSE; opts->isOnTop = TRUE; opts->winStateToSet = CL_WSTATE_PRESENT; opts->composeKeys = NULL; while( argNo < argc ) { if( !strcmp(argv[argNo], "-h") ) { Usage(); return FALSE; }else if( !strcmp(argv[argNo], "-x") ) { if( ! ParseNum(argv[argNo], argv[argNo+1], &opts->isXNeg, &opts->x, &opts->isXPercent) ) return FALSE; argNo += 2; }else if( !strcmp(argv[argNo], "-y") ) { if( ! ParseNum(argv[argNo], argv[argNo+1], &opts->isYNeg, &opts->y, &opts->isYPercent) ) return FALSE; argNo += 2; }else if( !strcmp(argv[argNo], "-xalt") ) { if( ! ParseNum(argv[argNo], argv[argNo+1], &opts->isXAltNeg, &opts->xalt, &opts->isXAltPercent) ) return FALSE; isXAltSet = TRUE; argNo += 2; }else if( !strcmp(argv[argNo], "-yalt") ) { if( ! ParseNum(argv[argNo], argv[argNo+1], &opts->isYAltNeg, &opts->yalt, &opts->isYAltPercent) ) return FALSE; isYAltSet = TRUE; argNo += 2; }else if( !strcmp(argv[argNo], "-width") ) { if( ! ParseNum(argv[argNo], argv[argNo+1], &opts->isWidthNeg, &opts->width, &opts->isWidthPercent) ) return FALSE; isWidthSet = TRUE; argNo += 2; }else if( !strcmp(argv[argNo], "-height") ) { if( ! ParseNum(argv[argNo], argv[argNo+1], NULL, &opts->height, &opts->isHeightPercent) ) return FALSE; argNo += 2; }else if( !strcmp(argv[argNo], "-decorated") ) { opts->isDecorated = TRUE; ++argNo; }else if( !strcmp(argv[argNo], "-resizeGrip") ) { opts->hasResizeGrip = TRUE; ++argNo; }else if( !strcmp(argv[argNo], "-taskbar") ) { opts->isOnTaskBar = TRUE; ++argNo; }else if( !strcmp(argv[argNo], "-notop") ) { opts->isOnTop = FALSE; ++argNo; }else if( !strcmp(argv[argNo], "-iconify") ) { opts->winStateToSet = CL_WSTATE_ICONIFY; ++argNo; }else if( !strcmp(argv[argNo], "-present") ) { opts->winStateToSet = CL_WSTATE_PRESENT; ++argNo; }else if( !strcmp(argv[argNo], "-toggle") ) { opts->winStateToSet = CL_WSTATE_TOGGLE; ++argNo; }else if( !strcmp(argv[argNo], "-rightalt") ) { opts->composeKeys = argv[argNo+1]; argNo += 2; }else{ g_print("unknown option -- %s\n", argv[argNo]); g_print("type -h option for usage\n"); return FALSE; } } if( ! isXAltSet ) { opts->xalt = opts->x; opts->isXAltNeg = opts->isXNeg; opts->isXAltPercent = opts->isXPercent; } if( ! isYAltSet ) { opts->yalt = 0; opts->isYAltNeg = ! opts->isYNeg; opts->isYAltPercent = FALSE; } if( ! isWidthSet ) { opts->width = opts->x; opts->isWidthNeg = TRUE; opts->isWidthPercent = opts->isXPercent; } return TRUE; }
/* Player structures: Warsow <v0.4 [rate] [ping] "playername" [team] [0x22] Warsow v0.5 [rate] [ping] "playername" [team][0x0a] last player: [rate] [ping] "playername" [team][0x0a][0x00] */ PLAYERDATA *Q3_ParsePlayers2(SERVER_INFO *pSI,char *pointer,char *end, DWORD *numPlayers,char *szP) { int Pindex =0; PLAYERDATA *pQ3Players=NULL; BOOL bGTVBug=FALSE; pSI->cBots = 0; if(pointer[0]!=0) { //Parseplayers PLAYERDATA *pQ3CurrentPlayer=NULL; while(pointer<end) { PLAYERDATA *player = (PLAYERDATA *)calloc(1,sizeof(PLAYERDATA)); if(player==NULL) //Out of memory return pQ3Players; player->pNext = NULL; player->szClanTag = NULL; player->szTeam = NULL; player->cGAMEINDEX = pSI->cGAMEINDEX; player->pServerInfo = pSI; player->dwServerIndex = pSI->dwIndex; player->rate = ParseNum(pointer); player->ping = ParseNum(pointer); int nexuizUnknown = ParseNum(pointer); player->szPlayerName = ParseString(pointer); switch(pSI->cGAMEINDEX) { case NEXUIZ_SERVERLIST: case OPENARENA_SERVERLIST: case Q3_SERVERLIST: { if(player->ping == 0) pSI->cBots ++; } break; case ET_SERVERLIST: //ETpro for retrieving player status (connecting, spectating, allies & axis) { if(player->ping == 0) pSI->cBots ++; if(szP!=NULL) { int l = strlen(szP); while(Pindex<l) { if(szP[Pindex]!='-') { int _idx = (szP[Pindex]-48); player->szTeam = _strdup(&szPlyType[_idx][0]); Pindex++; break; } Pindex++; } } break; } case WARSOW_SERVERLIST: { char *szProtocol=NULL; // GAME_INFO *pGI = &gm.GamesInfo[pSI->cGAMEINDEX]; // szProtocol = Get_RuleValue((TCHAR*)_T("protocol"),pSI->pServerRules); //if(szProtocol!=NULL) { //if(atoi(szProtocol)<11) //pre version 0.5 { pointer++; char * p0a = strchr(pointer,0x0A); if(p0a!=NULL) p0a[0]=0; if(strcmp(pointer,"0")==0) player->szTeam = _strdup("Spectator"); else if(strcmp(pointer,"2")==0) player->szTeam = _strdup("Red"); else if(strcmp(pointer,"3")==0) player->szTeam= _strdup("Blue"); pointer++; } } break; } } //Player seperator pointer++; //normal 0x0a but for Warsow it is 0x22 (pre v0.5) if(pQ3Players==NULL) pQ3Players = pQ3CurrentPlayer = player; else pQ3CurrentPlayer = pQ3CurrentPlayer->pNext = player; *numPlayers= *numPlayers+1; if(pointer[0]==0) //Warsow fix break; } } return pQ3Players; }