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! (<i>It's important to make your fans feel loved, and be approachable!</i>)","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":"(<i>Keep the lid on the zombie thing… Keep a lid on the whole zombie thing...</i>)","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 <i>no</i> 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 <i>no</i> 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":"(<i>Zombies have no place in modern society... Hmm… maybe Kotaro was trying to change that! The people here look nice enough!</i>)","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... <i>(N-Now that I think about it... is that what I've been smelling?)</i></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 <i>is</i> 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"><i>(If I remember correctly... isn't Mahiru really harsh with guys? ...Uh-oh.)</i></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"><i>(S-She's been pretty quiet, hasn't she...?)</i> 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"><i>(I-I can see her underwear! O-Oh no, I hope she doesn't think I'm creepy...!)</i></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"><i>(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3" targetSaidMarker="3DN"> + <state img="0-nervous.png" weight="0"><i>(This doesn't seem right...)</i></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"><i>(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)</i></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 <i>need</i> 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"><i>(I-I still don't really get it, but...)</i> 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"><i>(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)</i></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 <i>manly?</i></state> <state img="0-angry.png" marker="kamina_meaning_of_manly=1">I <i>need</i> to know... what it means to be <i>manly.</i></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... <i>(N-Now that I think about it... is that what I've been smelling?)</i></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 <i>is</i> 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"><i>(If I remember correctly... isn't Mahiru really harsh with guys? ...Uh-oh.)</i></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"><i>(S-She's been pretty quiet, hasn't she...?)</i> 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"><i>(I-I can see her underwear! O-Oh no, I hope she doesn't think I'm creepy...!)</i></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"><i>(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3" targetSaidMarker="3DN"> + <state img="1-nervous.png" weight="0"><i>(This doesn't seem right...)</i></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"><i>(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)</i></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 <i>need</i> 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"><i>(I-I still don't really get it, but...)</i> 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"><i>(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)</i></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 <i>manly?</i></state> <state img="1-angry.png" marker="kamina_meaning_of_manly=1">I <i>need</i> to know... what it means to be <i>manly.</i></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... <i>(N-Now that I think about it... is that what I've been smelling?)</i></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 <i>is</i> 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"><i>(If I remember correctly... isn't Mahiru really harsh with guys? ...Uh-oh.)</i></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"><i>(S-She's been pretty quiet, hasn't she...?)</i> 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"><i>(I-I can see her underwear! O-Oh no, I hope she doesn't think I'm creepy...!)</i></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"><i>(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3" targetSaidMarker="3DN"> + <state img="2-nervous.png" weight="0"><i>(This doesn't seem right...)</i></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"><i>(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)</i></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 <i>need</i> 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"><i>(I-I still don't really get it, but...)</i> 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"><i>(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)</i></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 <i>manly?</i></state> <state img="2-angry.png" marker="kamina_meaning_of_manly=1">I <i>need</i> to know... what it means to be <i>manly.</i></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... <i>(N-Now that I think about it... is that what I've been smelling?)</i></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 <i>is</i> 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"><i>(If I remember correctly... isn't Mahiru really harsh with guys? ...Uh-oh.)</i></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"><i>(S-She's been pretty quiet, hasn't she...?)</i> 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"><i>(I-I can see her underwear! O-Oh no, I hope she doesn't think I'm creepy...!)</i></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"><i>(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3" targetSaidMarker="3DN"> + <state img="3-nervous.png" weight="0"><i>(This doesn't seem right...)</i></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"><i>(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)</i></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 <i>need</i> 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"><i>(I-I still don't really get it, but...)</i> 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"><i>(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)</i></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 <i>manly?</i></state> <state img="3-angry.png" marker="kamina_meaning_of_manly=1">I <i>need</i> to know... what it means to be <i>manly.</i></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... <i>(N-Now that I think about it... is that what I've been smelling?)</i></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 <i>is</i> 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"><i>(If I remember correctly... isn't Mahiru really harsh with guys? ...Uh-oh.)</i></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"><i>(S-She's been pretty quiet, hasn't she...?)</i> 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"><i>(I-I can see her underwear! O-Oh no, I hope she doesn't think I'm creepy...!)</i></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"><i>(W-Wait, w-what was that... nevermind. I guess I should just trust ~sakura~...?)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3" targetSaidMarker="3DN"> + <state img="4-nervous.png" weight="0"><i>(This doesn't seem right...)</i></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"><i>(It feels like I remember 416 from somewhere... or does she remind me of someone I know of...?)</i></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 <i>need</i> 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"><i>(I-I still don't really get it, but...)</i> 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"><i>(I-Ikusaba... right? Would it be too much of a stretch to assume they've met each other?)</i></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 <i>manly?</i></state> <state img="4-angry.png" marker="kamina_meaning_of_manly=1">I <i>need</i> to know... what it means to be <i>manly.</i></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 <i>little</i> 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! (<i>It's important to make your fans feel loved, and be approachable!</i>)","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! (<i>I can't shake the feeling she's very familiar, but... I don't know why! Think, Sakura!</i>)","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! (<i>I can't shake the feeling she's very familiar, but... I don't know why! Think, Sakura!</i>)","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 <i>play!</i>","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 <i>no</i> 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 <i>no</i> 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":"<i>Scheiße...</i>","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":"<i>Scheiße...</i>","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 <i>really</i> 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 <i>really</i> 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 <i>real</i> 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 <i>relatable</i>, 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 <i>extraordinary</i> name.</state> <state img="0-hmph.png">Hmph...this simulation appears to be trivial in any case. Regardless... I am HK416. Please, remember this <i>extraordinary</i> 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 <i>asinine</i> 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"><i>(That certainly is not normal. I should keep an eye on ~sakura~.)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3"> + <state img="0-headtilt.png" weight="0"><i>(This isn't adding up entirely... but, either way...)</i></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 <i>real</i> 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"><i>(That certainly is not normal. I should keep an eye on ~sakura~.)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3"> + <state img="1-headtilt.png" weight="0"><i>(This isn't adding up entirely... but, either way...)</i></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 <i>real</i> 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"><i>(That certainly is not normal. I should keep an eye on ~sakura~.)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3"> + <state img="2-headtilt.png" weight="0"><i>(This isn't adding up entirely... but, either way...)</i></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 <i>real</i> 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"><i>(That certainly is not normal. I should keep an eye on ~sakura~.)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3"> + <state img="3-headtilt.png" weight="0"><i>(This isn't adding up entirely... but, either way...)</i></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 <i>real</i> 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"><i>(That certainly is not normal. I should keep an eye on ~sakura~.)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3"> + <state img="4-headtilt.png" weight="0"><i>(This isn't adding up entirely... but, either way...)</i></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 <i>real</i> 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 <i>relatable</i>, 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"><i>(That certainly is not normal. I should keep an eye on ~sakura~.)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3"> + <state img="5-headtilt.png" weight="0"><i>(This isn't adding up entirely... but, either way...)</i></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 <i>real</i> 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 <i>relatable</i>, 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"><i>(That certainly is not normal. I should keep an eye on ~sakura~.)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3"> + <state img="6-headtilt.png" weight="0"><i>(This isn't adding up entirely... but, either way...)</i></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 <i>real</i> 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 <i>relatable</i>, 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"><i>(That certainly is not normal. I should keep an eye on ~sakura~.)</i></state> + </case> + <case tag="female_removed_minor" target="sakura" targetStage="3"> + <state img="7-headtilt.png" weight="0"><i>(This isn't adding up entirely... but, either way...)</i></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>