// `J` Job Clinic - Surgery bool cJobManager::WorkBreastReduction(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { #pragma region // Job setup // stringstream ss; string girlName = girl->m_Realname; ss << girlName; // if she was not in surgery last turn, reset working days to 0 before proceding if (girl->m_YesterDayJob != JOB_BREASTREDUCTION) { girl->m_WorkingDay = girl->m_PrevWorkingDay = 0; } girl->m_DayJob = girl->m_NightJob = JOB_BREASTREDUCTION; // it is a full time job if (girl->has_trait( "Flat Chest")) { ss << " already has a Flat Chest so she was sent to the waiting room."; if (Day0Night1 == SHIFT_DAY) girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_WARNING); girl->m_PrevDayJob = girl->m_PrevNightJob = girl->m_YesterDayJob = girl->m_YesterNightJob = girl->m_DayJob = girl->m_NightJob = JOB_CLINICREST; girl->m_WorkingDay = girl->m_PrevWorkingDay = 0; return false; // not refusing } bool hasDoctor = g_Clinic.GetNumGirlsOnJob(0, JOB_DOCTOR, Day0Night1) > 0; int numnurse = g_Clinic.GetNumGirlsOnJob(0, JOB_NURSE, Day0Night1); if (!hasDoctor) { ss << " does nothing. You don't have any Doctors working. (require 1) "; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_WARNING); return false; // not refusing } ss << " is in the Clinic to get her breasts reduced.\n\n"; int msgtype = Day0Night1; g_Girls.UnequipCombat(girl); // not for patient #pragma endregion #pragma region // Count the Days // if (Day0Night1 == SHIFT_DAY) // the Doctor works on her durring the day { girl->m_WorkingDay++; } else // and if there are nurses on duty, they take care of her at night { girl->m_WorkingDay = girl->m_PrevWorkingDay = 0; ss << "The surgery is a success.\n"; msgtype = EVENT_GOODNEWS; ss << g_Girls.AdjustTraitGroupBreastSize(girl, -1, false) << "\n\n"; if (numnurse > 2) { ss << "The Nurses kept her healthy and happy during her recovery.\n"; g_Girls.UpdateStat(girl, STAT_HEALTH, g_Dice.bell(0, 20)); g_Girls.UpdateStat(girl, STAT_HAPPINESS, g_Dice.bell(0, 10)); g_Girls.UpdateStat(girl, STAT_SPIRIT, g_Dice.bell(0, 10)); g_Girls.UpdateStat(girl, STAT_MANA, g_Dice.bell(0, 20)); g_Girls.UpdateStat(girl, STAT_BEAUTY, g_Dice.bell(0, 2)); g_Girls.UpdateStat(girl, STAT_CHARISMA, g_Dice.bell(0, 2)); } else if (numnurse > 0) { ss << "The Nurse" << (numnurse > 1 ? "s" : "") << " helped her during her recovery.\n"; g_Girls.UpdateStat(girl, STAT_HEALTH, g_Dice.bell(0, 10)); g_Girls.UpdateStat(girl, STAT_HAPPINESS, g_Dice.bell(0, 5)); g_Girls.UpdateStat(girl, STAT_SPIRIT, g_Dice.bell(0, 5)); g_Girls.UpdateStat(girl, STAT_MANA, g_Dice.bell(0, 10)); g_Girls.UpdateStat(girl, STAT_BEAUTY, g_Dice % 2); g_Girls.UpdateStat(girl, STAT_CHARISMA, g_Dice % 2); } else { ss << "She is sad and has lost some health during the operation.\n"; g_Girls.UpdateStat(girl, STAT_HEALTH, g_Dice.bell(-20, 2)); g_Girls.UpdateStat(girl, STAT_HAPPINESS, g_Dice.bell(-10, 1)); g_Girls.UpdateStat(girl, STAT_SPIRIT, g_Dice.bell(-5, 1)); g_Girls.UpdateStat(girl, STAT_MANA, g_Dice.bell(-20, 3)); g_Girls.UpdateStat(girl, STAT_BEAUTY, g_Dice.bell(-1, 1)); g_Girls.UpdateStat(girl, STAT_CHARISMA, g_Dice.bell(-1, 1)); } if (girl->has_trait( "Flat Chest")) { ss << girlName << "'s breasts are as small as they can get so she was sent to the waiting room."; girl->m_PrevDayJob = girl->m_PrevNightJob = girl->m_YesterDayJob = girl->m_YesterNightJob = girl->m_DayJob = girl->m_NightJob = JOB_CLINICREST; } } #pragma endregion #pragma region // Finish the shift // girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, msgtype); // Improve girl int libido = 1; if (girl->has_trait( "Lesbian")) libido += numnurse; if (girl->has_trait( "M*******t")) libido += 1; if (girl->has_trait( "Nymphomaniac")) libido += 2; g_Girls.UpdateStatTemp(girl, STAT_LIBIDO, libido); if (g_Dice % 10 == 0) g_Girls.UpdateSkill(girl, SKILL_MEDICINE, 1); // `J` she watched what the doctors and nurses were doing #pragma endregion return false; }
// `J` Job Clinic - Surgery bool cJobManager::WorkGetFertility(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { #pragma region // Job setup // stringstream ss; string girlName = girl->m_Realname; ss << girlName; // if she was not in surgery last turn, reset working days to 0 before proceding if (girl->m_YesterDayJob != JOB_FERTILITY) { girl->m_WorkingDay = girl->m_PrevWorkingDay = 0; } girl->m_DayJob = girl->m_NightJob = JOB_FERTILITY; // it is a full time job if (girl->is_pregnant() || g_Girls.HasTrait(girl, "Broodmother")) { if (g_Girls.HasTrait(girl, "Broodmother")) ss << " is already as Fertile as she can be so she was sent to the waiting room."; else if (girl->is_pregnant()) ss << " is pregant.\nShe must either have her baby or get an abortion before She can get recieve any more fertility treatments."; if (Day0Night1 == SHIFT_DAY) girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_WARNING); girl->m_PrevDayJob = girl->m_PrevNightJob = girl->m_YesterDayJob = girl->m_YesterNightJob = girl->m_DayJob = girl->m_NightJob = JOB_CLINICREST; girl->m_WorkingDay = girl->m_PrevWorkingDay = 0; return false; // not refusing } bool hasDoctor = g_Clinic.GetNumGirlsOnJob(0, JOB_DOCTOR, Day0Night1) > 0; int numnurse = g_Clinic.GetNumGirlsOnJob(0, JOB_NURSE, Day0Night1); if (!hasDoctor) { ss << " does nothing. You don't have any Doctors working. (require 1) "; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_WARNING); return false; // not refusing } ss << " is in the Clinic to get fertility treatment.\n\n"; g_Girls.UnequipCombat(girl); // not for patient int msgtype = Day0Night1; #pragma endregion #pragma region // Count the Days // if (Day0Night1 == SHIFT_DAY) // the Doctor works on her durring the day { girl->m_WorkingDay++; } else // and if there are nurses on duty, they take care of her at night { if (g_Clinic.GetNumGirlsOnJob(0, JOB_NURSE, 1) > 0) { girl->m_WorkingDay++; g_Girls.UpdateStat(girl, STAT_HEALTH, 10); g_Girls.UpdateStat(girl, STAT_HAPPINESS, 10); g_Girls.UpdateStat(girl, STAT_MANA, 10); } } #pragma endregion #pragma region // In Progress // if (girl->m_WorkingDay < 5 || Day0Night1 == SHIFT_DAY) { int wdays = (5 - girl->m_WorkingDay); if (g_Clinic.GetNumGirlsOnJob(0, JOB_NURSE, 1) > 0) { if (wdays >= 3) { wdays = 3; } else if (wdays > 1) { wdays = 2; } else { wdays = 1; } } ss << "The operation is in progress (" << wdays << " day remaining).\n"; if (g_Clinic.GetNumGirlsOnJob(0, JOB_NURSE, 1) > 1) { ss << "The Nurses are taking care of her at night."; } else if (g_Clinic.GetNumGirlsOnJob(0, JOB_NURSE, 1) > 0){ ss << "The Nurse is taking care of her at night."; } else { ss << "Having a Nurse on duty will speed up her recovery."; } } #pragma endregion #pragma region // Surgery Finished // else { ss << "The surgery is a success.\n"; msgtype = EVENT_GOODNEWS; girl->m_WorkingDay = girl->m_PrevWorkingDay = 0; if (numnurse > 2) { ss << "The Nurses kept her healthy and happy during her recovery.\n"; g_Girls.UpdateStat(girl, STAT_HEALTH, g_Dice.bell(0, 20)); g_Girls.UpdateStat(girl, STAT_HAPPINESS, g_Dice.bell(0, 10)); g_Girls.UpdateStat(girl, STAT_SPIRIT, g_Dice.bell(0, 10)); g_Girls.UpdateStat(girl, STAT_MANA, g_Dice.bell(0, 20)); g_Girls.UpdateStat(girl, STAT_BEAUTY, g_Dice.bell(0, 2)); g_Girls.UpdateStat(girl, STAT_CHARISMA, g_Dice.bell(0, 2)); } else if (numnurse > 0) { ss << "The Nurse" << (numnurse > 1 ? "s" : "") << " helped her during her recovery.\n"; g_Girls.UpdateStat(girl, STAT_HEALTH, g_Dice.bell(0, 10)); g_Girls.UpdateStat(girl, STAT_HAPPINESS, g_Dice.bell(0, 5)); g_Girls.UpdateStat(girl, STAT_SPIRIT, g_Dice.bell(0, 5)); g_Girls.UpdateStat(girl, STAT_MANA, g_Dice.bell(0, 10)); g_Girls.UpdateStat(girl, STAT_BEAUTY, g_Dice % 2); g_Girls.UpdateStat(girl, STAT_CHARISMA, g_Dice % 2); } else { ss << "She is sad and has lost some health during the operation.\n"; g_Girls.UpdateStat(girl, STAT_HEALTH, g_Dice.bell(-20, 2)); g_Girls.UpdateStat(girl, STAT_HAPPINESS, g_Dice.bell(-10, 1)); g_Girls.UpdateStat(girl, STAT_SPIRIT, g_Dice.bell(-5, 1)); g_Girls.UpdateStat(girl, STAT_MANA, g_Dice.bell(-20, 3)); g_Girls.UpdateStat(girl, STAT_BEAUTY, g_Dice.bell(-1, 1)); g_Girls.UpdateStat(girl, STAT_CHARISMA, g_Dice.bell(-1, 1)); } ss << g_Girls.AdjustTraitGroupFertility(girl, 1, false); if (g_Girls.HasTrait(girl, "Broodmother")) { ss << "\n\nShe has been released from the Clinic."; girl->m_PrevDayJob = girl->m_PrevNightJob = girl->m_YesterDayJob = girl->m_YesterNightJob = girl->m_DayJob = girl->m_NightJob = JOB_CLINICREST; } } #pragma endregion #pragma region // Finish the shift // girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, msgtype); // Improve girl int libido = 1; if (g_Girls.HasTrait(girl, "Lesbian")) libido += numnurse; if (g_Girls.HasTrait(girl, "M*******t")) libido += 1; if (g_Girls.HasTrait(girl, "Nymphomaniac")) libido += 2; g_Girls.UpdateStatTemp(girl, STAT_LIBIDO, libido); if (g_Dice % 10 == 0) g_Girls.UpdateSkill(girl, SKILL_MEDICINE, 1); // `J` she watched what the doctors and nurses were doing #pragma endregion return false; }
// `J` Job Farm - Laborers - Combat_Job bool cJobManager::WorkBeastCapture(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { #pragma region // Job setup // int actiontype = ACTION_COMBAT; stringstream ss; string girlName = girl->m_Realname; ss << girlName; int roll_a = g_Dice.d100(), roll_b = g_Dice.d100(), roll_c = g_Dice.d100(); if (g_Girls.DisobeyCheck(girl, actiontype, brothel)) // they refuse to work { ss << " refused to capture beasts during the " << (Day0Night1 ? "night" : "day") << " shift."; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); return true; } ss << " equipped herself and went out to hunt for exotic beasts and animals.\n\n"; g_Girls.EquipCombat(girl); // ready armor and weapons! int wages = 40, tips = 0; int enjoy = 0; int imagetype = IMGTYPE_COMBAT; int msgtype = Day0Night1; #pragma endregion #pragma region // The Fight to get the Beasts // int tired = 0; int gainmax = (int)(JP_BeastCapture(girl, false) / 30) + 1; int gain = g_Dice % gainmax + 1; sGirl* tempgirl = g_Girls.CreateRandomGirl(18, false, false, false, true, false); Uint8 fight_outcome = 0; if (tempgirl) // `J` reworked incase there are no Non-Human Random Girls { fight_outcome = g_Girls.girl_fights_girl(girl, tempgirl); } else { g_LogFile.write("Error: You have no Non-Human Random Girls for your girls to fight\n"); g_LogFile.write("Error: You need a Non-Human Random Girl to allow WorkBeastCapture randomness"); fight_outcome = 7; } if (tempgirl) delete tempgirl; tempgirl = 0; // Cleanup if (fight_outcome == 7) { ss << "She came back with just one animal today.\n\n"; ss << "(Error: You need a Non-Human Random Girl to allow WorkBeastCapture randomness)"; gain = 1; msgtype = EVENT_WARNING; tired = 15; } else if (fight_outcome == 1) // she won { if (gain <= 2) gain = 2; if (gain >= gainmax) gain = gainmax; ss << "She had fun hunting today and came back with " << gain << " new beasts.";; imagetype = IMGTYPE_COMBAT; tired = g_Dice % (3 * gain); enjoy += g_Dice % 4 + 2; } else // she lost or it was a draw { gain = g_Dice.bell(-gainmax / 3, gainmax / 2); ss << " The animals were difficult to track today. " << girlName << " eventually returned worn out and frustrated, "; if (gain <= 0) { gain = 0; ss << "empty handed."; } else { ss << "dragging "; if (gain == 1) ss << "one"; if (gain > 1) ss << gain; ss << " captured beast" << (gain > 1 ? "s" : "") << " behind her."; } imagetype = IMGTYPE_COMBAT; enjoy -= g_Dice % 3 + 1; tired = g_Dice % (10 * gain) + 20; } ss << "\n\n"; #pragma endregion #pragma region // A Little Randomness // //SIN: A little randomness if (((g_Girls.GetSkill(girl, SKILL_ANIMALHANDLING) + g_Girls.GetStat(girl, STAT_CHARISMA)) > 125) && g_Dice.percent(30)) { ss << girlName << " has a way with animals, a" << (gain > 1 ? "nother" : "") << " beast freely follows her back.\n"; gain++; } //SIN: most the rest rely on more than one cap so might as well skip the lot if less than this... if (gain > 1) { // `J` added a switch with a use next if check fails and changed percents to (gain * 5) switch (g_Dice % 10) { case 0: if (girl->has_trait( "Twisted") && girl->has_trait( "Nymphomaniac") && (g_Girls.GetStat(girl, STAT_LIBIDO) >= 80)) { ss << "Being a horny, twisted nymphomaniac, " << girlName << " had some fun with the beasts before she handed them over.\n"; g_Girls.UpdateSkill(girl, SKILL_BEASTIALITY, g_Dice % gain); g_Girls.UpdateStat(girl, STAT_LIBIDO, -(g_Dice % gain)); tired += gain; break; } case 1: if (girl->has_trait( "Psychic") && (g_Girls.GetStat(girl, STAT_LIBIDO) >= 90) && g_Dice.percent(gain * 5)) { ss << girlName << "'s Psychic sensitivity caused her mind be overwhelmed by the creatures' lusts"; if (g_Girls.CheckVirginity(girl)) { ss << " but, things were moving too fast and she regained control before they could take her virginity.\n"; g_Girls.UpdateSkill(girl, SKILL_BEASTIALITY, 1); g_Girls.UpdateStat(girl, STAT_LIBIDO, 2); // no satisfaction! } else { ss << ". Many hours later she staggered in to present the creatures to you.\n"; g_Girls.UpdateSkill(girl, SKILL_BEASTIALITY, g_Dice % gain); g_Girls.UpdateStat(girl, STAT_LIBIDO, -2 * (g_Dice % gain)); g_Girls.UpdateStat(girl, STAT_TIREDNESS, gain); girl->calc_insemination(g_Girls.GetBeast(), 1); } tired += gain; break; } case 2: if (girl->has_trait( "Assassin") && g_Dice.percent(gain * 5)) { ss << " One of the captured creatures tried to escape on the way back. Trained assassin, " << girlName << ", instantly killed it as an example to the others.\n"; g_Girls.UpdateSkill(girl, SKILL_COMBAT, 1); gain--; break; } case 3: if (g_Girls.GetStat(girl, STAT_TIREDNESS) > 50 && g_Dice.percent(gain * 5)) { ss << girlName << " was so exhausted she couldn't concentrate. One of the creatures escaped.\n"; gain--; break; } default: break; } } #pragma endregion #pragma region // Collect Pets // // `J` Farm Bookmark - adding in items that can be gathered in the farm if (g_Dice.percent(5)) { string itemfound = ""; string itemfoundtext = ""; int chooseitem = g_Dice.d100(); if (chooseitem < 25) { itemfound = (g_Dice % 2) ? "Black Cat" : "Cat"; itemfoundtext = "a stray cat and brought it back with her."; } else if (chooseitem < 50) { itemfound = "Guard Dog"; itemfoundtext = "a tough looking stray dog and brought it back with her."; } else if (chooseitem < 60) { itemfound = "A Bunch of Baby Ducks"; itemfoundtext = "a bunch of baby ducks without a mother, so she gathered them up in her shirt and brought them home."; } else if (chooseitem < 65) { itemfound = "Death Bear"; itemfoundtext = "a large bear that seems to have had some training, so she brought it home."; } else if (chooseitem < 80) { itemfound = "Pet Spider"; itemfoundtext = "a strange looking spider so she collected it in a bottle and brought it back with her."; } else if (chooseitem < 95) { itemfound = (g_Dice % 4 == 1) ? "Fox Stole" : "Fur Stole"; itemfoundtext = "a dead animal that was not too badly damaged. She brought it home, skinned it, cleaned it up and made a lovely stole from it."; } else if (chooseitem < 96) { itemfound = "Echidna's Snake"; itemfoundtext = "a rather obedient and psychic snake. It wrapped itself around her crotch and let her take it home."; } else { itemfound = "Tiger Shark Tooth"; itemfoundtext = "a rather large shark tooth and brought it home."; } sInventoryItem* item = g_InvManager.GetItem(itemfound); if (item) { ss << girlName << " found " << itemfoundtext; g_Brothels.AddItemToInventory(item); } } #pragma endregion #pragma region // Money // // slave girls not being paid for a job that normally you would pay directly for do less work if ((girl->is_slave() && !cfg.initial.slave_pay_outofpocket())) { wages = 0; } else { wages += gain * 10; // `J` Pay her based on how much she brings back } #pragma endregion #pragma region // Finish the shift // g_Brothels.add_to_beasts(gain); // Money girl->m_Tips = max(0, tips); girl->m_Pay = max(0, wages); // Improve girl // Base Improvement and trait modifiers int xp = 10, libido = 1, skill = 3; /* */if (girl->has_trait("Quick Learner")) { skill += 1; xp += 3; } else if (girl->has_trait("Slow Learner")) { skill -= 1; xp -= 3; } /* */if (girl->has_trait("Nymphomaniac")) { libido += 2; } // EXP and Libido int I_xp = (g_Dice % xp) + 1; g_Girls.UpdateStat(girl, STAT_EXP, I_xp); int I_libido = (g_Dice % libido) + 1; g_Girls.UpdateStatTemp(girl, STAT_LIBIDO, I_libido); if (tired > 0) girl->tiredness(tired); // primary improvement (+2 for single or +1 for multiple) int I_combat = (g_Dice % skill) + 1; g_Girls.UpdateSkill(girl, SKILL_COMBAT, I_combat); int I_animalh = (g_Dice % skill) + 1; g_Girls.UpdateSkill(girl, SKILL_ANIMALHANDLING, I_animalh); int I_strength = (g_Dice % skill) + 1; g_Girls.UpdateStat(girl, STAT_STRENGTH, I_strength); // secondary improvement (-1 for one then -2 for others) int I_constitution = max(0, (g_Dice % skill) - 1); g_Girls.UpdateStat(girl, STAT_CONSTITUTION, I_constitution); int I_beastiality = max(0, (g_Dice % skill) - 2); g_Girls.UpdateSkill(girl, SKILL_BEASTIALITY, I_beastiality); int I_agility = max(0, (g_Dice % skill) - 2); g_Girls.UpdateStat(girl, STAT_AGILITY, I_agility); int I_magic = max(0, (g_Dice % skill) - 2); g_Girls.UpdateSkill(girl, SKILL_MAGIC, I_magic); // Update Enjoyment g_Girls.UpdateEnjoyment(girl, actiontype, enjoy); // Gain Traits g_Girls.PossiblyGainNewTrait(girl, "Tough", 30, actiontype, "She has become pretty Tough from all of the fights she's been in.", Day0Night1); g_Girls.PossiblyGainNewTrait(girl, "Adventurer", 40, actiontype, "She has been in enough tough spots to consider herself Adventurer.", Day0Night1); g_Girls.PossiblyGainNewTrait(girl, "Aggressive", 60, actiontype, "She is getting rather Aggressive from her enjoyment of combat.", Day0Night1); if (g_Dice.percent(25) && g_Girls.GetStat(girl, STAT_STRENGTH) >= 60 && g_Girls.GetSkill(girl, SKILL_COMBAT) > g_Girls.GetSkill(girl, SKILL_MAGIC)) { g_Girls.PossiblyGainNewTrait(girl, "Strong", 60, ACTION_COMBAT, girlName + " has become pretty Strong from all of the fights she's been in.", Day0Night1); } //lose traits g_Girls.PossiblyLoseExistingTrait(girl, "Fragile", 15, actiontype, girl->m_Realname + " has had to heal from so many injuries you can't say she is fragile anymore.", Day0Night1); if (cfg.debug.log_show_numbers()) { ss << "\n\nNumbers:" << "\n Wages = " << (int)wages << "\n Tips = " << (int)tips << "\n Xp = " << I_xp << "\n Libido = " << I_libido << "\n combat = " << I_combat << "\n animalh = " << I_animalh << "\n strength = " << I_strength << "\n constitution = " << I_constitution << "\n beastiality = " << I_beastiality << "\n agility = " << I_agility << "\n magic = " << I_magic << "\n Tiredness = " << tired << "\n Enjoy " << girl->enjoy_jobs[actiontype] << " = " << enjoy ; } girl->m_Events.AddMessage(ss.str(), imagetype, msgtype); #pragma endregion return false; }