Spelling and Spacing Fixes ()

* Typos

* Colors

* ColorFix

* Others

* Fixes

* Node Revert

* Update socket.io.dev.js

* Typos

* Standardized OK

* Other Languages

* Fix

* Misspellings

* DeleteTests

* Delete socket.io.dev.js

* SpellingFixes

* SpacesAndFixes
This commit is contained in:
klorpa 2022-01-06 13:59:17 -06:00 committed by GitHub
parent bcc67eabbf
commit fe6dbc9349
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
56 changed files with 284 additions and 284 deletions

View file

@ -16,7 +16,7 @@ var ActorOwner = 10;
// Make sure the current actor is loaded (create it if not)
function ActorLoad(ActorToLoad, ActorLeaveScreen) {
// Keep the actor leave screen
LeaveIcon = "Leave";
LeaveScreen = ActorLeaveScreen;
@ -40,14 +40,14 @@ function ActorLoad(ActorToLoad, ActorLeaveScreen) {
function ActorGetValue(ValueType) {
for (var L = 0; L < Actor.length; L++)
if (CurrentActor == Actor[L][ActorName])
return Actor[L][ValueType];
return Actor[L][ValueType];
}
// Return a value from a specific actor data
function ActorSpecificGetValue(SpecificActorName, ValueType) {
for (var L = 0; L < Actor.length; L++)
if (SpecificActorName == Actor[L][ActorName])
return Actor[L][ValueType];
return Actor[L][ValueType];
}
// Return the current actor's localized name
@ -59,7 +59,7 @@ function ActorGetDisplayName() {
// Change positively or negatively the current actor attitude toward the player
function ActorChangeAttitude(LoveAttitude, SubAttitude) {
// If we need to make a change to the attitude, we apply it
if ((LoveAttitude != 0) || (SubAttitude != 0))
for (var L = 0; L < Actor.length; L++)
@ -70,25 +70,25 @@ function ActorChangeAttitude(LoveAttitude, SubAttitude) {
if (Actor[L][ActorLove] < -99) Actor[L][ActorLove] = -99;
if (Actor[L][ActorSubmission] > 99) Actor[L][ActorSubmission] = 99;
if (Actor[L][ActorSubmission] < -99) Actor[L][ActorSubmission] = -99;
}
}
}
// Change positively or negatively a specific actor attitude toward the player
function ActorSpecificChangeAttitude(SpecificActorName, LoveAttitude, SubAttitude) {
// If we need to make a change to the attitude, we apply it
if ((LoveAttitude != 0) || (SubAttitude != 0))
for (var L = 0; L < Actor.length; L++)
if (SpecificActorName == Actor[L][ActorName]) {
Actor[L][ActorLove] = Actor[L][ActorLove] + parseInt(LoveAttitude);
Actor[L][ActorSubmission] = Actor[L][ActorSubmission] + parseInt(SubAttitude);
}
}
}
// Add an orgasm to the actor count and logs the event
function ActorAddOrgasm() {
function ActorAddOrgasm() {
for (var L = 0; L < Actor.length; L++)
if (CurrentActor == Actor[L][ActorName])
Actor[L][ActorOrgasmCount]++;
@ -97,7 +97,7 @@ function ActorAddOrgasm() {
// Validates that a specific interaction stage is available for the player
function ActorInteractionAvailable(LoveReq, SubReq, VarReq, InText, ForIntro) {
// Make sure the love / sub level is match (both positive and negative)
VarReq = VarReq.trim();
InText = InText.trim();
@ -105,13 +105,13 @@ function ActorInteractionAvailable(LoveReq, SubReq, VarReq, InText, ForIntro) {
if ((parseInt(SubReq) > 0) && (parseInt(ActorGetValue(ActorSubmission)) < parseInt(SubReq))) return false;
if ((parseInt(LoveReq) < 0) && (parseInt(ActorGetValue(ActorLove)) > parseInt(LoveReq))) return false;
if ((parseInt(SubReq) < 0) && (parseInt(ActorGetValue(ActorSubmission)) > parseInt(SubReq))) return false;
// Checks if there's a custom script variable or a common variable to process
if ((VarReq != "") && (VarReq.substr(0, 7) == "Common_") && (window[VarReq] == false)) return false;
if ((VarReq != "") && (VarReq.substr(0, 8) == "!Common_") && (window[VarReq.substr(1)] == true)) return false;
if ((VarReq != "") && (VarReq.substr(0, 7) != "Common_") && (VarReq.substr(0, 1) != "!") && (window[CurrentChapter + "_" + CurrentScreen + "_" + VarReq] == false)) return false;
if ((VarReq != "") && (VarReq.substr(0, 7) != "Common_") && (VarReq.substr(0, 1) == "!") && (window[CurrentChapter + "_" + CurrentScreen + "_" + VarReq.substr(1)] == true)) return false;
// Check if the player is gagged, only interactions that starts with '(', '' or '@' are allowed
var nonSpeechActionsStart = [
"(",
@ -119,7 +119,7 @@ function ActorInteractionAvailable(LoveReq, SubReq, VarReq, InText, ForIntro) {
"@",
];
if ((nonSpeechActionsStart.indexOf(InText.substr(0, 1)) < 0) && Common_PlayerGagged && !ForIntro) return false;
// Since nothing blocks, we allow it
return true;
@ -306,7 +306,7 @@ function ActorUnblindfold() {
// Tries to apply a restrain on the current actor
function ActorApplyRestrain(RestrainName) {
// The rope can be applied twice, the item becomes "TwoRopes"
if ((RestrainName == "Rope") && ActorHasInventory("Rope") && !ActorHasInventory("TwoRopes") && PlayerHasInventory("Rope")) RestrainName = "TwoRopes";
if ((RestrainName == "Rope") && ActorHasInventory("Rope") && ActorHasInventory("TwoRopes") && !ActorHasInventory("ThreeRopes") && PlayerHasInventory("Rope") && (PlayerGetSkillLevel("RopeMastery") >= 1)) RestrainName = "ThreeRopes";
@ -315,20 +315,20 @@ function ActorApplyRestrain(RestrainName) {
var RestrainText = GetText(RestrainName);
if ((RestrainText.substr(0, 20) != "MISSING TEXT FOR TAG") && (RestrainText != "") && !Common_PlayerRestrained && (PlayerHasInventory(RestrainName) || RestrainName == "TwoRopes" || RestrainName == "ThreeRopes") && !ActorHasInventory(RestrainName)) {
// Third rope
// Third rope
if (RestrainName == "ThreeRopes") {
PlayerRemoveInventory("Rope", 1);
ActorAddInventory("ThreeRopes");
CurrentTime = CurrentTime + 60000;
CurrentTime = CurrentTime + 60000;
}
// Second rope
// Second rope
if (RestrainName == "TwoRopes") {
PlayerRemoveInventory("Rope", 1);
ActorAddInventory("TwoRopes");
CurrentTime = CurrentTime + 60000;
CurrentTime = CurrentTime + 60000;
}
// Regular restraints
if ((RestrainName == "Rope") || (RestrainName == "Cuffs") || (RestrainName == "Armbinder")) {
if (!ActorIsRestrained()) {
@ -415,7 +415,7 @@ function ActorSpecificHasInventory(QueryActor, QueryInventory) {
}
// Clear all inventory from an actor (expect the egg, plug, chastitybelt and collar)
function ActorSpecificClearInventory(QueryActor, Recover) {
function ActorSpecificClearInventory(QueryActor, Recover) {
for (var A = 0; A < Actor.length; A++)
if (Actor[A][ActorName] == QueryActor) {
var HadEgg = ActorSpecificHasInventory(QueryActor, "VibratingEgg");
@ -440,7 +440,7 @@ function ActorSpecificClearInventory(QueryActor, Recover) {
// Returns the actor image file to use
function ActorSpecificGetImage(QueryActor) {
// The image file name is constructed from the inventory
var ActorImage = QueryActor;
if (ActorSpecificHasInventory(QueryActor, "Cuffs")) ActorImage = ActorImage + "_Cuffs";

View file

@ -910,7 +910,7 @@ function CharacterAppearanceNextItem(C, Group, Forward, Description) {
/**
* Find the next color for the item
* @param {Character} C - The character whose items are cycled
* @param {string} Group - The name of the group for which we are colour cycling
* @param {string} Group - The name of the group for which we are color cycling
* @returns {void} - Nothing
*/
function CharacterAppearanceNextColor(C, Group) {
@ -954,9 +954,9 @@ function CharacterAppearanceMoveOffset(C, Move) {
/**
* Sets the color for a specific group
* @param {Character} C - The character whose item group should be coloured
* @param {string} Color - The colour (in the format "#rrggbb") to be applied to the group
* @param {string} Group - The name of the group, whose colour should be changed
* @param {Character} C - The character whose item group should be colored
* @param {string} Color - The color (in the format "#rrggbb") to be applied to the group
* @param {string} Group - The name of the group, whose color should be changed
* @returns {void} - Nothing
*/
function CharacterAppearanceSetColorForGroup(C, Color, Group) {

View file

@ -19,7 +19,7 @@ DialogPermissionMode,Edit item permissions
Use,Use this item
UseDisabled,Unable to use due to player permissions
Reset,Reset character
ColorPick,Select a colour
MultiColorPick,Select colours
ColorPick,Select a color
MultiColorPick,Select colors
ColorPickDisabled,Unable to change color due to player permissions,,
MultiColorPickDisabled,Unable to change color due to player permissions,,

Can't render this file because it has a wrong number of fields in line 24.

View file

@ -38,9 +38,9 @@ Use this item
使用该物品
Unable to use due to player permissions
因角色权限设定,无法使用
Select a colour
Select a color
选择一种颜色
Select colours
Select colors
选择颜色
Unable to change color due to player permissions
因玩家权限设定无法修改颜色

View file

@ -512,8 +512,8 @@ ActionDice,,,SourceCharacter rolls DiceType. The result is: DiceResult.,,
ActionCoin,,,SourceCharacter flips a coin. The result is: CoinResult.,,
ActionActivateSafewordRevert,,,SourceCharacter used her safeword. Please check for her well-being.,,
ActionActivateSafewordRelease,,,SourceCharacter used her safeword and wants to be released. She is guided out of the room for her safety.,,
ActionGrabbedForCell,,,"TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.",,
ActionGrabbedForGGTS,,,"TargetCharacterName gets grabbed by two nurses wearing futuristic gear and locked in the Asylum for GGTS, following her owner commands.",,
ActionGrabbedForCell,,,"TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.",,
ActionGrabbedForGGTS,,,"TargetCharacterName gets grabbed by two nurses wearing futuristic gear and locked in the Asylum for GGTS, following her owner's commands.",,
ActionGrabbedToServeDrinks,,,TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.,,
ActionGiveEnvelopeToOwner,,,TargetCharacterName gives a sealed envelope to her owner.,,
ActionActivitySpankItem,,,SourceCharacter hits DestinationCharacter FocusAssetGroup with a NextAsset.,,

Can't render this file because it has a wrong number of fields in line 466.

View file

@ -1059,8 +1059,8 @@ SourceCharacter used her safeword. Please check for her well-being.
SourceCharacter used her safeword. Please check for her well-being.
SourceCharacter used her safeword and wants to be released. She is guided out of the room for her safety.
SourceCharacter used her safeword and wants to be released. She is guided out of the room for her safety.
TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.
TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.
TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.
TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.
TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.
TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.
TargetCharacterName gives a sealed envelope to her owner.

View file

@ -225,7 +225,7 @@ SourceCharacter rolls a DiceType sided dice. The result is: DiceResult.
SourceCharacter rollt einen DiceType-seitigen Würfel. Das Ergebnis ist: DiceResult.
SourceCharacter flips a coin. The result is: CoinResult.
SourceCharacter wirft eine Münze. Das Ergebnis ist: CoinResult.
TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.
TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.
TargetCharacterName wird auf Befehl ihrer Besitzerin von zwei Hausmädchen gepackt und in eine Timer-Zelle gesperrt.
TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.
TargetCharacterName wird von zwei Hausmädchen gepackt und in die Dienerkammer gebracht, um für ihre Besitzerin Getränke zu servieren.

View file

@ -179,7 +179,7 @@ SourceCharacter rolls a DiceType sided dice. The result is: DiceResult.
SourceCharacter roule un dé à DiceType côtés. Le résultat est: DiceResult.
SourceCharacter flips a coin. The result is: CoinResult.
SourceCharacter lance une pièce. Le résultat est: CoinResult.
TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.
TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.
TargetCharacterName est attrapée par deux servantes et enfermée dans une cellule minutée, selon l'ordre de sa patronne.
TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.
TargetCharacterName est attrapée par deux servantes et escortée aux quartiers des servantes pour servir des brevages.

View file

@ -227,7 +227,7 @@ SourceCharacter rolls a DiceType sided dice. The result is: DiceResult.
SourceCharacter бросает кости. В результате получается: DiceResult.
SourceCharacter flips a coin. The result is: CoinResult.
SourceCharacter переворачивает монету. Результат таков: CoinResult.
TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.
TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.
TargetCharacterName ее схватили две горничные и заперли в клетке с таймером, следуя командам ее хозяйки.
TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.
TargetCharacterName ее схватили две горничные и сопроводили в комнату для прислуги, чтобы подать напитки для ее хозяйки.

View file

@ -31,4 +31,4 @@ This room name is already taken
Account error, please try to relog
Ошибка учетной записи, пожалуйста, попробуйте перерегистрироватся
Invalid chat room data detected
Обнаружены недопустимые данные чата комнаты
Обнаружены недопустимые данные чата комнаты

View file

@ -1,5 +1,5 @@
Enter your room information
Введите информацию о комнате
Введите информацию о комнате
Room Name (Letters & numbers only)
Имя Комнаты (Только буквы и цифры )
A short description or what's going on
@ -11,7 +11,7 @@ Select the background
Introduction
Вступление
Kidnappers League
Лига Похитителей
Лига Похитителей
Maid Quarters
Помещение для прислуги
Main Hall

View file

@ -20,8 +20,8 @@ CommandHelp,<strong>Help: KeyWord</strong>
CommandNoSuchCommand,command: no such command
CommandPrerequisiteFailed,command: prerequisite check failed
CommandHelpMissing,HELP IS MISSING
CommandFriendlist,Friendlist:
CommandGhostlist,Ghostlist:
CommandWhitelist,Whitelist:
CommandBlacklist,Blacklist:
GGTSIntro,(Two nurses wearing futuristic gear grabs you and carry you to the Asylum. Another nurse is waiting for you there.) Welcome. Don't be scared.
CommandFriendlist,Friendlist:
CommandGhostlist,Ghostlist:
CommandWhitelist,Whitelist:
CommandBlacklist,Blacklist:
GGTSIntro,(Two nurses wearing futuristic gear grab you and carry you to the Asylum. Another nurse is waiting for you there.) Welcome. Don't be scared.

1 ActionGrabbedToServeDrinksIntro (Two maids grab you and escort you to their quarters. Another maid addresses you.) Your owner sent you here to work.
20 CommandNoSuchCommand command: no such command
21 CommandPrerequisiteFailed command: prerequisite check failed
22 CommandHelpMissing HELP IS MISSING
23 CommandFriendlist Friendlist: Friendlist:
24 CommandGhostlist Ghostlist: Ghostlist:
25 CommandWhitelist Whitelist: Whitelist:
26 CommandBlacklist Blacklist: Blacklist:
27 GGTSIntro (Two nurses wearing futuristic gear grabs you and carry you to the Asylum. Another nurse is waiting for you there.) Welcome. Don't be scared. (Two nurses wearing futuristic gear grab you and carry you to the Asylum. Another nurse is waiting for you there.) Welcome. Don't be scared.

View file

@ -42,11 +42,11 @@ command: prerequisite check failed
command:发送前检查失败
HELP IS MISSING
帮助不见啦!!!
Friendlist:
Friendlist:
好友列表:
Ghostlist:
Ghostlist:
忽视列表:
Whitelist:
Whitelist:
白名单:
Blacklist:
Blacklist:
黑名单:

View file

@ -144,7 +144,7 @@ function AsylumEntranceWearPatientClothes(C, ExtraEvent) {
}
InventoryRemove(C, "HairAccessory3");
InventoryRemove(C, "Hat");
// Wears the GGTS items based on the player level
if (ExtraEvent && LogQuery("Isolated", "Asylum")) {
CharacterRelease(C);

View file

@ -31,7 +31,7 @@ var ControllerDeadZone = 0.01;
/**
*removes all buttons from the lists
*removes all buttons from the lists
*/
function ClearButtons() {
ControllerButtonsX = [];
@ -432,7 +432,7 @@ function ControllerButton(buttons) {
//uncomment to test it with keyboard
/**
* handles keyboard inputs in controller mode
* handles keyboard inputs in controller mode
* @returns {void} Nothing
*/
function ControllerSupportKeyDown() {

View file

@ -4,7 +4,7 @@ var C000_Intro_ChapterSelect_CreditPosition = 0;
var C000_Intro_ChapterSelect_Credits = [];
var C000_Intro_ChapterSelect_CreditActors = ["Player", "Amanda", "Sarah", "Sidney", "Jennifer", "Julia", "Yuki"];
var C000_Intro_ChapterSelect_ThankYouCount = 999999;
var C000_Intro_ChapterSelect_ThankYouList = ["Alvin", "Bryce", "Christian", "Designated", "Dick", "Escurse", "EugeneTooms", "James", "Jenni", "Jyeoh", "Karel", "Kitten", "Laioken", "Michal", "Mindtie",
var C000_Intro_ChapterSelect_ThankYouList = ["Alvin", "Bryce", "Christian", "Designated", "Dick", "Escurse", "EugeneTooms", "James", "Jenni", "Jyeoh", "Karel", "Kitten", "Laioken", "Michal", "Mindtie",
"MunchyCat", "Nick", "Overlord", "Rashiash", "Ryner", "Setsu95", "Shadow", "Shaun", "Simeon", "Sky", "Terry", "Victor", "William", "Winterisbest", "Xepherio"];
var C000_Intro_ChapterSelect_ThankYouCurrent = -1;
var C000_Intro_ChapterSelect_CreditTextColor = "black";
@ -18,7 +18,7 @@ function C000_Intro_ChapterSelect_Load() {
StopTimer(7.6666667 * 60 * 60 * 1000);
}
// Draw the credits
// Draw the credits
function C000_Intro_ChapterSelect_DrawCredits() {
// For each credits in the list
@ -58,7 +58,7 @@ function C000_Intro_ChapterSelect_DrawCredits() {
// Draw the thank you image
function C000_Intro_ChapterSelect_DrawThankYou() {
// If the image must swap
if (C000_Intro_ChapterSelect_ThankYouCount >= 200) {
var NewThankYou = C000_Intro_ChapterSelect_ThankYouCurrent;
@ -87,7 +87,7 @@ function C000_Intro_ChapterSelect_Run() {
}
// Chapter Select Click (Clicking on the image will swap it)
function C000_Intro_ChapterSelect_Click() {
function C000_Intro_ChapterSelect_Click() {
ClickInteraction(C000_Intro_ChapterSelect_CurrentStage);
if (!C000_Intro_ChapterSelect_CreditMode && (MouseX >= 600) && (MouseX <= 1200) && (MouseY >= 0) && (MouseY <= 599)) C000_Intro_ChapterSelect_ThankYouCount = 999999;
StopTimer(7.6666667 * 60 * 60 * 1000);

View file

@ -11,7 +11,7 @@ var C002_FirstClass_Amanda_KissSarahDone = false;
// Chapter 2 - Amanda Load
function C002_FirstClass_Amanda_Load() {
// Load the scene parameters
// Load the scene parameters
ActorLoad("Amanda", "Classroom");
LoadInteractions();
if (C002_FirstClass_Classroom_MildredSubdueSuccess) C002_FirstClass_Amanda_BowRemarkReady = false;
@ -22,7 +22,7 @@ function C002_FirstClass_Amanda_Load() {
if ((parseInt(C002_FirstClass_Amanda_CurrentStage) < 100) && (C002_FirstClass_Classroom_MildredSubdueSuccess)) C002_FirstClass_Amanda_SubdueRemarkReady = true;
C002_FirstClass_Amanda_CurrentStage = C002_FirstClass_Classroom_CalcStage();
}
// The remark cannot be done if the player is gagged, also calculate the bondage hug
if (Common_PlayerGagged) C002_FirstClass_Amanda_SubdueRemarkReady = false;
C002_FirstClass_Amanda_BondageHugReady = ((C002_FirstClass_Amanda_CurrentStage > 100) && (Common_PlayerNotRestrained) && (Common_PlayerNotGagged) && (C002_FirstClass_Classroom_MildredSubdueSuccess) && (ActorSpecificHasInventory("Amanda", "Rope")) && (ActorSpecificHasInventory("Sarah", "Rope")));
@ -31,23 +31,23 @@ function C002_FirstClass_Amanda_Load() {
// Chapter 2 - Amanda Run
function C002_FirstClass_Amanda_Run() {
// Regular interactions
BuildInteraction(C002_FirstClass_Amanda_CurrentStage);
// Bondage hug
if ((C002_FirstClass_Amanda_CurrentStage == 160) || (C002_FirstClass_Amanda_CurrentStage == 170)) {
OverridenIntroImage = "";
if ((ActorSpecificHasInventory("Amanda", "BallGag")) && (ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_BallGag_Sarah_Rope_BallGag.jpg";
if ((ActorSpecificHasInventory("Amanda", "BallGag")) && (!ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_BallGag_Sarah_Rope.jpg";
if ((!ActorSpecificHasInventory("Amanda", "BallGag")) && (ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_Sarah_Rope_BallGag.jpg";
if ((!ActorSpecificHasInventory("Amanda", "BallGag")) && (!ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_Sarah_Rope.jpg";
if ((!ActorSpecificHasInventory("Amanda", "BallGag")) && (!ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_Sarah_Rope.jpg";
}
}
// Chapter 2 - Amanda Click
function C002_FirstClass_Amanda_Click() {
function C002_FirstClass_Amanda_Click() {
// Keep the stage on entry
var EntryStage = C002_FirstClass_Amanda_CurrentStage;
@ -55,7 +55,7 @@ function C002_FirstClass_Amanda_Click() {
// Regular interactions
ClickInteraction(C002_FirstClass_Amanda_CurrentStage);
var ClickedInv = GetClickedInventory();
// If the player wants to gag Amanda
if ((C002_FirstClass_Amanda_CurrentStage >= 100) && (ClickedInv == "BallGag") && (ActorHasInventory("BallGag") == false) && (Common_PlayerNotRestrained)) {
if ((ActorGetValue(ActorSubmission) >= 2) || (ActorHasInventory("Rope")) || (ActorHasInventory("Cuffs"))) {
@ -111,7 +111,7 @@ function C002_FirstClass_Amanda_Click() {
if (C002_FirstClass_Amanda_CropDone == false) { C002_FirstClass_Amanda_CropDone = true; ActorChangeAttitude(-2, 0); }
CurrentTime = CurrentTime + 60000;
}
// If the stage changed, we remove the Overridden image, also check for the bondage hug
if (EntryStage != C002_FirstClass_Amanda_CurrentStage) OverridenIntroImage = "";
C002_FirstClass_Amanda_BondageHugReady = ((C002_FirstClass_Amanda_CurrentStage > 100) && (Common_PlayerNotRestrained) && (Common_PlayerNotGagged) && (C002_FirstClass_Classroom_MildredSubdueSuccess) && (ActorSpecificHasInventory("Amanda", "Rope")) && (ActorSpecificHasInventory("Sarah", "Rope")));
@ -153,9 +153,9 @@ function C002_FirstClass_Amanda_AgreeHelp() {
C002_FirstClass_Classroom_AmandaAgree = true;
}
// Chapter 2 - Amanda Bondage Hug
// Chapter 2 - Amanda Bondage Hug
function C002_FirstClass_Amanda_BondageHug() {
if (C002_FirstClass_Amanda_BondageHugDone == false) {
if (C002_FirstClass_Amanda_BondageHugDone == false) {
C002_FirstClass_Amanda_BondageHugDone = true;
ActorChangeAttitude(1, 0);
}

View file

@ -13,7 +13,7 @@ function C002_FirstClass_Sarah_CalcStage() {
// Keep the backup stage to resume conversation
var EntryStage = C002_FirstClass_Sarah_CurrentStage;
if (C002_FirstClass_Sarah_CurrentStage < 100) C002_FirstClass_Sarah_BackupStage = C002_FirstClass_Sarah_CurrentStage;
// Calculate the correct stage (100 comes back to the previous conversation)
if (C002_FirstClass_Sarah_CurrentStage <= 150) {
C002_FirstClass_Sarah_CurrentStage = C002_FirstClass_Classroom_CalcStage();
@ -22,7 +22,7 @@ function C002_FirstClass_Sarah_CalcStage() {
// If the stage changed, we scrap the Overridden image
if (EntryStage != C002_FirstClass_Sarah_CurrentStage) OverridenIntroImage = "";
// The bondage hug is only available if Amanda and Sarah are in ropes
C002_FirstClass_Sarah_BondageHugReady = ((C002_FirstClass_Sarah_CurrentStage > 100) && (C002_FirstClass_Sarah_CurrentStage < 200) && (Common_PlayerNotRestrained) && (Common_PlayerNotGagged) && (C002_FirstClass_Classroom_MildredSubdueSuccess) && (ActorSpecificHasInventory("Amanda", "Rope")) && (ActorSpecificHasInventory("Sarah", "Rope")));
@ -34,13 +34,13 @@ function C002_FirstClass_Sarah_CalcStage() {
if ((!ActorSpecificHasInventory("Amanda", "BallGag")) && (ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_Sarah_Rope_BallGag.jpg";
if ((!ActorSpecificHasInventory("Amanda", "BallGag")) && (!ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_Sarah_Rope.jpg";
}
}
// Chapter 2 - Sarah Load
function C002_FirstClass_Sarah_Load() {
// Load the scene parameters
// Load the scene parameters
ActorLoad("Sarah", "Classroom");
LoadInteractions();
@ -64,7 +64,7 @@ function C002_FirstClass_Sarah_Run() {
}
// Chapter 2 - Sarah Click
function C002_FirstClass_Sarah_Click() {
function C002_FirstClass_Sarah_Click() {
// Regular interactions
ClickInteraction(C002_FirstClass_Sarah_CurrentStage);
@ -115,7 +115,7 @@ function C002_FirstClass_Sarah_Click() {
// Recalculate the stage
C002_FirstClass_Sarah_CalcStage();
}
// Chapter 2 - Sarah Ungag
@ -141,7 +141,7 @@ function C002_FirstClass_Sarah_AnnoyMildred() {
ActorAddInventory("BallGag");
}
// Chapter 2 - Sarah Bondage Hug
// Chapter 2 - Sarah Bondage Hug
function C002_FirstClass_Sarah_BondageHug() {
C002_FirstClass_Sarah_CalcStage();
if (C002_FirstClass_Sarah_BondageHugDone == false) { C002_FirstClass_Sarah_BondageHugDone = true; ActorChangeAttitude(1, 0); }

View file

@ -7,14 +7,14 @@ function C002_FirstClass_SarahIntro_Load() {
// Skip the intro if Mildred was subdued, else we stop the time and show the intro
if (C002_FirstClass_Classroom_MildredSubdueSuccess)
SetScene(CurrentChapter, "Classroom");
else
else
StopTimer(8.5 * 60 * 60 * 1000);
}
// Chapter 2 - SarahIntro Run
function C002_FirstClass_SarahIntro_Run() {
// Paints the background
if (ActorSpecificHasInventory("Amanda", "BallGag"))
DrawImage(CurrentChapter + "/" + CurrentScreen + "/Background_AmandaGag.jpg", 0, 0);
@ -27,7 +27,7 @@ function C002_FirstClass_SarahIntro_Run() {
if (TextPhase >= 2) DrawText(GetText("Intro3"), 600, 300, "White");
if (TextPhase >= 3) DrawText(GetText("Intro4"), 600, 400, "White");
if (TextPhase >= 4) DrawText(GetText("Intro5"), 600, 500, "White");
}
// Chapter 2 - SarahIntro Click

View file

@ -9,7 +9,7 @@ var C012_AfterClass_RockShow_SearchDone = false;
// Chapter 12 After Class - Rock Show Load
function C012_AfterClass_RockShow_Load() {
// Loads the scene to search in the wardrobe
LoadInteractions();
ActorLoad("Sidney", "");
@ -31,16 +31,16 @@ function C012_AfterClass_RockShow_Load() {
function C012_AfterClass_RockShow_Run() {
BuildInteraction(C012_AfterClass_RockShow_CurrentStage);
if (parseInt(C012_AfterClass_RockShow_CurrentStage) >= 200) {
DrawActor(CurrentActor, 680, 0, 1);
DrawActor(CurrentActor, 680, 0, 1);
DrawActor("Player", 500, 0, 1);
} else {
DrawActor("Player", 500, 0, 1);
DrawActor(CurrentActor, 680, 0, 1);
DrawActor(CurrentActor, 680, 0, 1);
}
}
// Chapter 12 After Class - Rock Show Click
function C012_AfterClass_RockShow_Click() {
function C012_AfterClass_RockShow_Click() {
// Regular interactions
ClickInteraction(C012_AfterClass_RockShow_CurrentStage);
@ -61,7 +61,7 @@ function C012_AfterClass_RockShow_Wait(WaitTime) {
// Chapter 12 After Class - When the player listens until the next song
function C012_AfterClass_RockShow_NextSong() {
// The more songs, the more Sidney will like the player
C012_AfterClass_RockShow_SongCount++;
CurrentTime = CurrentTime + 290000;
@ -110,7 +110,7 @@ function C012_AfterClass_RockShow_MasturbatePlayer() {
}
}
// Chapter 12 After Class - When the player masturbates Sidney
// Chapter 12 After Class - When the player masturbates Sidney
function C012_AfterClass_RockShow_MasturbateSidney(Factor) {
C012_AfterClass_RockShow_MasturbateCount = C012_AfterClass_RockShow_MasturbateCount + Factor;
if (C012_AfterClass_RockShow_MasturbateCount < 0) C012_AfterClass_RockShow_MasturbateCount = 0;

View file

@ -7,18 +7,18 @@ function C101_KinbakuClub_ClubRoom3_Load() {
// Chapter 101 - Club Room 3 Run
function C101_KinbakuClub_ClubRoom3_Run() {
// Draw the background image
// Draw the background image
DrawImage(CurrentChapter + "/" + CurrentScreen + "/ClubRoom3Arrows.jpg", 0, 0);
// Draw Chloe
//if (C101_KinbakuClub_Chloe_CurrentStage == 0) {
DrawImage(CurrentChapter + "/" + CurrentScreen + "/ChloeBoard.png", 0, 0);
//} else DrawActor("Chloe", 220, 170, 0.3333);
// Draw CardGamers
DrawImage(CurrentChapter + "/" + CurrentScreen + "/CardGamers1.jpg", 570, 130);
}
// Chapter 101 - Club Room 3 Click

View file

@ -7,7 +7,7 @@ function C101_KinbakuClub_ClubRoom4_Load() {
// Chapter 101 - Club Room 4 Run
function C101_KinbakuClub_ClubRoom4_Run() {
// Draw the background image
// Draw the background image
DrawImage(CurrentChapter + "/" + CurrentScreen + "/ClubRoom4.jpg", 0, 0);
// Draw movement arrows
@ -15,7 +15,7 @@ function C101_KinbakuClub_ClubRoom4_Run() {
DrawImage(CurrentChapter + "/" + CurrentScreen + "/ClubRoom4ArrowLeft.jpg", 20, 525);
DrawImage(CurrentChapter + "/" + CurrentScreen + "/ClubRoom4ArrowRight.jpg", 1090, 525);
}
// Draw the player when she is a slave
if (PlayerHasLockedInventory("Manacles")) {
DrawImage(CurrentChapter + "/" + CurrentScreen + "/SlavesPlayer.png", 280, 185);
@ -133,7 +133,7 @@ function C101_KinbakuClub_ClubRoom4_Click() {
C101_KinbakuClub_Slaves_CurrentStage = 120;
}
}
// When Chloe is a slave and the user clicks on her
// When a twin is a slave and the user clicks on her

View file

@ -1,6 +1,6 @@
// Chapter 101 - Kinbaku Club Load
function C101_KinbakuClub_Discipline_Load() {
// Time is always 17:25:00 in the outro, unlock if needed
StopTimer(17.25 * 60 * 60 * 1000, CurrentChapter, "Discipline");
}
@ -8,7 +8,7 @@ function C101_KinbakuClub_Discipline_Load() {
// Chapter 7 - Kinbaku Club Run
function C101_KinbakuClub_Discipline_Run() {
// Paints the background
// Paints the background
DrawRect(0, 0, 800, 600, "black");
if (PlayerHasLockedInventory("Manacles")) DrawImage(CurrentChapter + "/" + CurrentScreen + "/BagBlackSlave.jpg", 800, 0);
else {
@ -44,7 +44,7 @@ function C101_KinbakuClub_Discipline_Click() {
// Jump to the next animation
TextPhase++;
// Jump to lunch on phase 3
//if (TextPhase >= 4) SaveMenu("C102_KinbakuDiscipline", "Intro");

View file

@ -1,2 +1,2 @@
Tag,Content
BadTiming,You fantasizes about tying yourself up but realize|that it might not be the best time for that.
BadTiming,You fantasize about tying yourself up but realize|that it might not be the best time for that.

1 Tag Content
2 BadTiming You fantasizes about tying yourself up but realize|that it might not be the best time for that. You fantasize about tying yourself up but realize|that it might not be the best time for that.

View file

@ -1,2 +1,2 @@
Tag,Content
BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.

1 Tag Content
2 BadTiming You fantasizes about being gagged but realize that|it might not be the best time to gag yourself. You fantasize about being gagged but realize that|it might not be the best time to gag yourself.

View file

@ -1,2 +1,2 @@
Tag,Content
BadTiming,You fantasizes about being blinded but realize that|it might not be the best time to wear it.
BadTiming,You fantasize about being blinded but realize that|it might not be the best time to wear it.

1 Tag Content
2 BadTiming You fantasizes about being blinded but realize that|it might not be the best time to wear it. You fantasize about being blinded but realize that|it might not be the best time to wear it.

View file

@ -1,3 +1,3 @@
Tag,Content
ConfirmLock,Are you sure you want to lock the|belt on yourself? Click again to do so.
BadTiming,You fantasizes about being locked in a chastity|belt but it might not be the best time for that.
BadTiming,You fantasize about being locked in a chastity|belt but it might not be the best time for that.

1 Tag Content
2 ConfirmLock Are you sure you want to lock the|belt on yourself? Click again to do so.
3 BadTiming You fantasizes about being locked in a chastity|belt but it might not be the best time for that. You fantasize about being locked in a chastity|belt but it might not be the best time for that.

View file

@ -1,2 +1,2 @@
Tag,Content
BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.

1 Tag Content
2 BadTiming You fantasizes about being gagged but realize that|it might not be the best time to gag yourself. You fantasize about being gagged but realize that|it might not be the best time to gag yourself.

View file

@ -1,3 +1,3 @@
Tag,Content
BadTiming,You fantasizes about being collared but realize that|it might not be the best time to collar yourself.
BadTiming,You fantasize about being collared but realize that|it might not be the best time to collar yourself.
LockedCollar,Then collar is fastened with a padlock.|You will need the key to remove it.

1 Tag Content
2 BadTiming You fantasizes about being collared but realize that|it might not be the best time to collar yourself. You fantasize about being collared but realize that|it might not be the best time to collar yourself.
3 LockedCollar Then collar is fastened with a padlock.|You will need the key to remove it.

View file

@ -1,3 +1,3 @@
Tag,Content
BadTiming,You fantasizes about being cuffed but realize that|it might not be the best time to cuff yourself.
BadTiming,You fantasize about being cuffed but realize that|it might not be the best time to cuff yourself.
NoShim,Without a hair clip or similar to make|a shim it is no use. You remain handcuffed.

1 Tag Content
2 BadTiming You fantasizes about being cuffed but realize that|it might not be the best time to cuff yourself. You fantasize about being cuffed but realize that|it might not be the best time to cuff yourself.
3 NoShim Without a hair clip or similar to make|a shim it is no use. You remain handcuffed.

View file

@ -1,2 +1,2 @@
Tag,Content
BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.

1 Tag Content
2 BadTiming You fantasizes about being gagged but realize that|it might not be the best time to gag yourself. You fantasize about being gagged but realize that|it might not be the best time to gag yourself.

View file

@ -1,3 +1,3 @@
Stage,LoveReq,SubReq,VarReq,IntroText,Image
0,0,0,,"This set of steel manacles for restraining|someones neck, wrists and ankles.",Manacles.jpg
0,0,0,,"This set of steel manacles for restraining|someone's neck, wrists and ankles.",Manacles.jpg
10,0,0,,"Without a key, there's no way to escape|the manacles cold hard snare.",Manacles.jpg

1 Stage LoveReq SubReq VarReq IntroText Image
2 0 0 0 This set of steel manacles for restraining|someones neck, wrists and ankles. This set of steel manacles for restraining|someone's neck, wrists and ankles. Manacles.jpg
3 10 0 0 Without a key, there's no way to escape|the manacles cold hard snare. Manacles.jpg

View file

@ -1,2 +1,2 @@
Tag,Content
BadTiming,You fantasizes about shackling yourself up but realize|that it might not be the best time for that.
BadTiming,You fantasize about shackling yourself up but realize|that it might not be the best time for that.

1 Tag Content
2 BadTiming You fantasizes about shackling yourself up but realize|that it might not be the best time for that. You fantasize about shackling yourself up but realize|that it might not be the best time for that.

View file

@ -1,8 +1,8 @@
Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You ball up the panties and cram them|into your mouth, packing it full.",10,0,0,SelfGag()
10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
10,0,0,,(Chew on the panties.)ADD_MINUTES:1,You chew on the wad of panties.|They slowly become soaked by your own drool.,10,0,0,
10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savouting the taste|and wondering how clean they were.",10,0,0,
10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savoring the taste|and wondering how clean they were.",10,0,0,
10,0,0,!HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,You spit the soaked wad of panties out|of your mouth and can now talk again.,0,0,0,SelfUngag()
10,0,0,HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,"You try to spit the panties out, but the other gag has|them trapped. You'll need to remove that first.",10,0,0,

1 Stage LoveReq SubReq VarReq Interaction Result NextStage LoveMod SubMod Function
2 0 0 0 (Inspect the panties.)ADD_MINUTES:1 The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. 0 0 0
3 0 0 0 Common_PlayerNotRestrained (Gag yourself.)ADD_MINUTES:1 You ball up the panties and cram them|into your mouth, packing it full. 10 0 0 SelfGag()
4 10 0 0 HasLoosePantieGag (Inspect the loose gag.)ADD_MINUTES:1 The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. 10 0 0 ShowImage()
5 10 0 0 (Chew on the panties.)ADD_MINUTES:1 You chew on the wad of panties.|They slowly become soaked by your own drool. 10 0 0
6 10 0 0 (Suck on the panties.)ADD_MINUTES:1 You suck on the pantie wad, savouting the taste|and wondering how clean they were. You suck on the pantie wad, savoring the taste|and wondering how clean they were. 10 0 0
7 10 0 0 !HasOtherGag (Spit out the panties.)ADD_MINUTES:1 You spit the soaked wad of panties out|of your mouth and can now talk again. 0 0 0 SelfUngag()
8 10 0 0 HasOtherGag (Spit out the panties.)ADD_MINUTES:1 You try to spit the panties out, but the other gag has|them trapped. You'll need to remove that first. 10 0 0

View file

@ -1,8 +1,8 @@
Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You ball up the panties and cram them|into your mouth, packing it full.",10,0,0,SelfGag()
10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
10,0,0,,(Chew on the panties.)ADD_MINUTES:1,You chew on the wad of panties.|They slowly become soaked by your own drool.,10,0,0,
10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savouting the taste|and wondering how clean they were.",10,0,0,
10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savoring the taste|and wondering how clean they were.",10,0,0,
10,0,0,!HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,You spit the soaked wad of panties out|of your mouth and can now talk again.,0,0,0,SelfUngag()
10,0,0,HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,"You try to spit the panties out, but the other gag has|them trapped. You'll need to remove that first.",10,0,0,

1 Stage LoveReq SubReq VarReq Interaction Result NextStage LoveMod SubMod Function
2 0 0 0 (Inspect the panties.)ADD_MINUTES:1 The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. 0 0 0
3 0 0 0 Common_PlayerNotRestrained (Gag yourself.)ADD_MINUTES:1 You ball up the panties and cram them|into your mouth, packing it full. 10 0 0 SelfGag()
4 10 0 0 HasLoosePantieGag (Inspect the loose gag.)ADD_MINUTES:1 The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. 10 0 0 ShowImage()
5 10 0 0 (Chew on the panties.)ADD_MINUTES:1 You chew on the wad of panties.|They slowly become soaked by your own drool. 10 0 0
6 10 0 0 (Suck on the panties.)ADD_MINUTES:1 You suck on the pantie wad, savouting the taste|and wondering how clean they were. You suck on the pantie wad, savoring the taste|and wondering how clean they were. 10 0 0
7 10 0 0 !HasOtherGag (Spit out the panties.)ADD_MINUTES:1 You spit the soaked wad of panties out|of your mouth and can now talk again. 0 0 0 SelfUngag()
8 10 0 0 HasOtherGag (Spit out the panties.)ADD_MINUTES:1 You try to spit the panties out, but the other gag has|them trapped. You'll need to remove that first. 10 0 0

View file

@ -1,8 +1,8 @@
Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You ball up the panties and cram them|into your mouth, packing it full.",10,0,0,SelfGag()
10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
10,0,0,,(Chew on the panties.)ADD_MINUTES:1,You chew on the wad of panties.|They slowly become soaked by your own drool.,10,0,0,
10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savouting the taste|and wondering how clean they were.",10,0,0,
10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savoring the taste|and wondering how clean they were.",10,0,0,
10,0,0,!HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,You spit the soaked wad of panties out|of your mouth and can now talk again.,0,0,0,SelfUngag()
10,0,0,HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,"You try to spit the panties out, but the other gag has|them trapped. You'll need to remove that first.",10,0,0,

1 Stage LoveReq SubReq VarReq Interaction Result NextStage LoveMod SubMod Function
2 0 0 0 (Inspect the panties.)ADD_MINUTES:1 The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. 0 0 0
3 0 0 0 Common_PlayerNotRestrained (Gag yourself.)ADD_MINUTES:1 You ball up the panties and cram them|into your mouth, packing it full. 10 0 0 SelfGag()
4 10 0 0 HasLoosePantieGag (Inspect the loose gag.)ADD_MINUTES:1 The lable size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. The label size is XXXL. Far too big for you to wear,|but large enough to fill the biggest of mouths. 10 0 0 ShowImage()
5 10 0 0 (Chew on the panties.)ADD_MINUTES:1 You chew on the wad of panties.|They slowly become soaked by your own drool. 10 0 0
6 10 0 0 (Suck on the panties.)ADD_MINUTES:1 You suck on the pantie wad, savouting the taste|and wondering how clean they were. You suck on the pantie wad, savoring the taste|and wondering how clean they were. 10 0 0
7 10 0 0 !HasOtherGag (Spit out the panties.)ADD_MINUTES:1 You spit the soaked wad of panties out|of your mouth and can now talk again. 0 0 0 SelfUngag()
8 10 0 0 HasOtherGag (Spit out the panties.)ADD_MINUTES:1 You try to spit the panties out, but the other gag has|them trapped. You'll need to remove that first. 10 0 0

View file

@ -1,3 +1,3 @@
Tag,Content
BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
OtherGag,You can stuff panties into your|mouth with another gag block it.

1 Tag Content
2 BadTiming You fantasizes about being gagged but realize that|it might not be the best time to gag yourself. You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
3 OtherGag You can stuff panties into your|mouth with another gag block it.

View file

@ -1,3 +1,3 @@
Tag,Content
BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
OtherGag,You can stuff panties into your|mouth with another gag block it.

1 Tag Content
2 BadTiming You fantasizes about being gagged but realize that|it might not be the best time to gag yourself. You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
3 OtherGag You can stuff panties into your|mouth with another gag block it.

View file

@ -1,3 +1,3 @@
Tag,Content
BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
OtherGag,You can stuff panties into your|mouth with another gag block it.

1 Tag Content
2 BadTiming You fantasizes about being gagged but realize that|it might not be the best time to gag yourself. You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
3 OtherGag You can stuff panties into your|mouth with another gag block it.

View file

@ -31,31 +31,31 @@ var RaceSpeed = 0;
// Generates a full race sequence
function RaceGenerateMoves(StartTime, DifficultyText) {
// Set the difficulty ratio
var DifficultyRatio = 1;
if (DifficultyText == "Easy") DifficultyRatio = 1.5;
if (DifficultyText == "Hard") DifficultyRatio = 0.6667;
// Full the race sequence
var CurTimer = StartTime + 3000;
var Seq = 0;
RaceMoves = [];
while (Seq < MaxRaceSequence) {
// Create a new race move to do at a random position
RaceMoves[RaceMoves.length] = [Math.floor(Math.random() * 8), CurTimer];
CurTimer = CurTimer + Math.floor((Math.random() * 600 + 300) * DifficultyRatio);
Seq++;
}
}
// Load the race animations and full sequence
function RaceLoad(Racer, RacerImageSet, AllowedMinutes, Difficulty, EndGoal, EndGoalText, IconLeft, IconRight, BackgroundImage, EndFunction, SkillBonus) {
// Creates a brand new race
// Creates a brand new race
LeaveIcon = "";
RaceTimer = 0;
RaceEndTimer = RaceStartTime + (AllowedMinutes * 60 * 1000);
@ -63,7 +63,7 @@ function RaceLoad(Racer, RacerImageSet, AllowedMinutes, Difficulty, EndGoal, End
RaceSpeed = 0;
RaceProgress = 0;
RaceActorImageFrame = 0;
RaceEnded = false;
RaceEnded = false;
RacePerfect = true;
RaceLastMoveType = -1;
RaceLastMoveTypeTimer = -1;
@ -81,13 +81,13 @@ function RaceLoad(Racer, RacerImageSet, AllowedMinutes, Difficulty, EndGoal, End
RaceEndFunction = EndFunction;
RaceBackgroundImage = BackgroundImage;
RaceGenerateMoves(RaceStartTime, Difficulty);
// Keep a backup of the current chapter and screen
RaceBackupChapter = CurrentChapter;
RaceBackupScreen = CurrentScreen;
CurrentChapter = "C999_Common";
CurrentScreen = "Race";
}
// Draw the race icons
@ -96,22 +96,22 @@ function RaceDrawIcons() {
// Scroll the race icons with time
var Seq = 0;
while (Seq < RaceMoves.length) {
// Draw the move from 3 seconds before to 1 second after
if ((RaceMoves[Seq][RaceMoveTime] <= RaceTimer + 3000) && (RaceMoves[Seq][RaceMoveTime] >= RaceTimer - 1000)) {
if ((RaceMoves[Seq][RaceMoveTime] <= RaceTimer + 3000) && (RaceMoves[Seq][RaceMoveTime] >= RaceTimer - 1000)) {
if (RaceMoves[Seq][RaceMoveType] <= 3)
DrawImage(RaceIconLeft, 3 + (RaceMoves[Seq][RaceMoveType] * 75), 410 + Math.floor((RaceTimer - RaceMoves[Seq][RaceMoveTime]) / 6));
else
else
DrawImage(RaceIconRight, 603 + (RaceMoves[Seq][RaceMoveType] * 75), 410 + Math.floor((RaceTimer - RaceMoves[Seq][RaceMoveTime]) / 6));
}
// Remove the move from the sequence if it's past due
if (RaceMoves[Seq][RaceMoveTime] < RaceTimer - 1000) {
RaceMoves.splice(Seq, 1);
RaceMiss();
}
}
else Seq = Seq + 1;
// Beyond 3 seconds forward, we exit
if (Seq < RaceMoves.length)
if (RaceMoves[Seq][RaceMoveTime] > RaceTimer + 3000)
@ -127,10 +127,10 @@ function RaceDrawBar() {
// Draw 4 bars on each sides
var XOffset = 0;
for(BarNum = 0; BarNum <= 7; BarNum++) {
// Draw the bars on both sides of the screen
if (BarNum == 4) XOffset = 600;
// The color changes when it's clicked or pressed
DrawRect(XOffset + 3 + (BarNum * 75), 437, 70, 27, "White");
if ((RaceLastMoveType == BarNum) && (RaceLastMoveTypeTimer >= RaceTimer))
@ -223,12 +223,12 @@ function RaceDoMove(MoveType) {
// Make sure the hit is valid
if ((MoveType >= 0) && (RaceMoves.length > 0)) {
// For each moves in the list
var Hit = false;
var Seq = 0;
while (Seq < RaceMoves.length) {
// If the move connects (good timing and good type)
if ((RaceMoves[Seq][RaceMoveTime] <= RaceTimer + 300) && (RaceMoves[Seq][RaceMoveTime] >= RaceTimer - 300) && (MoveType == RaceMoves[Seq][RaceMoveType])) {
RaceMoves.splice(Seq, 1);
@ -236,10 +236,10 @@ function RaceDoMove(MoveType) {
Seq = RaceMoves.length;
}
else Seq++;
// Beyond 0.5 seconds forward, we give up
if (Seq < RaceMoves.length)
if (RaceMoves[Seq][RaceMoveTime] > RaceTimer + 300)
if (RaceMoves[Seq][RaceMoveTime] > RaceTimer + 300)
Seq = RaceMoves.length;
}
@ -259,16 +259,16 @@ function C999_Common_Race_Run() {
// If the actor must move forward and progress
if ((RaceSpeed > 0) && !RaceEnded) {
// The progress is (Speed) pixels every second
RaceProgress = RaceProgress + (RunInterval / 1000) * RaceSpeed;
// If the goal is achieved
if (RaceProgress >= RaceGoal) {
RaceProgress = RaceGoal;
RaceEnd(true);
}
}
// Paints the background
@ -277,7 +277,7 @@ function C999_Common_Race_Run() {
// Increments the race timer and draw the actor
if (!RaceEnded) RaceTimer = RaceTimer + RunInterval;
RaceDrawActor();
// If the race is over and not completed, we flag a defeat
if ((RaceTimer >= RaceEndTimer) && !RaceEnded)
RaceEnd(false);
@ -288,7 +288,7 @@ function C999_Common_Race_Run() {
RaceDrawBar();
RaceDrawIcons();
RaceDrawStats();
}
}
else {
DrawText(RaceGoalText, 600, 25, "white");
DrawText(GetCSVText(RaceText, "Difficulty") + " " + GetCSVText(RaceText, RaceDifficultyText), 500, 65, "white");
@ -297,7 +297,7 @@ function C999_Common_Race_Run() {
}
// Draw the end text
if (RaceEnded) {
if (RaceEnded) {
if ((RaceProgress >= RaceGoal) && RacePerfect) DrawText(GetCSVText(RaceText, "Perfect"), 600, 25, "white");
if ((RaceProgress >= RaceGoal) && !RacePerfect) DrawText(GetCSVText(RaceText, "Victory"), 600, 25, "white");
if (RaceProgress < RaceGoal) DrawText(GetCSVText(RaceText, "Defeat"), 600, 25, "white");
@ -308,17 +308,17 @@ function C999_Common_Race_Run() {
// When a key is pressed while racing (for both keyboard and mobile)
function C999_Common_Race_KeyDown() {
// If the race has started, we check the key pressed and send it as a race move
if ((RaceTimer > RaceStartTime) && !RaceEnded) {
var MoveType = -1;
for(T = 0; T <= 7; T++)
if ((KeyPress == RaceMovesTypeKeyUpper[T]) || (KeyPress == RaceMovesTypeKeyLower[T]))
if ((KeyPress == RaceMovesTypeKeyUpper[T]) || (KeyPress == RaceMovesTypeKeyLower[T]))
MoveType = T;
RaceDoMove(MoveType);
}
}
// When a click is done while racing (only works on mobile)

View file

@ -1,3 +1,3 @@
Tag,Content
ConfirmSelfBondage,You know the ropes and can tie yourself up but you|might not be able to get out. Do you want to do it?
BadTiming,You fantasizes about tying yourself up but realize|that it might not be the best time for that.
BadTiming,You fantasize about tying yourself up but realize|that it might not be the best time for that.

1 Tag Content
2 ConfirmSelfBondage You know the ropes and can tie yourself up but you|might not be able to get out. Do you want to do it?
3 BadTiming You fantasizes about tying yourself up but realize|that it might not be the best time for that. You fantasize about tying yourself up but realize|that it might not be the best time for that.

View file

@ -3,6 +3,6 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You stuff the sock into your mouth,|pushing it all in and packing it full.",10,0,0,SelfGag()
10,0,0,HasLooseSockGag,(Inspect the loose gag.)ADD_MINUTES:1,"An odd sock is not much use for wearing,|but it would pack full even the biggest mouth.",10,0,0,ShowImage()
10,0,0,,(Chew on the sock.)ADD_MINUTES:1,You chew on the sock wad.|It slowly becomes soaked by your own drool.,10,0,0,
10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savouting the taste|and wondering how clean it was.",10,0,0,
10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savoring the taste|and wondering how clean it was.",10,0,0,
10,0,0,!HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,You spit the sodden sock out of|your mouth and can now talk again.,0,0,0,SelfUngag()
10,0,0,HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,"You try to spit the sock out, but the other gag has|them trapped. You'll need to remove that first.",10,0,0,

1 Stage LoveReq SubReq VarReq Interaction Result NextStage LoveMod SubMod Function
3 0 0 0 Common_PlayerNotRestrained (Gag yourself.)ADD_MINUTES:1 You stuff the sock into your mouth,|pushing it all in and packing it full. 10 0 0 SelfGag()
4 10 0 0 HasLooseSockGag (Inspect the loose gag.)ADD_MINUTES:1 An odd sock is not much use for wearing,|but it would pack full even the biggest mouth. 10 0 0 ShowImage()
5 10 0 0 (Chew on the sock.)ADD_MINUTES:1 You chew on the sock wad.|It slowly becomes soaked by your own drool. 10 0 0
6 10 0 0 (Suck on the sock.)ADD_MINUTES:1 You suck on the sock, savouting the taste|and wondering how clean it was. You suck on the sock, savoring the taste|and wondering how clean it was. 10 0 0
7 10 0 0 !HasOtherGag (Spit out the sock.)ADD_MINUTES:1 You spit the sodden sock out of|your mouth and can now talk again. 0 0 0 SelfUngag()
8 10 0 0 HasOtherGag (Spit out the sock.)ADD_MINUTES:1 You try to spit the sock out, but the other gag has|them trapped. You'll need to remove that first. 10 0 0

View file

@ -3,6 +3,6 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You stuff the sock into your mouth,|pushing it all in and packing it full.",10,0,0,SelfGag()
10,0,0,HasLooseSockGag,(Inspect the loose gag.)ADD_MINUTES:1,"An odd sock is not much use for wearing,|but it would pack full even the biggest mouth.",10,0,0,ShowImage()
10,0,0,,(Chew on the sock.)ADD_MINUTES:1,You chew on the sock wad.|It slowly becomes soaked by your own drool.,10,0,0,
10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savouting the taste|and wondering how clean it was.",10,0,0,
10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savoring the taste|and wondering how clean it was.",10,0,0,
10,0,0,!HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,You spit the sodden sock out of|your mouth and can now talk again.,0,0,0,SelfUngag()
10,0,0,HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,"You try to spit the sock out, but the other gag has|them trapped. You'll need to remove that first.",10,0,0,

1 Stage LoveReq SubReq VarReq Interaction Result NextStage LoveMod SubMod Function
3 0 0 0 Common_PlayerNotRestrained (Gag yourself.)ADD_MINUTES:1 You stuff the sock into your mouth,|pushing it all in and packing it full. 10 0 0 SelfGag()
4 10 0 0 HasLooseSockGag (Inspect the loose gag.)ADD_MINUTES:1 An odd sock is not much use for wearing,|but it would pack full even the biggest mouth. 10 0 0 ShowImage()
5 10 0 0 (Chew on the sock.)ADD_MINUTES:1 You chew on the sock wad.|It slowly becomes soaked by your own drool. 10 0 0
6 10 0 0 (Suck on the sock.)ADD_MINUTES:1 You suck on the sock, savouting the taste|and wondering how clean it was. You suck on the sock, savoring the taste|and wondering how clean it was. 10 0 0
7 10 0 0 !HasOtherGag (Spit out the sock.)ADD_MINUTES:1 You spit the sodden sock out of|your mouth and can now talk again. 0 0 0 SelfUngag()
8 10 0 0 HasOtherGag (Spit out the sock.)ADD_MINUTES:1 You try to spit the sock out, but the other gag has|them trapped. You'll need to remove that first. 10 0 0

View file

@ -3,6 +3,6 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You stuff the sock into your mouth,|pushing it all in and packing it full.",10,0,0,SelfGag()
10,0,0,HasLooseSockGag,(Inspect the loose gag.)ADD_MINUTES:1,"An odd sock is not much use for wearing,|but it would pack full even the biggest mouth.",10,0,0,ShowImage()
10,0,0,,(Chew on the sock.)ADD_MINUTES:1,You chew on the sock wad.|It slowly becomes soaked by your own drool.,10,0,0,
10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savouting the taste|and wondering how clean it was.",10,0,0,
10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savoring the taste|and wondering how clean it was.",10,0,0,
10,0,0,!HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,You spit the sodden sock out of|your mouth and can now talk again.,0,0,0,SelfUngag()
10,0,0,HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,"You try to spit the sock out, but the other gag has|them trapped. You'll need to remove that first.",10,0,0,

1 Stage LoveReq SubReq VarReq Interaction Result NextStage LoveMod SubMod Function
3 0 0 0 Common_PlayerNotRestrained (Gag yourself.)ADD_MINUTES:1 You stuff the sock into your mouth,|pushing it all in and packing it full. 10 0 0 SelfGag()
4 10 0 0 HasLooseSockGag (Inspect the loose gag.)ADD_MINUTES:1 An odd sock is not much use for wearing,|but it would pack full even the biggest mouth. 10 0 0 ShowImage()
5 10 0 0 (Chew on the sock.)ADD_MINUTES:1 You chew on the sock wad.|It slowly becomes soaked by your own drool. 10 0 0
6 10 0 0 (Suck on the sock.)ADD_MINUTES:1 You suck on the sock, savouting the taste|and wondering how clean it was. You suck on the sock, savoring the taste|and wondering how clean it was. 10 0 0
7 10 0 0 !HasOtherGag (Spit out the sock.)ADD_MINUTES:1 You spit the sodden sock out of|your mouth and can now talk again. 0 0 0 SelfUngag()
8 10 0 0 HasOtherGag (Spit out the sock.)ADD_MINUTES:1 You try to spit the sock out, but the other gag has|them trapped. You'll need to remove that first. 10 0 0

View file

@ -1,3 +1,3 @@
Tag,Content
BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
OtherGag,You can put a sock into your|mouth with another gag block it.

1 Tag Content
2 BadTiming You fantasizes about being gagged but realize that|it might not be the best time to gag yourself. You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
3 OtherGag You can put a sock into your|mouth with another gag block it.

View file

@ -1,3 +1,3 @@
Tag,Content
BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
OtherGag,You can put a sock into your|mouth with another gag block it.

1 Tag Content
2 BadTiming You fantasizes about being gagged but realize that|it might not be the best time to gag yourself. You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
3 OtherGag You can put a sock into your|mouth with another gag block it.

View file

@ -1,3 +1,3 @@
Tag,Content
BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
OtherGag,You can put a sock into your|mouth with another gag block it.

1 Tag Content
2 BadTiming You fantasizes about being gagged but realize that|it might not be the best time to gag yourself. You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
3 OtherGag You can put a sock into your|mouth with another gag block it.

View file

@ -1,2 +1,2 @@
Tag,Content
BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.

1 Tag Content
2 BadTiming You fantasizes about being gagged but realize that|it might not be the best time to gag yourself. You fantasize about being gagged but realize that|it might not be the best time to gag yourself.

View file

@ -2,20 +2,20 @@ var CheatAllow = false;
// Receives cheat keys
function CheatKey() {
// No cheats until the player has a name
if (Common_PlayerName != "") {
// In a fight or a race, the user can press * to win automatically
if (!FightEnded && (FightTimer > 0)) { if (KeyPress == 42) FightEnd(true); return; }
if (!DoubleFightEnded && (DoubleFightTimer > 0)) { if (KeyPress == 42) DoubleFightEnd(true); return; }
if (!RaceEnded && (RaceTimer > 0)) { if (KeyPress == 42) { RaceProgress = RaceGoal; RaceEnd(true); } return; }
if (!QuizEnded && (QuizTimer > 0) && (QuizBetweenQuestionTimer == 0) && (QuizAnswerText == "")) { if (KeyPress == 42) { QuizAnswerText = QuizQuestion[QuizProgressLeft + QuizProgressRight][QuizQuestionAnswer1]; QuizAnswerBy = "Left"; QuizProgressLeft++; QuizBetweenQuestionTimer = QuizTimer + QuizOtherQuestionTime; } return; }
// If we must manipulate time using + and -
if (KeyPress == 43) CheatTime(900000);
if (KeyPress == 45) CheatTime(-900000);
// Specific cheats by functions
if (CurrentActor != "") CheatActor();
if ((CurrentChapter == "C012_AfterClass") && (CurrentScreen == "Dorm")) CheatDorm();
@ -88,7 +88,7 @@ function CheatDorm() {
if ((KeyPress == 42) && !GameLogQuery(CurrentChapter, "", "EventGrounded")) {
PlayerReleaseBondage();
if (PlayerHasLockedInventory("ChastityBelt")) { PlayerUnlockInventory("ChastityBelt"); PlayerAddInventory("ChastityBelt", 1); }
if (PlayerHasLockedInventory("VibratingEgg")) { PlayerUnlockInventory("VibratingEgg"); PlayerAddInventory("VibratingEgg", 1); }
if (PlayerHasLockedInventory("VibratingEgg")) { PlayerUnlockInventory("VibratingEgg"); PlayerAddInventory("VibratingEgg", 1); }
}
}

View file

@ -102,7 +102,7 @@ function DetectMobile() {
// Parse a CSV file
function ParseCSV(str) {
var arr = [];
var quote = false; // true means we're inside a quoted field
@ -115,7 +115,7 @@ function ParseCSV(str) {
// If the current character is a quotation mark, and we're inside a
// quoted field, and the next character is also a quotation mark,
// add a quotation mark to the current column and skip the next character
if (cc == '"' && quote && nc == '"') { arr[row][col] += cc; ++c; continue; }
if (cc == '"' && quote && nc == '"') { arr[row][col] += cc; ++c; continue; }
// If it's just one quotation mark, begin/end quoted field
if (cc == '"') { quote = !quote; continue; }
@ -140,12 +140,12 @@ function ReadCSV(Array, ChapterOrPath, Screen, Type, Language) {
var Path = (Screen && Type)
? ChapterOrPath + "/" + Screen + "/" + Type + (Language ? "_" : "") + (Language || "") + ".csv"
: ChapterOrPath;
if (CSVCache[Path]) {
window[Array] = CSVCache[Path];
return;
}
// Opens the file, parse it and returns the result in an array
Get(Path, function() {
if (this.status == 200) {
@ -195,7 +195,7 @@ function GetWorkingLanguageForChapter(Chapter) {
}
// Load the interactions from a scene and keep it in common variable
function LoadInteractions() {
function LoadInteractions() {
ReadCSV("CurrentIntro", CurrentChapter, CurrentScreen, "Intro", GetWorkingLanguage());
ReadCSV("CurrentStage", CurrentChapter, CurrentScreen, "Stage", GetWorkingLanguage());
LoadText();
@ -216,7 +216,7 @@ function DynamicFunction(FunctionName) {
// Set the current scene (chapter and screen)
function SetScene(Chapter, Screen) {
// Keep the chapter and screen
CurrentStage = null;
CurrentIntro = null;
@ -235,15 +235,15 @@ function SetScene(Chapter, Screen) {
// Load the screen code
DynamicFunction(CurrentChapter + "_" + CurrentScreen + "_Load()");
}
// Validates if any interaction was clicked
function ClickInteraction(CurrentStagePosition) {
// Make sure the current stage is loaded
if (CurrentStage != null) {
// If a regular option was clicked, we process it
var Pos = 0;
for (var L = 0; L < CurrentStage.length; L++)
@ -281,13 +281,13 @@ function GetText(Tag) {
// Make sure the text CSV file is loaded
if (CurrentText != null) {
// Cycle the text to find a matching tag and returns the text content
Tag = Tag.trim().toUpperCase();
for (var T = 0; T < CurrentText.length; T++)
if (CurrentText[T][TextTag].trim().toUpperCase() == Tag)
return CurrentText[T][TextContent].trim();
// Returns an error message
return "MISSING TEXT FOR TAG: " + Tag.trim();
@ -300,13 +300,13 @@ function GetCSVText(CSVText, Tag) {
// Make sure the text CSV file is loaded
if (CSVText != null) {
// Cycle the text to find a matching tag and returns the text content
Tag = Tag.trim().toUpperCase();
for (var T = 0; T < CSVText.length; T++)
if (CSVText[T][TextTag].trim().toUpperCase() == Tag)
return CSVText[T][TextContent].trim();
// Returns an error message
return "MISSING TEXT FOR TAG: " + Tag.trim();
@ -316,15 +316,15 @@ function GetCSVText(CSVText, Tag) {
// Triggers the leave or wait button if needed
function LeaveButtonClick() {
// If the wait option was clicked, we skip 2 minutes
if (LeaveIcon == "Wait")
if ((MouseX >= 1125) && (MouseX <= 1200) && (MouseY >= 600) && (MouseY <= 675))
if ((MouseX >= 1125) && (MouseX <= 1200) && (MouseY >= 600) && (MouseY <= 675))
CurrentTime = CurrentTime + 120000;
// If the leave option was clicked, we return to the previous screen
if ((LeaveIcon == "Leave") && (LeaveScreen != ""))
if ((MouseX >= 1125) && (MouseX <= 1200) && (MouseY >= 600) && (MouseY <= 675))
if ((MouseX >= 1125) && (MouseX <= 1200) && (MouseY >= 600) && (MouseY <= 675))
SetScene(LeaveChapter, LeaveScreen);
}

View file

@ -1,7 +1,7 @@
// The main game canvas where everything will be drawn
var MainCanvas;
// A bank of all the chached images
// A bank of all the cached images
var CacheImage = {};
// Icons bank and paths
@ -44,7 +44,7 @@ function DrawGetImage(Source) {
// returns the final image
return CacheImage[Source];
}
// Draw a zoomed image from a source to the canvas
function DrawImageZoom(Source, SX, SY, SWidth, SHeight, X, Y, Width, Height) {
MainCanvas.drawImage(DrawGetImage(Source), SX, SY, Math.round(SWidth), Math.round(SHeight), X, Y, Width, Height);
@ -96,7 +96,7 @@ function DrawText(Text, X, Y, Color) {
else {
MainCanvas.fillText(Text.substring(0, Text.indexOf("|")), X, Y - 19);
MainCanvas.fillText(Text.substring(Text.indexOf("|") + 1, 1000), X, Y + 19);
}
}
}
@ -106,27 +106,27 @@ function DrawButton(Left, Top, Width, Height, Label) {
// Draw the button rectangle
MainCanvas.beginPath();
MainCanvas.rect(Left, Top, Width, Height);
MainCanvas.fillStyle = 'white';
MainCanvas.fillStyle = 'white';
MainCanvas.fillRect(Left, Top, Width, Height);
MainCanvas.fill();
MainCanvas.fill();
MainCanvas.lineWidth = '2';
MainCanvas.strokeStyle = 'black';
MainCanvas.stroke();
MainCanvas.closePath();
// Draw the text
DrawText(Label, Left + Width / 2, Top + Height / 2, "black");
}
// Draw a basic rectangle
function DrawRect(Left, Top, Width, Height, Color) {
MainCanvas.beginPath();
MainCanvas.rect(Left, Top, Width, Height);
MainCanvas.fillStyle = Color;
MainCanvas.fillStyle = Color;
MainCanvas.fillRect(Left, Top, Width, Height);
MainCanvas.fill();
MainCanvas.closePath();
MainCanvas.fill();
MainCanvas.closePath();
}
// Draw a basic circle
@ -135,19 +135,19 @@ function DrawCircle(CenterX, CenterY, Radius, LineWidth, LineColor) {
MainCanvas.arc(CenterX, CenterY, Radius, 0, 2 * Math.PI, false);
MainCanvas.lineWidth = LineWidth;
MainCanvas.strokeStyle = LineColor;
MainCanvas.stroke();
MainCanvas.stroke();
}
// Draw --- if zero, +value in green if positive, -value in red if negative
function DrawPosNegValue(Value, X, Y) {
function DrawPosNegValue(Value, X, Y) {
if (Value == 0) DrawText("---", X, Y, "black");
if (Value > 0) DrawText("+" + Value.toString(), X, Y, "#00BB00");
if (Value < 0) DrawText(Value.toString(), X, Y, "#BB0000");
if (Value < 0) DrawText(Value.toString(), X, Y, "#BB0000");
}
// Draw the current actor stats toward the player
function DrawActorStats(Left, Top) {
// Draw the actor name and icon
DrawText(ActorGetDisplayName(), Left - 200, Top + 17, "black");
if (CurrentActor == Common_PlayerLover) DrawImage("Icons/Lover.png", Left - 110, Top);
@ -168,12 +168,12 @@ function DrawActorStats(Left, Top) {
function DrawIntro(Intro, CurrentStagePosition, LoveLevel, SubLevel) {
// Draw the top box and stats
DrawRect(0, 0, 599, 150, "White");
DrawRect(0, 0, 599, 150, "White");
if (CurrentActor != "") {
DrawRect(30, 60, 539, 1, "Black");
DrawActorStats(300, 15);
}
// Find the correct intro text
var ShowText = "";
if (OverridenIntroText != "")
@ -187,7 +187,7 @@ function DrawIntro(Intro, CurrentStagePosition, LoveLevel, SubLevel) {
// Draw the intro
if (CurrentActor != "") DrawText(ShowText, 300, 105, "black");
else DrawText(ShowText, 300, 75, "black");
}
// Draw a selectable option on the screen
@ -195,32 +195,32 @@ function DrawOption(OptionText, Left, Top) {
// Draw the rectangle and text
if (OptionText.substr(0, 1) == "@") OptionText = OptionText.substr(1);
DrawRect(Left, Top, 299, 89, "White");
DrawRect(Left, Top, 299, 89, "White");
if ((MouseX >= Left) && (MouseX <= Left + 299) && (MouseY >= Top) && (MouseY <= Top + 89) && !IsMobile) DrawText(OptionText, Left + 150, Top + 45, "#00BB00");
else DrawText(OptionText, Left + 150, Top + 45, "#BB0000");
else DrawText(OptionText, Left + 150, Top + 45, "#BB0000");
}
// Draw all the possible interactions
// Draw all the possible interactions
function DrawInteraction(Stage, CurrentStagePosition, LoveLevel, SubLevel) {
// Find all the correct interactions for the current stage
var Pos = 0;
for (var S = 0; S < Stage.length; S++)
if (Stage[S][StageNumber] == CurrentStagePosition)
if (Stage[S][StageNumber] == CurrentStagePosition)
if (ActorInteractionAvailable(Stage[S][StageLoveReq], Stage[S][StageSubReq], Stage[S][StageVarReq], Stage[S][StageInteractionText], false)) {
// Draw the box and interaction
DrawOption(Stage[S][StageInteractionText], (Pos % 2) * 300, 151 + (Math.round((Pos - 1) / 2) * 90));
Pos = Pos + 1;
Pos = Pos + 1;
}
}
// Find the current image file
// Find the current image file
function FindImage(Intro, CurrentStagePosition) {
// The image file is a column in the intro CSV file
var ImageName = "";
if (OverridenIntroImage != "")
@ -277,10 +277,10 @@ function DrawInventory() {
DrawImage("Icons/" + GetPlayerIconImage() + "_Active.png", 0, 601);
else
DrawImage("Icons/" + GetPlayerIconImage() + "_Inactive.png", 0, 601);
// Draw an arrow over the player head if there's a skill level up
if (PlayerSkillShowLevelUp > 0) DrawImage("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++) {
@ -291,7 +291,7 @@ function DrawInventory() {
// 11 positions for the items
if (Pos <= 11) {
var ImgState = "Inactive";
if (((MouseX >= 1 + Pos * 75) && (MouseX <= 74 + Pos * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) ImgState = "Active";
if (((MouseX >= 1 + Pos * 75) && (MouseX <= 74 + Pos * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) ImgState = "Active";
DrawImage("Icons/" + PlayerInventory[I][PlayerInventoryName] + "_" + ImgState + ".png", 1 + Pos * 75, 601);
DrawText(PlayerInventory[I][PlayerInventoryQuantity].toString(), Pos * 75 + 64, 661, "#000000");
if (PlayerHasLockedInventory(PlayerInventory[I][PlayerInventoryName]))
@ -304,13 +304,13 @@ function DrawInventory() {
if (((MouseX >= 1 + Pos * 75) && (MouseX <= 74 + Pos * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) ImgState = "Active";
DrawImage("Icons/SecondInventoryTab_" + ImgState + ".png", 1 + Pos * 75, 601);
}
};
// Second inventory tab
if ((Pos >= 12) && (PlayerInventoryTab == 1)) {
if ((Pos >= 12) && (PlayerInventoryTab == 1)) {
var ImgState = "Inactive";
if (((MouseX >= 1 + (Pos - 11) * 75) && (MouseX <= 74 + (Pos - 11) * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) ImgState = "Active";
if (((MouseX >= 1 + (Pos - 11) * 75) && (MouseX <= 74 + (Pos - 11) * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) ImgState = "Active";
DrawImage("Icons/" + PlayerInventory[I][PlayerInventoryName] + "_" + ImgState + ".png", 1 + (Pos - 11) * 75, 601);
DrawText(PlayerInventory[I][PlayerInventoryQuantity].toString(), (Pos - 11) * 75 + 64, 661, "#000000");
if (PlayerHasLockedInventory(PlayerInventory[I][PlayerInventoryName]))
@ -319,11 +319,11 @@ function DrawInventory() {
// Jumps to the next position
Pos = Pos + 1;
}
// Scroll in the locked inventory also to find items that were not loaded
for (var I = 0; I < PlayerLockedInventory.length; I++)
for (var I = 0; I < PlayerLockedInventory.length; I++)
if (!PlayerHasInventory(PlayerLockedInventory[I])) {
// First inventory tab
@ -336,7 +336,7 @@ function DrawInventory() {
DrawImage("Icons/Lock_Active.png", Pos * 75, 600);
}
else {
DrawImage("Icons/" + PlayerLockedInventory[I] + "_Inactive.png", 1 + Pos * 75, 601);
DrawImage("Icons/" + PlayerLockedInventory[I] + "_Inactive.png", 1 + Pos * 75, 601);
DrawImage("Icons/Lock_Inactive.png", Pos * 75, 600);
}
}
@ -349,15 +349,15 @@ function DrawInventory() {
}
}
// Second inventory tab
if ((Pos >= 12) && (PlayerInventoryTab == 1)) {
if ((Pos >= 12) && (PlayerInventoryTab == 1)) {
if (((MouseX >= 1 + (Pos - 11) * 75) && (MouseX <= 74 + (Pos - 11) * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) {
DrawImage("Icons/" + PlayerLockedInventory[I] + "_Active.png", 1 + (Pos - 11) * 75, 601);
DrawImage("Icons/Lock_Active.png", (Pos - 11) * 75, 600);
}
else {
DrawImage("Icons/" + PlayerLockedInventory[I] + "_Inactive.png", 1 + (Pos - 11) * 75, 601);
DrawImage("Icons/" + PlayerLockedInventory[I] + "_Inactive.png", 1 + (Pos - 11) * 75, 601);
DrawImage("Icons/Lock_Inactive.png", (Pos - 11) * 75, 600);
}
};
@ -366,7 +366,7 @@ function DrawInventory() {
Pos = Pos + 1;
};
// On the second tab, we put an arrow to go back to the first tab
if ((Pos >= 12) && (PlayerInventoryTab == 1)) {
var ImgState = "Inactive";
@ -400,16 +400,16 @@ function BuildBottomBar() {
// Returns the name of the image file to use to draw the player
function DrawGetPlayerImageName(IncludePose) {
// Get the first part of the image
var ImageCloth = "Clothed";
if (Common_PlayerUnderwear) ImageCloth = "Underwear";
if (Common_PlayerNaked) ImageCloth = "Naked";
if ((Common_PlayerUnderwear || Common_PlayerNaked) && PlayerHasLockedInventory("ChastityBelt")) ImageCloth = "ChastityBelt";
if (Common_PlayerCostume != "") ImageCloth = Common_PlayerCostume
// Second part is the type of bondage
var ImageBondage = "_NoBondage";
var ImageBondage = "_NoBondage";
if (PlayerHasLockedInventory("Cuffs") == true) ImageBondage = "_Cuffs";
if (PlayerHasLockedInventory("Rope") == true) ImageBondage = "_Rope";
if (PlayerHasLockedInventory("Armbinder") == true) ImageBondage = "_Armbinder";
@ -420,7 +420,7 @@ function DrawGetPlayerImageName(IncludePose) {
if (PlayerHasLockedInventory("Collar")) ImageCollar = "_Collar";
else ImageCollar = "_NoCollar";
}
// Fourth part is the gag
var ImageGag = "_NoGag";
if (PlayerHasLockedInventory("BallGag") == true) ImageGag = "_BallGag";
@ -429,7 +429,7 @@ function DrawGetPlayerImageName(IncludePose) {
if (PlayerHasLockedInventory("DoubleOpenGag") == true) ImageGag = "_DoubleOpenGag";
// Fifth part is the blindfold
var ImageBlindfold = "";
var ImageBlindfold = "";
if (PlayerHasLockedInventory("Blindfold") == true) ImageBlindfold = "_Blindfold";
// Sixth part is the pose
@ -449,7 +449,7 @@ function DrawPlayerImage(X, Y) {
} else {
if ((X == 0) && (Y == 0)) DrawImage("C999_Common/Player/" + DrawGetPlayerImageName(false) + ".jpg", 600, 0);
else DrawImageZoom("C999_Common/Player/" + DrawGetPlayerImageName(false) + ".jpg", X, Y, 600, 600, 600, 0, 1200, 1200);
}
}
}
// Draw the transparent player image (600x900) with a zoom if required
@ -459,10 +459,10 @@ function DrawTransparentPlayerImage(X, Y, Zoom) {
// Draw the transparent actor over the current background
function DrawActor(ActorToDraw, X, Y, Zoom) {
// Validate first if we must draw the transparent player image
if (ActorToDraw == "Player") {
DrawTransparentPlayerImage(X, Y, Zoom);
DrawTransparentPlayerImage(X, Y, Zoom);
} else {
// First, we retrieve the current clothes
@ -471,7 +471,7 @@ function DrawActor(ActorToDraw, X, Y, Zoom) {
if (((ImageCloth == "Underwear") || (ImageCloth == "Naked")) && ActorSpecificHasInventory(ActorToDraw, "ChastityBelt")) ImageCloth = "ChastityBelt";
// Second part is the type of bondage
var ImageBondage = "_NoBondage";
var ImageBondage = "_NoBondage";
if (ActorSpecificHasInventory(ActorToDraw, "Cuffs")) ImageBondage = "_Cuffs";
if (ActorSpecificHasInventory(ActorToDraw, "Rope")) ImageBondage = "_Rope";
if (ActorSpecificHasInventory(ActorToDraw, "TwoRopes")) ImageBondage = "_TwoRopes";
@ -491,7 +491,7 @@ function DrawActor(ActorToDraw, X, Y, Zoom) {
if (ActorSpecificHasInventory(ActorToDraw, "ClothGag")) ImageGag = "_ClothGag";
// Fifth part is the blindfold
var ImageBlindfold = "";
var ImageBlindfold = "";
if (ActorSpecificHasInventory(ActorToDraw, "Blindfold")) ImageBlindfold = "_Blindfold";
// Fourth part is the pose
@ -500,7 +500,7 @@ function DrawActor(ActorToDraw, X, Y, Zoom) {
// Draw the full image from all parts
DrawImageZoom("Actors/" + ActorToDraw + "/" + ImageCloth + ImageBondage + ImageCollar + ImageGag + ImageBlindfold + ImagePose + ".png", 0, 0, 600, 900, X, Y, 600 * Zoom, 900 * Zoom);
}
}

View file

@ -42,11 +42,11 @@ function EventRandomPlayerPunishment() {
// Draw a punishment type at random
var PunishmentType = EventPunishmentList[Math.floor(Math.random() * EventPunishmentList.length)];
// If the event is valid for that actor
var PunishmentStage = GetText("Punishment" + PunishmentType);
if (IsNumeric(PunishmentStage)) {
// Check if the event can be done
if (PunishmentType == "Grounded") Result = parseInt(PunishmentStage);
if ((PunishmentType == "Spanked") && !GameLogQuery(CurrentChapter, "", "EventSpanked")) Result = parseInt(PunishmentStage);
@ -59,7 +59,7 @@ function EventRandomPlayerPunishment() {
}
// Returns the punishment type which will become the dialog number
return Result;
return Result;
}
@ -69,12 +69,12 @@ function EventRandomPlayerSubmissive() {
// Until we find a proper event
var Result = 0;
while (Result == 0) {
// Draw an event type at random, make sure it doesn't repeat
var EventType = EventLastRandomType;
while (EventType == EventLastRandomType)
EventType = EventList[Math.floor(Math.random() * EventList.length)];
// If the event is valid for that actor
var EventStage = GetText("Event" + EventType);
if (IsNumeric(EventStage)) {
@ -109,7 +109,7 @@ function EventRandomPlayerSubmissive() {
// Returns the event type which will become the dialog number
EventLastRandomType = EventType;
return Result;
}
// Log the end of an event, if it's the first time, it can change the actor attitude
@ -122,38 +122,38 @@ function EventLogEnd() {
EventActivityCurrent = "";
}
// When an activity event is registered
function EventDoActivity(EventActivityType, EventLoveFactor, EventCurrentStage, EventEndStage, EventBonusStage) {
// If it's a new activity
if (EventActivityCurrent != EventActivityType) {
// Reset the count and sets the pose
ActorSetPose(EventActivityType);
EventActivityCurrent = EventActivityType;
EventActivityCount = 0;
EventActivityLove = 0;
// The number of times the activity will be done depends on the love or hate
if ((EventActivityType == "Tickle") || (EventActivityType == "Masturbate")) EventActivityMaxCount = 5 + Math.floor(ActorGetValue(ActorLove) / 10);
else EventActivityMaxCount = 5 - Math.floor(ActorGetValue(ActorLove) / 10);
if (EventActivityMaxCount < 4) EventActivityMaxCount = 4;
if (EventActivityMaxCount > 8) EventActivityMaxCount = 8;
}
// Increments the activity
EventActivityCount++;
EventActivityLove = EventActivityLove + EventLoveFactor;
// If a bonus event can be achieved
if ((EventActivityCount >= 3) && (EventBonusStage > 0)) {
// 20% bonus chance (+20% if masturbated with an egg)
var BonusChance = Math.floor(Math.random() * 100);
if ((EventActivityType == "Masturbate") && PlayerHasLockedInventory("VibratingEgg")) BonusChance = BonusChance + 20;
// If we have the bonus, we log and jump to that stage
if (BonusChance >= 80) {
EventLogEnd();
@ -162,10 +162,10 @@ function EventDoActivity(EventActivityType, EventLoveFactor, EventCurrentStage,
}
}
// When the activity is over
if (EventActivityCount >= EventActivityMaxCount) {
// Log the activity and ends it
EventLogEnd()
if (EventActivityLove > 0) OverridenIntroText = GetText("ActivityEndGood");
@ -173,10 +173,10 @@ function EventDoActivity(EventActivityType, EventLoveFactor, EventCurrentStage,
if (EventActivityLove < 0) OverridenIntroText = GetText("ActivityEndBad");
ActorSetPose("");
return EventEndStage;
}
// FALSE means the activity isn't over
return EventCurrentStage;
}

View file

@ -14,7 +14,7 @@ function GameLogSpecificAdd(ChapterToLog, ActorToLog, EventToLog) {
for (var L = 0; L < GameLog.length; L++)
if ((ChapterToLog == GameLog[L][GameLogChapter]) && (ActorToLog == GameLog[L][GameLogActor]) && (EventToLog == GameLog[L][GameLogEvent]))
return;
// Log the event
GameLog[GameLog.length] = [ChapterToLog, ActorToLog, EventToLog, 0];

View file

@ -8,7 +8,7 @@ var PlayerInventoryTab = 0;
// Set up the player clothes or costume
function PlayerClothes(NewCloth) {
if ((NewCloth != "Clothed") && (NewCloth != "Underwear") && (NewCloth != "Naked")) Common_PlayerCostume = NewCloth;
else Common_PlayerCostume = "";
else Common_PlayerCostume = "";
Common_PlayerCloth = NewCloth;
Common_PlayerUnderwear = (NewCloth == "Underwear");
Common_PlayerNaked = (NewCloth == "Naked");
@ -42,10 +42,10 @@ function PlayerLockInventory(NewInventory) {
// Check if the item is already locked before adding it
for (var I = 0; I < PlayerLockedInventory.length; I++)
if (PlayerLockedInventory[I] == NewInventory)
return;
return;
PlayerLockedInventory.push(NewInventory);
LoadRestrainStatus();
// If there's rope/armbinder and a costume, we strip the player
if (((NewInventory == "Rope") || (NewInventory == "Armbinder")) && (Common_PlayerCostume != "") && (Common_PlayerCostume != "BlackDress") && (Common_PlayerCostume != "WhiteLingerie") && (Common_PlayerCostume != "RedBikini")) PlayerClothes("Underwear");
@ -79,13 +79,13 @@ function PlayerUnlockAllInventory(UnlockedInventory) {
// Returns true if the player has the locked inventory
function PlayerHasLockedInventory(QueryInventory) {
// Returns true if we find the locked inventory item
for (var I = 0; I < PlayerLockedInventory.length; I++)
if (QueryInventory == PlayerLockedInventory[I])
return true;
return false;
}
// Add a new item to the inventory if it's not already there
@ -98,16 +98,16 @@ function PlayerAddInventory(NewInventory, NewQuantity) {
if (PlayerInventory[I][PlayerInventoryQuantity] > 99) PlayerInventory[I][PlayerInventoryQuantity] = 99;
return;
}
// If not, we create the new inventory data
if (NewQuantity > 99) NewQuantity = 99;
PlayerInventory[PlayerInventory.length] = [NewInventory, NewQuantity];
}
// Remove an item from the player inventory
function PlayerRemoveInventory(RemInventory, RemQuantity) {
// Search for current inventory and remove the item
for (var I = 0; I < PlayerInventory.length; I++)
if (RemInventory == PlayerInventory[I][PlayerInventoryName])
@ -136,13 +136,13 @@ function PlayerRemoveHalfInventory() {
// Returns true if the player has the queried inventory
function PlayerHasInventory(QueryInventory) {
// Returns true if we find the inventory item
for (var I = 0; I < PlayerInventory.length; I++)
if (QueryInventory == PlayerInventory[I][PlayerInventoryName])
return true;
return false;
}
// Pick a random restrain and applies it on the player
@ -179,7 +179,7 @@ function PlayerRandomGag() {
// Applies it on the player
if (G != "") { PlayerRemoveInventory(G, 1); PlayerLockInventory(G); }
}
// Restrains the player randomly from her own inventory
@ -225,7 +225,7 @@ function PlayerInventoryTotalQuantity() {
// Returns the name of the inventory item that was clicked in the bottom menu
function GetClickedInventory() {
// Returns the item name based on the position of the mouse
var Inv = "";
if ((MouseX <= 975) && (MouseY >= 601) && (MouseY <= 674)) {
@ -233,7 +233,7 @@ function GetClickedInventory() {
// Check if the player icon was clicked
if ((MouseX >= 1) && (MouseX <= 74))
Inv = "Player";
// Check in the regular inventory
var I;
if (Inv == "")
@ -242,10 +242,10 @@ function GetClickedInventory() {
if (MouseX < 900) Inv = PlayerInventory[I][PlayerInventoryName];
else PlayerInventoryTab = 1;
}
// Check in the locked inventory
if (Inv == "")
for (var L = 0; L < PlayerLockedInventory.length; L++)
for (var L = 0; L < PlayerLockedInventory.length; L++)
if (!PlayerHasInventory(PlayerLockedInventory[L])) {
if ((MouseX >= 1 + (I + 1 - (PlayerInventoryTab * 11)) * 75) && (MouseX <= 74 + (I + 1 - (PlayerInventoryTab * 11)) * 75)) {
if (MouseX < 900) Inv = "Locked_" + PlayerLockedInventory[L];

View file

@ -14,7 +14,7 @@ function SaveMenu(NextChapter, NextScreen) {
function SaveStateGetSummary(SlotNumber) {
// Fetch the data
var SN = SlotNumber.toString();
var SN = SlotNumber.toString();
var Summary = "@" + GetText("NoSaveOnSlot") + " " + SN;
if (localStorage.getItem("SaveGameVersion" + SN))
if (localStorage.getItem("SaveGameVersion" + SN) == SaveGameVersion) {
@ -25,7 +25,7 @@ function SaveStateGetSummary(SlotNumber) {
SaveStateChapter = SaveStateChapter.substr(1, 100);
Summary = "@" + SaveStatePlayerName.substr(0, 10) + " - " + GetText("Chapter") + " " + SaveStateChapter + "|" + SaveStateDateTime;
}
// Returns the summary
return Summary;
@ -44,16 +44,16 @@ function SaveStateSlotSummary() {
CurrentStage[Slot][StageInteractionText] = SaveStateGetSummary(Slot);
Slot++;
}
}
}
// Save the game state on a specific slot
function SaveState(SlotNumber) {
// Save the current state of the game and the transitional variables
var SN = SlotNumber.toString();
var SN = SlotNumber.toString();
localStorage.setItem("SaveGameVersion" + SN, SaveGameVersion);
localStorage.setItem("SaveGameDateTime" + SN, GetFormatDate());
localStorage.setItem("CurrentChapter" + SN, SaveChapter);
@ -61,7 +61,7 @@ function SaveState(SlotNumber) {
localStorage.setItem("Common_PlayerName" + SN, Common_PlayerName);
localStorage.setItem("Common_PlayerOwner" + SN, Common_PlayerOwner);
localStorage.setItem("Common_PlayerLover" + SN, Common_PlayerLover);
localStorage.setItem("Common_PlayerCloth" + SN, Common_PlayerCloth);
localStorage.setItem("Common_PlayerCloth" + SN, Common_PlayerCloth);
localStorage.setItem("PlayerInventory" + SN, JSON.stringify(PlayerInventory));
localStorage.setItem("PlayerLockedInventory" + SN, JSON.stringify(PlayerLockedInventory));
localStorage.setItem("PlayerSkill" + SN, JSON.stringify(PlayerSkill));
@ -79,7 +79,7 @@ function SaveState(SlotNumber) {
function LoadState(SlotNumber) {
// If the save file is for the current version, we load
var SN = SlotNumber.toString();
var SN = SlotNumber.toString();
if (localStorage.getItem("SaveGameVersion" + SN))
if (localStorage.getItem("SaveGameVersion" + SN) == SaveGameVersion) {
@ -95,7 +95,7 @@ function LoadState(SlotNumber) {
GameLog = JSON.parse(localStorage.getItem("GameLog" + SN));
PlayerSkill = JSON.parse(localStorage.getItem("PlayerSkill" + SN));
CurrentTime = parseFloat(localStorage.getItem("CurrentTime" + SN));
// Makes sure the owner and lover aren't null from previous saves
if (Common_PlayerOwner == null) Common_PlayerOwner = "";
if (Common_PlayerLover == null) Common_PlayerLover = "";
@ -103,7 +103,7 @@ function LoadState(SlotNumber) {
// You can start with different clothes on chapter 12
if (CurrentChapter == "C012_AfterClass") {
Common_PlayerCloth = localStorage.getItem("Common_PlayerCloth" + SN);
if (Common_PlayerCloth == null) Common_PlayerCloth = "Clothed";
if (Common_PlayerCloth == null) Common_PlayerCloth = "Clothed";
PlayerClothes(Common_PlayerCloth);
}
@ -112,7 +112,7 @@ function LoadState(SlotNumber) {
if (Actor[L].length < 11)
Actor[L] = [Actor[L][0], Actor[L][1], Actor[L][2], Actor[L][3], Actor[L][4], Actor[L][5], Actor[L][6], Actor[L][7], Actor[L][8], false, ""];
// Make sure the game log array is wide enough (to remove when save games will be reset)
// Make sure the game log array is wide enough (to remove when save games will be reset)
for (var L = 0; L < GameLog.length; L++)
if (GameLog[L].length < 4)
GameLog[L] = [GameLog[L][0], GameLog[L][1], GameLog[L][2], 0];

18
Time.js
View file

@ -23,12 +23,12 @@ function msToTime(s) {
var mins = s % 60;
var hrs = (s - mins) / 60;
return pad(hrs) + ':' + pad(mins) + ':' + pad(secs);
}
// Runs the regular timer
function ProcessTimer() {
// Ticks the timer every for the screen refresh and events
clearInterval(CurrentTimer);
CurrentTimer = setInterval("MainRun()", RunInterval);
@ -38,19 +38,19 @@ function ProcessTimer() {
if (RunTimer) {
// Add the interval in milliseconds
CurrentTime = CurrentTime + RunInterval;
CurrentTime = CurrentTime + RunInterval;
// If the time limit is reached, we jump to a limit screen
if (CurrentTime >= LimitTimer) {
// Jump to the next chapter
CurrentTime = LimitTimer;
CurrentTime = LimitTimer;
SetScene(LimitChapter, LimitScreen);
}
}
}
// Starts the timer and sets the limits