From 60d408a37c2663635ac44575afd6e496c40b6b3e Mon Sep 17 00:00:00 2001 From: bMorgan01 Date: Tue, 20 Oct 2020 14:40:41 -0600 Subject: [PATCH] finished functionality --- Game.h | 284 +++++++++++++++++++++-- Mount.h | 9 +- Ship.h | 3 +- data/Gui/{money_bar.png => high_bar.png} | Bin 10030 -> 10031 bytes data/Gui/redFilter.png | Bin 0 -> 5918 bytes data/Gui/score_bar.png | Bin 0 -> 10087 bytes scores | 5 + 7 files changed, 275 insertions(+), 26 deletions(-) rename data/Gui/{money_bar.png => high_bar.png} (68%) create mode 100644 data/Gui/redFilter.png create mode 100644 data/Gui/score_bar.png create mode 100644 scores diff --git a/Game.h b/Game.h index fbb90bb..3dc11a9 100644 --- a/Game.h +++ b/Game.h @@ -1,3 +1,5 @@ +#include + class Game { public: int result, loop; @@ -105,6 +107,10 @@ private: monkirta.loadFromFile("data\\Fonts\\Monkirta Pursuit NC.ttf"); updateLoader(window, "Loading fonts..."); + sf::Font skME; + skME.loadFromFile("data/Fonts/SKoME.ttf"); + updateLoader(window, "Loading fonts..."); + //******************************************** // GRAPHICS //******************************************** @@ -180,6 +186,18 @@ private: turret.loadFromFile("data\\Gui\\turret.png"); updateLoader(window, "Loading textures..."); + Texture redFilter; + redFilter.loadFromFile("data\\Gui\\redFilter.png"); + updateLoader(window, "Loading textures..."); + + Texture scoreBar; + scoreBar.loadFromFile("data\\Gui\\score_bar.png"); + updateLoader(window, "Loading textures..."); + + Texture highBar; + highBar.loadFromFile("data\\Gui\\high_bar.png"); + updateLoader(window, "Loading textures..."); + vector < Texture > largeAsteroids; for (int i = 1; i <= 7; i++) { largeAsteroids.emplace_back(); @@ -269,9 +287,8 @@ private: Text score; score.setFillColor(Color::White); - score.setPosition(10, 10); + score.setPosition(12, 8); score.setFont(oxan); - score.setString("Score: 0"); score.setCharacterSize(20); Text destroyed; @@ -280,7 +297,7 @@ private: destroyed.setCharacterSize(70); destroyed.setString("Destroyed"); destroyed.setOrigin(destroyed.getGlobalBounds().width/2.0, destroyed.getGlobalBounds().height/2.0); - destroyed.setPosition(window.getSize().x/2.0, window.getSize().y/3.0); + destroyed.setPosition(window.getSize().x/2.0, window.getSize().y/3); Text pressEnter; pressEnter.setFillColor(Color::White); @@ -288,7 +305,31 @@ private: pressEnter.setCharacterSize(20); pressEnter.setString("Press ENTER to return to the menu..."); pressEnter.setOrigin(pressEnter.getGlobalBounds().width/2.0, pressEnter.getGlobalBounds().height/2.0); - pressEnter.setPosition(window.getSize().x/2.0, window.getSize().y/2.25); + pressEnter.setPosition(window.getSize().x/2.0, window.getSize().y/2.4); + + Text highScoreLable; + highScoreLable.setFillColor(Color(0, 0, 0, 0)); + highScoreLable.setOutlineColor(Color::White); + highScoreLable.setOutlineThickness(1); + highScoreLable.setFont(skME); + highScoreLable.setCharacterSize(30); + highScoreLable.setString("High Scores"); + highScoreLable.setOrigin(highScoreLable.getGlobalBounds().width/2.0, highScoreLable.getGlobalBounds().height/2.0); + highScoreLable.setPosition(window.getSize().x/2.0, window.getSize().y/2.0); + + Text highScoreEntriesDates[10]; + Text highScoreEntries[10]; + for (int i = 0; i < 10; i++) { + highScoreEntriesDates[i].setFillColor(Color::White); + highScoreEntriesDates[i].setFont(monkirta); + highScoreEntriesDates[i].setCharacterSize(20); + highScoreEntriesDates[i].setOrigin(0, highScoreEntriesDates[i].getGlobalBounds().height/2.0); + + highScoreEntries[i].setFillColor(Color::White); + highScoreEntries[i].setFont(oxan); + highScoreEntries[i].setCharacterSize(20); + highScoreEntries[i].setOrigin(0, highScoreEntries[i].getGlobalBounds().height/2.0); + } auto stop = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast(stop - start); @@ -310,6 +351,9 @@ private: lost.push_back(&destroyed); lost.push_back(&pressEnter); + lost.push_back(&highScoreLable); + + int lostEnd = lost.size() - 1; MySprite backSprite(background, 100, window.getSize().x / 2, window.getSize().y / 2, 0, 0); @@ -321,10 +365,59 @@ private: player.setShield(true, &shield, 12, &shieldTimer); MySprite fighter(wingmanShip, 10, -20, -20, 0, 0); - fighter.setMaxVelocity(18); - fighter.setMinVelocity(0); + fighter.setMaxVelocity(10); + fighter.setMinVelocity(-2); + + Mount rapidFireIcon(rapidFire, 20, window.getSize().x/2.0 - 25 - 150, 30, 0, 0); + Mount damageIcon(damage, 20, window.getSize().x/2.0 - 25 - 100, 30, 0, 0); + Mount sprayFireIcon(spray, 20, window.getSize().x/2.0 - 25 - 50, 30, 0, 0); + Mount backwardsFireIcon(backwards, 20, window.getSize().x/2.0 - 25, 30, 0, 0); + Mount shieldIcon(shieldUp, 20, window.getSize().x/2.0 + 25, 30, 0, 0); + Mount timeIcon(slowTime, 20, window.getSize().x/2.0 + 25 + 50, 30, 0, 0); + Mount turretIcon(turret, 20, window.getSize().x/2.0 + 25 + 100, 30, 0, 0); + Mount fighterIcon(wingman, 20, window.getSize().x/2.0 + 25 + 150, 30, 0, 0); + + Rider redFilterTemp(redFilter, 100); + redFilterTemp.setColor(Color(redFilterTemp.getColor().r, redFilterTemp.getColor().g, redFilterTemp.getColor().b, 155)); + auto filterRect = redFilterTemp.getLocalBounds(); + + rapidFireIcon.addRider(redFilterTemp); + damageIcon.addRider(redFilterTemp); + sprayFireIcon.addRider(redFilterTemp); + backwardsFireIcon.addRider(redFilterTemp); + shieldIcon.addRider(redFilterTemp); + timeIcon.addRider(redFilterTemp); + turretIcon.addRider(redFilterTemp); + fighterIcon.addRider(redFilterTemp); + + vector highScores; + vector highScoresDates; + ifstream fin("scores"); + + if (fin.is_open()) { + string name; + int scoreHold; + while (!fin.eof()) { + fin >> name; + fin >> scoreHold; + highScores.push_back(scoreHold); + highScoresDates.push_back(name); + } + } else { + highScores.push_back(0); + highScoresDates.push_back("0"); + } + + fin.close(); + + score.setString("0"); + + MySprite scoreBox(scoreBar, 40); + scoreBox.setOrigin(0, 0); + scoreBox.setPosition(8, 8); gui.push_back(&backSprite); + gui.push_back(&scoreBox); gui.push_back(&score); for (int i = 0; i < player.getLives(); i++) @@ -336,26 +429,65 @@ private: window.clear(Color::Black); // clear the contents of the old frame // by setting the window to black - if (shieldTimer.getElapsedTime().asSeconds() > 5) player.setShield(false); - if (poweredUpRapid && rapidFireClock.getElapsedTime().asSeconds() > 12) poweredUpRapid = false; - if (poweredUpDamage && damageClock.getElapsedTime().asSeconds() > 12) poweredUpDamage = false; - if (poweredUpSpray && sprayFireClock.getElapsedTime().asSeconds() > 12) poweredUpSpray = false; - if (poweredUpbackwards && backwardsClock.getElapsedTime().asSeconds() > 12) poweredUpbackwards = false; - if (poweredUpFighter && fighterClock.getElapsedTime().asSeconds() > 12) { + int shortTime = 5, longTime = 12; + + if (shieldTimer.getElapsedTime().asSeconds() > shortTime) player.setShield(false); + else if (player.hasShield()) { + double secs = shieldTimer.getElapsedTime().asSeconds(); + shieldIcon.getRidersForEdit()->at(0).setTextureRect(IntRect(filterRect.left, filterRect.top * secs/shortTime, filterRect.width, filterRect.height * secs/shortTime)); + } + + if (poweredUpRapid && rapidFireClock.getElapsedTime().asSeconds() > longTime) poweredUpRapid = false; + else if (poweredUpRapid) { + double secs = rapidFireClock.getElapsedTime().asSeconds(); + rapidFireIcon.getRidersForEdit()->at(0).setTextureRect(IntRect(filterRect.left, filterRect.top * secs/longTime, filterRect.width, filterRect.height * secs/longTime)); + } + + if (poweredUpDamage && damageClock.getElapsedTime().asSeconds() > longTime) poweredUpDamage = false; + else if (poweredUpDamage) { + double secs = damageClock.getElapsedTime().asSeconds(); + damageIcon.getRidersForEdit()->at(0).setTextureRect(IntRect(filterRect.left, filterRect.top * secs/longTime, filterRect.width, filterRect.height * secs/longTime)); + } + + if (poweredUpSpray && sprayFireClock.getElapsedTime().asSeconds() > longTime) poweredUpSpray = false; + else if (poweredUpSpray) { + double secs = sprayFireClock.getElapsedTime().asSeconds(); + sprayFireIcon.getRidersForEdit()->at(0).setTextureRect(IntRect(filterRect.left, filterRect.top * secs/longTime, filterRect.width, filterRect.height * secs/longTime)); + } + + if (poweredUpbackwards && backwardsClock.getElapsedTime().asSeconds() > longTime) poweredUpbackwards = false; + else if (poweredUpbackwards) { + double secs = backwardsClock.getElapsedTime().asSeconds(); + backwardsFireIcon.getRidersForEdit()->at(0).setTextureRect(IntRect(filterRect.left, filterRect.top * secs/longTime, filterRect.width, filterRect.height * secs/longTime)); + } + + if (poweredUpFighter && fighterClock.getElapsedTime().asSeconds() > longTime) { poweredUpFighter = false; fighter.setPosition(-20, -20); fighter.setVelocity(0); fighter.setDirection(0); + } else if (poweredUpFighter) { + double secs = fighterClock.getElapsedTime().asSeconds(); + fighterIcon.getRidersForEdit()->at(0).setTextureRect(IntRect(filterRect.left, filterRect.top * secs/longTime, filterRect.width, filterRect.height * secs/longTime)); } - if (poweredUpTurret && turretClock.getElapsedTime().asSeconds() > 12) { + + if (poweredUpTurret && turretClock.getElapsedTime().asSeconds() > longTime) { poweredUpTurret = false; player.removeRider(0); - } if (poweredUpTime && timeClock.getElapsedTime().asSeconds() > 5) { + } else if (poweredUpTurret) { + double secs = turretClock.getElapsedTime().asSeconds(); + turretIcon.getRidersForEdit()->at(0).setTextureRect(IntRect(filterRect.left, filterRect.top * secs/longTime, filterRect.width, filterRect.height * secs/longTime)); + } + + if (poweredUpTime && timeClock.getElapsedTime().asSeconds() > shortTime) { for (auto e : enemies) { e->setVelocity(e->getVelocity() * 8); } poweredUpTime = false; + } else if (poweredUpTime) { + double secs = timeClock.getElapsedTime().asSeconds(); + timeIcon.getRidersForEdit()->at(0).setTextureRect(IntRect(filterRect.left, filterRect.top * secs/shortTime, filterRect.width, filterRect.height * secs/shortTime)); } //**************************************** @@ -440,7 +572,7 @@ private: // Spawn cycle below here //**************************************** - uniform_int_distribution stroidChance(1, 32), powerUpChance(1, 50), + uniform_int_distribution stroidChance(1, 32), powerUpChance(1, 35), powerUp(1, 8), stroidSize(1, 3), smallTexture(0, smallAsteroids.size() - 1), mediumTexture(0, mediumAsteroids.size() - 1), @@ -735,7 +867,7 @@ private: timeClock.restart(); } else if (enemies[i]->getRiders()[0].getType() == "Shield") { shieldTimer.restart(); - player.setShield(true, &shield, 12, &shieldTimer); + if (!player.hasShield()) player.setShield(true, &shield, 12, &shieldTimer); } } @@ -765,11 +897,75 @@ private: enemies.erase(enemies.begin() + i); } } else if (!ended && Collision::CircleTest(*enemies[i], player)) { - if (player.hit(window, animations, explosion, gen, shield, 12, shieldTimer)) { + if (player.hit(window, animations, explosion, gen)) { ended = true; + player.setShield(false); playerLost.play(); - } else playerBoom.play(); + if (highScores[0] == 0) { + time_t now = time(0); + tm *ltm = localtime(&now); + + highScores[0] = player.getScore(); + highScoresDates[0] = to_string(ltm->tm_mday) + "/" + to_string(1 + ltm->tm_mon) + "/" + to_string(1900 + ltm->tm_year); + } + else { + bool inserted = false; + for (int j = 0; j < highScores.size(); j++) { + if (player.getScore() > highScores[j]) { + inserted = true; + + highScores.insert(highScores.begin() + j, player.getScore()); + + time_t now = time(0); + tm *ltm = localtime(&now); + + highScoresDates.insert(highScoresDates.begin() + j, to_string(ltm->tm_mday) + "/" + to_string(1 + ltm->tm_mon) + "/" + to_string(1900 + ltm->tm_year)); + + if (highScores.size() > 10) { + highScores.pop_back(); + highScoresDates.pop_back(); + } + break; + } + } + + if (!inserted && highScores.size() < 10) { + highScores.push_back(player.getScore()); + + time_t now = time(0); + tm *ltm = localtime(&now); + highScoresDates.push_back(to_string(ltm->tm_mday) + "/" + to_string(1 + ltm->tm_mon) + "/" + to_string(1900 + ltm->tm_year)); + } + } + + ofstream fout("scores"); + for (int j = 0; j < highScores.size(); j++) { + fout << highScoresDates[j] << " " << highScores[j]; + if (j != highScores.size() - 1) fout << endl; + + highScoreEntries[j].setString(to_string(highScores[j])); + highScoreEntriesDates[j].setString(highScoresDates[j]); + + int widthEntry = highScoreEntries[0].getGlobalBounds().width; + int widthEntryDate = highScoreEntriesDates[0].getGlobalBounds().width; + int spaceBetween = 150 - widthEntryDate; + int dateLoc = (window.getSize().x - (widthEntry + widthEntryDate + spaceBetween))/2; + + cout << widthEntryDate << " " << widthEntry << " " << spaceBetween << endl; + + highScoreEntriesDates[j].setPosition(dateLoc, window.getSize().y/1.8 + (25 * j)); + highScoreEntries[j].setPosition(dateLoc + 150, window.getSize().y/1.8 + (25 * j)); + } + + fout.close(); + } else { + playerBoom.play(); + player.setShield(true, &shield, 12, &shieldTimer); + } + + poweredUpDamage = false; + poweredUpSpray = false; poweredUpRapid = false; poweredUpbackwards = false; @@ -778,13 +974,19 @@ private: fighter.setVelocity(0); fighter.setDirection(0); + if (poweredUpTurret) player.removeRider(0); poweredUpTurret = false; - player.removeRider(0); - for (auto e : enemies) - e->setVelocity(e->getVelocity() * 8); + if (poweredUpTime) { + for (auto e : enemies) + e->setVelocity(e->getVelocity() * 8); + } poweredUpTime = false; + for (int j = 0; j < projectiles.size(); j++) { + projectiles.erase(projectiles.begin() + j); + } + lives.erase(lives.begin() + player.getLives()); //remove player icon from top corner } } @@ -796,7 +998,7 @@ private: } } - score.setString("Score: " + to_string(player.getScore())); + score.setString(to_string(player.getScore())); if (player.getScore() - (player.getNewLifeScore() * player.getNumLivesAdded()) >= player.getNewLifeScore()) { @@ -841,6 +1043,11 @@ private: } } else { for (auto & i : lost) window.draw(*i); + + for (int i = 0; i < highScores.size(); i++) { + window.draw(highScoreEntriesDates[i]); + window.draw(highScoreEntries[i]); + } } for (int i = 1; i < gui.size(); i++) { @@ -850,6 +1057,39 @@ private: for (auto i: lives) { window.draw(i); } + + if (poweredUpRapid) { + window.draw(rapidFireIcon); + window.draw(rapidFireIcon.getRiders()[0]); + } + if (poweredUpDamage) { + window.draw(damageIcon); + window.draw(damageIcon.getRiders()[0]); + } + if (poweredUpbackwards) { + window.draw(backwardsFireIcon); + window.draw(backwardsFireIcon.getRiders()[0]); + } + if (poweredUpSpray) { + window.draw(sprayFireIcon); + window.draw(sprayFireIcon.getRiders()[0]); + } + if (player.hasShield()) { + window.draw(shieldIcon); + window.draw(shieldIcon.getRiders()[0]); + } + if (poweredUpTime) { + window.draw(timeIcon); + window.draw(timeIcon.getRiders()[0]); + } + if (poweredUpTurret) { + window.draw(turretIcon); + window.draw(turretIcon.getRiders()[0]); + } + if (poweredUpFighter) { + window.draw(fighterIcon); + window.draw(fighterIcon.getRiders()[0]); + } //**************************************** // ADD ALL OF OUR DRAWING ABOVE HERE //**************************************** diff --git a/Mount.h b/Mount.h index 4d986d2..446ab6e 100644 --- a/Mount.h +++ b/Mount.h @@ -25,8 +25,13 @@ public: } void addRider(Rider &sprite, int index = -1) { - if (index == -1) riders.push_back(sprite); - else riders.insert(riders.begin() + index, sprite); + if (index == -1) { + riders.push_back(sprite); + riders[riders.size() - 1].setPosition(getPosition()); + } else { + riders.insert(riders.begin() + index, sprite); + riders[index].setPosition(getPosition()); + } } void removeRider(int index = -1) { diff --git a/Ship.h b/Ship.h index 6cc0ffa..3da2b0a 100644 --- a/Ship.h +++ b/Ship.h @@ -15,7 +15,7 @@ public: sound.play(); } - bool hit(RenderWindow &window, vector &animations, Texture &explosionTexture, default_random_engine &gen, Texture &shieldTexture, int scale, Clock &timer) { + bool hit(RenderWindow &window, vector &animations, Texture &explosionTexture, default_random_engine &gen) { uniform_int_distribution angle(0, 359); animations.emplace_back(explosionTexture, 100, getXPos(), getYPos(), 0, angle(gen)); animations[animations.size() - 1].makeAnimated(5, 5, 0.01,23); @@ -24,7 +24,6 @@ public: setDirection(0); setVelocity(0); lives--; - setShield(true, &shieldTexture, scale, &timer); return lives <= 0; } diff --git a/data/Gui/money_bar.png b/data/Gui/high_bar.png similarity index 68% rename from data/Gui/money_bar.png rename to data/Gui/high_bar.png index 4b1fa3c8a3e81e8aa9d48a15b1c4eca5fbd15912..ec4a56b079b0da677c8834c6a1a4b698bd1e32f4 100644 GIT binary patch delta 2934 zcmV-+3yJiuPOnaoBmqB>C5?Z*10RFQR*u}P?@sbOKF>pb4YmE;lvee-t0O+w`A)p9 zy#JD3(_cpHxBLDeD^Xg)tQ6x;A^H2A9}m*=uiNwct<3ZHKBwfk#1vjn2*^*{`&_;M z9-yCs{JC?#MnAPb2S4_AM*1a|FIdi(KMw@?bMSA7zc2jdQT%zJtuKFIehczBtDdu; z-Su3EXn7gs-6uNs4ig6-{u7)ptJuXZh&|pBY++ME|&u!wNl|u|Kf>DbTj6l&o;Y3X>tyBSP#_dw#as2Wn+;!VsZ-&asD=;+%j0Il# zk01Bn2LH~-oii;&;WB@=-B{sQH0I)lA!pyr0+4WC+~fxM^LgR---u;Y%}lc}S2o!F zcuWilKe&}H&WU-#^~s9hbiD=$5o-(1gaiV{~)mGoZZIoi?ExT;pb+_FQTs!IHBc~ia^|aH!Px ztzd`&VcsFi318U#K<+Q$=A`~5+~WU2&KY$759A!s{f^roP+L~#=0)tuLW`+SWZya` z)Z^;FH1fpe1{;#1NoE}tB`H3a=?lq~)*fgh(pP1jp0IyQVzb&lyDzD%=5iZ~;02qu z$Cf)ihkktRtB3^l8#eGAZ^89>v*)zNogb7va0?yWSoUa~Nl@(0k8yIgJIaP^);?P> zdkCejo-4n*WF2Aen0CUF+H9A7G+WowMsYC{A2V!TKW32W9rD7RaD-Aw5zuI}$7iEJ{JaM9_W5KIUi<1|-I-L1tX9 z@I9!Us_8ha?Z?=}NSD`G+eFKZl{KIR~#@@62BlDr=5A0FgoV>*+*W0!MZ=2|bUw_S8if-U7Wsq((nj!{W&Yi%x{e6h_D^V(C} zvS!*HHl3F7t{&K5sQS55L~ z;=Ar$(3nGCb7CJgud(KqNxJMdLxceE+`4~_v)sHWvA1wa0GQDgJA;HgrL%8ti?uH; z?g_H178tbKnY;N_XHM{a!e%$-;0>B%G>t0VW1a9$17u`EN8?G!oqd=hZ55R~0>R0% z9q}tiq7c^(;^s&u1$6o>TUGmMU8m>?)QGu^c%|XY>HFk8Vm=Me%i5(NxnXzqN6&wS zu!S|yv(y{mU`|-sl&qyQa)>vLuXceL>ib9rB=VvL+Q=E9u%vOZ5MX7~A7w|1O7wAPE>gc5WF!ZPF*j4Wa62KA#srjc%uS?2E?d1wen!b{qo< zkcmO3NQ z`de#ejgrYXWa5xaszyhs;8w6aHaeMl+D{Jwhy98+X1;)}&onyp9!DvEW54XER5fHI zpf?OWJQAY);n5f4f;EyT3Jlxm9SvH@g|+v zXTVpWAF>w>n?bKBWSX9$C`q0buPyzi^_!cX2JF#Jb;Mz|Xhk&M zg0xY2(uzsw456IIoR2WpSaLEleqYY3SwWipGOv2qulU#gX&-{o-bhJ1ehq(L0Frmv zbJLJ7a*5zh>yx|=fBU0OJ$ibMKwU%NtaqbUz0w+jx#u^-^WPq&&WW9m8kBVuO&%yyX)CX){B(4%5#joS6S@JER}1itS1_8 zFw9y;zfZi&JGx10e|y?K?Pd*xojl&y)62K{jOZP)Q}SJhRkU-LHJ*kh6juqzR3B}6 zX>zBxZ_@#oRO5eYtzy~f7q9jy);iGE=-o!C>)Nw^r3b3QotRP$zijqiDQ%pN9w26Z zuyr4BH|-ufR+Ric8A$YM9L%gqtYJm#gVq1)5#CcFX?Bc|`#Rzubh#+!jb*#nyZbs1 zGHHoO`?BJN<@{#QJr?ESGJnS@!ze(lzJP9!DSilhlex;x{BptYokBB z{HGz33~D=aSfiMyN-VxYk3d;(!=ek9WI*eOc_9oz~Gig4k`Rj*`XH~(ioTh zzZW8MO-)V8gmTap&B4!1XG9Agvyzl`qkdxQmrVVrUWk%+9CS|$re`C5~5pNLBY+5?!ec~W1N(%8g@wh=3B!1+&+~haT1&0Nm88p(#dEy|k zSmxE4000JJOGiWi g{{R301pqTAeDjkI3?B&!5e6$5f`!83vo;L)8riC;$p8QV delta 2933 zcmV-*3ySowPOeUnBmq8=C5?ZDFT;-qwzA!??@sbOKF>pb4YmE;lvee-tK&5^--*|i z_h0^U>$%u(_tOI5Yh57>IOS}%rJ2f@^oJ-e3XB}z1~mbQ+@Xn$d{jf@R^~72r9>g99HPzgnh3w zOkB)yN97vhjOjkBNn?vM8BWtyIBs#_hli@V~(DPdoh!wHMXj zK7RwX@S+wkQZ|22zfj|;Q~j6-CMRN;fmqA|#MKah(9tmSHRK!(Im67iNK#0|Nil5P z3WgXE<{hG(@P*wEI6E&ea$oI&^hK+XZ(@3{Q|wPkf~Uc{a(w3zxt_N{Y5 zJ+2N+BTsB@upud$WY$qplHzljzF5^*d!UU-UzK%w!Y+S_&1(DXzNE66%WWuv7i`)d zTkiB6`th}|A`;kd*uZzZ1=r`zp3@q4eo*$nEp%{W*`skLL9shO#>v_4C>yd_`)tAN zA(Xm$uKezjb%ecR+6hZ)vt9PlY+Xwm#l=i~%&>X=m_ep@$P0JE5lSINK%>nbpV{um zbk&3Q?&W{=?CO(Zo{=(U%91LY(a`wbB``UyS#_4R2se|1E@$>^e#U zSYHrH;I$CUaF&!C^w{>!Y^*TKyeh{Lm>Z+b&g>3Yl!AhZp!<$}%+YuZNQ_s5%(!0R zdr&!5({WhakFkl7F0Zk+iIy2FcMKg2w#iaE)Wm<(GE;=S-FUDQx7Zg*bz;ALj+X~x z@XjR!1+MgaN74?#dR{R$VYVo%&OY|WwR7CVhEt1$Smw&di*$#ANN~2qz9hV{oU~SVw)r8wWqda z&9pmgIxXW}J+Qw}^>d|&A7U^x8k@^|M zcip?7F^9h9#6D_XW6dp-blGi&2m#=^bsK+Yxp`4yZ{d^xFrzDW1_^meXW!fwYhPO2 z6J%E{Fle_kck`>xoZ$O}&2G%W8#Kpg8dbW-I^mrL$jF3_#*>me`!Ge?Dk^ydf|F-E z;#ZDDA+8<7&5=wB==52(s`k^mPSF#n5px;wO2e7c_sM(2d>WpYwM#*A!|v>lo(q3r z3u~ZfsW-yGoUpPfSxaZ+5N{e^?E*2>_mK=pJS6J>#a$*!W(Ot+DL}eJi4rQV40f3p(%yl8PfFh= z9p{F@A_jHJ9jN2V75($cSe>cY=B*XUuT5`et0 zr&rh#GdlX4cQs$<4KMuSfLrMU5_GkSZRLg>$_Pw9Bodn_V=F(DQtPPi6emip>HmII z=oVV-aC8^3ZUpDkLnp#%>ui7H4_5+oZpoX@E-!z;EK!yM^s)mtKG^PspXBCAbVSS4 z-&!+kluW)M6Nh9{H9A5Cw}R!d(aF@)etHNv>{qlg^95{urqQAII7;~&`(;O^sv#o* zycetdT@fVAw|QXwX6~>_W;2r6P2MTe~~fg|UITI-Y-Vx*c8+;?Wql ziW}A>`J-iOq5@uC&DO1Rf0#=MN&40=r=)ASTYN%E|CZRt0y-`w;xV2^gHBM!4gE28lh zq>ajxR!l-?2<1HHe1x&al9Q3~`*L2*3exPCdDXjq#lQAX`w)!wMoQZ8Yxw&Dki5&D zn}&RmO9XdXpX7D;+aGo6(bIDT>KX!Py&JXamDcbS@vl+YO_6^nGl<4g9rxDe2H~LP zQS);>Z5BszoWV)`K1OnXMg}UZM0MwUElHZ&UC&msUZlKLo@3;_%3@b$sa#8CJ<)iB zVb(JGed1l-(M?+W+tc=GH)|m50(Z*Pit&Jx~?y#FT3IWwZB6Y2$SC05S7} zt^0txY4_N%qU86?U|;6jN&!|1fyR z1QELQYq!>OA}PsMBuyyN?a6|Y+(p{Iak6T|_-=OMNi<_WXh3Ie_|PZORV)u%8~x$s zKMj#&P}`Bi8pS+SV(}Gv1j>3F7Nvmf#(9_SaM5IE$^c>n2DdzNNa1(N4!yXL#<=YN zy%3RWYEn!ll!LZt4t{1jBUxtLX^DYpnF;<=c$j$a{3iNZPvdb zA5>FHd5ILGS>HM!{^>33e}s@vQsm!igTg`Ly%*J!YziTNr79H%i-fqw6tAnc`2!4P#IXWr2NQwVT3N2zhIPS;0 zdyl(!fKV?p)$AAtRLwF{@tBy+t%!kF_|c64L@+8bQ%|H9GVmN<_we!cF3PjK&;2=i zmAuISpGZ7^%XGscUMHU3v~by?xO#aS&^S@WL!g~7bGoaQ>sVZ^bB1d+gyEO}clM`-IFa~tK*!D*R24l)zS@ca0rYPDSOT1-Cgay{d=a_-w&bCa=M#IdB^|&00v@9M??Vs f0RI35|De66lamh&9|;2q7Ahr2Z2`lxHw^e1#5lsS diff --git a/data/Gui/redFilter.png b/data/Gui/redFilter.png new file mode 100644 index 0000000000000000000000000000000000000000..9aea3d1a2575c658ad4ac70bf13d3d25f50702dd GIT binary patch literal 5918 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 JPDHLkV1l$~wHg2b literal 0 HcmV?d00001 diff --git a/scores b/scores new file mode 100644 index 0000000..57183ab --- /dev/null +++ b/scores @@ -0,0 +1,5 @@ +19/10/2020 107800 +19/10/2020 12100 +19/10/2020 8700 +19/10/2020 1300 +19/10/2020 100 \ No newline at end of file