// `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; }
// `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; }