void cScreenMovieMaker::init() { g_CurrentScreen = SCREEN_CREATEMOVIE; if(!g_InitWin) return; Focused(); g_InitWin = false; // clear the lists ClearListBox(sceneslist_id); //get a list of all the column names, so we can find which data goes in that column vector<string> columnNames; m_ListBoxes[sceneslist_id]->GetColumnNames(columnNames); int numColumns = columnNames.size(); string* Data = new string[numColumns]; // Add scene to list for(int i=0; i<g_Studios.GetNumScenes(); i++) { sMovieScene* scene = g_Studios.GetScene(i); //if (selected_girl == gir) // selection = i; unsigned int item_color = COLOR_BLUE; scene->OutputSceneRow(Data, columnNames); AddToListBox(sceneslist_id, i, Data, numColumns, item_color); } delete [] Data; lastNum = -1; g_InitWin = false; }
/* * 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 cScreenMovieMaker::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 it's the back button, pop the window off the stack and we're done if(g_InterfaceEvents.CheckButton(releasemovie_id)) { g_InitWin = true; g_WinManager.Pop(); g_Studios.ReleaseCurrentMovie(); 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_studio(int StudioNum) { // player clicked on one of the brothels if (g_Studios.GetNumBrothels() == StudioNum) { // player doesn't own this Studio... can he buy it? static_brothel_data *bck = studio_data + StudioNum; 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); BuyStudio = StudioNum; } } else { // player owns this brothel... go to it g_Building = BUILDING_STUDIO; g_CurrStudio = StudioNum; g_WinManager.push("Movie Screen"); } }
// `J` Job Movie Studio - Actress bool cJobManager::WorkFilmAnal(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { int actiontype = ACTION_WORKMOVIE; // No film crew.. then go home // `J` this will be taken care of in building flow, leaving it in for now if (g_Studios.GetNumGirlsOnJob(0, JOB_CAMERAMAGE, SHIFT_NIGHT) == 0 || g_Studios.GetNumGirlsOnJob(0, JOB_CRYSTALPURIFIER, SHIFT_NIGHT) == 0) { girl->m_Events.AddMessage("There was no crew to film the scene, so she took the day off", IMGTYPE_PROFILE, EVENT_NOWORK); return false; } stringstream ss; string girlName = girl->m_Realname; int wages = 50; int enjoy = 0; int finalqual = 0; int jobperformance = 0; g_Girls.UnequipCombat(girl); // not for actress (yet) ss << girlName << " worked as an actress filming anal scenes.\n\n"; int roll = g_Dice.d100(); if (roll <= 10 && (g_Girls.DisobeyCheck(girl, ACTION_WORKMOVIE, brothel) || g_Girls.DisobeyCheck(girl, ACTION_SEX, brothel))) { ss << "She refused to do anal on film today.\n"; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); return true; } else if (roll <= 10) { enjoy -= g_Dice % 3 + 1; ss << "She didn't like having a c**k up her ass today.\n\n"; } else if (roll >= 90) { enjoy += g_Dice % 3 + 1; ss << "She loved having her ass pounded today.\n\n"; } else /* */{ enjoy += g_Dice % 2; ss << "She had a pleasant day letting her co-star slip his c**k into her butt.\n\n"; } jobperformance = enjoy * 2; if (g_Girls.CheckVirginity(girl)) { jobperformance += 20; ss << "She is a virgin.\n"; } // remaining modifiers are in the AddScene function --PP finalqual = g_Studios.AddScene(girl, SKILL_ANAL, jobperformance); ss << "Her scene is valued at: " << finalqual << " gold."; girl->m_Events.AddMessage(ss.str(), IMGTYPE_ANAL, Day0Night1); // work out the pay between the house and the girl if (girl->is_slave() && !cfg.initial.slave_pay_outofpocket()) { wages = 0; // You own her so you don't have to pay her. } else { wages += finalqual * 2; } girl->m_Pay = wages; // Improve stats int xp = 10, skill = 3; if (g_Girls.HasTrait(girl, "Quick Learner")) { skill += 1; xp += 3; } else if (g_Girls.HasTrait(girl, "Slow Learner")) { skill -= 1; xp -= 3; } g_Girls.UpdateStat(girl, STAT_EXP, xp); g_Girls.UpdateSkill(girl, SKILL_PERFORMANCE, g_Dice%skill); g_Girls.UpdateSkill(girl, SKILL_ANAL, g_Dice%skill + 1); g_Girls.UpdateEnjoyment(girl, ACTION_SEX, enjoy); g_Girls.UpdateEnjoyment(girl, ACTION_WORKMOVIE, enjoy); //gain g_Girls.PossiblyGainNewTrait(girl, "Fake O****m Expert", 50, ACTION_SEX, "She has become quite the faker.", Day0Night1); g_Girls.PossiblyGainNewTrait(girl, "S**t", 80, ACTION_SEX, girlName + " has turned into quite a s**t.", Day0Night1); g_Girls.PossiblyGainNewTrait(girl, "P**n Star", 80, ACTION_WORKMOVIE, "She has performed in enough sex scenes that she has become a well known P**n Star.", Day0Night1); //lose return false; }
// Job Movie Studio - // nice Job - Action Scene //This film will use her combat and magic skills, and will be more popular if she's hot. bool cJobManager::WorkFilmAction(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { int actiontype = ACTION_WORKMOVIE; //Taken care of in building flow, leaving it in for robustness if (g_Studios.GetNumGirlsOnJob(0, JOB_CAMERAMAGE, SHIFT_NIGHT) == 0 || g_Studios.GetNumGirlsOnJob(0, JOB_CRYSTALPURIFIER, SHIFT_NIGHT) == 0) { girl->m_Events.AddMessage("There was no crew to film the scene, so she took the day off", IMGTYPE_PROFILE, EVENT_NOWORK); return false; } stringstream ss; string girlName = girl->m_Realname; int wages = 50; int tips = 0; int enjoy = 0; int bonus = 0; double jobperformance = JP_FilmAction(girl, false); //g_Girls.UnequipCombat(girl); // not for actress (yet) ss << girlName; int roll = g_Dice.d100(); if (roll <= 10 && g_Girls.DisobeyCheck(girl, ACTION_WORKMOVIE, brothel)) { ss << " refused to shoot an action scenes today.\n"; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); return true; } else if (g_Girls.GetStat(girl, STAT_TIREDNESS) > 75) { ss << " was too tired to take part in an action scene.\n\n"; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); return true; } else ss << " worked as an actress in an action scene.\n\n"; //JOB ss << girlName; int OPTIONS = 3; //Right now this number of options applies for all levels of job if (jobperformance >= 350) { ss << " made an outstanding action scene,"; AddStory(&ss); ss << " It will definitely win her some fans."; g_Girls.UpdateStat(girl, STAT_FAME, 3); bonus = 12; } else if (jobperformance >= 245) { ss << " made a great action scene,"; AddStory(&ss); ss << " It should win her some fans."; g_Girls.UpdateStat(girl, STAT_FAME, 2); bonus = 6; } else if (jobperformance >= 185) { ss << " made a fairly good action scene,"; AddStory(&ss); ss << " Her fans will enjoy it."; bonus = 4; g_Girls.UpdateStat(girl, STAT_FAME, 1); } else if (jobperformance >= 145) { ss << " made an uninspired action scene,"; AddStory(&ss); ss << " Her diehard fans might enjoy it."; bonus = 2; } else if (jobperformance >= 100) { ss << " made a weak action scene,"; AddStory(&ss); bonus = 1; ss << "\nThe CamerMage advised " << girlName << " how to improve her performance"; if (g_Dice.percent(40)) { ss << " and her scene got a little better after this."; bonus++; } else { ss << ", but she wouldn't listen."; } } else { ss << " made an awful action scene,"; AddStory(&ss); ss << " Even her fans will hate it."; g_Girls.UpdateStat(girl, STAT_FAME, -1); } ss << "\n"; //Enjoyed? If she performed well, she'd should have enjoyed it. if (jobperformance >= 200) { enjoy += (g_Dice % 3 + 1); ss << "She loved performing on film today.\n\n"; } else if (jobperformance >= 100) { enjoy += g_Dice % 2; ss << "She enjoyed this performance.\n\n"; } else { enjoy -= (g_Dice % 3 + 2); ss << "She found this awkward and did not enjoy it.\n\n"; } // remaining modifiers are in the AddScene function --PP int finalqual = g_Studios.AddScene(girl, JOB_FILMACTION, bonus); ss << "Her scene is valued at: " << finalqual << " gold.\n"; girl->m_Events.AddMessage(ss.str(), IMGTYPE_COMBAT, Day0Night1); // work out the pay between the house and the girl if (girl->is_slave() && !cfg.initial.slave_pay_outofpocket()) { wages = 0; // You own her so you don't have to pay her. } else { wages += finalqual * 2; } girl->m_Tips = max(0, tips); girl->m_Pay = max(0, wages); // Improve stats int xp = 10, skill = 3, libido = 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, xp); g_Girls.UpdateSkill(girl, SKILL_PERFORMANCE, g_Dice%skill); g_Girls.UpdateSkill(girl, SKILL_COMBAT, g_Dice%skill + 1); g_Girls.UpdateSkill(girl, SKILL_MAGIC, g_Dice%skill + 1); g_Girls.UpdateStatTemp(girl, STAT_LIBIDO, libido); g_Girls.UpdateEnjoyment(girl, ACTION_COMBAT, enjoy); g_Girls.UpdateEnjoyment(girl, ACTION_WORKMOVIE, enjoy); //gain traits if (jobperformance >= 140 && g_Dice.percent(50)) { if (g_Girls.PossiblyGainNewTrait(girl, "Brawler", 60, ACTION_COMBAT, "She has performed in enough fight scenes that she has become quite a brawler.", Day0Night1)); else if (g_Girls.PossiblyGainNewTrait(girl, "Tough", 70, ACTION_COMBAT, "She has performed in enough fight scenes that she has become quite tough.", Day0Night1)); else if (g_Girls.PossiblyGainNewTrait(girl, "Agile", 80, ACTION_COMBAT, "She has performed martial arts scenes that she is becoming agile.", Day0Night1)); else (g_Girls.PossiblyGainNewTrait(girl, "Fleet of Foot", 90, ACTION_COMBAT, "She has performed so many action scenes that she has become fast on her feet.", Day0Night1)); } if (jobperformance >= 140 && g_Dice.percent(50)) { if (g_Girls.PossiblyGainNewTrait(girl, "Charismatic", 60, ACTION_WORKMOVIE, "She has performed in enough movie scenes that she has become charismatic.", Day0Night1)); else if (g_Girls.PossiblyGainNewTrait(girl, "Actress", 70, ACTION_WORKMOVIE, "She has performed in enough movie scenes that she has become a good actress.", Day0Night1)); else g_Girls.PossiblyGainNewTrait(girl, "Sexy Air", 80, ACTION_WORKSTRIP, girlName + " has been having to be sexy for so long she now reeks sexiness.", Day0Night1); } // nice job bonus------------------------------------------------------- //BONUS - Nice jobs show off her assets and make her happy, increasing fame and love. int MrNiceGuy = g_Dice % 6, MrFair = g_Dice % 6; MrNiceGuy = (MrNiceGuy + MrFair)/3; //Should come out around 1-2 most of the time. g_Girls.UpdateStat(girl, STAT_HAPPINESS, MrNiceGuy); g_Girls.UpdateStat(girl, STAT_FAME, MrNiceGuy); g_Girls.UpdateStat(girl, STAT_PCLOVE, MrNiceGuy); g_Girls.UpdateStat(girl, STAT_PCHATE, -MrNiceGuy); g_Girls.UpdateStat(girl, STAT_PCFEAR, -MrNiceGuy); The_Player->disposition(MrNiceGuy); //---------------------------------------------------------------------- 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 Movie Studio - Actress bool cJobManager::WorkFilmBeast(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { int actiontype = ACTION_WORKMOVIE; // No film crew.. then go home // `J` this will be taken care of in building flow, leaving it in for now if (g_Studios.GetNumGirlsOnJob(0, JOB_CAMERAMAGE, SHIFT_NIGHT) == 0 || g_Studios.GetNumGirlsOnJob(0, JOB_CRYSTALPURIFIER, SHIFT_NIGHT) == 0) { girl->m_Events.AddMessage("There was no crew to film the scene, so she took the day off", IMGTYPE_PROFILE, EVENT_NOWORK); return false; } cConfig cfg; stringstream ss; string girlName = girl->m_Realname; int wages = 50; int enjoy = 0; int jobperformance = 0; g_Girls.UnequipCombat(girl); // not for actress (yet) ss << girlName << " worked as an actress filming scenes with beasts.\n\n"; int roll = g_Dice.d100(); if (roll <= 10 && g_Girls.DisobeyCheck(girl, ACTION_WORKMOVIE, brothel)) { ss << "She refused to f**k any beasts on film today.\n"; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); return true; } else if (roll <= 10) { enjoy -= g_Dice % 3 + 1; ss << "She didn't enjoy letting the creature f**k her.\n\n"; } else if (roll >= 90) { enjoy += g_Dice % 3 + 1; ss << "She loved the feel of the creature on top of her.\n\n"; } else /* */{ enjoy += g_Dice % 2; ss << "She didn't do much else today.\n\n"; } jobperformance = enjoy * 2; if (g_Girls.CheckVirginity(girl)) { g_Girls.LoseVirginity(girl); // `J` updated for trait/status jobperformance += 50; ss << "She is no longer a virgin.\n"; } // remaining modifiers are in the AddScene function --PP int finalqual = g_Studios.AddScene(girl, SKILL_BEASTIALITY, jobperformance); ss << "Her scene is valued at: " << finalqual << " gold.\n"; // mod: added check for number of beasts owned; otherwise, fake beasts could somehow inseminate the girl if (g_Brothels.GetNumBeasts() > 0) { if (!girl->calc_insemination(g_Brothels.GetPlayer(), false, 1.0)) g_MessageQue.AddToQue(girl->m_Realname + " has gotten inseminated", 0); } girl->m_Events.AddMessage(ss.str(), IMGTYPE_BEAST, Day0Night1); // work out the pay between the house and the girl if (girl->is_slave() && !cfg.initial.slave_pay_outofpocket()) { wages = 0; // You own her so you don't have to pay her. } else { wages += finalqual * 2; } girl->m_Pay = wages; // Improve stats int xp = 10, skill = 3; if (g_Girls.HasTrait(girl, "Quick Learner")) { skill += 1; xp += 3; } else if (g_Girls.HasTrait(girl, "Slow Learner")) { skill -= 1; xp -= 3; } g_Girls.UpdateStat(girl, STAT_EXP, xp); g_Girls.UpdateSkill(girl, SKILL_PERFORMANCE, g_Dice%skill); g_Girls.UpdateSkill(girl, SKILL_BEASTIALITY, g_Dice%skill + 1); g_Girls.UpdateEnjoyment(girl, ACTION_SEX, enjoy); g_Girls.UpdateEnjoyment(girl, ACTION_WORKMOVIE, enjoy); g_Girls.PossiblyGainNewTrait(girl, "Fake O****m Expert", 50, ACTION_SEX, "She has become quite the faker.", Day0Night1); g_Girls.PossiblyGainNewTrait(girl, "P**n Star", 80, ACTION_WORKMOVIE, "She has performed in enough sex scenes that she has become a well known P**n Star.", Day0Night1); return false; }
// `J` Job Movie Studio - Crew - job_is_cleaning bool cJobManager::WorkFilmStagehand(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { int actiontype = ACTION_WORKMOVIE; 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, ACTION_WORKMOVIE, brothel) || g_Girls.DisobeyCheck(girl, ACTION_WORKCLEANING, brothel))) { ss << " refused to work as a stagehand today."; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); return true; } ss << " worked as a stagehand.\n\n"; cConfig cfg; g_Girls.UnequipCombat(girl); // not for studio crew int wages = 50; int enjoyc = 0, enjoym = 0; bool filming = true; bool playtime = false; int imagetype = IMGTYPE_PROFILE; // `J` - jobperformance and CleanAmt need to be worked out specially for this job. int jobperformance = 0; int CleanAmt = ((g_Girls.GetSkill(girl, SKILL_SERVICE) / 10) + 5) * 5; if (g_Studios.GetNumGirlsOnJob(0, JOB_CAMERAMAGE, SHIFT_NIGHT) == 0 || g_Studios.GetNumGirlsOnJob(0, JOB_CRYSTALPURIFIER, SHIFT_NIGHT) == 0 || g_Studios.Num_Actress(0) < 1) { ss << "There were no scenes being filmed, so she just cleaned the set.\n\n"; filming = false; CleanAmt *= 2; imagetype = IMGTYPE_MAID; } if (g_Girls.HasTrait(girl, "Director")) { CleanAmt -= 10; jobperformance += 15; } if (g_Girls.HasTrait(girl, "Actress")) { CleanAmt += 0; jobperformance += 10; } if (g_Girls.HasTrait(girl, "P**n Star")) { CleanAmt += 0; jobperformance += 5; } if (g_Girls.HasTrait(girl, "Flight")) { CleanAmt += 20; jobperformance += 10; } if (g_Girls.HasTrait(girl, "Maid")) { CleanAmt += 20; jobperformance += 2; } if (g_Girls.HasTrait(girl, "Powerful Magic")) { CleanAmt += 10; jobperformance += 10; } if (g_Girls.HasTrait(girl, "Strong Magic")) { CleanAmt += 5; jobperformance += 5; } if (g_Girls.HasTrait(girl, "Handyman")) { CleanAmt += 5; jobperformance += 10; } if (g_Girls.HasTrait(girl, "Waitress")) { CleanAmt += 5; jobperformance += 5; } if (g_Girls.HasTrait(girl, "Agile")) { CleanAmt += 5; jobperformance += 10; } if (g_Girls.HasTrait(girl, "Fleet of Foot")) { CleanAmt += 2; jobperformance += 5; } if (g_Girls.HasTrait(girl, "Strong")) { CleanAmt += 5; jobperformance += 10; } if (g_Girls.HasTrait(girl, "Assassin")) { CleanAmt += 1; jobperformance += 1; } if (g_Girls.HasTrait(girl, "Psychic")) { CleanAmt += 2; jobperformance += 5; } if (g_Girls.HasTrait(girl, "Manly")) { CleanAmt += 1; jobperformance += 1; } if (g_Girls.HasTrait(girl, "Tomboy")) { CleanAmt += 2; jobperformance += 2; } if (g_Girls.HasTrait(girl, "Optimist")) { CleanAmt += 1; jobperformance += 1; } if (g_Girls.HasTrait(girl, "Sharp-Eyed")) { CleanAmt += 1; jobperformance += 5; } if (g_Girls.HasTrait(girl, "Giant")) { CleanAmt += 2; jobperformance += 2; } if (g_Girls.HasTrait(girl, "Prehensile Tail")) { CleanAmt += 3; jobperformance += 3; } if (g_Girls.HasTrait(girl, "Blind")) { CleanAmt -= 20; jobperformance -= 20; } if (g_Girls.HasTrait(girl, "Queen")) { CleanAmt -= 20; jobperformance -= 10; } if (g_Girls.HasTrait(girl, "Princess")) { CleanAmt -= 10; jobperformance -= 5; } if (g_Girls.HasTrait(girl, "Mind F****d")) { CleanAmt -= 10; jobperformance -= 5; } if (g_Girls.HasTrait(girl, "Bimbo")) { CleanAmt -= 5; jobperformance -= 5; } if (g_Girls.HasTrait(girl, "Retarded")) { CleanAmt -= 5; jobperformance -= 5; } if (g_Girls.HasTrait(girl, "Smoker")) { CleanAmt -= 1; jobperformance -= 1; } if (g_Girls.HasTrait(girl, "Clumsy")) { CleanAmt -= 5; jobperformance -= 5; } if (g_Girls.HasTrait(girl, "Delicate")) { CleanAmt -= 1; jobperformance -= 1; } if (g_Girls.HasTrait(girl, "Elegant")) { CleanAmt -= 5; jobperformance -= 1; } if (g_Girls.HasTrait(girl, "Malformed")) { CleanAmt -= 1; jobperformance -= 1; } if (g_Girls.HasTrait(girl, "Massive Melons")) { CleanAmt -= 1; jobperformance -= 1; } if (g_Girls.HasTrait(girl, "Abnormally Large Boobs")) { CleanAmt -= 3; jobperformance -= 1; } if (g_Girls.HasTrait(girl, "Titanic T**s")) { CleanAmt -= 5; jobperformance -= 1; } if (g_Girls.HasTrait(girl, "Broken Will")) { CleanAmt -= 5; jobperformance -= 10; } if (g_Girls.HasTrait(girl, "Pessimist")) { CleanAmt -= 1; jobperformance -= 1; } if (g_Girls.HasTrait(girl, "Meek")) { CleanAmt -= 2; jobperformance -= 2; } if (g_Girls.HasTrait(girl, "Nervous")) { CleanAmt -= 2; jobperformance -= 3; } if (g_Girls.HasTrait(girl, "Dependant")) { CleanAmt -= 5; jobperformance -= 5; } if (g_Girls.HasTrait(girl, "Bad Eyesight")) { CleanAmt -= 5; jobperformance -= 5; } if (roll_a <= 10) { enjoyc -= g_Dice % 3 + 1; if (filming) enjoym -= g_Dice % 3 + 1; CleanAmt = int(CleanAmt * 0.8); ss << "She did not like working in the studio today."; } else if (roll_a >= 90) { enjoyc += g_Dice % 3 + 1; if (filming) enjoym += g_Dice % 3 + 1; CleanAmt = int(CleanAmt * 1.1); ss << "She had a great time working today."; } else { enjoyc += max(0, g_Dice % 3 - 1); if (filming) enjoym += max(0, g_Dice % 3 - 1); ss << "Otherwise, the shift passed uneventfully."; } jobperformance += enjoyc + enjoym; ss << "\n\n"; if (filming) { jobperformance += (((girl->spirit() - 50) / 10) + ((girl->intelligence() - 50) / 10) + (girl->service() / 10)) / 3; jobperformance += g_Girls.GetStat(girl, STAT_LEVEL); jobperformance += g_Dice % 4 - 1; // should add a -1 to +3 random element --PP if (jobperformance > 0) { jobperformance = max(1, jobperformance / 10); ss << "She helped improve the scene " << (int)jobperformance << "% with her production skills."; } else if (jobperformance < 0) { jobperformance = min(-1, jobperformance / 10); ss << "She did a bad job today, reduceing the scene quality " << (int)jobperformance << "% with her poor performance."; } else ss << "She did not really help the scene quality."; 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 = int(CleanAmt * 0.9); wages = 0; } else if (filming) { wages += CleanAmt + jobperformance; } else { wages += CleanAmt; } ss << gettext("Cleanliness rating improved by ") << CleanAmt; if (!filming && brothel->m_Filthiness < CleanAmt / 2) // `J` needs more variation { ss << "\n\n" << girlName << " finished her cleaning early so she hung out around the Studio a bit."; g_Girls.UpdateStatTemp(girl, STAT_LIBIDO, g_Dice % 3 + 1); g_Girls.UpdateStat(girl, STAT_HAPPINESS, g_Dice % 3 + 1); } girl->m_Events.AddMessage(ss.str(), imagetype, SHIFT_NIGHT); if (filming) g_Studios.m_StagehandQuality += jobperformance; brothel->m_Filthiness -= CleanAmt; girl->m_Pay = wages; // Improve girl int xp = filming ? 10 : 5, skill = 3, libido = 1; if (enjoyc + enjoym > 2) { xp += 1; skill += 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.UpdateSkill(girl, SKILL_SERVICE, (g_Dice % skill) + 2); g_Girls.UpdateStatTemp(girl, STAT_LIBIDO, libido); if (filming) g_Girls.UpdateEnjoyment(girl, ACTION_WORKMOVIE, enjoym); g_Girls.UpdateEnjoyment(girl, ACTION_WORKCLEANING, enjoyc); //lose traits g_Girls.PossiblyLoseExistingTrait(girl, "Clumsy", 30, ACTION_WORKCLEANING, "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; }
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 Movie Studio - Actress bool cJobManager::WorkFilmBondage(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { int actiontype = ACTION_WORKMOVIE; // No film crew.. then go home // `J` this will be taken care of in building flow, leaving it in for now if (g_Studios.GetNumGirlsOnJob(0, JOB_CAMERAMAGE, SHIFT_NIGHT) == 0 || g_Studios.GetNumGirlsOnJob(0, JOB_CRYSTALPURIFIER, SHIFT_NIGHT) == 0) { girl->m_Events.AddMessage("There was no crew to film the scene, so she took the day off", IMGTYPE_PROFILE, EVENT_NOWORK); return false; } stringstream ss; string girlName = girl->m_Realname; int wages = 50; int enjoy = 0; int jobperformance = 0; g_Girls.UnequipCombat(girl); // not for actress (yet) ss << girlName << " worked as an actress filming BDSM scenes.\n\n"; int roll = g_Dice.d100(); if (roll <= 10 && g_Girls.DisobeyCheck(girl, ACTION_WORKMOVIE, brothel)) { ss << "She refused to get beaten on film today.\n"; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); return true; } else if (roll <= 10) { enjoy -= g_Dice % 3 + 1; ss << "She did not enjoy getting tied up and hurt today.\n\n"; } else if (roll >= 90) { enjoy += g_Dice % 3 + 1; ss << "She had a great time getting spanked and whipped.\n\n"; } else /* */{ enjoy += g_Dice % 2; ss << "She had just another day in the dungeon.\n\n"; } jobperformance = enjoy * 2; if (g_Girls.CheckVirginity(girl)) { g_Girls.LoseVirginity(girl); // `J` updated for trait/status jobperformance += 50; ss << "She is no longer a virgin.\n"; } sCustomer* Cust = new sCustomer; g_Customers.GetCustomer(Cust, brothel); Cust->m_Amount = 1; if (Cust->m_IsWoman) // FemDom { jobperformance += 20; /* */if (girl->has_trait("Lesbian")) jobperformance += 20; else if (girl->has_trait("Straight")) jobperformance -= 20; } else { if (!girl->calc_pregnancy(Cust, false, 0.75)) g_MessageQue.AddToQue(girl->m_Realname + " has gotten pregnant", 0); /* */if (girl->has_trait("Lesbian")) jobperformance -= 10; else if (girl->has_trait("Straight")) jobperformance += 10; } // remaining modifiers are in the AddScene function --PP int finalqual = g_Studios.AddScene(girl, SKILL_BDSM, jobperformance); ss << "Her scene is valued at: " << finalqual << " gold.\n"; girl->m_Events.AddMessage(ss.str(), IMGTYPE_BDSM, Day0Night1); // work out the pay between the house and the girl if (girl->is_slave() && !cfg.initial.slave_pay_outofpocket()) { wages = 0; // You own her so you don't have to pay her. } else { wages += finalqual * 2; } girl->m_Pay = wages; // Improve stats int xp = 10, skill = 3; if (g_Girls.HasTrait(girl, "Quick Learner")) { skill += 1; xp += 3; } else if (g_Girls.HasTrait(girl, "Slow Learner")) { skill -= 1; xp -= 3; } g_Girls.UpdateStat(girl, STAT_EXP, xp); g_Girls.UpdateSkill(girl, SKILL_PERFORMANCE, g_Dice%skill); g_Girls.UpdateSkill(girl, SKILL_BDSM, g_Dice%skill + 1); g_Girls.UpdateEnjoyment(girl, ACTION_SEX, enjoy); g_Girls.UpdateEnjoyment(girl, ACTION_WORKMOVIE, enjoy); //gain g_Girls.PossiblyGainNewTrait(girl, "Fake O****m Expert", 50, ACTION_SEX, "She has become quite the faker.", Day0Night1); g_Girls.PossiblyGainNewTrait(girl, "M*******t", 65, ACTION_SEX, girlName + " has turned into a M*******t from filming so many BDSM scenes.", Day0Night1); g_Girls.PossiblyGainNewTrait(girl, "S**t", 80, ACTION_SEX, girlName + " has turned into quite a s**t.", Day0Night1); g_Girls.PossiblyGainNewTrait(girl, "P**n Star", 80, ACTION_WORKMOVIE, "She has performed in enough sex scenes that she has become a well known P**n Star.", Day0Night1); //lose delete Cust; return false; }
// `J` Job Movie Studio - Crew bool cJobManager::WorkCrystalPurifier(sGirl* girl, sBrothel* brothel, bool Day0Night1, string& summary) { int actiontype = ACTION_WORKMOVIE; bool SkipDisobey = (summary == "SkipDisobey"); stringstream ss; string girlName = girl->m_Realname; // No film crew.. then go home // `J` this will be taken care of in building flow, leaving it in for now if (g_Studios.GetNumGirlsOnJob(0, JOB_CAMERAMAGE, SHIFT_NIGHT) == 0 || g_Studios.GetNumGirlsOnJob(0, JOB_CRYSTALPURIFIER, SHIFT_NIGHT) == 0) { girl->m_Events.AddMessage("There was no crew to film the scene, so she took the day off", IMGTYPE_PROFILE, EVENT_NOWORK); return false; // not refusing } else if (g_Studios.Num_Actress(0) < 1) { girl->m_Events.AddMessage("There were no actresses to film, so she took the day off", IMGTYPE_PROFILE, EVENT_NOWORK); return false; // not refusing } // `J` added this to allow the Director to assign someone to this job without making it permanent if (girl->m_DayJob == JOB_FILMFREETIME) // the director sets the old job to dayjob when changing night job { ss << girlName << " was assigned to work as a crystal purifier"; } else { ss << "The Director assigned " << girlName << "to edit the scenes for the week"; } g_Girls.UnequipCombat(girl); // not for studio crew int roll = g_Dice.d100(); if (!SkipDisobey) // `J` skip the disobey check because it has already been done in the building flow { if (roll <= 10 && g_Girls.DisobeyCheck(girl, actiontype, brothel)) { if (girl->m_DayJob == JOB_FILMFREETIME) { ss << " but she refused to work."; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_NOWORK); } else { ss << " but " << girlName; if (g_Studios.is_Actress_Job(girl->m_DayJob)) ss << " wanted to be part of the action instead of just watching it.\n"; else if (girl->m_DayJob == JOB_PROMOTER) ss << " preferred to sell the movies rather than edit them.\n"; else if (girl->m_DayJob == JOB_FLUFFER) ss << " wanted to see the action live instead of watching it afterwards.\n"; else if (girl->m_DayJob == JOB_STAGEHAND) ss << " wanted to clean instead of editing scenes.\n"; else if (girl->m_DayJob == JOB_CAMERAMAGE) ss << " preferred to film the scenes rather than edit them.\n"; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, EVENT_BACKTOWORK); } return true; } } ss << ".\n\n"; int wages = 50; int enjoy = 0; if (roll <= 10) { enjoy -= g_Dice % 3 + 1; ss << "She did not like working in the studio today.\n\n"; } else if (roll >= 90) { enjoy += g_Dice % 3 + 1; ss << "She had a great time working today.\n\n"; } else { enjoy += g_Dice % 2; ss << "Otherwise, the shift passed uneventfully.\n\n"; } double jobperformance = JP_CrystalPurifier(girl, false); jobperformance += enjoy * 2; // 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())) { jobperformance *= 0.9; wages = 0; } else // work out the pay between the house and the girl { // `J` zzzzzz - need to change pay so it better reflects how well she edited the films wages += 20; int roll_max = girl->spirit() + girl->intelligence(); roll_max /= 4; wages += 10 + g_Dice%roll_max; } /* */if (jobperformance > 0) ss << "She helped improve the scene " << (int)jobperformance << "% with her production skills. \n"; else if (jobperformance < 0) ss << "She did a bad job today, she reduced the scene quality " << (int)jobperformance << "% with her poor performance. \n"; else /* */ ss << "She did not really help the scene quality.\n"; girl->m_Events.AddMessage(ss.str(), IMGTYPE_PROFILE, Day0Night1); g_Studios.m_PurifierQaulity += (int)jobperformance; girl->m_Pay = wages; // Improve stats int xp = 5, skill = 3, libido = 1; if (jobperformance > 5) skill += 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; } if (g_Dice % 2 == 1) g_Girls.UpdateStat(girl, STAT_INTELLIGENCE, g_Dice%skill); g_Girls.UpdateSkill(girl, SKILL_SERVICE, g_Dice%skill + 1); g_Girls.UpdateStat(girl, STAT_EXP, xp); g_Girls.UpdateStatTemp(girl, STAT_LIBIDO, libido); return false; }