diff --git a/TESTING_GUIDE.md b/TESTING_GUIDE.md deleted file mode 100644 index ab6ad3f..0000000 --- a/TESTING_GUIDE.md +++ /dev/null @@ -1,295 +0,0 @@ -# Global Ink Variables - Testing Guide - -## Quick Start Test - -### Prerequisites -- Open the game with the `npc-sprite-test2.json` scenario -- Browser console open (F12) - -### Test 1: Basic Functionality - -1. **Verify Initial State** - ```javascript - console.log(window.gameState.globalVariables); - // Should show: { player_joined_organization: false } - ``` - -2. **Start conversation with test_npc_back** - - Click on the back NPC in test_room - - Follow the conversation through to "player_closing" - -3. **Make the Join Choice** - - Select "I'd love to join your organization!" - - Observe NPC response - -4. **Check Global State** - ```javascript - console.log(window.gameState.globalVariables.player_joined_organization); - // Should now be: true - ``` - -### Test 2: Cross-NPC Syncing - -1. **Start conversation with container_test_npc (Equipment Officer)** - - Click on the equipment officer NPC - - Start conversation - -2. **Observe Menu Options** - - If you joined in Test 1, you should see: - - "Tell me about your equipment" - - **"Show me what you have available"** ← This should appear! - - "Show me your specialist items" - - If you didn't join, only the specialist items option appears - -3. **Verify Variable Synced** - ```javascript - console.log(window.gameState.globalVariables.player_joined_organization); - // Still true from previous conversation! - ``` - -### Test 3: Direct Phaser Access - -1. **Open Console** - -2. **Directly Set Variable** - ```javascript - window.gameState.globalVariables.player_joined_organization = false; - ``` - -3. **Start new conversation with Equipment Officer** - - Full inventory option should now be GONE - - Only specialist items option appears - -4. **Set Back to True** - ```javascript - window.gameState.globalVariables.player_joined_organization = true; - ``` - -5. **Start conversation again** - - Full inventory option should reappear - -### Test 4: State Persistence - -1. **Join organization** (if not already done) - - Complete the test_npc_back conversation - - Choose to join - -2. **Talk to Equipment Officer** - - Verify full inventory option is available - -3. **End conversation** - - Close the minigame - -4. **Reload the page** (F5) - - Wait for game to fully load - -5. **Check Global State** - ```javascript - console.log(window.gameState.globalVariables.player_joined_organization); - // Should still be true! - ``` - -6. **Talk to Equipment Officer again** - - Full inventory option should still appear - -## Debugging Checks - -### Verify Scenario Loaded - -```javascript -console.log(window.gameScenario.globalVariables); -// Should show: { player_joined_organization: false } -``` - -### Check All Global Variables - -```javascript -console.log('Global Variables:', window.gameState.globalVariables); -console.log('NPC Cache:', Array.from(window.npcManager.inkEngineCache.keys())); -console.log('Saved States:', window.npcConversationStateManager.getSavedNPCs()); -``` - -### Check Variable Change Events - -Add this before starting a conversation: - -```javascript -// Temporarily enable verbose logging -window.npcConversationStateManager._log = (level, msg, data) => { - console.log(`[${level}]`, msg, data); -}; -``` - -Then start a conversation and watch the console for variable sync messages. - -### Verify Ink Variable Names - -```javascript -// Check what variables are in test2.ink story -const test2Engine = window.npcManager.inkEngineCache.get('test_npc_back'); -if (test2Engine?.story?.variablesState?._defaultGlobalVariables) { - console.log('test2.ink variables:', - Array.from(test2Engine.story.variablesState._defaultGlobalVariables.keys())); -} - -// Check equipment officer -const eqEngine = window.npcManager.inkEngineCache.get('container_test_npc'); -if (eqEngine?.story?.variablesState?._defaultGlobalVariables) { - console.log('equipment-officer.ink variables:', - Array.from(eqEngine.story.variablesState._defaultGlobalVariables.keys())); -} -``` - -## Expected Console Output - -When everything is working correctly, you should see messages like: - -``` -🌐 Initialized global variables: {player_joined_organization: false} -✅ Synced player_joined_organization = false to story -🔍 Auto-discovered global variable: player_joined_organization = false -🌐 Global variable changed: player_joined_organization = true (from test_npc_back) -📡 Broadcasted player_joined_organization = true to container_test_npc -✅ Restored global variables: {player_joined_organization: true} -``` - -## Common Issues & Solutions - -### Issue: Full inventory option never appears - -**Check:** -1. Did you actually choose "Join organization"? - ```javascript - console.log(window.gameState.globalVariables.player_joined_organization); - ``` - -2. Did the Equipment Officer conversation load? - ```javascript - console.log(window.npcManager.inkEngineCache.has('container_test_npc')); - ``` - -3. Are the stories properly synced? - ```javascript - const eqStory = window.npcManager.inkEngineCache.get('container_test_npc').story; - console.log('Eq Officer has variable:', eqStory.variablesState.GlobalVariableExistsWithName('player_joined_organization')); - console.log('Value:', eqStory.variablesState['player_joined_organization']); - ``` - -### Issue: Variable resets on page reload - -**Check:** -1. Was state actually saved? - ```javascript - console.log(window.npcConversationStateManager.getNPCState('test_npc_back')); - ``` - -2. Does saved state have global snapshot? - ```javascript - const state = window.npcConversationStateManager.getNPCState('test_npc_back'); - console.log('Global snapshot:', state?.globalVariablesSnapshot); - ``` - -### Issue: Changes not syncing to other NPCs - -**Check:** -1. Are multiple stories loaded? - ```javascript - console.log('Loaded stories:', Array.from(window.npcManager.inkEngineCache.keys())); - ``` - -2. Does the variable exist in both stories? - ```javascript - // Check each story's variables - window.npcManager.inkEngineCache.forEach((engine, id) => { - const exists = engine.story.variablesState.GlobalVariableExistsWithName('player_joined_organization'); - console.log(`${id}: has player_joined_organization =`, exists); - }); - ``` - -## Advanced Testing - -### Test Auto-Discovery of global_* Variables - -1. Create a new Ink file with: - ```ink - VAR global_test_flag = false - ``` - -2. Add it to an NPC in scenario - -3. Load that NPC's conversation - -4. Check console: - ```javascript - console.log(window.gameState.globalVariables); - // Should auto-discover: { player_joined_organization: false, global_test_flag: false } - ``` - -### Test Modifying from Phaser Code - -1. Get reference to game code: - ```javascript - // In Phaser scene, emit an event - window.dispatchEvent(new CustomEvent('player-achievement', { - detail: { achievement: 'joined_org' } - })); - - // In listener code: - window.addEventListener('player-achievement', (e) => { - window.gameState.globalVariables.player_joined_organization = true; - }); - ``` - -2. Start new NPC conversation - -3. Verify variable is synced - -### Test Multiple Global Variables - -1. Update `npc-sprite-test2.json`: - ```json - "globalVariables": { - "player_joined_organization": false, - "reputation": 0, - "quest_stage": 0 - } - ``` - -2. Add to Ink files: - ```ink - VAR player_joined_organization = false - VAR reputation = 0 - VAR quest_stage = 0 - ``` - -3. Use in conditionals: - ```ink - {reputation >= 5: - You're well known around here - } - ``` - -4. Test syncing multiple variables at once - -## Success Criteria - -✅ Initial state loads with correct defaults -✅ Variable changes persist in window.gameState -✅ Changes sync to other loaded stories in real-time -✅ Menu options conditionally appear based on variables -✅ State persists across page reloads -✅ Console shows appropriate sync messages -✅ No errors in browser console -✅ Multiple variables can be managed simultaneously - -## Performance Notes - -The system is optimized for: -- **Few global variables** (< 50 per scenario) ✅ -- **Multiple NPCs** (handles all loaded stories) ✅ -- **Event-driven syncing** (only syncs on change) ✅ -- **No circular loops** (prevents infinite propagation) ✅ - -If testing with > 100 global variables, monitor console for any performance impact. - - diff --git a/scenario_select.html b/scenario_select.html deleted file mode 100644 index 1013219..0000000 --- a/scenario_select.html +++ /dev/null @@ -1,424 +0,0 @@ - - -
- -