/* * return next girl in the sorted list */ sGirl *cScreenGirlDetails::get_next_girl() { sGirl *next_girl = 0; g_LogFile.write("Where is the girl??"); if (g_Clinic.GetGirlsCurrentBrothel(selected_girl) != -1) { g_LogFile.write("She is in the Clinic"); next_girl = g_Clinic.GetGirl(0, g_Clinic.GetGirlPos(0, selected_girl) + 1); } else if (g_Studios.GetGirlsCurrentBrothel(selected_girl) != -1) { g_LogFile.write("She is in the Studio"); next_girl = g_Studios.GetGirl(0, g_Studios.GetGirlPos(0, selected_girl) + 1); } else if (g_Arena.GetGirlsCurrentBrothel(selected_girl) != -1) { g_LogFile.write("She is in the Arena"); next_girl = g_Arena.GetGirl(0, g_Arena.GetGirlPos(0, selected_girl) + 1); } else if (g_Centre.GetGirlsCurrentBrothel(selected_girl) != -1) { g_LogFile.write("She is in the Centre"); next_girl = g_Centre.GetGirl(0, g_Centre.GetGirlPos(0, selected_girl) + 1); } else if (g_House.GetGirlsCurrentBrothel(selected_girl) != -1) { g_LogFile.write("She is in the House"); next_girl = g_House.GetGirl(0, g_House.GetGirlPos(0, selected_girl) + 1); } else if (g_Farm.GetGirlsCurrentBrothel(selected_girl) != -1) { g_LogFile.write("She is in the Farm"); next_girl = g_Farm.GetGirl(0, g_Farm.GetGirlPos(0, selected_girl) + 1); } else { if (selected_girl->m_DayJob == JOB_INDUNGEON) { g_LogFile.write("She is in the Dungeon"); next_girl = g_Brothels.GetDungeon()->GetGirl(g_Brothels.GetDungeon()->GetGirlPos(selected_girl) + 1)->m_Girl; } else { g_LogFile.write("She is in a Brothel"); next_girl = g_Brothels.GetGirl(g_CurrBrothel, g_Brothels.GetGirlPos(g_CurrBrothel, selected_girl) + 1); } } return next_girl; }
/* * the selected girl is to be removed from the current list; returns next selected girl */ sGirl *cScreenGirlDetails::remove_selected_girl() { sGirl *next_girl = 0; if (cycle_girls.size() == 0) { return 0; } int cur_id = cycle_girls[cycle_pos]; cycle_girls.erase(cycle_girls.begin() + cycle_pos); // remove her if (cycle_pos >= (int)cycle_girls.size()) { // if this girl was the last in the list, move list position -1 if possible if (cycle_pos > 0) cycle_pos--; else // or, maybe we have no more girls in the list return next_girl; } if (selected_girl->m_DayJob == JOB_INDUNGEON) next_girl = g_Brothels.GetDungeon()->GetGirl(cycle_girls[cycle_pos])->m_Girl; else if (selected_girl->m_InHouse) next_girl = g_House.GetGirl(0, cycle_girls[cycle_pos]); else if (selected_girl->m_InFarm) next_girl = g_Farm.GetGirl(0, cycle_girls[cycle_pos]); else if (selected_girl->m_InClinic) next_girl = g_Clinic.GetGirl(0, cycle_girls[cycle_pos]); else if (selected_girl->m_InCentre) next_girl = g_Centre.GetGirl(0, cycle_girls[cycle_pos]); else if (selected_girl->m_InArena) next_girl = g_Arena.GetGirl(0, cycle_girls[cycle_pos]); else if (selected_girl->m_InStudio) next_girl = g_Studios.GetGirl(0, cycle_girls[cycle_pos]); else next_girl = g_Brothels.GetGirl(g_CurrBrothel, cycle_girls[cycle_pos]); for (int i = cycle_girls.size(); i--> 0;) { // all girls with ID higher than removed girl need their ID reduced if (cycle_girls[i] > cur_id) cycle_girls[i]--; } return next_girl; }
void cScreenTown::check_clinic(int ClinicNum) { // player clicked on one of the brothels if (g_Clinic.GetNumBrothels() == ClinicNum) { // player doesn't own this brothel... can he buy it? static_brothel_data *bck = clinic_data + ClinicNum; locale syslocale(""); stringstream ss; ss.imbue(syslocale); if (!g_Gold.afford(bck->price) || g_Gangs.GetNumBusinessExtorted() < bck->business) { // can't buy it ss << gettext("This building costs ") << bck->price << gettext(" gold and you need to control at least ") << bck->business << gettext(" businesses."); if (!g_Gold.afford(bck->price)) ss << "\n" << gettext("You need ") << (bck->price - g_Gold.ival()) << gettext(" more gold to afford it."); if (g_Gangs.GetNumBusinessExtorted() < bck->business) ss << "\n" << gettext("You need to control ") << (bck->business - g_Gangs.GetNumBusinessExtorted()) << gettext(" more businesses."); g_MessageQue.AddToQue(ss.str(), 0); } else { // can buy it ss << gettext("Do you wish to purchase this building for ") << bck->price << gettext(" gold? It has ") << bck->rooms << gettext(" rooms."); g_MessageQue.AddToQue(ss.str(), 2); g_ChoiceManager.CreateChoiceBox(224, 112, 352, 384, 0, 2, 32, 8); g_ChoiceManager.AddChoice(0, gettext("Buy It"), 0); g_ChoiceManager.AddChoice(0, gettext("Don't Buy It"), 1); g_ChoiceManager.SetActive(0); BuyClinic = ClinicNum; } } else { // player owns this brothel... go to it g_Building = BUILDING_CLINIC; g_CurrClinic = ClinicNum; g_WinManager.push("Clinic Screen"); } }
// `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; }
void cScreenGirlDetails::check_events() { // no events means we can go home if (g_InterfaceEvents.GetNumEvents() == 0) return; // if it's the back button, pop the window off the stack and we're done if (g_InterfaceEvents.CheckButton(back_id)) { g_InitWin = true; g_WinManager.Pop(); return; } if (g_InterfaceEvents.CheckSlider(houseperc_id)) { g_Girls.SetStat(selected_girl, STAT_HOUSE, SliderValue(houseperc_id)); ss.str(""); ss << gettext("House Percentage: ") << SliderValue(houseperc_id) << gettext("%"); EditTextItem(ss.str(), housepercval_id); // Rebelliousness might have changed, so update details if (DetailLevel == 0) { string detail = g_Girls.GetDetailsString(selected_girl); EditTextItem(detail, girldesc_id); } return; } if (g_InterfaceEvents.CheckButton(more_id)) { if (DetailLevel == 0) { DetailLevel = 1; EditTextItem(g_Girls.GetMoreDetailsString(selected_girl), girldesc_id); } else if (DetailLevel == 1) { DetailLevel = 2; EditTextItem(g_Girls.GetThirdDetailsString(selected_girl), girldesc_id); } else { DetailLevel = 0; EditTextItem(g_Girls.GetDetailsString(selected_girl), girldesc_id); } } if (g_InterfaceEvents.CheckButton(day_id)) { DisableButton(day_id, true); DisableButton(night_id, false); g_InitWin = true; Day0Night1 = SHIFT_DAY; } if (g_InterfaceEvents.CheckButton(night_id)) { DisableButton(day_id, false); DisableButton(night_id, true); g_InitWin = true; Day0Night1 = SHIFT_NIGHT; } if (g_InterfaceEvents.CheckCheckbox(antipreg_id)) { selected_girl->m_UseAntiPreg = (IsCheckboxOn(antipreg_id)); } if (g_InterfaceEvents.CheckListbox(traitlist_id)) { int selection = GetLastSelectedItemFromList(traitlist_id); if (selection != -1) EditTextItem(selected_girl->m_Traits[selection]->m_Desc, traitdesc_id); else EditTextItem("", traitdesc_id); } if (g_InterfaceEvents.CheckListbox(jobtypelist_id)) { SetJob = true; RefreshJobList(); } if (g_InterfaceEvents.CheckListbox(joblist_id)) { bool fulltime = g_CTRLDown; int selection = GetSelectedItemFromList(joblist_id); if (selection != -1) { int old_job = (Day0Night1 ? selected_girl->m_NightJob : selected_girl->m_DayJob); // handle special job requirements and assign - if HandleSpecialJobs returns true, the job assignment was modified or cancelled if (g_Brothels.m_JobManager.HandleSpecialJobs(g_CurrBrothel, selected_girl, selection, old_job, Day0Night1, fulltime)) { selection = (Day0Night1 ? selected_girl->m_NightJob : selected_girl->m_DayJob); SetSelectedItemInList(joblist_id, selection, false); } // refresh job worker counts for former job and current job if (old_job != selection) { SetSelectedItemText(joblist_id, old_job, g_Brothels.m_JobManager.JobDescriptionCount(old_job, g_CurrBrothel, Day0Night1)); SetSelectedItemText(joblist_id, selection, g_Brothels.m_JobManager.JobDescriptionCount(selection, g_CurrBrothel, Day0Night1)); } RefreshJobList(); } } if (g_InterfaceEvents.CheckButton(inventory_id)) { if (selected_girl) { if (GirlDead(selected_girl)) return; g_InitWin = true; g_AllTogle = true; g_WinManager.push("Item Management"); return; } } if (g_InterfaceEvents.CheckButton(gallery_id)) { g_WinManager.push("Gallery"); g_InitWin = true; return; } if (g_InterfaceEvents.CheckSlider(accom_id)) { selected_girl->m_AccLevel = SliderValue(accom_id); SliderRange(accom_id, 0, 9, selected_girl->m_AccLevel, 1); if (accomval_id != -1) { stringstream acc; acc << "Accommodation: " << g_Girls.Accommodation(SliderValue(accom_id)); if (cfg.debug.log_extradetails()) { int val = SliderValue(accom_id) - g_Girls.PreferredAccom(selected_girl); if (val != 0) acc << " ( " << (val > 0 ? "+" : "") << val << " )"; } EditTextItem(acc.str(), accomval_id); } g_InitWin = true; return; } if (g_InterfaceEvents.CheckButton(accomup_id)) { if (selected_girl->m_AccLevel + 1 > 9) selected_girl->m_AccLevel = 9; else selected_girl->m_AccLevel++; if (accomval_id != -1) EditTextItem("Accommodation: " + g_Girls.Accommodation(selected_girl->m_AccLevel), accomval_id); g_InitWin = true; return; } if (g_InterfaceEvents.CheckButton(accomdown_id)) { if (selected_girl->m_AccLevel - 1 < 0) selected_girl->m_AccLevel = 0; else selected_girl->m_AccLevel--; if (accomval_id != -1) EditTextItem("Accommodation: " + g_Girls.Accommodation(selected_girl->m_AccLevel), accomval_id); g_InitWin = true; return; } if (g_InterfaceEvents.CheckButton(takegold_id)) { take_gold(selected_girl); } if (g_InterfaceEvents.CheckButton(reldungeon_id)) { g_Brothels.GetDungeon()->GetDungeonPos(selected_girl); if ((g_Brothels.GetBrothel(g_CurrBrothel)->m_NumRooms - g_Brothels.GetBrothel(g_CurrBrothel)->m_NumGirls) == 0) { g_MessageQue.AddToQue(gettext("The current brothel has no more room.\nBuy a new one, get rid of some girls, or change the brothel you are currently managing."), 0); } else { sGirl* nextGirl = remove_selected_girl(); sGirl* tempGirl = g_Brothels.GetDungeon()->RemoveGirl(g_Brothels.GetDungeon()->GetGirl(g_Brothels.GetDungeon()->GetGirlPos(selected_girl))); g_Brothels.AddGirl(g_CurrBrothel, tempGirl); if (g_Brothels.GetDungeon()->GetNumGirls() == 0) { selected_girl = 0; g_WinManager.Pop(); } else selected_girl = nextGirl; } g_InitWin = true; return; } if (g_InterfaceEvents.CheckButton(senddungeon_id)) { ss.str(""); g_Brothels.GetGirlPos(g_CurrBrothel, selected_girl); // does she decide to fight back if (g_Brothels.FightsBack(selected_girl)) { bool win = true; sGang* gang = g_Gangs.GetGangOnMission(MISS_GUARDING); int count = 8; while (gang && win && count >= 0) { win = (g_Gangs.GangCombat(selected_girl, gang)); if (gang->m_Num == 0) gang = g_Gangs.GetGangOnMission(MISS_GUARDING); count--; if (count<0) win = true; } // Calculate combat between goons and girl if she decides to fight back if (win) { ss << gettext("She puts up a fight"); if (gang && gang->m_Num == 0) ss << gettext(", and the gang is completely wiped out"); ss << ". "; if (g_Brothels.PlayerCombat(selected_girl)) // fight with the player { // If girl wins she escapes and leaves the brothel ss << gettext("After defeating you as well, she escapes to the outside.\n"); ss << gettext("She will escape for good in 6 weeks if you don't send someone after her."); sGirl* nextGirl = remove_selected_girl(); sGirl* temp = selected_girl; if (selected_girl->m_DayJob == JOB_INDUNGEON) temp = g_Brothels.GetDungeon()->RemoveGirl(selected_girl); else if (selected_girl->m_InHouse) g_House.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InFarm) g_Farm.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InClinic) g_Clinic.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InCentre) g_Centre.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InArena) g_Arena.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InStudio) g_Studios.RemoveGirl(0, selected_girl, false); else g_Brothels.RemoveGirl(selected_girl->where_is_she, selected_girl, false); temp->m_RunAway = 6; temp->m_NightJob = temp->m_DayJob = JOB_RUNAWAY; g_Brothels.AddGirlToRunaways(temp); stringstream smess; smess << temp->m_Realname << gettext(" has run away"); g_MessageQue.AddToQue(smess.str(), 1); selected_girl = nextGirl; if (selected_girl == 0) g_WinManager.Pop(); } else // otherwise put her in the dungeon { int reason = (selected_girl->m_Spotted ? DUNGEON_GIRLSTEAL : DUNGEON_GIRLWHIM); sGirl* nextGirl = remove_selected_girl(); selected_girl->m_DayJob = selected_girl->m_NightJob = JOB_INDUNGEON; /* */if (selected_girl->m_InHouse) g_House.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InFarm) g_Farm.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InClinic) g_Clinic.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InCentre) g_Centre.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InArena) g_Arena.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InStudio) g_Studios.RemoveGirl(0, selected_girl, false); else g_Brothels.RemoveGirl(selected_girl->where_is_she, selected_girl, false); g_Brothels.GetDungeon()->AddGirl(selected_girl, reason); ss << gettext("However, you manage to defeat her yourself and place her unconscious body in the dungeon."); bool pop = false; /* */if (selected_girl->m_InHouse) if (g_House.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InFarm) if (g_Farm.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InClinic) if (g_Clinic.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InCentre) if (g_Centre.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InArena) if (g_Arena.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InStudio) if (g_Studios.GetNumGirls(0) == 0) pop = true; else if (g_Brothels.GetNumGirls(selected_girl->where_is_she) == 0) pop = true; if (pop) { selected_girl = 0; g_WinManager.Pop(); } else selected_girl = nextGirl; } } else // otherwise put her in the dungeon { ss << gettext("She puts up a fight "); if (gang && gang->m_Num == 0) ss << gettext("and the gang is wiped out, "); ss << gettext("but your goons manage to drag her unconscious to the dungeon."); int reason = (selected_girl->m_Spotted ? DUNGEON_GIRLSTEAL : DUNGEON_GIRLWHIM); sGirl* nextGirl = remove_selected_girl(); /* */if (selected_girl->m_InHouse) g_House.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InFarm) g_Farm.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InClinic) g_Clinic.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InCentre) g_Centre.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InArena) g_Arena.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InStudio) g_Studios.RemoveGirl(0, selected_girl, false); else g_Brothels.RemoveGirl(selected_girl->where_is_she, selected_girl, false); g_Brothels.GetDungeon()->AddGirl(selected_girl, reason); bool pop = false; /* */if (selected_girl->m_InHouse) if (g_House.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InFarm) if (g_Farm.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InClinic) if (g_Clinic.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InCentre) if (g_Centre.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InArena) if (g_Arena.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InStudio) if (g_Studios.GetNumGirls(0) == 0) pop = true; else if (g_Brothels.GetNumGirls(selected_girl->where_is_she) == 0) pop = true; if (pop) { selected_girl = 0; g_WinManager.Pop(); } else selected_girl = nextGirl; } } else { int reason = (selected_girl->m_Spotted ? DUNGEON_GIRLSTEAL : DUNGEON_GIRLWHIM); sGirl* nextGirl = remove_selected_girl(); /* */if (selected_girl->m_InHouse) g_House.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InFarm) g_Farm.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InClinic) g_Clinic.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InCentre) g_Centre.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InArena) g_Arena.RemoveGirl(0, selected_girl, false); else if (selected_girl->m_InStudio) g_Studios.RemoveGirl(0, selected_girl, false); else g_Brothels.RemoveGirl(selected_girl->where_is_she, selected_girl, false); g_Brothels.GetDungeon()->AddGirl(selected_girl, reason); ss << gettext("She goes quietly with a sullen look on her face."); bool pop = false; /* */if (selected_girl->m_InHouse) if (g_House.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InFarm) if (g_Farm.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InClinic) if (g_Clinic.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InCentre) if (g_Centre.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InArena) if (g_Arena.GetNumGirls(0) == 0) pop = true; else if (selected_girl->m_InStudio) if (g_Studios.GetNumGirls(0) == 0) pop = true; else if (g_Brothels.GetNumGirls(g_CurrBrothel) == 0) /* */ pop = true; if (pop) { selected_girl = 0; g_WinManager.Pop(); } else selected_girl = nextGirl; } g_InitWin = true; g_MessageQue.AddToQue(ss.str(), 0); return; } if (g_InterfaceEvents.CheckButton(interact_id)) { if (g_TalkCount > 0) { DirPath dp; eventrunning = true; if (selected_girl->m_DayJob != JOB_INDUNGEON) { int v[2] = { 1, -1 }; cTrigger* trig = 0; if (!(trig = selected_girl->m_Triggers.CheckForScript(TRIGGER_TALK, false, v))) // trigger any girl specific talk script { // no, so trigger the default one dp = dp << "Resources" << "Scripts" << "DefaultInteractDetails.script"; } else { // yes, so use that instead dp = DirPath(cfg.folders.characters().c_str()) << selected_girl->m_Name << trig->m_Script; } } else { int v[2] = { 0, -1 }; cTrigger* trig = 0; if (!(trig = selected_girl->m_Triggers.CheckForScript(TRIGGER_TALK, false, v))) // trigger any girl specific talk script { // no, so trigger the default one dp = dp << "Resources" << "Scripts" << "DefaultInteractDungeon.script"; } else { dp = DirPath(cfg.folders.characters().c_str()) << selected_girl->m_Name << trig->m_Script; } } cScriptManager script_manager; script_manager.Load(dp, selected_girl); if (!g_Cheats) g_TalkCount--; } g_InitWin = true; return; } if (g_InterfaceEvents.CheckButton(next_id)) { NextGirl(); } if (g_InterfaceEvents.CheckButton(prev_id)) { PrevGirl(); } }
// `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; }
void cClinicScreen::process() { /* * we need to make sure the ID variables are set */ if (!ids_set) set_ids(); init(); if (g_InitWin) { EditTextItem(g_Clinic.GetBrothelString(0), clinicdetails_id); g_InitWin = false; } /* * no events means we can go home */ if (g_InterfaceEvents.GetNumEvents() == 0) return; /* * otherwise, compare event IDs * * if it's the back button, pop the window off the stack * and we're done */ if (g_InterfaceEvents.CheckButton(back_id)) { g_InitWin = true; g_WinManager.Pop(); return; } else if (g_InterfaceEvents.CheckButton(walk_id)) { g_InitWin = true; g_WinManager.push("Clinic Try"); return; } else if (g_InterfaceEvents.CheckButton(girls_id)) { g_InitWin = true; g_WinManager.push("Clinic"); return; } else if (g_InterfaceEvents.CheckButton(staff_id)) { g_InitWin = true; g_WinManager.push("Gangs"); return; } else if (g_InterfaceEvents.CheckButton(turns_id)) { g_InitWin = true; g_WinManager.push("TurnSummary"); return; } else if (g_InterfaceEvents.CheckButton(setup_id)) { g_Building = BUILDING_CLINIC; g_InitWin = true; g_WinManager.push("Building Setup"); return; } else if (g_InterfaceEvents.CheckButton(dungeon_id)) { g_InitWin = true; g_WinManager.push("Dungeon"); return; } else if (g_InterfaceEvents.CheckButton(weeks_id)) { g_InitWin = true; if (!g_CTRLDown) { g_CTRLDown = false; AutoSaveGame(); } NextWeek(); g_WinManager.push("TurnSummary"); return; } }
// `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; }
void cScreenTown::init() { if (BuyClinic != -1) { (g_ChoiceManager.GetChoice(0) == 0 ? GetClinic = true : BuyClinic = -1); g_ChoiceManager.Free(); } if (GetClinic) { static_brothel_data *bpt = clinic_data + BuyClinic; g_Gold.brothel_cost(bpt->price); g_Clinic.NewBrothel(bpt->rooms, bpt->maxrooms); g_Clinic.SetName(0, gettext("Clinic")); GetClinic = false; BuyClinic = -1; } if (BuyCentre != -1) { (g_ChoiceManager.GetChoice(0) == 0 ? GetCentre = true : BuyCentre = -1); g_ChoiceManager.Free(); } if (GetCentre) { static_brothel_data *bpt = centre_data + BuyCentre; g_Gold.brothel_cost(bpt->price); g_Centre.NewBrothel(bpt->rooms, bpt->maxrooms); g_Centre.SetName(0, gettext("Centre")); GetCentre = false; BuyCentre = -1; } if (BuyArena != -1) { (g_ChoiceManager.GetChoice(0) == 0 ? GetArena = true : BuyArena = -1); g_ChoiceManager.Free(); } if (GetArena) { static_brothel_data *bpt = arena_data + BuyArena; g_Gold.brothel_cost(bpt->price); g_Arena.NewBrothel(bpt->rooms, bpt->maxrooms); g_Arena.SetName(0, gettext("Arena")); GetArena = false; BuyArena = -1; } if (BuyStudio != -1) { (g_ChoiceManager.GetChoice(0) == 0 ? GetStudio = true : BuyStudio = -1); g_ChoiceManager.Free(); } if (GetStudio) { static_brothel_data *bpt = studio_data + BuyStudio; g_Gold.brothel_cost(bpt->price); g_Studios.NewBrothel(bpt->rooms, bpt->maxrooms); g_Studios.SetName(0, gettext("Studio")); GetStudio = false; BuyStudio = -1; } if (BuyFarm != -1) { (g_ChoiceManager.GetChoice(0) == 0 ? GetFarm = true : BuyFarm = -1); g_ChoiceManager.Free(); } if (GetFarm) { static_brothel_data *bpt = farm_data + BuyFarm; g_Gold.brothel_cost(bpt->price); g_Farm.NewBrothel(bpt->rooms, bpt->maxrooms); g_Farm.SetName(0, gettext("Farm")); GetFarm = false; BuyFarm = -1; } if (GetName) { if (g_ReturnText != "") { if (g_Brothels.GetObjective() && g_Brothels.GetObjective()->m_Objective == OBJECTIVE_GETNEXTBROTHEL) g_Brothels.PassObjective(); static_brothel_data *bpt = brothel_data + BuyBrothel; g_Gold.brothel_cost(bpt->price); g_Brothels.NewBrothel(bpt->rooms, bpt->maxrooms); g_Brothels.SetName(g_Brothels.GetNumBrothels() - 1, g_ReturnText); g_InitWin = true; } GetName = false; BuyBrothel = -1; } if (BuyBrothel != -1) { if (g_ChoiceManager.GetChoice(0) == 0) { g_MessageQue.AddToQue("Enter a name for your new brothel.", 0); GetName = true; g_InitWin = true; g_WinManager.Push(GetString, &g_GetString); } else BuyBrothel = -1; g_ChoiceManager.Free(); if (!GetName) BuyBrothel = -1; return; } g_CurrentScreen = SCREEN_TOWN; if (!g_InitWin) return; Focused(); g_InitWin = false; // buttons enable/disable DisableButton(walk_id, g_WalkAround); HideButton(brothel2_id, (g_Brothels.GetBrothel(1) == 0)); HideButton(brothel3_id, (g_Brothels.GetBrothel(2) == 0)); HideButton(brothel4_id, (g_Brothels.GetBrothel(3) == 0)); HideButton(brothel5_id, (g_Brothels.GetBrothel(4) == 0)); HideButton(brothel6_id, (g_Brothels.GetBrothel(5) == 0)); string brothel = "Current Brothel: "; brothel += g_Brothels.GetName(g_CurrBrothel); EditTextItem(brothel, curbrothel_id); }
// `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; }