0.0.2 part 1
(don’t look)
This commit is contained in:
parent
2440c561f2
commit
59ba3d7377
2
.gitignore
vendored
2
.gitignore
vendored
@ -3,3 +3,5 @@
|
||||
clicker
|
||||
moneymaker
|
||||
log.txt
|
||||
a.out
|
||||
💣.c
|
||||
|
2
make.sh
2
make.sh
@ -1,2 +1,2 @@
|
||||
g++ $1 -o $2 -O3 -std=c++23 -pthread -lgmp -lgmpxx
|
||||
g++ $1 -o $2 -O3 -std=c++23 -pthread -lgmp -lgmpxx -s
|
||||
#./$2
|
@ -1,9 +1,8 @@
|
||||
{ pkgs }: {
|
||||
deps = [
|
||||
pkgs.fuse-emulator
|
||||
pkgs.kmod
|
||||
pkgs.sshfs
|
||||
pkgs.openssh
|
||||
pkgs.neofetch
|
||||
pkgs.sshfs
|
||||
pkgs.openssh
|
||||
pkgs.clang
|
||||
pkgs.ccls
|
||||
pkgs.gdb
|
||||
|
@ -5,14 +5,14 @@
|
||||
#include <sstream>
|
||||
|
||||
namespace GRP {
|
||||
|
||||
mpq_class pow(mpq_class base, mpz_class exp) {
|
||||
mpq_class result = 1;
|
||||
for (mpz_class i = 0; i < exp; i++)
|
||||
result *= base;
|
||||
return result;
|
||||
}
|
||||
|
||||
mpz_class precision;
|
||||
|
||||
mpz_class kilo = 1'000;
|
||||
|
||||
std::vector<std::string> formatLong = {" thousand"," million"," billion"," trillion"," quadrillion"," quintillion"," sextillion"," septillion"," octillion"," nonillion"};
|
||||
@ -23,7 +23,11 @@ namespace GRP {
|
||||
return x.get_num() / x.get_den();
|
||||
}
|
||||
|
||||
std::string toString(mpq_class x) {
|
||||
mpz_class operator%(mpz_class a, mpz_class b) {
|
||||
return a - (a / b) * b;
|
||||
}
|
||||
|
||||
std::string toString(mpq_class x, mpz_class precision = 1) {
|
||||
std::stringstream result;
|
||||
if (x >= 1'000'000) {
|
||||
size_t suffix = 1;
|
||||
@ -57,10 +61,20 @@ namespace GRP {
|
||||
|
||||
return result.str();
|
||||
} else {
|
||||
x *= 10;
|
||||
mpz_class big = round(x/10);
|
||||
mpz_class big = round(x);
|
||||
|
||||
mpz_class small = round(x - big * 10);
|
||||
std::string small = "";
|
||||
std::string smallBuf = "";
|
||||
bool smallHasDigits = false;
|
||||
|
||||
for(mpz_class i = 1; i <= precision; i++) {
|
||||
mpz_class digit = round(x * pow(10, i)) % 10;
|
||||
smallBuf.append(digit.get_str());
|
||||
if(digit != 0) {
|
||||
smallHasDigits = true;
|
||||
small.append(smallBuf);
|
||||
}
|
||||
}
|
||||
|
||||
mpz_class kilos = big / kilo;
|
||||
mpz_class ones = big - kilos * kilo;
|
||||
@ -73,7 +87,7 @@ namespace GRP {
|
||||
|
||||
result << kilos << ',' << onesf;
|
||||
} else {
|
||||
if(small != 0) result << ones << '.' << small;
|
||||
if(smallHasDigits) result << ones << '.' << small;
|
||||
else result << ones;
|
||||
}
|
||||
|
||||
@ -83,9 +97,7 @@ namespace GRP {
|
||||
return "error: HOW!";
|
||||
}
|
||||
|
||||
void init(mpz_class precision = 1) {
|
||||
precision = pow(precision, 10);
|
||||
|
||||
void init() {
|
||||
for(int i = 0; i < suffixes.size(); i++) {
|
||||
for(int j = 0; j < prefixes.size(); j++) {
|
||||
formatLong.push_back(' ' + prefixes[j] + suffixes[i]);
|
||||
|
461
👨💻/main.cpp
461
👨💻/main.cpp
@ -5,7 +5,7 @@
|
||||
#include "./lib/CMD.hpp"
|
||||
#include "./lib/GRP.hpp"
|
||||
|
||||
#define RESET "\033[0m"
|
||||
#define RESET "\033[0m" /* Reset */
|
||||
#define BLACK "\033[30m" /* Black */
|
||||
#define RED "\033[31m" /* Red */
|
||||
#define GREEN "\033[32m" /* Green */
|
||||
@ -46,6 +46,23 @@ enum Buildings {
|
||||
oaktree = 6580827420282859339
|
||||
};
|
||||
|
||||
struct Upgrade {
|
||||
str name;
|
||||
str description;
|
||||
str effect;
|
||||
str flavortext;
|
||||
number cost;
|
||||
bool unlocked;
|
||||
bool purchased;
|
||||
};
|
||||
|
||||
struct Acheivement {
|
||||
str name;
|
||||
str description;
|
||||
str flavortext;
|
||||
bool completed;
|
||||
};
|
||||
|
||||
struct TclickerSave {
|
||||
number transistorBalance;
|
||||
number totalTransistors;
|
||||
@ -57,16 +74,83 @@ struct TclickerSave {
|
||||
//integer i860s, startups, oakTrees;
|
||||
bool cursorUnlocked, mossUnlocked, smallFABUnlocked, mediumFABUnlocked, largeFABUnlocked;
|
||||
//bool i860Unlocked, startupUnlocked, oakTreeUnlocked;
|
||||
std::vector<Upgrade> upgrades;
|
||||
std::vector<Acheivement> acheivements;
|
||||
};
|
||||
|
||||
class UpgradeGroup {
|
||||
private:
|
||||
std::vector<size_t> upgradeIndices;
|
||||
std::vector<Upgrade>* upgradeList;
|
||||
public:
|
||||
UpgradeGroup(std::vector<Upgrade>* upgradeList) {
|
||||
this->upgradeList = upgradeList;
|
||||
}
|
||||
|
||||
Upgrade& operator[] (size_t index) {
|
||||
std::vector<Upgrade>& Ulist = *upgradeList;
|
||||
return Ulist[upgradeIndices[index]];
|
||||
}
|
||||
|
||||
void append(size_t index) {
|
||||
upgradeIndices.push_back(index);
|
||||
}
|
||||
|
||||
size_t size() {
|
||||
return upgradeIndices.size();
|
||||
}
|
||||
|
||||
class Iterator {
|
||||
private:
|
||||
size_t index;
|
||||
UpgradeGroup& group;
|
||||
|
||||
public:
|
||||
Iterator(size_t index, UpgradeGroup& group) : index(index), group(group) {}
|
||||
|
||||
void operator++() {
|
||||
index++;
|
||||
}
|
||||
|
||||
Upgrade& operator*() {
|
||||
return this->group[this->index];
|
||||
}
|
||||
|
||||
bool operator!=(const Iterator& other) {
|
||||
return this->index != other.index;
|
||||
}
|
||||
};
|
||||
|
||||
Iterator begin() {
|
||||
return Iterator(0, *this);
|
||||
}
|
||||
|
||||
Iterator end() {
|
||||
return Iterator(this->upgradeIndices.size(), *this);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
str tolower(str s) {
|
||||
str ret = "";
|
||||
for(int i = 0; i < s.length(); i++) {
|
||||
ret += tolower(s[i]);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct Trigger {
|
||||
CMD::Condition condition;
|
||||
CMD::Result result;
|
||||
bool selfdelete = true;
|
||||
};
|
||||
|
||||
std::vector<Trigger> triggers;
|
||||
|
||||
TclickerSave save = {0, 0, 0, 0, 0, 0, 0, 0, false, false, false, false, false};
|
||||
std::unordered_map<str, size_t> upgradeIndex;
|
||||
std::unordered_map<str, size_t> acheivementIndex;
|
||||
|
||||
TclickerSave save = {0, 0, 0, 0, 0, 0, 0, 0, false, false, false, false, false, {}, {}};
|
||||
|
||||
const str name = "Transistor Clicker";
|
||||
const str version = "0.0.1_2";
|
||||
@ -75,16 +159,38 @@ const number cursorPrice = 15, mossPrice = 100, smallFABPrice = 1'000, mediumFAB
|
||||
const number cursorYeild = 0.1, mossYeild = 1, smallFABYeild = 10, mediumFABYeild = 60, largeFABYeild = 260, intelI860Yeild = 1'700, startupYeild = 10'000, oakTreeYeild = 120'000;
|
||||
const number expantionFactor = number(23, 20);
|
||||
|
||||
integer toInt(number x) {
|
||||
return integer(x);
|
||||
UpgradeGroup cursorUpgrades(&save.upgrades);
|
||||
UpgradeGroup mossUpgrades(&save.upgrades);
|
||||
UpgradeGroup smallFABUpgrades(&save.upgrades);
|
||||
UpgradeGroup mediumFABUpgrades(&save.upgrades);
|
||||
UpgradeGroup largeFABUpgrades(&save.upgrades);
|
||||
|
||||
void createUpgrade(str Uname, str description, str effect, str flavortext, number cost) {
|
||||
save.upgrades.push_back({Uname, description, effect, flavortext, cost, false, false});
|
||||
upgradeIndex[Uname] = save.upgrades.size() - 1;
|
||||
}
|
||||
|
||||
str tolower(str s) {
|
||||
str ret = "";
|
||||
for(int i = 0; i < s.length(); i++) {
|
||||
ret += tolower(s[i]);
|
||||
}
|
||||
return ret;
|
||||
void createUpgrade(str Uname, str description, str effect, str flavortext, number cost, UpgradeGroup& group) {
|
||||
save.upgrades.push_back({Uname, description, effect, flavortext, cost, false, false});
|
||||
upgradeIndex[Uname] = save.upgrades.size() - 1;
|
||||
group.append(upgradeIndex[Uname]);
|
||||
}
|
||||
|
||||
void createAcheivement(str achName, str description, str flavortext) {
|
||||
save.acheivements.push_back({achName, description, flavortext, false});
|
||||
acheivementIndex[achName] = save.acheivements.size() - 1;
|
||||
}
|
||||
|
||||
size_t getUpgradeByName(str Uname) {
|
||||
return upgradeIndex[tolower(Uname)];
|
||||
}
|
||||
|
||||
size_t getAcheivementByHandle(str handle) {
|
||||
return acheivementIndex[handle];
|
||||
}
|
||||
|
||||
integer toInt(number x) {
|
||||
return integer(x);
|
||||
}
|
||||
|
||||
number pow(number base, integer exponent) {
|
||||
@ -120,14 +226,20 @@ void clear(std::vector<str>&) {
|
||||
printTitileCard();
|
||||
}
|
||||
|
||||
str numString(number x, str thing, str plural = "s", bool round = true, str colA = BOLDGREEN, str colB = BOLDBLUE) {}
|
||||
str numString(number x, str thing, str plural = "s", integer precision = 0, str colA = BOLDGREEN, str colB = BOLDBLUE) {
|
||||
std::stringstream result;
|
||||
|
||||
str TransitorsString(number transistors, bool round = true, str colA = BOLDGREEN, str colB = BOLDBLUE) {
|
||||
std::stringstream ss;
|
||||
if(round) transistors = GRP::round(transistors);
|
||||
str plural = GRP::round(transistors * 10) / 10 == 1 ? "transistor" : "transistors";
|
||||
ss << colA << GRP::toString(transistors) << ' ' << colB << plural;
|
||||
return ss.str();
|
||||
str numStr = GRP::toString(x, precision);
|
||||
|
||||
thing.append(numStr == "1" ? "" : plural);
|
||||
|
||||
result << colA << numStr << ' ' << colB << thing;
|
||||
|
||||
return result.str();
|
||||
}
|
||||
|
||||
str TransitorsString(number transistors, integer precision = 0, str colA = BOLDGREEN, str colB = BOLDBLUE) {
|
||||
return numString(transistors, "transistor", "s", precision, colA, colB);
|
||||
}
|
||||
|
||||
void unlockCursor(std::vector<str>& args) {
|
||||
@ -175,24 +287,147 @@ void increaseTransistors(number by) {
|
||||
save.totalTransistors += by;
|
||||
}
|
||||
|
||||
bool canUnLockIntegratedMouse(std::vector<str>& args) {
|
||||
return save.cusors >= 1;
|
||||
}
|
||||
|
||||
bool canUnLockFastFing(std::vector<str>& args) {
|
||||
return save.cusors >= 1;
|
||||
}
|
||||
|
||||
bool canUnLockChippy(std::vector<str>& args) {
|
||||
return save.cusors >= 10;
|
||||
}
|
||||
|
||||
bool canUnLockMossyMossy(std::vector<str>& args) {
|
||||
return save.moss >= 1;
|
||||
}
|
||||
|
||||
bool canUnLockMossWalls(std::vector<str>& args) {
|
||||
return save.moss >= 5;
|
||||
}
|
||||
|
||||
bool canUnLockCheapMachines(std::vector<str>& args) {
|
||||
return save.smallFABs >= 1;
|
||||
}
|
||||
|
||||
bool canUnLockDenseChips(std::vector<str>& args) {
|
||||
return save.smallFABs >= 5;
|
||||
}
|
||||
|
||||
bool canUnLockMossyTech(std::vector<str>& args) {
|
||||
return save.mediumFABs >= 1;
|
||||
}
|
||||
|
||||
bool canUnLockEndgame(std::vector<str>& args) {
|
||||
return save.largeFABs >= 1;
|
||||
}
|
||||
|
||||
void unLockIntegratedMouse(std::vector<str>& args) {
|
||||
Upgrade& FasterFingers = save.upgrades[getUpgradeByName("integrated mouse")];
|
||||
FasterFingers.unlocked = true;
|
||||
}
|
||||
|
||||
void unLockFastFing(std::vector<str>& args) {
|
||||
Upgrade& FasterFingers = save.upgrades[getUpgradeByName("faster fingers")];
|
||||
FasterFingers.unlocked = true;
|
||||
}
|
||||
|
||||
void unLockChippy(std::vector<str>& args) {
|
||||
Upgrade& Chippy = save.upgrades[getUpgradeByName("chippy")];
|
||||
Chippy.unlocked = true;
|
||||
}
|
||||
|
||||
void unLockMossyMossy(std::vector<str>& args) {
|
||||
Upgrade& MossyMossy = save.upgrades[getUpgradeByName("mossy mossy")];
|
||||
MossyMossy.unlocked = true;
|
||||
}
|
||||
|
||||
void unLockMossWalls(std::vector<str>& args) {
|
||||
Upgrade& MossyMossy = save.upgrades[getUpgradeByName("moss walls")];
|
||||
MossyMossy.unlocked = true;
|
||||
}
|
||||
|
||||
void unLockCheapMachines(std::vector<str>& args) {
|
||||
Upgrade& CheapMachines = save.upgrades[getUpgradeByName("cheap lithography machines")];
|
||||
CheapMachines.unlocked = true;
|
||||
}
|
||||
|
||||
void unLockDenseChips(std::vector<str>& args) {
|
||||
Upgrade& DenseChips = save.upgrades[getUpgradeByName("denser chips")];
|
||||
DenseChips.unlocked = true;
|
||||
}
|
||||
|
||||
void unLockMossyTech(std::vector<str>& args) {
|
||||
Upgrade& MossyTech = save.upgrades[getUpgradeByName("mossier tech")];
|
||||
MossyTech.unlocked = true;
|
||||
}
|
||||
|
||||
void unLockEndgame(std::vector<str>& args) {
|
||||
Upgrade& Endgame = save.upgrades[getUpgradeByName("endgame")];
|
||||
Endgame.unlocked = true;
|
||||
}
|
||||
|
||||
number calcCursorYeild() {
|
||||
return save.cusors * cursorYeild;
|
||||
number yeild = cursorYeild;
|
||||
|
||||
for(Upgrade& upgrade : cursorUpgrades) {
|
||||
if(upgrade.purchased) yeild *= 2;
|
||||
}
|
||||
|
||||
return yeild * save.cusors;
|
||||
}
|
||||
|
||||
number calcMossYeild() {
|
||||
return save.moss * mossYeild;
|
||||
number yeild = mossYeild;
|
||||
|
||||
for(Upgrade& upgrade : mossUpgrades) {
|
||||
if(upgrade.purchased) yeild *= 2;
|
||||
}
|
||||
|
||||
return yeild * save.moss;
|
||||
}
|
||||
|
||||
number calcSmallFABYeild() {
|
||||
return save.smallFABs * smallFABYeild;
|
||||
number yeild = smallFABYeild;
|
||||
|
||||
for(Upgrade& upgrade : smallFABUpgrades) {
|
||||
if(upgrade.purchased) yeild *= 2;
|
||||
}
|
||||
|
||||
for(Upgrade& upgrade : mediumFABUpgrades) {
|
||||
if(upgrade.purchased) yeild *= 2;
|
||||
}
|
||||
|
||||
for(Upgrade& upgrade : largeFABUpgrades) {
|
||||
if(upgrade.purchased) yeild *= 2;
|
||||
}
|
||||
|
||||
return yeild *= save.smallFABs;
|
||||
}
|
||||
|
||||
number calcMediumFABYeild() {
|
||||
return save.mediumFABs * mediumFABYeild;
|
||||
number yeild = mediumFABYeild;
|
||||
|
||||
for(Upgrade& upgrade : mediumFABUpgrades) {
|
||||
if(upgrade.purchased) yeild *= 2;
|
||||
}
|
||||
|
||||
for(Upgrade& upgrade : largeFABUpgrades) {
|
||||
if(upgrade.purchased) yeild *= 2;
|
||||
}
|
||||
|
||||
return yeild * save.mediumFABs;
|
||||
}
|
||||
|
||||
number calcLargeFABYeild() {
|
||||
return save.largeFABs * largeFABYeild;
|
||||
number yeild = largeFABYeild;
|
||||
|
||||
for(Upgrade& upgrade : largeFABUpgrades) {
|
||||
if(upgrade.purchased) yeild *= 2;
|
||||
}
|
||||
|
||||
return yeild * save.largeFABs;
|
||||
}
|
||||
|
||||
number calcTPS() {
|
||||
@ -217,8 +452,18 @@ void onExit(std::vector<str>&) {
|
||||
CMD::log("Terminating...");
|
||||
}
|
||||
|
||||
number calcClickYeild() {
|
||||
number yeild = 1;
|
||||
|
||||
for(size_t i = 0; i < cursorUpgrades.size(); i++) {
|
||||
if(cursorUpgrades[i].purchased) yeild *= 2;
|
||||
}
|
||||
|
||||
return yeild;
|
||||
}
|
||||
|
||||
void click() {
|
||||
number clickValue = 1;
|
||||
number clickValue = calcClickYeild();
|
||||
increaseTransistors(clickValue);
|
||||
save.clicks++;
|
||||
std::cout << BOLDWHITE << "Click! " << BOLDBLUE << "You made " << TransitorsString(clickValue) << RESET << '\n';
|
||||
@ -294,8 +539,8 @@ void balance(std::vector<str>& args) {
|
||||
|
||||
number percent = producing / TPS * 100;
|
||||
|
||||
std::cout << BOLDBLUE << "You have " << BOLDGREEN << count << BOLDBLUE << ' ' << buildingName << "s, each producing " << TransitorsString(yeild) << " per second.\n";
|
||||
std::cout << "which produces " << TransitorsString(producing, false) << " per second in total which accounts for " << BOLDGREEN << GRP::toString(percent) << "%" << BOLDBLUE << " of your total TPS.\n";
|
||||
std::cout << BOLDBLUE << "You have " << numString(count, buildingName) <<", each producing " << TransitorsString(yeild, 1) << " per second.\n";
|
||||
std::cout << "which produces " << TransitorsString(producing, 1) << " per second in total which accounts for " << BOLDGREEN << GRP::toString(percent, 2) << "%" << BOLDBLUE << " of your total TPS.\n";
|
||||
std::cout << "One " << buildingName << " would cost " << TransitorsString(expandPrice(basePrice, count)) << ".\n";
|
||||
return;
|
||||
} else {
|
||||
@ -307,12 +552,51 @@ void balance(std::vector<str>& args) {
|
||||
}
|
||||
std::cout << BOLDBLUE << "You have " << TransitorsString(save.transistorBalance) << ".\n";
|
||||
std::cout << BOLDBLUE << "You have made " << TransitorsString(save.totalTransistors) << " in total.\n";
|
||||
std::cout << BOLDBLUE << "You make " << TransitorsString(calcTPS(), false) << " per second.\n";
|
||||
std::cout << BOLDBLUE << "You make " << TransitorsString(calcTPS(), 1) << " per second.\n";
|
||||
|
||||
CMD::log("They have" + TransitorsString(save.transistorBalance, "", "") + "!");
|
||||
CMD::log("They have " + TransitorsString(save.transistorBalance, 0, "", "") + "!");
|
||||
}
|
||||
|
||||
void buy(std::vector<str>& args) {
|
||||
if(args.size() > 1) {
|
||||
if(args[0] == "upgrade") {
|
||||
str Uname = "";
|
||||
|
||||
for(size_t i = 1; i < args.size(); i++) {
|
||||
Uname += args[i];
|
||||
if(i != args.size() - 1) Uname += " ";
|
||||
}
|
||||
|
||||
if(upgradeIndex.find(tolower(Uname)) == upgradeIndex.end()) {
|
||||
std::cout << BOLDRED << "Unknown upgrade!\n";
|
||||
return;
|
||||
}
|
||||
|
||||
Upgrade& upgrade = save.upgrades[getUpgradeByName(Uname)];
|
||||
|
||||
if(!upgrade.unlocked) {
|
||||
std::cout << BOLDRED << "Unkown upgrade!\n";
|
||||
return;
|
||||
}
|
||||
|
||||
if(upgrade.purchased) {
|
||||
std::cout << BOLDRED << "You already have this upgrade!\n";
|
||||
return;
|
||||
}
|
||||
|
||||
if(save.transistorBalance >= upgrade.cost) {
|
||||
save.transistorBalance -= upgrade.cost;
|
||||
upgrade.purchased = true;
|
||||
|
||||
std::cout << BOLDBLUE << "You bought " << upgrade.name << " for " << TransitorsString(upgrade.cost) << ".\n";
|
||||
return;
|
||||
} else {
|
||||
std::cout << BOLDRED << "You don't have enough transistors to buy " << upgrade.name;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(args.size() < 1) {
|
||||
std::cout << BOLDRED << "You must specify somthing to buy!\n";
|
||||
return;
|
||||
@ -391,7 +675,7 @@ void buy(std::vector<str>& args) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::cout << BOLDBLUE << "You bought " << totalBought << " " << buildingName << "s for " << TransitorsString(finalPrice) << "!\n";
|
||||
std::cout << BOLDBLUE << "You bought " << numString(totalBought, buildingName) << " for " << TransitorsString(finalPrice) << "!\n";
|
||||
|
||||
return;
|
||||
}
|
||||
@ -407,20 +691,86 @@ void buy(std::vector<str>& args) {
|
||||
save.transistorBalance -= totalPrice;
|
||||
count += toPurchase;
|
||||
|
||||
std::cout << BOLDBLUE << "bought " << toPurchase << " " << buildingName << "s for " << TransitorsString(totalPrice) << "!\n";
|
||||
std::cout << BOLDBLUE << "bought " << numString(toPurchase, buildingName) << " for " << TransitorsString(totalPrice) << "!\n";
|
||||
} else {
|
||||
std::cout << BOLDRED << "You don't have enough transistors to buy " << toPurchase << " for " << TransitorsString(totalPrice, BOLDRED, BOLDRED) << "!\n";
|
||||
std::cout << BOLDRED << "You don't have enough transistors to buy " << toPurchase << " for " << TransitorsString(totalPrice, 0, BOLDRED, BOLDRED) << "!\n";
|
||||
}
|
||||
} else {
|
||||
if(save.transistorBalance >= expandPrice(basePrice, count)) {
|
||||
save.transistorBalance -= expandPrice(basePrice, count);
|
||||
count++;
|
||||
} else {
|
||||
std::cout << BOLDRED << "You don't have enough transistors to buy a " << buildingName << "!\n";
|
||||
return;
|
||||
}
|
||||
|
||||
std::cout << BOLDBLUE << "bought a " << buildingName << " for " << TransitorsString(expandPrice(basePrice, count - 1)) << "!\n";
|
||||
}
|
||||
}
|
||||
|
||||
void info(std::vector<str>& args) {
|
||||
if(args.size() < 1) {
|
||||
std::cout << BOLDRED << "You must specify somthing to be informed about!\n";
|
||||
return;
|
||||
} else if(args.size() == 1) {
|
||||
if(args[0] == "transistors" || args[0] == "transistor") {
|
||||
std::cout << BOLDWHITE << "TRANSISTORS\n";
|
||||
std::cout << BOLDCYAN << "Description:\n";
|
||||
std::cout << RESET << "Transistors are the most common semiconductor, they\n";
|
||||
std::cout << "are switched by electricity, because of this they are used to make\n";
|
||||
std::cout << "most computer parts, they are also the main currency of the game!\n";
|
||||
std::cout << BOLDCYAN << "Uses:\n";
|
||||
std::cout << RESET << "Transistors, being the main currency, are used to buy\n";
|
||||
std::cout << "most things in-game!\n\n";
|
||||
std::cout << BOLDWHITE << "\"Moorgans law: the ammount of transistors in existance will double every hour\"\n";
|
||||
}
|
||||
} else if(args.size() > 1) {
|
||||
if(args[0] == "building") {
|
||||
args[1] = tolower(args[1]);
|
||||
if(args[1] == "i860" || args[1] == "startup" || args[1] == "oaktree") {
|
||||
std::cout << "coming soon!\n";
|
||||
return;
|
||||
}
|
||||
|
||||
if(args[1] == "cursor") {
|
||||
std::cout << BOLDWHITE << "CURSOR\n";
|
||||
std::cout << BOLDCYAN << "Description:\n";
|
||||
std::cout << RESET << "Autoclicks once every 10 seconds\n";
|
||||
std::cout << BOLDCYAN << "Effect:\n";
|
||||
std::cout << RESET << "Makes " << TransitorsString(cursorYeild) << " every ten seconds\n\n";
|
||||
std::cout << BOLDWHITE << "\"A nice cusor for your nice mouse\"\n";
|
||||
} else if(args[1] == "moss") {}
|
||||
|
||||
} else if(args[0] == "upgrade") {
|
||||
str Uname = "";
|
||||
|
||||
for(size_t i = 1; i < args.size(); i++) {
|
||||
Uname += args[i];
|
||||
if(i != args.size() - 1) Uname += " ";
|
||||
}
|
||||
|
||||
if(upgradeIndex.find(tolower(Uname)) == upgradeIndex.end()) {
|
||||
std::cout << BOLDRED << "Unknown upgrade!\n";
|
||||
return;
|
||||
}
|
||||
|
||||
Upgrade& upgrade = save.upgrades[getUpgradeByName(Uname)];
|
||||
|
||||
if(!upgrade.unlocked) {
|
||||
std::cout << BOLDRED << "Unkown upgrade!\n";
|
||||
return;
|
||||
}
|
||||
|
||||
std::cout << BOLDWHITE << "UPGRADE: " << upgrade.name << '\n';
|
||||
std::cout << BOLDCYAN << "Description:\n";
|
||||
std::cout << RESET << upgrade.description << '\n';
|
||||
std::cout << BOLDCYAN << "Effect:\n";
|
||||
std::cout << RESET << upgrade.effect << "\n\n";
|
||||
std::cout << BOLDWHITE << '"' << upgrade.flavortext << "\"\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void help(std::vector<str>& args) {
|
||||
if(args.size() < 1) {
|
||||
std::cout << BOLDBLUE << "Commands:\n";
|
||||
@ -476,6 +826,27 @@ void help(std::vector<str>& args) {
|
||||
std::cout << RESET << "Shows help for commands, if none is specified then gives help on all commands\n";
|
||||
std::cout << BOLDCYAN << "\nUsage:\n";
|
||||
std::cout << RESET << "help [command]\n";
|
||||
} else if(args[0] == "info") {
|
||||
std::cout << BOLDWHITE << "INFO\n";
|
||||
std::cout << RESET << "Shows qualatative information about things in the game\n";
|
||||
std::cout << BOLDCYAN << "\nUsage:\n";
|
||||
std::cout << RESET << "info [thing]\n";
|
||||
std::cout << BOLDCYAN << "\nThings:\n";
|
||||
std::cout << RESET << "Inummerable\n";
|
||||
std::cout << BOLDCYAN << "Subcommands:\n";
|
||||
std::cout << BOLDBLUE << "buildings" << RESET << " - Shows info about selected building\n";
|
||||
std::cout << BOLDBLUE << "upgrades" << RESET << " - Shows info about selected upgrade\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void list(std::vector<str>& args) {
|
||||
args.swap(args);
|
||||
|
||||
for(Upgrade& upgrade : save.upgrades) {
|
||||
if(upgrade.unlocked) {
|
||||
std::cout << BOLDBLUE << upgrade.name << RESET << " - " << upgrade.description << "\n";
|
||||
std::cout << "it will cost " << TransitorsString(upgrade.cost) << "\n\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -498,6 +869,36 @@ int main() {
|
||||
CMD::addcommand("buy", buy);
|
||||
CMD::addcommand("clear", clear);
|
||||
CMD::addcommand("help", help);
|
||||
CMD::addcommand("info", info);
|
||||
CMD::addcommand("list", list);
|
||||
|
||||
createUpgrade("integrated mouse", "the mouse now integrates semiconductor technology into it's design", "doubles mouse and cursor output.", "Now with semiconductor technology!", 100, cursorUpgrades);
|
||||
createUpgrade("faster fingers", "makes fingers faster", "doubles mouse and cursor output.", "Buy our finger speed pills today, double finger speed garauteed!", 500, cursorUpgrades);
|
||||
createUpgrade("chippy", "an assistant to improve your clicking methods.", "doubles mouse and cursor output.", "do you want to click a button? how about writing a letter instead.", 10'000, cursorUpgrades);
|
||||
|
||||
addTrigger({canUnLockIntegratedMouse, unLockIntegratedMouse});
|
||||
addTrigger({canUnLockFastFing, unLockFastFing});
|
||||
addTrigger({canUnLockChippy, unLockChippy});
|
||||
|
||||
createUpgrade("mossy mossy", "Boosts moss production... somehow.", "doubles moss output.", "Mossy Mossy", 1'000, mossUpgrades);
|
||||
createUpgrade("moss walls", "Add moss walls to the office space", "doubles moss output.", "Add moss walls to the halls so the moss has more space to grow.", 5'000, mossUpgrades);
|
||||
|
||||
addTrigger({canUnLockMossyMossy, unLockMossyMossy});
|
||||
addTrigger({canUnLockMossWalls, unLockMossWalls});
|
||||
|
||||
createUpgrade("cheap lithography machines", "makes small FABs better!", "doubles small FAB output", "Cheaper lithography machines make small FABs more cost effective.", 10'000, smallFABUpgrades);
|
||||
createUpgrade("denser chips", "more transistors fit on the same chip!", "doubles small FAB output.", "All new chipmaking process doubles chip density and performance!", 50'000, smallFABUpgrades);
|
||||
|
||||
addTrigger({canUnLockCheapMachines, unLockCheapMachines});
|
||||
addTrigger({canUnLockDenseChips, unLockDenseChips});
|
||||
|
||||
createUpgrade("mossier tech", "includes moss in microchips.", "doubles small & meduim FAB output", "Whitness the pure power of all new MOSS transistors", 110'000, mediumFABUpgrades);
|
||||
|
||||
addTrigger({canUnLockMossyTech, unLockMossyTech});
|
||||
|
||||
createUpgrade("endgame", "the game is complete...\n\nfor now", "doubles all FABs output", "huh I thought there'd be more", 200'000, largeFABUpgrades);
|
||||
|
||||
addTrigger({canUnLockEndgame, unLockEndgame});
|
||||
|
||||
addTrigger({isCursorUnLocked, unlockCursor});
|
||||
addTrigger({isMossUnLocked, unlockMoss});
|
||||
|
Loading…
x
Reference in New Issue
Block a user