diff --git a/BondageClub/Screens/Character/Player/Dialog_Player.csv b/BondageClub/Screens/Character/Player/Dialog_Player.csv index 000a9de221d797eb49a9c31604033f5791097fbb..8114dbe05a7e19f2bfa614f75a9b53ff51b672a8 100644 --- a/BondageClub/Screens/Character/Player/Dialog_Player.csv +++ b/BondageClub/Screens/Character/Player/Dialog_Player.csv @@ -34,6 +34,8 @@ PlayerGagged,,,(You can use or remove items by selecting specific body regions o 92,0,"(Yes, I want to be released.)",,DialogChatRoomSafewordRelease(), 92,0,"(No, don't release me.)",(You can use or remove items by selecting specific body regions on yourself.),, 0,,(Play Kinky Dungeon),,DialogStartKinkyDungeon(),DialogHasGamingHeadset() +KinkyDungeonExit,,,"SourceCharacter quit a game of Kinky Dungeon at level KinkyDungeonLevel",, +KinkyDungeonLose,,,"SourceCharacter met her defeat in Kinky Dungeon! She made it to level KinkyDungeonLevel before succumbing.",, SavedExpressionsSave,,,Save,, SavedExpressionsLoad,,,Load,, SavedExpressions,,,Save/Load Expressions,, @@ -753,6 +755,7 @@ InteractiveVisorHeadTypeHeavyTint,,,Heavy Tint,, SelectVisorType,,,Select the type of visor,, InteractiveVRHeadsetHeadSetVirtual,,,SourceCharacter logs DestinationCharacter headset into the virtual world.,, InteractiveVRHeadsetHeadSetAR,,,SourceCharacter configures DestinationCharacter headset to display the surroundings through a camera feed.,, +InteractiveVRHeadsetHeadSetGaming,,,SourceCharacter boots up Kinky Dungeon on DestinationCharacter headset.,, InteractiveVRHeadsetHeadSetOff,,,SourceCharacter turns off DestinationCharacter headset.,, InteractiveVRHeadsetHeadTypeVirtual,,,Virtual World,, InteractiveVRHeadsetHeadTypeGaming,,,Kinky Dungeon,, diff --git a/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeon.js b/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeon.js index 38dfaa8c8245325c8f80fbc90ec61d78bda75f90..d2fcceab250222c295dbe47706349c8c2fee3140 100644 --- a/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeon.js +++ b/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeon.js @@ -229,8 +229,22 @@ function KinkyDungeonClick() { * Handles exit during the kinky dungeon game * @returns {void} - Nothing */ -function KinkyDungeonExit() { +function KinkyDungeonExit() { CommonDynamicFunction(MiniGameReturnFunction + "()"); + + if (CurrentScreen == "ChatRoom" && KinkyDungeonState != "Menu" && (MiniGameKinkyDungeonLevel > 1 || KinkyDungeonState == "Lose")) { + let Message = "KinkyDungeonExit" + + if (KinkyDungeonState == "Lose") { + Message = "KinkyDungeonLose" + } + + let Dictionary = [ + { Tag: "SourceCharacter", Text: Player.Name, MemberNumber: Player.MemberNumber }, + { Tag: "KinkyDungeonLevel", Text: String(MiniGameKinkyDungeonLevel)}, + ]; + ChatRoomPublishCustomAction(Message, false, Dictionary); + } } /** diff --git a/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonDraw.js b/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonDraw.js index 370b06022a41215a9df4b0291998ce696ca00f51..7a48df93d7a6e874bd94d522edc7ef6dbd80bec7 100644 --- a/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonDraw.js +++ b/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonDraw.js @@ -197,19 +197,19 @@ function KinkyDungeonDrawGame() { if (KinkyDungeonSpells[KinkyDungeonSpellChoices[0]]) { var spell = KinkyDungeonSpells[KinkyDungeonSpellChoices[0]] DrawText(TextGet("KinkyDungeonSpell"+ spell.name), 1275, 835, color, "silver") - DrawText("(" + KinkyDungeonGetCost(spell.level) + ")", 1275, 870, color, "silver") + DrawText("(" + Math.ceil(KinkyDungeonGetCost(spell.level)) + ")", 1275, 870, color, "silver") DrawButton(1230, 895, 90, 90, "", "White", "Screens/Minigame/KinkyDungeon/Spell1.png", ""); } if (KinkyDungeonSpells[KinkyDungeonSpellChoices[1]]) { var spell = KinkyDungeonSpells[KinkyDungeonSpellChoices[1]] DrawText(TextGet("KinkyDungeonSpell"+ spell.name), 1525, 835, color, "silver") - DrawText("(" + KinkyDungeonGetCost(spell.level) + ")", 1525, 870, color, "silver") + DrawText("(" + Math.ceil(KinkyDungeonGetCost(spell.level)) + ")", 1525, 870, color, "silver") DrawButton(1480, 895, 90, 90, "", "White", "Screens/Minigame/KinkyDungeon/Spell2.png", ""); } if (KinkyDungeonSpells[KinkyDungeonSpellChoices[2]]) { var spell = KinkyDungeonSpells[KinkyDungeonSpellChoices[2]] DrawText(TextGet("KinkyDungeonSpell"+ spell.name), 1775, 835, color, "silver") - DrawText("(" + KinkyDungeonGetCost(spell.level) + ")", 1775, 870, color, "silver") + DrawText("(" + Math.ceil(KinkyDungeonGetCost(spell.level)) + ")", 1775, 870, color, "silver") DrawButton(1730, 895, 90, 90, "", "White", "Screens/Minigame/KinkyDungeon/Spell3.png", ""); } } else if (KinkyDungeonDrawState == "Magic") { diff --git a/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonEnemies.js b/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonEnemies.js index 23aa3da098d22b131d08b89ee9c8a9a6b7106fa9..a07a095e0c5c2d3d5ea4013663fd9e162051b4d8 100644 --- a/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonEnemies.js +++ b/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonEnemies.js @@ -121,7 +121,7 @@ function KinkyDungeonUpdateEnemies(delta) { break; } } - } else if (AI == "guard") { + } else if (AI == "guard" && (enemy.Enemy.attackWhileMoving || playerDist > enemy.Enemy.attackRange + 0.5)) { if (!enemy.gx) enemy.gx = enemy.x if (!enemy.gy) enemy.gy = enemy.y @@ -152,7 +152,7 @@ function KinkyDungeonUpdateEnemies(delta) { } playerDist = Math.sqrt((enemy.x - KinkyDungeonPlayerEntity.x)*(enemy.x - KinkyDungeonPlayerEntity.x) + (enemy.y - KinkyDungeonPlayerEntity.y)*(enemy.y - KinkyDungeonPlayerEntity.y)) - if (!moved && enemy.Enemy.attack.includes("Melee") && playerDist < enemy.Enemy.attackRange + 0.5) {//Player is adjacent + if ((!moved || enemy.Enemy.attackWhileMoving) && enemy.Enemy.attack.includes("Melee") && playerDist < enemy.Enemy.attackRange + 0.5) {//Player is adjacent idle = false; var dir = KinkyDungeonGetDirection(KinkyDungeonPlayerEntity.x - enemy.x, KinkyDungeonPlayerEntity.y - enemy.y) diff --git a/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonMagic.js b/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonMagic.js index fbc71c66a0b04b2a7085beb027d8a049928cb230..49e3780753f83f622fe2e81841a39506cd4b93b8 100644 --- a/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonMagic.js +++ b/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonMagic.js @@ -30,7 +30,7 @@ var KinkyDungeonSpellChoices = [0, 1, 2] var KinkyDungeonSpellChoiceCount = 3 var KinkyDungeonSpellList = { // List of spells you can unlock in the 3 books. When you plan to use a mystic seal, you get 3 spells to choose from. "Elements": [ - {name: "Fireball", exhaustion: 6, components: ["Arms"], level:4, type:"bolt", projectile:true, onhit:"aoe", power: 6, delay: 0, range: 50, aoe: 1.5, size: 3, lifetime:1, damage: "fire", speed: 1}, // Throws a fireball in a direction that moves 1 square each turn + {name: "Fireball", exhaustion: 6, components: ["Arms"], level:4, type:"bolt", projectile:true, onhit:"aoe", power: 4, delay: 0, range: 50, aoe: 1.5, size: 3, lifetime:1, damage: "fire", speed: 1}, // Throws a fireball in a direction that moves 1 square each turn {name: "Icebolt", exhaustion: 4, components: ["Arms"], level:2, type:"bolt", projectile:true, onhit:"", time: 2, power: 2, delay: 0, range: 50, damage: "stun", speed: 2}, // Throws a blast of ice which stuns the target for 2 turns ], "Conjure": [ diff --git a/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonRestraints.js b/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonRestraints.js index 0e7b6cb0079ddbcf171f42a68a4640f730314cd6..bd256b75e1306716bcb5e9ce11ddfb6c5a84f9d9 100644 --- a/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonRestraints.js +++ b/BondageClub/Screens/MiniGame/KinkyDungeon/KinkyDungeonRestraints.js @@ -37,7 +37,7 @@ var KinkyDungeonRestraints = [ {name: "WeakMagicRopeArms", Asset: "HempRope", Color: "#ff88AA", Group: "ItemArms", magic: false, power: 5, weight: 1, escapeChance: {"Struggle": 0.2, "Cut": 0.67, "Remove": 0.3}, enemyTags: {"ropeMagicWeak":2}, playerTags: {}, minLevel: 0, floors: []}, {name: "WeakMagicRopeLegs", Asset: "HempRope", Type: "FullBinding", Color: "#ff88AA", Group: "ItemLegs", magic: false, power: 3, weight: 1, escapeChance: {"Struggle": 0.2, "Cut": 0.67, "Remove": 0.3}, enemyTags: {"ropeMagicWeak":2}, playerTags: {}, minLevel: 0, floors: []}, - {name: "StickySlime", Asset: "Web", Type: "Tangled", Color: "#ff77ff", Group: "ItemArms", magic: false, power: 0, weight: 1, freeze: true, escapeChance: {"Struggle": 10.0, "Cut": 10.0, "Remove": 10.0}, enemyTags: {"slime":100}, playerTags: {}, minLevel: 0, floors: []}, + {name: "StickySlime", Asset: "Web", Type: "Wrapped", Color: "#ff77ff", Group: "ItemArms", magic: false, power: 0, weight: 1, freeze: true, escapeChance: {"Struggle": 10.0, "Cut": 10.0, "Remove": 10.0}, enemyTags: {"slime":100}, playerTags: {}, minLevel: 0, floors: []}, {name: "TrapArmbinder", Asset: "LeatherArmbinder", Type: "WrapStrap", Group: "ItemArms", magic: false, power: 8, weight: 2, escapeChance: {"Struggle": 0.1, "Cut": 0.33, "Remove": 0.2}, enemyTags: {"trap":100}, playerTags: {}, minLevel: 0, floors: []}, diff --git a/BondageClub/Screens/MiniGame/KinkyDungeon/Text_KinkyDungeon.csv b/BondageClub/Screens/MiniGame/KinkyDungeon/Text_KinkyDungeon.csv index 428ccd2bb5dcc94067eb4f2e044d56a6227e943b..33e55ce99d2d9f98d6b55aeb1ae04fad25389849 100644 --- a/BondageClub/Screens/MiniGame/KinkyDungeon/Text_KinkyDungeon.csv +++ b/BondageClub/Screens/MiniGame/KinkyDungeon/Text_KinkyDungeon.csv @@ -65,7 +65,7 @@ LootRubbleSmallGold,You find some gold coins in a corner (+XXX gold) LootRubbleKnife,You find a rusty knife among the rocks LootChestGold,The chest contains gold! (+XXX gold) -LootChestSpell,The chest contains a magic scroll. (+SpellLearned) +LootChestSpell,"You find a magic scroll, which you place in your spellbook. (+SpellLearned)" LootChestTrapMagic,A restraint appears on you with a puff of smoke. (+RestraintType) NameBlindZombie,Moaning Zombie @@ -189,7 +189,7 @@ KinkyDungeonSpellDescriptionIcebolt,A quick shard of ice that does DamageDealt d KinkyDungeonSpellCastIcebolt,You a hurl a shard of ice! KinkyDungeonSpellTargetIcebolt,Choose aim direction KinkyDungeonSpellFireball,Fireball -KinkyDungeonSpellDescriptionFireball,A slow moving ball of flame that explodes and does DamageDealt damage! +KinkyDungeonSpellDescriptionFireball,A slow moving ball of flame that explodes for DamageDealt damage, double on a direct hit! KinkyDungeonSpellCastFireball,You a hurl a fireball! KinkyDungeonSpellTargetFireball,Choose aim direction KinkyDungeonSpellSnare,Rope Snare diff --git a/BondageClub/Screens/Online/ChatRoom/ChatRoom.js b/BondageClub/Screens/Online/ChatRoom/ChatRoom.js index 6cbbce0844537387d0c933a08da6986d88f38e1d..d3a94798be8d80165c879bfc3c1624b28daaa6b9 100644 --- a/BondageClub/Screens/Online/ChatRoom/ChatRoom.js +++ b/BondageClub/Screens/Online/ChatRoom/ChatRoom.js @@ -1587,7 +1587,7 @@ function ChatRoomPublishCustomAction(msg, LeaveDialog, Dictionary) { if (CurrentScreen == "ChatRoom") { ServerSend("ChatRoomChat", { Content: msg, Type: "Action", Dictionary: Dictionary }); var C = CharacterGetCurrent(); - ChatRoomCharacterItemUpdate(C); + if (C) ChatRoomCharacterItemUpdate(C); if (LeaveDialog && (C != null)) DialogLeave(); } }