diff --git a/C000_Intro/CreatePlayer/Script.js b/C000_Intro/CreatePlayer/Script.js index 5a90da2d3a..c58586b1cd 100644 --- a/C000_Intro/CreatePlayer/Script.js +++ b/C000_Intro/CreatePlayer/Script.js @@ -1,4 +1,6 @@ var C000_Intro_CreatePlayer_ChapterToLoad = "C001_BeforeClass"; +var C000_Intro_CreatePlayer_SkillCount = 5; +var C000_Intro_CreatePlayer_ControlLoaded = false; // Create Player Load function C000_Intro_CreatePlayer_Load() { @@ -7,31 +9,48 @@ function C000_Intro_CreatePlayer_Load() { LeaveIcon = ""; LeaveScreen = ""; LoadText(); - - // Creates a text box to enter the player name - var InputName = document.createElement('input'); - InputName.setAttribute("ID", "InputName"); - InputName.setAttribute("name", "InputName"); - InputName.setAttribute("type", "text"); - InputName.setAttribute("value", ""); - InputName.setAttribute("maxlength", "20"); - InputName.setAttribute("style", "font-size:24px; font-family:Arial; position:fixed; padding-left:10px; left:200px; top:300px; width:500px; height:50px;"); - InputName.addEventListener("keypress", KeyDown); - document.body.appendChild(InputName); - InputName.focus(); - + } // Create Player Run function C000_Intro_CreatePlayer_Run() { + + // If we load the controls + if ((C000_Intro_CreatePlayer_ControlLoaded == false) && (GetText("Skill" + C000_Intro_CreatePlayer_SkillCount.toString()) != "")) { + + // Creates a text box to enter the player name + var InputName = document.createElement('input'); + InputName.setAttribute("ID", "InputName"); + InputName.setAttribute("name", "InputName"); + InputName.setAttribute("type", "text"); + InputName.setAttribute("value", ""); + InputName.setAttribute("maxlength", "20"); + InputName.setAttribute("style", "font-size:24px; font-family:Arial; position:absolute; padding-left:10px; left:200px; top:240px; width:500px; height:50px;"); + InputName.addEventListener("keypress", KeyDown); + document.body.appendChild(InputName); + InputName.focus(); + + // Creates a select box to pick a starting skill + var SelectSkill = document.createElement('select'); + SelectSkill.setAttribute("ID", "SelectSkill"); + SelectSkill.setAttribute("name", "SelectSkill"); + SelectSkill.setAttribute("style", "font-size:24px; font-family:Arial; position:absolute; padding-left:10px; left:300px; top:320px; width:300px; height:50px;"); + for(var S = 0; S <= 5; S++) + SelectSkill.appendChild(new Option(GetText("Skill" + S.toString()), S.toString())); + document.body.appendChild(SelectSkill); + C000_Intro_CreatePlayer_ControlLoaded = true; + + } // Draw the player image and the text input for the name var ctx = document.getElementById("MainCanvas").getContext("2d"); DrawImage(ctx, CurrentChapter + "/" + CurrentScreen + "/Player.jpg", 900, 0); DrawRect(ctx, 0, 0, 900, 600, "white"); - DrawRect(ctx, 300, 430, 300, 70, "#8c304e"); DrawText(ctx, GetText("EnterName"), 450, 100, "black"); - DrawText(ctx, GetText("ValidChars"), 450, 200, "black"); + DrawText(ctx, GetText("ValidChars"), 450, 180, "black"); + + // Creates the "validate" button + DrawRect(ctx, 300, 430, 300, 70, "#8c304e"); DrawText(ctx, GetText("Validate"), 450, 465, "white"); } @@ -39,17 +58,25 @@ function C000_Intro_CreatePlayer_Run() { // Validate the name and starts the game function C000_Intro_CreatePlayer_Validate() { var NewName = document.getElementById("InputName").value.trim(); + var StartingSkill = document.getElementById("SelectSkill").value.trim(); var letters = /^[a-zA-Z ]+$/; if (NewName.match(letters) && (NewName.length > 0) && (NewName.length <= 20)) { + if (StartingSkill == "1") PlayerAddSkill("Arts", 1); + if (StartingSkill == "2") PlayerAddSkill("Fighting", 1); + if (StartingSkill == "3") PlayerAddSkill("RopeMastery", 1); + if (StartingSkill == "4") PlayerAddSkill("Sports", 1); + if (StartingSkill == "5") PlayerAddSkill("Seduction", 1); + PlayerSkillShowLevelUp = 0; Common_PlayerName = NewName; document.getElementById("InputName").parentNode.removeChild(document.getElementById("InputName")); + document.getElementById("SelectSkill").parentNode.removeChild(document.getElementById("SelectSkill")); SetScene(C000_Intro_CreatePlayer_ChapterToLoad, "Intro"); } } // Create Player Key Down function C000_Intro_CreatePlayer_KeyDown() { - if (KeyPress == 13) C000_Intro_CreatePlayer_Validate(); + //if (KeyPress == 13) C000_Intro_CreatePlayer_Validate(); } // Create Player Click diff --git a/C000_Intro/CreatePlayer/Text_CN.csv b/C000_Intro/CreatePlayer/Text_CN.csv index f925fb59b7..bda6ae82fd 100644 --- a/C000_Intro/CreatePlayer/Text_CN.csv +++ b/C000_Intro/CreatePlayer/Text_CN.csv @@ -1,4 +1,10 @@ Tag,Content -EnterName,Enter a name for your character. +EnterName,Enter a name and select a skill for your character. ValidChars,You can only use letters & spaces. Validate,Start the game +Skill0,No skill +Skill1,Arts +Skill2,Fighting +Skill3,Rope Mastery +Skill4,Sports +Skill5,Seduction diff --git a/C000_Intro/CreatePlayer/Text_EN.csv b/C000_Intro/CreatePlayer/Text_EN.csv index f925fb59b7..bda6ae82fd 100644 --- a/C000_Intro/CreatePlayer/Text_EN.csv +++ b/C000_Intro/CreatePlayer/Text_EN.csv @@ -1,4 +1,10 @@ Tag,Content -EnterName,Enter a name for your character. +EnterName,Enter a name and select a skill for your character. ValidChars,You can only use letters & spaces. Validate,Start the game +Skill0,No skill +Skill1,Arts +Skill2,Fighting +Skill3,Rope Mastery +Skill4,Sports +Skill5,Seduction diff --git a/C000_Intro/CreatePlayer/Text_FR.csv b/C000_Intro/CreatePlayer/Text_FR.csv index dac0518c33..ac2bec8175 100644 --- a/C000_Intro/CreatePlayer/Text_FR.csv +++ b/C000_Intro/CreatePlayer/Text_FR.csv @@ -1,4 +1,10 @@ Tag,Content -EnterName,Entrez un nom pour votre personnage. +EnterName,Choisissez un nom et un talent pour votre personnage. ValidChars,Seulement des lettres et des espaces. Validate,Démarrer la partie +Skill0,No skill +Skill1,Arts +Skill2,Combat +Skill3,Maîtrise des Cordes +Skill4,Sports +Skill5,Séduction diff --git a/C000_Intro/CreatePlayer/Text_PL.csv b/C000_Intro/CreatePlayer/Text_PL.csv index fe0fd578b4..9d52bbf888 100644 --- a/C000_Intro/CreatePlayer/Text_PL.csv +++ b/C000_Intro/CreatePlayer/Text_PL.csv @@ -2,3 +2,9 @@ Tag,Content EnterName,Nadaj imi� swojej postaci. ValidChars,Mo�esz u�ywa� wy��cznie liter oraz spacji. Validate,Zacznij gr� +Skill0,No skill +Skill1,Arts +Skill2,Fighting +Skill3,Rope Mastery +Skill4,Sports +Skill5,Seduction diff --git a/C001_BeforeClass/Amanda/Script.js b/C001_BeforeClass/Amanda/Script.js index bb8c73d414..66cdbd29fd 100644 --- a/C001_BeforeClass/Amanda/Script.js +++ b/C001_BeforeClass/Amanda/Script.js @@ -71,11 +71,12 @@ function C001_BeforeClass_Amanda_ConfrontBondage() { C001_BeforeClass_Amanda_BondageNotConfronted = false; } -// Chapter 1 - Amanda Kiss +// Chapter 1 - Amanda Kiss (extra love if the player has seduction) function C001_BeforeClass_Amanda_Kiss() { if (C001_BeforeClass_Amanda_Kiss_Done == false) { C001_BeforeClass_Amanda_Kiss_Done = true; - ActorChangeAttitude(1, 0); + if (PlayerGetSkillLevel("Seduction") >= 1) ActorChangeAttitude(2, 0); + else ActorChangeAttitude(1, 0); OverridenIntroText = GetText("Kiss"); } } diff --git a/C004_ArtClass/Jennifer/Script.js b/C004_ArtClass/Jennifer/Script.js index bccb841428..f31bd8edbf 100644 --- a/C004_ArtClass/Jennifer/Script.js +++ b/C004_ArtClass/Jennifer/Script.js @@ -15,6 +15,7 @@ var C004_ArtClass_Jennifer_PityDone = false; var C004_ArtClass_Jennifer_EggConfirm = false; var C004_ArtClass_Jennifer_EggInside = false; var C004_ArtClass_Jennifer_StunningBeautyReady = true; +var C004_ArtClass_Jennifer_PaintAvail = true; // Chapter 4 - Jennifer Load function C004_ArtClass_Jennifer_Load() { @@ -230,4 +231,20 @@ function C004_ArtClass_Jennifer_PityComment() { function C004_ArtClass_Jennifer_StunningBeauty() { C004_ArtClass_Jennifer_StunningBeautyReady = false; ActorChangeAttitude(1, 0); +} + +// Chapter 4 - Jennifer Paint, can only be done if there's 30 minutes left for the class +function C004_ArtClass_Jennifer_Paint() { + if (CurrentTime <= 9.75 * 60 * 60 * 1000) { + C004_ArtClass_Sarah_PaintAvail = false; + C004_ArtClass_Jennifer_PaintAvail = false; + ActorChangeAttitude(0, 2); + CurrentTime = CurrentTime + 0.5 * 60 * 60 * 1000; + PlayerAddSkill("Arts", 1); + if (PlayerGetSkillLevel("Arts") >= 1) { + ActorSpecificChangeAttitude("Julia", PlayerGetSkillLevel("Arts"), 0); + ActorSpecificChangeAttitude("Sarah", PlayerGetSkillLevel("Arts"), 0); + ActorSpecificChangeAttitude("Jennifer", PlayerGetSkillLevel("Arts"), 0); + } + } else OverridenIntroText = GetText("NoTimeToPaint"); } \ No newline at end of file diff --git a/C004_ArtClass/Jennifer/Stage_EN.csv b/C004_ArtClass/Jennifer/Stage_EN.csv index d2d576124a..0d305f4f44 100644 --- a/C004_ArtClass/Jennifer/Stage_EN.csv +++ b/C004_ArtClass/Jennifer/Stage_EN.csv @@ -42,9 +42,12 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function 130,0,0,,(Tighten the ropes.)|(1 minute),(This bondage is already|as tight as it can be.),130,0,0,Tighten() 130,0,0,,(Tickle her.)|(1 minute),(She cowers in shame|to avoid your tickling.),130,0,0,Tickle() 130,0,0,Common_PlayerNotRestrained,(Untie her.)|(1 minute),(You untie her and she throws the|ropes at you.) Can I go sit now?,120,0,0,Untie() +130,0,0,PaintAvail,(Paint Jennifer.)|(30 minutes),(You carefully paint her and show the result.)|Please destroy this painting once class is over.,130,0,0,Paint() 140,0,0,,(Tighten the ropes.)|(1 minute),(This bondage is already|as tight as it can be.),140,0,0,Tighten() 140,0,0,,(Tickle her.)|(1 minute),(She cowers in shame|to avoid your tickling.),140,0,0,Tickle() 140,0,0,Common_PlayerNotRestrained,(Ungag her.)|(1 minute),(You unbuckle the gag and release it|from her mouth) Can you untie me now?,130,0,0,Ungag() +140,0,0,PaintAvail,(Paint Jennifer.)|(30 minutes),(You carefully paint her and show the result.)|(She looks at your work of art and whimpers.),140,0,0,Paint() 150,0,0,,(Tighten the ropes.)|(1 minute),(This bondage is already|as tight as it can be.),150,0,0,Tighten() 150,0,0,,(Tickle her.)|(1 minute),(She cowers in shame|to avoid your tickling.),150,0,0,Tickle() 150,0,0,Common_PlayerNotRestrained,(Ungag her.)|(1 minute),"(You remove the tape from her mouth.)|Alright, can you untie me now?",130,0,0,Ungag() +150,0,0,PaintAvail,(Paint Jennifer.)|(30 minutes),(You carefully paint her and show the result.)|(She looks at your work of art and whimpers.),150,0,0,Paint() diff --git a/C004_ArtClass/Jennifer/Text_EN.csv b/C004_ArtClass/Jennifer/Text_EN.csv index ee9367eb04..c092ad4022 100644 --- a/C004_ArtClass/Jennifer/Text_EN.csv +++ b/C004_ArtClass/Jennifer/Text_EN.csv @@ -19,3 +19,4 @@ EarnTrust,I'll try to trust you then.|All of this is making me nervous. EggComment,"But, but, but. I, I. Ok.|(She bows her head.)" PlayerUntie,"(She blushes and steps up to untie you.)|Here you go my friend, I bet that was humiliating." PlayerStayTied,(She's too nervous to move up to help you.)|(You need 3 love or more to get help from her.) +NoTimeToPaint,(There's not enough time left in|class to produce a work of art.) diff --git a/C004_ArtClass/Sarah/Script.js b/C004_ArtClass/Sarah/Script.js index 55881dee8e..9989ee0c3e 100644 --- a/C004_ArtClass/Sarah/Script.js +++ b/C004_ArtClass/Sarah/Script.js @@ -18,6 +18,7 @@ var C004_ArtClass_Sarah_EggConfirm = false; var C004_ArtClass_Sarah_EggInside = false; var C004_ArtClass_Sarah_CrotchRopeReady = false; var C004_ArtClass_Sarah_OrgasmDone = false; +var C004_ArtClass_Sarah_PaintAvail = true; // Chapter 4 - Sarah Load function C004_ArtClass_Sarah_Load() { @@ -226,4 +227,20 @@ function C004_ArtClass_Sarah_OrgasmStart() { // Chapter 4 - Sarah Orgasm function C004_ArtClass_Sarah_Orgasm() { ActorAddOrgasm(); +} + +// Chapter 4 - Sarah Paint, can only be done if there's 30 minutes left for the class +function C004_ArtClass_Sarah_Paint() { + if (CurrentTime <= 9.75 * 60 * 60 * 1000) { + C004_ArtClass_Sarah_PaintAvail = false; + C004_ArtClass_Jennifer_PaintAvail = false; + ActorChangeAttitude(1, 1); + CurrentTime = CurrentTime + 0.5 * 60 * 60 * 1000; + PlayerAddSkill("Arts", 1); + if (PlayerGetSkillLevel("Arts") >= 1) { + ActorSpecificChangeAttitude("Julia", PlayerGetSkillLevel("Arts"), 0); + ActorSpecificChangeAttitude("Sarah", PlayerGetSkillLevel("Arts"), 0); + ActorSpecificChangeAttitude("Jennifer", PlayerGetSkillLevel("Arts"), 0); + } + } else OverridenIntroText = GetText("NoTimeToPaint"); } \ No newline at end of file diff --git a/C004_ArtClass/Sarah/Stage_EN.csv b/C004_ArtClass/Sarah/Stage_EN.csv index 518bbc419f..4b3aa0b14b 100644 --- a/C004_ArtClass/Sarah/Stage_EN.csv +++ b/C004_ArtClass/Sarah/Stage_EN.csv @@ -40,14 +40,17 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function 160,0,0,,(Tighten the ropes.)|(1 minute),The ropes are as tight as they can be.,160,0,0,Tighten() 160,0,0,Common_PlayerNotRestrained,(Untie her.)|(1 minute),"Ooooooh, why did you untie me?|(She pulls her tongue and takes her pose.)",150,0,0,Untie() 160,0,0,Common_PlayerNotRestrained,(Tickle her.)|(1 minute),You're funny. But is that the best you can do?|(She giggles but isn't impressed by your tickling.),160,0,0, +160,0,0,PaintAvail,(Paint Sarah.)|(30 minutes),(You carefully paint her and show the result.)|Wow! This is such a kinky painting. I love it!,160,0,0,Paint() 170,0,0,CrotchRopeReady,(Play with the crotch|rope.) (1 minute),(You play while she trembles and falls on|her knees. Ready to have a huge orgasm.),200,0,0,OrgasmStart() 170,0,0,,(Tighten the ropes.)|(1 minute),The ropes are as tight as they can be.,170,0,0,Tighten() 170,0,0,Common_PlayerNotRestrained,(Ungag her.)|(1 minute),(She stretches her jaw and smiles)|Do you have a bigger gag coming up?,160,0,0,Ungag() 170,0,0,Common_PlayerNotRestrained,(Tickle her.)|(1 minute),(She giggles but isn't impressed by your tickling.),170,0,0, +170,0,0,PaintAvail,(Paint Sarah.)|(30 minutes),(You carefully paint her and show the result.)|(She looks at your work of art and nods happily.),170,0,0,Paint() 180,0,0,CrotchRopeReady,(Play with the crotch|rope.) (1 minute),(You play while she trembles and falls on|her knees. Ready to have a huge orgasm.),250,0,0,OrgasmStart() 180,0,0,,(Tighten the ropes.)|(1 minute),The ropes are as tight as they can be.,180,0,0,Tighten() 180,0,0,Common_PlayerNotRestrained,(Ungag her.)|(1 minute),(She smiles at you.) This tape|was the best idea I've ever had.,160,0,0,Ungag() 180,0,0,Common_PlayerNotRestrained,(Tickle her.)|(1 minute),(She giggles but isn't impressed by your tickling.),180,0,0, +180,0,0,PaintAvail,(Paint Sarah.)|(30 minutes),(You carefully paint her and show the result.)|(She looks at your work of art and nods happily.),180,0,0,Paint() 200,0,0,,Do you want to|climax subbie girl?,"(She nods slowly, trying to control herself.)",210,0,1, 200,0,0,,So this slut|wants to cum?,"(She shakes her head from left to right, then|from up to down, trying to control herself.)",210,-1,0, 200,0,0,,You seem ready|to reach heaven.,"(She nods happily, trying to control herself.)",210,1,0, diff --git a/C004_ArtClass/Sarah/Text_EN.csv b/C004_ArtClass/Sarah/Text_EN.csv index 85390f4cdb..43150223da 100644 --- a/C004_ArtClass/Sarah/Text_EN.csv +++ b/C004_ArtClass/Sarah/Text_EN.csv @@ -12,3 +12,4 @@ Tighten,"(You tighten the knots while she moans.)|Mmmmhh, can we see each other TightenFail,(You try to tighten Sarah's bondage|but fail as the other students giggle.) PlayerRelease,Yes Miss. Someone like you shouldn't be tied up.|(She releases you from your bondage.) PlayerGag,Help you? Yes! I know what could help.|(She searches to find tape and shuts your mouth.) +NoTimeToPaint,(There's not enough time left in|class to produce a work of art.) diff --git a/C005_GymClass/LoseFight/Script.js b/C005_GymClass/LoseFight/Script.js index 1ee65f2358..71840be643 100644 --- a/C005_GymClass/LoseFight/Script.js +++ b/C005_GymClass/LoseFight/Script.js @@ -1,7 +1,7 @@ // Chapter 5 - Lose Fight Load function C005_GymClass_LoseFight_Load() { - if (C005_GymClass_Jennifer_EasyMode) LoadFight("Jennifer", "Easy", Icons.Fight.Rope, PlayerGetSkillLevel("Fighting")); - else LoadFight("Jennifer", "Normal", Icons.Fight.Rope, PlayerGetSkillLevel("Fighting")); + if (C005_GymClass_Jennifer_EasyMode) LoadFight("Jennifer", "Easy", Icons.Fight.Rope, PlayerGetSkillLevel("RopeMastery")); + else LoadFight("Jennifer", "Normal", Icons.Fight.Rope, PlayerGetSkillLevel("RopeMastery")); } // Chapter 5 - Lose Fight Run diff --git a/C005_GymClass/WinFight/Script.js b/C005_GymClass/WinFight/Script.js index 35c55a6be7..035a287820 100644 --- a/C005_GymClass/WinFight/Script.js +++ b/C005_GymClass/WinFight/Script.js @@ -1,7 +1,7 @@ // Chapter 5 - Win Fight Load function C005_GymClass_WinFight_Load() { - if (C005_GymClass_Jennifer_EasyMode) LoadFight("Jennifer", "Normal", Icons.Fight.Rope, PlayerGetSkillLevel("Fighting")); - else LoadFight("Jennifer", "Hard", Icons.Fight.Rope, PlayerGetSkillLevel("Fighting")); + if (C005_GymClass_Jennifer_EasyMode) LoadFight("Jennifer", "Normal", Icons.Fight.Rope, PlayerGetSkillLevel("RopeMastery")); + else LoadFight("Jennifer", "Hard", Icons.Fight.Rope, PlayerGetSkillLevel("RopeMastery")); } // Chapter 5 - Win Fight Run diff --git a/C006_Isolation/IsolationRoom/Script.js b/C006_Isolation/IsolationRoom/Script.js index 545fb40ce5..abb8fde16e 100644 --- a/C006_Isolation/IsolationRoom/Script.js +++ b/C006_Isolation/IsolationRoom/Script.js @@ -19,8 +19,7 @@ function C006_Isolation_IsolationRoom_DropInventory() { // Chapter 6 - Isolation Room Load function C006_Isolation_IsolationRoom_Load() { LeaveIcon = "Wait"; - StruggleDone = false; - StruggleProgress = 0; + StruggleLoad(); C006_Isolation_IsolationRoom_OrgasmReady = (PlayerHasLockedInventory("VibratingEgg")); LoadText(); } diff --git a/C007_LunchBreak/Amanda/Script.js b/C007_LunchBreak/Amanda/Script.js index d034f18261..33c91b7e92 100644 --- a/C007_LunchBreak/Amanda/Script.js +++ b/C007_LunchBreak/Amanda/Script.js @@ -13,6 +13,7 @@ var C007_LunchBreak_Amanda_IntroText = ""; var C007_LunchBreak_Amanda_LeaveIcon = ""; var C007_LunchBreak_Amanda_IsBoundAndGagged = false; var C007_LunchBreak_Amanda_ConfirmEvil = false; +var C007_LunchBreak_Amanda_HasSeduction = false; // Calculates the screen parameters function C007_LunchBreak_Amanda_CalcParams() { @@ -53,6 +54,7 @@ function C007_LunchBreak_Amanda_Load() { ActorLoad("Amanda", "ActorSelect"); LoadInteractions(); C007_LunchBreak_Amanda_CalcParams(); + C007_LunchBreak_Amanda_HasSeduction = (PlayerGetSkillLevel("Seduction") >= 1); // If Amanda doesn't like the player and isn't subbie enough, she leaves and don't talk if ((ActorGetValue(ActorLove) <= -3) && (ActorGetValue(ActorSubmission) <= 2) && (C007_LunchBreak_Amanda_CurrentStage == 0)) { @@ -261,7 +263,6 @@ function C007_LunchBreak_Amanda_Ungag() { // Chapter 7 - Amanda Test Make Love (Amanda will only make love if +8 or more) function C007_LunchBreak_Amanda_TestMakeLove() { if (ActorGetValue(ActorLove) >= 8) { - if (PlayerGetSkillLevel("Seduction") >= 1) ActorChangeAttitude(1, 0); OverridenIntroText = GetText("LoveStart"); C007_LunchBreak_Amanda_CurrentStage = 240; } else { diff --git a/C007_LunchBreak/Amanda/Stage_EN.csv b/C007_LunchBreak/Amanda/Stage_EN.csv index d928d59335..a6769159b8 100644 --- a/C007_LunchBreak/Amanda/Stage_EN.csv +++ b/C007_LunchBreak/Amanda/Stage_EN.csv @@ -77,6 +77,7 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function 200,0,0,,We still have time|before the bell?,(She giggles.) Time for what?,210,0,0, 200,0,0,,Thanks for showing|me this lovely cafe.,My pleasure! We had a good time.,210,1,-1, 200,0,0,,I wanted you to know|that I had a great time.,I did too! We seem to fit well together.,210,1,0, +200,0,0,HasSeduction,"Amy, you're the sweetest|thing in this college.",(She blushes red and giggles.)|You're also sweet COMMON_PLAYERNAME.,210,2,0, 200,0,0,,Can I kiss you?|(1 minute),(She nods and puts her lips against yours.),220,1,0, 200,0,0,,(Stay silent and kiss her.)|(1 minute),,220,0,1, 200,0,0,,Better not be late.|(Back to college.),,0,0,0,EndBonus() diff --git a/C007_LunchBreak/Jennifer/Script.js b/C007_LunchBreak/Jennifer/Script.js index be0e7aea01..bdfcd0a0d6 100644 --- a/C007_LunchBreak/Jennifer/Script.js +++ b/C007_LunchBreak/Jennifer/Script.js @@ -24,6 +24,7 @@ var C007_LunchBreak_Jennifer_PushUpQuality = 0; var C007_LunchBreak_Jennifer_PushUpCount = 0; var C007_LunchBreak_Jennifer_RacketQuality = 0; var C007_LunchBreak_Jennifer_HasRestrainsAvail = false; +var C007_LunchBreak_Jennifer_HasSeduction = false; // Calculates the screen parameters function C007_LunchBreak_Jennifer_CalcParams() { @@ -74,6 +75,7 @@ function C007_LunchBreak_Jennifer_Load() { ActorLoad("Jennifer", "ActorSelect"); LoadInteractions(); C007_LunchBreak_Jennifer_CalcParams(); + C007_LunchBreak_Jennifer_HasSeduction = (PlayerGetSkillLevel("Seduction") >= 1); // If Jennifer doesn't like the player, she will run away from the start if ((ActorGetValue(ActorLove) <= -3) && (ActorGetValue(ActorSubmission) <= 3)) { diff --git a/C007_LunchBreak/Jennifer/Stage_EN.csv b/C007_LunchBreak/Jennifer/Stage_EN.csv index fff8ad37fe..b0593edb41 100644 --- a/C007_LunchBreak/Jennifer/Stage_EN.csv +++ b/C007_LunchBreak/Jennifer/Stage_EN.csv @@ -18,6 +18,7 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function 20,0,0,,The loser will be the|winner slave for lunch.,Slave? You mean the loser pays for lunch?,30,0,1, 20,0,0,,The loser submits to|the winner for lunch.,Submits? You mean the loser pays for lunch?,30,0,0, 20,0,0,,On second thoughts.|I don't want to play.,"Alright then, see you later.|(She packs and leaves for tennis.)",90,0,0,EndLunch() +30,0,0,HasSeduction,Lovely Jennifer. You|can't resist a challenge.,(She blushes and looks at the floor.)|Indeed. Are you ready to play now?,40,1,1, 30,0,0,,"Yes, whoever loses|will pay and obey.",You have a strange way to phrase your|bet but I'm up for it! Should we go now?,40,0,0, 30,0,0,,Don't make me repeat.|Are you game or not?,(She frowns at you and gets competitive.)|Alright then! Are you ready to play now?,40,-1,0, 30,0,0,,On second thoughts.|I don't want to play.,"Alright then, see you later.|(She packs and leaves for tennis.)",90,0,0,EndLunch() diff --git a/C008_DramaClass/Julia/Script.js b/C008_DramaClass/Julia/Script.js index 4511a3e7c1..683d9171ec 100644 --- a/C008_DramaClass/Julia/Script.js +++ b/C008_DramaClass/Julia/Script.js @@ -44,6 +44,12 @@ function C008_DramaClass_Julia_Load() { ActorLoad("Julia", "Theater"); LoadInteractions(); + // On a perfect play, the player gains a level in arts + if ((C008_DramaClass_Julia_CurrentStage == 300) && C008_DramaClass_Theater_PerfectPlay) { + C008_DramaClass_Theater_PerfectPlay = false; + PlayerAddSkill("Arts"); + } + // Cannot leave before Julia gave her instructions if (C008_DramaClass_Julia_CurrentStage < 100) LeaveIcon = ""; if (C008_DramaClass_Julia_CurrentStage == 330) C008_DramaClass_Julia_CurrentStage = 400; @@ -193,10 +199,9 @@ function C008_DramaClass_Julia_Masturbate() { // Chapter 8 - Julia can be flattered with a "quiant" comment function C008_DramaClass_Julia_QuaintComment() { - if (!C008_DramaClass_Julia_QuaintCommentDone) { + if (!C008_DramaClass_Julia_QuaintCommentDone) { C008_DramaClass_Julia_QuaintCommentDone = true; - if (PlayerGetSkillLevel("Seduction") >= 1) ActorChangeAttitude(2, 0); - else ActorChangeAttitude(1, 0); + ActorChangeAttitude(1 + PlayerGetSkillLevel("Seduction"), 0); } C008_DramaClass_Julia_CalcParams(); } diff --git a/C008_DramaClass/Villain/Script.js b/C008_DramaClass/Villain/Script.js index abe0f22345..1e95e61f20 100644 --- a/C008_DramaClass/Villain/Script.js +++ b/C008_DramaClass/Villain/Script.js @@ -21,6 +21,7 @@ var C008_DramaClass_Villain_SpankDone = false; var C008_DramaClass_Villain_OrgasmDone = false; var C008_DramaClass_Villain_MastubateCount = 0; var C008_DramaClass_Villain_RavishDone = false; +var C008_DramaClass_Villain_CanDoSwordDance = false; // Calculates the scene parameters function C008_DramaClass_Villain_CalcParams() { @@ -32,6 +33,7 @@ function C008_DramaClass_Villain_CalcParams() { C008_DramaClass_Villain_CanConvinceJuliaToStrip = (C008_DramaClass_Villain_PlayerIsDamsel && !C008_DramaClass_Villain_IsGagged && (C008_DramaClass_Julia_CurrentStage == 400) && ((ActorSpecificGetValue("Amanda", ActorLove) >= 10) || (ActorSpecificGetValue("Amanda", ActorSubmission) >= 10))); C008_DramaClass_Villain_DamselCanInteract = (C008_DramaClass_Villain_PlayerIsDamsel && !Common_PlayerGagged); C008_DramaClass_Villain_DamselCanBeg = (C008_DramaClass_Villain_PlayerIsDamsel && Common_PlayerGagged); + C008_DramaClass_Villain_CanDoSwordDance = (!C008_DramaClass_Villain_PlayerIsDamsel && PlayerGetSkillLevel("Arts")); OverridenIntroImage = ""; } @@ -261,4 +263,13 @@ function C008_DramaClass_Villain_Ravish() { OverridenIntroText = GetText("Ravish"); } C008_DramaClass_Villain_CalcParams(); +} + +// Chapter 8 - Sword Dance, a special option to disarm the opponent using art +function C008_DramaClass_Villain_SwordDance() { + if (C008_DramaClass_Villain_PlayerIsHeroine) { C008_DramaClass_Villain_CurrentStage = 240; C008_DramaClass_Theater_GlobalStage = 240; } + if (C008_DramaClass_Villain_PlayerIsVillain) { C008_DramaClass_Villain_CurrentStage = 270; C008_DramaClass_Theater_GlobalStage = 270; } + ActorSpecificChangeAttitude("Julia", PlayerGetSkillLevel("Arts"), 0); + ActorSpecificChangeAttitude("Amanda", 0, 1); + ActorSpecificChangeAttitude("Sarah", 0, 1); } \ No newline at end of file diff --git a/C008_DramaClass/Villain/Stage_EN.csv b/C008_DramaClass/Villain/Stage_EN.csv index 51970f9291..6b4740ac61 100644 --- a/C008_DramaClass/Villain/Stage_EN.csv +++ b/C008_DramaClass/Villain/Stage_EN.csv @@ -31,6 +31,7 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function 230,0,0,PlayerIsHeroine,(Do a sword fight.),You charge each other and start|a funny but intense sword fight.,235,0,0,NoLeave() 230,0,0,PlayerIsHeroine,(Surrender without a fight.),You drop your sword and the black|knight steps forward with a grin.,270,0,0,Surrender() 230,0,0,PlayerIsDamsel,(Watch the fight.),Both knights charge on each other and|engage in a pretty neat sword fight.,235,0,0,NoLeave() +235,0,0,CanDoSwordDance,(Do a sword dance.)|(1 minute),You dance gracefully around your opponent and|easily disarm her while she's dazzled by you.,270,0,0,SwordDance() 235,0,0,CanIntimidate,(Intimidate her.)|(1 minute),You give a menacing look to Amanda which|barely fights and lets you disarm her.,270,0,0,"GlobalStage(270, 0, 1)" 235,0,0,CanDisarm,(Disarm her.)|(1 minute),Amanda puts a pretty nice fight but|you're able to win by disarming her.,270,0,0,"GlobalStage(270, 0, 0)" 235,0,0,PlayerIsVillain,(Play defensive.)|(1 minute),You stick to defensive moves and Amanda|takes advantage of it to disarm you.,240,0,0,"GlobalStage(240, 0, 0)" diff --git a/C999_Common/Player/Script.js b/C999_Common/Player/Script.js index 599f4c2568..630dd50c5d 100644 --- a/C999_Common/Player/Script.js +++ b/C999_Common/Player/Script.js @@ -5,6 +5,7 @@ function C999_Common_Player_Load() { C999_Common_Player_ActiveTab = "Profile"; LeaveIcon = "Leave"; LoadText(); + PlayerSkillShowLevelUp = 0; } // Returns the title for the player based on actor interactions diff --git a/Drawing.js b/Drawing.js index 7dcef3b7c3..2762c7fe50 100644 --- a/Drawing.js +++ b/Drawing.js @@ -248,6 +248,9 @@ function DrawInventory(ctx) { else DrawImage(ctx, "Icons/" + GetPlayerIconImage() + "_Inactive.png", 0, 601); + // Draw an arrow over the player head if there's a skill level up + if (PlayerSkillShowLevelUp > 0) DrawImage(ctx, "Icons/SkillLevelUp.png", 0, 601); + // Scroll in the full inventory to draw the icons and quantity, draw a padlock over the item if it's locked var Pos = 1; for (var I = 0; I < PlayerInventory.length; I++) { diff --git a/Icons/SkillLevelUp.png b/Icons/SkillLevelUp.png new file mode 100644 index 0000000000..2be40445ff Binary files /dev/null and b/Icons/SkillLevelUp.png differ diff --git a/Skill.js b/Skill.js index 8ebfaa4b49..d9cf8d1e7b 100644 --- a/Skill.js +++ b/Skill.js @@ -1,10 +1,14 @@ var PlayerSkill = []; var PlayerSkillName = 0; var PlayerSkillLevel = 1; +var PlayerSkillShowLevelUp = 0; // Add a new skill or raise the skill level if the skill is already known function PlayerAddSkill(SkillToAdd, LevelToAdd) { + // Shows the new skill warning for 15 seconds + PlayerSkillShowLevelUp = Math.round(15 * 1000 / RunInterval); + // If the skill is already known, we raise the level for (var I = 0; I < PlayerSkill.length; I++) if (SkillToAdd == PlayerSkill[I][PlayerSkillName]) { diff --git a/Struggle.js b/Struggle.js index 514a318268..4c324b226f 100644 --- a/Struggle.js +++ b/Struggle.js @@ -13,6 +13,14 @@ var StruggleDone = false; var StruggleImageFrame = 0; var StruggleImageFrameMax = 1; var StruggleImageFrameTime = 0; +var StruggleSkillBonus = 0; + +// For each Rope Mastery level, it's 50% easier to struggle out +function StruggleLoad() { + StruggleDone = false; + StruggleProgress = 0; + StruggleSkillBonus = PlayerGetSkillLevel("RopeMastery"); +} // The next tick to lower the struggle time comes faster with harder levels function StruggleGetNextTick() { @@ -53,7 +61,7 @@ function StruggleClick(SType, SDifficulty, SMessage, SDoneMessage, SX, SY, SRadi // Raise the progress by 2 for each click, 100 is done if (StruggleProgress <= 0) StruggleProgress = 8; - StruggleProgress = StruggleProgress + 2; + StruggleProgress = StruggleProgress + 2 + StruggleSkillBonus; if (StruggleProgress >= 100) { StruggleProgress = 100; StruggleDone = true; diff --git a/Time.js b/Time.js index 46446c7e53..4340912168 100644 --- a/Time.js +++ b/Time.js @@ -32,6 +32,7 @@ function ProcessTimer() { // Ticks the timer every for the screen refresh and events clearInterval(CurrentTimer); CurrentTimer = setInterval("MainRun()", RunInterval); + if (PlayerSkillShowLevelUp > 0) PlayerSkillShowLevelUp--; // If the timer must run if (RunTimer) {