diff --git a/css/spni.css b/css/spni.css
index 064626517c3fd81c2e8bd7f22683d8ef882f7b3f..1440f542b498a5cfaf51609d79ac88e963d4744c 100644
--- a/css/spni.css
+++ b/css/spni.css
@@ -297,11 +297,17 @@ body.modal-open {
 
 .dropdown-button-item span {
     display: inline;
+    margin: 0 3%;
 }
 
 .dropdown-button-item {
     width: 100%;
     font-size: 1.5em;
+    line-height: 1.30em;
+
+    display: inline-flex;
+    justify-content: flex-start;
+    align-items: center;
 }
 
 /************************************************************
@@ -849,24 +855,33 @@ body.modal-open {
 /* the area around the dialogue bubble */
 .dialogue-bubble-area {
 	position: absolute;
-    display: table;
     width: 24.5%;
     top: 10%;
-    height: 90%;
+    min-height: 90%;
     margin: 0 0.25%;
     padding: 1%;
-    text-align: center;
     font-size: 120%;
     background: #F5F5F5;
+
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: stretch;
 }
 
 /* the body of the dialogue bubble */
 .dialogue-bubble {
-	display: table-cell;
-    width: 90%;
-    height: 90%;
     margin: 1%;
-    vertical-align: middle;
+    min-height: 100%;
+
+    display: inline-flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: stretch;
+}
+
+.dialogue {
+    text-align: center;
 }
 
 .arrow-down::before, .arrow-down::after,
@@ -981,6 +996,158 @@ body.modal-open {
 	margin-left: -14px;
 }
 
+/************************************************************
+ * Classes for Developer Mode.
+ ************************************************************/
+
+#game-dev-export-button {
+    display: none;
+}
+
+.dev-mode #game-dev-export-button {
+    display: inline-flex;
+}
+
+.dev-select-button {
+    position: absolute;
+    right: 20%;
+    top: -40%;
+    width: 19%;
+    height: 35%;
+}
+
+.dev-select-button.active {
+    background: linear-gradient(#80FF80, #33AA33);
+	background-color: #66FF66;
+}
+
+.edit-options-row {
+    position: absolute;
+    top: 100%;
+    right: 0;
+    left: 0;
+
+    display: none;
+    align-items: stretch;
+    justify-content: flex-end;
+    z-index: 1; /* Force layering _over_ poses */
+}
+
+.edit-pose-row {
+    position: absolute;
+    top: 130%;
+    right: 0;
+    left: 0;
+
+    background-color: #555555;
+
+    display: none;
+    padding: 1.5% 2%;
+    z-index: 1;
+}
+
+.edit-options-row button {
+    padding: 2.5% 2%;
+    font-size: 100%;
+
+    margin-left: 1.5%;
+
+    border-top-left-radius: 0px;
+    border-top-right-radius: 0px;
+
+    background: linear-gradient(#D9D9D9, #A6A6A6);
+    background-color: #D9D9D9;
+}
+
+.edit-options-row button:first-child {
+    margin-left: 0;
+}
+
+.edit-options-row button:hover {
+    background: linear-gradient(#FFFFFF, #D9D9D9);
+    background-color: #FFFFFF;
+}
+
+.edit-options-row .edit-pose {
+    font-size: 1.5vmin;
+}
+
+.dialogue-pose-entry {
+    font-family: monospace;
+    font-size: 1.85vmin;
+    line-height: 2.22vmin;
+
+    width: 100%;
+    height: 100%;
+}
+
+.dialogue-edit-entry {
+    flex: 4;
+
+    font-family: monospace;
+    font-size: 1.85vmin;
+    line-height: 2.22vmin;
+    min-height: 11.1vmin;
+    cursor: text;
+}
+
+.dialogue-edit-status {
+    flex: 1;
+
+    font-family: monospace;
+    font-size: 1.75vmin;
+
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+}
+
+#export-edit-log {
+    font-family: monospace;
+    font-size: 1.45vmin;
+    cursor: text;
+}
+
+.dialogue-bubble-area[data-editing="preview"] .dialogue-edit-status::after {
+    content: " (Preview)";
+}
+
+.edit-preview {
+    margin-right: auto;
+}
+
+.dialogue-edit, .dialogue-edit-button, .dialogue-entry-button {
+    display: none;
+}
+
+.dialogue-bubble-area[data-dev-target="true"] .dialogue-edit-button {
+    display: inline;
+}
+
+.dialogue-bubble-area[data-editing] .dialogue-entry-button {
+    display: inline;
+}
+
+.dialogue-bubble-area[data-editing] .dialogue-edit-button, .dialogue-bubble-area[data-editing] .dialogue-edit-status {
+    display: inline;
+}
+
+.dialogue-bubble-area[data-editing]:not([data-editing="preview"]) .dialogue-bubble .dialogue {
+    display: none;
+}
+
+.dialogue-bubble-area[data-editing="entry"] .dialogue-edit-entry {
+    display: block;
+}
+
+.dev-mode .edit-options-row {
+    display: flex;
+}
+
 /************************************************************
  * Classes for opponent images.
  ************************************************************/
@@ -1008,6 +1175,10 @@ body.modal-open {
 	right: 0;
 }
 
+#game-screen .image-row {
+    pointer-events: none;
+}
+
 /************************************************************
  * Classes for the title screen.
  ************************************************************/
@@ -1744,6 +1915,17 @@ body.modal-open {
     align-items: center;
 }
 
+.badge-icon {
+    opacity: 0.75;
+
+    height: 18%;
+    width: auto;
+
+    position: absolute;
+    left: 0;
+    top: 0;
+}
+
 .selection-card-sidebar img {
     width: 100%;
     height: auto;
@@ -2134,6 +2316,8 @@ body.modal-open {
     font-size: 1.65vmin;
     line-height: 1.98vmin;
     flex: 3;
+
+    display: block;
 }
 
 .opponent-details-description > * {
@@ -3662,7 +3846,7 @@ body.modal-open {
     left: 1.5%;
     bottom: 14%;
     width: 4%;
-    height: 4%;
+    height: 4%;7
 }
 
 .player-debug-button.active {
diff --git a/index.html b/index.html
index 699513e2f9be100bdabe4e387499ccde5d70091b..969f3efa1435394f82184d0ddcb56d17cff10f9a 100644
--- a/index.html
+++ b/index.html
@@ -58,9 +58,9 @@
             <br><a href="https://spnati.net" target="_blank"><b>spnati.net</b></a></p>
 
             <br><br>
-            
+
             <p>Make sure to check out our list of <a href="#" onclick="showHelpModal()">Frequently-Asked Questions</a>!</p>
-            
+
             <br>
 
             <p>By clicking the button below, you are confirming that you are an adult and such material is legal in your region.</p>
@@ -106,7 +106,7 @@
     <button id="title-help-button" class="bordered smooth-button smooth-button-red banner-flair" onclick="showHelpModal()">
       Help / FAQ
     </button>
-    
+
     <a class="bordered reddit-button smooth-button smooth-button-red" href="https://www.reddit.com/r/spnati/">
       <img class="reddit-logo" src="img/reddit.png"/>
     </a>
@@ -134,14 +134,14 @@
           <!-- Player Gender -->
           <input type='image' value='' id='male-gender-button' class='bordered title-content-button title-gender-button' src='img/male.png' onclick='changePlayerGender("male")'>
           <input type='image' value='' id='female-gender-button' class='bordered title-content-button title-gender-button' src='img/female.png' onclick='changePlayerGender("female")'>
-        
+
           <!-- Player Male Size -->
           <div id='male-size-container' class='title-size-block medium'>
             <input type='image' value='' id="small-junk-button" class='bordered title-small-button title-content-button title-size-button' src='img/male_small.png' onclick='changePlayerSize("small")'>
             <input type='image' value='' id="medium-junk-button" class='bordered title-medium-button title-content-button title-size-button' src='img/male_medium.png' onclick='changePlayerSize("medium")'>
             <input type='image' value='' id="large-junk-button" class='bordered title-large-button title-content-button title-size-button' src='img/male_large.png' onclick='changePlayerSize("large")'>
           </div>
-    
+
           <!-- Player Female Size -->
           <div id='female-size-container' class='title-size-block medium'>
             <input type='image' value='' id="small-boobs-button" class='bordered title-small-button title-content-button title-size-button' src='img/female_small.png' onclick='changePlayerSize("small")'>
@@ -149,7 +149,7 @@
             <input type='image' value='' id="large-boobs-button" class='bordered title-large-button title-content-button title-size-button' src='img/female_large.png' onclick='changePlayerSize("large")'>
           </div>
       </div>
-      
+
       <!-- Player Wardrobe -->
       <div id='title-wardrobe-block'>
         <div class='title-label'>What are you wearing?</div>
@@ -451,7 +451,7 @@
 <div id="individual-select-screen" class="wide-screen-container" hidden>
   <div class="screen">
     <div class="opponent-cards-container">
-    <!-- 
+    <!--
     (example opponent card element)
       <div class="opponent-card">
         <div class="selection-card-image-clip">
@@ -459,7 +459,7 @@
             <img class="opponent-card-image-simple" src="opponents/sayori/0-calm.png">
           </div>
         </div>
-        
+
         <img class="badge-icon" src="img/epilogue_icon.png"/>
         <div class="selection-card-sidebar">
           <img class="layer-icon" src="img/testing-badge.png"/>
@@ -524,7 +524,7 @@
         </div>
       </div>
     </div>
-    
+
     <div class="opponent-details-container">
       <div class="opponent-details-image-area">
         <img class="opponent-details-simple-image" />
@@ -888,7 +888,7 @@
                     <span id="collectible-unlock"></span>
                     <span id="collectible-progress-text"></span>
                 </div>
-                
+
                 <div class="progress" id="collectible-progress">
                   <div id="collectible-progress-bar" class="progress-bar smooth-button-red" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
                   </div>
@@ -1396,8 +1396,8 @@
 								</nav>
 							</td>
 						</tr>
-            
-            
+
+
 						<!-- Player Masturbation Timer -->
 						<tr>
 							<td style="width:25%"><h4 class="modal-title modal-left">How long do you... last?</h4></td>
@@ -1591,7 +1591,7 @@
                 </div>
             </div>
         </div>
-        
+
         <!-- character creation questions -->
         <div class="help-page container-fluid" data-page="2" style="display:none">
             <h2>FAQ - Character Creation</h2>
@@ -1614,7 +1614,7 @@
                   <p>The following is a Google Doc containing documentation on all the contributors, characters, works-in-progress, and other information of SPNATI.  It is community-run/maintained and completely unofficial; none of the moderators for SPNATI have editing privileges, and being listed on it is not a rite-of-passage.</p>
                   <p><a href="https://docs.google.com/spreadsheets/d/e/2PACX-1vRejQBHSnenImBLUEX5qlmxdopG0c_O9uWklerYr6v5yJ00_UUcQiOvqC6t6CUeKsRAkd2769YzA67P/pubhtml#">https://docs.google.com/spreadsheets/d/e/2PACX-1vRejQBHSnenImBLUEX5qlmxdopG0c_O9uWklerYr6v5yJ00_UUcQiOvqC6t6CUeKsRAkd2769YzA67P/pubhtml#</a></p>
                 </div>
-            </div>                 
+            </div>
             <div class="faq-question-container">
                 <h4 class="faq-question">Are there any rules about what characters can be in the game?</h4>
                 <div class="faq-answer">
@@ -1659,7 +1659,7 @@
                 </div>
             </div>
         </div>
-        
+
         <!-- Gameplay questions -->
         <div class="help-page container-fluid" data-page="3" style="display:none">
             <h2>FAQ - Gameplay</h2>
@@ -1698,7 +1698,7 @@
                 </div>
             </div>
         </div>
-        
+
         <!-- Epilogue questions -->
         <div class="help-page container-fluid" data-page="4" style="display:none">
             <h2>FAQ - Endings</h2>
@@ -1723,7 +1723,7 @@
                 </div>
             </div>
         </div>
-        
+
         <!-- Offline version questions -->
         <div class="help-page container-fluid" data-page="5" style="display:none">
             <h2>FAQ - Offline and Rehosted Game Versions</h2>
@@ -1790,7 +1790,7 @@
                 </div>
             </div>
         </div>
-        
+
         <!-- Common issues -->
         <div class="help-page container-fluid" data-page="6" style="display:none">
             <h2>FAQ - Common Issues</h2>
@@ -1810,13 +1810,13 @@
             <div class="faq-question-container">
                 <h4 class="faq-question">My characters/text/game started glitching out. What's going on?</h4>
                 <p class="faq-answer">Are you playing with Monika from Doki Doki Literature Club?  Monika uses special code in her behavior files to achieve these effects deliberately, much like in her source material.</p>
-            </div>                    
+            </div>
             <div class="faq-question-container">
                 <h4 class="faq-question">I clicked the triangle icon Monika mentioned and sent a report, but nothing happened.</h4>
                 <p class="faq-answer">That icon is for the ingame bug report feature, which only has the function of submitting bug reports.  She means the triangle icon that appears in her speech bubble.</p>
             </div>
         </div>
-        
+
         <!-- Common feature requests  -->
         <div class="help-page container-fluid" data-page="7" style="display:none">
           <h2>FAQ - Commonly Requested Features</h2>
@@ -2034,29 +2034,115 @@
 <script>document.addEventListener('keyup',function(){var i=0;var c=[2,2,0,0,3,1,3,1,5,4].map(function(j){return ['ArrowDown','ArrowRight','ArrowUp','ArrowLeft',String.fromCharCode(97),String.fromCharCode(98)][j]});return function(e){if(inGame) return;if(e.key === c[i]){i++;if(i>=c.length){codeImportEnabled=true;i=0;showImportModal()}} else i=0}}(),false);</script>
 <!-- End of Import/Export Modal -->
 
+
+<!-- DevMode Export Modal -->
+<div id="dev-export-modal" class="modal table-modal fade" role="dialog">
+    <div class="modal-table-container">
+        <div class="modal-cell-container">
+            <div class="bordered modal-dialog wide-modal-dialog">
+                <div class="bordered modal-dialog-surface">
+                    <!-- Start of Modal Content -->
+                        <div class="modal-content">
+                            <div class="modal-header">
+                                <h4 class="modal-title text-center">Export Dev Mode Edits</h4>
+                                <h5 class='text-center'>This code will allow you to import any edits you've made to your character's dialogue into the Character Editor.</h5>
+                            </div>
+                            <div class="modal-body">
+                                <form>
+                                    <textarea class="form-control" id='export-edit-log' rows="15" readonly></textarea>
+                                </form>
+                                <div class="modal-body-container" style="padding-top:4%;">
+                                    <button class="bordered smooth-button modal-button" data-dismiss="modal">Close</button>
+                                </div>
+                            </div>
+                        </div>
+                    <!-- End of Modal Content -->
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- End of DevMode Export Modal -->
+
 <!-- Game Screen -->
 <div id="game-screen" class="screen-container ui-minimal" hidden>
   <div class="screen">
     <!-- Dialogue Bubbles -->
     <div class="dialogue-bubble-row">
-      <div id="game-bubble-1" class="bordered left dialogue-bubble-area">
+      <div id="game-bubble-1" class="bordered left dialogue-bubble-area" data-slot="1">
         <div class="dialogue-bubble arrow-down">
           <span id="game-dialogue-1" class="dialogue"></span>
+          <textarea class="dialogue-edit dialogue-edit-entry"></textarea>
+          <div class="dialogue-edit dialogue-edit-status"></div>
+          <div class="edit-options-row">
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-confirm"><span class="glyphicon glyphicon-ok"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-cancel"><span class="glyphicon glyphicon-remove"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-preview"><span class="glyphicon glyphicon-eye-open"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-init-button dialogue-respond-button"><span class="glyphicon glyphicon-comment"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-init-button dialogue-edit-button"><span class="glyphicon glyphicon-pencil"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-pose">Pose...</button>
+          </div>
+          <div class="bordered edit-pose-row">
+            <input type="text" class="dialogue-pose-entry" list="edit-pose-list-1">
+            <datalist id="edit-pose-list-1" class="edit-pose-list"></datalist>
+          </div>
         </div>
       </div>
-      <div id="game-bubble-2" class="bordered halfLeft dialogue-bubble-area">
+      <div id="game-bubble-2" class="bordered halfLeft dialogue-bubble-area" data-slot="2">
         <div class="dialogue-bubble arrow-down">
           <span id="game-dialogue-2" class="dialogue"></span>
+          <textarea class="dialogue-edit dialogue-edit-entry"></textarea>
+          <div class="dialogue-edit dialogue-edit-status"></div>
+          <div class="edit-options-row">
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-confirm"><span class="glyphicon glyphicon-ok"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-cancel"><span class="glyphicon glyphicon-remove"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-preview"><span class="glyphicon glyphicon-eye-open"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-init-button dialogue-respond-button"><span class="glyphicon glyphicon-comment"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-init-button dialogue-edit-button"><span class="glyphicon glyphicon-pencil"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-pose">Pose...</button>
+          </div>
+          <div class="bordered edit-pose-row">
+            <input type="text" class="dialogue-pose-entry" list="edit-pose-list-2">
+            <datalist id="edit-pose-list-2" class="edit-pose-list"></datalist>
+          </div>
         </div>
       </div>
-      <div id="game-bubble-3" class="bordered center dialogue-bubble-area">
+      <div id="game-bubble-3" class="bordered center dialogue-bubble-area" data-slot="3">
         <div class="dialogue-bubble arrow-down">
           <span id="game-dialogue-3" class="dialogue"></span>
+          <textarea class="dialogue-edit dialogue-edit-entry"></textarea>
+          <div class="dialogue-edit dialogue-edit-status"></div>
+          <div class="edit-options-row">
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-confirm"><span class="glyphicon glyphicon-ok"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-cancel"><span class="glyphicon glyphicon-remove"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-preview"><span class="glyphicon glyphicon-eye-open"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-init-button dialogue-respond-button"><span class="glyphicon glyphicon-comment"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-init-button dialogue-edit-button"><span class="glyphicon glyphicon-pencil"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-pose">Pose...</button>
+          </div>
+          <div class="bordered edit-pose-row">
+            <input type="text" class="dialogue-pose-entry" list="edit-pose-list-3">
+            <datalist id="edit-pose-list-3" class="edit-pose-list"></datalist>
+          </div>
         </div>
       </div>
-      <div id="game-bubble-4" class="bordered farHalfLeft dialogue-bubble-area">
+      <div id="game-bubble-4" class="bordered farHalfLeft dialogue-bubble-area" data-slot="4">
         <div class="dialogue-bubble arrow-down">
           <span id="game-dialogue-4" class="dialogue"></span>
+          <textarea class="dialogue-edit dialogue-edit-entry"></textarea>
+          <div class="dialogue-edit dialogue-edit-status"></div>
+          <div class="edit-options-row">
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-confirm"><span class="glyphicon glyphicon-ok"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-cancel"><span class="glyphicon glyphicon-remove"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-preview"><span class="glyphicon glyphicon-eye-open"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-init-button dialogue-respond-button"><span class="glyphicon glyphicon-comment"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-init-button dialogue-edit-button"><span class="glyphicon glyphicon-pencil"></span></button>
+            <button type="button" class="bordered smooth-button dialogue-entry-button edit-pose">Pose...</button>
+          </div>
+          <div class="bordered edit-pose-row">
+            <input type="text" class="dialogue-pose-entry" list="edit-pose-list-4">
+            <datalist id="edit-pose-list-4" class="edit-pose-list"></datalist>
+          </div>
         </div>
       </div>
     </div>
@@ -2090,6 +2176,10 @@
     <div class="btn-group dropup game-menu-dropup" data-toggle="tooltip" data-placement="right" title="Game Menu">
         <button type="button" class="bordered smooth-button smooth-button-red dropdown-toggle menu-dropdown-button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="glyphicon glyphicon-th-list" aria-hidden="true"></span></button>
         <ul class="dropdown-menu">
+            <button id="game-dev-export-button" class="dropdown-button-item bordered smooth-button smooth-button-red" onclick="showDevExportModal()">
+              <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
+              <span class="game-menu-label">Export Dialogue Edits</span>
+            </button>
             <button id="game-log-button" class="dropdown-button-item bordered smooth-button smooth-button-red" onclick="showHelpModal()">
               <span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span>
               <span class="game-menu-label">Help and FAQ</span>
@@ -2108,7 +2198,7 @@
             </button>
         </ul>
     </div>
-    
+
 
 
     <!-- Game Table -->
@@ -2124,6 +2214,9 @@
           <img id="player-1-card-4" class="bordered small-card-image" src="img/blankcard.jpg">
           <img id="player-1-card-5" class="bordered small-card-image" src="img/blankcard.jpg">
         </div>
+        <button id="dev-select-button-1" class="bordered dev-select-button" onclick="setDevModeTarget(1)" hidden>
+          <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
+        </button>
         <button id="debug-button-1" class="bordered debug-button" onclick="selectDebug(1)" hidden>
           <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
         </button>
@@ -2140,6 +2233,9 @@
           <img id="player-2-card-4" class="bordered small-card-image" src="img/blankcard.jpg">
           <img id="player-2-card-5" class="bordered small-card-image" src="img/blankcard.jpg">
         </div>
+        <button id="dev-select-button-2" class="bordered dev-select-button" onclick="setDevModeTarget(2)" hidden>
+          <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
+        </button>
         <button id="debug-button-2" class="bordered debug-button" onclick="selectDebug(2)" hidden>
           <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
         </button>
@@ -2156,6 +2252,9 @@
           <img id="player-3-card-4" class="bordered small-card-image" src="img/blankcard.jpg">
           <img id="player-3-card-5" class="bordered small-card-image" src="img/blankcard.jpg">
         </div>
+        <button id="dev-select-button-3" class="bordered dev-select-button" onclick="setDevModeTarget(3)" hidden>
+          <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
+        </button>
         <button id="debug-button-3" class="bordered debug-button" onclick="selectDebug(3)" hidden>
           <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
         </button>
@@ -2172,6 +2271,9 @@
           <img id="player-4-card-4" class="bordered small-card-image" src="img/blankcard.jpg">
           <img id="player-4-card-5" class="bordered small-card-image" src="img/blankcard.jpg">
         </div>
+        <button id="dev-select-button-4" class="bordered dev-select-button" onclick="setDevModeTarget(4)" hidden>
+          <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
+        </button>
         <button id="debug-button-4" class="bordered debug-button" onclick="selectDebug(4)" hidden>
           <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
         </button>
@@ -2198,8 +2300,8 @@
         <div class="game-name-label-0 bordered player-name-label">Player</div>
         <div id="game-clothing-label" class="bordered">Your Clothing</div>
       </div>
-      
-      <div id="player-game-clothing-area-minimal" class="">        
+
+      <div id="player-game-clothing-area-minimal" class="">
         <div class="minimal-clothing-area-row">
           <div class="small-clothing-image-container"><img class="bordered small-clothing-image player-0-clothing-8" src="img/blankcard.jpg" data-slot="8"></div>
           <div class="small-clothing-image-container"><img class="bordered small-clothing-image player-0-clothing-7" src="img/blankcard.jpg" data-slot="7"></div>
@@ -2310,6 +2412,7 @@
 
 <!-- My JavaScript -->
 <script src="js/spniCore.js"></script>
+<script src="js/spniDevMode.js"></script>
 <script src="js/spniDisplay.js"></script>
 <script src="js/spniTitle.js"></script>
 <script src="js/spniSelect.js"></script>
@@ -2322,6 +2425,8 @@
 <script src="js/spniOption.js"></script>
 <script src="js/spniEpilogue.js"></script>
 <script src="js/spniGallery.js"></script>
+<!-- shhhh -->
+<script>document.addEventListener('keyup',function(){var i=0;var c=[2,2,0,0,3,1,3,1,5,4].map(function(j){return ['ArrowDown','ArrowRight','ArrowUp','ArrowLeft',String.fromCharCode(97),String.fromCharCode(98)][j]});return function(e){if(inGame) return;if(e.key === c[i]){i++;if(i>=c.length){codeImportEnabled=true;i=0;showImportModal()}} else i=0}}(),false);</script>
 
 </body>
 </html>
diff --git a/js/spniBehaviour.js b/js/spniBehaviour.js
index 65082af5c80868306db6a5f6ba3063d50e409f6c..e425ed12684167b7c424c0f8e104e96f5531f366 100644
--- a/js/spniBehaviour.js
+++ b/js/spniBehaviour.js
@@ -195,6 +195,7 @@ function expandTagsList(input_tags) {
 
 function State($xml, parentCase) {
     this.parentCase = parentCase;
+    this.id = $xml.attr('dev-id') || null;
     this.image = $xml.attr('img');
     this.direction = $xml.attr('direction') || 'down';
     this.location = $xml.attr('location') || '';
@@ -841,6 +842,56 @@ function Case($xml, stage) {
     }
 }
 
+/* Convert this case's conditions into a plain object, into a format suitable
+ * for e.g. JSON serialization.
+ */
+Case.prototype.serializeConditions = function () {
+    var complexProps = ['states', 'tests', 'counters', 'addTags', 'removeTags', 'variableBindings', 'priority'];
+    var ser = {};
+    
+    Object.keys(this).forEach(function (prop) {
+        if (complexProps.indexOf(prop) >= 0) return;
+        var val = this[prop];
+        
+        if (val && typeof val === "object" && (val.min !== undefined || val.max !== undefined)) {
+            // convert interval objects back into strings
+            var min = (val.min !== null) ? val.min : "";
+            var max = (val.max !== null) ? val.max : "";
+            
+            if (min === max) {
+                ser[prop] = (min !== "") ? min.toString() : null;
+            } else {
+                ser[prop] = min+"-"+max;
+            }
+        } else {
+            ser[prop] = val;
+        }
+    }.bind(this));
+    
+    ser.tests = this.tests.map(function (test) {
+        return {
+            'expr': test.attr('expr'),
+            'value': test.attr('value'),
+            'cmp': test.attr('cmp'),
+        };
+    });
+    
+    ser.counters = this.counters.map(function (ctr) {
+        return {
+            'count': ctr.attr('count'),
+            'role': ctr.attr('role'),
+            'var': ctr.attr('var'),
+            'character': ctr.attr('character'),
+            'stage': ctr.attr('stage'),
+            'filter': ctr.attr('filter'),
+            'gender': ctr.attr('gender'),
+            'status': ctr.attr('status'),
+        };
+    });
+    
+    return ser;
+}
+
 Case.prototype.getAlsoPlaying = function (opp) {
     if (!this.alsoPlaying) return null;
     
@@ -1269,7 +1320,7 @@ Opponent.prototype.updateBehaviour = function(tags, opp) {
     var volatileMatches = [];
     
     for (var i = 0; i < cases.length; i++) {
-        var curCase = new Case(cases[i]);
+        var curCase = new Case(cases[i], stageNum);
         
         if ((curCase.hidden || curCase.priority >= bestMatchPriority) &&
             curCase.basicRequirementsMet(this, opp)) 
@@ -1315,6 +1366,7 @@ Opponent.prototype.updateBehaviour = function(tags, opp) {
         this.currentPriority = bestMatchPriority;
         this.stateLockCount = 0;
         this.stateCommitted = false;
+        this.lastUpdateTags = tags;
         
         this.allStates = states;
         this.chosenState = states[i - 1];
diff --git a/js/spniCore.js b/js/spniCore.js
index ad2c99544db3c5f50d237b8baa387067cd4b4fdb..55b7f725015238c76b9f020a24abe1ac59463e32 100644
--- a/js/spniCore.js
+++ b/js/spniCore.js
@@ -820,7 +820,7 @@ Opponent.prototype.loadBehaviour = function (slot, individual) {
             });
 
             this.targetedLines = targetedLines;
-
+            
             if (this.selected_costume) {
                 return this.loadAlternateCostume();
             }
diff --git a/js/spniDevMode.js b/js/spniDevMode.js
new file mode 100644
index 0000000000000000000000000000000000000000..cf99f988bc8367ca3b307ff1eb0a0ecdf680fc86
--- /dev/null
+++ b/js/spniDevMode.js
@@ -0,0 +1,392 @@
+var devExportModal = $('#dev-export-modal');
+var devExportField = $('#export-edit-log');
+
+var devSelectorButtons = [
+    $('#dev-select-button-1'),
+    $('#dev-select-button-2'),
+    $('#dev-select-button-3'),
+    $('#dev-select-button-4'),
+];
+
+var devModeActive = false;
+var devModeTarget = 0;
+
+function showDevExportModal () {
+    if (!devModeActive || !devModeTarget) return;
+    
+    var editLog = players[devModeTarget].editLog || [];
+    var serialized = JSON.stringify(editLog);
+    
+    devExportField.val(serialized);
+    devExportModal.modal('show');
+}
+
+function setDevSelectorVisibility (visible) {
+    if (visible) {
+        $('.dev-select-button').show();
+        if (devModeActive && devModeTarget) devSelectorButtons[devModeTarget-1].addClass('active');
+    } else {
+        $('.dev-select-button').removeClass('active').hide();
+    }
+}
+
+function setDevModeTarget (target) {
+    $('.dev-select-button').removeClass('active');
+    
+    if (!target || (devModeActive && target === devModeTarget)) {
+        devModeActive = false;
+        devModeTarget = 0;
+        $gameScreen.removeClass('dev-mode');
+    } else {
+        devModeActive = true;
+        devModeTarget = target;
+        $gameScreen.addClass('dev-mode');
+        $('#dev-select-button-'+target).addClass('active');
+        
+        players.forEach(function (p) {
+            if (p !== players[HUMAN_PLAYER] && !p.devModeInitialized) p.initDevMode();
+        })
+    }
+    
+    for (var i=1;i<players.length;i++) {
+        gameDisplays[i-1].devModeController.update(players[i]);
+    }
+}
+
+Opponent.prototype.initDevMode = function () {
+    /* Assign a unique ID number to each state, for later lookup. */
+    var curStateID = 0;
+    var stateIndex = {};
+    
+    this.xml.find('case').each(function (caseIdx, elem) {
+        $(elem).find('state').each(function () {
+            var pose = $(this).attr('img') || '';
+            var text = $(this).text() || '';
+            
+            /* Extract a pose name: */
+            var match = pose.match(/^(?:custom:)?(?:\d+-)([^.]+)(?:\..*)?$/m);
+            if (match) {
+                pose = match[1];
+            }
+            
+            var key = pose.trim() + ':' + text.trim();
+            if (stateIndex[key]) {
+                $(this).attr('dev-id', stateIndex[key]);
+            } else {
+                $(this).attr('dev-id', curStateID);
+                stateIndex[key] = curStateID;
+                curStateID += 1;
+            }
+        });
+    });
+    
+    this.devModeInitialized = true;
+    this.stateIndex = stateIndex;
+    this.originalXml = $(this.xml).clone();
+    this.editLog = [];
+}
+
+
+function DevModeDialogueBox(gameBubbleElem) {
+    this.container = gameBubbleElem;
+    this.poseFieldContainer = gameBubbleElem.find('.edit-pose-row');
+    
+    this.dialogueArea = gameBubbleElem.find('.dialogue');
+    this.editField = gameBubbleElem.find('.dialogue-edit-entry');
+    this.poseField = gameBubbleElem.find('.dialogue-pose-entry');
+    this.statusLine = gameBubbleElem.find('.dialogue-edit-status');
+    this.poseList = gameBubbleElem.find('.edit-pose-list');
+    
+    this.editButton = gameBubbleElem.find('.dialogue-edit-button');
+    this.newResponseButton = gameBubbleElem.find('.dialogue-respond-button');
+    this.confirmButton = gameBubbleElem.find('.edit-confirm');
+    this.cancelButton = gameBubbleElem.find('.edit-cancel');
+    this.previewButton = gameBubbleElem.find('.edit-preview');
+    this.poseButton = gameBubbleElem.find('.edit-pose');
+    
+    this.editButton.click(this.editCurrentState.bind(this));
+    this.newResponseButton.click(this.startNewResponse.bind(this));
+    
+    this.previewButton.click(this.togglePreview.bind(this));
+    this.cancelButton.click(this.cancelEdit.bind(this));
+    this.confirmButton.click(this.saveEdits.bind(this));
+    this.poseButton.click(function () {
+        this.poseFieldContainer.toggle();
+    }.bind(this));
+    
+    this.editField.on('change', this.updateEditField.bind(this));
+    this.poseField.on('change', this.updatePoseField.bind(this));
+    
+    /* The player this object concerns itself with. */
+    this.player = null;
+    
+    /* The player currently targeted for a new response line, if any.
+     * (If null, indicates that a new generic line is being written.)
+     */
+    this.respondingToPlayer = null;
+    
+    /* If true, then a preexisting State is being edited. 
+     * Affects handling in :saveEdits().
+     */
+    this.editingState = false;
+    
+    /* An object with 'text' and 'image' fields for storing state data
+     * during editing.
+     * (editData.text = current entered dialogue text)
+     * (editData.image = current selected character pose)
+     */
+    this.editData = null;
+    
+    /* Contains the 'initial' dialogue/pose for the character prior to editing.
+     * _Usually_ the same as player.chosenState, but not always!
+     */
+    this.currentState = null;
+    
+    /* If true, currentState contains 'new' data that isn't reflected in the original XML.
+     * This indicates to :saveEdits() to modify edit log entries instead of XML data.
+     */
+    this.currentStateModified = false;
+    
+    /* The parentCase of the last played State for this player. */
+    this.currentCase = null;
+}
+
+DevModeDialogueBox.prototype.update = function (player) {
+    this.player = player;
+    if (!player) return;
+    
+    this.currentCase = player.chosenState.parentCase;
+    this.currentState = {'text': player.chosenState.rawDialogue, 'image': player.chosenState.image};
+    this.currentStateModified = false;
+    
+    /* Reset all editing state... */
+    if (this.container.attr('data-editing')) {
+        this.cancelEdit();
+    }
+    
+    /* Show the 'edit' button as appropriate. */
+    if (devModeActive && devModeTarget === player.slot) {
+        this.container.attr('data-dev-target', 'true');
+        this.editButton.show();
+    } else {
+        this.container.attr('data-dev-target', null);
+        this.editButton.hide();
+    }
+}
+
+DevModeDialogueBox.prototype.updateEditField = function () {
+    this.editData.text = this.editField.val();
+}
+
+DevModeDialogueBox.prototype.updatePoseField = function () {
+    this.editData.image = this.poseField.val();
+    this.player.chosenState.image = this.editData.image;
+    
+    gameDisplays[this.player.slot-1].updateImage(this.player);
+}
+
+DevModeDialogueBox.prototype.startEditMode = function (start_text, status_line) {
+    KEYBINDINGS_ENABLED = false;
+    
+    this.editData = {
+        'text': start_text,
+        'image': this.currentState.image,
+    }
+    
+    /* Set up the text and pose entry elements: */
+    this.container.attr('data-editing', 'entry');
+    this.editField.val(this.editData.text).attr('placeholder', this.currentState.text);
+    this.poseField.val(this.editData.image);
+    this.statusLine.text(status_line);
+    
+    /* Populate the pose entry autocomplete list: */
+    var caseSelector = (this.player.stage == -1 ? 'start, stage[id=1] case[tag=game_start]' : 'stage[id='+this.player.stage+'] case');
+    var poseNames = {};
+    
+    this.player.xml.find(caseSelector).each(function () {
+        $(this).find('state').each(function () {
+            var img = $(this).attr('img');
+            poseNames[img] = true;
+        })
+    });
+    
+    this.poseList.empty().append(Object.keys(poseNames).map(function (img) {
+        var elem = document.createElement('option');
+        $(elem).attr('value', img);
+        return $(elem);
+    }));
+    
+    /* Hide the 'edit' and 'response' buttons: */
+    this.editButton.hide();
+    gameDisplays.forEach(function (disp) {
+        disp.devModeController.newResponseButton.hide();
+    });
+}
+
+DevModeDialogueBox.prototype.exitEditMode = function () {
+    KEYBINDINGS_ENABLED = true;
+    this.editData = null;
+    this.respondingToPlayer = null;
+    
+    /* Hide the data entry elements: */
+    this.container.attr('data-editing', null);
+    this.poseFieldContainer.hide();
+    this.editField.val('');
+    
+    /* Reset the character's shown dialogue text and image: */
+    this.player.chosenState.rawDialogue = this.currentState.text;
+    this.player.chosenState.image = this.currentState.image;
+    
+    this.player.chosenState.expandDialogue(this.player, this.player.currentTarget);
+    gameDisplays[this.player.slot-1].updateText(this.player);
+    gameDisplays[this.player.slot-1].updateImage(this.player);
+    
+    /* Show the 'edit' and 'response' buttons: */
+    this.editButton.show();
+    gameDisplays.forEach(function (disp) {
+        disp.devModeController.newResponseButton.show();
+    });
+}
+
+DevModeDialogueBox.prototype.cancelEdit = function () {
+    this.exitEditMode();
+}
+
+DevModeDialogueBox.prototype.saveEdits = function () {
+    if (this.editingState) {
+        /* Handle edited states: */
+                
+        if (this.currentStateModified) {
+            /* Update the last edit log entry to effect this change: */
+            var idx = this.player.editLog.length - 1;
+            if (idx < 0) return;
+            
+            this.player.editLog[idx].state = {'text': this.editData.text, 'image': this.editData.image};
+        } else {
+            /* Push a new edit log entry... */
+            this.player.editLog.push({
+                'type': 'edit',
+                'stage': this.player.stage,
+                'case': this.currentCase.serializeConditions(),
+                'oldState': {'text': this.currentState.text, 'image': this.currentState.image},
+                'state': {'text': this.editData.text, 'image': this.editData.image}
+            });
+            
+            var stateID = this.player.chosenState.id;
+            
+            /* Go directly to the XML to update all similar states: */
+            this.player.xml.find('state[dev-id="'+stateID+'"]').each(function (idx, elem) {
+                $(elem).html(this.editData.text);
+                $(elem).attr('img', this.editData.image);
+            }.bind(this));
+        }
+    } else {
+        var editEntry = {
+            'type': 'new',                                                          // either 'new' or 'edit'
+            'intent': 'generic',                                                    // either 'generic' or 'response'
+            'responseTarget': null,                                                 // info on the selected response target
+            'stage': this.player.stage,                                             // current character stage
+            'state': {'text': this.editData.text, 'image': this.editData.image},    // edited state data
+            'suggestedTag': this.player.lastUpdateTags[0],                          // a suggested tag for generic lines
+        };
+        
+        /* Dumps relevant edit log data for a given player into a serializable object. */
+        function playerStateInfo (player) {
+            var curState = player.chosenState;
+            
+            var info = {
+                'id': player.id,
+                'stage': player.stage,
+                'case': null,
+                'state': null,
+            }
+            
+            if (curState) {
+                var curCase = curState.parentCase;
+                    
+                info.case = curCase.serializeConditions();
+                info.state = {'text': curState.rawDialogue, 'image': curState.image, 'marker': null};
+                
+                if (curState.marker) {
+                    info.state.marker = {
+                        'name': curState.marker.name,
+                        'perTarget': curState.marker.perTarget,
+                    };
+                    
+                    var markerName = curState.marker.name;
+                    if (curState.marker.perTarget) {
+                        markerName = getTargetMarker(curState.marker.name, player.currentTarget);
+                    }
+                    
+                    info.state.marker.value = player.markers[markerName];
+                }
+            }
+            
+            return info;
+        }
+        
+        if (this.respondingToPlayer) {
+            editEntry.intent = 'response';
+            editEntry.responseTarget = playerStateInfo(this.respondingToPlayer);
+        }
+        
+        this.player.editLog.push(editEntry);
+    }
+    
+    /* Save editData to currentState, which will then get flushed to
+     * player.chosenState.
+     */
+    this.currentState.text = this.editData.text;
+    this.currentState.image = this.editData.image;
+    this.currentStateModified = true;
+    
+    this.exitEditMode();
+}
+
+DevModeDialogueBox.prototype.editCurrentState = function () {
+    if (!this.currentState) return;
+    
+    this.editingState = true;
+    this.startEditMode(this.currentState.text, "Editing");
+}
+
+DevModeDialogueBox.prototype.newResponseState = function (respondTo) {
+    if (!this.player) return;
+    
+    this.respondingToPlayer = respondTo;
+    this.editingState = false;
+
+    this.startEditMode(
+        "",
+        !respondTo ? "New Generic" : "Response: "+this.respondingToPlayer.label
+    );
+}
+
+DevModeDialogueBox.prototype.startNewResponse = function () {
+    if (!this.player || !devModeActive) return;
+    
+    if (devModeTarget === this.player.slot) {
+        // create a new generic state:
+        this.newResponseState(null);
+    } else {
+        // delegate to the dev-target dialogue box controller:
+        gameDisplays[devModeTarget-1].devModeController.newResponseState(this.player);
+    }
+}
+
+DevModeDialogueBox.prototype.togglePreview = function () {
+    if (this.container.attr('data-editing') !== 'preview') {
+        /* Update the displayed dialogue text and image for this player: */
+        this.player.chosenState.rawDialogue = this.editData.text;
+        this.player.chosenState.image = this.editData.image;
+        
+        this.player.chosenState.expandDialogue(this.player, this.player.currentTarget);
+        gameDisplays[this.player.slot-1].updateText(this.player);
+        gameDisplays[this.player.slot-1].updateImage(this.player);
+        
+        this.poseFieldContainer.hide();
+        this.container.attr('data-editing', 'preview');
+    } else {
+        this.container.attr('data-editing', 'entry');
+    }
+};
diff --git a/js/spniDisplay.js b/js/spniDisplay.js
index 3fbd777e7ff4b4c911d0da1f50809b0b5f20cc22..ec65a187af4bee2a828d2b4ba0a7b51e5aa625fe 100644
--- a/js/spniDisplay.js
+++ b/js/spniDisplay.js
@@ -586,6 +586,28 @@ OpponentDisplay.prototype.onResize = function () {
     }
 }
 
+OpponentDisplay.prototype.updateText = function (player) {
+    this.dialogue.html(fixupDialogue(player.chosenState.dialogue));
+}
+
+OpponentDisplay.prototype.updateImage = function(player) {
+    var chosenState = player.chosenState;
+    
+    if (!chosenState.image) {
+        this.clearPose();
+    } else if (chosenState.image.startsWith('custom:')) {
+        var key = chosenState.image.split(':', 2)[1];
+        var poseDef = player.poses[key];
+        if (poseDef) {
+            this.drawPose(new Pose(poseDef, this));
+        } else {
+            this.clearPose();
+        }
+    } else {
+        this.drawPose(player.folder + chosenState.image);
+    }
+}
+
 OpponentDisplay.prototype.update = function(player) {
     if (!player) {
         this.hideBubble();
@@ -602,22 +624,10 @@ OpponentDisplay.prototype.update = function(player) {
     var chosenState = player.chosenState;
     
     /* update dialogue */
-    this.dialogue.html(fixupDialogue(chosenState.dialogue));
+    this.updateText(player);
     
     /* update image */
-    if (!chosenState.image) {
-        this.clearPose();
-    } else if (chosenState.image.startsWith('custom:')) {
-        var key = chosenState.image.split(':', 2)[1];
-        var poseDef = player.poses[key];
-        if (poseDef) {
-            this.drawPose(new Pose(poseDef, this));
-        } else {
-            this.clearPose();
-        }
-    } else {
-        this.drawPose(player.folder + chosenState.image);
-    }
+    this.updateImage(player);    
     
     /* update label */
     this.label.html(player.label.initCap());
@@ -663,6 +673,7 @@ function GameScreenDisplay (slot) {
     this.collectibleIndicator = $('#collectible-button-'+slot);
     
     this.collectibleIndicator.click(this.onCollectibleIndicatorClick.bind(this));
+    this.devModeController = new DevModeDialogueBox(this.bubble);
 }
 GameScreenDisplay.prototype = Object.create(OpponentDisplay.prototype);
 GameScreenDisplay.prototype.constructor = GameScreenDisplay;
@@ -693,6 +704,8 @@ GameScreenDisplay.prototype.update = function (player) {
     this.player = player;
     OpponentDisplay.prototype.update.call(this, player);
     
+    if (devModeActive) this.devModeController.update(player);
+    
     if (player && player.pendingCollectiblePopup) {
         this.collectibleIndicator.show();
     } else {
diff --git a/js/spniGame.js b/js/spniGame.js
index fb41f71620e1aff5a8fab4bef370595442997483..8e5dae24d71e6c60b7d10127fe8625da6d7a3834 100644
--- a/js/spniGame.js
+++ b/js/spniGame.js
@@ -268,6 +268,7 @@ function makeAIDecision () {
 	determineAIAction(players[currentTurn]);
 	
 	/* update a few hardcoded visuals */
+	players[currentTurn].swapping = true;
 	players[currentTurn].updateBehaviour(SWAP_CARDS);
     players[currentTurn].commitBehaviourUpdate();
 	updateGameVisual(currentTurn);
@@ -299,6 +300,8 @@ function reactToNewAICards () {
     players[currentTurn].commitBehaviourUpdate();
 	updateGameVisual(currentTurn);
     
+    players[currentTurn].swapping = false;
+    
     saveSingleTranscriptEntry(currentTurn);
 
 	/* wait and then advance the turn */
@@ -1022,6 +1025,7 @@ function game_keyUp(e)
         else if (e.keyCode == 81 && DEBUG) {
             showDebug = !showDebug;
             updateDebugState(showDebug);
+            setDevSelectorVisibility(showDebug);
         }
         else if (e.keyCode == 84) {
             toggleTableVisibility();
diff --git a/opponents/chihiro/416-dialogue-additions.json b/opponents/chihiro/416-dialogue-additions.json
new file mode 100644
index 0000000000000000000000000000000000000000..f61589d89e358ff9520814182a34684dfd619fa2
--- /dev/null
+++ b/opponents/chihiro/416-dialogue-additions.json
@@ -0,0 +1 @@
+[{"type":"new","intent":"response","phaseTarget":{"id":"sakura","stage":0,"case":{"stage":{"min":0,"max":0},"tag":"must_strip_normal","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"I... can we maybe end this? I don't want to give anyone the wrong idea about Franchouchou...","image":"0-must_strip+.png","marker":{"name":"1UP","perTarget":false,"value":1}}},"responseTarget":{"id":"sakura","stage":0,"case":{"stage":{"min":0,"max":0},"tag":"must_strip_normal","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"I... can we maybe end this? I don't want to give anyone the wrong idea about Franchouchou...","image":"0-must_strip+.png","marker":{"name":"1UP","perTarget":false,"value":1}}},"stage":0,"state":{"text":"Hmph. Why take part in this exercise if you were concerned in any way for your image?","image":"0-hmph.png"},"suggestedTag":"female_must_strip"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"hand","timeInStage":{"min":0,"max":0},"customPriority":25,"priority":25,"tests":[],"counters":[]},"state":{"text":"Um… you can call me Sakura, since we're all getting to know each other as friends! (&lt;i&gt;It's important to make your fans feel loved, and be approachable!&lt;/i&gt;)","image":"1-smile.png"}},"stage":0,"state":{"text":"Hm. So, is 'Sakura' your <i>real</i> name, then?","image":"0-question.png"},"suggestedTag":"okay_hand"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"bad_hand","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(&lt;i&gt;Keep the lid on the zombie thing… Keep a lid on the whole zombie thing...&lt;/i&gt;)","image":"1-ohno.png"}},"stage":0,"state":{"text":"Something about these sensor readings doesn't match up with ~sakura~... she seems more like an ELID infectee than a regular human...","image":"0-idle.png"},"suggestedTag":"okay_hand"},{"type":"new","intent":"response","phaseTarget":{"id":"sakura","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripped","saidMarker":"2UP","customPriority":null,"priority":1,"tests":[],"counters":[]},"state":{"text":"Hm? Blotches? I have &lt;i&gt;no&lt;/i&gt; idea whatever you're talking about.","image":"2-stripped+.png"}},"responseTarget":{"id":"sakura","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripped","saidMarker":"2UP","customPriority":null,"priority":1,"tests":[],"counters":[]},"state":{"text":"Hm? Blotches? I have &lt;i&gt;no&lt;/i&gt; idea whatever you're talking about.","image":"2-stripped+.png"}},"stage":0,"state":{"text":"<i>(That certainly is not normal. I should keep an eye on ~sakura~.)</i>","image":"0-headtilt.png"},"suggestedTag":"female_removed_minor"},{"type":"new","intent":"response","phaseTarget":{"id":"sakura","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"must_strip_losing","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"No no no, hold on! Um! I have... a costume change!","image":"2-must_strip-.png","marker":{"name":"3DN","perTarget":false,"value":1}}},"responseTarget":{"id":"sakura","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"must_strip_losing","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"No no no, hold on! Um! I have... a costume change!","image":"2-must_strip-.png","marker":{"name":"3DN","perTarget":false,"value":1}}},"stage":0,"state":{"text":"'Costume changes' are not within the parameters of this exercise, ~sakura~... or is there something you're hiding from us?","image":"0-disappointed.png"},"suggestedTag":"female_must_strip"},{"type":"new","intent":"response","phaseTarget":{"id":"sakura","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripping","saidMarker":"3DN","customPriority":null,"priority":1,"tests":[],"counters":[]},"state":{"text":"Please don't tell anyone, okay? This would be really bad if it got out!","image":"2-stripping-.png"}},"responseTarget":{"id":"sakura","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripping","saidMarker":"3DN","customPriority":null,"priority":1,"tests":[],"counters":[]},"state":{"text":"Please don't tell anyone, okay? This would be really bad if it got out!","image":"2-stripping-.png"}},"stage":0,"state":{"text":"W-Wait... what's happening to her skin?! Don't tell me I was right this whole time...","image":"0-headtilt.png"},"suggestedTag":"female_removing_minor"},{"type":"new","intent":"response","phaseTarget":{"id":"sakura","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripped","saidMarker":"3DN","customPriority":null,"priority":1,"tests":[],"counters":[]},"state":{"text":"Would you believe me if I told you our manager thought it would be cool if we looked like zombies...?","image":"3-stripped-.png"}},"responseTarget":{"id":"sakura","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripped","saidMarker":"3DN","customPriority":null,"priority":1,"tests":[],"counters":[]},"state":{"text":"Would you believe me if I told you our manager thought it would be cool if we looked like zombies...?","image":"3-stripped-.png"}},"stage":0,"state":{"text":"<i>(This isn't adding up... but, either way...)</i>","image":"0-idle.png"},"suggestedTag":"female_removed_minor"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"hand","timeInStage":{"min":0,"max":0},"customPriority":null,"priority":18,"tests":[],"counters":[{"count":"1-3","filter":"kind"}]},"state":{"text":"(&lt;i&gt;Zombies have no place in modern society... Hmm… maybe Kotaro was trying to change that! The people here look nice enough!&lt;/i&gt;)","image":"3-hum.png"}},"stage":0,"state":{"text":"<i>(If she really is an ELID infectee... I need to be prepared to terminate her immediately. But how..)</i>","image":"0-thinking.png"},"suggestedTag":"good_hand"},{"type":"new","intent":"response","phaseTarget":{"id":"saki","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(Oh god, they can totally see my panties, can't they?)","image":"2-strip.png"}},"responseTarget":{"id":"saki","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(Oh god, they can totally see my panties, can't they?)","image":"2-strip.png"}},"stage":0,"state":{"text":"You <i>are</i> aware that you are exposing your underwear to everyone in the vicinity... correct?","image":"0-thinking.png"},"suggestedTag":"female_removing_minor"},{"type":"new","intent":"response","phaseTarget":{"id":"saki","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"O-oh... It's a little colder than I expected.","image":"3-flinching.png"}},"responseTarget":{"id":"saki","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"O-oh... It's a little colder than I expected.","image":"3-flinching.png"}},"stage":0,"state":{"text":"It matters little to me... though you seem like the kind of person who would care about those things.","image":"0-idle.png"},"suggestedTag":"female_removed_minor"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"chihiro","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"female_must_strip","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"F-Four... Sixteen, was it? Y-You're taking this so seriously and calmly! I-it's kind of amazing, but... why?","image":"1-embarassed.png"}},"stage":0,"state":{"text":"Admittedly, in another time, I would've refused to participate in this absolutely <i>asinine</i> exercise...","image":"0-hmph.png"},"suggestedTag":"must_strip_winning"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"chihiro","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"opponent_stripping","filter":"serious","notSaidMarker":"filter_serious","customPriority":null,"priority":251,"tests":[{"expr":"~clothing.type~","value":"important","cmp":"!="},{"expr":"~clothing.type~","value":"major","cmp":"!="}],"counters":[]},"state":{"text":"~name~... you seem pretty straitlaced and serious. I-I didn't think someone like you would play this game...","image":"1-thinking-3.png","marker":{"name":"filter_serious","perTarget":false,"value":3}}},"stage":0,"state":{"text":"...but, for now, I'll trust that my commanding officer has a good reason for making me do this.","image":"0-strip.png"},"suggestedTag":"stripping"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"chihiro","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"female_removed_accessory","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"I-I thought your ~clothing~ l-looked cute, ~name~...","image":"1-shy.png"}},"stage":1,"state":{"text":"UMP45 was... perhaps the last person I expected to serve under. Nonetheless, she's proven herself to be extremely reliable in command and in combat.","image":"1-hmph.png"},"suggestedTag":"stripped"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"female_must_strip","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"You just look really pretty, ~name~! How do you get your skin to look so tasteful? Um... you know, beautiful?","image":"3-smile.png"}},"stage":1,"state":{"text":"~sakura~, I undergo regular maintenance on my chassis exterior, alongside all my other components. That's all.","image":"1-guarded.png"},"suggestedTag":"must_strip_normal"}]
\ No newline at end of file
diff --git a/opponents/chihiro/behaviour.xml b/opponents/chihiro/behaviour.xml
index b0fb48a1fd7069db5a5c98f8c7b8de97ec2851b2..9fd8b3e10134c7029261d33623db9b6b3663b83a 100644
--- a/opponents/chihiro/behaviour.xml
+++ b/opponents/chihiro/behaviour.xml
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='UTF-8'?>
 
-<!--This file was machine generated using the Character Editor v4.1 at 10:21:20 PM on April 19, 2019. Please do not edit it directly without preserving your improvements elsewhere or your changes may be lost the next time this file is generated.-->
+<!--This file was machine generated using the Character Editor v4.2 at 3:41:24 PM on May 14, 2019. Please do not edit it directly without preserving your improvements elsewhere or your changes may be lost the next time this file is generated.-->
 <opponent>
-    <version>v4.1</version>
+    <version>v4.2</version>
     <first>Chihiro</first>
     <last>Fujisaki</last>
     <label>Chihiro</label>
@@ -519,6 +519,18 @@
             <case tag="hand" alsoPlaying="mahiru" alsoPlayingStage="1-7" notSaidMarker="computational_photography">
                 <state img="0-thinking-3.png" marker="computational_photography">Photography... I'm working on a computational photography project right now, actually. It's supposed to help with low-light photos-- exposure time adjustment, frame averaging, stuff like that...</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="0-1" totalRounds="0-3" alsoPlayingNotSaidMarker="saga_franchouchou" alsoPlayingSayingMarker="saga_franchouchou">
+                <state img="0-thinking-3.png" weight="0">Eh? Fran...chouchou? I think I remember seeing that name online somewhere... maybe?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="0-2" notSaidMarker="target_sakura_comment">
+                <state img="0-shocked.png" marker="target_sakura_comment=1" weight="0">O-Oh! You're an idol, right? Are you sure you can play something like this...? I've heard that an idol's life can be really harsh, sometimes...</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0" alsoPlayingSaying="you can call me Sakura">
+                <state img="0-happy.png" weight="0">Oh... okay then, Sakura! I-In that case, I guess you could call me Chihiro... though you were probably doing that already...</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="3" alsoPlayingNotSaidMarker="furanshuu" alsoPlayingSayingMarker="furanshuu">
+                <state img="0-nervous-2.png" weight="0">O-Oh. That's, uhm... interesting, Sakura... &lt;i&gt;(N-Now that I think about it... is that what I've been smelling?)&lt;/i&gt;</state>
+            </case>
             <case tag="hand" alsoPlaying="uravity" alsoPlayingStage="2-7" notSaidMarker="ochako_ua">
                 <state img="0-thinking-1.png" marker="ochako_ua=1">O-Ochako, you, uhm, went to an academy called 'UA', right? What was it like? ...Is it like Hope's Peak?</state>
                 <state img="0-thinking-1.png" marker="ochako_ua=1">U-Uhm, so... Ochako, what &lt;i&gt;is&lt;/i&gt; UA Academy, anyways... is it like Hope's Peak?</state>
@@ -529,6 +541,9 @@
             <case tag="must_strip" alsoPlaying="pit">
                 <state img="0-nervous-2.png">Y-Yeah! I... uhm, I'm good with computers...</state>
             </case>
+            <case tag="must_strip" alsoPlaying="sakura">
+                <state img="0-nervous.png" weight="0">E-Eh? Familiar? H-How...?</state>
+            </case>
             <case tag="must_strip_winning">
                 <state img="0-nervous-2.png">W-Well... I've still got a lot of clothes left. I-I can do this...</state>
                 <state img="0-nervous-2.png">I've got a lot of layers on, right...? So... I guess I shouldn't be nervous...</state>
@@ -555,6 +570,9 @@
             <case tag="stripping" alsoPlaying="pit">
                 <state img="0-strip.png">Games? Oh, no, I mostly work with machine learning and data science-- er, uhm... artificial intelligence, basically.</state>
             </case>
+            <case tag="stripping" alsoPlaying="sakura">
+                <state img="0-strip.png" weight="0">U-Uhm... yeah, I guess... I-I don't really listen to a lot of idol music, so... uh...</state>
+            </case>
             <case tag="male_must_strip">
                 <state img="0-nervous.png">O-Oh... um... o-okay, then...</state>
                 <state img="0-nervous.png">O-Okay, then...</state>
@@ -595,6 +613,12 @@
             <case tag="female_must_strip" target="mahiru" targetStage="1">
                 <state img="0-shocked.png">&lt;i&gt;(If I remember correctly... isn't Mahiru really harsh with guys? ...Uh-oh.)&lt;/i&gt;</state>
             </case>
+            <case tag="female_must_strip" target="saki" targetStage="1">
+                <state img="0-embarassed.png" weight="0">E-Er... Saki, you seem pretty nervous.... are you okay?</state>
+            </case>
+            <case tag="female_must_strip" target="sakura" targetStage="2" targetSayingMarker="3DN">
+                <state img="0-shocked.png" weight="0">W-Wait, a costume change...? I-Is that allowed, here?</state>
+            </case>
             <case tag="male_removing_accessory">
                 <state img="0-relieved.png">O-Oh! T-That's all you have to take off? G-Good!</state>
                 <state img="0-relieved.png">O-Oh, that's all... good!</state>
@@ -623,6 +647,9 @@
                 <state img="0-relieved.png">I-I'm glad this doesn't have to be so embarrassing...</state>
                 <state img="0-relieved.png">O-Oh... I-I'm glad this d-doesn't have to be embarrassing!</state>
             </case>
+            <case tag="female_removing_accessory" target="saki" targetStage="1">
+                <state img="0-disappointed.png" weight="0">&lt;i&gt;(S-She's been pretty quiet, hasn't she...?)&lt;/i&gt; U-Uhm, I'm not making you uncomfortable, am I?</state>
+            </case>
             <case tag="female_removing_accessory" targetStage="1-8" targetStatus="not_decent">
                 <state img="0-nervous.png">W-Wait, ~name~... y-you're removing that now?</state>
                 <state img="0-nervous.png">W-Wait, ~name~... why didn't you take that off before...?</state>
@@ -635,6 +662,9 @@
                 <state img="0-happy.png">G-Good for you, ~name~!</state>
                 <state img="0-happy.png">E-Ehehe...</state>
             </case>
+            <case tag="female_removed_accessory" target="saki" targetStage="2">
+                <state img="0-disappointed.png" weight="0">I-I... uhm... I thought they looked cute, Saki... r-really!</state>
+            </case>
             <case tag="female_removed_accessory" targetStage="1-8" targetStatus="not_decent">
                 <state img="0-nervous.png">I-I don't really get it... B-but okay...</state>
                 <state img="0-nervous.png">I-I really don't g-get it, but... okay...?</state>
@@ -699,6 +729,12 @@
             <case tag="female_removing_minor" target="kizuna" targetStage="4">
                 <state img="0-nervous.png">Kizuna's... doing something weird again, isn't she...?</state>
             </case>
+            <case tag="female_removing_minor" target="saki" targetStage="2">
+                <state img="0-nervous-2.png" weight="0">&lt;i&gt;(I-I can see her underwear! O-Oh no, I hope she doesn't think I'm creepy...!)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removing_minor" target="sakura" targetStage="2" targetSaidMarker="3DN">
+                <state img="0-shocked.png" weight="0">W-Waitwaitwait, what's happening to your skin, ~sakura~?!</state>
+            </case>
             <case tag="female_removing_minor" targetStage="1-8" targetStatus="not_decent">
                 <state img="0-nervous.png">O-Oh... y-you, um... c-couldn't have taken that off earlier... s-somehow?</state>
                 <state img="0-nervous.png">T-That's... um... a bit weird, isn't it...?</state>
@@ -714,6 +750,15 @@
             <case tag="female_removed_minor" target="kizuna" targetStage="5">
                 <state img="0-embarassed.png">I-I see... well, not really, but... uhm... okay.</state>
             </case>
+            <case tag="female_removed_minor" target="saki" targetStage="3">
+                <state img="0-disappointed.png" weight="0">I-It really is cold, isn't it...?</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2" targetSaidMarker="2UP">
+                <state img="0-shy.png" weight="0">&lt;i&gt;(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3" targetSaidMarker="3DN">
+                <state img="0-nervous.png" weight="0">&lt;i&gt;(This doesn't seem right...)&lt;/i&gt;</state>
+            </case>
             <case tag="female_removed_minor" targetStage="1-8" targetStatus="not_decent">
                 <state img="0-nervous.png">I-It was just a bit s-strange to me... S-Sorry...</state>
                 <state img="0-nervous.png">I-I'm sorry... it just seemed a bit strange to me...</state>
@@ -820,6 +865,9 @@
                 <state img="0-sad.png">I-I'm sorry, ~name~...</state>
                 <state img="0-embarassed.png">I-- I, uhm...</state>
             </case>
+            <case tag="opponent_lost" target="hk416" targetStage="0">
+                <state img="0-embarassed.png" weight="0">F-Four... Sixteen, was it? Y-You're taking this so seriously and calmly! I-it's kind of amazing, but... why?</state>
+            </case>
             <case tag="opponent_lost" target="shimakaze" targetStage="0">
                 <state img="0-shocked.png">E-Eh? W-Wait, Shimakaze-- that's not how you play this!</state>
             </case>
@@ -864,6 +912,15 @@
             <case tag="opponent_stripping" target="hanako" targetStage="2">
                 <state img="0-shy.png">I-I wish I could... um... be as c-confident about this game...</state>
             </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="0">
+                <state img="0-thinking-3.png" weight="0">Wow... that's a lot of trust to put into one person, isn't it? ...What is your... uhm, commander like?</state>
+            </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="1">
+                <state img="0-embarassed.png" weight="0">&lt;i&gt;(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)&lt;/i&gt;</state>
+            </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="3">
+                <state img="0-embarassed.png" weight="0">That jacket looks pretty heavy... is it going to be difficult to remove?</state>
+            </case>
             <case tag="opponent_stripping" target="kamina" targetStage="0">
                 <state img="0-shy.png">U-Uhm... Kamina, there's something I want-- no, something I &lt;i&gt;need&lt;/i&gt; to ask you...</state>
             </case>
@@ -1044,6 +1101,21 @@
             <case tag="opponent_stripped" target="chiaki" targetStage="8">
                 <state img="0-embarassed.png">U-Uhm... s-sorry...</state>
             </case>
+            <case tag="opponent_stripped" target="hk416" notSaidMarker="target_416_german" targetSaying="Scheiße">
+                <state img="0-thinking-3.png" marker="target_416_german=1" weight="0">Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" notSaidMarker="target_416_german" targetSaying="Verdammt">
+                <state img="0-thinking-3.png" marker="target_416_german=1" weight="0">Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="1">
+                <state img="0-shy.png" weight="0">&lt;i&gt;(I-I still don't really get it, but...)&lt;/i&gt; S-She seems like a really interesting person, 416...</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="2">
+                <state img="0-thinking-3.png" weight="0">&lt;i&gt;(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)&lt;/i&gt;</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="4">
+                <state img="0-embarassed.png" weight="0">O-Oh. I-- uhm, thought you were wearing an undershirt beneath that...</state>
+            </case>
             <case tag="opponent_stripped" target="kamina" targetStage="1">
                 <state img="0-angry.png" marker="kamina_meaning_of_manly=1">What does it mean to be &lt;i&gt;manly?&lt;/i&gt;</state>
                 <state img="0-angry.png" marker="kamina_meaning_of_manly=1">I &lt;i&gt;need&lt;/i&gt; to know... what it means to be &lt;i&gt;manly.&lt;/i&gt;</state>
@@ -1187,6 +1259,18 @@
             <case tag="hand" alsoPlaying="mahiru" alsoPlayingStage="1-7" notSaidMarker="computational_photography">
                 <state img="1-thinking-3.png" marker="computational_photography">Photography... I'm working on a computational photography project right now, actually. It's supposed to help with low-light photos-- exposure time adjustment, frame averaging, stuff like that...</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="0-1" totalRounds="0-3" alsoPlayingNotSaidMarker="saga_franchouchou" alsoPlayingSayingMarker="saga_franchouchou">
+                <state img="1-thinking-3.png" weight="0">Eh? Fran...chouchou? I think I remember seeing that name online somewhere... maybe?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="0-2" notSaidMarker="target_sakura_comment">
+                <state img="1-shocked.png" marker="target_sakura_comment=1" weight="0">O-Oh! You're an idol, right? Are you sure you can play something like this...? I've heard that an idol's life can be really harsh, sometimes...</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0" alsoPlayingSaying="you can call me Sakura">
+                <state img="1-happy.png" weight="0">Oh... okay then, Sakura! I-In that case, I guess you could call me Chihiro... though you were probably doing that already...</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="3" alsoPlayingNotSaidMarker="furanshuu" alsoPlayingSayingMarker="furanshuu">
+                <state img="1-nervous-2.png" weight="0">O-Oh. That's, uhm... interesting, Sakura... &lt;i&gt;(N-Now that I think about it... is that what I've been smelling?)&lt;/i&gt;</state>
+            </case>
             <case tag="hand" alsoPlaying="uravity" alsoPlayingStage="2-7" notSaidMarker="ochako_ua">
                 <state img="1-thinking-1.png" marker="ochako_ua=1">O-Ochako, you, uhm, went to an academy called 'UA', right? What was it like? ...Is it like Hope's Peak?</state>
                 <state img="1-thinking-1.png" marker="ochako_ua=1">U-Uhm, so... Ochako, what &lt;i&gt;is&lt;/i&gt; UA Academy, anyways... is it like Hope's Peak?</state>
@@ -1228,6 +1312,9 @@
             <case tag="stripped" alsoPlaying="9s">
                 <state img="1-angry.png">H-Hey! D-Did you just...!</state>
             </case>
+            <case tag="stripped" alsoPlaying="sakura">
+                <state img="1-shy.png" weight="0">Y-Yeah... I suppose, Sakura...?</state>
+            </case>
             <case tag="male_must_strip">
                 <state img="1-nervous.png">O-Oh... um... o-okay, then...</state>
                 <state img="1-nervous.png">O-Okay, then...</state>
@@ -1268,6 +1355,12 @@
             <case tag="female_must_strip" target="mahiru" targetStage="1">
                 <state img="1-shocked.png">&lt;i&gt;(If I remember correctly... isn't Mahiru really harsh with guys? ...Uh-oh.)&lt;/i&gt;</state>
             </case>
+            <case tag="female_must_strip" target="saki" targetStage="1">
+                <state img="1-embarassed.png" weight="0">E-Er... Saki, you seem pretty nervous.... are you okay?</state>
+            </case>
+            <case tag="female_must_strip" target="sakura" targetStage="2" targetSayingMarker="3DN">
+                <state img="1-shocked.png" weight="0">W-Wait, a costume change...? I-Is that allowed, here?</state>
+            </case>
             <case tag="male_removing_accessory">
                 <state img="1-relieved.png">O-Oh! T-That's all you have to take off? G-Good!</state>
                 <state img="1-relieved.png">O-Oh, that's all... good!</state>
@@ -1296,6 +1389,9 @@
                 <state img="1-relieved.png">I-I'm glad this doesn't have to be so embarrassing...</state>
                 <state img="1-relieved.png">O-Oh... I-I'm glad this d-doesn't have to be embarrassing!</state>
             </case>
+            <case tag="female_removing_accessory" target="saki" targetStage="1">
+                <state img="1-disappointed.png" weight="0">&lt;i&gt;(S-She's been pretty quiet, hasn't she...?)&lt;/i&gt; U-Uhm, I'm not making you uncomfortable, am I?</state>
+            </case>
             <case tag="female_removing_accessory" targetStage="1-8" targetStatus="not_decent">
                 <state img="1-nervous.png">W-Wait, ~name~... y-you're removing that now?</state>
                 <state img="1-nervous.png">W-Wait, ~name~... why didn't you take that off before...?</state>
@@ -1308,6 +1404,9 @@
                 <state img="1-happy.png">G-Good for you, ~name~!</state>
                 <state img="1-happy.png">E-Ehehe...</state>
             </case>
+            <case tag="female_removed_accessory" target="saki" targetStage="2">
+                <state img="1-disappointed.png" weight="0">I-I... uhm... I thought they looked cute, Saki... r-really!</state>
+            </case>
             <case tag="female_removed_accessory" targetStage="1-8" targetStatus="not_decent">
                 <state img="1-nervous.png">I-I don't really get it... B-but okay...</state>
                 <state img="1-nervous.png">I-I really don't g-get it, but... okay...?</state>
@@ -1372,6 +1471,12 @@
             <case tag="female_removing_minor" target="kizuna" targetStage="4">
                 <state img="1-nervous.png">Kizuna's... doing something weird again, isn't she...?</state>
             </case>
+            <case tag="female_removing_minor" target="saki" targetStage="2">
+                <state img="1-nervous-2.png" weight="0">&lt;i&gt;(I-I can see her underwear! O-Oh no, I hope she doesn't think I'm creepy...!)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removing_minor" target="sakura" targetStage="2" targetSaidMarker="3DN">
+                <state img="1-shocked.png" weight="0">W-Waitwaitwait, what's happening to your skin, ~sakura~?!</state>
+            </case>
             <case tag="female_removing_minor" targetStage="1-8" targetStatus="not_decent">
                 <state img="1-nervous.png">O-Oh... y-you, um... c-couldn't have taken that off earlier... s-somehow?</state>
                 <state img="1-nervous.png">T-That's... um... a bit weird, isn't it...?</state>
@@ -1387,6 +1492,15 @@
             <case tag="female_removed_minor" target="kizuna" targetStage="5">
                 <state img="1-embarassed.png">I-I see... well, not really, but... uhm... okay.</state>
             </case>
+            <case tag="female_removed_minor" target="saki" targetStage="3">
+                <state img="1-disappointed.png" weight="0">I-It really is cold, isn't it...?</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2" targetSaidMarker="2UP">
+                <state img="1-shy.png" weight="0">&lt;i&gt;(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3" targetSaidMarker="3DN">
+                <state img="1-nervous.png" weight="0">&lt;i&gt;(This doesn't seem right...)&lt;/i&gt;</state>
+            </case>
             <case tag="female_removed_minor" targetStage="1-8" targetStatus="not_decent">
                 <state img="1-nervous.png">I-It was just a bit s-strange to me... S-Sorry...</state>
                 <state img="1-nervous.png">I-I'm sorry... it just seemed a bit strange to me...</state>
@@ -1493,6 +1607,9 @@
                 <state img="1-sad.png">I-I'm sorry, ~name~...</state>
                 <state img="1-embarassed.png">I-- I, uhm...</state>
             </case>
+            <case tag="opponent_lost" target="hk416" targetStage="0">
+                <state img="1-embarassed.png" weight="0">F-Four... Sixteen, was it? Y-You're taking this so seriously and calmly! I-it's kind of amazing, but... why?</state>
+            </case>
             <case tag="opponent_lost" target="shimakaze" targetStage="0">
                 <state img="1-shocked.png">E-Eh? W-Wait, Shimakaze-- that's not how you play this!</state>
             </case>
@@ -1537,6 +1654,15 @@
             <case tag="opponent_stripping" target="hanako" targetStage="2">
                 <state img="1-shy.png">I-I wish I could... um... be as c-confident about this game...</state>
             </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="0">
+                <state img="1-thinking-3.png" weight="0">Wow... that's a lot of trust to put into one person, isn't it? ...What is your... uhm, commander like?</state>
+            </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="1">
+                <state img="1-embarassed.png" weight="0">&lt;i&gt;(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)&lt;/i&gt;</state>
+            </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="3">
+                <state img="1-embarassed.png" weight="0">That jacket looks pretty heavy... is it going to be difficult to remove?</state>
+            </case>
             <case tag="opponent_stripping" target="kamina" targetStage="0">
                 <state img="1-shy.png">U-Uhm... Kamina, there's something I want-- no, something I &lt;i&gt;need&lt;/i&gt; to ask you...</state>
             </case>
@@ -1717,6 +1843,21 @@
             <case tag="opponent_stripped" target="chiaki" targetStage="8">
                 <state img="1-embarassed.png">U-Uhm... s-sorry...</state>
             </case>
+            <case tag="opponent_stripped" target="hk416" notSaidMarker="target_416_german" targetSaying="Scheiße">
+                <state img="1-thinking-3.png" marker="target_416_german=1" weight="0">Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" notSaidMarker="target_416_german" targetSaying="Verdammt">
+                <state img="1-thinking-3.png" marker="target_416_german=1" weight="0">Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="1">
+                <state img="1-shy.png" weight="0">&lt;i&gt;(I-I still don't really get it, but...)&lt;/i&gt; S-She seems like a really interesting person, 416...</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="2">
+                <state img="1-thinking-3.png" weight="0">&lt;i&gt;(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)&lt;/i&gt;</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="4">
+                <state img="1-embarassed.png" weight="0">O-Oh. I-- uhm, thought you were wearing an undershirt beneath that...</state>
+            </case>
             <case tag="opponent_stripped" target="kamina" targetStage="1">
                 <state img="1-angry.png" marker="kamina_meaning_of_manly=1">What does it mean to be &lt;i&gt;manly?&lt;/i&gt;</state>
                 <state img="1-angry.png" marker="kamina_meaning_of_manly=1">I &lt;i&gt;need&lt;/i&gt; to know... what it means to be &lt;i&gt;manly.&lt;/i&gt;</state>
@@ -1860,6 +2001,18 @@
             <case tag="hand" alsoPlaying="mahiru" alsoPlayingStage="1-7" notSaidMarker="computational_photography">
                 <state img="2-thinking-3.png" marker="computational_photography">Photography... I'm working on a computational photography project right now, actually. It's supposed to help with low-light photos-- exposure time adjustment, frame averaging, stuff like that...</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="0-1" totalRounds="0-3" alsoPlayingNotSaidMarker="saga_franchouchou" alsoPlayingSayingMarker="saga_franchouchou">
+                <state img="2-thinking-3.png" weight="0">Eh? Fran...chouchou? I think I remember seeing that name online somewhere... maybe?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="0-2" notSaidMarker="target_sakura_comment">
+                <state img="2-shocked.png" marker="target_sakura_comment=1" weight="0">O-Oh! You're an idol, right? Are you sure you can play something like this...? I've heard that an idol's life can be really harsh, sometimes...</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0" alsoPlayingSaying="you can call me Sakura">
+                <state img="2-happy.png" weight="0">Oh... okay then, Sakura! I-In that case, I guess you could call me Chihiro... though you were probably doing that already...</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="3" alsoPlayingNotSaidMarker="furanshuu" alsoPlayingSayingMarker="furanshuu">
+                <state img="2-nervous-2.png" weight="0">O-Oh. That's, uhm... interesting, Sakura... &lt;i&gt;(N-Now that I think about it... is that what I've been smelling?)&lt;/i&gt;</state>
+            </case>
             <case tag="hand" alsoPlaying="uravity" alsoPlayingStage="2-7" notSaidMarker="ochako_ua">
                 <state img="2-thinking-1.png" marker="ochako_ua=1">O-Ochako, you, uhm, went to an academy called 'UA', right? What was it like? ...Is it like Hope's Peak?</state>
                 <state img="2-thinking-1.png" marker="ochako_ua=1">U-Uhm, so... Ochako, what &lt;i&gt;is&lt;/i&gt; UA Academy, anyways... is it like Hope's Peak?</state>
@@ -1942,6 +2095,12 @@
             <case tag="female_must_strip" target="mahiru" targetStage="1">
                 <state img="2-shocked.png">&lt;i&gt;(If I remember correctly... isn't Mahiru really harsh with guys? ...Uh-oh.)&lt;/i&gt;</state>
             </case>
+            <case tag="female_must_strip" target="saki" targetStage="1">
+                <state img="2-embarassed.png" weight="0">E-Er... Saki, you seem pretty nervous.... are you okay?</state>
+            </case>
+            <case tag="female_must_strip" target="sakura" targetStage="2" targetSayingMarker="3DN">
+                <state img="2-shocked.png" weight="0">W-Wait, a costume change...? I-Is that allowed, here?</state>
+            </case>
             <case tag="male_removing_accessory">
                 <state img="2-relieved.png">O-Oh! T-That's all you have to take off? G-Good!</state>
                 <state img="2-relieved.png">O-Oh, that's all... good!</state>
@@ -1970,6 +2129,9 @@
                 <state img="2-relieved.png">I-I'm glad this doesn't have to be so embarrassing...</state>
                 <state img="2-relieved.png">O-Oh... I-I'm glad this d-doesn't have to be embarrassing!</state>
             </case>
+            <case tag="female_removing_accessory" target="saki" targetStage="1">
+                <state img="2-disappointed.png" weight="0">&lt;i&gt;(S-She's been pretty quiet, hasn't she...?)&lt;/i&gt; U-Uhm, I'm not making you uncomfortable, am I?</state>
+            </case>
             <case tag="female_removing_accessory" targetStage="1-8" targetStatus="not_decent">
                 <state img="2-nervous.png">W-Wait, ~name~... y-you're removing that now?</state>
                 <state img="2-nervous.png">W-Wait, ~name~... why didn't you take that off before...?</state>
@@ -1982,6 +2144,9 @@
                 <state img="2-happy.png">G-Good for you, ~name~!</state>
                 <state img="2-happy.png">E-Ehehe...</state>
             </case>
+            <case tag="female_removed_accessory" target="saki" targetStage="2">
+                <state img="2-disappointed.png" weight="0">I-I... uhm... I thought they looked cute, Saki... r-really!</state>
+            </case>
             <case tag="female_removed_accessory" targetStage="1-8" targetStatus="not_decent">
                 <state img="2-nervous.png">I-I don't really get it... B-but okay...</state>
                 <state img="2-nervous.png">I-I really don't g-get it, but... okay...?</state>
@@ -2046,6 +2211,12 @@
             <case tag="female_removing_minor" target="kizuna" targetStage="4">
                 <state img="2-nervous.png">Kizuna's... doing something weird again, isn't she...?</state>
             </case>
+            <case tag="female_removing_minor" target="saki" targetStage="2">
+                <state img="2-nervous-2.png" weight="0">&lt;i&gt;(I-I can see her underwear! O-Oh no, I hope she doesn't think I'm creepy...!)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removing_minor" target="sakura" targetStage="2" targetSaidMarker="3DN">
+                <state img="2-shocked.png" weight="0">W-Waitwaitwait, what's happening to your skin, ~sakura~?!</state>
+            </case>
             <case tag="female_removing_minor" targetStage="1-8" targetStatus="not_decent">
                 <state img="2-nervous.png">O-Oh... y-you, um... c-couldn't have taken that off earlier... s-somehow?</state>
                 <state img="2-nervous.png">T-That's... um... a bit weird, isn't it...?</state>
@@ -2061,6 +2232,15 @@
             <case tag="female_removed_minor" target="kizuna" targetStage="5">
                 <state img="2-embarassed.png">I-I see... well, not really, but... uhm... okay.</state>
             </case>
+            <case tag="female_removed_minor" target="saki" targetStage="3">
+                <state img="2-disappointed.png" weight="0">I-It really is cold, isn't it...?</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2" targetSaidMarker="2UP">
+                <state img="2-shy.png" weight="0">&lt;i&gt;(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3" targetSaidMarker="3DN">
+                <state img="2-nervous.png" weight="0">&lt;i&gt;(This doesn't seem right...)&lt;/i&gt;</state>
+            </case>
             <case tag="female_removed_minor" targetStage="1-8" targetStatus="not_decent">
                 <state img="2-nervous.png">I-It was just a bit s-strange to me... S-Sorry...</state>
                 <state img="2-nervous.png">I-I'm sorry... it just seemed a bit strange to me...</state>
@@ -2167,6 +2347,9 @@
                 <state img="2-sad.png">I-I'm sorry, ~name~...</state>
                 <state img="2-embarassed.png">I-- I, uhm...</state>
             </case>
+            <case tag="opponent_lost" target="hk416" targetStage="0">
+                <state img="2-embarassed.png" weight="0">F-Four... Sixteen, was it? Y-You're taking this so seriously and calmly! I-it's kind of amazing, but... why?</state>
+            </case>
             <case tag="opponent_lost" target="shimakaze" targetStage="0">
                 <state img="2-shocked.png">E-Eh? W-Wait, Shimakaze-- that's not how you play this!</state>
             </case>
@@ -2211,6 +2394,15 @@
             <case tag="opponent_stripping" target="hanako" targetStage="2">
                 <state img="2-shy.png">I-I wish I could... um... be as c-confident about this game...</state>
             </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="0">
+                <state img="2-thinking-3.png" weight="0">Wow... that's a lot of trust to put into one person, isn't it? ...What is your... uhm, commander like?</state>
+            </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="1">
+                <state img="2-embarassed.png" weight="0">&lt;i&gt;(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)&lt;/i&gt;</state>
+            </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="3">
+                <state img="2-embarassed.png" weight="0">That jacket looks pretty heavy... is it going to be difficult to remove?</state>
+            </case>
             <case tag="opponent_stripping" target="kamina" targetStage="0">
                 <state img="2-shy.png">U-Uhm... Kamina, there's something I want-- no, something I &lt;i&gt;need&lt;/i&gt; to ask you...</state>
             </case>
@@ -2414,6 +2606,21 @@
             <case tag="opponent_stripped" target="chiaki" targetStage="8">
                 <state img="2-embarassed.png">U-Uhm... s-sorry...</state>
             </case>
+            <case tag="opponent_stripped" target="hk416" notSaidMarker="target_416_german" targetSaying="Scheiße">
+                <state img="2-thinking-3.png" marker="target_416_german=1" weight="0">Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" notSaidMarker="target_416_german" targetSaying="Verdammt">
+                <state img="2-thinking-3.png" marker="target_416_german=1" weight="0">Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="1">
+                <state img="2-shy.png" weight="0">&lt;i&gt;(I-I still don't really get it, but...)&lt;/i&gt; S-She seems like a really interesting person, 416...</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="2">
+                <state img="2-thinking-3.png" weight="0">&lt;i&gt;(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)&lt;/i&gt;</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="4">
+                <state img="2-embarassed.png" weight="0">O-Oh. I-- uhm, thought you were wearing an undershirt beneath that...</state>
+            </case>
             <case tag="opponent_stripped" target="kamina" targetStage="1">
                 <state img="2-angry.png" marker="kamina_meaning_of_manly=1">What does it mean to be &lt;i&gt;manly?&lt;/i&gt;</state>
                 <state img="2-angry.png" marker="kamina_meaning_of_manly=1">I &lt;i&gt;need&lt;/i&gt; to know... what it means to be &lt;i&gt;manly.&lt;/i&gt;</state>
@@ -2554,6 +2761,18 @@
             <case tag="hand" alsoPlaying="mahiru" alsoPlayingStage="1-7" notSaidMarker="computational_photography">
                 <state img="3-thinking-3.png" marker="computational_photography">Photography... I'm working on a computational photography project right now, actually. It's supposed to help with low-light photos-- exposure time adjustment, frame averaging, stuff like that...</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="0-1" totalRounds="0-3" alsoPlayingNotSaidMarker="saga_franchouchou" alsoPlayingSayingMarker="saga_franchouchou">
+                <state img="3-thinking-3.png" weight="0">Eh? Fran...chouchou? I think I remember seeing that name online somewhere... maybe?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="0-2" notSaidMarker="target_sakura_comment">
+                <state img="3-shocked.png" marker="target_sakura_comment=1" weight="0">O-Oh! You're an idol, right? Are you sure you can play something like this...? I've heard that an idol's life can be really harsh, sometimes...</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0" alsoPlayingSaying="you can call me Sakura">
+                <state img="3-happy.png" weight="0">Oh... okay then, Sakura! I-In that case, I guess you could call me Chihiro... though you were probably doing that already...</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="3" alsoPlayingNotSaidMarker="furanshuu" alsoPlayingSayingMarker="furanshuu">
+                <state img="3-nervous-2.png" weight="0">O-Oh. That's, uhm... interesting, Sakura... &lt;i&gt;(N-Now that I think about it... is that what I've been smelling?)&lt;/i&gt;</state>
+            </case>
             <case tag="hand" alsoPlaying="uravity" alsoPlayingStage="2-7" notSaidMarker="ochako_ua">
                 <state img="3-thinking-1.png" marker="ochako_ua=1">O-Ochako, you, uhm, went to an academy called 'UA', right? What was it like? ...Is it like Hope's Peak?</state>
                 <state img="3-thinking-1.png" marker="ochako_ua=1">U-Uhm, so... Ochako, what &lt;i&gt;is&lt;/i&gt; UA Academy, anyways... is it like Hope's Peak?</state>
@@ -2633,6 +2852,12 @@
             <case tag="female_must_strip" target="mahiru" targetStage="1">
                 <state img="3-shocked.png">&lt;i&gt;(If I remember correctly... isn't Mahiru really harsh with guys? ...Uh-oh.)&lt;/i&gt;</state>
             </case>
+            <case tag="female_must_strip" target="saki" targetStage="1">
+                <state img="3-embarassed.png" weight="0">E-Er... Saki, you seem pretty nervous.... are you okay?</state>
+            </case>
+            <case tag="female_must_strip" target="sakura" targetStage="2" targetSayingMarker="3DN">
+                <state img="3-shocked.png" weight="0">W-Wait, a costume change...? I-Is that allowed, here?</state>
+            </case>
             <case tag="male_removing_accessory">
                 <state img="3-shy.png">O-Oh, that's all... lucky you?</state>
                 <state img="3-shy.png">O-Oh, you have that... good for you...?</state>
@@ -2661,6 +2886,9 @@
                 <state img="3-shy.png">O-Oh, you still have that...</state>
                 <state img="3-shy.png">O-Oh... O-okay then...</state>
             </case>
+            <case tag="female_removing_accessory" target="saki" targetStage="1">
+                <state img="3-disappointed.png" weight="0">&lt;i&gt;(S-She's been pretty quiet, hasn't she...?)&lt;/i&gt; U-Uhm, I'm not making you uncomfortable, am I?</state>
+            </case>
             <case tag="female_removing_accessory" targetStage="1-8" targetStatus="not_decent">
                 <state img="3-nervous.png">W-Wait, ~name~... y-you're removing that now?</state>
                 <state img="3-nervous.png">W-Wait, ~name~... why didn't you take that off before...?</state>
@@ -2672,6 +2900,9 @@
                 <state img="3-shy.png">I-I guess that's a good thing... I think.</state>
                 <state img="3-shy.png">S-So, um, that's a good thing... for her, I mean...</state>
             </case>
+            <case tag="female_removed_accessory" target="saki" targetStage="2">
+                <state img="3-disappointed.png" weight="0">I-I... uhm... I thought they looked cute, Saki... r-really!</state>
+            </case>
             <case tag="female_removed_accessory" targetStage="1-8" targetStatus="not_decent">
                 <state img="3-nervous.png">I-I don't really get it... B-but okay...</state>
                 <state img="3-nervous.png">I-I really don't g-get it, but... okay...?</state>
@@ -2736,6 +2967,12 @@
             <case tag="female_removing_minor" target="kizuna" targetStage="4">
                 <state img="3-nervous.png">Kizuna's... doing something weird again, isn't she...?</state>
             </case>
+            <case tag="female_removing_minor" target="saki" targetStage="2">
+                <state img="3-nervous-2.png" weight="0">&lt;i&gt;(I-I can see her underwear! O-Oh no, I hope she doesn't think I'm creepy...!)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removing_minor" target="sakura" targetStage="2" targetSaidMarker="3DN">
+                <state img="3-shocked.png" weight="0">W-Waitwaitwait, what's happening to your skin, ~sakura~?!</state>
+            </case>
             <case tag="female_removing_minor" targetStage="1-8" targetStatus="not_decent">
                 <state img="3-nervous.png">O-Oh... y-you, um... c-couldn't have taken that off earlier... s-somehow?</state>
                 <state img="3-nervous.png">T-That's... um... a bit weird, isn't it...?</state>
@@ -2750,6 +2987,15 @@
             <case tag="female_removed_minor" target="kizuna" targetStage="5">
                 <state img="3-embarassed.png">I-I see... well, not really, but... uhm... okay.</state>
             </case>
+            <case tag="female_removed_minor" target="saki" targetStage="3">
+                <state img="3-disappointed.png" weight="0">I-It really is cold, isn't it...?</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2" targetSaidMarker="2UP">
+                <state img="3-shy.png" weight="0">&lt;i&gt;(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3" targetSaidMarker="3DN">
+                <state img="3-nervous.png" weight="0">&lt;i&gt;(This doesn't seem right...)&lt;/i&gt;</state>
+            </case>
             <case tag="female_removed_minor" targetStage="1-8" targetStatus="not_decent">
                 <state img="3-nervous.png">I-It was just a bit s-strange to me... S-Sorry...</state>
                 <state img="3-nervous.png">I-I'm sorry... it just seemed a bit strange to me...</state>
@@ -2856,6 +3102,9 @@
                 <state img="3-sad.png">I-- Uhm... sorry...</state>
                 <state img="3-sad.png">E-Eep... sorry...</state>
             </case>
+            <case tag="opponent_lost" target="hk416" targetStage="0">
+                <state img="3-embarassed.png" weight="0">F-Four... Sixteen, was it? Y-You're taking this so seriously and calmly! I-it's kind of amazing, but... why?</state>
+            </case>
             <case tag="opponent_lost" target="shimakaze" targetStage="0">
                 <state img="3-shocked.png">E-Eh? W-Wait, Shimakaze-- that's not how you play this!</state>
             </case>
@@ -2900,6 +3149,15 @@
             <case tag="opponent_stripping" target="hanako" targetStage="2">
                 <state img="3-shy.png">I-I wish I could... um... be as c-confident about this game...</state>
             </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="0">
+                <state img="3-thinking-3.png" weight="0">Wow... that's a lot of trust to put into one person, isn't it? ...What is your... uhm, commander like?</state>
+            </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="1">
+                <state img="3-embarassed.png" weight="0">&lt;i&gt;(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)&lt;/i&gt;</state>
+            </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="3">
+                <state img="3-embarassed.png" weight="0">That jacket looks pretty heavy... is it going to be difficult to remove?</state>
+            </case>
             <case tag="opponent_stripping" target="kamina" targetStage="0">
                 <state img="3-shy.png">U-Uhm... Kamina, there's something I want-- no, something I &lt;i&gt;need&lt;/i&gt; to ask you...</state>
             </case>
@@ -3103,6 +3361,21 @@
             <case tag="opponent_stripped" target="chiaki" targetStage="8">
                 <state img="3-embarassed.png">U-Uhm... s-sorry...</state>
             </case>
+            <case tag="opponent_stripped" target="hk416" notSaidMarker="target_416_german" targetSaying="Scheiße">
+                <state img="3-thinking-3.png" marker="target_416_german=1" weight="0">Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" notSaidMarker="target_416_german" targetSaying="Verdammt">
+                <state img="3-thinking-3.png" marker="target_416_german=1" weight="0">Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="1">
+                <state img="3-shy.png" weight="0">&lt;i&gt;(I-I still don't really get it, but...)&lt;/i&gt; S-She seems like a really interesting person, 416...</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="2">
+                <state img="3-thinking-3.png" weight="0">&lt;i&gt;(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)&lt;/i&gt;</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="4">
+                <state img="3-embarassed.png" weight="0">O-Oh. I-- uhm, thought you were wearing an undershirt beneath that...</state>
+            </case>
             <case tag="opponent_stripped" target="kamina" targetStage="1">
                 <state img="3-angry.png" marker="kamina_meaning_of_manly=1">What does it mean to be &lt;i&gt;manly?&lt;/i&gt;</state>
                 <state img="3-angry.png" marker="kamina_meaning_of_manly=1">I &lt;i&gt;need&lt;/i&gt; to know... what it means to be &lt;i&gt;manly.&lt;/i&gt;</state>
@@ -3241,6 +3514,18 @@
             <case tag="hand" alsoPlaying="mahiru" alsoPlayingStage="1-7" notSaidMarker="computational_photography">
                 <state img="4-thinking-3.png" marker="computational_photography">Photography... I'm working on a computational photography project right now, actually. It's supposed to help with low-light photos-- exposure time adjustment, frame averaging, stuff like that...</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="0-1" totalRounds="0-3" alsoPlayingNotSaidMarker="saga_franchouchou" alsoPlayingSayingMarker="saga_franchouchou">
+                <state img="4-thinking-3.png" weight="0">Eh? Fran...chouchou? I think I remember seeing that name online somewhere... maybe?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="0-2" notSaidMarker="target_sakura_comment">
+                <state img="4-shocked.png" marker="target_sakura_comment=1" weight="0">O-Oh! You're an idol, right? Are you sure you can play something like this...? I've heard that an idol's life can be really harsh, sometimes...</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0" alsoPlayingSaying="you can call me Sakura">
+                <state img="4-happy.png" weight="0">Oh... okay then, Sakura! I-In that case, I guess you could call me Chihiro... though you were probably doing that already...</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="3" alsoPlayingNotSaidMarker="furanshuu" alsoPlayingSayingMarker="furanshuu">
+                <state img="4-nervous-2.png" weight="0">O-Oh. That's, uhm... interesting, Sakura... &lt;i&gt;(N-Now that I think about it... is that what I've been smelling?)&lt;/i&gt;</state>
+            </case>
             <case tag="hand" alsoPlaying="uravity" alsoPlayingStage="2-7" notSaidMarker="ochako_ua">
                 <state img="4-thinking-1.png" marker="ochako_ua=1">O-Ochako, you, uhm, went to an academy called 'UA', right? What was it like? ...Is it like Hope's Peak?</state>
                 <state img="4-thinking-1.png" marker="ochako_ua=1">U-Uhm, so... Ochako, what &lt;i&gt;is&lt;/i&gt; UA Academy, anyways... is it like Hope's Peak?</state>
@@ -3305,6 +3590,12 @@
             <case tag="female_must_strip" target="mahiru" targetStage="1">
                 <state img="4-shocked.png">&lt;i&gt;(If I remember correctly... isn't Mahiru really harsh with guys? ...Uh-oh.)&lt;/i&gt;</state>
             </case>
+            <case tag="female_must_strip" target="saki" targetStage="1">
+                <state img="4-embarassed.png" weight="0">E-Er... Saki, you seem pretty nervous.... are you okay?</state>
+            </case>
+            <case tag="female_must_strip" target="sakura" targetStage="2" targetSayingMarker="3DN">
+                <state img="4-shocked.png" weight="0">W-Wait, a costume change...? I-Is that allowed, here?</state>
+            </case>
             <case tag="male_removing_accessory">
                 <state img="4-shy.png">O-Oh, that's all... lucky you?</state>
                 <state img="4-shy.png">O-Oh, you have that... good for you...?</state>
@@ -3333,6 +3624,9 @@
                 <state img="4-shy.png">O-Oh, you still have that...</state>
                 <state img="4-shy.png">O-Oh... O-okay then...</state>
             </case>
+            <case tag="female_removing_accessory" target="saki" targetStage="1">
+                <state img="4-disappointed.png" weight="0">&lt;i&gt;(S-She's been pretty quiet, hasn't she...?)&lt;/i&gt; U-Uhm, I'm not making you uncomfortable, am I?</state>
+            </case>
             <case tag="female_removing_accessory" targetStage="1-8" targetStatus="not_decent">
                 <state img="4-nervous.png">W-Wait, ~name~... y-you're removing that now?</state>
                 <state img="4-nervous.png">W-Wait, ~name~... why didn't you take that off before...?</state>
@@ -3344,6 +3638,9 @@
                 <state img="4-shy.png">I-I guess that's a good thing... I think.</state>
                 <state img="4-shy.png">S-So, um, that's a good thing... for her, I mean...</state>
             </case>
+            <case tag="female_removed_accessory" target="saki" targetStage="2">
+                <state img="4-disappointed.png" weight="0">I-I... uhm... I thought they looked cute, Saki... r-really!</state>
+            </case>
             <case tag="female_removed_accessory" targetStage="1-8" targetStatus="not_decent">
                 <state img="4-nervous.png">I-I don't really get it... B-but okay...</state>
                 <state img="4-nervous.png">I-I really don't g-get it, but... okay...?</state>
@@ -3408,6 +3705,12 @@
             <case tag="female_removing_minor" target="kizuna" targetStage="4">
                 <state img="4-nervous.png">Kizuna's... doing something weird again, isn't she...?</state>
             </case>
+            <case tag="female_removing_minor" target="saki" targetStage="2">
+                <state img="4-nervous-2.png" weight="0">&lt;i&gt;(I-I can see her underwear! O-Oh no, I hope she doesn't think I'm creepy...!)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removing_minor" target="sakura" targetStage="2" targetSaidMarker="3DN">
+                <state img="4-shocked.png" weight="0">W-Waitwaitwait, what's happening to your skin, ~sakura~?!</state>
+            </case>
             <case tag="female_removing_minor" targetStage="1-8" targetStatus="not_decent">
                 <state img="4-nervous.png">O-Oh... y-you, um... c-couldn't have taken that off earlier... s-somehow?</state>
                 <state img="4-nervous.png">T-That's... um... a bit weird, isn't it...?</state>
@@ -3422,6 +3725,15 @@
             <case tag="female_removed_minor" target="kizuna" targetStage="5">
                 <state img="4-embarassed.png">I-I see... well, not really, but... uhm... okay.</state>
             </case>
+            <case tag="female_removed_minor" target="saki" targetStage="3">
+                <state img="4-disappointed.png" weight="0">I-It really is cold, isn't it...?</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2" targetSaidMarker="2UP">
+                <state img="4-shy.png" weight="0">&lt;i&gt;(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3" targetSaidMarker="3DN">
+                <state img="4-nervous.png" weight="0">&lt;i&gt;(This doesn't seem right...)&lt;/i&gt;</state>
+            </case>
             <case tag="female_removed_minor" targetStage="1-8" targetStatus="not_decent">
                 <state img="4-nervous.png">I-It was just a bit s-strange to me... S-Sorry...</state>
                 <state img="4-nervous.png">I-I'm sorry... it just seemed a bit strange to me...</state>
@@ -3528,6 +3840,9 @@
                 <state img="4-sad.png">I-- Uhm... sorry...</state>
                 <state img="4-sad.png">E-Eep... sorry...</state>
             </case>
+            <case tag="opponent_lost" target="hk416" targetStage="0">
+                <state img="4-embarassed.png" weight="0">F-Four... Sixteen, was it? Y-You're taking this so seriously and calmly! I-it's kind of amazing, but... why?</state>
+            </case>
             <case tag="opponent_lost" target="shimakaze" targetStage="0">
                 <state img="4-shocked.png">E-Eh? W-Wait, Shimakaze-- that's not how you play this!</state>
             </case>
@@ -3572,6 +3887,15 @@
             <case tag="opponent_stripping" target="hanako" targetStage="2">
                 <state img="4-shy.png">I-I wish I could... um... be as c-confident about this game...</state>
             </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="0">
+                <state img="4-thinking-3.png" weight="0">Wow... that's a lot of trust to put into one person, isn't it? ...What is your... uhm, commander like?</state>
+            </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="1">
+                <state img="4-embarassed.png" weight="0">&lt;i&gt;(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)&lt;/i&gt;</state>
+            </case>
+            <case tag="opponent_stripping" target="hk416" targetStage="3">
+                <state img="4-embarassed.png" weight="0">That jacket looks pretty heavy... is it going to be difficult to remove?</state>
+            </case>
             <case tag="opponent_stripping" target="kamina" targetStage="0">
                 <state img="4-shy.png">U-Uhm... Kamina, there's something I want-- no, something I &lt;i&gt;need&lt;/i&gt; to ask you...</state>
             </case>
@@ -3775,6 +4099,21 @@
             <case tag="opponent_stripped" target="chiaki" targetStage="8">
                 <state img="4-embarassed.png">U-Uhm... s-sorry...</state>
             </case>
+            <case tag="opponent_stripped" target="hk416" notSaidMarker="target_416_german" targetSaying="Scheiße">
+                <state img="4-thinking-3.png" marker="target_416_german=1" weight="0">Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" notSaidMarker="target_416_german" targetSaying="Verdammt">
+                <state img="4-thinking-3.png" marker="target_416_german=1" weight="0">Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="1">
+                <state img="4-shy.png" weight="0">&lt;i&gt;(I-I still don't really get it, but...)&lt;/i&gt; S-She seems like a really interesting person, 416...</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="2">
+                <state img="4-thinking-3.png" weight="0">&lt;i&gt;(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)&lt;/i&gt;</state>
+            </case>
+            <case tag="opponent_stripped" target="hk416" targetStage="4">
+                <state img="4-embarassed.png" weight="0">O-Oh. I-- uhm, thought you were wearing an undershirt beneath that...</state>
+            </case>
             <case tag="opponent_stripped" target="kamina" targetStage="1">
                 <state img="4-angry.png" marker="kamina_meaning_of_manly=1">What does it mean to be &lt;i&gt;manly?&lt;/i&gt;</state>
                 <state img="4-angry.png" marker="kamina_meaning_of_manly=1">I &lt;i&gt;need&lt;/i&gt; to know... what it means to be &lt;i&gt;manly.&lt;/i&gt;</state>
diff --git a/opponents/chihiro/chihiro-dialogue-additions-ingame.json b/opponents/chihiro/chihiro-dialogue-additions-ingame.json
new file mode 100644
index 0000000000000000000000000000000000000000..99e5788e0137f7eece165230f016662f0c04a390
--- /dev/null
+++ b/opponents/chihiro/chihiro-dialogue-additions-ingame.json
@@ -0,0 +1 @@
+[{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":0,"case":{"stage":{"min":0,"max":0},"tag":"hand","totalRounds":{"min":0,"max":3},"notSaidMarker":"saga_franchouchou","customPriority":0,"priority":0,"tests":[],"counters":[]},"state":{"text":"I see some of you are a &lt;i&gt;little&lt;/i&gt; new to Franchouchou! We're an idol group from Saga, Japan! And we're gonna save the whole province!","image":"0-happy.png","marker":{"name":"saga_franchouchou","perTarget":false,"value":1}}},"stage":0,"state":{"text":"Eh? Fran...chouchou? I think I remember seeing that name online somewhere... maybe?","image":"0-thinking-3.png"},"suggestedTag":"good_hand"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":0,"case":{"stage":{"min":0,"max":0},"tag":"okay_hand","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"I can certainly see the appeal of a game like this! Buuuuut, definitely not what I'd do professionally.","image":"0-hum.png"}},"stage":0,"state":{"text":"O-Oh! You're an idol, right? Are you sure you can play something like this...? I've heard being an idol can be really harsh, sometimes...","image":"0-shocked.png"},"suggestedTag":"okay_hand"},{"type":"new","intent":"response","phaseTarget":{"id":"sakura","stage":0,"case":{"stage":{"min":0,"max":0},"tag":"must_strip_normal","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"I... can we maybe end this? I don't want to give anyone the wrong idea about Franchouchou...","image":"0-must_strip+.png","marker":{"name":"1UP","perTarget":false,"value":1}}},"responseTarget":{"id":"sakura","stage":0,"case":{"stage":{"min":0,"max":0},"tag":"must_strip_normal","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"I... can we maybe end this? I don't want to give anyone the wrong idea about Franchouchou...","image":"0-must_strip+.png","marker":{"name":"1UP","perTarget":false,"value":1}}},"stage":0,"state":{"text":"U-Uh... I mean... if you're uncomfortable with this, we can stop... right?","image":"0-embarassed.png"},"suggestedTag":"female_must_strip"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"hand","timeInStage":{"min":0,"max":0},"customPriority":25,"priority":25,"tests":[],"counters":[]},"state":{"text":"Um… you can call me Sakura, since we're all getting to know each other as friends! (&lt;i&gt;It's important to make your fans feel loved, and be approachable!&lt;/i&gt;)","image":"1-smile.png"}},"stage":0,"state":{"text":"Oh... okay then, Sakura! I-In that case, I guess you could call me Chihiro...?","image":"0-happy.png"},"suggestedTag":"bad_hand"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"opponent_lost","target":"chihiro","targetStage":{"min":0,"max":0},"customPriority":null,"priority":380,"tests":[],"counters":[]},"state":{"text":"For some reason, you seem very familiar... Chihiro.","image":"1-huh.png"}},"stage":0,"state":{"text":"E-Eh? Familiar? H-How...?","image":"0-nervous.png"},"suggestedTag":"must_strip_losing"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"opponent_stripping","target":"chihiro","targetStage":{"min":0,"max":0},"customPriority":null,"priority":380,"tests":[],"counters":[]},"state":{"text":"I'd be terribly embarassed if I forgot a fan's name. Are you new to Franchouchou?","image":"1-smile.png"}},"stage":0,"state":{"text":"U-Uhm... yeah, I guess... I-I don't really listen to a lot of idol music, so... uh...","image":"0-strip.png"},"suggestedTag":"stripping"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"opponent_stripped","target":"chihiro","targetStage":{"min":1,"max":1},"customPriority":null,"priority":380,"tests":[],"counters":[]},"state":{"text":"So... you're a new fan then! (&lt;i&gt;I can't shake the feeling she's very familiar, but... I don't know why! Think, Sakura!&lt;/i&gt;)","image":"1-hum.png"}},"stage":1,"state":{"text":"Y-Yeah... I suppose...?","image":"1-shy.png"},"suggestedTag":"stripped"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"opponent_stripped","target":"chihiro","targetStage":{"min":1,"max":1},"customPriority":null,"priority":380,"tests":[],"counters":[]},"state":{"text":"So... you're a new fan then! (&lt;i&gt;I can't shake the feeling she's very familiar, but... I don't know why! Think, Sakura!&lt;/i&gt;)","image":"1-hum.png"}},"stage":1,"state":{"text":"Y-Yeah... I suppose I am...?","image":"1-shy.png"},"suggestedTag":"stripped"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"okay_hand","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"Good evening, everyone! Looks like Franchouchou #1 is here to &lt;i&gt;play!&lt;/i&gt;","image":"1-zettai.png"}},"stage":1,"state":{"text":"<i>~sakura~ seems really excited... I wonder why? Does she have a good hand?</i>","image":"1-thinking-3.png"},"suggestedTag":"okay_hand"},{"type":"new","intent":"response","phaseTarget":{"id":"saki","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"must_strip_normal","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(Oh god... they're all looking at me...)","image":"1-embarrassed.png"}},"responseTarget":{"id":"saki","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"must_strip_normal","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(Oh god... they're all looking at me...)","image":"1-embarrassed.png"}},"stage":1,"state":{"text":"E-Er... Saki, you seem pretty nervous... are you okay?","image":"1-embarassed.png"},"suggestedTag":"female_must_strip"},{"type":"new","intent":"response","phaseTarget":{"id":"saki","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(They can't see my panties, right?)","image":"1-strip.png"}},"responseTarget":{"id":"saki","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(They can't see my panties, right?)","image":"1-strip.png"}},"stage":1,"state":{"text":"<i>(S-She's been pretty quiet, hasn't she...?)</i> U-Uhm, I'm not making you uncomfortable, am I?","image":"1-disappointed.png"},"suggestedTag":"female_removing_accessory"},{"type":"new","intent":"response","phaseTarget":{"id":"saki","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"It's not like they were fashionable anyways...","image":"2-shiver.png"}},"responseTarget":{"id":"saki","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"It's not like they were fashionable anyways...","image":"2-shiver.png"}},"stage":1,"state":{"text":"I-I... uhm... I thought they looked cute, Saki... r-really!","image":"1-disappointed.png"},"suggestedTag":"female_removed_accessory"},{"type":"new","intent":"response","phaseTarget":{"id":"sakura","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripped","saidMarker":"2UP","customPriority":null,"priority":1,"tests":[],"counters":[]},"state":{"text":"Hm? Blotches? I have &lt;i&gt;no&lt;/i&gt; idea whatever you're talking about.","image":"2-stripped+.png"}},"responseTarget":{"id":"sakura","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripped","saidMarker":"2UP","customPriority":null,"priority":1,"tests":[],"counters":[]},"state":{"text":"Hm? Blotches? I have &lt;i&gt;no&lt;/i&gt; idea whatever you're talking about.","image":"2-stripped+.png"}},"stage":1,"state":{"text":"<i>(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)</i>","image":"1-shy.png"},"suggestedTag":"female_removed_minor"},{"type":"new","intent":"response","phaseTarget":{"id":"sakura","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"must_strip_losing","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"No no no, hold on! Um! I have... a costume change!","image":"2-must_strip-.png","marker":{"name":"3DN","perTarget":false,"value":1}}},"responseTarget":{"id":"sakura","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"must_strip_losing","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"No no no, hold on! Um! I have... a costume change!","image":"2-must_strip-.png","marker":{"name":"3DN","perTarget":false,"value":1}}},"stage":1,"state":{"text":"W-Wait, a costume change...? I-Is that allowed, here?","image":"1-shocked.png"},"suggestedTag":"female_must_strip"},{"type":"new","intent":"generic","phaseTarget":null,"responseTarget":null,"stage":1,"state":{"text":"W-Waitwaitwait, what's happening to your skin, ~sakura~?!","image":"1-shocked.png"},"suggestedTag":"female_removing_minor"},{"type":"new","intent":"response","phaseTarget":{"id":"sakura","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripped","saidMarker":"3DN","customPriority":null,"priority":1,"tests":[],"counters":[]},"state":{"text":"Would you believe me if I told you our manager thought it would be cool if we looked like zombies...?","image":"3-stripped-.png"}},"responseTarget":{"id":"sakura","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripped","saidMarker":"3DN","customPriority":null,"priority":1,"tests":[],"counters":[]},"state":{"text":"Would you believe me if I told you our manager thought it would be cool if we looked like zombies...?","image":"3-stripped-.png"}},"stage":1,"state":{"text":"<i>(This doesn't seem right...)</i>","image":"1-nervous.png"},"suggestedTag":"female_removed_minor"},{"type":"new","intent":"response","phaseTarget":{"id":"saki","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(Oh god, they can totally see my panties, can't they?)","image":"2-strip.png"}},"responseTarget":{"id":"saki","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(Oh god, they can totally see my panties, can't they?)","image":"2-strip.png"}},"stage":1,"state":{"text":"<i>(I-I can see her underwear! But where do I look away-- I can't make it obvious to her that I can see!)</i>","image":"1-nervous.png"},"suggestedTag":"female_removing_minor"},{"type":"new","intent":"response","phaseTarget":{"id":"saki","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"O-oh... It's a little colder than I expected.","image":"3-flinching.png"}},"responseTarget":{"id":"saki","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"O-oh... It's a little colder than I expected.","image":"3-flinching.png"}},"stage":1,"state":{"text":"I-It is, isn't it...","image":"1-nervous.png"},"suggestedTag":"female_removed_minor"},{"type":"new","intent":"response","phaseTarget":{"id":"hk416","stage":0,"case":{"stage":{"min":0,"max":0},"tag":"must_strip_winning","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"I still retain the tactical advantage in this scenario.","image":"0-hmph.png"}},"responseTarget":{"id":"hk416","stage":0,"case":{"stage":{"min":0,"max":0},"tag":"must_strip_winning","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"I still retain the tactical advantage in this scenario.","image":"0-hmph.png"}},"stage":1,"state":{"text":"F-Four... Sixteen, was it? Y-You're taking this so seriously and calmly! I-it's kind of amazing, but... why?","image":"1-embarassed.png"},"suggestedTag":"female_must_strip"},{"type":"new","intent":"response","phaseTarget":{"id":"hk416","stage":0,"case":{"stage":{"min":0,"max":0},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"I'm willing to part with my beret first.","image":"0-strip.png"}},"responseTarget":{"id":"hk416","stage":0,"case":{"stage":{"min":0,"max":0},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"I'm willing to part with my beret first.","image":"0-strip.png"}},"stage":1,"state":{"text":"Wow... that's a lot of trust to put into one person, isn't it? ...What is your... uhm, commander like?","image":"1-thinking-3.png"},"suggestedTag":"female_removing_accessory"},{"type":"new","intent":"response","phaseTarget":{"id":"hk416","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"UMP45 was... perhaps the last person I expected to serve under. Nonetheless, she's proven herself to be extremely reliable in command and in combat.","image":"1-hmph.png"}},"responseTarget":{"id":"hk416","stage":1,"case":{"stage":{"min":1,"max":1},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"UMP45 was... perhaps the last person I expected to serve under. Nonetheless, she's proven herself to be extremely reliable in command and in combat.","image":"1-hmph.png"}},"stage":1,"state":{"text":"<i>(I-I still don't really get it, but...)</i> S-She seems like a really interesting person, 416...","image":"1-shy.png"},"suggestedTag":"female_removed_accessory"},{"type":"new","intent":"response","phaseTarget":null,"responseTarget":{"id":"sakura","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"hand","notSaidMarker":"furanshuu","customPriority":0,"priority":0,"tests":[],"counters":[]},"state":{"text":"Here's a secret: Franchouchou sounds really cute, but it's about zombies! 'Furanshuu' is the smell of decay. Um. I don't smell, right?","image":"3-hum.png","marker":{"name":"furanshuu","perTarget":false,"value":1}}},"stage":1,"state":{"text":"<i>(N-Now that I think about it... perhaps... but...)</i> U-Uhm, no! I-I, uh, totally can't smell anything strange, ~sakura~!","image":"1-nervous-2.png"},"suggestedTag":"bad_hand"},{"type":"new","intent":"response","phaseTarget":{"id":"hk416","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"must_strip_normal","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"This loss is trivial. For now.","image":"2-guarded.png"}},"responseTarget":{"id":"hk416","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"must_strip_normal","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"This loss is trivial. For now.","image":"2-guarded.png"}},"stage":1,"state":{"text":"<i>(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)</i>","image":"1-embarassed.png"},"suggestedTag":"female_removing_accessory"},{"type":"new","intent":"response","phaseTarget":{"id":"hk416","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"...The gloves, then.","image":"2-strip.png"}},"responseTarget":{"id":"hk416","stage":2,"case":{"stage":{"min":2,"max":2},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"...The gloves, then.","image":"2-strip.png"}},"stage":1,"state":{"text":"<i>(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)</i>","image":"1-thinking-3.png"},"suggestedTag":"female_removing_accessory"},{"type":"new","intent":"response","phaseTarget":{"id":"hk416","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"&lt;i&gt;Scheiße...&lt;/i&gt;","image":"3-guarded.png"}},"responseTarget":{"id":"hk416","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"&lt;i&gt;Scheiße...&lt;/i&gt;","image":"3-guarded.png"}},"stage":1,"state":{"text":"Oh... you know German, 416? I-I'm not familiar with the language at all, but... I, uhm, can recognize that much.","image":"1-shy.png"},"suggestedTag":"female_removed_accessory"},{"type":"new","intent":"response","phaseTarget":{"id":"hk416","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"must_strip_losing","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"This &lt;i&gt;really&lt;/i&gt; is not good.","image":"3-guarded.png"}},"responseTarget":{"id":"hk416","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"must_strip_losing","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"This &lt;i&gt;really&lt;/i&gt; is not good.","image":"3-guarded.png"}},"stage":1,"state":{"text":"That jacket looks pretty heavy... is it going to be difficult to remove?","image":"1-embarassed.png"},"suggestedTag":"female_must_strip"},{"type":"new","intent":"response","phaseTarget":{"id":"hk416","stage":4,"case":{"stage":{"min":4,"max":4},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"...","image":"4-blushing.png"}},"responseTarget":{"id":"hk416","stage":4,"case":{"stage":{"min":4,"max":4},"tag":"stripped","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"...","image":"4-blushing.png"}},"stage":1,"state":{"text":"O-Oh. I-- uhm, thought you were wearing an undershirt beneath that...","image":"1-embarassed.png"},"suggestedTag":"female_removed_major"},{"type":"new","intent":"response","phaseTarget":{"id":"saki","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(This isn't exactly how I imagined spending my last year of high school...)","image":"3-strip.png"}},"responseTarget":{"id":"saki","stage":3,"case":{"stage":{"min":3,"max":3},"tag":"stripping","customPriority":null,"priority":0,"tests":[],"counters":[]},"state":{"text":"(This isn't exactly how I imagined spending my last year of high school...)","image":"3-strip.png"}},"stage":1,"state":{"text":"I-If this is moving too fast for you, Saki, w-we can slow down a bit... r-right?","image":"1-nervous.png"},"suggestedTag":"female_removing_major"}]
\ No newline at end of file
diff --git a/opponents/chihiro/collectibles.xml b/opponents/chihiro/collectibles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..773bd31f3b3afba71b9b3d8f062ca5712d5ead81
--- /dev/null
+++ b/opponents/chihiro/collectibles.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<collectibles />
diff --git a/opponents/chihiro/display_edit_log.py b/opponents/chihiro/display_edit_log.py
new file mode 100644
index 0000000000000000000000000000000000000000..d9b7d54a56a469d89c302c01541ccb4e3412a5e5
--- /dev/null
+++ b/opponents/chihiro/display_edit_log.py
@@ -0,0 +1,91 @@
+import json
+import sys
+
+
+def display_case_conditions(case_obj):
+    for k, v in case_obj.items():
+        if k == "counters":
+            for counter in v:
+                print(
+                    "        Counter: "
+                    + ", ".join("{}={}".format(k, v) for k, v in counter.items())
+                )
+        elif k == "tests":
+            for test in v:
+                print(
+                    "        Test: {} {} {}".format(
+                        test["expr"], test["cmp"], test["value"]
+                    )
+                )
+        else:
+            print("        {}: {}".format(k, v))
+
+
+def display_state(state):
+    ret = '{} | "{}"'.format(state["image"], state["text"])
+
+    if "marker" in state:
+        ret += " | Marker: {}={}".format(
+            state["marker"]["name"], state["marker"]["value"]
+        )
+
+        if state["marker"]["perTarget"]:
+            ret += "(Per-Target)"
+
+    return ret
+
+
+def display_target_info(target):
+    print("    ID: " + target["id"])
+    print("    Stage: " + str(target["stage"]))
+    print("    Current Case:")
+    display_case_conditions(target["case"])
+    print("    Current State: " + display_state(target["state"]))
+
+
+def display_new_dialogue_info(entry):
+    print("Intent: " + entry["intent"])
+    print("New Dialogue: " + display_state(entry["state"]))
+    print("Speaker Stage: " + str(entry["stage"]))
+    print("Suggested Generic Tag: " + str(entry["suggestedTag"]))
+
+    hasResponseTarget = False
+    if "responseTarget" in entry and entry["responseTarget"] is not None:
+        hasResponseTarget = True
+        print("Response Target Info:")
+        display_target_info(entry["responseTarget"])
+
+    if "phaseTarget" in entry and entry["phaseTarget"] is not None:
+        if (
+            hasResponseTarget
+            and entry["phaseTarget"]["id"] == entry["responseTarget"]["id"]
+        ):
+            return
+
+        print("Phase Target Info:")
+        display_target_info(entry["phaseTarget"])
+
+
+def display_edited_dialogue_info(entry):
+    print("Speaker Stage: " + str(entry["stage"]))
+    print("Edited Case:")
+    display_case_conditions(entry["case"])
+    print("Old Dialogue: " + display_state(entry["oldState"]))
+    print("New Dialogue: " + display_state(entry["state"]))
+
+
+def main():
+    with open(sys.argv[1], "r") as f:
+        log = json.load(f)
+
+    for idx, entry in enumerate(log):
+        if entry["type"] == "new":
+            print("\n== Entry {:02d}: New Dialogue ==".format(idx))
+            display_new_dialogue_info(entry)
+        elif entry["type"] == "edit":
+            print("\n== Entry {:02d}: Edited Dialogue ==".format(idx))
+            display_new_dialogue_info(entry)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/opponents/chihiro/markers.xml b/opponents/chihiro/markers.xml
index 1256f29ba9bd23dd220c7322a5287b0e3ccf251c..3b8057f5cb2708b695e2d232cb808e5a076cac03 100644
--- a/opponents/chihiro/markers.xml
+++ b/opponents/chihiro/markers.xml
@@ -52,5 +52,7 @@
     <marker scope="Public" name="lucina_mask" />
     <marker scope="Public" name="lucina_voice" />
     <marker scope="Public" name="ochako_ua" />
+    <marker scope="Public" name="target_416_german" />
+    <marker scope="Public" name="target_sakura_comment" />
     <marker scope="Public" name="upskirt" />
 </markers>
diff --git a/opponents/chihiro/meta.xml b/opponents/chihiro/meta.xml
index 7bb83dc8be4e4c1952ce51a168c770aec7035f5d..0bbb638531a74676cc4f788c0d37aac7ed119fe7 100644
--- a/opponents/chihiro/meta.xml
+++ b/opponents/chihiro/meta.xml
@@ -48,4 +48,7 @@
         <tag from="0" to="5">crossdresser</tag>
         <tag from="5" to="5">virtual</tag>
     </tags>
+    <has_collectibles>false</has_collectibles>
+    <lines>816</lines>
+    <poses>126</poses>
 </opponent>
diff --git a/opponents/hk416/behaviour.xml b/opponents/hk416/behaviour.xml
index c34cc028e9bee1fe9dfbd3c14dd1506cb673f1db..97e865cfa3b0f147469aa8ce56fe630bb9dc0a5f 100644
--- a/opponents/hk416/behaviour.xml
+++ b/opponents/hk416/behaviour.xml
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='UTF-8'?>
 
-<!--This file was machine generated using the Character Editor v4.0.1b at 6:59:14 PM on April 15, 2019. Please do not edit it directly without preserving your improvements elsewhere or your changes may be lost the next time this file is generated.-->
+<!--This file was machine generated using the Character Editor v4.2 at 5:33:23 PM on May 17, 2019. Please do not edit it directly without preserving your improvements elsewhere or your changes may be lost the next time this file is generated.-->
 <opponent>
-    <version>v4.0.1b</version>
+    <version>v4.2</version>
     <first>HK416</first>
     <last />
     <label>HK416</label>
@@ -102,6 +102,12 @@
                 <state img="0-idle.png">Fujisaki must be truly talented, then, if she can construct an AI that can run on such a constrained platform.</state>
                 <state img="0-idle.png">A true AI, running on such a constrained platform... your creator must be truly talented, Alter Ego. I know a few firms that could use her skills.</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0">
+                <state img="0-question.png" weight="0">Hm. So, is 'Sakura' your &lt;i&gt;real&lt;/i&gt; name, then?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="2" alsoPlayingTimeInStage="0">
+                <state img="0-guarded.png" weight="0">These sensor readings don't seem to align properly with ~sakura~... she seems more like an ELID infectee than a regular human...</state>
+            </case>
             <case tag="hand" alsoPlaying="shimakaze" saidMarker="shimakaze_rtb==1">
                 <state img="0-guarded.png" marker="shimakaze_relatable=1">I'm only offering this because of our similar backgrounds, okay? It's... nice to know someone &lt;i&gt;relatable&lt;/i&gt;, here.</state>
             </case>
@@ -113,6 +119,9 @@
                 <state img="0-hmph.png">Hmph... this should be trivial to complete. In any case, I am HK416. Please... remember this &lt;i&gt;extraordinary&lt;/i&gt; name.</state>
                 <state img="0-hmph.png">Hmph...this simulation appears to be trivial in any case. Regardless... I am HK416. Please, remember this &lt;i&gt;extraordinary&lt;/i&gt; name.</state>
             </case>
+            <case tag="must_strip" alsoPlaying="chihiro" alsoPlayingStage="0-4">
+                <state img="0-hmph.png" weight="0">Admittedly, in another time, I absolutely would've refused to participate in this &lt;i&gt;asinine&lt;/i&gt; exercise...</state>
+            </case>
             <case tag="must_strip" alsoPlaying="jura" alsoPlayingStage="0-4" alsoPlayingSaying="you must find the alien woman pretty scary">
                 <state img="0-disappointed.png" marker="flesh_and_blood=1">According to my sensor analysis, Jura, you are a standard flesh-and-blood human wearing a remarkably unarmored dress. Even without my dummy links, I would have no trouble facing off against you.</state>
             </case>
@@ -198,6 +207,9 @@
                 <state img="0-strip.png">I'm going to surrender my hat. And hopefully, nothing more.</state>
                 <state img="0-strip.png">I can part with my beret, if I have to.</state>
             </case>
+            <case tag="stripping" alsoPlaying="chihiro" alsoPlayingStage="0-4">
+                <state img="0-strip.png">...but, for now, I'll trust that my commanding officer has a good reason for making me do this.</state>
+            </case>
             <case tag="stripping" alsoPlaying="coco">
                 <state img="0-strip.png">I see no issue with my name. HK416 is a perfectly usable designation for both my rifle and myself.</state>
             </case>
@@ -362,6 +374,12 @@
                 <state img="0-idle.png">...well, nevermind that.</state>
                 <state img="0-idle.png">...oh well, I suppose.</state>
             </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2">
+                <state img="0-headtilt.png" weight="0">&lt;i&gt;(That certainly is not normal. I should keep an eye on ~sakura~.)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3">
+                <state img="0-headtilt.png" weight="0">&lt;i&gt;(This isn't adding up entirely... but, either way...)&lt;/i&gt;</state>
+            </case>
             <case tag="male_removing_major">
                 <state img="0-satisfied2.png">A major victory.</state>
                 <state img="0-satisfied2.png">A major success, I see.</state>
@@ -819,6 +837,12 @@
                 <state img="1-idle.png">Fujisaki must be truly talented, then, if she can construct an AI that can run on such a constrained platform.</state>
                 <state img="1-idle.png">A true AI, running on such a constrained platform... your creator must be truly talented, Alter Ego. I know a few firms that could use her skills.</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0">
+                <state img="1-question.png" weight="0">Hm. So, is 'Sakura' your &lt;i&gt;real&lt;/i&gt; name, then?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="2" alsoPlayingTimeInStage="0">
+                <state img="1-guarded.png" weight="0">These sensor readings don't seem to align properly with ~sakura~... she seems more like an ELID infectee than a regular human...</state>
+            </case>
             <case tag="hand" alsoPlaying="sei" saidMarker="va-11_hall-a" notSaidMarker="asked_about_va11_hall_a">
                 <state img="1-question.png" marker="asked_about_va11_hall_a">Sei, I believe you mentioned a bar called "VA11 HALL-A"? What is it like?</state>
             </case>
@@ -875,6 +899,9 @@
                 <state img="1-hmph.png">A minor inconvenience.</state>
                 <state img="1-hmph.png">Merely a minor inconvenience.</state>
             </case>
+            <case tag="stripped" alsoPlaying="chihiro" alsoPlayingStage="0-4">
+                <state img="1-hmph.png">UMP45 was... perhaps the last person I expected to serve under. Nonetheless... I admit, she's proven herself to be extremely reliable in command and in combat.</state>
+            </case>
             <case tag="stripped" alsoPlaying="coco">
                 <state img="1-hmph.png">Yes... I'll admit, I'm rather fond of that beret.</state>
             </case>
@@ -1039,6 +1066,12 @@
                 <state img="1-idle.png">...well, nevermind that.</state>
                 <state img="1-idle.png">...oh well, I suppose.</state>
             </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2">
+                <state img="1-headtilt.png" weight="0">&lt;i&gt;(That certainly is not normal. I should keep an eye on ~sakura~.)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3">
+                <state img="1-headtilt.png" weight="0">&lt;i&gt;(This isn't adding up entirely... but, either way...)&lt;/i&gt;</state>
+            </case>
             <case tag="male_removing_major">
                 <state img="1-satisfied2.png">A major victory.</state>
                 <state img="1-satisfied2.png">A major success, I see.</state>
@@ -1496,6 +1529,12 @@
                 <state img="2-idle.png">Fujisaki must be truly talented, then, if she can construct an AI that can run on such a constrained platform.</state>
                 <state img="2-idle.png">A true AI, running on such a constrained platform... your creator must be truly talented, Alter Ego. I know a few firms that could use her skills.</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0">
+                <state img="2-question.png" weight="0">Hm. So, is 'Sakura' your &lt;i&gt;real&lt;/i&gt; name, then?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="2" alsoPlayingTimeInStage="0">
+                <state img="2-guarded.png" weight="0">These sensor readings don't seem to align properly with ~sakura~... she seems more like an ELID infectee than a regular human...</state>
+            </case>
             <case tag="hand" alsoPlaying="sei" saidMarker="va-11_hall-a" notSaidMarker="asked_about_va11_hall_a">
                 <state img="2-question.png" marker="asked_about_va11_hall_a">Sei, I believe you mentioned a bar called "VA11 HALL-A"? What is it like?</state>
             </case>
@@ -1705,6 +1744,12 @@
                 <state img="2-idle.png">...well, nevermind that.</state>
                 <state img="2-idle.png">...oh well, I suppose.</state>
             </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2">
+                <state img="2-headtilt.png" weight="0">&lt;i&gt;(That certainly is not normal. I should keep an eye on ~sakura~.)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3">
+                <state img="2-headtilt.png" weight="0">&lt;i&gt;(This isn't adding up entirely... but, either way...)&lt;/i&gt;</state>
+            </case>
             <case tag="male_removing_major">
                 <state img="2-satisfied2.png">A major victory.</state>
                 <state img="2-satisfied2.png">A major success, I see.</state>
@@ -2151,6 +2196,12 @@
                 <state img="3-idle.png">Fujisaki must be truly talented, then, if she can construct an AI that can run on such a constrained platform.</state>
                 <state img="3-idle.png">A true AI, running on such a constrained platform... your creator must be truly talented, Alter Ego. I know a few firms that could use her skills.</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0">
+                <state img="3-question.png" weight="0">Hm. So, is 'Sakura' your &lt;i&gt;real&lt;/i&gt; name, then?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="2" alsoPlayingTimeInStage="0">
+                <state img="3-guarded.png" weight="0">These sensor readings don't seem to align properly with ~sakura~... she seems more like an ELID infectee than a regular human...</state>
+            </case>
             <case tag="hand" alsoPlaying="sei" saidMarker="va-11_hall-a" notSaidMarker="asked_about_va11_hall_a">
                 <state img="3-question.png" marker="asked_about_va11_hall_a">Sei, I believe you mentioned a bar called "VA11 HALL-A"? What is it like?</state>
             </case>
@@ -2360,6 +2411,12 @@
                 <state img="3-idle.png">...well, nevermind that.</state>
                 <state img="3-idle.png">...oh well, I suppose.</state>
             </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2">
+                <state img="3-headtilt.png" weight="0">&lt;i&gt;(That certainly is not normal. I should keep an eye on ~sakura~.)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3">
+                <state img="3-headtilt.png" weight="0">&lt;i&gt;(This isn't adding up entirely... but, either way...)&lt;/i&gt;</state>
+            </case>
             <case tag="male_removing_major">
                 <state img="3-satisfied2.png">A major victory.</state>
                 <state img="3-satisfied2.png">A major success, I see.</state>
@@ -2806,6 +2863,12 @@
                 <state img="4-idle.png">Fujisaki must be truly talented, then, if she can construct an AI that can run on such a constrained platform.</state>
                 <state img="4-idle.png">A true AI, running on such a constrained platform... your creator must be truly talented, Alter Ego. I know a few firms that could use her skills.</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0">
+                <state img="4-question.png" weight="0">Hm. So, is 'Sakura' your &lt;i&gt;real&lt;/i&gt; name, then?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="2" alsoPlayingTimeInStage="0">
+                <state img="4-guarded.png" weight="0">These sensor readings don't seem to align properly with ~sakura~... she seems more like an ELID infectee than a regular human...</state>
+            </case>
             <case tag="hand" alsoPlaying="sei" saidMarker="va-11_hall-a" notSaidMarker="asked_about_va11_hall_a">
                 <state img="4-question.png" marker="asked_about_va11_hall_a">Sei, I believe you mentioned a bar called "VA11 HALL-A"? What is it like?</state>
             </case>
@@ -2992,6 +3055,12 @@
                 <state img="4-question.png">That's not really relevant right now, though.</state>
                 <state img="4-question.png">That's not important at the moment, though.</state>
             </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2">
+                <state img="4-headtilt.png" weight="0">&lt;i&gt;(That certainly is not normal. I should keep an eye on ~sakura~.)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3">
+                <state img="4-headtilt.png" weight="0">&lt;i&gt;(This isn't adding up entirely... but, either way...)&lt;/i&gt;</state>
+            </case>
             <case tag="male_removing_major">
                 <state img="4-satisfied2.png">Heh. An eye for an eye... clothing for clothing.</state>
                 <state img="4-satisfied2.png">Mutually assured destruction.</state>
@@ -3427,6 +3496,12 @@
                 <state img="5-idle.png">Fujisaki must be truly talented, then, if she can construct an AI that can run on such a constrained platform.</state>
                 <state img="5-idle.png">A true AI, running on such a constrained platform... your creator must be truly talented, Alter Ego. I know a few firms that could use her skills.</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0">
+                <state img="5-question.png" weight="0">Hm. So, is 'Sakura' your &lt;i&gt;real&lt;/i&gt; name, then?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="2" alsoPlayingTimeInStage="0">
+                <state img="5-guarded.png" weight="0">These sensor readings don't seem to align properly with ~sakura~... she seems more like an ELID infectee than a regular human...</state>
+            </case>
             <case tag="hand" alsoPlaying="shimakaze" saidMarker="shimakaze_rtb==1">
                 <state img="5-guarded.png" marker="shimakaze_relatable=1">I'm only offering this because of our similar backgrounds, okay? It's... nice to know someone &lt;i&gt;relatable&lt;/i&gt;, here.</state>
             </case>
@@ -3602,6 +3677,12 @@
                 <state img="5-question.png">That's not really relevant right now, though.</state>
                 <state img="5-question.png">That's not important at the moment, though.</state>
             </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2">
+                <state img="5-headtilt.png" weight="0">&lt;i&gt;(That certainly is not normal. I should keep an eye on ~sakura~.)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3">
+                <state img="5-headtilt.png" weight="0">&lt;i&gt;(This isn't adding up entirely... but, either way...)&lt;/i&gt;</state>
+            </case>
             <case tag="male_removing_major">
                 <state img="5-satisfied2.png">Heh. An eye for an eye... clothing for clothing.</state>
                 <state img="5-satisfied2.png">Mutually assured destruction.</state>
@@ -4037,6 +4118,12 @@
                 <state img="6-idle.png">Fujisaki must be truly talented, then, if she can construct an AI that can run on such a constrained platform.</state>
                 <state img="6-idle.png">A true AI, running on such a constrained platform... your creator must be truly talented, Alter Ego. I know a few firms that could use her skills.</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0">
+                <state img="6-question.png" weight="0">Hm. So, is 'Sakura' your &lt;i&gt;real&lt;/i&gt; name, then?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="2" alsoPlayingTimeInStage="0">
+                <state img="6-guarded.png" weight="0">These sensor readings don't seem to align properly with ~sakura~... she seems more like an ELID infectee than a regular human...</state>
+            </case>
             <case tag="hand" alsoPlaying="shimakaze" saidMarker="shimakaze_rtb==1">
                 <state img="6-guarded.png" marker="shimakaze_relatable=1">I'm only offering this because of our similar backgrounds, okay? It's... nice to know someone &lt;i&gt;relatable&lt;/i&gt;, here.</state>
             </case>
@@ -4213,6 +4300,12 @@
                 <state img="6-question.png">That's not really relevant right now, though.</state>
                 <state img="6-question.png">That's not important at the moment, though.</state>
             </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2">
+                <state img="6-headtilt.png" weight="0">&lt;i&gt;(That certainly is not normal. I should keep an eye on ~sakura~.)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3">
+                <state img="6-headtilt.png" weight="0">&lt;i&gt;(This isn't adding up entirely... but, either way...)&lt;/i&gt;</state>
+            </case>
             <case tag="male_removing_major">
                 <state img="6-satisfied2.png">Heh. An eye for an eye... clothing for clothing.</state>
                 <state img="6-satisfied2.png">Mutually assured destruction.</state>
@@ -4648,6 +4741,12 @@
                 <state img="7-idle.png">Fujisaki must be truly talented, then, if she can construct an AI that can run on such a constrained platform.</state>
                 <state img="7-idle.png">A true AI, running on such a constrained platform... your creator must be truly talented, Alter Ego. I know a few firms that could use her skills.</state>
             </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="1" alsoPlayingTimeInStage="0">
+                <state img="7-question.png" weight="0">Hm. So, is 'Sakura' your &lt;i&gt;real&lt;/i&gt; name, then?</state>
+            </case>
+            <case tag="hand" alsoPlaying="sakura" alsoPlayingStage="2" alsoPlayingTimeInStage="0">
+                <state img="7-guarded.png" weight="0">These sensor readings don't seem to align properly with ~sakura~... she seems more like an ELID infectee than a regular human...</state>
+            </case>
             <case tag="hand" alsoPlaying="shimakaze" saidMarker="shimakaze_rtb==1">
                 <state img="7-guarded.png" marker="shimakaze_relatable=1">I'm only offering this because of our similar backgrounds, okay? It's... nice to know someone &lt;i&gt;relatable&lt;/i&gt;, here.</state>
             </case>
@@ -4786,6 +4885,12 @@
                 <state img="7-question.png">That's not really relevant right now, though.</state>
                 <state img="7-question.png">That's not important at the moment, though.</state>
             </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="2">
+                <state img="7-headtilt.png" weight="0">&lt;i&gt;(That certainly is not normal. I should keep an eye on ~sakura~.)&lt;/i&gt;</state>
+            </case>
+            <case tag="female_removed_minor" target="sakura" targetStage="3">
+                <state img="7-headtilt.png" weight="0">&lt;i&gt;(This isn't adding up entirely... but, either way...)&lt;/i&gt;</state>
+            </case>
             <case tag="male_removing_major">
                 <state img="7-satisfied2.png">Heh. An eye for an eye... clothing for clothing.</state>
                 <state img="7-satisfied2.png">Mutually assured destruction.</state>
diff --git a/opponents/hk416/collectibles.xml b/opponents/hk416/collectibles.xml
new file mode 100644
index 0000000000000000000000000000000000000000..773bd31f3b3afba71b9b3d8f062ca5712d5ead81
--- /dev/null
+++ b/opponents/hk416/collectibles.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<collectibles />
diff --git a/opponents/hk416/meta.xml b/opponents/hk416/meta.xml
index 7763a9bc4e47cbb1fca9175934ec50c70e541d32..c8ce86fdb7af6e5cbc73f446165caeb8c82bc739 100644
--- a/opponents/hk416/meta.xml
+++ b/opponents/hk416/meta.xml
@@ -35,4 +35,7 @@
         <tag>girls_frontline</tag>
         <tag>military</tag>
     </tags>
+    <has_collectibles>false</has_collectibles>
+    <lines>664</lines>
+    <poses>114</poses>
 </opponent>