bool NewTitles::IsNew(u8 *titleid) { if (titleid == NULL || strlen((char *) titleid) == 0) { return false; } Title *t = firstTitle; while (t != NULL) { // Loop all titles, search for the correct titleid if (strcmp((const char *) titleid, (const char *) t->titleId) == 0) { // This title is less than 24 hours old if ((time(NULL) - t->timestamp) < NEW_SECONDS) { // Only count the game as new when it's never been played through GX Game_NUM *gnum = CFG_get_game_num(titleid); return gnum == NULL || gnum->count == 0; } return false; } t = (Title *) t->next; } // We should never get here, since all files should be added by now! CheckGame(titleid); return !isNewFile; // If this is a new file, return false }
static bool CheckSkipGameBlock(FScanner &sc) { bool filter = false; sc.MustGetStringName("("); do { sc.MustGetString(); filter |= CheckGame(sc.String, false); } while (sc.CheckString(",")); sc.MustGetStringName(")"); if (!filter) { SkipSubBlock(sc); return true; } return false; }
void FTeam::ParseTeamDefinition (FScanner &Scan) { FTeam Team; int valid = -1; Scan.MustGetString (); Team.m_Name = Scan.String; Scan.MustGetStringName ("{"); while (!Scan.CheckString ("}")) { Scan.MustGetString (); switch (Scan.MatchString (TeamInfoOptions)) { case TEAMINFO_Game: Scan.MustGetString (); if (Scan.Compare("Any")) valid = 1; else if (CheckGame(Scan.String, false)) valid = 1; else if (valid == -1) valid = 0; break; case TEAMINFO_PlayerColor: Scan.MustGetString (); Team.m_iPlayerColor = V_GetColor (NULL, Scan.String); break; case TEAMINFO_TextColor: Scan.MustGetString (); Team.m_TextColor.AppendFormat ("[%s]", Scan.String); break; case TEAMINFO_Logo: Scan.MustGetString (); Team.m_Logo = Scan.String; break; case TEAMINFO_AllowCustomPlayerColor: Team.m_bAllowCustomPlayerColor = true; break; case TEAMINFO_PlayerStartThingNumber: Scan.MustGetNumber (); break; case TEAMINFO_RailColor: case TEAMINFO_FlagItem: case TEAMINFO_SkullItem: case TEAMINFO_SmallFlagHUDIcon: case TEAMINFO_SmallSkullHUDIcon: case TEAMINFO_LargeFlagHUDIcon: case TEAMINFO_LargeSkullHUDIcon: case TEAMINFO_WinnerPic: case TEAMINFO_LoserPic: case TEAMINFO_WinnerTheme: case TEAMINFO_LoserTheme: Scan.MustGetString (); break; default: Scan.ScriptError ("ParseTeamDefinition: Unknown team option '%s'.\n", Scan.String); break; } } if (valid) Teams.Push (Team); }
void Gamefield::Generate() { //Check if the top of the road is on the generated position if (newpos == 100 || newpos == pos[0]) { newpos = random(1, 15); } uint8_t vorigepos = 100; uint8_t i = 0; //Loop through all the road pieces for (i = 0; i < 6; i++) { if (!gameover) { if (vorigepos == 100) { vorigepos = newpos; } if (vorigepos > pos[i]) { MoveRoad(i, 1); game_car.Refresh(); vorigepos = pos[i]-1; CheckGame(); }else if (vorigepos < pos[i]) { MoveRoad(i, 0); game_car.Refresh(); vorigepos = pos[i]+1; CheckGame(); } } } CheckGame(); //Move the obstacle if there is an obstacle and remove it when it is outside lcd if(i == 6 && countobstacles > 0){ i = 0; obsta.Next(0); if (obsta.IsActive(0) == 0) { countobstacles--; } } //Generate an obstacle when it is time and there are no other obstacles on the road if (timer == generateobstacle && countobstacles < totalobstacles) { obsta.Createobject(countobstacles, pos[0]); if (timer < 20) { generateobstacle += 10; }else if (timer > 19 && timer < 36) { generateobstacle += 8; }else if (timer > 35 && timer < 48) { generateobstacle += 6; }else if (timer > 47 && timer < 56) { generateobstacle += 4; }else if (timer > 55) { generateobstacle += 2; } countobstacles++; } lcdscherm->drawInteger(8, 8, timer, DEC, RGB(0,0,0), GREEN, 1||0x00); lcdscherm->drawText(240, 8, "HIGHSCORE:", RGB(0,0,0) , GREEN, 1||0x00); }
static void ParseLock(FScanner &sc) { int i,r,g,b; int keynum; Lock sink; Lock *lock = &sink; Keygroup *keygroup; PClassActor *mi; sc.MustGetNumber(); keynum = sc.Number; sc.MustGetString(); if (!sc.Compare("{")) { if (!CheckGame(sc.String, false)) keynum = -1; sc.MustGetStringName("{"); } ignorekey = true; if (keynum > 0 && keynum <= 255) { lock = new Lock; if (locks[keynum]) { delete locks[keynum]; } locks[keynum] = lock; locks[keynum]->locksound.Push("*keytry"); locks[keynum]->locksound.Push("misc/keytry"); ignorekey=false; } else if (keynum != -1) { sc.ScriptError("Lock index %d out of range", keynum); } while (!sc.CheckString("}")) { sc.MustGetString(); switch(i = sc.MatchString(keywords_lock)) { case 0: // Any keygroup = ParseKeygroup(sc); if (keygroup) { lock->keylist.Push(keygroup); } break; case 1: // message sc.MustGetString(); lock->Message = sc.String; break; case 2: // remotemsg sc.MustGetString(); lock->RemoteMsg = sc.String; break; case 3: // mapcolor sc.MustGetNumber(); r = sc.Number; sc.MustGetNumber(); g = sc.Number; sc.MustGetNumber(); b = sc.Number; lock->rgb = MAKERGB(r,g,b); break; case 4: // locksound lock->locksound.Clear(); for (;;) { sc.MustGetString(); lock->locksound.Push(sc.String); if (!sc.GetString()) { break; } if (!sc.Compare(",")) { sc.UnGet(); break; } } break; default: mi = PClass::FindActor(sc.String); if (mi) { keygroup = new Keygroup; AddOneKey(keygroup, mi, sc); if (keygroup) { keygroup->anykeylist.ShrinkToFit(); lock->keylist.Push(keygroup); } } break; } } // copy the messages if the other one does not exist if (lock->RemoteMsg.IsEmpty() && lock->Message.IsNotEmpty()) { lock->RemoteMsg = lock->Message; } if (lock->Message.IsEmpty() && lock->RemoteMsg.IsNotEmpty()) { lock->Message = lock->RemoteMsg; } lock->keylist.ShrinkToFit(); }
static void ParseOuter (FScanner &sc) { int bracedepth = 0; bool ifskip = false; while (sc.GetString ()) { if (ifskip) { if (bracedepth > 0) { if (sc.Compare ("}")) { bracedepth--; continue; } } else if (sc.Compare ("endif")) { ifskip = false; continue; } if (sc.Compare ("{")) { bracedepth++; } else if (sc.Compare ("}")) { sc.ScriptError ("Too many left braces ('}')"); } } else { switch (sc.MustMatchString (OuterKeywords)) { case OUT_SPLASH: ParseSplash (sc); break; case OUT_TERRAIN: ParseTerrain (sc); break; case OUT_FLOOR: ParseFloor (sc); break; case OUT_DEFAULTTERRAIN: ParseDefault (sc); break; case OUT_IFDOOM: case OUT_IFHERETIC: case OUT_IFHEXEN: case OUT_IFSTRIFE: ifskip = !CheckGame(sc.String+2, true); break; case OUT_ENDIF: break; } } } }