/* The Dragon Ejaculation Calculator Copyright 2018 Omo Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *************** Dragon Size ratio: (All numbers are ratio multipliers of height, in meters) • Height (ground to top of shoulder) = 1 • Body: * Length = 2.23 * Width = 0.8 * Depth (spine to belly) = 0.382 * Leg Length (belly to ground) = 0.618 • Tail = 1.6 • Neck: * Length = 0.8 * Width = 0.15 – 0.22 * Throat Radius(max) = 0.11 – 0.18 * Volume = π * (r1² + r2² /2) * h * 1000 = 41.95 (11 gallons) - at 2m = 168.76 Liters (44.31 gallons) - at 20m = 167,761 Liters (44,317.78 gallons) • Head: * Length = 0.4 * Width = 0.32 * Height = 0.225 • Stomach Volume: * Width = 0.65 * Height = 0.35 * Length = 1.25 * Fluid Volume = 284.375 Liters (75.12 gallons) - at 2m = 2275 Liters (601 gallons) - at 20m = 2275000 Liters (601000 Gallons) • wingspan: * Wing (from shoulder to wing tip) = 2.415 * Total = (0.9 * body width) + Wing * 2 = 5.55 - at 2m = 11.1 - at 20m = 111 • Bladder volume: * Length = 0.1 * Width = 0.2 * Height = 0.3 * Fluid Volume = width * height * length * 1000 = 3 Liters (0.8 gallons) - at 2m = 48 (12.68 gallons) - at 20m = 48,000 Liters (12,680 gallons) • Cloaca: * Entrance diameter (max) = 0.15 * Width = 0.4 * Height = 0.6 * Length = 1.1 * Fluid Volume = 264 Liters (70 gallons) - at 2m = 2,112 Liters (558 gallons) - at 20m = 2,112,000 Liters (557,931 gallons) • Everted Cloaca (for oviposition or prolapse): * Length = 0.8 * Inner Diameter = 0.12 * Outer Diameter = 0.13 – 0.3 • Penis: * Length(max) = 0.3 * Width = 0.01 – 0.1 * Head = 0.02 – 0.04 * Urethra Diameter = 0.008 * Seminal Data: - Semen Volume = 857 ml (0.095³, 0.1885 gallons) • at 2m = 6,859 ml (0.19³, 1.5 gallons) • at 20m = 6,859,000 ml (1.19³, 1,508.7 gallons) - Sperm Count (per ml) = 30,000,000 - Semen Recharge Time = 4 days - Ejaculation volume = 0.3 (percentage of total) - Reduction Per Ejaculation = 0.25 - Delay Time = 1.5 seconds * (1 + reduction) after each ejaculation. - Minimum ejaculation value = 10% of flow rate - Ejaculations Per Orgasm = 6 (final calculation) - Total Orgasm Duration = 18.15 seconds - Refractory Period = 300 minutes - Sperm Count (per ml) = 30,000,000 - Temperature: 31C + (15.5 * ratio) = 46.5C (115.7F) • at 2m = 62C (143.6F) • at 20m = 341C (645.8F) • Penile flow metrics: - kPa = 180 (26 psi) - rate = 122.5 ml/second (0.032 gallons/second) * at 2m ratio: - kPa = 192 - Rate = 1.0225 Liters/second (0.27 gallons/second) * at 20m ratio: - kPa = 430 (62 psi) - Rate = 410 liters/second (108 gallons/second) • Cloaca Flow metrics: - kPa = 32 (4.64 psi) - rate = 63.6 liters/second (16.8 gallons/second) * at 2m ratio: - kPa = 42 - rate = 350.625 Liters/second (92.625 Gallons/second) * at 20m ratio: - kPa = 230 (33.35 psi) - rate = 189,392 liters/second (50032 Gallons/second) ****************/ #include #include class ejaculation { double semen_volume = 0; double ejaculate_percent = 0; double reduction = 0; double rate = 0; double cutoff = 0; double delay_time = 0; std::string data_type; bool quit = false; public: ejaculation() { set_default(); } ejaculation(double volume, double ejaculate, double reduct, double rate_, double cutoff_, double delay) : semen_volume(volume), ejaculate_percent(ejaculate), reduction(reduct), rate(rate_), cutoff(cutoff_), delay_time(delay) { data_type = "custom"; } //example usage of a large dragon. void set_kuth(); //example usage of a small dragon. void set_it(); //default using base dragon size ratios. void set_default(); //formats and prints the stored data. void print_data(); //function to edit and replace current data. void new_data(); //input loop. void input(); //calculation loop. void calculate(); //runtime loop. void run(); }; void ejaculation::set_kuth() { semen_volume = 8200000; ejaculate_percent = 0.15; reduction = 0.2; rate = 410000; cutoff = rate * 0.01; delay_time = 5; data_type = "Kuthalti"; std::cout << "Kuthalti Loaded" << std::endl; } void ejaculation::set_it() { semen_volume = 6859; ejaculate_percent = 0.4; reduction = 0.5; rate = 1022.5; cutoff = rate * 0.05; delay_time = 3; data_type = "Itlahtuk"; std::cout << "Itlahtuk Loaded" << std::endl; } void ejaculation::set_default() { semen_volume = 857; ejaculate_percent = 0.3; reduction = 0.25; rate = 122.5; cutoff = rate * 0.1; delay_time = 1.5; data_type = "Default"; std::cout << "Default Loaded" << std::endl; } void ejaculation::print_data() { std::cout << "Currently loaded dataset: " << data_type << std::endl << "Semen Volume: " << semen_volume << "ml" << std::endl << "Ejaculation Percentage: " << int(ejaculate_percent * 100) << "%" << std::endl << "Reduction Percentage: " << int(reduction * 100) << "%" << std::endl << "Fluid Ejaculation Volume per second: " << rate << "ml/s" << std::endl << "Minimum Fluid Volume per Ejaculation: " << cutoff << "ml" << std::endl << "Base Pause before next seminal eruption: " << delay_time << " seconds" << std::endl; } void ejaculation::new_data() { double in; std::cout << "to use current, input '0'" << std::endl << "Semen Total (ml)(current = " << semen_volume<< "): "; std::cin >> in; if (in != 0) { semen_volume = in; } std::cout << " Okay: " << semen_volume << "ml" << std::endl << "Ejaculate Percentage (current = " << ejaculate_percent << "): "; std::cin >> in; if (in != 0) { ejaculate_percent = in; } std::cout << " Okay: " << ejaculate_percent * 100 << "%" << std::endl << "Reduction Percent (current = " << reduction << "): "; std::cin >> in; if (in != 0) { reduction = in; } std::cout << " Okay: " << reduction * 100 << "%" << std::endl << "Flow Rate (ml/s)(current = " << rate <<"): "; std::cin >> in; if (in != 0) { rate = in; } std::cout << " Okay: " << rate << "ml/s" << std::endl << "Minimum ejaculate cutoff (ml)(current = " << cutoff << "): "; std::cin >> in; if (in != 0) { cutoff = in; } std::cout << " Okay: " << cutoff << "ml" << std::endl << "Pause duration (seconds)(current = "<< delay_time <<"): "; std::cin >> in; if (in != 0) { delay_time = in; } data_type = "Custom"; std::cout << " Okay: " << delay_time << " seconds" << std::endl; std::cout << "New data finished loading." << std::endl; } void ejaculation::input() { while (true) { std::cout << "Options: " << "\n\t K to load Kuthalti" << "\t / \t I to load Itlahtuk" << "\t / \t D to reload default" << "\n\t N to input new data or adjust current data " << "\n\t R to return to previous menu." << std::endl; char in; std::cin >> in; switch (in) { case 'N': case 'n': new_data(); break; case 'K': case 'k': set_kuth(); break; case 'I': case 'i': set_it(); break; case 'D': case 'd': set_default(); break; case 'C': case 'c': calculate(); break; case 'p': case 'P': print_data(); break; case 'q': case 'Q': quit = true; case 'r': case 'R': return; default: break; } } } void ejaculation::calculate() { double current_volume = semen_volume;; double time = 0; double ejaculate = semen_volume * ejaculate_percent; int count = 0; double cur_time = 0; while (current_volume > ejaculate) { if (ejaculate < cutoff) { break; } cur_time = (ejaculate / rate) + (delay_time * (1 + reduction)); time += cur_time; current_volume = current_volume- ejaculate; std::cout << "Ejaculated: " << std::fixed << ejaculate << "ml over: " << cur_time << " seconds" << std::endl; ++count; ejaculate = ejaculate * (1 - reduction); } std::cout << "Count: " << count << std::endl; std::cout << "Total Ejaculated: " << std::fixed << semen_volume - current_volume << "ml, Remaining: " << current_volume << "ml" << std::endl; std::cout << "Total Time: " << time << " seconds" << std::endl; } void ejaculation::run() { std::cout << "Welcome!" << std::endl; while (!quit) { std::cout << data_type << " Data Loaded" << std::endl; std::cout << "Options:\n\t Q to quit\n\t C to calculate current data\n\t I to input or select data\n\t P to display current data" << std::endl; char in; std::cin >> in; switch (in) { case 'Q': case 'q': quit = true; break; case 'i': case 'I': input(); break; case 'C': case 'c': calculate(); break; case 'p': case 'P': print_data(); break; default: break; } } } int main() { ejaculation ejac; ejac.run(); return 0; }