mirror of
https://gitgud.io/BondageProjects/Bondage-College.git
synced 2025-04-10 02:19:20 +00:00
Spelling and Spacing Fixes (#3172)
* 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:
parent
bcc67eabbf
commit
fe6dbc9349
56 changed files with 284 additions and 284 deletions
Actor.jsCheat.jsCommon.jsDrawing.jsEvent.jsGameLog.jsInventory.jsSaveState.jsTime.js
BondageClub
Screens
Character
Appearance
Player
Online
ChatAdmin
ChatCreate
ChatRoom
Room/AsylumEntrance
Scripts
C000_Intro/ChapterSelect
C002_FirstClass
C012_AfterClass/RockShow
C101_KinbakuClub
C999_Common
Armbinder
BallGag
Blindfold
ChastityBelt
ClothGag
Collar
Cuffs
DoubleOpenGag
Manacles
PantieGag
Races
Rope
SockGag
TapeGag
42
Actor.js
42
Actor.js
|
@ -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";
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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.
|
|
@ -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
|
||||
因玩家权限设定无法修改颜色
|
|
@ -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.
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 ее схватили две горничные и сопроводили в комнату для прислуги, чтобы подать напитки для ее хозяйки.
|
||||
|
|
|
@ -31,4 +31,4 @@ This room name is already taken
|
|||
Account error, please try to relog
|
||||
Ошибка учетной записи, пожалуйста, попробуйте перерегистрироватся
|
||||
Invalid chat room data detected
|
||||
Обнаружены недопустимые данные чата комнаты
|
||||
Обнаружены недопустимые данные чата комнаты
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
|
@ -42,11 +42,11 @@ command: prerequisite check failed
|
|||
command:发送前检查失败
|
||||
HELP IS MISSING
|
||||
帮助不见啦!!!
|
||||
Friendlist:
|
||||
Friendlist:
|
||||
好友列表:
|
||||
Ghostlist:
|
||||
Ghostlist:
|
||||
忽视列表:
|
||||
Whitelist:
|
||||
Whitelist:
|
||||
白名单:
|
||||
Blacklist:
|
||||
Blacklist:
|
||||
黑名单:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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.
|
||||
|
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
|
@ -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,
|
||||
|
|
|
|
@ -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,
|
||||
|
|
|
|
@ -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,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,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,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,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.
|
||||
|
|
|
10
Cheat.js
10
Cheat.js
|
@ -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); }
|
||||
}
|
||||
|
||||
}
|
32
Common.js
32
Common.js
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
106
Drawing.js
106
Drawing.js
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
40
Event.js
40
Event.js
|
@ -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;
|
||||
|
||||
|
||||
}
|
|
@ -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];
|
||||
|
||||
|
|
30
Inventory.js
30
Inventory.js
|
@ -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];
|
||||
|
|
20
SaveState.js
20
SaveState.js
|
@ -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
18
Time.js
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue