// `J` Job Clinic - Surgery bool cJobManager::WorkPhysicalSurgery(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { 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_PHYSICALSURGERY) { girl->m_WorkingDay = girl->m_PrevWorkingDay = 0; } bool hasDoctor = (g_Clinic.GetNumGirlsOnJob(brothel->m_id, JOB_DOCTOR, true) > 0 || g_Clinic.GetNumGirlsOnJob(brothel->m_id, JOB_DOCTOR, false) > 0); 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 general surgery.\n\n"; int msgtype = Day0Night1; g_Girls.UnequipCombat(girl); // not for patient 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_HAPPINESS, 10); g_Girls.UpdateStat(girl, STAT_MANA, 10); } } int numnurse = g_Clinic.GetNumGirlsOnJob(0, JOB_NURSE, Day0Night1); if (girl->m_WorkingDay >= 5) { ss << "The surgery is a success.\n"; msgtype = EVENT_GOODNEWS; if (!g_Girls.HasTrait(girl, "Sexy Air")) { girl->add_trait("Sexy Air", false); ss << "She gains Sexy Air trait.\n"; } else if (!g_Girls.HasTrait(girl, "Cute")) { girl->add_trait("Cute", false); ss << "She gains Cute trait.\n"; } if (numnurse > 1) { ss << "The Nurses kept her healthy and happy during her recovery.\n"; g_Girls.UpdateStat(girl, STAT_SPIRIT, 5); g_Girls.UpdateStat(girl, STAT_MANA, 10); g_Girls.UpdateStat(girl, STAT_BEAUTY, 15); g_Girls.UpdateStat(girl, STAT_CHARISMA, 15); } else if (numnurse > 0) { ss << "The Nurse helped her during her recovery.\n"; g_Girls.UpdateStat(girl, STAT_HAPPINESS, -5); g_Girls.UpdateStat(girl, STAT_HEALTH, -10); g_Girls.UpdateStat(girl, STAT_MANA, -10); g_Girls.UpdateStat(girl, STAT_BEAUTY, 12); g_Girls.UpdateStat(girl, STAT_CHARISMA, 12); } else { ss << "She is sad and has lost some health during the operation.\n"; g_Girls.UpdateStat(girl, STAT_SPIRIT, -5); g_Girls.UpdateStat(girl, STAT_HAPPINESS, -15); g_Girls.UpdateStat(girl, STAT_HEALTH, -20); g_Girls.UpdateStat(girl, STAT_MANA, -20); g_Girls.UpdateStat(girl, STAT_BEAUTY, 8); g_Girls.UpdateStat(girl, STAT_CHARISMA, 8); } if (g_Girls.HasTrait(girl, "Fragile")){ g_Girls.UpdateStat(girl, STAT_HEALTH, -5); } else if (g_Girls.HasTrait(girl, "Tough")){ g_Girls.UpdateStat(girl, STAT_HEALTH, 5); } if (g_Girls.HasTrait(girl, "Pessimist")){ g_Girls.UpdateStat(girl, STAT_HAPPINESS, -5); } else if (g_Girls.HasTrait(girl, "Optimist")){ g_Girls.UpdateStat(girl, STAT_HAPPINESS, 5); } girl->m_WorkingDay = girl->m_PrevWorkingDay = 0; girl->m_DayJob = girl->m_NightJob = JOB_CLINICREST; } else { 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."; } } 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 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 Clinic - Staff bool cJobManager::WorkMechanic(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { #pragma region // Job setup // int actiontype = ACTION_WORKMECHANIC; 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 work during the " << (Day0Night1 ? "night" : "day") << " shift."; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); return true; } ss << " worked as a mechanic.\n\n"; g_Girls.UnequipCombat(girl); // put that shit away, you'll scare off the customers! double wages = 25, tips = 0; int enjoy = 0, fame = 0; int imagetype = IMGTYPE_PROFILE; int msgtype = Day0Night1; #pragma endregion #pragma region // Job Performance // double jobperformance = JP_Mechanic(girl, false); if (jobperformance >= 245) { wages += 155; ss << "She must be the perfect mechanic patients go on and on about her and always come to see her when she works.\n\n"; } else if (jobperformance >= 185) { wages += 95; ss << "She's unbelievable at this and is always getting praised by the patients for her work.\n\n"; } else if (jobperformance >= 135) { wages += 55; ss << "She's good at this job and gets praised by the patients often.\n\n"; } else if (jobperformance >= 85) { wages += 15; ss << "She made a few mistakes but overall she is okay at this.\n\n"; } else if (jobperformance >= 65) { wages -= 5; ss << "She was nervous and made a few mistakes. She isn't that good at this.\n\n"; } else { wages -= 15; ss << "She was nervous and constantly making mistakes. She really isn't very good at this job.\n\n"; } //try and add randomness here if (g_Girls.GetStat(girl, STAT_BEAUTY) > 85 && g_Dice.percent(20)) { wages += 25; ss << " Stunned by her beauty a patient left her a great tip.\n\n"; } if (g_Girls.HasTrait(girl, "Construct") && g_Dice.percent(15)) { wages += 15; ss << " Seeing a kindred spirit, the mechanical patient left her a great tip.\n"; } if (g_Girls.HasTrait(girl, "Half-Construct") && g_Dice.percent(15)) { wages += 15; ss << " Seeing a kindred spirit, the mechanical patient left her a great tip.\n"; } if (g_Girls.HasTrait(girl, "Clumsy") && g_Dice.percent(15)) { wages -= 15; ss << " Her clumsy nature caused her to drop parts everywhere.\n"; } if (g_Girls.HasTrait(girl, "Pessimist") && g_Dice.percent(5)) { if (jobperformance < 125) { wages -= 10; ss << " Her pessimistic mood depressed the patients making them tip less.\n"; } else { wages += 10; ss << girlName << " was in a poor mood so the patients gave her a bigger tip to try and cheer her up.\n"; } } if (g_Girls.HasTrait(girl, "Optimist") && g_Dice.percent(5)) { if (jobperformance < 125) { wages -= 10; ss << girlName << " was in a cheerful mood but the patients thought she needed to work more on her services.\n"; } else { wages += 10; ss << " Her optimistic mood made patients cheer up increasing the amount they tip.\n"; } } #pragma endregion #pragma region // Enjoyment and Tiredness // //enjoyed the work or not if (roll_a <= 5) { ss << "\nSome of the patrons abused her during the shift."; enjoy -= 1; } else if (roll_a <= 25) { ss << "\nShe had a pleasant time working."; enjoy += 3; } else { ss << "\nOtherwise, the shift passed uneventfully."; enjoy += 1; } #pragma endregion #pragma region // Money // #pragma endregion #pragma region // Finish the shift // girl->m_Events.AddMessage(ss.str(), imagetype, Day0Night1); int roll_max = (g_Girls.GetStat(girl, STAT_INTELLIGENCE) + g_Girls.GetSkill(girl, SKILL_SERVICE)); roll_max /= 4; wages += 10 + g_Dice%roll_max; wages += 5 * g_Clinic.GetNumGirlsOnJob(0, JOB_GETREPAIRS, Day0Night1); // `J` pay her 5 for each patient you send to her // Money if (wages < 0) wages = 0; girl->m_Pay = (int)wages; if (tips < 0) tips = 0; girl->m_Tips = (int)tips; // Improve stats int xp = 10, libido = 1, skill = 2; if (g_Girls.HasTrait(girl, "Quick Learner")) { skill += 1; xp += 3; } else if (g_Girls.HasTrait(girl, "Slow Learner")) { skill -= 1; xp -= 3; } if (g_Girls.HasTrait(girl, "Nymphomaniac")) { libido += 2; } if (girl->fame() < 10 && jobperformance >= 70) { fame += 1; } if (girl->fame() < 20 && jobperformance >= 100) { fame += 1; } if (girl->fame() < 40 && jobperformance >= 145) { fame += 1; } if (girl->fame() < 50 && jobperformance >= 185) { fame += 1; } g_Girls.UpdateStat(girl, STAT_FAME, fame); g_Girls.UpdateStat(girl, STAT_EXP, xp); g_Girls.UpdateStat(girl, STAT_INTELLIGENCE, g_Dice%skill + 1); g_Girls.UpdateSkill(girl, SKILL_MEDICINE, g_Dice%skill); g_Girls.UpdateSkill(girl, SKILL_SERVICE, g_Dice%skill); g_Girls.UpdateStatTemp(girl, STAT_LIBIDO, libido); g_Girls.UpdateEnjoyment(girl, actiontype, enjoy); //gain traits g_Girls.PossiblyGainNewTrait(girl, "Charismatic", 60, actiontype, "Dealing with patients and talking with them about their problems has made " + girl->m_Realname + " more Charismatic.", Day0Night1); g_Girls.PossiblyGainNewTrait(girl, "Strong", 60, actiontype, "Handling heavy parts and working with heavy tools has made " + girl->m_Realname + " much Stronger.", Day0Night1); //lose traits g_Girls.PossiblyLoseExistingTrait(girl, "Nervous", 20, actiontype, girl->m_Realname + " seems to finally be getting over her shyness. She's not always so Nervous anymore.", Day0Night1); g_Girls.PossiblyLoseExistingTrait(girl, "Elegant", 40, actiontype, " Working with dirty, greasy equipment has damaged " + girl->m_Realname + "'s hair, skin and nails making her less Elegant.", Day0Night1); #pragma endregion return false; }
// `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::WorkRepairShop(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { int actiontype = ACTION_GENERAL; stringstream ss; string girlName = girl->m_Realname; ss << girlName; g_Girls.UnequipCombat(girl); // not for patients if (!g_Girls.HasTrait(girl, "Construct") && !g_Girls.HasTrait(girl, "Half-Construct")) { ss << girlName << " has no artificial parts so she was sent to the Healing center."; if (Day0Night1 == SHIFT_DAY) girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_WARNING); if (girl->m_DayJob == JOB_GETREPAIRS) girl->m_DayJob = JOB_GETHEALING; if (girl->m_NightJob == JOB_GETREPAIRS) girl->m_NightJob = JOB_GETHEALING; return false; // not refusing } int nummecs = g_Clinic.GetNumGirlsOnJob(0, JOB_MECHANIC, Day0Night1); int numnurse = g_Clinic.GetNumGirlsOnJob(0, JOB_NURSE, Day0Night1); // `J` base recovery copied freetime recovery int health = 10 + (girl->constitution() / 10); int tiredness = 10 + g_Dice % 21; // build up as positive then apply as negative int happy = 10 + g_Dice % 11; int mana = 5 + (girl->magic() / 5); int libido = (g_Girls.HasTrait(girl, "Nymphomaniac") ? 15 : 5); if (nummecs + numnurse < 1) { ss << "You don't have any Mechanics or Nurses on duty so " << girlName << " just rests in a hospital bed."; } else { ss << girlName << " does nothing while "; } if (nummecs > 0) { ss << "the Mechanic" << (nummecs > 1 ? "s" : ""); if (g_Girls.HasTrait(girl, "Half-Construct") && girl->m_DayJob == JOB_GETREPAIRS && girl->m_NightJob == JOB_GETREPAIRS) { // if fixed by Mechanic for both shifts. health += 20; // Total 40 healing per day, heals less because Mechanic does not fix living tissue. } else { health += 30; } } if (nummecs > 0 && numnurse > 0) { ss << " and"; } if (numnurse > 0) { ss << " the Nurse" << (numnurse > 1 ? "s" : ""); health += 10; tiredness += 10; happy += 10; mana += (girl->magic() / 5); } if (nummecs + numnurse >= 4 && g_Dice.percent(50)) // lots of people making sure she is in good working order { g_Girls.UpdateStat(girl, STAT_CONSTITUTION, 1); } ss << (((nummecs > 1 && numnurse < 1) || numnurse > 1) ? " take" : " takes") << " care of her."; // Improve girl 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.UpdateStat(girl, STAT_HEALTH, health, false); g_Girls.UpdateStat(girl, STAT_TIREDNESS, -tiredness, false); g_Girls.UpdateStat(girl, STAT_HAPPINESS, happy); g_Girls.UpdateStat(girl, STAT_MANA, mana); 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 g_Girls.UpdateStat(girl, STAT_EXP, 1); // Just because! // send her to the waiting room when she is healthy if (girl->health() > 90 && girl->tiredness() < 10) { if (nummecs + numnurse < 1) ss << "\n\nShe wanders out of the Clinic when she is feeling better."; else ss << "\n\nShe has been released from the Clinic."; if (girl->m_DayJob == JOB_GETHEALING) girl->m_DayJob = JOB_CLINICREST; if (girl->m_NightJob == JOB_GETHEALING) girl->m_NightJob = JOB_CLINICREST; if (girl->m_DayJob == JOB_GETREPAIRS) girl->m_DayJob = JOB_CLINICREST; if (girl->m_NightJob == JOB_GETREPAIRS) girl->m_NightJob = JOB_CLINICREST; } girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, Day0Night1); return false; }
// `J` Job Clinic - Staff - job_is_cleaning bool cJobManager::WorkJanitor(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { int actiontype = ACTION_WORKCLEANING; 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 (roll_a <= 50 && g_Girls.DisobeyCheck(girl, actiontype, brothel)) { ss << " refused to clean the Clinic."; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); return true; } ss << " worked cleaning the Clinic.\n\n"; g_Girls.UnequipCombat(girl); // put that shit away double CleanAmt = JP_Janitor(girl, false); int enjoy = 0; int wages = 0; int tips = 0; int imagetype = IMGTYPE_MAID; int msgtype = Day0Night1; bool playtime = false; if (roll_a <= 10) { enjoy -= g_Dice % 3 + 1; CleanAmt *= 0.8; if (roll_b < 50) ss << "She spilled a bucket of something unpleasant all over herself."; else ss << "She did not like cleaning the Clinic today."; } else if (roll_a >= 90) { enjoy += g_Dice % 3 + 1; CleanAmt *= 1.1; if (roll_b < 50) ss << "She cleaned the building while humming a pleasant tune."; else ss << "She had a great time working today."; } else { enjoy += g_Dice % 2; ss << "The shift passed uneventfully."; } ss << "\n\n"; // 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())) { CleanAmt *= 0.9; wages = 0; } else { wages = min(30, int(30 + (CleanAmt / 10))); // `J` Pay her based on how much she cleaned } // `J` if she can clean more than is needed, she has a little free time after her shift if (brothel->m_Filthiness < CleanAmt / 2) playtime = true; ss << "\n\nCleanliness rating improved by " << (int)CleanAmt; if (playtime) // `J` needs more variation { ss << "\n\n" << girlName << " finished her cleaning early so she "; if (girl->is_pregnant() && girl->health() < 90) { ss << "got a quick checkup and made sure her unborn baby was doing OK."; g_Girls.UpdateStat(girl, STAT_HEALTH, 10); g_Girls.UpdateStat(girl, STAT_HAPPINESS, (g_Dice % 4) + 2); } else if (girl->health() < 80) { ss << "got a quick checkup."; g_Girls.UpdateStat(girl, STAT_HEALTH, 10); } else if (girl->is_pregnant() || g_Dice.percent(40)) { ss << "hung out in the maternity ward watching the babies."; g_Girls.UpdateStat(girl, STAT_HAPPINESS, (g_Dice % 6) - 2); } else if (girl->tiredness() > 50 && brothel->free_rooms() > 10) { ss << "found an empty room and took a nap."; g_Girls.UpdateStat(girl, STAT_TIREDNESS, -((g_Dice % 10) + 5)); } else { int d = g_Clinic.GetNumGirlsOnJob(brothel->m_id, JOB_DOCTOR, Day0Night1); int n = g_Clinic.GetNumGirlsOnJob(brothel->m_id, JOB_NURSE, Day0Night1); ss << "watched the "; if (d + n < 1) { ss << "people wander about the Clinic."; g_Girls.UpdateStat(girl, STAT_HAPPINESS, (g_Dice % 3) - 1); } else { if (d > 0) ss << "doctor" << (d > 1 ? "s" : ""); if (d > 0 && n > 0) ss << " and "; if (n > 0) ss << "nurse" << (n > 1 ? "s" : ""); ss << " do their job" << (d + n > 1 ? "s" : ""); g_Girls.UpdateSkill(girl, SKILL_MEDICINE, (g_Dice % 2)); } } } // do all the output girl->m_Events.AddMessage(ss.str(), IMGTYPE_MAID, Day0Night1); brothel->m_Filthiness -= (int)CleanAmt; // Money girl->m_Tips = max(0, tips); girl->m_Pay = max(0, wages); // Improve girl int xp = 5, libido = 1, skill = 3; if (enjoy > 1) { xp += 1; skill += 1; } 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; } g_Girls.UpdateStat(girl, STAT_EXP, (g_Dice % xp) + 2); g_Girls.UpdateSkill(girl, SKILL_SERVICE, (g_Dice % skill) + 2); g_Girls.UpdateStatTemp(girl, STAT_LIBIDO, libido); g_Girls.UpdateEnjoyment(girl, actiontype, enjoy); // Gain Traits if (g_Dice.percent(girl->service())) g_Girls.PossiblyGainNewTrait(girl, "Maid", 70, actiontype, girlName + " has cleaned enough that she could work professionally as a Maid anywhere.", Day0Night1); // Lose Traits if (g_Dice.percent(girl->service())) g_Girls.PossiblyLoseExistingTrait(girl, "Clumsy", 30, actiontype, "It took her spilling hundreds of buckets, and just as many reprimands, but " + girl->m_Realname + " has finally stopped being so Clumsy.", Day0Night1); return false; }