From 2f869d7421530ee6d72b421de8ee4bcd8826bef3 Mon Sep 17 00:00:00 2001 From: Ben987 <30805159+Ben987@users.noreply.github.com> Date: Thu, 1 Mar 2018 18:54:24 -0500 Subject: [PATCH] More skills added to all chapters More skills added to all chapters --- C000_Intro/CreatePlayer/Script.js | 59 ++++++++++++++++++------- C000_Intro/CreatePlayer/Text_CN.csv | 8 +++- C000_Intro/CreatePlayer/Text_EN.csv | 8 +++- C000_Intro/CreatePlayer/Text_FR.csv | 8 +++- C000_Intro/CreatePlayer/Text_PL.csv | 6 +++ C001_BeforeClass/Amanda/Script.js | 5 ++- C004_ArtClass/Jennifer/Script.js | 17 +++++++ C004_ArtClass/Jennifer/Stage_EN.csv | 3 ++ C004_ArtClass/Jennifer/Text_EN.csv | 1 + C004_ArtClass/Sarah/Script.js | 17 +++++++ C004_ArtClass/Sarah/Stage_EN.csv | 3 ++ C004_ArtClass/Sarah/Text_EN.csv | 1 + C005_GymClass/LoseFight/Script.js | 4 +- C005_GymClass/WinFight/Script.js | 4 +- C006_Isolation/IsolationRoom/Script.js | 3 +- C007_LunchBreak/Amanda/Script.js | 3 +- C007_LunchBreak/Amanda/Stage_EN.csv | 1 + C007_LunchBreak/Jennifer/Script.js | 2 + C007_LunchBreak/Jennifer/Stage_EN.csv | 1 + C008_DramaClass/Julia/Script.js | 11 +++-- C008_DramaClass/Villain/Script.js | 11 +++++ C008_DramaClass/Villain/Stage_EN.csv | 1 + C999_Common/Player/Script.js | 1 + Drawing.js | 3 ++ Icons/SkillLevelUp.png | Bin 0 -> 2755 bytes Skill.js | 4 ++ Struggle.js | 10 ++++- Time.js | 1 + 28 files changed, 164 insertions(+), 32 deletions(-) create mode 100644 Icons/SkillLevelUp.png 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 0000000000000000000000000000000000000000..2be40445ff3e095bf3cd26b58e8f4c62d6ccafdc GIT binary patch literal 2755 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 JPDHLkV1g{4BbopJ literal 0 HcmV?d00001 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) {