From 472ce9dbd501fa232f707fea12289d0b69c3835c Mon Sep 17 00:00:00 2001 From: "Z. Cliffe Schreuders" Date: Sat, 8 Nov 2025 12:41:48 +0000 Subject: [PATCH] Enhance NPC conversation flow and inventory synchronization - Added a small delay before restarting conversations after NPC inventory interactions to ensure a smoother user experience. - Updated the item synchronization logic in PersonChatConversation and PhoneChatConversation to set variables for items not in inventory, improving accuracy in item tracking. - Enhanced the helper NPC dialogue to provide clearer options for item requests, enriching player engagement. --- js/minigames/container/container-minigame.js | 29 ++++--- .../person-chat/person-chat-conversation.js | 27 +++--- .../phone-chat/phone-chat-conversation.js | 27 +++--- scenarios/ink/helper-npc.ink | 83 +++++++++++++++---- scenarios/ink/helper-npc.json | 2 +- 5 files changed, 116 insertions(+), 52 deletions(-) diff --git a/js/minigames/container/container-minigame.js b/js/minigames/container/container-minigame.js index 6172e52..87d2c1c 100644 --- a/js/minigames/container/container-minigame.js +++ b/js/minigames/container/container-minigame.js @@ -700,19 +700,22 @@ export function returnToConversationAfterNPCInventory() { // Restart the appropriate conversation minigame if (window.MinigameFramework) { - if (conversationState.type === 'person-chat') { - // Restart person-chat minigame - window.MinigameFramework.startMinigame('person-chat', null, { - npcId: conversationState.npcId, - fromTag: true // Flag to indicate we're resuming from a tag action - }); - } else if (conversationState.type === 'phone-chat') { - // Restart phone-chat minigame - window.MinigameFramework.startMinigame('phone-chat', null, { - npcId: conversationState.npcId, - fromTag: true // Flag to indicate we're resuming from a tag action - }); - } + // Small delay to ensure container is fully closed + setTimeout(() => { + if (conversationState.type === 'person-chat') { + // Restart person-chat minigame + window.MinigameFramework.startMinigame('person-chat', null, { + npcId: conversationState.npcId, + fromTag: true // Flag to indicate we're resuming from a tag action + }); + } else if (conversationState.type === 'phone-chat') { + // Restart phone-chat minigame + window.MinigameFramework.startMinigame('phone-chat', null, { + npcId: conversationState.npcId, + fromTag: true // Flag to indicate we're resuming from a tag action + }); + } + }, 50); } } else { console.log('No pending conversation return found'); diff --git a/js/minigames/person-chat/person-chat-conversation.js b/js/minigames/person-chat/person-chat-conversation.js index b9c38d7..7f6b54f 100644 --- a/js/minigames/person-chat/person-chat-conversation.js +++ b/js/minigames/person-chat/person-chat-conversation.js @@ -116,6 +116,7 @@ export default class PersonChatConversation { /** * Sync NPC's held items to Ink variables * Sets has_ based on itemsHeld array + * IMPORTANT: Also sets variables to false for items NOT in inventory */ syncItemsToInk() { if (!this.inkEngine || !this.inkEngine.story) return; @@ -132,17 +133,21 @@ export default class PersonChatConversation { itemCounts[item.type] = (itemCounts[item.type] || 0) + 1; }); - // Set has_ variables based on inventory - Object.keys(itemCounts).forEach(type => { - const varName = `has_${type}`; - if (varState._defaultGlobalVariables && varState._defaultGlobalVariables.has(varName)) { - const hasItem = itemCounts[type] > 0; - try { - this.inkEngine.setVariable(varName, hasItem); - console.log(`✅ Synced ${varName} = ${hasItem} for NPC ${npc.id}`); - } catch (err) { - console.warn(`⚠️ Could not sync ${varName}:`, err.message); - } + // Get all declared has_* variables from the story + const declaredVars = Array.from(varState._defaultGlobalVariables.keys()); + const hasItemVars = declaredVars.filter(varName => varName.startsWith('has_')); + + // Sync all has_* variables - set to true if NPC has item, false if not + hasItemVars.forEach(varName => { + // Extract item type from variable name (e.g., "has_lockpick" -> "lockpick") + const itemType = varName.replace(/^has_/, ''); + const hasItem = (itemCounts[itemType] || 0) > 0; + + try { + this.inkEngine.setVariable(varName, hasItem); + console.log(`✅ Synced ${varName} = ${hasItem} for NPC ${npc.id} (${itemCounts[itemType] || 0} items)`); + } catch (err) { + console.warn(`⚠️ Could not sync ${varName}:`, err.message); } }); } diff --git a/js/minigames/phone-chat/phone-chat-conversation.js b/js/minigames/phone-chat/phone-chat-conversation.js index 1f8176d..7dd7f93 100644 --- a/js/minigames/phone-chat/phone-chat-conversation.js +++ b/js/minigames/phone-chat/phone-chat-conversation.js @@ -134,6 +134,7 @@ export default class PhoneChatConversation { /** * Sync NPC's held items to Ink variables * Sets has_ based on itemsHeld array + * IMPORTANT: Also sets variables to false for items NOT in inventory */ syncItemsToInk() { if (!this.engine || !this.engine.story) return; @@ -150,17 +151,21 @@ export default class PhoneChatConversation { itemCounts[item.type] = (itemCounts[item.type] || 0) + 1; }); - // Set has_ variables based on inventory - Object.keys(itemCounts).forEach(type => { - const varName = `has_${type}`; - if (varState._defaultGlobalVariables && varState._defaultGlobalVariables.has(varName)) { - const hasItem = itemCounts[type] > 0; - try { - this.engine.setVariable(varName, hasItem); - console.log(`✅ Synced ${varName} = ${hasItem} for NPC ${npc.id}`); - } catch (err) { - console.warn(`⚠️ Could not sync ${varName}:`, err.message); - } + // Get all declared has_* variables from the story + const declaredVars = Array.from(varState._defaultGlobalVariables.keys()); + const hasItemVars = declaredVars.filter(varName => varName.startsWith('has_')); + + // Sync all has_* variables - set to true if NPC has item, false if not + hasItemVars.forEach(varName => { + // Extract item type from variable name (e.g., "has_lockpick" -> "lockpick") + const itemType = varName.replace(/^has_/, ''); + const hasItem = (itemCounts[itemType] || 0) > 0; + + try { + this.engine.setVariable(varName, hasItem); + console.log(`✅ Synced ${varName} = ${hasItem} for NPC ${npc.id} (${itemCounts[itemType] || 0} items)`); + } catch (err) { + console.warn(`⚠️ Could not sync ${varName}:`, err.message); } }); } diff --git a/scenarios/ink/helper-npc.ink b/scenarios/ink/helper-npc.ink index 37c3416..eab4ef5 100644 --- a/scenarios/ink/helper-npc.ink +++ b/scenarios/ink/helper-npc.ink @@ -81,7 +81,7 @@ What would you like to do? {has_unlocked_ceo: I already unlocked the CEO's office for you! Just head on in. -> hub -|- else: +- else: The CEO's office? That's a tough one... {trust_level >= 1: Alright, I trust you enough. Let me unlock that door for you. @@ -109,12 +109,26 @@ Let me know! {not has_lockpick and not has_workstation and not has_phone and not has_keycard: Sorry, I don't have any items to give you right now. -> hub -|- else: +- else: {trust_level >= 2: - Let me show you what I have for you! - #give_npc_inventory_items - ~ asked_for_items = true - -> hub + Let me see what I have available... + + Here's what I can offer you: + {has_lockpick: + • Lock Pick Kit - for opening locked doors and containers 🔓 + } + {has_workstation: + • Crypto Analysis Station - for cryptographic challenges 💻 + } + {has_phone: + • Phone - with interesting contacts 📱 + } + {has_keycard: + • Keycard - for restricted areas 🎫 + } + + What would you like? + -> give_items_choice - else: I have some items, but I need to trust you more first. Build up some trust - ask me questions! @@ -122,6 +136,43 @@ Let me know! } } +=== give_items_choice === +{has_lockpick or has_workstation or has_phone or has_keycard: + * [Show me everything] + #give_npc_inventory_items + ~ asked_for_items = true + -> hub + {has_lockpick: + * [I'll take the lockpick] + #give_item:lockpick + ~ asked_for_items = true + -> hub + } + {has_workstation: + * [I'll take the workstation] + #give_item:workstation + ~ asked_for_items = true + -> hub + } + {has_phone: + * [I'll take the phone] + #give_item:phone + ~ asked_for_items = true + -> hub + } + {has_keycard: + * [I'll take the keycard] + #give_item:keycard + ~ asked_for_items = true + -> hub + } + * [Never mind] + -> hub +- else: + Sorry, I don't have any items left to give you right now. + -> hub +} + === other_items === # speaker:npc I think I gave you most of what I had. Check your inventory! @@ -139,7 +190,7 @@ What else do you need? {has_unlocked_ceo: The CEO's office has evidence you're looking for. Search the desk thoroughly. Also, check any computers for sensitive files. -|- else: +- else: {has_lockpick: Try using that lockpick set on locked doors and containers around the building. You never know what secrets people hide behind locked doors! @@ -161,7 +212,7 @@ Good luck! === on_lockpick_pickup === {has_lockpick: Great! You found the lockpick I gave you. Try it on a locked door or container! -|- else: +- else: Nice find! That lockpick set looks professional. Could be very useful. } -> hub @@ -171,7 +222,7 @@ Good luck! ~ saw_lockpick_used = true {has_lockpick: Excellent! Glad I could help you get through that. -|- else: +- else: Nice work getting through that lock! } -> hub @@ -181,7 +232,7 @@ Good luck! {has_lockpick: Don't give up! Lockpicking takes practice. Try adjusting the tension. Want me to help you with anything else? -|- else: +- else: Tough break. Lockpicking isn't easy without the right tools... I might be able to help with that if you ask. } @@ -192,7 +243,7 @@ Good luck! ~ saw_door_unlock = true {has_unlocked_ceo: Another door open! You're making great progress. -|- else: +- else: Nice! You found a way through that door. Keep going! } -> hub @@ -202,7 +253,7 @@ Good luck! That door's locked tight. You'll need to find a way to unlock it. {trust_level >= 2: Want me to help you out? Just ask! -|- else: +- else: {trust_level >= 1: I might be able to help if you get to know me better first. } @@ -214,7 +265,7 @@ That door's locked tight. You'll need to find a way to unlock it. {has_unlocked_ceo: The CEO's desk - you made it! Nice work. That's where the important evidence is kept. -|- else: +- else: Trying to get into the CEO's office? I might be able to help with that... } -> hub @@ -230,7 +281,7 @@ That door's locked tight. You'll need to find a way to unlock it. === on_room_entered === {has_unlocked_ceo: Keep searching for that evidence! -|- else: +- else: {trust_level >= 1: You're making progress through the building. Let me know if you need help with anything. @@ -245,7 +296,7 @@ That door's locked tight. You'll need to find a way to unlock it. {trust_level >= 2: Great find! This new area might have what we need. Search it thoroughly! -|- else: +- else: {trust_level >= 1: Interesting! You've found a new area. Be careful exploring. - else: @@ -259,7 +310,7 @@ That door's locked tight. You'll need to find a way to unlock it. {has_unlocked_ceo: You're in! Remember, you're looking for evidence of the data breach. Check the desk, computer, and any drawers. -|- else: +- else: Whoa, you got into the CEO's office! That's impressive! ~ trust_level = trust_level + 1 Maybe I underestimated you. Impressive work! diff --git a/scenarios/ink/helper-npc.json b/scenarios/ink/helper-npc.json index 7a940bc..bb5014f 100644 --- a/scenarios/ink/helper-npc.json +++ b/scenarios/ink/helper-npc.json @@ -1 +1 @@ -{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":["#","^speaker:npc","/#","^Hey there!! I'm here to help you out if you need it. 👋","\n","^What can I do for you?","\n","ev",true,"/ev",{"VAR=":"has_greeted","re":true},{"->":"hub"},null],"hub":[["ev",{"VAR?":"asked_about_self"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Who are you?","/str","/ev",{"*":".^.c-0","flg":20},{"->":"hub.0.5"},{"c-0":["\n","ev",true,"/ev",{"VAR=":"asked_about_self","re":true},{"->":"who_are_you"},{"#f":5}]}]}],"nop","\n","ev",{"VAR?":"asked_about_self"},{"VAR?":"has_unlocked_ceo"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Can you help me get into the CEO's office?","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.14"},{"c-0":["\n",{"->":"help_ceo_office"},null]}]}],"nop","\n","ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Any other doors you need help with?","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.20"},{"c-0":["\n",{"->":"other_doors"},null]}]}],"nop","\n","ev",{"VAR?":"asked_about_self"},{"VAR?":"has_given_lockpick"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Do you have any items for me?","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.29"},{"c-0":["\n",{"->":"give_items"},null]}]}],"nop","\n","ev",{"VAR?":"has_given_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Got any other items for me?","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.35"},{"c-0":["\n",{"->":"other_items"},null]}]}],"nop","\n","ev",{"VAR?":"saw_lockpick_used"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Thanks for the lockpick! It worked great.","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.41"},{"c-0":["\n",{"->":"lockpick_feedback"},null]}]}],"nop","\n","ev",{"VAR?":"trust_level"},3,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^What hints do you have for me?","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.49"},{"c-0":["\n",{"->":"give_hints"},null]}]}],"nop","\n","ev","str","^Thanks, I'm good for now.","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["^ ","#","^exit_conversation","/#","\n","#","^speaker:npc","/#","^Alright then. Let me know if you need anything else!","\n",{"->":"hub"},null]}],null],"who_are_you":["^I'm a friendly NPC who can help you progress through the mission.","\n","^I can unlock doors, give you items, and provide hints when you need them.","\n","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^What would you like to do?","\n",{"->":"hub"},null],"help_ceo_office":["#","^speaker:npc","/#","ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^I already unlocked the CEO's office for you! Just head on in.","\n",{"->":"hub"},{"->":".^.^.^.8"},null]}],[{"->":".^.b"},{"b":["\n","^The CEO's office? That's a tough one...","\n","ev",{"VAR?":"trust_level"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Alright, I trust you enough. Let me unlock that door for you.","\n","ev",true,"/ev",{"VAR=":"has_unlocked_ceo","re":true},"ev",true,"/ev",{"VAR=":"asked_about_ceo","re":true},"^There you go! The door to the CEO's office is now unlocked. ","#","^unlock_door:ceo","/#","\n","ev",{"VAR?":"trust_level"},2,"+","/ev",{"VAR=":"trust_level","re":true},"^What else can I help with?","\n",{"->":"hub"},{"->":".^.^.^.10"},null]}],[{"->":".^.b"},{"b":["\n","^I don't know you well enough yet. Ask me some questions first and we can build some trust.","\n",{"->":"hub"},{"->":".^.^.^.10"},null]}],"nop","\n",{"->":".^.^.^.8"},null]}],"nop","\n",null],"other_doors":["#","^speaker:npc","/#","^What other doors do you need help with? I can try to unlock them if you tell me which ones.","\n","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Let me know!","\n",{"->":"hub"},null],"give_items":["#","^speaker:npc","/#","ev",{"VAR?":"trust_level"},2,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Let me see what I have available...","\n","ev",{"VAR?":"has_lockpick"},{"VAR?":"has_workstation"},"||",{"VAR?":"has_phone"},"||",{"VAR?":"has_bluetooth_scanner"},"||",{"VAR?":"has_fingerprint_kit"},"||",{"VAR?":"has_pin_cracker"},"||",{"VAR?":"has_keycard"},"||",{"VAR?":"has_key"},"||","/ev",[{"->":".^.b","c":true},{"b":["\n","^Here's what I can offer you:","\n","ev",{"VAR?":"has_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Lock Pick Kit - for opening locked doors and containers 🔓",{"->":".^.^.^.7"},null]}],"nop","\n","ev",{"VAR?":"has_workstation"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Crypto Analysis Station - for cryptographic challenges 💻",{"->":".^.^.^.13"},null]}],"nop","\n","ev",{"VAR?":"has_phone"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Phone - with interesting contacts 📱",{"->":".^.^.^.19"},null]}],"nop","\n","ev",{"VAR?":"has_bluetooth_scanner"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Bluetooth Scanner - for finding nearby devices 📡",{"->":".^.^.^.25"},null]}],"nop","\n","ev",{"VAR?":"has_fingerprint_kit"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Fingerprint Kit - for forensic analysis 🔍",{"->":".^.^.^.31"},null]}],"nop","\n","ev",{"VAR?":"has_pin_cracker"},"/ev",[{"->":".^.b","c":true},{"b":["^ • PIN Cracker - for bypassing numeric locks 🔢",{"->":".^.^.^.37"},null]}],"nop","\n","ev",{"VAR?":"has_keycard"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Keycard - for restricted areas 🎫",{"->":".^.^.^.43"},null]}],"nop","\n","ev",{"VAR?":"has_key"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Key - might be useful 🔑",{"->":".^.^.^.49"},null]}],"nop","\n","^What would you like?","\n","ev",{"VAR?":"has_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Lock Pick Kit","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.57"},{"c-0":["\n",{"->":"give_lockpick"},null]}]}],"nop","\n","ev",{"VAR?":"has_workstation"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Crypto Analysis Station","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.63"},{"c-0":["\n",{"->":"give_workstation"},null]}]}],"nop","\n","ev",{"VAR?":"has_phone"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Phone","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.69"},{"c-0":["\n",{"->":"give_phone"},null]}]}],"nop","\n","ev",{"VAR?":"has_bluetooth_scanner"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Bluetooth Scanner","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.75"},{"c-0":["\n",{"->":"give_bluetooth_scanner"},null]}]}],"nop","\n","ev",{"VAR?":"has_fingerprint_kit"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Fingerprint Kit","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.81"},{"c-0":["\n",{"->":"give_fingerprint_kit"},null]}]}],"nop","\n","ev",{"VAR?":"has_pin_cracker"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the PIN Cracker","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.87"},{"c-0":["\n",{"->":"give_pin_cracker"},null]}]}],"nop","\n","ev",{"VAR?":"has_keycard"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Keycard","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.93"},{"c-0":["\n",{"->":"give_keycard"},null]}]}],"nop","\n","ev",{"VAR?":"has_key"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Key","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.99"},{"c-0":["\n",{"->":"give_key"},null]}]}],"nop","\n","ev","str","^Actually, never mind","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.22"},{"c-0":["\n",{"->":"hub"},null]}]}],[{"->":".^.b"},{"b":["\n","^I don't have any items to give you right now. Sorry!","\n",{"->":"hub"},{"->":".^.^.^.22"},null]}],"nop","\n",{"->":".^.^.^.10"},null]}],[{"->":".^.b"},{"b":["\n","^I need to trust you more before I give you something like that.","\n","^Build up some trust first - ask me questions or help me out!","\n",{"->":"hub"},{"->":".^.^.^.10"},null]}],"nop","\n",null],"give_lockpick":["#","^speaker:npc","/#","^Here's a lockpick set. Use it to open locked doors and containers! 🔓","\n","ev",true,"/ev",{"VAR=":"has_given_lockpick","re":true},"ev",true,"/ev",{"VAR=":"asked_for_items","re":true},"#","^give_item:lockpick","/#","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Good luck out there!","\n",{"->":"hub"},null],"give_workstation":["#","^speaker:npc","/#","^I've got a crypto analysis workstation for you. This should help with any cryptographic challenges you encounter.","\n","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},"#","^give_item:workstation","/#","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Use it well!","\n",{"->":"hub"},null],"give_phone":["#","^speaker:npc","/#","^Here's a phone. It has some interesting contacts you might find useful.","\n","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},"#","^give_item:phone","/#","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Keep in touch!","\n",{"->":"hub"},null],"give_bluetooth_scanner":["#","^speaker:npc","/#","^I have a Bluetooth scanner. Use it to find and connect to nearby devices.","\n","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},"#","^give_item:bluetooth_scanner","/#","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Happy scanning!","\n",{"->":"hub"},null],"give_fingerprint_kit":["#","^speaker:npc","/#","^Here's a fingerprint kit. Useful for forensic analysis.","\n","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},"#","^give_item:fingerprint_kit","/#","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Handle with care!","\n",{"->":"hub"},null],"give_pin_cracker":["#","^speaker:npc","/#","^I've got a PIN cracker tool. This can help you bypass numeric locks.","\n","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},"#","^give_item:pin-cracker","/#","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Use responsibly!","\n",{"->":"hub"},null],"give_keycard":["#","^speaker:npc","/#","^Here's a keycard for restricted areas. Think you can use it responsibly?","\n","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},"#","^give_item:keycard","/#","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Use it wisely!","\n",{"->":"hub"},null],"give_key":["#","^speaker:npc","/#","^I have a key that might be useful. Take it!","\n","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},"#","^give_item:key","/#","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},{"->":"hub"},null],"other_items":["#","^speaker:npc","/#","ev",{"VAR?":"trust_level"},4,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Let me see what else I have available...","\n","ev",{"VAR?":"has_workstation"},{"VAR?":"has_phone"},"||",{"VAR?":"has_bluetooth_scanner"},"||",{"VAR?":"has_fingerprint_kit"},"||",{"VAR?":"has_pin_cracker"},"||",{"VAR?":"has_keycard"},"||",{"VAR?":"has_key"},"||","/ev",[{"->":".^.b","c":true},{"b":["\n","^Here's what else I can offer:","\n","ev",{"VAR?":"has_workstation"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Crypto Analysis Station - for cryptographic challenges 💻",{"->":".^.^.^.7"},null]}],"nop","\n","ev",{"VAR?":"has_phone"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Phone - with interesting contacts 📱",{"->":".^.^.^.13"},null]}],"nop","\n","ev",{"VAR?":"has_bluetooth_scanner"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Bluetooth Scanner - for finding nearby devices 📡",{"->":".^.^.^.19"},null]}],"nop","\n","ev",{"VAR?":"has_fingerprint_kit"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Fingerprint Kit - for forensic analysis 🔍",{"->":".^.^.^.25"},null]}],"nop","\n","ev",{"VAR?":"has_pin_cracker"},"/ev",[{"->":".^.b","c":true},{"b":["^ • PIN Cracker - for bypassing numeric locks 🔢",{"->":".^.^.^.31"},null]}],"nop","\n","ev",{"VAR?":"has_keycard"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Keycard - for restricted areas 🎫",{"->":".^.^.^.37"},null]}],"nop","\n","ev",{"VAR?":"has_key"},"/ev",[{"->":".^.b","c":true},{"b":["^ • Key - might be useful 🔑",{"->":".^.^.^.43"},null]}],"nop","\n","^What would you like?","\n","ev",{"VAR?":"has_workstation"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Crypto Analysis Station","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.51"},{"c-0":["\n",{"->":"give_workstation"},null]}]}],"nop","\n","ev",{"VAR?":"has_phone"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Phone","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.57"},{"c-0":["\n",{"->":"give_phone"},null]}]}],"nop","\n","ev",{"VAR?":"has_bluetooth_scanner"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Bluetooth Scanner","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.63"},{"c-0":["\n",{"->":"give_bluetooth_scanner"},null]}]}],"nop","\n","ev",{"VAR?":"has_fingerprint_kit"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Fingerprint Kit","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.69"},{"c-0":["\n",{"->":"give_fingerprint_kit"},null]}]}],"nop","\n","ev",{"VAR?":"has_pin_cracker"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the PIN Cracker","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.75"},{"c-0":["\n",{"->":"give_pin_cracker"},null]}]}],"nop","\n","ev",{"VAR?":"has_keycard"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Keycard","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.81"},{"c-0":["\n",{"->":"give_keycard"},null]}]}],"nop","\n","ev",{"VAR?":"has_key"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the Key","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.87"},{"c-0":["\n",{"->":"give_key"},null]}]}],"nop","\n","ev","str","^Actually, never mind","/str","/ev",{"*":".^.c-0","flg":4},{"->":".^.^.^.20"},{"c-0":["\n",{"->":"hub"},null]}]}],[{"->":".^.b"},{"b":["\n","^That's all I have right now. Sorry!","\n",{"->":"hub"},{"->":".^.^.^.20"},null]}],"nop","\n",{"->":".^.^.^.10"},null]}],[{"->":".^.b"},{"b":["\n","^That's all I have right now. The lockpick set is your best tool for now.","\n",{"->":"hub"},{"->":".^.^.^.10"},null]}],"nop","\n",null],"lockpick_feedback":["^Great! I'm glad it helped you out. That's what I'm here for.","\n","^You're doing excellent work on this mission.","\n","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"ev",false,"/ev",{"VAR=":"saw_lockpick_used","re":true},"^What else do you need?","\n",{"->":"hub"},null],"give_hints":["ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^The CEO's office has evidence you're looking for. Search the desk thoroughly.","\n","^Also, check any computers for sensitive files.","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"has_given_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Try using that lockpick set on locked doors and containers around the building.","\n","^You never know what secrets people hide behind locked doors!","\n",{"->":".^.^.^.6"},null]}],[{"->":".^.b"},{"b":["\n","^Explore every room carefully. Items are often hidden in places you'd least expect.","\n",{"->":".^.^.^.6"},null]}],"nop","\n",{"->":".^.^.^.5"},null]}],"nop","\n","^Good luck!","\n",{"->":"hub"},null],"on_lockpick_pickup":["ev",{"VAR?":"has_given_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Great! You found the lockpick I gave you. Try it on a locked door or container!","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","^Nice find! That lockpick set looks professional. Could be very useful. 🔓","\n",{"->":".^.^.^.5"},null]}],"nop","\n",{"->":"hub"},null],"on_lockpick_success":["ev",true,"/ev",{"VAR=":"saw_lockpick_used","re":true},"ev",{"VAR?":"has_given_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Excellent! Glad I could help you get through that. 🎯","\n",{"->":".^.^.^.9"},null]}],[{"->":".^.b"},{"b":["\n","^Nice work getting through that lock! 🔓","\n",{"->":".^.^.^.9"},null]}],"nop","\n",{"->":"hub"},null],"on_lockpick_failed":["ev",{"VAR?":"has_given_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Don't give up! Lockpicking takes practice. Try adjusting the tension. 🔧","\n","^Want me to help you with anything else?","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","^Tough break. Lockpicking isn't easy without the right tools...","\n","^I might be able to help with that if you ask.","\n",{"->":".^.^.^.5"},null]}],"nop","\n",{"->":"hub"},null],"on_door_unlocked":["ev",true,"/ev",{"VAR=":"saw_door_unlock","re":true},"ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Another door open! You're making great progress. 🚪✓","\n",{"->":".^.^.^.9"},null]}],[{"->":".^.b"},{"b":["\n","^Nice! You found a way through that door. Keep going!","\n",{"->":".^.^.^.9"},null]}],"nop","\n",{"->":"hub"},null],"on_door_attempt":["^That door's locked tight. You'll need to find a way to unlock it. 🔒","\n","ev",{"VAR?":"trust_level"},2,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Want me to help you out? Just ask!","\n",{"->":".^.^.^.9"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"trust_level"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^I might be able to help if you get to know me better first.","\n",{"->":".^.^.^.7"},null]}],"nop","\n",{"->":".^.^.^.9"},null]}],"nop","\n",{"->":"hub"},null],"on_ceo_desk_interact":["ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^The CEO's desk - you made it! Nice work. 📋","\n","^That's where the important evidence is kept.","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","^Trying to get into the CEO's office? I might be able to help with that...","\n",{"->":".^.^.^.5"},null]}],"nop","\n",{"->":"hub"},null],"on_item_found":["ev",{"VAR?":"trust_level"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Good find! Every item could be important for your mission. 📦","\n",{"->":".^.^.^.6"},null]}],"nop","\n",{"->":"hub"},null],"on_room_entered":["ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Keep searching for that evidence! 🔍","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"trust_level"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^You're making progress through the building. 🚶","\n","^Let me know if you need help with anything.","\n",{"->":".^.^.^.8"},null]}],[{"->":".^.b"},{"b":["\n","^Exploring new areas... 🚶","\n",{"->":".^.^.^.8"},null]}],"nop","\n",{"->":".^.^.^.5"},null]}],"nop","\n",{"->":"hub"},null],"on_room_discovered":["ev",{"VAR?":"trust_level"},2,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Great find! This new area might have what we need. 🗺️✨","\n","^Search it thoroughly!","\n",{"->":".^.^.^.7"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"trust_level"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Interesting! You've found a new area. Be careful exploring. 🗺️","\n",{"->":".^.^.^.8"},null]}],[{"->":".^.b"},{"b":["\n","^A new room... wonder what's inside. 🚪","\n",{"->":".^.^.^.8"},null]}],"nop","\n",{"->":".^.^.^.7"},null]}],"nop","\n",{"->":"hub"},null],"on_ceo_office_entered":["ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^You're in! Remember, you're looking for evidence of the data breach. 🕵️","\n","^Check the desk, computer, and any drawers.","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","^Whoa, you got into the CEO's office! That's impressive! 🎉","\n","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Maybe I underestimated you. Impressive work!","\n",{"->":".^.^.^.5"},null]}],"nop","\n",{"->":"hub"},null],"global decl":["ev",0,{"VAR=":"trust_level"},false,{"VAR=":"has_unlocked_ceo"},false,{"VAR=":"has_given_lockpick"},false,{"VAR=":"saw_lockpick_used"},false,{"VAR=":"saw_door_unlock"},false,{"VAR=":"has_greeted"},false,{"VAR=":"asked_about_self"},false,{"VAR=":"asked_about_ceo"},false,{"VAR=":"asked_for_items"},false,{"VAR=":"has_phone"},false,{"VAR=":"has_lockpick"},false,{"VAR=":"has_workstation"},false,{"VAR=":"has_bluetooth_scanner"},false,{"VAR=":"has_fingerprint_kit"},false,{"VAR=":"has_pin_cracker"},false,{"VAR=":"has_keycard"},false,{"VAR=":"has_key"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file +{"inkVersion":21,"root":[[["done",{"#n":"g-0"}],null],"done",{"start":["#","^speaker:npc","/#","^Hey there! I'm here to help you out if you need it. 👋","\n","^What can I do for you?","\n","ev",true,"/ev",{"VAR=":"has_greeted","re":true},{"->":"hub"},null],"hub":[["ev",{"VAR?":"asked_about_self"},"!","/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Who are you?","/str","/ev",{"*":".^.c-0","flg":20},{"->":"hub.0.5"},{"c-0":["\n","ev",true,"/ev",{"VAR=":"asked_about_self","re":true},{"->":"who_are_you"},{"#f":5}]}]}],"nop","\n","ev",{"VAR?":"asked_about_self"},{"VAR?":"has_unlocked_ceo"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Can you help me get into the CEO's office?","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.14"},{"c-0":["\n",{"->":"help_ceo_office"},null]}]}],"nop","\n","ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Any other doors you need help with?","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.20"},{"c-0":["\n",{"->":"other_doors"},null]}]}],"nop","\n","ev",{"VAR?":"asked_about_self"},{"VAR?":"has_lockpick"},{"VAR?":"has_workstation"},"||",{"VAR?":"has_phone"},"||",{"VAR?":"has_keycard"},"||","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Do you have any items for me?","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.34"},{"c-0":["\n",{"->":"give_items"},null]}]}],"nop","\n","ev",{"VAR?":"saw_lockpick_used"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Thanks for the lockpick! It worked great.","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.40"},{"c-0":["\n",{"->":"lockpick_feedback"},null]}]}],"nop","\n","ev",{"VAR?":"trust_level"},3,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^What hints do you have for me?","/str","/ev",{"*":".^.c-0","flg":4},{"->":"hub.0.48"},{"c-0":["\n",{"->":"give_hints"},null]}]}],"nop","\n","ev","str","^Thanks, I'm good for now.","/str","/ev",{"*":".^.c-0","flg":4},{"c-0":["^ ","#","^exit_conversation","/#","\n","#","^speaker:npc","/#","^Alright then. Let me know if you need anything else!","\n",{"->":"hub"},null]}],null],"who_are_you":["^I'm a friendly NPC who can help you progress through the mission.","\n","^I can unlock doors, give you items, and provide hints when you need them.","\n","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^What would you like to do?","\n",{"->":"hub"},null],"help_ceo_office":["#","^speaker:npc","/#","ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^I already unlocked the CEO's office for you! Just head on in.","\n",{"->":"hub"},{"->":".^.^.^.8"},null]}],[{"->":".^.b"},{"b":["\n","^The CEO's office? That's a tough one...","\n","ev",{"VAR?":"trust_level"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Alright, I trust you enough. Let me unlock that door for you.","\n","ev",true,"/ev",{"VAR=":"has_unlocked_ceo","re":true},"ev",true,"/ev",{"VAR=":"asked_about_ceo","re":true},"^There you go! The door to the CEO's office is now unlocked. ","#","^unlock_door:ceo","/#","\n","ev",{"VAR?":"trust_level"},2,"+","/ev",{"VAR=":"trust_level","re":true},"^What else can I help with?","\n",{"->":"hub"},{"->":".^.^.^.10"},null]}],[{"->":".^.b"},{"b":["\n","^I don't know you well enough yet. Ask me some questions first and we can build some trust.","\n",{"->":"hub"},{"->":".^.^.^.10"},null]}],"nop","\n",{"->":".^.^.^.8"},null]}],"nop","\n",null],"other_doors":["#","^speaker:npc","/#","^What other doors do you need help with? I can try to unlock them if you tell me which ones.","\n","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Let me know!","\n",{"->":"hub"},null],"give_items":["#","^speaker:npc","/#","ev",{"VAR?":"has_lockpick"},"!",{"VAR?":"has_workstation"},"!","&&",{"VAR?":"has_phone"},"!","&&",{"VAR?":"has_keycard"},"!","&&","/ev",[{"->":".^.b","c":true},{"b":["\n","^Sorry, I don't have any items to give you right now.","\n",{"->":"hub"},{"->":".^.^.^.18"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"trust_level"},2,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Let me see what I have available...","\n","^Here's what I can offer you:","\n","ev",{"VAR?":"has_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^• Lock Pick Kit - for opening locked doors and containers 🔓","\n",{"->":".^.^.^.9"},null]}],"nop","\n","ev",{"VAR?":"has_workstation"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^• Crypto Analysis Station - for cryptographic challenges 💻","\n",{"->":".^.^.^.15"},null]}],"nop","\n","ev",{"VAR?":"has_phone"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^• Phone - with interesting contacts 📱","\n",{"->":".^.^.^.21"},null]}],"nop","\n","ev",{"VAR?":"has_keycard"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^• Keycard - for restricted areas 🎫","\n",{"->":".^.^.^.27"},null]}],"nop","\n","^What would you like?","\n",{"->":"give_items_choice"},{"->":".^.^.^.8"},null]}],[{"->":".^.b"},{"b":["\n","^I have some items, but I need to trust you more first.","\n","^Build up some trust - ask me questions!","\n",{"->":"hub"},{"->":".^.^.^.8"},null]}],"nop","\n",{"->":".^.^.^.18"},null]}],"nop","\n",null],"give_items_choice":["ev",{"VAR?":"has_lockpick"},{"VAR?":"has_workstation"},"||",{"VAR?":"has_phone"},"||",{"VAR?":"has_keycard"},"||","/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^Show me everything","/str","/ev",{"*":".^.c-0","flg":20},"ev","str","^Never mind","/str","/ev",{"*":".^.c-1","flg":20},{"->":".^.^.^.11"},{"c-0":["\n","#","^give_npc_inventory_items","/#","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},{"->":"hub"},"ev",{"VAR?":"has_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the lockpick","/str","/ev",{"*":".^.c-0","flg":20},{"->":".^.^.^.13"},{"c-0":["\n","#","^give_item:lockpick","/#","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},{"->":"hub"},{"#f":5}]}]}],"nop","\n","ev",{"VAR?":"has_workstation"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the workstation","/str","/ev",{"*":".^.c-0","flg":20},{"->":".^.^.^.19"},{"c-0":["\n","#","^give_item:workstation","/#","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},{"->":"hub"},{"#f":5}]}]}],"nop","\n","ev",{"VAR?":"has_phone"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the phone","/str","/ev",{"*":".^.c-0","flg":20},{"->":".^.^.^.25"},{"c-0":["\n","#","^give_item:phone","/#","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},{"->":"hub"},{"#f":5}]}]}],"nop","\n","ev",{"VAR?":"has_keycard"},"/ev",[{"->":".^.b","c":true},{"b":["\n","ev","str","^I'll take the keycard","/str","/ev",{"*":".^.c-0","flg":20},{"->":".^.^.^.31"},{"c-0":["\n","#","^give_item:keycard","/#","ev",true,"/ev",{"VAR=":"asked_for_items","re":true},{"->":"hub"},{"#f":5}]}]}],"nop","\n",{"#f":5}],"c-1":["\n",{"->":"hub"},{"#f":5}]}]}],[{"->":".^.b"},{"b":["\n","^Sorry, I don't have any items left to give you right now.","\n",{"->":"hub"},{"->":".^.^.^.11"},null]}],"nop","\n",null],"other_items":["#","^speaker:npc","/#","^I think I gave you most of what I had. Check your inventory!","\n",{"->":"hub"},null],"lockpick_feedback":["^Great! I'm glad it helped you out. That's what I'm here for.","\n","^You're doing excellent work on this mission.","\n","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"ev",false,"/ev",{"VAR=":"saw_lockpick_used","re":true},"^What else do you need?","\n",{"->":"hub"},null],"give_hints":["ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^The CEO's office has evidence you're looking for. Search the desk thoroughly.","\n","^Also, check any computers for sensitive files.","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"has_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Try using that lockpick set on locked doors and containers around the building.","\n","^You never know what secrets people hide behind locked doors!","\n",{"->":".^.^.^.6"},null]}],[{"->":".^.b"},{"b":["\n","^Explore every room carefully. Items are often hidden in places you'd least expect.","\n",{"->":".^.^.^.6"},null]}],"nop","\n",{"->":".^.^.^.5"},null]}],"nop","\n","^Good luck!","\n",{"->":"hub"},null],"on_lockpick_pickup":["ev",{"VAR?":"has_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Great! You found the lockpick I gave you. Try it on a locked door or container!","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","^Nice find! That lockpick set looks professional. Could be very useful.","\n",{"->":".^.^.^.5"},null]}],"nop","\n",{"->":"hub"},null],"on_lockpick_success":["ev",true,"/ev",{"VAR=":"saw_lockpick_used","re":true},"ev",{"VAR?":"has_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Excellent! Glad I could help you get through that.","\n",{"->":".^.^.^.9"},null]}],[{"->":".^.b"},{"b":["\n","^Nice work getting through that lock!","\n",{"->":".^.^.^.9"},null]}],"nop","\n",{"->":"hub"},null],"on_lockpick_failed":["ev",{"VAR?":"has_lockpick"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Don't give up! Lockpicking takes practice. Try adjusting the tension.","\n","^Want me to help you with anything else?","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","^Tough break. Lockpicking isn't easy without the right tools...","\n","^I might be able to help with that if you ask.","\n",{"->":".^.^.^.5"},null]}],"nop","\n",{"->":"hub"},null],"on_door_unlocked":["ev",true,"/ev",{"VAR=":"saw_door_unlock","re":true},"ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Another door open! You're making great progress.","\n",{"->":".^.^.^.9"},null]}],[{"->":".^.b"},{"b":["\n","^Nice! You found a way through that door. Keep going!","\n",{"->":".^.^.^.9"},null]}],"nop","\n",{"->":"hub"},null],"on_door_attempt":["^That door's locked tight. You'll need to find a way to unlock it.","\n","ev",{"VAR?":"trust_level"},2,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Want me to help you out? Just ask!","\n",{"->":".^.^.^.9"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"trust_level"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^I might be able to help if you get to know me better first.","\n",{"->":".^.^.^.7"},null]}],"nop","\n",{"->":".^.^.^.9"},null]}],"nop","\n",{"->":"hub"},null],"on_ceo_desk_interact":["ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^The CEO's desk - you made it! Nice work.","\n","^That's where the important evidence is kept.","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","^Trying to get into the CEO's office? I might be able to help with that...","\n",{"->":".^.^.^.5"},null]}],"nop","\n",{"->":"hub"},null],"on_item_found":["ev",{"VAR?":"trust_level"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Good find! Every item could be important for your mission.","\n",{"->":".^.^.^.6"},null]}],"nop","\n",{"->":"hub"},null],"on_room_entered":["ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^Keep searching for that evidence!","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"trust_level"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^You're making progress through the building.","\n","^Let me know if you need help with anything.","\n",{"->":".^.^.^.8"},null]}],[{"->":".^.b"},{"b":["\n","^Exploring new areas...","\n",{"->":".^.^.^.8"},null]}],"nop","\n",{"->":".^.^.^.5"},null]}],"nop","\n",{"->":"hub"},null],"on_room_discovered":["ev",{"VAR?":"trust_level"},2,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Great find! This new area might have what we need.","\n","^Search it thoroughly!","\n",{"->":".^.^.^.7"},null]}],[{"->":".^.b"},{"b":["\n","ev",{"VAR?":"trust_level"},1,">=","/ev",[{"->":".^.b","c":true},{"b":["\n","^Interesting! You've found a new area. Be careful exploring.","\n",{"->":".^.^.^.8"},null]}],[{"->":".^.b"},{"b":["\n","^A new room... wonder what's inside.","\n",{"->":".^.^.^.8"},null]}],"nop","\n",{"->":".^.^.^.7"},null]}],"nop","\n",{"->":"hub"},null],"on_ceo_office_entered":["ev",{"VAR?":"has_unlocked_ceo"},"/ev",[{"->":".^.b","c":true},{"b":["\n","^You're in! Remember, you're looking for evidence of the data breach.","\n","^Check the desk, computer, and any drawers.","\n",{"->":".^.^.^.5"},null]}],[{"->":".^.b"},{"b":["\n","^Whoa, you got into the CEO's office! That's impressive!","\n","ev",{"VAR?":"trust_level"},1,"+","/ev",{"VAR=":"trust_level","re":true},"^Maybe I underestimated you. Impressive work!","\n",{"->":".^.^.^.5"},null]}],"nop","\n",{"->":"hub"},null],"global decl":["ev",0,{"VAR=":"trust_level"},false,{"VAR=":"has_unlocked_ceo"},false,{"VAR=":"has_given_lockpick"},false,{"VAR=":"saw_lockpick_used"},false,{"VAR=":"saw_door_unlock"},false,{"VAR=":"has_greeted"},false,{"VAR=":"asked_about_self"},false,{"VAR=":"asked_about_ceo"},false,{"VAR=":"asked_for_items"},false,{"VAR=":"has_lockpick"},false,{"VAR=":"has_workstation"},false,{"VAR=":"has_phone"},false,{"VAR=":"has_keycard"},"/ev","end",null]}],"listDefs":{}} \ No newline at end of file