/* * 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; }
void cScreenCentreManagement::RefreshSelectedJobType() { selection = GetSelectedItemFromList(girllist_id); if (selection < 0) return; selected_girl = g_Centre.GetGirl(g_CurrCentre, selection); u_int job = (Day0Night1 ? selected_girl->m_NightJob : selected_girl->m_DayJob); // set the job filter if (job >= g_Centre.m_JobManager.JobFilterIndex[JOBFILTER_COUNSELINGCENTRE] && job < g_Centre.m_JobManager.JobFilterIndex[JOBFILTER_COUNSELINGCENTRE + 1]) SetSelectedItemInList(jobtypelist_id, JOBFILTER_COUNSELINGCENTRE); else SetSelectedItemInList(jobtypelist_id, JOBFILTER_COMMUNITYCENTRE); SetJob = true; }
void cScreenCentreManagement::ViewSelectedGirl() { if (selected_girl) { if (GirlDead(selected_girl)) return; //load up the cycle_girls vector with the ordered list of girl IDs FillSortedIDList(girllist_id, &cycle_girls, &cycle_pos); for (int i = cycle_girls.size(); i-- > 0;) { // no viewing dead girls if (g_Centre.GetGirl(g_CurrCentre, cycle_girls[i])->health() <= 0) cycle_girls.erase(cycle_girls.begin() + i); } g_InitWin = true; g_WinManager.push("Girl Details"); return; } }
/* * 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_centre(int CentreNum) { // player clicked on one of the brothels if (g_Centre.GetNumBrothels() == CentreNum) { // player doesn't own this brothel... can he buy it? static_brothel_data *bck = centre_data + CentreNum; 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); BuyCentre = CentreNum; } } else { // player owns this brothel... go to it g_Building = BUILDING_CENTRE; g_CurrCentre = CentreNum; g_WinManager.push("Centre Screen"); } }
// `J` Job Centre - Anger Management bool cJobManager::WorkCentreAngerManagement(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { stringstream ss; string girlName = girl->m_Realname; ss << girlName; int actiontype = ACTION_WORKTHERAPY; // if she was not in thearpy yesterday, reset working days to 0 before proceding if (girl->m_YesterDayJob != JOB_ANGER) { girl->m_WorkingDay = girl->m_PrevWorkingDay = 0; } girl->m_DayJob = girl->m_NightJob = JOB_ANGER; // it is a full time job if (!g_Girls.HasTrait(girl, "Aggressive") && // if the girl doesnt need this !g_Girls.HasTrait(girl, "Tsundere") && !g_Girls.HasTrait(girl, "Yandere")) { ss << " doesn't need anger management so she was sent to the waiting room."; if (Day0Night1 == 0) girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_WARNING); girl->m_YesterDayJob = girl->m_YesterNightJob = girl->m_DayJob = girl->m_NightJob = JOB_CENTREREST; girl->m_PrevWorkingDay = girl->m_WorkingDay = 0; return false; // not refusing } if (g_Centre.GetNumGirlsOnJob(brothel->m_id, JOB_COUNSELOR, true) < 1 || g_Centre.GetNumGirlsOnJob(brothel->m_id, JOB_COUNSELOR, false) < 1) { ss << " has no counselor to help her on the " << (Day0Night1 ? "night" : "day") << " Shift."; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_WARNING); return false; // not refusing } if (g_Dice.percent(20) || g_Girls.DisobeyCheck(girl, actiontype, brothel)) // `J` - yes, OR, not and. { g_Girls.UpdateEnjoyment(girl, actiontype, -1); if (Day0Night1) girl->m_WorkingDay--; if (g_Dice.percent(10)) { g_Girls.UpdateEnjoyment(girl, actiontype, -5); bool runaway = false; // if there is no counselor, it should not get to here sGirl* counselor = g_Centre.GetRandomGirlOnJob(0, JOB_COUNSELOR, Day0Night1); ss << "\n\n" << girlName << " fought hard with her counselor " << counselor->m_Realname; int winner = g_Girls.girl_fights_girl(girl, counselor); if (winner == 1) // the patient won { ss << " and won.\n\n"; g_Girls.UpdateEnjoyment(girl, ACTION_COMBAT, 5); g_Girls.UpdateEnjoyment(counselor, ACTION_WORKCOUNSELOR, -5); g_Girls.UpdateEnjoyment(counselor, ACTION_COMBAT, -2); if (g_Dice.percent(10)) // and ran away { runaway = true; stringstream smess; smess << girlName << " fought with her counselor and ran away.\nSend your goons after her to attempt recapture.\nShe will escape for good after 6 weeks.\n"; g_MessageQue.AddToQue(smess.str(), COLOR_RED); g_Centre.RemoveGirl(0, girl, false); girl->m_RunAway = 6; girl->m_NightJob = girl->m_DayJob = JOB_RUNAWAY; g_Brothels.AddGirlToRunaways(girl); return true; } } else // the counselor won { ss << " and lost.\n\n"; g_Girls.UpdateEnjoyment(girl, actiontype, -5); g_Girls.UpdateEnjoyment(girl, ACTION_COMBAT, -5); g_Girls.UpdateEnjoyment(counselor, ACTION_WORKCOUNSELOR, -1); g_Girls.UpdateEnjoyment(counselor, ACTION_COMBAT, 2); } stringstream ssc; ssc << counselor->m_Realname << " had to defend herself from " << girlName << " who she was counceling.\n"; if (runaway) ss << girlName << " ran out of the Counceling Centre and has not been heard from since."; counselor->m_Events.AddMessage(ssc.str(), IMGTYPE_COMBAT, EVENT_WARNING); } else { ss << "She fought with her counselor and did not make any progress this week."; } girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); return true; } ss << " underwent therapy for mental issues.\n\n"; g_Girls.UnequipCombat(girl); // not for patient int enjoy = 0; int msgtype = Day0Night1; if (!Day0Night1) girl->m_WorkingDay++; g_Girls.UpdateStat(girl, STAT_HAPPINESS, g_Dice % 30 - 20); g_Girls.UpdateStat(girl, STAT_SPIRIT, g_Dice % 5 - 10); g_Girls.UpdateStat(girl, STAT_MANA, g_Dice % 5 - 10); // `J` % chance a counselor will save her if she almost dies int healthmod = (g_Dice % 15) - 11; if (girl->health() + healthmod < 1 && g_Dice.percent(95 + (girl->health() + healthmod)) && (g_Centre.GetNumGirlsOnJob(brothel->m_id, JOB_COUNSELOR, true) > 0 || g_Centre.GetNumGirlsOnJob(brothel->m_id, JOB_COUNSELOR, false) > 0)) { // Don't kill the girl from therapy if a Counselor is on duty g_Girls.SetStat(girl, STAT_HEALTH, 1); g_Girls.UpdateStat(girl, STAT_PCFEAR, 5); g_Girls.UpdateStat(girl, STAT_PCLOVE, -10); g_Girls.UpdateStat(girl, STAT_PCHATE, 10); ss << "She almost died in rehab but the Counselor saved her.\n"; ss << "She hates you a little more for forcing this on her.\n\n"; msgtype = EVENT_DANGER; enjoy -= 2; } else { g_Girls.UpdateStat(girl, STAT_HEALTH, healthmod); enjoy += (healthmod / 5) + 1; } if (girl->health() < 1) { ss << "She died in anger management."; msgtype = EVENT_DANGER; } if (girl->m_WorkingDay >= 3 && Day0Night1) { enjoy += g_Dice % 10; g_Girls.UpdateEnjoyment(girl, ACTION_WORKCOUNSELOR, g_Dice % 6 - 2); // `J` She may want to help others with their problems g_Girls.UpdateStat(girl, STAT_HAPPINESS, g_Dice % 10); ss << "The therapy is a success.\n"; msgtype = EVENT_GOODNEWS; if (g_Girls.HasTrait(girl, "Aggressive")) { g_Girls.RemoveTrait(girl, "Aggressive"); ss << "She is no longer Aggressive.\n"; } else if (g_Girls.HasTrait(girl, "Tsundere")) { g_Girls.RemoveTrait(girl, "Tsundere"); ss << "She is no longer a Tsundere.\n"; } else if (g_Girls.HasTrait(girl, "Yandere")) { g_Girls.RemoveTrait(girl, "Yandere"); ss << "She is no longer a Yandere.\n"; } girl->m_PrevWorkingDay = girl->m_WorkingDay = 0; if (g_Girls.HasTrait(girl, "Aggressive") || g_Girls.HasTrait(girl, "Tsundere") || g_Girls.HasTrait(girl, "Yandere")) { ss << "\nShe should stay in anger management to treat her other anger issues."; } else // get out of therapy { ss << "\nShe has been released from therapy."; girl->m_YesterDayJob = girl->m_YesterNightJob = girl->m_DayJob = girl->m_NightJob = JOB_CENTREREST; girl->m_PrevWorkingDay = girl->m_WorkingDay = 0; girl->m_PrevDayJob = girl->m_PrevNightJob = 255; } } else { ss << "The therapy is in progress (" << (3 - girl->m_WorkingDay) << " day remaining)."; } // Improve girl int libido = 1; if (g_Girls.HasTrait(girl, "Nymphomaniac")) { libido += 2; } g_Girls.UpdateStatTemp(girl, STAT_LIBIDO, libido); girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, msgtype); g_Girls.UpdateEnjoyment(girl, actiontype, enjoy); 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(); } }
void cScreenCentreManagement::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.CheckButton(viewdetails_id)) { ViewSelectedGirl(); } if (g_InterfaceEvents.CheckButton(day_id)) { DisableButton(day_id, true); DisableButton(night_id, false); Day0Night1 = SHIFT_DAY; RefreshSelectedJobType(); } if (g_InterfaceEvents.CheckButton(night_id)) { DisableButton(day_id, false); DisableButton(night_id, true); Day0Night1 = SHIFT_NIGHT; RefreshSelectedJobType(); } if (g_InterfaceEvents.CheckListbox(jobtypelist_id)) { selection = GetSelectedItemFromList(jobtypelist_id); if (selection == -1) EditTextItem("Nothing Selected", jobtypedesc_id); else { // populate Jobs listbox with jobs in the selected category RefreshJobList(); string jdmessage = g_Centre.m_JobManager.JobFilterDesc[selection]; if ((g_Centre.GetNumGirlsOnJob(g_CurrCentre, JOB_COUNSELOR, 0) < 1 && g_Centre.GetNumberPatients(0) > 0) || (g_Centre.GetNumGirlsOnJob(g_CurrCentre, JOB_COUNSELOR, 1) < 1 && g_Centre.GetNumberPatients(1) > 0)) { jdmessage += gettext("\n*** A Counselor is required to guide Rehab and Therapy patients. "); } EditTextItem(jdmessage, jobtypedesc_id); } } if (g_InterfaceEvents.CheckListbox(joblist_id)) { bool fulltime = g_CTRLDown; selection = GetSelectedItemFromList(joblist_id); if (selection != -1) { // first handle the descriptions EditTextItem(g_Centre.m_JobManager.JobDesc[selection], jobdesc_id); // Now assign the job to all the selected girls int pos = 0; int GSelection = GetNextSelectedItemFromList(girllist_id, 0, pos); while (GSelection != -1) { u_int new_job = selection; selected_girl = g_Centre.GetGirl(g_CurrCentre, GSelection); if (selected_girl) { 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_Centre.m_JobManager.HandleSpecialJobs(g_CurrCentre, selected_girl, new_job, old_job, Day0Night1, fulltime)) { new_job = (Day0Night1 ? selected_girl->m_NightJob : selected_girl->m_DayJob); SetSelectedItemInList(joblist_id, new_job, false); } // update the girl's listing to reflect the job change ss.str(""); ss << g_Centre.m_JobManager.JobName[selected_girl->m_DayJob]; SetSelectedItemColumnText(girllist_id, GSelection, ss.str(), m_ListBoxes[girllist_id]->DayJobColumn()); ss.str(""); ss << g_Centre.m_JobManager.JobName[selected_girl->m_NightJob]; SetSelectedItemColumnText(girllist_id, GSelection, ss.str(), m_ListBoxes[girllist_id]->NightJobColumn()); // refresh job worker counts for former job and current job SetSelectedItemText(joblist_id, old_job, g_Centre.m_JobManager.JobDescriptionCount(old_job, 0, Day0Night1, false, false, false, true)); SetSelectedItemText(joblist_id, new_job, g_Centre.m_JobManager.JobDescriptionCount(new_job, 0, Day0Night1, false, false, false, true)); } if (selected_girl->m_DayJob == JOB_REHAB) // `J` added { ss.str(""); ss << g_Centre.m_JobManager.JobName[selected_girl->m_DayJob] << " (" << 3 - selected_girl->m_WorkingDay << ")"; SetSelectedItemColumnText(girllist_id, GSelection, ss.str(), m_ListBoxes[girllist_id]->DayJobColumn()); } else if (selected_girl->m_YesterDayJob == JOB_REHAB && selected_girl->m_DayJob != JOB_REHAB && ((selected_girl->m_WorkingDay > 0) || selected_girl->m_PrevWorkingDay > 0)) { ss.str(""); ss << g_Centre.m_JobManager.JobName[selected_girl->m_DayJob] << " **"; SetSelectedItemColumnText(girllist_id, GSelection, ss.str(), m_ListBoxes[girllist_id]->DayJobColumn()); } if (selected_girl->m_NightJob == JOB_REHAB) // `J` added { ss.str(""); ss << g_Centre.m_JobManager.JobName[selected_girl->m_NightJob] << " (" << 3 - selected_girl->m_WorkingDay << ")"; SetSelectedItemColumnText(girllist_id, GSelection, ss.str(), m_ListBoxes[girllist_id]->NightJobColumn()); } else if (selected_girl->m_YesterNightJob == JOB_REHAB && selected_girl->m_NightJob != JOB_REHAB && ((selected_girl->m_WorkingDay > 0) || selected_girl->m_PrevWorkingDay > 0)) { ss.str(""); ss << g_Centre.m_JobManager.JobName[selected_girl->m_NightJob] << " **"; SetSelectedItemColumnText(girllist_id, GSelection, ss.str(), m_ListBoxes[girllist_id]->NightJobColumn()); } if (selected_girl && selected_girl->m_YesterDayJob == JOB_REHAB && new_job != JOB_REHAB && (selected_girl->m_WorkingDay > 0 || selected_girl->m_PrevWorkingDay > 0)) { // `J` added EditTextItem(g_Centre.m_JobManager.JobDesc[new_job] + "\n** This girl was in Rehab, if you send her somewhere else, she will have to start her Rehab over." , jobdesc_id); } GSelection = GetNextSelectedItemFromList(girllist_id, pos + 1, pos); } } else EditTextItem("Nothing Selected", jobdesc_id); } if (g_InterfaceEvents.CheckListbox(girllist_id)) { selection = GetSelectedItemFromList(girllist_id); if (selection != -1) { selected_girl = g_Centre.GetGirl(g_CurrCentre, selection); if (ListDoubleClicked(girllist_id)) ViewSelectedGirl(); // If double-clicked, try to bring up girl details DisableButton(freeslave_id, selected_girl->is_free()); DisableButton(viewdetails_id, false); RefreshSelectedJobType(); } else { DisableButton(freeslave_id, true); DisableButton(viewdetails_id, true); selected_girl = 0; selection = -1; } lastNum = -2; update_image(); return; } if (g_InterfaceEvents.CheckButton(freeslave_id)) { if (selected_girl) { if (IsMultiSelected(girllist_id)) { // multiple girls selected g_MessageQue.AddToQue("Are you sure you wish to give these girls their freedom?", 0); g_ChoiceManager.CreateChoiceBox(224, 112, 352, 384, 0, 2, 32, strlen("Keep as a slaves")); g_ChoiceManager.AddChoice(0, "Grant Freedom", 0); g_ChoiceManager.AddChoice(0, "Keep as a slaves", 1); g_ChoiceManager.SetActive(0); FreeGirl = true; } else // only one girl selected { if (GirlDead(selected_girl)) return; g_MessageQue.AddToQue("Are you sure you wish to give " + selected_girl->m_Realname + " her freedom?", 0); g_ChoiceManager.CreateChoiceBox(224, 112, 352, 384, 0, 2, 32, strlen("Keep as a slave")); g_ChoiceManager.AddChoice(0, "Grant Freedom", 0); g_ChoiceManager.AddChoice(0, "Keep as a slave", 1); g_ChoiceManager.SetActive(0); FreeGirl = true; } } return; } if (g_InterfaceEvents.CheckButton(transfer_id)) { g_InitWin = true; g_WinManager.Push(TransferGirls, &g_TransferGirls); return; } }
void cScreenCentreManagement::init() { if (FreeGirl) { if (g_ChoiceManager.GetChoice(0) == 0) { vector<int> girl_array; GetSelectedGirls(&girl_array); // get and sort array of girls for (int i = girl_array.size(); i--> 0;) // OK, we have the array, now step through it backwards { selected_girl = g_Centre.GetGirl(g_CurrCentre, girl_array[i]); if (GirlDead(selected_girl) || !selected_girl->is_slave()) continue; // if dead or not a slave, can't free her if (selected_girl) { selected_girl->m_States &= ~(1 << STATUS_SLAVE); The_Player->disposition(5); g_Girls.UpdateStat(selected_girl, STAT_PCLOVE, 10); g_Girls.UpdateStat(selected_girl, STAT_PCFEAR, -20); g_Girls.UpdateStat(selected_girl, STAT_PCHATE, -25); g_Girls.UpdateStat(selected_girl, STAT_OBEDIENCE, 10); g_Girls.UpdateStat(selected_girl, STAT_HAPPINESS, 70); selected_girl->m_AccLevel = cfg.initial.girls_accom(); selected_girl->m_Stats[STAT_HOUSE] = cfg.initial.girls_house_perc(); g_InitWin = true; } } } g_ChoiceManager.Free(); FreeGirl = false; } g_CurrentScreen = SCREEN_CENTRE; if (!g_InitWin) return; Focused(); g_InitWin = false; //////////////////// selection = GetSelectedItemFromList(girllist_id); string centre; centre += g_Centre.GetName(g_CurrCentre); EditTextItem(centre, curcentre_id); //selected_girl = 0; // clear the lists ClearListBox(girllist_id); ClearListBox(jobtypelist_id); // add the job filters // for(int i=0; i<NUMJOBTYPES; i++) // loop through all job types AddToListBox(jobtypelist_id, JOBFILTER_COMMUNITYCENTRE, g_Centre.m_JobManager.JobFilterName[JOBFILTER_COMMUNITYCENTRE]); AddToListBox(jobtypelist_id, JOBFILTER_COUNSELINGCENTRE, g_Centre.m_JobManager.JobFilterName[JOBFILTER_COUNSELINGCENTRE]); RefreshJobList(); SetSelectedItemInList(jobtypelist_id, JOBFILTER_COMMUNITYCENTRE); //get a list of all the column names, so we can find which data goes in that column vector<string> columnNames; m_ListBoxes[girllist_id]->GetColumnNames(columnNames); int numColumns = columnNames.size(); string* Data = new string[numColumns]; // Add girls to list for (int i = 0; i<g_Centre.GetNumGirls(g_CurrCentre); i++) { sGirl* gir = g_Centre.GetGirl(g_CurrCentre, i); if (selected_girl == gir) selection = i; unsigned int item_color = COLOR_BLUE; if (g_Girls.GetStat(gir, STAT_HEALTH) <= 30 || g_Girls.GetStat(gir, STAT_TIREDNESS) >= 80 || g_Girls.GetStat(gir, STAT_HAPPINESS) <= 30) item_color = COLOR_RED; gir->OutputGirlRow(Data, columnNames); AddToListBox(girllist_id, i, Data, numColumns, item_color); } delete[] Data; lastNum = -1; g_InitWin = false; if (selection >= 0) { while (selection > GetListBoxSize(girllist_id) && selection != -1) selection--; } if (selection >= 0) SetSelectedItemInList(girllist_id, selection); else SetSelectedItemInList(girllist_id, 0); DisableButton(day_id, (Day0Night1 == SHIFT_DAY)); DisableButton(night_id, (Day0Night1 == SHIFT_NIGHT)); update_image(); }
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 Centre - Rehab_Job - Full_Time_Job bool cJobManager::WorkCounselor(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { // `J` changed "Drug Counselor" to just "Counselor" so she can help the other therapy patients int actiontype = ACTION_WORKCOUNSELOR; bool SkipDisobey = (summary == "SkipDisobey"); girl->m_DayJob = girl->m_NightJob = JOB_COUNSELOR; // it is a full time job stringstream ss; string girlName = girl->m_Realname; ss << girlName; int roll_a = g_Dice.d100(); if (!SkipDisobey) // `J` skip the disobey check because it has already been done in the building flow { if (roll_a <= 50 && g_Girls.DisobeyCheck(girl, actiontype, brothel)) { ss << "She refused to counsel anyone."; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); g_Girls.UpdateEnjoyment(girl, ACTION_WORKREHAB, -1); return true; } } ss << " counceled patients.\n\n"; g_Girls.UnequipCombat(girl); // not for doctor int wages = 25; int enjoy = 0; /* */if (roll_a <= 10) { enjoy -= g_Dice % 3 + 1; ss << "The addicts hasseled her."; } else if (roll_a >= 90) { enjoy += g_Dice % 3 + 1; ss << "She had a pleasant time working."; } else /* */ { enjoy += g_Dice % 2; ss << "Otherwise, the shift passed uneventfully."; } girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, Day0Night1); int rehabers = g_Centre.GetNumGirlsOnJob(0, JOB_REHAB, Day0Night1); // work out the pay between the house and the girl int roll_max = girl->spirit() + girl->intelligence(); roll_max /= 4; wages += 10 + g_Dice%roll_max; wages += 5 * rehabers; // `J` pay her 5 for each patient you send to her girl->m_Pay = wages; // Improve stats int xp = 5 + (rehabers / 2), skill = 2 + (rehabers / 2), libido = 1; 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; } g_Girls.UpdateStat(girl, STAT_EXP, xp); g_Girls.UpdateStat(girl, STAT_CHARISMA, (g_Dice%skill) + 1); g_Girls.UpdateSkill(girl, SKILL_SERVICE, (g_Dice%skill) + 1); 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 == SHIFT_NIGHT); //lose traits g_Girls.PossiblyLoseExistingTrait(girl, "Nervous", 30, actiontype, girl->m_Realname + " seems to finally be getting over her shyness. She's not always so Nervous anymore.", Day0Night1 == SHIFT_NIGHT); return false; }